1 /* 2 * Copyright (c) 2021 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_CALL_SIGNATURE_H 17 #define ECMASCRIPT_COMPILER_CALL_SIGNATURE_H 18 19 #include <array> 20 #include <functional> 21 #include <memory> 22 23 #include "ecmascript/compiler/variable_type.h" 24 25 #include "libpandabase/macros.h" 26 #include "libpandabase/utils/bit_field.h" 27 28 namespace panda::ecmascript::kungfu { 29 class Circuit; 30 31 enum class ArgumentsOrder { 32 DEFAULT_ORDER, // Push Arguments in stack from right -> left 33 }; 34 35 class CallSignature { 36 public: 37 using TargetConstructor = std::function<void *(void *)>; 38 enum class TargetKind : uint8_t { 39 COMMON_STUB = 0, 40 RUNTIME_STUB, 41 RUNTIME_STUB_VARARGS, 42 RUNTIME_STUB_NO_GC, 43 ASM_CALL_BARRIER_STUB, 44 OPTIMIZED_STUB, 45 OPTIMIZED_FAST_CALL_STUB, 46 DEOPT_STUB, 47 BYTECODE_HANDLER, 48 BYTECODE_DEBUGGER_HANDLER, 49 BYTECODE_HELPER_HANDLER, 50 BYTECODE_PROFILE_HANDLER, 51 BYTECODE_JIT_PROFILE_HANDLER, 52 BYTECODE_STW_COPY_HANDLER, 53 JSFUNCTION, 54 BUILTINS_STUB, 55 BUILTINS_WITH_ARGV_STUB, 56 BASELINE_STUB, 57 COMMON_STW_COPY_STUB, 58 BUILTINS_STW_COPY_STUB, 59 60 STUB_BEGIN = COMMON_STUB, 61 STUB_END = BYTECODE_HANDLER, 62 BCHANDLER_BEGIN = BYTECODE_HANDLER, 63 BCHANDLER_END = JSFUNCTION 64 }; 65 enum class CallConv: uint8_t { 66 CCallConv = 0, 67 GHCCallConv = 1, 68 WebKitJSCallConv = 2, 69 }; 70 // ParamAttr only works for LLVM backend. 71 enum class ParamAttr: uint8_t { 72 NoAttr = 0, 73 Dead 74 }; 75 static constexpr size_t TARGET_KIND_BIT_LENGTH = 5; 76 static constexpr size_t CALL_CONV_BIT_LENGTH = 2; 77 using TargetKindBit = panda::BitField<TargetKind, 0, TARGET_KIND_BIT_LENGTH>; 78 using CallConvBit = TargetKindBit::NextField<CallConv, CALL_CONV_BIT_LENGTH>; 79 using VariadicArgsBit = CallConvBit::NextField<bool, 1>; 80 using TailCallBit = VariadicArgsBit::NextField<bool, 1>; 81 using NoTailCallBit = TailCallBit::NextField<bool, 1>; 82 using GCLeafFunctionBit = NoTailCallBit::NextField<bool, 1>; 83 CallSignature(std::string name,int flags,size_t paramCounter,ArgumentsOrder order,VariableType returnType)84 CallSignature(std::string name, int flags, size_t paramCounter, ArgumentsOrder order, 85 VariableType returnType) 86 : name_(name), paramCounter_(paramCounter), order_(order), returnType_(returnType) 87 { 88 SetTargetKind(TargetKind::COMMON_STUB); 89 SetCallConv(CallSignature::CallConv::CCallConv); 90 SetTailCall(false); 91 SetNoTailCall(false); 92 SetGCLeafFunction(false); 93 SetVariadicArgs(flags); 94 } 95 CallSignature(std::string name,int flags,ArgumentsOrder order,VariableType returnType,std::initializer_list<VariableType> params)96 CallSignature(std::string name, int flags, ArgumentsOrder order, VariableType returnType, 97 std::initializer_list<VariableType> params) 98 : CallSignature(std::move(name), flags, params.size(), order, returnType) 99 { 100 paramsType_ = std::make_unique<std::vector<VariableType>>(params); 101 } 102 103 CallSignature() = default; 104 105 ~CallSignature() = default; 106 CallSignature(CallSignature const & other)107 CallSignature(CallSignature const &other) 108 { 109 name_ = other.name_; 110 paramCounter_ = other.paramCounter_; 111 order_ = other.order_; 112 id_ = other.id_; 113 returnType_ = other.returnType_; 114 constructor_ = other.constructor_; 115 if (paramCounter_ > 0 && other.paramsType_ != nullptr) { 116 paramsType_ = std::make_unique<std::vector<VariableType>>(paramCounter_); 117 for (size_t i = 0; i < paramCounter_; i++) { 118 (*paramsType_)[i] = other.GetParametersType()[i]; 119 } 120 } 121 kind_ = other.kind_; 122 } 123 124 CallSignature &operator=(CallSignature const &other) 125 { 126 name_ = other.name_; 127 paramCounter_ = other.paramCounter_; 128 order_ = other.order_; 129 id_ = other.id_; 130 returnType_ = other.returnType_; 131 constructor_ = other.constructor_; 132 if (paramCounter_ > 0 && other.paramsType_ != nullptr) { 133 paramsType_ = std::make_unique<std::vector<VariableType>>(paramCounter_); 134 for (size_t i = 0; i < paramCounter_; i++) { 135 (*paramsType_)[i] = other.GetParametersType()[i]; 136 } 137 } 138 kind_ = other.kind_; 139 return *this; 140 } 141 IsCommonStub()142 bool IsCommonStub() const 143 { 144 return (GetTargetKind() == TargetKind::COMMON_STUB); 145 } 146 IsRuntimeVAStub()147 bool IsRuntimeVAStub() const 148 { 149 return (GetTargetKind() == TargetKind::RUNTIME_STUB_VARARGS); 150 } 151 IsRuntimeStub()152 bool IsRuntimeStub() const 153 { 154 return (GetTargetKind() == TargetKind::RUNTIME_STUB); 155 } 156 IsASMCallBarrierStub()157 bool IsASMCallBarrierStub() const 158 { 159 return (GetTargetKind() == TargetKind::ASM_CALL_BARRIER_STUB); 160 } 161 IsRuntimeNGCStub()162 bool IsRuntimeNGCStub() const 163 { 164 return (GetTargetKind() == TargetKind::RUNTIME_STUB_NO_GC); 165 } 166 IsOptimizedStub()167 bool IsOptimizedStub() const 168 { 169 return (GetTargetKind() == TargetKind::OPTIMIZED_STUB); 170 } 171 IsOptimizedFastCallStub()172 bool IsOptimizedFastCallStub() const 173 { 174 return (GetTargetKind() == TargetKind::OPTIMIZED_FAST_CALL_STUB); 175 } 176 IsBCDebuggerStub()177 bool IsBCDebuggerStub() const 178 { 179 return (GetTargetKind() == TargetKind::BYTECODE_DEBUGGER_HANDLER); 180 } 181 IsStub()182 bool IsStub() const 183 { 184 TargetKind targetKind = GetTargetKind(); 185 return TargetKind::STUB_BEGIN <= targetKind && targetKind < TargetKind::STUB_END; 186 } 187 IsBCStub()188 bool IsBCStub() const 189 { 190 TargetKind targetKind = GetTargetKind(); 191 return TargetKind::BCHANDLER_BEGIN <= targetKind && targetKind < TargetKind::BCHANDLER_END; 192 } 193 IsBuiltinsStub()194 bool IsBuiltinsStub() const 195 { 196 return (GetTargetKind() == TargetKind::BUILTINS_STUB); 197 } 198 IsBuiltinsWithArgvStub()199 bool IsBuiltinsWithArgvStub() const 200 { 201 return (GetTargetKind() == TargetKind::BUILTINS_WITH_ARGV_STUB); 202 } 203 IsBCHandlerStub()204 bool IsBCHandlerStub() const 205 { 206 return (GetTargetKind() == TargetKind::BYTECODE_HANDLER); 207 } 208 IsDeoptStub()209 bool IsDeoptStub() const 210 { 211 return (GetTargetKind() == TargetKind::DEOPT_STUB); 212 } 213 IsBaselineStub()214 bool IsBaselineStub() const 215 { 216 return (GetTargetKind() == TargetKind::BASELINE_STUB); 217 } 218 SetParameters(VariableType * paramsType)219 void SetParameters(VariableType *paramsType) 220 { 221 if (paramCounter_ > 0 && paramsType_ == nullptr) { 222 paramsType_ = std::make_unique<std::vector<VariableType>>(paramCounter_); 223 for (size_t i = 0; i < paramCounter_; i++) { 224 (*paramsType_)[i] = paramsType[i]; 225 } 226 } 227 } 228 GetParametersType()229 VariableType *GetParametersType() const 230 { 231 if (paramsType_ != nullptr) { 232 return paramsType_->data(); 233 } else { 234 return nullptr; 235 } 236 } 237 SetParamAttr(std::vector<ParamAttr> && paramAttr)238 void SetParamAttr(std::vector<ParamAttr> &¶mAttr) 239 { 240 if (paramCounter_ > 0 && paramsAttr_ == nullptr) { 241 paramsAttr_ = std::make_unique<std::vector<ParamAttr>>(paramAttr); 242 } 243 } 244 GetParamAttr()245 std::vector<ParamAttr> *GetParamAttr() const 246 { 247 if (paramsAttr_ != nullptr) { 248 return paramsAttr_.get(); 249 } else { 250 return nullptr; 251 } 252 } 253 GetParametersCount()254 size_t GetParametersCount() const 255 { 256 return paramCounter_; 257 } 258 GetReturnType()259 VariableType GetReturnType() const 260 { 261 return returnType_; 262 } 263 GetArgumentsOrder()264 ArgumentsOrder GetArgumentsOrder() const 265 { 266 return order_; 267 } 268 IsVariadicArgs()269 bool IsVariadicArgs() const 270 { 271 return VariadicArgsBit::Decode(kind_); 272 } 273 SetVariadicArgs(bool variable)274 void SetVariadicArgs(bool variable) 275 { 276 VariadicArgsBit::Set<uint64_t>(variable, &kind_); 277 } 278 SetNoTailCall(bool noTailCall)279 void SetNoTailCall(bool noTailCall) 280 { 281 NoTailCallBit::Set<uint64_t>(noTailCall, &kind_); 282 } 283 IsNoTailCall()284 bool IsNoTailCall() const 285 { 286 return NoTailCallBit::Decode(kind_); 287 } 288 SetTailCall(bool tailCall)289 void SetTailCall(bool tailCall) 290 { 291 TailCallBit::Set<uint64_t>(tailCall, &kind_); 292 } 293 GetTailCall()294 bool GetTailCall() const 295 { 296 return TailCallBit::Decode(kind_); 297 } 298 299 // When setting this flag to true 300 // ensure the function doesn't cause GC, 301 // throw exceptions, or lead to LAZY deopt. SetGCLeafFunction(bool value)302 void SetGCLeafFunction(bool value) 303 { 304 GCLeafFunctionBit::Set<uint64_t>(value, &kind_); 305 } 306 GetGCLeafFunction()307 bool GetGCLeafFunction() const 308 { 309 return GCLeafFunctionBit::Decode(kind_); 310 } 311 GetTargetKind()312 TargetKind GetTargetKind() const 313 { 314 return TargetKindBit::Decode(kind_); 315 } 316 SetTargetKind(TargetKind kind)317 void SetTargetKind(TargetKind kind) 318 { 319 TargetKindBit::Set<uint64_t>(kind, &kind_); 320 } 321 GetCallConv()322 CallConv GetCallConv() const 323 { 324 return CallConvBit::Decode(kind_); 325 } 326 SetCallConv(CallConv cc)327 void SetCallConv(CallConv cc) 328 { 329 CallConvBit::Set<uint64_t>(cc, &kind_); 330 } 331 GetName()332 const std::string &GetName() const 333 { 334 return name_; 335 } 336 SetName(const std::string & str)337 void SetName(const std::string &str) 338 { 339 name_ = str; 340 } 341 SetConstructor(TargetConstructor ctor)342 void SetConstructor(TargetConstructor ctor) 343 { 344 constructor_ = ctor; 345 } 346 GetConstructor()347 TargetConstructor GetConstructor() const 348 { 349 return constructor_; 350 } 351 HasConstructor()352 bool HasConstructor() const 353 { 354 return constructor_ != nullptr; 355 } 356 GetID()357 int GetID() const 358 { 359 return id_; 360 } 361 SetID(int id)362 void SetID(int id) 363 { 364 id_ = id; 365 } 366 IsStwCopyStub()367 bool IsStwCopyStub() const 368 { 369 return isStwCopyStub_; 370 } 371 SetStwCopyStub(bool flag)372 void SetStwCopyStub(bool flag) 373 { 374 isStwCopyStub_ = flag; 375 } 376 377 private: 378 std::string name_; 379 size_t paramCounter_ {0}; 380 int id_ {-1}; 381 ArgumentsOrder order_ {ArgumentsOrder::DEFAULT_ORDER}; 382 VariableType returnType_ {VariableType::VOID()}; 383 std::unique_ptr<std::vector<VariableType>> paramsType_ {nullptr}; 384 std::unique_ptr<std::vector<ParamAttr>> paramsAttr_ {nullptr}; 385 TargetConstructor constructor_ {nullptr}; 386 uint64_t kind_ {0}; 387 bool isStwCopyStub_ {false}; 388 }; 389 390 #define EXPLICIT_CALL_SIGNATURE_LIST(V) \ 391 V(Add) \ 392 V(Sub) \ 393 V(Mul) \ 394 V(MulGCTest) \ 395 V(Div) \ 396 V(Mod) \ 397 V(TypeOf) \ 398 V(Equal) \ 399 V(NotEqual) \ 400 V(StrictEqual) \ 401 V(StrictNotEqual) \ 402 V(Less) \ 403 V(LessEq) \ 404 V(Greater) \ 405 V(GreaterEq) \ 406 V(Shl) \ 407 V(Shr) \ 408 V(Ashr) \ 409 V(And) \ 410 V(Or) \ 411 V(Xor) \ 412 V(IsIn) \ 413 V(Instanceof) \ 414 V(OrdinaryHasInstance) \ 415 V(Inc) \ 416 V(Dec) \ 417 V(Neg) \ 418 V(Not) \ 419 V(ToBooleanTrue) \ 420 V(ToBooleanFalse) \ 421 V(SetPropertyByName) \ 422 V(DeprecatedSetPropertyByName) \ 423 V(SetPropertyByNameWithOwn) \ 424 V(SetPropertyByValue) \ 425 V(DeprecatedSetPropertyByValue) \ 426 V(TryLdGlobalByName) \ 427 V(TryStGlobalByName) \ 428 V(LdGlobalVar) \ 429 V(StGlobalVar) \ 430 V(StOwnByIndex) \ 431 V(StOwnByValue) \ 432 V(StOwnByName) \ 433 V(StOwnByValueWithNameSet) \ 434 V(StOwnByNameWithNameSet) \ 435 V(StObjByIndex) \ 436 V(LdObjByIndex) \ 437 V(JSTaggedValueHasProperty) \ 438 V(SetPropertyByValueWithOwn) \ 439 V(GetPropertyByName) \ 440 V(SetPropertyByNameWithMega) \ 441 V(GetPropertyByNameWithMega) \ 442 V(DeprecatedGetPropertyByName) \ 443 V(GetPropertyByIndex) \ 444 V(SetPropertyByIndex) \ 445 V(SetPropertyByIndexWithOwn) \ 446 V(GetPropertyByValue) \ 447 V(DeprecatedGetPropertyByValue) \ 448 V(TryLoadICByName) \ 449 V(TryLoadICByValue) \ 450 V(TryStoreICByName) \ 451 V(TryStoreICByValue) \ 452 V(SetValueWithBarrier) \ 453 V(SetNonSValueWithBarrier) \ 454 V(SetSValueWithBarrier) \ 455 V(NewLexicalEnv) \ 456 V(CopyRestArgs) \ 457 V(CreateObjectHavingMethod) \ 458 V(GetUnmappedArgs) \ 459 V(GetCallSpreadArgs) \ 460 V(NewThisObjectChecked) \ 461 V(ConstructorCheck) \ 462 V(CreateEmptyArray) \ 463 V(CreateArrayWithBuffer) \ 464 V(NewJSObject) \ 465 V(FastNewThisObject) \ 466 V(FastSuperAllocateThis) \ 467 V(GetTaggedArrayPtrTest) \ 468 V(BytecodeHandler) \ 469 V(Builtins) \ 470 V(BuiltinsWithArgv) \ 471 V(BytecodeDebuggerHandler) \ 472 V(CallRuntime) \ 473 V(AsmInterpreterEntry) \ 474 V(CallArg0AndCheckToBaseline) \ 475 V(CallArg1AndCheckToBaseline) \ 476 V(CallArgs2AndCheckToBaseline) \ 477 V(CallArgs3AndCheckToBaseline) \ 478 V(CallThisArg0AndCheckToBaseline) \ 479 V(CallThisArg1AndCheckToBaseline) \ 480 V(CallThisArgs2AndCheckToBaseline) \ 481 V(CallThisArgs3AndCheckToBaseline) \ 482 V(CallRangeAndCheckToBaseline) \ 483 V(CallNewAndCheckToBaseline) \ 484 V(SuperCallAndCheckToBaseline) \ 485 V(CallThisRangeAndCheckToBaseline) \ 486 V(GeneratorReEnterAsmInterp) \ 487 V(CallRuntimeWithArgv) \ 488 V(OptimizedCallAndPushArgv) \ 489 V(OptimizedFastCallAndPushArgv) \ 490 V(AOTCallToAsmInterBridge) \ 491 V(FastCallToAsmInterBridge) \ 492 V(PushCallArg0AndDispatch) \ 493 V(PushCallArgsAndDispatchNative) \ 494 V(PushCallArg1AndDispatch) \ 495 V(PushCallArgs2AndDispatch) \ 496 V(PushCallArgs3AndDispatch) \ 497 V(PushCallRangeAndDispatch) \ 498 V(PushCallRangeAndDispatchNative) \ 499 V(PushCallThisRangeAndDispatch) \ 500 V(PushCallThisArg0AndDispatch) \ 501 V(PushCallThisArg1AndDispatch) \ 502 V(PushCallThisArgs2AndDispatch) \ 503 V(PushCallThisArgs3AndDispatch) \ 504 V(PushCallNewAndDispatchNative) \ 505 V(PushNewTargetAndDispatchNative) \ 506 V(PushCallNewAndDispatch) \ 507 V(PushSuperCallAndDispatch) \ 508 V(CallGetter) \ 509 V(CallSetter) \ 510 V(CallContainersArgs2) \ 511 V(CallContainersArgs3) \ 512 V(JSCallWithArgV) \ 513 V(JSFastCallWithArgV) \ 514 V(JSFastCallWithArgVAndPushArgv) \ 515 V(JSCallWithArgVAndPushArgv) \ 516 V(SuperCallWithArgV) \ 517 V(ResumeRspAndDispatch) \ 518 V(ResumeRspAndReturn) \ 519 V(ResumeRspAndReturnBaseline) \ 520 V(ResumeCaughtFrameAndDispatch) \ 521 V(ResumeUncaughtFrameAndReturn) \ 522 V(ResumeRspAndRollback) \ 523 V(BigIntEquals) \ 524 V(BigIntSameValueZero) \ 525 V(CallBigIntAsIntN) \ 526 V(CallBigIntAsUintN) \ 527 V(Dump) \ 528 V(DebugDump) \ 529 V(DumpWithHint) \ 530 V(DebugDumpWithHint) \ 531 V(DebugPrint) \ 532 V(DebugPrintCustom) \ 533 V(DebugPrintInstruction) \ 534 V(CollectingOpcodes) \ 535 V(DebugOsrEntry) \ 536 V(Comment) \ 537 V(FatalPrint) \ 538 V(FatalPrintCustom) \ 539 V(GetActualArgvNoGC) \ 540 V(InsertOldToNewRSet) \ 541 V(InsertLocalToShareRSet) \ 542 V(SetBitAtomic) \ 543 V(DoubleToInt) \ 544 V(SaturateTruncDoubleToInt32) \ 545 V(FloatMod) \ 546 V(FloatAcos) \ 547 V(FloatAcosh) \ 548 V(FloatAsin) \ 549 V(FloatAsinh) \ 550 V(FloatAtan) \ 551 V(FloatAtan2) \ 552 V(FloatAtanh) \ 553 V(FloatCos) \ 554 V(FloatCosh) \ 555 V(FloatSin) \ 556 V(FloatSinh) \ 557 V(FloatTan) \ 558 V(FloatTanh) \ 559 V(FloatTrunc) \ 560 V(FloatLog) \ 561 V(FloatLog2) \ 562 V(FloatLog10) \ 563 V(FloatLog1p) \ 564 V(FloatExp) \ 565 V(FloatExpm1) \ 566 V(FloatCbrt) \ 567 V(FloatClz32) \ 568 V(FloatFloor) \ 569 V(FloatPow) \ 570 V(FloatCeil) \ 571 V(CallDateNow) \ 572 V(UpdateFieldType) \ 573 V(MarkingBarrier) \ 574 V(SharedGCMarkingBarrier) \ 575 V(CMCGCMarkingBarrier) \ 576 V(CallArg0) \ 577 V(CallArg1) \ 578 V(CallArgs2) \ 579 V(CallArgs3) \ 580 V(CallThisRange) \ 581 V(CallRange) \ 582 V(JSCall) \ 583 V(JSOptimizedCall) \ 584 V(JSOptimizedFastCall) \ 585 V(JSFunctionEntry) \ 586 V(OptimizedFastCallEntry) \ 587 V(JSProxyCallInternalWithArgV) \ 588 V(JSObjectGetMethod) \ 589 V(JsProxyCallInternal) \ 590 V(JsBoundCallInternal) \ 591 V(LazyDeoptEntry) \ 592 V(DeoptHandlerAsm) \ 593 V(JSCallNew) \ 594 V(CallOptimized) \ 595 V(TimeClip) \ 596 V(SetDateValues) \ 597 V(CallReturnWithArgv) \ 598 V(StartCallTimer) \ 599 V(EndCallTimer) \ 600 V(GetSingleCharCodeByIndex) \ 601 V(CreateStringBySingleCharCode) \ 602 V(FastStringEqual) \ 603 V(FastStringAdd) \ 604 V(StringAdd) \ 605 V(DeleteObjectProperty) \ 606 V(Getpropiterator) \ 607 V(Getnextpropname) \ 608 V(CreateJSSetIterator) \ 609 V(CreateJSMapIterator) \ 610 V(JSMapGet) \ 611 V(JSMapHas) \ 612 V(JSMapKeys) \ 613 V(JSMapValues) \ 614 V(JSSetHas) \ 615 V(JSSetAdd) \ 616 V(JSProxyGetProperty) \ 617 V(JSProxySetProperty) \ 618 V(JSProxySetPropertyNoThrow) \ 619 V(GrowElementsCapacity) \ 620 V(CreateJSTypedArrayEntries) \ 621 V(CreateJSTypedArrayKeys) \ 622 V(CreateJSTypedArrayValues) \ 623 V(JSMapDelete) \ 624 V(JSSetDelete) \ 625 V(JSSetEntries) \ 626 V(JSHClassFindProtoTransitions) \ 627 V(FinishObjSizeTracking) \ 628 V(NumberHelperStringToDouble) \ 629 V(IntLexicographicCompare) \ 630 V(DoubleLexicographicCompare) \ 631 V(FastArraySortString) \ 632 V(StringToNumber) \ 633 V(StringGetStart) \ 634 V(StringGetEnd) \ 635 V(ArrayTrim) \ 636 V(CopyTypedArrayBuffer) \ 637 V(OptimizedFastJmp) \ 638 V(CallArg0AndDispatchFromBaseline) \ 639 V(CallArg1AndDispatchFromBaseline) \ 640 V(CallArgs2AndDispatchFromBaseline) \ 641 V(CallArgs3AndDispatchFromBaseline) \ 642 V(CallThisArg0AndDispatchFromBaseline) \ 643 V(CallThisArg1AndDispatchFromBaseline) \ 644 V(CallThisArgs2AndDispatchFromBaseline) \ 645 V(CallThisArgs3AndDispatchFromBaseline) \ 646 V(CallRangeAndDispatchFromBaseline) \ 647 V(CallNewAndDispatchFromBaseline) \ 648 V(SuperCallAndDispatchFromBaseline) \ 649 V(CallThisRangeAndDispatchFromBaseline) \ 650 V(CallArg0AndCheckToBaselineFromBaseline) \ 651 V(CallArg1AndCheckToBaselineFromBaseline) \ 652 V(CallArgs2AndCheckToBaselineFromBaseline) \ 653 V(CallArgs3AndCheckToBaselineFromBaseline) \ 654 V(CallThisArg0AndCheckToBaselineFromBaseline) \ 655 V(CallThisArg1AndCheckToBaselineFromBaseline) \ 656 V(CallThisArgs2AndCheckToBaselineFromBaseline) \ 657 V(CallThisArgs3AndCheckToBaselineFromBaseline) \ 658 V(CallRangeAndCheckToBaselineFromBaseline) \ 659 V(CallNewAndCheckToBaselineFromBaseline) \ 660 V(SuperCallAndCheckToBaselineFromBaseline) \ 661 V(CallThisRangeAndCheckToBaselineFromBaseline) \ 662 V(SameValue) \ 663 V(GetBaselineBuiltinFp) \ 664 V(StringIteratorNext) \ 665 V(Definefunc) \ 666 V(DefineNormalFuncForJit) \ 667 V(DefineArrowFuncForJit) \ 668 V(DefineBaseConstructorForJit) \ 669 V(DefineField) \ 670 V(CallArg0Stub) \ 671 V(CallArg1Stub) \ 672 V(CallArg2Stub) \ 673 V(CallArg3Stub) \ 674 V(CallThis0Stub) \ 675 V(CallThis1Stub) \ 676 V(CallThis2Stub) \ 677 V(CallThis3Stub) \ 678 V(NewFloat32ArrayWithNoArgs) \ 679 V(NewFloat32Array) \ 680 V(StringLoadElement) \ 681 V(GetStringFromConstPool) \ 682 V(GetPrototype) \ 683 V(FastCallSelector) \ 684 V(CheckSuperAndNew) \ 685 V(SuperCallAndConstructorCheck) \ 686 V(ConvertCharToInt32) \ 687 V(ConvertCharToDouble) \ 688 V(ConvertCharToString) \ 689 V(ASMFastWriteBarrier) \ 690 V(VerifyBarrier) \ 691 V(SortTypedArray) \ 692 V(ReverseTypedArray) \ 693 V(IsFastRegExp) \ 694 V(MapIteratorNext) \ 695 V(SetIteratorNext) \ 696 V(CreateLocalToShare) \ 697 V(CreateOldToNew) \ 698 V(BatchBarrier) \ 699 V(CopyObjectPrimitive) \ 700 V(ObjectCopy) \ 701 V(ArrayIteratorNext) \ 702 V(GetIterator) \ 703 V(MoveBarrierInRegion) \ 704 V(FillObject) \ 705 V(MoveBarrierCrossRegion) \ 706 V(ReverseArray) \ 707 V(LrInt) \ 708 V(FindEntryFromNameDictionary) \ 709 V(ReverseBarrier) \ 710 V(FindPatchModule) \ 711 V(FatalPrintMisstakenResolvedBinding) \ 712 V(LoadNativeModuleFailed) \ 713 V(GetExternalModuleVar) \ 714 V(GetValueWithBarrier) \ 715 V(ReadBarrier) \ 716 V(ComputeStringHashcode) \ 717 V(CopyCallTarget) \ 718 V(CopyArgvArray) \ 719 V(MarkRSetCardTable) \ 720 V(MarkInBuffer) \ 721 V(BatchMarkInBuffer) \ 722 V(CMCSetValueWithBarrier) \ 723 V(UpdateSharedModule) 724 725 #define DECL_CALL_SIGNATURE(name) \ 726 class name##CallSignature final { \ 727 public: \ 728 static void Initialize(CallSignature *descriptor); \ 729 }; 730 EXPLICIT_CALL_SIGNATURE_LIST(DECL_CALL_SIGNATURE) 731 732 // NOLINTNEXTLINE(cppcoreguidelines-macro-usage) 733 #define DEF_CALL_SIGNATURE(name) \ 734 void name##CallSignature::Initialize([[maybe_unused]] CallSignature *callSign) 735 } // namespace panda::ecmascript::kungfu 736 #endif // ECMASCRIPT_COMPILER_CALL_SIGNATURE_H 737