]> git.proxmox.com Git - mirror_qemu.git/blob - tcg/tcg-runtime.h
tcg: Add helpers for clrsb
[mirror_qemu.git] / tcg / tcg-runtime.h
1 DEF_HELPER_FLAGS_2(div_i32, TCG_CALL_NO_RWG_SE, s32, s32, s32)
2 DEF_HELPER_FLAGS_2(rem_i32, TCG_CALL_NO_RWG_SE, s32, s32, s32)
3 DEF_HELPER_FLAGS_2(divu_i32, TCG_CALL_NO_RWG_SE, i32, i32, i32)
4 DEF_HELPER_FLAGS_2(remu_i32, TCG_CALL_NO_RWG_SE, i32, i32, i32)
5
6 DEF_HELPER_FLAGS_2(div_i64, TCG_CALL_NO_RWG_SE, s64, s64, s64)
7 DEF_HELPER_FLAGS_2(rem_i64, TCG_CALL_NO_RWG_SE, s64, s64, s64)
8 DEF_HELPER_FLAGS_2(divu_i64, TCG_CALL_NO_RWG_SE, i64, i64, i64)
9 DEF_HELPER_FLAGS_2(remu_i64, TCG_CALL_NO_RWG_SE, i64, i64, i64)
10
11 DEF_HELPER_FLAGS_2(shl_i64, TCG_CALL_NO_RWG_SE, i64, i64, i64)
12 DEF_HELPER_FLAGS_2(shr_i64, TCG_CALL_NO_RWG_SE, i64, i64, i64)
13 DEF_HELPER_FLAGS_2(sar_i64, TCG_CALL_NO_RWG_SE, s64, s64, s64)
14
15 DEF_HELPER_FLAGS_2(mulsh_i64, TCG_CALL_NO_RWG_SE, s64, s64, s64)
16 DEF_HELPER_FLAGS_2(muluh_i64, TCG_CALL_NO_RWG_SE, i64, i64, i64)
17
18 DEF_HELPER_FLAGS_2(clz_i32, TCG_CALL_NO_RWG_SE, i32, i32, i32)
19 DEF_HELPER_FLAGS_2(ctz_i32, TCG_CALL_NO_RWG_SE, i32, i32, i32)
20 DEF_HELPER_FLAGS_2(clz_i64, TCG_CALL_NO_RWG_SE, i64, i64, i64)
21 DEF_HELPER_FLAGS_2(ctz_i64, TCG_CALL_NO_RWG_SE, i64, i64, i64)
22 DEF_HELPER_FLAGS_1(clrsb_i32, TCG_CALL_NO_RWG_SE, i32, i32)
23 DEF_HELPER_FLAGS_1(clrsb_i64, TCG_CALL_NO_RWG_SE, i64, i64)
24
25 DEF_HELPER_FLAGS_1(exit_atomic, TCG_CALL_NO_WG, noreturn, env)
26
27 #ifdef CONFIG_SOFTMMU
28
29 DEF_HELPER_FLAGS_5(atomic_cmpxchgb, TCG_CALL_NO_WG,
30 i32, env, tl, i32, i32, i32)
31 DEF_HELPER_FLAGS_5(atomic_cmpxchgw_be, TCG_CALL_NO_WG,
32 i32, env, tl, i32, i32, i32)
33 DEF_HELPER_FLAGS_5(atomic_cmpxchgw_le, TCG_CALL_NO_WG,
34 i32, env, tl, i32, i32, i32)
35 DEF_HELPER_FLAGS_5(atomic_cmpxchgl_be, TCG_CALL_NO_WG,
36 i32, env, tl, i32, i32, i32)
37 DEF_HELPER_FLAGS_5(atomic_cmpxchgl_le, TCG_CALL_NO_WG,
38 i32, env, tl, i32, i32, i32)
39 #ifdef CONFIG_ATOMIC64
40 DEF_HELPER_FLAGS_5(atomic_cmpxchgq_be, TCG_CALL_NO_WG,
41 i64, env, tl, i64, i64, i32)
42 DEF_HELPER_FLAGS_5(atomic_cmpxchgq_le, TCG_CALL_NO_WG,
43 i64, env, tl, i64, i64, i32)
44 #endif
45
46 #ifdef CONFIG_ATOMIC64
47 #define GEN_ATOMIC_HELPERS(NAME) \
48 DEF_HELPER_FLAGS_4(glue(glue(atomic_, NAME), b), \
49 TCG_CALL_NO_WG, i32, env, tl, i32, i32) \
50 DEF_HELPER_FLAGS_4(glue(glue(atomic_, NAME), w_le), \
51 TCG_CALL_NO_WG, i32, env, tl, i32, i32) \
52 DEF_HELPER_FLAGS_4(glue(glue(atomic_, NAME), w_be), \
53 TCG_CALL_NO_WG, i32, env, tl, i32, i32) \
54 DEF_HELPER_FLAGS_4(glue(glue(atomic_, NAME), l_le), \
55 TCG_CALL_NO_WG, i32, env, tl, i32, i32) \
56 DEF_HELPER_FLAGS_4(glue(glue(atomic_, NAME), l_be), \
57 TCG_CALL_NO_WG, i32, env, tl, i32, i32) \
58 DEF_HELPER_FLAGS_4(glue(glue(atomic_, NAME), q_le), \
59 TCG_CALL_NO_WG, i64, env, tl, i64, i32) \
60 DEF_HELPER_FLAGS_4(glue(glue(atomic_, NAME), q_be), \
61 TCG_CALL_NO_WG, i64, env, tl, i64, i32)
62 #else
63 #define GEN_ATOMIC_HELPERS(NAME) \
64 DEF_HELPER_FLAGS_4(glue(glue(atomic_, NAME), b), \
65 TCG_CALL_NO_WG, i32, env, tl, i32, i32) \
66 DEF_HELPER_FLAGS_4(glue(glue(atomic_, NAME), w_le), \
67 TCG_CALL_NO_WG, i32, env, tl, i32, i32) \
68 DEF_HELPER_FLAGS_4(glue(glue(atomic_, NAME), w_be), \
69 TCG_CALL_NO_WG, i32, env, tl, i32, i32) \
70 DEF_HELPER_FLAGS_4(glue(glue(atomic_, NAME), l_le), \
71 TCG_CALL_NO_WG, i32, env, tl, i32, i32) \
72 DEF_HELPER_FLAGS_4(glue(glue(atomic_, NAME), l_be), \
73 TCG_CALL_NO_WG, i32, env, tl, i32, i32)
74 #endif /* CONFIG_ATOMIC64 */
75
76 #else
77
78 DEF_HELPER_FLAGS_4(atomic_cmpxchgb, TCG_CALL_NO_WG, i32, env, tl, i32, i32)
79 DEF_HELPER_FLAGS_4(atomic_cmpxchgw_be, TCG_CALL_NO_WG, i32, env, tl, i32, i32)
80 DEF_HELPER_FLAGS_4(atomic_cmpxchgw_le, TCG_CALL_NO_WG, i32, env, tl, i32, i32)
81 DEF_HELPER_FLAGS_4(atomic_cmpxchgl_be, TCG_CALL_NO_WG, i32, env, tl, i32, i32)
82 DEF_HELPER_FLAGS_4(atomic_cmpxchgl_le, TCG_CALL_NO_WG, i32, env, tl, i32, i32)
83 #ifdef CONFIG_ATOMIC64
84 DEF_HELPER_FLAGS_4(atomic_cmpxchgq_be, TCG_CALL_NO_WG, i64, env, tl, i64, i64)
85 DEF_HELPER_FLAGS_4(atomic_cmpxchgq_le, TCG_CALL_NO_WG, i64, env, tl, i64, i64)
86 #endif
87
88 #ifdef CONFIG_ATOMIC64
89 #define GEN_ATOMIC_HELPERS(NAME) \
90 DEF_HELPER_FLAGS_3(glue(glue(atomic_, NAME), b), \
91 TCG_CALL_NO_WG, i32, env, tl, i32) \
92 DEF_HELPER_FLAGS_3(glue(glue(atomic_, NAME), w_le), \
93 TCG_CALL_NO_WG, i32, env, tl, i32) \
94 DEF_HELPER_FLAGS_3(glue(glue(atomic_, NAME), w_be), \
95 TCG_CALL_NO_WG, i32, env, tl, i32) \
96 DEF_HELPER_FLAGS_3(glue(glue(atomic_, NAME), l_le), \
97 TCG_CALL_NO_WG, i32, env, tl, i32) \
98 DEF_HELPER_FLAGS_3(glue(glue(atomic_, NAME), l_be), \
99 TCG_CALL_NO_WG, i32, env, tl, i32) \
100 DEF_HELPER_FLAGS_3(glue(glue(atomic_, NAME), q_le), \
101 TCG_CALL_NO_WG, i64, env, tl, i64) \
102 DEF_HELPER_FLAGS_3(glue(glue(atomic_, NAME), q_be), \
103 TCG_CALL_NO_WG, i64, env, tl, i64)
104 #else
105 #define GEN_ATOMIC_HELPERS(NAME) \
106 DEF_HELPER_FLAGS_3(glue(glue(atomic_, NAME), b), \
107 TCG_CALL_NO_WG, i32, env, tl, i32) \
108 DEF_HELPER_FLAGS_3(glue(glue(atomic_, NAME), w_le), \
109 TCG_CALL_NO_WG, i32, env, tl, i32) \
110 DEF_HELPER_FLAGS_3(glue(glue(atomic_, NAME), w_be), \
111 TCG_CALL_NO_WG, i32, env, tl, i32) \
112 DEF_HELPER_FLAGS_3(glue(glue(atomic_, NAME), l_le), \
113 TCG_CALL_NO_WG, i32, env, tl, i32) \
114 DEF_HELPER_FLAGS_3(glue(glue(atomic_, NAME), l_be), \
115 TCG_CALL_NO_WG, i32, env, tl, i32)
116 #endif /* CONFIG_ATOMIC64 */
117
118 #endif /* CONFIG_SOFTMMU */
119
120 GEN_ATOMIC_HELPERS(fetch_add)
121 GEN_ATOMIC_HELPERS(fetch_and)
122 GEN_ATOMIC_HELPERS(fetch_or)
123 GEN_ATOMIC_HELPERS(fetch_xor)
124
125 GEN_ATOMIC_HELPERS(add_fetch)
126 GEN_ATOMIC_HELPERS(and_fetch)
127 GEN_ATOMIC_HELPERS(or_fetch)
128 GEN_ATOMIC_HELPERS(xor_fetch)
129
130 GEN_ATOMIC_HELPERS(xchg)
131
132 #undef GEN_ATOMIC_HELPERS