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
DEF_CALL_SIGNATURE(VerifyBarrier)843 DEF_CALL_SIGNATURE(VerifyBarrier)
844 {
845 SETVALUEBARRIER_CALL_ARGS_SIGNATURE_COMMON(VerifyBarrier);
846 }
847
848 #undef SETVALUEBARRIER_CALL_ARGS_SIGNATURE_COMMON
849
DEF_CALL_SIGNATURE(NewThisObjectChecked)850 DEF_CALL_SIGNATURE(NewThisObjectChecked)
851 {
852 // 2 : 2 input parameters
853 CallSignature signature("NewThisObjectChecked", 0, 2,
854 ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
855 *callSign = signature;
856 // 2 : 2 input parameters
857 std::array<VariableType, 2> params = {
858 VariableType::NATIVE_POINTER(), // glue
859 VariableType::JS_ANY(), // ctor
860 };
861 callSign->SetParameters(params.data());
862 callSign->SetCallConv(CallSignature::CallConv::CCallConv);
863 }
864
DEF_CALL_SIGNATURE(ConstructorCheck)865 DEF_CALL_SIGNATURE(ConstructorCheck)
866 {
867 // 4 : 4 input parameters
868 CallSignature signature("ConstructorCheck", 0, 4,
869 ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
870 *callSign = signature;
871 // 4 : 4 input parameters
872 std::array<VariableType, 4> params = {
873 VariableType::NATIVE_POINTER(), // glue
874 VariableType::JS_ANY(), // ctor
875 VariableType::JS_ANY(), // result
876 VariableType::JS_ANY(), // thisObj
877 };
878 callSign->SetParameters(params.data());
879 callSign->SetCallConv(CallSignature::CallConv::CCallConv);
880 }
881
DEF_CALL_SIGNATURE(CreateEmptyArray)882 DEF_CALL_SIGNATURE(CreateEmptyArray)
883 {
884 // 5 : 5 input parameters
885 CallSignature signature("CreateEmptyArray", 0, 5,
886 ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
887 *callSign = signature;
888 // 5 : 5 input parameters
889 std::array<VariableType, 5> params = {
890 VariableType::NATIVE_POINTER(), // glue
891 VariableType::JS_ANY(), // jsFunc
892 VariableType::JS_ANY(), // pc
893 VariableType::INT32(), // profileTypeInfo
894 VariableType::INT32(), // slotId
895 };
896 callSign->SetParameters(params.data());
897 callSign->SetCallConv(CallSignature::CallConv::CCallConv);
898 }
899
DEF_CALL_SIGNATURE(CreateArrayWithBuffer)900 DEF_CALL_SIGNATURE(CreateArrayWithBuffer)
901 {
902 // 6 : 6 input parameters
903 CallSignature signature("CreateArrayWithBuffer", 0, 6,
904 ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
905 *callSign = signature;
906 // 6 : 6 input parameters
907 std::array<VariableType, 6> params = {
908 VariableType::NATIVE_POINTER(), // glue
909 VariableType::INT32(), // index
910 VariableType::JS_ANY(), // jsFunc
911 VariableType::JS_ANY(), // pc
912 VariableType::INT32(), // profileTypeInfo
913 VariableType::INT32(), // slotId
914 };
915 callSign->SetParameters(params.data());
916 callSign->SetCallConv(CallSignature::CallConv::CCallConv);
917 }
918
DEF_CALL_SIGNATURE(CopyRestArgs)919 DEF_CALL_SIGNATURE(CopyRestArgs)
920 {
921 // 5 : 5 input parameters
922 CallSignature signature("CopyRestArgs", 0, 5,
923 ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
924 *callSign = signature;
925 // 5 : 5 input parameters
926 std::array<VariableType, 5> params = {
927 VariableType::NATIVE_POINTER(), // glue
928 VariableType::NATIVE_POINTER(), // actual argv
929 VariableType::INT32(), // startIdx
930 VariableType::INT32(), // numArgs
931 VariableType::JS_ANY(), // actual argv Array
932 };
933 callSign->SetParameters(params.data());
934 callSign->SetCallConv(CallSignature::CallConv::CCallConv);
935 }
936
DEF_CALL_SIGNATURE(NewJSObject)937 DEF_CALL_SIGNATURE(NewJSObject)
938 {
939 // 2 : 2 input parameters
940 CallSignature signature("NewJSObject", 0, 2,
941 ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
942 *callSign = signature;
943 // 2 : 2 input parameters
944 std::array<VariableType, 2> params = {
945 VariableType::NATIVE_POINTER(), // glue
946 VariableType::JS_ANY(), // hclass
947 };
948 callSign->SetParameters(params.data());
949 callSign->SetCallConv(CallSignature::CallConv::CCallConv);
950 }
951
DEF_CALL_SIGNATURE(NewLexicalEnv)952 DEF_CALL_SIGNATURE(NewLexicalEnv)
953 {
954 // 3 : 3 input parameters
955 CallSignature signature("NewLexicalEnv", 0, 3,
956 ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
957 *callSign = signature;
958 // 3 : 3 input parameters
959 std::array<VariableType, 3> params = {
960 VariableType::NATIVE_POINTER(), // glue
961 VariableType::JS_ANY(), // parent
962 VariableType::INT32(), // numArgs
963 };
964 callSign->SetParameters(params.data());
965 callSign->SetCallConv(CallSignature::CallConv::CCallConv);
966 }
967
DEF_CALL_SIGNATURE(GetUnmappedArgs)968 DEF_CALL_SIGNATURE(GetUnmappedArgs)
969 {
970 // 4 : 4 input parameters
971 CallSignature signature("GetUnmappedArgs", 0, 4,
972 ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
973 *callSign = signature;
974 // 4 : 4 input parameters
975 std::array<VariableType, 4> params = {
976 VariableType::NATIVE_POINTER(), // glue
977 VariableType::NATIVE_POINTER(), // actual argv
978 VariableType::INT32(), // numArgs
979 VariableType::JS_ANY(), // actual argv Array
980 };
981 callSign->SetParameters(params.data());
982 callSign->SetCallConv(CallSignature::CallConv::CCallConv);
983 }
984
DEF_CALL_SIGNATURE(GetCallSpreadArgs)985 DEF_CALL_SIGNATURE(GetCallSpreadArgs)
986 {
987 // 2 : 2 input parameters
988 CallSignature signature("GetCallSpreadArgs", 0, 2,
989 ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
990 *callSign = signature;
991 // 2 : 2 input parameters
992 std::array<VariableType, 2> params = {
993 VariableType::NATIVE_POINTER(), // glue
994 VariableType::JS_ANY(), // array
995 };
996 callSign->SetParameters(params.data());
997 callSign->SetCallConv(CallSignature::CallConv::CCallConv);
998 }
999
DEF_CALL_SIGNATURE(GetTaggedArrayPtrTest)1000 DEF_CALL_SIGNATURE(GetTaggedArrayPtrTest)
1001 {
1002 // 2 : 2 input parameters
1003 CallSignature getTaggedArrayPtr("GetTaggedArrayPtrTest", 0, 2, ArgumentsOrder::DEFAULT_ORDER,
1004 VariableType::JS_POINTER());
1005 *callSign = getTaggedArrayPtr;
1006 // 2 : 2 input parameters
1007 std::array<VariableType, 2> params = {
1008 VariableType::NATIVE_POINTER(),
1009 VariableType::JS_ANY(),
1010 };
1011 callSign->SetParameters(params.data());
1012 callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB);
1013 }
1014
DEF_CALL_SIGNATURE(Builtins)1015 DEF_CALL_SIGNATURE(Builtins)
1016 {
1017 // 9 : 9 input parameters
1018 CallSignature builtins("Builtins", 0, 9,
1019 ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
1020 *callSign = builtins;
1021 std::array<VariableType, 9> params = { // 9 : 9 input parameters
1022 VariableType::NATIVE_POINTER(), // glue
1023 VariableType::NATIVE_POINTER(), // native code
1024 VariableType::JS_ANY(), // func
1025 VariableType::JS_ANY(), // new target
1026 VariableType::JS_ANY(), // this
1027 VariableType::NATIVE_POINTER(), // argc
1028 VariableType::JS_ANY(), // arg0
1029 VariableType::JS_ANY(), // arg1
1030 VariableType::JS_ANY(), // arg2
1031 };
1032 callSign->SetVariadicArgs(true);
1033 callSign->SetParameters(params.data());
1034 callSign->SetTargetKind(CallSignature::TargetKind::BUILTINS_STUB);
1035 callSign->SetCallConv(CallSignature::CallConv::CCallConv);
1036 }
1037
DEF_CALL_SIGNATURE(BuiltinsWithArgv)1038 DEF_CALL_SIGNATURE(BuiltinsWithArgv)
1039 {
1040 // 7 : 7 input parameters
1041 CallSignature builtinsWtihArgv("Builtins", 0, 7,
1042 ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
1043 *callSign = builtinsWtihArgv;
1044 std::array<VariableType, 7> params = { // 7 : 7 input parameters
1045 VariableType::NATIVE_POINTER(), // glue
1046 VariableType::NATIVE_POINTER(), // nativeCode
1047 VariableType::JS_ANY(), // func
1048 VariableType::JS_ANY(), // new target
1049 VariableType::JS_ANY(), // this
1050 VariableType::NATIVE_POINTER(), // argc
1051 VariableType::NATIVE_POINTER(), // argv
1052 };
1053 callSign->SetParameters(params.data());
1054 callSign->SetTargetKind(CallSignature::TargetKind::BUILTINS_WITH_ARGV_STUB);
1055 callSign->SetCallConv(CallSignature::CallConv::CCallConv);
1056 }
1057
DEF_CALL_SIGNATURE(BytecodeHandler)1058 DEF_CALL_SIGNATURE(BytecodeHandler)
1059 {
1060 // 7 : 7 input parameters
1061 CallSignature bytecodeHandler("BytecodeHandler", 0, 7,
1062 ArgumentsOrder::DEFAULT_ORDER, VariableType::VOID());
1063 *callSign = bytecodeHandler;
1064 // 7 : 7 input parameters
1065 std::array<VariableType, 7> params = {
1066 VariableType::NATIVE_POINTER(),
1067 VariableType::NATIVE_POINTER(),
1068 VariableType::NATIVE_POINTER(),
1069 VariableType::JS_POINTER(),
1070 VariableType::JS_POINTER(),
1071 VariableType::JS_ANY(),
1072 VariableType::INT32(),
1073 };
1074 callSign->SetParameters(params.data());
1075 callSign->SetTargetKind(CallSignature::TargetKind::BYTECODE_HANDLER);
1076 callSign->SetCallConv(CallSignature::CallConv::GHCCallConv);
1077 }
1078
DEF_CALL_SIGNATURE(BytecodeDebuggerHandler)1079 DEF_CALL_SIGNATURE(BytecodeDebuggerHandler)
1080 {
1081 // 7 : 7 input parameters
1082 CallSignature bytecodeHandler("BytecodeDebuggerHandler", 0, 7,
1083 ArgumentsOrder::DEFAULT_ORDER, VariableType::VOID());
1084 *callSign = bytecodeHandler;
1085 // 7 : 7 input parameters
1086 std::array<VariableType, 7> params = { VariableType::NATIVE_POINTER(),
1087 VariableType::NATIVE_POINTER(),
1088 VariableType::NATIVE_POINTER(),
1089 VariableType::JS_POINTER(),
1090 VariableType::JS_POINTER(),
1091 VariableType::JS_ANY(),
1092 VariableType::INT32() };
1093 callSign->SetParameters(params.data());
1094 callSign->SetTargetKind(CallSignature::TargetKind::BYTECODE_DEBUGGER_HANDLER);
1095 }
1096
DEF_CALL_SIGNATURE(CallRuntime)1097 DEF_CALL_SIGNATURE(CallRuntime)
1098 {
1099 /* 3 : 3 input parameters */
1100 CallSignature runtimeCallTrampoline("CallRuntime", 0, 3,
1101 ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
1102 *callSign = runtimeCallTrampoline;
1103 /* 3 : 3 input parameters */
1104 std::array<VariableType, 3> params = {
1105 VariableType::NATIVE_POINTER(),
1106 VariableType::INT64(),
1107 VariableType::INT64(),
1108 };
1109 callSign->SetVariadicArgs(true);
1110 callSign->SetParameters(params.data());
1111 callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB);
1112 callSign->SetCallConv(CallSignature::CallConv::CCallConv);
1113 }
1114
DEF_CALL_SIGNATURE(AsmInterpreterEntry)1115 DEF_CALL_SIGNATURE(AsmInterpreterEntry)
1116 {
1117 /* 3 : 3 input parameters */
1118 CallSignature asmInterpreterEntry("AsmInterpreterEntry", 0, 3,
1119 ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
1120 *callSign = asmInterpreterEntry;
1121 /* 3 : 3 input parameters */
1122 std::array<VariableType, 3> params = {
1123 VariableType::NATIVE_POINTER(), // glue
1124 VariableType::INT32(), // argc
1125 VariableType::NATIVE_POINTER(), // argv
1126 };
1127 callSign->SetParameters(params.data());
1128 callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
1129 callSign->SetCallConv(CallSignature::CallConv::CCallConv);
1130 }
1131
1132 #define BASELINE_CALL_ARGS_SIGNATURE_COMMON(name) \
1133 /* 1 : 1 input parameters */ \
1134 CallSignature signature(#name, 0, 1, \
1135 ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY()); \
1136 *callSign = signature; \
1137 std::array<VariableType, 1> params = { /* 1: 1 input parameters */ \
1138 VariableType::NATIVE_POINTER(), \
1139 }; \
1140 callSign->SetVariadicArgs(true); \
1141 callSign->SetParameters(params.data()); \
1142 callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC); \
1143 callSign->SetCallConv(CallSignature::CallConv::GHCCallConv);
1144
DEF_CALL_SIGNATURE(CallArg0AndCheckToBaseline)1145 DEF_CALL_SIGNATURE(CallArg0AndCheckToBaseline)
1146 {
1147 BASELINE_CALL_ARGS_SIGNATURE_COMMON(CallArg0AndCheckToBaseline)
1148 }
1149
DEF_CALL_SIGNATURE(CallArg1AndCheckToBaseline)1150 DEF_CALL_SIGNATURE(CallArg1AndCheckToBaseline)
1151 {
1152 BASELINE_CALL_ARGS_SIGNATURE_COMMON(CallArg1AndCheckToBaseline)
1153 }
1154
DEF_CALL_SIGNATURE(CallArgs2AndCheckToBaseline)1155 DEF_CALL_SIGNATURE(CallArgs2AndCheckToBaseline)
1156 {
1157 BASELINE_CALL_ARGS_SIGNATURE_COMMON(CallArgs2AndCheckToBaseline)
1158 }
1159
DEF_CALL_SIGNATURE(CallArgs3AndCheckToBaseline)1160 DEF_CALL_SIGNATURE(CallArgs3AndCheckToBaseline)
1161 {
1162 BASELINE_CALL_ARGS_SIGNATURE_COMMON(CallArgs3AndCheckToBaseline)
1163 }
1164
DEF_CALL_SIGNATURE(CallThisArg0AndCheckToBaseline)1165 DEF_CALL_SIGNATURE(CallThisArg0AndCheckToBaseline)
1166 {
1167 BASELINE_CALL_ARGS_SIGNATURE_COMMON(CallThisArg0AndCheckToBaseline)
1168 }
1169
DEF_CALL_SIGNATURE(CallThisArg1AndCheckToBaseline)1170 DEF_CALL_SIGNATURE(CallThisArg1AndCheckToBaseline)
1171 {
1172 BASELINE_CALL_ARGS_SIGNATURE_COMMON(CallThisArg1AndCheckToBaseline)
1173 }
1174
DEF_CALL_SIGNATURE(CallThisArgs2AndCheckToBaseline)1175 DEF_CALL_SIGNATURE(CallThisArgs2AndCheckToBaseline)
1176 {
1177 BASELINE_CALL_ARGS_SIGNATURE_COMMON(CallThisArgs2AndCheckToBaseline)
1178 }
1179
DEF_CALL_SIGNATURE(CallThisArgs3AndCheckToBaseline)1180 DEF_CALL_SIGNATURE(CallThisArgs3AndCheckToBaseline)
1181 {
1182 BASELINE_CALL_ARGS_SIGNATURE_COMMON(CallThisArgs3AndCheckToBaseline)
1183 }
1184
DEF_CALL_SIGNATURE(CallRangeAndCheckToBaseline)1185 DEF_CALL_SIGNATURE(CallRangeAndCheckToBaseline)
1186 {
1187 BASELINE_CALL_ARGS_SIGNATURE_COMMON(CallRangeAndCheckToBaseline)
1188 }
1189
DEF_CALL_SIGNATURE(CallNewAndCheckToBaseline)1190 DEF_CALL_SIGNATURE(CallNewAndCheckToBaseline)
1191 {
1192 BASELINE_CALL_ARGS_SIGNATURE_COMMON(CallNewAndCheckToBaseline)
1193 }
1194
DEF_CALL_SIGNATURE(SuperCallAndCheckToBaseline)1195 DEF_CALL_SIGNATURE(SuperCallAndCheckToBaseline)
1196 {
1197 BASELINE_CALL_ARGS_SIGNATURE_COMMON(SuperCallAndCheckToBaseline)
1198 }
1199
DEF_CALL_SIGNATURE(CallThisRangeAndCheckToBaseline)1200 DEF_CALL_SIGNATURE(CallThisRangeAndCheckToBaseline)
1201 {
1202 BASELINE_CALL_ARGS_SIGNATURE_COMMON(CallThisRangeAndCheckToBaseline)
1203 }
1204
DEF_CALL_SIGNATURE(CallArg0AndDispatchFromBaseline)1205 DEF_CALL_SIGNATURE(CallArg0AndDispatchFromBaseline)
1206 {
1207 BASELINE_CALL_ARGS_SIGNATURE_COMMON(CallArg0AndDispatchFromBaseline)
1208 }
1209
DEF_CALL_SIGNATURE(CallArg1AndDispatchFromBaseline)1210 DEF_CALL_SIGNATURE(CallArg1AndDispatchFromBaseline)
1211 {
1212 BASELINE_CALL_ARGS_SIGNATURE_COMMON(CallArg1AndDispatchFromBaseline)
1213 }
1214
DEF_CALL_SIGNATURE(CallArgs2AndDispatchFromBaseline)1215 DEF_CALL_SIGNATURE(CallArgs2AndDispatchFromBaseline)
1216 {
1217 BASELINE_CALL_ARGS_SIGNATURE_COMMON(CallArgs2AndDispatchFromBaseline)
1218 }
1219
DEF_CALL_SIGNATURE(CallArgs3AndDispatchFromBaseline)1220 DEF_CALL_SIGNATURE(CallArgs3AndDispatchFromBaseline)
1221 {
1222 BASELINE_CALL_ARGS_SIGNATURE_COMMON(CallArgs3AndDispatchFromBaseline)
1223 }
1224
DEF_CALL_SIGNATURE(CallThisArg0AndDispatchFromBaseline)1225 DEF_CALL_SIGNATURE(CallThisArg0AndDispatchFromBaseline)
1226 {
1227 BASELINE_CALL_ARGS_SIGNATURE_COMMON(CallThisArg0AndDispatchFromBaseline)
1228 }
1229
DEF_CALL_SIGNATURE(CallThisArg1AndDispatchFromBaseline)1230 DEF_CALL_SIGNATURE(CallThisArg1AndDispatchFromBaseline)
1231 {
1232 BASELINE_CALL_ARGS_SIGNATURE_COMMON(CallThisArg1AndDispatchFromBaseline)
1233 }
1234
DEF_CALL_SIGNATURE(CallThisArgs2AndDispatchFromBaseline)1235 DEF_CALL_SIGNATURE(CallThisArgs2AndDispatchFromBaseline)
1236 {
1237 BASELINE_CALL_ARGS_SIGNATURE_COMMON(CallThisArgs2AndDispatchFromBaseline)
1238 }
1239
DEF_CALL_SIGNATURE(CallThisArgs3AndDispatchFromBaseline)1240 DEF_CALL_SIGNATURE(CallThisArgs3AndDispatchFromBaseline)
1241 {
1242 BASELINE_CALL_ARGS_SIGNATURE_COMMON(CallThisArgs3AndDispatchFromBaseline)
1243 }
1244
DEF_CALL_SIGNATURE(CallRangeAndDispatchFromBaseline)1245 DEF_CALL_SIGNATURE(CallRangeAndDispatchFromBaseline)
1246 {
1247 BASELINE_CALL_ARGS_SIGNATURE_COMMON(CallRangeAndDispatchFromBaseline)
1248 }
1249
DEF_CALL_SIGNATURE(CallNewAndDispatchFromBaseline)1250 DEF_CALL_SIGNATURE(CallNewAndDispatchFromBaseline)
1251 {
1252 BASELINE_CALL_ARGS_SIGNATURE_COMMON(CallNewAndDispatchFromBaseline)
1253 }
1254
DEF_CALL_SIGNATURE(SuperCallAndDispatchFromBaseline)1255 DEF_CALL_SIGNATURE(SuperCallAndDispatchFromBaseline)
1256 {
1257 BASELINE_CALL_ARGS_SIGNATURE_COMMON(SuperCallAndDispatchFromBaseline)
1258 }
1259
DEF_CALL_SIGNATURE(CallThisRangeAndDispatchFromBaseline)1260 DEF_CALL_SIGNATURE(CallThisRangeAndDispatchFromBaseline)
1261 {
1262 BASELINE_CALL_ARGS_SIGNATURE_COMMON(CallThisRangeAndDispatchFromBaseline)
1263 }
1264
DEF_CALL_SIGNATURE(CallArg0AndCheckToBaselineFromBaseline)1265 DEF_CALL_SIGNATURE(CallArg0AndCheckToBaselineFromBaseline)
1266 {
1267 BASELINE_CALL_ARGS_SIGNATURE_COMMON(CallArg0AndCheckToBaselineFromBaseline)
1268 }
1269
DEF_CALL_SIGNATURE(CallArg1AndCheckToBaselineFromBaseline)1270 DEF_CALL_SIGNATURE(CallArg1AndCheckToBaselineFromBaseline)
1271 {
1272 BASELINE_CALL_ARGS_SIGNATURE_COMMON(CallArg1AndCheckToBaselineFromBaseline)
1273 }
1274
DEF_CALL_SIGNATURE(CallArgs2AndCheckToBaselineFromBaseline)1275 DEF_CALL_SIGNATURE(CallArgs2AndCheckToBaselineFromBaseline)
1276 {
1277 BASELINE_CALL_ARGS_SIGNATURE_COMMON(CallArgs2AndCheckToBaselineFromBaseline)
1278 }
1279
DEF_CALL_SIGNATURE(CallArgs3AndCheckToBaselineFromBaseline)1280 DEF_CALL_SIGNATURE(CallArgs3AndCheckToBaselineFromBaseline)
1281 {
1282 BASELINE_CALL_ARGS_SIGNATURE_COMMON(CallArgs3AndCheckToBaselineFromBaseline)
1283 }
1284
DEF_CALL_SIGNATURE(CallThisArg0AndCheckToBaselineFromBaseline)1285 DEF_CALL_SIGNATURE(CallThisArg0AndCheckToBaselineFromBaseline)
1286 {
1287 BASELINE_CALL_ARGS_SIGNATURE_COMMON(CallThisArg0AndCheckToBaselineFromBaseline)
1288 }
1289
DEF_CALL_SIGNATURE(CallThisArg1AndCheckToBaselineFromBaseline)1290 DEF_CALL_SIGNATURE(CallThisArg1AndCheckToBaselineFromBaseline)
1291 {
1292 BASELINE_CALL_ARGS_SIGNATURE_COMMON(CallThisArg1AndCheckToBaselineFromBaseline)
1293 }
1294
DEF_CALL_SIGNATURE(CallThisArgs2AndCheckToBaselineFromBaseline)1295 DEF_CALL_SIGNATURE(CallThisArgs2AndCheckToBaselineFromBaseline)
1296 {
1297 BASELINE_CALL_ARGS_SIGNATURE_COMMON(CallThisArgs2AndCheckToBaselineFromBaseline)
1298 }
1299
DEF_CALL_SIGNATURE(CallThisArgs3AndCheckToBaselineFromBaseline)1300 DEF_CALL_SIGNATURE(CallThisArgs3AndCheckToBaselineFromBaseline)
1301 {
1302 BASELINE_CALL_ARGS_SIGNATURE_COMMON(CallThisArgs3AndCheckToBaselineFromBaseline)
1303 }
1304
DEF_CALL_SIGNATURE(CallRangeAndCheckToBaselineFromBaseline)1305 DEF_CALL_SIGNATURE(CallRangeAndCheckToBaselineFromBaseline)
1306 {
1307 BASELINE_CALL_ARGS_SIGNATURE_COMMON(CallRangeAndCheckToBaselineFromBaseline)
1308 }
1309
DEF_CALL_SIGNATURE(CallNewAndCheckToBaselineFromBaseline)1310 DEF_CALL_SIGNATURE(CallNewAndCheckToBaselineFromBaseline)
1311 {
1312 BASELINE_CALL_ARGS_SIGNATURE_COMMON(CallNewAndCheckToBaselineFromBaseline)
1313 }
1314
DEF_CALL_SIGNATURE(SuperCallAndCheckToBaselineFromBaseline)1315 DEF_CALL_SIGNATURE(SuperCallAndCheckToBaselineFromBaseline)
1316 {
1317 BASELINE_CALL_ARGS_SIGNATURE_COMMON(SuperCallAndCheckToBaselineFromBaseline)
1318 }
1319
DEF_CALL_SIGNATURE(CallThisRangeAndCheckToBaselineFromBaseline)1320 DEF_CALL_SIGNATURE(CallThisRangeAndCheckToBaselineFromBaseline)
1321 {
1322 BASELINE_CALL_ARGS_SIGNATURE_COMMON(CallThisRangeAndCheckToBaselineFromBaseline)
1323 }
1324
DEF_CALL_SIGNATURE(GetBaselineBuiltinFp)1325 DEF_CALL_SIGNATURE(GetBaselineBuiltinFp)
1326 {
1327 /* 1 : 1 input parameters */
1328 CallSignature getBaselineBuiltinFp("GetBaselineBuiltinFp", 0, 1,
1329 ArgumentsOrder::DEFAULT_ORDER, VariableType::NATIVE_POINTER());
1330 *callSign = getBaselineBuiltinFp;
1331 std::array<VariableType, 1> params = { /* 1 : 1 input parameters */
1332 VariableType::NATIVE_POINTER(), // glue
1333 };
1334 callSign->SetVariadicArgs(true);
1335 callSign->SetParameters(params.data());
1336 callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
1337 callSign->SetCallConv(CallSignature::CallConv::CCallConv);
1338 }
1339
DEF_CALL_SIGNATURE(GeneratorReEnterAsmInterp)1340 DEF_CALL_SIGNATURE(GeneratorReEnterAsmInterp)
1341 {
1342 /* 2 : 2 input parameters */
1343 CallSignature generatorReEnterAsmInterp("GeneratorReEnterAsmInterp", 0, 2,
1344 ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
1345 *callSign = generatorReEnterAsmInterp;
1346 std::array<VariableType, 2> params = { /* 2 : 2 input parameters */
1347 VariableType::NATIVE_POINTER(), // glue
1348 VariableType::JS_POINTER(), // context
1349 };
1350 callSign->SetParameters(params.data());
1351 callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
1352 callSign->SetCallConv(CallSignature::CallConv::CCallConv);
1353 }
1354
DEF_CALL_SIGNATURE(CallRuntimeWithArgv)1355 DEF_CALL_SIGNATURE(CallRuntimeWithArgv)
1356 {
1357 /* 4 : 4 input parameters */
1358 CallSignature runtimeCallTrampoline("CallRuntimeWithArgv", 0, 4,
1359 ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
1360 *callSign = runtimeCallTrampoline;
1361 std::array<VariableType, 4> params = { /* 4 : 4 input parameters */
1362 VariableType::NATIVE_POINTER(), // glue
1363 VariableType::INT64(), // runtimeId
1364 VariableType::INT64(), // argc
1365 VariableType::NATIVE_POINTER(), // argv
1366 };
1367 callSign->SetVariadicArgs(false);
1368 callSign->SetParameters(params.data());
1369 callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_VARARGS);
1370 callSign->SetCallConv(CallSignature::CallConv::CCallConv);
1371 }
1372
1373 #define AOT_CALL_SIGNATURE(name) \
1374 /* 6 : 6 input parameters */ \
1375 CallSignature signature(#name, 0, 6, \
1376 ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY()); \
1377 *callSign = signature; \
1378 std::array<VariableType, 6> params = { /* 6 : 6 input parameters */ \
1379 VariableType::NATIVE_POINTER(), /* glue */ \
1380 VariableType::INT64(), /* actual argC */ \
1381 VariableType::NATIVE_POINTER(), /* actual argV */ \
1382 VariableType::JS_ANY(), /* call target */ \
1383 VariableType::JS_ANY(), /* new target */ \
1384 VariableType::JS_ANY(), /* thisobj */ \
1385 }; \
1386 callSign->SetVariadicArgs(true); \
1387 callSign->SetParameters(params.data()); \
1388 callSign->SetCallConv(CallSignature::CallConv::WebKitJSCallConv);
1389
1390 #define FAST_AOT_CALL_SIGNATURE(name) \
1391 /* 3 : 3 input parameters */ \
1392 CallSignature signature(#name, 0, 3, \
1393 ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY()); \
1394 *callSign = signature; \
1395 std::array<VariableType, 3> params = { /* 3 : 3 input parameters */ \
1396 VariableType::NATIVE_POINTER(), /* glue */ \
1397 VariableType::JS_ANY(), /* call target */ \
1398 VariableType::JS_ANY(), /* thisobj */ \
1399 }; \
1400 callSign->SetVariadicArgs(true); \
1401 callSign->SetParameters(params.data()); \
1402 callSign->SetCallConv(CallSignature::CallConv::CCallConv);
1403
DEF_CALL_SIGNATURE(OptimizedCallAndPushArgv)1404 DEF_CALL_SIGNATURE(OptimizedCallAndPushArgv)
1405 {
1406 AOT_CALL_SIGNATURE(OptimizedCallAndPushArgv)
1407 callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
1408 }
1409
DEF_CALL_SIGNATURE(OptimizedFastCallAndPushArgv)1410 DEF_CALL_SIGNATURE(OptimizedFastCallAndPushArgv)
1411 {
1412 /* 6 : 6 input parameters */
1413 CallSignature optimizedFastCallAndPushArgv("OptimizedFastCallAndPushArgv", 0, 6,
1414 ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
1415 *callSign = optimizedFastCallAndPushArgv;
1416 std::array<VariableType, 6> params = { /* 6 : 6 input parameters */
1417 VariableType::NATIVE_POINTER(), // glue
1418 VariableType::INT64(), // actual argC
1419 VariableType::NATIVE_POINTER(), // actual argV
1420 VariableType::JS_ANY(), // call target
1421 VariableType::JS_ANY(), // new target
1422 VariableType::JS_ANY(), // thisobj
1423 };
1424 callSign->SetVariadicArgs(true);
1425 callSign->SetParameters(params.data());
1426 callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
1427 callSign->SetCallConv(CallSignature::CallConv::CCallConv);
1428 }
1429
DEF_CALL_SIGNATURE(JSCall)1430 DEF_CALL_SIGNATURE(JSCall)
1431 {
1432 AOT_CALL_SIGNATURE(JSCall)
1433 callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
1434 }
1435
DEF_CALL_SIGNATURE(JSOptimizedCall)1436 DEF_CALL_SIGNATURE(JSOptimizedCall)
1437 {
1438 AOT_CALL_SIGNATURE(JSOptimizedCall)
1439 callSign->SetTargetKind(CallSignature::TargetKind::OPTIMIZED_STUB);
1440 }
1441
DEF_CALL_SIGNATURE(JSCallNew)1442 DEF_CALL_SIGNATURE(JSCallNew)
1443 {
1444 AOT_CALL_SIGNATURE(JSCallNew)
1445 callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
1446 }
1447
DEF_CALL_SIGNATURE(JSOptimizedFastCall)1448 DEF_CALL_SIGNATURE(JSOptimizedFastCall)
1449 {
1450 FAST_AOT_CALL_SIGNATURE(JSOptimizedFastCall)
1451 callSign->SetTargetKind(CallSignature::TargetKind::OPTIMIZED_FAST_CALL_STUB);
1452 }
1453
DEF_CALL_SIGNATURE(AOTCallToAsmInterBridge)1454 DEF_CALL_SIGNATURE(AOTCallToAsmInterBridge)
1455 {
1456 AOT_CALL_SIGNATURE(AOTCallToAsmInterBridge)
1457 callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
1458 }
1459
DEF_CALL_SIGNATURE(FastCallToAsmInterBridge)1460 DEF_CALL_SIGNATURE(FastCallToAsmInterBridge)
1461 {
1462 FAST_AOT_CALL_SIGNATURE(FastCallToAsmInterBridge)
1463 callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
1464 }
1465
DEF_CALL_SIGNATURE(JSProxyCallInternalWithArgV)1466 DEF_CALL_SIGNATURE(JSProxyCallInternalWithArgV)
1467 {
1468 // 2 : 2 input parameters
1469 CallSignature jSProxyCallInternalWithArgV("JSProxyCallInternalWithArgV", 0, 2,
1470 ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
1471 *callSign = jSProxyCallInternalWithArgV;
1472 std::array<VariableType, 2> params = { // 2 : 2 input parameters
1473 VariableType::NATIVE_POINTER(), // glue
1474 VariableType::JS_ANY(), // call target
1475 };
1476 callSign->SetParameters(params.data());
1477 callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
1478 callSign->SetGCLeafFunction(true);
1479 callSign->SetTailCall(true);
1480 }
1481
DEF_CALL_SIGNATURE(JSFunctionEntry)1482 DEF_CALL_SIGNATURE(JSFunctionEntry)
1483 {
1484 // 5 : 5 input parameters
1485 CallSignature jsCallFunctionEntry("JSFunctionEntry", 0, 5,
1486 ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
1487 *callSign = jsCallFunctionEntry;
1488 std::array<VariableType, 5> params = { // 5 : 5 input parameters
1489 VariableType::NATIVE_POINTER(), // glue
1490 VariableType::INT64(), // argc
1491 VariableType::NATIVE_POINTER(), // argv
1492 VariableType::NATIVE_POINTER(), // prevFp
1493 VariableType::BOOL(), // isNew
1494 };
1495 callSign->SetParameters(params.data());
1496 callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
1497 callSign->SetCallConv(CallSignature::CallConv::CCallConv);
1498 }
1499
DEF_CALL_SIGNATURE(OptimizedFastCallEntry)1500 DEF_CALL_SIGNATURE(OptimizedFastCallEntry)
1501 {
1502 // 4 : 4 input parameters
1503 CallSignature optimizedFastCallEntry("OptimizedFastCallEntry", 0, 4,
1504 ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
1505 *callSign = optimizedFastCallEntry;
1506 std::array<VariableType, 4> params = { // 4 : 4 input parameters
1507 VariableType::NATIVE_POINTER(), // glue
1508 VariableType::INT64(), // argc
1509 VariableType::NATIVE_POINTER(), // argv
1510 VariableType::NATIVE_POINTER(), // prevFp
1511 };
1512 callSign->SetParameters(params.data());
1513 callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
1514 callSign->SetCallConv(CallSignature::CallConv::CCallConv);
1515 }
1516
DEF_CALL_SIGNATURE(ResumeRspAndDispatch)1517 DEF_CALL_SIGNATURE(ResumeRspAndDispatch)
1518 {
1519 // 8 : 8 input parameters
1520 CallSignature resumeRspAndDispatch("ResumeRspAndDispatch", 0, 8,
1521 ArgumentsOrder::DEFAULT_ORDER, VariableType::VOID());
1522 *callSign = resumeRspAndDispatch;
1523 std::array<VariableType, 8> params = { // 8 : 8 input parameters
1524 VariableType::NATIVE_POINTER(),
1525 VariableType::NATIVE_POINTER(),
1526 VariableType::NATIVE_POINTER(),
1527 VariableType::JS_POINTER(),
1528 VariableType::JS_POINTER(),
1529 VariableType::JS_ANY(),
1530 VariableType::INT32(),
1531 VariableType::NATIVE_POINTER(),
1532 };
1533 callSign->SetParameters(params.data());
1534 callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
1535 callSign->SetCallConv(CallSignature::CallConv::GHCCallConv);
1536 }
1537
DEF_CALL_SIGNATURE(ResumeRspAndReturn)1538 DEF_CALL_SIGNATURE(ResumeRspAndReturn)
1539 {
1540 // 3 : 3 input parameters
1541 CallSignature resumeRspAndReturn("ResumeRspAndReturn", 0, 3,
1542 ArgumentsOrder::DEFAULT_ORDER, VariableType::VOID());
1543 *callSign = resumeRspAndReturn;
1544 std::array<VariableType, 3> params = { // 3 : 3 input parameters
1545 VariableType::JS_ANY(),
1546 VariableType::NATIVE_POINTER(),
1547 VariableType::NATIVE_POINTER(),
1548 };
1549 callSign->SetParameters(params.data());
1550 callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
1551 callSign->SetCallConv(CallSignature::CallConv::GHCCallConv);
1552 }
1553
DEF_CALL_SIGNATURE(ResumeRspAndReturnBaseline)1554 DEF_CALL_SIGNATURE(ResumeRspAndReturnBaseline)
1555 {
1556 // 4 : 4 input parameters
1557 CallSignature resumeRspAndReturnBaseline("ResumeRspAndReturnBaseline", 0, 4,
1558 ArgumentsOrder::DEFAULT_ORDER, VariableType::VOID());
1559 *callSign = resumeRspAndReturnBaseline;
1560 std::array<VariableType, 4> params = { // 4 : 4 input parameters
1561 VariableType::JS_ANY(), // %r13 - acc
1562 VariableType::NATIVE_POINTER(), // %rbp - prevSp
1563 VariableType::NATIVE_POINTER(), // %r12 - sp
1564 VariableType::NATIVE_POINTER(), // %rbx - jumpSizeAfterCall
1565 };
1566 callSign->SetParameters(params.data());
1567 callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
1568 callSign->SetCallConv(CallSignature::CallConv::GHCCallConv);
1569 }
1570
DEF_CALL_SIGNATURE(ResumeCaughtFrameAndDispatch)1571 DEF_CALL_SIGNATURE(ResumeCaughtFrameAndDispatch)
1572 {
1573 // 7 : 7 input parameters
1574 CallSignature resumeCaughtFrameAndDispatch("ResumeCaughtFrameAndDispatch", 0, 7,
1575 ArgumentsOrder::DEFAULT_ORDER, VariableType::VOID());
1576 *callSign = resumeCaughtFrameAndDispatch;
1577 // 7 : 7 input parameters
1578 std::array<VariableType, 7> params = {
1579 VariableType::NATIVE_POINTER(),
1580 VariableType::NATIVE_POINTER(),
1581 VariableType::NATIVE_POINTER(),
1582 VariableType::JS_POINTER(),
1583 VariableType::JS_POINTER(),
1584 VariableType::JS_ANY(),
1585 VariableType::INT32(),
1586 };
1587 callSign->SetParameters(params.data());
1588 callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
1589 callSign->SetCallConv(CallSignature::CallConv::GHCCallConv);
1590 }
1591
DEF_CALL_SIGNATURE(ResumeUncaughtFrameAndReturn)1592 DEF_CALL_SIGNATURE(ResumeUncaughtFrameAndReturn)
1593 {
1594 // 3 : 3 input parameters
1595 CallSignature resumeUncaughtFrameAndReturn("ResumeUncaughtFrameAndReturn", 0, 3,
1596 ArgumentsOrder::DEFAULT_ORDER, VariableType::VOID());
1597 *callSign = resumeUncaughtFrameAndReturn;
1598 std::array<VariableType, 3> params = { // 3 : 3 input parameters
1599 VariableType::NATIVE_POINTER(),
1600 VariableType::NATIVE_POINTER(),
1601 VariableType::JS_ANY(),
1602 };
1603 callSign->SetParameters(params.data());
1604 callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
1605 callSign->SetCallConv(CallSignature::CallConv::GHCCallConv);
1606 }
1607
DEF_CALL_SIGNATURE(ResumeRspAndRollback)1608 DEF_CALL_SIGNATURE(ResumeRspAndRollback)
1609 {
1610 // 8 : 8 input parameters
1611 CallSignature resumeRspAndRollback("ResumeRspAndRollback", 0, 8,
1612 ArgumentsOrder::DEFAULT_ORDER, VariableType::VOID());
1613 *callSign = resumeRspAndRollback;
1614 std::array<VariableType, 8> params = { // 8 : 8 input parameters
1615 VariableType::NATIVE_POINTER(),
1616 VariableType::NATIVE_POINTER(),
1617 VariableType::NATIVE_POINTER(),
1618 VariableType::JS_POINTER(),
1619 VariableType::JS_POINTER(),
1620 VariableType::JS_ANY(),
1621 VariableType::INT32(),
1622 VariableType::NATIVE_POINTER(),
1623 };
1624 callSign->SetParameters(params.data());
1625 callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
1626 callSign->SetCallConv(CallSignature::CallConv::GHCCallConv);
1627 }
1628
DEF_CALL_SIGNATURE(StringsAreEquals)1629 DEF_CALL_SIGNATURE(StringsAreEquals)
1630 {
1631 // 2 : 2 input parameters
1632 CallSignature stringsAreEquals("StringsAreEquals", 0, 2,
1633 ArgumentsOrder::DEFAULT_ORDER, VariableType::BOOL());
1634 *callSign = stringsAreEquals;
1635 std::array<VariableType, 2> params = { // 2 : 2 input parameters
1636 VariableType::JS_POINTER(),
1637 VariableType::JS_POINTER(),
1638 };
1639 callSign->SetParameters(params.data());
1640 callSign->SetGCLeafFunction(true);
1641 callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
1642 }
1643
DEF_CALL_SIGNATURE(JSHClassFindProtoTransitions)1644 DEF_CALL_SIGNATURE(JSHClassFindProtoTransitions)
1645 {
1646 // 3 : 3 input parameters
1647 CallSignature bigIntSameValueZero("JSHClassFindProtoTransitions", 0, 3,
1648 ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
1649 *callSign = bigIntSameValueZero;
1650 std::array<VariableType, 3> params = { // 3 : 3 input parameters
1651 VariableType::JS_POINTER(),
1652 VariableType::JS_POINTER(),
1653 VariableType::JS_POINTER(),
1654 };
1655 callSign->SetParameters(params.data());
1656 callSign->SetGCLeafFunction(true);
1657 callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
1658 }
1659
DEF_CALL_SIGNATURE(NumberHelperStringToDouble)1660 DEF_CALL_SIGNATURE(NumberHelperStringToDouble)
1661 {
1662 // 1 : 1 input parameters
1663 CallSignature bigIntSameValueZero("NumberHelperStringToDouble", 0, 1,
1664 ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
1665 *callSign = bigIntSameValueZero;
1666 std::array<VariableType, 1> params = { // 1 : 1 input parameters
1667 VariableType::JS_POINTER(),
1668 };
1669 callSign->SetParameters(params.data());
1670 callSign->SetGCLeafFunction(true);
1671 callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
1672 }
1673
DEF_CALL_SIGNATURE(CallBigIntAsIntN)1674 DEF_CALL_SIGNATURE(CallBigIntAsIntN)
1675 {
1676 // 2 : 2 input parameters
1677 CallSignature signature("CallBigIntAsIntN", 0, 2, ArgumentsOrder::DEFAULT_ORDER,
1678 VariableType::JS_POINTER());
1679 *callSign = signature;
1680 std::array<VariableType, 2> params = { // 2 : 2 input parameters
1681 VariableType::FLOAT64(),
1682 VariableType::JS_POINTER()
1683 };
1684 callSign->SetParameters(params.data());
1685 callSign->SetGCLeafFunction(true);
1686 callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
1687 }
1688
DEF_CALL_SIGNATURE(CallBigIntAsUintN)1689 DEF_CALL_SIGNATURE(CallBigIntAsUintN)
1690 {
1691 // 2 : 2 input parameters
1692 CallSignature signature("CallBigIntAsUintN", 0, 2, ArgumentsOrder::DEFAULT_ORDER,
1693 VariableType::JS_POINTER());
1694 *callSign = signature;
1695 std::array<VariableType, 2> params = { // 2 : 2 input parameters
1696 VariableType::FLOAT64(),
1697 VariableType::JS_POINTER(),
1698 };
1699 callSign->SetParameters(params.data());
1700 callSign->SetGCLeafFunction(true);
1701 callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
1702 }
1703
DEF_CALL_SIGNATURE(GetStringToListCacheArray)1704 DEF_CALL_SIGNATURE(GetStringToListCacheArray)
1705 {
1706 // 1 : 1 input parameters
1707 CallSignature callSignature("GetStringToListCacheArray", 0, 1,
1708 ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
1709 *callSign = callSignature;
1710 std::array<VariableType, 1> params = { // 1 : 1 input parameters
1711 VariableType::NATIVE_POINTER(),
1712 };
1713 callSign->SetParameters(params.data());
1714 callSign->SetGCLeafFunction(true);
1715 callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
1716 }
1717
DEF_CALL_SIGNATURE(BigIntEquals)1718 DEF_CALL_SIGNATURE(BigIntEquals)
1719 {
1720 // 2 : 2 input parameters
1721 CallSignature bigIntEquals("BigIntEquals", 0, 2,
1722 ArgumentsOrder::DEFAULT_ORDER, VariableType::BOOL());
1723 *callSign = bigIntEquals;
1724 std::array<VariableType, 2> params = { // 2 : 2 input parameters
1725 VariableType::JS_POINTER(),
1726 VariableType::JS_POINTER(),
1727 };
1728 callSign->SetParameters(params.data());
1729 callSign->SetGCLeafFunction(true);
1730 callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
1731 }
1732
DEF_CALL_SIGNATURE(FastArraySort)1733 DEF_CALL_SIGNATURE(FastArraySort)
1734 {
1735 // 2 : 2 input parameters
1736 CallSignature fastArraySort("FastArraySort", 0, 2, ArgumentsOrder::DEFAULT_ORDER, VariableType::INT32());
1737 *callSign = fastArraySort;
1738 std::array<VariableType, 2> params = { // 2 : 2 input parameters
1739 VariableType::JS_ANY(),
1740 VariableType::JS_ANY()
1741 };
1742 callSign->SetParameters(params.data());
1743 callSign->SetGCLeafFunction(true);
1744 callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
1745 }
1746
DEF_CALL_SIGNATURE(FastArraySortString)1747 DEF_CALL_SIGNATURE(FastArraySortString)
1748 {
1749 // 2 : 2 input parameters
1750 CallSignature fastArraySortString("FastArraySortString", 0, 2,
1751 ArgumentsOrder::DEFAULT_ORDER, VariableType::INT32());
1752 *callSign = fastArraySortString;
1753 std::array<VariableType, 3> params = { // 3 : 3 input parameters
1754 VariableType::NATIVE_POINTER(),
1755 VariableType::JS_ANY(),
1756 VariableType::JS_ANY()
1757 };
1758 callSign->SetParameters(params.data());
1759 callSign->SetGCLeafFunction(true);
1760 callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
1761 }
DEF_CALL_SIGNATURE(StringToNumber)1762 DEF_CALL_SIGNATURE(StringToNumber)
1763 {
1764 // 4 : 4 input parameters
1765 CallSignature stringToNumber("StringToDoubleWithRadix", 0, 2,
1766 ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
1767 *callSign = stringToNumber;
1768 std::array<VariableType, 2> params = { // 2 : 2 input parameters
1769 VariableType::JS_POINTER(),
1770 VariableType::INT32(),
1771 };
1772 callSign->SetParameters(params.data());
1773 callSign->SetGCLeafFunction(true);
1774 callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
1775 }
1776
DEF_CALL_SIGNATURE(ArrayTrim)1777 DEF_CALL_SIGNATURE(ArrayTrim)
1778 {
1779 // 3 : 3 input parameters
1780 CallSignature ArrayTrim("ArrayTrim", 0, 3, ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
1781 *callSign = ArrayTrim;
1782 std::array<VariableType, 3> params = { // 3 : 3 input parameters
1783 VariableType::NATIVE_POINTER(),
1784 VariableType::JS_POINTER(),
1785 VariableType::INT64()
1786 };
1787 callSign->SetParameters(params.data());
1788 callSign->SetGCLeafFunction(true);
1789 callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
1790 }
1791
DEF_CALL_SIGNATURE(BigIntSameValueZero)1792 DEF_CALL_SIGNATURE(BigIntSameValueZero)
1793 {
1794 // 1 : 1 input parameters
1795 CallSignature bigIntSameValueZero("BigIntSameValueZero", 0, 2,
1796 ArgumentsOrder::DEFAULT_ORDER, VariableType::BOOL());
1797 *callSign = bigIntSameValueZero;
1798 std::array<VariableType, 2> params = { // 2 : 2 input parameters
1799 VariableType::JS_POINTER(),
1800 VariableType::JS_POINTER(),
1801 };
1802 callSign->SetParameters(params.data());
1803 callSign->SetGCLeafFunction(true);
1804 callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
1805 }
1806
DEF_CALL_SIGNATURE(StringGetStart)1807 DEF_CALL_SIGNATURE(StringGetStart)
1808 {
1809 CallSignature stringGetStart("StringGetStart", 0, 4, ArgumentsOrder::DEFAULT_ORDER, VariableType::INT32());
1810 *callSign = stringGetStart;
1811 std::array<VariableType, 4> params = { // 4 : four input parameters
1812 VariableType::BOOL(),
1813 VariableType::JS_POINTER(),
1814 VariableType::INT32(),
1815 VariableType::INT32(),
1816 };
1817 callSign->SetParameters(params.data());
1818 callSign->SetGCLeafFunction(true);
1819 callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
1820 }
1821
DEF_CALL_SIGNATURE(StringGetEnd)1822 DEF_CALL_SIGNATURE(StringGetEnd)
1823 {
1824 CallSignature stringGetEnd("StringGetEnd", 0, 5, ArgumentsOrder::DEFAULT_ORDER, VariableType::INT32());
1825 *callSign = stringGetEnd;
1826 std::array<VariableType, 5> params = { // 5 : five input parameters
1827 VariableType::BOOL(),
1828 VariableType::JS_POINTER(),
1829 VariableType::INT32(),
1830 VariableType::INT32(),
1831 VariableType::INT32(),
1832 };
1833 callSign->SetParameters(params.data());
1834 callSign->SetGCLeafFunction(true);
1835 callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
1836 }
1837
DEF_CALL_SIGNATURE(IsFastRegExp)1838 DEF_CALL_SIGNATURE(IsFastRegExp)
1839 {
1840 // 3 : 3 input parameters
1841 CallSignature isFastRegExp("IsFastRegExp", 0, 2,
1842 ArgumentsOrder::DEFAULT_ORDER, VariableType::BOOL());
1843 *callSign = isFastRegExp;
1844 std::array<VariableType, 2> params = { // 2 : 2 input parameters
1845 VariableType::NATIVE_POINTER(),
1846 VariableType::JS_ANY()
1847 };
1848 callSign->SetParameters(params.data());
1849 callSign->SetGCLeafFunction(true);
1850 callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
1851 }
1852
1853 #define PUSH_CALL_ARGS_AND_DISPATCH_SIGNATURE_COMMON(name) \
1854 /* 1 : 1 input parameters */ \
1855 CallSignature signature(#name, 0, 1, \
1856 ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY()); \
1857 *callSign = signature; \
1858 std::array<VariableType, 1> params = { /* 1: 1 input parameters */ \
1859 VariableType::NATIVE_POINTER(), \
1860 }; \
1861 callSign->SetVariadicArgs(true); \
1862 callSign->SetParameters(params.data()); \
1863 callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
1864
1865 #define PUSH_CALL_ARGS_AND_DISPATCH_SIGNATURE(name) \
1866 PUSH_CALL_ARGS_AND_DISPATCH_SIGNATURE_COMMON(name) \
1867 callSign->SetCallConv(CallSignature::CallConv::GHCCallConv);
1868
1869 #define PUSH_CALL_ARGS_AND_DISPATCH_NATIVE_SIGNATURE(name) \
1870 PUSH_CALL_ARGS_AND_DISPATCH_SIGNATURE_COMMON(name) \
1871 callSign->SetCallConv(CallSignature::CallConv::WebKitJSCallConv);
1872
1873 #define PUSH_CALL_ARGS_AND_DISPATCH_NATIVE_RANGE_SIGNATURE(name) \
1874 PUSH_CALL_ARGS_AND_DISPATCH_SIGNATURE_COMMON(name) \
1875 callSign->SetCallConv(CallSignature::CallConv::CCallConv);
1876
DEF_CALL_SIGNATURE(PushCallArgsAndDispatchNative)1877 DEF_CALL_SIGNATURE(PushCallArgsAndDispatchNative)
1878 {
1879 PUSH_CALL_ARGS_AND_DISPATCH_NATIVE_SIGNATURE(PushCallArgsAndDispatchNative)
1880 }
1881
DEF_CALL_SIGNATURE(PushCallArg0AndDispatch)1882 DEF_CALL_SIGNATURE(PushCallArg0AndDispatch)
1883 {
1884 PUSH_CALL_ARGS_AND_DISPATCH_SIGNATURE(PushCallArg0AndDispatch)
1885 }
1886
DEF_CALL_SIGNATURE(PushCallArg1AndDispatch)1887 DEF_CALL_SIGNATURE(PushCallArg1AndDispatch)
1888 {
1889 PUSH_CALL_ARGS_AND_DISPATCH_SIGNATURE(PushCallArg1AndDispatch)
1890 }
1891
DEF_CALL_SIGNATURE(PushCallArgs2AndDispatch)1892 DEF_CALL_SIGNATURE(PushCallArgs2AndDispatch)
1893 {
1894 PUSH_CALL_ARGS_AND_DISPATCH_SIGNATURE(PushCallArgs2AndDispatch)
1895 }
1896
DEF_CALL_SIGNATURE(PushCallArgs3AndDispatch)1897 DEF_CALL_SIGNATURE(PushCallArgs3AndDispatch)
1898 {
1899 PUSH_CALL_ARGS_AND_DISPATCH_SIGNATURE(PushCallArgs3AndDispatch)
1900 }
1901
DEF_CALL_SIGNATURE(PushCallThisArg0AndDispatch)1902 DEF_CALL_SIGNATURE(PushCallThisArg0AndDispatch)
1903 {
1904 PUSH_CALL_ARGS_AND_DISPATCH_SIGNATURE(PushCallThisArg0AndDispatch)
1905 }
1906
DEF_CALL_SIGNATURE(PushCallThisArg1AndDispatch)1907 DEF_CALL_SIGNATURE(PushCallThisArg1AndDispatch)
1908 {
1909 PUSH_CALL_ARGS_AND_DISPATCH_SIGNATURE(PushCallThisArg1AndDispatch)
1910 }
1911
DEF_CALL_SIGNATURE(PushCallThisArgs2AndDispatch)1912 DEF_CALL_SIGNATURE(PushCallThisArgs2AndDispatch)
1913 {
1914 PUSH_CALL_ARGS_AND_DISPATCH_SIGNATURE(PushCallThisArgs2AndDispatch)
1915 }
1916
DEF_CALL_SIGNATURE(PushCallThisArgs3AndDispatch)1917 DEF_CALL_SIGNATURE(PushCallThisArgs3AndDispatch)
1918 {
1919 PUSH_CALL_ARGS_AND_DISPATCH_SIGNATURE(PushCallThisArgs3AndDispatch)
1920 }
1921
DEF_CALL_SIGNATURE(PushCallRangeAndDispatchNative)1922 DEF_CALL_SIGNATURE(PushCallRangeAndDispatchNative)
1923 {
1924 PUSH_CALL_ARGS_AND_DISPATCH_NATIVE_RANGE_SIGNATURE(PushCallRangeAndDispatchNative)
1925 }
1926
DEF_CALL_SIGNATURE(PushCallNewAndDispatchNative)1927 DEF_CALL_SIGNATURE(PushCallNewAndDispatchNative)
1928 {
1929 PUSH_CALL_ARGS_AND_DISPATCH_NATIVE_RANGE_SIGNATURE(PushCallNewAndDispatchNative)
1930 }
1931
DEF_CALL_SIGNATURE(PushNewTargetAndDispatchNative)1932 DEF_CALL_SIGNATURE(PushNewTargetAndDispatchNative)
1933 {
1934 PUSH_CALL_ARGS_AND_DISPATCH_NATIVE_RANGE_SIGNATURE(PushNewTargetAndDispatchNative)
1935 }
1936
DEF_CALL_SIGNATURE(PushCallNewAndDispatch)1937 DEF_CALL_SIGNATURE(PushCallNewAndDispatch)
1938 {
1939 PUSH_CALL_ARGS_AND_DISPATCH_SIGNATURE(PushCallNewAndDispatch)
1940 }
1941
DEF_CALL_SIGNATURE(PushSuperCallAndDispatch)1942 DEF_CALL_SIGNATURE(PushSuperCallAndDispatch)
1943 {
1944 PUSH_CALL_ARGS_AND_DISPATCH_SIGNATURE(PushSuperCallAndDispatch)
1945 }
1946
DEF_CALL_SIGNATURE(PushCallRangeAndDispatch)1947 DEF_CALL_SIGNATURE(PushCallRangeAndDispatch)
1948 {
1949 PUSH_CALL_ARGS_AND_DISPATCH_SIGNATURE(PushCallRangeAndDispatch)
1950 }
1951
DEF_CALL_SIGNATURE(PushCallThisRangeAndDispatch)1952 DEF_CALL_SIGNATURE(PushCallThisRangeAndDispatch)
1953 {
1954 PUSH_CALL_ARGS_AND_DISPATCH_SIGNATURE(PushCallThisRangeAndDispatch)
1955 }
1956
DEF_CALL_SIGNATURE(CallGetter)1957 DEF_CALL_SIGNATURE(CallGetter)
1958 {
1959 PUSH_CALL_ARGS_AND_DISPATCH_NATIVE_RANGE_SIGNATURE(CallGetter)
1960 }
1961
DEF_CALL_SIGNATURE(CallSetter)1962 DEF_CALL_SIGNATURE(CallSetter)
1963 {
1964 PUSH_CALL_ARGS_AND_DISPATCH_NATIVE_RANGE_SIGNATURE(CallSetter)
1965 }
1966
DEF_CALL_SIGNATURE(CallContainersArgs2)1967 DEF_CALL_SIGNATURE(CallContainersArgs2)
1968 {
1969 PUSH_CALL_ARGS_AND_DISPATCH_NATIVE_RANGE_SIGNATURE(CallContainersArgs2)
1970 }
1971
DEF_CALL_SIGNATURE(CallContainersArgs3)1972 DEF_CALL_SIGNATURE(CallContainersArgs3)
1973 {
1974 PUSH_CALL_ARGS_AND_DISPATCH_NATIVE_RANGE_SIGNATURE(CallContainersArgs3)
1975 }
1976
DEF_CALL_SIGNATURE(CallReturnWithArgv)1977 DEF_CALL_SIGNATURE(CallReturnWithArgv)
1978 {
1979 PUSH_CALL_ARGS_AND_DISPATCH_NATIVE_RANGE_SIGNATURE(CallReturnWithArgv)
1980 }
1981
DEF_CALL_SIGNATURE(JSCallWithArgV)1982 DEF_CALL_SIGNATURE(JSCallWithArgV)
1983 {
1984 // 5 : 5 input parameters
1985 CallSignature jSCallWithArgV("JSCallWithArgV", 0, 5,
1986 ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
1987 *callSign = jSCallWithArgV;
1988 // 5 : 5 input parameters
1989 std::array<VariableType, 5> params = {
1990 VariableType::NATIVE_POINTER(), // glue
1991 VariableType::INT64(), // actualNumArgs
1992 VariableType::JS_ANY(), // jsfunc
1993 VariableType::JS_ANY(), // newTarget
1994 VariableType::JS_ANY(), // this
1995 };
1996 callSign->SetVariadicArgs(true);
1997 callSign->SetParameters(params.data());
1998 callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
1999 callSign->SetCallConv(CallSignature::CallConv::CCallConv);
2000 }
2001
DEF_CALL_SIGNATURE(JSFastCallWithArgV)2002 DEF_CALL_SIGNATURE(JSFastCallWithArgV)
2003 {
2004 // 4 : 4 input parameters
2005 CallSignature jSFastCallWithArgV("JSFastCallWithArgV", 0, 4,
2006 ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
2007 *callSign = jSFastCallWithArgV;
2008 // 4 : 4 input parameters
2009 std::array<VariableType, 4> params = {
2010 VariableType::NATIVE_POINTER(), // glue
2011 VariableType::JS_ANY(), // jsfunc
2012 VariableType::JS_ANY(), // this
2013 VariableType::INT64(), // actualNumArgs
2014 };
2015 callSign->SetVariadicArgs(true);
2016 callSign->SetParameters(params.data());
2017 callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
2018 callSign->SetCallConv(CallSignature::CallConv::CCallConv);
2019 }
2020
DEF_CALL_SIGNATURE(JSFastCallWithArgVAndPushArgv)2021 DEF_CALL_SIGNATURE(JSFastCallWithArgVAndPushArgv)
2022 {
2023 // 4 : 4 input parameters
2024 CallSignature jSCallWithArgV("JSFastCallWithArgVAndPushArgv", 0, 4,
2025 ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
2026 *callSign = jSCallWithArgV;
2027 // 4 : 4 input parameters
2028 std::array<VariableType, 4> params = {
2029 VariableType::NATIVE_POINTER(), // glue
2030 VariableType::JS_ANY(), // jsfunc
2031 VariableType::JS_ANY(), // this
2032 VariableType::INT64(), // actualNumArgs
2033 };
2034 callSign->SetVariadicArgs(true);
2035 callSign->SetParameters(params.data());
2036 callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
2037 callSign->SetCallConv(CallSignature::CallConv::CCallConv);
2038 }
2039
DEF_CALL_SIGNATURE(JSCallWithArgVAndPushArgv)2040 DEF_CALL_SIGNATURE(JSCallWithArgVAndPushArgv)
2041 {
2042 // 5 : 5 input parameters
2043 CallSignature jSCallWithArgVAndPushArgv("JSCallWithArgVAndPushArgv", 0, 5,
2044 ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
2045 *callSign = jSCallWithArgVAndPushArgv;
2046 // 5 : 5 input parameters
2047 std::array<VariableType, 5> params = {
2048 VariableType::NATIVE_POINTER(), // glue
2049 VariableType::INT64(), // actualNumArgs
2050 VariableType::JS_ANY(), // jsfunc
2051 VariableType::JS_ANY(), // newTarget
2052 VariableType::JS_ANY(), // this
2053 };
2054 callSign->SetVariadicArgs(true);
2055 callSign->SetParameters(params.data());
2056 callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
2057 callSign->SetCallConv(CallSignature::CallConv::CCallConv);
2058 }
2059
DEF_CALL_SIGNATURE(CallOptimized)2060 DEF_CALL_SIGNATURE(CallOptimized)
2061 {
2062 // 6 : 6 input parameters
2063 CallSignature callOptimized("CallOptimized", 0, 6,
2064 ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
2065 *callSign = callOptimized;
2066 std::array<VariableType, 6> params = { // 6 : 6 input parameters
2067 VariableType::NATIVE_POINTER(), // glue
2068 VariableType::INT64(), // actual argC
2069 VariableType::NATIVE_POINTER(), // actual argV
2070 VariableType::JS_ANY(), // call target
2071 VariableType::JS_ANY(), // new target
2072 VariableType::JS_ANY(), // thisobj
2073 };
2074 callSign->SetVariadicArgs(true);
2075 callSign->SetParameters(params.data());
2076 callSign->SetCallConv(CallSignature::CallConv::WebKitJSCallConv);
2077 callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
2078 }
2079
DEF_CALL_SIGNATURE(SuperCallWithArgV)2080 DEF_CALL_SIGNATURE(SuperCallWithArgV)
2081 {
2082 // 5 : 5 input parameters
2083 CallSignature superCallWithArgV("SuperCallWithArgV", 0, 5,
2084 ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
2085 *callSign = superCallWithArgV;
2086 // 5 : 5 input parameters
2087 std::array<VariableType, 5> params = {
2088 VariableType::NATIVE_POINTER(), // glue
2089 VariableType::INT64(), // actualNumArgs
2090 VariableType::JS_ANY(), // jsfunc
2091 VariableType::JS_ANY(), // newTarget
2092 VariableType::JS_ANY(), // this
2093 };
2094 callSign->SetVariadicArgs(true);
2095 callSign->SetParameters(params.data());
2096 callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
2097 callSign->SetCallConv(CallSignature::CallConv::CCallConv);
2098 }
2099
DEF_CALL_SIGNATURE(Dump)2100 DEF_CALL_SIGNATURE(Dump)
2101 {
2102 constexpr size_t N_INPUT_PARAMETERS = 1;
2103 CallSignature dump("Dump", 0, N_INPUT_PARAMETERS,
2104 ArgumentsOrder::DEFAULT_ORDER, VariableType::VOID());
2105 *callSign = dump;
2106 std::array<VariableType, N_INPUT_PARAMETERS> params = {
2107 VariableType::JS_POINTER() // Tagged value of the object to be dumped
2108 };
2109 callSign->SetParameters(params.data());
2110 callSign->SetGCLeafFunction(true);
2111 callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
2112 }
2113
DEF_CALL_SIGNATURE(DebugDump)2114 DEF_CALL_SIGNATURE(DebugDump)
2115 {
2116 constexpr size_t N_INPUT_PARAMETERS = 1;
2117 CallSignature debugDump("DebugDump", 0, N_INPUT_PARAMETERS,
2118 ArgumentsOrder::DEFAULT_ORDER, VariableType::VOID());
2119 *callSign = debugDump;
2120 std::array<VariableType, N_INPUT_PARAMETERS> params = {
2121 VariableType::JS_POINTER() // Tagged value of the object to be dumped
2122 };
2123 callSign->SetParameters(params.data());
2124 callSign->SetGCLeafFunction(true);
2125 callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
2126 }
2127
DEF_CALL_SIGNATURE(DumpWithHint)2128 DEF_CALL_SIGNATURE(DumpWithHint)
2129 {
2130 constexpr size_t N_INPUT_PARAMETERS = 2;
2131 CallSignature dumpWithHint("DumpWithHint", 0, N_INPUT_PARAMETERS,
2132 ArgumentsOrder::DEFAULT_ORDER, VariableType::VOID());
2133 *callSign = dumpWithHint;
2134 std::array<VariableType, N_INPUT_PARAMETERS> params = {
2135 VariableType::NATIVE_POINTER(), // String created via CircuitBuilder::StringPtr()
2136 VariableType::JS_POINTER() // Tagged value of the object to be dumped
2137 };
2138 callSign->SetParameters(params.data());
2139 callSign->SetGCLeafFunction(true);
2140 callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
2141 }
2142
DEF_CALL_SIGNATURE(DebugDumpWithHint)2143 DEF_CALL_SIGNATURE(DebugDumpWithHint)
2144 {
2145 constexpr size_t N_INPUT_PARAMETERS = 2;
2146 CallSignature debugDumpWithHint("DebugDumpWithHint", 0, N_INPUT_PARAMETERS,
2147 ArgumentsOrder::DEFAULT_ORDER, VariableType::VOID());
2148 *callSign = debugDumpWithHint;
2149 std::array<VariableType, N_INPUT_PARAMETERS> params = {
2150 VariableType::NATIVE_POINTER(), // String created via CircuitBuilder::StringPtr()
2151 VariableType::JS_POINTER() // Tagged value of the object to be dumped
2152 };
2153 callSign->SetParameters(params.data());
2154 callSign->SetGCLeafFunction(true);
2155 callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
2156 }
2157
DEF_CALL_SIGNATURE(DebugPrint)2158 DEF_CALL_SIGNATURE(DebugPrint)
2159 {
2160 // 1 : 1 input parameters
2161 CallSignature debugPrint("DebugPrint", 0, 1,
2162 ArgumentsOrder::DEFAULT_ORDER, VariableType::VOID());
2163 *callSign = debugPrint;
2164 // 1 : 1 input parameters
2165 std::array<VariableType, 1> params = {
2166 VariableType::INT32(),
2167 };
2168 callSign->SetVariadicArgs(true);
2169 callSign->SetParameters(params.data());
2170 callSign->SetGCLeafFunction(true);
2171 callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
2172 }
2173
DEF_CALL_SIGNATURE(DebugPrintCustom)2174 DEF_CALL_SIGNATURE(DebugPrintCustom)
2175 {
2176 // 1 : 1 input parameters
2177 CallSignature debugPrintCustom("DebugPrintCustom", 0, 1,
2178 ArgumentsOrder::DEFAULT_ORDER, VariableType::VOID());
2179 *callSign = debugPrintCustom;
2180 // 1 : 1 input parameters
2181 std::array<VariableType, 1> params = {
2182 VariableType::NATIVE_POINTER() // Format string created via CircuitBuilder::StringPtr()
2183 };
2184 callSign->SetVariadicArgs(true);
2185 callSign->SetParameters(params.data());
2186 callSign->SetGCLeafFunction(true);
2187 callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
2188 }
2189
DEF_CALL_SIGNATURE(DebugPrintInstruction)2190 DEF_CALL_SIGNATURE(DebugPrintInstruction)
2191 {
2192 // 2 : 2 input parameters
2193 CallSignature debugPrintInstruction("DebugPrintInstruction", 0, 2,
2194 ArgumentsOrder::DEFAULT_ORDER, VariableType::VOID());
2195 *callSign = debugPrintInstruction;
2196 // 2 : 2 input parameters
2197 std::array<VariableType, 2> params = {
2198 VariableType::NATIVE_POINTER(),
2199 VariableType::NATIVE_POINTER(),
2200 };
2201 callSign->SetVariadicArgs(true);
2202 callSign->SetParameters(params.data());
2203 callSign->SetGCLeafFunction(true);
2204 callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
2205 }
2206
DEF_CALL_SIGNATURE(DebugOsrEntry)2207 DEF_CALL_SIGNATURE(DebugOsrEntry)
2208 {
2209 // 2 : 2 input parameters
2210 CallSignature debugOsrEntry("DebugOsrEntry", 0, 2,
2211 ArgumentsOrder::DEFAULT_ORDER, VariableType::VOID());
2212 *callSign = debugOsrEntry;
2213 // 2 : 2 input parameters
2214 std::array<VariableType, 2> params = {
2215 VariableType::NATIVE_POINTER(),
2216 VariableType::NATIVE_POINTER(),
2217 };
2218 callSign->SetVariadicArgs(true);
2219 callSign->SetParameters(params.data());
2220 callSign->SetGCLeafFunction(true);
2221 callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
2222 }
2223
DEF_CALL_SIGNATURE(Comment)2224 DEF_CALL_SIGNATURE(Comment)
2225 {
2226 // 1 : 1 input parameters
2227 CallSignature comment("Comment", 0, 1,
2228 ArgumentsOrder::DEFAULT_ORDER, VariableType::VOID());
2229 *callSign = comment;
2230 // 1 : 1 input parameters
2231 std::array<VariableType, 1> params = {
2232 VariableType::NATIVE_POINTER(),
2233 };
2234 callSign->SetParameters(params.data());
2235 callSign->SetGCLeafFunction(true);
2236 callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
2237 }
2238
DEF_CALL_SIGNATURE(FatalPrint)2239 DEF_CALL_SIGNATURE(FatalPrint)
2240 {
2241 // 1 : 1 input parameters
2242 CallSignature fatalPrint("FatalPrint", 0, 1,
2243 ArgumentsOrder::DEFAULT_ORDER, VariableType::VOID());
2244 *callSign = fatalPrint;
2245 // 1 : 1 input parameters
2246 std::array<VariableType, 1> params = {
2247 VariableType::INT32(),
2248 };
2249 callSign->SetVariadicArgs(true);
2250 callSign->SetParameters(params.data());
2251 callSign->SetGCLeafFunction(true);
2252 callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
2253 }
2254
DEF_CALL_SIGNATURE(FatalPrintCustom)2255 DEF_CALL_SIGNATURE(FatalPrintCustom)
2256 {
2257 // 1 : 1 input parameters
2258 CallSignature fatalPrintCustom("FatalPrintCustom", 0, 1,
2259 ArgumentsOrder::DEFAULT_ORDER, VariableType::VOID());
2260 *callSign = fatalPrintCustom;
2261 // 1 : 1 input parameters
2262 std::array<VariableType, 1> params = {
2263 VariableType::NATIVE_POINTER() // Format string created via CircuitBuilder::StringPtr()
2264 };
2265 callSign->SetVariadicArgs(true);
2266 callSign->SetParameters(params.data());
2267 callSign->SetGCLeafFunction(true);
2268 callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
2269 }
2270
DEF_CALL_SIGNATURE(GetActualArgvNoGC)2271 DEF_CALL_SIGNATURE(GetActualArgvNoGC)
2272 {
2273 CallSignature index("GetActualArgvNoGC", 0, 1, ArgumentsOrder::DEFAULT_ORDER, VariableType::NATIVE_POINTER());
2274 *callSign = index;
2275 std::array<VariableType, 1> params = {
2276 VariableType::NATIVE_POINTER(),
2277 };
2278 callSign->SetParameters(params.data());
2279 callSign->SetGCLeafFunction(true);
2280 callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
2281 }
2282
DEF_CALL_SIGNATURE(InsertNewToEdenRSet)2283 DEF_CALL_SIGNATURE(InsertNewToEdenRSet)
2284 {
2285 // 3 : 3 input parameters
2286 CallSignature index("InsertNewToEdenRSet", 0, 3, ArgumentsOrder::DEFAULT_ORDER, VariableType::VOID());
2287 *callSign = index;
2288 // 3 : 3 input parameters
2289 std::array<VariableType, 3> params = {
2290 VariableType::NATIVE_POINTER(),
2291 VariableType::JS_POINTER(),
2292 VariableType::NATIVE_POINTER(),
2293 };
2294 callSign->SetParameters(params.data());
2295 callSign->SetGCLeafFunction(true);
2296 callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
2297 }
2298
DEF_CALL_SIGNATURE(InsertOldToNewRSet)2299 DEF_CALL_SIGNATURE(InsertOldToNewRSet)
2300 {
2301 // 3 : 3 input parameters
2302 CallSignature index("InsertOldToNewRSet", 0, 3, ArgumentsOrder::DEFAULT_ORDER, VariableType::VOID());
2303 *callSign = index;
2304 // 3 : 3 input parameters
2305 std::array<VariableType, 3> params = {
2306 VariableType::NATIVE_POINTER(),
2307 VariableType::JS_POINTER(),
2308 VariableType::NATIVE_POINTER(),
2309 };
2310 callSign->SetParameters(params.data());
2311 callSign->SetGCLeafFunction(true);
2312 callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
2313 }
2314
DEF_CALL_SIGNATURE(InsertLocalToShareRSet)2315 DEF_CALL_SIGNATURE(InsertLocalToShareRSet)
2316 {
2317 // 3 : 3 input parameters
2318 CallSignature index("InsertLocalToShareRSet", 0, 3, ArgumentsOrder::DEFAULT_ORDER, VariableType::VOID());
2319 *callSign = index;
2320 // 3 : 3 input parameters
2321 std::array<VariableType, 3> params = {
2322 VariableType::NATIVE_POINTER(),
2323 VariableType::JS_POINTER(),
2324 VariableType::NATIVE_POINTER(),
2325 };
2326 callSign->SetParameters(params.data());
2327 callSign->SetGCLeafFunction(true);
2328 callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
2329 }
2330
DEF_CALL_SIGNATURE(SetBitAtomic)2331 DEF_CALL_SIGNATURE(SetBitAtomic)
2332 {
2333 // 3 : 3 input parameters
2334 CallSignature index("SetBitAtomic", 0, 3, ArgumentsOrder::DEFAULT_ORDER, VariableType::VOID());
2335 *callSign = index;
2336 // 3 : 3 input parameters
2337 std::array<VariableType, 3> params = {
2338 VariableType::NATIVE_POINTER(),
2339 VariableType::INT32(),
2340 VariableType::INT32()
2341 };
2342 callSign->SetParameters(params.data());
2343 callSign->SetGCLeafFunction(true);
2344 callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
2345 }
2346
2347 #define DEF_FLOAT_UNARY_CALL_SIGNATURE_BY_NAME(NAME) \
2348 DEF_CALL_SIGNATURE(NAME) \
2349 { \
2350 /* 1 : 1 input parameters */ \
2351 CallSignature index(#NAME, 0, 1, ArgumentsOrder::DEFAULT_ORDER, VariableType::FLOAT64()); \
2352 *callSign = index; \
2353 /* 1 : 1 input parameters */ \
2354 std::array<VariableType, 1> params = { \
2355 VariableType::FLOAT64(), \
2356 }; \
2357 callSign->SetParameters(params.data()); \
2358 callSign->SetGCLeafFunction(true); \
2359 callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC); \
2360 }
2361
2362 DEF_FLOAT_UNARY_CALL_SIGNATURE_BY_NAME(FloatAcos)
2363 DEF_FLOAT_UNARY_CALL_SIGNATURE_BY_NAME(FloatAcosh)
2364 DEF_FLOAT_UNARY_CALL_SIGNATURE_BY_NAME(FloatAsin)
2365 DEF_FLOAT_UNARY_CALL_SIGNATURE_BY_NAME(FloatAsinh)
2366 DEF_FLOAT_UNARY_CALL_SIGNATURE_BY_NAME(FloatAtan)
2367 DEF_FLOAT_UNARY_CALL_SIGNATURE_BY_NAME(FloatAtanh)
2368 DEF_FLOAT_UNARY_CALL_SIGNATURE_BY_NAME(FloatCos)
2369 DEF_FLOAT_UNARY_CALL_SIGNATURE_BY_NAME(FloatCosh)
2370 DEF_FLOAT_UNARY_CALL_SIGNATURE_BY_NAME(FloatSin)
2371 DEF_FLOAT_UNARY_CALL_SIGNATURE_BY_NAME(FloatSinh)
2372 DEF_FLOAT_UNARY_CALL_SIGNATURE_BY_NAME(FloatTan)
2373 DEF_FLOAT_UNARY_CALL_SIGNATURE_BY_NAME(FloatTanh)
2374 DEF_FLOAT_UNARY_CALL_SIGNATURE_BY_NAME(FloatExp)
2375 DEF_FLOAT_UNARY_CALL_SIGNATURE_BY_NAME(FloatExpm1)
2376 DEF_FLOAT_UNARY_CALL_SIGNATURE_BY_NAME(FloatTrunc)
2377 DEF_FLOAT_UNARY_CALL_SIGNATURE_BY_NAME(FloatFloor)
2378 DEF_FLOAT_UNARY_CALL_SIGNATURE_BY_NAME(FloatLog)
2379 DEF_FLOAT_UNARY_CALL_SIGNATURE_BY_NAME(FloatLog2)
2380 DEF_FLOAT_UNARY_CALL_SIGNATURE_BY_NAME(FloatLog10)
2381 DEF_FLOAT_UNARY_CALL_SIGNATURE_BY_NAME(FloatLog1p)
2382 DEF_FLOAT_UNARY_CALL_SIGNATURE_BY_NAME(FloatCbrt)
2383 DEF_FLOAT_UNARY_CALL_SIGNATURE_BY_NAME(FloatClz32)
2384 DEF_FLOAT_UNARY_CALL_SIGNATURE_BY_NAME(FloatCeil)
2385
2386 #undef DEF_FLOAT_UNARY_CALL_SIGNATURE_BY_NAME
2387
2388 #define DEF_FLOAT_BINARY_CALL_SIGNATURE_BY_NAME(NAME) \
2389 DEF_CALL_SIGNATURE(NAME) \
2390 { \
2391 /* 2 : 2 input parameters */ \
2392 CallSignature index(#NAME, 0, 2, ArgumentsOrder::DEFAULT_ORDER, VariableType::FLOAT64()); \
2393 *callSign = index; \
2394 /* 2 : 2 input parameters */ \
2395 std::array<VariableType, 2> params = { \
2396 VariableType::FLOAT64(), \
2397 VariableType::FLOAT64(), \
2398 }; \
2399 callSign->SetParameters(params.data()); \
2400 callSign->SetGCLeafFunction(true); \
2401 callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC); \
2402 }
2403
2404 DEF_FLOAT_BINARY_CALL_SIGNATURE_BY_NAME(FloatMod)
2405 DEF_FLOAT_BINARY_CALL_SIGNATURE_BY_NAME(FloatAtan2)
2406 DEF_FLOAT_BINARY_CALL_SIGNATURE_BY_NAME(FloatPow)
2407
2408 #undef DEF_FLOAT_BINARY_CALL_SIGNATURE_BY_NAME
2409
DEF_CALL_SIGNATURE(CallDateNow)2410 DEF_CALL_SIGNATURE(CallDateNow)
2411 {
2412 CallSignature signature("CallDateNow", 0, 0, ArgumentsOrder::DEFAULT_ORDER,
2413 VariableType::FLOAT64());
2414 *callSign = signature;
2415 callSign->SetGCLeafFunction(true);
2416 callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
2417 }
2418
DEF_CALL_SIGNATURE(FindElementWithCache)2419 DEF_CALL_SIGNATURE(FindElementWithCache)
2420 {
2421 // 4 : 4 input parameters
2422 CallSignature index("FindElementWithCache", 0, 4, ArgumentsOrder::DEFAULT_ORDER, VariableType::INT32());
2423 *callSign = index;
2424 // 4 : 4 input parameters
2425 std::array<VariableType, 4> params = {
2426 VariableType::NATIVE_POINTER(),
2427 VariableType::JS_ANY(),
2428 VariableType::JS_ANY(),
2429 VariableType::INT32(),
2430 };
2431 callSign->SetParameters(params.data());
2432 callSign->SetGCLeafFunction(true);
2433 callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
2434 }
2435
DEF_CALL_SIGNATURE(UpdateFieldType)2436 DEF_CALL_SIGNATURE(UpdateFieldType)
2437 {
2438 // 2 : 2 input parameters
2439 CallSignature index("UpdateFieldType", 0, 2, ArgumentsOrder::DEFAULT_ORDER, VariableType::INT32());
2440 *callSign = index;
2441 // 2 : 2 input parameters
2442 std::array<VariableType, 2> params = {
2443 VariableType::JS_ANY(),
2444 VariableType::INT64(),
2445 };
2446 callSign->SetParameters(params.data());
2447 callSign->SetGCLeafFunction(true);
2448 callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
2449 }
2450
DEF_CALL_SIGNATURE(NumberIsFinite)2451 DEF_CALL_SIGNATURE(NumberIsFinite)
2452 {
2453 // 1 : 1 input parameters
2454 CallSignature index("NumberIsFinite", 0, 1, ArgumentsOrder::DEFAULT_ORDER, VariableType::BOOL());
2455 *callSign = index;
2456 // 1 : 1 input parameters
2457 std::array<VariableType, 1> params = {
2458 VariableType::FLOAT64(),
2459 };
2460 callSign->SetParameters(params.data());
2461 callSign->SetGCLeafFunction(true);
2462 callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
2463 }
2464
DEF_CALL_SIGNATURE(DoubleToInt)2465 DEF_CALL_SIGNATURE(DoubleToInt)
2466 {
2467 // 2 : 2 input parameters
2468 CallSignature index("DoubleToInt", 0, 2, ArgumentsOrder::DEFAULT_ORDER, VariableType::INT32());
2469 *callSign = index;
2470 // 2 : 2 input parameters
2471 std::array<VariableType, 2> params = {
2472 VariableType::FLOAT64(),
2473 VariableType::NATIVE_POINTER(),
2474 };
2475 callSign->SetParameters(params.data());
2476 callSign->SetGCLeafFunction(true);
2477 callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
2478 }
2479
DEF_CALL_SIGNATURE(DoubleToLength)2480 DEF_CALL_SIGNATURE(DoubleToLength)
2481 {
2482 // 1 : 1 input parameters
2483 CallSignature index("DoubleToLength", 0, 1, ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
2484 *callSign = index;
2485 // 1 : 1 input parameters
2486 std::array<VariableType, 1> params = {
2487 VariableType::FLOAT64(),
2488 };
2489 callSign->SetParameters(params.data());
2490 callSign->SetGCLeafFunction(true);
2491 callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
2492 }
2493
DEF_CALL_SIGNATURE(MarkingBarrier)2494 DEF_CALL_SIGNATURE(MarkingBarrier)
2495 {
2496 // 4 : 4 input parameters
2497 CallSignature index("MarkingBarrier", 0, 4, ArgumentsOrder::DEFAULT_ORDER, VariableType::VOID());
2498 *callSign = index;
2499 // 4 : 4 input parameters
2500 std::array<VariableType, 4> params = {
2501 VariableType::NATIVE_POINTER(),
2502 VariableType::JS_POINTER(),
2503 VariableType::NATIVE_POINTER(),
2504 VariableType::JS_POINTER()
2505 };
2506 callSign->SetParameters(params.data());
2507 callSign->SetGCLeafFunction(true);
2508 callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
2509 }
2510
DEF_CALL_SIGNATURE(MarkingBarrierWithEden)2511 DEF_CALL_SIGNATURE(MarkingBarrierWithEden)
2512 {
2513 // 4 : 4 input parameters
2514 CallSignature index("MarkingBarrierWithEden", 0, 4, ArgumentsOrder::DEFAULT_ORDER, VariableType::VOID());
2515 *callSign = index;
2516 // 4 : 4 input parameters
2517 std::array<VariableType, 4> params = {
2518 VariableType::NATIVE_POINTER(),
2519 VariableType::JS_POINTER(),
2520 VariableType::NATIVE_POINTER(),
2521 VariableType::JS_POINTER()
2522 };
2523 callSign->SetParameters(params.data());
2524 callSign->SetGCLeafFunction(true);
2525 callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
2526 }
2527
DEF_CALL_SIGNATURE(SharedGCMarkingBarrier)2528 DEF_CALL_SIGNATURE(SharedGCMarkingBarrier)
2529 {
2530 // 2 : 2 input parameters
2531 CallSignature index("SharedGCMarkingBarrier", 0, 2, ArgumentsOrder::DEFAULT_ORDER, VariableType::VOID());
2532 *callSign = index;
2533 // 2 : 2 input parameters
2534 std::array<VariableType, 2> params = {
2535 VariableType::NATIVE_POINTER(),
2536 VariableType::JS_POINTER(),
2537 };
2538 callSign->SetParameters(params.data());
2539 callSign->SetGCLeafFunction(true);
2540 callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
2541 }
2542
DEF_CALL_SIGNATURE(StoreBarrier)2543 DEF_CALL_SIGNATURE(StoreBarrier)
2544 {
2545 // 4 : 4 input parameters
2546 CallSignature index("StoreBarrier", 0, 4, ArgumentsOrder::DEFAULT_ORDER, VariableType::VOID());
2547 *callSign = index;
2548 // 4 : 4 input parameters
2549 std::array<VariableType, 4> params = {
2550 VariableType::NATIVE_POINTER(),
2551 VariableType::JS_POINTER(),
2552 VariableType::NATIVE_POINTER(),
2553 VariableType::JS_POINTER()
2554 };
2555 callSign->SetParameters(params.data());
2556 callSign->SetGCLeafFunction(true);
2557 callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
2558 }
2559
DEF_CALL_SIGNATURE(CallArg0)2560 DEF_CALL_SIGNATURE(CallArg0)
2561 {
2562 // 2 : 2 input parameters
2563 CallSignature callArg0("callArg0", 0, 2,
2564 ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
2565 *callSign = callArg0;
2566 // 2 : 2 input parameters
2567 std::array<VariableType, 2> params = {
2568 VariableType::NATIVE_POINTER(),
2569 VariableType::JS_ANY()
2570 };
2571 callSign->SetParameters(params.data());
2572 callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB);
2573 }
2574
DEF_CALL_SIGNATURE(CallArg1)2575 DEF_CALL_SIGNATURE(CallArg1)
2576 {
2577 // 3 : 3 input parameters
2578 CallSignature callArg1("callArg1", 0, 3,
2579 ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
2580 *callSign = callArg1;
2581 // 3 : 3 input parameters
2582 std::array<VariableType, 3> params = {
2583 VariableType::NATIVE_POINTER(),
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(CallArgs2)2591 DEF_CALL_SIGNATURE(CallArgs2)
2592 {
2593 // 4 : 4 input parameters
2594 CallSignature callArgs2("callArgs2", 0, 4,
2595 ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
2596 *callSign = callArgs2;
2597 // 4 : 4 input parameters
2598 std::array<VariableType, 4> params = {
2599 VariableType::NATIVE_POINTER(),
2600 VariableType::JS_ANY(),
2601 VariableType::JS_ANY(),
2602 VariableType::JS_ANY()
2603 };
2604 callSign->SetParameters(params.data());
2605 callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB);
2606 }
2607
DEF_CALL_SIGNATURE(CallArgs3)2608 DEF_CALL_SIGNATURE(CallArgs3)
2609 {
2610 // 5 : 5 input parameters
2611 CallSignature callArgs3("callArgs3", 0, 5,
2612 ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
2613 *callSign = callArgs3;
2614 // 5 : 5 input parameters
2615 std::array<VariableType, 5> params = {
2616 VariableType::NATIVE_POINTER(),
2617 VariableType::JS_ANY(),
2618 VariableType::JS_ANY(),
2619 VariableType::JS_ANY(),
2620 VariableType::JS_ANY()
2621 };
2622 callSign->SetParameters(params.data());
2623 callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB);
2624 }
2625
DEF_CALL_SIGNATURE(CallThisRange)2626 DEF_CALL_SIGNATURE(CallThisRange)
2627 {
2628 // 3 : 3 input parameters
2629 CallSignature callThisRange("callThisRange", 0, 3,
2630 ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
2631 *callSign = callThisRange;
2632 // 3 : 3 input parameters
2633 std::array<VariableType, 3> params = {
2634 VariableType::NATIVE_POINTER(),
2635 VariableType::JS_ANY(),
2636 VariableType::JS_ANY()
2637 };
2638 callSign->SetVariadicArgs(true);
2639 callSign->SetParameters(params.data());
2640 callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB);
2641 }
2642
DEF_CALL_SIGNATURE(CallRange)2643 DEF_CALL_SIGNATURE(CallRange)
2644 {
2645 // 2 : 2 input parameters
2646 CallSignature callRange("callRange", 0, 2,
2647 ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
2648 *callSign = callRange;
2649 // 2 : 2 input parameters
2650 std::array<VariableType, 2> params = {
2651 VariableType::NATIVE_POINTER(),
2652 VariableType::JS_ANY()
2653 };
2654 callSign->SetVariadicArgs(true);
2655 callSign->SetParameters(params.data());
2656 callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB);
2657 }
2658
DEF_CALL_SIGNATURE(JsProxyCallInternal)2659 DEF_CALL_SIGNATURE(JsProxyCallInternal)
2660 {
2661 // 4 : 4 input parameters
2662 CallSignature proxyCallInternal("JsProxyCallInternal", 0, 4,
2663 ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_POINTER());
2664 *callSign = proxyCallInternal;
2665 // 4 : 4 input parameters
2666 std::array<VariableType, 4> params = {
2667 VariableType::NATIVE_POINTER(), // glue
2668 VariableType::INT64(), // actual argC
2669 VariableType::JS_POINTER(), // callTarget
2670 VariableType::NATIVE_POINTER(), // argv
2671 };
2672 callSign->SetVariadicArgs(false);
2673 callSign->SetParameters(params.data());
2674 callSign->SetTailCall(true);
2675 callSign->SetGCLeafFunction(true);
2676 callSign->SetTargetKind(CallSignature::TargetKind::COMMON_STUB);
2677 callSign->SetCallConv(CallSignature::CallConv::CCallConv);
2678 }
2679
DEF_CALL_SIGNATURE(JsBoundCallInternal)2680 DEF_CALL_SIGNATURE(JsBoundCallInternal)
2681 {
2682 // 6 : 6 input parameters
2683 CallSignature boundCallInternal("JsBoundCallInternal", 0, 6,
2684 ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_POINTER());
2685 *callSign = boundCallInternal;
2686 // 6 : 6 input parameters
2687 std::array<VariableType, 6> params = {
2688 VariableType::NATIVE_POINTER(), // glue
2689 VariableType::INT64(), // actual argC
2690 VariableType::JS_POINTER(), // callTarget
2691 VariableType::NATIVE_POINTER(), // argv
2692 VariableType::JS_POINTER(), // this
2693 VariableType::JS_POINTER(), // new
2694 };
2695 callSign->SetVariadicArgs(false);
2696 callSign->SetParameters(params.data());
2697 callSign->SetTailCall(true);
2698 callSign->SetGCLeafFunction(true);
2699 callSign->SetTargetKind(CallSignature::TargetKind::COMMON_STUB);
2700 callSign->SetCallConv(CallSignature::CallConv::CCallConv);
2701 }
2702
DEF_CALL_SIGNATURE(CreateArrayFromList)2703 DEF_CALL_SIGNATURE(CreateArrayFromList)
2704 {
2705 // 3 : 3 input parameters
2706 CallSignature createArrayFromList("CreateArrayFromList", 0, 3, ArgumentsOrder::DEFAULT_ORDER,
2707 VariableType::JS_POINTER());
2708 *callSign = createArrayFromList;
2709 // 3 : 3 input parameters
2710 std::array<VariableType, 3> params = {
2711 VariableType::NATIVE_POINTER(),
2712 VariableType::INT32(),
2713 VariableType::NATIVE_POINTER(),
2714 };
2715
2716 callSign->SetParameters(params.data());
2717 callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_VARARGS);
2718 }
2719
DEF_CALL_SIGNATURE(DeoptHandlerAsm)2720 DEF_CALL_SIGNATURE(DeoptHandlerAsm)
2721 {
2722 // 1 : 1 input parameters
2723 CallSignature deoptHandlerAsm("DeoptHandlerAsm", 0, 3,
2724 ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
2725 *callSign = deoptHandlerAsm;
2726 std::array<VariableType, 3> params = { // 3 : 3 input parameters
2727 VariableType::NATIVE_POINTER(), // glue
2728 VariableType::NATIVE_POINTER(), // deoptType
2729 VariableType::NATIVE_POINTER(), // depth
2730 };
2731 callSign->SetVariadicArgs(false);
2732 callSign->SetParameters(params.data());
2733 callSign->SetCallConv(CallSignature::CallConv::CCallConv);
2734 callSign->SetTargetKind(CallSignature::TargetKind::DEOPT_STUB);
2735 }
2736
DEF_CALL_SIGNATURE(TimeClip)2737 DEF_CALL_SIGNATURE(TimeClip)
2738 {
2739 // 1 : 1 input parameters
2740 CallSignature index("TimeClip", 0, 1, ArgumentsOrder::DEFAULT_ORDER, VariableType::FLOAT64());
2741 *callSign = index;
2742 // 1 : 1 input parameters
2743 std::array<VariableType, 1> params = {
2744 VariableType::FLOAT64(),
2745 };
2746 callSign->SetParameters(params.data());
2747 callSign->SetGCLeafFunction(true);
2748 callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
2749 }
2750
DEF_CALL_SIGNATURE(SetDateValues)2751 DEF_CALL_SIGNATURE(SetDateValues)
2752 {
2753 // 3 : 3 input parameters
2754 CallSignature index("SetDateValues", 0, 3, ArgumentsOrder::DEFAULT_ORDER, VariableType::FLOAT64());
2755 *callSign = index;
2756 // 3 : 3 input parameters
2757 std::array<VariableType, 3> params = {
2758 VariableType::FLOAT64(),
2759 VariableType::FLOAT64(),
2760 VariableType::FLOAT64(),
2761 };
2762 callSign->SetParameters(params.data());
2763 callSign->SetGCLeafFunction(true);
2764 callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
2765 }
2766
DEF_CALL_SIGNATURE(StartCallTimer)2767 DEF_CALL_SIGNATURE(StartCallTimer)
2768 {
2769 CallSignature index("StartCallTimer", 0, 3, ArgumentsOrder::DEFAULT_ORDER, VariableType::VOID());
2770 *callSign = index;
2771 // 3 : 3 input parameters
2772 std::array<VariableType, 3> params = {
2773 VariableType::NATIVE_POINTER(),
2774 VariableType::JS_ANY(),
2775 VariableType::BOOL()
2776 };
2777 callSign->SetParameters(params.data());
2778 callSign->SetGCLeafFunction(true);
2779 callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
2780 }
2781
DEF_CALL_SIGNATURE(EndCallTimer)2782 DEF_CALL_SIGNATURE(EndCallTimer)
2783 {
2784 CallSignature index("EndCallTimer", 0, 2, ArgumentsOrder::DEFAULT_ORDER, VariableType::VOID());
2785 *callSign = index;
2786 // 2 : 2 input parameters
2787 std::array<VariableType, 2> params = {
2788 VariableType::NATIVE_POINTER(),
2789 VariableType::JS_ANY()
2790 };
2791 callSign->SetParameters(params.data());
2792 callSign->SetGCLeafFunction(true);
2793 callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
2794 }
2795
DEF_CALL_SIGNATURE(GetSingleCharCodeByIndex)2796 DEF_CALL_SIGNATURE(GetSingleCharCodeByIndex)
2797 {
2798 // 3 : 3 input parameters
2799 CallSignature signature("GetSingleCharCodeByIndex", 0, 3,
2800 ArgumentsOrder::DEFAULT_ORDER, VariableType::INT32());
2801 *callSign = signature;
2802 // 3 : 3 input parameters
2803 std::array<VariableType, 3> params = {
2804 VariableType::NATIVE_POINTER(), // glue
2805 VariableType::JS_ANY(), // ecmaString
2806 VariableType::INT32(), // index
2807 };
2808 callSign->SetParameters(params.data());
2809 callSign->SetCallConv(CallSignature::CallConv::CCallConv);
2810 }
2811
DEF_CALL_SIGNATURE(CreateStringBySingleCharCode)2812 DEF_CALL_SIGNATURE(CreateStringBySingleCharCode)
2813 {
2814 // 2 : 2 input parameters
2815 CallSignature signature("CreateStringByCharCode", 0, 2,
2816 ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
2817 *callSign = signature;
2818 // 2 : 2 input parameters
2819 std::array<VariableType, 2> params = {
2820 VariableType::NATIVE_POINTER(), // glue
2821 VariableType::INT32(), // charcode
2822 };
2823 callSign->SetParameters(params.data());
2824 callSign->SetCallConv(CallSignature::CallConv::CCallConv);
2825 }
2826
DEF_CALL_SIGNATURE(Getpropiterator)2827 DEF_CALL_SIGNATURE(Getpropiterator)
2828 {
2829 // 2 : 2 input parameters
2830 CallSignature signature("Getpropiterator", 0, 2,
2831 ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
2832 *callSign = signature;
2833 // 2 : 2 input parameters
2834 std::array<VariableType, 2> params = {
2835 VariableType::NATIVE_POINTER(), // glue
2836 VariableType::JS_ANY(), // object
2837 };
2838 callSign->SetParameters(params.data());
2839 callSign->SetCallConv(CallSignature::CallConv::CCallConv);
2840 }
2841
DEF_CALL_SIGNATURE(Getnextpropname)2842 DEF_CALL_SIGNATURE(Getnextpropname)
2843 {
2844 // 2 : 2 input parameters
2845 CallSignature signature("Getnextpropname", 0, 2,
2846 ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
2847 *callSign = signature;
2848 // 2 : 2 input parameters
2849 std::array<VariableType, 2> params = {
2850 VariableType::NATIVE_POINTER(), // glue
2851 VariableType::JS_ANY(), // iter
2852 };
2853 callSign->SetParameters(params.data());
2854 callSign->SetCallConv(CallSignature::CallConv::CCallConv);
2855 }
2856
DEF_CALL_SIGNATURE(CreateJSSetIterator)2857 DEF_CALL_SIGNATURE(CreateJSSetIterator)
2858 {
2859 UNARY_CALL_SIGNATURE(CreateJSSetIterator)
2860 }
2861
DEF_CALL_SIGNATURE(JSSetEntries)2862 DEF_CALL_SIGNATURE(JSSetEntries)
2863 {
2864 UNARY_CALL_SIGNATURE(JSSetEntries)
2865 }
2866
DEF_CALL_SIGNATURE(CreateJSMapIterator)2867 DEF_CALL_SIGNATURE(CreateJSMapIterator)
2868 {
2869 UNARY_CALL_SIGNATURE(CreateJSMapIterator)
2870 }
2871
DEF_CALL_SIGNATURE(JSMapKeys)2872 DEF_CALL_SIGNATURE(JSMapKeys)
2873 {
2874 UNARY_CALL_SIGNATURE(JSMapKeys)
2875 }
2876
DEF_CALL_SIGNATURE(JSMapValues)2877 DEF_CALL_SIGNATURE(JSMapValues)
2878 {
2879 UNARY_CALL_SIGNATURE(JSMapValues)
2880 }
2881
DEF_CALL_SIGNATURE(JSMapGet)2882 DEF_CALL_SIGNATURE(JSMapGet)
2883 {
2884 BINARY_CALL_SIGNATURE(JSMapGet)
2885 }
2886
DEF_CALL_SIGNATURE(StringIteratorNext)2887 DEF_CALL_SIGNATURE(StringIteratorNext)
2888 {
2889 UNARY_CALL_SIGNATURE(StringIteratorNext)
2890 }
2891
DEF_CALL_SIGNATURE(JSMapHas)2892 DEF_CALL_SIGNATURE(JSMapHas)
2893 {
2894 *callSign = CallSignature("JSMapHas", 0, ArgumentsOrder::DEFAULT_ORDER, VariableType::BOOL(),
2895 {
2896 VariableType::NATIVE_POINTER(), // glue
2897 VariableType::JS_ANY(), // obj
2898 VariableType::JS_ANY(), // key
2899 });
2900 }
2901
DEF_CALL_SIGNATURE(JSSetHas)2902 DEF_CALL_SIGNATURE(JSSetHas)
2903 {
2904 *callSign = CallSignature("JSSetHas", 0, ArgumentsOrder::DEFAULT_ORDER, VariableType::BOOL(),
2905 {
2906 VariableType::NATIVE_POINTER(), // glue
2907 VariableType::JS_ANY(), // obj
2908 VariableType::JS_ANY(), // key
2909 });
2910 }
2911
DEF_CALL_SIGNATURE(JSMapDelete)2912 DEF_CALL_SIGNATURE(JSMapDelete)
2913 {
2914 *callSign = CallSignature("JSMapDelete", 0, ArgumentsOrder::DEFAULT_ORDER, VariableType::BOOL(),
2915 {
2916 VariableType::NATIVE_POINTER(), // glue
2917 VariableType::JS_ANY(), // obj
2918 VariableType::JS_ANY(), // key
2919 });
2920 }
2921
DEF_CALL_SIGNATURE(JSSetDelete)2922 DEF_CALL_SIGNATURE(JSSetDelete)
2923 {
2924 *callSign = CallSignature("JSSetDelete", 0, ArgumentsOrder::DEFAULT_ORDER, VariableType::BOOL(),
2925 {
2926 VariableType::NATIVE_POINTER(), // glue
2927 VariableType::JS_ANY(), // obj
2928 VariableType::JS_ANY(), // key
2929 });
2930 }
2931
DEF_CALL_SIGNATURE(JSSetAdd)2932 DEF_CALL_SIGNATURE(JSSetAdd)
2933 {
2934 *callSign = CallSignature("JSSetAdd", 0, ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY(),
2935 {
2936 VariableType::NATIVE_POINTER(), // glue
2937 VariableType::JS_ANY(), // obj
2938 VariableType::JS_ANY(), // key
2939 });
2940 }
2941
DEF_CALL_SIGNATURE(FastStringEqual)2942 DEF_CALL_SIGNATURE(FastStringEqual)
2943 {
2944 // 3 : 3 input parameters
2945 CallSignature signature("FastStringEqual", 0, 3,
2946 ArgumentsOrder::DEFAULT_ORDER, VariableType::BOOL());
2947 *callSign = signature;
2948 // 3 : 3 input parameters
2949 std::array<VariableType, 3> params = {
2950 VariableType::NATIVE_POINTER(), // glue
2951 VariableType::JS_ANY(), // ecmaString1
2952 VariableType::JS_ANY(), // ecmaString2
2953 };
2954 callSign->SetParameters(params.data());
2955 }
2956
DEF_CALL_SIGNATURE(FastStringAdd)2957 DEF_CALL_SIGNATURE(FastStringAdd)
2958 {
2959 // 3 : 3 input parameters
2960 CallSignature signature("FastStringAdd", 0, 3,
2961 ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
2962 *callSign = signature;
2963 // 3 : 3 input parameters
2964 std::array<VariableType, 3> params = {
2965 VariableType::NATIVE_POINTER(), // glue
2966 VariableType::JS_ANY(), // ecmaString1
2967 VariableType::JS_ANY(), // ecmaString2
2968 };
2969 callSign->SetParameters(params.data());
2970 callSign->SetCallConv(CallSignature::CallConv::CCallConv);
2971 }
2972
DEF_CALL_SIGNATURE(DeleteObjectProperty)2973 DEF_CALL_SIGNATURE(DeleteObjectProperty)
2974 {
2975 // 3 : 3 input parameters
2976 CallSignature signature("DeleteObjectProperty", 0, 3,
2977 ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
2978 *callSign = signature;
2979 // 3 : 3 input parameters
2980 std::array<VariableType, 3> params = {
2981 VariableType::NATIVE_POINTER(), // glue
2982 VariableType::JS_ANY(), // object
2983 VariableType::JS_ANY(), // prop
2984 };
2985 callSign->SetParameters(params.data());
2986 callSign->SetCallConv(CallSignature::CallConv::CCallConv);
2987 }
2988
DEF_CALL_SIGNATURE(CopyTypedArrayBuffer)2989 DEF_CALL_SIGNATURE(CopyTypedArrayBuffer)
2990 {
2991 // 6 : 6 input parameters
2992 CallSignature CopyTypedArrayBuffer("CopyTypedArrayBuffer", 0, 6,
2993 ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
2994 *callSign = CopyTypedArrayBuffer;
2995 // 6 : 6 input parameters
2996 std::array<VariableType, 6 > params = {
2997 VariableType::JS_POINTER(),
2998 VariableType::JS_POINTER(),
2999 VariableType::INT32(),
3000 VariableType::INT32(),
3001 VariableType::INT32(),
3002 VariableType::INT32()
3003 };
3004 callSign->SetParameters(params.data());
3005 callSign->SetGCLeafFunction(true);
3006 callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
3007 }
3008
DEF_CALL_SIGNATURE(CreateJSTypedArrayEntries)3009 DEF_CALL_SIGNATURE(CreateJSTypedArrayEntries)
3010 {
3011 // 2 : 2 input parameters
3012 CallSignature signature("CreateJSTypedArrayEntries", 0, 2,
3013 ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
3014 *callSign = signature;
3015 // 2 : 2 input parameters
3016 std::array<VariableType, 2> params = {
3017 VariableType::NATIVE_POINTER(), // glue
3018 VariableType::JS_ANY(), // obj
3019 };
3020 callSign->SetParameters(params.data());
3021 callSign->SetCallConv(CallSignature::CallConv::CCallConv);
3022 }
3023
DEF_CALL_SIGNATURE(SameValue)3024 DEF_CALL_SIGNATURE(SameValue)
3025 {
3026 // 3 : 3 input parameters
3027 CallSignature signature("SameValue", 0, 3,
3028 ArgumentsOrder::DEFAULT_ORDER, VariableType::BOOL());
3029 *callSign = signature;
3030 // 3 : 3 input parameters
3031 std::array<VariableType, 3> params = {
3032 VariableType::NATIVE_POINTER(), // glue
3033 VariableType::JS_ANY(), // left
3034 VariableType::JS_ANY(), // right
3035 };
3036 callSign->SetParameters(params.data());
3037 callSign->SetCallConv(CallSignature::CallConv::CCallConv);
3038 }
3039
DEF_CALL_SIGNATURE(CreateJSTypedArrayKeys)3040 DEF_CALL_SIGNATURE(CreateJSTypedArrayKeys)
3041 {
3042 // 2 : 2 input parameters
3043 CallSignature signature("CreateJSTypedArrayKeys", 0, 2,
3044 ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
3045 *callSign = signature;
3046 // 2 : 2 input parameters
3047 std::array<VariableType, 2> params = {
3048 VariableType::NATIVE_POINTER(), // glue
3049 VariableType::JS_ANY(), // obj
3050 };
3051 callSign->SetParameters(params.data());
3052 callSign->SetCallConv(CallSignature::CallConv::CCallConv);
3053 }
3054
DEF_CALL_SIGNATURE(CreateJSTypedArrayValues)3055 DEF_CALL_SIGNATURE(CreateJSTypedArrayValues)
3056 {
3057 // 2 : 2 input parameters
3058 CallSignature signature("CreateJSTypedArrayValues", 0, 2,
3059 ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
3060 *callSign = signature;
3061 // 2 : 2 input parameters
3062 std::array<VariableType, 2> params = {
3063 VariableType::NATIVE_POINTER(), // glue
3064 VariableType::JS_ANY(), // obj
3065 };
3066 callSign->SetParameters(params.data());
3067 callSign->SetCallConv(CallSignature::CallConv::CCallConv);
3068 }
3069 } // namespace panda::ecmascript::kungfu
3070