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 是堆疊指標。