| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114 |
- /*
- * 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;
- }
- }
- }
|