| 1 | /* |
| 2 | * AArch64 specific helper definitions |
| 3 | * |
| 4 | * Copyright (c) 2013 Alexander Graf <agraf@suse.de> |
| 5 | * |
| 6 | * This library is free software; you can redistribute it and/or |
| 7 | * modify it under the terms of the GNU Lesser General Public |
| 8 | * License as published by the Free Software Foundation; either |
| 9 | * version 2.1 of the License, or (at your option) any later version. |
| 10 | * |
| 11 | * This library is distributed in the hope that it will be useful, |
| 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| 14 | * Lesser General Public License for more details. |
| 15 | * |
| 16 | * You should have received a copy of the GNU Lesser General Public |
| 17 | * License along with this library; if not, see <http://www.gnu.org/licenses/>. |
| 18 | */ |
| 19 | DEF_HELPER_FLAGS_2(udiv64, TCG_CALL_NO_RWG_SE, i64, i64, i64) |
| 20 | DEF_HELPER_FLAGS_2(sdiv64, TCG_CALL_NO_RWG_SE, s64, s64, s64) |
| 21 | DEF_HELPER_2(msr_i_spsel, void, env, i32) |
| 22 | DEF_HELPER_2(msr_i_daifset, void, env, i32) |
| 23 | DEF_HELPER_2(msr_i_daifclear, void, env, i32) |
| 24 | DEF_HELPER_1(msr_set_allint_el1, void, env) |
| 25 | DEF_HELPER_3(vfp_cmph_a64, i64, f16, f16, fpst) |
| 26 | DEF_HELPER_3(vfp_cmpeh_a64, i64, f16, f16, fpst) |
| 27 | DEF_HELPER_3(vfp_cmps_a64, i64, f32, f32, fpst) |
| 28 | DEF_HELPER_3(vfp_cmpes_a64, i64, f32, f32, fpst) |
| 29 | DEF_HELPER_3(vfp_cmpd_a64, i64, f64, f64, fpst) |
| 30 | DEF_HELPER_3(vfp_cmped_a64, i64, f64, f64, fpst) |
| 31 | DEF_HELPER_FLAGS_4(simd_tblx, TCG_CALL_NO_RWG, void, ptr, ptr, env, i32) |
| 32 | DEF_HELPER_FLAGS_3(vfp_mulxs, TCG_CALL_NO_RWG, f32, f32, f32, fpst) |
| 33 | DEF_HELPER_FLAGS_3(vfp_mulxd, TCG_CALL_NO_RWG, f64, f64, f64, fpst) |
| 34 | DEF_HELPER_FLAGS_3(neon_ceq_f64, TCG_CALL_NO_RWG, i64, i64, i64, fpst) |
| 35 | DEF_HELPER_FLAGS_3(neon_cge_f64, TCG_CALL_NO_RWG, i64, i64, i64, fpst) |
| 36 | DEF_HELPER_FLAGS_3(neon_cgt_f64, TCG_CALL_NO_RWG, i64, i64, i64, fpst) |
| 37 | DEF_HELPER_FLAGS_3(recpsf_f16, TCG_CALL_NO_RWG, f16, f16, f16, fpst) |
| 38 | DEF_HELPER_FLAGS_3(recpsf_f32, TCG_CALL_NO_RWG, f32, f32, f32, fpst) |
| 39 | DEF_HELPER_FLAGS_3(recpsf_f64, TCG_CALL_NO_RWG, f64, f64, f64, fpst) |
| 40 | DEF_HELPER_FLAGS_3(recpsf_ah_f16, TCG_CALL_NO_RWG, f16, f16, f16, fpst) |
| 41 | DEF_HELPER_FLAGS_3(recpsf_ah_f32, TCG_CALL_NO_RWG, f32, f32, f32, fpst) |
| 42 | DEF_HELPER_FLAGS_3(recpsf_ah_f64, TCG_CALL_NO_RWG, f64, f64, f64, fpst) |
| 43 | DEF_HELPER_FLAGS_3(rsqrtsf_f16, TCG_CALL_NO_RWG, f16, f16, f16, fpst) |
| 44 | DEF_HELPER_FLAGS_3(rsqrtsf_f32, TCG_CALL_NO_RWG, f32, f32, f32, fpst) |
| 45 | DEF_HELPER_FLAGS_3(rsqrtsf_f64, TCG_CALL_NO_RWG, f64, f64, f64, fpst) |
| 46 | DEF_HELPER_FLAGS_3(rsqrtsf_ah_f16, TCG_CALL_NO_RWG, f16, f16, f16, fpst) |
| 47 | DEF_HELPER_FLAGS_3(rsqrtsf_ah_f32, TCG_CALL_NO_RWG, f32, f32, f32, fpst) |
| 48 | DEF_HELPER_FLAGS_3(rsqrtsf_ah_f64, TCG_CALL_NO_RWG, f64, f64, f64, fpst) |
| 49 | DEF_HELPER_FLAGS_2(frecpx_f64, TCG_CALL_NO_RWG, f64, f64, fpst) |
| 50 | DEF_HELPER_FLAGS_2(frecpx_f32, TCG_CALL_NO_RWG, f32, f32, fpst) |
| 51 | DEF_HELPER_FLAGS_2(frecpx_f16, TCG_CALL_NO_RWG, f16, f16, fpst) |
| 52 | DEF_HELPER_FLAGS_2(fcvtx_f64_to_f32, TCG_CALL_NO_RWG, f32, f64, fpst) |
| 53 | DEF_HELPER_FLAGS_3(crc32_64, TCG_CALL_NO_RWG_SE, i64, i64, i64, i32) |
| 54 | DEF_HELPER_FLAGS_3(crc32c_64, TCG_CALL_NO_RWG_SE, i64, i64, i64, i32) |
| 55 | DEF_HELPER_3(advsimd_ceq_f16, i32, f16, f16, fpst) |
| 56 | DEF_HELPER_3(advsimd_cge_f16, i32, f16, f16, fpst) |
| 57 | DEF_HELPER_3(advsimd_cgt_f16, i32, f16, f16, fpst) |
| 58 | DEF_HELPER_3(advsimd_acge_f16, i32, f16, f16, fpst) |
| 59 | DEF_HELPER_3(advsimd_acgt_f16, i32, f16, f16, fpst) |
| 60 | DEF_HELPER_3(advsimd_mulxh, f16, f16, f16, fpst) |
| 61 | DEF_HELPER_4(advsimd_muladdh, f16, f16, f16, f16, fpst) |
| 62 | DEF_HELPER_3(advsimd_add2h, i32, i32, i32, fpst) |
| 63 | DEF_HELPER_3(advsimd_sub2h, i32, i32, i32, fpst) |
| 64 | DEF_HELPER_3(advsimd_mul2h, i32, i32, i32, fpst) |
| 65 | DEF_HELPER_3(advsimd_div2h, i32, i32, i32, fpst) |
| 66 | DEF_HELPER_3(advsimd_max2h, i32, i32, i32, fpst) |
| 67 | DEF_HELPER_3(advsimd_min2h, i32, i32, i32, fpst) |
| 68 | DEF_HELPER_3(advsimd_maxnum2h, i32, i32, i32, fpst) |
| 69 | DEF_HELPER_3(advsimd_minnum2h, i32, i32, i32, fpst) |
| 70 | DEF_HELPER_3(advsimd_mulx2h, i32, i32, i32, fpst) |
| 71 | DEF_HELPER_4(advsimd_muladd2h, i32, i32, i32, i32, fpst) |
| 72 | DEF_HELPER_2(advsimd_rinth_exact, f16, f16, fpst) |
| 73 | DEF_HELPER_2(advsimd_rinth, f16, f16, fpst) |
| 74 | |
| 75 | DEF_HELPER_3(vfp_ah_minh, f16, f16, f16, fpst) |
| 76 | DEF_HELPER_3(vfp_ah_mins, f32, f32, f32, fpst) |
| 77 | DEF_HELPER_3(vfp_ah_mind, f64, f64, f64, fpst) |
| 78 | DEF_HELPER_3(vfp_ah_maxh, f16, f16, f16, fpst) |
| 79 | DEF_HELPER_3(vfp_ah_maxs, f32, f32, f32, fpst) |
| 80 | DEF_HELPER_3(vfp_ah_maxd, f64, f64, f64, fpst) |
| 81 | |
| 82 | DEF_HELPER_FLAGS_2(dc_zva, TCG_CALL_NO_WG, void, env, i64) |
| 83 | |
| 84 | DEF_HELPER_FLAGS_3(pacia, TCG_CALL_NO_WG, i64, env, i64, i64) |
| 85 | DEF_HELPER_FLAGS_3(pacib, TCG_CALL_NO_WG, i64, env, i64, i64) |
| 86 | DEF_HELPER_FLAGS_3(pacda, TCG_CALL_NO_WG, i64, env, i64, i64) |
| 87 | DEF_HELPER_FLAGS_3(pacdb, TCG_CALL_NO_WG, i64, env, i64, i64) |
| 88 | DEF_HELPER_FLAGS_3(pacga, TCG_CALL_NO_WG, i64, env, i64, i64) |
| 89 | DEF_HELPER_FLAGS_3(autia, TCG_CALL_NO_WG, i64, env, i64, i64) |
| 90 | DEF_HELPER_FLAGS_3(autia_combined, TCG_CALL_NO_WG, i64, env, i64, i64) |
| 91 | DEF_HELPER_FLAGS_3(autib, TCG_CALL_NO_WG, i64, env, i64, i64) |
| 92 | DEF_HELPER_FLAGS_3(autib_combined, TCG_CALL_NO_WG, i64, env, i64, i64) |
| 93 | DEF_HELPER_FLAGS_3(autda, TCG_CALL_NO_WG, i64, env, i64, i64) |
| 94 | DEF_HELPER_FLAGS_3(autda_combined, TCG_CALL_NO_WG, i64, env, i64, i64) |
| 95 | DEF_HELPER_FLAGS_3(autdb, TCG_CALL_NO_WG, i64, env, i64, i64) |
| 96 | DEF_HELPER_FLAGS_3(autdb_combined, TCG_CALL_NO_WG, i64, env, i64, i64) |
| 97 | DEF_HELPER_FLAGS_2(xpaci, TCG_CALL_NO_RWG_SE, i64, env, i64) |
| 98 | DEF_HELPER_FLAGS_2(xpacd, TCG_CALL_NO_RWG_SE, i64, env, i64) |
| 99 | |
| 100 | DEF_HELPER_FLAGS_3(mte_check, TCG_CALL_NO_WG, i64, env, i32, i64) |
| 101 | DEF_HELPER_FLAGS_3(mte_check_zva, TCG_CALL_NO_WG, i64, env, i32, i64) |
| 102 | DEF_HELPER_FLAGS_3(irg, TCG_CALL_NO_RWG, i64, env, i64, i64) |
| 103 | DEF_HELPER_FLAGS_4(addsubg, TCG_CALL_NO_RWG_SE, i64, env, i64, s32, i32) |
| 104 | DEF_HELPER_FLAGS_4(ldg, TCG_CALL_NO_WG, i64, env, i64, i64, i32) |
| 105 | DEF_HELPER_FLAGS_4(stg, TCG_CALL_NO_WG, void, env, i64, i64, i32) |
| 106 | DEF_HELPER_FLAGS_4(stg_parallel, TCG_CALL_NO_WG, void, env, i64, i64, i32) |
| 107 | DEF_HELPER_FLAGS_2(stg_stub, TCG_CALL_NO_WG, void, env, i64) |
| 108 | DEF_HELPER_FLAGS_4(st2g, TCG_CALL_NO_WG, void, env, i64, i64, i32) |
| 109 | DEF_HELPER_FLAGS_4(st2g_parallel, TCG_CALL_NO_WG, void, env, i64, i64, i32) |
| 110 | DEF_HELPER_FLAGS_2(st2g_stub, TCG_CALL_NO_WG, void, env, i64) |
| 111 | DEF_HELPER_FLAGS_3(ldgm, TCG_CALL_NO_WG, i64, env, i64, i32) |
| 112 | DEF_HELPER_FLAGS_4(stgm, TCG_CALL_NO_WG, void, env, i64, i64, i32) |
| 113 | DEF_HELPER_FLAGS_4(stzgm_tags, TCG_CALL_NO_WG, void, env, i64, i64, i32) |
| 114 | |
| 115 | DEF_HELPER_FLAGS_4(arm_unaligned_access, TCG_CALL_NO_WG, |
| 116 | noreturn, env, i64, i32, i32) |
| 117 | |
| 118 | DEF_HELPER_3(setp, void, env, i32, i32) |
| 119 | DEF_HELPER_3(setm, void, env, i32, i32) |
| 120 | DEF_HELPER_3(sete, void, env, i32, i32) |
| 121 | DEF_HELPER_3(setgp, void, env, i32, i32) |
| 122 | DEF_HELPER_3(setgm, void, env, i32, i32) |
| 123 | DEF_HELPER_3(setge, void, env, i32, i32) |
| 124 | |
| 125 | DEF_HELPER_4(cpyp, void, env, i32, i32, i32) |
| 126 | DEF_HELPER_4(cpym, void, env, i32, i32, i32) |
| 127 | DEF_HELPER_4(cpye, void, env, i32, i32, i32) |
| 128 | DEF_HELPER_4(cpyfp, void, env, i32, i32, i32) |
| 129 | DEF_HELPER_4(cpyfm, void, env, i32, i32, i32) |
| 130 | DEF_HELPER_4(cpyfe, void, env, i32, i32, i32) |
| 131 | |
| 132 | DEF_HELPER_FLAGS_1(guarded_page_check, TCG_CALL_NO_WG, void, env) |
| 133 | DEF_HELPER_FLAGS_2(guarded_page_br, TCG_CALL_NO_RWG, void, env, vaddr) |
| 134 | |
| 135 | DEF_HELPER_FLAGS_5(gvec_fdiv_h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, fpst, i32) |
| 136 | DEF_HELPER_FLAGS_5(gvec_fdiv_s, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, fpst, i32) |
| 137 | DEF_HELPER_FLAGS_5(gvec_fdiv_d, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, fpst, i32) |
| 138 | |
| 139 | DEF_HELPER_FLAGS_5(gvec_fmulx_h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, fpst, i32) |
| 140 | DEF_HELPER_FLAGS_5(gvec_fmulx_s, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, fpst, i32) |
| 141 | DEF_HELPER_FLAGS_5(gvec_fmulx_d, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, fpst, i32) |
| 142 | |
| 143 | DEF_HELPER_FLAGS_5(gvec_fmulx_idx_h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, fpst, i32) |
| 144 | DEF_HELPER_FLAGS_5(gvec_fmulx_idx_s, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, fpst, i32) |
| 145 | DEF_HELPER_FLAGS_5(gvec_fmulx_idx_d, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, fpst, i32) |
| 146 | |
| 147 | DEF_HELPER_FLAGS_5(gvec_famax_h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, fpst, i32) |
| 148 | DEF_HELPER_FLAGS_5(gvec_famin_h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, fpst, i32) |
| 149 | DEF_HELPER_FLAGS_5(gvec_famax_s, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, fpst, i32) |
| 150 | DEF_HELPER_FLAGS_5(gvec_famin_s, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, fpst, i32) |
| 151 | DEF_HELPER_FLAGS_5(gvec_famax_d, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, fpst, i32) |
| 152 | DEF_HELPER_FLAGS_5(gvec_famin_d, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, fpst, i32) |
| 153 | |
| 154 | DEF_HELPER_FLAGS_5(gvec_fscale_b16, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, fpst, i32) |
| 155 | DEF_HELPER_FLAGS_5(gvec_fscale_h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, fpst, i32) |
| 156 | DEF_HELPER_FLAGS_5(gvec_fscale_s, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, fpst, i32) |
| 157 | DEF_HELPER_FLAGS_5(gvec_fscale_d, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, fpst, i32) |
| 158 | |
| 159 | #ifndef CONFIG_USER_ONLY |
| 160 | DEF_HELPER_2(exception_return, void, env, i64) |
| 161 | #endif |