ldst_common.c.inc (8817B)
1 /* 2 * Routines common to user and system emulation of load/store. 3 * 4 * Copyright (c) 2003 Fabrice Bellard 5 * 6 * SPDX-License-Identifier: GPL-2.0-or-later 7 * 8 * This work is licensed under the terms of the GNU GPL, version 2 or later. 9 * See the COPYING file in the top-level directory. 10 */ 11 12 uint32_t cpu_ldub_mmuidx_ra(CPUArchState *env, abi_ptr addr, 13 int mmu_idx, uintptr_t ra) 14 { 15 MemOpIdx oi = make_memop_idx(MO_UB, mmu_idx); 16 return cpu_ldb_mmu(env, addr, oi, ra); 17 } 18 19 int cpu_ldsb_mmuidx_ra(CPUArchState *env, abi_ptr addr, 20 int mmu_idx, uintptr_t ra) 21 { 22 return (int8_t)cpu_ldub_mmuidx_ra(env, addr, mmu_idx, ra); 23 } 24 25 uint32_t cpu_lduw_be_mmuidx_ra(CPUArchState *env, abi_ptr addr, 26 int mmu_idx, uintptr_t ra) 27 { 28 MemOpIdx oi = make_memop_idx(MO_BEUW | MO_UNALN, mmu_idx); 29 return cpu_ldw_be_mmu(env, addr, oi, ra); 30 } 31 32 int cpu_ldsw_be_mmuidx_ra(CPUArchState *env, abi_ptr addr, 33 int mmu_idx, uintptr_t ra) 34 { 35 return (int16_t)cpu_lduw_be_mmuidx_ra(env, addr, mmu_idx, ra); 36 } 37 38 uint32_t cpu_ldl_be_mmuidx_ra(CPUArchState *env, abi_ptr addr, 39 int mmu_idx, uintptr_t ra) 40 { 41 MemOpIdx oi = make_memop_idx(MO_BEUL | MO_UNALN, mmu_idx); 42 return cpu_ldl_be_mmu(env, addr, oi, ra); 43 } 44 45 uint64_t cpu_ldq_be_mmuidx_ra(CPUArchState *env, abi_ptr addr, 46 int mmu_idx, uintptr_t ra) 47 { 48 MemOpIdx oi = make_memop_idx(MO_BEUQ | MO_UNALN, mmu_idx); 49 return cpu_ldq_be_mmu(env, addr, oi, ra); 50 } 51 52 uint32_t cpu_lduw_le_mmuidx_ra(CPUArchState *env, abi_ptr addr, 53 int mmu_idx, uintptr_t ra) 54 { 55 MemOpIdx oi = make_memop_idx(MO_LEUW | MO_UNALN, mmu_idx); 56 return cpu_ldw_le_mmu(env, addr, oi, ra); 57 } 58 59 int cpu_ldsw_le_mmuidx_ra(CPUArchState *env, abi_ptr addr, 60 int mmu_idx, uintptr_t ra) 61 { 62 return (int16_t)cpu_lduw_le_mmuidx_ra(env, addr, mmu_idx, ra); 63 } 64 65 uint32_t cpu_ldl_le_mmuidx_ra(CPUArchState *env, abi_ptr addr, 66 int mmu_idx, uintptr_t ra) 67 { 68 MemOpIdx oi = make_memop_idx(MO_LEUL | MO_UNALN, mmu_idx); 69 return cpu_ldl_le_mmu(env, addr, oi, ra); 70 } 71 72 uint64_t cpu_ldq_le_mmuidx_ra(CPUArchState *env, abi_ptr addr, 73 int mmu_idx, uintptr_t ra) 74 { 75 MemOpIdx oi = make_memop_idx(MO_LEUQ | MO_UNALN, mmu_idx); 76 return cpu_ldq_le_mmu(env, addr, oi, ra); 77 } 78 79 void cpu_stb_mmuidx_ra(CPUArchState *env, abi_ptr addr, uint32_t val, 80 int mmu_idx, uintptr_t ra) 81 { 82 MemOpIdx oi = make_memop_idx(MO_UB, mmu_idx); 83 cpu_stb_mmu(env, addr, val, oi, ra); 84 } 85 86 void cpu_stw_be_mmuidx_ra(CPUArchState *env, abi_ptr addr, uint32_t val, 87 int mmu_idx, uintptr_t ra) 88 { 89 MemOpIdx oi = make_memop_idx(MO_BEUW | MO_UNALN, mmu_idx); 90 cpu_stw_be_mmu(env, addr, val, oi, ra); 91 } 92 93 void cpu_stl_be_mmuidx_ra(CPUArchState *env, abi_ptr addr, uint32_t val, 94 int mmu_idx, uintptr_t ra) 95 { 96 MemOpIdx oi = make_memop_idx(MO_BEUL | MO_UNALN, mmu_idx); 97 cpu_stl_be_mmu(env, addr, val, oi, ra); 98 } 99 100 void cpu_stq_be_mmuidx_ra(CPUArchState *env, abi_ptr addr, uint64_t val, 101 int mmu_idx, uintptr_t ra) 102 { 103 MemOpIdx oi = make_memop_idx(MO_BEUQ | MO_UNALN, mmu_idx); 104 cpu_stq_be_mmu(env, addr, val, oi, ra); 105 } 106 107 void cpu_stw_le_mmuidx_ra(CPUArchState *env, abi_ptr addr, uint32_t val, 108 int mmu_idx, uintptr_t ra) 109 { 110 MemOpIdx oi = make_memop_idx(MO_LEUW | MO_UNALN, mmu_idx); 111 cpu_stw_le_mmu(env, addr, val, oi, ra); 112 } 113 114 void cpu_stl_le_mmuidx_ra(CPUArchState *env, abi_ptr addr, uint32_t val, 115 int mmu_idx, uintptr_t ra) 116 { 117 MemOpIdx oi = make_memop_idx(MO_LEUL | MO_UNALN, mmu_idx); 118 cpu_stl_le_mmu(env, addr, val, oi, ra); 119 } 120 121 void cpu_stq_le_mmuidx_ra(CPUArchState *env, abi_ptr addr, uint64_t val, 122 int mmu_idx, uintptr_t ra) 123 { 124 MemOpIdx oi = make_memop_idx(MO_LEUQ | MO_UNALN, mmu_idx); 125 cpu_stq_le_mmu(env, addr, val, oi, ra); 126 } 127 128 /*--------------------------*/ 129 130 uint32_t cpu_ldub_data_ra(CPUArchState *env, abi_ptr addr, uintptr_t ra) 131 { 132 return cpu_ldub_mmuidx_ra(env, addr, cpu_mmu_index(env, false), ra); 133 } 134 135 int cpu_ldsb_data_ra(CPUArchState *env, abi_ptr addr, uintptr_t ra) 136 { 137 return (int8_t)cpu_ldub_data_ra(env, addr, ra); 138 } 139 140 uint32_t cpu_lduw_be_data_ra(CPUArchState *env, abi_ptr addr, uintptr_t ra) 141 { 142 return cpu_lduw_be_mmuidx_ra(env, addr, cpu_mmu_index(env, false), ra); 143 } 144 145 int cpu_ldsw_be_data_ra(CPUArchState *env, abi_ptr addr, uintptr_t ra) 146 { 147 return (int16_t)cpu_lduw_be_data_ra(env, addr, ra); 148 } 149 150 uint32_t cpu_ldl_be_data_ra(CPUArchState *env, abi_ptr addr, uintptr_t ra) 151 { 152 return cpu_ldl_be_mmuidx_ra(env, addr, cpu_mmu_index(env, false), ra); 153 } 154 155 uint64_t cpu_ldq_be_data_ra(CPUArchState *env, abi_ptr addr, uintptr_t ra) 156 { 157 return cpu_ldq_be_mmuidx_ra(env, addr, cpu_mmu_index(env, false), ra); 158 } 159 160 uint32_t cpu_lduw_le_data_ra(CPUArchState *env, abi_ptr addr, uintptr_t ra) 161 { 162 return cpu_lduw_le_mmuidx_ra(env, addr, cpu_mmu_index(env, false), ra); 163 } 164 165 int cpu_ldsw_le_data_ra(CPUArchState *env, abi_ptr addr, uintptr_t ra) 166 { 167 return (int16_t)cpu_lduw_le_data_ra(env, addr, ra); 168 } 169 170 uint32_t cpu_ldl_le_data_ra(CPUArchState *env, abi_ptr addr, uintptr_t ra) 171 { 172 return cpu_ldl_le_mmuidx_ra(env, addr, cpu_mmu_index(env, false), ra); 173 } 174 175 uint64_t cpu_ldq_le_data_ra(CPUArchState *env, abi_ptr addr, uintptr_t ra) 176 { 177 return cpu_ldq_le_mmuidx_ra(env, addr, cpu_mmu_index(env, false), ra); 178 } 179 180 void cpu_stb_data_ra(CPUArchState *env, abi_ptr addr, 181 uint32_t val, uintptr_t ra) 182 { 183 cpu_stb_mmuidx_ra(env, addr, val, cpu_mmu_index(env, false), ra); 184 } 185 186 void cpu_stw_be_data_ra(CPUArchState *env, abi_ptr addr, 187 uint32_t val, uintptr_t ra) 188 { 189 cpu_stw_be_mmuidx_ra(env, addr, val, cpu_mmu_index(env, false), ra); 190 } 191 192 void cpu_stl_be_data_ra(CPUArchState *env, abi_ptr addr, 193 uint32_t val, uintptr_t ra) 194 { 195 cpu_stl_be_mmuidx_ra(env, addr, val, cpu_mmu_index(env, false), ra); 196 } 197 198 void cpu_stq_be_data_ra(CPUArchState *env, abi_ptr addr, 199 uint64_t val, uintptr_t ra) 200 { 201 cpu_stq_be_mmuidx_ra(env, addr, val, cpu_mmu_index(env, false), ra); 202 } 203 204 void cpu_stw_le_data_ra(CPUArchState *env, abi_ptr addr, 205 uint32_t val, uintptr_t ra) 206 { 207 cpu_stw_le_mmuidx_ra(env, addr, val, cpu_mmu_index(env, false), ra); 208 } 209 210 void cpu_stl_le_data_ra(CPUArchState *env, abi_ptr addr, 211 uint32_t val, uintptr_t ra) 212 { 213 cpu_stl_le_mmuidx_ra(env, addr, val, cpu_mmu_index(env, false), ra); 214 } 215 216 void cpu_stq_le_data_ra(CPUArchState *env, abi_ptr addr, 217 uint64_t val, uintptr_t ra) 218 { 219 cpu_stq_le_mmuidx_ra(env, addr, val, cpu_mmu_index(env, false), ra); 220 } 221 222 /*--------------------------*/ 223 224 uint32_t cpu_ldub_data(CPUArchState *env, abi_ptr addr) 225 { 226 return cpu_ldub_data_ra(env, addr, 0); 227 } 228 229 int cpu_ldsb_data(CPUArchState *env, abi_ptr addr) 230 { 231 return (int8_t)cpu_ldub_data(env, addr); 232 } 233 234 uint32_t cpu_lduw_be_data(CPUArchState *env, abi_ptr addr) 235 { 236 return cpu_lduw_be_data_ra(env, addr, 0); 237 } 238 239 int cpu_ldsw_be_data(CPUArchState *env, abi_ptr addr) 240 { 241 return (int16_t)cpu_lduw_be_data(env, addr); 242 } 243 244 uint32_t cpu_ldl_be_data(CPUArchState *env, abi_ptr addr) 245 { 246 return cpu_ldl_be_data_ra(env, addr, 0); 247 } 248 249 uint64_t cpu_ldq_be_data(CPUArchState *env, abi_ptr addr) 250 { 251 return cpu_ldq_be_data_ra(env, addr, 0); 252 } 253 254 uint32_t cpu_lduw_le_data(CPUArchState *env, abi_ptr addr) 255 { 256 return cpu_lduw_le_data_ra(env, addr, 0); 257 } 258 259 int cpu_ldsw_le_data(CPUArchState *env, abi_ptr addr) 260 { 261 return (int16_t)cpu_lduw_le_data(env, addr); 262 } 263 264 uint32_t cpu_ldl_le_data(CPUArchState *env, abi_ptr addr) 265 { 266 return cpu_ldl_le_data_ra(env, addr, 0); 267 } 268 269 uint64_t cpu_ldq_le_data(CPUArchState *env, abi_ptr addr) 270 { 271 return cpu_ldq_le_data_ra(env, addr, 0); 272 } 273 274 void cpu_stb_data(CPUArchState *env, abi_ptr addr, uint32_t val) 275 { 276 cpu_stb_data_ra(env, addr, val, 0); 277 } 278 279 void cpu_stw_be_data(CPUArchState *env, abi_ptr addr, uint32_t val) 280 { 281 cpu_stw_be_data_ra(env, addr, val, 0); 282 } 283 284 void cpu_stl_be_data(CPUArchState *env, abi_ptr addr, uint32_t val) 285 { 286 cpu_stl_be_data_ra(env, addr, val, 0); 287 } 288 289 void cpu_stq_be_data(CPUArchState *env, abi_ptr addr, uint64_t val) 290 { 291 cpu_stq_be_data_ra(env, addr, val, 0); 292 } 293 294 void cpu_stw_le_data(CPUArchState *env, abi_ptr addr, uint32_t val) 295 { 296 cpu_stw_le_data_ra(env, addr, val, 0); 297 } 298 299 void cpu_stl_le_data(CPUArchState *env, abi_ptr addr, uint32_t val) 300 { 301 cpu_stl_le_data_ra(env, addr, val, 0); 302 } 303 304 void cpu_stq_le_data(CPUArchState *env, abi_ptr addr, uint64_t val) 305 { 306 cpu_stq_le_data_ra(env, addr, val, 0); 307 }