Back to home page

OSCL-LXR

 
 

    


0001 .. include:: ../disclaimer-zh_CN.rst
0002 
0003 :Original: Documentation/parisc/registers.rst
0004 
0005 :翻译:
0006 
0007  司延腾 Yanteng Si <siyanteng@loongson.cn>
0008 
0009 .. _cn_parisc_registers:
0010 
0011 =========================
0012 Linux/PA-RISC的寄存器用法
0013 =========================
0014 
0015 [ 用星号表示目前尚未实现的计划用途。 ]
0016 
0017 ABI约定的通用寄存器
0018 ===================
0019 
0020 控制寄存器
0021 ----------
0022 
0023 ============================    =================================
0024 CR 0 (恢复计数器)               用于ptrace
0025 CR 1-CR 7(无定义)               未使用
0026 CR 8 (Protection ID)            每进程值*
0027 CR 9, 12, 13 (PIDS)             未使用
0028 CR10 (CCR)                      FPU延迟保存*
0029 CR11                            按照ABI的规定(SAR)
0030 CR14 (中断向量)                 初始化为 fault_vector
0031 CR15 (EIEM)                     所有位初始化为1*
0032 CR16 (间隔计时器)               读取周期数/写入开始时间间隔计时器
0033 CR17-CR22                       中断参数
0034 CR19                            中断指令寄存器
0035 CR20                            中断空间寄存器
0036 CR21                            中断偏移量寄存器
0037 CR22                            中断 PSW
0038 CR23 (EIRR)                     读取未决中断/写入清除位
0039 CR24 (TR 0)                     内核空间页目录指针
0040 CR25 (TR 1)                     用户空间页目录指针
0041 CR26 (TR 2)                     不使用
0042 CR27 (TR 3)                     线程描述符指针
0043 CR28 (TR 4)                     不使用
0044 CR29 (TR 5)                     不使用
0045 CR30 (TR 6)                     当前 / 0
0046 CR31 (TR 7)                     临时寄存器,在不同地方使用
0047 ============================    =================================
0048 
0049 空间寄存器(内核模式)
0050 ----------------------
0051 
0052 ========                        ==============================
0053 SR0                             临时空间寄存器
0054 SR4-SR7                         设置为0
0055 SR1                             临时空间寄存器
0056 SR2                             内核不应该破坏它
0057 SR3                             用于用户空间访问(当前进程)
0058 ========                        ==============================
0059 
0060 空间寄存器(用户模式)
0061 ----------------------
0062 
0063 ========                        ============================
0064 SR0                             临时空间寄存器
0065 SR1                             临时空间寄存器
0066 SR2                             保存Linux gateway page的空间
0067 SR3                             在内核中保存用户地址空间的值
0068 SR4-SR7                         定义了用户/内核的短地址空间
0069 ========                        ============================
0070 
0071 
0072 处理器状态字
0073 ------------
0074 
0075 ======================          ================================================
0076 W (64位地址)                  0
0077 E (小尾端)                    0
0078 S (安全间隔计时器)            0
0079 T (产生分支陷阱)              0
0080 H (高特权级陷阱)              0
0081 L (低特权级陷阱)              0
0082 N (撤销下一条指令)            被C代码使用
0083 X (数据存储中断禁用)          0
0084 B (产生分支)                  被C代码使用
0085 C (代码地址转译)              1, 在执行实模式代码时为0
0086 V (除法步长校正)              被C代码使用
0087 M (HPMC 掩码)                 0, 在执行HPMC操作*时为1
0088 C/B (进/借 位)                被C代码使用
0089 O (有序引用)                  1*
0090 F (性能监视器)                0
0091 R (回收计数器陷阱)            0
0092 Q (收集中断状态)              1 (在rfi之前的代码中为0)
0093 P (保护标识符)                1*
0094 D (数据地址转译)              1, 在执行实模式代码时为0
0095 I (外部中断掩码)              由cli()/sti()宏使用。
0096 ======================          ================================================
0097 
0098 “隐形”寄存器(影子寄存器)
0099 ---------------------------
0100 
0101 =============                   ===================
0102 PSW W 默认值                    0
0103 PSW E 默认值                    0
0104 影子寄存器                      被中断处理代码使用
0105 TOC启用位                       1
0106 =============                   ===================
0107 
0108 ----------------------------------------------------------
0109 
0110 PA-RISC架构定义了7个寄存器作为“影子寄存器”。这些寄存器在
0111 RETURN FROM INTERRUPTION AND RESTORE指令中使用,通过消
0112 除中断处理程序中对一般寄存器(GR)的保存和恢复的需要来减
0113 少状态保存和恢复时间。影子寄存器是GRs 1, 8, 9, 16, 17,
0114 24和25。
0115 
0116 -------------------------------------------------------------------------
0117 
0118 寄存器使用说明,最初由John Marvin提供,并由Randolph Chung提供一些补充说明。
0119 
0120 对于通用寄存器:
0121 
0122 r1,r2,r19-r26,r28,r29 & r31可以在不保存它们的情况下被使用。当然,如果你
0123 关心它们,在调用另一个程序之前,你也需要保存它们。上面的一些寄存器确实
0124 有特殊的含义,你应该注意一下:
0125 
0126     r1:
0127        addil指令是硬性规定将其结果放在r1中,所以如果你使用这条指令要
0128        注意这点。
0129 
0130     r2:
0131        这就是返回指针。一般来说,你不想使用它,因为你需要这个指针来返
0132        回给你的调用者。然而,它与这组寄存器组合在一起,因为调用者不能
0133        依赖你返回时的值是相同的,也就是说,你可以将r2复制到另一个寄存
0134        器,并在作废r2后通过该寄存器返回,这应该不会给调用程序带来问题。
0135 
0136     r19-r22:
0137        这些通常被认为是临时寄存器。
0138        请注意,在64位中它们是arg7-arg4。
0139 
0140     r23-r26:
0141        这些是arg3-arg0,也就是说,如果你不再关心传入的值,你可以使用
0142        它们。
0143 
0144     r28,r29:
0145        这俩是ret0和ret1。它们是你传入返回值的地方。r28是主返回值。当返回
0146        小结构体时,r29也可以用来将数据传回给调用程序。
0147 
0148     r30:
0149        栈指针
0150 
0151     r31:
0152        ble指令将返回指针放在这里。
0153 
0154 
0155     r3-r18,r27,r30需要被保存和恢复。r3-r18只是一般用途的寄存器。
0156     r27是数据指针,用来使对全局变量的引用更容易。r30是栈指针。