master
inc 110 lines 5.8 KB
Raw
1 /* SPDX-License-Identifier: GPL-2.0-or-later */
2 /*
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.
7 */
8
9 #include "tcg/tcg.h"
10 #include "tcg/helper-info.h"
11 #include "exec/helper-head.h.inc"
12
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)) \
16 { \
17 tcg_gen_call0(glue(helper_info_,name).func, \
18 &glue(helper_info_,name), dh_retvar(ret)); \
19 }
20
21 #define DEF_HELPER_FLAGS_1(name, flags, ret, t1) \
22 extern TCGHelperInfo glue(helper_info_, name); \
23 static inline void glue(gen_helper_, name)(dh_retvar_decl(ret) \
24 dh_arg_decl(t1, 1)) \
25 { \
26 tcg_gen_call1(glue(helper_info_,name).func, \
27 &glue(helper_info_,name), dh_retvar(ret), \
28 dh_arg(t1, 1)); \
29 }
30
31 #define DEF_HELPER_FLAGS_2(name, flags, ret, t1, t2) \
32 extern TCGHelperInfo glue(helper_info_, name); \
33 static inline void glue(gen_helper_, name)(dh_retvar_decl(ret) \
34 dh_arg_decl(t1, 1), dh_arg_decl(t2, 2)) \
35 { \
36 tcg_gen_call2(glue(helper_info_,name).func, \
37 &glue(helper_info_,name), dh_retvar(ret), \
38 dh_arg(t1, 1), dh_arg(t2, 2)); \
39 }
40
41 #define DEF_HELPER_FLAGS_3(name, flags, ret, t1, t2, t3) \
42 extern TCGHelperInfo glue(helper_info_, name); \
43 static inline void glue(gen_helper_, name)(dh_retvar_decl(ret) \
44 dh_arg_decl(t1, 1), dh_arg_decl(t2, 2), dh_arg_decl(t3, 3)) \
45 { \
46 tcg_gen_call3(glue(helper_info_,name).func, \
47 &glue(helper_info_,name), dh_retvar(ret), \
48 dh_arg(t1, 1), dh_arg(t2, 2), dh_arg(t3, 3)); \
49 }
50
51 #define DEF_HELPER_FLAGS_4(name, flags, ret, t1, t2, t3, t4) \
52 extern TCGHelperInfo glue(helper_info_, name); \
53 static inline void glue(gen_helper_, name)(dh_retvar_decl(ret) \
54 dh_arg_decl(t1, 1), dh_arg_decl(t2, 2), \
55 dh_arg_decl(t3, 3), dh_arg_decl(t4, 4)) \
56 { \
57 tcg_gen_call4(glue(helper_info_,name).func, \
58 &glue(helper_info_,name), dh_retvar(ret), \
59 dh_arg(t1, 1), dh_arg(t2, 2), \
60 dh_arg(t3, 3), dh_arg(t4, 4)); \
61 }
62
63 #define DEF_HELPER_FLAGS_5(name, flags, ret, t1, t2, t3, t4, t5) \
64 extern TCGHelperInfo glue(helper_info_, name); \
65 static inline void glue(gen_helper_, name)(dh_retvar_decl(ret) \
66 dh_arg_decl(t1, 1), dh_arg_decl(t2, 2), dh_arg_decl(t3, 3), \
67 dh_arg_decl(t4, 4), dh_arg_decl(t5, 5)) \
68 { \
69 tcg_gen_call5(glue(helper_info_,name).func, \
70 &glue(helper_info_,name), dh_retvar(ret), \
71 dh_arg(t1, 1), dh_arg(t2, 2), dh_arg(t3, 3), \
72 dh_arg(t4, 4), dh_arg(t5, 5)); \
73 }
74
75 #define DEF_HELPER_FLAGS_6(name, flags, ret, t1, t2, t3, t4, t5, t6) \
76 extern TCGHelperInfo glue(helper_info_, name); \
77 static inline void glue(gen_helper_, name)(dh_retvar_decl(ret) \
78 dh_arg_decl(t1, 1), dh_arg_decl(t2, 2), dh_arg_decl(t3, 3), \
79 dh_arg_decl(t4, 4), dh_arg_decl(t5, 5), dh_arg_decl(t6, 6)) \
80 { \
81 tcg_gen_call6(glue(helper_info_,name).func, \
82 &glue(helper_info_,name), dh_retvar(ret), \
83 dh_arg(t1, 1), dh_arg(t2, 2), dh_arg(t3, 3), \
84 dh_arg(t4, 4), dh_arg(t5, 5), dh_arg(t6, 6)); \
85 }
86
87 #define DEF_HELPER_FLAGS_7(name, flags, ret, t1, t2, t3, t4, t5, t6, t7)\
88 extern TCGHelperInfo glue(helper_info_, name); \
89 static inline void glue(gen_helper_, name)(dh_retvar_decl(ret) \
90 dh_arg_decl(t1, 1), dh_arg_decl(t2, 2), dh_arg_decl(t3, 3), \
91 dh_arg_decl(t4, 4), dh_arg_decl(t5, 5), dh_arg_decl(t6, 6), \
92 dh_arg_decl(t7, 7)) \
93 { \
94 tcg_gen_call7(glue(helper_info_,name).func, \
95 &glue(helper_info_,name), dh_retvar(ret), \
96 dh_arg(t1, 1), dh_arg(t2, 2), dh_arg(t3, 3), \
97 dh_arg(t4, 4), dh_arg(t5, 5), dh_arg(t6, 6), \
98 dh_arg(t7, 7)); \
99 }
100
101 #include HELPER_H
102
103 #undef DEF_HELPER_FLAGS_0
104 #undef DEF_HELPER_FLAGS_1
105 #undef DEF_HELPER_FLAGS_2
106 #undef DEF_HELPER_FLAGS_3
107 #undef DEF_HELPER_FLAGS_4
108 #undef DEF_HELPER_FLAGS_5
109 #undef DEF_HELPER_FLAGS_6
110 #undef DEF_HELPER_FLAGS_7