]> git.ipfire.org Git - thirdparty/qemu.git/blame - include/exec/helper-head.h
.travis.yml: don't run make check with multiple jobs
[thirdparty/qemu.git] / include / exec / helper-head.h
CommitLineData
a7812ae4 1/* Helper file for declaring TCG helper functions.
2ef6175a 2 Used by other helper files.
a7812ae4
PB
3
4 Targets should use DEF_HELPER_N and DEF_HELPER_FLAGS_N to declare helper
5 functions. Names should be specified without the helper_ prefix, and
6 the return and argument types specified. 3 basic types are understood
7 (i32, i64 and ptr). Additional aliases are provided for convenience and
8 to match the types used by the C helper implementation.
9
10 The target helper.h should be included in all files that use/define
11 helper functions. THis will ensure that function prototypes are
12 consistent. In addition it should be included an extra two times for
13 helper.c, defining:
14 GEN_HELPER 1 to produce op generation functions (gen_helper_*)
15 GEN_HELPER 2 to do runtime registration helper functions.
16 */
17
121d0712
MA
18#ifndef EXEC_HELPER_HEAD_H
19#define EXEC_HELPER_HEAD_H
944eea96 20
a7812ae4
PB
21#define HELPER(name) glue(helper_, name)
22
a7812ae4
PB
23/* Some types that make sense in C, but not for TCG. */
24#define dh_alias_i32 i32
25#define dh_alias_s32 i32
26#define dh_alias_int i32
27#define dh_alias_i64 i64
28#define dh_alias_s64 i64
35737497 29#define dh_alias_f16 i32
a7812ae4
PB
30#define dh_alias_f32 i32
31#define dh_alias_f64 i64
a7812ae4 32#define dh_alias_ptr ptr
8c6edfdd 33#define dh_alias_cptr ptr
a7812ae4 34#define dh_alias_void void
1367ff49 35#define dh_alias_noreturn noreturn
a7812ae4
PB
36#define dh_alias(t) glue(dh_alias_, t)
37
38#define dh_ctype_i32 uint32_t
39#define dh_ctype_s32 int32_t
40#define dh_ctype_int int
41#define dh_ctype_i64 uint64_t
42#define dh_ctype_s64 int64_t
6c2be133 43#define dh_ctype_f16 uint32_t
a7812ae4
PB
44#define dh_ctype_f32 float32
45#define dh_ctype_f64 float64
a7812ae4 46#define dh_ctype_ptr void *
8c6edfdd 47#define dh_ctype_cptr const void *
a7812ae4 48#define dh_ctype_void void
1367ff49 49#define dh_ctype_noreturn void QEMU_NORETURN
a7812ae4
PB
50#define dh_ctype(t) dh_ctype_##t
51
bdd90227
PB
52#ifdef NEED_CPU_H
53# ifdef TARGET_LONG_BITS
54# if TARGET_LONG_BITS == 32
55# define dh_alias_tl i32
56# else
57# define dh_alias_tl i64
58# endif
59# endif
60# define dh_alias_env ptr
61# define dh_ctype_tl target_ulong
62# define dh_ctype_env CPUArchState *
63#endif
64
a7812ae4
PB
65/* We can't use glue() here because it falls foul of C preprocessor
66 recursive expansion rules. */
67#define dh_retvar_decl0_void void
1367ff49 68#define dh_retvar_decl0_noreturn void
a7812ae4
PB
69#define dh_retvar_decl0_i32 TCGv_i32 retval
70#define dh_retvar_decl0_i64 TCGv_i64 retval
9c9c310a 71#define dh_retvar_decl0_ptr TCGv_ptr retval
a7812ae4
PB
72#define dh_retvar_decl0(t) glue(dh_retvar_decl0_, dh_alias(t))
73
74#define dh_retvar_decl_void
1367ff49 75#define dh_retvar_decl_noreturn
a7812ae4
PB
76#define dh_retvar_decl_i32 TCGv_i32 retval,
77#define dh_retvar_decl_i64 TCGv_i64 retval,
9c9c310a 78#define dh_retvar_decl_ptr TCGv_ptr retval,
a7812ae4
PB
79#define dh_retvar_decl(t) glue(dh_retvar_decl_, dh_alias(t))
80
ae8b75dc
RH
81#define dh_retvar_void NULL
82#define dh_retvar_noreturn NULL
83#define dh_retvar_i32 tcgv_i32_temp(retval)
84#define dh_retvar_i64 tcgv_i64_temp(retval)
85#define dh_retvar_ptr tcgv_ptr_temp(retval)
a7812ae4
PB
86#define dh_retvar(t) glue(dh_retvar_, dh_alias(t))
87
88#define dh_is_64bit_void 0
1367ff49 89#define dh_is_64bit_noreturn 0
a7812ae4
PB
90#define dh_is_64bit_i32 0
91#define dh_is_64bit_i64 1
71b92699 92#define dh_is_64bit_ptr (sizeof(void *) == 8)
8c6edfdd 93#define dh_is_64bit_cptr dh_is_64bit_ptr
a7812ae4
PB
94#define dh_is_64bit(t) glue(dh_is_64bit_, dh_alias(t))
95
2bece2c8 96#define dh_is_signed_void 0
1367ff49 97#define dh_is_signed_noreturn 0
2bece2c8
RH
98#define dh_is_signed_i32 0
99#define dh_is_signed_s32 1
100#define dh_is_signed_i64 0
101#define dh_is_signed_s64 1
35737497 102#define dh_is_signed_f16 0
2bece2c8
RH
103#define dh_is_signed_f32 0
104#define dh_is_signed_f64 0
105#define dh_is_signed_tl 0
106#define dh_is_signed_int 1
107/* ??? This is highly specific to the host cpu. There are even special
108 extension instructions that may be required, e.g. ia64's addp4. But
109 for now we don't support any 64-bit targets with 32-bit pointers. */
110#define dh_is_signed_ptr 0
8c6edfdd 111#define dh_is_signed_cptr dh_is_signed_ptr
2bece2c8
RH
112#define dh_is_signed_env dh_is_signed_ptr
113#define dh_is_signed(t) dh_is_signed_##t
114
15d74092
RH
115#define dh_callflag_i32 0
116#define dh_callflag_s32 0
117#define dh_callflag_int 0
118#define dh_callflag_i64 0
119#define dh_callflag_s64 0
120#define dh_callflag_f16 0
121#define dh_callflag_f32 0
122#define dh_callflag_f64 0
123#define dh_callflag_ptr 0
8c6edfdd 124#define dh_callflag_cptr dh_callflag_ptr
15d74092
RH
125#define dh_callflag_void 0
126#define dh_callflag_noreturn TCG_CALL_NO_RETURN
127#define dh_callflag(t) glue(dh_callflag_, dh_alias(t))
128
2bece2c8 129#define dh_sizemask(t, n) \
a5ed2de1 130 ((dh_is_64bit(t) << (n*2)) | (dh_is_signed(t) << (n*2+1)))
2bece2c8 131
a7812ae4 132#define dh_arg(t, n) \
ae8b75dc 133 glue(glue(tcgv_, dh_alias(t)), _temp)(glue(arg, n))
a7812ae4
PB
134
135#define dh_arg_decl(t, n) glue(TCGv_, dh_alias(t)) glue(arg, n)
136
a7812ae4
PB
137#define DEF_HELPER_0(name, ret) \
138 DEF_HELPER_FLAGS_0(name, 0, ret)
139#define DEF_HELPER_1(name, ret, t1) \
140 DEF_HELPER_FLAGS_1(name, 0, ret, t1)
141#define DEF_HELPER_2(name, ret, t1, t2) \
142 DEF_HELPER_FLAGS_2(name, 0, ret, t1, t2)
143#define DEF_HELPER_3(name, ret, t1, t2, t3) \
144 DEF_HELPER_FLAGS_3(name, 0, ret, t1, t2, t3)
145#define DEF_HELPER_4(name, ret, t1, t2, t3, t4) \
146 DEF_HELPER_FLAGS_4(name, 0, ret, t1, t2, t3, t4)
57d585f7
BS
147#define DEF_HELPER_5(name, ret, t1, t2, t3, t4, t5) \
148 DEF_HELPER_FLAGS_5(name, 0, ret, t1, t2, t3, t4, t5)
1df3caa9
RH
149#define DEF_HELPER_6(name, ret, t1, t2, t3, t4, t5, t6) \
150 DEF_HELPER_FLAGS_6(name, 0, ret, t1, t2, t3, t4, t5, t6)
a7812ae4 151
3cebc3f1
SW
152/* MAX_OPC_PARAM_IARGS must be set to n if last entry is DEF_HELPER_FLAGS_n. */
153
121d0712 154#endif /* EXEC_HELPER_HEAD_H */