|
|
|
@ -135,7 +135,7 @@ static void plugin_load_cb(CPUArchState *env, abi_ptr addr, |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
uint8_t cpu_ldb_mmu(CPUArchState *env, abi_ptr addr, MemOpIdx oi, uintptr_t ra) |
|
|
|
uint8_t cpu_ldb_mmu(CPUArchState *env, vaddr addr, MemOpIdx oi, uintptr_t ra) |
|
|
|
{ |
|
|
|
uint8_t ret; |
|
|
|
|
|
|
|
@ -145,7 +145,7 @@ uint8_t cpu_ldb_mmu(CPUArchState *env, abi_ptr addr, MemOpIdx oi, uintptr_t ra) |
|
|
|
return ret; |
|
|
|
} |
|
|
|
|
|
|
|
uint16_t cpu_ldw_mmu(CPUArchState *env, abi_ptr addr, |
|
|
|
uint16_t cpu_ldw_mmu(CPUArchState *env, vaddr addr, |
|
|
|
MemOpIdx oi, uintptr_t ra) |
|
|
|
{ |
|
|
|
uint16_t ret; |
|
|
|
@ -156,7 +156,7 @@ uint16_t cpu_ldw_mmu(CPUArchState *env, abi_ptr addr, |
|
|
|
return ret; |
|
|
|
} |
|
|
|
|
|
|
|
uint32_t cpu_ldl_mmu(CPUArchState *env, abi_ptr addr, |
|
|
|
uint32_t cpu_ldl_mmu(CPUArchState *env, vaddr addr, |
|
|
|
MemOpIdx oi, uintptr_t ra) |
|
|
|
{ |
|
|
|
uint32_t ret; |
|
|
|
@ -167,7 +167,7 @@ uint32_t cpu_ldl_mmu(CPUArchState *env, abi_ptr addr, |
|
|
|
return ret; |
|
|
|
} |
|
|
|
|
|
|
|
uint64_t cpu_ldq_mmu(CPUArchState *env, abi_ptr addr, |
|
|
|
uint64_t cpu_ldq_mmu(CPUArchState *env, vaddr addr, |
|
|
|
MemOpIdx oi, uintptr_t ra) |
|
|
|
{ |
|
|
|
uint64_t ret; |
|
|
|
@ -178,7 +178,7 @@ uint64_t cpu_ldq_mmu(CPUArchState *env, abi_ptr addr, |
|
|
|
return ret; |
|
|
|
} |
|
|
|
|
|
|
|
Int128 cpu_ld16_mmu(CPUArchState *env, abi_ptr addr, |
|
|
|
Int128 cpu_ld16_mmu(CPUArchState *env, vaddr addr, |
|
|
|
MemOpIdx oi, uintptr_t ra) |
|
|
|
{ |
|
|
|
Int128 ret; |
|
|
|
@ -205,14 +205,14 @@ static void plugin_store_cb(CPUArchState *env, abi_ptr addr, |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
void cpu_stb_mmu(CPUArchState *env, abi_ptr addr, uint8_t val, |
|
|
|
void cpu_stb_mmu(CPUArchState *env, vaddr addr, uint8_t val, |
|
|
|
MemOpIdx oi, uintptr_t retaddr) |
|
|
|
{ |
|
|
|
helper_stb_mmu(env, addr, val, oi, retaddr); |
|
|
|
plugin_store_cb(env, addr, val, 0, oi); |
|
|
|
} |
|
|
|
|
|
|
|
void cpu_stw_mmu(CPUArchState *env, abi_ptr addr, uint16_t val, |
|
|
|
void cpu_stw_mmu(CPUArchState *env, vaddr addr, uint16_t val, |
|
|
|
MemOpIdx oi, uintptr_t retaddr) |
|
|
|
{ |
|
|
|
tcg_debug_assert((get_memop(oi) & MO_SIZE) == MO_16); |
|
|
|
@ -220,7 +220,7 @@ void cpu_stw_mmu(CPUArchState *env, abi_ptr addr, uint16_t val, |
|
|
|
plugin_store_cb(env, addr, val, 0, oi); |
|
|
|
} |
|
|
|
|
|
|
|
void cpu_stl_mmu(CPUArchState *env, abi_ptr addr, uint32_t val, |
|
|
|
void cpu_stl_mmu(CPUArchState *env, vaddr addr, uint32_t val, |
|
|
|
MemOpIdx oi, uintptr_t retaddr) |
|
|
|
{ |
|
|
|
tcg_debug_assert((get_memop(oi) & MO_SIZE) == MO_32); |
|
|
|
@ -228,7 +228,7 @@ void cpu_stl_mmu(CPUArchState *env, abi_ptr addr, uint32_t val, |
|
|
|
plugin_store_cb(env, addr, val, 0, oi); |
|
|
|
} |
|
|
|
|
|
|
|
void cpu_stq_mmu(CPUArchState *env, abi_ptr addr, uint64_t val, |
|
|
|
void cpu_stq_mmu(CPUArchState *env, vaddr addr, uint64_t val, |
|
|
|
MemOpIdx oi, uintptr_t retaddr) |
|
|
|
{ |
|
|
|
tcg_debug_assert((get_memop(oi) & MO_SIZE) == MO_64); |
|
|
|
@ -236,325 +236,10 @@ void cpu_stq_mmu(CPUArchState *env, abi_ptr addr, uint64_t val, |
|
|
|
plugin_store_cb(env, addr, val, 0, oi); |
|
|
|
} |
|
|
|
|
|
|
|
void cpu_st16_mmu(CPUArchState *env, abi_ptr addr, Int128 val, |
|
|
|
void cpu_st16_mmu(CPUArchState *env, vaddr 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, int128_getlo(val), int128_gethi(val), 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); |
|
|
|
} |
|
|
|
|