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