mirror of
https://github.com/Motorhead1991/qemu.git
synced 2026-03-14 14:56:05 -06:00
target/arm: Fill in TCGCPUOps.pointer_wrap
For a-profile, check A32 vs A64 state. For m-profile, use cpu_pointer_wrap_uint32. Cc: qemu-arm@nongnu.org Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
parent
981f2beb16
commit
d21144a48c
2 changed files with 25 additions and 0 deletions
|
|
@ -2703,6 +2703,29 @@ static const struct SysemuCPUOps arm_sysemu_ops = {
|
|||
#endif
|
||||
|
||||
#ifdef CONFIG_TCG
|
||||
#ifndef CONFIG_USER_ONLY
|
||||
static vaddr aprofile_pointer_wrap(CPUState *cs, int mmu_idx,
|
||||
vaddr result, vaddr base)
|
||||
{
|
||||
/*
|
||||
* The Stage2 and Phys indexes are only used for ptw on arm32,
|
||||
* and all pte's are aligned, so we never produce a wrap for these.
|
||||
* Double check that we're not truncating a 40-bit physical address.
|
||||
*/
|
||||
assert((unsigned)mmu_idx < (ARMMMUIdx_Stage2_S & ARM_MMU_IDX_COREIDX_MASK));
|
||||
|
||||
if (!is_a64(cpu_env(cs))) {
|
||||
return (uint32_t)result;
|
||||
}
|
||||
|
||||
/*
|
||||
* TODO: For FEAT_CPA2, decide how to we want to resolve
|
||||
* Unpredictable_CPACHECK in AddressIncrement.
|
||||
*/
|
||||
return result;
|
||||
}
|
||||
#endif /* !CONFIG_USER_ONLY */
|
||||
|
||||
static const TCGCPUOps arm_tcg_ops = {
|
||||
.mttcg_supported = true,
|
||||
/* ARM processors have a weak memory model */
|
||||
|
|
@ -2722,6 +2745,7 @@ static const TCGCPUOps arm_tcg_ops = {
|
|||
.untagged_addr = aarch64_untagged_addr,
|
||||
#else
|
||||
.tlb_fill_align = arm_cpu_tlb_fill_align,
|
||||
.pointer_wrap = aprofile_pointer_wrap,
|
||||
.cpu_exec_interrupt = arm_cpu_exec_interrupt,
|
||||
.cpu_exec_halt = arm_cpu_exec_halt,
|
||||
.cpu_exec_reset = cpu_reset,
|
||||
|
|
|
|||
|
|
@ -249,6 +249,7 @@ static const TCGCPUOps arm_v7m_tcg_ops = {
|
|||
.record_sigbus = arm_cpu_record_sigbus,
|
||||
#else
|
||||
.tlb_fill_align = arm_cpu_tlb_fill_align,
|
||||
.pointer_wrap = cpu_pointer_wrap_uint32,
|
||||
.cpu_exec_interrupt = arm_v7m_cpu_exec_interrupt,
|
||||
.cpu_exec_halt = arm_cpu_exec_halt,
|
||||
.cpu_exec_reset = cpu_reset,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue