1 /* SPDX-License-Identifier: GPL-2.0-or-later */
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.
9 #include "tcg/helper-info.h"
10 #include "exec/helper-head.h"
13 * Need one more level of indirection before stringification
14 * to get all the macros expanded first.
18 #define DEF_HELPER_FLAGS_0(NAME, FLAGS, RET) \
19 TCGHelperInfo glue(helper_info_, NAME) = { \
20 .func = HELPER(NAME), .name = str(NAME), \
21 .flags = FLAGS | dh_callflag(RET), \
22 .typemask = dh_typemask(RET, 0) \
25 #define DEF_HELPER_FLAGS_1(NAME, FLAGS, RET, T1) \
26 TCGHelperInfo glue(helper_info_, NAME) = { \
27 .func = HELPER(NAME), .name = str(NAME), \
28 .flags = FLAGS | dh_callflag(RET), \
29 .typemask = dh_typemask(RET, 0) | dh_typemask(T1, 1) \
32 #define DEF_HELPER_FLAGS_2(NAME, FLAGS, RET, T1, T2) \
33 TCGHelperInfo glue(helper_info_, NAME) = { \
34 .func = HELPER(NAME), .name = str(NAME), \
35 .flags = FLAGS | dh_callflag(RET), \
36 .typemask = dh_typemask(RET, 0) | dh_typemask(T1, 1) \
37 | dh_typemask(T2, 2) \
40 #define DEF_HELPER_FLAGS_3(NAME, FLAGS, RET, T1, T2, T3) \
41 TCGHelperInfo glue(helper_info_, NAME) = { \
42 .func = HELPER(NAME), .name = str(NAME), \
43 .flags = FLAGS | dh_callflag(RET), \
44 .typemask = dh_typemask(RET, 0) | dh_typemask(T1, 1) \
45 | dh_typemask(T2, 2) | dh_typemask(T3, 3) \
48 #define DEF_HELPER_FLAGS_4(NAME, FLAGS, RET, T1, T2, T3, T4) \
49 TCGHelperInfo glue(helper_info_, NAME) = { \
50 .func = HELPER(NAME), .name = str(NAME), \
51 .flags = FLAGS | dh_callflag(RET), \
52 .typemask = dh_typemask(RET, 0) | dh_typemask(T1, 1) \
53 | dh_typemask(T2, 2) | dh_typemask(T3, 3) \
54 | dh_typemask(T4, 4) \
57 #define DEF_HELPER_FLAGS_5(NAME, FLAGS, RET, T1, T2, T3, T4, T5) \
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) \
66 #define DEF_HELPER_FLAGS_6(NAME, FLAGS, RET, T1, T2, T3, T4, T5, T6) \
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) \
76 #define DEF_HELPER_FLAGS_7(NAME, FLAGS, RET, T1, T2, T3, T4, T5, T6, T7) \
77 TCGHelperInfo glue(helper_info_, NAME) = { \
78 .func = HELPER(NAME), .name = str(NAME), \
79 .flags = FLAGS | dh_callflag(RET), \
80 .typemask = dh_typemask(RET, 0) | dh_typemask(T1, 1) \
81 | dh_typemask(T2, 2) | dh_typemask(T3, 3) \
82 | dh_typemask(T4, 4) | dh_typemask(T5, 5) \
83 | dh_typemask(T6, 6) | dh_typemask(T7, 7) \
89 #undef DEF_HELPER_FLAGS_0
90 #undef DEF_HELPER_FLAGS_1
91 #undef DEF_HELPER_FLAGS_2
92 #undef DEF_HELPER_FLAGS_3
93 #undef DEF_HELPER_FLAGS_4
94 #undef DEF_HELPER_FLAGS_5
95 #undef DEF_HELPER_FLAGS_6
96 #undef DEF_HELPER_FLAGS_7