@@ -49,12 +49,24 @@ namespace
4949 *((double *)pRet) = (*fptr)(ARG_F64 (0 ), ARG_I32 (1 ));
5050 }
5151
52+ static void CallFunc_I32_I32_RetF64 (PCODE pcode, int8_t * pArgs, int8_t * pRet)
53+ {
54+ double (*fptr)(int32_t , int32_t ) = (double (*)(int32_t , int32_t ))pcode;
55+ *((double *)pRet) = (*fptr)(ARG_I32 (0 ), ARG_I32 (1 ));
56+ }
57+
5258 static void CallFunc_I32_RetF64 (PCODE pcode, int8_t * pArgs, int8_t * pRet)
5359 {
5460 double (*fptr)(int32_t ) = (double (*)(int32_t ))pcode;
5561 *((double *)pRet) = (*fptr)(ARG_I32 (0 ));
5662 }
5763
64+ static void CallFunc_RetF32 (PCODE pcode, int8_t * pArgs, int8_t * pRet)
65+ {
66+ float (*fptr)() = (float (*)())pcode;
67+ *((float *)pRet) = (*fptr)();
68+ }
69+
5870 static void CallFunc_F32_RetF32 (PCODE pcode, int8_t * pArgs, int8_t * pRet)
5971 {
6072 float (*fptr)(float ) = (float (*)(float ))pcode;
@@ -97,6 +109,12 @@ namespace
97109 *((int32_t *)pRet) = (*fptr)(ARG_F32 (0 ), ARG_F32 (1 ));
98110 }
99111
112+ static void CallFunc_F32_RetI32 (PCODE pcode, int8_t * pArgs, int8_t * pRet)
113+ {
114+ int32_t (*fptr)(float ) = (int32_t (*)(float ))pcode;
115+ *((int32_t *)pRet) = (*fptr)(ARG_F32 (0 ));
116+ }
117+
100118 static void CallFunc_I32_RetI32 (PCODE pcode, int8_t * pArgs, int8_t * pRet)
101119 {
102120 int32_t (*fptr)(int32_t ) = (int32_t (*)(int32_t ))pcode;
@@ -109,6 +127,12 @@ namespace
109127 *((int32_t *)pRet) = (*fptr)(ARG_I32 (0 ), ARG_F64 (1 ));
110128 }
111129
130+ static void CallFunc_F64_RetI32 (PCODE pcode, int8_t * pArgs, int8_t * pRet)
131+ {
132+ int32_t (*fptr)(double ) = (int32_t (*)(double ))pcode;
133+ *((int32_t *)pRet) = (*fptr)(ARG_F64 (0 ));
134+ }
135+
112136 static void CallFunc_I32_F32_RetI32 (PCODE pcode, int8_t * pArgs, int8_t * pRet)
113137 {
114138 int32_t (*fptr)(int32_t , float ) = (int32_t (*)(int32_t , float ))pcode;
@@ -205,6 +229,12 @@ namespace
205229 *((int32_t *)pRet) = (*fptr)(ARG_I32 (0 ), ARG_I64 (1 ));
206230 }
207231
232+ static void CallFunc_I64_RetI32 (PCODE pcode, int8_t * pArgs, int8_t * pRet)
233+ {
234+ int32_t (*fptr)(int64_t ) = (int32_t (*)(int64_t ))pcode;
235+ *((int32_t *)pRet) = (*fptr)(ARG_I64 (0 ));
236+ }
237+
208238 static void CallFunc_I32_I64_I32_RetI32 (PCODE pcode, int8_t * pArgs, int8_t * pRet)
209239 {
210240 int32_t (*fptr)(int32_t , int64_t , int32_t ) = (int32_t (*)(int32_t , int64_t , int32_t ))pcode;
@@ -343,12 +373,24 @@ namespace
343373 *((int64_t *)pRet) = (*fptr)(ARG_I32 (0 ));
344374 }
345375
376+ static void CallFunc_I64_RetI64 (PCODE pcode, int8_t * pArgs, int8_t * pRet)
377+ {
378+ int64_t (*fptr)(int64_t ) = (int64_t (*)(int64_t ))pcode;
379+ *((int64_t *)pRet) = (*fptr)(ARG_I64 (0 ));
380+ }
381+
346382 static void CallFunc_I32_I32_RetI64 (PCODE pcode, int8_t * pArgs, int8_t * pRet)
347383 {
348384 int64_t (*fptr)(int32_t , int32_t ) = (int64_t (*)(int32_t , int32_t ))pcode;
349385 *((int64_t *)pRet) = (*fptr)(ARG_I32 (0 ), ARG_I32 (1 ));
350386 }
351387
388+ static void CallFunc_I64_I32_RetI64 (PCODE pcode, int8_t * pArgs, int8_t * pRet)
389+ {
390+ int64_t (*fptr)(int64_t , int32_t ) = (int64_t (*)(int64_t , int32_t ))pcode;
391+ *((int64_t *)pRet) = (*fptr)(ARG_I64 (0 ), ARG_I32 (1 ));
392+ }
393+
352394 static void CallFunc_I32_I32_I32_I64_RetI64 (PCODE pcode, int8_t * pArgs, int8_t * pRet)
353395 {
354396 int64_t (*fptr)(int32_t , int32_t , int32_t , int64_t ) = (int64_t (*)(int32_t , int32_t , int32_t , int64_t ))pcode;
@@ -379,6 +421,13 @@ namespace
379421 *((int64_t *)pRet) = (*fptr)(ARG_I64 (0 ), ARG_I64 (1 ));
380422 }
381423
424+ static void CallFunc_RetIND (PCODE pcode, int8_t * pArgs, int8_t * pRet)
425+ {
426+ int32_t (*fptr)() = (int32_t (*)())pcode;
427+ PORTABILITY_ASSERT (" Indirect struct return is not yet implemented." );
428+ *((int32_t *)pRet) = (*fptr)();
429+ }
430+
382431 static void CallFunc_I32_RetIND (PCODE pcode, int8_t * pArgs, int8_t * pRet)
383432 {
384433 int32_t (*fptr)(int32_t ) = (int32_t (*)(int32_t ))pcode;
@@ -393,6 +442,20 @@ namespace
393442 *((int32_t *)pRet) = (*fptr)(ARG_I32 (0 ), ARG_I32 (1 ));
394443 }
395444
445+ static void CallFunc_IND_I32_RetIND (PCODE pcode, int8_t * pArgs, int8_t * pRet)
446+ {
447+ int32_t (*fptr)(int32_t , int32_t ) = (int32_t (*)(int32_t , int32_t ))pcode;
448+ PORTABILITY_ASSERT (" Indirect struct return is not yet implemented." );
449+ *((int32_t *)pRet) = (*fptr)(ARG_IND (0 ), ARG_I32 (1 ));
450+ }
451+
452+ static void CallFunc_IND_RetIND (PCODE pcode, int8_t * pArgs, int8_t * pRet)
453+ {
454+ int32_t (*fptr)(int32_t ) = (int32_t (*)(int32_t ))pcode;
455+ PORTABILITY_ASSERT (" Indirect struct return is not yet implemented." );
456+ *((int32_t *)pRet) = (*fptr)(ARG_IND (0 ));
457+ }
458+
396459 static void CallFunc_Void_RetVoid (PCODE pcode, int8_t * pArgs, int8_t * pRet)
397460 {
398461 void (*fptr)() = (void (*)())pcode;
@@ -405,12 +468,24 @@ namespace
405468 (*fptr)(ARG_F64 (0 ), ARG_I32 (1 ), ARG_I32 (2 ));
406469 }
407470
471+ static void CallFunc_F64_RetVoid (PCODE pcode, int8_t * pArgs, int8_t * pRet)
472+ {
473+ void (*fptr)(double ) = (void (*)(double ))pcode;
474+ (*fptr)(ARG_F64 (0 ));
475+ }
476+
408477 static void CallFunc_F32_I32_I32_RetVoid (PCODE pcode, int8_t * pArgs, int8_t * pRet)
409478 {
410479 void (*fptr)(float , int32_t , int32_t ) = (void (*)(float , int32_t , int32_t ))pcode;
411480 (*fptr)(ARG_F32 (0 ), ARG_I32 (1 ), ARG_I32 (2 ));
412481 }
413482
483+ static void CallFunc_F32_RetVoid (PCODE pcode, int8_t * pArgs, int8_t * pRet)
484+ {
485+ void (*fptr)(float ) = (void (*)(float ))pcode;
486+ (*fptr)(ARG_F32 (0 ));
487+ }
488+
414489 static void CallFunc_I32_RetVoid (PCODE pcode, int8_t * pArgs, int8_t * pRet)
415490 {
416491 void (*fptr)(int32_t ) = (void (*)(int32_t ))pcode;
@@ -447,6 +522,12 @@ namespace
447522 (*fptr)(ARG_I32 (0 ), ARG_I32 (1 ), ARG_I32 (2 ), ARG_I32 (3 ), ARG_I32 (4 ), ARG_I32 (5 ));
448523 }
449524
525+ static void CallFunc_I32_I32_I32_I32_I32_I32_I32_RetVoid (PCODE pcode, int8_t * pArgs, int8_t * pRet)
526+ {
527+ void (*fptr)(int32_t , int32_t , int32_t , int32_t , int32_t , int32_t , int32_t ) = (void (*)(int32_t , int32_t , int32_t , int32_t , int32_t , int32_t , int32_t ))pcode;
528+ (*fptr)(ARG_I32 (0 ), ARG_I32 (1 ), ARG_I32 (2 ), ARG_I32 (3 ), ARG_I32 (4 ), ARG_I32 (5 ), ARG_I32 (6 ));
529+ }
530+
450531 static void CallFunc_I32_I32_I32_IND_IND_RetVoid (PCODE pcode, int8_t * pArgs, int8_t * pRet)
451532 {
452533 void (*fptr)(int32_t , int32_t , int32_t , int32_t , int32_t ) = (void (*)(int32_t , int32_t , int32_t , int32_t , int32_t ))pcode;
@@ -569,15 +650,19 @@ const StringToWasmSigThunk g_wasmThunks[] = {
569650 { " dddd" , (void *)&CallFunc_F64_F64_F64_RetF64 },
570651 { " ddi" , (void *)&CallFunc_F64_I32_RetF64 },
571652 { " di" , (void *)&CallFunc_I32_RetF64 },
653+ { " dii" , (void *)&CallFunc_I32_I32_RetF64 },
654+ { " f" , (void *)&CallFunc_RetF32 },
572655 { " ff" , (void *)&CallFunc_F32_RetF32 },
573656 { " fff" , (void *)&CallFunc_F32_F32_RetF32 },
574657 { " ffff" , (void *)&CallFunc_F32_F32_F32_RetF32 },
575658 { " ffi" , (void *)&CallFunc_F32_I32_RetF32 },
576659 { " i" , (void *)&CallFunc_Void_RetI32 },
577660 { " idi" , (void *)&CallFunc_F64_I32_RetI32 },
578661 { " iff" , (void *)&CallFunc_F32_F32_RetI32 },
662+ { " if" , (void *)&CallFunc_F32_RetI32 },
579663 { " ii" , (void *)&CallFunc_I32_RetI32 },
580664 { " iid" , (void *)&CallFunc_I32_F64_RetI32 },
665+ { " id" , (void *)&CallFunc_F64_RetI32 },
581666 { " iif" , (void *)&CallFunc_I32_F32_RetI32 },
582667 { " iifiif" , (void *)&CallFunc_I32_F32_I32_I32_F32_RetI32 },
583668 { " iii" , (void *)&CallFunc_I32_I32_RetI32 },
@@ -594,6 +679,7 @@ const StringToWasmSigThunk g_wasmThunks[] = {
594679 { " iiinii" , (void *)&CallFunc_I32_I32_IND_I32_I32_RetI32 },
595680 { " iiiniin" , (void *)&CallFunc_I32_I32_IND_I32_I32_IND_RetI32 },
596681 { " iil" , (void *)&CallFunc_I32_I64_RetI32 },
682+ { " il" , (void *)&CallFunc_I64_RetI32 },
597683 { " iili" , (void *)&CallFunc_I32_I64_I32_RetI32 },
598684 { " iiliiil" , (void *)&CallFunc_I32_I64_I32_I32_I32_I64_RetI32 },
599685 { " iill" , (void *)&CallFunc_I32_I64_I64_RetI32 },
@@ -617,23 +703,31 @@ const StringToWasmSigThunk g_wasmThunks[] = {
617703 { " innin" , (void *)&CallFunc_IND_IND_I32_IND_RetI32 },
618704 { " l" , (void *)&CallFunc_Void_RetI64 },
619705 { " li" , (void *)&CallFunc_I32_RetI64 },
706+ { " ll" , (void *)&CallFunc_I64_RetI64 },
620707 { " lii" , (void *)&CallFunc_I32_I32_RetI64 },
708+ { " lli" , (void *)&CallFunc_I64_I32_RetI64 },
621709 { " liiil" , (void *)&CallFunc_I32_I32_I32_I64_RetI64 },
622710 { " lil" , (void *)&CallFunc_I32_I64_RetI64 },
623711 { " lili" , (void *)&CallFunc_I32_I64_I32_RetI64 },
624712 { " lill" , (void *)&CallFunc_I32_I64_I64_RetI64 },
625713 { " lll" , (void *)&CallFunc_I64_I64_RetI64 },
714+ { " n" , (void *)&CallFunc_RetIND },
626715 { " ni" , (void *)&CallFunc_I32_RetIND },
716+ { " nn" , (void *)&CallFunc_IND_RetIND },
717+ { " nni" , (void *)&CallFunc_IND_I32_RetIND },
627718 { " nii" , (void *)&CallFunc_I32_I32_RetIND },
628719 { " v" , (void *)&CallFunc_Void_RetVoid },
720+ { " vd" , (void *)&CallFunc_F64_RetVoid },
629721 { " vdii" , (void *)&CallFunc_F64_I32_I32_RetVoid },
630722 { " vfii" , (void *)&CallFunc_F32_I32_I32_RetVoid },
723+ { " vf" , (void *)&CallFunc_F32_RetVoid },
631724 { " vi" , (void *)&CallFunc_I32_RetVoid },
632725 { " vii" , (void *)&CallFunc_I32_I32_RetVoid },
633726 { " viii" , (void *)&CallFunc_I32_I32_I32_RetVoid },
634727 { " viiii" , (void *)&CallFunc_I32_I32_I32_I32_RetVoid },
635728 { " viiiii" , (void *)&CallFunc_I32_I32_I32_I32_I32_RetVoid },
636729 { " viiiiii" , (void *)&CallFunc_I32_I32_I32_I32_I32_I32_RetVoid },
730+ { " viiiiiii" , (void *)&CallFunc_I32_I32_I32_I32_I32_I32_I32_RetVoid },
637731 { " viiinn" , (void *)&CallFunc_I32_I32_I32_IND_IND_RetVoid },
638732 { " viiinni" , (void *)&CallFunc_I32_I32_I32_IND_IND_I32_RetVoid },
639733 { " viin" , (void *)&CallFunc_I32_I32_IND_RetVoid },
0 commit comments