内核中寄存器组使用的注意事项

简介

SH-3 和 SH-4 CPU 系列传统上包含一个单独的部分寄存器组(由 SR.RB 选择,只有 r0 ... r7 被分组),而其他系列可能具有更多全功能的组或根本没有此类功能。

SR.RB 分组

在这种类型分组的情况下,如果 SR.RB 设置为我们感兴趣的组,则分组寄存器直接映射到 r0 ... r7,否则当在另一个组的上下文中时,仍然可以使用 ldc/stc 引用分组寄存器(如 r0_bank ... r7_bank)。开发人员在编写使用这些分组寄存器的代码时必须记住 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 (当前)