内核中寄存器组使用的说明

简介

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)