]>
Commit | Line | Data |
---|---|---|
d53106c9 RH |
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 | ||
8 | #include "tcg/tcg.h" | |
9 | #include "tcg/helper-info.h" | |
2379866c | 10 | #include "exec/helper-head.h.inc" |
d53106c9 RH |
11 | |
12 | /* | |
13 | * Need one more level of indirection before stringification | |
14 | * to get all the macros expanded first. | |
15 | */ | |
16 | #define str(s) #s | |
17 | ||
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) \ | |
23 | }; | |
24 | ||
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) \ | |
30 | }; | |
31 | ||
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) \ | |
38 | }; | |
39 | ||
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) \ | |
46 | }; | |
47 | ||
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) \ | |
55 | }; | |
56 | ||
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) \ | |
64 | }; | |
65 | ||
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) \ | |
74 | }; | |
75 | ||
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) \ | |
84 | }; | |
85 | ||
86 | #include HELPER_H | |
87 | ||
88 | #undef str | |
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 |