With the current structure of cputlb.c, there is no difference between the little-endian and big-endian entry points, aside from the assert. Unify the pairs of functions. The only use of the functions with explicit endianness was in target/sparc64, and that was only to satisfy the assert: the correct endianness is already built into memop. Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org> Reviewed-by: Alex Bennée <alex.bennee@linaro.org> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
		
			
				
	
	
		
			308 lines
		
	
	
		
			8.6 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			308 lines
		
	
	
		
			8.6 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.
 | 
						|
 */
 | 
						|
 | 
						|
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)
 | 
						|
{
 | 
						|
    return cpu_ldub_mmuidx_ra(env, addr, cpu_mmu_index(env, false), 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)
 | 
						|
{
 | 
						|
    return cpu_lduw_be_mmuidx_ra(env, addr, cpu_mmu_index(env, false), 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)
 | 
						|
{
 | 
						|
    return cpu_ldl_be_mmuidx_ra(env, addr, cpu_mmu_index(env, false), ra);
 | 
						|
}
 | 
						|
 | 
						|
uint64_t cpu_ldq_be_data_ra(CPUArchState *env, abi_ptr addr, uintptr_t ra)
 | 
						|
{
 | 
						|
    return cpu_ldq_be_mmuidx_ra(env, addr, cpu_mmu_index(env, false), ra);
 | 
						|
}
 | 
						|
 | 
						|
uint32_t cpu_lduw_le_data_ra(CPUArchState *env, abi_ptr addr, uintptr_t ra)
 | 
						|
{
 | 
						|
    return cpu_lduw_le_mmuidx_ra(env, addr, cpu_mmu_index(env, false), 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)
 | 
						|
{
 | 
						|
    return cpu_ldl_le_mmuidx_ra(env, addr, cpu_mmu_index(env, false), ra);
 | 
						|
}
 | 
						|
 | 
						|
uint64_t cpu_ldq_le_data_ra(CPUArchState *env, abi_ptr addr, uintptr_t ra)
 | 
						|
{
 | 
						|
    return cpu_ldq_le_mmuidx_ra(env, addr, cpu_mmu_index(env, false), ra);
 | 
						|
}
 | 
						|
 | 
						|
void cpu_stb_data_ra(CPUArchState *env, abi_ptr addr,
 | 
						|
                     uint32_t val, uintptr_t ra)
 | 
						|
{
 | 
						|
    cpu_stb_mmuidx_ra(env, addr, val, cpu_mmu_index(env, false), ra);
 | 
						|
}
 | 
						|
 | 
						|
void cpu_stw_be_data_ra(CPUArchState *env, abi_ptr addr,
 | 
						|
                        uint32_t val, uintptr_t ra)
 | 
						|
{
 | 
						|
    cpu_stw_be_mmuidx_ra(env, addr, val, cpu_mmu_index(env, false), ra);
 | 
						|
}
 | 
						|
 | 
						|
void cpu_stl_be_data_ra(CPUArchState *env, abi_ptr addr,
 | 
						|
                        uint32_t val, uintptr_t ra)
 | 
						|
{
 | 
						|
    cpu_stl_be_mmuidx_ra(env, addr, val, cpu_mmu_index(env, false), ra);
 | 
						|
}
 | 
						|
 | 
						|
void cpu_stq_be_data_ra(CPUArchState *env, abi_ptr addr,
 | 
						|
                        uint64_t val, uintptr_t ra)
 | 
						|
{
 | 
						|
    cpu_stq_be_mmuidx_ra(env, addr, val, cpu_mmu_index(env, false), ra);
 | 
						|
}
 | 
						|
 | 
						|
void cpu_stw_le_data_ra(CPUArchState *env, abi_ptr addr,
 | 
						|
                        uint32_t val, uintptr_t ra)
 | 
						|
{
 | 
						|
    cpu_stw_le_mmuidx_ra(env, addr, val, cpu_mmu_index(env, false), ra);
 | 
						|
}
 | 
						|
 | 
						|
void cpu_stl_le_data_ra(CPUArchState *env, abi_ptr addr,
 | 
						|
                        uint32_t val, uintptr_t ra)
 | 
						|
{
 | 
						|
    cpu_stl_le_mmuidx_ra(env, addr, val, cpu_mmu_index(env, false), ra);
 | 
						|
}
 | 
						|
 | 
						|
void cpu_stq_le_data_ra(CPUArchState *env, abi_ptr addr,
 | 
						|
                        uint64_t val, uintptr_t ra)
 | 
						|
{
 | 
						|
    cpu_stq_le_mmuidx_ra(env, addr, val, cpu_mmu_index(env, false), 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);
 | 
						|
}
 |