cmp
指令型別 A
格式
(qp) cmp.crel.ctype p1, p2 = r2, r3 register_form
(qp) cmp.crel.ctype p1, p2 = imm8, r3 imm8_form
(qp) cmp.crel.ctype p1, p2 = r0, r3 parallel_inequality_form
(qp) cmp.crel.ctype p1, p2 = r3, r0 pseudo-op
說明
按照 crel 指定的十種關係之一比較兩個源運算元。如果比較條件為真,則產生的布爾結果為 1,反之則為 0。此結果寫入兩個謂詞暫存器目的地 p1 與 p2。結果寫入目的地的方式由 ctype 指定的比較型別確定。
比較型別描述如何隨根據比較結果更新謂詞目標。常規型別僅將比較結果寫入一個目標,而在另一個目標中寫入相反的內容。並行型別只更新特定比較結果的目標。這樣便可以針對相同的謂詞暫存器同時進行多個“或”型或多個“與”型比較。
unc 首先將謂詞目標初始化為 0,而不管限定謂詞如何,因此比較特殊。然後它與常規型別的行為方式相同。比較型別的行為在比較型別表格中介紹。。空白項目表示謂詞目標保持不變。
在 register_form 中,第一個運算元是 GR r2;在 imm8_form 中,第一個運算元取自符號擴充套件的 imm8 編碼欄位;在 parallel_inequality_form 中,第一個運算元必須是 GR 0。只有比較型別是並行型別之一,且關係是不等式(>、>=、<、<=)時,才會使用 parallel_inequality_form。請參閱下文。
如果兩個謂詞暫存器目的地相同(p1 與 p2 指定相同的謂詞暫存器)、限定謂詞已設定或比較型別為 unc,則指令都將執行“非法操作”錯誤的處理。
在這十種關係中,並非所有都直接在硬體中實現。有一些實際上是偽操作。對於這些情況,彙編器只是切換一下源運算元指示符且/或切換謂詞目標指示符,然後使用實現的關係。對於 imm8_form 形式的一些偽操作比較,彙編器從立即數中減 1,使得允許的立即數範圍略有不同。在六種並行比較型別中,有三種類型實際上是偽操作。彙編器只是使用與實現的型別相反的關係。具體實現的關係以及這些偽操作與這些關係之間的對應情況,詳見標準與 UNC 型別比較的 64 位比較關係與並行型別比較的 64 位比較關係。
並行比較型別僅可用於一組受限制的關係與運算元。它們可以在兩個暫存器或者一個暫存器與一個立即數之間進行相等與不等比較,或是在暫存器與 GR 0 之間進行不等比較。因為其中一個運算元為零時,它們沒有大多作用,因此不提供無符號關係。對於並行不等式比較,硬體僅直接實現第一個運算元 (GR r2) 為 GR 0 情況。第二個運算元為 GR 0 的比較是偽操作,為此彙編器會切換暫存器指示符並使用相反的關係...