invokeNative_general.c 3.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. /*
  2. * Copyright (C) 2019 Intel Corporation. All rights reserved.
  3. * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
  4. */
  5. #include "../wasm_runtime_common.h"
  6. #include "../wasm_exec_env.h"
  7. void invokeNative(void (*native_code)(), uint32 argv[], uint32 argc)
  8. {
  9. bh_assert(argc >= sizeof(WASMExecEnv*)/sizeof(uint32));
  10. switch(argc) {
  11. case 0:
  12. native_code();
  13. break;
  14. case 1:
  15. native_code(argv[0]);
  16. break;
  17. case 2:
  18. native_code(argv[0], argv[1]);
  19. break;
  20. case 3:
  21. native_code(argv[0], argv[1], argv[2]);
  22. break;
  23. case 4:
  24. native_code(argv[0], argv[1], argv[2], argv[3]);
  25. break;
  26. case 5:
  27. native_code(argv[0], argv[1], argv[2], argv[3], argv[4]);
  28. break;
  29. case 6:
  30. native_code(argv[0], argv[1], argv[2], argv[3], argv[4], argv[5]);
  31. break;
  32. case 7:
  33. native_code(argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6]);
  34. break;
  35. case 8:
  36. native_code(argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6], argv[7]);
  37. break;
  38. case 9:
  39. native_code(argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6], argv[7], argv[8]);
  40. break;
  41. case 10:
  42. native_code(argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6], argv[7], argv[8], argv[9]);
  43. break;
  44. case 11:
  45. native_code(argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6], argv[7], argv[8], argv[9], argv[10]);
  46. break;
  47. case 12:
  48. 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]);
  49. break;
  50. case 13:
  51. 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]);
  52. break;
  53. case 14:
  54. 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]);
  55. break;
  56. case 15:
  57. 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]);
  58. break;
  59. case 16:
  60. 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]);
  61. break;
  62. case 17:
  63. 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]);
  64. break;
  65. case 18:
  66. 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]);
  67. break;
  68. case 19:
  69. 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]);
  70. break;
  71. case 20:
  72. 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]);
  73. break;
  74. default:
  75. {
  76. /* FIXME: If this happen, add more cases. */
  77. WASMExecEnv *exec_env = *(WASMExecEnv**)argv;
  78. WASMModuleInstanceCommon *module_inst = exec_env->module_inst;
  79. wasm_runtime_set_exception(module_inst, "the argument number of native function exceeds maximum");
  80. return;
  81. }
  82. }
  83. }