From: Aurelien Jarno Date: Tue, 9 Oct 2012 19:53:21 +0000 (+0200) Subject: target-mips: fix TLBR wrt SEGMask X-Git-Tag: v1.3.0-rc0~96 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=bc3e45e13a93b883f0369acb2e19c0cec8705a7a;p=thirdparty%2Fqemu.git target-mips: fix TLBR wrt SEGMask Like r4k_map_address(), r4k_helper_tlbp() should use SEGMask to mask the address. Signed-off-by: Aurelien Jarno --- diff --git a/target-mips/op_helper.c b/target-mips/op_helper.c index 773c7104afe..cdd6880efc8 100644 --- a/target-mips/op_helper.c +++ b/target-mips/op_helper.c @@ -1856,6 +1856,9 @@ void r4k_helper_tlbp(CPUMIPSState *env) mask = tlb->PageMask | ~(TARGET_PAGE_MASK << 1); tag = env->CP0_EntryHi & ~mask; VPN = tlb->VPN & ~mask; +#if defined(TARGET_MIPS64) + tag &= env->SEGMask; +#endif /* Check ASID, virtual page number & size */ if ((tlb->G == 1 || tlb->ASID == ASID) && VPN == tag) { /* TLB match */ @@ -1871,6 +1874,9 @@ void r4k_helper_tlbp(CPUMIPSState *env) mask = tlb->PageMask | ~(TARGET_PAGE_MASK << 1); tag = env->CP0_EntryHi & ~mask; VPN = tlb->VPN & ~mask; +#if defined(TARGET_MIPS64) + tag &= env->SEGMask; +#endif /* Check ASID, virtual page number & size */ if ((tlb->G == 1 || tlb->ASID == ASID) && VPN == tag) { r4k_mips_tlb_flush_extra (env, i);