@ -1281,6 +1281,29 @@ static void *atomic_mmu_lookup(CPUArchState *env, target_ulong addr,
typedef uint64_t FullLoadHelper ( CPUArchState * env , target_ulong addr ,
TCGMemOpIdx oi , uintptr_t retaddr ) ;
static inline uint64_t QEMU_ALWAYS_INLINE
load_memop ( const void * haddr , MemOp op )
{
switch ( op ) {
case MO_UB :
return ldub_p ( haddr ) ;
case MO_BEUW :
return lduw_be_p ( haddr ) ;
case MO_LEUW :
return lduw_le_p ( haddr ) ;
case MO_BEUL :
return ( uint32_t ) ldl_be_p ( haddr ) ;
case MO_LEUL :
return ( uint32_t ) ldl_le_p ( haddr ) ;
case MO_BEQ :
return ldq_be_p ( haddr ) ;
case MO_LEQ :
return ldq_le_p ( haddr ) ;
default :
qemu_build_not_reached ( ) ;
}
}
static inline uint64_t QEMU_ALWAYS_INLINE
load_helper ( CPUArchState * env , target_ulong addr , TCGMemOpIdx oi ,
uintptr_t retaddr , MemOp op , bool code_read ,
@ -1373,33 +1396,7 @@ load_helper(CPUArchState *env, target_ulong addr, TCGMemOpIdx oi,
do_aligned_access :
haddr = ( void * ) ( ( uintptr_t ) addr + entry - > addend ) ;
switch ( op ) {
case MO_UB :
res = ldub_p ( haddr ) ;
break ;
case MO_BEUW :
res = lduw_be_p ( haddr ) ;
break ;
case MO_LEUW :
res = lduw_le_p ( haddr ) ;
break ;
case MO_BEUL :
res = ( uint32_t ) ldl_be_p ( haddr ) ;
break ;
case MO_LEUL :
res = ( uint32_t ) ldl_le_p ( haddr ) ;
break ;
case MO_BEQ :
res = ldq_be_p ( haddr ) ;
break ;
case MO_LEQ :
res = ldq_le_p ( haddr ) ;
break ;
default :
qemu_build_not_reached ( ) ;
}
return res ;
return load_memop ( haddr , op ) ;
}
/*
@ -1530,6 +1527,36 @@ tcg_target_ulong helper_be_ldsl_mmu(CPUArchState *env, target_ulong addr,
* Store Helpers
*/
static inline void QEMU_ALWAYS_INLINE
store_memop ( void * haddr , uint64_t val , MemOp op )
{
switch ( op ) {
case MO_UB :
stb_p ( haddr , val ) ;
break ;
case MO_BEUW :
stw_be_p ( haddr , val ) ;
break ;
case MO_LEUW :
stw_le_p ( haddr , val ) ;
break ;
case MO_BEUL :
stl_be_p ( haddr , val ) ;
break ;
case MO_LEUL :
stl_le_p ( haddr , val ) ;
break ;
case MO_BEQ :
stq_be_p ( haddr , val ) ;
break ;
case MO_LEQ :
stq_le_p ( haddr , val ) ;
break ;
default :
qemu_build_not_reached ( ) ;
}
}
static inline void QEMU_ALWAYS_INLINE
store_helper ( CPUArchState * env , target_ulong addr , uint64_t val ,
TCGMemOpIdx oi , uintptr_t retaddr , MemOp op )
@ -1657,31 +1684,7 @@ store_helper(CPUArchState *env, target_ulong addr, uint64_t val,
do_aligned_access :
haddr = ( void * ) ( ( uintptr_t ) addr + entry - > addend ) ;
switch ( op ) {
case MO_UB :
stb_p ( haddr , val ) ;
break ;
case MO_BEUW :
stw_be_p ( haddr , val ) ;
break ;
case MO_LEUW :
stw_le_p ( haddr , val ) ;
break ;
case MO_BEUL :
stl_be_p ( haddr , val ) ;
break ;
case MO_LEUL :
stl_le_p ( haddr , val ) ;
break ;
case MO_BEQ :
stq_be_p ( haddr , val ) ;
break ;
case MO_LEQ :
stq_le_p ( haddr , val ) ;
break ;
default :
qemu_build_not_reached ( ) ;
}
store_memop ( haddr , val , op ) ;
}
void helper_ret_stb_mmu ( CPUArchState * env , target_ulong addr , uint8_t val ,