diff options
author | j_mayer <j_mayer@c046a42c-6fe2-441c-8c8c-71466251a162> | 2007-10-01 01:51:12 +0000 |
---|---|---|
committer | j_mayer <j_mayer@c046a42c-6fe2-441c-8c8c-71466251a162> | 2007-10-01 01:51:12 +0000 |
commit | daf4f96ece7dc4abdfe29c9a7fdd694ffd8969bb (patch) | |
tree | 5beb2a3f15387eb42a32c92c32898453595e6e2f /target-ppc/op_helper.c | |
parent | 035feb8857d410c3e066f13d8f7bcf8e836e6972 (diff) |
Avoid op helpers that would just call helpers for TLB & SLB management:
call the helpers directly from the micro-ops.
Avoid duplicated code for tlbsx. implementation.
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@3302 c046a42c-6fe2-441c-8c8c-71466251a162
Diffstat (limited to 'target-ppc/op_helper.c')
-rw-r--r-- | target-ppc/op_helper.c | 143 |
1 files changed, 0 insertions, 143 deletions
diff --git a/target-ppc/op_helper.c b/target-ppc/op_helper.c index 5223b1543f..a7c81776fd 100644 --- a/target-ppc/op_helper.c +++ b/target-ppc/op_helper.c @@ -36,7 +36,6 @@ //#define DEBUG_OP //#define DEBUG_EXCEPTIONS //#define DEBUG_SOFTWARE_TLB -//#define FLUSH_ALL_TLBS /*****************************************************************************/ /* Exceptions processing helpers */ @@ -2336,118 +2335,6 @@ void tlb_fill (target_ulong addr, int is_write, int is_user, void *retaddr) env = saved_env; } -/* TLB invalidation helpers */ -void do_tlbia (void) -{ - ppc_tlb_invalidate_all(env); -} - -void do_tlbie (void) -{ - T0 = (uint32_t)T0; -#if !defined(FLUSH_ALL_TLBS) - /* XXX: Remove thoses tests */ - if (unlikely(env->mmu_model == POWERPC_MMU_SOFT_6xx)) { - ppc6xx_tlb_invalidate_virt(env, T0 & TARGET_PAGE_MASK, 0); - if (env->id_tlbs == 1) - ppc6xx_tlb_invalidate_virt(env, T0 & TARGET_PAGE_MASK, 1); - } else if (unlikely(env->mmu_model == POWERPC_MMU_SOFT_4xx)) { - ppc4xx_tlb_invalidate_virt(env, T0 & TARGET_PAGE_MASK, - env->spr[SPR_40x_PID]); - } else { - /* tlbie invalidate TLBs for all segments */ - T0 &= TARGET_PAGE_MASK; - T0 &= ~((target_ulong)-1 << 28); - /* XXX: this case should be optimized, - * giving a mask to tlb_flush_page - */ - tlb_flush_page(env, T0 | (0x0 << 28)); - tlb_flush_page(env, T0 | (0x1 << 28)); - tlb_flush_page(env, T0 | (0x2 << 28)); - tlb_flush_page(env, T0 | (0x3 << 28)); - tlb_flush_page(env, T0 | (0x4 << 28)); - tlb_flush_page(env, T0 | (0x5 << 28)); - tlb_flush_page(env, T0 | (0x6 << 28)); - tlb_flush_page(env, T0 | (0x7 << 28)); - tlb_flush_page(env, T0 | (0x8 << 28)); - tlb_flush_page(env, T0 | (0x9 << 28)); - tlb_flush_page(env, T0 | (0xA << 28)); - tlb_flush_page(env, T0 | (0xB << 28)); - tlb_flush_page(env, T0 | (0xC << 28)); - tlb_flush_page(env, T0 | (0xD << 28)); - tlb_flush_page(env, T0 | (0xE << 28)); - tlb_flush_page(env, T0 | (0xF << 28)); - } -#else - do_tlbia(); -#endif -} - -#if defined(TARGET_PPC64) -void do_tlbie_64 (void) -{ - T0 = (uint64_t)T0; -#if !defined(FLUSH_ALL_TLBS) - if (unlikely(env->mmu_model == POWERPC_MMU_SOFT_6xx)) { - ppc6xx_tlb_invalidate_virt(env, T0 & TARGET_PAGE_MASK, 0); - if (env->id_tlbs == 1) - ppc6xx_tlb_invalidate_virt(env, T0 & TARGET_PAGE_MASK, 1); - } else if (unlikely(env->mmu_model == POWERPC_MMU_SOFT_4xx)) { - /* XXX: TODO */ -#if 0 - ppcbooke_tlb_invalidate_virt(env, T0 & TARGET_PAGE_MASK, - env->spr[SPR_BOOKE_PID]); -#endif - } else { - /* tlbie invalidate TLBs for all segments - * As we have 2^36 segments, invalidate all qemu TLBs - */ -#if 0 - T0 &= TARGET_PAGE_MASK; - T0 &= ~((target_ulong)-1 << 28); - /* XXX: this case should be optimized, - * giving a mask to tlb_flush_page - */ - tlb_flush_page(env, T0 | (0x0 << 28)); - tlb_flush_page(env, T0 | (0x1 << 28)); - tlb_flush_page(env, T0 | (0x2 << 28)); - tlb_flush_page(env, T0 | (0x3 << 28)); - tlb_flush_page(env, T0 | (0x4 << 28)); - tlb_flush_page(env, T0 | (0x5 << 28)); - tlb_flush_page(env, T0 | (0x6 << 28)); - tlb_flush_page(env, T0 | (0x7 << 28)); - tlb_flush_page(env, T0 | (0x8 << 28)); - tlb_flush_page(env, T0 | (0x9 << 28)); - tlb_flush_page(env, T0 | (0xA << 28)); - tlb_flush_page(env, T0 | (0xB << 28)); - tlb_flush_page(env, T0 | (0xC << 28)); - tlb_flush_page(env, T0 | (0xD << 28)); - tlb_flush_page(env, T0 | (0xE << 28)); - tlb_flush_page(env, T0 | (0xF << 28)); -#else - tlb_flush(env, 1); -#endif - } -#else - do_tlbia(); -#endif -} -#endif - -#if defined(TARGET_PPC64) -void do_slbia (void) -{ - /* XXX: TODO */ - tlb_flush(env, 1); -} - -void do_slbie (void) -{ - /* XXX: TODO */ - tlb_flush(env, 1); -} -#endif - /* Software driven TLBs management */ /* PowerPC 602/603 software TLB load instructions helpers */ void do_load_6xx_tlb (int is_code) @@ -2575,21 +2462,6 @@ void do_4xx_tlbre_hi (void) T0 |= 0x100; } -void do_4xx_tlbsx (void) -{ - T0 = ppcemb_tlb_search(env, T0, env->spr[SPR_40x_PID]); -} - -void do_4xx_tlbsx_ (void) -{ - int tmp = xer_so; - - T0 = ppcemb_tlb_search(env, T0, env->spr[SPR_40x_PID]); - if (T0 != -1) - tmp |= 0x02; - env->crf[0] = tmp; -} - void do_4xx_tlbwe_hi (void) { ppcemb_tlb_t *tlb; @@ -2757,21 +2629,6 @@ void do_440_tlbwe (int word) } } -void do_440_tlbsx (void) -{ - T0 = ppcemb_tlb_search(env, T0, env->spr[SPR_440_MMUCR] & 0xFF); -} - -void do_440_tlbsx_ (void) -{ - int tmp = xer_so; - - T0 = ppcemb_tlb_search(env, T0, env->spr[SPR_440_MMUCR] & 0xFF); - if (T0 != -1) - tmp |= 0x02; - env->crf[0] = tmp; -} - void do_440_tlbre (int word) { ppcemb_tlb_t *tlb; |