xref: /openbmc/qemu/accel/tcg/ldst_common.c.inc (revision a5dd9ee060b0ad65239889a62e93a33276055981)
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