]> Git Repo - qemu.git/blame - accel/tcg/tcg-runtime.h
tcg: Add generic helpers for saturating arithmetic
[qemu.git] / accel / tcg / tcg-runtime.h
CommitLineData
944eea96
RH
1DEF_HELPER_FLAGS_2(div_i32, TCG_CALL_NO_RWG_SE, s32, s32, s32)
2DEF_HELPER_FLAGS_2(rem_i32, TCG_CALL_NO_RWG_SE, s32, s32, s32)
3DEF_HELPER_FLAGS_2(divu_i32, TCG_CALL_NO_RWG_SE, i32, i32, i32)
4DEF_HELPER_FLAGS_2(remu_i32, TCG_CALL_NO_RWG_SE, i32, i32, i32)
96e132e2 5
944eea96
RH
6DEF_HELPER_FLAGS_2(div_i64, TCG_CALL_NO_RWG_SE, s64, s64, s64)
7DEF_HELPER_FLAGS_2(rem_i64, TCG_CALL_NO_RWG_SE, s64, s64, s64)
8DEF_HELPER_FLAGS_2(divu_i64, TCG_CALL_NO_RWG_SE, i64, i64, i64)
9DEF_HELPER_FLAGS_2(remu_i64, TCG_CALL_NO_RWG_SE, i64, i64, i64)
31d66551 10
944eea96
RH
11DEF_HELPER_FLAGS_2(shl_i64, TCG_CALL_NO_RWG_SE, i64, i64, i64)
12DEF_HELPER_FLAGS_2(shr_i64, TCG_CALL_NO_RWG_SE, i64, i64, i64)
13DEF_HELPER_FLAGS_2(sar_i64, TCG_CALL_NO_RWG_SE, s64, s64, s64)
96e132e2 14
944eea96
RH
15DEF_HELPER_FLAGS_2(mulsh_i64, TCG_CALL_NO_RWG_SE, s64, s64, s64)
16DEF_HELPER_FLAGS_2(muluh_i64, TCG_CALL_NO_RWG_SE, i64, i64, i64)
c482cb11 17
0e28d006
RH
18DEF_HELPER_FLAGS_2(clz_i32, TCG_CALL_NO_RWG_SE, i32, i32, i32)
19DEF_HELPER_FLAGS_2(ctz_i32, TCG_CALL_NO_RWG_SE, i32, i32, i32)
20DEF_HELPER_FLAGS_2(clz_i64, TCG_CALL_NO_RWG_SE, i64, i64, i64)
21DEF_HELPER_FLAGS_2(ctz_i64, TCG_CALL_NO_RWG_SE, i64, i64, i64)
086920c2
RH
22DEF_HELPER_FLAGS_1(clrsb_i32, TCG_CALL_NO_RWG_SE, i32, i32)
23DEF_HELPER_FLAGS_1(clrsb_i64, TCG_CALL_NO_RWG_SE, i64, i64)
a768e4e9
RH
24DEF_HELPER_FLAGS_1(ctpop_i32, TCG_CALL_NO_RWG_SE, i32, i32)
25DEF_HELPER_FLAGS_1(ctpop_i64, TCG_CALL_NO_RWG_SE, i64, i64)
0e28d006 26
7f11636d 27DEF_HELPER_FLAGS_1(lookup_tb_ptr, TCG_CALL_NO_WG_SE, ptr, env)
cedbcb01 28
df79b996
RH
29DEF_HELPER_FLAGS_1(exit_atomic, TCG_CALL_NO_WG, noreturn, env)
30
c482cb11
RH
31#ifdef CONFIG_SOFTMMU
32
33DEF_HELPER_FLAGS_5(atomic_cmpxchgb, TCG_CALL_NO_WG,
34 i32, env, tl, i32, i32, i32)
35DEF_HELPER_FLAGS_5(atomic_cmpxchgw_be, TCG_CALL_NO_WG,
36 i32, env, tl, i32, i32, i32)
c482cb11
RH
37DEF_HELPER_FLAGS_5(atomic_cmpxchgw_le, TCG_CALL_NO_WG,
38 i32, env, tl, i32, i32, i32)
df79b996
RH
39DEF_HELPER_FLAGS_5(atomic_cmpxchgl_be, TCG_CALL_NO_WG,
40 i32, env, tl, i32, i32, i32)
c482cb11
RH
41DEF_HELPER_FLAGS_5(atomic_cmpxchgl_le, TCG_CALL_NO_WG,
42 i32, env, tl, i32, i32, i32)
df79b996
RH
43#ifdef CONFIG_ATOMIC64
44DEF_HELPER_FLAGS_5(atomic_cmpxchgq_be, TCG_CALL_NO_WG,
45 i64, env, tl, i64, i64, i32)
c482cb11
RH
46DEF_HELPER_FLAGS_5(atomic_cmpxchgq_le, TCG_CALL_NO_WG,
47 i64, env, tl, i64, i64, i32)
df79b996 48#endif
c482cb11 49
df79b996 50#ifdef CONFIG_ATOMIC64
c482cb11
RH
51#define GEN_ATOMIC_HELPERS(NAME) \
52 DEF_HELPER_FLAGS_4(glue(glue(atomic_, NAME), b), \
53 TCG_CALL_NO_WG, i32, env, tl, i32, i32) \
54 DEF_HELPER_FLAGS_4(glue(glue(atomic_, NAME), w_le), \
55 TCG_CALL_NO_WG, i32, env, tl, i32, i32) \
56 DEF_HELPER_FLAGS_4(glue(glue(atomic_, NAME), w_be), \
57 TCG_CALL_NO_WG, i32, env, tl, i32, i32) \
58 DEF_HELPER_FLAGS_4(glue(glue(atomic_, NAME), l_le), \
59 TCG_CALL_NO_WG, i32, env, tl, i32, i32) \
60 DEF_HELPER_FLAGS_4(glue(glue(atomic_, NAME), l_be), \
61 TCG_CALL_NO_WG, i32, env, tl, i32, i32) \
62 DEF_HELPER_FLAGS_4(glue(glue(atomic_, NAME), q_le), \
63 TCG_CALL_NO_WG, i64, env, tl, i64, i32) \
64 DEF_HELPER_FLAGS_4(glue(glue(atomic_, NAME), q_be), \
65 TCG_CALL_NO_WG, i64, env, tl, i64, i32)
df79b996
RH
66#else
67#define GEN_ATOMIC_HELPERS(NAME) \
68 DEF_HELPER_FLAGS_4(glue(glue(atomic_, NAME), b), \
69 TCG_CALL_NO_WG, i32, env, tl, i32, i32) \
70 DEF_HELPER_FLAGS_4(glue(glue(atomic_, NAME), w_le), \
71 TCG_CALL_NO_WG, i32, env, tl, i32, i32) \
72 DEF_HELPER_FLAGS_4(glue(glue(atomic_, NAME), w_be), \
73 TCG_CALL_NO_WG, i32, env, tl, i32, i32) \
74 DEF_HELPER_FLAGS_4(glue(glue(atomic_, NAME), l_le), \
75 TCG_CALL_NO_WG, i32, env, tl, i32, i32) \
76 DEF_HELPER_FLAGS_4(glue(glue(atomic_, NAME), l_be), \
77 TCG_CALL_NO_WG, i32, env, tl, i32, i32)
78#endif /* CONFIG_ATOMIC64 */
c482cb11
RH
79
80#else
81
82DEF_HELPER_FLAGS_4(atomic_cmpxchgb, TCG_CALL_NO_WG, i32, env, tl, i32, i32)
83DEF_HELPER_FLAGS_4(atomic_cmpxchgw_be, TCG_CALL_NO_WG, i32, env, tl, i32, i32)
c482cb11 84DEF_HELPER_FLAGS_4(atomic_cmpxchgw_le, TCG_CALL_NO_WG, i32, env, tl, i32, i32)
df79b996 85DEF_HELPER_FLAGS_4(atomic_cmpxchgl_be, TCG_CALL_NO_WG, i32, env, tl, i32, i32)
c482cb11 86DEF_HELPER_FLAGS_4(atomic_cmpxchgl_le, TCG_CALL_NO_WG, i32, env, tl, i32, i32)
df79b996
RH
87#ifdef CONFIG_ATOMIC64
88DEF_HELPER_FLAGS_4(atomic_cmpxchgq_be, TCG_CALL_NO_WG, i64, env, tl, i64, i64)
c482cb11 89DEF_HELPER_FLAGS_4(atomic_cmpxchgq_le, TCG_CALL_NO_WG, i64, env, tl, i64, i64)
df79b996 90#endif
c482cb11 91
df79b996 92#ifdef CONFIG_ATOMIC64
c482cb11
RH
93#define GEN_ATOMIC_HELPERS(NAME) \
94 DEF_HELPER_FLAGS_3(glue(glue(atomic_, NAME), b), \
95 TCG_CALL_NO_WG, i32, env, tl, i32) \
96 DEF_HELPER_FLAGS_3(glue(glue(atomic_, NAME), w_le), \
97 TCG_CALL_NO_WG, i32, env, tl, i32) \
98 DEF_HELPER_FLAGS_3(glue(glue(atomic_, NAME), w_be), \
99 TCG_CALL_NO_WG, i32, env, tl, i32) \
100 DEF_HELPER_FLAGS_3(glue(glue(atomic_, NAME), l_le), \
101 TCG_CALL_NO_WG, i32, env, tl, i32) \
102 DEF_HELPER_FLAGS_3(glue(glue(atomic_, NAME), l_be), \
103 TCG_CALL_NO_WG, i32, env, tl, i32) \
104 DEF_HELPER_FLAGS_3(glue(glue(atomic_, NAME), q_le), \
105 TCG_CALL_NO_WG, i64, env, tl, i64) \
106 DEF_HELPER_FLAGS_3(glue(glue(atomic_, NAME), q_be), \
107 TCG_CALL_NO_WG, i64, env, tl, i64)
df79b996
RH
108#else
109#define GEN_ATOMIC_HELPERS(NAME) \
110 DEF_HELPER_FLAGS_3(glue(glue(atomic_, NAME), b), \
111 TCG_CALL_NO_WG, i32, env, tl, i32) \
112 DEF_HELPER_FLAGS_3(glue(glue(atomic_, NAME), w_le), \
113 TCG_CALL_NO_WG, i32, env, tl, i32) \
114 DEF_HELPER_FLAGS_3(glue(glue(atomic_, NAME), w_be), \
115 TCG_CALL_NO_WG, i32, env, tl, i32) \
116 DEF_HELPER_FLAGS_3(glue(glue(atomic_, NAME), l_le), \
117 TCG_CALL_NO_WG, i32, env, tl, i32) \
118 DEF_HELPER_FLAGS_3(glue(glue(atomic_, NAME), l_be), \
119 TCG_CALL_NO_WG, i32, env, tl, i32)
120#endif /* CONFIG_ATOMIC64 */
c482cb11
RH
121
122#endif /* CONFIG_SOFTMMU */
123
124GEN_ATOMIC_HELPERS(fetch_add)
125GEN_ATOMIC_HELPERS(fetch_and)
126GEN_ATOMIC_HELPERS(fetch_or)
127GEN_ATOMIC_HELPERS(fetch_xor)
128
129GEN_ATOMIC_HELPERS(add_fetch)
130GEN_ATOMIC_HELPERS(and_fetch)
131GEN_ATOMIC_HELPERS(or_fetch)
132GEN_ATOMIC_HELPERS(xor_fetch)
133
134GEN_ATOMIC_HELPERS(xchg)
135
136#undef GEN_ATOMIC_HELPERS
db432672
RH
137
138DEF_HELPER_FLAGS_3(gvec_mov, TCG_CALL_NO_RWG, void, ptr, ptr, i32)
139
140DEF_HELPER_FLAGS_3(gvec_dup8, TCG_CALL_NO_RWG, void, ptr, i32, i32)
141DEF_HELPER_FLAGS_3(gvec_dup16, TCG_CALL_NO_RWG, void, ptr, i32, i32)
142DEF_HELPER_FLAGS_3(gvec_dup32, TCG_CALL_NO_RWG, void, ptr, i32, i32)
143DEF_HELPER_FLAGS_3(gvec_dup64, TCG_CALL_NO_RWG, void, ptr, i32, i64)
144
145DEF_HELPER_FLAGS_4(gvec_add8, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32)
146DEF_HELPER_FLAGS_4(gvec_add16, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32)
147DEF_HELPER_FLAGS_4(gvec_add32, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32)
148DEF_HELPER_FLAGS_4(gvec_add64, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32)
149
150DEF_HELPER_FLAGS_4(gvec_sub8, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32)
151DEF_HELPER_FLAGS_4(gvec_sub16, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32)
152DEF_HELPER_FLAGS_4(gvec_sub32, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32)
153DEF_HELPER_FLAGS_4(gvec_sub64, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32)
154
3774030a
RH
155DEF_HELPER_FLAGS_4(gvec_mul8, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32)
156DEF_HELPER_FLAGS_4(gvec_mul16, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32)
157DEF_HELPER_FLAGS_4(gvec_mul32, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32)
158DEF_HELPER_FLAGS_4(gvec_mul64, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32)
159
f49b12c6
RH
160DEF_HELPER_FLAGS_4(gvec_ssadd8, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32)
161DEF_HELPER_FLAGS_4(gvec_ssadd16, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32)
162DEF_HELPER_FLAGS_4(gvec_ssadd32, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32)
163DEF_HELPER_FLAGS_4(gvec_ssadd64, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32)
164
165DEF_HELPER_FLAGS_4(gvec_sssub8, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32)
166DEF_HELPER_FLAGS_4(gvec_sssub16, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32)
167DEF_HELPER_FLAGS_4(gvec_sssub32, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32)
168DEF_HELPER_FLAGS_4(gvec_sssub64, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32)
169
170DEF_HELPER_FLAGS_4(gvec_usadd8, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32)
171DEF_HELPER_FLAGS_4(gvec_usadd16, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32)
172DEF_HELPER_FLAGS_4(gvec_usadd32, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32)
173DEF_HELPER_FLAGS_4(gvec_usadd64, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32)
174
175DEF_HELPER_FLAGS_4(gvec_ussub8, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32)
176DEF_HELPER_FLAGS_4(gvec_ussub16, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32)
177DEF_HELPER_FLAGS_4(gvec_ussub32, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32)
178DEF_HELPER_FLAGS_4(gvec_ussub64, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32)
179
db432672
RH
180DEF_HELPER_FLAGS_3(gvec_neg8, TCG_CALL_NO_RWG, void, ptr, ptr, i32)
181DEF_HELPER_FLAGS_3(gvec_neg16, TCG_CALL_NO_RWG, void, ptr, ptr, i32)
182DEF_HELPER_FLAGS_3(gvec_neg32, TCG_CALL_NO_RWG, void, ptr, ptr, i32)
183DEF_HELPER_FLAGS_3(gvec_neg64, TCG_CALL_NO_RWG, void, ptr, ptr, i32)
184
185DEF_HELPER_FLAGS_3(gvec_not, TCG_CALL_NO_RWG, void, ptr, ptr, i32)
186DEF_HELPER_FLAGS_4(gvec_and, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32)
187DEF_HELPER_FLAGS_4(gvec_or, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32)
188DEF_HELPER_FLAGS_4(gvec_xor, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32)
189DEF_HELPER_FLAGS_4(gvec_andc, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32)
190DEF_HELPER_FLAGS_4(gvec_orc, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32)
d0ec9796
RH
191
192DEF_HELPER_FLAGS_3(gvec_shl8i, TCG_CALL_NO_RWG, void, ptr, ptr, i32)
193DEF_HELPER_FLAGS_3(gvec_shl16i, TCG_CALL_NO_RWG, void, ptr, ptr, i32)
194DEF_HELPER_FLAGS_3(gvec_shl32i, TCG_CALL_NO_RWG, void, ptr, ptr, i32)
195DEF_HELPER_FLAGS_3(gvec_shl64i, TCG_CALL_NO_RWG, void, ptr, ptr, i32)
196
197DEF_HELPER_FLAGS_3(gvec_shr8i, TCG_CALL_NO_RWG, void, ptr, ptr, i32)
198DEF_HELPER_FLAGS_3(gvec_shr16i, TCG_CALL_NO_RWG, void, ptr, ptr, i32)
199DEF_HELPER_FLAGS_3(gvec_shr32i, TCG_CALL_NO_RWG, void, ptr, ptr, i32)
200DEF_HELPER_FLAGS_3(gvec_shr64i, TCG_CALL_NO_RWG, void, ptr, ptr, i32)
201
202DEF_HELPER_FLAGS_3(gvec_sar8i, TCG_CALL_NO_RWG, void, ptr, ptr, i32)
203DEF_HELPER_FLAGS_3(gvec_sar16i, TCG_CALL_NO_RWG, void, ptr, ptr, i32)
204DEF_HELPER_FLAGS_3(gvec_sar32i, TCG_CALL_NO_RWG, void, ptr, ptr, i32)
205DEF_HELPER_FLAGS_3(gvec_sar64i, TCG_CALL_NO_RWG, void, ptr, ptr, i32)
212be173
RH
206
207DEF_HELPER_FLAGS_4(gvec_eq8, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32)
208DEF_HELPER_FLAGS_4(gvec_eq16, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32)
209DEF_HELPER_FLAGS_4(gvec_eq32, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32)
210DEF_HELPER_FLAGS_4(gvec_eq64, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32)
211
212DEF_HELPER_FLAGS_4(gvec_ne8, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32)
213DEF_HELPER_FLAGS_4(gvec_ne16, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32)
214DEF_HELPER_FLAGS_4(gvec_ne32, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32)
215DEF_HELPER_FLAGS_4(gvec_ne64, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32)
216
217DEF_HELPER_FLAGS_4(gvec_lt8, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32)
218DEF_HELPER_FLAGS_4(gvec_lt16, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32)
219DEF_HELPER_FLAGS_4(gvec_lt32, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32)
220DEF_HELPER_FLAGS_4(gvec_lt64, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32)
221
222DEF_HELPER_FLAGS_4(gvec_le8, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32)
223DEF_HELPER_FLAGS_4(gvec_le16, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32)
224DEF_HELPER_FLAGS_4(gvec_le32, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32)
225DEF_HELPER_FLAGS_4(gvec_le64, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32)
226
227DEF_HELPER_FLAGS_4(gvec_ltu8, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32)
228DEF_HELPER_FLAGS_4(gvec_ltu16, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32)
229DEF_HELPER_FLAGS_4(gvec_ltu32, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32)
230DEF_HELPER_FLAGS_4(gvec_ltu64, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32)
231
232DEF_HELPER_FLAGS_4(gvec_leu8, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32)
233DEF_HELPER_FLAGS_4(gvec_leu16, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32)
234DEF_HELPER_FLAGS_4(gvec_leu32, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32)
235DEF_HELPER_FLAGS_4(gvec_leu64, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32)
This page took 0.641212 seconds and 4 git commands to generate.