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