Revision bc814401 target-mips/op_helper.c
b/target-mips/op_helper.c | ||
---|---|---|
387 | 387 |
static void fill_tlb (int idx) |
388 | 388 |
{ |
389 | 389 |
tlb_t *tlb; |
390 |
int size; |
|
391 | 390 |
|
392 | 391 |
/* XXX: detect conflicting TLBs and raise a MCHECK exception when needed */ |
393 | 392 |
tlb = &env->tlb[idx]; |
394 | 393 |
tlb->VPN = env->CP0_EntryHi & (int32_t)0xFFFFE000; |
395 | 394 |
tlb->ASID = env->CP0_EntryHi & 0xFF; |
396 |
size = env->CP0_PageMask >> 13; |
|
397 |
size = 4 * (size + 1); |
|
398 |
tlb->end = tlb->VPN + (1 << (8 + size)); |
|
399 |
tlb->end2 = tlb->end + (1 << (8 + size)); |
|
400 | 395 |
tlb->G = env->CP0_EntryLo0 & env->CP0_EntryLo1 & 1; |
401 | 396 |
tlb->V0 = (env->CP0_EntryLo0 & 2) != 0; |
402 | 397 |
tlb->D0 = (env->CP0_EntryLo0 & 4) != 0; |
... | ... | |
467 | 462 |
{ |
468 | 463 |
tlb_t *tlb; |
469 | 464 |
uint8_t ASID; |
470 |
int size; |
|
471 | 465 |
|
472 | 466 |
ASID = env->CP0_EntryHi & 0xFF; |
473 | 467 |
tlb = &env->tlb[env->CP0_index & (MIPS_TLB_NB - 1)]; |
... | ... | |
479 | 473 |
mips_tlb_flush_extra(env, MIPS_TLB_NB); |
480 | 474 |
|
481 | 475 |
env->CP0_EntryHi = tlb->VPN | tlb->ASID; |
482 |
size = (tlb->end - tlb->VPN) >> 12; |
|
483 |
env->CP0_PageMask = (size - 1) << 13; |
|
484 | 476 |
env->CP0_EntryLo0 = tlb->G | (tlb->V0 << 1) | (tlb->D0 << 2) | |
485 | 477 |
(tlb->C0 << 3) | (tlb->PFN[0] >> 6); |
486 | 478 |
env->CP0_EntryLo1 = tlb->G | (tlb->V1 << 1) | (tlb->D1 << 2) | |
Also available in: Unified diff