xref: /qemu/accel/tcg/tcg-runtime.h (revision db432672dc50ed86dda17ac821b7eb07411a90af)
1944eea96SRichard Henderson DEF_HELPER_FLAGS_2(div_i32, TCG_CALL_NO_RWG_SE, s32, s32, s32)
2944eea96SRichard Henderson DEF_HELPER_FLAGS_2(rem_i32, TCG_CALL_NO_RWG_SE, s32, s32, s32)
3944eea96SRichard Henderson DEF_HELPER_FLAGS_2(divu_i32, TCG_CALL_NO_RWG_SE, i32, i32, i32)
4944eea96SRichard Henderson DEF_HELPER_FLAGS_2(remu_i32, TCG_CALL_NO_RWG_SE, i32, i32, i32)
596e132e2SBlue Swirl 
6944eea96SRichard Henderson DEF_HELPER_FLAGS_2(div_i64, TCG_CALL_NO_RWG_SE, s64, s64, s64)
7944eea96SRichard Henderson DEF_HELPER_FLAGS_2(rem_i64, TCG_CALL_NO_RWG_SE, s64, s64, s64)
8944eea96SRichard Henderson DEF_HELPER_FLAGS_2(divu_i64, TCG_CALL_NO_RWG_SE, i64, i64, i64)
9944eea96SRichard Henderson DEF_HELPER_FLAGS_2(remu_i64, TCG_CALL_NO_RWG_SE, i64, i64, i64)
1031d66551SAurelien Jarno 
11944eea96SRichard Henderson DEF_HELPER_FLAGS_2(shl_i64, TCG_CALL_NO_RWG_SE, i64, i64, i64)
12944eea96SRichard Henderson DEF_HELPER_FLAGS_2(shr_i64, TCG_CALL_NO_RWG_SE, i64, i64, i64)
13944eea96SRichard Henderson DEF_HELPER_FLAGS_2(sar_i64, TCG_CALL_NO_RWG_SE, s64, s64, s64)
1496e132e2SBlue Swirl 
15944eea96SRichard Henderson DEF_HELPER_FLAGS_2(mulsh_i64, TCG_CALL_NO_RWG_SE, s64, s64, s64)
16944eea96SRichard Henderson DEF_HELPER_FLAGS_2(muluh_i64, TCG_CALL_NO_RWG_SE, i64, i64, i64)
17c482cb11SRichard Henderson 
180e28d006SRichard Henderson DEF_HELPER_FLAGS_2(clz_i32, TCG_CALL_NO_RWG_SE, i32, i32, i32)
190e28d006SRichard Henderson DEF_HELPER_FLAGS_2(ctz_i32, TCG_CALL_NO_RWG_SE, i32, i32, i32)
200e28d006SRichard Henderson DEF_HELPER_FLAGS_2(clz_i64, TCG_CALL_NO_RWG_SE, i64, i64, i64)
210e28d006SRichard Henderson DEF_HELPER_FLAGS_2(ctz_i64, TCG_CALL_NO_RWG_SE, i64, i64, i64)
22086920c2SRichard Henderson DEF_HELPER_FLAGS_1(clrsb_i32, TCG_CALL_NO_RWG_SE, i32, i32)
23086920c2SRichard Henderson DEF_HELPER_FLAGS_1(clrsb_i64, TCG_CALL_NO_RWG_SE, i64, i64)
24a768e4e9SRichard Henderson DEF_HELPER_FLAGS_1(ctpop_i32, TCG_CALL_NO_RWG_SE, i32, i32)
25a768e4e9SRichard Henderson DEF_HELPER_FLAGS_1(ctpop_i64, TCG_CALL_NO_RWG_SE, i64, i64)
260e28d006SRichard Henderson 
277f11636dSEmilio G. Cota DEF_HELPER_FLAGS_1(lookup_tb_ptr, TCG_CALL_NO_WG_SE, ptr, env)
28cedbcb01SEmilio G. Cota 
29df79b996SRichard Henderson DEF_HELPER_FLAGS_1(exit_atomic, TCG_CALL_NO_WG, noreturn, env)
30df79b996SRichard Henderson 
31c482cb11SRichard Henderson #ifdef CONFIG_SOFTMMU
32c482cb11SRichard Henderson 
33c482cb11SRichard Henderson DEF_HELPER_FLAGS_5(atomic_cmpxchgb, TCG_CALL_NO_WG,
34c482cb11SRichard Henderson                    i32, env, tl, i32, i32, i32)
35c482cb11SRichard Henderson DEF_HELPER_FLAGS_5(atomic_cmpxchgw_be, TCG_CALL_NO_WG,
36c482cb11SRichard Henderson                    i32, env, tl, i32, i32, i32)
37c482cb11SRichard Henderson DEF_HELPER_FLAGS_5(atomic_cmpxchgw_le, TCG_CALL_NO_WG,
38c482cb11SRichard Henderson                    i32, env, tl, i32, i32, i32)
39df79b996SRichard Henderson DEF_HELPER_FLAGS_5(atomic_cmpxchgl_be, TCG_CALL_NO_WG,
40df79b996SRichard Henderson                    i32, env, tl, i32, i32, i32)
41c482cb11SRichard Henderson DEF_HELPER_FLAGS_5(atomic_cmpxchgl_le, TCG_CALL_NO_WG,
42c482cb11SRichard Henderson                    i32, env, tl, i32, i32, i32)
43df79b996SRichard Henderson #ifdef CONFIG_ATOMIC64
44df79b996SRichard Henderson DEF_HELPER_FLAGS_5(atomic_cmpxchgq_be, TCG_CALL_NO_WG,
45df79b996SRichard Henderson                    i64, env, tl, i64, i64, i32)
46c482cb11SRichard Henderson DEF_HELPER_FLAGS_5(atomic_cmpxchgq_le, TCG_CALL_NO_WG,
47c482cb11SRichard Henderson                    i64, env, tl, i64, i64, i32)
48df79b996SRichard Henderson #endif
49c482cb11SRichard Henderson 
50df79b996SRichard Henderson #ifdef CONFIG_ATOMIC64
51c482cb11SRichard Henderson #define GEN_ATOMIC_HELPERS(NAME)                                  \
52c482cb11SRichard Henderson     DEF_HELPER_FLAGS_4(glue(glue(atomic_, NAME), b),              \
53c482cb11SRichard Henderson                        TCG_CALL_NO_WG, i32, env, tl, i32, i32)    \
54c482cb11SRichard Henderson     DEF_HELPER_FLAGS_4(glue(glue(atomic_, NAME), w_le),           \
55c482cb11SRichard Henderson                        TCG_CALL_NO_WG, i32, env, tl, i32, i32)    \
56c482cb11SRichard Henderson     DEF_HELPER_FLAGS_4(glue(glue(atomic_, NAME), w_be),           \
57c482cb11SRichard Henderson                        TCG_CALL_NO_WG, i32, env, tl, i32, i32)    \
58c482cb11SRichard Henderson     DEF_HELPER_FLAGS_4(glue(glue(atomic_, NAME), l_le),           \
59c482cb11SRichard Henderson                        TCG_CALL_NO_WG, i32, env, tl, i32, i32)    \
60c482cb11SRichard Henderson     DEF_HELPER_FLAGS_4(glue(glue(atomic_, NAME), l_be),           \
61c482cb11SRichard Henderson                        TCG_CALL_NO_WG, i32, env, tl, i32, i32)    \
62c482cb11SRichard Henderson     DEF_HELPER_FLAGS_4(glue(glue(atomic_, NAME), q_le),           \
63c482cb11SRichard Henderson                        TCG_CALL_NO_WG, i64, env, tl, i64, i32)    \
64c482cb11SRichard Henderson     DEF_HELPER_FLAGS_4(glue(glue(atomic_, NAME), q_be),           \
65c482cb11SRichard Henderson                        TCG_CALL_NO_WG, i64, env, tl, i64, i32)
66df79b996SRichard Henderson #else
67df79b996SRichard Henderson #define GEN_ATOMIC_HELPERS(NAME)                                  \
68df79b996SRichard Henderson     DEF_HELPER_FLAGS_4(glue(glue(atomic_, NAME), b),              \
69df79b996SRichard Henderson                        TCG_CALL_NO_WG, i32, env, tl, i32, i32)    \
70df79b996SRichard Henderson     DEF_HELPER_FLAGS_4(glue(glue(atomic_, NAME), w_le),           \
71df79b996SRichard Henderson                        TCG_CALL_NO_WG, i32, env, tl, i32, i32)    \
72df79b996SRichard Henderson     DEF_HELPER_FLAGS_4(glue(glue(atomic_, NAME), w_be),           \
73df79b996SRichard Henderson                        TCG_CALL_NO_WG, i32, env, tl, i32, i32)    \
74df79b996SRichard Henderson     DEF_HELPER_FLAGS_4(glue(glue(atomic_, NAME), l_le),           \
75df79b996SRichard Henderson                        TCG_CALL_NO_WG, i32, env, tl, i32, i32)    \
76df79b996SRichard Henderson     DEF_HELPER_FLAGS_4(glue(glue(atomic_, NAME), l_be),           \
77df79b996SRichard Henderson                        TCG_CALL_NO_WG, i32, env, tl, i32, i32)
78df79b996SRichard Henderson #endif /* CONFIG_ATOMIC64 */
79c482cb11SRichard Henderson 
80c482cb11SRichard Henderson #else
81c482cb11SRichard Henderson 
82c482cb11SRichard Henderson DEF_HELPER_FLAGS_4(atomic_cmpxchgb, TCG_CALL_NO_WG, i32, env, tl, i32, i32)
83c482cb11SRichard Henderson DEF_HELPER_FLAGS_4(atomic_cmpxchgw_be, TCG_CALL_NO_WG, i32, env, tl, i32, i32)
84c482cb11SRichard Henderson DEF_HELPER_FLAGS_4(atomic_cmpxchgw_le, TCG_CALL_NO_WG, i32, env, tl, i32, i32)
85df79b996SRichard Henderson DEF_HELPER_FLAGS_4(atomic_cmpxchgl_be, TCG_CALL_NO_WG, i32, env, tl, i32, i32)
86c482cb11SRichard Henderson DEF_HELPER_FLAGS_4(atomic_cmpxchgl_le, TCG_CALL_NO_WG, i32, env, tl, i32, i32)
87df79b996SRichard Henderson #ifdef CONFIG_ATOMIC64
88df79b996SRichard Henderson DEF_HELPER_FLAGS_4(atomic_cmpxchgq_be, TCG_CALL_NO_WG, i64, env, tl, i64, i64)
89c482cb11SRichard Henderson DEF_HELPER_FLAGS_4(atomic_cmpxchgq_le, TCG_CALL_NO_WG, i64, env, tl, i64, i64)
90df79b996SRichard Henderson #endif
91c482cb11SRichard Henderson 
92df79b996SRichard Henderson #ifdef CONFIG_ATOMIC64
93c482cb11SRichard Henderson #define GEN_ATOMIC_HELPERS(NAME)                             \
94c482cb11SRichard Henderson     DEF_HELPER_FLAGS_3(glue(glue(atomic_, NAME), b),         \
95c482cb11SRichard Henderson                        TCG_CALL_NO_WG, i32, env, tl, i32)    \
96c482cb11SRichard Henderson     DEF_HELPER_FLAGS_3(glue(glue(atomic_, NAME), w_le),      \
97c482cb11SRichard Henderson                        TCG_CALL_NO_WG, i32, env, tl, i32)    \
98c482cb11SRichard Henderson     DEF_HELPER_FLAGS_3(glue(glue(atomic_, NAME), w_be),      \
99c482cb11SRichard Henderson                        TCG_CALL_NO_WG, i32, env, tl, i32)    \
100c482cb11SRichard Henderson     DEF_HELPER_FLAGS_3(glue(glue(atomic_, NAME), l_le),      \
101c482cb11SRichard Henderson                        TCG_CALL_NO_WG, i32, env, tl, i32)    \
102c482cb11SRichard Henderson     DEF_HELPER_FLAGS_3(glue(glue(atomic_, NAME), l_be),      \
103c482cb11SRichard Henderson                        TCG_CALL_NO_WG, i32, env, tl, i32)    \
104c482cb11SRichard Henderson     DEF_HELPER_FLAGS_3(glue(glue(atomic_, NAME), q_le),      \
105c482cb11SRichard Henderson                        TCG_CALL_NO_WG, i64, env, tl, i64)    \
106c482cb11SRichard Henderson     DEF_HELPER_FLAGS_3(glue(glue(atomic_, NAME), q_be),      \
107c482cb11SRichard Henderson                        TCG_CALL_NO_WG, i64, env, tl, i64)
108df79b996SRichard Henderson #else
109df79b996SRichard Henderson #define GEN_ATOMIC_HELPERS(NAME)                             \
110df79b996SRichard Henderson     DEF_HELPER_FLAGS_3(glue(glue(atomic_, NAME), b),         \
111df79b996SRichard Henderson                        TCG_CALL_NO_WG, i32, env, tl, i32)    \
112df79b996SRichard Henderson     DEF_HELPER_FLAGS_3(glue(glue(atomic_, NAME), w_le),      \
113df79b996SRichard Henderson                        TCG_CALL_NO_WG, i32, env, tl, i32)    \
114df79b996SRichard Henderson     DEF_HELPER_FLAGS_3(glue(glue(atomic_, NAME), w_be),      \
115df79b996SRichard Henderson                        TCG_CALL_NO_WG, i32, env, tl, i32)    \
116df79b996SRichard Henderson     DEF_HELPER_FLAGS_3(glue(glue(atomic_, NAME), l_le),      \
117df79b996SRichard Henderson                        TCG_CALL_NO_WG, i32, env, tl, i32)    \
118df79b996SRichard Henderson     DEF_HELPER_FLAGS_3(glue(glue(atomic_, NAME), l_be),      \
119df79b996SRichard Henderson                        TCG_CALL_NO_WG, i32, env, tl, i32)
120df79b996SRichard Henderson #endif /* CONFIG_ATOMIC64 */
121c482cb11SRichard Henderson 
122c482cb11SRichard Henderson #endif /* CONFIG_SOFTMMU */
123c482cb11SRichard Henderson 
124c482cb11SRichard Henderson GEN_ATOMIC_HELPERS(fetch_add)
125c482cb11SRichard Henderson GEN_ATOMIC_HELPERS(fetch_and)
126c482cb11SRichard Henderson GEN_ATOMIC_HELPERS(fetch_or)
127c482cb11SRichard Henderson GEN_ATOMIC_HELPERS(fetch_xor)
128c482cb11SRichard Henderson 
129c482cb11SRichard Henderson GEN_ATOMIC_HELPERS(add_fetch)
130c482cb11SRichard Henderson GEN_ATOMIC_HELPERS(and_fetch)
131c482cb11SRichard Henderson GEN_ATOMIC_HELPERS(or_fetch)
132c482cb11SRichard Henderson GEN_ATOMIC_HELPERS(xor_fetch)
133c482cb11SRichard Henderson 
134c482cb11SRichard Henderson GEN_ATOMIC_HELPERS(xchg)
135c482cb11SRichard Henderson 
136c482cb11SRichard Henderson #undef GEN_ATOMIC_HELPERS
137*db432672SRichard Henderson 
138*db432672SRichard Henderson DEF_HELPER_FLAGS_3(gvec_mov, TCG_CALL_NO_RWG, void, ptr, ptr, i32)
139*db432672SRichard Henderson 
140*db432672SRichard Henderson DEF_HELPER_FLAGS_3(gvec_dup8, TCG_CALL_NO_RWG, void, ptr, i32, i32)
141*db432672SRichard Henderson DEF_HELPER_FLAGS_3(gvec_dup16, TCG_CALL_NO_RWG, void, ptr, i32, i32)
142*db432672SRichard Henderson DEF_HELPER_FLAGS_3(gvec_dup32, TCG_CALL_NO_RWG, void, ptr, i32, i32)
143*db432672SRichard Henderson DEF_HELPER_FLAGS_3(gvec_dup64, TCG_CALL_NO_RWG, void, ptr, i32, i64)
144*db432672SRichard Henderson 
145*db432672SRichard Henderson DEF_HELPER_FLAGS_4(gvec_add8, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32)
146*db432672SRichard Henderson DEF_HELPER_FLAGS_4(gvec_add16, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32)
147*db432672SRichard Henderson DEF_HELPER_FLAGS_4(gvec_add32, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32)
148*db432672SRichard Henderson DEF_HELPER_FLAGS_4(gvec_add64, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32)
149*db432672SRichard Henderson 
150*db432672SRichard Henderson DEF_HELPER_FLAGS_4(gvec_sub8, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32)
151*db432672SRichard Henderson DEF_HELPER_FLAGS_4(gvec_sub16, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32)
152*db432672SRichard Henderson DEF_HELPER_FLAGS_4(gvec_sub32, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32)
153*db432672SRichard Henderson DEF_HELPER_FLAGS_4(gvec_sub64, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32)
154*db432672SRichard Henderson 
155*db432672SRichard Henderson DEF_HELPER_FLAGS_3(gvec_neg8, TCG_CALL_NO_RWG, void, ptr, ptr, i32)
156*db432672SRichard Henderson DEF_HELPER_FLAGS_3(gvec_neg16, TCG_CALL_NO_RWG, void, ptr, ptr, i32)
157*db432672SRichard Henderson DEF_HELPER_FLAGS_3(gvec_neg32, TCG_CALL_NO_RWG, void, ptr, ptr, i32)
158*db432672SRichard Henderson DEF_HELPER_FLAGS_3(gvec_neg64, TCG_CALL_NO_RWG, void, ptr, ptr, i32)
159*db432672SRichard Henderson 
160*db432672SRichard Henderson DEF_HELPER_FLAGS_3(gvec_not, TCG_CALL_NO_RWG, void, ptr, ptr, i32)
161*db432672SRichard Henderson DEF_HELPER_FLAGS_4(gvec_and, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32)
162*db432672SRichard Henderson DEF_HELPER_FLAGS_4(gvec_or, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32)
163*db432672SRichard Henderson DEF_HELPER_FLAGS_4(gvec_xor, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32)
164*db432672SRichard Henderson DEF_HELPER_FLAGS_4(gvec_andc, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32)
165*db432672SRichard Henderson DEF_HELPER_FLAGS_4(gvec_orc, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32)
166