diff options
author | Alexandre Courbot <gnurou@gmail.com> | 2011-01-26 11:57:53 +0900 |
---|---|---|
committer | Aurelien Jarno <aurelien@aurel32.net> | 2011-01-26 14:30:24 +0100 |
commit | e3f114f761fd44db3b33f5d704da48392fce4ce8 (patch) | |
tree | dfe023ae1a7c56796831efd170c454a76e9df8e7 /target-sh4 | |
parent | bc656a296885b8be7a27f49ae827298fd1b9d153 (diff) | |
download | qemu-e3f114f761fd44db3b33f5d704da48392fce4ce8.zip qemu-e3f114f761fd44db3b33f5d704da48392fce4ce8.tar.gz qemu-e3f114f761fd44db3b33f5d704da48392fce4ce8.tar.bz2 |
target-sh4: update PTEH upon MMU exception
Update the PTEH register to contain the VPN at which an MMU
exception occured as specified by the SH4 reference.
Signed-off-by: Alexandre Courbot <gnurou@gmail.com>
Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
Diffstat (limited to 'target-sh4')
-rw-r--r-- | target-sh4/helper.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/target-sh4/helper.c b/target-sh4/helper.c index 785e9e54..d2038bd 100644 --- a/target-sh4/helper.c +++ b/target-sh4/helper.c @@ -453,6 +453,10 @@ int cpu_sh4_handle_mmu_fault(CPUState * env, target_ulong address, int rw, if (ret != MMU_OK) { env->tea = address; + if (ret != MMU_DTLB_MULTIPLE && ret != MMU_ITLB_MULTIPLE) { + env->pteh = (env->pteh & PTEH_ASID_MASK) | + (address & PTEH_VPN_MASK); + } switch (ret) { case MMU_ITLB_MISS: case MMU_DTLB_MISS_READ: |