blob: c41d38a557742e93de793a520ad79c065dab9483 [file] [log] [blame]
Richard Henderson944eea92014-04-07 23:08:47 -07001DEF_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)
Blue Swirl96e132e2009-09-20 19:06:34 +00005
Richard Henderson944eea92014-04-07 23:08:47 -07006DEF_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)
Aurelien Jarno31d66552010-03-02 23:16:36 +010010
Richard Henderson944eea92014-04-07 23:08:47 -070011DEF_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)
Blue Swirl96e132e2009-09-20 19:06:34 +000014
Richard Henderson944eea92014-04-07 23:08:47 -070015DEF_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)
Richard Hendersonc482cb12016-06-28 11:37:27 -070017
Richard Henderson0e28d002016-11-16 09:23:28 +010018DEF_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)
Richard Henderson086920c2016-11-16 17:32:48 +010022DEF_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)
Richard Hendersona768e4e2016-11-21 11:13:39 +010024DEF_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)
Richard Henderson0e28d002016-11-16 09:23:28 +010026
Emilio G. Cotacedbcb02017-04-26 23:29:14 -040027DEF_HELPER_FLAGS_2(lookup_tb_ptr, TCG_CALL_NO_WG_SE, ptr, env, tl)
28
Richard Hendersondf79b992016-09-02 12:23:57 -070029DEF_HELPER_FLAGS_1(exit_atomic, TCG_CALL_NO_WG, noreturn, env)
30
Richard Hendersonc482cb12016-06-28 11:37:27 -070031#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)
Richard Hendersonc482cb12016-06-28 11:37:27 -070037DEF_HELPER_FLAGS_5(atomic_cmpxchgw_le, TCG_CALL_NO_WG,
38 i32, env, tl, i32, i32, i32)
Richard Hendersondf79b992016-09-02 12:23:57 -070039DEF_HELPER_FLAGS_5(atomic_cmpxchgl_be, TCG_CALL_NO_WG,
40 i32, env, tl, i32, i32, i32)
Richard Hendersonc482cb12016-06-28 11:37:27 -070041DEF_HELPER_FLAGS_5(atomic_cmpxchgl_le, TCG_CALL_NO_WG,
42 i32, env, tl, i32, i32, i32)
Richard Hendersondf79b992016-09-02 12:23:57 -070043#ifdef CONFIG_ATOMIC64
44DEF_HELPER_FLAGS_5(atomic_cmpxchgq_be, TCG_CALL_NO_WG,
45 i64, env, tl, i64, i64, i32)
Richard Hendersonc482cb12016-06-28 11:37:27 -070046DEF_HELPER_FLAGS_5(atomic_cmpxchgq_le, TCG_CALL_NO_WG,
47 i64, env, tl, i64, i64, i32)
Richard Hendersondf79b992016-09-02 12:23:57 -070048#endif
Richard Hendersonc482cb12016-06-28 11:37:27 -070049
Richard Hendersondf79b992016-09-02 12:23:57 -070050#ifdef CONFIG_ATOMIC64
Richard Hendersonc482cb12016-06-28 11:37:27 -070051#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)
Richard Hendersondf79b992016-09-02 12:23:57 -070066#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 */
Richard Hendersonc482cb12016-06-28 11:37:27 -070079
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)
Richard Hendersonc482cb12016-06-28 11:37:27 -070084DEF_HELPER_FLAGS_4(atomic_cmpxchgw_le, TCG_CALL_NO_WG, i32, env, tl, i32, i32)
Richard Hendersondf79b992016-09-02 12:23:57 -070085DEF_HELPER_FLAGS_4(atomic_cmpxchgl_be, TCG_CALL_NO_WG, i32, env, tl, i32, i32)
Richard Hendersonc482cb12016-06-28 11:37:27 -070086DEF_HELPER_FLAGS_4(atomic_cmpxchgl_le, TCG_CALL_NO_WG, i32, env, tl, i32, i32)
Richard Hendersondf79b992016-09-02 12:23:57 -070087#ifdef CONFIG_ATOMIC64
88DEF_HELPER_FLAGS_4(atomic_cmpxchgq_be, TCG_CALL_NO_WG, i64, env, tl, i64, i64)
Richard Hendersonc482cb12016-06-28 11:37:27 -070089DEF_HELPER_FLAGS_4(atomic_cmpxchgq_le, TCG_CALL_NO_WG, i64, env, tl, i64, i64)
Richard Hendersondf79b992016-09-02 12:23:57 -070090#endif
Richard Hendersonc482cb12016-06-28 11:37:27 -070091
Richard Hendersondf79b992016-09-02 12:23:57 -070092#ifdef CONFIG_ATOMIC64
Richard Hendersonc482cb12016-06-28 11:37:27 -070093#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)
Richard Hendersondf79b992016-09-02 12:23:57 -0700108#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 */
Richard Hendersonc482cb12016-06-28 11:37:27 -0700121
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