helper-info.c.inc 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. /* SPDX-License-Identifier: GPL-2.0-or-later */
  2. /*
  3. * Helper file for declaring TCG helper functions.
  4. * This one expands info structures for tcg helpers.
  5. * Define HELPER_H for the header file to be expanded.
  6. */
  7. #include "tcg/tcg.h"
  8. #include "tcg/helper-info.h"
  9. #include "exec/helper-head.h.inc"
  10. /*
  11. * Need one more level of indirection before stringification
  12. * to get all the macros expanded first.
  13. */
  14. #define str(s) #s
  15. #define DEF_HELPER_FLAGS_0(NAME, FLAGS, RET) \
  16. TCGHelperInfo glue(helper_info_, NAME) = { \
  17. .func = HELPER(NAME), .name = str(NAME), \
  18. .flags = FLAGS | dh_callflag(RET), \
  19. .typemask = dh_typemask(RET, 0) \
  20. };
  21. #define DEF_HELPER_FLAGS_1(NAME, FLAGS, RET, T1) \
  22. TCGHelperInfo glue(helper_info_, NAME) = { \
  23. .func = HELPER(NAME), .name = str(NAME), \
  24. .flags = FLAGS | dh_callflag(RET), \
  25. .typemask = dh_typemask(RET, 0) | dh_typemask(T1, 1) \
  26. };
  27. #define DEF_HELPER_FLAGS_2(NAME, FLAGS, RET, T1, T2) \
  28. TCGHelperInfo glue(helper_info_, NAME) = { \
  29. .func = HELPER(NAME), .name = str(NAME), \
  30. .flags = FLAGS | dh_callflag(RET), \
  31. .typemask = dh_typemask(RET, 0) | dh_typemask(T1, 1) \
  32. | dh_typemask(T2, 2) \
  33. };
  34. #define DEF_HELPER_FLAGS_3(NAME, FLAGS, RET, T1, T2, T3) \
  35. TCGHelperInfo glue(helper_info_, NAME) = { \
  36. .func = HELPER(NAME), .name = str(NAME), \
  37. .flags = FLAGS | dh_callflag(RET), \
  38. .typemask = dh_typemask(RET, 0) | dh_typemask(T1, 1) \
  39. | dh_typemask(T2, 2) | dh_typemask(T3, 3) \
  40. };
  41. #define DEF_HELPER_FLAGS_4(NAME, FLAGS, RET, T1, T2, T3, T4) \
  42. TCGHelperInfo glue(helper_info_, NAME) = { \
  43. .func = HELPER(NAME), .name = str(NAME), \
  44. .flags = FLAGS | dh_callflag(RET), \
  45. .typemask = dh_typemask(RET, 0) | dh_typemask(T1, 1) \
  46. | dh_typemask(T2, 2) | dh_typemask(T3, 3) \
  47. | dh_typemask(T4, 4) \
  48. };
  49. #define DEF_HELPER_FLAGS_5(NAME, FLAGS, RET, T1, T2, T3, T4, T5) \
  50. TCGHelperInfo glue(helper_info_, NAME) = { \
  51. .func = HELPER(NAME), .name = str(NAME), \
  52. .flags = FLAGS | dh_callflag(RET), \
  53. .typemask = dh_typemask(RET, 0) | dh_typemask(T1, 1) \
  54. | dh_typemask(T2, 2) | dh_typemask(T3, 3) \
  55. | dh_typemask(T4, 4) | dh_typemask(T5, 5) \
  56. };
  57. #define DEF_HELPER_FLAGS_6(NAME, FLAGS, RET, T1, T2, T3, T4, T5, T6) \
  58. TCGHelperInfo glue(helper_info_, NAME) = { \
  59. .func = HELPER(NAME), .name = str(NAME), \
  60. .flags = FLAGS | dh_callflag(RET), \
  61. .typemask = dh_typemask(RET, 0) | dh_typemask(T1, 1) \
  62. | dh_typemask(T2, 2) | dh_typemask(T3, 3) \
  63. | dh_typemask(T4, 4) | dh_typemask(T5, 5) \
  64. | dh_typemask(T6, 6) \
  65. };
  66. #define DEF_HELPER_FLAGS_7(NAME, FLAGS, RET, T1, T2, T3, T4, T5, T6, T7) \
  67. TCGHelperInfo glue(helper_info_, NAME) = { \
  68. .func = HELPER(NAME), .name = str(NAME), \
  69. .flags = FLAGS | dh_callflag(RET), \
  70. .typemask = dh_typemask(RET, 0) | dh_typemask(T1, 1) \
  71. | dh_typemask(T2, 2) | dh_typemask(T3, 3) \
  72. | dh_typemask(T4, 4) | dh_typemask(T5, 5) \
  73. | dh_typemask(T6, 6) | dh_typemask(T7, 7) \
  74. };
  75. #include HELPER_H
  76. #undef str
  77. #undef DEF_HELPER_FLAGS_0
  78. #undef DEF_HELPER_FLAGS_1
  79. #undef DEF_HELPER_FLAGS_2
  80. #undef DEF_HELPER_FLAGS_3
  81. #undef DEF_HELPER_FLAGS_4
  82. #undef DEF_HELPER_FLAGS_5
  83. #undef DEF_HELPER_FLAGS_6
  84. #undef DEF_HELPER_FLAGS_7