Linux/PA-RISC 的暫存器使用¶
[ 星號表示計劃使用,但目前尚未實現 ]
ABI 指定的通用暫存器¶
控制暫存器¶
CR 0 (恢復計數器) |
用於 ptrace |
CR 1-CR 7(未定義) |
未使用 |
CR 8 (保護 ID) |
每個程序的值* |
CR 9, 12, 13 (PIDS) |
未使用 |
CR10 (CCR) |
延遲 FPU 儲存* |
CR11 |
由 ABI 指定 (SAR) |
CR14 (中斷向量) |
初始化為 fault_vector |
CR15 (EIEM) |
初始化為全 1* |
CR16 (間隔定時器) |
讀取以獲取週期計數/寫入以啟動間隔定時器 |
CR17-CR22 |
中斷引數 |
CR19 |
中斷指令暫存器 |
CR20 |
中斷空間暫存器 |
CR21 |
中斷偏移暫存器 |
CR22 |
中斷 PSW |
CR23 (EIRR) |
讀取以獲取掛起的中斷/寫入以清除位 |
CR24 (TR 0) |
核心空間頁目錄指標 |
CR25 (TR 1) |
使用者空間頁目錄指標 |
CR26 (TR 2) |
未使用 |
CR27 (TR 3) |
執行緒描述符指標 |
CR28 (TR 4) |
未使用 |
CR29 (TR 5) |
未使用 |
CR30 (TR 6) |
當前 / 0 |
CR31 (TR 7) |
臨時暫存器,用於各種地方 |
空間暫存器(核心模式)¶
SR0 |
臨時空間暫存器 |
SR4-SR7 |
設定為 0 |
SR1 |
臨時空間暫存器 |
SR2 |
核心不應破壞它 |
SR3 |
用於使用者空間訪問(當前程序) |
空間暫存器(使用者模式)¶
SR0 |
臨時空間暫存器 |
SR1 |
臨時空間暫存器 |
SR2 |
儲存 linux 閘道器頁面的空間 |
SR3 |
在核心中儲存使用者地址空間值 |
SR4-SR7 |
定義使用者/核心的短地址空間 |
處理器狀態字¶
W (64 位地址) |
0 |
E (小端) |
0 |
S (安全間隔定時器) |
0 |
T (已採取分支陷阱) |
0 |
H (更高許可權陷阱) |
0 |
L (較低許可權陷阱) |
0 |
N (無效化下一條指令) |
C 程式碼使用 |
X (資料記憶體斷點停用) |
0 |
B (已採取分支) |
C 程式碼使用 |
C (程式碼地址轉換) |
1, 0 在執行真實模式程式碼時 |
V (除法步驟校正) |
C 程式碼使用 |
M (HPMC 掩碼) |
0, 1 在執行 HPMC 處理程式時* |
C/B (進位/借位位) |
C 程式碼使用 |
O (有序引用) |
1* |
F (效能監視器) |
0 |
R (恢復計數器陷阱) |
0 |
Q (收集中斷狀態) |
1 (在直接位於 rfi 之前的程式碼中為 0) |
P (保護識別符號) |
1* |
D (資料地址轉換) |
1, 0 在執行真實模式程式碼時 |
I (外部中斷掩碼) |
cli()/sti() 宏使用 |
“不可見”暫存器¶
PSW 預設 W 值 |
0 |
PSW 預設 E 值 |
0 |
影子暫存器 |
中斷處理程式程式碼使用 |
TOC 使能位 |
1 |
PA-RISC 架構定義了 7 個暫存器作為“影子暫存器”。這些暫存器在 RETURN FROM INTERRUPTION AND RESTORE 指令中使用,透過消除中斷處理程式中通用暫存器 (GR) 的儲存和恢復需求,來減少狀態儲存和恢復時間。 影子暫存器是 GR 1、8、9、16、17、24 和 25。
暫存器使用說明,最初來自 John Marvin,並添加了 Randolph Chung 的一些額外說明。
對於通用暫存器
r1,r2,r19-r26,r28,r29 & r31 可以直接使用,無需先儲存它們。 當然,如果你關心它們,則需要在呼叫另一個過程之前儲存它們。 上述某些暫存器的確具有特殊含義,您應該注意
- r1
addil 指令被硬編碼為將其結果放入 r1 中,因此如果您使用該指令,請注意這一點。
- r2
這是返回指標。 通常,您不想使用它,因為您需要該指標才能返回到呼叫者。 但是,它與這組暫存器分組在一起,因為呼叫者不能依賴於您返回時該值是否相同,即您可以將 r2 複製到另一個暫存器並透過該暫存器返回,之後再破壞 r2,這不應給呼叫例程帶來問題。
- r19-r22
這些通常被認為是臨時暫存器。 請注意,在 64 位中,它們是 arg7-arg4。
- r23-r26
這些是 arg3-arg0,也就是說,如果您不再關心傳入的值,則可以使用它們。
- r28,r29
是 ret0 和 ret1。 它們是你傳遞返回值的東西。 r28 是主要返回值。 當返回小結構時,r29 也可用於將資料傳遞迴呼叫者。
- r30
堆疊指標
- r31
ble 指令將返回指標放在此處。
r3-r18,r27,r30 需要儲存和恢復。 r3-r18 只是通用暫存器。 r27 是資料指標,用於更輕鬆地引用全域性變數。 r30 是堆疊指標。