mirror of
https://github.com/yuzu-emu/unicorn.git
synced 2024-12-23 15:05:37 +00:00
target-sparc: hypervisor mode takes over nucleus mode
Accordinf to UA2005, 9.3.3 "Address Space Identifiers", "In hyperprivileged mode, all instruction fetches and loads and stores with implicit ASIs use a physical address, regardless of the value of TL". Backports commit 9a10756d1204c3528e47892195349bf882069846 from qemu
This commit is contained in:
parent
204a4dc1d3
commit
8710ef1128
|
@ -719,10 +719,10 @@ static inline int cpu_mmu_index(CPUSPARCState *env, bool ifetch)
|
|||
? (env->lsu & IMMU_E) == 0 || (env->pstate & PS_RED) != 0
|
||||
: (env->lsu & DMMU_E) == 0) {
|
||||
return MMU_PHYS_IDX;
|
||||
} else if (env->tl > 0) {
|
||||
return MMU_NUCLEUS_IDX;
|
||||
} else if (cpu_hypervisor_mode(env)) {
|
||||
return MMU_HYPV_IDX;
|
||||
} else if (env->tl > 0) {
|
||||
return MMU_NUCLEUS_IDX;
|
||||
} else if (cpu_supervisor_mode(env)) {
|
||||
return MMU_KERNEL_IDX;
|
||||
} else {
|
||||
|
|
|
@ -2292,7 +2292,11 @@ static DisasASI get_asi(DisasContext *dc, int insn, TCGMemOp memop)
|
|||
case ASI_TWINX_NL:
|
||||
case ASI_NUCLEUS_QUAD_LDD:
|
||||
case ASI_NUCLEUS_QUAD_LDD_L:
|
||||
mem_idx = MMU_NUCLEUS_IDX;
|
||||
if (hypervisor(dc)) {
|
||||
mem_idx = MMU_HYPV_IDX;
|
||||
} else {
|
||||
mem_idx = MMU_NUCLEUS_IDX;
|
||||
}
|
||||
break;
|
||||
case ASI_AIUP: /* As if user primary */
|
||||
case ASI_AIUPL: /* As if user primary LE */
|
||||
|
|
Loading…
Reference in a new issue