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