
* Update to QEMU v9.0.0 --------- Signed-off-by: Peter Maydell <peter.maydell@linaro.org> Signed-off-by: Fabiano Rosas <farosas@suse.de> Signed-off-by: Peter Xu <peterx@redhat.com> Signed-off-by: Thomas Huth <thuth@redhat.com> Signed-off-by: Cédric Le Goater <clg@redhat.com> Signed-off-by: Zheyu Ma <zheyuma97@gmail.com> Signed-off-by: Ido Plat <ido.plat@ibm.com> Signed-off-by: Ilya Leoshkevich <iii@linux.ibm.com> Signed-off-by: Markus Armbruster <armbru@redhat.com> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@yandex-team.ru> Signed-off-by: David Hildenbrand <david@redhat.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com> Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com> Signed-off-by: Fiona Ebner <f.ebner@proxmox.com> Signed-off-by: Gregory Price <gregory.price@memverge.com> Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org> Signed-off-by: Lorenz Brun <lorenz@brun.one> Signed-off-by: Yao Xingtao <yaoxt.fnst@fujitsu.com> Signed-off-by: Arnaud Minier <arnaud.minier@telecom-paris.fr> Signed-off-by: Inès Varhol <ines.varhol@telecom-paris.fr> Signed-off-by: BALATON Zoltan <balaton@eik.bme.hu> Signed-off-by: Igor Mammedov <imammedo@redhat.com> Signed-off-by: Akihiko Odaki <akihiko.odaki@daynix.com> Signed-off-by: Richard Henderson <richard.henderson@linaro.org> Signed-off-by: Sven Schnelle <svens@stackframe.org> Signed-off-by: Daniel Henrique Barboza <dbarboza@ventanamicro.com> Signed-off-by: Christian Schoenebeck <qemu_oss@crudebyte.com> Signed-off-by: Jason Wang <jasowang@redhat.com> Signed-off-by: Helge Deller <deller@gmx.de> Signed-off-by: Nicholas Piggin <npiggin@gmail.com> Signed-off-by: Benjamin Gray <bgray@linux.ibm.com> Signed-off-by: Avihai Horon <avihaih@nvidia.com> Signed-off-by: Michael Tokarev <mjt@tls.msk.ru> Signed-off-by: Joonas Kankaala <joonas.a.kankaala@gmail.com> Signed-off-by: Marcin Juszkiewicz <marcin.juszkiewicz@linaro.org> Signed-off-by: Stefan Weil <sw@weilnetz.de> Signed-off-by: Zhao Liu <zhao1.liu@intel.com> Signed-off-by: Glenn Miles <milesg@linux.ibm.com> Signed-off-by: Oleg Sviridov <oleg.sviridov@red-soft.ru> Signed-off-by: Artem Chernyshev <artem.chernyshev@red-soft.ru> Signed-off-by: Yajun Wu <yajunw@nvidia.com> Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com> Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk> Signed-off-by: Pierre-Clément Tosi <ptosi@google.com> Signed-off-by: Lei Wang <lei4.wang@intel.com> Signed-off-by: Wei Wang <wei.w.wang@intel.com> Signed-off-by: Martin Hundebøll <martin@geanix.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Manos Pitsidianakis <manos.pitsidianakis@linaro.org> Signed-off-by: Wafer <wafer@jaguarmicro.com> Signed-off-by: Yuxue Liu <yuxue.liu@jaguarmicro.com> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> Signed-off-by: Nguyen Dinh Phi <phind.uet@gmail.com> Signed-off-by: Zack Buhman <zack@buhman.org> Signed-off-by: Keith Packard <keithp@keithp.com> Signed-off-by: Yuquan Wang wangyuquan1236@phytium.com.cn Signed-off-by: Matheus Tavares Bernardino <quic_mathbern@quicinc.com> Signed-off-by: Cindy Lu <lulu@redhat.com> Co-authored-by: Peter Maydell <peter.maydell@linaro.org> Co-authored-by: Fabiano Rosas <farosas@suse.de> Co-authored-by: Peter Xu <peterx@redhat.com> Co-authored-by: Thomas Huth <thuth@redhat.com> Co-authored-by: Cédric Le Goater <clg@redhat.com> Co-authored-by: Zheyu Ma <zheyuma97@gmail.com> Co-authored-by: Ido Plat <ido.plat@ibm.com> Co-authored-by: Ilya Leoshkevich <iii@linux.ibm.com> Co-authored-by: Markus Armbruster <armbru@redhat.com> Co-authored-by: Marc-André Lureau <marcandre.lureau@redhat.com> Co-authored-by: Paolo Bonzini <pbonzini@redhat.com> Co-authored-by: Vladimir Sementsov-Ogievskiy <vsementsov@yandex-team.ru> Co-authored-by: David Hildenbrand <david@redhat.com> Co-authored-by: Kevin Wolf <kwolf@redhat.com> Co-authored-by: Stefan Reiter <s.reiter@proxmox.com> Co-authored-by: Fiona Ebner <f.ebner@proxmox.com> Co-authored-by: Gregory Price <gregory.price@memverge.com> Co-authored-by: Lorenz Brun <lorenz@brun.one> Co-authored-by: Yao Xingtao <yaoxt.fnst@fujitsu.com> Co-authored-by: Philippe Mathieu-Daudé <philmd@linaro.org> Co-authored-by: Arnaud Minier <arnaud.minier@telecom-paris.fr> Co-authored-by: BALATON Zoltan <balaton@eik.bme.hu> Co-authored-by: Igor Mammedov <imammedo@redhat.com> Co-authored-by: Akihiko Odaki <akihiko.odaki@daynix.com> Co-authored-by: Richard Henderson <richard.henderson@linaro.org> Co-authored-by: Sven Schnelle <svens@stackframe.org> Co-authored-by: Daniel Henrique Barboza <dbarboza@ventanamicro.com> Co-authored-by: Helge Deller <deller@kernel.org> Co-authored-by: Harsh Prateek Bora <harshpb@linux.ibm.com> Co-authored-by: Benjamin Gray <bgray@linux.ibm.com> Co-authored-by: Nicholas Piggin <npiggin@gmail.com> Co-authored-by: Avihai Horon <avihaih@nvidia.com> Co-authored-by: Michael Tokarev <mjt@tls.msk.ru> Co-authored-by: Joonas Kankaala <joonas.a.kankaala@gmail.com> Co-authored-by: Marcin Juszkiewicz <marcin.juszkiewicz@linaro.org> Co-authored-by: Stefan Weil <sw@weilnetz.de> Co-authored-by: Dayu Liu <liu.dayu@zte.com.cn> Co-authored-by: Zhao Liu <zhao1.liu@intel.com> Co-authored-by: Glenn Miles <milesg@linux.vnet.ibm.com> Co-authored-by: Artem Chernyshev <artem.chernyshev@red-soft.ru> Co-authored-by: Yajun Wu <yajunw@nvidia.com> Co-authored-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk> Co-authored-by: Pierre-Clément Tosi <ptosi@google.com> Co-authored-by: Wei Wang <wei.w.wang@intel.com> Co-authored-by: Martin Hundebøll <martin@geanix.com> Co-authored-by: Michael S. Tsirkin <mst@redhat.com> Co-authored-by: Manos Pitsidianakis <manos.pitsidianakis@linaro.org> Co-authored-by: Wafer <wafer@jaguarmicro.com> Co-authored-by: lyx634449800 <yuxue.liu@jaguarmicro.com> Co-authored-by: Gerd Hoffmann <kraxel@redhat.com> Co-authored-by: Nguyen Dinh Phi <phind.uet@gmail.com> Co-authored-by: Zack Buhman <zack@buhman.org> Co-authored-by: Keith Packard <keithp@keithp.com> Co-authored-by: Yuquan Wang <wangyuquan1236@phytium.com.cn> Co-authored-by: Matheus Tavares Bernardino <quic_mathbern@quicinc.com> Co-authored-by: Cindy Lu <lulu@redhat.com>
547 lines
16 KiB
C++
547 lines
16 KiB
C++
/*
|
|
* Routines common to user and system emulation of load/store.
|
|
*
|
|
* Copyright (c) 2003 Fabrice Bellard
|
|
*
|
|
* SPDX-License-Identifier: GPL-2.0-or-later
|
|
*
|
|
* This work is licensed under the terms of the GNU GPL, version 2 or later.
|
|
* See the COPYING file in the top-level directory.
|
|
*/
|
|
/*
|
|
* Load helpers for tcg-ldst.h
|
|
*/
|
|
|
|
tcg_target_ulong helper_ldub_mmu(CPUArchState *env, uint64_t addr,
|
|
MemOpIdx oi, uintptr_t retaddr)
|
|
{
|
|
tcg_debug_assert((get_memop(oi) & MO_SIZE) == MO_8);
|
|
return do_ld1_mmu(env_cpu(env), addr, oi, retaddr, MMU_DATA_LOAD);
|
|
}
|
|
|
|
tcg_target_ulong helper_lduw_mmu(CPUArchState *env, uint64_t addr,
|
|
MemOpIdx oi, uintptr_t retaddr)
|
|
{
|
|
tcg_debug_assert((get_memop(oi) & MO_SIZE) == MO_16);
|
|
return do_ld2_mmu(env_cpu(env), addr, oi, retaddr, MMU_DATA_LOAD);
|
|
}
|
|
|
|
tcg_target_ulong helper_ldul_mmu(CPUArchState *env, uint64_t addr,
|
|
MemOpIdx oi, uintptr_t retaddr)
|
|
{
|
|
tcg_debug_assert((get_memop(oi) & MO_SIZE) == MO_32);
|
|
return do_ld4_mmu(env_cpu(env), addr, oi, retaddr, MMU_DATA_LOAD);
|
|
}
|
|
|
|
uint64_t helper_ldq_mmu(CPUArchState *env, uint64_t addr,
|
|
MemOpIdx oi, uintptr_t retaddr)
|
|
{
|
|
tcg_debug_assert((get_memop(oi) & MO_SIZE) == MO_64);
|
|
return do_ld8_mmu(env_cpu(env), addr, oi, retaddr, MMU_DATA_LOAD);
|
|
}
|
|
|
|
/*
|
|
* Provide signed versions of the load routines as well. We can of course
|
|
* avoid this for 64-bit data, or for 32-bit data on 32-bit host.
|
|
*/
|
|
|
|
tcg_target_ulong helper_ldsb_mmu(CPUArchState *env, uint64_t addr,
|
|
MemOpIdx oi, uintptr_t retaddr)
|
|
{
|
|
return (int8_t)helper_ldub_mmu(env, addr, oi, retaddr);
|
|
}
|
|
|
|
tcg_target_ulong helper_ldsw_mmu(CPUArchState *env, uint64_t addr,
|
|
MemOpIdx oi, uintptr_t retaddr)
|
|
{
|
|
return (int16_t)helper_lduw_mmu(env, addr, oi, retaddr);
|
|
}
|
|
|
|
tcg_target_ulong helper_ldsl_mmu(CPUArchState *env, uint64_t addr,
|
|
MemOpIdx oi, uintptr_t retaddr)
|
|
{
|
|
return (int32_t)helper_ldul_mmu(env, addr, oi, retaddr);
|
|
}
|
|
|
|
Int128 helper_ld16_mmu(CPUArchState *env, uint64_t addr,
|
|
MemOpIdx oi, uintptr_t retaddr)
|
|
{
|
|
tcg_debug_assert((get_memop(oi) & MO_SIZE) == MO_128);
|
|
return do_ld16_mmu(env_cpu(env), addr, oi, retaddr);
|
|
}
|
|
|
|
Int128 helper_ld_i128(CPUArchState *env, uint64_t addr, uint32_t oi)
|
|
{
|
|
return helper_ld16_mmu(env, addr, oi, GETPC());
|
|
}
|
|
|
|
/*
|
|
* Store helpers for tcg-ldst.h
|
|
*/
|
|
|
|
void helper_stb_mmu(CPUArchState *env, uint64_t addr, uint32_t val,
|
|
MemOpIdx oi, uintptr_t ra)
|
|
{
|
|
tcg_debug_assert((get_memop(oi) & MO_SIZE) == MO_8);
|
|
do_st1_mmu(env_cpu(env), addr, val, oi, ra);
|
|
}
|
|
|
|
void helper_stw_mmu(CPUArchState *env, uint64_t addr, uint32_t val,
|
|
MemOpIdx oi, uintptr_t retaddr)
|
|
{
|
|
tcg_debug_assert((get_memop(oi) & MO_SIZE) == MO_16);
|
|
do_st2_mmu(env_cpu(env), addr, val, oi, retaddr);
|
|
}
|
|
|
|
void helper_stl_mmu(CPUArchState *env, uint64_t addr, uint32_t val,
|
|
MemOpIdx oi, uintptr_t retaddr)
|
|
{
|
|
tcg_debug_assert((get_memop(oi) & MO_SIZE) == MO_32);
|
|
do_st4_mmu(env_cpu(env), addr, val, oi, retaddr);
|
|
}
|
|
|
|
void helper_stq_mmu(CPUArchState *env, uint64_t addr, uint64_t val,
|
|
MemOpIdx oi, uintptr_t retaddr)
|
|
{
|
|
tcg_debug_assert((get_memop(oi) & MO_SIZE) == MO_64);
|
|
do_st8_mmu(env_cpu(env), addr, val, oi, retaddr);
|
|
}
|
|
|
|
void helper_st16_mmu(CPUArchState *env, uint64_t addr, Int128 val,
|
|
MemOpIdx oi, uintptr_t retaddr)
|
|
{
|
|
tcg_debug_assert((get_memop(oi) & MO_SIZE) == MO_128);
|
|
do_st16_mmu(env_cpu(env), addr, val, oi, retaddr);
|
|
}
|
|
|
|
void helper_st_i128(CPUArchState *env, uint64_t addr, Int128 val, MemOpIdx oi)
|
|
{
|
|
helper_st16_mmu(env, addr, val, oi, GETPC());
|
|
}
|
|
|
|
/*
|
|
* Load helpers for cpu_ldst.h
|
|
*/
|
|
|
|
static void plugin_load_cb(CPUArchState *env, abi_ptr addr, MemOpIdx oi)
|
|
{
|
|
qemu_plugin_vcpu_mem_cb(env_cpu(env), addr, oi, QEMU_PLUGIN_MEM_R);
|
|
}
|
|
|
|
uint8_t cpu_ldb_mmu(CPUArchState *env, abi_ptr addr, MemOpIdx oi, uintptr_t ra)
|
|
{
|
|
uint8_t ret;
|
|
|
|
tcg_debug_assert((get_memop(oi) & MO_SIZE) == MO_UB);
|
|
ret = do_ld1_mmu(env_cpu(env), addr, oi, ra, MMU_DATA_LOAD);
|
|
plugin_load_cb(env, addr, oi);
|
|
return ret;
|
|
}
|
|
|
|
uint16_t cpu_ldw_mmu(CPUArchState *env, abi_ptr addr,
|
|
MemOpIdx oi, uintptr_t ra)
|
|
{
|
|
uint16_t ret;
|
|
|
|
tcg_debug_assert((get_memop(oi) & MO_SIZE) == MO_16);
|
|
ret = do_ld2_mmu(env_cpu(env), addr, oi, ra, MMU_DATA_LOAD);
|
|
plugin_load_cb(env, addr, oi);
|
|
return ret;
|
|
}
|
|
|
|
uint32_t cpu_ldl_mmu(CPUArchState *env, abi_ptr addr,
|
|
MemOpIdx oi, uintptr_t ra)
|
|
{
|
|
uint32_t ret;
|
|
|
|
tcg_debug_assert((get_memop(oi) & MO_SIZE) == MO_32);
|
|
ret = do_ld4_mmu(env_cpu(env), addr, oi, ra, MMU_DATA_LOAD);
|
|
plugin_load_cb(env, addr, oi);
|
|
return ret;
|
|
}
|
|
|
|
uint64_t cpu_ldq_mmu(CPUArchState *env, abi_ptr addr,
|
|
MemOpIdx oi, uintptr_t ra)
|
|
{
|
|
uint64_t ret;
|
|
|
|
tcg_debug_assert((get_memop(oi) & MO_SIZE) == MO_64);
|
|
ret = do_ld8_mmu(env_cpu(env), addr, oi, ra, MMU_DATA_LOAD);
|
|
plugin_load_cb(env, addr, oi);
|
|
return ret;
|
|
}
|
|
|
|
Int128 cpu_ld16_mmu(CPUArchState *env, abi_ptr addr,
|
|
MemOpIdx oi, uintptr_t ra)
|
|
{
|
|
Int128 ret;
|
|
|
|
tcg_debug_assert((get_memop(oi) & MO_SIZE) == MO_128);
|
|
ret = do_ld16_mmu(env_cpu(env), addr, oi, ra);
|
|
plugin_load_cb(env, addr, oi);
|
|
return ret;
|
|
}
|
|
|
|
/*
|
|
* Store helpers for cpu_ldst.h
|
|
*/
|
|
|
|
static void plugin_store_cb(CPUArchState *env, abi_ptr addr, MemOpIdx oi)
|
|
{
|
|
qemu_plugin_vcpu_mem_cb(env_cpu(env), addr, oi, QEMU_PLUGIN_MEM_W);
|
|
}
|
|
|
|
void cpu_stb_mmu(CPUArchState *env, abi_ptr addr, uint8_t val,
|
|
MemOpIdx oi, uintptr_t retaddr)
|
|
{
|
|
helper_stb_mmu(env, addr, val, oi, retaddr);
|
|
plugin_store_cb(env, addr, oi);
|
|
}
|
|
|
|
void cpu_stw_mmu(CPUArchState *env, abi_ptr addr, uint16_t val,
|
|
MemOpIdx oi, uintptr_t retaddr)
|
|
{
|
|
tcg_debug_assert((get_memop(oi) & MO_SIZE) == MO_16);
|
|
do_st2_mmu(env_cpu(env), addr, val, oi, retaddr);
|
|
plugin_store_cb(env, addr, oi);
|
|
}
|
|
|
|
void cpu_stl_mmu(CPUArchState *env, abi_ptr addr, uint32_t val,
|
|
MemOpIdx oi, uintptr_t retaddr)
|
|
{
|
|
tcg_debug_assert((get_memop(oi) & MO_SIZE) == MO_32);
|
|
do_st4_mmu(env_cpu(env), addr, val, oi, retaddr);
|
|
plugin_store_cb(env, addr, oi);
|
|
}
|
|
|
|
void cpu_stq_mmu(CPUArchState *env, abi_ptr addr, uint64_t val,
|
|
MemOpIdx oi, uintptr_t retaddr)
|
|
{
|
|
tcg_debug_assert((get_memop(oi) & MO_SIZE) == MO_64);
|
|
do_st8_mmu(env_cpu(env), addr, val, oi, retaddr);
|
|
plugin_store_cb(env, addr, oi);
|
|
}
|
|
|
|
void cpu_st16_mmu(CPUArchState *env, abi_ptr addr, Int128 val,
|
|
MemOpIdx oi, uintptr_t retaddr)
|
|
{
|
|
tcg_debug_assert((get_memop(oi) & MO_SIZE) == MO_128);
|
|
do_st16_mmu(env_cpu(env), addr, val, oi, retaddr);
|
|
plugin_store_cb(env, addr, oi);
|
|
}
|
|
|
|
/*
|
|
* Wrappers of the above
|
|
*/
|
|
|
|
uint32_t cpu_ldub_mmuidx_ra(CPUArchState *env, abi_ptr addr,
|
|
int mmu_idx, uintptr_t ra)
|
|
{
|
|
MemOpIdx oi = make_memop_idx(MO_UB, mmu_idx);
|
|
return cpu_ldb_mmu(env, addr, oi, ra);
|
|
}
|
|
|
|
int cpu_ldsb_mmuidx_ra(CPUArchState *env, abi_ptr addr,
|
|
int mmu_idx, uintptr_t ra)
|
|
{
|
|
return (int8_t)cpu_ldub_mmuidx_ra(env, addr, mmu_idx, ra);
|
|
}
|
|
|
|
uint32_t cpu_lduw_be_mmuidx_ra(CPUArchState *env, abi_ptr addr,
|
|
int mmu_idx, uintptr_t ra)
|
|
{
|
|
MemOpIdx oi = make_memop_idx(MO_BEUW | MO_UNALN, mmu_idx);
|
|
return cpu_ldw_mmu(env, addr, oi, ra);
|
|
}
|
|
|
|
int cpu_ldsw_be_mmuidx_ra(CPUArchState *env, abi_ptr addr,
|
|
int mmu_idx, uintptr_t ra)
|
|
{
|
|
return (int16_t)cpu_lduw_be_mmuidx_ra(env, addr, mmu_idx, ra);
|
|
}
|
|
|
|
uint32_t cpu_ldl_be_mmuidx_ra(CPUArchState *env, abi_ptr addr,
|
|
int mmu_idx, uintptr_t ra)
|
|
{
|
|
MemOpIdx oi = make_memop_idx(MO_BEUL | MO_UNALN, mmu_idx);
|
|
return cpu_ldl_mmu(env, addr, oi, ra);
|
|
}
|
|
|
|
uint64_t cpu_ldq_be_mmuidx_ra(CPUArchState *env, abi_ptr addr,
|
|
int mmu_idx, uintptr_t ra)
|
|
{
|
|
MemOpIdx oi = make_memop_idx(MO_BEUQ | MO_UNALN, mmu_idx);
|
|
return cpu_ldq_mmu(env, addr, oi, ra);
|
|
}
|
|
|
|
uint32_t cpu_lduw_le_mmuidx_ra(CPUArchState *env, abi_ptr addr,
|
|
int mmu_idx, uintptr_t ra)
|
|
{
|
|
MemOpIdx oi = make_memop_idx(MO_LEUW | MO_UNALN, mmu_idx);
|
|
return cpu_ldw_mmu(env, addr, oi, ra);
|
|
}
|
|
|
|
int cpu_ldsw_le_mmuidx_ra(CPUArchState *env, abi_ptr addr,
|
|
int mmu_idx, uintptr_t ra)
|
|
{
|
|
return (int16_t)cpu_lduw_le_mmuidx_ra(env, addr, mmu_idx, ra);
|
|
}
|
|
|
|
uint32_t cpu_ldl_le_mmuidx_ra(CPUArchState *env, abi_ptr addr,
|
|
int mmu_idx, uintptr_t ra)
|
|
{
|
|
MemOpIdx oi = make_memop_idx(MO_LEUL | MO_UNALN, mmu_idx);
|
|
return cpu_ldl_mmu(env, addr, oi, ra);
|
|
}
|
|
|
|
uint64_t cpu_ldq_le_mmuidx_ra(CPUArchState *env, abi_ptr addr,
|
|
int mmu_idx, uintptr_t ra)
|
|
{
|
|
MemOpIdx oi = make_memop_idx(MO_LEUQ | MO_UNALN, mmu_idx);
|
|
return cpu_ldq_mmu(env, addr, oi, ra);
|
|
}
|
|
|
|
void cpu_stb_mmuidx_ra(CPUArchState *env, abi_ptr addr, uint32_t val,
|
|
int mmu_idx, uintptr_t ra)
|
|
{
|
|
MemOpIdx oi = make_memop_idx(MO_UB, mmu_idx);
|
|
cpu_stb_mmu(env, addr, val, oi, ra);
|
|
}
|
|
|
|
void cpu_stw_be_mmuidx_ra(CPUArchState *env, abi_ptr addr, uint32_t val,
|
|
int mmu_idx, uintptr_t ra)
|
|
{
|
|
MemOpIdx oi = make_memop_idx(MO_BEUW | MO_UNALN, mmu_idx);
|
|
cpu_stw_mmu(env, addr, val, oi, ra);
|
|
}
|
|
|
|
void cpu_stl_be_mmuidx_ra(CPUArchState *env, abi_ptr addr, uint32_t val,
|
|
int mmu_idx, uintptr_t ra)
|
|
{
|
|
MemOpIdx oi = make_memop_idx(MO_BEUL | MO_UNALN, mmu_idx);
|
|
cpu_stl_mmu(env, addr, val, oi, ra);
|
|
}
|
|
|
|
void cpu_stq_be_mmuidx_ra(CPUArchState *env, abi_ptr addr, uint64_t val,
|
|
int mmu_idx, uintptr_t ra)
|
|
{
|
|
MemOpIdx oi = make_memop_idx(MO_BEUQ | MO_UNALN, mmu_idx);
|
|
cpu_stq_mmu(env, addr, val, oi, ra);
|
|
}
|
|
|
|
void cpu_stw_le_mmuidx_ra(CPUArchState *env, abi_ptr addr, uint32_t val,
|
|
int mmu_idx, uintptr_t ra)
|
|
{
|
|
MemOpIdx oi = make_memop_idx(MO_LEUW | MO_UNALN, mmu_idx);
|
|
cpu_stw_mmu(env, addr, val, oi, ra);
|
|
}
|
|
|
|
void cpu_stl_le_mmuidx_ra(CPUArchState *env, abi_ptr addr, uint32_t val,
|
|
int mmu_idx, uintptr_t ra)
|
|
{
|
|
MemOpIdx oi = make_memop_idx(MO_LEUL | MO_UNALN, mmu_idx);
|
|
cpu_stl_mmu(env, addr, val, oi, ra);
|
|
}
|
|
|
|
void cpu_stq_le_mmuidx_ra(CPUArchState *env, abi_ptr addr, uint64_t val,
|
|
int mmu_idx, uintptr_t ra)
|
|
{
|
|
MemOpIdx oi = make_memop_idx(MO_LEUQ | MO_UNALN, mmu_idx);
|
|
cpu_stq_mmu(env, addr, val, oi, ra);
|
|
}
|
|
|
|
/*--------------------------*/
|
|
|
|
uint32_t cpu_ldub_data_ra(CPUArchState *env, abi_ptr addr, uintptr_t ra)
|
|
{
|
|
int mmu_index = cpu_mmu_index(env_cpu(env), false);
|
|
return cpu_ldub_mmuidx_ra(env, addr, mmu_index, ra);
|
|
}
|
|
|
|
int cpu_ldsb_data_ra(CPUArchState *env, abi_ptr addr, uintptr_t ra)
|
|
{
|
|
return (int8_t)cpu_ldub_data_ra(env, addr, ra);
|
|
}
|
|
|
|
uint32_t cpu_lduw_be_data_ra(CPUArchState *env, abi_ptr addr, uintptr_t ra)
|
|
{
|
|
int mmu_index = cpu_mmu_index(env_cpu(env), false);
|
|
return cpu_lduw_be_mmuidx_ra(env, addr, mmu_index, ra);
|
|
}
|
|
|
|
int cpu_ldsw_be_data_ra(CPUArchState *env, abi_ptr addr, uintptr_t ra)
|
|
{
|
|
return (int16_t)cpu_lduw_be_data_ra(env, addr, ra);
|
|
}
|
|
|
|
uint32_t cpu_ldl_be_data_ra(CPUArchState *env, abi_ptr addr, uintptr_t ra)
|
|
{
|
|
int mmu_index = cpu_mmu_index(env_cpu(env), false);
|
|
return cpu_ldl_be_mmuidx_ra(env, addr, mmu_index, ra);
|
|
}
|
|
|
|
uint64_t cpu_ldq_be_data_ra(CPUArchState *env, abi_ptr addr, uintptr_t ra)
|
|
{
|
|
int mmu_index = cpu_mmu_index(env_cpu(env), false);
|
|
return cpu_ldq_be_mmuidx_ra(env, addr, mmu_index, ra);
|
|
}
|
|
|
|
uint32_t cpu_lduw_le_data_ra(CPUArchState *env, abi_ptr addr, uintptr_t ra)
|
|
{
|
|
int mmu_index = cpu_mmu_index(env_cpu(env), false);
|
|
return cpu_lduw_le_mmuidx_ra(env, addr, mmu_index, ra);
|
|
}
|
|
|
|
int cpu_ldsw_le_data_ra(CPUArchState *env, abi_ptr addr, uintptr_t ra)
|
|
{
|
|
return (int16_t)cpu_lduw_le_data_ra(env, addr, ra);
|
|
}
|
|
|
|
uint32_t cpu_ldl_le_data_ra(CPUArchState *env, abi_ptr addr, uintptr_t ra)
|
|
{
|
|
int mmu_index = cpu_mmu_index(env_cpu(env), false);
|
|
return cpu_ldl_le_mmuidx_ra(env, addr, mmu_index, ra);
|
|
}
|
|
|
|
uint64_t cpu_ldq_le_data_ra(CPUArchState *env, abi_ptr addr, uintptr_t ra)
|
|
{
|
|
int mmu_index = cpu_mmu_index(env_cpu(env), false);
|
|
return cpu_ldq_le_mmuidx_ra(env, addr, mmu_index, ra);
|
|
}
|
|
|
|
void cpu_stb_data_ra(CPUArchState *env, abi_ptr addr,
|
|
uint32_t val, uintptr_t ra)
|
|
{
|
|
int mmu_index = cpu_mmu_index(env_cpu(env), false);
|
|
cpu_stb_mmuidx_ra(env, addr, val, mmu_index, ra);
|
|
}
|
|
|
|
void cpu_stw_be_data_ra(CPUArchState *env, abi_ptr addr,
|
|
uint32_t val, uintptr_t ra)
|
|
{
|
|
int mmu_index = cpu_mmu_index(env_cpu(env), false);
|
|
cpu_stw_be_mmuidx_ra(env, addr, val, mmu_index, ra);
|
|
}
|
|
|
|
void cpu_stl_be_data_ra(CPUArchState *env, abi_ptr addr,
|
|
uint32_t val, uintptr_t ra)
|
|
{
|
|
int mmu_index = cpu_mmu_index(env_cpu(env), false);
|
|
cpu_stl_be_mmuidx_ra(env, addr, val, mmu_index, ra);
|
|
}
|
|
|
|
void cpu_stq_be_data_ra(CPUArchState *env, abi_ptr addr,
|
|
uint64_t val, uintptr_t ra)
|
|
{
|
|
int mmu_index = cpu_mmu_index(env_cpu(env), false);
|
|
cpu_stq_be_mmuidx_ra(env, addr, val, mmu_index, ra);
|
|
}
|
|
|
|
void cpu_stw_le_data_ra(CPUArchState *env, abi_ptr addr,
|
|
uint32_t val, uintptr_t ra)
|
|
{
|
|
int mmu_index = cpu_mmu_index(env_cpu(env), false);
|
|
cpu_stw_le_mmuidx_ra(env, addr, val, mmu_index, ra);
|
|
}
|
|
|
|
void cpu_stl_le_data_ra(CPUArchState *env, abi_ptr addr,
|
|
uint32_t val, uintptr_t ra)
|
|
{
|
|
int mmu_index = cpu_mmu_index(env_cpu(env), false);
|
|
cpu_stl_le_mmuidx_ra(env, addr, val, mmu_index, ra);
|
|
}
|
|
|
|
void cpu_stq_le_data_ra(CPUArchState *env, abi_ptr addr,
|
|
uint64_t val, uintptr_t ra)
|
|
{
|
|
int mmu_index = cpu_mmu_index(env_cpu(env), false);
|
|
cpu_stq_le_mmuidx_ra(env, addr, val, mmu_index, ra);
|
|
}
|
|
|
|
/*--------------------------*/
|
|
|
|
uint32_t cpu_ldub_data(CPUArchState *env, abi_ptr addr)
|
|
{
|
|
return cpu_ldub_data_ra(env, addr, 0);
|
|
}
|
|
|
|
int cpu_ldsb_data(CPUArchState *env, abi_ptr addr)
|
|
{
|
|
return (int8_t)cpu_ldub_data(env, addr);
|
|
}
|
|
|
|
uint32_t cpu_lduw_be_data(CPUArchState *env, abi_ptr addr)
|
|
{
|
|
return cpu_lduw_be_data_ra(env, addr, 0);
|
|
}
|
|
|
|
int cpu_ldsw_be_data(CPUArchState *env, abi_ptr addr)
|
|
{
|
|
return (int16_t)cpu_lduw_be_data(env, addr);
|
|
}
|
|
|
|
uint32_t cpu_ldl_be_data(CPUArchState *env, abi_ptr addr)
|
|
{
|
|
return cpu_ldl_be_data_ra(env, addr, 0);
|
|
}
|
|
|
|
uint64_t cpu_ldq_be_data(CPUArchState *env, abi_ptr addr)
|
|
{
|
|
return cpu_ldq_be_data_ra(env, addr, 0);
|
|
}
|
|
|
|
uint32_t cpu_lduw_le_data(CPUArchState *env, abi_ptr addr)
|
|
{
|
|
return cpu_lduw_le_data_ra(env, addr, 0);
|
|
}
|
|
|
|
int cpu_ldsw_le_data(CPUArchState *env, abi_ptr addr)
|
|
{
|
|
return (int16_t)cpu_lduw_le_data(env, addr);
|
|
}
|
|
|
|
uint32_t cpu_ldl_le_data(CPUArchState *env, abi_ptr addr)
|
|
{
|
|
return cpu_ldl_le_data_ra(env, addr, 0);
|
|
}
|
|
|
|
uint64_t cpu_ldq_le_data(CPUArchState *env, abi_ptr addr)
|
|
{
|
|
return cpu_ldq_le_data_ra(env, addr, 0);
|
|
}
|
|
|
|
void cpu_stb_data(CPUArchState *env, abi_ptr addr, uint32_t val)
|
|
{
|
|
cpu_stb_data_ra(env, addr, val, 0);
|
|
}
|
|
|
|
void cpu_stw_be_data(CPUArchState *env, abi_ptr addr, uint32_t val)
|
|
{
|
|
cpu_stw_be_data_ra(env, addr, val, 0);
|
|
}
|
|
|
|
void cpu_stl_be_data(CPUArchState *env, abi_ptr addr, uint32_t val)
|
|
{
|
|
cpu_stl_be_data_ra(env, addr, val, 0);
|
|
}
|
|
|
|
void cpu_stq_be_data(CPUArchState *env, abi_ptr addr, uint64_t val)
|
|
{
|
|
cpu_stq_be_data_ra(env, addr, val, 0);
|
|
}
|
|
|
|
void cpu_stw_le_data(CPUArchState *env, abi_ptr addr, uint32_t val)
|
|
{
|
|
cpu_stw_le_data_ra(env, addr, val, 0);
|
|
}
|
|
|
|
void cpu_stl_le_data(CPUArchState *env, abi_ptr addr, uint32_t val)
|
|
{
|
|
cpu_stl_le_data_ra(env, addr, val, 0);
|
|
}
|
|
|
|
void cpu_stq_le_data(CPUArchState *env, abi_ptr addr, uint64_t val)
|
|
{
|
|
cpu_stq_le_data_ra(env, addr, val, 0);
|
|
}
|