summaryrefslogtreecommitdiff
path: root/src/prebuilt/wasm2c_source_declarations.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/prebuilt/wasm2c_source_declarations.cc')
-rw-r--r--src/prebuilt/wasm2c_source_declarations.cc52
1 files changed, 48 insertions, 4 deletions
diff --git a/src/prebuilt/wasm2c_source_declarations.cc b/src/prebuilt/wasm2c_source_declarations.cc
index 946421df..414e6ef0 100644
--- a/src/prebuilt/wasm2c_source_declarations.cc
+++ b/src/prebuilt/wasm2c_source_declarations.cc
@@ -35,15 +35,23 @@ R"w2c_template( return (a == b) || LIKELY(a && b && !memcmp(a, b, 32));
R"w2c_template(}
)w2c_template"
R"w2c_template(
-#define CALL_INDIRECT(table, t, ft, x, ...) \
+#define CHECK_CALL_INDIRECT(table, ft, x) \
)w2c_template"
R"w2c_template( (LIKELY((x) < table.size && table.data[x].func && \
)w2c_template"
R"w2c_template( func_types_eq(ft, table.data[x].func_type)) || \
)w2c_template"
-R"w2c_template( TRAP(CALL_INDIRECT), \
+R"w2c_template( TRAP(CALL_INDIRECT))
)w2c_template"
-R"w2c_template( ((t)table.data[x].func)(__VA_ARGS__))
+R"w2c_template(
+#define DO_CALL_INDIRECT(table, t, x, ...) ((t)table.data[x].func)(__VA_ARGS__)
+)w2c_template"
+R"w2c_template(
+#define CALL_INDIRECT(table, t, ft, x, ...) \
+)w2c_template"
+R"w2c_template( (CHECK_CALL_INDIRECT(table, ft, x), \
+)w2c_template"
+R"w2c_template( DO_CALL_INDIRECT(table, t, x, __VA_ARGS__))
)w2c_template"
R"w2c_template(
#ifdef SUPPORT_MEMORY64
@@ -942,6 +950,8 @@ R"w2c_template( wasm_rt_func_type_t type;
)w2c_template"
R"w2c_template( wasm_rt_function_ptr_t func;
)w2c_template"
+R"w2c_template( wasm_rt_tailcallee_t func_tailcallee;
+)w2c_template"
R"w2c_template( size_t module_offset;
)w2c_template"
R"w2c_template(} wasm_elem_segment_expr_t;
@@ -981,7 +991,7 @@ R"w2c_template( case RefFunc:
)w2c_template"
R"w2c_template( *dest_val = (wasm_rt_funcref_t){
)w2c_template"
-R"w2c_template( src_expr->type, src_expr->func,
+R"w2c_template( src_expr->type, src_expr->func, src_expr->func_tailcallee,
)w2c_template"
R"w2c_template( (char*)module_instance + src_expr->module_offset};
)w2c_template"
@@ -1151,4 +1161,38 @@ R"w2c_template(#define FUNC_TYPE_T(x) static const char x[]
)w2c_template"
R"w2c_template(#endif
)w2c_template"
+R"w2c_template(
+#if (__STDC_VERSION__ < 201112L) && !defined(static_assert)
+)w2c_template"
+R"w2c_template(#define static_assert(X) \
+)w2c_template"
+R"w2c_template( extern int(*assertion(void))[!!sizeof(struct { int x : (X) ? 2 : -1; })];
+)w2c_template"
+R"w2c_template(#endif
+)w2c_template"
+R"w2c_template(
+#ifdef _MSC_VER
+)w2c_template"
+R"w2c_template(#define WEAK_FUNC_DECL(func, fallback) \
+)w2c_template"
+R"w2c_template( __pragma(comment(linker, "/alternatename:" #func "=" #fallback)) \
+)w2c_template"
+R"w2c_template( \
+)w2c_template"
+R"w2c_template( void \
+)w2c_template"
+R"w2c_template( fallback(void** instance_ptr, void* tail_call_stack, \
+)w2c_template"
+R"w2c_template( wasm_rt_tailcallee_t* next)
+)w2c_template"
+R"w2c_template(#else
+)w2c_template"
+R"w2c_template(#define WEAK_FUNC_DECL(func, fallback) \
+)w2c_template"
+R"w2c_template( __attribute__((weak)) void func(void** instance_ptr, void* tail_call_stack, \
+)w2c_template"
+R"w2c_template( wasm_rt_tailcallee_t* next)
+)w2c_template"
+R"w2c_template(#endif
+)w2c_template"
;