1f83bcecbSRichard Henderson/* 2f83bcecbSRichard Henderson * Routines common to user and system emulation of load/store. 3f83bcecbSRichard Henderson * 4f83bcecbSRichard Henderson * Copyright (c) 2003 Fabrice Bellard 5f83bcecbSRichard Henderson * 6f83bcecbSRichard Henderson * SPDX-License-Identifier: GPL-2.0-or-later 7f83bcecbSRichard Henderson * 8f83bcecbSRichard Henderson * This work is licensed under the terms of the GNU GPL, version 2 or later. 9f83bcecbSRichard Henderson * See the COPYING file in the top-level directory. 10f83bcecbSRichard Henderson */ 1127c46fadSAnton Johansson/* 1227c46fadSAnton Johansson * Load helpers for tcg-ldst.h 1327c46fadSAnton Johansson */ 1427c46fadSAnton Johansson 1527c46fadSAnton Johanssontcg_target_ulong helper_ldub_mmu(CPUArchState *env, uint64_t addr, 1627c46fadSAnton Johansson MemOpIdx oi, uintptr_t retaddr) 1727c46fadSAnton Johansson{ 1827c46fadSAnton Johansson tcg_debug_assert((get_memop(oi) & MO_SIZE) == MO_8); 1927c46fadSAnton Johansson return do_ld1_mmu(env_cpu(env), addr, oi, retaddr, MMU_DATA_LOAD); 2027c46fadSAnton Johansson} 2127c46fadSAnton Johansson 2227c46fadSAnton Johanssontcg_target_ulong helper_lduw_mmu(CPUArchState *env, uint64_t addr, 2327c46fadSAnton Johansson MemOpIdx oi, uintptr_t retaddr) 2427c46fadSAnton Johansson{ 2527c46fadSAnton Johansson tcg_debug_assert((get_memop(oi) & MO_SIZE) == MO_16); 2627c46fadSAnton Johansson return do_ld2_mmu(env_cpu(env), addr, oi, retaddr, MMU_DATA_LOAD); 2727c46fadSAnton Johansson} 2827c46fadSAnton Johansson 2927c46fadSAnton Johanssontcg_target_ulong helper_ldul_mmu(CPUArchState *env, uint64_t addr, 3027c46fadSAnton Johansson MemOpIdx oi, uintptr_t retaddr) 3127c46fadSAnton Johansson{ 3227c46fadSAnton Johansson tcg_debug_assert((get_memop(oi) & MO_SIZE) == MO_32); 3327c46fadSAnton Johansson return do_ld4_mmu(env_cpu(env), addr, oi, retaddr, MMU_DATA_LOAD); 3427c46fadSAnton Johansson} 3527c46fadSAnton Johansson 3627c46fadSAnton Johanssonuint64_t helper_ldq_mmu(CPUArchState *env, uint64_t addr, 3727c46fadSAnton Johansson MemOpIdx oi, uintptr_t retaddr) 3827c46fadSAnton Johansson{ 3927c46fadSAnton Johansson tcg_debug_assert((get_memop(oi) & MO_SIZE) == MO_64); 4027c46fadSAnton Johansson return do_ld8_mmu(env_cpu(env), addr, oi, retaddr, MMU_DATA_LOAD); 4127c46fadSAnton Johansson} 4227c46fadSAnton Johansson 4327c46fadSAnton Johansson/* 4427c46fadSAnton Johansson * Provide signed versions of the load routines as well. We can of course 4527c46fadSAnton Johansson * avoid this for 64-bit data, or for 32-bit data on 32-bit host. 4627c46fadSAnton Johansson */ 4727c46fadSAnton Johansson 4827c46fadSAnton Johanssontcg_target_ulong helper_ldsb_mmu(CPUArchState *env, uint64_t addr, 4927c46fadSAnton Johansson MemOpIdx oi, uintptr_t retaddr) 5027c46fadSAnton Johansson{ 5127c46fadSAnton Johansson return (int8_t)helper_ldub_mmu(env, addr, oi, retaddr); 5227c46fadSAnton Johansson} 5327c46fadSAnton Johansson 5427c46fadSAnton Johanssontcg_target_ulong helper_ldsw_mmu(CPUArchState *env, uint64_t addr, 5527c46fadSAnton Johansson MemOpIdx oi, uintptr_t retaddr) 5627c46fadSAnton Johansson{ 5727c46fadSAnton Johansson return (int16_t)helper_lduw_mmu(env, addr, oi, retaddr); 5827c46fadSAnton Johansson} 5927c46fadSAnton Johansson 6027c46fadSAnton Johanssontcg_target_ulong helper_ldsl_mmu(CPUArchState *env, uint64_t addr, 6127c46fadSAnton Johansson MemOpIdx oi, uintptr_t retaddr) 6227c46fadSAnton Johansson{ 6327c46fadSAnton Johansson return (int32_t)helper_ldul_mmu(env, addr, oi, retaddr); 6427c46fadSAnton Johansson} 6527c46fadSAnton Johansson 6627c46fadSAnton JohanssonInt128 helper_ld16_mmu(CPUArchState *env, uint64_t addr, 6727c46fadSAnton Johansson MemOpIdx oi, uintptr_t retaddr) 6827c46fadSAnton Johansson{ 6927c46fadSAnton Johansson tcg_debug_assert((get_memop(oi) & MO_SIZE) == MO_128); 7027c46fadSAnton Johansson return do_ld16_mmu(env_cpu(env), addr, oi, retaddr); 7127c46fadSAnton Johansson} 7227c46fadSAnton Johansson 7327c46fadSAnton JohanssonInt128 helper_ld_i128(CPUArchState *env, uint64_t addr, uint32_t oi) 7427c46fadSAnton Johansson{ 7527c46fadSAnton Johansson return helper_ld16_mmu(env, addr, oi, GETPC()); 7627c46fadSAnton Johansson} 7727c46fadSAnton Johansson 7827c46fadSAnton Johansson/* 7927c46fadSAnton Johansson * Store helpers for tcg-ldst.h 8027c46fadSAnton Johansson */ 8127c46fadSAnton Johansson 8227c46fadSAnton Johanssonvoid helper_stb_mmu(CPUArchState *env, uint64_t addr, uint32_t val, 8327c46fadSAnton Johansson MemOpIdx oi, uintptr_t ra) 8427c46fadSAnton Johansson{ 8527c46fadSAnton Johansson tcg_debug_assert((get_memop(oi) & MO_SIZE) == MO_8); 8627c46fadSAnton Johansson do_st1_mmu(env_cpu(env), addr, val, oi, ra); 8727c46fadSAnton Johansson} 8827c46fadSAnton Johansson 8927c46fadSAnton Johanssonvoid helper_stw_mmu(CPUArchState *env, uint64_t addr, uint32_t val, 9027c46fadSAnton Johansson MemOpIdx oi, uintptr_t retaddr) 9127c46fadSAnton Johansson{ 9227c46fadSAnton Johansson tcg_debug_assert((get_memop(oi) & MO_SIZE) == MO_16); 9327c46fadSAnton Johansson do_st2_mmu(env_cpu(env), addr, val, oi, retaddr); 9427c46fadSAnton Johansson} 9527c46fadSAnton Johansson 9627c46fadSAnton Johanssonvoid helper_stl_mmu(CPUArchState *env, uint64_t addr, uint32_t val, 9727c46fadSAnton Johansson MemOpIdx oi, uintptr_t retaddr) 9827c46fadSAnton Johansson{ 9927c46fadSAnton Johansson tcg_debug_assert((get_memop(oi) & MO_SIZE) == MO_32); 10027c46fadSAnton Johansson do_st4_mmu(env_cpu(env), addr, val, oi, retaddr); 10127c46fadSAnton Johansson} 10227c46fadSAnton Johansson 10327c46fadSAnton Johanssonvoid helper_stq_mmu(CPUArchState *env, uint64_t addr, uint64_t val, 10427c46fadSAnton Johansson MemOpIdx oi, uintptr_t retaddr) 10527c46fadSAnton Johansson{ 10627c46fadSAnton Johansson tcg_debug_assert((get_memop(oi) & MO_SIZE) == MO_64); 10727c46fadSAnton Johansson do_st8_mmu(env_cpu(env), addr, val, oi, retaddr); 10827c46fadSAnton Johansson} 10927c46fadSAnton Johansson 11027c46fadSAnton Johanssonvoid helper_st16_mmu(CPUArchState *env, uint64_t addr, Int128 val, 11127c46fadSAnton Johansson MemOpIdx oi, uintptr_t retaddr) 11227c46fadSAnton Johansson{ 11327c46fadSAnton Johansson tcg_debug_assert((get_memop(oi) & MO_SIZE) == MO_128); 11427c46fadSAnton Johansson do_st16_mmu(env_cpu(env), addr, val, oi, retaddr); 11527c46fadSAnton Johansson} 11627c46fadSAnton Johansson 11727c46fadSAnton Johanssonvoid helper_st_i128(CPUArchState *env, uint64_t addr, Int128 val, MemOpIdx oi) 11827c46fadSAnton Johansson{ 11927c46fadSAnton Johansson helper_st16_mmu(env, addr, val, oi, GETPC()); 12027c46fadSAnton Johansson} 12127c46fadSAnton Johansson 12227c46fadSAnton Johansson/* 12327c46fadSAnton Johansson * Load helpers for cpu_ldst.h 12427c46fadSAnton Johansson */ 12527c46fadSAnton Johansson 126*b709da5dSPierrick Bouvierstatic void plugin_load_cb(CPUArchState *env, abi_ptr addr, 127*b709da5dSPierrick Bouvier uint64_t value_low, 128*b709da5dSPierrick Bouvier uint64_t value_high, 129*b709da5dSPierrick Bouvier MemOpIdx oi) 13027c46fadSAnton Johansson{ 131fce3d480SMax Chou if (cpu_plugin_mem_cbs_enabled(env_cpu(env))) { 132*b709da5dSPierrick Bouvier qemu_plugin_vcpu_mem_cb(env_cpu(env), addr, 133*b709da5dSPierrick Bouvier value_low, value_high, 134*b709da5dSPierrick Bouvier oi, QEMU_PLUGIN_MEM_R); 13527c46fadSAnton Johansson } 136fce3d480SMax Chou} 13727c46fadSAnton Johansson 13827c46fadSAnton Johanssonuint8_t cpu_ldb_mmu(CPUArchState *env, abi_ptr addr, MemOpIdx oi, uintptr_t ra) 13927c46fadSAnton Johansson{ 14027c46fadSAnton Johansson uint8_t ret; 14127c46fadSAnton Johansson 14227c46fadSAnton Johansson tcg_debug_assert((get_memop(oi) & MO_SIZE) == MO_UB); 14327c46fadSAnton Johansson ret = do_ld1_mmu(env_cpu(env), addr, oi, ra, MMU_DATA_LOAD); 144*b709da5dSPierrick Bouvier plugin_load_cb(env, addr, ret, 0, oi); 14527c46fadSAnton Johansson return ret; 14627c46fadSAnton Johansson} 14727c46fadSAnton Johansson 14827c46fadSAnton Johanssonuint16_t cpu_ldw_mmu(CPUArchState *env, abi_ptr addr, 14927c46fadSAnton Johansson MemOpIdx oi, uintptr_t ra) 15027c46fadSAnton Johansson{ 15127c46fadSAnton Johansson uint16_t ret; 15227c46fadSAnton Johansson 15327c46fadSAnton Johansson tcg_debug_assert((get_memop(oi) & MO_SIZE) == MO_16); 15427c46fadSAnton Johansson ret = do_ld2_mmu(env_cpu(env), addr, oi, ra, MMU_DATA_LOAD); 155*b709da5dSPierrick Bouvier plugin_load_cb(env, addr, ret, 0, oi); 15627c46fadSAnton Johansson return ret; 15727c46fadSAnton Johansson} 15827c46fadSAnton Johansson 15927c46fadSAnton Johanssonuint32_t cpu_ldl_mmu(CPUArchState *env, abi_ptr addr, 16027c46fadSAnton Johansson MemOpIdx oi, uintptr_t ra) 16127c46fadSAnton Johansson{ 16227c46fadSAnton Johansson uint32_t ret; 16327c46fadSAnton Johansson 16427c46fadSAnton Johansson tcg_debug_assert((get_memop(oi) & MO_SIZE) == MO_32); 16527c46fadSAnton Johansson ret = do_ld4_mmu(env_cpu(env), addr, oi, ra, MMU_DATA_LOAD); 166*b709da5dSPierrick Bouvier plugin_load_cb(env, addr, ret, 0, oi); 16727c46fadSAnton Johansson return ret; 16827c46fadSAnton Johansson} 16927c46fadSAnton Johansson 17027c46fadSAnton Johanssonuint64_t cpu_ldq_mmu(CPUArchState *env, abi_ptr addr, 17127c46fadSAnton Johansson MemOpIdx oi, uintptr_t ra) 17227c46fadSAnton Johansson{ 17327c46fadSAnton Johansson uint64_t ret; 17427c46fadSAnton Johansson 17527c46fadSAnton Johansson tcg_debug_assert((get_memop(oi) & MO_SIZE) == MO_64); 17627c46fadSAnton Johansson ret = do_ld8_mmu(env_cpu(env), addr, oi, ra, MMU_DATA_LOAD); 177*b709da5dSPierrick Bouvier plugin_load_cb(env, addr, ret, 0, oi); 17827c46fadSAnton Johansson return ret; 17927c46fadSAnton Johansson} 18027c46fadSAnton Johansson 18127c46fadSAnton JohanssonInt128 cpu_ld16_mmu(CPUArchState *env, abi_ptr addr, 18227c46fadSAnton Johansson MemOpIdx oi, uintptr_t ra) 18327c46fadSAnton Johansson{ 18427c46fadSAnton Johansson Int128 ret; 18527c46fadSAnton Johansson 18627c46fadSAnton Johansson tcg_debug_assert((get_memop(oi) & MO_SIZE) == MO_128); 18727c46fadSAnton Johansson ret = do_ld16_mmu(env_cpu(env), addr, oi, ra); 188*b709da5dSPierrick Bouvier plugin_load_cb(env, addr, int128_getlo(ret), int128_gethi(ret), oi); 18927c46fadSAnton Johansson return ret; 19027c46fadSAnton Johansson} 19127c46fadSAnton Johansson 19227c46fadSAnton Johansson/* 19327c46fadSAnton Johansson * Store helpers for cpu_ldst.h 19427c46fadSAnton Johansson */ 19527c46fadSAnton Johansson 196*b709da5dSPierrick Bouvierstatic void plugin_store_cb(CPUArchState *env, abi_ptr addr, 197*b709da5dSPierrick Bouvier uint64_t value_low, 198*b709da5dSPierrick Bouvier uint64_t value_high, 199*b709da5dSPierrick Bouvier MemOpIdx oi) 20027c46fadSAnton Johansson{ 201fce3d480SMax Chou if (cpu_plugin_mem_cbs_enabled(env_cpu(env))) { 202*b709da5dSPierrick Bouvier qemu_plugin_vcpu_mem_cb(env_cpu(env), addr, 203*b709da5dSPierrick Bouvier value_low, value_high, 204*b709da5dSPierrick Bouvier oi, QEMU_PLUGIN_MEM_W); 20527c46fadSAnton Johansson } 206fce3d480SMax Chou} 20727c46fadSAnton Johansson 20827c46fadSAnton Johanssonvoid cpu_stb_mmu(CPUArchState *env, abi_ptr addr, uint8_t val, 20927c46fadSAnton Johansson MemOpIdx oi, uintptr_t retaddr) 21027c46fadSAnton Johansson{ 21127c46fadSAnton Johansson helper_stb_mmu(env, addr, val, oi, retaddr); 212*b709da5dSPierrick Bouvier plugin_store_cb(env, addr, val, 0, oi); 21327c46fadSAnton Johansson} 21427c46fadSAnton Johansson 21527c46fadSAnton Johanssonvoid cpu_stw_mmu(CPUArchState *env, abi_ptr addr, uint16_t val, 21627c46fadSAnton Johansson MemOpIdx oi, uintptr_t retaddr) 21727c46fadSAnton Johansson{ 21827c46fadSAnton Johansson tcg_debug_assert((get_memop(oi) & MO_SIZE) == MO_16); 21927c46fadSAnton Johansson do_st2_mmu(env_cpu(env), addr, val, oi, retaddr); 220*b709da5dSPierrick Bouvier plugin_store_cb(env, addr, val, 0, oi); 22127c46fadSAnton Johansson} 22227c46fadSAnton Johansson 22327c46fadSAnton Johanssonvoid cpu_stl_mmu(CPUArchState *env, abi_ptr addr, uint32_t val, 22427c46fadSAnton Johansson MemOpIdx oi, uintptr_t retaddr) 22527c46fadSAnton Johansson{ 22627c46fadSAnton Johansson tcg_debug_assert((get_memop(oi) & MO_SIZE) == MO_32); 22727c46fadSAnton Johansson do_st4_mmu(env_cpu(env), addr, val, oi, retaddr); 228*b709da5dSPierrick Bouvier plugin_store_cb(env, addr, val, 0, oi); 22927c46fadSAnton Johansson} 23027c46fadSAnton Johansson 23127c46fadSAnton Johanssonvoid cpu_stq_mmu(CPUArchState *env, abi_ptr addr, uint64_t val, 23227c46fadSAnton Johansson MemOpIdx oi, uintptr_t retaddr) 23327c46fadSAnton Johansson{ 23427c46fadSAnton Johansson tcg_debug_assert((get_memop(oi) & MO_SIZE) == MO_64); 23527c46fadSAnton Johansson do_st8_mmu(env_cpu(env), addr, val, oi, retaddr); 236*b709da5dSPierrick Bouvier plugin_store_cb(env, addr, val, 0, oi); 23727c46fadSAnton Johansson} 23827c46fadSAnton Johansson 23927c46fadSAnton Johanssonvoid cpu_st16_mmu(CPUArchState *env, abi_ptr addr, Int128 val, 24027c46fadSAnton Johansson MemOpIdx oi, uintptr_t retaddr) 24127c46fadSAnton Johansson{ 24227c46fadSAnton Johansson tcg_debug_assert((get_memop(oi) & MO_SIZE) == MO_128); 24327c46fadSAnton Johansson do_st16_mmu(env_cpu(env), addr, val, oi, retaddr); 244*b709da5dSPierrick Bouvier plugin_store_cb(env, addr, int128_getlo(val), int128_gethi(val), oi); 24527c46fadSAnton Johansson} 24627c46fadSAnton Johansson 24727c46fadSAnton Johansson/* 24827c46fadSAnton Johansson * Wrappers of the above 24927c46fadSAnton Johansson */ 250f83bcecbSRichard Henderson 251f83bcecbSRichard Hendersonuint32_t cpu_ldub_mmuidx_ra(CPUArchState *env, abi_ptr addr, 252f83bcecbSRichard Henderson int mmu_idx, uintptr_t ra) 253f83bcecbSRichard Henderson{ 254f83bcecbSRichard Henderson MemOpIdx oi = make_memop_idx(MO_UB, mmu_idx); 255f83bcecbSRichard Henderson return cpu_ldb_mmu(env, addr, oi, ra); 256f83bcecbSRichard Henderson} 257f83bcecbSRichard Henderson 258f83bcecbSRichard Hendersonint cpu_ldsb_mmuidx_ra(CPUArchState *env, abi_ptr addr, 259f83bcecbSRichard Henderson int mmu_idx, uintptr_t ra) 260f83bcecbSRichard Henderson{ 261f83bcecbSRichard Henderson return (int8_t)cpu_ldub_mmuidx_ra(env, addr, mmu_idx, ra); 262f83bcecbSRichard Henderson} 263f83bcecbSRichard Henderson 264f83bcecbSRichard Hendersonuint32_t cpu_lduw_be_mmuidx_ra(CPUArchState *env, abi_ptr addr, 265f83bcecbSRichard Henderson int mmu_idx, uintptr_t ra) 266f83bcecbSRichard Henderson{ 267f83bcecbSRichard Henderson MemOpIdx oi = make_memop_idx(MO_BEUW | MO_UNALN, mmu_idx); 268fbea7a40SRichard Henderson return cpu_ldw_mmu(env, addr, oi, ra); 269f83bcecbSRichard Henderson} 270f83bcecbSRichard Henderson 271f83bcecbSRichard Hendersonint cpu_ldsw_be_mmuidx_ra(CPUArchState *env, abi_ptr addr, 272f83bcecbSRichard Henderson int mmu_idx, uintptr_t ra) 273f83bcecbSRichard Henderson{ 274f83bcecbSRichard Henderson return (int16_t)cpu_lduw_be_mmuidx_ra(env, addr, mmu_idx, ra); 275f83bcecbSRichard Henderson} 276f83bcecbSRichard Henderson 277f83bcecbSRichard Hendersonuint32_t cpu_ldl_be_mmuidx_ra(CPUArchState *env, abi_ptr addr, 278f83bcecbSRichard Henderson int mmu_idx, uintptr_t ra) 279f83bcecbSRichard Henderson{ 280f83bcecbSRichard Henderson MemOpIdx oi = make_memop_idx(MO_BEUL | MO_UNALN, mmu_idx); 281fbea7a40SRichard Henderson return cpu_ldl_mmu(env, addr, oi, ra); 282f83bcecbSRichard Henderson} 283f83bcecbSRichard Henderson 284f83bcecbSRichard Hendersonuint64_t cpu_ldq_be_mmuidx_ra(CPUArchState *env, abi_ptr addr, 285f83bcecbSRichard Henderson int mmu_idx, uintptr_t ra) 286f83bcecbSRichard Henderson{ 287fc313c64SFrédéric Pétrot MemOpIdx oi = make_memop_idx(MO_BEUQ | MO_UNALN, mmu_idx); 288fbea7a40SRichard Henderson return cpu_ldq_mmu(env, addr, oi, ra); 289f83bcecbSRichard Henderson} 290f83bcecbSRichard Henderson 291f83bcecbSRichard Hendersonuint32_t cpu_lduw_le_mmuidx_ra(CPUArchState *env, abi_ptr addr, 292f83bcecbSRichard Henderson int mmu_idx, uintptr_t ra) 293f83bcecbSRichard Henderson{ 294f83bcecbSRichard Henderson MemOpIdx oi = make_memop_idx(MO_LEUW | MO_UNALN, mmu_idx); 295fbea7a40SRichard Henderson return cpu_ldw_mmu(env, addr, oi, ra); 296f83bcecbSRichard Henderson} 297f83bcecbSRichard Henderson 298f83bcecbSRichard Hendersonint cpu_ldsw_le_mmuidx_ra(CPUArchState *env, abi_ptr addr, 299f83bcecbSRichard Henderson int mmu_idx, uintptr_t ra) 300f83bcecbSRichard Henderson{ 301f83bcecbSRichard Henderson return (int16_t)cpu_lduw_le_mmuidx_ra(env, addr, mmu_idx, ra); 302f83bcecbSRichard Henderson} 303f83bcecbSRichard Henderson 304f83bcecbSRichard Hendersonuint32_t cpu_ldl_le_mmuidx_ra(CPUArchState *env, abi_ptr addr, 305f83bcecbSRichard Henderson int mmu_idx, uintptr_t ra) 306f83bcecbSRichard Henderson{ 307f83bcecbSRichard Henderson MemOpIdx oi = make_memop_idx(MO_LEUL | MO_UNALN, mmu_idx); 308fbea7a40SRichard Henderson return cpu_ldl_mmu(env, addr, oi, ra); 309f83bcecbSRichard Henderson} 310f83bcecbSRichard Henderson 311f83bcecbSRichard Hendersonuint64_t cpu_ldq_le_mmuidx_ra(CPUArchState *env, abi_ptr addr, 312f83bcecbSRichard Henderson int mmu_idx, uintptr_t ra) 313f83bcecbSRichard Henderson{ 314fc313c64SFrédéric Pétrot MemOpIdx oi = make_memop_idx(MO_LEUQ | MO_UNALN, mmu_idx); 315fbea7a40SRichard Henderson return cpu_ldq_mmu(env, addr, oi, ra); 316f83bcecbSRichard Henderson} 317f83bcecbSRichard Henderson 318f83bcecbSRichard Hendersonvoid cpu_stb_mmuidx_ra(CPUArchState *env, abi_ptr addr, uint32_t val, 319f83bcecbSRichard Henderson int mmu_idx, uintptr_t ra) 320f83bcecbSRichard Henderson{ 321f83bcecbSRichard Henderson MemOpIdx oi = make_memop_idx(MO_UB, mmu_idx); 322f83bcecbSRichard Henderson cpu_stb_mmu(env, addr, val, oi, ra); 323f83bcecbSRichard Henderson} 324f83bcecbSRichard Henderson 325f83bcecbSRichard Hendersonvoid cpu_stw_be_mmuidx_ra(CPUArchState *env, abi_ptr addr, uint32_t val, 326f83bcecbSRichard Henderson int mmu_idx, uintptr_t ra) 327f83bcecbSRichard Henderson{ 328f83bcecbSRichard Henderson MemOpIdx oi = make_memop_idx(MO_BEUW | MO_UNALN, mmu_idx); 329fbea7a40SRichard Henderson cpu_stw_mmu(env, addr, val, oi, ra); 330f83bcecbSRichard Henderson} 331f83bcecbSRichard Henderson 332f83bcecbSRichard Hendersonvoid cpu_stl_be_mmuidx_ra(CPUArchState *env, abi_ptr addr, uint32_t val, 333f83bcecbSRichard Henderson int mmu_idx, uintptr_t ra) 334f83bcecbSRichard Henderson{ 335f83bcecbSRichard Henderson MemOpIdx oi = make_memop_idx(MO_BEUL | MO_UNALN, mmu_idx); 336fbea7a40SRichard Henderson cpu_stl_mmu(env, addr, val, oi, ra); 337f83bcecbSRichard Henderson} 338f83bcecbSRichard Henderson 339f83bcecbSRichard Hendersonvoid cpu_stq_be_mmuidx_ra(CPUArchState *env, abi_ptr addr, uint64_t val, 340f83bcecbSRichard Henderson int mmu_idx, uintptr_t ra) 341f83bcecbSRichard Henderson{ 342fc313c64SFrédéric Pétrot MemOpIdx oi = make_memop_idx(MO_BEUQ | MO_UNALN, mmu_idx); 343fbea7a40SRichard Henderson cpu_stq_mmu(env, addr, val, oi, ra); 344f83bcecbSRichard Henderson} 345f83bcecbSRichard Henderson 346f83bcecbSRichard Hendersonvoid cpu_stw_le_mmuidx_ra(CPUArchState *env, abi_ptr addr, uint32_t val, 347f83bcecbSRichard Henderson int mmu_idx, uintptr_t ra) 348f83bcecbSRichard Henderson{ 349f83bcecbSRichard Henderson MemOpIdx oi = make_memop_idx(MO_LEUW | MO_UNALN, mmu_idx); 350fbea7a40SRichard Henderson cpu_stw_mmu(env, addr, val, oi, ra); 351f83bcecbSRichard Henderson} 352f83bcecbSRichard Henderson 353f83bcecbSRichard Hendersonvoid cpu_stl_le_mmuidx_ra(CPUArchState *env, abi_ptr addr, uint32_t val, 354f83bcecbSRichard Henderson int mmu_idx, uintptr_t ra) 355f83bcecbSRichard Henderson{ 356f83bcecbSRichard Henderson MemOpIdx oi = make_memop_idx(MO_LEUL | MO_UNALN, mmu_idx); 357fbea7a40SRichard Henderson cpu_stl_mmu(env, addr, val, oi, ra); 358f83bcecbSRichard Henderson} 359f83bcecbSRichard Henderson 360f83bcecbSRichard Hendersonvoid cpu_stq_le_mmuidx_ra(CPUArchState *env, abi_ptr addr, uint64_t val, 361f83bcecbSRichard Henderson int mmu_idx, uintptr_t ra) 362f83bcecbSRichard Henderson{ 363fc313c64SFrédéric Pétrot MemOpIdx oi = make_memop_idx(MO_LEUQ | MO_UNALN, mmu_idx); 364fbea7a40SRichard Henderson cpu_stq_mmu(env, addr, val, oi, ra); 365f83bcecbSRichard Henderson} 366f83bcecbSRichard Henderson 367f83bcecbSRichard Henderson/*--------------------------*/ 368f83bcecbSRichard Henderson 369f83bcecbSRichard Hendersonuint32_t cpu_ldub_data_ra(CPUArchState *env, abi_ptr addr, uintptr_t ra) 370f83bcecbSRichard Henderson{ 3713b916140SRichard Henderson int mmu_index = cpu_mmu_index(env_cpu(env), false); 3723b916140SRichard Henderson return cpu_ldub_mmuidx_ra(env, addr, mmu_index, ra); 373f83bcecbSRichard Henderson} 374f83bcecbSRichard Henderson 375f83bcecbSRichard Hendersonint cpu_ldsb_data_ra(CPUArchState *env, abi_ptr addr, uintptr_t ra) 376f83bcecbSRichard Henderson{ 377f83bcecbSRichard Henderson return (int8_t)cpu_ldub_data_ra(env, addr, ra); 378f83bcecbSRichard Henderson} 379f83bcecbSRichard Henderson 380f83bcecbSRichard Hendersonuint32_t cpu_lduw_be_data_ra(CPUArchState *env, abi_ptr addr, uintptr_t ra) 381f83bcecbSRichard Henderson{ 3823b916140SRichard Henderson int mmu_index = cpu_mmu_index(env_cpu(env), false); 3833b916140SRichard Henderson return cpu_lduw_be_mmuidx_ra(env, addr, mmu_index, ra); 384f83bcecbSRichard Henderson} 385f83bcecbSRichard Henderson 386f83bcecbSRichard Hendersonint cpu_ldsw_be_data_ra(CPUArchState *env, abi_ptr addr, uintptr_t ra) 387f83bcecbSRichard Henderson{ 388f83bcecbSRichard Henderson return (int16_t)cpu_lduw_be_data_ra(env, addr, ra); 389f83bcecbSRichard Henderson} 390f83bcecbSRichard Henderson 391f83bcecbSRichard Hendersonuint32_t cpu_ldl_be_data_ra(CPUArchState *env, abi_ptr addr, uintptr_t ra) 392f83bcecbSRichard Henderson{ 3933b916140SRichard Henderson int mmu_index = cpu_mmu_index(env_cpu(env), false); 3943b916140SRichard Henderson return cpu_ldl_be_mmuidx_ra(env, addr, mmu_index, ra); 395f83bcecbSRichard Henderson} 396f83bcecbSRichard Henderson 397f83bcecbSRichard Hendersonuint64_t cpu_ldq_be_data_ra(CPUArchState *env, abi_ptr addr, uintptr_t ra) 398f83bcecbSRichard Henderson{ 3993b916140SRichard Henderson int mmu_index = cpu_mmu_index(env_cpu(env), false); 4003b916140SRichard Henderson return cpu_ldq_be_mmuidx_ra(env, addr, mmu_index, ra); 401f83bcecbSRichard Henderson} 402f83bcecbSRichard Henderson 403f83bcecbSRichard Hendersonuint32_t cpu_lduw_le_data_ra(CPUArchState *env, abi_ptr addr, uintptr_t ra) 404f83bcecbSRichard Henderson{ 4053b916140SRichard Henderson int mmu_index = cpu_mmu_index(env_cpu(env), false); 4063b916140SRichard Henderson return cpu_lduw_le_mmuidx_ra(env, addr, mmu_index, ra); 407f83bcecbSRichard Henderson} 408f83bcecbSRichard Henderson 409f83bcecbSRichard Hendersonint cpu_ldsw_le_data_ra(CPUArchState *env, abi_ptr addr, uintptr_t ra) 410f83bcecbSRichard Henderson{ 411f83bcecbSRichard Henderson return (int16_t)cpu_lduw_le_data_ra(env, addr, ra); 412f83bcecbSRichard Henderson} 413f83bcecbSRichard Henderson 414f83bcecbSRichard Hendersonuint32_t cpu_ldl_le_data_ra(CPUArchState *env, abi_ptr addr, uintptr_t ra) 415f83bcecbSRichard Henderson{ 4163b916140SRichard Henderson int mmu_index = cpu_mmu_index(env_cpu(env), false); 4173b916140SRichard Henderson return cpu_ldl_le_mmuidx_ra(env, addr, mmu_index, ra); 418f83bcecbSRichard Henderson} 419f83bcecbSRichard Henderson 420f83bcecbSRichard Hendersonuint64_t cpu_ldq_le_data_ra(CPUArchState *env, abi_ptr addr, uintptr_t ra) 421f83bcecbSRichard Henderson{ 4223b916140SRichard Henderson int mmu_index = cpu_mmu_index(env_cpu(env), false); 4233b916140SRichard Henderson return cpu_ldq_le_mmuidx_ra(env, addr, mmu_index, ra); 424f83bcecbSRichard Henderson} 425f83bcecbSRichard Henderson 426f83bcecbSRichard Hendersonvoid cpu_stb_data_ra(CPUArchState *env, abi_ptr addr, 427f83bcecbSRichard Henderson uint32_t val, uintptr_t ra) 428f83bcecbSRichard Henderson{ 4293b916140SRichard Henderson int mmu_index = cpu_mmu_index(env_cpu(env), false); 4303b916140SRichard Henderson cpu_stb_mmuidx_ra(env, addr, val, mmu_index, ra); 431f83bcecbSRichard Henderson} 432f83bcecbSRichard Henderson 433f83bcecbSRichard Hendersonvoid cpu_stw_be_data_ra(CPUArchState *env, abi_ptr addr, 434f83bcecbSRichard Henderson uint32_t val, uintptr_t ra) 435f83bcecbSRichard Henderson{ 4363b916140SRichard Henderson int mmu_index = cpu_mmu_index(env_cpu(env), false); 4373b916140SRichard Henderson cpu_stw_be_mmuidx_ra(env, addr, val, mmu_index, ra); 438f83bcecbSRichard Henderson} 439f83bcecbSRichard Henderson 440f83bcecbSRichard Hendersonvoid cpu_stl_be_data_ra(CPUArchState *env, abi_ptr addr, 441f83bcecbSRichard Henderson uint32_t val, uintptr_t ra) 442f83bcecbSRichard Henderson{ 4433b916140SRichard Henderson int mmu_index = cpu_mmu_index(env_cpu(env), false); 4443b916140SRichard Henderson cpu_stl_be_mmuidx_ra(env, addr, val, mmu_index, ra); 445f83bcecbSRichard Henderson} 446f83bcecbSRichard Henderson 447f83bcecbSRichard Hendersonvoid cpu_stq_be_data_ra(CPUArchState *env, abi_ptr addr, 448f83bcecbSRichard Henderson uint64_t val, uintptr_t ra) 449f83bcecbSRichard Henderson{ 4503b916140SRichard Henderson int mmu_index = cpu_mmu_index(env_cpu(env), false); 4513b916140SRichard Henderson cpu_stq_be_mmuidx_ra(env, addr, val, mmu_index, ra); 452f83bcecbSRichard Henderson} 453f83bcecbSRichard Henderson 454f83bcecbSRichard Hendersonvoid cpu_stw_le_data_ra(CPUArchState *env, abi_ptr addr, 455f83bcecbSRichard Henderson uint32_t val, uintptr_t ra) 456f83bcecbSRichard Henderson{ 4573b916140SRichard Henderson int mmu_index = cpu_mmu_index(env_cpu(env), false); 4583b916140SRichard Henderson cpu_stw_le_mmuidx_ra(env, addr, val, mmu_index, ra); 459f83bcecbSRichard Henderson} 460f83bcecbSRichard Henderson 461f83bcecbSRichard Hendersonvoid cpu_stl_le_data_ra(CPUArchState *env, abi_ptr addr, 462f83bcecbSRichard Henderson uint32_t val, uintptr_t ra) 463f83bcecbSRichard Henderson{ 4643b916140SRichard Henderson int mmu_index = cpu_mmu_index(env_cpu(env), false); 4653b916140SRichard Henderson cpu_stl_le_mmuidx_ra(env, addr, val, mmu_index, ra); 466f83bcecbSRichard Henderson} 467f83bcecbSRichard Henderson 468f83bcecbSRichard Hendersonvoid cpu_stq_le_data_ra(CPUArchState *env, abi_ptr addr, 469f83bcecbSRichard Henderson uint64_t val, uintptr_t ra) 470f83bcecbSRichard Henderson{ 4713b916140SRichard Henderson int mmu_index = cpu_mmu_index(env_cpu(env), false); 4723b916140SRichard Henderson cpu_stq_le_mmuidx_ra(env, addr, val, mmu_index, ra); 473f83bcecbSRichard Henderson} 474f83bcecbSRichard Henderson 475f83bcecbSRichard Henderson/*--------------------------*/ 476f83bcecbSRichard Henderson 477f83bcecbSRichard Hendersonuint32_t cpu_ldub_data(CPUArchState *env, abi_ptr addr) 478f83bcecbSRichard Henderson{ 479f83bcecbSRichard Henderson return cpu_ldub_data_ra(env, addr, 0); 480f83bcecbSRichard Henderson} 481f83bcecbSRichard Henderson 482f83bcecbSRichard Hendersonint cpu_ldsb_data(CPUArchState *env, abi_ptr addr) 483f83bcecbSRichard Henderson{ 484f83bcecbSRichard Henderson return (int8_t)cpu_ldub_data(env, addr); 485f83bcecbSRichard Henderson} 486f83bcecbSRichard Henderson 487f83bcecbSRichard Hendersonuint32_t cpu_lduw_be_data(CPUArchState *env, abi_ptr addr) 488f83bcecbSRichard Henderson{ 489f83bcecbSRichard Henderson return cpu_lduw_be_data_ra(env, addr, 0); 490f83bcecbSRichard Henderson} 491f83bcecbSRichard Henderson 492f83bcecbSRichard Hendersonint cpu_ldsw_be_data(CPUArchState *env, abi_ptr addr) 493f83bcecbSRichard Henderson{ 494f83bcecbSRichard Henderson return (int16_t)cpu_lduw_be_data(env, addr); 495f83bcecbSRichard Henderson} 496f83bcecbSRichard Henderson 497f83bcecbSRichard Hendersonuint32_t cpu_ldl_be_data(CPUArchState *env, abi_ptr addr) 498f83bcecbSRichard Henderson{ 499f83bcecbSRichard Henderson return cpu_ldl_be_data_ra(env, addr, 0); 500f83bcecbSRichard Henderson} 501f83bcecbSRichard Henderson 502f83bcecbSRichard Hendersonuint64_t cpu_ldq_be_data(CPUArchState *env, abi_ptr addr) 503f83bcecbSRichard Henderson{ 504f83bcecbSRichard Henderson return cpu_ldq_be_data_ra(env, addr, 0); 505f83bcecbSRichard Henderson} 506f83bcecbSRichard Henderson 507f83bcecbSRichard Hendersonuint32_t cpu_lduw_le_data(CPUArchState *env, abi_ptr addr) 508f83bcecbSRichard Henderson{ 509f83bcecbSRichard Henderson return cpu_lduw_le_data_ra(env, addr, 0); 510f83bcecbSRichard Henderson} 511f83bcecbSRichard Henderson 512f83bcecbSRichard Hendersonint cpu_ldsw_le_data(CPUArchState *env, abi_ptr addr) 513f83bcecbSRichard Henderson{ 514f83bcecbSRichard Henderson return (int16_t)cpu_lduw_le_data(env, addr); 515f83bcecbSRichard Henderson} 516f83bcecbSRichard Henderson 517f83bcecbSRichard Hendersonuint32_t cpu_ldl_le_data(CPUArchState *env, abi_ptr addr) 518f83bcecbSRichard Henderson{ 519f83bcecbSRichard Henderson return cpu_ldl_le_data_ra(env, addr, 0); 520f83bcecbSRichard Henderson} 521f83bcecbSRichard Henderson 522f83bcecbSRichard Hendersonuint64_t cpu_ldq_le_data(CPUArchState *env, abi_ptr addr) 523f83bcecbSRichard Henderson{ 524f83bcecbSRichard Henderson return cpu_ldq_le_data_ra(env, addr, 0); 525f83bcecbSRichard Henderson} 526f83bcecbSRichard Henderson 527f83bcecbSRichard Hendersonvoid cpu_stb_data(CPUArchState *env, abi_ptr addr, uint32_t val) 528f83bcecbSRichard Henderson{ 529f83bcecbSRichard Henderson cpu_stb_data_ra(env, addr, val, 0); 530f83bcecbSRichard Henderson} 531f83bcecbSRichard Henderson 532f83bcecbSRichard Hendersonvoid cpu_stw_be_data(CPUArchState *env, abi_ptr addr, uint32_t val) 533f83bcecbSRichard Henderson{ 534f83bcecbSRichard Henderson cpu_stw_be_data_ra(env, addr, val, 0); 535f83bcecbSRichard Henderson} 536f83bcecbSRichard Henderson 537f83bcecbSRichard Hendersonvoid cpu_stl_be_data(CPUArchState *env, abi_ptr addr, uint32_t val) 538f83bcecbSRichard Henderson{ 539f83bcecbSRichard Henderson cpu_stl_be_data_ra(env, addr, val, 0); 540f83bcecbSRichard Henderson} 541f83bcecbSRichard Henderson 542f83bcecbSRichard Hendersonvoid cpu_stq_be_data(CPUArchState *env, abi_ptr addr, uint64_t val) 543f83bcecbSRichard Henderson{ 544f83bcecbSRichard Henderson cpu_stq_be_data_ra(env, addr, val, 0); 545f83bcecbSRichard Henderson} 546f83bcecbSRichard Henderson 547f83bcecbSRichard Hendersonvoid cpu_stw_le_data(CPUArchState *env, abi_ptr addr, uint32_t val) 548f83bcecbSRichard Henderson{ 549f83bcecbSRichard Henderson cpu_stw_le_data_ra(env, addr, val, 0); 550f83bcecbSRichard Henderson} 551f83bcecbSRichard Henderson 552f83bcecbSRichard Hendersonvoid cpu_stl_le_data(CPUArchState *env, abi_ptr addr, uint32_t val) 553f83bcecbSRichard Henderson{ 554f83bcecbSRichard Henderson cpu_stl_le_data_ra(env, addr, val, 0); 555f83bcecbSRichard Henderson} 556f83bcecbSRichard Henderson 557f83bcecbSRichard Hendersonvoid cpu_stq_le_data(CPUArchState *env, abi_ptr addr, uint64_t val) 558f83bcecbSRichard Henderson{ 559f83bcecbSRichard Henderson cpu_stq_le_data_ra(env, addr, val, 0); 560f83bcecbSRichard Henderson} 561