blob: c551736d49f5f42cb66527c84d6a6003f38edca1 [file] [log] [blame]
Richard Hendersond53106c2023-03-31 10:37:04 -07001/* 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"
Philippe Mathieu-Daudé23798662024-04-22 16:41:04 +020010#include "exec/helper-head.h.inc"
Richard Hendersond53106c2023-03-31 10:37:04 -070011
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