xref: /qemu/accel/tcg/tcg-runtime.h (revision 0e28d0063bbd9e59a981ea2d20f82f30c5d956a8)
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)
220e28d006SRichard Henderson 
23df79b996SRichard Henderson DEF_HELPER_FLAGS_1(exit_atomic, TCG_CALL_NO_WG, noreturn, env)
24df79b996SRichard Henderson 
25c482cb11SRichard Henderson #ifdef CONFIG_SOFTMMU
26c482cb11SRichard Henderson 
27c482cb11SRichard Henderson DEF_HELPER_FLAGS_5(atomic_cmpxchgb, TCG_CALL_NO_WG,
28c482cb11SRichard Henderson                    i32, env, tl, i32, i32, i32)
29c482cb11SRichard Henderson DEF_HELPER_FLAGS_5(atomic_cmpxchgw_be, TCG_CALL_NO_WG,
30c482cb11SRichard Henderson                    i32, env, tl, i32, i32, i32)
31c482cb11SRichard Henderson DEF_HELPER_FLAGS_5(atomic_cmpxchgw_le, TCG_CALL_NO_WG,
32c482cb11SRichard Henderson                    i32, env, tl, i32, i32, i32)
33df79b996SRichard Henderson DEF_HELPER_FLAGS_5(atomic_cmpxchgl_be, TCG_CALL_NO_WG,
34df79b996SRichard Henderson                    i32, env, tl, i32, i32, i32)
35c482cb11SRichard Henderson DEF_HELPER_FLAGS_5(atomic_cmpxchgl_le, TCG_CALL_NO_WG,
36c482cb11SRichard Henderson                    i32, env, tl, i32, i32, i32)
37df79b996SRichard Henderson #ifdef CONFIG_ATOMIC64
38df79b996SRichard Henderson DEF_HELPER_FLAGS_5(atomic_cmpxchgq_be, TCG_CALL_NO_WG,
39df79b996SRichard Henderson                    i64, env, tl, i64, i64, i32)
40c482cb11SRichard Henderson DEF_HELPER_FLAGS_5(atomic_cmpxchgq_le, TCG_CALL_NO_WG,
41c482cb11SRichard Henderson                    i64, env, tl, i64, i64, i32)
42df79b996SRichard Henderson #endif
43c482cb11SRichard Henderson 
44df79b996SRichard Henderson #ifdef CONFIG_ATOMIC64
45c482cb11SRichard Henderson #define GEN_ATOMIC_HELPERS(NAME)                                  \
46c482cb11SRichard Henderson     DEF_HELPER_FLAGS_4(glue(glue(atomic_, NAME), b),              \
47c482cb11SRichard Henderson                        TCG_CALL_NO_WG, i32, env, tl, i32, i32)    \
48c482cb11SRichard Henderson     DEF_HELPER_FLAGS_4(glue(glue(atomic_, NAME), w_le),           \
49c482cb11SRichard Henderson                        TCG_CALL_NO_WG, i32, env, tl, i32, i32)    \
50c482cb11SRichard Henderson     DEF_HELPER_FLAGS_4(glue(glue(atomic_, NAME), w_be),           \
51c482cb11SRichard Henderson                        TCG_CALL_NO_WG, i32, env, tl, i32, i32)    \
52c482cb11SRichard Henderson     DEF_HELPER_FLAGS_4(glue(glue(atomic_, NAME), l_le),           \
53c482cb11SRichard Henderson                        TCG_CALL_NO_WG, i32, env, tl, i32, i32)    \
54c482cb11SRichard Henderson     DEF_HELPER_FLAGS_4(glue(glue(atomic_, NAME), l_be),           \
55c482cb11SRichard Henderson                        TCG_CALL_NO_WG, i32, env, tl, i32, i32)    \
56c482cb11SRichard Henderson     DEF_HELPER_FLAGS_4(glue(glue(atomic_, NAME), q_le),           \
57c482cb11SRichard Henderson                        TCG_CALL_NO_WG, i64, env, tl, i64, i32)    \
58c482cb11SRichard Henderson     DEF_HELPER_FLAGS_4(glue(glue(atomic_, NAME), q_be),           \
59c482cb11SRichard Henderson                        TCG_CALL_NO_WG, i64, env, tl, i64, i32)
60df79b996SRichard Henderson #else
61df79b996SRichard Henderson #define GEN_ATOMIC_HELPERS(NAME)                                  \
62df79b996SRichard Henderson     DEF_HELPER_FLAGS_4(glue(glue(atomic_, NAME), b),              \
63df79b996SRichard Henderson                        TCG_CALL_NO_WG, i32, env, tl, i32, i32)    \
64df79b996SRichard Henderson     DEF_HELPER_FLAGS_4(glue(glue(atomic_, NAME), w_le),           \
65df79b996SRichard Henderson                        TCG_CALL_NO_WG, i32, env, tl, i32, i32)    \
66df79b996SRichard Henderson     DEF_HELPER_FLAGS_4(glue(glue(atomic_, NAME), w_be),           \
67df79b996SRichard Henderson                        TCG_CALL_NO_WG, i32, env, tl, i32, i32)    \
68df79b996SRichard Henderson     DEF_HELPER_FLAGS_4(glue(glue(atomic_, NAME), l_le),           \
69df79b996SRichard Henderson                        TCG_CALL_NO_WG, i32, env, tl, i32, i32)    \
70df79b996SRichard Henderson     DEF_HELPER_FLAGS_4(glue(glue(atomic_, NAME), l_be),           \
71df79b996SRichard Henderson                        TCG_CALL_NO_WG, i32, env, tl, i32, i32)
72df79b996SRichard Henderson #endif /* CONFIG_ATOMIC64 */
73c482cb11SRichard Henderson 
74c482cb11SRichard Henderson #else
75c482cb11SRichard Henderson 
76c482cb11SRichard Henderson DEF_HELPER_FLAGS_4(atomic_cmpxchgb, TCG_CALL_NO_WG, i32, env, tl, i32, i32)
77c482cb11SRichard Henderson DEF_HELPER_FLAGS_4(atomic_cmpxchgw_be, TCG_CALL_NO_WG, i32, env, tl, i32, i32)
78c482cb11SRichard Henderson DEF_HELPER_FLAGS_4(atomic_cmpxchgw_le, TCG_CALL_NO_WG, i32, env, tl, i32, i32)
79df79b996SRichard Henderson DEF_HELPER_FLAGS_4(atomic_cmpxchgl_be, TCG_CALL_NO_WG, i32, env, tl, i32, i32)
80c482cb11SRichard Henderson DEF_HELPER_FLAGS_4(atomic_cmpxchgl_le, TCG_CALL_NO_WG, i32, env, tl, i32, i32)
81df79b996SRichard Henderson #ifdef CONFIG_ATOMIC64
82df79b996SRichard Henderson DEF_HELPER_FLAGS_4(atomic_cmpxchgq_be, TCG_CALL_NO_WG, i64, env, tl, i64, i64)
83c482cb11SRichard Henderson DEF_HELPER_FLAGS_4(atomic_cmpxchgq_le, TCG_CALL_NO_WG, i64, env, tl, i64, i64)
84df79b996SRichard Henderson #endif
85c482cb11SRichard Henderson 
86df79b996SRichard Henderson #ifdef CONFIG_ATOMIC64
87c482cb11SRichard Henderson #define GEN_ATOMIC_HELPERS(NAME)                             \
88c482cb11SRichard Henderson     DEF_HELPER_FLAGS_3(glue(glue(atomic_, NAME), b),         \
89c482cb11SRichard Henderson                        TCG_CALL_NO_WG, i32, env, tl, i32)    \
90c482cb11SRichard Henderson     DEF_HELPER_FLAGS_3(glue(glue(atomic_, NAME), w_le),      \
91c482cb11SRichard Henderson                        TCG_CALL_NO_WG, i32, env, tl, i32)    \
92c482cb11SRichard Henderson     DEF_HELPER_FLAGS_3(glue(glue(atomic_, NAME), w_be),      \
93c482cb11SRichard Henderson                        TCG_CALL_NO_WG, i32, env, tl, i32)    \
94c482cb11SRichard Henderson     DEF_HELPER_FLAGS_3(glue(glue(atomic_, NAME), l_le),      \
95c482cb11SRichard Henderson                        TCG_CALL_NO_WG, i32, env, tl, i32)    \
96c482cb11SRichard Henderson     DEF_HELPER_FLAGS_3(glue(glue(atomic_, NAME), l_be),      \
97c482cb11SRichard Henderson                        TCG_CALL_NO_WG, i32, env, tl, i32)    \
98c482cb11SRichard Henderson     DEF_HELPER_FLAGS_3(glue(glue(atomic_, NAME), q_le),      \
99c482cb11SRichard Henderson                        TCG_CALL_NO_WG, i64, env, tl, i64)    \
100c482cb11SRichard Henderson     DEF_HELPER_FLAGS_3(glue(glue(atomic_, NAME), q_be),      \
101c482cb11SRichard Henderson                        TCG_CALL_NO_WG, i64, env, tl, i64)
102df79b996SRichard Henderson #else
103df79b996SRichard Henderson #define GEN_ATOMIC_HELPERS(NAME)                             \
104df79b996SRichard Henderson     DEF_HELPER_FLAGS_3(glue(glue(atomic_, NAME), b),         \
105df79b996SRichard Henderson                        TCG_CALL_NO_WG, i32, env, tl, i32)    \
106df79b996SRichard Henderson     DEF_HELPER_FLAGS_3(glue(glue(atomic_, NAME), w_le),      \
107df79b996SRichard Henderson                        TCG_CALL_NO_WG, i32, env, tl, i32)    \
108df79b996SRichard Henderson     DEF_HELPER_FLAGS_3(glue(glue(atomic_, NAME), w_be),      \
109df79b996SRichard Henderson                        TCG_CALL_NO_WG, i32, env, tl, i32)    \
110df79b996SRichard Henderson     DEF_HELPER_FLAGS_3(glue(glue(atomic_, NAME), l_le),      \
111df79b996SRichard Henderson                        TCG_CALL_NO_WG, i32, env, tl, i32)    \
112df79b996SRichard Henderson     DEF_HELPER_FLAGS_3(glue(glue(atomic_, NAME), l_be),      \
113df79b996SRichard Henderson                        TCG_CALL_NO_WG, i32, env, tl, i32)
114df79b996SRichard Henderson #endif /* CONFIG_ATOMIC64 */
115c482cb11SRichard Henderson 
116c482cb11SRichard Henderson #endif /* CONFIG_SOFTMMU */
117c482cb11SRichard Henderson 
118c482cb11SRichard Henderson GEN_ATOMIC_HELPERS(fetch_add)
119c482cb11SRichard Henderson GEN_ATOMIC_HELPERS(fetch_and)
120c482cb11SRichard Henderson GEN_ATOMIC_HELPERS(fetch_or)
121c482cb11SRichard Henderson GEN_ATOMIC_HELPERS(fetch_xor)
122c482cb11SRichard Henderson 
123c482cb11SRichard Henderson GEN_ATOMIC_HELPERS(add_fetch)
124c482cb11SRichard Henderson GEN_ATOMIC_HELPERS(and_fetch)
125c482cb11SRichard Henderson GEN_ATOMIC_HELPERS(or_fetch)
126c482cb11SRichard Henderson GEN_ATOMIC_HELPERS(xor_fetch)
127c482cb11SRichard Henderson 
128c482cb11SRichard Henderson GEN_ATOMIC_HELPERS(xchg)
129c482cb11SRichard Henderson 
130c482cb11SRichard Henderson #undef GEN_ATOMIC_HELPERS
131