Revision bc814401 target-mips/helper.c

b/target-mips/helper.c
50 50
        tlb = &env->tlb[i];
51 51
        /* Check ASID, virtual page number & size */
52 52
        if ((tlb->G == 1 || tlb->ASID == ASID) &&
53
            tlb->VPN == tag && address < tlb->end2) {
53
            tlb->VPN == tag) {
54 54
            /* TLB match */
55 55
            n = (address >> TARGET_PAGE_BITS) & 1;
56 56
            /* Check access rights */
......
420 420
void invalidate_tlb (CPUState *env, int idx, int use_extra)
421 421
{
422 422
    tlb_t *tlb;
423
    target_ulong addr;
424 423
    uint8_t ASID;
425 424

  
426 425
    ASID = env->CP0_EntryHi & 0xFF;
......
441 440
        return;
442 441
    }
443 442

  
444
    if (tlb->V0) {
445
        addr = tlb->VPN;
446
        while (addr < tlb->end) {
447
            tlb_flush_page (env, addr);
448
            addr += TARGET_PAGE_SIZE;
449
        }
450
    }
451
    if (tlb->V1) {
452
        addr = tlb->end;
453
        while (addr < tlb->end2) {
454
            tlb_flush_page (env, addr);
455
            addr += TARGET_PAGE_SIZE;
456
        }
457
    }
443
    if (tlb->V0)
444
            tlb_flush_page (env, tlb->VPN);
445
    if (tlb->V1)
446
            tlb_flush_page (env, tlb->VPN + TARGET_PAGE_SIZE);
458 447
}
459

  

Also available in: Unified diff