本文將講解hexagon處理器指令以及指令包的二進位制編碼,它包含如下幾個部分
l 指令
l 子指令
l duplex指令
l 指令類
l 指令包
l 迴圈包
l 立即運算元
l 擴充套件立即運算元
l 常數補充
l 新值運算元
l 指令對映
所有的hexagon處理器指令都是基於32位指令字來編碼的。指令字格式根據指令的型別各有不同。
指令字中包含了兩種位域的方式
l 通用域在每個處理器指令中都存在,並且在所有指令中都擁有相同的定義。
l 特定指令域只會在某些指令中出現,或者根據指令集的定義不同而各有差異。
指令的位域資訊如下圖所示:
表一 指令的位域資訊
為了減少編碼大小,hexagon處理器支援在單一的32位容器中進行指令對的編碼。這樣的指令編碼被稱作子指令。而容器被稱作duplexes
子指令用於如下幾種常用的指令:
l 算數以及邏輯操作
l 暫存器的分配與傳送
l load與store指令
l 棧幀的分配與釋放
l 子路徑的返回操作
圖二列出了子指令與群識別符號
表二 子指令與群識別符號
表三 指令的位址資訊
複式結構通過將[15:14]位設定為00來編碼為32位指令。被用於構成duplex的子指令在duplex中被編碼為13位域。
下圖顯示了duplex的編碼細節
表四 乙個指令包可以包含乙個duplex以及超過兩個的非duplex指令。duplex只能包含在包的最後乙個字中。duplex指令中的執行流程總是從slot0-slot1
duplex擁有如下的群限制:
表四 duplex的群限制:
常數擴充套件使得指令的立即數操作擴充套件至32位。如下的子指令可以通過常數擴充套件來使用
rx = add(rx,#s7)
rd = #u6
如果duplex包含兩個相同子指令群的指令,那麼在duplex中,指令比如按照如下的方式來安排:如果子指令以13位的無符號數來操作,那麼相應的更小的數字應該被放置在duplex的slot1中。
子指令必須遵循任意slot的安排群規則,從而適應於單指令,即使duplex模式的存在違反了這些安排。對這些規則,有乙個特例:
jumpr r31必須出現在slot0的位置上。
表五 指令類的編碼值
指令包通過使用指令字中的兩個位[15:14]來進行編碼,它們對應著指令字中的parse域。這些域值有如下的定義
01或10:意味著該指令不是包中的最後乙個指令
00:意味該指令是乙個duplex指令
如果四個連續的指令序列都沒有包括11,那麼處理器將會丟擲乙個錯誤異常。下圖給出了指令字中parse域的定位:
圖一 parse域的定位
如下的案例顯示了parse用於編碼指令包的流程
01 11 // parse fields of instrs a,b
01 01 11 // parse fields of instrs a,b,c
01 01 01 11 // parse fields of instrs a,b,c,d
除了編碼包中的最後乙個指令外,指令字中的parse域還被用於編碼硬體迴圈中的最後乙個包。
hexagon處理器支援兩種硬體迴圈:標籤0與1.這些迴圈中的最後乙個包受如下的規則限制:
硬體迴圈0中的最後乙個包必須包含兩個或者更多的指令
硬體迴圈1中的最後乙個包必須包含三個或者更多的指令
如果迴圈中最後乙個包使用組合語言來表述,那麼彙編器將自動新增乙個或兩個nop指令從而擴充編碼包,無論該包是否是最後乙個迴圈。
下表顯示了用於編碼迴圈包的parse域:
表六 編碼迴圈包的parse域
如下的**案例顯示了parse域是如何用來編碼迴圈包的:
:endloop0
10 11 // parse fields of instrs a,b
:endloop0
10 01 11 // parse fields of instrs a,b,c
:endloop0
10 01 01 11 // parse fields of instrs a,b,c,d
:endloop1
01 10 11 // parse fields of instrs a,b,c
:endloop1
01 10 01 11 // parse fields of instrs a,b,c,d
:endloop0:endloop1
10 10 11 // parse fields of instrs a,b,c
:endloop0:endloop1
10 10 01 11 // parse fields of instrs a,b,
ARM指令協處理器處理指令
arm支援16個協處理器,在程式執行過程中,每個協處理器忽略屬於arm處理器和其他協處理器指令,當乙個協處理器硬體不能執行屬於她的協處理器指令時,就會產生乙個未定義的異常中斷,在異常中斷處理程式中,可以通過軟體模擬該硬體的操作,比如,如果系統不包含向量浮點運算器,則可以選擇浮點運算軟體模擬包來支援向...
ARM指令協處理器處理指令
arm支援16個協處理器,在程式執行過程中,每個協處理器忽略屬於arm處理器和其他協處理器指令,當乙個協處理器硬體不能執行屬於她的協處理器指令時,就會產生乙個未定義的異常中斷,在異常中斷處理程式中,可以通過軟體模擬該硬體的操作,比如,如果系統不包含向量浮點運算器,則可以選擇浮點運算軟體模擬包來支援向...
C 預處理器指令
c 預處理器指令是在編譯時呼叫的。預處理器指令 preprocessor directive 告訴c 編譯器要編譯哪些 並指出如何處理特定的錯誤和警告。c 預處理器指令還可以告訴c 編輯器有關 組織的資訊。1.定義符號和取消符號定義的預處理指令 define 和 undef 預處理指令都以 號開頭並...