alloc
指令型別 M
格式
alloc r1 = ar.pfs, i, l, o, r
說明
在通用暫存器堆疊上分配一個新的堆疊幀,並將“前一個函式狀態”暫存器 (PFS) 複製到 GR r1。幀的大小會立即更改。GR r1 的寫入與相同指令組中後續的指令均使用新幀。此指令無法斷定。
四個參數 i(輸入大小)、l(區域性大小)、o(輸出大小)以及 r(循環大小)均可以指定堆疊幀區域的大小。
幀的大小 (sof) 由 i + l + o 確定。請注意,此指令可能會增加或縮小目前暫存器堆疊幀的大小。區域性區域的大小 (sol) 由 i + l 給出。輸入大小與區域性大小之間沒有實際分別。在指令中,它們均作為單獨的運算元給出,只提示彙編器如何使用區域性暫存器。
循環移位暫存器必須適合堆疊幀,並且數量是 8 的倍數。如果此指令試圖更改 CFM.sor 大小,並且暫存器重新命名基址暫存器(如 CFM.rrb.gr、CFM.rrb.fr、CFM.rrb.pr)不為全零時,該指令將導致“保留的暫存器/欄位”錯誤。
儘管彙編器不允許 alloc 進行非法的運算元組合,但仍然可以在指令中編碼非法組合。試圖分配超過 96 個暫存器的堆疊幀、或循環移位區域超過堆疊幀或區域性大小超過堆疊幀的堆疊幀時,都將導致“非法操作”錯誤。alloc 指令必須是指令組中的第一個指令。否則,結果將是未定義的。
如果暫存器數量不足以分配所需的幀, alloc 將暫停處理器,直到有足夠的污損暫存器寫入備份儲存單元。這樣的強制 RSE 儲存可能會導致下列數據相關錯誤。