summaryrefslogtreecommitdiffstats
path: root/fluent-bit/lib/wasm-micro-runtime-WAMR-1.2.2/core/iwasm/common/arch/invokeNative_general.c
diff options
context:
space:
mode:
Diffstat (limited to 'fluent-bit/lib/wasm-micro-runtime-WAMR-1.2.2/core/iwasm/common/arch/invokeNative_general.c')
-rw-r--r--fluent-bit/lib/wasm-micro-runtime-WAMR-1.2.2/core/iwasm/common/arch/invokeNative_general.c114
1 files changed, 114 insertions, 0 deletions
diff --git a/fluent-bit/lib/wasm-micro-runtime-WAMR-1.2.2/core/iwasm/common/arch/invokeNative_general.c b/fluent-bit/lib/wasm-micro-runtime-WAMR-1.2.2/core/iwasm/common/arch/invokeNative_general.c
new file mode 100644
index 000000000..4799c9fa8
--- /dev/null
+++ b/fluent-bit/lib/wasm-micro-runtime-WAMR-1.2.2/core/iwasm/common/arch/invokeNative_general.c
@@ -0,0 +1,114 @@
+/*
+ * Copyright (C) 2019 Intel Corporation. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+ */
+
+#include "../wasm_runtime_common.h"
+#include "../wasm_exec_env.h"
+
+void
+invokeNative(void (*native_code)(), uint32 argv[], uint32 argc)
+{
+ bh_assert(argc >= sizeof(WASMExecEnv *) / sizeof(uint32));
+
+ switch (argc) {
+ case 0:
+ native_code();
+ break;
+ case 1:
+ native_code(argv[0]);
+ break;
+ case 2:
+ native_code(argv[0], argv[1]);
+ break;
+ case 3:
+ native_code(argv[0], argv[1], argv[2]);
+ break;
+ case 4:
+ native_code(argv[0], argv[1], argv[2], argv[3]);
+ break;
+ case 5:
+ native_code(argv[0], argv[1], argv[2], argv[3], argv[4]);
+ break;
+ case 6:
+ native_code(argv[0], argv[1], argv[2], argv[3], argv[4], argv[5]);
+ break;
+ case 7:
+ native_code(argv[0], argv[1], argv[2], argv[3], argv[4], argv[5],
+ argv[6]);
+ break;
+ case 8:
+ native_code(argv[0], argv[1], argv[2], argv[3], argv[4], argv[5],
+ argv[6], argv[7]);
+ break;
+ case 9:
+ native_code(argv[0], argv[1], argv[2], argv[3], argv[4], argv[5],
+ argv[6], argv[7], argv[8]);
+ break;
+ case 10:
+ native_code(argv[0], argv[1], argv[2], argv[3], argv[4], argv[5],
+ argv[6], argv[7], argv[8], argv[9]);
+ break;
+ case 11:
+ native_code(argv[0], argv[1], argv[2], argv[3], argv[4], argv[5],
+ argv[6], argv[7], argv[8], argv[9], argv[10]);
+ break;
+ case 12:
+ native_code(argv[0], argv[1], argv[2], argv[3], argv[4], argv[5],
+ argv[6], argv[7], argv[8], argv[9], argv[10], argv[11]);
+ break;
+ case 13:
+ native_code(argv[0], argv[1], argv[2], argv[3], argv[4], argv[5],
+ argv[6], argv[7], argv[8], argv[9], argv[10], argv[11],
+ argv[12]);
+ break;
+ case 14:
+ native_code(argv[0], argv[1], argv[2], argv[3], argv[4], argv[5],
+ argv[6], argv[7], argv[8], argv[9], argv[10], argv[11],
+ argv[12], argv[13]);
+ break;
+ case 15:
+ native_code(argv[0], argv[1], argv[2], argv[3], argv[4], argv[5],
+ argv[6], argv[7], argv[8], argv[9], argv[10], argv[11],
+ argv[12], argv[13], argv[14]);
+ break;
+ case 16:
+ native_code(argv[0], argv[1], argv[2], argv[3], argv[4], argv[5],
+ argv[6], argv[7], argv[8], argv[9], argv[10], argv[11],
+ argv[12], argv[13], argv[14], argv[15]);
+ break;
+ case 17:
+ native_code(argv[0], argv[1], argv[2], argv[3], argv[4], argv[5],
+ argv[6], argv[7], argv[8], argv[9], argv[10], argv[11],
+ argv[12], argv[13], argv[14], argv[15], argv[16]);
+ break;
+ case 18:
+ native_code(argv[0], argv[1], argv[2], argv[3], argv[4], argv[5],
+ argv[6], argv[7], argv[8], argv[9], argv[10], argv[11],
+ argv[12], argv[13], argv[14], argv[15], argv[16],
+ argv[17]);
+ break;
+ case 19:
+ native_code(argv[0], argv[1], argv[2], argv[3], argv[4], argv[5],
+ argv[6], argv[7], argv[8], argv[9], argv[10], argv[11],
+ argv[12], argv[13], argv[14], argv[15], argv[16],
+ argv[17], argv[18]);
+ break;
+ case 20:
+ native_code(argv[0], argv[1], argv[2], argv[3], argv[4], argv[5],
+ argv[6], argv[7], argv[8], argv[9], argv[10], argv[11],
+ argv[12], argv[13], argv[14], argv[15], argv[16],
+ argv[17], argv[18], argv[19]);
+ break;
+ default:
+ {
+ /* FIXME: If this happen, add more cases. */
+ WASMExecEnv *exec_env = *(WASMExecEnv **)argv;
+ WASMModuleInstanceCommon *module_inst = exec_env->module_inst;
+ wasm_runtime_set_exception(
+ module_inst,
+ "the argument number of native function exceeds maximum");
+ return;
+ }
+ }
+}