1 /* SPDX-License-Identifier: GPL-2.0-or-later */
3 * Helper file for declaring TCG helper functions.
4 * This one expands generation functions for tcg opcodes.
5 * Define HELPER_H for the header file to be expanded,
6 * and static inline to change from global file scope.
10 #include "tcg/helper-info.h"
11 #include "exec/helper-head.h"
13 #define DEF_HELPER_FLAGS_0(name, flags, ret) \
14 extern TCGHelperInfo glue(helper_info_, name); \
15 static inline void glue(gen_helper_, name)(dh_retvar_decl0(ret)) \
17 tcg_gen_call0(&glue(helper_info_, name), dh_retvar(ret)); \
20 #define DEF_HELPER_FLAGS_1(name, flags, ret, t1) \
21 extern TCGHelperInfo glue(helper_info_, name); \
22 static inline void glue(gen_helper_, name)(dh_retvar_decl(ret) \
25 tcg_gen_call1(&glue(helper_info_, name), dh_retvar(ret), \
29 #define DEF_HELPER_FLAGS_2(name, flags, ret, t1, t2) \
30 extern TCGHelperInfo glue(helper_info_, name); \
31 static inline void glue(gen_helper_, name)(dh_retvar_decl(ret) \
32 dh_arg_decl(t1, 1), dh_arg_decl(t2, 2)) \
34 tcg_gen_call2(&glue(helper_info_, name), dh_retvar(ret), \
35 dh_arg(t1, 1), dh_arg(t2, 2)); \
38 #define DEF_HELPER_FLAGS_3(name, flags, ret, t1, t2, t3) \
39 extern TCGHelperInfo glue(helper_info_, name); \
40 static inline void glue(gen_helper_, name)(dh_retvar_decl(ret) \
41 dh_arg_decl(t1, 1), dh_arg_decl(t2, 2), dh_arg_decl(t3, 3)) \
43 tcg_gen_call3(&glue(helper_info_, name), dh_retvar(ret), \
44 dh_arg(t1, 1), dh_arg(t2, 2), dh_arg(t3, 3)); \
47 #define DEF_HELPER_FLAGS_4(name, flags, ret, t1, t2, t3, t4) \
48 extern TCGHelperInfo glue(helper_info_, name); \
49 static inline void glue(gen_helper_, name)(dh_retvar_decl(ret) \
50 dh_arg_decl(t1, 1), dh_arg_decl(t2, 2), \
51 dh_arg_decl(t3, 3), dh_arg_decl(t4, 4)) \
53 tcg_gen_call4(&glue(helper_info_, name), dh_retvar(ret), \
54 dh_arg(t1, 1), dh_arg(t2, 2), \
55 dh_arg(t3, 3), dh_arg(t4, 4)); \
58 #define DEF_HELPER_FLAGS_5(name, flags, ret, t1, t2, t3, t4, t5) \
59 extern TCGHelperInfo glue(helper_info_, name); \
60 static inline void glue(gen_helper_, name)(dh_retvar_decl(ret) \
61 dh_arg_decl(t1, 1), dh_arg_decl(t2, 2), dh_arg_decl(t3, 3), \
62 dh_arg_decl(t4, 4), dh_arg_decl(t5, 5)) \
64 tcg_gen_call5(&glue(helper_info_, name), dh_retvar(ret), \
65 dh_arg(t1, 1), dh_arg(t2, 2), dh_arg(t3, 3), \
66 dh_arg(t4, 4), dh_arg(t5, 5)); \
69 #define DEF_HELPER_FLAGS_6(name, flags, ret, t1, t2, t3, t4, t5, t6) \
70 extern TCGHelperInfo glue(helper_info_, name); \
71 static inline void glue(gen_helper_, name)(dh_retvar_decl(ret) \
72 dh_arg_decl(t1, 1), dh_arg_decl(t2, 2), dh_arg_decl(t3, 3), \
73 dh_arg_decl(t4, 4), dh_arg_decl(t5, 5), dh_arg_decl(t6, 6)) \
75 tcg_gen_call6(&glue(helper_info_, name), dh_retvar(ret), \
76 dh_arg(t1, 1), dh_arg(t2, 2), dh_arg(t3, 3), \
77 dh_arg(t4, 4), dh_arg(t5, 5), dh_arg(t6, 6)); \
80 #define DEF_HELPER_FLAGS_7(name, flags, ret, t1, t2, t3, t4, t5, t6, t7)\
81 extern TCGHelperInfo glue(helper_info_, name); \
82 static inline void glue(gen_helper_, name)(dh_retvar_decl(ret) \
83 dh_arg_decl(t1, 1), dh_arg_decl(t2, 2), dh_arg_decl(t3, 3), \
84 dh_arg_decl(t4, 4), dh_arg_decl(t5, 5), dh_arg_decl(t6, 6), \
87 tcg_gen_call7(&glue(helper_info_, name), dh_retvar(ret), \
88 dh_arg(t1, 1), dh_arg(t2, 2), dh_arg(t3, 3), \
89 dh_arg(t4, 4), dh_arg(t5, 5), dh_arg(t6, 6), \
95 #undef DEF_HELPER_FLAGS_0
96 #undef DEF_HELPER_FLAGS_1
97 #undef DEF_HELPER_FLAGS_2
98 #undef DEF_HELPER_FLAGS_3
99 #undef DEF_HELPER_FLAGS_4
100 #undef DEF_HELPER_FLAGS_5
101 #undef DEF_HELPER_FLAGS_6
102 #undef DEF_HELPER_FLAGS_7