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