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