安騰(R) 處理器主題中斷返回指令

rfi

操作 字型慣例

格式

rfi        B8


說明

還原中斷前的機器上下文。PSR 從 IPSR 還原,IPSR 保持不變,IP 從 IIP 還原。執行從載入到 IP 的指令束地址與 PSR.ri 中載入的指令槽處繼續。

此指令必須緊跟在停止後面。否則會發生“非法操作”錯誤。此指令切換到 IPSR.bn 指定的暫存器庫。相同指令組中訪問 GR16 到 GR31 的指令引用前一個暫存器庫。後續指令組引用新的暫存器庫。

此指令執行指令序列化以確保:

rfi 指令必須在包含要序列化的操作的指令組後面的指令組中。

此指令只能在最高特權級別執行。此指令無法斷定。

如果 PSR.ic 或 PSR.i 為 1,則此指令的執行未定義。軟體必須確保,在寫入 IIP、IPSR 或 IFS 與後續的 rfi 之間,不能發生可能會修改這些暫存器的中斷。

此指令不執行“低特權傳輸”、“執行分支”或“單步”陷阱。

如果目標是包含 movl 指令的指令束,並且此指令將 PSR.ri 設為 2,則目標指令束上產生“非法操作”錯誤。

如果 IPSR.is 為 1,則在 IIP{31:0} 指定的虛擬線性地址上恢復 IA-32 指令集的控制。PSR.di 不會阻止此指令的指令集轉換。 rfi 完成執行之後,如果 PSR.dfh 為 1,則在目標 IA-32指令上產生“禁用的 FP 暫存器”錯誤。

如果 IPSR.is 為 1,併發生“未使用的指令地址”陷阱,則 IIP 將包含原始的 64 位目標 IP。(此值不是從 32 位通過零擴充套件方式得到的)。

進入 IA-32 指令集時,目前堆疊幀的大小會設定為零,且堆疊中的所有通用暫存器都處於未定義狀態。在指令集轉換過程中,軟體不能依賴這些暫存器的值。軟體必須確保在進入 IA-32 指令集時 AR[BSPSTORE]==AR[BSP],否則可能會導致未定義的行為。

如果 IPSR.is 是 1,則軟體必須為執行 IA-32 指令集正確設定其它的 IPSR 欄位;否則處理器操作未定義。

如需有關詳細資訊,請參閱 Intel(R) Itanium(R) Architecture Software Developer’s Manual(英特爾(R) 安騰(R) 體系結構軟件開發人員手冊)第 2 卷第 2:19 頁上的表 3-2“處理器狀態暫存器欄位”。

在 IA-32 處理器的一致記憶體引用與安騰(R) 體系結構的無序記憶體引用之間,如果需要確定記憶體順序,則軟體必須在此條指令之前發出 mf 指令。處理器不確保後續的 IA-32 指令能看見安騰指令集產生的指令流寫入。

軟體必須確保在發出此指令之前,程式碼段描述符與選擇器已經載入。如果目標 EIP 值超出程式碼段的限制,或是存在程式碼段特權衝突,則在 IA-32 指令上產生 IA-32_Exception(GPFault) 異常。進入 16 位 IA-32 程式碼時,如果 IIP 不在 CSD.base 的 64K 位元組範圍內,則在目標指令上產生 GPFault。

直到目標 IA-32 指令成功完成之後,才會修改 EFLAG.rf 與 PSR.id。在目標 IA-32 指令開始執行之前,PSR.da、PSR.dd、PSR.ia 及 PSR.ed 都清除為零。

執行 IA-32 指令集時,ALAT 的內容保持未定義。在指令集轉換過程中,軟體不能依賴 ALAT 狀態。進入 IA-32 程式碼時,將忽略 ALAT 中現有的專案。

中斷

序列化

執行隱式指令與數據序列化操作。