核心中暫存器組使用的說明

簡介

SH-3 和 SH-4 CPU 系列傳統上包含單個部分暫存器組(由 SR.RB 選擇,只有 r0 ... r7 被 banked),而其他系列可能具有更多全功能的 banking 或根本沒有這種能力。

SR.RB banking

在這種型別的 banking 中,如果 SR.RB 設定為我們感興趣的 bank,則 banked 暫存器直接對映到 r0 ... r7,否則當處於另一個 bank 的上下文中時,仍然可以使用 ldc/stc 引用 banked 暫存器(作為 r0_bank ... r7_bank)。 開發者在編寫使用這些 banked 暫存器的程式碼時必須牢記 SR.RB 值,原因很明顯。 使用者空間也無法訪問 bank1 值,因此核心可以非常有效地將它們用作暫存暫存器。

目前,核心使用幾個這些暫存器。

  • r0_bank, r1_bank (引用為 k0 和 k1,用於在進行異常處理時作為暫存暫存器)。

  • r2_bank (用於跟蹤 EXPEVT/INTEVT 程式碼)

    • 由 do_IRQ() 及其友元使用,用於基於中斷異常向量跳轉表偏移量進行 irq 對映

  • r6_bank (全域性中斷掩碼)

    • SR.IMASK 中斷處理程式利用它來設定中斷優先順序(由 local_irq_enable() 使用)

  • r7_bank (current)