Commit 7a962d3087d24fa0ea377cbde39ab97f81457ff6
1 parent
e1d9a508
use MIPS_TLB_NB constant (Ralf Baechle)
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@1479 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
2 changed files
with
8 additions
and
6 deletions
target-mips/helper.c
... | ... | @@ -33,7 +33,7 @@ static int map_address (CPUState *env, target_ulong *physical, int *prot, |
33 | 33 | ret = -2; |
34 | 34 | tag = (address & 0xFFFFE000); |
35 | 35 | ASID = env->CP0_EntryHi & 0x000000FF; |
36 | - for (i = 0; i < 16; i++) { | |
36 | + for (i = 0; i < MIPS_TLB_NB; i++) { | |
37 | 37 | tlb = &env->tlb[i]; |
38 | 38 | /* Check ASID, virtual page number & size */ |
39 | 39 | if ((tlb->G == 1 || tlb->ASID == ASID) && | ... | ... |
target-mips/op_helper.c
... | ... | @@ -531,8 +531,10 @@ static void fill_tb (int idx) |
531 | 531 | |
532 | 532 | void do_tlbwi (void) |
533 | 533 | { |
534 | - invalidate_tb(env->CP0_index & 0xF); | |
535 | - fill_tb(env->CP0_index & 0xF); | |
534 | + /* Wildly undefined effects for CP0_index containing a too high value and | |
535 | + MIPS_TLB_NB not being a power of two. But so does real silicon. */ | |
536 | + invalidate_tb(env->CP0_index & (MIPS_TLB_NB - 1)); | |
537 | + fill_tb(env->CP0_index & (MIPS_TLB_NB - 1)); | |
536 | 538 | } |
537 | 539 | |
538 | 540 | void do_tlbwr (void) |
... | ... | @@ -552,7 +554,7 @@ void do_tlbp (void) |
552 | 554 | |
553 | 555 | tag = (env->CP0_EntryHi & 0xFFFFE000); |
554 | 556 | ASID = env->CP0_EntryHi & 0x000000FF; |
555 | - for (i = 0; i < 16; i++) { | |
557 | + for (i = 0; i < MIPS_TLB_NB; i++) { | |
556 | 558 | tlb = &env->tlb[i]; |
557 | 559 | /* Check ASID, virtual page number & size */ |
558 | 560 | if ((tlb->G == 1 || tlb->ASID == ASID) && tlb->VPN == tag) { |
... | ... | @@ -561,7 +563,7 @@ void do_tlbp (void) |
561 | 563 | break; |
562 | 564 | } |
563 | 565 | } |
564 | - if (i == 16) { | |
566 | + if (i == MIPS_TLB_NB) { | |
565 | 567 | env->CP0_index |= 0x80000000; |
566 | 568 | } |
567 | 569 | } |
... | ... | @@ -571,7 +573,7 @@ void do_tlbr (void) |
571 | 573 | tlb_t *tlb; |
572 | 574 | int size; |
573 | 575 | |
574 | - tlb = &env->tlb[env->CP0_index & 0xF]; | |
576 | + tlb = &env->tlb[env->CP0_index & (MIPS_TLB_NB - 1)]; | |
575 | 577 | env->CP0_EntryHi = tlb->VPN | tlb->ASID; |
576 | 578 | size = (tlb->end - tlb->VPN) >> 12; |
577 | 579 | env->CP0_PageMask = (size - 1) << 13; | ... | ... |