tcg: Add atomic helpers
[qemu/ar7.git] / tcg / tcg-runtime.h
blob22367aaf974a12cd9bdc3db3bfc26fbfded1c8fa
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)
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)
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)
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)
18 #ifdef CONFIG_SOFTMMU
20 DEF_HELPER_FLAGS_5(atomic_cmpxchgb, TCG_CALL_NO_WG,
21 i32, env, tl, i32, i32, i32)
22 DEF_HELPER_FLAGS_5(atomic_cmpxchgw_be, TCG_CALL_NO_WG,
23 i32, env, tl, i32, i32, i32)
24 DEF_HELPER_FLAGS_5(atomic_cmpxchgl_be, TCG_CALL_NO_WG,
25 i32, env, tl, i32, i32, i32)
26 DEF_HELPER_FLAGS_5(atomic_cmpxchgq_be, TCG_CALL_NO_WG,
27 i64, env, tl, i64, i64, i32)
28 DEF_HELPER_FLAGS_5(atomic_cmpxchgw_le, TCG_CALL_NO_WG,
29 i32, env, tl, i32, i32, i32)
30 DEF_HELPER_FLAGS_5(atomic_cmpxchgl_le, TCG_CALL_NO_WG,
31 i32, env, tl, i32, i32, i32)
32 DEF_HELPER_FLAGS_5(atomic_cmpxchgq_le, TCG_CALL_NO_WG,
33 i64, env, tl, i64, i64, i32)
35 #define GEN_ATOMIC_HELPERS(NAME) \
36 DEF_HELPER_FLAGS_4(glue(glue(atomic_, NAME), b), \
37 TCG_CALL_NO_WG, i32, env, tl, i32, i32) \
38 DEF_HELPER_FLAGS_4(glue(glue(atomic_, NAME), w_le), \
39 TCG_CALL_NO_WG, i32, env, tl, i32, i32) \
40 DEF_HELPER_FLAGS_4(glue(glue(atomic_, NAME), w_be), \
41 TCG_CALL_NO_WG, i32, env, tl, i32, i32) \
42 DEF_HELPER_FLAGS_4(glue(glue(atomic_, NAME), l_le), \
43 TCG_CALL_NO_WG, i32, env, tl, i32, i32) \
44 DEF_HELPER_FLAGS_4(glue(glue(atomic_, NAME), l_be), \
45 TCG_CALL_NO_WG, i32, env, tl, i32, i32) \
46 DEF_HELPER_FLAGS_4(glue(glue(atomic_, NAME), q_le), \
47 TCG_CALL_NO_WG, i64, env, tl, i64, i32) \
48 DEF_HELPER_FLAGS_4(glue(glue(atomic_, NAME), q_be), \
49 TCG_CALL_NO_WG, i64, env, tl, i64, i32)
51 #else
53 DEF_HELPER_FLAGS_4(atomic_cmpxchgb, TCG_CALL_NO_WG, i32, env, tl, i32, i32)
54 DEF_HELPER_FLAGS_4(atomic_cmpxchgw_be, TCG_CALL_NO_WG, i32, env, tl, i32, i32)
55 DEF_HELPER_FLAGS_4(atomic_cmpxchgl_be, TCG_CALL_NO_WG, i32, env, tl, i32, i32)
56 DEF_HELPER_FLAGS_4(atomic_cmpxchgq_be, TCG_CALL_NO_WG, i64, env, tl, i64, i64)
57 DEF_HELPER_FLAGS_4(atomic_cmpxchgw_le, TCG_CALL_NO_WG, i32, env, tl, i32, i32)
58 DEF_HELPER_FLAGS_4(atomic_cmpxchgl_le, TCG_CALL_NO_WG, i32, env, tl, i32, i32)
59 DEF_HELPER_FLAGS_4(atomic_cmpxchgq_le, TCG_CALL_NO_WG, i64, env, tl, i64, i64)
61 #define GEN_ATOMIC_HELPERS(NAME) \
62 DEF_HELPER_FLAGS_3(glue(glue(atomic_, NAME), b), \
63 TCG_CALL_NO_WG, i32, env, tl, i32) \
64 DEF_HELPER_FLAGS_3(glue(glue(atomic_, NAME), w_le), \
65 TCG_CALL_NO_WG, i32, env, tl, i32) \
66 DEF_HELPER_FLAGS_3(glue(glue(atomic_, NAME), w_be), \
67 TCG_CALL_NO_WG, i32, env, tl, i32) \
68 DEF_HELPER_FLAGS_3(glue(glue(atomic_, NAME), l_le), \
69 TCG_CALL_NO_WG, i32, env, tl, i32) \
70 DEF_HELPER_FLAGS_3(glue(glue(atomic_, NAME), l_be), \
71 TCG_CALL_NO_WG, i32, env, tl, i32) \
72 DEF_HELPER_FLAGS_3(glue(glue(atomic_, NAME), q_le), \
73 TCG_CALL_NO_WG, i64, env, tl, i64) \
74 DEF_HELPER_FLAGS_3(glue(glue(atomic_, NAME), q_be), \
75 TCG_CALL_NO_WG, i64, env, tl, i64)
77 #endif /* CONFIG_SOFTMMU */
79 GEN_ATOMIC_HELPERS(fetch_add)
80 GEN_ATOMIC_HELPERS(fetch_and)
81 GEN_ATOMIC_HELPERS(fetch_or)
82 GEN_ATOMIC_HELPERS(fetch_xor)
84 GEN_ATOMIC_HELPERS(add_fetch)
85 GEN_ATOMIC_HELPERS(and_fetch)
86 GEN_ATOMIC_HELPERS(or_fetch)
87 GEN_ATOMIC_HELPERS(xor_fetch)
89 GEN_ATOMIC_HELPERS(xchg)
91 #undef GEN_ATOMIC_HELPERS