zoukankan      html  css  js  c++  java
  • TLB初始化 Missing Handler,MIPS R3K mips_init_tlb

     

    #include <mips/r3kc0.h>
    LEAF(mips_init_tlb)
    mfc0 t0,        C0_ENTRYHI               # 保存ASID
    mtc0 zero, C0_ENTRYLO                    # tlblo = valid, entryLo一直保持为0,不需要变动
    li      a1, NTLBID<<TLBIDX_SHIFT         # 索引 : TLBIDX_SHIF=8对应index寄存器,NTLBID=64 个entry
    li      a0, KSEG1_BASE                      # tlbhi = 不可能出现的VPN,KSEG1_BASE=0xa0000000, kseg1从来不需要MMU转换
    .set noreorder
    1:     subu              a1, 1<<TLBIDX_SHIFT #从63-0 的index
           mtc0       a0, C0_ENTRYHI            #VPN 无效地址
           mtc0       a1, C0_INDEX 
           addu       a0, 0x1000          # 增长VPN,使所有入口都不同
           bnes        a1, 1b
           tlbwi                                                 # 在跳转的delay slot中
    .set reorder
           mtc0       t0, C0_ENTRYHI                 # 恢复ASID
           j             ra
    END(mips_init_tlb)

     

           .set noreorder
           .set noat
    TLBmissR3K:
           mfc0       k1, C0_CONTEXT        # context包含PTEBase,BadVPN, 每条entry大小是2^2=4byte
           mfc0       k0, C0_EPC            # tlb missing的地址
           lw           k1, 0(k1)           #从 PTEBase加载第BadVPN项
           nop                              # 
           mtc0       k1, C0_ENTRYLO        # move to entryLo
           nop                              # 
           tlbwr                            # 随机替换
           jr            k0                 #  返回tlb missing地方继续执行
           rfe                                           
           .set at
           .set reorder
  • 相关阅读:
    3-1
    3-2
    习题二 8
    习题二 3
    习题二 5
    习题二 4
    习题二 6
    实验三-2未完成
    实验三
    心得
  • 原文地址:https://www.cnblogs.com/brightmind/p/6170323.html
Copyright © 2011-2022 走看看