專利名稱:多媒體信號處理器中的單指令多數(shù)據(jù)處理方法及其裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及數(shù)字信號處理技術(shù),特別涉及用于多媒體功能(如視頻和音頻編碼和解碼)的對每個指令的多個數(shù)據(jù)元素進(jìn)行并行處理的方法及其裝置。
本專利文件涉及并參考下列同時申請的專利申請
美國專利申請順序號UNKNOWN1,代理人案號M-4354,題為“Multiprocessor Operation in a Multimedia Signal Processor(多媒體信號處理器中的多處理器操作)”;
美國專利申請順序號UNKNOWN3,代理人案號M-4365,題為“Effcient Context Saving and Restoring in Multiprocessors(多處理器中的高效現(xiàn)場保存和恢復(fù))”;
美國專利申請順序號UNKNOWN4,代理人案號M-4366,題為“System and Method for Handling Software Interrupts with Argument Passing(處理具有參數(shù)傳遞的軟件中斷的系統(tǒng)和方法)”;
美國專利申請順序號UNKNOWN5,代理人案號M-4367,題為“System and Method for Handling Interrupts and Exception Events in anAsymmetric Multiprocessor Architecture(在不對稱多處理器結(jié)構(gòu)中處理中斷和異常事件的系統(tǒng)和方法)”;
美國專利申請順序號UNKNOWN6,代理人案號M-4368,題為“Methods and Apparatus for Processing Video Data(處理視頻數(shù)據(jù)地方法和裝置)”;
美國專利申請順序號UNKNOWN7,代理人案號M-4369,題為“Single-Instruction-Multiple-Data Processing Using Multiple Banks ofVector Registers(采用多個向量寄存器組的單指令多數(shù)據(jù)處理)”;以及
美國專利申請順序號UNKNOWN8,代理人案號M-4370,題為“Single-Instruction-Multiple-Data Processing with CombinedScalar/Vector Operations(具有組合標(biāo)量/向量操作的單指令多數(shù)據(jù)處理)”。
用于多媒體應(yīng)用(例如實(shí)時視頻編碼和解碼)的可編程數(shù)字信號處理器(DSPs)需要相當(dāng)強(qiáng)的處理能力,以便在有限時間內(nèi)處理大量的數(shù)據(jù)。數(shù)字信號處理器的幾種結(jié)構(gòu)是眾所周知的。大多數(shù)微處理器采用的通用結(jié)構(gòu)一般需要高工作頻率,以提供具有足以進(jìn)行實(shí)時視頻編碼或解碼的計算能力的DSP。這使這種DSP價格昂貴。
超長指令字(VLIW)處理器是具有很多功能單元的一種DSP,這些功能單元中的大部分執(zhí)行不同的、相對簡單的任務(wù)。VLIW DSP的單個指令可以是128字節(jié)或更長,并具有多個獨(dú)立的被獨(dú)立的功能單元并行執(zhí)行的部分。VLIW DSPs具有很強(qiáng)的計算能力,因?yàn)樵S多功能單元能并行工作。VLIWDSPs還具有相對低的成本,因?yàn)槊總€功能單元相對小而簡單。VLIW DSPs存在的一個問題是在處理輸入/輸出控制、同主計算機(jī)通信及其它不宜于用VLIW DSP的多個功能單元并行執(zhí)行的功能方面效率低下。另外,VLIW的軟件不同于傳統(tǒng)的軟件且開發(fā)困難,因?yàn)槿狈幊坦ぞ吆褪煜LIW軟件結(jié)構(gòu)的程序員。因此,能提供合理成本、高計算能力和熟悉的編程環(huán)境的DSP是多媒體應(yīng)用所尋求的。
本發(fā)明的目的是提供一種單指令多數(shù)據(jù)處理方法及其裝置。
根據(jù)本發(fā)明一個方面,一個多媒體數(shù)字信號處理器(DSP)包括一個向量處理器,該向量處理器操作向量數(shù)據(jù)(即每操作數(shù)有多個數(shù)據(jù)元素)以提供高處理能力。該處理器使用RISC類型指令集的單指令多數(shù)據(jù)結(jié)構(gòu)。程序員可以很容易地適應(yīng)向量處理器的編程環(huán)境,因?yàn)樗愃朴诖蟛糠殖绦騿T熟悉的通用處理器的編程環(huán)境。
DSP包括一套通用向量寄存器。每個向量寄存器具有固定長度,但是分成多個用戶可以選擇長度的獨(dú)立數(shù)據(jù)元素。因此,存儲在向量寄存器中的數(shù)據(jù)元素數(shù)取決于為該元素所選擇的長度。例如32字節(jié)寄存器可以分成32個8位的數(shù)據(jù)元素、16個16位的數(shù)據(jù)元素,或8個32位的數(shù)據(jù)元素。數(shù)據(jù)長度和類型的選擇通過處理與向量寄存器有關(guān)的數(shù)據(jù)的指令來確定,而指令的一個執(zhí)行數(shù)據(jù)通路執(zhí)行多個并行操作,這取決于指令所指示的數(shù)據(jù)長度。
向量處理器的指令可以有向量寄存器或標(biāo)量寄存器作為操作數(shù),并且并行地操作多個向量寄存器的多個數(shù)據(jù)元素,以便提高計算能力。本發(fā)明的向量處理器的一個示例性的指令集包括協(xié)處理器接口操作;流控制操作加載/存儲操作;及邏輯/算術(shù)操作。邏輯/算術(shù)操作包括的操作,把一個向量寄存器的多個數(shù)據(jù)元素同一個或多個別的向量寄存器中相應(yīng)的多個數(shù)據(jù)元素相結(jié)合,產(chǎn)生結(jié)果數(shù)據(jù)向量的多個數(shù)據(jù)元素。其他的邏輯/算術(shù)操作混合一個或多個向量寄存器的各種數(shù)據(jù)元素,或把向量寄存器的數(shù)據(jù)元素同標(biāo)量結(jié)合起來。
該向量處理器的一種結(jié)構(gòu)擴(kuò)展,加上了標(biāo)量寄存器,每個標(biāo)量寄存器都包括一個標(biāo)量數(shù)據(jù)元素。標(biāo)量和向量寄存器的結(jié)合方便了將向量處理器的指令集進(jìn)行擴(kuò)充以包括并行地把一個向量的每個數(shù)據(jù)元素同一個標(biāo)量值結(jié)合的操作。例如,一條指令把一個向量的多個數(shù)據(jù)元素乘以一個標(biāo)量值。標(biāo)量寄存器亦提供一個位置,用于存儲要從向量寄存器中提取或存入向量寄存器的單個數(shù)據(jù)元素。標(biāo)量寄存器對在向量處理器和協(xié)處理器(該協(xié)處理器的結(jié)構(gòu)僅提供標(biāo)量寄存器)之間傳送信息、以及對計算加載/存儲操作所用的有效地址也很方便。
根據(jù)本發(fā)明的另一方面,向量處理器中的多個向量寄存器被組織為多個組。每個組能被選擇為“當(dāng)前(current)”組,而另一個組則是“替代(alternative)”組。在向量處理器的控制寄存器中“當(dāng)前組”位指示當(dāng)前組。為了減少標(biāo)識向量寄存器所需的位數(shù),有些指令只提供標(biāo)識當(dāng)前組中的一個向量寄存器的寄存器號。加載/存儲指令有一個附加位來標(biāo)識任何一個組的向量寄存器。因此,加載/存儲操作能在操作當(dāng)前組中的數(shù)據(jù)的期間取出數(shù)據(jù)送到替代組。這有助于圖象處理和圖形過程的軟件流水線作業(yè),且當(dāng)取數(shù)據(jù)時降低處理器的延遲,因?yàn)橛迷L問替代寄存器組的加載/存儲操作,邏輯/算術(shù)操作可不按次序執(zhí)行。在其它指令中,替代組允許使用雙倍長度向量寄存器,這種寄存器包括一個來自當(dāng)前組的向量寄存器,和一個來自替代組的相應(yīng)的向量寄存器。這種雙倍長度寄存器可根據(jù)指令句法來鑒別。向量處理器中的控制位可以被設(shè)定,以使缺省向量長度是一個或兩個向量寄存器。替代組亦允許在復(fù)雜指令句法中使用更少的顯式標(biāo)識的操作數(shù),如混洗(shuffle)、去混洗(unshuffle)、飽和(saturate)、及具有兩個源和兩個目的寄存器的條件轉(zhuǎn)移。
向量處理器還實(shí)現(xiàn)新穎的指令,如四平均(average quad)、混洗、去混洗、成對方式最大(pair-wise maximum)和交換(exchange)以及飽和。這些指令執(zhí)行的操作在多媒體功能(例如視頻編碼和解碼)中是常見的,并代替在其它指令集中實(shí)現(xiàn)同樣功能所需的2個或更多個指令。因而,向量處理器指令集改進(jìn)了多媒體應(yīng)用中程序的效率和速度。
以下結(jié)合附圖詳細(xì)說明本發(fā)明的優(yōu)選實(shí)施例,其中,
圖1是根據(jù)本發(fā)明一實(shí)施例的多媒體處理器的方框圖。
圖2是圖1的多媒體處理器的向量處理器的方框圖。
圖3是圖2的向量處理器的取指單元的方框圖。
圖4是圖2的向量處理器的取指單元的方框圖。
圖5A、5B和5C示出了圖2的向量處理器的寄存器到寄存器指令、加載指令及存儲指令所用的執(zhí)行流水線的步驟。
圖6A是圖2的向量處理器的執(zhí)行數(shù)據(jù)通路的方框圖。
圖6B是圖6A執(zhí)行數(shù)據(jù)通路的寄存器文件(register file)的方框圖。
圖6C是圖6A執(zhí)行數(shù)據(jù)通路的并行處理邏輯單元的方框圖。
圖7是圖2的向量處理器的加載/存儲單元的方框圖。
圖8是本發(fā)明一實(shí)施例的向量處理器指令集的格式。
在不同圖中所用的相同參考符號表示相似的或相同的項(xiàng)。
圖1示出了本發(fā)明一實(shí)施例的多媒體信號處理器(MSP)100的實(shí)施例的方塊圖。多媒體處理器100包括通用處理器110和向量處理器120組成的處理核心105。處理核心105通過高速緩沖存儲器(以下稱為高速緩存)子系統(tǒng)130連到多媒體處理器100的剩余部分,高速緩存子系統(tǒng)包括SRAM 160和190,ROM 170及高速緩存控制器180。高速緩存控制器180可將SRAM 160配置為處理器110的指令高速緩存162和數(shù)據(jù)高速緩存164,而將SRAM 190配置為向量處理器120的指令高速緩存192和數(shù)據(jù)高速緩存194。
片內(nèi)ROM 170包含處理器110和120的數(shù)據(jù)和指令,并能配置為高速緩存。在本實(shí)施例中,ROM 170包括復(fù)位和初始化過程;自測試診斷過程;中斷和異常處理程序;及聲霸卡仿真子例程;V.34調(diào)制解調(diào)器信號處理子例程;一般電話功能;2-D和3-D圖形子例程庫;以及用于音頻和視頻標(biāo)準(zhǔn)如MPEG-1,MPEG-2,H.261,H.263,G.728和G.723的子例程庫。
高速緩存子系統(tǒng)130把處理器110和120連接到兩個系統(tǒng)總線140和150,并作為處理器110和120及耦合到總線140和150的設(shè)備的高速緩存和切換站(switching station)。系統(tǒng)總線150用比總線140更高的時鐘頻率工作,并連接到存儲器控制器158、局部總線接口156、DMA控制器154和設(shè)備接口152,它們分別為外部局部存儲器、主計算機(jī)的局部總線、直接存儲器存取和各種模數(shù)、數(shù)模轉(zhuǎn)換器提供接口。系統(tǒng)定時器142、UART(Universal asynchronous receiver transceiver,通用異步收發(fā)信機(jī))144、位流處理器146及中斷控制器148連接到總線140。前面提到的題為“Multiprocessor Operation in a Multimedia Signal Processor”和“Methods andapparatus for Processing Video Data”的專利申請更全面地說明了高速緩存子系統(tǒng)130和示例性的設(shè)備的工作,處理器110和120通過高緩存子系統(tǒng)130及總線140和150訪問所述設(shè)備。
處理器110和120執(zhí)行獨(dú)立的程序線程,并且在結(jié)構(gòu)上也是不同的,以便更有效地執(zhí)行賦予它們的特定任務(wù)。處理器110主要用于控制功能,例如實(shí)時操作系統(tǒng)的執(zhí)行及類似的不需要大量重復(fù)計算的功能。因此,處理器110不需要強(qiáng)計算能力,能用傳統(tǒng)的通用處理器結(jié)構(gòu)實(shí)現(xiàn)。向量處理器120主要實(shí)現(xiàn)數(shù)學(xué)計算(number crumching)這種包含對多媒體處理中常見的數(shù)據(jù)塊的重復(fù)操作。為了有強(qiáng)計算能力和相對簡單的編程,向量處理器120具有SIMD(Single instruction multiple data,單指令多數(shù)據(jù))結(jié)構(gòu);在本實(shí)施例中,在向量處理器120中大部分?jǐn)?shù)據(jù)通路為288位或576位寬,以支持向量數(shù)據(jù)操作。此外,向量處理器120的指令集包括尤其適用于多媒體問題的指令。
在本實(shí)施例中,處理器110是32位RISC處理器,工作在40MHz上,符合ARM 7處理器的結(jié)構(gòu),所述ARM 7處理器包含有ARM 7標(biāo)準(zhǔn)定義的寄存器集。有關(guān)ARM 7 RISC處理器的結(jié)構(gòu)和指令集在“ARM7DM DataSheet(ARM7DM產(chǎn)品說明書)”Document Number(文件號)ARM DDI0010G中作了說明,這可從Advance RISC Machines Ltd.公司得到。ARM7DM Data Sheet全部包括在這里作為參考。附錄A說明了本實(shí)施例的ARM7指令集的擴(kuò)展。
向量處理器120既操作向量又操作標(biāo)量。在本實(shí)施例中,向量數(shù)據(jù)處理器120包括以80MHz工作的流水線式RISC引擎(engine)。向量處理器120的寄存器包括32位標(biāo)量寄存器、32位專用寄存器、兩組288位向量寄存器及兩組雙倍長度(即576位)向量累加器寄存器。附錄C說明了本實(shí)施例的向量處理器120的寄存器集。在本實(shí)施例中,處理器120包括32個標(biāo)量寄存器,這些標(biāo)量寄存器通過范圍從0到31的5位寄存器號在指令中被標(biāo)識。還有64個288位的向量寄存器,這些寄存器組成兩個組,每組有32個向量寄存器。每個向量寄存器可用1位組號(0或1)和5位范圍從0到31的向量寄存器號來標(biāo)識。大部分指令只訪問當(dāng)前組中的向量寄存器,如存儲在向量處理器120的控制寄存器VCSR的缺省組位CBANK所表示。第2個控制位VEC64表示是否寄存器號缺省表示由來自每個組的一個寄存器組成的雙倍長度向量寄存器。指令的句法區(qū)別標(biāo)識向量寄存器的寄存器號和標(biāo)識標(biāo)量寄存器的寄存器號。
每個向量寄存器可被分成長度可編程的多個數(shù)據(jù)元素,表1示出了在一個288位向量寄存器中支持的數(shù)據(jù)元素的數(shù)據(jù)類型。
表1附錄D進(jìn)一步提供了本發(fā)明的實(shí)施例中支持的數(shù)據(jù)長度和類型的說明。
對int9數(shù)據(jù)類型,9位字節(jié)被連續(xù)地組合在288位向量寄存器中,而對其它的數(shù)據(jù)類型,在288位向量寄存器中每個第9位不使用。288位向量寄存器能放32個8或9位整型數(shù)據(jù)元素、16個16位整型數(shù)據(jù)元素、或8個32位整型或浮點(diǎn)元素。此外,2個向量寄存器可被結(jié)合以雙倍長度向量組裝數(shù)據(jù)元素。在本發(fā)明的實(shí)施例中,將控制和狀態(tài)寄存器VCSR中的控制位VEC64置位,把向量處理器120置于方式VEC64,這里雙倍長度(576位)是向量寄存器的缺省長度。
多媒體處理器100還包括一套處理器110和120都可以訪問的32位擴(kuò)展寄存器115。附錄B說明了本發(fā)明的實(shí)施例中擴(kuò)展寄存器集和它們的功能。擴(kuò)展寄存器和向量處理器120的標(biāo)量和專用寄存器,在某些情況下可供處理器110訪問。2個專用“用戶”擴(kuò)展寄存器具有2個讀端口,允許處理器110和120同時讀寄存器。其它擴(kuò)展寄存器不能同時被訪問。
向量處理器120有兩個交替的狀態(tài)VP_RUN和VP_IDLE,指示向量處理器120是處于工作還是處于空閑狀態(tài)。當(dāng)向量處理器120處于狀態(tài)VP_IDLE時,處理器110能讀或?qū)懴蛄刻幚砥?20的標(biāo)量和專用寄存器。但向量處理器120處于狀態(tài)VP_RUN時處理器110讀或?qū)懴蛄刻幚砥?20的一寄存器的結(jié)果未予定義。
對處理器110的ARM7指令集的擴(kuò)展包括訪問擴(kuò)展寄存器和向量處理器120的標(biāo)量或?qū)S眉拇嫫鞯闹噶?。指令MFER和MFEP分別把擴(kuò)展寄存器和向量處理器120的標(biāo)量或?qū)S眉拇嫫髦械臄?shù)據(jù)移到處理器110中的通用寄存器中,指令MTER和MTEP分別把處理器110中通用寄存器的數(shù)據(jù)移到擴(kuò)展寄存器和向量處理器120的標(biāo)量或?qū)S眉拇嫫髦?。TESTSET指令讀擴(kuò)展寄存器并把擴(kuò)展寄存器的位30置成1。指令TESTSET通過將位30置位,向處理器120發(fā)生信號說明處理器110已讀出(或使用)產(chǎn)生的結(jié)果,方便了使用者/生產(chǎn)者同步。處理器110的其它指令如STARTVP和INTVP控制向量處理器120的工作狀態(tài)。
處理器110起主處理器的作用以控制向量處理器120的操作。用處理器110和120之間控制的不對稱劃分簡化了處理器110和120進(jìn)行同步的問題。當(dāng)向量處理器120處于VP_IDLE狀態(tài)時,處理器110通過把指令地址寫到向量處理器120的程序計數(shù)器中,來初始化向量處理器120。然后,處理器110執(zhí)行STARTVP指令,把向量處理器120改變成狀態(tài)VP_RUN。在狀態(tài)VP_RUN下,向量處理器120通過高速緩存子系統(tǒng)130取指,并同繼續(xù)執(zhí)行它自己程序的處理器110并行地執(zhí)行那些指令。在啟動后,向量處理器120繼續(xù)執(zhí)行,直到遇到一個異常、執(zhí)行滿足適當(dāng)條件的VCJOIN或VCINT指令、或被處理器110中斷。向量處理器120通過把結(jié)果寫到擴(kuò)展寄存器、把結(jié)果寫到處理器110和120共享的地址空間、或當(dāng)向量處理器120重新進(jìn)入狀態(tài)VP_IDLE時把結(jié)果留在處理器110訪問的標(biāo)量或?qū)S眉拇嫫髦?,可將程序?zhí)行的結(jié)果傳送到處理器110。
向量處理器120并不處理它自己的異常。在執(zhí)行引起異常的指令時,向量處理器120進(jìn)入狀態(tài)VP_IDLE,并通過直通線發(fā)出一個中斷請求給處理器110。向量處理器120保持在狀態(tài)VP_IDLE,直到處理器110執(zhí)行另一個STARTVP指令。處理器110負(fù)責(zé)讀向量處理器120的寄存器VISRC以決定異常的性質(zhì),可能通過重新初始化向量處理器120來處理異常,然后,根據(jù)需要引導(dǎo)向量處理器120恢復(fù)執(zhí)行。
通過處理器110執(zhí)行的INTVP指令中斷向量處理器120,使向量處理器120進(jìn)入空閑狀態(tài)VP_IDLE。指令I(lǐng)NTVP可以例如用在多任務(wù)系統(tǒng)中,把向量處理器從執(zhí)行的一個任務(wù)如視頻譯碼切換到另一個任務(wù)如聲卡仿真。
向量處理器指令VCINT和VCJOIN是流控制指令,如果指令指示的條件滿足,這些指令將停止向量處理器120的執(zhí)行,使向量處理器120置于狀態(tài)VP_IDLE,并向處理器110發(fā)中斷請求,除非這個請求被屏蔽。向量處理器120的程序計數(shù)器(專用寄存器VPC)指出VCINT或VCJOIN指令后的指令地址。處理器110能檢查向量處理器120的中斷源寄存器VISRC,確定是否是VCINT或VCJOIN指令引起中斷請求。因?yàn)橄蛄刻幚砥?20有大量數(shù)據(jù)總線,及在保存和恢復(fù)它的寄存器上更有效,所以通過向量處理器120執(zhí)行的軟件在現(xiàn)場切換(context switching)期間應(yīng)該保存和恢復(fù)寄存器。上面提到的題為“Efficient Context Saving and Restoring in Multiprocessors”的專利申請,說明了現(xiàn)場切換的一示例性的系統(tǒng)。
圖2示出了向量處理器120的實(shí)施例的主要功能框圖。向量處理器120包括一個取指單元(IFU)210、一個解碼器220、一個調(diào)度器230、一個執(zhí)行數(shù)據(jù)通路240及一個加載/存儲單元(LSU)250。IFU 210取指并處理流控制指令(如分支)。指令譯碼器220根據(jù)從IFU 210到達(dá)的順序,每周期譯碼一條指令,并把從指令中譯碼出的字段值寫到調(diào)度器230中的FIFO。調(diào)度器230根據(jù)執(zhí)行操作步驟的需要,選擇發(fā)送給執(zhí)行控制寄存器的字段值。發(fā)送選擇取決于操作數(shù)依賴性(dependency)和處理資源如執(zhí)行數(shù)據(jù)通路240或裝入/存儲單元250的可用性。執(zhí)行數(shù)據(jù)通路240執(zhí)行操作向量或標(biāo)量數(shù)據(jù)的邏輯/算術(shù)指令。裝入/存儲單元250執(zhí)行訪問向量處理器120的地址空間的裝入/存儲指令。
圖3示出了IFU 210的一實(shí)施例的框圖。IFU包括一個指令緩沖器,該緩沖器分成主指令緩沖器310和輔助指令緩沖器312。主緩沖器310包含8條連續(xù)指令,其中包括對應(yīng)于當(dāng)前程序計數(shù)的指令。輔助緩沖器312中包含緊接著緩沖器310中的指令的8條指令。IFU 210亦包括一個分支目標(biāo)緩沖器314,它包含8個連續(xù)指令,其中包括緩沖器310或312中下一個流控制指令的目標(biāo)。在本實(shí)施例中,向量處理器120使用RISC型指令集,其中每條指令為32位長,緩沖器310、312或314是8×32位緩沖器,并通過256位指令總線連到高速緩存子系統(tǒng)130。IFU 210可在一個時鐘周期內(nèi),把高速緩存子系統(tǒng)130中8條指令裝載到緩沖器310、312或314中的任何一個中。寄存器340、342和344分別指示緩沖器310、312和314中裝入指令的基地址。
多路選擇器332從主指令緩沖器310中選擇當(dāng)前的指令。如果當(dāng)前指令不是流控制指令,而且存儲在指令寄存器330中的指令進(jìn)展到執(zhí)行的譯碼階段,則當(dāng)前指令被存到指令寄存器330,向程序計數(shù)被增量。在程序計數(shù)增量后,選擇緩沖器310中最后一條指令,則下一組8條指令被裝載到緩沖器310。如果緩沖器312包含所要的8條指令,則緩沖器312和寄存器342的內(nèi)容立即移到緩沖器310和寄存器340,又有8條指令從高速緩存系統(tǒng)130預(yù)取指送到輔助緩沖器312。加法器350根據(jù)寄存器342中的基地址和由多路選擇器352選擇的偏移量,確定下一組指令的地址。由加法器350得到的結(jié)果地址被存儲在寄存器342中,這是在該地址從寄存器342移到寄存器340時或以后進(jìn)行的。計算出的地址隨同8條指令的請求也送到高速緩存子系統(tǒng)130中。如果上次對高速緩存控制系統(tǒng)130的調(diào)用,在緩沖器310請求時,還沒有向緩沖器312提供下面8條指令,則上次請求的指令,從高速緩存子系統(tǒng)130接收到時,立即存儲到緩沖器310中。
如果當(dāng)前指令是流控制指令,IFU 210通過對流控制指令條件的計算及在流控制指令之后更新程序計數(shù)來處理該指令。如果因?yàn)榍懊婵赡芨淖儣l件的指令沒有完成,而條件不能確定時,使IFU 210停頓。如果沒有發(fā)生分支,程序計數(shù)器被增量,下面的指令如上所述被選擇。如果發(fā)生分支且分支目標(biāo)緩沖器314包含該分支的目標(biāo),則緩沖器314和寄存器344的內(nèi)容被移到緩沖器310和寄存器340,以使IFU 210能繼續(xù)為譯碼器220提供指令而不需等待來自高速緩存子系統(tǒng)130中的指令。
為了為分支目標(biāo)緩沖器314預(yù)取指令,掃描器320掃描緩沖器310和312以定位跟著當(dāng)前程序計數(shù)的下一個流控制指令。如果在緩沖器310或312中找到流控制指令,掃描器320確定從包含該指令的緩沖器310或312的基地址,到一組對準(zhǔn)的(aligned)包括流控制指令目標(biāo)地址的8條指令的偏移量。多路選擇器352和354為加法器350提供流控制指令的偏移量和來自寄存器340或342的基地址,由加法器350為緩沖器314產(chǎn)生一個新的基地址。新的基地址被傳到高速緩存子系統(tǒng)130,再則其為分支目標(biāo)緩沖器314提供8條指令。
在處理流控制指令如“減量和條件轉(zhuǎn)移”指令VD1CBR、VD2CBR和VD3CBR,及“改變控制寄存器”指令VCHGCR時,IFU 210能改變除程序計數(shù)外的寄存器的值。當(dāng)IFU 210找到一非流控制指令的指令時,該指令送到指令寄存器330,并從那里到譯碼器220。
如圖4所示,譯碼器220通過把控制值寫到調(diào)度器230的FIFO緩沖器410的各個字段來譯碼一指令。FIFO緩沖器410包括4行觸發(fā)器,其中每一行可包含5個信息字段,用以控制一條指令的執(zhí)行。行0到3分別保持最早到最新的指令的信息,當(dāng)較早的信息隨著指令完成而被去除時,在FIFO緩沖器410中的信息下移到更低的行。調(diào)度器230通過選擇必需的指令字段裝載到包含執(zhí)行寄存器421到427的控制管道420來給執(zhí)行階段發(fā)出一指令。大部分指令能被調(diào)度,以便不按次序發(fā)出和執(zhí)行。尤其是有關(guān)邏輯/算術(shù)操作和加載/存儲操作的次序是任意的,除非在加載/存儲操作和邏輯/算術(shù)操作之間有操作數(shù)依賴性。FIFO緩沖器410中字段值的比較指示是否有操作依賴性存在。
圖5A舉例說明一個指令的6階段執(zhí)行流水線,該指令實(shí)現(xiàn)了寄存器到寄存器的操作,而不用訪問向量處理器120的地址空間。在指令取指階段511中,IFU 210如上所述取指一指令。取指階段需要1個時鐘周期,除非由于流水線延遲、未解決的分支條件或在提供預(yù)取指令的高速緩存子系統(tǒng)130中的延遲,使IFU 210停頓。在譯碼階段512,譯碼器220譯碼來自IFU 210的指令,并將該指令的信息寫到調(diào)度器230。譯碼階段512亦需要一個時鐘周期,除非對新的操作,F(xiàn)IFO 410中無可得到的行。在FIFO 410的第一周期期間,能發(fā)出操作到控制管道420,但是會由于較早的操作的發(fā)出被延遲。
執(zhí)行數(shù)據(jù)通道240實(shí)現(xiàn)寄存器到寄存器的操作,并為加載/存儲操作提供數(shù)據(jù)和地址。圖6A示出了執(zhí)行數(shù)據(jù)通路240一實(shí)施例的框圖,并同執(zhí)行階段514、515和516一起被說明。執(zhí)行寄存器421提供標(biāo)識寄存器文件610中兩個寄存器的信號,寄存器文件610在讀階段514期間的一個時鐘周期內(nèi)被讀。寄存器文件610包括32個標(biāo)量寄存器和64個向量寄存器。圖6B是寄存器文件610的框圖。寄存器文件610具有2個讀端口和2個寫端口,以便在每個時鐘周期提供2個讀和2個寫。每個端口包括選擇電路612、614、616或618以及288位的數(shù)據(jù)總線613、615、617或619。選擇電路如電路612、614、616和618在本技術(shù)領(lǐng)域是熟知的,并且使用地址信號WRADDR1、WRADDR2、RDADDR1或RDADDR2,這是譯碼器220從一般是從指令里提供的5位寄存器號、一個來自指令或控制狀態(tài)寄存器VCSR的一個組位、及指示寄存器是向量寄存器還是標(biāo)量寄存器的指令句法中得到的。數(shù)據(jù)讀的路徑可以是通過多路選擇器656到加載/存儲單元250,或者通過多路選擇器622和624,通過乘法器620算術(shù)邏輯單元630、累加器640。大部分操作讀2個寄存器,并且讀階段514在一個周期內(nèi)完成。然而,某些指令,如乘和加指令VMAD及操作雙倍長度向量的指令需要多于2個寄存器的數(shù)據(jù),致使讀階段514需超過一個時鐘周期。
在執(zhí)行階段515,乘法器620、算術(shù)邏輯單元630及累加器640處理前面從寄存器文件610讀出的數(shù)據(jù)。如果為了讀必要的數(shù)據(jù)要求多個周期,執(zhí)行階段515可與讀階段514重疊。執(zhí)行階段515的持續(xù)時間取決于處理數(shù)據(jù)元素的類型(整型或浮點(diǎn)型)和數(shù)量(讀周期數(shù)據(jù))。來自執(zhí)行寄存器422、423和425的信號控制插入數(shù)據(jù)到算術(shù)邏輯單元630、累加器640、和乘法器620以便在執(zhí)行階段實(shí)現(xiàn)第一步操作。來自執(zhí)行寄存器432、433和435的信號控制在執(zhí)行階段515實(shí)現(xiàn)第二步操作。
圖6C示出了乘法器620和ALU 630一實(shí)施例的框圖。乘法器620是一個整數(shù)乘法器,它包括8個獨(dú)立的36×36位乘法器626。每個乘法器626包括通過控制電路連結(jié)在一起的4個9×9位乘法器。對8位和9位數(shù)據(jù)元素寬度,來自調(diào)度器230的控制信號斷開4個9×9位乘法器的相互連結(jié),以使每個乘法器626實(shí)現(xiàn)4個乘法,乘法器620在一個周期內(nèi)實(shí)現(xiàn)32個獨(dú)立的乘法。對16位數(shù)據(jù)元素,控制電路把9×9位乘法器對連接在一起操作。乘法器620實(shí)現(xiàn)16個并行乘法。對32位整型數(shù)據(jù)元素類型,8個乘法器626每個時鐘周期實(shí)現(xiàn)8個并行乘法。乘法的結(jié)果對9位數(shù)據(jù)元素寬度提供576位結(jié)果,對其它數(shù)據(jù)長度提供512位結(jié)果。
ALU 630能在2個時鐘周期中處理來自乘法器620的576位或512位結(jié)果。ALU 630包括8個獨(dú)立的36位ALUs 636,每個ALU 636包括用于浮點(diǎn)加和乘的一個32×32位浮點(diǎn)部件。附加電路實(shí)現(xiàn)整數(shù)移位、算術(shù)和邏輯功能。對于整數(shù)操作,每個ALU 636包括能獨(dú)立進(jìn)行8位和9位操作的4個單元,對16位和32位整型數(shù)據(jù)元素,每2個或4個能夠組成一組連在一起。
累加器640累加結(jié)果,并包括2個576位寄存器,以便實(shí)現(xiàn)中間結(jié)果的較高精度。
在寫階段516,來自執(zhí)行階段的結(jié)果存儲在寄存器文件610。在一個時鐘周期內(nèi),能寫2個寄存器,輸入多路選擇器602和605選擇要被寫的2個數(shù)據(jù)值。一次操作的寫階段516的持續(xù)時間取決于作為操作結(jié)果要被寫的數(shù)據(jù)量和來自LSU 250的競爭,LSU 250可能正在通過對寄存器文件610進(jìn)行寫來完成裝載指令。來自執(zhí)行寄存器426和427的信號選擇把來自邏輯單元630、累加器640和乘法器620的數(shù)據(jù)寫入的寄存器。
圖5B示出執(zhí)行裝載指令的執(zhí)行流水線520。對于執(zhí)行流水線520的指令取指階段511、譯碼階段512和發(fā)出階段513與所說明的寄存器到寄存器的操作是相同的。讀階段514也同上面的說明相同,只是執(zhí)行數(shù)據(jù)通路240用來自寄存器文件610的數(shù)據(jù)以確定調(diào)用高速緩存子系統(tǒng)130的地址。在地址階段525,多路選擇器652、654和656選擇地址,該地址被提供給執(zhí)行階段526和527的加載/存儲單元250。在加載/存儲單元250處理操作的同時,在階段526和527期間,加載操作的信息保持在FIFO 410中。
圖7示出了加載/存儲單元250的一個實(shí)施例。在階段256期間調(diào)用高速緩存子系統(tǒng)130,以請求階段525所確定的地址的數(shù)據(jù)。本實(shí)施例使用基于事務(wù)的(transaction based)高速緩存調(diào)用,其中包括處理器110和120的多個設(shè)備可通過高速緩存子系統(tǒng)130存取局部地址空間。在調(diào)用高速緩存子系統(tǒng)130之后的幾個周期中,被請求的數(shù)據(jù)可能得不到,但在其它調(diào)用掛起時,加載/存儲單元250能調(diào)用高速緩存子系統(tǒng)。因此,加載/存儲單元250不致停頓。高速緩存子系統(tǒng)130提供被請求的數(shù)據(jù)所需的時鐘周期數(shù)取決于數(shù)據(jù)高速緩存194的命中或未命中(hit or miss)。
在驅(qū)動階段527,高速緩存子系統(tǒng)130為加載/存儲單元250確認(rèn)(assert)一個數(shù)據(jù)信號。高速緩存子系統(tǒng)130可在每個周期給加載/存儲單元250提供256位(32個字節(jié))的數(shù)據(jù),字節(jié)對準(zhǔn)器710在相應(yīng)9位存儲位置對準(zhǔn)32個字節(jié)的每個字節(jié),以提供288位的值。288位的格式對例如MPEG編碼和解碼的多媒體應(yīng)用是方便的,它們有時用9位數(shù)據(jù)元素。288位值寫入讀數(shù)據(jù)緩沖器720。對寫階段528,調(diào)度器230把FIFO緩沖器410的字段4傳送到執(zhí)行寄存器426或427,將數(shù)據(jù)緩沖器720的288位的值寫入寄存器文件610。
圖5C示出了執(zhí)行存儲指令所用的執(zhí)行流水線530。執(zhí)行流水線530的取指階段511、譯碼階段512和發(fā)出階段513同前面說明的相同。讀階段514亦同前面說明的相同,只是讀階段讀要存儲的數(shù)據(jù)和地址計算所用的數(shù)據(jù)。要被存儲的數(shù)據(jù)被寫入加載/存儲單元250中的寫數(shù)據(jù)緩沖器730。多路選擇器740把9位字節(jié)格式的數(shù)據(jù)轉(zhuǎn)換成傳統(tǒng)的8位字節(jié)的格式。從緩沖器730來的轉(zhuǎn)換過的數(shù)據(jù)和來自地址計算階段525的相關(guān)地址,在SRAM階段536期間被并行地送到高速緩存子系統(tǒng)130。
在向量處理器的實(shí)施例中,每個指令是32位長并具有圖8中所示的9種格式中的一種格式,且標(biāo)記為REAR、REAI、RRRM5、RRRR、RI、CT、RRRM9、RRRM9*、和RRRM9**。附錄E說明了向量處理器120的指令集。
當(dāng)確定一個有效地址時,使用標(biāo)量寄存器的某些加載、存儲和高速緩存操作具有REAR格式。REAR格式指令用位29-31是000b來標(biāo)識且有3個操作數(shù)通過3個寄存器號標(biāo)識,2個寄存器號SRb和SRi為標(biāo)量寄存器,寄存器號Rn可以是標(biāo)量或向量寄存器,這取決于位D。組位B或者為寄存器Rn標(biāo)識一個組,或者如果缺省向量寄存器大小是雙倍長度時指示是否向量寄存器Rn是雙倍長度。操作碼字段Opc標(biāo)識對操作數(shù)實(shí)行的操作,而字段TT指示傳送類型為加載或存貯。典型的REAR格式指令是指令VL,它從標(biāo)量寄存器SRb和SRi內(nèi)容相加確定的地址來加載寄存器Rn。如果位A被置位,所計算的地址被存儲在標(biāo)量寄存器SRb中。
REAI格式指令同REAR指令相同,只是來自字段IMM的8位立即值被用來代替標(biāo)量寄存器SRi的內(nèi)容。REAR和REAI格式無數(shù)據(jù)元素長度字段。
RRRM5格式用于具有2個源操作數(shù)和一個目的操作數(shù)的指令。這些指令具有3個寄存器操作數(shù)或2個寄存器操作數(shù)及1個5位立即值。在附錄E中所示的字段D、S和M的編碼確定是否第一個源操作數(shù)Ra是標(biāo)量或向量寄存器;是否第2個源操作數(shù)Rb/IM5是標(biāo)量寄存器、向量寄存器或5位立即值;及是否目的寄存器Rd是標(biāo)量或向量寄存器。
RRRR格式用于具有4個寄存器操作數(shù)的指令。寄存器號Ra和Rb指示源寄存器。寄存器號Rd指示目的寄存器,而寄存器號Rc指示源或目的寄存器,這取決于字段Opc。全部操作數(shù)是向量寄存器,除非位S被置位指示寄存器Rb是標(biāo)量寄存器。字段DS指示向量寄存器的數(shù)據(jù)元素長度。字段Opc選擇32位數(shù)據(jù)元素的數(shù)據(jù)類型。
RI格式指令給寄存器加載一個立即值。字段IMM包括可多達(dá)18位的立即值。寄存器號Rd指示目的寄存器,該目的寄存器是當(dāng)前組內(nèi)的向量寄存器或標(biāo)量寄存器,這取決于位D。字段DS和F分別指示數(shù)據(jù)元素的長度和類型。對32位整型數(shù)據(jù)元素,18位立即值在加載到寄存器Rd以前作符號擴(kuò)展。對浮點(diǎn)數(shù)據(jù)元素,位18、位17到10及位9到0分別表示32位浮點(diǎn)值的符號、指數(shù)和尾數(shù)。
CT格式用于流控制指令,它包括操作碼字段Opc、條件字段Cond、和23位的立即值IMM。當(dāng)條件字段指示條件為真時,則發(fā)生分支??赡艿臈l件碼是“always(無條件)”、“Less than(小于)”、“equal(等于)”、“Less than orequal(小于或等于)”、“greater than(大于)”、“not equal(不等于)”、“greaterthan or equal(大于或等于)”和“overflow(溢出)”。狀態(tài)和控制寄存器VCSR中的位GT、EQ、LT和SO用于評價條件。
格式RRRM9提供3個寄存器操作數(shù)或2個寄存器操作數(shù)及1個9位立即值。位D、S和M的組合指示哪些操作數(shù)是向量寄存器、標(biāo)量寄存器或9位立即值。字段DS指示數(shù)據(jù)元素長度。RRRM9*和RRRM9**格式是RRRM9格式的特殊情況,并且用操作碼字段Opc來區(qū)別。RRRM9*格式用條件碼Cond和ID字段替代源寄存器號Ra。RRRM9**格式用條件碼Cond和位K代替立即值的各最高有效位。RRRM9*和RRRM9**的進(jìn)一步說明在附錄E中給出,涉及到條件轉(zhuǎn)移指令VCMOV、元素屏蔽條件轉(zhuǎn)移CMOVM及比較和設(shè)置屏蔽指令CMPV。
雖然結(jié)合具體的實(shí)施例對本發(fā)明作出了說明,但這些說明僅僅是本發(fā)明應(yīng)用的一個例子,不應(yīng)該當(dāng)成是一種限制,此外所公開的實(shí)施例特點(diǎn)的各種修改和組合仍屬于下面權(quán)利要求所界定的本發(fā)明的范圍。
附錄A
在示范性實(shí)施例中,處理器110是按照ARM7處理器標(biāo)準(zhǔn)的通用處理器。在ARM7中對寄存器的說明參考ARM結(jié)構(gòu)文件或ARM7數(shù)據(jù)表(文件號ARM DDI 0020C,1994年12月發(fā)行)。
為了與向量處理器120相互配合,110處理器起動和停止向量處理器;測試向量處理器狀態(tài),包括同步狀態(tài);從向量處理器120中的標(biāo)量/專用寄存器把數(shù)據(jù)傳到處理器110的通用寄存器中;以及把通用寄存器中的數(shù)據(jù)傳到向量處理器的標(biāo)量/專用寄存器。在通用寄存器和向量處理器的向量寄存器之間,沒有直接的傳送裝置,這些傳送需要存貯器作為中介體。
表A.1說明了為了向量處理器的交互作用而擴(kuò)展的ARM7指令集。表A.1擴(kuò)展的ARM7指令集
表A.2列出了ARM7的異常,在執(zhí)行故障指令之前,檢測和報告這些異常。異常向量地址以十六進(jìn)制表示法給出。表A.2ARM7異常
下面說明對ARM7指令集擴(kuò)充的句法。關(guān)于術(shù)語的說明和指令的格式參考ARM結(jié)構(gòu)文件或ARM7數(shù)據(jù)表(文件號ARM DDI 0020C,1994年12月發(fā)表)。
ARM結(jié)構(gòu)為協(xié)處理器接口提供3種指令格式
1.協(xié)處理器數(shù)據(jù)操作(CDP)
2.協(xié)處理器數(shù)據(jù)傳送(LDC,STC)
3.協(xié)處理器寄存器傳送(MRC,MCR)
MSP結(jié)構(gòu)的擴(kuò)展使用全部二種格式。
為操作使用的協(xié)處理器數(shù)據(jù)操作格式(CDP)不需返回給ARM7。CDP格式
30 2520 15 10 50
CDP格式字段具有下列約定
協(xié)處理器數(shù)據(jù)傳送格式(LDC,STC)用于直接地加載或存貯向量處理器的寄存器子集到存貯器。ARM7處理器負(fù)責(zé)提供字地址,而向量處理器提供或接收數(shù)據(jù),并且控制傳送的字?jǐn)?shù)。更詳細(xì)內(nèi)容參考ARM7數(shù)據(jù)表。LDC,STC格式
30 25 20 1510 50
格式字段具有下列約定
協(xié)處理器寄存器傳送格式(MRC,MCR)用于直接地在ARM7和向量處理器之間傳送信息。該格式用于在ARM7寄存器和向量處理器的標(biāo)量或?qū)S眉拇嫫髦g的轉(zhuǎn)移。MRC,MCR格式
30 25 20 15 10 5 0
該格式字段具有下列約定擴(kuò)展的ARM指令說明
擴(kuò)展的ARM指令按字母順序予以說明。CACHE 高速緩存操作格式
30 25 20 1510 5 0
匯編器句法
STC{cond} p15,cOpc,<Address>
CACHE{cond}Opc,<Address>
其中Cond={eq,he,cs,cc,mi,pl,vs,vc,hi,Is,ge,It,gt,le,ai,nv}和Opc={0,1,3}。注意,因?yàn)長DC/STC格式的CRn字段用于指定Opc。在第一種句法中Opcode的十進(jìn)制表示必須由字母“C”打頭(即用CO代表0)。關(guān)于地址方式句法參考ARM7數(shù)據(jù)表。說明只有在Cond為真時,執(zhí)行該指令。Opc<30>指示如下操作操作
參考ARM7數(shù)據(jù)表,EA如何計算。異常
ARM7保護(hù)違章。INTVP 中斷向量處理器格式 3025 201510 50
匯編器句法
CDP{cond}p7,1,c0,c0,co
INTVP{cond}
其中cond={eq,ne,cs,cc,mi,pl,vs,vc,hi,Is,ge,It,gt,le,al,ns}。說明
該指令僅在Cond為真時執(zhí)行。該指令發(fā)信號使向量處理器停止。ARM7不必等待向量處理器停止,繼續(xù)執(zhí)行下一指令。
應(yīng)使用MFER忙等待循環(huán)以便看看向量處理器是否在該指令執(zhí)行后已停止。如果向量處理器已經(jīng)在VP_IDLE狀態(tài),則該指令不起作用。位1912、715和30被保留。異常
向量處理器不可得到。MFER 自擴(kuò)展寄存器轉(zhuǎn)移格式
30 2520 15105 0
匯編器句法
MRC{cond}p7,2,Rd,cP,cER,0
MEER{cond}Rd,RNAME
其中Cond={eg,he,cs,cc,mi,pl,rs,vc,hi,ls,ge,lt,gt,le,al,nv},Rd={r0,...r15},P={0,1},ER={0,...15}而RNAME指的是結(jié)構(gòu)上指定的寄存器助記符(即,PERO或CSR)。說明
該指令僅在Cond為真時執(zhí)行。ARM7寄存器Rd根據(jù)以PER<30>指定的擴(kuò)展寄存器ER轉(zhuǎn)移,如下表所示。參考章節(jié)1.2擴(kuò)展寄存器的說明。
位1917及75被保留異常
當(dāng)試圖在用戶方式中訪問PERx時,保護(hù)違章。MFVP 自向量處理器轉(zhuǎn)移格式
匯編器句法
MRC{cond}p7,1,Rd,Cm,CRm,0
MFVP{cond}Rd,RNAME
其中Cond={eq,ne,cs,cc,mi,pl,vs,vc,hi,ls,ge,lt,gt,le,al,nv},Rd={r0,...r15},CRn={c0,...c15},CRm={c0,...c15}而RNAME指的是結(jié)構(gòu)上指定的寄存器助記符(即,SPO或VCS)說明
該指令只在Cond為真時執(zhí)行。ARM7寄存器Rd根據(jù)向量處理器的標(biāo)量/專用寄存器CRn<10>CRm<30>轉(zhuǎn)移。參考章節(jié)3.2.3中寄存器傳送向量處理器寄存器號的分配。
位7.5及CRn<32>被保留。
向量處理器寄存器映射顯示在下面。參考向量處理器專用寄存器(SP0-SP15)的表15。
SR0經(jīng)常讀出32位零,并忽略對它的寫入。異常
向量處理器不可得到。MTER 轉(zhuǎn)移到擴(kuò)展寄存器格式
30 25 20 1510 5 0
匯編器句法
MRC{cond}p7,2,Rd,cP,cER,0
MFVP{cond}Rd,RNAME
這里Cond={eq,he,cs,cc,mi,pl,rs,vc,hi,ls,ge,lt,gt,le,al,nv},Rd={r0,...r15},P={0,1},ER={0,...15}。RNAME指的是結(jié)構(gòu)上指定的寄存器助記符(即,PERO或CSR)。說明
該指令只在條件為真時執(zhí)行。ARM7寄存器Rd根據(jù)以PER<30>指定的擴(kuò)展寄存器ER轉(zhuǎn)移。如下表所示
位1917和75備用異常
企圖在用戶方式訪問PERx時,保護(hù)違章。MTVP 轉(zhuǎn)移到向量處理器格式 30 252015 10 50
匯編器句法
MRC{cond}p7,1,Rd,Crn,CRm,0
MFVP{cond}Rd,RNAME
這里Cond={eq,ne,cs,cc,mi,pl,vs,vc,hi,ls,ge,lt,gt,le,al,nv},Rd={r0,...r15},CRn={c0,...c15},CRm={c0,...c15}。RNAME指的是結(jié)構(gòu)上指定的寄存器助記符(即,SPO或VCS)。說明
該指令只在Cond為真時執(zhí)行。ARM7寄存器Rd根據(jù)向量處理器的標(biāo)量/專用寄存器CRn<10>CRm<30>轉(zhuǎn)移。
位75及CRn<32>保留。
向量處理器寄存器映射如下所示異常
向量處理器不可得到。PFTCH 預(yù)取格式
30 25 20 15 10 5
0
匯編器句法
LDC{cond}p15,2,<Address>
PFTCH{cond}<Address>
這里Cond={eq,he,cs,cc,mi,pl,rs,vc,hi,Is,ge,lt,gt,le,al,nv},參考地址方式句法的ARM7數(shù)據(jù)表。說明
該指令僅在Cond為真時執(zhí)行。由EA指定的高速緩存行被預(yù)取到ARM7數(shù)據(jù)高速緩存中。操作
關(guān)于EA如何被計算,參考ARM7數(shù)據(jù)表。異常無STARTVP 啟動向量處理器格式
30 25 2015 10 5
0
匯編器句法
CDP{cond}p7,0,cO,cO,cO
STARTVP{cond}
其中cond={eq,he,cs,cc,mi,pl,vs,vc,hi,Is,ge,it,gt,le,al,nv}。說明
該指令僅在cond為真時執(zhí)行。該指令向向量處理器發(fā)信號,啟動執(zhí)行和自動地清除VISRC<vip>和VISRC<vip>。ARM7不等待向量處理器啟動執(zhí)行,繼續(xù)執(zhí)行下一指令。
向量處理器的狀態(tài),在這個指令執(zhí)行以前必須要初始化成所要的狀態(tài)。如果向量處理器已經(jīng)在VP-RUN狀態(tài),則該指令無作用。
位1912,75及30保留。異常
向量處理器不可得到。TESTSET 測試和設(shè)置格式
30 25 2015105
0
匯編器句法
MRC{cond}p7,0,Rd,cO,cER,0
TESTSET{cond}Rd,RNAME
這里cond={eq,he,cs,cc,mi,pl,rs,re,hi,Is,ge,It,gt,le,al,nv}。Rd={r0,...r15},ER={ 0,...15},RNAME指結(jié)構(gòu)上指定的寄存器助記符(即,VER1或VASYNC)。說明
該指令只在cond為真時執(zhí)行,該指令把UERX的內(nèi)容返回到RD中,并設(shè)定UERX<30>為1。如果ARM7寄存器15指定為目的寄存器則UERx<30>在CPSR的Z位返回,以便能實(shí)現(xiàn)短的忙等待循環(huán)。
當(dāng)前,只有UER1被規(guī)定隨同讀指令工作。
位1917及75保留。異常無
附錄B
多媒體處理器100的結(jié)構(gòu)定義了處理器110用MFER和MTER指令訪問的擴(kuò)展寄存器,擴(kuò)展寄存器包括特許擴(kuò)展寄存器和用戶擴(kuò)展寄存器。
特許擴(kuò)展寄存器主要用于控制多媒體信號處理器的操作。它們被示于表B.1表B.1特許擴(kuò)展寄存器
控制寄存器控制MSP100的操作,CTR中的所有位在復(fù)位時被清除,寄存器的定義如表B.2所示。表B.2CTR的定義
狀態(tài)寄存器指示MSP100的狀態(tài)。字段STR中的所有位在復(fù)位時被清除,寄存器的定義如表B.3所示。表B.3 STR定義
處理器類型(Version)寄存器標(biāo)識處理器的多媒體信號處理器系列的具體處理器的類型。
向量處理器中斷屏蔽寄存器VIMSK控制對處理器110的向量處理器異常的報告。當(dāng)隨著VTSRC寄存器中相應(yīng)的位而設(shè)定時,VIMSK中的每一位對中斷ARM7產(chǎn)生異常。它并不影響如何檢測向量處理器的異常,但影響是否異常將中斷ARM7。在VIMSK中的所有位在復(fù)位時被清除。寄存器的定義如表B.4所示表B.4VIMSK的定義
ARM7指令地址斷點(diǎn)寄存器輔助調(diào)試ARM7程序。寄存器的定義如表B.5所示。表B.5AIABR的定義
“ARM7數(shù)據(jù)地址斷點(diǎn)寄存器”輔助調(diào)試ARM7程序。寄存器的定義如表B.6所示。表B.6ADABR定義
“高速暫存寄存器”配置在高速緩存子系統(tǒng)130中使用SRAM形成的高速暫存的地址和尺寸。寄存器定義示于表B.7表B.7SPREG的定義
用戶擴(kuò)展寄存器主要用于處理器110和120的同步。用戶擴(kuò)展寄存器當(dāng)前被定義的只有一位,映射到位30,并且例如“MFERR15、UERx”的指令將位的值返回成為Z標(biāo)志。位UERx<31>和UERx<290>總是被讀作0。用戶擴(kuò)展寄存器在表B.8中被說明。表B.8用戶擴(kuò)展寄存器
表B.9顯示了在加電復(fù)位時擴(kuò)展寄存器的狀態(tài)。表B.9擴(kuò)展寄存器加電狀態(tài)
附錄C
向量處理器120的結(jié)構(gòu)狀態(tài)包括32個32位標(biāo)量寄存器;32個288位向量寄存器的2個組;一對576位向量累加寄存器;一組32位專用寄存器。標(biāo)量、向量及累加器寄存器擬供通用編程用,并支持許多不同數(shù)據(jù)類型。
下面的標(biāo)記用于這里及以后各部分VR表示向量寄存器;VRi表示第i個向量寄存器(零偏移);VR[i]表示在向量寄存器VR中第i個數(shù)據(jù)元素;VR<ab>表示在向量寄存器中位a到b,而VR[i]<ab>表示在向量寄存器VR中第i個數(shù)據(jù)元素的位a到b。
對于一個向量寄存器中的多個元素,向量結(jié)構(gòu)有一個額外數(shù)據(jù)類型和數(shù)據(jù)長度的尺寸。由于向量寄存器有固定尺寸,它能保持的數(shù)據(jù)元素數(shù)取決于元素的長度。MSP結(jié)構(gòu)定義了如表C.1所示的5種元素長度。表C.1數(shù)據(jù)元素的長度
MSP結(jié)構(gòu),根據(jù)指令中指定的數(shù)據(jù)類型和長度來解釋向量數(shù)據(jù)。通常,大部分算術(shù)指令中字節(jié)、字節(jié)9、半字和字元素長度支持2的補(bǔ)碼(整數(shù))格式。此外,對大部分算術(shù)指令,字元素長度支持IEEE754單精度格式。
一個程序員可以任何所要的方式解釋數(shù)據(jù),只要指令序列產(chǎn)生有意義的結(jié)果。例如,程序員可自由用字節(jié)9來存貯8位無符號數(shù),相當(dāng)于可自由把8位無符號數(shù)存到字節(jié)數(shù)據(jù)元素中,并用提供的2的補(bǔ)碼的算術(shù)指令去操作它們,只要程序能處理“假”溢出結(jié)果。
有32個標(biāo)量寄存器,稱為SR0到SR31。標(biāo)量寄存器為32位長并能容納任何一種所定義長度的一個數(shù)據(jù)元素。標(biāo)量寄存器SR0是一個特殊寄存器。寄存器SR0總是讀出32位零。并無視對SR0寄存器的寫入。字節(jié)、字節(jié)9和半字?jǐn)?shù)據(jù)類型被存儲在標(biāo)量寄存器的最低有效位中,而那些最高有效位具有未定義的值。
由于寄存器沒有數(shù)據(jù)類型指示器,程序員必須知道每條指令所用的寄存器的數(shù)據(jù)類型。這不同于認(rèn)為32位寄存器包含32位值的其它結(jié)構(gòu)。MSP結(jié)構(gòu)規(guī)定數(shù)據(jù)類型A的結(jié)果僅正確地修改為數(shù)據(jù)類型A所定義的位。例如,字節(jié)9加的結(jié)果,只能修改32位目標(biāo)標(biāo)量寄存器的低9位。較高的23位值沒有定義。除非用指令另外指出。
64個向量寄存器被構(gòu)成2個組,每個組32個寄存器。組0包含起始32個寄存器,組體1包括其次的32個寄存器。這兩個組中一個設(shè)置為當(dāng)前組,另一個設(shè)置或替代組。全部向量指令通過缺省值使用當(dāng)前組中的寄存器,除了加載/存貯和寄存器傳送指令,它們能訪問替代組中的向量寄存器。在“向量控制”和“狀態(tài)寄存器VCSR”中的CBANK位可用來設(shè)置組0或者1成為當(dāng)前組(另外一個成為替代組)。在當(dāng)前組中的向量寄存器被指定為VR0到VR31,而在替代組中指定為VRA0到VRA31。
另外,這兩個組從概念上能合并提供32個雙倍尺寸的向量寄存器,每個寄存器576位。在控制寄存器VCSR中VEC64位指定這種方式。在VEC64模式中,不分當(dāng)前組和替代組,而向量寄存器表示二個組中一對相應(yīng)的288位向量寄存器,也就是
VRi<5750>=VR1i<2870>VR0i<2870>
這里VR0i和VR1i分別表示在組1和0中寄存器號為VRi的向量寄存器。雙倍寬的向量寄存器被稱為VR0到VR31。
向量寄存器能容納字節(jié)、字節(jié)9、半字或字長度的多個元素,如表C.2所示。表C.2每個向量寄存器的元素數(shù)
不支持在一個寄存器中混合多種元素長度。除字節(jié)9元素外只用288位中的256位。尤其是每個第9位不用。在字節(jié)、半字和字長度中不用的32位被保留。程序員對它們的值應(yīng)不作任何假設(shè)。
向量累加器寄存器要為比目的寄存器中的結(jié)果具有更高精度的中間結(jié)果提供存貯。向量累加器寄存器由4個288位寄存器組成,其為VAC1H、VAC1L、VAC0H和VAC0L。VAC0HVAC0L對通過缺省由3條指令使用。只在VEC64模式中,VCL1HVAC1L對用于模擬64字節(jié)9向量操作。即使在VEC32方式中設(shè)置組1為當(dāng)前組,仍使用此VAC0HVAC0L對。
為產(chǎn)生同在源矢量寄存器中有相同元素數(shù)的擴(kuò)展精度的結(jié)果,通過一對寄存器來保存擴(kuò)展精度元素,如表C.3所示。表C.3向量累加器格式
僅在VEC64模式才用VAC1HVAC1L對,在這時的元素數(shù),字節(jié)9(和字節(jié))、半字和字分別為64、32或16。
有33個專用寄存器不能直接從存貯器裝載或直接存入存貯器。16個專用寄存器被稱為RASR0到RASR15,形成一內(nèi)部返回地址棧并由子例程調(diào)用和返回指令而使用。另外17個32位的專用寄存器示于表C.4表C.4專用寄存器
向量控制和狀態(tài)寄存器VCSR的定義示于表C.5表C.5VCSR的定義
向量程序計數(shù)器寄存器VPC是由向量處理器120執(zhí)行的下一指令的地址。ARM7處理器110在發(fā)出STARTVP指令以啟動向量處理器120操作之前應(yīng)當(dāng)裝載寄存器VPC。
向量異常程序計數(shù)器VEPC指出最可能引起最新異常的指令地址。MSP100不支持精確異常,因此,用了“最可能”一詞。
向量中斷源寄存器VISRC對ARM7處理器110指出中斷源。適當(dāng)?shù)奈煌ㄟ^硬件在異常檢測到時被設(shè)置。在向量處理器120重新開始執(zhí)行之前軟件必須清除寄存器VISRC。在寄存器VISRC中的任何位置位均引起向量處理器120進(jìn)入狀態(tài)VP_IDLE。若相應(yīng)的中斷使能位在VIMSK中被設(shè)置,給處理器110的中斷就被發(fā)出。表C.6定義了寄存器VISRC的內(nèi)容。C.6VISRC定義
向量中斷指令寄存器VIINS,當(dāng)VCINT或VCJOIN指令被執(zhí)行以中斷ARM7處理器110時,VCINT或VCJOIN指令被更新。
向量計數(shù)寄存器VCR1、VCR2和VCR3是用于“減量和分支”指令VD1CBR、VD2CBR及VD3CBR,并用執(zhí)行的循環(huán)計數(shù)來被初始化。當(dāng)執(zhí)行VD1CBR指令時,寄存器VCR1被減1。如果計數(shù)值不為零,并且在指令內(nèi)所指條件匹配VFLAG,則發(fā)生分支。否則,不發(fā)生分支。寄存器VCR1在任何情況下都可減1。寄存器VCR2和VCR3以相同方式被使用。
向量全屏蔽寄存器VGMR0表示在VEC32模式中將被影響的目的向量寄存器的元素和在VEC64模式中處在VR<2870>內(nèi)的元素。在VGMR0中的每一位控制向量目的寄存器中9個位的更新。具體講,VGMR0<i>控制VEC32模式中VRd<9i+89i>的更新和VEC64模式中VR0d<9i+89i>的更新。注意,VR0d指的是在VEC64模式中組0內(nèi)的目的寄存器,而VRd指的是當(dāng)前組中的目的寄存器。在VEC32模式中,它既中是組0,也可為組1。向量全屏蔽寄存器VGMR0用于將VCMOVM指令以外的所有指令的執(zhí)行中。
向量全屏蔽寄存器VGMR1表示在VEC64模式中將被影響的VR<575288>內(nèi)的元素。在寄存器VGMR1中的每位控制組1中向量目的寄存器中9個位的更新。具體講VGMR1<i>控制VR1<9i+89i>的更新。寄存器VGMR1在VEC32模式中不使用,但在VEC64模式中,影響除VCMOVM指令外的所有指令的執(zhí)行。
向量溢出寄存器VOR0表示在VEC32模式中的元素和VEC64模式中VR<2870>內(nèi)的元素,它們包括一向量算術(shù)運(yùn)算后的溢出結(jié)果。該寄存器并不受標(biāo)量算術(shù)運(yùn)算的修改。位VOR0<i>設(shè)置表示字節(jié)和字節(jié)9的第i個元素、半字的第<i,idiv2>個元素、或字?jǐn)?shù)據(jù)類型操作的第(i,idiv4)個元素包括溢出結(jié)果。例如,位1和位3可能分別被設(shè)置以表示第一個半字和字元素的溢出。在VOR0中位的映射不同于在VGMR0或VGMR1中位的映射。
向量溢出寄存器VOR1用來表示在VEEC64模式中VR<575288>內(nèi)的元素,它們包括在向量算術(shù)運(yùn)算后的溢出結(jié)果。寄存器VOR1在VEC32模式中并不用,也不由標(biāo)量算術(shù)運(yùn)算來修改。設(shè)置的位VOR1<i>表示字節(jié)或字節(jié)9的第i個元素、半字的第(i,idiv2)個元素、或字?jǐn)?shù)據(jù)類型操作的第(i,idiv4)個元素包括溢出結(jié)果 例如,位1和位3可能分別被設(shè)置以表示在VR<575288>中第一個半字或字元素的溢出。在VOR1中位的映射不同于在VGMR0或VGMR1中位的映射。
向量指令地址斷點(diǎn)寄存器VIABR輔助調(diào)試向量程序。寄存器的定義如表C.7所示。表C.7VIABR的定義
向量數(shù)據(jù)地址斷點(diǎn)寄存器VDABR輔助調(diào)試向量程序。寄存器的定義如表C.8表示。表C.8VDABR的定義
向量轉(zhuǎn)移屏蔽寄存器VMMR0在所有時間內(nèi)供VCMOVM指令用,同時當(dāng)VCSR<SMM>=1時供所有指令用。寄存器VMMR0表示在VEC32模式中會受到影響的目的向量寄存器的元素,以及在VEC64模式中VRL<2870>內(nèi)元素。在VMMR0中的每個位控制向量目的寄存器中9個位的更新。具體說VMMR0<i>在VEC32模式中控制VRd<9i+89i>的更新,在VEC64模式中控制VR0d<9i+89i>的更新。在VEC64模式中VR0d表示在組0中的目的寄存器,VRd指在當(dāng)前組中的目的寄存器,在VEC32模式中VRd既可在組0中也可在組1中。
向量轉(zhuǎn)移屏蔽寄存器VMMR1在所有時間內(nèi)供VCMOVM指令用,同時當(dāng)VCSR<SMM>=1時供所有指令用。寄存器VMMR1表示在VEC64模式中會受影響的VR<575288>中的元素,VMMR1中的每位控制在組1中向量目的寄存器中9個位的更新。具體說VGMR1<i>控制VR1d<9i+89i>的更新。寄存器VGMR1在VEC32模式中不使用。
向量和ARM7同步寄存器VASYNC提供在處理器110和120之間生產(chǎn)者/消費(fèi)者型式的同步。當(dāng)前,只定義了位30。當(dāng)向量處理器120在VP_RUN或VP_IDLE時,ARM7處理器可用MFER、MTER和TESTSET指令訪問寄存器VASYNC。寄存器VASYNC不能通過TVP或MFVP指令被ARM7處理器所訪問。因?yàn)檫@些指令不能訪問超出開始的16個向量處理器的專用寄存器。向量處理能通過VMOV指令訪問寄存器VASYNC。
表C.9顯示加電復(fù)位時的向量處理器的狀態(tài)。表C.9向量處理器加電復(fù)位狀態(tài)
在向量處理器能夠執(zhí)行指令之前,通過ARM7處理器110初始化專用寄存器。
附錄D
每條指令隱含或規(guī)定了源和目的操作數(shù)的數(shù)據(jù)類型。某些指令具有同等地適用于多于一種數(shù)據(jù)類型的語義。某些指令具有的語義,對源采用一種數(shù)據(jù)類型,而對結(jié)果產(chǎn)生不同數(shù)據(jù)類型。本附錄說明了示范性實(shí)施例支持的數(shù)據(jù)類型。在本申請中表1中說明了所支持的數(shù)據(jù)類型int8、int9、int16、int32和浮點(diǎn)數(shù)。不支持無符號的整型格式,對無符號的整型值在使用之前首先必須轉(zhuǎn)換成2的補(bǔ)碼格式。程序員可自由使用算術(shù)指令連同無符號整型或選擇任何其它格式,只要合適地處理溢出。這種結(jié)構(gòu)只定義了2的補(bǔ)碼整型數(shù)和32位浮點(diǎn)數(shù)據(jù)類型的溢出。這些結(jié)構(gòu)并不檢測8、9、16或32位運(yùn)算的執(zhí)行,該運(yùn)算是檢測無符號溢出所必須的。表D.1顯示了加載操作所支持的數(shù)據(jù)長度D.1加載操作支持的數(shù)據(jù)長度
這種結(jié)構(gòu)規(guī)定存貯器地址按數(shù)據(jù)類型邊界對齊。也就是對字節(jié)無對齊要求;對半字,對齊條件是半字邊界;對字,對齊條件是字邊界。
表D.2顯示了存貯操作所支持的數(shù)據(jù)長度表D.2存貯操作所支持的數(shù)據(jù)長度
因?yàn)槎嘤谝环N數(shù)據(jù)類型被映射到不論是標(biāo)量或矢量的寄存器。所以在目的寄存器中對某些數(shù)據(jù)類型可能有些位沒有定義的結(jié)果。事實(shí)上,除了在向量目的寄存器中字節(jié)9數(shù)據(jù)長度的操作和在標(biāo)量目的寄存器中字?jǐn)?shù)據(jù)長度操作之外,在目的寄存器中有些位,它們的值并不因操作而被定義。對這些位,結(jié)構(gòu)規(guī)定他們的值是未定義的,表D.3顯示了對每種數(shù)據(jù)長度未被定義的位。表D.3數(shù)據(jù)長度的未定義位
程序員在編程時必須知道源和目的寄存器或存貯器的數(shù)據(jù)類型。數(shù)據(jù)類型從一種元素長度轉(zhuǎn)換成另一種潛在地造成以不同元素數(shù)存貯在向量寄存器中。例如從半字到字?jǐn)?shù)據(jù)類型的向量寄存器的轉(zhuǎn)換需要2個向量寄存器去存貯同樣數(shù)目的被轉(zhuǎn)換元素。相反,從在向量寄存器中具有用戶定義格式的字?jǐn)?shù)據(jù)類型轉(zhuǎn)換成半字格式,在向量寄存器的一半中產(chǎn)生相同數(shù)目元素,而剩余位在另一半中。在這兩種情況下,數(shù)據(jù)類型轉(zhuǎn)換產(chǎn)生一種具有被轉(zhuǎn)換元素配置的結(jié)構(gòu),這些元素的長度不同于源元素的長度。
作為一個原理,MSP結(jié)構(gòu)并不提供隱含地改變元素數(shù)量作為結(jié)果操作,這種結(jié)構(gòu)意味著程序員必須知道改變目的寄存器中元素數(shù)的后果。此結(jié)構(gòu)只提供從一種數(shù)據(jù)類型轉(zhuǎn)換成同樣長度的另一種數(shù)據(jù)類型的操作。并且當(dāng)從一種數(shù)據(jù)類型轉(zhuǎn)或另一種不同長度的數(shù)據(jù)類型時,需要程序員為數(shù)據(jù)長度的差異作出調(diào)整。
在附錄E中所述的專用指令如VSHFLL和VUNSHFLL使第一種數(shù)據(jù)長度的向量轉(zhuǎn)換成第2種數(shù)據(jù)長度的向量簡單化。在向量寄存器VRa中,從較小的元素長度(如int8)轉(zhuǎn)換成較大元素長度,(如int16)的2補(bǔ)碼數(shù)據(jù)類型所包括的基本步驟為
1.使用字節(jié)數(shù)據(jù)類型,將VRa中的元素與另一向量VRb混洗成為2個向量VRcVRd。在VRa中的元素轉(zhuǎn)移倍寬寄存器VRcVRd中int16數(shù)據(jù)元素的較低字節(jié)處。而其值不相關(guān)的VRb的元素轉(zhuǎn)移到VRcVRd的高字節(jié)處。該操作有效地把VRa元素的一半移到VRc中,另一半移到VRd中。這時,每個元素的長度,從字節(jié)加倍成半字。
2.對VRcVRd中的元素算術(shù)移位移8位,并對它作符號擴(kuò)展
在向量寄存器VRa中將2的補(bǔ)碼數(shù)從較大元素長度(int16)轉(zhuǎn)成較小長度(如int8)所包括的基本步驟為
1.檢查確認(rèn)int16數(shù)據(jù)類型中的每個元素能以字節(jié)長度來表示。如果需要,在兩端飽和該元素,以適合較小長度。
2.將VRa中的元素同另一向量VRb去混洗,轉(zhuǎn)移到2個向量VRcVRd中,在VRaVRb中,每個元素的高半部轉(zhuǎn)移到VRc,低半部轉(zhuǎn)移到VRd中,這樣在VRd的低半部中有效地集合了VRa中所有元素的低半部元素。
為了下列數(shù)據(jù)類型轉(zhuǎn)換提供一些特殊指令int32轉(zhuǎn)成單精度浮點(diǎn);單精度浮點(diǎn)轉(zhuǎn)成定點(diǎn)(X.Y表示法);單精度浮點(diǎn)轉(zhuǎn)成int32;int8轉(zhuǎn)成int9;int9轉(zhuǎn)成int16;及int16轉(zhuǎn)成int9。
為了提供向量程序設(shè)計的靈活性,大部分向量指令使用元素屏蔽以及只操作在向量寄存器內(nèi)所選定的元素?!跋蛄咳帘渭拇嫫鳌盫GMR0和VGMR1標(biāo)識的元素是通過向量指令在目的寄存器和向量累加器中要被修改的元素。對字節(jié)和字節(jié)9數(shù)據(jù)長度的操作,在VGMR0(或VGMR1)中32位中的每位標(biāo)識要被操作的一個元素,位VGMR0<i>置位表示字節(jié)長度的元素i將被作用。這里的i是0到31。對半字?jǐn)?shù)據(jù)長度操作來講,在VGMR0(或VGMR1)中32位中的每二位標(biāo)識要被操作的一個元素。位VGMR0<2i2i+1>置位表示元素i將受作用,i為0到15。如果在半字?jǐn)?shù)據(jù)長度操作中VGMR0的一對中只有一位被置位,則只有相應(yīng)字節(jié)中的那些位被修改。對字?jǐn)?shù)據(jù)長度操作,在VGMR0(或VGMR1)中每4位一組置位標(biāo)識一元素被操作。位VGMR0<4i4i+3>置位表示元素i將受作用,i是0到7。如果在VGMR0中不是4位一組的所有位為字?jǐn)?shù)據(jù)長度操作而置位,則只是對應(yīng)字節(jié)的那些位被修改。
VGMR0和VGMR1的設(shè)置可用VCMPV指令將向量寄存器同向量或標(biāo)量寄存器比較或向量寄存器同立即值比較確定,該指令根據(jù)所規(guī)定的數(shù)據(jù)長度適合地設(shè)置屏蔽。因?yàn)闃?biāo)量寄存器被定義成只包含一個數(shù)據(jù)元素,所以標(biāo)量操作(即目的寄存器是標(biāo)量)不會受元素屏蔽影響。
為了向量編程的靈活性,大部分MSP指令支持向量和標(biāo)量操作的3種形式,它們?yōu)?br>
1.向量=向量 操作 向量
2.向量=向量 操作 標(biāo)量
3.向量=標(biāo)量 操作 標(biāo)量
情況2中標(biāo)量寄存器規(guī)定作為B操作數(shù),在標(biāo)量寄存器中的單個元素復(fù)制成為了匹配向量A操作數(shù)中元素數(shù)所需的數(shù)量。復(fù)制的元素同被指定標(biāo)量操作數(shù)中的元素具有相同值。標(biāo)量操作數(shù)以立即操作數(shù)形式可來自標(biāo)量寄存器或指令。在立即操作數(shù)的情況下,如果規(guī)定數(shù)據(jù)類型用的數(shù)據(jù)長度比可得到的立即字段長度大,則采用適當(dāng)?shù)姆枖U(kuò)展。
在許多多媒體應(yīng)用中,特別注意源立即數(shù)和最后結(jié)果的精度。另外,整數(shù)乘指令產(chǎn)生能存貯在2個向量寄存器中的“雙精度”中間結(jié)果。
通常,MSP結(jié)構(gòu)支持8、9、16和32位元素的2的補(bǔ)碼的整型格式和32位元素IEEE754單精度格式。定義的溢出,表示結(jié)果超出用規(guī)定數(shù)據(jù)類型所能表示的最大正值或最大負(fù)值范圍。當(dāng)發(fā)生溢出時,寫到目的寄存器中的值不是有效數(shù),所定義的下溢只用于浮點(diǎn)操作。
除非另有說明,所有浮點(diǎn)操作用位VCSR<RMODE>指定的4種舍入方式之一。某些指令用熟知的舍去零(偶舍入)的舍入方式。這些指令是明顯指出的。
在許多多媒體應(yīng)用中,飽和是一種重要功能。MSP結(jié)構(gòu)支持所有4種整型和浮點(diǎn)操作飽和。在寄存器VCSR中位ISAT指定整型飽和方式。浮點(diǎn)飽和方式,亦稱快速IEEE方式,它用VCSR中FSAT位來指定。當(dāng)使能飽和方式時,超過最大正或大負(fù)值的結(jié)果分別設(shè)置成最大正或最大負(fù)值。在這種情況下,不發(fā)生溢出,溢出位不能被設(shè)置。
表D.4列出精確異常,這些異常在執(zhí)行故障指定之前被檢測和報告。異常向量地址用16進(jìn)制表示表D.4精確異常
表D.5列出不精確異常,這些異常在執(zhí)行了某些在程序中處于故障指令之后的指令后,被檢測和報告。表D.5非精確異常
附錄E
本向量處理器指令包括示于表E.1中的十一個分類
表E.2列出流控制指令。表E.2流控指令
邏輯類支持布爾數(shù)據(jù)類型,并受元素屏蔽影響。表E.3列出流控指令。表E3邏輯指令
移位/循環(huán)轉(zhuǎn)移類指令對int8、int9、int16和int32數(shù)據(jù)類型操作(非浮點(diǎn)數(shù)據(jù)類型),并受元素屏蔽的影響。表E.4列出了移位/循環(huán)移位類指令。表E.4移位和循環(huán)移位類
通常,算術(shù)類指令支持int8、int9、int16和int32和浮點(diǎn)數(shù)據(jù)類型,并受元素屏蔽的影響。對于不支持的數(shù)據(jù)類型的專門限制,參考下面每條指令的詳細(xì)說明。VCMPV指令是不受元素屏蔽的影響,因其工作于元素屏蔽情況。表E.5列出算術(shù)類指令。表E.5算術(shù)類
MPEG指令是專門適合于MPEG編碼和解碼的一類指令,但可以以不同的方式使用。MPEG指令不支持int8、int9、int16和int32數(shù)據(jù)類型,并受元素屏蔽的影響。表E.6列出了MPEG指令。表E.6MPEG類
每種數(shù)據(jù)類型轉(zhuǎn)換指令支持特定的數(shù)據(jù)類型,并且不受元素屏蔽的影響,因?yàn)榇私Y(jié)構(gòu)不支持寄存器中多于一種的數(shù)據(jù)類型。表E.7列出了數(shù)據(jù)類型轉(zhuǎn)換指令。表E.7數(shù)據(jù)類型轉(zhuǎn)換類
內(nèi)部元素算術(shù)類指令支持int8、int9、int16和int32和浮點(diǎn)數(shù)據(jù)類型。表E.8列出了內(nèi)部元素算術(shù)類指令。表E.8內(nèi)部元素算術(shù)類
元素間轉(zhuǎn)移類指令支持字節(jié)、字節(jié)9、半字和字?jǐn)?shù)據(jù)長度,表E.9列出了元素間轉(zhuǎn)移類指令。表E.9元素間轉(zhuǎn)移類
加載/存儲指令除支持字節(jié)、半字和字?jǐn)?shù)據(jù)長度外還特別支持字節(jié)9有關(guān)的數(shù)據(jù)長度操作,并受元素屏蔽的影響。表E.10列出了加載/存儲類指令。表E.10加載/存儲類
大多數(shù)寄存器轉(zhuǎn)移指令支持int8、int9、int16和int32和浮點(diǎn)數(shù)類型,并不受元素屏蔽的影響,只有VCMOVM指令是受元素屏蔽的影響。表E.11列出寄存器轉(zhuǎn)移類指令。表E.11寄存器轉(zhuǎn)移類
表E.12列出控制高速緩存子系統(tǒng)130的高速緩沖操作類指令。表E.12高速緩存操作類指令說明述語
為簡化指令集的說明,在整個附錄中采用了專門的術(shù)語。例如,指令操作數(shù)是字節(jié)、字節(jié)9、半字或字長度的帶符號2的補(bǔ)碼的整型數(shù),除非另行注釋。術(shù)語“寄存器”用于指通用(標(biāo)量或向量)寄存器,其它類型的寄存器被清楚地說明。按匯編語言句法,尾標(biāo)b、b9、h和w表示數(shù)據(jù)長度(字節(jié)、字節(jié)9、半字和字)以及整型數(shù)據(jù)類型(int8、int9、int16和int32)。另外,用于描述指令操作數(shù)、操作、以及匯編語言句法的術(shù)語和符號如下。Rd目的寄存器(向量、標(biāo)量或?qū)S?Ra,Rb源寄存器a和b(向量、標(biāo)量或?qū)S?Rc源或目的寄存器c(向量或標(biāo)量)Rs存儲數(shù)據(jù)源寄存器(向量或標(biāo)量)S 32-bit標(biāo)量或?qū)S眉拇嫫鱒R當(dāng)前組向量寄存器VRA 替代組向量寄存器VR0 0組向量寄存器VR1 1組向量寄存器VRd 向量目的寄存器(缺省為當(dāng)前組,除非VRA被指定)VRa,VRb 向量源寄存器a和bVRC 向量源或目的寄存器CVRS 向量存儲數(shù)據(jù)源寄存器VAC0H 向量累加器寄存器0高VAC0L 向量累加器寄存器0低VAC1H 向量累加器寄存器1高VAC1L 向量累加器寄存器1低SRd 標(biāo)量目的寄存器SRa,SRb 標(biāo)量源寄存器a和bSRb+以有效地址更新基址寄存器SRs 標(biāo)量存儲數(shù)據(jù)源寄存器SP 專用寄存器VR[i] 向量寄存器VR中的第i個元素VR[i]<ab> 向量寄存器VR中第i個元素的a到b位VR[i]<msb> 向量寄存器VR中第i元素的最高有效位EA 存儲器訪問的有效地址MEM 存儲器BYTE[EA]存儲器地址EA中的一個字節(jié)HALF[EA]存儲器地址EA中的半個字,地址EA+1為位<158>。WORD[EA]存儲器地址EA中的一個字,地址EA+3為位<3124>。NumElem 為給出數(shù)據(jù)類型而指明的元素數(shù)目。在VEC32模式,對字
節(jié)和字節(jié)9、半字或字?jǐn)?shù)據(jù)長度分別為32、16或8;在
VEC64模式,對字節(jié)和字節(jié)9、半字或字?jǐn)?shù)據(jù)長度分別為
64、32或16。對標(biāo)量操作NumElem是0。EMASK[i]表示對第i元素的元素屏蔽。對字節(jié)和字節(jié)9、半字或字?jǐn)?shù)
據(jù)長度,在VGMR0/1、-VGMR0/1、VMMR0/1或~
VMMR0/1中分別代表1、2或4個位。為標(biāo)量操作,即使
EMASK[i]=0,也認(rèn)為元素屏蔽被設(shè)置。MMASK[i]表示對第i元素的元素屏蔽。在字節(jié)和字節(jié)9、半字或字?jǐn)?shù)
據(jù)長度,在VMMR0或VMMR1中分別代表1、2或4個
位。VCSR向量控制和狀態(tài)寄存器VCSR<x> 表示VCSR中一個位或多個位?!皒”是字段名VPC 向量處理器程序計數(shù)器VECSIZE 向量寄存器長度,在VEC32模式是32,在VEC64模式是
64。SPAD暫存器
C編程結(jié)構(gòu)用于描述流控操作。異常部分注明如下= 賦值 連接{X‖Y}X或Y之間選擇(不是邏輯或)sex 對指定的數(shù)據(jù)長度的符號擴(kuò)展sex_dp對指定的數(shù)據(jù)長度雙精度數(shù)符號擴(kuò)展sign》(算術(shù))右移符號擴(kuò)展zex 對指定的數(shù)據(jù)長度的零擴(kuò)展zero》(邏輯)右移零擴(kuò)展《左移(填入零)trnc7 截去前面的7位(從半字)trnc1 截去前面的1位(從字節(jié)9)%取模操作|expression|取表達(dá)式的絕對值/ 除(對于浮點(diǎn)數(shù)據(jù)類型采用四種IEEE舍入模式之一)//除(采用零舍入模式的舍入)Saturate()對整數(shù)類型飽和到最大負(fù)值或最大正值,不產(chǎn)生溢出;對
于浮點(diǎn)數(shù)據(jù)類型,飽和可到正無窮大、正零、負(fù)零、或負(fù)
或無窮大。
通用指令格式顯示在圖8中并說明如下。REAR格式由load、store和cache操作指令使用,而REAR格式中的字段具有下面表E.13給出的意義。表E.13REAR格式位1715被保留且應(yīng)為零,以確保結(jié)構(gòu)將來要擴(kuò)展的兼容性。BD和TT字段的某些編碼未定義,編程者不應(yīng)使用這些編碼,因?yàn)榻Y(jié)構(gòu)沒有規(guī)定當(dāng)這樣一種編碼被使用的預(yù)期結(jié)果。表E.14示出VEC32和VEC64模式都支持的標(biāo)量加載操作(在TT字段作為LT被編碼)。表E.14 在VEC32和VEC64模式下REAR加載操作
表E.15顯示VEC32模式支持的向量加載操作(在TT字段作為LT被編碼),這時VCSR<0>位被清除。表E.15VEC32模式下REAR加載操作B位用于指示當(dāng)前或替代組。
表E.16給出VEC64模式下支持的向量加載操作(在TT字段作為LT被編碼)。此時VCSR<0>位被設(shè)置。表E.16VEC32模式下REAR的加載操作位B用于指示64字節(jié)向量操作,因?yàn)樵赩EC64模式中不存在當(dāng)有組和替代組的概念。
表E.17列出了VEC32和VEC64模式均支持的標(biāo)量存儲操作(在TT字段作為ST被編碼)。表E.17REAR的標(biāo)量存儲操作
表E.18列出VEC32模式支持的向量存儲操作(在TT字段作為ST被編碼),此時VCSR<0>位被清除。表E.18VEC32模式下REAR的向量存儲操作
表E.19列出VEC64模式支持的向量存儲操作(在TT字段作為ST被編碼),這時VCSR<0>位被設(shè)置。表E.19在VEC32模式下REAR向量存儲操作位B用于指出64字節(jié)向量操作,因?yàn)樵赩EC64模式中不存在當(dāng)前組和替代組的概念。REAI格式由加載、存儲和高速緩存操作指令使用,表E.20顯示了REAI格式下各字段的意義。表E.20REAI格式REAR和REAI格式用于傳送類型的相同編碼。對進(jìn)一步的編碼細(xì)節(jié)參看REAR格式。RRRM5格式提供了三個寄存器或二個寄存器及一5位的立即操作數(shù)。表E.21定義了RRRM5格式的字段。表E.21RRRM5格式位1915保留并且必須為零,以確保將來要擴(kuò)展的兼容性。
全部向量寄存器的操作數(shù)指的是當(dāng)前組(既可是0組也可是1組)除非另做陳述。表E.22列出當(dāng)DS<10>是00、01或10時的DSM編碼。表E.22DS不等于11時RRRM5的DSM編碼
當(dāng)DS<10>是11時DSM編碼具有下面的意義表E.23DS等于11時,RRRM5的DSM編碼RRRR格式提供四種寄存器操作數(shù),表E.24顯示了RRRR格式下的字段。表E.24RRRR格式全部向量寄存器操作數(shù)指的是當(dāng)前組(既可以是0組也可以是1組),除非另做陳述。RI 格式僅由加載立即數(shù)指令使用。表E.25指明RI格式下的字段。表E.25RI格式字段FDS<10>的某些編碼未定義。編程者應(yīng)不用這些編碼,因?yàn)榇私Y(jié)構(gòu)沒有給定當(dāng)使用這種編碼時的預(yù)期后果。加載進(jìn)入Rd的值取決于數(shù)據(jù)的類型,如表E.26所示。表E.26RI格式下的加載值CT格式包含的字段示于表E.27。表E.27CT格式轉(zhuǎn)移條件使用VCSR[GTEQLT]字段。溢出條件使用VCSR[SO]位,當(dāng)設(shè)置時,它優(yōu)先于GT、EQ和LT位。VCCS和VCBARR則以不同于以上所說的來解釋Cond<20>字段,參考它的指令說明細(xì)節(jié)。
RRRM9格式指明三個寄存器或二個寄存器及一9位的立即操作數(shù)。表E.28給出RRRM9格式的字段。表E.28RRRM9格式位1915位被保留,當(dāng)DSM編碼沒有指定一立即操作數(shù),而且必須為0以確保將來的兼容性。
全部向量寄存器操作數(shù)指的是當(dāng)前組(既可是0組也可以是1組)除非另做陳述。DSM編碼同RRRM5格式的表E.22和E.23所示的那些是相同的,除了根據(jù)DS<10>編碼從立即數(shù)字段抽取的立即數(shù)外,見表E.29所示。表E.29RRRM9格式的立即數(shù)值
浮點(diǎn)數(shù)據(jù)類型不能得到立即數(shù)格式。
下面是按字母數(shù)字排列的MSP向量指令。注意1.除非另外注明,指令是受元素屏蔽的影響。CT格式指令不受元素屏蔽影 響。由加載、存儲和高速緩存指令組成的REAR和REAI格式指令也不受 元素屏蔽影響。2.浮點(diǎn)數(shù)據(jù)類型下不能得到9位的立即操作數(shù)。3.在操作說明中只給出了向量形式。對標(biāo)量操作,假定只有一個,即第0個 元素被定義。4.對RRRM5和RRRM9格式,下面的編碼用于整型數(shù)據(jù)類型(b、b9、h、 w):5.對RRRM5和RRRM9格式,下面的編碼用于浮點(diǎn)數(shù)據(jù)類型6.對于全部可能引起溢出的指令,當(dāng)VCSR<ISAT>位被設(shè)置時,飽和到 int8、int9、int16、int32的最大或最小限制被采用。相應(yīng)地,當(dāng)VCSR <FSAT>位設(shè)置時,浮點(diǎn)結(jié)果飽和到-無窮大、-0、+0或+無窮大。7.按句法規(guī)則,.n可以用來代替b9以表示字節(jié)9數(shù)據(jù)長度。8.對全部指令,返回到目的寄存器或到向量累加器的浮點(diǎn)結(jié)果是IEEE754單精度格式。浮點(diǎn)結(jié)果寫到累加器的較低部分,高位部分不改變。VAAS3 加和附加(-1,0,1)符號格式
匯編器句法
VAAS3.dt VRd,VRa,VRb
VAAS3.dt VRd,VRa,SRb
VAAS3.dt SRd,SRa,SRb
其中dt={b,b9,h,w}。支持的模式說明
向量/標(biāo)量寄存器Ra的內(nèi)容被加到Rb以產(chǎn)生一中間結(jié)果,該中間結(jié)果再附加上Ra的符號;并且最終結(jié)果存儲在向量/標(biāo)量寄存器Rd中。操作
fot(i=0;i<NumElem && EMASK[i];i++){
if(Ra[i]>0) extsgn3=1;
else if(Ra[i]<0) extsgn3=-1;
else extsgn3=0;
Rd[i]=Ra[i]+Rb[i]+extsgn3;
}異常
溢出。VADAC 加和累加格式
匯編器句法
VADAC.dt VRc,VRd,VRa,VRb
VADAC.dt SRc,SRd,SRa,SRb
其中dt={b,b9,h,w}。支持的模式說明
將Ra和Rb操作數(shù)的每個元素與向量累加器的每個雙精度元素相加,將每個元素的雙精度和存儲到向量累加器和目的寄存器Ra及Rd。Ra和Rb使用指定的數(shù)據(jù)類型,而VAC使用合適的雙精度數(shù)據(jù)類型(16、18、32和64位分別對應(yīng)int8、int9、int16和int32)。每個雙精度元素的高位存儲在VACH和Rc。如果Rc=Rd;Rc中的結(jié)果未定義。操作
for(i=0)i<NumElem && EMASK[i]i++){
Aop[i]={VRa[i]‖SRa};
Bop[i]={VRb[i]‖SRb};
VACH[i]VACL[i)=sex(Aop[i]+Bop[i])+ VACH[i}VACL[i];
Rc[i]=VACH[i];
Rd[i]=VACL[i];
}VADACL 加和累加低位格式
匯編器句法
VADACL.dt VRd,VRa,VRb
VADACL.dt VRd,VRa,SRb
VADACL.dt VRd,VRa,# IMM
VADACL.dt SRd,SRa,SRb
VADACL.dt SRd,SRa,# IMM
其中dt={b,b9,h,w}。支持的模式說明
將Ra和Rb/立即操作數(shù)的每個元素與向量累加器的每個擴(kuò)展精度元素相加,將擴(kuò)展精度的和存入向量累加器;將較低精度返回到目的寄存器Rd。Ra和Rb/立即數(shù)使用指定的數(shù)據(jù)類型,而VAC用適當(dāng)?shù)碾p精度數(shù)據(jù)類型(16、18、32和64位分別對應(yīng)int8、int9、int16和int32)。每個擴(kuò)展精度元素的高位存儲在VACH中。操作
for(i=0i<NumElem && EMASK[i];i++){
Bop[i]={VRb[i]‖SRb‖sex(IMM<80>)};
VACH[i]VACL[i]=sex(Ra[i]+Bop[i])+VACH[i]VACL[i];
Rd[i]=VACL[i]
}VADD 加格式
匯編器句法
VADD.dt VRd,VRa,VRb
VADD.dt VRd,VRa,SRb
VADD.dt VRd,VRa,# IMM
VADD.dt SRd,SRa,SRb
VADD.dt SRd,SRa,# IMM
其中dt={b,b9,h,w,f}。支持的模式說明
加Ra及Rb/立即操作數(shù),并將其和返回到目的寄存器Rd。操作
for(i=0;i<NumElem && EMASK[i];i++){
Bop[i]={VRb[i]‖SRb‖sex(IMM<80>)};
Rd[i]=Ra[i]+Bop[i];
}異常
溢出,浮點(diǎn)無效操作數(shù)。VADDH 加兩個相鄰元素格式
匯編器句法
VADDH.dt VRd,VRa,VRb
VADDH.dt VRd,VRa,SRb
其中dt={b,b9,h,w,f}。支持的模式說明
操作
for(i=0;i<NumElem-1,1++){
Rd[i]=Ra[i]+Ra[i+1];
}
Rd[NumElem-1]=Ra[NumElem-1]+{VRb
‖SRb};異常
溢出、浮點(diǎn)無效操作數(shù)。編程注解
本指令不受元素屏蔽影響。VAND 與格式
匯編器句法
VAND.dt VRd,VRa,VRb
VAND.dt VRd,VRa,SRb
VAND.dt VRd,VRa,# IMM
VAND.dt SRd,SRa,SRb
VAND.dt SRd,SRa,# IMM
其中dt={b,b9,h,w}。注意.w和.f指定相同的操作。支持的模式說明
對Ra和Rb/立即操作數(shù)進(jìn)行邏輯與,并將結(jié)果返回到目的寄存器Rd。操作
for(i=0;i<NumElem && EMASK[i];i++){
Bop[i]={VRb[i]‖SRb‖sex(IMM<80>)};
Rd[i]<k>=Ra[i]<k>& Bop[i]<k>,k=for all bits in element i;
}異常
無。VANDC 與補(bǔ)碼格式
匯編器句法
VANDC.dt VRd,VRa,VRb
VANDC.dt VRd,VRa,SRb
VANDC.dt VRd,VRa,# IMM
VANDC.dt SRd,SRa,SRb
VANDC.dt SRd,SRa,# IMM
其中dt={b,b9,h,w}。注意.w和.f指定同樣的操作。支持的模式說明
對Ra和Rb/立即操作數(shù)的補(bǔ)碼進(jìn)行邏輯與,并將結(jié)果返回到目的寄存器Rd。操作
for(i=0;i<NumElem && EMASK[i];i++){
Bop[i]={VRb[i]‖SRb‖sex(IMM<80>)};
Rd[i]<k>=Ra[i]<k>&-Bop[i]<k>,k=for all bits in element i;
}異常
無。VASA 累加器算術(shù)移位格式
匯編器句法
VASAL.dt
VASAR.dt
其中dt={b,b9,h,w},而R指出向左或向右移位方向。支持的模式說明
向量累加器寄存器的每個數(shù)據(jù)元素左移一位的位置,且從右端以零填充(若R=0),或者帶符號擴(kuò)展右移一位的位置(若R=1)。其結(jié)果存儲在向量累加器中。操作
for(i=0;i<NumElem && EMASK[i];i++){
if(R=1)
VAC0H[i]VAC0L[i]=VAC0H[i]VAC0L[i]sign>>1;
else
VAC0H[i]VAC0L[i]=VAC0H[i]VAC0L[i]<<1;
}異常
溢出。VASL 算術(shù)左移格式
匯編器句法
VASL.dt VRd,VRa,SRb
VASL.dt VRd,VRa,# IMM
VASL.dt SRd,SRa,SRb
VASL.dt SRd,SRa,# IMM
其中dt={b,b9,h,w}。支持的模式
向量/標(biāo)量寄存器Ra的每個數(shù)據(jù)元素左移,從右端以零填充,移位量由標(biāo)量寄存器Rb或IMM字段給出,其結(jié)果存放在向量/標(biāo)量寄存器Rd中。對引起溢出的那些元素,其結(jié)果根據(jù)其符號包含和到最大正值或最大負(fù)值。移位量定義為無符號整數(shù)。操作
shift_amount={SRb%32‖MM<40>};
for(i=0;i<NumElem && EMASK[i];i++){
Rd[i]=saturate(Ra[i]<<shift_amount);
}異常
無。編程注解
注意shift_amount是從SRb或IMM<40>取得的5位數(shù)。對byte,byte9,halfword數(shù)據(jù)類型,編程者負(fù)責(zé)正確指定移位量,此移位量小于或等于數(shù)據(jù)長度的位數(shù)。如果移位量大于指定的數(shù)據(jù)長度,元素將由零來填充。VASR 算術(shù)右移格式
匯編器句法
VASR.dt VRd,VRa,SRb
VASR.dt VRd,VRa,# IMM
VASR.dt SRd,SRa,SRb
VASR.dt SRd,SRa,# IMM
其中dt={b,b9,h,w}。支持的模式說明
向量/標(biāo)量寄存器Ra的每個數(shù)據(jù)元素被算術(shù)右移,最高有效位位置有符號擴(kuò)展,移位量在標(biāo)量寄存器Rb或IMM字段的最低有效位中給出,其結(jié)果存儲在向量/標(biāo)量寄存器Rd中。移位量規(guī)定為無符號整數(shù)。操作
shift_amount={SRb%32‖IMM<40>};
for(i=0;i<NumElem && EMASK[i};i++){
Rd[i]=Ra[i] sign>>shift_amount;
}異常
無。編程注解
注意shift_amount是從SRb或IMM<40>取得的5位數(shù)。對于byte,byte9,halfword數(shù)據(jù)類型,編程者負(fù)責(zé)正確地指定移位量,此移位量小于或等于數(shù)據(jù)長度的位數(shù)。如果移位量大于指定的數(shù)據(jù)長度,元素將由符號位填充。VASS3 加及減(-1,0,1)符號格式
匯編器句法
VASS3.dt VRd,VRa,VRb
VASS3.dt VRd,VRa,SRb
VASS3.dt SRd,SRa,SRb
其中dt={b,b9,h,w}。支持的模式說明
向量/標(biāo)量寄存器Ra的內(nèi)容被加到Rb以產(chǎn)生一中間結(jié)果,然后將Ra的符號從此中間結(jié)果中去掉;最終結(jié)果存儲在向量/標(biāo)量寄存器Rd中。操作
for(i=0i<NumElem && EMASK[i];i++){
if(Ra[i]>0) extsgn3=1;
else if(Ra[i]<0) extsgn3=-1;
else extsgn3=0;
Rd[i]=Ra[i]+Rb[i]-extsgn3;
}異常
溢出。VASUB 減操作的絕對值格式
匯編器句法
VASUB.dt VRd,VRa,VRb
VASUB.dt VRd,VRa,SRb
VASUB.dt VRd,VRa,# IMM
VASUB.dt SRd,SRa,SRb
VASUB.dt SRd,SRa,# IMM
其中dt={b,b9,h,w},支持的模式說明
向量/標(biāo)量寄存器Rb或IMM字段的內(nèi)容從向量/標(biāo)量寄存器Ra的內(nèi)容中減去,其絕對值結(jié)果存儲在向量/標(biāo)量寄存器Rd中。操作
for(i=0;i<NumElem && EMASK[i];i++){
Bop[i]={Rb[i]‖SRb‖sex(IMM<80>)};
Rd[i]=1Ra[i]-Bop[i]t;
}異常
溢出,浮點(diǎn)無效操作數(shù)。編程注解
如果減的結(jié)果是最大負(fù)數(shù),則在絕對值操作后將發(fā)生溢出,如果允許飽和模式,此取絕對值操作的結(jié)果將是最大正數(shù)。VAVG 兩元素平均格式
匯編器句法
VAVG.dt VRd,VRa,VRb
VAVG.dt VRd,VRa,SRb
VAVG.dt SRd,SRa,SRb
其中dt={b,b9,h,w,f}。對整型數(shù)據(jù)類型使用VAVGT以指定“截斷”舍入模式。支持的模式說明
向量/標(biāo)量寄存器Ra的內(nèi)容加到向量/標(biāo)量寄存器Rb的內(nèi)容上以產(chǎn)生一中間結(jié)果;接著中間結(jié)果被2除,并將最終結(jié)果存儲在向量/標(biāo)量寄存器Rd中。對整型數(shù)據(jù)類型,如果T=1舍入模式是截斷,而如果T=0(缺省),則舍去零。對浮點(diǎn)數(shù)據(jù)類型,舍入模式由VCSR<RMODE>指定。操作
for(i=0;i<NumElem && EMAS[i];i++){
Bop[i]={Rb[i]‖SRb‖sex(IMM<80>)};
Rd[i]=(Ra[i]+Bop[i]}//2
}異常
無。VAVGH 兩相鄰元素平均格式
匯編器句法
VAVGH.dt VRd,VRa,VRb
VAVGH.dt VRd,VRa,SRb
其中dt={b,b9,h,w,f}。對整型數(shù)據(jù)類型使用VAVGHT以指定“截斷”舍入模式。支持的模式說明
對于每個元素,平均兩個相鄰元素對。對整型數(shù)據(jù)類型,如果T=1,舍入模式是截斷,而對T=0(缺省)則是舍去零。對浮點(diǎn)數(shù)據(jù)類型,舍入模式由VCSR<RMODE>指定。
操作
for(i=0;i<NumElem-1,1++){
Rd[i]=(Ra[i]+Ra[i+1])//2;
}
Rd[NumElem-1]=(Ra[NumElem-1]+{VRb
‖SRb1}//2異常
無。編程注解
此指令不受元素屏蔽影響。VAVGQ 四平均格式
匯編器句法
VAVGQ.dt VRd,VRa,VRb
其中dt={b,b9,h,w}。對整型數(shù)據(jù)類型使用VAVGQT以指示“截斷”舍入模式。支持的模式說明
在VEC64模式下不支持本指令。
如下圖所示,采用由T指定的截斷模式(1為截斷,0為舍去零,缺省)來計算4個元素的平均。注意最左邊的元素(Dn1)未定義。
操作
for(i=0;i<NumElem-1,1++){
Rd[i]=(Ra[i]+Rb[i]+Ra[i+1]+Rb[i+1])//4;
} 異常
無。VCACHE Cache操作格式
匯編器句法
VCACHE.fc SRd,SRi
VCACHE.fc SRb,# IMM
VCACHE.fc SRb+,SRi
VCACHE.fc SRb+,# IMM
其中fc={0,1}。說明
本指令供向量數(shù)據(jù)Cache的軟件管理使用。當(dāng)數(shù)據(jù)Cache的部分或全部被象暫時存儲器那樣配置,此指令對暫時存儲器無影響。
支持下列選項(xiàng)操作異常
無。編程注解
比指令不受元素屏蔽影響。VCAND 補(bǔ)碼與格式
匯編器句法
VCAND.dt VRd,VRa,VRb
VCAND.dt VRd,VRa,SRb
VCAND.dt VRd,VRa,# IMM
VCAND.dt SRd,SRa,SRb
VCAND.dt SRd,SRa,# IMM
其中dt=(b,b9,h,w)。注意.w和.f指明同樣操作。支持的模式說明
對Ra和Rb/立即操作數(shù)的補(bǔ)碼進(jìn)行邏輯與,并將其結(jié)果返回到目的寄存器Rd。操作
for(i=0;i<NumElem && EMASK[i];i++){
Bop[i]={VRb[i]‖SRb‖sex(IMM<80>)};
Rd[i]<k>=-Ra[i]<k>&Bop[i]<k>,k=for all bits in element i.
}異常
無。VCBARR 條件屏障格式
匯編器句法
VCBARR.cond
其中cond={0-7}。每個條件將在后面給出助記符。說明
只要此條件保持有效,拖延本指令以及全部后面的指令(出現(xiàn)在程序序列后面的那些)。Cond<20>字段的解釋不同于在CT格式下的其它條件指令。
當(dāng)前定義下列條件操作
while(Cond=true)
stall all later instructoins;異常
無。編程注解
此指令為軟件而提供以強(qiáng)制指令的連串執(zhí)行。此指令可被用于強(qiáng)迫精確報告不明確的異常事件。例如,如果該指令被立即用在可引起異常事件的算術(shù)指令以后,則此異常事件將以對該指令尋址的程序計數(shù)器報告。VCBR 條件轉(zhuǎn)移格式
匯編器句法
VCBR.cond # Offset
其中cond={un,lt,eq,le,gt,ne,ge,ov}。說明
如果Cond為真,則轉(zhuǎn)移,這不是延遲轉(zhuǎn)移。操作
If((Cond=VCSR[SO,GT,EQ,LT])|(Cond=un))
VPC=VPC+sex(Offset<220>*4);
elseVPC=VPC+4,異常
無效的指令地址。VCBRI 間接條件轉(zhuǎn)移格式
匯編器句法
VCBRI.cond SRb
其中cond={un,lt,eq,le,gt,ne,ge,ov}。說明
如果Cond為真,則間接轉(zhuǎn)移。這不是延遲轉(zhuǎn)移。操作
If((Cond=VCSR[SO,GT,EQ,LT])|(Cond=un))
VPC=SRb<312>b’00;
elseVPC=VPC+4;異常
無效的指令地址。VCCS 條件現(xiàn)場轉(zhuǎn)換格式
匯編器句法
VCCS # Offset說明
如果VIMSK<cse>為真,則跳轉(zhuǎn)到現(xiàn)場轉(zhuǎn)換子程序。這不是延遲轉(zhuǎn)移。
如果VIMSK<cse>為真,則將VPC+4(返回地址)保存到返回地址堆棧。如果非真,從VPC+4繼續(xù)執(zhí)行。操作
<pre listing-type="program-listing"><![CDATA[ If(VIMSK<cse>=1){ if(VSP<4>>15){ VISRC<RASO>=1; signal ARM7 with RASO exception; VP_STATE=VP_IDLE; } else { RSTACK[VSP<30>]=VPC+4; VSP<40>=VSP<40>+1; VPC=VPC+sex(Offset<220>*4); } } eise VPC=VPC+4;]]></pre>
異常
返回地址堆棧溢出。VCHGCR 改變控制寄存器格式
匯編器句法
VCHGCR Mode說明
此指令改變向量處理器的操作模式
Mode中每位指定如下操作異常
無。編程注解
本指令為硬件提供,以比VMOV指令更為有效的方式改變VCSR中的控制位。VCINT 條件中斷ARM7格式
匯編器句法
VCINT.cond # ICODE
其中cond={un,lt,eq le,gt,ne,ge,ov }。說明
如果Cond為真,當(dāng)允許時,停止執(zhí)行并中斷ARM7。操作
If((Cond=VCSR[SO,GT,EQ,LT])|(Cond=un)){ VISRC<vip>=1; VIINS=[VCINT.cond #ICODE instruction]; VEPC=VPC; if(VIMSK<vie>=1)signal ARM7 interrupt, VP_STATE=VP_IDLE; } else VPC=VPC+4;
異常
VCINT中斷。VCJOIN 用ARM7任務(wù)條件連接格式
匯編器句法
VCJOIN.cond # Offset
其中cond={un,lt,eq,le,gt,ne,ge,ov}。說明
如果Cond為真,當(dāng)允許時,停止執(zhí)行并中斷ARM7。操作
If((Cond=VCSR[SO.GT.EQ.LT])|(Cond=un)){ VISRC<vjp>=1; VIINS=[VCJOIN.cond #Offset instruction]; VEPC=VPC; if(VIMSK<vje>=1)signal ARM7 interrupt; VP_STATE=VP_IDLE; } else VPC=VPC+4;
異常
VCJOIN中斷。VCJSR 條件跳轉(zhuǎn)到子程序格式
匯編器句法
VCJSR.cond # Offset
其中cond={un,lt,eq,le,gt,ne,ge,ov}。說明
如果Cond為真,則跳轉(zhuǎn)到子程序。這不是延遲轉(zhuǎn)移。
如果Cond為真,將VPC+4(返回地址)保存到返回地址堆棧。如果非真,則從VPC+4繼續(xù)執(zhí)行。操作
If((Cond=VCSR[SO.GT.EQ.LT])|(Cond=un)){ if(VSP<4>>15){ VISRC<RASO>=1 signal ARM7 with RASO exception; VP_STATE=VP_IDLE; }else{ RSTACK[VSP<30>]=VPC+4; VSP<40>=VSP<40>+1; VPC=VPC+sex(Offset<220>*4); } }else VPC=VPC+4;
異常
返回地址堆棧溢出。VCJSRI 間接條件跳轉(zhuǎn)到子程序格式
匯編器句法
VCJSRI.cond SRb
其中cond={un,lt,eq,le,gt,ne,ge,ov}。說明
如果Cond為真,則間接跳轉(zhuǎn)到子程序。這不是延遲轉(zhuǎn)移。
如果Cond為真,則將VPC+4(返回地址)保存到返回地址堆棧。如果非真,從VPC+4繼續(xù)執(zhí)行。操作
If((Cond=VCSR[SO.GT.EQ.LT])|(Cond=un)){ if(VSP<40>15){ VISRC<RASO>=1; signal ARM7 with RASO exception; VP_STATE=VP_IDLE; }else{ RSTACK[VSP<30>]=VPC+4; VSP<40>=VSP<40>+1 VPC=SRb<312>b’00 } }else VPC=VPC+4
異常
返回地址堆棧溢出。VCMOV 條件轉(zhuǎn)移格式
匯編器句法
VCMOV.dt Rd,Rb,cond
VCMOV.dt Rd,# IMM,cond
其中dt={b,b9,h,w,f},cond={un,lt,eq,le,gt,ne,ge,ov}。注意f和w指定相同的操作,除非f數(shù)據(jù)類型不支持9位的立即操作數(shù)。支持的模式說明
如果Cond為真,寄存器Rb的內(nèi)容轉(zhuǎn)移到寄存器Rd。ID<10>進(jìn)一步指定源和目的寄存器
VR 當(dāng)前組向量寄存器
SR 標(biāo)量寄存器
SY 同步寄存器
VAC 向量累加器寄存器(對VAC寄存器編碼參照VMOV說明)操作
If((Cond=VCSR[SOV,GT,EQ,LT])|(Cond=un))
for(i=0;i<NumElem;i++)
Rd[i]-{Rb[i]‖SRb‖sex(IMM<80>)};異常
無。編程注解
本指令不受元素屏蔽的影響,VCMOVM受元素屏蔽影響。
對8個元素,向量累加器中擴(kuò)展浮點(diǎn)精度的表示使用了全部576位。因而,包括累加器的向量寄存器的轉(zhuǎn)移必須指定b9數(shù)據(jù)長度。VCMOVM 帶元素屏蔽的條件轉(zhuǎn)移格式
匯編器句法
VCMOVM.dt Rd,Rb,cond
VCMOVM.dt Rd,# IMM,cond
其中dt={b,b9,h,w,f},cond={un,lt,eq,le,gt,ne,ge,ov}。注意.f和.w指定相同的操作,除非.f數(shù)據(jù)類型不支持9位的立即操作數(shù)。支持的模式說明
如果Cond為真,則寄存器Rb的內(nèi)容轉(zhuǎn)移到寄存器Rd。ID<10>進(jìn)一步指定源和目的寄存器
VR 當(dāng)前組向量寄存器
SR 標(biāo)量寄存器
VAC 向量累加器寄存器(對VAC寄存器編碼參照VMOV說明)操作
If((Cond=VCSR[SO,GT,EQ,LT])|(Cond=un))
for(i=0;1<NumElem && MMASK[i];i++)
Rd[i]-{Rb[i]‖SRb‖sex(IMM<80>)};異常
無。編程注解
本指令受VMMR元素屏蔽的影響,VCMOV不受元素屏蔽影響。
對8個元素,在向量累加器中擴(kuò)展浮點(diǎn)精度的表示使用全部576位。因而,包括累加器的向量寄存器的轉(zhuǎn)移必須指定.b9數(shù)據(jù)長度。VCMPV 比較和設(shè)置屏蔽格式
匯編器句法
VCMPV.dt VRa,VRb,cond,mask
VCMPV.dt VRa,SRb,cond,mask
其中dt={b,b9,h,w,f},cond={lt,eq,le,gt,ne,ge,},mask={ VGMR,VMMR}。如果指定不屏蔽,則VGMR被假定。支持的模式說明
向量寄存器VRa和VRb的內(nèi)容通過執(zhí)行減法操作(VRa[i]-VRb[i])進(jìn)行元素方式的比較,如果比較的結(jié)果與VCMPV指令的Cond字段相匹配,則VGMR(如K=0)或VMMR(如K=1)寄存器中相位的#i位被設(shè)置。例如,如果Cond字段小于(LT),則當(dāng)VRa[i]<VRb[i]時設(shè)置VGMR[i](或VMMR[i])位。操作
for(i=0i<NumElemi++){ Bop[i]={Rb[i]‖SRb‖sex(IMM<80>)}; relationship[i]=Ra[i]?Bop[i]; if(K=1) MMASK[i]=(relationship[i]=Cond)?True.False else EMASK[i]=(relationship[i]=Cond)?True.False }
異常
無。編程注解
此指令不受元素屏蔽的影響。VCNTLZ 前導(dǎo)零的計數(shù)格式
匯編器句法
VCNTLZ.dt VRd,VRb
VCNTLZ.dt SRd,SRb
其中dt={b,b9,h,w}。支持的模式說明
對Rb中每個元素進(jìn)行前導(dǎo)零數(shù)目的計數(shù);將計數(shù)值返回到Rd中。操作
for(i=0i<NumElem && EMASK[i];i++){
Rd[i]=number of leading zeroes(Rb[i]);
}異常
無。編程注解
如果元素中全部位為零,則結(jié)果等于元素的長度(8、9、16或32分別對應(yīng)byte、byte9、halfword或word)。
前導(dǎo)零的計數(shù)與元素位置索引具有相反的關(guān)系(如果用在VCMPR指令后面)。為轉(zhuǎn)換到元素位置,對給定的數(shù)據(jù)類型,從NumElem減去VCNTLZ的結(jié)果。VCOR 或的補(bǔ)碼格式
匯編器句法
VCOR.dtVRd,VRa,VRb
VCOR.dtVRd,VRa,SRb
VCOR.dtVRd,VRa,# IMM
VCOR.dtSRd,SRa,SRb
VCOR.dtSRd,SRa,# IMM
其中dt={b,b9,h,w}。注意.w和.f指定相同的操作。支持的模式說明
對Ra和Rb/立即操作數(shù)的補(bǔ)碼作邏輯或,并將結(jié)果返回到目的寄存器Rd。操作
for(i=0;i<NumElem && EMASK[i];i++){
Bop[i]={VRb[i]‖SRb‖sex(IMM<80>)};
Rd[i]<k>=-Ra[i]<k>|Bop[i]<k>.k=for all bits in element i.
}異常
無。VCRSR 從子程序條件返回格式
匯編器句法
VCRSR.cond
其中cond={un,lt,eq,le,gt,ne,ge,ov}。說明
如果Cond為真,則從子程返回。這不是延遲轉(zhuǎn)移
如果Cond為真,則從保存在返回地址堆棧中的返回地址繼續(xù)執(zhí)行。如果非真,則從VPC+4繼續(xù)執(zhí)行。操作
If((Cond=VCSR[SO.GT.EQ.LT])|(Cond=un)){ if(VSP<40>=0){ VISRC<RASU>=1; signal ARM7 with RASU exception; VP_STATE=VP_IDLE }else{ VSP<40>=VSP<40>.1; VPC=RSTACK[VSP<30>}; VPC<10>=b’00; } }else VPC=VPC+4;
異常
無效的指令地址,返回地址堆棧下溢。VCVTB9 byte9數(shù)據(jù)類型的轉(zhuǎn)換格式
匯編器句法
VCVTB9.md VRd,VRb
VCVTB9.md SRd,SRb
其中md={bb9,b9h,hb9}。支持模式說明
Rb中的每個元素從byte轉(zhuǎn)換到byte9(bb9),從byte9轉(zhuǎn)換到halfword(b9h)或從halfword轉(zhuǎn)換到byte9(hb9)。操作
if(md<10>=0){ //bb9 for byte to byte9 conversion VRd=VRb; VRd<9i+8>=VRb<9i+7>.i=0 to 31(or 63 in VEC64 mode)} else if(md<10>=2){//b9h for byte9 to halfword conversion VRd=VRb; VRd<18i+1618i+9>=VRb<18i+8>.i=0 to 15(or 31 in VEC64 mode)} else if(md<10>=3) //hb9 for halfword to byte9 conversion VRd<18i+8>=VRb<18i+9>.i=0 to 15(or 31 in VEC64 mode) else VRd=undefined;
異常
無。
編程注解
在與b9h模式一同使用該指令之前,要求編程者用shuffle(混洗)操作調(diào)整向量寄存器中所減少的元素數(shù)目。與hb9模式一同使用該指令之后,要求編程者用unshuffle操作調(diào)整目的向量寄存器中所增加的元素數(shù)目。此指令不受元素屏蔽的影響。VCVTFF 浮點(diǎn)到定點(diǎn)的轉(zhuǎn)換格式
匯編器句法
VCVTFF VRd,VRa,SRb
VCVTFF VRd,VRa,# IMM
VCVTFF SRd,SRa,SRb
VCVTFF SRd,SRa,# IMM說明
向量/標(biāo)量寄存器Ra的內(nèi)容從32位浮點(diǎn)轉(zhuǎn)換成格式<X,Y>的定點(diǎn)實(shí)數(shù),其中Y的長度由Rb(模32)或IMM字段指定,而X的長度由(32-Y的長度)指定。X表示整數(shù)部分,Y表示小數(shù)部分。結(jié)果存放在向量/標(biāo)量寄存器Rd中。操作
Y_size=[SRb%32‖IMM<40>};
for(i=0;i<NumElem;i++){
Rd[i]=convert to<32-Y_sizeY_size>format(Ra[i]);
}異常
溢出。編程注解
本指令只支持Word數(shù)據(jù)長度。由于結(jié)構(gòu)不支持寄存器中的多數(shù)據(jù)類型,本指令不使用元素屏蔽。對整型數(shù)據(jù)類型本指令使用舍去零的舍入方式。VCVTIF 整數(shù)到浮點(diǎn)的轉(zhuǎn)換格式
匯編器句法
VCVTIF VRd,VRb
VCVTIF VRd,SRb
VCVTIF SRd,SRb支持的模式說明
向量/標(biāo)量寄存器Rb的內(nèi)容從int32轉(zhuǎn)換為浮點(diǎn)數(shù)據(jù)類型,結(jié)果存放在向量/標(biāo)量寄存器Rd中。操作
for(i=0;i<NumElem;i++){
Rd[i]=convert to floating point format(Rb[i]);
}異常
無。編程注解
本指令僅支持word數(shù)據(jù)長度。由于結(jié)構(gòu)不支持寄存器中的多數(shù)據(jù)類型,本指令不使用元素屏蔽。VD1CBR VCR1減1及條件轉(zhuǎn)移格式
匯編器句法
VD1CBR.cond # Offset
其中cond={un,lt,eq,le,gt,ne,ge,ov}。說明
如果Cond為真,VCR1減1并轉(zhuǎn)移。這不是延遲轉(zhuǎn)移。操作
VCR1=VCR1-1;
If((VCR1>0)&((Cond=VCSR[SO,GT,EQ,LT])|(Cond=un)))
VPC=VPC+sex(Offset<220>*4);
else VPC=VPC+4;異常
無效的指令地址。編程注解
注意VCR1是在轉(zhuǎn)移條件被檢查之前減1的。當(dāng)VCR1為0時執(zhí)行此指令,將循環(huán)計數(shù)有效設(shè)置到232-1。VD2CBR VCR2減1及條件轉(zhuǎn)移格式
匯編器句法
VD2CBR.cond # Offset
其中cond={un,lt,eq,le,gt,ne,ge,ov}。說明
如果Cond為真,VCR2減1并轉(zhuǎn)移。這不是延遲轉(zhuǎn)移。操作
VCR2=VCR2-1;
If((VCR2>0)&((Cond=VCSR[SO,GT,EQ,LT])|(Cond=un)))
VPC=VPC+sex(Offset<220>*4);
else VPC=VPC+4;異常
無效的指令地址。編程注解
注意VCR2是在轉(zhuǎn)移條件被檢查之前減1的。當(dāng)VCR2為0時執(zhí)行此指令,將循環(huán)計數(shù)有效設(shè)置到232-1。VD3CBR VCR3減1及條件轉(zhuǎn)移格式
匯編器句法
VD3CBR.cond # Offset
其中cond={un,lt,eq,le,gt,ne,ge,ov}。說明
當(dāng)Cond為真,VCR3減1并轉(zhuǎn)移。這不是延遲轉(zhuǎn)移。操作
VCR3=VCR3-1;
If((VCR3>0)&((Cond=VCSR[SO,GT,EQ,LT])|(Cond=un)))
VPC=VPC+sex(Offset<220>*4);
else VPC=VPC+4;異常
無效的指令地址。編程注解
注意VCR3是在轉(zhuǎn)移條件被檢查之前減1的。當(dāng)VCR3為0時執(zhí)行此指令,將循環(huán)計數(shù)有效設(shè)置到232-1。VDIV2N 被2n除格式
匯編器句法
VDIV2N.dt VRd,VRa,SRb
VDIV2N.dt VRd,VRa,# IMM
VDIV2N.dt SRd,SRa,SRb
VDIV2N.dt SRd,SRa,# IMM
其中dt={b,b9,h,w}。支持的模式說明
向量/標(biāo)量寄存器Ra的內(nèi)容被2n除,這里n是標(biāo)量寄存器Rb或2MM的正整數(shù)內(nèi)容,最終結(jié)果存放在向量/標(biāo)量寄存器Rd中。此指令使用截斷(向零舍入)作為舍入模式。操作
N={SRb%32‖IMM<40>}
for(i=0i<NumElem && EMASK[i]i++){
Rd[i]=Ra[i]/2N;
}異常
無。編程注解
注意N是從SRb或IMM<40>取得的5位數(shù)。對byte、byte9、halfword數(shù)據(jù)類型,編程者負(fù)責(zé)正確指定數(shù)據(jù)長度中小于或等于精度級的N值。如果它大于指定數(shù)據(jù)長度的精度,元素將用符號位填充。本指令用向零舍入的舍入模式。VDIV2N.F 浮點(diǎn)被2n除格式
匯編器句法
VDIV2N.f VRd,VRa,SRb
VDIV2N.f VRd,VRa,# IMM
VDIV2N.f SRd,SRa,SRb
VDIV2N.f SRd,SRa,# IMM支持的模式說明
向量/標(biāo)量寄存器Ra的內(nèi)容被2n除,這里n是標(biāo)量寄存器Rb或IMM的正整數(shù)內(nèi)容,最終結(jié)果存放在向量/標(biāo)量寄存器Rd中。操作
N={SRb%32‖IMM<40>};
for(i=0;i<NumElem && EMASK[i];i++){
Rd[i]=Ra[i]/2N;
}異常
無。編程注解
注意N是從SRb或IMM<40>中取得的5位數(shù)。VDIVI 不完全的除初始化格式
匯編器句法
VDIVI.ds VRb
VDIVI.ds SRb
其中ds={b,b9,h,w}。支持的模式說明
執(zhí)行不恢復(fù)的帶符號整數(shù)除的初始化步驟。被除數(shù)是累加器中雙精度帶符號整數(shù)。如果被除數(shù)是單精度數(shù),它必須被符號擴(kuò)展到雙精度,并存放在VAC0H和VAC0L中。除數(shù)是Rb中的單精度帶符號整數(shù)。
如果被除數(shù)的符號與除數(shù)的符號相同,則從累加器高位中減去Rb。如不同,則Rb被加到累加器高位上。操作
for(i=0;i<NumElem && EMASK[i];i++){
Bop[i]=(VRb[i]‖SRb}
if(VAC0H[i}<msb>=Bop[i]<msb>)
VAC0H[i]=VAC0H[i]-Bop[i];
else
VAC0H[i]=VAC0H[i]+Bop[i];
}異常
無。編程注解
在除法步驟之前,編程者負(fù)責(zé)檢查溢出或被零除的情況。VDIVS 不完全的除步驟格式
匯編器句法
VDIVS.ds VRb
VDIVS.ds SRb
其中ds={b,b9,h,w}。支持的模式說明
執(zhí)行一不恢復(fù)的帶符號除的選代步驟。本指令要求被執(zhí)行的次數(shù)與同數(shù)據(jù)的長度相同(例如,對int8為8次,int9為9次,int16為16,int32數(shù)據(jù)類型為32)。VDIVI指令必須在除步驟之前被使用一次,在累加器中產(chǎn)生初始部分的余數(shù)。除數(shù)是Rb中的單精度帶符號整數(shù)。每個步驟提取一個商數(shù)位并移到累加器的最低有效位。
如果累加器中部分余數(shù)的符號與Rb中除數(shù)的符號相同,則從累加器高位中減去Rb。如果不同,Rb被加到累加器高位上。
如果累加器中得出的部分余數(shù)(加或減的結(jié)果)的符號與除數(shù)的符號相同,則商位為1。如果不相同,則商位為0。累加器左移一位的位置并用商位填入。
在除步驟的結(jié)尾,余數(shù)是在累加器高位中,而商在累加器低位中。此商是1的補(bǔ)碼形式。操作VESL 元素左移一位格式
匯編器句法
VESL.dt SRc,VRd,VRa,SRb
其中dt={b,b9,h,w,f}。注意.w和.f指定相同的操作。支持的模式說明
將向量寄存器Ra中的元素左移一個位置,從標(biāo)量寄存器Rb填入。正被移出的最左元素返回到標(biāo)量寄存器Rc,其它元素返回到向量寄存器Rd。
操作
VRd
=SRb;
for(i=o;i<NumElem-1;i++)
VRd[i]=VRa[i-1];
SRc=VRa[NumElem-1];異常
無。編程注解
此指令不受元素屏蔽的影響。VESR 元素右移一位格式
匯編器句法
VESL.dt SRc,VRd,VRa,SRb
其中dt={b,b9,h,w,f}。注意.w和.f指定相同的操作。支持的模式說明
將向量寄存器Ra的元素右移一個位置,從標(biāo)量寄存器Rb填入。正被出的最右元素返回到標(biāo)量寄存器Rc,其它元素返回到向量寄存器Rd。
操作
SRc=VRa
;
for(i=o;i<NumElem-2;i++)
VRd[i]=VRa[i+1];
VRd[NumElem-1]=SRb;異常
無。編程注解
此指令不受元素屏蔽的影響。VEXTRT 抽取一元素格式
匯編器句法
VEXTRT.dt SRd,VRa,SRb
VEXTRT.dt SRd,VRa,# IMM
其中dt={b,b9,h,w,f}。注意.w和.f指定相同的操作。支持的模式說明
從Ra向量寄存器抽取一元素并將其存入標(biāo)量寄存器Rd,該寄存器的索引由標(biāo)量寄存器Rb或IMM字段指出。操作
index32={ SRb%32‖IMM<40>};
index64={SRb%64‖IMM<50>};
index=(VCSR<vec64>)?index64index32;
SRd=VRa[index];異常
無。編程注解
此指令不受元素屏蔽的影響。VEXTSGN2 抽取(1,-1)符號格式
匯編器句法
VEXTSGN2.dt VRd,VRa
VEXTSGN2.dt SRd,SRa
其中dt={b,b9,h,w}。支持的模式說明
計算向量/標(biāo)量寄存器Ra元素方式內(nèi)容的符號值,將結(jié)果存放到向量/標(biāo)量寄存器Rd中。操作
for(i=0.i<NumElem && EMASK[i];i++){
Rd[i]=(Ra[i]<0)?-11;
} 異常
無。VEXTSGN3 抽取(1,0,-1)符號格式
匯編器句法
VEXTSGN3.dt VRd,VRa
VEXTSGN3.dt SRd,SRa
其中dt={b,b9,h,w}。支持的模式說明
計算向量/標(biāo)量寄存器Ra元素方式內(nèi)容的符號值,將結(jié)果存放到向量/標(biāo)量寄存器Rd中。操作
for(i=0i<NumElem && EMASK[i];i++){
if(Ra[i]>0) Rd[i]=1;
else if(Ra[i]<0) Rd[i]=-1;
else Rd[i]=0;
}異常
無。VINSRT 插入一元素格式
匯編器句法
VINSRT.dt VRd,SRa,SRb
VINSRT.dt VRd,SRa,# IMM
其中dt={b,b9,h,w,f}。注意.w和.f指定相同的操作。支持的模式說明
將標(biāo)量寄存器Ra中的元素按標(biāo)量寄存器Rb或IMM字段指定的索引插入到向量寄存器Rd中。操作
index32={SRb%32‖IMM<40>};
index64={SRb%64‖IMM<50>};
index=(VCSR<vec64>)?index64index32;
VRd[index]=SRa;異常
無。編程注解
本指令不受元素屏蔽的影響。VL 加載格式
匯編器句法
VL.ltRd,SRb,SRi
VL.ltRd,SRb,# IMM
VL.ltRd,SRb+,SRi
VL.ltRd,SRb+,# IMM
其中l(wèi)t={b,bz9,bs9,h,w,4,8,16,32,64},Rd={VRd,VRAd,SRd}。注意.b和bs9指定相同的操作,.64和VRAd不能一起被指定。對cache-off加載使用VLOFF。操作
加載當(dāng)前或替代組中的一向量寄存器或者一標(biāo)量寄存器。操作
EA=SRb+{SRi‖sex(IMM<70>)};
if(A=1)SRb=EA;
Rd=見下表異常
無效的數(shù)據(jù)地址,不對齊的訪問。編程注解
此指令不受元素屏蔽的影響。VLCB 從循環(huán)緩沖器加載格式
匯編器句法
VLCB.lt Rd,SRb,SRi
VLCB.lt Rd,SRb,# IMM
VLCB.lt Rd,SRb+,SRi
VLCB.lt Rd,SRb+,# IMM
其中l(wèi)t={b,bz9,bs9,h,w,4,8,16,32,64},Rd={VRd,VRAd,SRd}。注意.b和.bs9指定相同的操作,.64和VRAd不能被一起指定。對cache-off加載使用VLCBOFF。說明
從由SRb+1中的BEGIN指針和SRb+2中的END指針?biāo)薅ǖ难h(huán)緩沖器加載一向量或標(biāo)量寄存器。
在加載以及地址更新操作之前,如有效地址大于END地址,則有效地址被調(diào)整。另外,對.h和.w標(biāo)量加載,循環(huán)緩沖器邊界必須分別與halfword和word邊界對齊。操作
EA=SRb+{SR1‖sex(IMM<70>)};
BEGIN=SRb+1;
END=SRb+2;
cbsize=END-BEGIN;
if(EA>END)EA=BEGIN+(EA END);
if(A=1)SRb-EA;
Rd=見以下的表異常
無效的數(shù)據(jù)地址,不對齊的訪問。編程注解
此指令不受元素屏蔽的影響。
編程者必須對此指令確定下面的條件以按所期望工作
BEGIN<EA<2*END BEGIN
即,EA>BEGIN以及EA END<END-BEGIN。VLD 雙加載格式
匯編器句法
VLD.lt Rd,SRb,SRi
VLD.lt Rd,SRb,# IMM
VLD.lt Rd,SRb+,SRi
VLD.lt Rd,SRb+,# IMM
其中l(wèi)t=[b,bz9,bs9,h,w,4,8,16,32,64},Rd={VRd,VRAd,SRd }。注意.b和.bs9指定相同的操作,.64和VRAd不能被一起指定。對cache-off加載使用VLDOFF。說明
加載當(dāng)前或替代組中的兩個向量寄存器或兩個標(biāo)量寄存器。操作
EA=SRb+{SRt‖sex(IMM<70>)};
if(A=1)SRb=EA;
RdRd+1=見下表
異常
無效的數(shù)據(jù)地址,不對齊的訪問。編程注解
此指令不受元素屏蔽的影響。VLI 加載立即數(shù)格式
匯編器句法
VLl.dt VRd,# IMM
VLl.dt SRd,# IMM
其中dt={b,b9,h,w,f}。說明
向標(biāo)量或向量寄存器加載立即值。
對標(biāo)量寄存器加載,根據(jù)數(shù)據(jù)類型加載byte、byte9、halfword或word。對byte、byte9和halfword數(shù)據(jù)類型,未受影響的那些byte(byte9)不被改變。操作
Rd=見下表異常
無。VLQ 四加載格式
匯編器句法
VLQ.lt Rd,SRb,SRi
VLQ.lt Rd,SRb,# IMM
VLQ.lt Rd,SRb+,SRi
VLQ.lt Rd,SRb+,# IMM
其中l(wèi)t={b,bz9,bs9,h,w,4,8,16,32,64},Rd={VRd,VRAd,SRd}。注意.b和.bs9指定相同的操作,.64和VRAd不能被一起指定。對Cache-off加載利用VLQOFF。說明
在當(dāng)前或替代組中加載四個向量寄存器或四個標(biāo)量寄存器。操作
EA=SRb+{SRi‖sex(IMM<70>)];
if(A=1)SRb=EA;;
RdRd+1Rd+2Rd+3=見下表異常
無效的數(shù)據(jù)地址,不對齊的訪問。編程注解
此指令不受元素屏蔽的影響。VLR 反向加載格式
匯編器句法
VLR.lt Rd,SRb,SRi
VLR.lt Rd,SRb,# IMM
VLR.lt Rd,SRb+,SRi
VLR.lt Rd,SRb+,# IMM
其中l(wèi)t={4,8,16,32,64},Rd={VRd,VRAd}。注意64和VRAd不能被一起指定。對Cache-off加載利用VLROFF。說明
按逆元素序列加載一向量寄存器。此指令不支持標(biāo)量目的寄存器。操作
EA=SRb+{SRi‖sex(IMM<70>)];
if(A=1)SRb=EA;
Rd=見下表異常
無效的數(shù)據(jù)地址地址,不對齊的訪問。編程注解
此指令不受元素屏蔽的影響。VLSL 邏輯左移格式
匯編器句法
VLSL.dt VRd,VRa,SRb
VLSL.dt VRd,VRa,# IMM
VLSL.dt SRd,SRa,SRb
VLSL.dt SRd,SRa,# IMM
其中dt={b,b9,h,w }。支持的模式說明
向量/標(biāo)量寄存器Ra的每個元素向左邏輯移位,最低有效位(LSB)位置以零填入,移位量在標(biāo)量寄存器Rb或IMM字段中給定,結(jié)果存放在向量/標(biāo)量寄存器Rd中。操作
shift_amount={SRb%32‖IMM<40>};
for(i=0;i<NumElem && EMASK[i];i++){
Rd[i]=Ra[i]<<shift_amount;
}異常
無。編程注解
注意shift-amount是從SRb或IMM<40>中取得的5位數(shù),對于byte,byte9,halfword數(shù)據(jù)類型,編程者負(fù)責(zé)正確指定小于或等于數(shù)據(jù)長度的位數(shù)的移位量。如果該移位量大于指定的數(shù)據(jù)長度,元素將以零來填充。VLSR 邏輯右移格式
匯編器句法
VLSR.dt VRd,VRa,SRb
VLSR.dt VRd,VRa,# IMM
VLSR.dt SRd,SRa,SRb
VLSR.dt SRd,SRa,# IMM
其中dt={b,b9,h,w}。支持的模式說明
向量/標(biāo)量寄存器Ra的每個元素向右邏輯移位,最高有效位(MSB)位置以零填入,移位量在標(biāo)量寄存器Rb或IMM字段中給定,結(jié)果存放在向量/標(biāo)量寄存器Rd中。操作
shift_amount={SRb%32‖IMM<40>};
for(i=0;i<NumElem && EMASK[i]i++){
Rd[i]=Ra[i]zero>>shift_amount;
}異常
無。編程注解
注意shift-amount是從SRb或IMM<40>中取得的5位數(shù),對于byte,byte9,halfword數(shù)據(jù)類型,編程者負(fù)責(zé)正確指定小于或等于數(shù)據(jù)長度的位數(shù)的移位量。如果該移位量大于指定的數(shù)據(jù)長度,元素將以零來填充。VLWS 跨距加載格式
匯編器句法
VLWS.dt Rd,SRb,SR1
VLWS.dt Rd,SRb,# IMM
VLWS.dt Rd,SRb+,SRi
VLWS.dt Rd,SRb+,# IMM
其中dt={4,8,16,32},Rd={VRd,VRAd}。注意,.64模式不被支持,用VL替代。對Cache off加載使用VLWSOFF。說明
從有效地址開始,用標(biāo)量寄存器SRb+1作為跨距控制寄存器,從存儲器加載32字節(jié)到向量寄存器VRd。
LT指定block size、對每個塊加載的連續(xù)字節(jié)數(shù)。SRb+1指定stride、分隔兩個連續(xù)塊的起始的字節(jié)數(shù)。
stride必須等于或大于block size。EA必須是對準(zhǔn)的數(shù)據(jù)長度。stride和block size必須是多種數(shù)據(jù)長度。操作
EA=SRb+{SRi‖sex(IMM<70>)};
if(A=1)SRb=EA;
Block-size={4‖8‖16‖32};
Stride=SRb,1<310>;
for(i=0;t<VECSIZE/Block size;i++)
for(j=0j<Block size;j++)
VRd[i*Block size+j]<80>=sex BYTE{EA+i * Stride+j};異常
無效的數(shù)據(jù)地址,未對齊的訪問。VMAC 乘和累加格式
匯編器句法
VMAC.dt VRa,VRb
VMAC.dt VRa,SRb
VMAC.dt VRa,# IMM
VMAC.dt SRa,SRb
VMAC.dt SRa,# IMM
其中dt={b,h,w,f}。支持的模式說明
Ra的每個元素與Rb中的每個元素相乘以產(chǎn)生一雙精度的中間結(jié)果;將此中間結(jié)果的每個雙精度元素與向量累加器的每個雙精度元素相加,將每個元素的雙精度和存入向量累加器中。
Ra和Rb使用指定的數(shù)據(jù)類型,而VAC使用合適的雙精度數(shù)據(jù)類型(16、32和64位分別對應(yīng)int8、int16和int32)。每個雙精度元素的高位部分存放在VACH中。
對浮點(diǎn)數(shù)據(jù)類型,全部操作數(shù)和結(jié)果都是單精度的。操作
for(i=0i<NturnElem && EMASK[i];i++){
Aop[i]={VRa{i}‖SRa};
Bop[i]={VRb[i]‖SRb}if(dt=float)VACL[i]=Aop[i]*Bop[i]+VACL[i],
else VACH[i];VACL[i]=Aop[i]*Bop[i]+VACH[i]VACL[i];異常
溢出,浮點(diǎn)無效的操作數(shù)。編程注解
此指令不支持int9數(shù)據(jù)類型,用int16數(shù)據(jù)類型替代。VMACF 乘和累加小數(shù)格式
匯編器句法
VMACF.dt VRa,VRb
VMACF.dt VRa,SRb
VMACF.dt VRd,# IMM
VMACF.dt SRa,SRb
VMACF.dt SRa,# IMM
其中dt={b,h,w}。支持的模式說明
VRa的每個元素與Rb中的每個元素相乘以產(chǎn)生一雙精度的中間結(jié)果;將此雙精度中間結(jié)果左移一位;將移位后的中間結(jié)果的每個雙精度元素與向量累加器的每個雙精度元素相加;每個元素的雙精度和存放到向量累加器中。
VRa和Rb使用指定的數(shù)據(jù)類型,而VAC使用合適的雙精度數(shù)據(jù)類型(16、32和64位分別對應(yīng)int8、int16和int32)。每個雙精度元素的高位部分存放在VACH中。操作
for(i=0;i<NumElem && EMASK[i];i++){
Bop[i]={VRb[i]‖SRb‖sex(IMM<80>)};
VACH[i]VACL[i]=((VRa[i]*Bop[i])<<1)+VACH[i];VACL[i];
}異常
溢出。編程注解
此指令不支持int9數(shù)據(jù)類型,用int16數(shù)據(jù)類型替代。VMACL 乘和累加低位格式
匯編器句法
VMACL.dt VRd,VRa,VRb
VMACL.dt VRd,VRa,SRb
VMACL.dt VRd,VRa,# IMM
VMACL.dt SRd,SRa,SRb
VMACL.dt SRd,SRa,# IMM
其中dt={b,h,w,f}。支持的模式說明
將VRa的每個元素與Rb中的每個元素相乘以產(chǎn)生一雙精度的中間結(jié)果;將此中間結(jié)果的每個雙精度元素與向量累加器的每個雙精度元素相加;將每個元素的雙精度和存放到向量累加器;將較低位部分返回到目的寄存器VRd。
VRa和Rb使用指定的數(shù)據(jù)類型,而VAC使用合適的雙精度數(shù)據(jù)類型(16、32和64位分別對應(yīng)int8、int16和int32)。每個雙精度元素的位部分存放在VACH中。
對浮點(diǎn)數(shù)據(jù)類型,全部操作數(shù)和結(jié)果都是單精度的。操作
for(i=0;i<NumElem && EMASK[i];i++){
Bop[i]={VRb[i]‖SRb};
if(dt=float)VACL[i]=VRa[i]*Bop[i]+VACL[i];
else VACH[i]VACL[i]=VRa[i]*Bop[i]+VACH[i]VACL[i];
VRd[i]=VACL[i]
}異常
溢出,浮點(diǎn)無效的操作數(shù)。編程注解
此指令不支持int9數(shù)據(jù)類型。代之以使用int16數(shù)據(jù)類型。VMAD 乘和加格式
匯編器句法
VMAD.dtVRc,VRd,VRa,VRb
VMAD.dtSRc,SRd,SRa,SRb
其中dt=(b,h,w)。支持的模式說明
將Ra的每個元素與Rb中的每個元素相乘以產(chǎn)生一雙精度的中間結(jié)果;使此中間結(jié)果的每個雙精度元素與Rc的每個元素相加;將每個元素的雙精度和存放到目的寄存器Rd+1Rd。操作
for(i=0i<NumElem && EMASK[i];i++){
Aop[i]={VRa[i]‖SRa];
Bop[i]={VRb[i]‖SRb};
Cop[i]={VRc[i]‖SRc};
Rd+[i]Rd[i]=Aop[i]*Bop[i]+sex dp(Cop[i]);
}異常
無。VMADL 乘和加低位格式
匯編器句法
VMADL.dtVRc,VRd,VRa,VRb
VMADL.dtSRc,SRd,SRa,SRb
其中dt={b,h,w,f}。支持的模式說明
將Ra的每個元素與Rb中的每個元素相乘以產(chǎn)生一雙精度的中間結(jié)果;將此中間結(jié)果的每個雙精度元素與Rc的每個元素相加;將每個元素的雙精度和的低位部分返回到目的寄存器Rd。
對浮點(diǎn)數(shù)據(jù)類型,全部操作數(shù)和結(jié)果都是單精度的。操作
for(i=0;i<NumElem && EMASK[i];i++){
Aop[i]=[VRa[i]‖SRa};
Bop[i]={VRb[i]‖SRb};
Cop[i]={VRc[i]‖SRc};
if(dt=float)Lo[i]=Aop[i]*Bop[i]+Cop[i];
else Hi[i]Lo[i]=Aop[i]*Bop[i}+sex_dp(Cop[i]);
Rd[i]=Lo[i];
}異常
溢出,浮點(diǎn)無效的操作數(shù)。VMAS 從累加器乘和減格式
匯編器句法
VMAS.dt VRa,VRb
VMAS.dt VRa,SRb
VMAS.dt VRa,# IMM
VMAS.dt SRa,SRb
VMAS.dt SRa,# IMM
其中dt={b,h,w,f}。支持的模式說明
將Ra的每個元素Rb中的每個元素相乘以產(chǎn)生一雙精度的中間結(jié)果;從向量累加器的每個雙精度元素中減去中間結(jié)果的每個雙精度元素;將每個元素的雙精度和存放到向量累加器。
Ra和Rb使用指定的數(shù)據(jù)類型,而VAC使用合適的雙精度數(shù)據(jù)類型(16、32和64位分別對應(yīng)int8、int16和int32)。每個雙精度元素的高位部分存放在VACH中。
對浮點(diǎn)數(shù)據(jù)類型,全部操作數(shù)和結(jié)果都是單精度的。操作
for(i=0i<NumElem && EMASK[i];i++){
Bop[i]=[VRb[i}‖SRb};
if(dt=float)VACL[i]=VACL[i]-VRa[i]*Bop[i];
else VACH[i]VACL[i]=VACH[i]VACL[i]-VRa[i]*Bop[i];
}異常
溢出,浮點(diǎn)無效的操作數(shù)。編程注解
此指令不支持int9數(shù)據(jù)類型,用int16數(shù)據(jù)類型來替代。VMASF 從累加器小數(shù)乘和減格式
匯編器句法
VMASF.dtVRa,VRb
VMASF.dtVRa,SRb
VMASF.dtVRa,# IMM
VMASF.dtSRa,SRb
VMASF.dtSRa,# IMM
其中dt={b,h,w}。支持的模式說明
將VRa的每個元素與Rb中的每個元素相乘以產(chǎn)生一雙精度的中間結(jié)果;將雙精度的中間結(jié)果左移一位;從向量累加器的每個雙精度元素減去被移位的中間結(jié)果的每個雙精度元素;將每個元素的雙精度和存儲到向量累加器。
VRa和Rb使用指定的數(shù)據(jù)類型,而VAC使用合適的雙精度數(shù)據(jù)類型(16、32和64位分別對并int8、int16和int32)。每個雙精度元素的高位部分存放在VACH中。操作
for(i=0;i<NumElem && EMASK[i]i++){
Bop[i]={VRb[i]‖SRb‖sex(IMM<80>)};
VACH[i]VACL[i]=VACH[i]VACL[i]-VRa[i]*Bop[i];
}異常
溢出。編程注解
此指令不支持int9數(shù)據(jù)類型,用int16數(shù)據(jù)類型替代。VMASL 從累加器低位乘和減格式
匯編器句法
VMASL.dt VRd,VRa,VRb
VMASL.dt VRd,VRa,SRb
VMASL.dt VRd,VRa,# IMM
VMASL.dt SRd,SRa,SRb
VMASL.dt SRd,SRa,# IMM
其中dt={ b,h,w,f}。支持的模式說明
將VRa的每個元素與Rb中的每個元素相乘以產(chǎn)生一雙精度的中間結(jié)果;從向量累加器的每個雙精度元素減去中間結(jié)果的每個雙精度元素;將每個元素的雙精度和存放到向量累加器;將低位部分存放到目的寄存器VRd。
RVa和Rb使用指定的數(shù)據(jù)類型,而VAC使用合適的雙精度數(shù)據(jù)類型(16,32和64分別對應(yīng)int8,int16和int32)。每個雙精度元素的高位部分存放在VACH中。
對浮點(diǎn)數(shù)據(jù)類型,全部操作數(shù)和結(jié)果都是單精度的。操作
for(i=0;i<NumElem && EMASK[i];i++);
Bop[i]=(VRb[i]‖SRb);
if(dt=float)VACL[i]=VACL[i]-VRA[i]*Bop[i];
else VACH[i]VACL[i]=VACH[i]VACL[i]-VRa[i]*Bop[i];
VRd[i]=VACL[i];
}異常
溢出,浮點(diǎn)無效的操作數(shù)。編程注解
此指令不支持int9數(shù)據(jù)類型 代之以使用int16數(shù)據(jù)類型。VMAXE成對方式的最大和交換格式
匯編器句法
VMAXE.dt VRd,VRb
其中dt={b,b9,h,w,f}。支持的模式說明
VRa應(yīng)當(dāng)?shù)扔赩Rb。當(dāng)VRa與VRb不同時,結(jié)果未定義。
向量寄存器Rb的每個偶/奇數(shù)據(jù)元素被成對比較,并且每個數(shù)據(jù)元素對的較大值存儲到偶數(shù)位置,每個數(shù)據(jù)元素對的較小值存儲到向量寄存器Rd的奇數(shù)位置。操作
for(i=0i<NumElem && EMASK[i]i=i+2){
VRd[i]=(VRb[i]>VRb[i+1])?VRb[i]VRb[i+1];
VRd[i+1]=(VRb[i]>VRb[i+1])?VRb[i+1]VRb[i]
}異常
無。VMOV 轉(zhuǎn)移格式
匯編器句法
VMOV.dt Rd,Rb
其中dt={b,b9,h,w,f}。Rd和Rb指示結(jié)構(gòu)上規(guī)定的寄存器名。
注意.w和.f指示相同的操作。支持的模式說明
寄存器Rb的內(nèi)容轉(zhuǎn)移到寄存器Rd。Group字段指定源和目的寄存器組。寄存器組的標(biāo)記辦法是
VR當(dāng)前組向量寄存器
VRA 替代組向量寄存器
SR標(biāo)量寄存器
SP專用寄存器
RASR 返回地址堆棧寄存器
VAC 向量累加寄存器(參見下面的VAC寄存器編碼表)
注意用此指令不能將向量寄存器傳送到標(biāo)量寄存器。VEXTRT指令是為此而提供的。
對VAC寄存器編碼使用下表操作
Rd=Rb異常
在VCSR或VISRC中設(shè)置異常事件狀態(tài)位將引起相應(yīng)的異常事件。編程注解
此指令不受元素屏蔽的影響。注意,用在VEC64模式下不存在替代組的概念,在VEC64模式下,本指令不能用于從替代組的寄存器或向替代組的寄存器轉(zhuǎn)移。VMUL 乘格式
匯編器句法
VMUL.dt VRc,VRd,VRa,VRb
VMUL.dt SRc,SRd,SRa,SRb
其中dt={b,h,w}。支持的模式說明
將Ra的每個元素與Rb中的每個元素相乘以產(chǎn)生一雙精度的結(jié)果;將每個元素的雙精度和返回到目的寄存器RcRd。
Ra和Rb使用指定的數(shù)據(jù)類型,而RcRd使用合適的雙精度數(shù)據(jù)類型(16、32和64位分別對應(yīng)int8、int16和int32)。每個雙精度元素的高位部分存放在Rc中。操作
for(i=0i<NumElem && EMASK[i].i++){
Aop[i]={VRa[i]‖SRa};
Bop[i]={VRb[i]‖SRb};
Hi[i]Lo[i]=Aop[i]*Bop[i]
Rc[i]=Hi[i];
Rd[i]=Lo[i];
}異常
無。編程注解
此指令不支持int9數(shù)據(jù)類型,用int16數(shù)據(jù)類型替代。此指令也不支持浮點(diǎn)數(shù)據(jù)類型,因?yàn)閿U(kuò)展的結(jié)果是不被支持的數(shù)據(jù)類型。VMULA 乘到累加器格式
匯編器句法
VMULA.dt VRa,VRb
VMULA.dt VRa,SRb
VMULA.dt VRa,# IMM
VMULA.dt SRa,SRb
VMULA.dt SRa,# IMM
其中dt={b,h,w,f}。支持的模式說明
將VRa的每個元素與Rb中的每個元素相乘以產(chǎn)生一雙精度的結(jié)果;將此結(jié)果寫到累加器。
浮點(diǎn)數(shù)據(jù)類型,全部操作數(shù)和結(jié)果都是單精度的。操作
for(i=0i<NumElem && EMASK[i];i++){
Bop[i]=[VRb[i]|[SRb];
if(dt=float)VACL[i]=VRa[i]*Bop[i];
else VACH[i]VACL[i]=VRa[i]*Bop[i];
}異常
無。編程注解
此指令不支持int9數(shù)據(jù)類型。代之以使用int16數(shù)據(jù)類型。VMULAF 乘到累加器小數(shù)格式
匯編器句法
VMULAF.dt VRa,VRb
VMULAF.dt VRa,SRb
VMULAF.dt VRa,# IMM
VMULAF.dt SRa,SRb
VMULAF.dt SRa,# IMM
其中dt={b,h,w}。支持的模式說明
將VRa的每個元素與Rb中每個元素相乘以產(chǎn)生一以雙精度的中間結(jié)果;此雙精度中間結(jié)果左移一位;結(jié)果寫到累加器。操作
for(i=0i<NumElem && EMASK[i];i++){
Bop[i]={VRb[i]‖SRb‖sex(LMM<80>)};
VACH[i]VACL[i]=(VRa[i]*Bop[i])<<1;
}異常
無。編程注解
此指令不支持int9數(shù)據(jù)類型,用int16數(shù)據(jù)類型替代。VMULF 乘小數(shù)格式
匯編器句法
VMULF.dt VRd,VRa,VRb
VMULF.dt VRd,VRa,SRb
VMULF.dt VRd,VRa,# IMM
VMULF.dt SRd,SRa,SRb
VMULF.dt SRd,SRa,# IMM
其中dt={b,h,w}。支持的模式
將VRa的每個元素與Rb中的每個元素相乘以產(chǎn)生一雙精度的中間結(jié)果;此雙精度中間結(jié)果左移一位;將結(jié)果的高位部分返回到目的寄存器VRd+1,低位部分返回到目的寄存器VRd。VRd必須是一偶數(shù)寄存器。操作
for(i=0;i<NumElem && EMASK[i];i++){
Bop[i]={VRb[i]‖SRb‖sex(TMM<80>)};
Hi[i]Lo[i]=(VRa[i]*Bop[i])<<1;
VRd+1[i]=Hi[i];
VRd[i]=Lo[i]異常
無。編程注解
此指令不支持int9數(shù)據(jù)類型,用int16數(shù)據(jù)類型替代。VMULFR 乘小數(shù)并舍入格式
匯編器句法
VMULFR.dt VRd,VRa,VRb
VMULFR.dt VRd,VRa,SRb
VMULFR.dt VRd,VRa,# IMM
VMULFR.dt SRd,SRa,SRb
VMULFR.dt SRd,SRa,# IMM
其中dt={b,h,w}。支持的模式說明
將VRa的每個元素與Rb中每個元素相乘以產(chǎn)生一雙精度的中間結(jié)果;此雙精度中間結(jié)果左移一位;將此被移位的中間結(jié)果舍入到高位部分;高位部分返回到目的寄存器VRd。操作
for(i=0i<NumElem && EMASK[i]i++){
Bop[i]={VRb[i]‖SRb‖sex(IMM<80>)}.
Hi[i]Lo[i]=(VRa[i]*Bop[i])<<1;
if(Lo[i]<msb>=1)Hi[i]=Hi[i]+1;
VRd[i]=Hi[i];
}異常
無。編程注解
此指令不支持int9數(shù)據(jù)類型,用int16數(shù)據(jù)類型替代。VMULL 乘低位格式
匯編器句法
VMULL.dt VRd,VRa,VRb
VMULL.dt VRd,VRa,SRb
VMULL.dt VRd,VRa,# IMM
VMULL.dt SRd,SRa,SRb
VMULL.dt SRd,SRa,# IMM
其中dt={b,h,w,f}。支持的模式說明
將VRa的每個元素與Rb中每個元素相乘以產(chǎn)生一雙精度的結(jié)果;結(jié)果的低位部分返回到目的寄存器VRd。
對浮點(diǎn)數(shù)據(jù)類型,全部操作數(shù)和結(jié)果都是單精度的。操作
for(i=0i<NumElem && EMASK[i].i++){Bop[i]={VRb[i]‖SRb};
if(dt=float)Lo[i]=VRa[i]*Bop[i];
else Hi[i]Lo[i]=VRa[i]*Bop[i];
VRd[i]=Lo[i];
}異常
溢出,浮點(diǎn)無效的操作數(shù)。編程注解
此指令不支持int9數(shù)據(jù)類型。代之以使用int16數(shù)據(jù)類型。VNAND 與非格式
匯編器句法
VNAND.dt VRd,VRa,VRb
VNAND.dt VRd,VRa,SRb
VNAND.dt VRd,VRa,# IMM
VNAND.dt SRd,SRa,SRb
VNAND.dt SRd,SRa,# IMM
其中dt={b,b9,h,w}。注意.w和.f指定相同的操作。支持的模式說明
對Ra中每個元素的每一位與Rb/立即操作數(shù)中的相應(yīng)位進(jìn)行邏輯NAND,結(jié)果返回到Rd中。操作
for(i=0;i<NumElem && EMASK[i],i++){
Bop[i]={VRb[i]‖SRb‖sex(IMM<80>)};
Rd[i]<k>=-(Ra[i]<k>&Bop[i]<k>).for k=all bits in element i;
}異常
無。VNOR 或非格式
匯編器句法
VNOR.dt VRd,VRa,VRb
VNOR.dt VRd,VRa,SRb
VNOR.dt VRd,VRa,# IMM
VNOR.dt SRd,SRa,SRb
VNOR.dt SRd,SRa,# IMM
其中dt={b,b9,h,w}。注意.w和.f指定相同的操作。支持的模式說明
對Ra中每個元素的每一位與Rb/立即操作數(shù)中的相應(yīng)位作邏輯NOR;結(jié)果返回到Rd中。操作
for(i=0i<NumElem && EMASK[i]i++){
Bop[i]={VRb[i]‖SRb‖sex(IMM<80>)};
Rd[i]<k>=-(Ra[i]<k>tBop[i]<k>)for k=all bitsin element i;
}異常
無。VOR 或格式
匯編器句法
VOR.dt VRd,VRa,VRb
VOR.dt VRd,VRa,SRb
VOR.dt VRd,VRa,# IMM
VOR.dt SRd,SRa,SRb
VOR.dt SRd,SRa,# IMM
其中dt={b,b9,h,w}。注意.w和.f指定相同的操作。支持的模式說明
對Ra中每個元素的每一位與Rb/立即操作數(shù)中的相應(yīng)位進(jìn)行邏輯OR結(jié)果返回到Rd中。操作
for(i=0i<NumElem && EMASK[i];i++){
Bop[i]={VRb[i]‖SRb‖sex(IMM<80>)};
Rd[i]<k>=Ra[i]<k>|Bop[i]<k>.for k=all bus in element i.
}異常
無。VORC 或補(bǔ)碼格式
匯編器句法
VORC.dt VRd,VRa,VRb
VORC.dt VRd,VRa,SRb
VORC.dt VRd,VRa,# IMM
VORC.dt SRd,SRa,SRb
VORC.dt SRd,SRa,# IMM
其中dt={b,b9,h,w}。注意.w和.f指定相同的操作。支持的模式說明
對Ra中每個元素的每一位與Rb/立即操作數(shù)中相應(yīng)位的補(bǔ)碼進(jìn)行邏輯OR;結(jié)果返回到Rd中。操作
for(i=0i<NumElem && EMASK[i];i++){
Bop[i]=[VRb[i]‖SRb‖sex(IMM<80>)};
Rd[i]<k>=Ra[i]<k>|-Bop[i]<k>.for k=all bits in element i;
}異常
無。VPFTCH 預(yù)取格式
匯編器句法
VPFTCH.ln SRb,SRi
VPFTCH.ln SRb,# IMM
VPFTCH.ln SRb+,SRi
VPFTCH.ln SRb+,# IMM
其中l(wèi)n={1,2,4,8}。說明
從有效地址開始預(yù)取多個向量數(shù)據(jù)Cache行。Cache行的數(shù)目被指定如下
LN<10>=00預(yù)取1個64字節(jié)的Cache行
LN<10>=01預(yù)取2個64字節(jié)的Cache行
LN<10>=10預(yù)取4個64字節(jié)的Cache行
LN<10>=11預(yù)取8個64字節(jié)的Cache行
如果有效地址不落在64字節(jié)的邊界上,則首先截斷以便與64字節(jié)的邊界對齊。操作異常
無效的數(shù)據(jù)地址異常事件。編程注解
EA<310>指出局部存儲器中的一個字節(jié)地址。VPFTCHSP 預(yù)取到暫時存儲器格式
匯編器句法
VPFTCHSP.ln SRp,SRb,SRi
VPFTCHSP.ln SRp,SRb,# IMM
VPFTCHSP.ln SRp,SRb+,SRi
VPFTCHSP.ln SRP,SRb+,# IMM
其中l(wèi)n={1,2,4,8}。注意VPFTCH和VPFTCHSP具有同樣的操作碼。說明
從存儲器向暫時存儲器傳送多個64字節(jié)的塊。有效地址給出存儲器的起始地址,而SRp提供暫時存儲器的起始地址。64字節(jié)塊的數(shù)目指定如下
LN<10>=00傳送1個64字節(jié)的塊
LN<10>=01傳送2個64字節(jié)的塊
LN<10>=10傳送4個64字節(jié)的塊
LN<10>=11傳送8個64字節(jié)的塊
如果有效地址不落在64字節(jié)的邊界上,首先截斷以使與64字節(jié)的邊界對齊。如果SRp中的暫時存儲器指針地址不落在64字節(jié)的邊界上,它也截斷以與64字節(jié)的邊界對齊。對齊的暫時存儲器指針地址以傳送字節(jié)數(shù)增加。操作
EA=SRb+{SRi‖sex(IMM<70>)}
if(A=1)SRb=EA;
Num_bytes={64‖128‖256‖512}
Mem_adrs=EA<316>6b’000000;
SRp=SRp<316>6b’000000;
for(i=0;i<Num_bytes;i++)
SPAD[SRp++]=MEM[Mem_adrs+i];異常
無效的數(shù)據(jù)地址異常事件。VROL 循環(huán)左移格式
匯編器句法
VROL.dt VRd,VRa,SRb
VROL.dt VRd,VRa,# IMM
VROL.dt SRd,SRa,SRb
VROL.dt SRd,SRa,# IMM
其中dt={b,b9,h,w}。支持的模式說明
向量/標(biāo)量寄存器Ra的每個數(shù)據(jù)元素循環(huán)左移,左移的位數(shù)在標(biāo)量寄存器Rb或IMM字段中給出,結(jié)果存入向量/標(biāo)量寄存器Rd。操作
rotate_amount={SRb%32‖IMM<40>};
for(i=0i<NumElem && EMASK[i];i++){
Rd[i]=Ra[i]rotate _leftrotate_amount;
}異常
無。編程注解
注意rotate amount從SRb或IMM<40>中取得的5位數(shù)。對bytebyte9、halfword數(shù)據(jù)類型,編程者負(fù)責(zé)正確指定小于或等于數(shù)據(jù)長度的位數(shù)的循環(huán)移位總量。如果移位總量大于指定的數(shù)據(jù)長度,則結(jié)果是未定義的。
注意循環(huán)左移n位相當(dāng)于循環(huán)右移ElemSize-n位,這里ElemSize表示給定數(shù)據(jù)長度的位數(shù)。VROR 循環(huán)右移格式
匯編器句法
VROR.dt VRd,SRa,SRb
VROR.dt VRd,SRa,# IMM
VROR.dt SRd,SRa,SRb
VROR.dt SRd,SRa,# IMM
其中dt={b,b9,h,w}。支持的模式說明
向量/標(biāo)量寄存器Ra的每個數(shù)據(jù)元素循環(huán)右移,右移的位數(shù)在標(biāo)量寄存器Rb或IMM字段中給出,結(jié)果存入向量/示量寄存器Rd。操作
rorate_amount={SRb%32‖IMM<40>};
for(i=0;i<NumElem && EMASK[i]i++){
Rd[i]=Ra[i]rotate_right rotate_amount;
}異常
無。編程注解
注意rotate_amount是從SRb或IMM<40>中取得的5位的數(shù)。對byte、byte9、halfword數(shù)據(jù)類型,編程者負(fù)責(zé)正確指定小于或等于數(shù)據(jù)長度的位數(shù)的循環(huán)移位總量。如果該移位總量大于指定的數(shù)據(jù)長度,則結(jié)果是未定義的。
注意循環(huán)右移n位相當(dāng)于循環(huán)左移ElemSize-n位,這里ElemSize表示給定數(shù)據(jù)長度的位數(shù)。VROUND 將浮點(diǎn)數(shù)舍成整型數(shù)格式
匯編器句法
VROUND.rm VRd,VRb
VROUND.rm SRd,SRb
其中rm={ninf,zero,near,pinf}。支持的模式說明
向量/標(biāo)量寄存器Rb的浮點(diǎn)數(shù)據(jù)格式的內(nèi)容舍入成為最接近的32位整數(shù)(Word),該結(jié)果存放在向量/標(biāo)量寄存器Rd中。舍入模式在RM中規(guī)定。操作
for(i=0i<NumElemi++}{
Rd[i]=Convert to int32(Rb[i]);
}異常
無。編程注解
此指令不受元素屏蔽的影響。VSATL 飽和到低限格式
匯編器句法
VSATL.dt VRd,VRa,VRb
VSATL.dt VRd,VRa,SRb
VSATL.dt VRd,VRa,# IMM
VSATL.dt SRd,SRa,SRb
VSATL.dt SRd,SRa,# IMM
其中dt={b,b9,h,w }。注意9位立即數(shù)不支持.f數(shù)據(jù)類型。支持的模式說明
向量/標(biāo)量寄存器Ra的每個數(shù)據(jù)元素與它在向量/標(biāo)量寄存器Rb或IMM字段中的對應(yīng)低限對比檢查。如果數(shù)據(jù)元素的值小于此低限,則被設(shè)置成等于低限,且最終結(jié)果存入向量/標(biāo)量寄存器Rd。操作
for(i=0;i<NumElem && EMASK[i].i++){
Bop[i]={VRb[i]‖SRb‖sex(IMM<80>)};
Rd[i]=(Ra[i]<BoP[i])?Bop[i]Ra[i];
}異常
無。VSATU 飽和到高限格式
匯編器句法
VSATU.dt VRd,SRa,SRb
VSATU.dt VRd,SRa,SRb
VSATU.dt VRd,SRa,# IMM
VSATU.dt SRd,SRa,SRb
VSATU.dt SRd,SRa,# IMM
其中dt={b,b9,h,w,f}。注意9位立即數(shù)不支持.f數(shù)據(jù)類型。支持的模式說明
向量/標(biāo)量寄存器Ra的每個數(shù)據(jù)元素與它在向量/標(biāo)量寄存器Rb或IMM字段中的對應(yīng)高限對比檢查。如果數(shù)據(jù)元素的值大于此高限,則被設(shè)置成等于高限,且最終結(jié)果存入向量/標(biāo)量寄存器Rd。操作
for(i=0i<NumElem && EMASK[i];i++){Bop[i]={VRb[i]‖SRb‖sex(IMM<80>)};
Rd[i]=(Ra[i]>Bop[i])?Bop[i]Ra[i];
}異常
無。VSHFL 混洗格式
匯編器句法
VSHFL.dt VRc,VRd,VRa,VRb
VSHFL.dt VRc,VRd,VRa,SRb
其中dt={b,b9,h,w,f}。注意.w和.f指定相同的操作。支持的模式說明
向量寄存器Ra的內(nèi)容與Rb混洗,結(jié)果存放在向量寄存器RcRd如下圖所示
操作異常
無。編程注解
此指令不使用元素屏蔽。VSHFLH 混洗高位格式
匯編器句法
VSHFLH.dt VRd,VRa,VRb
VSHFLH.dt VRd,VRa,SRb
其中dt={b,b9,h,w,f}。注意.w和.f指定相同的操作。支持的模式說明
向量寄存器Ra的內(nèi)容與Rb混洗,結(jié)果的高位部分存放在向量寄存器Rd,如下圖所示
操作異常
無。編程注解
本指令不使用元素屏蔽。VSHFLL 混洗低位格式
匯編器句法
VSHFLL.dt VRd,VRa,VRb
VSHFLL.dt VRd,VRa,SRb
其中dt={b,b9,h,w,f}。注意.w和.f指定同樣的操作。支持的模式說明
向量寄存器Ra的內(nèi)容與Rb混洗,結(jié)果的低位部分存放在向量寄存器Rd,如下圖所示
操作異常
無。編程注解
此指令不使用元素屏蔽。VST 存儲格式
匯編器句法
VST.st Rs,SRb,SRi
VST.st Rs,SRb,# IMM
VST.st Rs,SRb+,SRi
VST.st Rs,SRb+,# IMM
其中st={b,b9t,h,w,4,8,16,32,64},Rs={VRs,VRAs,SRs}注意.b和.b9t指示相同的操作,.64和VRAs不能被一起指定。對Cache-off存儲使用VSTOFF。說明
存儲一向量或標(biāo)量寄存器。操作
EA=SRb+{SRi‖sex(IMM<70>)};
if(A=1)SRb=EA;
MEM[EA]=見下表
異常
無效的數(shù)據(jù)地址,不對齊的訪問。編程注解
此指令不受元素屏蔽的影響。VSTCB 存儲到循環(huán)緩沖器格式
匯編器句法
VSTCB.stRs,SRb,SRi
VSTCB.stRs,SRb,# IMM
VSTCB.stRs,SRb+,SR1
VSTCB.stRs,SRb+,# IMM
其中st={b,b9t,h,w,4,8,16,32,64},Rs={VRs,VRAs,SRs]。注意.b和.b9t指示相同的操作,.64和VRAs不能被一起指定。對Cache-off使用VSTCBOFF。說明
從循環(huán)緩沖器存儲到向量或標(biāo)量寄存器,循環(huán)緩沖器的邊界由SRb+1中的BEGIN指針和SRb+2中的END指針確定。
在存儲及地址更新操作之前,如果有效地址大于END地址,則它將被調(diào)整。此外,對.h和.w標(biāo)量加載循環(huán)緩沖器的邊界必須分別與halfword和word的邊界對齊。操作
EA=SRb+{SR1‖sex(IMM<70>)};
BEGIN=SRb+1;
END=SRb+2;
cbsize=END-BEGIN;
if(EA>END)EA=BEGIN+(EA-END);
if(A=1)SRb=EA;
MEM[EA]=見下表異常
無效的數(shù)據(jù)地址,未對齊的訪問。編程注解
此指令不受元素屏蔽的影響。
編程者必須確定下面的條件以使此指令按所希望的工作
BEGIN<EA<2*END-BEGIN
即,EA>BEGIN以及EA-END<END-BEGINVSTD 雙存儲格式
匯編器句法
VSTD.stRs,SRb,SRi
VSTD.stRs,SRb,# IMM
VSTD.stRs,SRb+,SRi
VSTD.stRs,SRb+,# IMM
其中st={b,b9t,h,w,4,8,16,32,64},Rs={VRs,VRAs,SRs}。注意.b和.b9t指定相同的操作,.64和VRAs不能被一起指定。對Cache-off存儲使用VSTDOFF。說明
存儲來自從當(dāng)前或替代組的兩個向量寄存器或兩個標(biāo)量寄存器。操作
EA=SRb+{SRi‖sex(IMM<70>)};
if(A=1)SRb=EA;
MEM[EA]=見下表異常
無效的數(shù)據(jù)地址,未對齊的訪問。編程注解
本指令不受元素屏蔽的影響。VSTQ 四存儲格式
匯編器句法
VSTQ.st Rs,SRb,SRi
VSTQ.st Rs,SRb,# IMM
VSTQ.st Rs,SRb+,SRi
VSTQ.st Rs,SRb+,# IMM
其中st={b,b9t,h,w,4,8,16,32,64},Rs={VRs,VRAs,SRs}。注意.b和.b9t指定相同的操作,.64和VRAs不能被一起指定。對Cache-off存儲使用VSTQOFF。說明
存儲來自當(dāng)前或替代組的四個向量寄存器或四個標(biāo)量寄存器。操作
EA=SRb+{SRi‖sex(IMM<70>)};
if(A=1)SRb=EA;
MEM[EA]=見下表異常
無效的數(shù)據(jù)地址,未對齊的訪問。編程注解
此指令不受元素屏蔽的影響。VSTR 反向存儲格式
匯編器句法
VSTR.stRs,SRb,SRi
VSTR.stRs,SRb,# IMM
VSTR.stRs,SRb+,SRi
VSTR.stRs,SRb+,# IMM
其中st={4,8,16,32,64},Rs={VRs,VRAs}。注意.64和VRAs不能被一起指定。對Cache-off存儲使用VSTROFF。說明
按逆元素順序存儲向量寄存器。本指令不支持標(biāo)量數(shù)據(jù)源寄存器。操作
EA=SRb+{SR1‖Sex(IMM<70>)};
if(A=1)SRb=EA;
MEM[EA]=見下表異常
無效的數(shù)據(jù)地址,未對齊的訪問。編程注解
本指令不受元素屏蔽的影響。VSTWS 跨距存儲格式
匯編器句法
VSTWS.stRs,SRb,SRi
VSTWS.stRs,SRb,# IMM
VSTWS.stRs,SRb+,SRi
VSTWS.stRs,SRb+,# IMM
其中st={8,16,32},Rs={VRs,VRAs}。注意不支持.64模式,用VST替代。對Cache-off存儲使用VSTWSOFF。說明
從有效地址開始,用標(biāo)量寄存器SRb+1作為跨距控制寄存器,從向量寄存器VRs向存儲器存儲32個字節(jié)。
ST指示block size、從每個塊存儲的連續(xù)字節(jié)數(shù)。SRb+1指示stride、分隔兩個連續(xù)塊的起始的字節(jié)數(shù)。
Stride必須等于或大于block size。EA必須對齊數(shù)據(jù)長度。stride和block size必須是多數(shù)據(jù)長度。操作
EA=SRb+{SRi‖sex(IMM<70>)};
if(A=1)SRb=EA;
Block-size={4‖8‖16‖32};
Stride=SRb+1<310>;
for(i=0;i<VECSIZE/Block_size;i++)
for(j=0;j<Block_size;j++)
BYTE[EA+I*Stride+j]=VRs{i * Block_size+j}<70);異常
無效的數(shù)據(jù)地址,未對齊的訪問。VSUB 減格式
匯編器句法
VSUB.dt VRd,VRa,VRb
VSUB.dt VRd,VRa,SRb
VSUB.dt VRd,VRa,# IMM
VSUB.dt SRd,SRa,SRb
VSUB.dt SRd,SRa,# IMM
其中dt={b,b9,h,w,f}。支持的模式說明
從向量/標(biāo)量寄存器Ra的內(nèi)容中減去向量/標(biāo)量寄存器Rb的內(nèi)容,其結(jié)果存放在向量/標(biāo)量寄存器Rd中。操作
for(i=0i<NumElem && EMASK[i];i++){
Bop[i]={Rb[i]‖SRb‖sex(IMM<80>)};
Rd[i]=Ra[i]-Bop[i];
}異常
溢出,浮點(diǎn)無效的操作數(shù)。VSUBS 減及置位格式
匯編器句法
VSUBS.dt SRd,SRa,SRb
VSUBS.dt SRd,SRa,# IMM
其中dt={b,b9,h,w,f}。支持的模式說明
從SRa減去SRb;結(jié)果存入SRd,并且設(shè)置VCSR中的VFLAG位。操作
Bop={SRb‖sex(IMM<80>)};
SRd=SRa-Bop;
VCSR<lt,eq,gt>=status(SRa-Bop);異常
溢出,浮點(diǎn)無效的操作數(shù)。VUNSHFL 去混洗格式
匯編器句法
VUNSHFL.dt VRc,VRd,VRa,VRb
VUNSHFL.dt VRc,VRd,VRa,SRb
其中dt={b,b9,h,w,f}。注意.w和.f指示相同的操作。支持的模式說明
向量寄存器VRa的內(nèi)容與Rb去混洗并送入向量寄存器VRcVRd如下所示
操作異常
無。編程注解
本指令不使用元素屏蔽。VUNSHFLH 去混洗高位格式
匯編器句法
VUNSHFLH.dt VRd,VRa,VRb
VUNSHFLH.dt VRd,VRa,SRb
其中dt={b,b9,h,w,f}。注意.w和.f指示相同的操作。支持的模式說明
向量寄存器VRa的內(nèi)容與Rb被去混洗;結(jié)果的高位部分返回到向量寄存器VRd,如下所示
操作異常
無。編程注解
本指令不使用元素屏蔽。VUNSHFLL 去混洗低位格式
匯編器句法
VUNSHFLL.dt VRd.VRa,VRb
VUNSHFLL.dt VRd,VRa,SRb
其中dt={b,b9,h,w,f}。注意.w和.f指定相同的操作。支持的模式說明
向量寄存器VRa的內(nèi)容與Rb被去混洗;結(jié)果的低位部分返回到向量等存器VRd,如下所示
操作異常
無。編程注解
此指令不使用元素屏蔽。VWBACK 回寫格式
匯編器句法
VWBACK.ln SRb,SRi
VWBACK.ln SRb,# IMM
VWBACK.ln SRb+,SRi
VWBACK.ln SRb+,# IMM
其中l(wèi)n={1,2,4,8}。說明
其索引被向量數(shù)據(jù)Cache中的EA指定的(與其標(biāo)簽同EA匹配的那些相反)Cache行,如其包含修改過的數(shù)據(jù),則被更新到存儲器中。如果多于一個Cache行被指定,當(dāng)它們包含修改過的數(shù)據(jù)時,后面相繼的Cache行被更新到存儲器。Cache行的數(shù)目指定如下
LN<10>=00寫1個64字節(jié)的Cache行
LN<10>=01寫2個64字節(jié)的Cache行
LN<10>=10寫4個64字節(jié)的Cache行
LN<10>=11寫8個64字節(jié)的Cache行
如果有效地址不落在64字節(jié)的邊界上,則它首先截斷以與64字節(jié)的邊界對齊。操作異常
無效的數(shù)據(jù)地址異常事件。編程注解
EA<310>指出局部存儲器中的字節(jié)地址。VWBACKSP 從暫時存儲器回寫格式
匯編器句法
VWBACKSP.ln SRp,SRb,SRi
VWBACKSP.ln SRp,SRb,# IMM
VWBACKSP.ln SRp,SRb+,SRi
VWBACKSP.ln SRp,SRb+,# IMM
其中l(wèi)n={1,2,4,8}。注意VWBACK和VWBACKSP使用相同的操作碼。說明
從暫時存儲器向存儲器傳送多個64字節(jié)的塊。有效地址給出存儲器的起始地址,SRp給出暫時存儲器的起始地址。64字節(jié)塊的數(shù)目指定如下
LN<10>=00傳送1個64字節(jié)的塊
LN<10>=01傳送2個64字節(jié)的塊
LN<10>=10傳送4個64字節(jié)的塊
LN<10>=11傳送8個64字節(jié)的塊
如果有效地址不落在64字節(jié)的邊界上,則它首先截斷以與64字節(jié)的邊界對齊。如果SRp中的暫時存儲器的指針地址不落在64字節(jié)的邊界,也要截斷并以及和64字節(jié)的邊界對齊。對齊的暫時存儲器的指針地址以傳送的字節(jié)數(shù)增加。操作
EA=SRb+{SRi‖sex(IMM<70>)};
if(A=1)SRb=EA;
Num_bytes={64‖128‖256‖512};
Mem_adrs=EA<316>6b’000000;
SRp=SRp<316>6b’000000;
for(i=0;i<Num_bytes;i++)
SPAD[SRp++]=MEM[Mem_adrs+i];異常
無效的數(shù)據(jù)地址異常事件。VXNOR 異或非格式
匯編器句法
VXNOR.dt VRd,VRa,VRb
VXNOR.dt VRd,VRa,SRb
VXNOR.dt VRd,VRa,# IMM
VXNOR.dt SRd,SRa,SRb
VXNOR.dt SRd,SRa,# IMM
其中dt={b,b9,h,w}。支持的模式說明
向量/標(biāo)量寄存器Ra的內(nèi)容與向量/標(biāo)量寄存器Rb的內(nèi)容進(jìn)行邏輯異或非,結(jié)果存入向量/標(biāo)量寄存器Rd中。操作
for(i=0;i<NumElem && EMASK[i];i++){
Bop[i]={VRb[i]‖SRb‖sex(IMM<80>)};
Rd[i]<k>=-(Ra[i]<k>^Bop[i]<k>).for k=all bits in element i;
}異常
無。VXOR 異或格式
匯編器句法
VXOR.dt VRd,VRa,VRb
VXOR.dt VRd,VRa,SRb
VXOR.dt VRd,VRa,# IMM
VXOR.dt SRd,SRa,SRb
VXOR.dt SRd,SRa,# IMM
其中dt={b,b9,h,w}。支持的模式說明
向量/標(biāo)量寄存器Ra的內(nèi)容與向量/標(biāo)量寄存器Rb的內(nèi)容進(jìn)行邏輯異或,結(jié)果存入向量/標(biāo)量寄存器Rd。操作for(i=0;i<NumElem && EMASK[i];i++){
Bop[i]={VRb[i]‖SRb‖sex(IMM<80>)};
Rd[i]<k>=Ra[i]<k>^Bop[i]<k>,for k=all bits in element i,}異常
無。VXORALL 異或全部元素格式
匯編器句法
VXORALL.dt SRd,VRb
其中dt={b,b9,h,w}。注意.b和.b9指定相同的操作。支持的模式說明
VRb中每個元素的最低有效位一起被異或,1位的結(jié)果返回到SRd的最低有效位上。此指令不受元素屏蔽的影響。操作異常
無。
權(quán)利要求
1.一個向量處理器包括
包含有一些向量寄存器的寄存器文件;
譯碼器,在譯碼一指令期間,從寄存器文件中標(biāo)識所選擇的向量寄存器,并標(biāo)識在指令執(zhí)行期間所要處理的數(shù)據(jù)元素的長度;以及
處理電路,被連到向量寄存器,其中處理電路,在執(zhí)行時,對來自所選擇的向量寄存器的數(shù)據(jù)實(shí)現(xiàn)多個并行操作,并行操作的數(shù)目由數(shù)據(jù)元素的長度來控制。
2.根據(jù)權(quán)利要求1所述的向量處理器,其中每個向量寄存器具有固定的長度。
3.根據(jù)權(quán)利要求1所述的向量處理器,其中譯碼器可識別的可能長度為8位、9位、16位和32位。
4.根據(jù)權(quán)利要求1所述的向量處理器,其中譯碼器在譯碼一個指令期間,標(biāo)識在指令執(zhí)行期間所要處理的數(shù)據(jù)元素的類型。
5.根據(jù)權(quán)利要求4所述的向量處理器,其中譯碼器可標(biāo)識的可能類型包括整型數(shù)據(jù)和浮點(diǎn)數(shù)據(jù)類型。
6.用于操作向量處理器的方法,包括
在向量寄存器中存貯數(shù)據(jù);
形成一指令,這指令包括標(biāo)識向量寄存器的寄存器號,以及標(biāo)識向量寄存器中數(shù)據(jù)元素長度的長度字段;以及
通過進(jìn)行一些并行操作來執(zhí)行指令,其中每個操作對應(yīng)于向量寄存器中的一個數(shù)據(jù)元素,而長度字段控制并行執(zhí)行的操作的數(shù)量。
全文摘要
一種向量處理器結(jié)構(gòu)提供固定長度的一些向量寄存器,它們具有可編程長度和類型的數(shù)據(jù)元素。數(shù)據(jù)元素的類型和長度由指令定義,指令操作與向量寄存器相關(guān)聯(lián)的操作數(shù)。由指令定義的數(shù)據(jù)長度確定向量寄存器中數(shù)據(jù)元素的數(shù)量及為完成指令所執(zhí)行的并行操作的數(shù)目。本發(fā)明的一個實(shí)施例支持全部長度的8位、9位、16位和32位整型數(shù)據(jù)元素長度,以及32位數(shù)據(jù)元素的浮點(diǎn)數(shù)據(jù)類型。
文檔編號G06F9/318GK1180864SQ9711740
公開日1998年5月6日 申請日期1997年8月19日 優(yōu)先權(quán)日1996年8月19日
發(fā)明者利·T·恩格延 申請人:三星電子株式會社