invokeNative_general.c 4.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. /*
  2. * Copyright (C) 2019 Intel Corporation. All rights reserved.
  3. *
  4. * Licensed under the Apache License, Version 2.0 (the "License");
  5. * you may not use this file except in compliance with the License.
  6. * You may obtain a copy of the License at
  7. *
  8. * http://www.apache.org/licenses/LICENSE-2.0
  9. *
  10. * Unless required by applicable law or agreed to in writing, software
  11. * distributed under the License is distributed on an "AS IS" BASIS,
  12. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. * See the License for the specific language governing permissions and
  14. * limitations under the License.
  15. */
  16. #include "wasm_runtime.h"
  17. void invokeNative(void (*native_code)(), uint32 argv[], uint32 argc)
  18. {
  19. WASMThread *self;
  20. switch(argc) {
  21. case 0:
  22. native_code();
  23. break;
  24. case 1:
  25. native_code(argv[0]);
  26. break;
  27. case 2:
  28. native_code(argv[0], argv[1]);
  29. break;
  30. case 3:
  31. native_code(argv[0], argv[1], argv[2]);
  32. break;
  33. case 4:
  34. native_code(argv[0], argv[1], argv[2], argv[3]);
  35. break;
  36. case 5:
  37. native_code(argv[0], argv[1], argv[2], argv[3], argv[4]);
  38. break;
  39. case 6:
  40. native_code(argv[0], argv[1], argv[2], argv[3], argv[4], argv[5]);
  41. break;
  42. case 7:
  43. native_code(argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6]);
  44. break;
  45. case 8:
  46. native_code(argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6], argv[7]);
  47. break;
  48. case 9:
  49. native_code(argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6], argv[7], argv[8]);
  50. break;
  51. case 10:
  52. native_code(argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6], argv[7], argv[8], argv[9]);
  53. break;
  54. case 11:
  55. native_code(argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6], argv[7], argv[8], argv[9], argv[10]);
  56. break;
  57. case 12:
  58. 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]);
  59. break;
  60. case 13:
  61. 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]);
  62. break;
  63. case 14:
  64. 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]);
  65. break;
  66. case 15:
  67. 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]);
  68. break;
  69. case 16:
  70. 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]);
  71. break;
  72. case 17:
  73. 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]);
  74. break;
  75. case 18:
  76. 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]);
  77. break;
  78. case 19:
  79. 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]);
  80. break;
  81. case 20:
  82. 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]);
  83. break;
  84. default:
  85. /* FIXME: If this happen, add more cases. */
  86. self = wasm_runtime_get_self();
  87. wasm_runtime_set_exception(self->module_inst, "the argument number of native function exceeds maximum");
  88. return;
  89. }
  90. }