• 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 #include "ecmascript/compiler/call_signature.h"
17 #include "ecmascript/compiler/variable_type.h"
18 
19 #if defined(__clang__)
20 #pragma clang diagnostic push
21 #pragma clang diagnostic ignored "-Wshadow"
22 #pragma clang diagnostic ignored "-Wunused-parameter"
23 #elif defined(__GNUC__)
24 #pragma GCC diagnostic push
25 #pragma GCC diagnostic ignored "-Wshadow"
26 #pragma GCC diagnostic ignored "-Wunused-parameter"
27 #endif
28 
29 #include "llvm-c/Core.h"
30 #include "llvm/Support/Host.h"
31 
32 #if defined(__clang__)
33 #pragma clang diagnostic pop
34 #elif defined(__GNUC__)
35 #pragma GCC diagnostic pop
36 #endif
37 
38 namespace panda::ecmascript::kungfu {
39 #define BINARY_CALL_SIGNATURE(name)                             \
40     /* 3 : 3 input parameters */                                \
41     CallSignature signature(#name, 0, 3,                        \
42         ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY()); \
43     *callSign = signature;                                      \
44     /* 3 : 3 input parameters */                                \
45     std::array<VariableType, 3> params = {                      \
46         VariableType::NATIVE_POINTER(),                         \
47         VariableType::JS_ANY(),                                 \
48         VariableType::JS_ANY(),                                 \
49     };                                                          \
50     callSign->SetParameters(params.data());                     \
51     callSign->SetCallConv(CallSignature::CallConv::CCallConv);
52 
DEF_CALL_SIGNATURE(Add)53 DEF_CALL_SIGNATURE(Add)
54 {
55     BINARY_CALL_SIGNATURE(Add)
56 }
57 
DEF_CALL_SIGNATURE(Sub)58 DEF_CALL_SIGNATURE(Sub)
59 {
60     BINARY_CALL_SIGNATURE(Sub)
61 }
62 
DEF_CALL_SIGNATURE(Mul)63 DEF_CALL_SIGNATURE(Mul)
64 {
65     BINARY_CALL_SIGNATURE(Mul)
66 }
67 
DEF_CALL_SIGNATURE(Div)68 DEF_CALL_SIGNATURE(Div)
69 {
70     BINARY_CALL_SIGNATURE(Div)
71 }
72 
DEF_CALL_SIGNATURE(Mod)73 DEF_CALL_SIGNATURE(Mod)
74 {
75     BINARY_CALL_SIGNATURE(Mod)
76 }
77 
DEF_CALL_SIGNATURE(Equal)78 DEF_CALL_SIGNATURE(Equal)
79 {
80     BINARY_CALL_SIGNATURE(Equal)
81 }
82 
DEF_CALL_SIGNATURE(NotEqual)83 DEF_CALL_SIGNATURE(NotEqual)
84 {
85     BINARY_CALL_SIGNATURE(NotEqual)
86 }
87 
DEF_CALL_SIGNATURE(StrictEqual)88 DEF_CALL_SIGNATURE(StrictEqual)
89 {
90     BINARY_CALL_SIGNATURE(StrictEqual)
91 }
92 
DEF_CALL_SIGNATURE(StrictNotEqual)93 DEF_CALL_SIGNATURE(StrictNotEqual)
94 {
95     BINARY_CALL_SIGNATURE(StrictNotEqual)
96 }
97 
DEF_CALL_SIGNATURE(Less)98 DEF_CALL_SIGNATURE(Less)
99 {
100     BINARY_CALL_SIGNATURE(Less)
101 }
102 
DEF_CALL_SIGNATURE(LessEq)103 DEF_CALL_SIGNATURE(LessEq)
104 {
105     BINARY_CALL_SIGNATURE(LessEq)
106 }
107 
DEF_CALL_SIGNATURE(Greater)108 DEF_CALL_SIGNATURE(Greater)
109 {
110     BINARY_CALL_SIGNATURE(Greater)
111 }
112 
DEF_CALL_SIGNATURE(GreaterEq)113 DEF_CALL_SIGNATURE(GreaterEq)
114 {
115     BINARY_CALL_SIGNATURE(GreaterEq)
116 }
117 
DEF_CALL_SIGNATURE(Shl)118 DEF_CALL_SIGNATURE(Shl)
119 {
120     BINARY_CALL_SIGNATURE(Shl)
121 }
122 
DEF_CALL_SIGNATURE(Shr)123 DEF_CALL_SIGNATURE(Shr)
124 {
125     BINARY_CALL_SIGNATURE(Shr)
126 }
127 
DEF_CALL_SIGNATURE(Ashr)128 DEF_CALL_SIGNATURE(Ashr)
129 {
130     BINARY_CALL_SIGNATURE(Ashr)
131 }
132 
DEF_CALL_SIGNATURE(And)133 DEF_CALL_SIGNATURE(And)
134 {
135     BINARY_CALL_SIGNATURE(And)
136 }
137 
DEF_CALL_SIGNATURE(Or)138 DEF_CALL_SIGNATURE(Or)
139 {
140     BINARY_CALL_SIGNATURE(Or)
141 }
142 
DEF_CALL_SIGNATURE(Xor)143 DEF_CALL_SIGNATURE(Xor)
144 {
145     BINARY_CALL_SIGNATURE(Xor)
146 }
147 
148 #ifndef NDEBUG
DEF_CALL_SIGNATURE(MulGCTest)149 DEF_CALL_SIGNATURE(MulGCTest)
150 {
151     // 3 : 3 input parameters
152     CallSignature MulGC("MulGCTest", 0, 3, ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
153     *callSign = MulGC;
154     // 3 : 3 input parameters
155     std::array<VariableType, 3> params = {
156         VariableType::NATIVE_POINTER(),
157         VariableType::INT64(),
158         VariableType::INT64(),
159     };
160     callSign->SetParameters(params.data());
161     callSign->SetCallConv(CallSignature::CallConv::CCallConv);
162 }
163 #else
DEF_CALL_SIGNATURE(MulGCTest)164 DEF_CALL_SIGNATURE(MulGCTest) {}
165 #endif
166 
167 #define UNARY_CALL_SIGNATURE(name)                              \
168     /* 2 : 2 input parameters */                                \
169     CallSignature signature(#name, 0, 2,                        \
170         ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY()); \
171     *callSign = signature;                                      \
172     /* 2 : 2 input parameters */                                \
173     std::array<VariableType, 2> params = {                      \
174         VariableType::NATIVE_POINTER(),                         \
175         VariableType::JS_ANY(),                                 \
176     };                                                          \
177     callSign->SetParameters(params.data());                     \
178     callSign->SetCallConv(CallSignature::CallConv::CCallConv);
179 
DEF_CALL_SIGNATURE(Inc)180 DEF_CALL_SIGNATURE(Inc)
181 {
182     UNARY_CALL_SIGNATURE(Inc)
183 }
184 
DEF_CALL_SIGNATURE(Dec)185 DEF_CALL_SIGNATURE(Dec)
186 {
187     UNARY_CALL_SIGNATURE(Dec)
188 }
189 
DEF_CALL_SIGNATURE(Neg)190 DEF_CALL_SIGNATURE(Neg)
191 {
192     UNARY_CALL_SIGNATURE(Neg)
193 }
194 
DEF_CALL_SIGNATURE(Not)195 DEF_CALL_SIGNATURE(Not)
196 {
197     UNARY_CALL_SIGNATURE(Not)
198 }
199 
DEF_CALL_SIGNATURE(ToBooleanTrue)200 DEF_CALL_SIGNATURE(ToBooleanTrue)
201 {
202     UNARY_CALL_SIGNATURE(ToBooleanTrue)
203 }
204 
DEF_CALL_SIGNATURE(ToBooleanFalse)205 DEF_CALL_SIGNATURE(ToBooleanFalse)
206 {
207     UNARY_CALL_SIGNATURE(ToBooleanFalse)
208 }
209 
DEF_CALL_SIGNATURE(TypeOf)210 DEF_CALL_SIGNATURE(TypeOf)
211 {
212     // 2 input parameters
213     CallSignature TypeOf("TypeOf", 0, 2, ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_POINTER());
214     *callSign = TypeOf;
215     // 2 input parameters
216     std::array<VariableType, 2> params = {
217         VariableType::NATIVE_POINTER(), // glue
218         VariableType::JS_ANY(), // ACC
219     };
220     callSign->SetParameters(params.data());
221     callSign->SetCallConv(CallSignature::CallConv::CCallConv);
222 }
223 
DEF_CALL_SIGNATURE(SetPropertyByName)224 DEF_CALL_SIGNATURE(SetPropertyByName)
225 {
226     // 6 : 6 input parameters
227     CallSignature setPropertyByName("SetPropertyByName", 0, 6, ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
228     *callSign = setPropertyByName;
229     // 6 : 6 input parameters
230     std::array<VariableType, 6> params = {
231         VariableType::NATIVE_POINTER(),   // glue
232         VariableType::JS_ANY(),           // receiver
233         VariableType::INT64(),            // key
234         VariableType::JS_ANY(),           // value
235         VariableType::JS_ANY(),           // jsFunc
236         VariableType::INT32(),            // slot id
237     };
238     callSign->SetParameters(params.data());
239     callSign->SetCallConv(CallSignature::CallConv::CCallConv);
240 }
241 
DEF_CALL_SIGNATURE(DeprecatedSetPropertyByName)242 DEF_CALL_SIGNATURE(DeprecatedSetPropertyByName)
243 {
244     // 4 : 4 input parameters
245     CallSignature setPropertyByName("DeprecatedSetPropertyByName", 0, 4, ArgumentsOrder::DEFAULT_ORDER,
246         VariableType::JS_ANY());
247     *callSign = setPropertyByName;
248     // 4 : 4 input parameters
249     std::array<VariableType, 4> params = {
250         VariableType::NATIVE_POINTER(),
251         VariableType::JS_POINTER(),
252         VariableType::JS_POINTER(),
253         VariableType::JS_ANY()
254     };
255     callSign->SetParameters(params.data());
256     callSign->SetCallConv(CallSignature::CallConv::CCallConv);
257 }
258 
DEF_CALL_SIGNATURE(SetPropertyByNameWithOwn)259 DEF_CALL_SIGNATURE(SetPropertyByNameWithOwn)
260 {
261     // 4 : 4 input parameters
262     CallSignature setPropertyByNameWithOwn("SetPropertyByNameWithOwn", 0, 4, ArgumentsOrder::DEFAULT_ORDER,
263         VariableType::JS_ANY());
264     *callSign = setPropertyByNameWithOwn;
265     // 4 : 4 input parameters
266     std::array<VariableType, 4> params = {
267         VariableType::NATIVE_POINTER(),
268         VariableType::JS_POINTER(),
269         VariableType::JS_POINTER(),
270         VariableType::JS_ANY()
271     };
272     callSign->SetParameters(params.data());
273     callSign->SetCallConv(CallSignature::CallConv::CCallConv);
274 }
275 
DEF_CALL_SIGNATURE(SetPropertyByValue)276 DEF_CALL_SIGNATURE(SetPropertyByValue)
277 {
278     // 6 : 6 input parameters
279     CallSignature setPropertyByName("SetPropertyByValue", 0, 6, ArgumentsOrder::DEFAULT_ORDER,
280         VariableType::JS_ANY());
281     *callSign = setPropertyByName;
282     // 6 : 6 input parameters
283     std::array<VariableType, 6> params = {
284         VariableType::NATIVE_POINTER(),    // glue
285         VariableType::JS_POINTER(),        // receiver
286         VariableType::JS_ANY(),            // key
287         VariableType::JS_ANY(),            // value
288         VariableType::JS_ANY(),            // jsFunc
289         VariableType::INT32(),             // slot id
290     };
291     callSign->SetParameters(params.data());
292     callSign->SetCallConv(CallSignature::CallConv::CCallConv);
293 }
294 
DEF_CALL_SIGNATURE(Definefunc)295 DEF_CALL_SIGNATURE(Definefunc)
296 {
297     // 6 : 6 input parameters
298     CallSignature definefunc("Definefunc", 0, 6, ArgumentsOrder::DEFAULT_ORDER,
299         VariableType::JS_ANY());
300     *callSign = definefunc;
301     // 6 : 6 input parameters
302     std::array<VariableType, 6> params = {
303         VariableType::NATIVE_POINTER(),    // glue
304         VariableType::JS_ANY(),            // jsFunc
305         VariableType::INT32(),             // methodId
306         VariableType::INT32(),             // length
307         VariableType::JS_ANY(),            // lexEnv
308         VariableType::INT32(),             // slotId
309     };
310     callSign->SetParameters(params.data());
311     callSign->SetCallConv(CallSignature::CallConv::CCallConv);
312 }
313 
DEF_CALL_SIGNATURE(DefineField)314 DEF_CALL_SIGNATURE(DefineField)
315 {
316     // 4 : 4 input parameters
317     CallSignature defineField("DefineField", 0, 4, ArgumentsOrder::DEFAULT_ORDER,
318         VariableType::JS_ANY());
319     *callSign = defineField;
320     // 4 : 4 input parameters
321     std::array<VariableType, 4> params = {
322         VariableType::NATIVE_POINTER(),    // glue
323         VariableType::JS_ANY(),            // receiver
324         VariableType::JS_ANY(),            // key
325         VariableType::JS_ANY(),            // acc
326     };
327     callSign->SetParameters(params.data());
328     callSign->SetCallConv(CallSignature::CallConv::CCallConv);
329 }
330 
DEF_CALL_SIGNATURE(ConvertCharToInt32)331 DEF_CALL_SIGNATURE(ConvertCharToInt32)
332 {
333     // 2 : 2 input parameters
334     CallSignature convertCharToInt32("ConvertCharToInt32", 0, 2, ArgumentsOrder::DEFAULT_ORDER,
335         VariableType::INT32());
336     *callSign = convertCharToInt32;
337     // 2 : 2 input parameters
338     std::array<VariableType, 2> params = {
339         VariableType::NATIVE_POINTER(),     // glue
340         VariableType::INT32(),              // charcode
341     };
342     callSign->SetParameters(params.data());
343     callSign->SetCallConv(CallSignature::CallConv::CCallConv);
344 }
345 
DEF_CALL_SIGNATURE(ConvertCharToDouble)346 DEF_CALL_SIGNATURE(ConvertCharToDouble)
347 {
348     // 2 : 2 input parameters
349     CallSignature convertCharToDouble("ConvertCharToDouble", 0, 2, ArgumentsOrder::DEFAULT_ORDER,
350         VariableType::FLOAT64());
351     *callSign = convertCharToDouble;
352     // 2 : 2 input parameters
353     std::array<VariableType, 2> params = {
354         VariableType::NATIVE_POINTER(),     // glue
355         VariableType::INT32(),              // charcode
356     };
357     callSign->SetParameters(params.data());
358     callSign->SetCallConv(CallSignature::CallConv::CCallConv);
359 }
360 
DEF_CALL_SIGNATURE(DeprecatedSetPropertyByValue)361 DEF_CALL_SIGNATURE(DeprecatedSetPropertyByValue)
362 {
363     // 4 : 4 input parameters
364     CallSignature setPropertyByName("DeprecatedSetPropertyByValue", 0, 4, ArgumentsOrder::DEFAULT_ORDER,
365         VariableType::JS_ANY());
366     *callSign = setPropertyByName;
367     // 4 : 4 input parameters
368     std::array<VariableType, 4> params = {
369         VariableType::NATIVE_POINTER(),
370         VariableType::JS_POINTER(),
371         VariableType::JS_ANY(),
372         VariableType::JS_ANY()
373     };
374     callSign->SetParameters(params.data());
375     callSign->SetCallConv(CallSignature::CallConv::CCallConv);
376 }
377 
DEF_CALL_SIGNATURE(SetPropertyByValueWithOwn)378 DEF_CALL_SIGNATURE(SetPropertyByValueWithOwn)
379 {
380     // 4 : 4 input parameters
381     CallSignature setPropertyByValueWithOwn("SetPropertyByValueWithOwn", 0, 4, ArgumentsOrder::DEFAULT_ORDER,
382         VariableType::JS_ANY());
383     *callSign = setPropertyByValueWithOwn;
384     // 4 : 4 input parameters
385     std::array<VariableType, 4> params = {
386         VariableType::NATIVE_POINTER(),
387         VariableType::JS_POINTER(),
388         VariableType::JS_ANY(),
389         VariableType::JS_ANY()
390     };
391     callSign->SetParameters(params.data());
392     callSign->SetCallConv(CallSignature::CallConv::CCallConv);
393 }
394 
DEF_CALL_SIGNATURE(GetPropertyByName)395 DEF_CALL_SIGNATURE(GetPropertyByName)
396 {
397     // 5 : 5 input parameters
398     CallSignature getPropertyByName("GetPropertyByName", 0, 5, ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
399     *callSign = getPropertyByName;
400     // 5 : 5 input parameters
401     std::array<VariableType, 5> params = {
402         VariableType::NATIVE_POINTER(),   // glue
403         VariableType::JS_ANY(),           // receiver
404         VariableType::INT64(),            // key
405         VariableType::JS_ANY(),           // jsFunc
406         VariableType::INT32(),            // slot id
407     };
408     callSign->SetParameters(params.data());
409     callSign->SetCallConv(CallSignature::CallConv::CCallConv);
410 }
411 
DEF_CALL_SIGNATURE(Instanceof)412 DEF_CALL_SIGNATURE(Instanceof)
413 {
414     // 5 : 5 input parameters
415     CallSignature instanceof("Instanceof", 0, 5, ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
416     *callSign = instanceof;
417     // 5 : 5 input parameters
418     std::array<VariableType, 5> params = {
419         VariableType::NATIVE_POINTER(),   // glue
420         VariableType::JS_ANY(),           // object
421         VariableType::JS_ANY(),           // target
422         VariableType::JS_ANY(),           // jsFunc
423         VariableType::INT32(),            // slot id
424     };
425     callSign->SetParameters(params.data());
426     callSign->SetCallConv(CallSignature::CallConv::CCallConv);
427 }
428 
DEF_CALL_SIGNATURE(DeprecatedGetPropertyByName)429 DEF_CALL_SIGNATURE(DeprecatedGetPropertyByName)
430 {
431     // 3 : 3 input parameters
432     CallSignature getPropertyByName("DeprecatedGetPropertyByName", 0, 3, ArgumentsOrder::DEFAULT_ORDER,
433         VariableType::JS_ANY());
434     *callSign = getPropertyByName;
435     // 3 : 3 input parameters
436     std::array<VariableType, 3> params = {
437         VariableType::NATIVE_POINTER(), // glue
438         VariableType::JS_ANY(),         // receiver
439         VariableType::JS_POINTER(),     // key
440     };
441     callSign->SetParameters(params.data());
442     callSign->SetCallConv(CallSignature::CallConv::CCallConv);
443 }
444 
DEF_CALL_SIGNATURE(TryLdGlobalByName)445 DEF_CALL_SIGNATURE(TryLdGlobalByName)
446 {
447     // 4 : 4 input parameters
448     CallSignature signature("TryLdGlobalByName", 0, 4, ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
449     *callSign = signature;
450     // 4 : 4 input parameters
451     std::array<VariableType, 4> params = {
452         VariableType::NATIVE_POINTER(),   // glue
453         VariableType::INT64(),            // key
454         VariableType::JS_ANY(),           // jsFunc
455         VariableType::INT32(),            // slot id
456     };
457     callSign->SetParameters(params.data());
458     callSign->SetCallConv(CallSignature::CallConv::CCallConv);
459 }
460 
DEF_CALL_SIGNATURE(TryStGlobalByName)461 DEF_CALL_SIGNATURE(TryStGlobalByName)
462 {
463     // 5 : 5 input parameters
464     CallSignature signature("TryStGlobalByName", 0, 5, ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
465     *callSign = signature;
466     // 5 : 5 input parameters
467     std::array<VariableType, 5> params = {
468         VariableType::NATIVE_POINTER(),   // glue
469         VariableType::INT64(),            // key
470         VariableType::JS_ANY(),           // value
471         VariableType::JS_ANY(),           // jsFunc
472         VariableType::INT32(),            // slot id
473     };
474     callSign->SetParameters(params.data());
475     callSign->SetCallConv(CallSignature::CallConv::CCallConv);
476 }
477 
DEF_CALL_SIGNATURE(LdGlobalVar)478 DEF_CALL_SIGNATURE(LdGlobalVar)
479 {
480     // 4 : 4 input parameters
481     CallSignature signature("LdGlobalVar", 0, 4, ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
482     *callSign = signature;
483     // 4 : 4 input parameters
484     std::array<VariableType, 4> params = {
485         VariableType::NATIVE_POINTER(),   // glue
486         VariableType::INT64(),            // key
487         VariableType::JS_ANY(),           // jsFunc
488         VariableType::INT32(),            // slot id
489     };
490     callSign->SetParameters(params.data());
491     callSign->SetCallConv(CallSignature::CallConv::CCallConv);
492 }
493 
DEF_CALL_SIGNATURE(StGlobalVar)494 DEF_CALL_SIGNATURE(StGlobalVar)
495 {
496     // 5 : 5 input parameters
497     CallSignature signature("StGlobalVar", 0, 5, ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
498     *callSign = signature;
499     // 5 : 5 input parameters
500     std::array<VariableType, 5> params = {
501         VariableType::NATIVE_POINTER(),   // glue
502         VariableType::INT64(),            // string id
503         VariableType::JS_ANY(),           // value
504         VariableType::JS_ANY(),           // jsFunc
505         VariableType::INT32(),            // slot id
506     };
507     callSign->SetParameters(params.data());
508     callSign->SetCallConv(CallSignature::CallConv::CCallConv);
509 }
DEF_CALL_SIGNATURE(StOwnByValue)510 DEF_CALL_SIGNATURE(StOwnByValue)
511 {
512     // 4 : 4 input parameters
513     CallSignature signature("StOwnByValue", 0, 4, ArgumentsOrder::DEFAULT_ORDER,
514         VariableType::JS_ANY());
515     *callSign = signature;
516     // 4 : 4 input parameters
517     std::array<VariableType, 4> params = {
518         VariableType::NATIVE_POINTER(),
519         VariableType::JS_POINTER(),
520         VariableType::JS_ANY(),
521         VariableType::JS_ANY()
522     };
523     callSign->SetParameters(params.data());
524     callSign->SetCallConv(CallSignature::CallConv::CCallConv);
525 }
DEF_CALL_SIGNATURE(StOwnByIndex)526 DEF_CALL_SIGNATURE(StOwnByIndex)
527 {
528     // 4 : 4 input parameters
529     CallSignature signature("StOwnByIndex", 0, 4, ArgumentsOrder::DEFAULT_ORDER,
530         VariableType::JS_ANY()); // hole or undefined
531     *callSign = signature;
532     // 4 : 4 input parameters
533     std::array<VariableType, 4> params = {
534         VariableType::NATIVE_POINTER(),
535         VariableType::JS_POINTER(),
536         VariableType::INT32(),
537         VariableType::JS_ANY()
538     };
539     callSign->SetParameters(params.data());
540     callSign->SetCallConv(CallSignature::CallConv::CCallConv);
541 }
DEF_CALL_SIGNATURE(StOwnByName)542 DEF_CALL_SIGNATURE(StOwnByName)
543 {
544     // 4 : 4 input parameters
545     CallSignature signature("StOwnByName", 0, 4, ArgumentsOrder::DEFAULT_ORDER,
546         VariableType::JS_ANY());
547     *callSign = signature;
548     // 4 : 4 input parameters
549     std::array<VariableType, 4> params = {
550         VariableType::NATIVE_POINTER(),
551         VariableType::JS_POINTER(),
552         VariableType::JS_POINTER(),
553         VariableType::JS_ANY()
554     };
555     callSign->SetParameters(params.data());
556     callSign->SetCallConv(CallSignature::CallConv::CCallConv);
557 }
DEF_CALL_SIGNATURE(StOwnByValueWithNameSet)558 DEF_CALL_SIGNATURE(StOwnByValueWithNameSet)
559 {
560     // 4 : 4 input parameters
561     CallSignature signature("StOwnByValueWithNameSet", 0, 4, ArgumentsOrder::DEFAULT_ORDER,
562         VariableType::JS_ANY());
563     *callSign = signature;
564     // 4 : 4 input parameters
565     std::array<VariableType, 4> params = {
566         VariableType::NATIVE_POINTER(),
567         VariableType::JS_POINTER(),
568         VariableType::JS_ANY(),
569         VariableType::JS_ANY()
570     };
571     callSign->SetParameters(params.data());
572     callSign->SetCallConv(CallSignature::CallConv::CCallConv);
573 }
DEF_CALL_SIGNATURE(StOwnByNameWithNameSet)574 DEF_CALL_SIGNATURE(StOwnByNameWithNameSet)
575 {
576     // 4 : 4 input parameters
577     CallSignature signature("StOwnByNameWithNameSet", 0, 4, ArgumentsOrder::DEFAULT_ORDER,
578         VariableType::JS_ANY());
579     *callSign = signature;
580     // 4 : 4 input parameters
581     std::array<VariableType, 4> params = {
582         VariableType::NATIVE_POINTER(),
583         VariableType::JS_POINTER(),
584         VariableType::JS_POINTER(),
585         VariableType::JS_ANY()
586     };
587     callSign->SetParameters(params.data());
588     callSign->SetCallConv(CallSignature::CallConv::CCallConv);
589 }
DEF_CALL_SIGNATURE(StObjByIndex)590 DEF_CALL_SIGNATURE(StObjByIndex)
591 {
592     // 4 : 4 input parameters
593     CallSignature signature("StObjByIndex", 0, 4, ArgumentsOrder::DEFAULT_ORDER,
594         VariableType::JS_ANY()); // hole or undefined
595     *callSign = signature;
596     // 4 : 4 input parameters
597     std::array<VariableType, 4> params = {
598         VariableType::NATIVE_POINTER(),
599         VariableType::JS_POINTER(),
600         VariableType::INT32(),
601         VariableType::JS_ANY()
602     };
603     callSign->SetParameters(params.data());
604     callSign->SetCallConv(CallSignature::CallConv::CCallConv);
605 }
DEF_CALL_SIGNATURE(LdObjByIndex)606 DEF_CALL_SIGNATURE(LdObjByIndex)
607 {
608     // 3 : 3 input parameters
609     CallSignature signature("LdObjByIndex", 0, 3, ArgumentsOrder::DEFAULT_ORDER,
610         VariableType::JS_ANY());
611     *callSign = signature;
612     // 3 : 3 input parameters
613     std::array<VariableType, 3> params = {
614         VariableType::NATIVE_POINTER(), // glue
615         VariableType::JS_ANY(), // receiver
616         VariableType::INT32(), // index
617     };
618     callSign->SetParameters(params.data());
619     callSign->SetCallConv(CallSignature::CallConv::CCallConv);
620 }
621 
DEF_CALL_SIGNATURE(GetPropertyByIndex)622 DEF_CALL_SIGNATURE(GetPropertyByIndex)
623 {
624     // 3 : 3 input parameters
625     CallSignature getPropertyByIndex("GetPropertyByIndex", 0, 3, ArgumentsOrder::DEFAULT_ORDER,
626         VariableType::JS_ANY());
627     *callSign = getPropertyByIndex;
628     // 3 : 3 input parameters
629     std::array<VariableType, 3> params = {
630         VariableType::NATIVE_POINTER(), // glue
631         VariableType::JS_ANY(), // receiver
632         VariableType::INT32(), // index
633     };
634     callSign->SetParameters(params.data());
635     callSign->SetCallConv(CallSignature::CallConv::CCallConv);
636 }
637 
DEF_CALL_SIGNATURE(SetPropertyByIndex)638 DEF_CALL_SIGNATURE(SetPropertyByIndex)
639 {
640     // 4 : 4 input parameters
641     CallSignature setPropertyByIndex("SetPropertyByIndex", 0, 4, ArgumentsOrder::DEFAULT_ORDER,
642         VariableType::JS_ANY()); // hole or undefined
643     *callSign = setPropertyByIndex;
644     // 4 : 4 input parameters
645     std::array<VariableType, 4> params = {
646         VariableType::NATIVE_POINTER(),
647         VariableType::JS_POINTER(),
648         VariableType::INT32(),
649         VariableType::JS_ANY()
650     };
651     callSign->SetParameters(params.data());
652     callSign->SetCallConv(CallSignature::CallConv::CCallConv);
653 }
654 
DEF_CALL_SIGNATURE(SetPropertyByIndexWithOwn)655 DEF_CALL_SIGNATURE(SetPropertyByIndexWithOwn)
656 {
657     // 4 : 4 input parameters
658     CallSignature setPropertyByIndexWithOwn("SetPropertyByIndexWithOwn", 0, 4, ArgumentsOrder::DEFAULT_ORDER,
659         VariableType::JS_ANY()); // hole or undefined
660     *callSign = setPropertyByIndexWithOwn;
661     // 4 : 4 input parameters
662     std::array<VariableType, 4> params = {
663         VariableType::NATIVE_POINTER(),
664         VariableType::JS_POINTER(),
665         VariableType::INT32(),
666         VariableType::JS_ANY()
667     };
668     callSign->SetParameters(params.data());
669     callSign->SetCallConv(CallSignature::CallConv::CCallConv);
670 }
671 
DEF_CALL_SIGNATURE(GetPropertyByValue)672 DEF_CALL_SIGNATURE(GetPropertyByValue)
673 {
674     // 5 : 5 input parameters
675     CallSignature getPropertyByValue("GetPropertyByValue", 0, 5, ArgumentsOrder::DEFAULT_ORDER,
676                                       VariableType::JS_ANY());
677     *callSign = getPropertyByValue;
678     // 5 : 5 input parameters
679     std::array<VariableType, 5> params = {
680         VariableType::NATIVE_POINTER(),   // glue
681         VariableType::JS_POINTER(),       // receiver
682         VariableType::JS_ANY(),           // key
683         VariableType::JS_ANY(),           // jsFunc
684         VariableType::INT32(),            // slot id
685     };
686     callSign->SetParameters(params.data());
687     callSign->SetCallConv(CallSignature::CallConv::CCallConv);
688 }
689 
DEF_CALL_SIGNATURE(DeprecatedGetPropertyByValue)690 DEF_CALL_SIGNATURE(DeprecatedGetPropertyByValue)
691 {
692     // 3 : 3 input parameters
693     CallSignature getPropertyByValue("DeprecatedGetPropertyByValue", 0, 3, ArgumentsOrder::DEFAULT_ORDER,
694                                       VariableType::JS_ANY());
695     *callSign = getPropertyByValue;
696     // 3 : 3 input parameters
697     std::array<VariableType, 3> params = {
698         VariableType::NATIVE_POINTER(),
699         VariableType::JS_POINTER(),
700         VariableType::JS_ANY(),
701     };
702     callSign->SetParameters(params.data());
703     callSign->SetCallConv(CallSignature::CallConv::CCallConv);
704 }
705 
DEF_CALL_SIGNATURE(TryLoadICByName)706 DEF_CALL_SIGNATURE(TryLoadICByName)
707 {
708     // 4 : 4 input parameters
709     CallSignature tryLoadICByName("TryLoadICByName", 0, 4,
710         ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
711     *callSign = tryLoadICByName;
712     // 4 : 4 input parameters
713     std::array<VariableType, 4> params = {
714         VariableType::NATIVE_POINTER(),
715         VariableType::JS_ANY(),
716         VariableType::JS_ANY(),
717         VariableType::JS_ANY(),
718     };
719     callSign->SetParameters(params.data());
720     callSign->SetCallConv(CallSignature::CallConv::CCallConv);
721 }
722 
DEF_CALL_SIGNATURE(TryLoadICByValue)723 DEF_CALL_SIGNATURE(TryLoadICByValue)
724 {
725     // 5 : 5 input parameters
726     CallSignature tryLoadICByValue("TryLoadICByValue", 0, 5,
727         ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
728     *callSign = tryLoadICByValue;
729     // 5 : 5 input parameters
730     std::array<VariableType, 5> params = {
731         VariableType::NATIVE_POINTER(),
732         VariableType::JS_ANY(),
733         VariableType::JS_ANY(),
734         VariableType::JS_ANY(),
735         VariableType::JS_ANY(),
736     };
737     callSign->SetParameters(params.data());
738     callSign->SetCallConv(CallSignature::CallConv::CCallConv);
739 }
740 
DEF_CALL_SIGNATURE(TryStoreICByName)741 DEF_CALL_SIGNATURE(TryStoreICByName)
742 {
743     // 5 : 5 input parameters
744     CallSignature tryStoreICByName("TryStoreICByName", 0, 5,
745         ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY()); // undefined or hole
746     *callSign = tryStoreICByName;
747     // 5 : 5 input parameters
748     std::array<VariableType, 5> params = {
749         VariableType::NATIVE_POINTER(),
750         VariableType::JS_POINTER(),
751         VariableType::JS_ANY(),
752         VariableType::JS_ANY(),
753         VariableType::JS_POINTER(),
754     };
755     callSign->SetParameters(params.data());
756     callSign->SetCallConv(CallSignature::CallConv::CCallConv);
757 }
758 
DEF_CALL_SIGNATURE(TryStoreICByValue)759 DEF_CALL_SIGNATURE(TryStoreICByValue)
760 {
761     // 6 : 6 input parameters
762     CallSignature tryStoreICByValue("TryStoreICByValue", 0, 6,
763         ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY()); // undefined or hole
764     *callSign = tryStoreICByValue;
765     // 6 : 6 input parameters
766     std::array<VariableType, 6> params = {
767         VariableType::NATIVE_POINTER(),
768         VariableType::JS_POINTER(),
769         VariableType::JS_ANY(),
770         VariableType::JS_ANY(),
771         VariableType::JS_ANY(),
772         VariableType::JS_POINTER(),
773     };
774     callSign->SetParameters(params.data());
775     callSign->SetCallConv(CallSignature::CallConv::CCallConv);
776 }
777 
778 #define SETVALUEBARRIER_CALL_ARGS_SIGNATURE_COMMON(name)                    \
779     /* 6 : 4 input parameters + 2 fake parameter */                         \
780     CallSignature signature("#name", 0, 6,                                  \
781         ArgumentsOrder::DEFAULT_ORDER, VariableType::VOID());               \
782     *callSign = signature;                                                  \
783     /* 6 : 4 input parameters + 2 fake parameter */                         \
784     std::array<VariableType, 6> params = {                                  \
785         VariableType::NATIVE_POINTER(),                                     \
786         VariableType::JS_POINTER(),                                         \
787         VariableType::NATIVE_POINTER(),                                     \
788         VariableType::JS_ANY(),                                             \
789         VariableType::INT64(),                                              \
790         VariableType::INT64(),                                              \
791     };                                                                      \
792     callSign->SetParameters(params.data());                                 \
793     callSign->SetGCLeafFunction(true);                                      \
794     callSign->SetCallConv(CallSignature::CallConv::CCallConv);              \
795                                                                             \
796     std::vector<CallSignature::ParamAttr> paramAttrs = {                    \
797         CallSignature::ParamAttr::NoAttr,                                   \
798         CallSignature::ParamAttr::NoAttr,                                   \
799         CallSignature::ParamAttr::NoAttr,                                   \
800         CallSignature::ParamAttr::NoAttr,                                   \
801         CallSignature::ParamAttr::Dead,                                     \
802         CallSignature::ParamAttr::Dead,                                     \
803     };                                                                      \
804     callSign->SetParamAttr(std::move(paramAttrs))
805 
DEF_CALL_SIGNATURE(SetValueWithBarrier)806 DEF_CALL_SIGNATURE(SetValueWithBarrier)
807 {
808     SETVALUEBARRIER_CALL_ARGS_SIGNATURE_COMMON(SetValueWithBarrier);
809 }
810 
DEF_CALL_SIGNATURE(SetNonSValueWithBarrier)811 DEF_CALL_SIGNATURE(SetNonSValueWithBarrier)
812 {
813     SETVALUEBARRIER_CALL_ARGS_SIGNATURE_COMMON(SetNonSValueWithBarrier);
814 }
815 
DEF_CALL_SIGNATURE(SetValueWithEdenBarrier)816 DEF_CALL_SIGNATURE(SetValueWithEdenBarrier)
817 {
818     SETVALUEBARRIER_CALL_ARGS_SIGNATURE_COMMON(SetValueWithEdenBarrier);
819 }
820 
DEF_CALL_SIGNATURE(SetNonSValueWithEdenBarrier)821 DEF_CALL_SIGNATURE(SetNonSValueWithEdenBarrier)
822 {
823     SETVALUEBARRIER_CALL_ARGS_SIGNATURE_COMMON(SetNonSValueWithEdenBarrier);
824 }
825 
DEF_CALL_SIGNATURE(SetSValueWithBarrier)826 DEF_CALL_SIGNATURE(SetSValueWithBarrier)
827 {
828     SETVALUEBARRIER_CALL_ARGS_SIGNATURE_COMMON(SetSValueWithBarrier);
829 }
830 
DEF_CALL_SIGNATURE(ASMFastWriteBarrier)831 DEF_CALL_SIGNATURE(ASMFastWriteBarrier)
832 {
833     SETVALUEBARRIER_CALL_ARGS_SIGNATURE_COMMON(ASMFastWriteBarrier);
834     callSign->SetTargetKind(CallSignature::TargetKind::ASM_CALL_BARRIER_STUB);
835 }
836 
DEF_CALL_SIGNATURE(ASMWriteBarrierWithEden)837 DEF_CALL_SIGNATURE(ASMWriteBarrierWithEden)
838 {
839     SETVALUEBARRIER_CALL_ARGS_SIGNATURE_COMMON(ASMWriteBarrierWithEden);
840     callSign->SetTargetKind(CallSignature::TargetKind::ASM_CALL_BARRIER_STUB);
841 }
842 
843 #undef SETVALUEBARRIER_CALL_ARGS_SIGNATURE_COMMON
844 
DEF_CALL_SIGNATURE(NewThisObjectChecked)845 DEF_CALL_SIGNATURE(NewThisObjectChecked)
846 {
847     // 2 : 2 input parameters
848     CallSignature signature("NewThisObjectChecked", 0, 2,
849         ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
850     *callSign = signature;
851     // 2 : 2 input parameters
852     std::array<VariableType, 2> params = {
853         VariableType::NATIVE_POINTER(),  // glue
854         VariableType::JS_ANY(),          // ctor
855     };
856     callSign->SetParameters(params.data());
857     callSign->SetCallConv(CallSignature::CallConv::CCallConv);
858 }
859 
DEF_CALL_SIGNATURE(ConstructorCheck)860 DEF_CALL_SIGNATURE(ConstructorCheck)
861 {
862     // 4 : 4 input parameters
863     CallSignature signature("ConstructorCheck", 0, 4,
864         ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
865     *callSign = signature;
866     // 4 : 4 input parameters
867     std::array<VariableType, 4> params = {
868         VariableType::NATIVE_POINTER(),  // glue
869         VariableType::JS_ANY(),          // ctor
870         VariableType::JS_ANY(),          // result
871         VariableType::JS_ANY(),          // thisObj
872     };
873     callSign->SetParameters(params.data());
874     callSign->SetCallConv(CallSignature::CallConv::CCallConv);
875 }
876 
DEF_CALL_SIGNATURE(CreateEmptyArray)877 DEF_CALL_SIGNATURE(CreateEmptyArray)
878 {
879     // 5 : 5 input parameters
880     CallSignature signature("CreateEmptyArray", 0, 5,
881         ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
882     *callSign = signature;
883     // 5 : 5 input parameters
884     std::array<VariableType, 5> params = {
885         VariableType::NATIVE_POINTER(),  // glue
886         VariableType::JS_ANY(),          // jsFunc
887         VariableType::JS_ANY(),          // pc
888         VariableType::INT32(),           // profileTypeInfo
889         VariableType::INT32(),           // slotId
890     };
891     callSign->SetParameters(params.data());
892     callSign->SetCallConv(CallSignature::CallConv::CCallConv);
893 }
894 
DEF_CALL_SIGNATURE(CreateArrayWithBuffer)895 DEF_CALL_SIGNATURE(CreateArrayWithBuffer)
896 {
897     // 6 : 6 input parameters
898     CallSignature signature("CreateArrayWithBuffer", 0, 6,
899         ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
900     *callSign = signature;
901     // 6 : 6 input parameters
902     std::array<VariableType, 6> params = {
903         VariableType::NATIVE_POINTER(),  // glue
904         VariableType::INT32(),           // index
905         VariableType::JS_ANY(),          // jsFunc
906         VariableType::JS_ANY(),          // pc
907         VariableType::INT32(),           // profileTypeInfo
908         VariableType::INT32(),           // slotId
909     };
910     callSign->SetParameters(params.data());
911     callSign->SetCallConv(CallSignature::CallConv::CCallConv);
912 }
913 
DEF_CALL_SIGNATURE(CopyRestArgs)914 DEF_CALL_SIGNATURE(CopyRestArgs)
915 {
916     // 5 : 5 input parameters
917     CallSignature signature("CopyRestArgs", 0, 5,
918         ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
919     *callSign = signature;
920     // 5 : 5 input parameters
921     std::array<VariableType, 5> params = {
922         VariableType::NATIVE_POINTER(),  // glue
923         VariableType::NATIVE_POINTER(),  // actual argv
924         VariableType::INT32(),           // startIdx
925         VariableType::INT32(),           // numArgs
926         VariableType::JS_ANY(),          // actual argv Array
927     };
928     callSign->SetParameters(params.data());
929     callSign->SetCallConv(CallSignature::CallConv::CCallConv);
930 }
931 
DEF_CALL_SIGNATURE(NewJSObject)932 DEF_CALL_SIGNATURE(NewJSObject)
933 {
934     // 2 : 2 input parameters
935     CallSignature signature("NewJSObject", 0, 2,
936         ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
937     *callSign = signature;
938     // 2 : 2 input parameters
939     std::array<VariableType, 2> params = {
940         VariableType::NATIVE_POINTER(),  // glue
941         VariableType::JS_ANY(),          // hclass
942     };
943     callSign->SetParameters(params.data());
944     callSign->SetCallConv(CallSignature::CallConv::CCallConv);
945 }
946 
DEF_CALL_SIGNATURE(NewLexicalEnv)947 DEF_CALL_SIGNATURE(NewLexicalEnv)
948 {
949     // 3 : 3 input parameters
950     CallSignature signature("NewLexicalEnv", 0, 3,
951         ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
952     *callSign = signature;
953     // 3 : 3 input parameters
954     std::array<VariableType, 3> params = {
955         VariableType::NATIVE_POINTER(),  // glue
956         VariableType::JS_ANY(),          // parent
957         VariableType::INT32(),           // numArgs
958     };
959     callSign->SetParameters(params.data());
960     callSign->SetCallConv(CallSignature::CallConv::CCallConv);
961 }
962 
DEF_CALL_SIGNATURE(GetUnmappedArgs)963 DEF_CALL_SIGNATURE(GetUnmappedArgs)
964 {
965     // 4 : 4 input parameters
966     CallSignature signature("GetUnmappedArgs", 0, 4,
967         ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
968     *callSign = signature;
969     // 4 : 4 input parameters
970     std::array<VariableType, 4> params = {
971         VariableType::NATIVE_POINTER(),  // glue
972         VariableType::NATIVE_POINTER(),  // actual argv
973         VariableType::INT32(),           // numArgs
974         VariableType::JS_ANY(),          // actual argv Array
975     };
976     callSign->SetParameters(params.data());
977     callSign->SetCallConv(CallSignature::CallConv::CCallConv);
978 }
979 
DEF_CALL_SIGNATURE(GetCallSpreadArgs)980 DEF_CALL_SIGNATURE(GetCallSpreadArgs)
981 {
982     // 2 : 2 input parameters
983     CallSignature signature("GetCallSpreadArgs", 0, 2,
984         ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
985     *callSign = signature;
986     // 2 : 2 input parameters
987     std::array<VariableType, 2> params = {
988         VariableType::NATIVE_POINTER(),  // glue
989         VariableType::JS_ANY(),          // array
990     };
991     callSign->SetParameters(params.data());
992     callSign->SetCallConv(CallSignature::CallConv::CCallConv);
993 }
994 
DEF_CALL_SIGNATURE(GetTaggedArrayPtrTest)995 DEF_CALL_SIGNATURE(GetTaggedArrayPtrTest)
996 {
997     // 2 : 2 input parameters
998     CallSignature getTaggedArrayPtr("GetTaggedArrayPtrTest", 0, 2, ArgumentsOrder::DEFAULT_ORDER,
999                                      VariableType::JS_POINTER());
1000     *callSign = getTaggedArrayPtr;
1001     // 2 : 2 input parameters
1002     std::array<VariableType, 2> params = {
1003         VariableType::NATIVE_POINTER(),
1004         VariableType::JS_ANY(),
1005     };
1006     callSign->SetParameters(params.data());
1007     callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB);
1008 }
1009 
DEF_CALL_SIGNATURE(Builtins)1010 DEF_CALL_SIGNATURE(Builtins)
1011 {
1012     // 9 : 9 input parameters
1013     CallSignature builtins("Builtins", 0, 9,
1014         ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
1015     *callSign = builtins;
1016     std::array<VariableType, 9> params = { // 9 : 9 input parameters
1017         VariableType::NATIVE_POINTER(),    // glue
1018         VariableType::NATIVE_POINTER(),    // native code
1019         VariableType::JS_ANY(),            // func
1020         VariableType::JS_ANY(),            // new target
1021         VariableType::JS_ANY(),            // this
1022         VariableType::NATIVE_POINTER(),    // argc
1023         VariableType::JS_ANY(),            // arg0
1024         VariableType::JS_ANY(),            // arg1
1025         VariableType::JS_ANY(),            // arg2
1026     };
1027     callSign->SetVariadicArgs(true);
1028     callSign->SetParameters(params.data());
1029     callSign->SetTargetKind(CallSignature::TargetKind::BUILTINS_STUB);
1030     callSign->SetCallConv(CallSignature::CallConv::CCallConv);
1031 }
1032 
DEF_CALL_SIGNATURE(BuiltinsWithArgv)1033 DEF_CALL_SIGNATURE(BuiltinsWithArgv)
1034 {
1035     // 7 : 7 input parameters
1036     CallSignature builtinsWtihArgv("Builtins", 0, 7,
1037         ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
1038     *callSign = builtinsWtihArgv;
1039     std::array<VariableType, 7> params = { // 7 : 7 input parameters
1040         VariableType::NATIVE_POINTER(),    // glue
1041         VariableType::NATIVE_POINTER(),    // nativeCode
1042         VariableType::JS_ANY(),            // func
1043         VariableType::JS_ANY(),            // new target
1044         VariableType::JS_ANY(),            // this
1045         VariableType::NATIVE_POINTER(),    // argc
1046         VariableType::NATIVE_POINTER(),    // argv
1047     };
1048     callSign->SetParameters(params.data());
1049     callSign->SetTargetKind(CallSignature::TargetKind::BUILTINS_WITH_ARGV_STUB);
1050     callSign->SetCallConv(CallSignature::CallConv::CCallConv);
1051 }
1052 
DEF_CALL_SIGNATURE(BytecodeHandler)1053 DEF_CALL_SIGNATURE(BytecodeHandler)
1054 {
1055     // 7 : 7 input parameters
1056     CallSignature bytecodeHandler("BytecodeHandler", 0, 7,
1057         ArgumentsOrder::DEFAULT_ORDER, VariableType::VOID());
1058     *callSign = bytecodeHandler;
1059     // 7 : 7 input parameters
1060     std::array<VariableType, 7> params = {
1061         VariableType::NATIVE_POINTER(),
1062         VariableType::NATIVE_POINTER(),
1063         VariableType::NATIVE_POINTER(),
1064         VariableType::JS_POINTER(),
1065         VariableType::JS_POINTER(),
1066         VariableType::JS_ANY(),
1067         VariableType::INT32(),
1068     };
1069     callSign->SetParameters(params.data());
1070     callSign->SetTargetKind(CallSignature::TargetKind::BYTECODE_HANDLER);
1071     callSign->SetCallConv(CallSignature::CallConv::GHCCallConv);
1072 }
1073 
DEF_CALL_SIGNATURE(BytecodeDebuggerHandler)1074 DEF_CALL_SIGNATURE(BytecodeDebuggerHandler)
1075 {
1076     // 7 : 7 input parameters
1077     CallSignature bytecodeHandler("BytecodeDebuggerHandler", 0, 7,
1078                                   ArgumentsOrder::DEFAULT_ORDER, VariableType::VOID());
1079     *callSign = bytecodeHandler;
1080     // 7 : 7 input parameters
1081     std::array<VariableType, 7> params = { VariableType::NATIVE_POINTER(),
1082                                            VariableType::NATIVE_POINTER(),
1083                                            VariableType::NATIVE_POINTER(),
1084                                            VariableType::JS_POINTER(),
1085                                            VariableType::JS_POINTER(),
1086                                            VariableType::JS_ANY(),
1087                                            VariableType::INT32() };
1088     callSign->SetParameters(params.data());
1089     callSign->SetTargetKind(CallSignature::TargetKind::BYTECODE_DEBUGGER_HANDLER);
1090 }
1091 
DEF_CALL_SIGNATURE(CallRuntime)1092 DEF_CALL_SIGNATURE(CallRuntime)
1093 {
1094     /* 3 : 3 input parameters */
1095     CallSignature runtimeCallTrampoline("CallRuntime", 0, 3,
1096         ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
1097     *callSign = runtimeCallTrampoline;
1098     /* 3 : 3 input parameters */
1099     std::array<VariableType, 3> params = {
1100         VariableType::NATIVE_POINTER(),
1101         VariableType::INT64(),
1102         VariableType::INT64(),
1103     };
1104     callSign->SetVariadicArgs(true);
1105     callSign->SetParameters(params.data());
1106     callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB);
1107     callSign->SetCallConv(CallSignature::CallConv::CCallConv);
1108 }
1109 
DEF_CALL_SIGNATURE(AsmInterpreterEntry)1110 DEF_CALL_SIGNATURE(AsmInterpreterEntry)
1111 {
1112     /* 3 : 3 input parameters */
1113     CallSignature asmInterpreterEntry("AsmInterpreterEntry", 0, 3,
1114         ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
1115     *callSign = asmInterpreterEntry;
1116     /* 3 : 3 input parameters */
1117     std::array<VariableType, 3> params = {
1118         VariableType::NATIVE_POINTER(),  // glue
1119         VariableType::INT32(),  // argc
1120         VariableType::NATIVE_POINTER(),  // argv
1121     };
1122     callSign->SetParameters(params.data());
1123     callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
1124     callSign->SetCallConv(CallSignature::CallConv::CCallConv);
1125 }
1126 
1127 #define BASELINE_CALL_ARGS_SIGNATURE_COMMON(name)                           \
1128     /* 1 : 1 input parameters */                                            \
1129     CallSignature signature(#name, 0, 1,                                    \
1130         ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());             \
1131     *callSign = signature;                                                  \
1132     std::array<VariableType, 1> params = { /* 1: 1 input parameters */      \
1133         VariableType::NATIVE_POINTER(),                                     \
1134     };                                                                      \
1135     callSign->SetVariadicArgs(true);                                        \
1136     callSign->SetParameters(params.data());                                 \
1137     callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC); \
1138     callSign->SetCallConv(CallSignature::CallConv::GHCCallConv);
1139 
DEF_CALL_SIGNATURE(CallArg0AndCheckToBaseline)1140 DEF_CALL_SIGNATURE(CallArg0AndCheckToBaseline)
1141 {
1142     BASELINE_CALL_ARGS_SIGNATURE_COMMON(CallArg0AndCheckToBaseline)
1143 }
1144 
DEF_CALL_SIGNATURE(CallArg1AndCheckToBaseline)1145 DEF_CALL_SIGNATURE(CallArg1AndCheckToBaseline)
1146 {
1147     BASELINE_CALL_ARGS_SIGNATURE_COMMON(CallArg1AndCheckToBaseline)
1148 }
1149 
DEF_CALL_SIGNATURE(CallArgs2AndCheckToBaseline)1150 DEF_CALL_SIGNATURE(CallArgs2AndCheckToBaseline)
1151 {
1152     BASELINE_CALL_ARGS_SIGNATURE_COMMON(CallArgs2AndCheckToBaseline)
1153 }
1154 
DEF_CALL_SIGNATURE(CallArgs3AndCheckToBaseline)1155 DEF_CALL_SIGNATURE(CallArgs3AndCheckToBaseline)
1156 {
1157     BASELINE_CALL_ARGS_SIGNATURE_COMMON(CallArgs3AndCheckToBaseline)
1158 }
1159 
DEF_CALL_SIGNATURE(CallThisArg0AndCheckToBaseline)1160 DEF_CALL_SIGNATURE(CallThisArg0AndCheckToBaseline)
1161 {
1162     BASELINE_CALL_ARGS_SIGNATURE_COMMON(CallThisArg0AndCheckToBaseline)
1163 }
1164 
DEF_CALL_SIGNATURE(CallThisArg1AndCheckToBaseline)1165 DEF_CALL_SIGNATURE(CallThisArg1AndCheckToBaseline)
1166 {
1167     BASELINE_CALL_ARGS_SIGNATURE_COMMON(CallThisArg1AndCheckToBaseline)
1168 }
1169 
DEF_CALL_SIGNATURE(CallThisArgs2AndCheckToBaseline)1170 DEF_CALL_SIGNATURE(CallThisArgs2AndCheckToBaseline)
1171 {
1172     BASELINE_CALL_ARGS_SIGNATURE_COMMON(CallThisArgs2AndCheckToBaseline)
1173 }
1174 
DEF_CALL_SIGNATURE(CallThisArgs3AndCheckToBaseline)1175 DEF_CALL_SIGNATURE(CallThisArgs3AndCheckToBaseline)
1176 {
1177     BASELINE_CALL_ARGS_SIGNATURE_COMMON(CallThisArgs3AndCheckToBaseline)
1178 }
1179 
DEF_CALL_SIGNATURE(CallRangeAndCheckToBaseline)1180 DEF_CALL_SIGNATURE(CallRangeAndCheckToBaseline)
1181 {
1182     BASELINE_CALL_ARGS_SIGNATURE_COMMON(CallRangeAndCheckToBaseline)
1183 }
1184 
DEF_CALL_SIGNATURE(CallNewAndCheckToBaseline)1185 DEF_CALL_SIGNATURE(CallNewAndCheckToBaseline)
1186 {
1187     BASELINE_CALL_ARGS_SIGNATURE_COMMON(CallNewAndCheckToBaseline)
1188 }
1189 
DEF_CALL_SIGNATURE(SuperCallAndCheckToBaseline)1190 DEF_CALL_SIGNATURE(SuperCallAndCheckToBaseline)
1191 {
1192     BASELINE_CALL_ARGS_SIGNATURE_COMMON(SuperCallAndCheckToBaseline)
1193 }
1194 
DEF_CALL_SIGNATURE(CallThisRangeAndCheckToBaseline)1195 DEF_CALL_SIGNATURE(CallThisRangeAndCheckToBaseline)
1196 {
1197     BASELINE_CALL_ARGS_SIGNATURE_COMMON(CallThisRangeAndCheckToBaseline)
1198 }
1199 
DEF_CALL_SIGNATURE(CallArg0AndDispatchFromBaseline)1200 DEF_CALL_SIGNATURE(CallArg0AndDispatchFromBaseline)
1201 {
1202     BASELINE_CALL_ARGS_SIGNATURE_COMMON(CallArg0AndDispatchFromBaseline)
1203 }
1204 
DEF_CALL_SIGNATURE(CallArg1AndDispatchFromBaseline)1205 DEF_CALL_SIGNATURE(CallArg1AndDispatchFromBaseline)
1206 {
1207     BASELINE_CALL_ARGS_SIGNATURE_COMMON(CallArg1AndDispatchFromBaseline)
1208 }
1209 
DEF_CALL_SIGNATURE(CallArgs2AndDispatchFromBaseline)1210 DEF_CALL_SIGNATURE(CallArgs2AndDispatchFromBaseline)
1211 {
1212     BASELINE_CALL_ARGS_SIGNATURE_COMMON(CallArgs2AndDispatchFromBaseline)
1213 }
1214 
DEF_CALL_SIGNATURE(CallArgs3AndDispatchFromBaseline)1215 DEF_CALL_SIGNATURE(CallArgs3AndDispatchFromBaseline)
1216 {
1217     BASELINE_CALL_ARGS_SIGNATURE_COMMON(CallArgs3AndDispatchFromBaseline)
1218 }
1219 
DEF_CALL_SIGNATURE(CallThisArg0AndDispatchFromBaseline)1220 DEF_CALL_SIGNATURE(CallThisArg0AndDispatchFromBaseline)
1221 {
1222     BASELINE_CALL_ARGS_SIGNATURE_COMMON(CallThisArg0AndDispatchFromBaseline)
1223 }
1224 
DEF_CALL_SIGNATURE(CallThisArg1AndDispatchFromBaseline)1225 DEF_CALL_SIGNATURE(CallThisArg1AndDispatchFromBaseline)
1226 {
1227     BASELINE_CALL_ARGS_SIGNATURE_COMMON(CallThisArg1AndDispatchFromBaseline)
1228 }
1229 
DEF_CALL_SIGNATURE(CallThisArgs2AndDispatchFromBaseline)1230 DEF_CALL_SIGNATURE(CallThisArgs2AndDispatchFromBaseline)
1231 {
1232     BASELINE_CALL_ARGS_SIGNATURE_COMMON(CallThisArgs2AndDispatchFromBaseline)
1233 }
1234 
DEF_CALL_SIGNATURE(CallThisArgs3AndDispatchFromBaseline)1235 DEF_CALL_SIGNATURE(CallThisArgs3AndDispatchFromBaseline)
1236 {
1237     BASELINE_CALL_ARGS_SIGNATURE_COMMON(CallThisArgs3AndDispatchFromBaseline)
1238 }
1239 
DEF_CALL_SIGNATURE(CallRangeAndDispatchFromBaseline)1240 DEF_CALL_SIGNATURE(CallRangeAndDispatchFromBaseline)
1241 {
1242     BASELINE_CALL_ARGS_SIGNATURE_COMMON(CallRangeAndDispatchFromBaseline)
1243 }
1244 
DEF_CALL_SIGNATURE(CallNewAndDispatchFromBaseline)1245 DEF_CALL_SIGNATURE(CallNewAndDispatchFromBaseline)
1246 {
1247     BASELINE_CALL_ARGS_SIGNATURE_COMMON(CallNewAndDispatchFromBaseline)
1248 }
1249 
DEF_CALL_SIGNATURE(SuperCallAndDispatchFromBaseline)1250 DEF_CALL_SIGNATURE(SuperCallAndDispatchFromBaseline)
1251 {
1252     BASELINE_CALL_ARGS_SIGNATURE_COMMON(SuperCallAndDispatchFromBaseline)
1253 }
1254 
DEF_CALL_SIGNATURE(CallThisRangeAndDispatchFromBaseline)1255 DEF_CALL_SIGNATURE(CallThisRangeAndDispatchFromBaseline)
1256 {
1257     BASELINE_CALL_ARGS_SIGNATURE_COMMON(CallThisRangeAndDispatchFromBaseline)
1258 }
1259 
DEF_CALL_SIGNATURE(CallArg0AndCheckToBaselineFromBaseline)1260 DEF_CALL_SIGNATURE(CallArg0AndCheckToBaselineFromBaseline)
1261 {
1262     BASELINE_CALL_ARGS_SIGNATURE_COMMON(CallArg0AndCheckToBaselineFromBaseline)
1263 }
1264 
DEF_CALL_SIGNATURE(CallArg1AndCheckToBaselineFromBaseline)1265 DEF_CALL_SIGNATURE(CallArg1AndCheckToBaselineFromBaseline)
1266 {
1267     BASELINE_CALL_ARGS_SIGNATURE_COMMON(CallArg1AndCheckToBaselineFromBaseline)
1268 }
1269 
DEF_CALL_SIGNATURE(CallArgs2AndCheckToBaselineFromBaseline)1270 DEF_CALL_SIGNATURE(CallArgs2AndCheckToBaselineFromBaseline)
1271 {
1272     BASELINE_CALL_ARGS_SIGNATURE_COMMON(CallArgs2AndCheckToBaselineFromBaseline)
1273 }
1274 
DEF_CALL_SIGNATURE(CallArgs3AndCheckToBaselineFromBaseline)1275 DEF_CALL_SIGNATURE(CallArgs3AndCheckToBaselineFromBaseline)
1276 {
1277     BASELINE_CALL_ARGS_SIGNATURE_COMMON(CallArgs3AndCheckToBaselineFromBaseline)
1278 }
1279 
DEF_CALL_SIGNATURE(CallThisArg0AndCheckToBaselineFromBaseline)1280 DEF_CALL_SIGNATURE(CallThisArg0AndCheckToBaselineFromBaseline)
1281 {
1282     BASELINE_CALL_ARGS_SIGNATURE_COMMON(CallThisArg0AndCheckToBaselineFromBaseline)
1283 }
1284 
DEF_CALL_SIGNATURE(CallThisArg1AndCheckToBaselineFromBaseline)1285 DEF_CALL_SIGNATURE(CallThisArg1AndCheckToBaselineFromBaseline)
1286 {
1287     BASELINE_CALL_ARGS_SIGNATURE_COMMON(CallThisArg1AndCheckToBaselineFromBaseline)
1288 }
1289 
DEF_CALL_SIGNATURE(CallThisArgs2AndCheckToBaselineFromBaseline)1290 DEF_CALL_SIGNATURE(CallThisArgs2AndCheckToBaselineFromBaseline)
1291 {
1292     BASELINE_CALL_ARGS_SIGNATURE_COMMON(CallThisArgs2AndCheckToBaselineFromBaseline)
1293 }
1294 
DEF_CALL_SIGNATURE(CallThisArgs3AndCheckToBaselineFromBaseline)1295 DEF_CALL_SIGNATURE(CallThisArgs3AndCheckToBaselineFromBaseline)
1296 {
1297     BASELINE_CALL_ARGS_SIGNATURE_COMMON(CallThisArgs3AndCheckToBaselineFromBaseline)
1298 }
1299 
DEF_CALL_SIGNATURE(CallRangeAndCheckToBaselineFromBaseline)1300 DEF_CALL_SIGNATURE(CallRangeAndCheckToBaselineFromBaseline)
1301 {
1302     BASELINE_CALL_ARGS_SIGNATURE_COMMON(CallRangeAndCheckToBaselineFromBaseline)
1303 }
1304 
DEF_CALL_SIGNATURE(CallNewAndCheckToBaselineFromBaseline)1305 DEF_CALL_SIGNATURE(CallNewAndCheckToBaselineFromBaseline)
1306 {
1307     BASELINE_CALL_ARGS_SIGNATURE_COMMON(CallNewAndCheckToBaselineFromBaseline)
1308 }
1309 
DEF_CALL_SIGNATURE(SuperCallAndCheckToBaselineFromBaseline)1310 DEF_CALL_SIGNATURE(SuperCallAndCheckToBaselineFromBaseline)
1311 {
1312     BASELINE_CALL_ARGS_SIGNATURE_COMMON(SuperCallAndCheckToBaselineFromBaseline)
1313 }
1314 
DEF_CALL_SIGNATURE(CallThisRangeAndCheckToBaselineFromBaseline)1315 DEF_CALL_SIGNATURE(CallThisRangeAndCheckToBaselineFromBaseline)
1316 {
1317     BASELINE_CALL_ARGS_SIGNATURE_COMMON(CallThisRangeAndCheckToBaselineFromBaseline)
1318 }
1319 
DEF_CALL_SIGNATURE(GetBaselineBuiltinFp)1320 DEF_CALL_SIGNATURE(GetBaselineBuiltinFp)
1321 {
1322     /* 1 : 1 input parameters */
1323     CallSignature getBaselineBuiltinFp("GetBaselineBuiltinFp", 0, 1,
1324         ArgumentsOrder::DEFAULT_ORDER, VariableType::NATIVE_POINTER());
1325     *callSign = getBaselineBuiltinFp;
1326     std::array<VariableType, 1> params = { /* 1 : 1 input parameters */
1327         VariableType::NATIVE_POINTER(),  // glue
1328     };
1329     callSign->SetVariadicArgs(true);
1330     callSign->SetParameters(params.data());
1331     callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
1332     callSign->SetCallConv(CallSignature::CallConv::CCallConv);
1333 }
1334 
DEF_CALL_SIGNATURE(GeneratorReEnterAsmInterp)1335 DEF_CALL_SIGNATURE(GeneratorReEnterAsmInterp)
1336 {
1337     /* 2 : 2 input parameters */
1338     CallSignature generatorReEnterAsmInterp("GeneratorReEnterAsmInterp", 0, 2,
1339         ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
1340     *callSign = generatorReEnterAsmInterp;
1341     std::array<VariableType, 2> params = { /* 2 : 2 input parameters */
1342         VariableType::NATIVE_POINTER(),  // glue
1343         VariableType::JS_POINTER(),      // context
1344     };
1345     callSign->SetParameters(params.data());
1346     callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
1347     callSign->SetCallConv(CallSignature::CallConv::CCallConv);
1348 }
1349 
DEF_CALL_SIGNATURE(CallRuntimeWithArgv)1350 DEF_CALL_SIGNATURE(CallRuntimeWithArgv)
1351 {
1352     /* 4 : 4 input parameters */
1353     CallSignature runtimeCallTrampoline("CallRuntimeWithArgv", 0, 4,
1354         ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
1355     *callSign = runtimeCallTrampoline;
1356     std::array<VariableType, 4> params = { /* 4 : 4 input parameters */
1357         VariableType::NATIVE_POINTER(), // glue
1358         VariableType::INT64(),   // runtimeId
1359         VariableType::INT64(),   // argc
1360         VariableType::NATIVE_POINTER(), // argv
1361     };
1362     callSign->SetVariadicArgs(false);
1363     callSign->SetParameters(params.data());
1364     callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_VARARGS);
1365     callSign->SetCallConv(CallSignature::CallConv::CCallConv);
1366 }
1367 
1368 #define AOT_CALL_SIGNATURE(name)                                        \
1369     /* 6 : 6 input parameters */                                        \
1370     CallSignature signature(#name, 0, 6,                                \
1371         ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());         \
1372     *callSign = signature;                                              \
1373     std::array<VariableType, 6> params = { /* 6 : 6 input parameters */ \
1374         VariableType::NATIVE_POINTER(),    /* glue */                   \
1375         VariableType::INT64(),             /* actual argC */            \
1376         VariableType::NATIVE_POINTER(),    /* actual argV */            \
1377         VariableType::JS_ANY(),            /* call target */            \
1378         VariableType::JS_ANY(),            /* new target */             \
1379         VariableType::JS_ANY(),            /* thisobj */                \
1380     };                                                                  \
1381     callSign->SetVariadicArgs(true);                                    \
1382     callSign->SetParameters(params.data());                             \
1383     callSign->SetCallConv(CallSignature::CallConv::WebKitJSCallConv);
1384 
1385 #define FAST_AOT_CALL_SIGNATURE(name)                                   \
1386     /* 3 : 3 input parameters */                                        \
1387     CallSignature signature(#name, 0, 3,                                \
1388         ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());         \
1389     *callSign = signature;                                              \
1390     std::array<VariableType, 3> params = { /* 3 : 3 input parameters */ \
1391         VariableType::NATIVE_POINTER(),     /* glue */                  \
1392         VariableType::JS_ANY(),      /* call target */                  \
1393         VariableType::JS_ANY(),      /* thisobj */                      \
1394     };                                                                  \
1395     callSign->SetVariadicArgs(true);                                    \
1396     callSign->SetParameters(params.data());                             \
1397     callSign->SetCallConv(CallSignature::CallConv::CCallConv);
1398 
DEF_CALL_SIGNATURE(OptimizedCallAndPushArgv)1399 DEF_CALL_SIGNATURE(OptimizedCallAndPushArgv)
1400 {
1401     AOT_CALL_SIGNATURE(OptimizedCallAndPushArgv)
1402     callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
1403 }
1404 
DEF_CALL_SIGNATURE(OptimizedFastCallAndPushArgv)1405 DEF_CALL_SIGNATURE(OptimizedFastCallAndPushArgv)
1406 {
1407     /* 6 : 6 input parameters */
1408     CallSignature optimizedFastCallAndPushArgv("OptimizedFastCallAndPushArgv", 0, 6,
1409         ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
1410     *callSign = optimizedFastCallAndPushArgv;
1411     std::array<VariableType, 6> params = { /* 6 : 6 input parameters */
1412         VariableType::NATIVE_POINTER(),  // glue
1413         VariableType::INT64(),           // actual argC
1414         VariableType::NATIVE_POINTER(),  // actual argV
1415         VariableType::JS_ANY(),      // call target
1416         VariableType::JS_ANY(),      // new target
1417         VariableType::JS_ANY(),      // thisobj
1418     };
1419     callSign->SetVariadicArgs(true);
1420     callSign->SetParameters(params.data());
1421     callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
1422     callSign->SetCallConv(CallSignature::CallConv::CCallConv);
1423 }
1424 
DEF_CALL_SIGNATURE(JSCall)1425 DEF_CALL_SIGNATURE(JSCall)
1426 {
1427     AOT_CALL_SIGNATURE(JSCall)
1428     callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
1429 }
1430 
DEF_CALL_SIGNATURE(JSOptimizedCall)1431 DEF_CALL_SIGNATURE(JSOptimizedCall)
1432 {
1433     AOT_CALL_SIGNATURE(JSOptimizedCall)
1434     callSign->SetTargetKind(CallSignature::TargetKind::OPTIMIZED_STUB);
1435 }
1436 
DEF_CALL_SIGNATURE(JSCallNew)1437 DEF_CALL_SIGNATURE(JSCallNew)
1438 {
1439     AOT_CALL_SIGNATURE(JSCallNew)
1440     callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
1441 }
1442 
DEF_CALL_SIGNATURE(JSOptimizedFastCall)1443 DEF_CALL_SIGNATURE(JSOptimizedFastCall)
1444 {
1445     FAST_AOT_CALL_SIGNATURE(JSOptimizedFastCall)
1446     callSign->SetTargetKind(CallSignature::TargetKind::OPTIMIZED_FAST_CALL_STUB);
1447 }
1448 
DEF_CALL_SIGNATURE(AOTCallToAsmInterBridge)1449 DEF_CALL_SIGNATURE(AOTCallToAsmInterBridge)
1450 {
1451     AOT_CALL_SIGNATURE(AOTCallToAsmInterBridge)
1452     callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
1453 }
1454 
DEF_CALL_SIGNATURE(FastCallToAsmInterBridge)1455 DEF_CALL_SIGNATURE(FastCallToAsmInterBridge)
1456 {
1457     FAST_AOT_CALL_SIGNATURE(FastCallToAsmInterBridge)
1458     callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
1459 }
1460 
DEF_CALL_SIGNATURE(JSProxyCallInternalWithArgV)1461 DEF_CALL_SIGNATURE(JSProxyCallInternalWithArgV)
1462 {
1463     // 2 : 2 input parameters
1464     CallSignature jSProxyCallInternalWithArgV("JSProxyCallInternalWithArgV", 0, 2,
1465         ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
1466     *callSign = jSProxyCallInternalWithArgV;
1467     std::array<VariableType, 2> params = { // 2 : 2 input parameters
1468         VariableType::NATIVE_POINTER(),     // glue
1469         VariableType::JS_ANY(),      // call target
1470     };
1471     callSign->SetParameters(params.data());
1472     callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
1473     callSign->SetGCLeafFunction(true);
1474     callSign->SetTailCall(true);
1475 }
1476 
DEF_CALL_SIGNATURE(JSFunctionEntry)1477 DEF_CALL_SIGNATURE(JSFunctionEntry)
1478 {
1479     // 5 : 5 input parameters
1480     CallSignature jsCallFunctionEntry("JSFunctionEntry", 0, 5,
1481         ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
1482     *callSign = jsCallFunctionEntry;
1483     std::array<VariableType, 5> params = {  // 5 : 5 input parameters
1484         VariableType::NATIVE_POINTER(),     // glue
1485         VariableType::INT64(),              // argc
1486         VariableType::NATIVE_POINTER(),     // argv
1487         VariableType::NATIVE_POINTER(),     // prevFp
1488         VariableType::BOOL(),               // isNew
1489     };
1490     callSign->SetParameters(params.data());
1491     callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
1492     callSign->SetCallConv(CallSignature::CallConv::CCallConv);
1493 }
1494 
DEF_CALL_SIGNATURE(OptimizedFastCallEntry)1495 DEF_CALL_SIGNATURE(OptimizedFastCallEntry)
1496 {
1497     // 4 : 4 input parameters
1498     CallSignature optimizedFastCallEntry("OptimizedFastCallEntry", 0, 4,
1499         ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
1500     *callSign = optimizedFastCallEntry;
1501     std::array<VariableType, 4> params = {  // 4 : 4 input parameters
1502         VariableType::NATIVE_POINTER(),     // glue
1503         VariableType::INT64(),              // argc
1504         VariableType::NATIVE_POINTER(),     // argv
1505         VariableType::NATIVE_POINTER(),     // prevFp
1506     };
1507     callSign->SetParameters(params.data());
1508     callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
1509     callSign->SetCallConv(CallSignature::CallConv::CCallConv);
1510 }
1511 
DEF_CALL_SIGNATURE(ResumeRspAndDispatch)1512 DEF_CALL_SIGNATURE(ResumeRspAndDispatch)
1513 {
1514     // 8 : 8 input parameters
1515     CallSignature resumeRspAndDispatch("ResumeRspAndDispatch", 0, 8,
1516         ArgumentsOrder::DEFAULT_ORDER, VariableType::VOID());
1517     *callSign = resumeRspAndDispatch;
1518     std::array<VariableType, 8> params = { // 8 : 8 input parameters
1519         VariableType::NATIVE_POINTER(),
1520         VariableType::NATIVE_POINTER(),
1521         VariableType::NATIVE_POINTER(),
1522         VariableType::JS_POINTER(),
1523         VariableType::JS_POINTER(),
1524         VariableType::JS_ANY(),
1525         VariableType::INT32(),
1526         VariableType::NATIVE_POINTER(),
1527     };
1528     callSign->SetParameters(params.data());
1529     callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
1530     callSign->SetCallConv(CallSignature::CallConv::GHCCallConv);
1531 }
1532 
DEF_CALL_SIGNATURE(ResumeRspAndReturn)1533 DEF_CALL_SIGNATURE(ResumeRspAndReturn)
1534 {
1535     // 3 : 3 input parameters
1536     CallSignature resumeRspAndReturn("ResumeRspAndReturn", 0, 3,
1537         ArgumentsOrder::DEFAULT_ORDER, VariableType::VOID());
1538     *callSign = resumeRspAndReturn;
1539     std::array<VariableType, 3> params = { // 3 : 3 input parameters
1540         VariableType::JS_ANY(),
1541         VariableType::NATIVE_POINTER(),
1542         VariableType::NATIVE_POINTER(),
1543     };
1544     callSign->SetParameters(params.data());
1545     callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
1546     callSign->SetCallConv(CallSignature::CallConv::GHCCallConv);
1547 }
1548 
DEF_CALL_SIGNATURE(ResumeRspAndReturnBaseline)1549 DEF_CALL_SIGNATURE(ResumeRspAndReturnBaseline)
1550 {
1551     // 4 : 4 input parameters
1552     CallSignature resumeRspAndReturnBaseline("ResumeRspAndReturnBaseline", 0, 4,
1553         ArgumentsOrder::DEFAULT_ORDER, VariableType::VOID());
1554     *callSign = resumeRspAndReturnBaseline;
1555     std::array<VariableType, 4> params = { // 4 : 4 input parameters
1556         VariableType::JS_ANY(),            // %r13 - acc
1557         VariableType::NATIVE_POINTER(),    // %rbp - prevSp
1558         VariableType::NATIVE_POINTER(),    // %r12 - sp
1559         VariableType::NATIVE_POINTER(),    // %rbx - jumpSizeAfterCall
1560     };
1561     callSign->SetParameters(params.data());
1562     callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
1563     callSign->SetCallConv(CallSignature::CallConv::GHCCallConv);
1564 }
1565 
DEF_CALL_SIGNATURE(ResumeCaughtFrameAndDispatch)1566 DEF_CALL_SIGNATURE(ResumeCaughtFrameAndDispatch)
1567 {
1568     // 7 : 7 input parameters
1569     CallSignature resumeCaughtFrameAndDispatch("ResumeCaughtFrameAndDispatch", 0, 7,
1570         ArgumentsOrder::DEFAULT_ORDER, VariableType::VOID());
1571     *callSign = resumeCaughtFrameAndDispatch;
1572     // 7 : 7 input parameters
1573     std::array<VariableType, 7> params = {
1574         VariableType::NATIVE_POINTER(),
1575         VariableType::NATIVE_POINTER(),
1576         VariableType::NATIVE_POINTER(),
1577         VariableType::JS_POINTER(),
1578         VariableType::JS_POINTER(),
1579         VariableType::JS_ANY(),
1580         VariableType::INT32(),
1581     };
1582     callSign->SetParameters(params.data());
1583     callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
1584     callSign->SetCallConv(CallSignature::CallConv::GHCCallConv);
1585 }
1586 
DEF_CALL_SIGNATURE(ResumeUncaughtFrameAndReturn)1587 DEF_CALL_SIGNATURE(ResumeUncaughtFrameAndReturn)
1588 {
1589     // 3 : 3 input parameters
1590     CallSignature resumeUncaughtFrameAndReturn("ResumeUncaughtFrameAndReturn", 0, 3,
1591         ArgumentsOrder::DEFAULT_ORDER, VariableType::VOID());
1592     *callSign = resumeUncaughtFrameAndReturn;
1593     std::array<VariableType, 3> params = { // 3 : 3 input parameters
1594         VariableType::NATIVE_POINTER(),
1595         VariableType::NATIVE_POINTER(),
1596         VariableType::JS_ANY(),
1597     };
1598     callSign->SetParameters(params.data());
1599     callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
1600     callSign->SetCallConv(CallSignature::CallConv::GHCCallConv);
1601 }
1602 
DEF_CALL_SIGNATURE(ResumeRspAndRollback)1603 DEF_CALL_SIGNATURE(ResumeRspAndRollback)
1604 {
1605     // 8 : 8 input parameters
1606     CallSignature resumeRspAndRollback("ResumeRspAndRollback", 0, 8,
1607         ArgumentsOrder::DEFAULT_ORDER, VariableType::VOID());
1608     *callSign = resumeRspAndRollback;
1609     std::array<VariableType, 8> params = { // 8 : 8 input parameters
1610         VariableType::NATIVE_POINTER(),
1611         VariableType::NATIVE_POINTER(),
1612         VariableType::NATIVE_POINTER(),
1613         VariableType::JS_POINTER(),
1614         VariableType::JS_POINTER(),
1615         VariableType::JS_ANY(),
1616         VariableType::INT32(),
1617         VariableType::NATIVE_POINTER(),
1618     };
1619     callSign->SetParameters(params.data());
1620     callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
1621     callSign->SetCallConv(CallSignature::CallConv::GHCCallConv);
1622 }
1623 
DEF_CALL_SIGNATURE(StringsAreEquals)1624 DEF_CALL_SIGNATURE(StringsAreEquals)
1625 {
1626     // 2 : 2 input parameters
1627     CallSignature stringsAreEquals("StringsAreEquals", 0, 2,
1628         ArgumentsOrder::DEFAULT_ORDER, VariableType::BOOL());
1629     *callSign = stringsAreEquals;
1630     std::array<VariableType, 2> params = { // 2 : 2 input parameters
1631         VariableType::JS_POINTER(),
1632         VariableType::JS_POINTER(),
1633     };
1634     callSign->SetParameters(params.data());
1635     callSign->SetGCLeafFunction(true);
1636     callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
1637 }
1638 
DEF_CALL_SIGNATURE(JSHClassFindProtoTransitions)1639 DEF_CALL_SIGNATURE(JSHClassFindProtoTransitions)
1640 {
1641     // 3 : 3 input parameters
1642     CallSignature bigIntSameValueZero("JSHClassFindProtoTransitions", 0, 3,
1643         ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
1644     *callSign = bigIntSameValueZero;
1645     std::array<VariableType, 3> params = { // 3 : 3 input parameters
1646         VariableType::JS_POINTER(),
1647         VariableType::JS_POINTER(),
1648         VariableType::JS_POINTER(),
1649     };
1650     callSign->SetParameters(params.data());
1651     callSign->SetGCLeafFunction(true);
1652     callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
1653 }
1654 
DEF_CALL_SIGNATURE(NumberHelperStringToDouble)1655 DEF_CALL_SIGNATURE(NumberHelperStringToDouble)
1656 {
1657     // 1 : 1 input parameters
1658     CallSignature bigIntSameValueZero("NumberHelperStringToDouble", 0, 1,
1659         ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
1660     *callSign = bigIntSameValueZero;
1661     std::array<VariableType, 1> params = { // 1 : 1 input parameters
1662         VariableType::JS_POINTER(),
1663     };
1664     callSign->SetParameters(params.data());
1665     callSign->SetGCLeafFunction(true);
1666     callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
1667 }
1668 
DEF_CALL_SIGNATURE(CallBigIntAsIntN)1669 DEF_CALL_SIGNATURE(CallBigIntAsIntN)
1670 {
1671     // 2 : 2 input parameters
1672     CallSignature signature("CallBigIntAsIntN", 0, 2, ArgumentsOrder::DEFAULT_ORDER,
1673                             VariableType::JS_POINTER());
1674     *callSign = signature;
1675     std::array<VariableType, 2> params = { // 2 : 2 input parameters
1676         VariableType::FLOAT64(),
1677         VariableType::JS_POINTER()
1678     };
1679     callSign->SetParameters(params.data());
1680     callSign->SetGCLeafFunction(true);
1681     callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
1682 }
1683 
DEF_CALL_SIGNATURE(CallBigIntAsUintN)1684 DEF_CALL_SIGNATURE(CallBigIntAsUintN)
1685 {
1686     // 2 : 2 input parameters
1687     CallSignature signature("CallBigIntAsUintN", 0, 2, ArgumentsOrder::DEFAULT_ORDER,
1688                             VariableType::JS_POINTER());
1689     *callSign = signature;
1690     std::array<VariableType, 2> params = { // 2 : 2 input parameters
1691         VariableType::FLOAT64(),
1692         VariableType::JS_POINTER(),
1693     };
1694     callSign->SetParameters(params.data());
1695     callSign->SetGCLeafFunction(true);
1696     callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
1697 }
1698 
DEF_CALL_SIGNATURE(GetStringToListCacheArray)1699 DEF_CALL_SIGNATURE(GetStringToListCacheArray)
1700 {
1701     // 1 : 1 input parameters
1702     CallSignature callSignature("GetStringToListCacheArray", 0, 1,
1703         ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
1704     *callSign = callSignature;
1705     std::array<VariableType, 1> params = { // 1 : 1 input parameters
1706         VariableType::NATIVE_POINTER(),
1707     };
1708     callSign->SetParameters(params.data());
1709     callSign->SetGCLeafFunction(true);
1710     callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
1711 }
1712 
DEF_CALL_SIGNATURE(BigIntEquals)1713 DEF_CALL_SIGNATURE(BigIntEquals)
1714 {
1715     // 2 : 2 input parameters
1716     CallSignature bigIntEquals("BigIntEquals", 0, 2,
1717         ArgumentsOrder::DEFAULT_ORDER, VariableType::BOOL());
1718     *callSign = bigIntEquals;
1719     std::array<VariableType, 2> params = { // 2 : 2 input parameters
1720         VariableType::JS_POINTER(),
1721         VariableType::JS_POINTER(),
1722     };
1723     callSign->SetParameters(params.data());
1724     callSign->SetGCLeafFunction(true);
1725     callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
1726 }
1727 
DEF_CALL_SIGNATURE(FastArraySort)1728 DEF_CALL_SIGNATURE(FastArraySort)
1729 {
1730     // 2 : 2 input parameters
1731     CallSignature fastArraySort("FastArraySort", 0, 2, ArgumentsOrder::DEFAULT_ORDER, VariableType::INT32());
1732     *callSign = fastArraySort;
1733     std::array<VariableType, 2> params = { // 2 : 2 input parameters
1734         VariableType::JS_ANY(),
1735         VariableType::JS_ANY()
1736     };
1737     callSign->SetParameters(params.data());
1738     callSign->SetGCLeafFunction(true);
1739     callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
1740 }
1741 
DEF_CALL_SIGNATURE(StringToNumber)1742 DEF_CALL_SIGNATURE(StringToNumber)
1743 {
1744     // 4 : 4 input parameters
1745     CallSignature stringToNumber("StringToDoubleWithRadix", 0, 2,
1746         ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
1747     *callSign = stringToNumber;
1748     std::array<VariableType, 2> params = { // 2 : 2 input parameters
1749         VariableType::JS_POINTER(),
1750         VariableType::INT32(),
1751     };
1752     callSign->SetParameters(params.data());
1753     callSign->SetGCLeafFunction(true);
1754     callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
1755 }
1756 
DEF_CALL_SIGNATURE(ArrayTrim)1757 DEF_CALL_SIGNATURE(ArrayTrim)
1758 {
1759     // 3 : 3 input parameters
1760     CallSignature ArrayTrim("ArrayTrim", 0, 3, ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
1761     *callSign = ArrayTrim;
1762     std::array<VariableType, 3> params = { // 3 : 3 input parameters
1763         VariableType::NATIVE_POINTER(),
1764         VariableType::JS_POINTER(),
1765         VariableType::INT64()
1766     };
1767     callSign->SetParameters(params.data());
1768     callSign->SetGCLeafFunction(true);
1769     callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
1770 }
1771 
DEF_CALL_SIGNATURE(BigIntSameValueZero)1772 DEF_CALL_SIGNATURE(BigIntSameValueZero)
1773 {
1774     // 1 : 1 input parameters
1775     CallSignature bigIntSameValueZero("BigIntSameValueZero", 0, 2,
1776         ArgumentsOrder::DEFAULT_ORDER, VariableType::BOOL());
1777     *callSign = bigIntSameValueZero;
1778     std::array<VariableType, 2> params = { // 2 : 2 input parameters
1779         VariableType::JS_POINTER(),
1780         VariableType::JS_POINTER(),
1781     };
1782     callSign->SetParameters(params.data());
1783     callSign->SetGCLeafFunction(true);
1784     callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
1785 }
1786 
DEF_CALL_SIGNATURE(StringGetStart)1787 DEF_CALL_SIGNATURE(StringGetStart)
1788 {
1789     CallSignature stringGetStart("StringGetStart", 0, 4, ArgumentsOrder::DEFAULT_ORDER, VariableType::INT32());
1790     *callSign = stringGetStart;
1791     std::array<VariableType, 4> params = { // 4 : four input parameters
1792         VariableType::BOOL(),
1793         VariableType::JS_POINTER(),
1794         VariableType::INT32(),
1795         VariableType::INT32(),
1796     };
1797     callSign->SetParameters(params.data());
1798     callSign->SetGCLeafFunction(true);
1799     callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
1800 }
1801 
DEF_CALL_SIGNATURE(StringGetEnd)1802 DEF_CALL_SIGNATURE(StringGetEnd)
1803 {
1804     CallSignature stringGetEnd("StringGetEnd", 0, 5, ArgumentsOrder::DEFAULT_ORDER, VariableType::INT32());
1805     *callSign = stringGetEnd;
1806     std::array<VariableType, 5> params = { // 5 : five input parameters
1807         VariableType::BOOL(),
1808         VariableType::JS_POINTER(),
1809         VariableType::INT32(),
1810         VariableType::INT32(),
1811         VariableType::INT32(),
1812     };
1813     callSign->SetParameters(params.data());
1814     callSign->SetGCLeafFunction(true);
1815     callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
1816 }
1817 
1818 #define PUSH_CALL_ARGS_AND_DISPATCH_SIGNATURE_COMMON(name)                  \
1819     /* 1 : 1 input parameters */                                            \
1820     CallSignature signature(#name, 0, 1,                                    \
1821         ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());             \
1822     *callSign = signature;                                                  \
1823     std::array<VariableType, 1> params = { /* 1: 1 input parameters */      \
1824         VariableType::NATIVE_POINTER(),                                     \
1825     };                                                                      \
1826     callSign->SetVariadicArgs(true);                                        \
1827     callSign->SetParameters(params.data());                                 \
1828     callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
1829 
1830 #define PUSH_CALL_ARGS_AND_DISPATCH_SIGNATURE(name)                      \
1831     PUSH_CALL_ARGS_AND_DISPATCH_SIGNATURE_COMMON(name)                   \
1832     callSign->SetCallConv(CallSignature::CallConv::GHCCallConv);
1833 
1834 #define PUSH_CALL_ARGS_AND_DISPATCH_NATIVE_SIGNATURE(name)               \
1835     PUSH_CALL_ARGS_AND_DISPATCH_SIGNATURE_COMMON(name)                   \
1836     callSign->SetCallConv(CallSignature::CallConv::WebKitJSCallConv);
1837 
1838 #define PUSH_CALL_ARGS_AND_DISPATCH_NATIVE_RANGE_SIGNATURE(name)         \
1839     PUSH_CALL_ARGS_AND_DISPATCH_SIGNATURE_COMMON(name)                   \
1840     callSign->SetCallConv(CallSignature::CallConv::CCallConv);
1841 
DEF_CALL_SIGNATURE(PushCallArgsAndDispatchNative)1842 DEF_CALL_SIGNATURE(PushCallArgsAndDispatchNative)
1843 {
1844     PUSH_CALL_ARGS_AND_DISPATCH_NATIVE_SIGNATURE(PushCallArgsAndDispatchNative)
1845 }
1846 
DEF_CALL_SIGNATURE(PushCallArg0AndDispatch)1847 DEF_CALL_SIGNATURE(PushCallArg0AndDispatch)
1848 {
1849     PUSH_CALL_ARGS_AND_DISPATCH_SIGNATURE(PushCallArg0AndDispatch)
1850 }
1851 
DEF_CALL_SIGNATURE(PushCallArg1AndDispatch)1852 DEF_CALL_SIGNATURE(PushCallArg1AndDispatch)
1853 {
1854     PUSH_CALL_ARGS_AND_DISPATCH_SIGNATURE(PushCallArg1AndDispatch)
1855 }
1856 
DEF_CALL_SIGNATURE(PushCallArgs2AndDispatch)1857 DEF_CALL_SIGNATURE(PushCallArgs2AndDispatch)
1858 {
1859     PUSH_CALL_ARGS_AND_DISPATCH_SIGNATURE(PushCallArgs2AndDispatch)
1860 }
1861 
DEF_CALL_SIGNATURE(PushCallArgs3AndDispatch)1862 DEF_CALL_SIGNATURE(PushCallArgs3AndDispatch)
1863 {
1864     PUSH_CALL_ARGS_AND_DISPATCH_SIGNATURE(PushCallArgs3AndDispatch)
1865 }
1866 
DEF_CALL_SIGNATURE(PushCallThisArg0AndDispatch)1867 DEF_CALL_SIGNATURE(PushCallThisArg0AndDispatch)
1868 {
1869     PUSH_CALL_ARGS_AND_DISPATCH_SIGNATURE(PushCallThisArg0AndDispatch)
1870 }
1871 
DEF_CALL_SIGNATURE(PushCallThisArg1AndDispatch)1872 DEF_CALL_SIGNATURE(PushCallThisArg1AndDispatch)
1873 {
1874     PUSH_CALL_ARGS_AND_DISPATCH_SIGNATURE(PushCallThisArg1AndDispatch)
1875 }
1876 
DEF_CALL_SIGNATURE(PushCallThisArgs2AndDispatch)1877 DEF_CALL_SIGNATURE(PushCallThisArgs2AndDispatch)
1878 {
1879     PUSH_CALL_ARGS_AND_DISPATCH_SIGNATURE(PushCallThisArgs2AndDispatch)
1880 }
1881 
DEF_CALL_SIGNATURE(PushCallThisArgs3AndDispatch)1882 DEF_CALL_SIGNATURE(PushCallThisArgs3AndDispatch)
1883 {
1884     PUSH_CALL_ARGS_AND_DISPATCH_SIGNATURE(PushCallThisArgs3AndDispatch)
1885 }
1886 
DEF_CALL_SIGNATURE(PushCallRangeAndDispatchNative)1887 DEF_CALL_SIGNATURE(PushCallRangeAndDispatchNative)
1888 {
1889     PUSH_CALL_ARGS_AND_DISPATCH_NATIVE_RANGE_SIGNATURE(PushCallRangeAndDispatchNative)
1890 }
1891 
DEF_CALL_SIGNATURE(PushCallNewAndDispatchNative)1892 DEF_CALL_SIGNATURE(PushCallNewAndDispatchNative)
1893 {
1894     PUSH_CALL_ARGS_AND_DISPATCH_NATIVE_RANGE_SIGNATURE(PushCallNewAndDispatchNative)
1895 }
1896 
DEF_CALL_SIGNATURE(PushNewTargetAndDispatchNative)1897 DEF_CALL_SIGNATURE(PushNewTargetAndDispatchNative)
1898 {
1899     PUSH_CALL_ARGS_AND_DISPATCH_NATIVE_RANGE_SIGNATURE(PushNewTargetAndDispatchNative)
1900 }
1901 
DEF_CALL_SIGNATURE(PushCallNewAndDispatch)1902 DEF_CALL_SIGNATURE(PushCallNewAndDispatch)
1903 {
1904     PUSH_CALL_ARGS_AND_DISPATCH_SIGNATURE(PushCallNewAndDispatch)
1905 }
1906 
DEF_CALL_SIGNATURE(PushSuperCallAndDispatch)1907 DEF_CALL_SIGNATURE(PushSuperCallAndDispatch)
1908 {
1909     PUSH_CALL_ARGS_AND_DISPATCH_SIGNATURE(PushSuperCallAndDispatch)
1910 }
1911 
DEF_CALL_SIGNATURE(PushCallRangeAndDispatch)1912 DEF_CALL_SIGNATURE(PushCallRangeAndDispatch)
1913 {
1914     PUSH_CALL_ARGS_AND_DISPATCH_SIGNATURE(PushCallRangeAndDispatch)
1915 }
1916 
DEF_CALL_SIGNATURE(PushCallThisRangeAndDispatch)1917 DEF_CALL_SIGNATURE(PushCallThisRangeAndDispatch)
1918 {
1919     PUSH_CALL_ARGS_AND_DISPATCH_SIGNATURE(PushCallThisRangeAndDispatch)
1920 }
1921 
DEF_CALL_SIGNATURE(CallGetter)1922 DEF_CALL_SIGNATURE(CallGetter)
1923 {
1924     PUSH_CALL_ARGS_AND_DISPATCH_NATIVE_RANGE_SIGNATURE(CallGetter)
1925 }
1926 
DEF_CALL_SIGNATURE(CallSetter)1927 DEF_CALL_SIGNATURE(CallSetter)
1928 {
1929     PUSH_CALL_ARGS_AND_DISPATCH_NATIVE_RANGE_SIGNATURE(CallSetter)
1930 }
1931 
DEF_CALL_SIGNATURE(CallContainersArgs2)1932 DEF_CALL_SIGNATURE(CallContainersArgs2)
1933 {
1934     PUSH_CALL_ARGS_AND_DISPATCH_NATIVE_RANGE_SIGNATURE(CallContainersArgs2)
1935 }
1936 
DEF_CALL_SIGNATURE(CallContainersArgs3)1937 DEF_CALL_SIGNATURE(CallContainersArgs3)
1938 {
1939     PUSH_CALL_ARGS_AND_DISPATCH_NATIVE_RANGE_SIGNATURE(CallContainersArgs3)
1940 }
1941 
DEF_CALL_SIGNATURE(CallReturnWithArgv)1942 DEF_CALL_SIGNATURE(CallReturnWithArgv)
1943 {
1944     PUSH_CALL_ARGS_AND_DISPATCH_NATIVE_RANGE_SIGNATURE(CallReturnWithArgv)
1945 }
1946 
DEF_CALL_SIGNATURE(JSCallWithArgV)1947 DEF_CALL_SIGNATURE(JSCallWithArgV)
1948 {
1949     // 5 : 5 input parameters
1950     CallSignature jSCallWithArgV("JSCallWithArgV", 0, 5,
1951         ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
1952     *callSign = jSCallWithArgV;
1953     // 5 : 5 input parameters
1954     std::array<VariableType, 5> params = {
1955         VariableType::NATIVE_POINTER(),   // glue
1956         VariableType::INT64(),            // actualNumArgs
1957         VariableType::JS_ANY(),           // jsfunc
1958         VariableType::JS_ANY(),           // newTarget
1959         VariableType::JS_ANY(),           // this
1960     };
1961     callSign->SetVariadicArgs(true);
1962     callSign->SetParameters(params.data());
1963     callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
1964     callSign->SetCallConv(CallSignature::CallConv::CCallConv);
1965 }
1966 
DEF_CALL_SIGNATURE(JSFastCallWithArgV)1967 DEF_CALL_SIGNATURE(JSFastCallWithArgV)
1968 {
1969     // 4 : 4 input parameters
1970     CallSignature jSFastCallWithArgV("JSFastCallWithArgV", 0, 4,
1971         ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
1972     *callSign = jSFastCallWithArgV;
1973     // 4 : 4 input parameters
1974     std::array<VariableType, 4> params = {
1975         VariableType::NATIVE_POINTER(),   // glue
1976         VariableType::JS_ANY(),           // jsfunc
1977         VariableType::JS_ANY(),           // this
1978         VariableType::INT64(),            // actualNumArgs
1979     };
1980     callSign->SetVariadicArgs(true);
1981     callSign->SetParameters(params.data());
1982     callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
1983     callSign->SetCallConv(CallSignature::CallConv::CCallConv);
1984 }
1985 
DEF_CALL_SIGNATURE(JSFastCallWithArgVAndPushArgv)1986 DEF_CALL_SIGNATURE(JSFastCallWithArgVAndPushArgv)
1987 {
1988     // 4 : 4 input parameters
1989     CallSignature jSCallWithArgV("JSFastCallWithArgVAndPushArgv", 0, 4,
1990         ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
1991     *callSign = jSCallWithArgV;
1992     // 4 : 4 input parameters
1993     std::array<VariableType, 4> params = {
1994         VariableType::NATIVE_POINTER(),   // glue
1995         VariableType::JS_ANY(),           // jsfunc
1996         VariableType::JS_ANY(),           // this
1997         VariableType::INT64(),            // actualNumArgs
1998     };
1999     callSign->SetVariadicArgs(true);
2000     callSign->SetParameters(params.data());
2001     callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
2002     callSign->SetCallConv(CallSignature::CallConv::CCallConv);
2003 }
2004 
DEF_CALL_SIGNATURE(JSCallWithArgVAndPushArgv)2005 DEF_CALL_SIGNATURE(JSCallWithArgVAndPushArgv)
2006 {
2007     // 5 : 5 input parameters
2008     CallSignature jSCallWithArgVAndPushArgv("JSCallWithArgVAndPushArgv", 0, 5,
2009         ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
2010     *callSign = jSCallWithArgVAndPushArgv;
2011     // 5 : 5 input parameters
2012     std::array<VariableType, 5> params = {
2013         VariableType::NATIVE_POINTER(),   // glue
2014         VariableType::INT64(),            // actualNumArgs
2015         VariableType::JS_ANY(),           // jsfunc
2016         VariableType::JS_ANY(),           // newTarget
2017         VariableType::JS_ANY(),           // this
2018     };
2019     callSign->SetVariadicArgs(true);
2020     callSign->SetParameters(params.data());
2021     callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
2022     callSign->SetCallConv(CallSignature::CallConv::CCallConv);
2023 }
2024 
DEF_CALL_SIGNATURE(CallOptimized)2025 DEF_CALL_SIGNATURE(CallOptimized)
2026 {
2027     // 6 : 6 input parameters
2028     CallSignature callOptimized("CallOptimized", 0, 6,
2029         ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
2030     *callSign = callOptimized;
2031     std::array<VariableType, 6> params = { // 6 : 6 input parameters
2032         VariableType::NATIVE_POINTER(),  // glue
2033         VariableType::INT64(),           // actual argC
2034         VariableType::NATIVE_POINTER(),  // actual argV
2035         VariableType::JS_ANY(),      // call target
2036         VariableType::JS_ANY(),      // new target
2037         VariableType::JS_ANY(),      // thisobj
2038     };
2039     callSign->SetVariadicArgs(true);
2040     callSign->SetParameters(params.data());
2041     callSign->SetCallConv(CallSignature::CallConv::WebKitJSCallConv);
2042     callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
2043 }
2044 
DEF_CALL_SIGNATURE(SuperCallWithArgV)2045 DEF_CALL_SIGNATURE(SuperCallWithArgV)
2046 {
2047     // 5 : 5 input parameters
2048     CallSignature superCallWithArgV("SuperCallWithArgV", 0, 5,
2049         ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
2050     *callSign = superCallWithArgV;
2051     // 5 : 5 input parameters
2052     std::array<VariableType, 5> params = {
2053         VariableType::NATIVE_POINTER(),   // glue
2054         VariableType::INT64(),            // actualNumArgs
2055         VariableType::JS_ANY(),           // jsfunc
2056         VariableType::JS_ANY(),           // newTarget
2057         VariableType::JS_ANY(),           // this
2058     };
2059     callSign->SetVariadicArgs(true);
2060     callSign->SetParameters(params.data());
2061     callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
2062     callSign->SetCallConv(CallSignature::CallConv::CCallConv);
2063 }
2064 
DEF_CALL_SIGNATURE(Dump)2065 DEF_CALL_SIGNATURE(Dump)
2066 {
2067     constexpr size_t N_INPUT_PARAMETERS = 1;
2068     CallSignature dump("Dump", 0, N_INPUT_PARAMETERS,
2069         ArgumentsOrder::DEFAULT_ORDER, VariableType::VOID());
2070     *callSign = dump;
2071     std::array<VariableType, N_INPUT_PARAMETERS> params = {
2072         VariableType::JS_POINTER() // Tagged value of the object to be dumped
2073     };
2074     callSign->SetParameters(params.data());
2075     callSign->SetGCLeafFunction(true);
2076     callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
2077 }
2078 
DEF_CALL_SIGNATURE(DebugDump)2079 DEF_CALL_SIGNATURE(DebugDump)
2080 {
2081     constexpr size_t N_INPUT_PARAMETERS = 1;
2082     CallSignature debugDump("DebugDump", 0, N_INPUT_PARAMETERS,
2083         ArgumentsOrder::DEFAULT_ORDER, VariableType::VOID());
2084     *callSign = debugDump;
2085     std::array<VariableType, N_INPUT_PARAMETERS> params = {
2086         VariableType::JS_POINTER() // Tagged value of the object to be dumped
2087     };
2088     callSign->SetParameters(params.data());
2089     callSign->SetGCLeafFunction(true);
2090     callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
2091 }
2092 
DEF_CALL_SIGNATURE(DumpWithHint)2093 DEF_CALL_SIGNATURE(DumpWithHint)
2094 {
2095     constexpr size_t N_INPUT_PARAMETERS = 2;
2096     CallSignature dumpWithHint("DumpWithHint", 0, N_INPUT_PARAMETERS,
2097         ArgumentsOrder::DEFAULT_ORDER, VariableType::VOID());
2098     *callSign = dumpWithHint;
2099     std::array<VariableType, N_INPUT_PARAMETERS> params = {
2100         VariableType::NATIVE_POINTER(), // String created via CircuitBuilder::StringPtr()
2101         VariableType::JS_POINTER()      // Tagged value of the object to be dumped
2102     };
2103     callSign->SetParameters(params.data());
2104     callSign->SetGCLeafFunction(true);
2105     callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
2106 }
2107 
DEF_CALL_SIGNATURE(DebugDumpWithHint)2108 DEF_CALL_SIGNATURE(DebugDumpWithHint)
2109 {
2110     constexpr size_t N_INPUT_PARAMETERS = 2;
2111     CallSignature debugDumpWithHint("DebugDumpWithHint", 0, N_INPUT_PARAMETERS,
2112         ArgumentsOrder::DEFAULT_ORDER, VariableType::VOID());
2113     *callSign = debugDumpWithHint;
2114     std::array<VariableType, N_INPUT_PARAMETERS> params = {
2115         VariableType::NATIVE_POINTER(), // String created via CircuitBuilder::StringPtr()
2116         VariableType::JS_POINTER()      // Tagged value of the object to be dumped
2117     };
2118     callSign->SetParameters(params.data());
2119     callSign->SetGCLeafFunction(true);
2120     callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
2121 }
2122 
DEF_CALL_SIGNATURE(DebugPrint)2123 DEF_CALL_SIGNATURE(DebugPrint)
2124 {
2125     // 1 : 1 input parameters
2126     CallSignature debugPrint("DebugPrint", 0, 1,
2127         ArgumentsOrder::DEFAULT_ORDER, VariableType::VOID());
2128     *callSign = debugPrint;
2129     // 1 : 1 input parameters
2130     std::array<VariableType, 1> params = {
2131         VariableType::INT32(),
2132     };
2133     callSign->SetVariadicArgs(true);
2134     callSign->SetParameters(params.data());
2135     callSign->SetGCLeafFunction(true);
2136     callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
2137 }
2138 
DEF_CALL_SIGNATURE(DebugPrintCustom)2139 DEF_CALL_SIGNATURE(DebugPrintCustom)
2140 {
2141     // 1 : 1 input parameters
2142     CallSignature debugPrintCustom("DebugPrintCustom", 0,  1,
2143         ArgumentsOrder::DEFAULT_ORDER, VariableType::VOID());
2144     *callSign = debugPrintCustom;
2145     // 1 : 1 input parameters
2146     std::array<VariableType, 1> params = {
2147         VariableType::NATIVE_POINTER() // Format string created via CircuitBuilder::StringPtr()
2148     };
2149     callSign->SetVariadicArgs(true);
2150     callSign->SetParameters(params.data());
2151     callSign->SetGCLeafFunction(true);
2152     callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
2153 }
2154 
DEF_CALL_SIGNATURE(DebugPrintInstruction)2155 DEF_CALL_SIGNATURE(DebugPrintInstruction)
2156 {
2157     // 2 : 2 input parameters
2158     CallSignature debugPrintInstruction("DebugPrintInstruction", 0, 2,
2159         ArgumentsOrder::DEFAULT_ORDER, VariableType::VOID());
2160     *callSign = debugPrintInstruction;
2161     // 2 : 2 input parameters
2162     std::array<VariableType, 2> params = {
2163         VariableType::NATIVE_POINTER(),
2164         VariableType::NATIVE_POINTER(),
2165     };
2166     callSign->SetVariadicArgs(true);
2167     callSign->SetParameters(params.data());
2168     callSign->SetGCLeafFunction(true);
2169     callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
2170 }
2171 
DEF_CALL_SIGNATURE(DebugOsrEntry)2172 DEF_CALL_SIGNATURE(DebugOsrEntry)
2173 {
2174     // 2 : 2 input parameters
2175     CallSignature debugOsrEntry("DebugOsrEntry", 0, 2,
2176         ArgumentsOrder::DEFAULT_ORDER, VariableType::VOID());
2177     *callSign = debugOsrEntry;
2178     // 2 : 2 input parameters
2179     std::array<VariableType, 2> params = {
2180         VariableType::NATIVE_POINTER(),
2181         VariableType::NATIVE_POINTER(),
2182     };
2183     callSign->SetVariadicArgs(true);
2184     callSign->SetParameters(params.data());
2185     callSign->SetGCLeafFunction(true);
2186     callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
2187 }
2188 
DEF_CALL_SIGNATURE(Comment)2189 DEF_CALL_SIGNATURE(Comment)
2190 {
2191     // 1 : 1 input parameters
2192     CallSignature comment("Comment", 0, 1,
2193         ArgumentsOrder::DEFAULT_ORDER, VariableType::VOID());
2194     *callSign = comment;
2195     // 1 : 1 input parameters
2196     std::array<VariableType, 1> params = {
2197         VariableType::NATIVE_POINTER(),
2198     };
2199     callSign->SetParameters(params.data());
2200     callSign->SetGCLeafFunction(true);
2201     callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
2202 }
2203 
DEF_CALL_SIGNATURE(FatalPrint)2204 DEF_CALL_SIGNATURE(FatalPrint)
2205 {
2206     // 1 : 1 input parameters
2207     CallSignature fatalPrint("FatalPrint", 0, 1,
2208         ArgumentsOrder::DEFAULT_ORDER, VariableType::VOID());
2209     *callSign = fatalPrint;
2210     // 1 : 1 input parameters
2211     std::array<VariableType, 1> params = {
2212         VariableType::INT32(),
2213     };
2214     callSign->SetVariadicArgs(true);
2215     callSign->SetParameters(params.data());
2216     callSign->SetGCLeafFunction(true);
2217     callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
2218 }
2219 
DEF_CALL_SIGNATURE(FatalPrintCustom)2220 DEF_CALL_SIGNATURE(FatalPrintCustom)
2221 {
2222     // 1 : 1 input parameters
2223     CallSignature fatalPrintCustom("FatalPrintCustom", 0, 1,
2224         ArgumentsOrder::DEFAULT_ORDER, VariableType::VOID());
2225     *callSign = fatalPrintCustom;
2226     // 1 : 1 input parameters
2227     std::array<VariableType, 1> params = {
2228         VariableType::NATIVE_POINTER() // Format string created via CircuitBuilder::StringPtr()
2229     };
2230     callSign->SetVariadicArgs(true);
2231     callSign->SetParameters(params.data());
2232     callSign->SetGCLeafFunction(true);
2233     callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
2234 }
2235 
DEF_CALL_SIGNATURE(GetActualArgvNoGC)2236 DEF_CALL_SIGNATURE(GetActualArgvNoGC)
2237 {
2238     CallSignature index("GetActualArgvNoGC", 0, 1, ArgumentsOrder::DEFAULT_ORDER, VariableType::NATIVE_POINTER());
2239     *callSign = index;
2240     std::array<VariableType, 1> params = {
2241         VariableType::NATIVE_POINTER(),
2242     };
2243     callSign->SetParameters(params.data());
2244     callSign->SetGCLeafFunction(true);
2245     callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
2246 }
2247 
DEF_CALL_SIGNATURE(InsertNewToEdenRSet)2248 DEF_CALL_SIGNATURE(InsertNewToEdenRSet)
2249 {
2250     // 3 : 3 input parameters
2251     CallSignature index("InsertNewToEdenRSet", 0, 3, ArgumentsOrder::DEFAULT_ORDER, VariableType::VOID());
2252     *callSign = index;
2253     // 3 : 3 input parameters
2254     std::array<VariableType, 3> params = {
2255         VariableType::NATIVE_POINTER(),
2256         VariableType::JS_POINTER(),
2257         VariableType::NATIVE_POINTER(),
2258     };
2259     callSign->SetParameters(params.data());
2260     callSign->SetGCLeafFunction(true);
2261     callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
2262 }
2263 
DEF_CALL_SIGNATURE(InsertOldToNewRSet)2264 DEF_CALL_SIGNATURE(InsertOldToNewRSet)
2265 {
2266     // 3 : 3 input parameters
2267     CallSignature index("InsertOldToNewRSet", 0, 3, ArgumentsOrder::DEFAULT_ORDER, VariableType::VOID());
2268     *callSign = index;
2269     // 3 : 3 input parameters
2270     std::array<VariableType, 3> params = {
2271         VariableType::NATIVE_POINTER(),
2272         VariableType::JS_POINTER(),
2273         VariableType::NATIVE_POINTER(),
2274     };
2275     callSign->SetParameters(params.data());
2276     callSign->SetGCLeafFunction(true);
2277     callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
2278 }
2279 
DEF_CALL_SIGNATURE(InsertLocalToShareRSet)2280 DEF_CALL_SIGNATURE(InsertLocalToShareRSet)
2281 {
2282     // 3 : 3 input parameters
2283     CallSignature index("InsertLocalToShareRSet", 0, 3, ArgumentsOrder::DEFAULT_ORDER, VariableType::VOID());
2284     *callSign = index;
2285     // 3 : 3 input parameters
2286     std::array<VariableType, 3> params = {
2287         VariableType::NATIVE_POINTER(),
2288         VariableType::JS_POINTER(),
2289         VariableType::NATIVE_POINTER(),
2290     };
2291     callSign->SetParameters(params.data());
2292     callSign->SetGCLeafFunction(true);
2293     callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
2294 }
2295 
DEF_CALL_SIGNATURE(SetBitAtomic)2296 DEF_CALL_SIGNATURE(SetBitAtomic)
2297 {
2298     // 3 : 3 input parameters
2299     CallSignature index("SetBitAtomic", 0, 3, ArgumentsOrder::DEFAULT_ORDER, VariableType::VOID());
2300     *callSign = index;
2301     // 3 : 3 input parameters
2302     std::array<VariableType, 3> params = {
2303         VariableType::NATIVE_POINTER(),
2304         VariableType::INT32(),
2305         VariableType::INT32()
2306     };
2307     callSign->SetParameters(params.data());
2308     callSign->SetGCLeafFunction(true);
2309     callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
2310 }
2311 
2312 #define DEF_FLOAT_UNARY_CALL_SIGNATURE_BY_NAME(NAME)                                               \
2313     DEF_CALL_SIGNATURE(NAME)                                                                       \
2314     {                                                                                              \
2315         /* 1 : 1 input parameters */                                                               \
2316         CallSignature index(#NAME, 0, 1, ArgumentsOrder::DEFAULT_ORDER, VariableType::FLOAT64());  \
2317         *callSign = index;                                                                         \
2318         /* 1 : 1 input parameters */                                                               \
2319         std::array<VariableType, 1> params = {                                                     \
2320             VariableType::FLOAT64(),                                                               \
2321         };                                                                                         \
2322         callSign->SetParameters(params.data());                                                    \
2323         callSign->SetGCLeafFunction(true);                                                         \
2324         callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);                    \
2325     }
2326 
2327 DEF_FLOAT_UNARY_CALL_SIGNATURE_BY_NAME(FloatAcos)
DEF_FLOAT_UNARY_CALL_SIGNATURE_BY_NAME(FloatAcosh)2328 DEF_FLOAT_UNARY_CALL_SIGNATURE_BY_NAME(FloatAcosh)
2329 DEF_FLOAT_UNARY_CALL_SIGNATURE_BY_NAME(FloatAsin)
2330 DEF_FLOAT_UNARY_CALL_SIGNATURE_BY_NAME(FloatAsinh)
2331 DEF_FLOAT_UNARY_CALL_SIGNATURE_BY_NAME(FloatAtan)
2332 DEF_FLOAT_UNARY_CALL_SIGNATURE_BY_NAME(FloatAtanh)
2333 DEF_FLOAT_UNARY_CALL_SIGNATURE_BY_NAME(FloatCos)
2334 DEF_FLOAT_UNARY_CALL_SIGNATURE_BY_NAME(FloatCosh)
2335 DEF_FLOAT_UNARY_CALL_SIGNATURE_BY_NAME(FloatSin)
2336 DEF_FLOAT_UNARY_CALL_SIGNATURE_BY_NAME(FloatSinh)
2337 DEF_FLOAT_UNARY_CALL_SIGNATURE_BY_NAME(FloatTan)
2338 DEF_FLOAT_UNARY_CALL_SIGNATURE_BY_NAME(FloatTanh)
2339 DEF_FLOAT_UNARY_CALL_SIGNATURE_BY_NAME(FloatExp)
2340 DEF_FLOAT_UNARY_CALL_SIGNATURE_BY_NAME(FloatExpm1)
2341 DEF_FLOAT_UNARY_CALL_SIGNATURE_BY_NAME(FloatTrunc)
2342 DEF_FLOAT_UNARY_CALL_SIGNATURE_BY_NAME(FloatFloor)
2343 DEF_FLOAT_UNARY_CALL_SIGNATURE_BY_NAME(FloatLog)
2344 DEF_FLOAT_UNARY_CALL_SIGNATURE_BY_NAME(FloatLog2)
2345 DEF_FLOAT_UNARY_CALL_SIGNATURE_BY_NAME(FloatLog10)
2346 DEF_FLOAT_UNARY_CALL_SIGNATURE_BY_NAME(FloatLog1p)
2347 DEF_FLOAT_UNARY_CALL_SIGNATURE_BY_NAME(FloatCbrt)
2348 DEF_FLOAT_UNARY_CALL_SIGNATURE_BY_NAME(FloatClz32)
2349 DEF_FLOAT_UNARY_CALL_SIGNATURE_BY_NAME(FloatCeil)
2350 
2351 #undef DEF_FLOAT_UNARY_CALL_SIGNATURE_BY_NAME
2352 
2353 #define DEF_FLOAT_BINARY_CALL_SIGNATURE_BY_NAME(NAME)                                              \
2354     DEF_CALL_SIGNATURE(NAME)                                                                       \
2355     {                                                                                              \
2356         /* 2 : 2 input parameters */                                                               \
2357         CallSignature index(#NAME, 0, 2, ArgumentsOrder::DEFAULT_ORDER, VariableType::FLOAT64());  \
2358         *callSign = index;                                                                         \
2359         /* 2 : 2 input parameters */                                                               \
2360         std::array<VariableType, 2> params = {                                                     \
2361             VariableType::FLOAT64(),                                                               \
2362             VariableType::FLOAT64(),                                                               \
2363         };                                                                                         \
2364         callSign->SetParameters(params.data());                                                    \
2365         callSign->SetGCLeafFunction(true);                                                         \
2366         callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);                    \
2367     }
2368 
2369 DEF_FLOAT_BINARY_CALL_SIGNATURE_BY_NAME(FloatMod)
2370 DEF_FLOAT_BINARY_CALL_SIGNATURE_BY_NAME(FloatAtan2)
2371 DEF_FLOAT_BINARY_CALL_SIGNATURE_BY_NAME(FloatPow)
2372 
2373 #undef DEF_FLOAT_BINARY_CALL_SIGNATURE_BY_NAME
2374 
2375 DEF_CALL_SIGNATURE(CallDateNow)
2376 {
2377     CallSignature signature("CallDateNow", 0, 0, ArgumentsOrder::DEFAULT_ORDER,
2378         VariableType::FLOAT64());
2379     *callSign = signature;
2380     callSign->SetGCLeafFunction(true);
2381     callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
2382 }
2383 
DEF_CALL_SIGNATURE(FindElementWithCache)2384 DEF_CALL_SIGNATURE(FindElementWithCache)
2385 {
2386     // 4 : 4 input parameters
2387     CallSignature index("FindElementWithCache", 0, 4, ArgumentsOrder::DEFAULT_ORDER, VariableType::INT32());
2388     *callSign = index;
2389     // 4 : 4 input parameters
2390     std::array<VariableType, 4> params = {
2391         VariableType::NATIVE_POINTER(),
2392         VariableType::JS_ANY(),
2393         VariableType::JS_ANY(),
2394         VariableType::INT32(),
2395     };
2396     callSign->SetParameters(params.data());
2397     callSign->SetGCLeafFunction(true);
2398     callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
2399 }
2400 
DEF_CALL_SIGNATURE(UpdateFieldType)2401 DEF_CALL_SIGNATURE(UpdateFieldType)
2402 {
2403     // 2 : 2 input parameters
2404     CallSignature index("UpdateFieldType", 0, 2, ArgumentsOrder::DEFAULT_ORDER, VariableType::INT32());
2405     *callSign = index;
2406     // 2 : 2 input parameters
2407     std::array<VariableType, 2> params = {
2408         VariableType::JS_ANY(),
2409         VariableType::INT64(),
2410     };
2411     callSign->SetParameters(params.data());
2412     callSign->SetGCLeafFunction(true);
2413     callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
2414 }
2415 
DEF_CALL_SIGNATURE(NumberIsFinite)2416 DEF_CALL_SIGNATURE(NumberIsFinite)
2417 {
2418     // 1 : 1 input parameters
2419     CallSignature index("NumberIsFinite", 0, 1, ArgumentsOrder::DEFAULT_ORDER, VariableType::BOOL());
2420     *callSign = index;
2421     // 1 : 1 input parameters
2422     std::array<VariableType, 1> params = {
2423         VariableType::FLOAT64(),
2424     };
2425     callSign->SetParameters(params.data());
2426     callSign->SetGCLeafFunction(true);
2427     callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
2428 }
2429 
DEF_CALL_SIGNATURE(DoubleToInt)2430 DEF_CALL_SIGNATURE(DoubleToInt)
2431 {
2432     // 2 : 2 input parameters
2433     CallSignature index("DoubleToInt", 0, 2, ArgumentsOrder::DEFAULT_ORDER, VariableType::INT32());
2434     *callSign = index;
2435     // 2 : 2 input parameters
2436     std::array<VariableType, 2> params = {
2437         VariableType::FLOAT64(),
2438         VariableType::NATIVE_POINTER(),
2439     };
2440     callSign->SetParameters(params.data());
2441     callSign->SetGCLeafFunction(true);
2442     callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
2443 }
2444 
DEF_CALL_SIGNATURE(DoubleToLength)2445 DEF_CALL_SIGNATURE(DoubleToLength)
2446 {
2447     // 1 : 1 input parameters
2448     CallSignature index("DoubleToLength", 0, 1, ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
2449     *callSign = index;
2450     // 1 : 1 input parameters
2451     std::array<VariableType, 1> params = {
2452         VariableType::FLOAT64(),
2453     };
2454     callSign->SetParameters(params.data());
2455     callSign->SetGCLeafFunction(true);
2456     callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
2457 }
2458 
DEF_CALL_SIGNATURE(MarkingBarrier)2459 DEF_CALL_SIGNATURE(MarkingBarrier)
2460 {
2461     // 4 : 4 input parameters
2462     CallSignature index("MarkingBarrier", 0, 4, ArgumentsOrder::DEFAULT_ORDER, VariableType::VOID());
2463     *callSign = index;
2464     // 4 : 4 input parameters
2465     std::array<VariableType, 4> params = {
2466         VariableType::NATIVE_POINTER(),
2467         VariableType::JS_POINTER(),
2468         VariableType::NATIVE_POINTER(),
2469         VariableType::JS_POINTER()
2470     };
2471     callSign->SetParameters(params.data());
2472     callSign->SetGCLeafFunction(true);
2473     callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
2474 }
2475 
DEF_CALL_SIGNATURE(MarkingBarrierWithEden)2476 DEF_CALL_SIGNATURE(MarkingBarrierWithEden)
2477 {
2478     // 4 : 4 input parameters
2479     CallSignature index("MarkingBarrierWithEden", 0, 4, ArgumentsOrder::DEFAULT_ORDER, VariableType::VOID());
2480     *callSign = index;
2481     // 4 : 4 input parameters
2482     std::array<VariableType, 4> params = {
2483         VariableType::NATIVE_POINTER(),
2484         VariableType::JS_POINTER(),
2485         VariableType::NATIVE_POINTER(),
2486         VariableType::JS_POINTER()
2487     };
2488     callSign->SetParameters(params.data());
2489     callSign->SetGCLeafFunction(true);
2490     callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
2491 }
2492 
DEF_CALL_SIGNATURE(SharedGCMarkingBarrier)2493 DEF_CALL_SIGNATURE(SharedGCMarkingBarrier)
2494 {
2495     // 2 : 2 input parameters
2496     CallSignature index("SharedGCMarkingBarrier", 0, 2, ArgumentsOrder::DEFAULT_ORDER, VariableType::VOID());
2497     *callSign = index;
2498     // 2 : 2 input parameters
2499     std::array<VariableType, 2> params = {
2500         VariableType::NATIVE_POINTER(),
2501         VariableType::JS_POINTER(),
2502     };
2503     callSign->SetParameters(params.data());
2504     callSign->SetGCLeafFunction(true);
2505     callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
2506 }
2507 
DEF_CALL_SIGNATURE(StoreBarrier)2508 DEF_CALL_SIGNATURE(StoreBarrier)
2509 {
2510     // 4 : 4 input parameters
2511     CallSignature index("StoreBarrier", 0, 4, ArgumentsOrder::DEFAULT_ORDER, VariableType::VOID());
2512     *callSign = index;
2513     // 4 : 4 input parameters
2514     std::array<VariableType, 4> params = {
2515         VariableType::NATIVE_POINTER(),
2516         VariableType::JS_POINTER(),
2517         VariableType::NATIVE_POINTER(),
2518         VariableType::JS_POINTER()
2519     };
2520     callSign->SetParameters(params.data());
2521     callSign->SetGCLeafFunction(true);
2522     callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
2523 }
2524 
DEF_CALL_SIGNATURE(CallArg0)2525 DEF_CALL_SIGNATURE(CallArg0)
2526 {
2527     // 2 : 2 input parameters
2528     CallSignature callArg0("callArg0", 0, 2,
2529         ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
2530     *callSign = callArg0;
2531     // 2 : 2 input parameters
2532     std::array<VariableType, 2> params = {
2533         VariableType::NATIVE_POINTER(),
2534         VariableType::JS_ANY()
2535     };
2536     callSign->SetParameters(params.data());
2537     callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB);
2538 }
2539 
DEF_CALL_SIGNATURE(CallArg1)2540 DEF_CALL_SIGNATURE(CallArg1)
2541 {
2542     // 3 : 3 input parameters
2543     CallSignature callArg1("callArg1", 0, 3,
2544         ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
2545     *callSign = callArg1;
2546     // 3 : 3 input parameters
2547     std::array<VariableType, 3> params = {
2548         VariableType::NATIVE_POINTER(),
2549         VariableType::JS_ANY(),
2550         VariableType::JS_ANY()
2551     };
2552     callSign->SetParameters(params.data());
2553     callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB);
2554 }
2555 
DEF_CALL_SIGNATURE(CallArgs2)2556 DEF_CALL_SIGNATURE(CallArgs2)
2557 {
2558     // 4 : 4 input parameters
2559     CallSignature callArgs2("callArgs2", 0, 4,
2560         ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
2561     *callSign = callArgs2;
2562     // 4 : 4 input parameters
2563     std::array<VariableType, 4> params = {
2564         VariableType::NATIVE_POINTER(),
2565         VariableType::JS_ANY(),
2566         VariableType::JS_ANY(),
2567         VariableType::JS_ANY()
2568     };
2569     callSign->SetParameters(params.data());
2570     callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB);
2571 }
2572 
DEF_CALL_SIGNATURE(CallArgs3)2573 DEF_CALL_SIGNATURE(CallArgs3)
2574 {
2575     // 5 : 5 input parameters
2576     CallSignature callArgs3("callArgs3", 0, 5,
2577         ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
2578     *callSign = callArgs3;
2579     // 5 : 5 input parameters
2580     std::array<VariableType, 5> params = {
2581         VariableType::NATIVE_POINTER(),
2582         VariableType::JS_ANY(),
2583         VariableType::JS_ANY(),
2584         VariableType::JS_ANY(),
2585         VariableType::JS_ANY()
2586     };
2587     callSign->SetParameters(params.data());
2588     callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB);
2589 }
2590 
DEF_CALL_SIGNATURE(CallThisRange)2591 DEF_CALL_SIGNATURE(CallThisRange)
2592 {
2593     // 3 : 3 input parameters
2594     CallSignature callThisRange("callThisRange", 0, 3,
2595         ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
2596     *callSign = callThisRange;
2597     // 3 : 3 input parameters
2598     std::array<VariableType, 3> params = {
2599         VariableType::NATIVE_POINTER(),
2600         VariableType::JS_ANY(),
2601         VariableType::JS_ANY()
2602     };
2603     callSign->SetVariadicArgs(true);
2604     callSign->SetParameters(params.data());
2605     callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB);
2606 }
2607 
DEF_CALL_SIGNATURE(CallRange)2608 DEF_CALL_SIGNATURE(CallRange)
2609 {
2610     // 2 : 2 input parameters
2611     CallSignature callRange("callRange", 0, 2,
2612         ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
2613     *callSign = callRange;
2614     // 2 : 2 input parameters
2615     std::array<VariableType, 2> params = {
2616         VariableType::NATIVE_POINTER(),
2617         VariableType::JS_ANY()
2618     };
2619     callSign->SetVariadicArgs(true);
2620     callSign->SetParameters(params.data());
2621     callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB);
2622 }
2623 
DEF_CALL_SIGNATURE(JsProxyCallInternal)2624 DEF_CALL_SIGNATURE(JsProxyCallInternal)
2625 {
2626     // 4 : 4 input parameters
2627     CallSignature proxyCallInternal("JsProxyCallInternal", 0, 4,
2628         ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_POINTER());
2629     *callSign = proxyCallInternal;
2630     // 4 : 4 input parameters
2631     std::array<VariableType, 4> params = {
2632         VariableType::NATIVE_POINTER(),    // glue
2633         VariableType::INT64(),      // actual argC
2634         VariableType::JS_POINTER(), // callTarget
2635         VariableType::NATIVE_POINTER(),    // argv
2636     };
2637     callSign->SetVariadicArgs(false);
2638     callSign->SetParameters(params.data());
2639     callSign->SetTailCall(true);
2640     callSign->SetGCLeafFunction(true);
2641     callSign->SetTargetKind(CallSignature::TargetKind::COMMON_STUB);
2642     callSign->SetCallConv(CallSignature::CallConv::CCallConv);
2643 }
2644 
DEF_CALL_SIGNATURE(JsBoundCallInternal)2645 DEF_CALL_SIGNATURE(JsBoundCallInternal)
2646 {
2647     // 6 : 6 input parameters
2648     CallSignature boundCallInternal("JsBoundCallInternal", 0, 6,
2649         ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_POINTER());
2650     *callSign = boundCallInternal;
2651     // 6 : 6 input parameters
2652     std::array<VariableType, 6> params = {
2653         VariableType::NATIVE_POINTER(),    // glue
2654         VariableType::INT64(),      // actual argC
2655         VariableType::JS_POINTER(), // callTarget
2656         VariableType::NATIVE_POINTER(),    // argv
2657         VariableType::JS_POINTER(), // this
2658         VariableType::JS_POINTER(), // new
2659     };
2660     callSign->SetVariadicArgs(false);
2661     callSign->SetParameters(params.data());
2662     callSign->SetTailCall(true);
2663     callSign->SetGCLeafFunction(true);
2664     callSign->SetTargetKind(CallSignature::TargetKind::COMMON_STUB);
2665     callSign->SetCallConv(CallSignature::CallConv::CCallConv);
2666 }
2667 
DEF_CALL_SIGNATURE(CreateArrayFromList)2668 DEF_CALL_SIGNATURE(CreateArrayFromList)
2669 {
2670     // 3 : 3 input parameters
2671     CallSignature createArrayFromList("CreateArrayFromList", 0, 3, ArgumentsOrder::DEFAULT_ORDER,
2672                                      VariableType::JS_POINTER());
2673     *callSign = createArrayFromList;
2674     // 3 : 3 input parameters
2675     std::array<VariableType, 3> params = {
2676         VariableType::NATIVE_POINTER(),
2677         VariableType::INT32(),
2678         VariableType::NATIVE_POINTER(),
2679     };
2680 
2681     callSign->SetParameters(params.data());
2682     callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_VARARGS);
2683 }
2684 
DEF_CALL_SIGNATURE(DeoptHandlerAsm)2685 DEF_CALL_SIGNATURE(DeoptHandlerAsm)
2686 {
2687     // 1 : 1 input parameters
2688     CallSignature deoptHandlerAsm("DeoptHandlerAsm", 0, 3,
2689         ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
2690     *callSign = deoptHandlerAsm;
2691     std::array<VariableType, 3> params = { // 3 : 3 input parameters
2692         VariableType::NATIVE_POINTER(),     // glue
2693         VariableType::NATIVE_POINTER(),     // deoptType
2694         VariableType::NATIVE_POINTER(),     // depth
2695     };
2696     callSign->SetVariadicArgs(false);
2697     callSign->SetParameters(params.data());
2698     callSign->SetCallConv(CallSignature::CallConv::CCallConv);
2699     callSign->SetTargetKind(CallSignature::TargetKind::DEOPT_STUB);
2700 }
2701 
DEF_CALL_SIGNATURE(TimeClip)2702 DEF_CALL_SIGNATURE(TimeClip)
2703 {
2704     // 1 : 1 input parameters
2705     CallSignature index("TimeClip", 0, 1, ArgumentsOrder::DEFAULT_ORDER, VariableType::FLOAT64());
2706     *callSign = index;
2707     // 1 : 1 input parameters
2708     std::array<VariableType, 1> params = {
2709         VariableType::FLOAT64(),
2710     };
2711     callSign->SetParameters(params.data());
2712     callSign->SetGCLeafFunction(true);
2713     callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
2714 }
2715 
DEF_CALL_SIGNATURE(SetDateValues)2716 DEF_CALL_SIGNATURE(SetDateValues)
2717 {
2718     // 3 : 3 input parameters
2719     CallSignature index("SetDateValues", 0, 3, ArgumentsOrder::DEFAULT_ORDER, VariableType::FLOAT64());
2720     *callSign = index;
2721     // 3 : 3 input parameters
2722     std::array<VariableType, 3> params = {
2723         VariableType::FLOAT64(),
2724         VariableType::FLOAT64(),
2725         VariableType::FLOAT64(),
2726     };
2727     callSign->SetParameters(params.data());
2728     callSign->SetGCLeafFunction(true);
2729     callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
2730 }
2731 
DEF_CALL_SIGNATURE(StartCallTimer)2732 DEF_CALL_SIGNATURE(StartCallTimer)
2733 {
2734     CallSignature index("StartCallTimer", 0, 3, ArgumentsOrder::DEFAULT_ORDER, VariableType::VOID());
2735     *callSign = index;
2736     // 3 : 3 input parameters
2737     std::array<VariableType, 3> params = {
2738         VariableType::NATIVE_POINTER(),
2739         VariableType::JS_ANY(),
2740         VariableType::BOOL()
2741     };
2742     callSign->SetParameters(params.data());
2743     callSign->SetGCLeafFunction(true);
2744     callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
2745 }
2746 
DEF_CALL_SIGNATURE(EndCallTimer)2747 DEF_CALL_SIGNATURE(EndCallTimer)
2748 {
2749     CallSignature index("EndCallTimer", 0, 2, ArgumentsOrder::DEFAULT_ORDER, VariableType::VOID());
2750     *callSign = index;
2751     // 2 : 2 input parameters
2752     std::array<VariableType, 2> params = {
2753         VariableType::NATIVE_POINTER(),
2754         VariableType::JS_ANY()
2755     };
2756     callSign->SetParameters(params.data());
2757     callSign->SetGCLeafFunction(true);
2758     callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
2759 }
2760 
DEF_CALL_SIGNATURE(GetSingleCharCodeByIndex)2761 DEF_CALL_SIGNATURE(GetSingleCharCodeByIndex)
2762 {
2763     // 3 : 3 input parameters
2764     CallSignature signature("GetSingleCharCodeByIndex", 0, 3,
2765         ArgumentsOrder::DEFAULT_ORDER, VariableType::INT32());
2766     *callSign = signature;
2767     // 3 : 3 input parameters
2768     std::array<VariableType, 3> params = {
2769         VariableType::NATIVE_POINTER(),  // glue
2770         VariableType::JS_ANY(),          // ecmaString
2771         VariableType::INT32(),           // index
2772     };
2773     callSign->SetParameters(params.data());
2774     callSign->SetCallConv(CallSignature::CallConv::CCallConv);
2775 }
2776 
DEF_CALL_SIGNATURE(CreateStringBySingleCharCode)2777 DEF_CALL_SIGNATURE(CreateStringBySingleCharCode)
2778 {
2779     // 2 : 2 input parameters
2780     CallSignature signature("CreateStringByCharCode", 0, 2,
2781         ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
2782     *callSign = signature;
2783     // 2 : 2 input parameters
2784     std::array<VariableType, 2> params = {
2785         VariableType::NATIVE_POINTER(),  // glue
2786         VariableType::INT32(),           // charcode
2787     };
2788     callSign->SetParameters(params.data());
2789     callSign->SetCallConv(CallSignature::CallConv::CCallConv);
2790 }
2791 
DEF_CALL_SIGNATURE(Getpropiterator)2792 DEF_CALL_SIGNATURE(Getpropiterator)
2793 {
2794     // 2 : 2 input parameters
2795     CallSignature signature("Getpropiterator", 0, 2,
2796         ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
2797     *callSign = signature;
2798     // 2 : 2 input parameters
2799     std::array<VariableType, 2> params = {
2800         VariableType::NATIVE_POINTER(),  // glue
2801         VariableType::JS_ANY(),          // object
2802     };
2803     callSign->SetParameters(params.data());
2804     callSign->SetCallConv(CallSignature::CallConv::CCallConv);
2805 }
2806 
DEF_CALL_SIGNATURE(Getnextpropname)2807 DEF_CALL_SIGNATURE(Getnextpropname)
2808 {
2809     // 2 : 2 input parameters
2810     CallSignature signature("Getnextpropname", 0, 2,
2811         ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
2812     *callSign = signature;
2813     // 2 : 2 input parameters
2814     std::array<VariableType, 2> params = {
2815         VariableType::NATIVE_POINTER(),  // glue
2816         VariableType::JS_ANY(),          // iter
2817     };
2818     callSign->SetParameters(params.data());
2819     callSign->SetCallConv(CallSignature::CallConv::CCallConv);
2820 }
2821 
DEF_CALL_SIGNATURE(CreateJSSetIterator)2822 DEF_CALL_SIGNATURE(CreateJSSetIterator)
2823 {
2824     UNARY_CALL_SIGNATURE(CreateJSSetIterator)
2825 }
2826 
DEF_CALL_SIGNATURE(JSSetEntries)2827 DEF_CALL_SIGNATURE(JSSetEntries)
2828 {
2829     UNARY_CALL_SIGNATURE(JSSetEntries)
2830 }
2831 
DEF_CALL_SIGNATURE(CreateJSMapIterator)2832 DEF_CALL_SIGNATURE(CreateJSMapIterator)
2833 {
2834     UNARY_CALL_SIGNATURE(CreateJSMapIterator)
2835 }
2836 
DEF_CALL_SIGNATURE(JSMapKeys)2837 DEF_CALL_SIGNATURE(JSMapKeys)
2838 {
2839     UNARY_CALL_SIGNATURE(JSMapKeys)
2840 }
2841 
DEF_CALL_SIGNATURE(JSMapValues)2842 DEF_CALL_SIGNATURE(JSMapValues)
2843 {
2844     UNARY_CALL_SIGNATURE(JSMapValues)
2845 }
2846 
DEF_CALL_SIGNATURE(JSMapGet)2847 DEF_CALL_SIGNATURE(JSMapGet)
2848 {
2849     BINARY_CALL_SIGNATURE(JSMapGet)
2850 }
2851 
DEF_CALL_SIGNATURE(StringIteratorNext)2852 DEF_CALL_SIGNATURE(StringIteratorNext)
2853 {
2854     UNARY_CALL_SIGNATURE(StringIteratorNext)
2855 }
2856 
DEF_CALL_SIGNATURE(JSMapHas)2857 DEF_CALL_SIGNATURE(JSMapHas)
2858 {
2859     *callSign = CallSignature("JSMapHas", 0, ArgumentsOrder::DEFAULT_ORDER, VariableType::BOOL(),
2860         {
2861             VariableType::NATIVE_POINTER(),  // glue
2862             VariableType::JS_ANY(),          // obj
2863             VariableType::JS_ANY(),          // key
2864         });
2865 }
2866 
DEF_CALL_SIGNATURE(JSSetHas)2867 DEF_CALL_SIGNATURE(JSSetHas)
2868 {
2869     *callSign = CallSignature("JSSetHas", 0, ArgumentsOrder::DEFAULT_ORDER, VariableType::BOOL(),
2870         {
2871             VariableType::NATIVE_POINTER(),  // glue
2872             VariableType::JS_ANY(),          // obj
2873             VariableType::JS_ANY(),          // key
2874         });
2875 }
2876 
DEF_CALL_SIGNATURE(JSMapDelete)2877 DEF_CALL_SIGNATURE(JSMapDelete)
2878 {
2879     *callSign = CallSignature("JSMapDelete", 0, ArgumentsOrder::DEFAULT_ORDER, VariableType::BOOL(),
2880         {
2881             VariableType::NATIVE_POINTER(),  // glue
2882             VariableType::JS_ANY(),          // obj
2883             VariableType::JS_ANY(),          // key
2884         });
2885 }
2886 
DEF_CALL_SIGNATURE(JSSetDelete)2887 DEF_CALL_SIGNATURE(JSSetDelete)
2888 {
2889     *callSign = CallSignature("JSSetDelete", 0, ArgumentsOrder::DEFAULT_ORDER, VariableType::BOOL(),
2890         {
2891             VariableType::NATIVE_POINTER(),  // glue
2892             VariableType::JS_ANY(),          // obj
2893             VariableType::JS_ANY(),          // key
2894         });
2895 }
2896 
DEF_CALL_SIGNATURE(JSSetAdd)2897 DEF_CALL_SIGNATURE(JSSetAdd)
2898 {
2899     *callSign = CallSignature("JSSetAdd", 0, ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY(),
2900         {
2901             VariableType::NATIVE_POINTER(),  // glue
2902             VariableType::JS_ANY(),          // obj
2903             VariableType::JS_ANY(),          // key
2904         });
2905 }
2906 
DEF_CALL_SIGNATURE(FastStringEqual)2907 DEF_CALL_SIGNATURE(FastStringEqual)
2908 {
2909     // 3 : 3 input parameters
2910     CallSignature signature("FastStringEqual", 0, 3,
2911         ArgumentsOrder::DEFAULT_ORDER, VariableType::BOOL());
2912     *callSign = signature;
2913     // 3 : 3 input parameters
2914     std::array<VariableType, 3> params = {
2915         VariableType::NATIVE_POINTER(),  // glue
2916         VariableType::JS_ANY(),          // ecmaString1
2917         VariableType::JS_ANY(),          // ecmaString2
2918     };
2919     callSign->SetParameters(params.data());
2920 }
2921 
DEF_CALL_SIGNATURE(FastStringAdd)2922 DEF_CALL_SIGNATURE(FastStringAdd)
2923 {
2924     // 3 : 3 input parameters
2925     CallSignature signature("FastStringAdd", 0, 3,
2926         ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
2927     *callSign = signature;
2928     // 3 : 3 input parameters
2929     std::array<VariableType, 3> params = {
2930         VariableType::NATIVE_POINTER(),  // glue
2931         VariableType::JS_ANY(),          // ecmaString1
2932         VariableType::JS_ANY(),          // ecmaString2
2933     };
2934     callSign->SetParameters(params.data());
2935     callSign->SetCallConv(CallSignature::CallConv::CCallConv);
2936 }
2937 
DEF_CALL_SIGNATURE(DeleteObjectProperty)2938 DEF_CALL_SIGNATURE(DeleteObjectProperty)
2939 {
2940     // 3 : 3 input parameters
2941     CallSignature signature("DeleteObjectProperty", 0, 3,
2942         ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
2943     *callSign = signature;
2944     // 3 : 3 input parameters
2945     std::array<VariableType, 3> params = {
2946         VariableType::NATIVE_POINTER(),  // glue
2947         VariableType::JS_ANY(),          // object
2948         VariableType::JS_ANY(),          // prop
2949     };
2950     callSign->SetParameters(params.data());
2951     callSign->SetCallConv(CallSignature::CallConv::CCallConv);
2952 }
2953 
DEF_CALL_SIGNATURE(CopyTypedArrayBuffer)2954 DEF_CALL_SIGNATURE(CopyTypedArrayBuffer)
2955 {
2956     // 6 : 6 input parameters
2957     CallSignature CopyTypedArrayBuffer("CopyTypedArrayBuffer", 0, 6,
2958         ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
2959     *callSign = CopyTypedArrayBuffer;
2960     // 6 : 6 input parameters
2961     std::array<VariableType, 6 > params = {
2962         VariableType::JS_POINTER(),
2963         VariableType::JS_POINTER(),
2964         VariableType::INT32(),
2965         VariableType::INT32(),
2966         VariableType::INT32(),
2967         VariableType::INT32()
2968     };
2969     callSign->SetParameters(params.data());
2970     callSign->SetGCLeafFunction(true);
2971     callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
2972 }
2973 
DEF_CALL_SIGNATURE(CreateJSTypedArrayEntries)2974 DEF_CALL_SIGNATURE(CreateJSTypedArrayEntries)
2975 {
2976     // 2 : 2 input parameters
2977     CallSignature signature("CreateJSTypedArrayEntries", 0, 2,
2978         ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
2979     *callSign = signature;
2980     // 2 : 2 input parameters
2981     std::array<VariableType, 2> params = {
2982         VariableType::NATIVE_POINTER(),  // glue
2983         VariableType::JS_ANY(),          // obj
2984     };
2985     callSign->SetParameters(params.data());
2986     callSign->SetCallConv(CallSignature::CallConv::CCallConv);
2987 }
2988 
DEF_CALL_SIGNATURE(SameValue)2989 DEF_CALL_SIGNATURE(SameValue)
2990 {
2991     // 3 : 3 input parameters
2992     CallSignature signature("SameValue", 0, 3,
2993         ArgumentsOrder::DEFAULT_ORDER, VariableType::BOOL());
2994     *callSign = signature;
2995     // 3 : 3 input parameters
2996     std::array<VariableType, 3> params = {
2997         VariableType::NATIVE_POINTER(),  // glue
2998         VariableType::JS_ANY(),          // left
2999         VariableType::JS_ANY(),          // right
3000     };
3001     callSign->SetParameters(params.data());
3002     callSign->SetCallConv(CallSignature::CallConv::CCallConv);
3003 }
3004 
DEF_CALL_SIGNATURE(CreateJSTypedArrayKeys)3005 DEF_CALL_SIGNATURE(CreateJSTypedArrayKeys)
3006 {
3007     // 2 : 2 input parameters
3008     CallSignature signature("CreateJSTypedArrayKeys", 0, 2,
3009         ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
3010     *callSign = signature;
3011     // 2 : 2 input parameters
3012     std::array<VariableType, 2> params = {
3013         VariableType::NATIVE_POINTER(),  // glue
3014         VariableType::JS_ANY(),          // obj
3015     };
3016     callSign->SetParameters(params.data());
3017     callSign->SetCallConv(CallSignature::CallConv::CCallConv);
3018 }
3019 
DEF_CALL_SIGNATURE(CreateJSTypedArrayValues)3020 DEF_CALL_SIGNATURE(CreateJSTypedArrayValues)
3021 {
3022     // 2 : 2 input parameters
3023     CallSignature signature("CreateJSTypedArrayValues", 0, 2,
3024         ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
3025     *callSign = signature;
3026     // 2 : 2 input parameters
3027     std::array<VariableType, 2> params = {
3028         VariableType::NATIVE_POINTER(),  // glue
3029         VariableType::JS_ANY(),          // obj
3030     };
3031     callSign->SetParameters(params.data());
3032     callSign->SetCallConv(CallSignature::CallConv::CCallConv);
3033 }
3034 
3035 }  // namespace panda::ecmascript::kungfu
3036