• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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> &&paramAttr)
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