1 /* 2 * Copyright (c) 2022 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 ECMASCRIPT_COMPILER_BC_CALL_SIGNATURE_H 17 #define ECMASCRIPT_COMPILER_BC_CALL_SIGNATURE_H 18 19 #include "ecmascript/base/config.h" 20 #include "ecmascript/compiler/rt_call_signature.h" 21 22 namespace panda::ecmascript::kungfu { 23 #define IGNORE_BC_STUB(...) 24 #define ASM_UNUSED_BC_STUB_LIST(T) \ 25 T(HandleOverflowD8) \ 26 T(HandleOverflowD9) \ 27 T(HandleOverflowDA) \ 28 T(HandleOverflowDB) \ 29 T(HandleOverflowDC) \ 30 T(HandleOverflowDD) \ 31 T(HandleOverflowDE) \ 32 T(HandleOverflowDF) \ 33 T(HandleOverflowE0) \ 34 T(HandleOverflowE1) \ 35 T(HandleOverflowE2) \ 36 T(HandleOverflowE3) \ 37 T(HandleOverflowE4) \ 38 T(HandleOverflowE5) \ 39 T(HandleOverflowE6) \ 40 T(HandleOverflowE7) \ 41 T(HandleOverflowE8) \ 42 T(HandleOverflowE9) \ 43 T(HandleOverflowEA) \ 44 T(HandleOverflowEB) \ 45 T(HandleOverflowEC) \ 46 T(HandleOverflowED) \ 47 T(HandleOverflowEE) \ 48 T(HandleOverflowEF) \ 49 T(HandleOverflowF0) \ 50 T(HandleOverflowF1) \ 51 T(HandleOverflowF2) \ 52 T(HandleOverflowF3) \ 53 T(HandleOverflowF4) \ 54 T(HandleOverflowF5) \ 55 T(HandleOverflowF6) \ 56 T(HandleOverflowF7) \ 57 T(HandleOverflowF8) \ 58 T(HandleOverflowF9) \ 59 T(HandleOverflowFA) \ 60 61 62 // V: Not Enabled, T: Enabled, D: Always Disable SingleStepDebugging 63 #define ASM_INTERPRETER_BC_STUB_LIST(V, T, D) \ 64 T(HandleLdundefined) \ 65 T(HandleLdnull) \ 66 T(HandleLdtrue) \ 67 T(HandleLdfalse) \ 68 T(HandleCreateemptyobject) \ 69 T(HandleCreateemptyarrayImm8) \ 70 T(HandleCreatearraywithbufferImm8Id16) \ 71 T(HandleCreateobjectwithbufferImm8Id16) \ 72 T(HandleNewobjrangeImm8Imm8V8) \ 73 T(HandleNewlexenvImm8) \ 74 T(HandleAdd2Imm8V8) \ 75 T(HandleSub2Imm8V8) \ 76 T(HandleMul2Imm8V8) \ 77 T(HandleDiv2Imm8V8) \ 78 T(HandleMod2Imm8V8) \ 79 T(HandleEqImm8V8) \ 80 T(HandleNoteqImm8V8) \ 81 T(HandleLessImm8V8) \ 82 T(HandleLesseqImm8V8) \ 83 T(HandleGreaterImm8V8) \ 84 T(HandleGreatereqImm8V8) \ 85 T(HandleShl2Imm8V8) \ 86 T(HandleShr2Imm8V8) \ 87 T(HandleAshr2Imm8V8) \ 88 T(HandleAnd2Imm8V8) \ 89 T(HandleOr2Imm8V8) \ 90 T(HandleXor2Imm8V8) \ 91 T(HandleExpImm8V8) \ 92 T(HandleTypeofImm8) \ 93 T(HandleTonumberImm8) \ 94 T(HandleTonumericImm8) \ 95 T(HandleNegImm8) \ 96 T(HandleNotImm8) \ 97 T(HandleIncImm8) \ 98 T(HandleDecImm8) \ 99 T(HandleIstrue) \ 100 T(HandleIsfalse) \ 101 T(HandleIsinImm8V8) \ 102 T(HandleInstanceofImm8V8) \ 103 T(HandleStrictnoteqImm8V8) \ 104 T(HandleStricteqImm8V8) \ 105 D(HandleCallarg0Imm8) \ 106 D(HandleCallarg1Imm8V8) \ 107 D(HandleCallargs2Imm8V8V8) \ 108 D(HandleCallargs3Imm8V8V8V8) \ 109 D(HandleCallthis0Imm8V8) \ 110 D(HandleCallthis1Imm8V8V8) \ 111 D(HandleCallthis2Imm8V8V8V8) \ 112 D(HandleCallthis3Imm8V8V8V8V8) \ 113 D(HandleCallthisrangeImm8Imm8V8) \ 114 T(HandleSupercallthisrangeImm8Imm8V8) \ 115 T(HandleDefinefuncImm8Id16Imm8) \ 116 T(HandleDefinemethodImm8Id16Imm8) \ 117 T(HandleDefineclasswithbufferImm8Id16Id16Imm16V8) \ 118 T(HandleGetnextpropnameV8) \ 119 T(HandleLdobjbyvalueImm8V8) \ 120 T(HandleStobjbyvalueImm8V8V8) \ 121 T(HandleLdsuperbyvalueImm8V8) \ 122 T(HandleLdobjbyindexImm8Imm16) \ 123 T(HandleStobjbyindexImm8V8Imm16) \ 124 T(HandleLdlexvarImm4Imm4) \ 125 T(HandleStlexvarImm4Imm4) \ 126 T(HandleLdaStrId16) \ 127 T(HandleTryldglobalbynameImm8Id16) \ 128 T(HandleTrystglobalbynameImm8Id16) \ 129 T(HandleLdglobalvarImm16Id16) \ 130 T(HandleLdobjbynameImm8Id16) \ 131 T(HandleStobjbynameImm8Id16V8) \ 132 T(HandleMovV4V4) \ 133 T(HandleMovV8V8) \ 134 T(HandleLdsuperbynameImm8Id16) \ 135 T(HandleStconsttoglobalrecordImm16Id16) \ 136 T(HandleSttoglobalrecordImm16Id16) \ 137 T(HandleLdthisbynameImm8Id16) \ 138 T(HandleStthisbynameImm8Id16) \ 139 T(HandleLdthisbyvalueImm8) \ 140 T(HandleStthisbyvalueImm8V8) \ 141 T(HandleJmpImm8) \ 142 T(HandleJmpImm16) \ 143 T(HandleJeqzImm8) \ 144 T(HandleJeqzImm16) \ 145 T(HandleJnezImm8) \ 146 T(HandleJstricteqzImm8) \ 147 T(HandleJnstricteqzImm8) \ 148 T(HandleJeqnullImm8) \ 149 T(HandleJnenullImm8) \ 150 T(HandleJstricteqnullImm8) \ 151 T(HandleJnstricteqnullImm8) \ 152 T(HandleJequndefinedImm8) \ 153 T(HandleJneundefinedImm8) \ 154 T(HandleJstrictequndefinedImm8) \ 155 T(HandleJnstrictequndefinedImm8) \ 156 T(HandleJeqV8Imm8) \ 157 T(HandleJneV8Imm8) \ 158 T(HandleJstricteqV8Imm8) \ 159 T(HandleJnstricteqV8Imm8) \ 160 T(HandleLdaV8) \ 161 T(HandleStaV8) \ 162 T(HandleLdaiImm32) \ 163 T(HandleFldaiImm64) \ 164 T(HandleReturn) \ 165 T(HandleReturnundefined) \ 166 T(HandleGetpropiterator) \ 167 T(HandleGetiteratorImm8) \ 168 T(HandleCloseiteratorImm8V8) \ 169 T(HandlePoplexenv) \ 170 T(HandleLdnan) \ 171 T(HandleLdinfinity) \ 172 T(HandleGetunmappedargs) \ 173 T(HandleLdglobal) \ 174 T(HandleLdnewtarget) \ 175 T(HandleLdthis) \ 176 T(HandleLdhole) \ 177 T(HandleCreateregexpwithliteralImm8Id16Imm8) \ 178 T(HandleCreateregexpwithliteralImm16Id16Imm8) \ 179 D(HandleCallrangeImm8Imm8V8) \ 180 T(HandleDefinefuncImm16Id16Imm8) \ 181 T(HandleDefineclasswithbufferImm16Id16Id16Imm16V8) \ 182 T(HandleGettemplateobjectImm8) \ 183 T(HandleSetobjectwithprotoImm8V8) \ 184 T(HandleStownbyvalueImm8V8V8) \ 185 T(HandleStownbyindexImm8V8Imm16) \ 186 T(HandleStownbynameImm8Id16V8) \ 187 T(HandleGetmodulenamespaceImm8) \ 188 T(HandleStmodulevarImm8) \ 189 T(HandleLdlocalmodulevarImm8) \ 190 T(HandleLdexternalmodulevarImm8) \ 191 T(HandleStglobalvarImm16Id16) \ 192 T(HandleCreateemptyarrayImm16) \ 193 T(HandleCreatearraywithbufferImm16Id16) \ 194 T(HandleCreateobjectwithbufferImm16Id16) \ 195 T(HandleNewobjrangeImm16Imm8V8) \ 196 T(HandleTypeofImm16) \ 197 T(HandleLdobjbyvalueImm16V8) \ 198 T(HandleStobjbyvalueImm16V8V8) \ 199 T(HandleLdsuperbyvalueImm16V8) \ 200 T(HandleLdobjbyindexImm16Imm16) \ 201 T(HandleStobjbyindexImm16V8Imm16) \ 202 T(HandleLdlexvarImm8Imm8) \ 203 T(HandleStlexvarImm8Imm8) \ 204 T(HandleTryldglobalbynameImm16Id16) \ 205 T(HandleTrystglobalbynameImm16Id16) \ 206 T(HandleStownbynamewithnamesetImm8Id16V8) \ 207 T(HandleMovV16V16) \ 208 T(HandleLdobjbynameImm16Id16) \ 209 T(HandleStobjbynameImm16Id16V8) \ 210 T(HandleLdsuperbynameImm16Id16) \ 211 T(HandleLdthisbynameImm16Id16) \ 212 T(HandleStthisbynameImm16Id16) \ 213 T(HandleLdthisbyvalueImm16) \ 214 T(HandleStthisbyvalueImm16V8) \ 215 T(HandleAsyncgeneratorrejectV8) \ 216 T(HandleJmpImm32) \ 217 T(HandleStownbyvaluewithnamesetImm8V8V8) \ 218 T(HandleJeqzImm32) \ 219 T(HandleJnezImm16) \ 220 T(HandleJnezImm32) \ 221 T(HandleJstricteqzImm16) \ 222 T(HandleJnstricteqzImm16) \ 223 T(HandleJeqnullImm16) \ 224 T(HandleJnenullImm16) \ 225 T(HandleJstricteqnullImm16) \ 226 T(HandleJnstricteqnullImm16) \ 227 T(HandleJequndefinedImm16) \ 228 T(HandleJneundefinedImm16) \ 229 T(HandleJstrictequndefinedImm16) \ 230 T(HandleJnstrictequndefinedImm16) \ 231 T(HandleJeqV8Imm16) \ 232 T(HandleJneV8Imm16) \ 233 T(HandleJstricteqV8Imm16) \ 234 T(HandleJnstricteqV8Imm16) \ 235 T(HandleGetiteratorImm16) \ 236 T(HandleCloseiteratorImm16V8) \ 237 T(HandleLdsymbol) \ 238 T(HandleAsyncfunctionenter) \ 239 T(HandleLdfunction) \ 240 T(HandleDebugger) \ 241 T(HandleCreategeneratorobjV8) \ 242 T(HandleCreateiterresultobjV8V8) \ 243 T(HandleCreateobjectwithexcludedkeysImm8V8V8) \ 244 T(HandleNewobjapplyImm8V8) \ 245 T(HandleNewobjapplyImm16V8) \ 246 T(HandleNewlexenvwithnameImm8Id16) \ 247 T(HandleCreateasyncgeneratorobjV8) \ 248 T(HandleAsyncgeneratorresolveV8V8V8) \ 249 T(HandleSupercallspreadImm8V8) \ 250 T(HandleApplyImm8V8V8) \ 251 T(HandleSupercallarrowrangeImm8Imm8V8) \ 252 T(HandleDefinegettersetterbyvalueV8V8V8V8) \ 253 T(HandleDynamicimport) \ 254 T(HandleDefinemethodImm16Id16Imm8) \ 255 T(HandleResumegenerator) \ 256 T(HandleGetresumemode) \ 257 T(HandleGettemplateobjectImm16) \ 258 T(HandleDelobjpropV8) \ 259 T(HandleSuspendgeneratorV8) \ 260 T(HandleAsyncfunctionawaituncaughtV8) \ 261 T(HandleCopydatapropertiesV8) \ 262 T(HandleStarrayspreadV8V8) \ 263 T(HandleSetobjectwithprotoImm16V8) \ 264 T(HandleStownbyvalueImm16V8V8) \ 265 T(HandleStsuperbyvalueImm8V8V8) \ 266 T(HandleStsuperbyvalueImm16V8V8) \ 267 T(HandleStownbyindexImm16V8Imm16) \ 268 T(HandleStownbynameImm16Id16V8) \ 269 T(HandleAsyncfunctionresolveV8) \ 270 T(HandleAsyncfunctionrejectV8) \ 271 T(HandleCopyrestargsImm8) \ 272 T(HandleStsuperbynameImm8Id16V8) \ 273 T(HandleStsuperbynameImm16Id16V8) \ 274 T(HandleStownbyvaluewithnamesetImm16V8V8) \ 275 T(HandleLdbigintId16) \ 276 T(HandleStownbynamewithnamesetImm16Id16V8) \ 277 T(HandleNop) \ 278 T(HandleSetgeneratorstateImm8) \ 279 T(HandleGetasynciteratorImm8) \ 280 ASM_UNUSED_BC_STUB_LIST(T) \ 281 T(HandleCallRuntime) \ 282 T(HandleDeprecated) \ 283 T(HandleWide) \ 284 T(HandleThrow) \ 285 D(ExceptionHandler) 286 287 // V: Not Enabled, T: Enabled, D: Always Disable SingleStepDebugging 288 #define ASM_INTERPRETER_DEPRECATED_STUB_LIST(V, T, D) \ 289 T(HandleDeprecatedLdlexenvPrefNone) \ 290 T(HandleDeprecatedPoplexenvPrefNone) \ 291 T(HandleDeprecatedGetiteratornextPrefV8V8) \ 292 T(HandleDeprecatedCreatearraywithbufferPrefImm16) \ 293 T(HandleDeprecatedCreateobjectwithbufferPrefImm16) \ 294 T(HandleDeprecatedTonumberPrefV8) \ 295 T(HandleDeprecatedTonumericPrefV8) \ 296 T(HandleDeprecatedNegPrefV8) \ 297 T(HandleDeprecatedNotPrefV8) \ 298 T(HandleDeprecatedIncPrefV8) \ 299 T(HandleDeprecatedDecPrefV8) \ 300 D(HandleDeprecatedCallarg0PrefV8) \ 301 D(HandleDeprecatedCallarg1PrefV8V8) \ 302 D(HandleDeprecatedCallargs2PrefV8V8V8) \ 303 D(HandleDeprecatedCallargs3PrefV8V8V8V8) \ 304 D(HandleDeprecatedCallrangePrefImm16V8) \ 305 D(HandleDeprecatedCallspreadPrefV8V8V8) \ 306 D(HandleDeprecatedCallthisrangePrefImm16V8) \ 307 T(HandleDeprecatedDefineclasswithbufferPrefId16Imm16Imm16V8V8) \ 308 T(HandleDeprecatedResumegeneratorPrefV8) \ 309 T(HandleDeprecatedGetresumemodePrefV8) \ 310 T(HandleDeprecatedGettemplateobjectPrefV8) \ 311 T(HandleDeprecatedDelobjpropPrefV8V8) \ 312 T(HandleDeprecatedSuspendgeneratorPrefV8V8) \ 313 T(HandleDeprecatedAsyncfunctionawaituncaughtPrefV8V8) \ 314 T(HandleDeprecatedCopydatapropertiesPrefV8V8) \ 315 T(HandleDeprecatedSetobjectwithprotoPrefV8V8) \ 316 T(HandleDeprecatedLdobjbyvaluePrefV8V8) \ 317 T(HandleDeprecatedLdsuperbyvaluePrefV8V8) \ 318 T(HandleDeprecatedLdobjbyindexPrefV8Imm32) \ 319 T(HandleDeprecatedAsyncfunctionresolvePrefV8V8V8) \ 320 T(HandleDeprecatedAsyncfunctionrejectPrefV8V8V8) \ 321 T(HandleDeprecatedStlexvarPrefImm4Imm4V8) \ 322 T(HandleDeprecatedStlexvarPrefImm8Imm8V8) \ 323 T(HandleDeprecatedStlexvarPrefImm16Imm16V8) \ 324 T(HandleDeprecatedGetmodulenamespacePrefId32) \ 325 T(HandleDeprecatedStmodulevarPrefId32) \ 326 T(HandleDeprecatedLdobjbynamePrefId32V8) \ 327 T(HandleDeprecatedLdsuperbynamePrefId32V8) \ 328 T(HandleDeprecatedLdmodulevarPrefId32Imm8) \ 329 T(HandleDeprecatedStconsttoglobalrecordPrefId32) \ 330 T(HandleDeprecatedStlettoglobalrecordPrefId32) \ 331 T(HandleDeprecatedStclasstoglobalrecordPrefId32) \ 332 T(HandleDeprecatedLdhomeobjectPrefNone) \ 333 T(HandleDeprecatedCreateobjecthavingmethodPrefImm16) \ 334 T(HandleDeprecatedDynamicimportPrefV8) \ 335 T(HandleDeprecatedAsyncgeneratorrejectPrefV8V8) 336 337 // V: Not Enabled, T: Enabled, D: Always Disable SingleStepDebugging 338 #define ASM_INTERPRETER_WIDE_STUB_LIST(V, T, D) \ 339 T(HandleWideCreateobjectwithexcludedkeysPrefImm16V8V8) \ 340 T(HandleWideNewobjrangePrefImm16V8) \ 341 T(HandleWideNewlexenvPrefImm16) \ 342 T(HandleWideNewlexenvwithnamePrefImm16Id16) \ 343 D(HandleWideCallrangePrefImm16V8) \ 344 D(HandleWideCallthisrangePrefImm16V8) \ 345 T(HandleWideSupercallthisrangePrefImm16V8) \ 346 T(HandleWideSupercallarrowrangePrefImm16V8) \ 347 T(HandleWideLdobjbyindexPrefImm32) \ 348 T(HandleWideStobjbyindexPrefV8Imm32) \ 349 T(HandleWideStownbyindexPrefV8Imm32) \ 350 T(HandleWideCopyrestargsPrefImm16) \ 351 T(HandleWideLdlexvarPrefImm16Imm16) \ 352 T(HandleWideStlexvarPrefImm16Imm16) \ 353 T(HandleWideGetmodulenamespacePrefImm16) \ 354 T(HandleWideStmodulevarPrefImm16) \ 355 T(HandleWideLdlocalmodulevarPrefImm16) \ 356 T(HandleWideLdexternalmodulevarPrefImm16) \ 357 T(HandleWideLdpatchvarPrefImm16) \ 358 T(HandleWideStpatchvarPrefImm16) 359 360 // V: Not Enabled, T: Enabled, D: Always Disable SingleStepDebugging 361 #define ASM_INTERPRETER_THROW_STUB_LIST(V, T, D) \ 362 T(HandleThrowPrefNone) \ 363 T(HandleThrowNotexistsPrefNone) \ 364 T(HandleThrowPatternnoncoerciblePrefNone) \ 365 T(HandleThrowDeletesuperpropertyPrefNone) \ 366 T(HandleThrowConstassignmentPrefV8) \ 367 T(HandleThrowIfnotobjectPrefV8) \ 368 T(HandleThrowUndefinedifholePrefV8V8) \ 369 T(HandleThrowIfsupernotcorrectcallPrefImm8) \ 370 T(HandleThrowIfsupernotcorrectcallPrefImm16) \ 371 T(HandleThrowUndefinedifholewithnamePrefId16) 372 373 // V: Not Enabled, T: Enabled, D: Always Disable SingleStepDebugging 374 #define ASM_INTERPRETER_CALLRUNTIME_STUB_LIST(V, T, D) \ 375 T(HandleCallRuntimeNotifyConcurrentResultPrefNone) \ 376 377 #define ASM_INTERPRETER_BC_HELPER_STUB_LIST(V) \ 378 V(SingleStepDebugging) \ 379 V(BCDebuggerEntry) \ 380 V(BCDebuggerExceptionEntry) \ 381 V(NewObjectRangeThrowException) \ 382 V(ThrowStackOverflowException) 383 384 #define INTERPRETER_DISABLE_SINGLE_STEP_DEBUGGING_BC_STUB_LIST(V) \ 385 ASM_INTERPRETER_BC_STUB_LIST(IGNORE_BC_STUB, IGNORE_BC_STUB, V) \ 386 ASM_INTERPRETER_DEPRECATED_STUB_LIST(IGNORE_BC_STUB, IGNORE_BC_STUB, V) \ 387 ASM_INTERPRETER_WIDE_STUB_LIST(IGNORE_BC_STUB, IGNORE_BC_STUB, V) \ 388 ASM_INTERPRETER_THROW_STUB_LIST(IGNORE_BC_STUB, IGNORE_BC_STUB, V) \ 389 ASM_INTERPRETER_CALLRUNTIME_STUB_LIST(IGNORE_BC_STUB, IGNORE_BC_STUB, V) 390 391 #define INTERPRETER_BC_STUB_LIST(V) \ 392 ASM_INTERPRETER_BC_STUB_LIST(IGNORE_BC_STUB, V, V) \ 393 ASM_INTERPRETER_DEPRECATED_STUB_LIST(IGNORE_BC_STUB, V, V) \ 394 ASM_INTERPRETER_WIDE_STUB_LIST(IGNORE_BC_STUB, V, V) \ 395 ASM_INTERPRETER_THROW_STUB_LIST(IGNORE_BC_STUB, V, V) \ 396 ASM_INTERPRETER_CALLRUNTIME_STUB_LIST(IGNORE_BC_STUB, V, V) 397 398 #define ASM_INTERPRETER_BC_STUB_ID_LIST(V) \ 399 ASM_INTERPRETER_BC_STUB_LIST(V, V, V) 400 401 #define ASM_INTERPRETER_SECOND_BC_STUB_ID_LIST(V) \ 402 ASM_INTERPRETER_WIDE_STUB_LIST(V, V, V) \ 403 ASM_INTERPRETER_THROW_STUB_LIST(V, V, V) \ 404 ASM_INTERPRETER_DEPRECATED_STUB_LIST(V, V, V) \ 405 ASM_INTERPRETER_CALLRUNTIME_STUB_LIST(V, V, V) 406 407 class BytecodeStubCSigns { 408 public: 409 // is uint8 max 410 static constexpr size_t LAST_VALID_OPCODE = 0xFF; 411 // all valid stub, include normal and helper stub 412 enum ValidID { 413 #define DEF_VALID_BC_STUB_ID(name) name, 414 INTERPRETER_BC_STUB_LIST(DEF_VALID_BC_STUB_ID) 415 ASM_INTERPRETER_BC_HELPER_STUB_LIST(DEF_VALID_BC_STUB_ID) 416 #undef DEF_VALID_BC_STUB_ID 417 NUM_OF_VALID_STUBS 418 }; 419 420 #define DEF_BC_STUB_ID(name) PREF_ID_##name, 421 enum WideID { 422 ASM_INTERPRETER_WIDE_STUB_LIST(DEF_BC_STUB_ID, DEF_BC_STUB_ID, DEF_BC_STUB_ID) 423 NUM_OF_WIDE_STUBS 424 }; 425 enum ThrowID { 426 ASM_INTERPRETER_THROW_STUB_LIST(DEF_BC_STUB_ID, DEF_BC_STUB_ID, DEF_BC_STUB_ID) 427 NUM_OF_THROW_STUBS 428 }; 429 enum DeprecatedID { 430 ASM_INTERPRETER_DEPRECATED_STUB_LIST(DEF_BC_STUB_ID, DEF_BC_STUB_ID, DEF_BC_STUB_ID) 431 NUM_OF_DEPRECATED_STUBS 432 }; 433 enum CallRuntimeID { 434 ASM_INTERPRETER_CALLRUNTIME_STUB_LIST(DEF_BC_STUB_ID, DEF_BC_STUB_ID, DEF_BC_STUB_ID) 435 NUM_OF_CALLRUNTIME_STUBS 436 }; 437 #undef DEF_BC_STUB_ID 438 439 #define DEF_BC_STUB_ID(name) ID_##name, 440 enum ID { 441 ASM_INTERPRETER_BC_STUB_ID_LIST(DEF_BC_STUB_ID) 442 NUM_OF_ALL_NORMAL_STUBS, 443 lastOpcode = LAST_VALID_OPCODE, // last Opcode is max opcode size 444 ASM_INTERPRETER_SECOND_BC_STUB_ID_LIST(DEF_BC_STUB_ID) 445 ASM_INTERPRETER_BC_HELPER_STUB_LIST(DEF_BC_STUB_ID) 446 NUM_OF_STUBS, 447 ID_Wide_Start = lastOpcode + 1, 448 ID_Throw_Start = ID_Wide_Start + NUM_OF_WIDE_STUBS, 449 ID_Deprecated_Start = ID_Throw_Start + NUM_OF_THROW_STUBS, 450 ID_CallRuntime_Start = ID_Deprecated_Start + NUM_OF_DEPRECATED_STUBS 451 }; 452 #undef DEF_BC_STUB_ID 453 454 static void Initialize(); 455 456 static void GetCSigns(std::vector<const CallSignature*>& outCSigns); 457 Get(size_t index)458 static const CallSignature* Get(size_t index) 459 { 460 ASSERT(index < NUM_OF_VALID_STUBS); 461 return &callSigns_[index]; 462 } 463 BCDebuggerHandler()464 static const CallSignature* BCDebuggerHandler() 465 { 466 return &bcDebuggerHandlerCSign_; 467 } 468 BCHandler()469 static const CallSignature* BCHandler() 470 { 471 return &bcHandlerCSign_; 472 } 473 474 private: 475 static CallSignature callSigns_[NUM_OF_VALID_STUBS]; 476 static CallSignature bcHandlerCSign_; 477 static CallSignature bcDebuggerHandlerCSign_; 478 }; 479 480 enum class InterpreterHandlerInputs : size_t { 481 GLUE = 0, 482 SP, 483 PC, 484 CONSTPOOL, 485 PROFILE_TYPE_INFO, 486 ACC, 487 HOTNESS_COUNTER, 488 NUM_OF_INPUTS 489 }; 490 491 enum class CallDispatchInputs : size_t { 492 GLUE = 0, 493 SP, 494 CALL_TARGET, 495 METHOD, 496 CALL_FIELD, 497 ARG0, 498 ARG1, 499 ARG2, 500 ARG3, 501 NUM_OF_INPUTS, 502 503 ARGC = ARG0, 504 ARGV = ARG1, 505 }; 506 507 #define BYTECODE_STUB_END_ID BytecodeStubCSigns::ID_ExceptionHandler 508 #define BCSTUB_ID(name) kungfu::BytecodeStubCSigns::ID_##name 509 } // namespace panda::ecmascript::kungfu 510 #endif // ECMASCRIPT_COMPILER_BC_CALL_SIGNATURE_H 511