invokeNative_general.c 3.8 KB

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