亚洲狠狠干,亚洲国产福利精品一区二区,国产八区,激情文学亚洲色图

用于執(zhí)行simd運(yùn)算的數(shù)據(jù)處理系統(tǒng)及其方法

文檔序號(hào):6492749閱讀:308來源:國(guó)知局
專利名稱:用于執(zhí)行simd運(yùn)算的數(shù)據(jù)處理系統(tǒng)及其方法
技術(shù)領(lǐng)域
本發(fā)明主要涉及數(shù)據(jù)處理系統(tǒng),更具體地,涉及在數(shù)據(jù)處理系統(tǒng)中使用的指令。
背景技術(shù)
通過允許在矢量的多個(gè)分量上執(zhí)行并行運(yùn)算,可實(shí)現(xiàn)提高數(shù)據(jù)處理系統(tǒng)的性能。目前可用的一種處理器類型為矢量處理器,其利用執(zhí)行矢量運(yùn)算的矢量寄存器。然而,盡管矢量處理器允許更高的性能,但對(duì)于使用標(biāo)量通用寄存器的處理器而言,增加了復(fù)雜度和成本。也就是,矢量處理器中的矢量寄存器文件通常包括N個(gè)矢量寄存器,其中每個(gè)矢量寄存器包括M個(gè)寄存器的庫(kù)用于保存M個(gè)分量。例如,在本領(lǐng)域公知的一種矢量寄存器中,該寄存器文件包括32個(gè)矢量寄存器,其中,每個(gè)寄存器包括32個(gè)64位寄存器的庫(kù),從而等于需要1024個(gè)64位寄存器。
目前另一種可用的矢量寄存器是單指令多數(shù)據(jù)(SIMD)標(biāo)量處理器(也稱為“短矢量機(jī)”),其允許有限的矢量處理,同時(shí)使用任何現(xiàn)有的標(biāo)量通用寄存器(GPR)。例如,在具有32個(gè)標(biāo)量64位GPR的數(shù)據(jù)處理系統(tǒng)中,每一標(biāo)量寄存器可以保存2個(gè)32位分量,4個(gè)16位分量,或8個(gè)8位分量,從而能夠執(zhí)行2個(gè)32位分量運(yùn)算,4個(gè)16位分量運(yùn)算,或8個(gè)8位分量運(yùn)算。因此,與矢量處理器相比(根據(jù)上述示例,其每次可對(duì)寄存器庫(kù)中的32個(gè)64位寄存器執(zhí)行運(yùn)算),盡管每次運(yùn)算的分量數(shù)目受到限制,但減少了所需的硬件。然而,在當(dāng)前的SIMD標(biāo)量處理器中,存在大量的與向標(biāo)量寄存器傳送用于執(zhí)行的矢量分量和向存儲(chǔ)器傳送回多個(gè)矢量分量相關(guān)聯(lián)的開銷。該開銷限制了運(yùn)算的有效吞吐量,因此,存在對(duì)于在存儲(chǔ)器與寄存器間加載和存儲(chǔ)多個(gè)矢量分量的改良方法的需求。


通過示例說明本發(fā)明,并不受限于附圖,在附圖中,相同的引用號(hào)碼表示相同的元素,并且其中圖1以框圖的形式表示遵照本發(fā)明的一個(gè)實(shí)施例的數(shù)據(jù)處理系統(tǒng);圖2-11表示可由圖1的數(shù)據(jù)處理系統(tǒng)執(zhí)行的矢量加載和存儲(chǔ)指令,其遵照本發(fā)明的各種實(shí)施例;圖12表示示例存儲(chǔ)器部分,其遵照本發(fā)明的一個(gè)實(shí)施例;圖13-17表示一組標(biāo)量GPR中的條目的示例,其遵照本發(fā)明的各種實(shí)施例;圖18表示存儲(chǔ)器部分隨時(shí)間變化的示例,其遵照本發(fā)明的一個(gè)實(shí)施例;圖19-26表示一組標(biāo)量GPR中條目的示例,其遵照本發(fā)明的各種技術(shù)人員明白,圖中的元件出于簡(jiǎn)化和說明的目的而表示,并不一定按比例繪制。例如,圖中某些元件的尺寸相對(duì)于其它元件夸大,以有助于理解本發(fā)明的實(shí)施例。
具體實(shí)施例方式
如此處所使用的,術(shù)語“總線”指用于傳送一種或多種信息,例如,數(shù)據(jù)、地址、控制或狀態(tài)的多個(gè)信號(hào)或?qū)Ь€(conductor)。此處討論的導(dǎo)線可表示或說明為單個(gè)導(dǎo)線、多個(gè)導(dǎo)線、單向?qū)Ь€或雙向?qū)Ь€。然而,不同的實(shí)施例可變化這些導(dǎo)線的實(shí)現(xiàn)方式。例如,可使用多個(gè)分離的單向?qū)Ь€,而不是雙向?qū)Ь€,反之亦然。另外,可用以串行或時(shí)間復(fù)用方式傳送信號(hào)的單個(gè)導(dǎo)線代替多個(gè)導(dǎo)線。同樣地,承載多個(gè)信號(hào)的單個(gè)導(dǎo)線可分離為承載這些信號(hào)的子集的各種不同導(dǎo)線。因此,對(duì)于傳送信號(hào)存在多個(gè)選項(xiàng)。
當(dāng)將信號(hào)、狀態(tài)位或類似的裝置分別呈現(xiàn)其邏輯真或假狀態(tài)時(shí),使用術(shù)語“肯定”(assert)或“設(shè)置”(set)以及“否定”(negate)(或“非肯定”(deasert)或“清除”(clear))。如果該邏輯真狀態(tài)為邏輯水平一,則邏輯假狀態(tài)為邏輯水平零。并且如果邏輯水平真狀態(tài)為邏輯水平零,則邏輯水平假狀態(tài)為邏輯水平一。另外,在數(shù)字前的“0x”表明該數(shù)字以其16進(jìn)制或16基底形式表示。數(shù)字前的“%”表明該數(shù)字以其二進(jìn)制或2基底形式表示。
如上所述,存在對(duì)于降低從存儲(chǔ)器向寄存器和從寄存器向存儲(chǔ)器傳送多個(gè)矢量分量的開銷的需求。因此,此處將討論多種不同的矢量加載和存儲(chǔ)指令,其允許以改進(jìn)的方式從或向存儲(chǔ)器傳送矢量分量。此外,使用此處說明的指令可允許降低的開銷,向現(xiàn)有的設(shè)計(jì)增加最小的硬件復(fù)雜度。例如,如同在許多類型的數(shù)據(jù)處理系統(tǒng)中的使用,標(biāo)量寄存器文件可與這些指令一同使用,從而無需成本更高的獨(dú)立矢量寄存器文件。另外,這些指令可允許降低的軟件復(fù)雜度,同時(shí)還提供執(zhí)行效率。另外,此處的指令可用于解決各種問題,例如,存儲(chǔ)器中矢量分量的對(duì)齊,將存儲(chǔ)器分量的大小擴(kuò)展至寄存器分量以提高的精確度的需要,存儲(chǔ)器的任意矢量長(zhǎng)度對(duì)于固定長(zhǎng)度,或與檢索/存儲(chǔ)矢量數(shù)據(jù)所需的加載/存儲(chǔ)指令數(shù)關(guān)聯(lián)的開銷(例如,在發(fā)出與執(zhí)行指令時(shí))。此處的這些指令還可用于解決這些問題的組合,或別的問題或問題的組合,如通過在下面參考圖1-35提供的說明將要理解的那樣。
圖1以框圖的形式表示根據(jù)本發(fā)明的一個(gè)實(shí)施例的數(shù)據(jù)處理系統(tǒng)10。數(shù)據(jù)處理系統(tǒng)10包括處理器14、存儲(chǔ)器12、輸入/輸出(I/O)16、其它外圍設(shè)備18以及系統(tǒng)總線20。存儲(chǔ)器12通過導(dǎo)線22雙向連接至系統(tǒng)總線20,I/O 16通過導(dǎo)線24雙向連接至系統(tǒng)總線20,其它外圍設(shè)備18通過導(dǎo)線26雙向連接至系統(tǒng)總線20,處理器14通過導(dǎo)線58連接至系統(tǒng)總線20。在一個(gè)實(shí)施例中,其它外圍設(shè)備18可包括一個(gè)或多個(gè)外圍設(shè)備,其中,每一外圍設(shè)備可為任何類型的外圍設(shè)備,例如,通用異步收發(fā)器(UART),實(shí)時(shí)時(shí)鐘(RTC),鍵盤控制器,其它存儲(chǔ)器,等等。其它外圍設(shè)備18的一些或全部能夠通過導(dǎo)線62傳送數(shù)據(jù)處理系統(tǒng)10外部的信息。I/O電路16可包括任何類型的I/O電路,其通過例如導(dǎo)線60,接收或提供數(shù)據(jù)處理系統(tǒng)10的外部信息。存儲(chǔ)器12可為任何類型的存儲(chǔ)器,例如,只讀存儲(chǔ)器(ROM),隨機(jī)存取存儲(chǔ)器(RAM),非易失性存儲(chǔ)器(例如,flash)等。數(shù)據(jù)處理系統(tǒng)10可包括除表示的那些之外的其它元件,或可包括比表示出的那些更多或更少的元件。例如,數(shù)據(jù)處理系統(tǒng)10可包括任意數(shù)量的存儲(chǔ)器或處理器。
處理器14可為任何類型的處理器,例如,微處理器、微控制器、數(shù)字信號(hào)處理器,等等。在一個(gè)實(shí)施例中,處理器14可稱為處理器內(nèi)核。在另一實(shí)施例中,處理器14可為多處理器數(shù)據(jù)處理系統(tǒng)中多個(gè)處理器中的一個(gè)。另外,盡管沒有這樣表示,但處理器14可為流水線處理器。在圖1中所示的實(shí)施例中,處理器14包括控制單元28、指令單元30、執(zhí)行單元32、標(biāo)量寄存器文件34、總線接口單元(BIU)36以及加載/存儲(chǔ)單元38。控制單元28通過導(dǎo)線40雙向連接至指令單元30,通過導(dǎo)線42連接至執(zhí)行單元32,通過導(dǎo)線46連接至標(biāo)量寄存器文件34,并且通過導(dǎo)線48連接至加載/存儲(chǔ)單元38。執(zhí)行單元32通過導(dǎo)線44雙向連接至標(biāo)量寄存器文件34,并且標(biāo)量寄存器文件34通過導(dǎo)線50雙向連接至加載/存儲(chǔ)單元38。BIU 36通過導(dǎo)線54雙向連接至指令單元30,并且通過導(dǎo)線52連接至加載/存儲(chǔ)單元38。處理器14通過連接至導(dǎo)線58的導(dǎo)線56,能夠與系統(tǒng)總線20雙向通信。注意,處理器14可包括比表示出的更多的電路,其中,附加電路可連接至導(dǎo)線58。也就是,導(dǎo)線56可通過全部或部分導(dǎo)線58與系統(tǒng)總線20通信。還要注意,全部或部分處理器14可稱為處理電路。
在操作中,指令單元30通過BIU 36和系統(tǒng)總線20從例如存儲(chǔ)器12的存儲(chǔ)器取回指令,并從或向控制單元28接收和提供控制信息。指令單元30可為本領(lǐng)域所公知的任何類型的指令單元,并如本領(lǐng)域所公知的那樣操作,并且因此不在此處詳細(xì)說明。指令單元30因此向控制單元28提供指令,控制單元通過,例如,執(zhí)行單元32和加載/存儲(chǔ)單元38,控制這些接收的指令的執(zhí)行,執(zhí)行單元32和加載/存儲(chǔ)單元38這兩個(gè)單元可在必要時(shí)直接地或通過控制單元28與標(biāo)量寄存器文件34通信。例如,控制單元28通過加載/存儲(chǔ)單元38和BIU 36,能在需要執(zhí)行指令時(shí)從存儲(chǔ)器(例如存儲(chǔ)器12)向標(biāo)量寄存器文件34中的寄存器加載數(shù)據(jù),并且能在需要執(zhí)行指令時(shí)將來自寄存器文件34中寄存器的數(shù)據(jù)存儲(chǔ)至存儲(chǔ)器(例如存儲(chǔ)器12)。例如,在一個(gè)實(shí)施例中,加載/存儲(chǔ)單元38能夠通過導(dǎo)線50,基于控制單元28通過導(dǎo)線48提供的控制信息,直接與標(biāo)量寄存器文件34通信(以讀取和寫入數(shù)據(jù))。執(zhí)行單元32可在需要執(zhí)行通過控制單元28從指令單元30接收的指令時(shí),使用在標(biāo)量寄存器文件34中存儲(chǔ)的數(shù)據(jù),執(zhí)行算術(shù)、邏輯、移位或其它運(yùn)算操作,并將結(jié)果存儲(chǔ)至標(biāo)量寄存器34中的寄存器。執(zhí)行單元32可包括,例如,算術(shù)邏輯單元(ALU)、浮點(diǎn)單元,等等。
標(biāo)量寄存器文件34包括N個(gè)通用寄存器(GPR),其中,N可為大于或等于一的任何整數(shù)。在一個(gè)實(shí)施例中,標(biāo)量寄存器文件34包括32個(gè)64位寄存器。如同此處所使用,標(biāo)量寄存器表示具有一維映射并因此僅保存一行數(shù)據(jù)(例如,1×M位寄存器)的寄存器,其中,M為大于或等于一的任何整數(shù)。在一個(gè)實(shí)施例中,M為64,并且每個(gè)寄存器因此能夠存儲(chǔ)64位的量。標(biāo)量寄存器文件34可通過導(dǎo)線46向或從控制單元28提供或接收控制信息。
處理器14的操作通??捎杀绢I(lǐng)域的普通技術(shù)人員理解。因此在此處將不詳細(xì)說明處理器14,除了在理解參考圖2-36說明的各種實(shí)施例中需要的那些部分外。還要注意,可在需要執(zhí)行此處說明的加載與存儲(chǔ)指令時(shí)修改具有存儲(chǔ)在通用寄存器文件中的操作數(shù)的數(shù)據(jù)處理系統(tǒng)的現(xiàn)有設(shè)計(jì)。此外,注意,由于可使用標(biāo)量寄存器文件,可更新目前的現(xiàn)有設(shè)計(jì),以允許此處說明的指令。(然而,此處說明的實(shí)施例可與任何類型的寄存器文件一同使用,并不僅限于標(biāo)量寄存器文件。)圖2-11表示各種不同的矢量分量加載與存儲(chǔ)指令,其可由處理電路執(zhí)行,例如,由圖1的處理器14等執(zhí)行。例如,每一指令可由指令單元30取回,其在適當(dāng)時(shí)將它們提供至控制單元28??刂茊卧?8因此可在需要時(shí)指示加載/存儲(chǔ)單元38和執(zhí)行單元28執(zhí)行接收的指令,在需要存儲(chǔ)數(shù)據(jù)時(shí)使用寄存器文件34,如下詳述。注意,參考后面的圖,提供使用在圖2-11中表示的指令的示例。另外,注意,如此處所使用,矢量分量(或寄存器分量)指一個(gè)最多為標(biāo)量GPR大小,但也可以小于GPR大小的分量。例如,在標(biāo)量寄存器文件34包括64位寄存器(M=64)的情況下,矢量分量可為64位的大小或更小。例如,矢量分量可為一個(gè)字節(jié)(8位),使得一個(gè)64位GPR能夠保存8個(gè)矢量分量。另外,矢量分量可為半字(16位),使得一個(gè)64位GPR能夠保存4個(gè)矢量分量。類似地,矢量分量可為字(32位),使得64位GPR可保存2個(gè)分量。還要注意,如此處所使用,字節(jié)由“b”表示,半字由“h”表示,并且字由“w”表示。(注意,在替換實(shí)施例中,字或半字的定義可能不同。例如,字可以指16位,而不是32位。然而,如此處所使用,為了便于說明,字指32位。)圖2表示加載矢量分量(lvex)指令,其用來自存儲(chǔ)器的分量加載該寄存器文件(例如,標(biāo)量寄存器文件34)中的一個(gè)目標(biāo)寄存器。在一個(gè)實(shí)施例中,可利用附加控制字段進(jìn)一步限定該操作,例如s/u字段、ms字段以及ds字段,在圖2中將每一個(gè)說明為緊隨操作符“l(fā)vex”,并由句點(diǎn)分隔。在一個(gè)實(shí)施例中,具有這些控制字段中的每一個(gè);然而在替換實(shí)施例中,可能存在這些控制字段中的一些或者完全不存在。在一個(gè)實(shí)施例中,ms字段對(duì)應(yīng)于存儲(chǔ)器分量大小字段,ds字段對(duì)應(yīng)于目標(biāo)分量大小。例如,在一個(gè)實(shí)施例中,該存儲(chǔ)器分量大小(ms)字段可設(shè)置為mb、mh或mw中的一個(gè),以分別表明該將要加載的存儲(chǔ)器分量是否為字節(jié)、半字或字。類似地,目標(biāo)分量大小(ds)字段用于表示在目標(biāo)寄存器中每一加載的分量將具有的大小。
圖2的lvex指令還包括三個(gè)操作數(shù)rD、rA以及rB。該指令lvex利用來自存儲(chǔ)器的矢量分量加載目標(biāo)寄存器rD。寄存器rA指向存儲(chǔ)器中的第一個(gè)分量,并且在圖2的實(shí)施例中,在寄存器rB中指定附加參數(shù)。因此,每一rD、rA和rB可表明標(biāo)量寄存器文件34中GPR中的一個(gè)。在寄存器rB中存儲(chǔ)的附加參數(shù)包括計(jì)數(shù)(cnt)值和跨度(stride)值,使得lvex指令在具有ds大小的rD字段中用來自存儲(chǔ)器的“cnt”個(gè)分量(由rA指向這些分量的第一個(gè))加載寄存器rD,使得rD中的每一目標(biāo)分量具有ds大小。
還可指定跨度值,其指示存儲(chǔ)器中的分量如何分隔。也就是,存儲(chǔ)器中的這些分量距離“stride”個(gè)大小ms的單位。例如,如果存儲(chǔ)器中的分量相鄰,則可使用跨度1得到“cnt”個(gè)大小為“ms”的相鄰分量。例如,如果這些分量距離三個(gè)分量放置,則可使用跨度3獲得“cnt”個(gè)元素,彼此間距離3個(gè)“ms”大小的單位。例如,如果ms表示字(例如,mw),則跨度3將在存儲(chǔ)器中從rA所指的存儲(chǔ)器位置開始每三個(gè)字取一個(gè)字。另外,該跨度值可為有符號(hào)值,其中,負(fù)值將向低位地址位置取分量,不是向高位地址位置取分量。
在一個(gè)實(shí)施例中,目標(biāo)大小(ds)應(yīng)當(dāng)大于或等于存儲(chǔ)器分量大小(ms)。如果該目標(biāo)大小(ds)大于該存儲(chǔ)器大小(ms),則s/u字段可用于適當(dāng)?shù)財(cái)U(kuò)展每個(gè)存儲(chǔ)器分量?!皊”用于表示這些分量是有符號(hào)的,并且應(yīng)該因此能夠進(jìn)行符號(hào)擴(kuò)展,而“u”可用于表示這些分量是無符號(hào)的,并且應(yīng)當(dāng)因此能夠進(jìn)行零擴(kuò)展。例如,在“l(fā)vex.u.mh.dwrD,rA,rB”的情況下,rD中(字大小)的每一目標(biāo)位置的上半字可歸零,如下面詳細(xì)說明。另外,注意,在一個(gè)實(shí)施例中,如果“cnt*ds”小于目標(biāo)寄存器rD的大小,則rD剩余的低階部分歸零??商鎿Q地,rD的任何剩余部分,例如,rD的剩余的低階部分,可由任何預(yù)定值填充(例如,零或任何其它預(yù)定值)。另外,在一個(gè)實(shí)施例中,如果ds小于ms,則在加載至rD時(shí),可對(duì)每一分量進(jìn)行舍入或截短(其中,該lvex指令還可包括截短或舍入控制字段,如下對(duì)于存儲(chǔ)指令的說明)。
在說明的實(shí)施例中,可將s/u字段、ms字段以及ds字段編碼為操作碼或子操作碼的部分。因此,在說明的實(shí)施例中,該lvex指令包括表示該操作碼的字段、表示rD的字段、表示rA的字段、表示rB的字段以及表示子操作碼的字段。然而,在替換實(shí)施例中,注意,s/u、ms以及ds字段還可在rB中連同cnt和stride(跨度)一起表示。
圖3表示圖2的lvex指令的替換實(shí)施例,其中不是將rB表示為操作數(shù),其中,rB包括附加參數(shù),而是作為該指令的操作碼和子操作碼的全部或部分提供所有這些參數(shù)。例如,可在該指令的子操作碼部分提供cnt、stride以及控制字段(s/u,ms和ds)。
注意,上面提供的對(duì)于控制字段s/u、ms和ds的說明適用于所有此處說明的加載指令。在使用該指令lvex時(shí),在此處說明的其它加載指令中,可存在這些控制字段的全部、一些或是完全不存在。還需要注意,對(duì)于此處的討論,rD通常指目標(biāo)寄存器,rA指向存儲(chǔ)器中第一個(gè)存儲(chǔ)器分量,并且rB,如果在該指令中存在的話,存儲(chǔ)該指令的一些或全部附加參數(shù)。注意,rB還可稱為控制寄存器,并且不必是GPR中的一個(gè)。類似地,rA可為控制寄存器或另一存儲(chǔ)器位置,并且不必是GPR中的一個(gè)。還要注意,在此處說明的所有指令(加載與存儲(chǔ))中,這些控制字段可編碼為該指令的操作碼或子操作碼的一部分或可位于寄存器rB中。如果它們位于寄存器rB中,則這些控制字段通常不出現(xiàn)在操作符之后,并由句點(diǎn)分隔,而將僅出現(xiàn)在寄存器rB中。還要注意,如果需要更多的參數(shù)或控制字段,此處的任何指令可表示,如必要的話,多于一個(gè)的寄存器,用于表示指令參數(shù)和控制字段,或者在共同的或不相連的存儲(chǔ)位置中可包含附加信息。
圖4表示加載多個(gè)矢量分量(lmvex)指令,其用來自存儲(chǔ)器的分量加載多個(gè)目標(biāo)寄存器。在使用該lmvex指令時(shí),該lmvex指令還可包括s/u字段、ms字段,以及ds字段,每一個(gè)在圖4中表示為緊隨操作符“l(fā)mvex”,并由句點(diǎn)分隔。圖4的lmvex指令還包括三個(gè)操作數(shù)rD,rA和rB。該lmvex指令用“cnt”個(gè)來自存儲(chǔ)器的矢量分量加載第一目標(biāo)寄存器rD,和所需的多個(gè)跟隨rD之后的寄存器(其中,寄存器rA指向存儲(chǔ)器中的第一個(gè)分量),使得任何目標(biāo)寄存器中的每一目標(biāo)分量的大小為ds。例如,如果9個(gè)半字(16位)大小的分量將加載至rD(其中,每一GPR為64位),則需要3個(gè)GPR。在一個(gè)實(shí)施例中,rD表示第一個(gè)寄存器,并且如果需要更多,則使用額外的相鄰寄存器。例如,如果rD表示該9個(gè)分量的寄存器R4,則使用寄存器R4,R5和R6。
在寄存器rB中存儲(chǔ)的附加參數(shù)包括cnt、stride(跨度)、skip(跳躍)和skip_cnt。參數(shù)cnt與stride與上述參考圖1的說明相同。也就是,存儲(chǔ)器中將要加載的分量可距離“stride”個(gè)ms大小的單位放置。該lmvex指令從存儲(chǔ)器距離“stride”個(gè)(ms大小的)單位加載分量,直到取回“skip_cnt”個(gè)分量。此時(shí),下一個(gè)分量位于“skip”個(gè)ms大小的單位處,并且重置該記錄skip_cnt的機(jī)制(例如,計(jì)數(shù)器)。因此,每次取回skip_cnt個(gè)分量時(shí)(從該指令的起始或從上次重置skip_cnt計(jì)數(shù)器),下一分量就位于“skip”(而不是“stride”)個(gè)ms大小的單位處。在一個(gè)實(shí)施例中,處理器14(例如,控制單元28中)中的計(jì)數(shù)器設(shè)置為“skip_cnt-1”,并在每次取數(shù)后遞減,直到該計(jì)數(shù)器終止(到達(dá)零),并再次設(shè)置為“skip_cnt-1”,以繼續(xù)取回位于“skip”個(gè)單位處的分量,直到取回“cnt”個(gè)分量。(可替換地,可將該計(jì)數(shù)器設(shè)置為零,并逐次增加,直到該計(jì)數(shù)器到達(dá)skip_cnt-1,替換實(shí)施例可使用其它方法記錄skip_cnt。)注意,stride和skip均可為有符號(hào)量。另外,在一個(gè)實(shí)施例中,在從存儲(chǔ)器加載“cnt”個(gè)分量后,最后一個(gè)寄存器中任何剩下的未填充字節(jié)用預(yù)定值填充(例如,零)。
在一個(gè)實(shí)施例中,該目標(biāo)大小(ds)應(yīng)大于或等于該存儲(chǔ)器分量大小(ms)。如果該目標(biāo)大小(ds)大于該存儲(chǔ)器分量大小(ms),則該s/u字段可用于適當(dāng)?shù)財(cái)U(kuò)展每一存儲(chǔ)器分量,如上對(duì)于lvex的說明。然而,在一個(gè)實(shí)施例中,如果ds小于ms,則每個(gè)分量可在加載至rD時(shí)舍入或截短,如下對(duì)于存儲(chǔ)指令的說明。
圖5表示圖4的lmvex指令的替換實(shí)施例,其中,不是將rB表示為操作數(shù),其中rB包括附加參數(shù),而是可將所有這些參數(shù)作為該指令子操作碼的全部或部分提供。例如,cnt、stride、skip、skip_cnt以及控制字段(s/u、ms和ds)可全部在該指令的子操作碼或操作碼部分指示。但在另一替換實(shí)施例中(未示出),各個(gè)指令參數(shù)可分配至指令字段或rB中的字段。例如,當(dāng)希望使該參數(shù)能夠基于計(jì)算結(jié)果或基于系統(tǒng)狀態(tài)動(dòng)態(tài)修改時(shí),可使用分配至rB中的字段。其它參數(shù)可為靜態(tài)特性,并且可編碼至該指令中的字段。
注意,對(duì)于此處說明的其余字段,任何附加參數(shù)將位于rB中,其中rB作為操作數(shù)提供至該指令。然而,應(yīng)當(dāng)理解,在替換實(shí)施例中,該指令可具有不同的格式,如上所述。
圖6表示另一加載多矢量分量(lmvex2)指令,其也用來自存儲(chǔ)器的分量加載多個(gè)目標(biāo)寄存器。在使用上述指令時(shí),該lmvex2指令還可包括s/u字段、ms字段和ds字段,每個(gè)在圖6中表示為跟隨操作符“l(fā)mvex2”,并由句點(diǎn)分隔。圖6的lmvex2還包括三個(gè)操作數(shù)rD,rA和rB。該指令lmvex2用來自存儲(chǔ)器的“cnt”個(gè)矢量分量(其中,寄存器rA指向存儲(chǔ)器中的第一個(gè)分量)加載該目標(biāo)寄存器rD(和所需的多個(gè)跟隨rD的寄存器),使得任一目標(biāo)寄存器中的每一目標(biāo)分量的大小為ds。例如,如果9個(gè)半字(16位)的分量將加載至rD(其中,每一GPR為64位),則至少需要3個(gè)GPR,并且如進(jìn)一步所述,則還需要超過3個(gè)的附加GPR。在一個(gè)實(shí)施例中,rD表示該第一個(gè)寄存器,并且如果需要更多,則使用附加的連續(xù)寄存器。例如,如果rD表示這9個(gè)分量的寄存器R4,則至少使用寄存器R4,R5和R6。
在寄存器rB中存儲(chǔ)的用于lmvex2的附加參數(shù)包括cnt、rcnt、stride和skip。參數(shù)cnt和stride如同上面對(duì)于lmvex的說明。也就是,存儲(chǔ)器中將要加載的分量可位于“stride”個(gè)ms大小的單位處,并且cnt定義要加載的分量的總數(shù)。該rcnt參數(shù)定義將加載至每一寄存器中目標(biāo)分量的最大數(shù)。(因此,所需的寄存器總數(shù)取決于cnt和rcnt。)該lmvex2指令從存儲(chǔ)器加載總共“cnt”個(gè)分量至一個(gè)或更多目標(biāo)寄存器(按照需要的數(shù)量),其中,僅有“rcnt”個(gè)分量加載至每一目標(biāo)寄存器。(因此,在一個(gè)實(shí)施例中,rcnt小于或等于可包含在單個(gè)GPR中的ds大小的目標(biāo)分量的總數(shù),并且rcnt還小于或等于cnt。)例如,該lmvex2指令從存儲(chǔ)器間隔“stride”個(gè)(ms大小的)單位加載分量至目標(biāo)寄存器(rD),直到取回“rcnt”個(gè)分量至單個(gè)寄存器。此時(shí),如果還沒有取回總共“cnt”個(gè)分量,則下一個(gè)“分量”位于“skip”個(gè)ms大小的單位處。來自存儲(chǔ)器相隔“stride”個(gè)(ds大小的)單位位置的分量然后加載至另一目標(biāo)寄存器(例如,rD+1等),直到取回“rcnt”個(gè)分量至該目標(biāo)寄存器(或者直到取回“cnt”個(gè)分量,無論哪一個(gè)先發(fā)生)。在取回“rcnt”分量后,如果還沒有取回“cnt”個(gè)分量,則繼續(xù)將位于“skip”個(gè)單位處的下一個(gè)分量加載至,例如rD+2。當(dāng)已經(jīng)取回“cnt”個(gè)分量時(shí),加載停止。因此注意,存儲(chǔ)器中對(duì)于給定目標(biāo)寄存器的分量距離“stride”個(gè)ms大小的單位,在將“skip”個(gè)ms大小的單位加至前一目標(biāo)寄存器的最后一個(gè)分量的地址后,取回后面寄存器的分量。還要注意,stride和skip均為有符號(hào)的量,允許負(fù)stride和skip。
注意,在替換實(shí)施例中,可使用skip_cnt參數(shù),使得在取回skip_cnt個(gè)分量后,下一分量位于“skip”個(gè)ms大小的單位處。按照這種方式,在將“rcnt”個(gè)分量載入至目標(biāo)寄存器中后,如果已取回skip_cnt個(gè)分量,或者基于stride,如果從該指令的起始或從上次重置skip_cnt以來還沒有加載skip_cnt個(gè)分量,則基于skip取回后面寄存器的下一個(gè)分量。
如上對(duì)于lvex的說明,處理器14中的計(jì)數(shù)器(例如,在控制單元28中)可用于在加載矢量分量期間記錄“cnt”。類似地,處理器14中的計(jì)數(shù)器還可用于在加載每一目標(biāo)寄存器期間記錄“rcnt”。替換實(shí)施例可使用其它方法記錄cnt和rcnt。另外,在一個(gè)實(shí)施例中,在取回“rcnt”個(gè)分量之后,每一目標(biāo)寄存器中的其余字節(jié)由預(yù)定值填充,例如零等。另外,在一個(gè)實(shí)施例中,在從存儲(chǔ)器加載“cnt”個(gè)分量后,所使用的最后一個(gè)寄存器中的剩余字節(jié)用預(yù)定值填充(例如,零)。
在一個(gè)實(shí)施例中,該目標(biāo)大小(ds)應(yīng)大于或等于該存儲(chǔ)器分量大小(ms)。如果該目標(biāo)大小(ds)大于該存儲(chǔ)器分量大小(ms),則該s/u字段可用于適當(dāng)?shù)財(cái)U(kuò)展每一存儲(chǔ)器分量,如同對(duì)于上面指令的上述說明。然而,在一個(gè)實(shí)施例中,如果ds小于ms,則在加載至rD時(shí),每一分量可被舍入或截短,如下面對(duì)于該存儲(chǔ)指令的說明。
圖7表示加載矢量分量流(lstrmvex)指令,其發(fā)起從存儲(chǔ)器向與目標(biāo)寄存器關(guān)聯(lián)的指定流加載矢量分量流。在使用上述指令時(shí),該lstrmvex指令也可包括s/u字段、ms字段和ds字段,每一個(gè)在圖7中表示為跟隨操作符“l(fā)strmvex”,并由句點(diǎn)分隔。圖7的lstrmvex指令還包括三個(gè)操作數(shù)rD,rA和rB。lstrmvex的附加參數(shù)還包括cnt、rcnt、stride、skip和skip_cnt。參數(shù)cnt、rcnt、stride、skip和skip_cnt通常與對(duì)于lvex,lmvex和lmvex2的上述說明相同。
lstrmvex指令用來自存儲(chǔ)器的總共“cnt”個(gè)分量加載多個(gè)rD的實(shí)例(其中,寄存器rA指向存儲(chǔ)器中的第一個(gè)分量),使得該目標(biāo)寄存器中的每一目標(biāo)分量的大小為ds。cnt和rcnt的值確定目標(biāo)rD實(shí)例的數(shù)量。該lstrmvex指令從間隔“stride”個(gè)ms大小的單位的存儲(chǔ)器加載矢量分量,直到取回“skip_cnt”個(gè)分量。此時(shí),將“skip*ms”添加至最后一個(gè)取回的地址(而不是“stride*ms”),以獲得將要加載的下一分量的地址。另外,此時(shí)重置記錄skip cnt的機(jī)制(例如,計(jì)數(shù)器)。因此,每次取回“skip_cnt”個(gè)分量時(shí)(自從該指令的起始或從上次重置該skip_cnt計(jì)數(shù)器),由“skip”,而不是“stride”參數(shù)指示下一分量的位置。
該“rcnt”參數(shù)定義每寄存器實(shí)例的目標(biāo)分量數(shù)。(因此,在一個(gè)實(shí)施例中,rcnt小于或等于單個(gè)GPR中ds大小的目標(biāo)分量的總數(shù),并且rcnt小于或等于cnt。)例如,該lstrmvex指令從存儲(chǔ)器(根據(jù)參數(shù)stride、skip以及skip_cnt,如上所述)加載分量至rD(即,rD的第一個(gè)實(shí)例),直到取回“rcnt”個(gè)分量。此時(shí),如果還沒有取回“cnt”個(gè)分量,則下一分量位于“stride”個(gè)ms大小的單位處(或者,如果取回skip_cnt分量,則下一分量位于“skip”個(gè),而不是“stride”個(gè)ms大小的單位處)。該lstrmvex指令然后繼續(xù)從存儲(chǔ)器(根據(jù)參數(shù)stride、skip和skip_cnt)向不同的rD實(shí)例(即,rD的第二個(gè)實(shí)例,覆蓋以前的rD值)加載分量,直到取回“rcnt”個(gè)分量(或直到取回“cnt”個(gè)分量,無論哪一個(gè)先發(fā)生)。如果,在取回“rcnt”個(gè)分量后,并還沒有取回“cnt”個(gè)分量,則繼續(xù)加載下一分量至rD(rD的另一實(shí)例)。當(dāng)取回“cnt”個(gè)分量時(shí),加載停止。rD的每一實(shí)例對(duì)應(yīng)于從存儲(chǔ)器取回的rcnt個(gè)分量的唯一集合。隨著rD每一實(shí)例的出隊(duì),用分量流中的下一rcnt個(gè)分量集合加載下一實(shí)例,直到加載該流的總共cnt個(gè)分量。
在一個(gè)實(shí)施例中,rD的實(shí)例基于后面指令中rD的使用或位置出隊(duì)。例如,在一個(gè)實(shí)施例中,如果rD用作后面指令中特定源寄存器,則rD實(shí)例出隊(duì)。因此,在執(zhí)行后面指令后(rD作為特定源寄存器),將在rD中加載下一個(gè)“rcnt”個(gè)分量(假設(shè)還沒有達(dá)到“cnt”個(gè)分量)。然而,如果rD沒有用作特定源寄存器(即,如果其為不同的目標(biāo)寄存器,或其為目標(biāo)寄存器),則rD不出隊(duì),并且不將下一“rcnt”個(gè)分量加載至rD。在替換實(shí)施例中,以其它方式指示是否出隊(duì)的選項(xiàng),例如,通過指令中的標(biāo)志,或通過不同的操作碼等(例如,對(duì)應(yīng)于要求出隊(duì)的指令的特殊子集等)??蛇x出隊(duì)的示例將在后面參考圖23-26說明。
如上對(duì)于上面指令的說明,處理器14中的計(jì)數(shù)器(例如,在控制單元28中)可在加載矢量分量期間用于記錄“cnt”。類似地,處理器14中的寄存器還可在加載每一目標(biāo)寄存器期間記錄“rcnt”。計(jì)數(shù)器還可用于記錄skip_cnt。替換實(shí)施例可使用其它方法記錄cnt,rcnt,和skip_cnt。另外,在一個(gè)實(shí)施例中,在加載“rcnt”個(gè)分量后,每一目標(biāo)寄存器或寄存器實(shí)例中的任何剩余字節(jié)由預(yù)定值填充,例如零。另外,在一個(gè)實(shí)施例中,從存儲(chǔ)器加載“cnt”個(gè)分量后,所使用的最后一個(gè)目標(biāo)寄存器或寄存器實(shí)例中的剩余字節(jié)用預(yù)定值填充(例如零)。還要注意,stride和skip可為有符號(hào)量,允許負(fù)的stride和skip。
在一個(gè)實(shí)施例中,目標(biāo)大小(ds)應(yīng)大于或等于存儲(chǔ)器分量大小(ms)。如果該目標(biāo)大小(ds)大于該存儲(chǔ)器分量大小(ms),則s/u字段可用于適當(dāng)?shù)赝卣姑恳淮鎯?chǔ)器分量,如對(duì)于上面指令的上述說明。然而,在一個(gè)實(shí)施例中,如果ds小于ms,則在加載至rD時(shí),可舍入或截短每一分量。
注意,在替換實(shí)施例中,lstrmvex指令的各個(gè)參數(shù)的每一個(gè)可為可選的,并且此處說明的其它指令的替換實(shí)施例也可能如此,例如lvex、lmvex和lmvex2指令。
圖8表示存儲(chǔ)矢量分量(stvex)指令,其從源寄存器向存儲(chǔ)器存儲(chǔ)分量。該stvex指令可認(rèn)為是lvex指令的對(duì)應(yīng)。在一個(gè)實(shí)施例中,該stvex指令使用附加控制字段,例如,s/u字段、ms字段、ss字段和h/l字段,在圖8中將每一個(gè)表示為跟隨操作符“stvex“,并由句點(diǎn)分隔。在一個(gè)實(shí)施例中,這些控制字段的每一個(gè)都存在;然而,在替換實(shí)施例中,僅存在這些控制字段中的一些,或者完全沒有。在一個(gè)實(shí)施例中,s/u字段(有符號(hào)或無符號(hào)擴(kuò)展)和ms字段(存儲(chǔ)器大小)與上面對(duì)于加載指令的說明相同。在一個(gè)實(shí)施例中,ss字段對(duì)應(yīng)于源分量大小字段,其指示源寄存器中每一源分量的大小。例如,在一個(gè)實(shí)施例中,該ss字段可設(shè)置為sb、sh或sw之一,以分別指示將存儲(chǔ)至存儲(chǔ)器的源分量是否為字節(jié)、半字或字。
圖8的stvex指令還包括三個(gè)操作數(shù)rS、rA和rB。在圖8的實(shí)施例中,在寄存器rB中指定了附加參數(shù),其中這些附加參數(shù)包括cnt和stride。(因此,在使用上面的加載指令時(shí),每一rS、rA和rB可指示標(biāo)量寄存器34中GPR中的一個(gè)。)該stvex指令從源寄存器rS向存儲(chǔ)器存儲(chǔ)“cnt”個(gè)ss大小的分量,其中,第一個(gè)分量將存儲(chǔ)在由寄存器rA指向的存儲(chǔ)器位置,使得存儲(chǔ)器中的每一目標(biāo)分量具有ms大小(并且可選地截短或拓展,如s/u字段和h/l字段指示)。
還可指定跨度(stride)值,其指示存儲(chǔ)器中的分量如何分隔。也就是,在存儲(chǔ)時(shí),存儲(chǔ)器中的分量將距離“stride”個(gè)ms大小的單位。例如,跨度1可用于存儲(chǔ)“cnt”個(gè)相鄰的“ms”大小的分量。類似地,跨度3可用于向存儲(chǔ)器存儲(chǔ)“cnt”個(gè)“ms”大小的分量,每一個(gè)彼此間距離3個(gè)“ms”大小的單位。另外,注意,該跨度值可為有符號(hào)值。
在一個(gè)實(shí)施例中,h/l字段為截短控制字段。例如,如果ss大于ms(即,源大小大于存儲(chǔ)器大小),則該h/l字段可用于指示如何截短該源分量。例如,如果該h/l字段為“h”,則截短該源分量的低階部分。然而,如果該h/l字段為“l(fā)”,則截短該源分量的高階部分。注意,在替換實(shí)施例中,stvex指令還包括舍入控制字段(除了或替換該截短控制字段),使得如果,例如,ss大于ms,則對(duì)各值進(jìn)行舍入,而不是截短。例如,在一個(gè)實(shí)施例中,可基于源分量的低階部分,舍入該源分量的高階部分。
在一個(gè)實(shí)施例中,如果該源分量大小(ss)小于該存儲(chǔ)器分量大小(ms),則該s/u字段可用于在存儲(chǔ)至存儲(chǔ)器中時(shí)適當(dāng)?shù)財(cái)U(kuò)展每一源分量??墒褂谩皊”指示分量是有符號(hào)的,并且因此應(yīng)當(dāng)進(jìn)行符號(hào)擴(kuò)展,而使用“u”指示分量是無符號(hào)的,并因此應(yīng)當(dāng)進(jìn)行零擴(kuò)展。
在表示的實(shí)施例中,此處說明的任何存儲(chǔ)指令的s/u字段、ms字段,ss字段和h/l字段可編碼為操作碼或子操作碼的一部分。因此,在表示的實(shí)施例中,stvex指令包括指示該操作碼的字段、指示rS的字段、指示rA的字段、指示rB的字段和指示子操作碼的字段。然而,在替換實(shí)施例中,注意,s/u、h/l、ms、和ss字段,連同cnt和stide,還可在rB中指示。另外,在使用該加載指令時(shí),每一附加參數(shù)還可編碼為操作碼或子操作碼的一部分,無需指定寄存器,例如rB。因此注意,在替換實(shí)施例中,此處說明的任何存儲(chǔ)指令可具有各種不同的格式。另外注意,將參考在寄存器rB中存儲(chǔ)附加參數(shù)說明該存儲(chǔ)指令。(如上所述,如果需要附加參數(shù)和控制字段,則在該指令中可指示多個(gè)寄存器或存儲(chǔ)位置。)注意,上面提供的對(duì)于控制字段s/u、ms、ss和h/l的說明適用于此處說明的所有存儲(chǔ)指令。在使用指令stvex時(shí),在此處說明的其它存儲(chǔ)指令中可存在這些控制字段中的全部,一些,或完全不存在。還要注意,對(duì)于此處的討論,rS通常指源寄存器,rA指向?qū)⒁鎯?chǔ)第一個(gè)分量的存儲(chǔ)器位置,并且rB,如果在該指令中存在的話,保存該指令的一些或全部附加參數(shù)。
圖9表示存儲(chǔ)多矢量分量(strmvex)指令,其從多個(gè)源寄存器向存儲(chǔ)器存儲(chǔ)分量。該stmvex指令可認(rèn)為是lmvex指令的存儲(chǔ)對(duì)應(yīng)。在一個(gè)實(shí)施例中,該stmvex指令使用附加控制字段,例如s/u字段、ss字段、ds字段和h/l字段,每一個(gè)在圖9中表示為跟隨操作符“stmvex”,并由句點(diǎn)分隔。上面提供的對(duì)于stvex指令的這些字段的說明也適用于該stmvex指令。
圖9的stmvex指令還包括三個(gè)操作數(shù)rS,rA和rB。在圖9的實(shí)施例中,在寄存器rB中指定附加參數(shù)。其中,這些附加的參數(shù)包括cnt、stride、skip和skip_cnt。該stmvex指令從多個(gè)源寄存器rS(以及rS之后的寄存器,例如,rS+1,rS+2,按照需要)向存儲(chǔ)器存儲(chǔ)“cnt”個(gè)ss大小的分量,其中,寄存器rA指向?qū)⒁鎯?chǔ)的第一個(gè)分量的地址,并且使得存儲(chǔ)器中的每一分量具有ms的大小(并且可選地截短或擴(kuò)展,根據(jù)s/u和h/l字段的指示)。
在使用stmvex時(shí),跨度值可指示如何分隔存儲(chǔ)器中的分量。因此,來自rS的源分量存儲(chǔ)至存儲(chǔ)器,使得它們距離“stride”個(gè)(ms大小的)單位放置,直到存儲(chǔ)了“skip_cnt”個(gè)分量。此時(shí),向最后一個(gè)存儲(chǔ)的分量的地址增加“skip*ms”(而不是“stride*ms”),以獲得將要存儲(chǔ)的下一個(gè)分量的地址。另外,此時(shí),重置用于記錄skip_cnt的機(jī)制(例如,計(jì)數(shù)器)。因此,每次存儲(chǔ)“skip_cnt”個(gè)分量時(shí)(從該指令的開始或從上次重置skip_cnt計(jì)數(shù)器),將要存儲(chǔ)的下一個(gè)分量的地址由skip參數(shù)指示,而不是由stride參數(shù)指示。在將來自rS的源分量存儲(chǔ)至存儲(chǔ)器時(shí),將來自下一源寄存器的源分量(例如,rS+1等)基于stride、skip和skip_cnt參數(shù)存儲(chǔ)至存儲(chǔ)器,直到存儲(chǔ)了“cnt”個(gè)分量。
如上對(duì)于加載指令的說明,處理器14中的計(jì)數(shù)器(例如控制單元28中)可用于適當(dāng)?shù)赜涗沜nt和skip_cnt。例如,計(jì)數(shù)器可用于指示skip_cnt個(gè)分量,其中,在存儲(chǔ)了skip_cnt個(gè)分量后,重置該計(jì)數(shù)器,并且將下一skip_cnt個(gè)分量存儲(chǔ)在起始處由skip指示的位置。繼續(xù)如此,例如,直到存儲(chǔ)了cnt個(gè)分量(其可由,例如,另一計(jì)數(shù)器指示)。替換實(shí)施例可使用其它方法記錄cnt和skip_cnt。
注意,在一個(gè)實(shí)施例中,如果ss小于ms,則可適當(dāng)?shù)財(cái)U(kuò)展每一源分量,如同s/u字段(如對(duì)于stvex的說明)所指示,以生成存儲(chǔ)器目標(biāo)分量。另外,在一個(gè)實(shí)施例中,如果ss大于ms,則適當(dāng)?shù)亟囟堂恳辉捶至?,如同h/l字段(如對(duì)于stvex的說明)所指示,以生成存儲(chǔ)器目標(biāo)分量。
圖10表示另一存儲(chǔ)多矢量分量(stmvex2)指令,其從多個(gè)目標(biāo)寄存器向存儲(chǔ)器存儲(chǔ)分量。該stmvex2指令可視為lmvex2指令的存儲(chǔ)對(duì)應(yīng)。在一個(gè)實(shí)施例中,該stmvex2指令使用附加控制參數(shù),例如s/u字段、ss字段、ds字段和h/l字段,每一個(gè)在圖10中表示為跟隨操作符“stmvex2”,并由句點(diǎn)分隔。上面對(duì)于stvex和stmvex指令的這些控制字段提供的說明也適用于stmvex2指令。
圖10的stmvex2指令還包括三個(gè)操作數(shù)rS、rA和rB。在圖10的實(shí)施例中,在rB中指定附加參數(shù),其中,這些附加參數(shù)包括cnt、rcnt、stride和skip。該stmvex2指令從多個(gè)源寄存器rS(以及rS之后的寄存器,例如,rS+1、rS+2,按照需要)向存儲(chǔ)器存儲(chǔ)“cnt”個(gè)ss大小的分量,其中,寄存器rA指向?qū)⒁鎯?chǔ)的第一個(gè)分量的地址,并且使得存儲(chǔ)器中的每一分量具有ms的大小(并且可選地截短或擴(kuò)展,如s/u和h/l字段所指示)。該rcnt參數(shù)定義將要存儲(chǔ)的每個(gè)源寄存器的源分量的數(shù)量,并且該cnt參數(shù)定義將要存儲(chǔ)的分量的總數(shù)。
在使用stmvex2時(shí),跨度(stride)值可指示如何分隔存儲(chǔ)器中的分量。因此,來自rS的源分量存儲(chǔ)至存儲(chǔ)器,使得它們距離“stride”個(gè)(ms大小的)單位放置。在一個(gè)實(shí)施例中,在存儲(chǔ)“rcnt”個(gè)來自給定源寄存器(rS)的分量后,如果要存儲(chǔ)其余的分量,則向最后一個(gè)存儲(chǔ)的分量的地址增加“skip*ms”(而不是“stride*ms”),以獲得將要存儲(chǔ)的下一個(gè)分量的地址。然后將來自下一個(gè)源寄存器(例如,rS+1等)的“rcnt”個(gè)源分量利用所指示的“stride”值存儲(chǔ)至存儲(chǔ)器。繼續(xù)如此,直到存儲(chǔ)了“cnt”個(gè)分量。注意,在一個(gè)實(shí)施例中,如“rcnt*ss”小于該源寄存器的大小,則忽略每一源寄存器的其余低階部分。還要注意,“stride”和“skip”可為有符號(hào)的量,從而允許負(fù)的stride和skip。
注意,在替換實(shí)施例中,還可使用skip_cnt參數(shù),使得在存儲(chǔ)了skip_cnt個(gè)分量之后,下一個(gè)分量位于“skip”個(gè)ms大小的單位處(而不是“stride”個(gè)ms大小的單位處)。按照這種方式,在向存儲(chǔ)器存儲(chǔ)了“rcnt”個(gè)分量后,如果存儲(chǔ)了skip_cnt個(gè)分量,或者基于stride,如果自從該指令的起始或從上次重置skip_cnt以來沒有存儲(chǔ)skip_cnt個(gè)分量,則基于skip將來自后面寄存器的下一個(gè)分量存儲(chǔ)至存儲(chǔ)器中的位置。
如上對(duì)于該加載指令的說明,處理器14中的計(jì)數(shù)器(例如,控制單元28中)可用于適當(dāng)?shù)赜涗沜nt和rcnt。替換實(shí)施例可使用其它方法記錄cnt和rcnt。
注意,在一個(gè)實(shí)施例中,如果ss小于ms,則適當(dāng)擴(kuò)展每一源分量,如同s/u字段所指示(如對(duì)于stvex的說明),以生成存儲(chǔ)器目標(biāo)分量。另外,在一個(gè)實(shí)施例中,如果ss大于ms,則適當(dāng)?shù)亟囟堂恳辉捶至浚缤琱/l字段所指示(如同對(duì)于stvex和stmvex的說明),以生成存儲(chǔ)器目標(biāo)分量。還可以可選地指定舍入,如前對(duì)于stvex指令的說明。
圖11表示存儲(chǔ)矢量分量流(ststrmvex)指令,其發(fā)起從指定流向存儲(chǔ)器存儲(chǔ)矢量分量流。該ststrmvex指令可視為lstrmvex指令的存儲(chǔ)對(duì)應(yīng)。在一個(gè)實(shí)施例中,該ststrmvex指令使用附加控制字段,例如s/u字段、ss字段、ds字段和h/l字段,每一個(gè)在圖11中表示為跟隨操作符“ststrmvex”,并由句點(diǎn)分隔。對(duì)于stvex、stmvex和stmvex2指令的這些字段的說明在這里也適用于ststrmvex指令。
圖11的ststrmvex指令還包括三個(gè)操作數(shù)rS、rA和rB。在圖11的實(shí)施例中,附加參數(shù)在寄存器rB中指定,其中,這些附加參數(shù)包括cnt、rcnt、stride、skip和skip_cnt。該ststrmvex指令向存儲(chǔ)器存儲(chǔ)具有總共“cnt”個(gè)分量的源寄存器rS的多個(gè)實(shí)例,其中,rA指向第一個(gè)將要存儲(chǔ)的分量的地址。該“cnt”參數(shù)因此定義將要存儲(chǔ)的分量的總數(shù),并且“rcnt”參數(shù)定義每個(gè)源寄存器rS的實(shí)例的源分量數(shù)。該ststrmvex指令從rS(即,rS的第一個(gè)實(shí)例)向存儲(chǔ)器存儲(chǔ)分量,使得它們距離“stride”個(gè)(ms大小的)單位,直到存儲(chǔ)了“skip_cnt”個(gè)分量。此時(shí),將“skip*ms”添加至最后一個(gè)存儲(chǔ)的分量的地址(而不是“stride*ms”),以獲得下一分量的地址。另外,此時(shí),重置記錄skip_cnt的機(jī)制(例如,計(jì)數(shù)器)。因此,每次存儲(chǔ)“skip_cnt”個(gè)分量時(shí)(自從該指令的起始或從上次重置該skip_cnt計(jì)數(shù)器),由“skip”參數(shù),而不是“stride”參數(shù)指示下一分量的位置。
另外,在從rS的給定實(shí)例存儲(chǔ)“rcnt”個(gè)分量后,如果還有分量要存儲(chǔ)(即,還沒有存儲(chǔ)“cnt”個(gè)分量),則將“stride*ms”添加至最后一個(gè)存儲(chǔ)的分量的地址(除非已經(jīng)存儲(chǔ)了“skip_cnt”個(gè)分量,在這種情況下,將“skip*ms”,而不是“stride*ms”添加至最后一個(gè)存儲(chǔ)的分量的地址),以獲得從rS的下一個(gè)實(shí)例存儲(chǔ)的第一個(gè)分量的地址(例如,在執(zhí)行rS用作目標(biāo)寄存器的指令后存儲(chǔ))。例如,在一個(gè)實(shí)施例中,在rS用作指令的目標(biāo)寄存器時(shí)實(shí)例入隊(duì)。例如,如果rS用作后面指令的目標(biāo)寄存器,并且還沒有存儲(chǔ)“cnt”個(gè)分量,則根據(jù)stride、skip和skip_cnt參數(shù)將來自rS(該后面指令的目標(biāo)寄存器)的“rcnt”個(gè)分量(包括,例如,后面指令結(jié)果的全部或部分)存儲(chǔ)至存儲(chǔ)器。在此實(shí)施例中,如果rS沒有用作指令的目標(biāo)寄存器,則其在執(zhí)行該指令時(shí)不入隊(duì)(并因此不存儲(chǔ)為該矢量流的一部分)。在替換實(shí)施例中,可使用其它機(jī)制,例如指令中的標(biāo)志,或者操作碼(例如,對(duì)應(yīng)于要求入隊(duì)的指令的特殊子集等)指示rS的實(shí)例是否入隊(duì)。
注意,在一個(gè)實(shí)施例中,如果“rcnt*ss”小于源寄存器的大小,則忽略該源寄存器的剩余低階部分。還要注意,“stride”和“skip”可為有符號(hào)的量,從而允許負(fù)的stride和skip。
如上對(duì)于加載指令的說明,處理器14中的計(jì)數(shù)器(例如,在控制單元28中)可用于適當(dāng)?shù)赜涗沜nt、rcnt、skip和skip_cnt。替換實(shí)施例可使用其它方法記錄這些參數(shù)。
注意,在一個(gè)實(shí)施例中,如果ss小于ms,則每一源分量被適當(dāng)?shù)財(cái)U(kuò)展,如s/u字段所指示(如對(duì)于stvex的說明),以生成存儲(chǔ)器目標(biāo)分量。另外,在一個(gè)實(shí)施例中,如果ss大于ms,則每一源分量被適當(dāng)?shù)亟囟?,如h/l字段所指示(如對(duì)于stvex和stmvex的說明),以生成存儲(chǔ)器目標(biāo)分量??商鎿Q地,可使用舍入生成存儲(chǔ)器目標(biāo)分量。
將參考圖12-16說明上述各種不同加載指令的示例。圖12表示存儲(chǔ)器的一部分100,其可對(duì)應(yīng)于,例如,圖1的存儲(chǔ)器12的全部或一部分。為了說明簡(jiǎn)單起見,將存儲(chǔ)器部分100示出為128位寬的存儲(chǔ)器,但在給定實(shí)施例中的實(shí)際配置可以不同。例如,存儲(chǔ)器部分100包括矩陣102,其第一行存儲(chǔ)在位置0x12-0x16(對(duì)應(yīng)于半字A、B和C),第二行存儲(chǔ)在位置0x22-0x26(對(duì)應(yīng)于半字D、E和F),并且第三行存儲(chǔ)在位置0x32-0x36(對(duì)應(yīng)于半字G、H和I)。存儲(chǔ)器部分100包括矩陣106,其第一行存儲(chǔ)在位置0x54-0x58(對(duì)應(yīng)于半字K、L和M),第二行存儲(chǔ)在位置0x64-0x68(對(duì)應(yīng)于半字N、O和P),第三行存儲(chǔ)在位置0x74-0x78(對(duì)應(yīng)于半字Q、R和S)。存儲(chǔ)器部分100包括矩陣108,其第一行存儲(chǔ)在位置0x8A-0x8E(對(duì)應(yīng)于半字aa、bb和cc),第二行存儲(chǔ)在位置0x9A-0x9E(對(duì)應(yīng)于半字dd、ee和ff),第三行存儲(chǔ)在位置0xAA-0xAE(對(duì)應(yīng)于半字gg、hh和ii)。存儲(chǔ)器部分100包括存儲(chǔ)在位置0x46-0x4E的矢量104,其對(duì)應(yīng)于半字pp、qq、rr、ss和tt。存儲(chǔ)器部分100還包括分別存儲(chǔ)在位置0xA2、0xA3、0xA4和0xA5的字節(jié)大小的分量T、U、V和W。
注意,在替換實(shí)施例中,存儲(chǔ)器部分100可以不同方式尋址。另外,存儲(chǔ)器部分100可為任何大小,并可保存任何類型的信息,還可位于數(shù)據(jù)處理系統(tǒng)的任何位置。
當(dāng)矩陣存儲(chǔ)為圖12中的矩陣102和106時(shí),上述加載和存儲(chǔ)指令可用于執(zhí)行,例如,矩陣運(yùn)算。也就是,注意到每一矩陣102和106存儲(chǔ)為3×3二維矩陣。另外,在一個(gè)實(shí)施例中,矩陣運(yùn)算的結(jié)果還可以相同的格式存儲(chǔ),如3×3二維矩陣,例如,矩陣108。因此,注意到,下面的偽碼可用于執(zhí)行矩陣102和矩陣106第一行的和,以獲得最終的第一行矩陣108。
/*R7存儲(chǔ)0x12,并且R8存儲(chǔ)cnt值3和stride值1*/lvex.u.mh.dh R0,R7,R8/*R9存儲(chǔ)0x54,并且R10存儲(chǔ)cnt值3和stride值1*/lvex.u.mh.dh R1,R9,R10add.h R2,R0,R1/*對(duì)R0和R1中四個(gè)獨(dú)立的半字分量求和,并將結(jié)果存儲(chǔ)至R2*//*R11存儲(chǔ)0x8A,并且R12存儲(chǔ)cnt值3和stride值1*/stvex.u.mh.sh R2,R11,R12注意,在此實(shí)施例中,R7存儲(chǔ)矩陣102的第一行的起始地址(0x12),并且R8用作rB,以存儲(chǔ)上面參考圖2和圖3說明的cnt和stride參數(shù)。類似地,R9存儲(chǔ)矩陣106的第一行的起始地址(0x54),并且R10用作rB,以存儲(chǔ)cnt和stride參數(shù)。R11用于存儲(chǔ)R2的第一分量將要存儲(chǔ)的位置(0x8A),并且R12用于存儲(chǔ)cnt和stride參數(shù)。
圖13表示執(zhí)行上述偽碼后的寄存器文件(例如,圖1的標(biāo)量寄存器文件34等)。注意,利用執(zhí)行第一條lvex指令,將矩陣102的A、B和C加載至R0,R0的最后一個(gè)字段由預(yù)定值填充(例如,當(dāng)前實(shí)施例中的零)。類似地,利用執(zhí)行第二條lvex指令,將矩陣106的K、L和M加載至R1。因此,注意,僅利用單個(gè)指令即可容易地加載每一矩陣的第一行,其允許指定cnt和stride。該add.h指令對(duì)R0和R1中的四個(gè)獨(dú)立的半字分量進(jìn)行求和,并且將四個(gè)最終的半字分量放入R2。注意,lvex指令允許用零填充R0和R1的最后一個(gè)未使用的字段(因?yàn)閏nt*ds小于64位,R0和R1的寬度),這兩個(gè)寄存器的和在R2的不想要的字段中導(dǎo)致零。按照這種方式,不是在R2的不想要的字段中具有未知值(或由于未知值的和造成出現(xiàn)不希望的異常條件),而是為已知的預(yù)定值(在此示例中為零)。然后使用stvex指令將R2的頭3個(gè)字段存儲(chǔ)至存儲(chǔ)器,使得aa=A+K,bb=B+L和cc=C+H。
然后通過下面的偽碼完成矩陣102和106的和。
add R7,0x10 /*R7現(xiàn)在存儲(chǔ)0x22*/add R9,0x10 /*R9現(xiàn)在存儲(chǔ)0x64*/add R11,0x10 /*R11現(xiàn)在存儲(chǔ)0x9A*/lvex.u.mh.dh R0,R7,R8lvex.u.mh.dh R1,R9,R10add.h R2,R0,R1stvex.u.mh.sh R2,R11,R12add R7,0x10 /*R7現(xiàn)在存儲(chǔ)0x32*/add R9,0x10 /*R9現(xiàn)在存儲(chǔ)0x74*/add R11,0x10 /*R11現(xiàn)在存儲(chǔ)0xAA*/lvex.u.mh.dh R3,R7,R8lvex.u.mh.dh R4,R9,R10add.h R5,R0,R1stvex.u.mh.sh R5,R11,R12頭三個(gè)求和指令增加了R7,R9和R11的值,使得它們均分別指向每一矩陣102、106和108的第二行的第一個(gè)分量。圖14表示執(zhí)行上面代碼后圖13的寄存器文件。頭兩個(gè)lvex指令后,D、E和F載入至R0,并且N、O和P載入至R1。該add.h指令對(duì)R0和R1中的四個(gè)獨(dú)立半字分量求和,并將最終的四個(gè)半字分量放入R2。然后由stvex指令將該結(jié)果存儲(chǔ)至矩陣108中的存儲(chǔ)器,使得dd=D+N、ee=E+O以及ff=F+P。第五至第七條求和指令再一次地增加了R7、R9和R11的值,使得它們均分別指向每一矩陣102、106和108的第三行的第一個(gè)分量。注意,用于加載矩陣102和106的第三行的lvex指令將它們分別加載至R3和R4,而不是R0和R1。應(yīng)當(dāng)理解,替換實(shí)施例可按照需要使用這些寄存器中的任一個(gè),以執(zhí)行這些操作。例如,可連續(xù)覆蓋同樣的寄存器(例如,R0和R1)或可使用不同的寄存器(例如R3和R4)。最后一條存儲(chǔ)指令將結(jié)果存儲(chǔ)至矩陣108,使得gg=G+Q、hh=H+R以及ii=I+S。
注意,在替換實(shí)施例中,可使用不同的代碼和指令對(duì)矩陣102和106進(jìn)行求和,并將結(jié)果存儲(chǔ)至108。例如,上面的偽碼可寫在循環(huán)中,使得在循環(huán)體中對(duì)于這些矩陣的每一行具有兩個(gè)lvex和一個(gè)stvex指令,其中,該循環(huán)執(zhí)行3次,每行一次??商鎿Q地,可使用不同的矢量加載和存儲(chǔ)指令將所有的矩陣102和矩陣106一次送入寄存器文件。這可使用,例如lmvex或lmvex2指令完成。例如,圖15和16表示將矩陣102加載至寄存器R0、R1和R2的兩個(gè)示例。
圖15表示例如使用lvmvex指令加載矩陣102后的寄存器文件。在下面的lvmex指令中,假設(shè)R7指向矩陣102的起始(R7存儲(chǔ)0x12),并且R8對(duì)應(yīng)于rB,其存儲(chǔ)cnt值9,stride值1,skip值6和skip_cnt值3。因此,可使用下列指令lmvex.u.mh.dh R0,R7,R8/*cnt=9,stride=1,skip=6且skip_cnt=3*/因此,如圖15中所示,分量A、B和C載入至R0,每一個(gè)在存儲(chǔ)器中連續(xù),因?yàn)檫@些分量距離“stride*ms”或1個(gè)半字放置。然后,由于加載了skip_cnt個(gè)(即,3個(gè))分量,將位于“skip*ms”(即,6個(gè)半字)處,而不是“stride*ms”(即,1個(gè)半字)處的下一個(gè)分量D作為R0的第四個(gè)分量加載。然后,分量E和F加載至R1,其為R0之后的寄存器,直到再一次地加載skip_cnt分量,從而需要“跳躍(skip)”至下一個(gè)分量G,其位于6個(gè)半字處。繼續(xù)如此,直到加載了“cnt”個(gè)分量。因此,最后一個(gè)分量I加載至R2的第一個(gè)字段。注意,R2的其余字段由預(yù)定值填充(在此示例中為零)。
圖16表示使用例如,lmvex2指令加載矩陣102后的寄存器文件,在該指令中指定cnt、rcnt、skip和skip_cnt。在下面的lmvex指令中,假設(shè)R7指向矩陣102的起始(R7存儲(chǔ)0x12),并且R8對(duì)應(yīng)于rB,其存儲(chǔ)cnt值9,rcnt值3,stride值1和skip值6。因此,可使用下面的指令lmvex2.u.mh.dh R0,R7,R8/*cnt=9,rcnt=3,stride=1,skip=6*/因此,如圖16中所示,分量A、B和C載入至R0,每一個(gè)在存儲(chǔ)器中連續(xù),因?yàn)榭缍?stride)為“stride*ms”或1個(gè)半字。此時(shí),在R0中載入rcnt個(gè)分量(即,3個(gè)),并且因此,從“skip*ms”(即,6個(gè)半字)位置處加載下一分量D。此外,不將下一分量D作為R0的第四個(gè)分量加載,如同在圖15的前一示例中利用lvmvex指令的做法,而是作為R1(其為R0之后的寄存器)的第一個(gè)分量加載,因?yàn)镽0已經(jīng)具有“rcnt”個(gè)分量。分量E和F也加載至R1,對(duì)于R1完成值為3的rcnt。由于已經(jīng)在R1中加載了rcnt個(gè)分量(并且,還沒有加載cnt個(gè)分量,即9個(gè)),因而從由skip確定的位置,即6個(gè)半字處的位置,將下一個(gè)分量G取回至R2。另外,分量H和I也載入至R2。此時(shí),已經(jīng)加載了cnt個(gè)分量。還要注意,R0,R1和R2的每一未使用的字段由預(yù)定值填充(在此例中為零)。
在替換實(shí)施例中,如上所述,lvmvex2指令還可允許指定skip_cnt字段。例如,還可使用lmvex2指令,如上利用值為3的skip_cnt,如圖16所示加載矩陣102。在此示例中(仍然指圖16和上面的具有所有同樣參數(shù)和附加的skip_cnt=3的lvmvex2指令),分量A、B和C載入至R0,每一個(gè)在存儲(chǔ)器中連續(xù),因?yàn)檫@些分量距離“stride*ms”或1個(gè)半字放置。然后,由于已經(jīng)加載了skip_cnt個(gè)(即,3個(gè))分量,則加載位于“skip*ms”(即,6個(gè)半字)處,而不是位于“stride*ms”(即,1個(gè)半字)處的下一分量D。另外注意,僅在每一寄存器中加載rcnt個(gè)(即,3個(gè))分量。因此,不將下一分量D作為R0的第四分量加載,如同圖15的前一示例使用lmvex指令那樣,而是作為R1(其為R0后面的寄存器)的第一個(gè)分量加載。然后分量E和F也加載至R1。由于再一次地加載了skip_cnt個(gè)分量(并且還沒有加載cnt個(gè)分量,即9個(gè)),則下一分量G位于6個(gè)半字處。另外,由于已經(jīng)將rcnt個(gè)分量加載至R1,則將下一分量G連同H和I一起加載至R2。此時(shí),加載了cnt個(gè)分量。還要注意,R0,R1和R2的每一未使用的字段由預(yù)定值填充(在此例中為零)。
因此,采用上述加載指令的各種實(shí)施例,諸如矩陣102的矩陣可容易地以多種方式從存儲(chǔ)器移動(dòng)至寄存器文件。還要注意,使用rcnt參數(shù)允許減少在使用傳統(tǒng)編程方法從存儲(chǔ)器加載矢量分量時(shí)所需的掩碼運(yùn)算。
在替換實(shí)施例中,上述指令可比此處說明的指令包括更多,更少或不同的參數(shù)。例如,在不同的實(shí)施例中,該lmvex2指令可以考慮,也可以不考慮skip_cnt參數(shù)。還要注意,上面提供的示例指令將s/u字段設(shè)置為u,使得如果有必要的話,在存儲(chǔ)至寄存器時(shí),對(duì)這些分量進(jìn)行零擴(kuò)展。在一個(gè)實(shí)施例中,可將s/u字段設(shè)置為“s”,或者省略該字段。例如,在一個(gè)實(shí)施例中,如果ms=ds,則省略或忽略該s/u字段。
圖16還表示加載指令的示例,其從存儲(chǔ)器部分100的位置0xA2、0xA3和0xA4向R4加載T、U和V。例如,可使用下面的lvex指令,其中假設(shè)R10存儲(chǔ)起始值0xA2并且R11存儲(chǔ)cnt值3和stride值1。
lvex.u.mb.dh R4,R10,R11注意,存儲(chǔ)器大小(mb)與目標(biāo)大小(dh)是不同的。也就是,在此處說明的所有指令中,可獨(dú)立地設(shè)置每一存儲(chǔ)器大小和目標(biāo)大小(在存儲(chǔ)指令的情況下為源大小),使得它們相同或者不同。在上面的示例中,注意,存儲(chǔ)器大小設(shè)置為mb,表明存儲(chǔ)器中每一分量(T、U和V)的大小為字節(jié)。然而,目標(biāo)大小設(shè)置為dh,以表示R4中目標(biāo)大小為半字,其大于字節(jié)。因此,在R4中加載cnt個(gè)分量(3個(gè)分量),其中,適當(dāng)?shù)財(cái)U(kuò)展每一分量T、U和V,以填充半字目標(biāo)大小。在此示例中,它們按照“.u”所示進(jìn)行零擴(kuò)展(即,無符號(hào)擴(kuò)展)。然而,可使用“.s”對(duì)每一分量進(jìn)行有符號(hào)擴(kuò)展。另外,注意,由于“cnt*ds”為3個(gè)半字(即46位),并且從而小于R4的大小,則R4的其余未使用部分由預(yù)定值填充(在此示例中為零)。
圖17表示寄存器文件的示例,其中,利用值為1的stride和值為2的stride加載存儲(chǔ)器部分100的矢量104。在一個(gè)示例中,假設(shè)通過存儲(chǔ)0x46,R7指向pp,矢量104的起始,并且R10存儲(chǔ)cnt值5,stride值1和skip_cnt值5。注意,skip的值在此示例中無關(guān)緊要,因?yàn)閏nt=skip_cnt(即從存儲(chǔ)器正在加載單個(gè)矢量,無需不斷地“跳躍”)。因此可使用下面的指令將矢量104加載至寄存器文件。
lmvex.u.mh.dh R1,R7,R10/*cnt=5,stride=1,skip_cnt=5*/在上面的示例中,將cnt個(gè)(5個(gè))分量加載至寄存器文件,從R1開始,然后是R2。由于stride=1,并且后面的分量距離“stride”個(gè)ms大小的單位放置,則將要加載的分量彼此距離1個(gè)半字。因此,5個(gè)連續(xù)的半字(pp、qq、rr、ss和tt)載入至寄存器R1和R2。還要注意,R2的其余未使用部分由預(yù)定值填充(在此例中為零)。另外注意,對(duì)于s/u字段可使用“.s”代替?;蛘呖商鎿Q地,不提供該s/u字段。
在另一實(shí)施例中,假設(shè)R7指向pp(存儲(chǔ)0x46),并且R10存儲(chǔ)cnt值3和stride值2。因此,可使用下面的指令每隔一個(gè)分量向該寄存器加載矢量104。
lvex.u.mh.dh R4,R7,R10/*cnt=3,stride=2*/在此示例中,可使用lvex指令,因?yàn)閏nt*ms(3隔半字)適合單個(gè)寄存器(所示實(shí)施例中的64位寄存器)。利用此lvex指令,將cnt個(gè)分量(3個(gè)分量)加載至R4,其中,后面的分量距離“stride”個(gè)ms大小的單位放置。因此,在此示例中,后面的分量以距離2個(gè)半字(“stride*ms”)放置,因此,在加載每一分量后,下一分量從2個(gè)半字處取回。例如,從0x46取回pp,從0x4A(0x46+0x2)取回rr。如此繼續(xù),直到加載3個(gè)分量。還要注意,R4的未使用部分由預(yù)定值填充(在此示例中為零)。
圖18表示處于四個(gè)不同時(shí)刻(time=0,time=1,time=2,time=3)的存儲(chǔ)器的一部分200,其可對(duì)應(yīng)于,例如,圖1的存儲(chǔ)器12的全部或部分(或者可位于數(shù)據(jù)處理系統(tǒng)的任何地方)。在說明的實(shí)施例中,存儲(chǔ)器部分200示出為64位寬存儲(chǔ)器。注意,在替換實(shí)施例中,可以各種不同方式將存儲(chǔ)器部分200格式化為具有不同的寬度。存儲(chǔ)器部分200分別在存儲(chǔ)器位置0x08,0x0A,0x0C,0x0E和0x10存儲(chǔ)分量C4,C3,C2,C1和C0。分量t、u和v分別存儲(chǔ)在0x12,0x14和0x16。存儲(chǔ)器部分200還在time=0時(shí)分別在位置0x20,0x22,0x24,0x26和0x28存儲(chǔ)X-4,X-3,X-2,X-1和X0。在一個(gè)實(shí)施例中,這些值的每一個(gè)可以指以特定采樣速率采樣的數(shù)字采樣信號(hào)的各種時(shí)間采樣。例如,在time=0,當(dāng)前采樣由X0表示,并且一個(gè)時(shí)間延遲(即,1/采樣速率)前的采樣由X-1表示,兩個(gè)時(shí)間延遲(即,2*1/采樣速率)前的采樣由X-2表示,等等。
接下來,在time=1,當(dāng)前采樣由X1表示,并且一個(gè)時(shí)間延遲(即,1/采樣速率)前的采樣由X0表示,兩個(gè)時(shí)間延遲(即,2*1/采樣速率)前的采樣由X-1表示,等。注意,最新的采樣覆蓋最老的時(shí)間采樣,在示出time=1的示例中其為X-4。因此,在time=2,當(dāng)前采樣X2覆蓋X-3,并且,在time=3,當(dāng)前采樣X3覆蓋X-2因此,存儲(chǔ)位置0x20,0x22,0x24,0x26和0x28可實(shí)現(xiàn)循環(huán)緩沖,其連續(xù)地存儲(chǔ)進(jìn)來的數(shù)字采樣信號(hào)的時(shí)間采樣。在替換實(shí)施例中,可對(duì)于不同的原因或應(yīng)用實(shí)現(xiàn)循環(huán)緩沖。
在一個(gè)實(shí)施例中,可使用修改的lmvex加載指令按照某種方式將該循環(huán)緩沖的值正確地送入寄存器文件的寄存器(如將參考圖19-22的說明),該方式為這些值處于用于計(jì)算的正確的希望的順序,例如,在執(zhí)行濾波函數(shù)時(shí)。例如,下面的等式對(duì)應(yīng)于濾波函數(shù),其中,Y0,Y1,Y2和Y3分別對(duì)應(yīng)于在time=0,time=1,time=2,time=3時(shí)的結(jié)果Eq.1 Y0=C0*X0+C1*X-1+C2*X-2+C3*X-3+C4*X-4Eq.2 Y1=C0*X1+C1*X0+C2*X-1+C3*X-2+C4*X-3Eq.3 Y2=C0*X2+C1*X1+C2*X0+C3*X-1+C4*X-2Eq.4 Y3=C0*X3+C1*X2+C2*X1+C3*X0+C4*X-1在一個(gè)實(shí)施例中,該修改的lmvex指令稱為一次跳躍加載多個(gè)矢量分量(lmvex_skip_once)指令,如圖27中所示。圖27的lmvex_skip_once指令包括s/u字段、ms字段和ds字段,其就是按照上面對(duì)于lmvex指令的說明操作。該lmvex_skip_once指令還采用三個(gè)操作數(shù)rD、rA和rB。該lmvex_skip_once指令使用附加參數(shù)cnt、stride、skip和skip_cnt,其中,它們存儲(chǔ)在由rB表示的一個(gè)或多個(gè)寄存器中,或由該指令的子操作碼指定。除了skip_cnt附加參數(shù)外,所有操作數(shù)和附加參數(shù)以與對(duì)于lvmex指令的說明相同的方式操作。如上所述,該lmvex指令取回skip_cnt個(gè)分量,并且然后使用“skip”參數(shù)取回下一個(gè)分量。此時(shí),必須重置該skip_cnt計(jì)數(shù)器,使得在再一次跳躍前取回下一skip_cnt個(gè)分量。如此繼續(xù),直到加載了cnt個(gè)分量。與lmvex指令不同,lmvex_skip_once指令在取回skip_cnt個(gè)分量后并不重置該skip_cnt計(jì)數(shù)器。因此,在取回skipc_nt個(gè)分量后,下一個(gè)分量位于skip個(gè)ms大小的單位處。然而,從該指針開始,skip_cnt計(jì)數(shù)器持續(xù)遞減(即,不重置),直到取回“cnt”個(gè)分量。
例如,如將參考圖19-22的說明,下面的偽碼段可用于計(jì)算上面等式1、2、3和4的濾波結(jié)果Y0,Y1,Y2和Y3。
/*初始化R12,以存儲(chǔ)cnt值5和stride值1*//*初始化R13,以存儲(chǔ)cnt值5,stride值1,skip_cnt值5和skip值-4*//*初始化R1,以存儲(chǔ)0x08*//*初始化R2,以存儲(chǔ)0x20*/lmvex.u.mh.dh R6,R1,R12/*將C4-C1加載至R6,將C0加載至R7*/looplmvex_skip_once.u.mh.dh R8,R2,R13/*在第一次迭代中,將X-4-X-1加載至R8,并將X0加載至R9*/vmac.h R10,R6,R8/*在第一次迭代中,將C4*X-4+C3*X-3+C2*X-2+C1*X-1加載至R10*/vmac.h R11,R7,R9/*在第一次迭代中,將C0*X0存儲(chǔ)至R11*/add R10,R10,R11/*在第一次迭代中,將Y0存儲(chǔ)至R10*//*在R10中的值可存儲(chǔ)至存儲(chǔ)器*/add R2,R2,2/*將R2中的指針向前移動(dòng)2*//*修改R13中的值,使得“skip_cnt=skip_cnt-1”*/branch loop循環(huán)由上面代碼段中的標(biāo)簽“l(fā)oop”表示,在進(jìn)入該循環(huán)之前,,用cnt值5和stride值1初始化R12,用cnt值5,stride值1,skip_cnt值5和skip值-4初始化R13。因此,寄存器R12和R13可在后面的矢量加載指令中用作“rB”。初始化R1指向常矢量的起始(位于0x08的C4)。初始化R2指向循環(huán)緩沖的起始,其在time=0時(shí)為0x20,如圖18所示。因此注意,循環(huán)的第一次迭代對(duì)應(yīng)于加載至對(duì)應(yīng)于time=0時(shí)寄存器文件(如圖19所示)的值。
第一條lmvex指令根據(jù)R12中存儲(chǔ)的參數(shù),將C4-C1加載至R6,并將C0加載至R7,R12在前面初始化;并且控制字段如上參考圖4和5的說明。然后,循環(huán)內(nèi)的第一次迭代開始于lmvex_skip_once指令。在該第一次迭代中,對(duì)應(yīng)于time=0,該lmvex_skip_once指令根據(jù)R12中存儲(chǔ)的參數(shù)和這些控制字段,將X-4-X-1加載至R8,并且將X0加載至R9,如圖19中的R8和R9所示,其中,R12在前面初始化。注意,由于在該第一次迭代中,skip_cnt=cnt,skip可視為“無關(guān)緊要”,因?yàn)椴⒉恍枰搒kip值。也就是,當(dāng)該skip_cnt計(jì)數(shù)器終止時(shí),cnt計(jì)數(shù)器也終止,并從而不需要“跳躍”即可完成該指令。
第一條矢量乘積累加指令(vmac.h)對(duì)寄存器R6和R8的半字分量執(zhí)行矢量乘積累加運(yùn)算,并將結(jié)果存儲(chǔ)至R10。因此,R10現(xiàn)在存儲(chǔ)C4*X-4+C3*X-3+C2*X-2+C1*X-1,如圖19中的R10所示。第二條矢量乘積累加指令對(duì)寄存器R7和R9的半字分量執(zhí)行矢量乘積累加運(yùn)算,并將結(jié)果存儲(chǔ)至R11。因此,R11現(xiàn)在存儲(chǔ)C0*X0+0*0+0*0+0*0,其就等于C0*X0。注意,在當(dāng)前的示例中,通過每一個(gè)加載矢量指令(lmvex和lmvex_skip_once),寄存器(例如R7和R9)的其余未使用的部分清零,從在R11中產(chǎn)生正確結(jié)果。否則,如果例如,反而從存儲(chǔ)器200加載值t,u和v,則R11可能為不正確的值。
然后,第一條求和指令對(duì)R10和R11的值求和,并將結(jié)果存儲(chǔ)至R10(此運(yùn)算并未在圖19中示出)。然后可在需要時(shí)存儲(chǔ)對(duì)應(yīng)于上面等式1的Y0的該值,例如回到存儲(chǔ)器200。第二條求和指令將循環(huán)緩沖的起始指針向前移動(dòng)至下一個(gè)半字,使得對(duì)于time=1,該起始指針現(xiàn)在指向地址0x22的X-3,如圖18和20所示。接下來,修改R13,使得skip_cnt=skip_cnt-1。因此。經(jīng)過上面代碼段的第一次迭代,skip_cnt現(xiàn)在等于4??墒褂醚h(huán)計(jì)數(shù)器或附加指令(未包括在上面的代碼段中)指示是否退出該循環(huán)。如果不退出該循環(huán),則代碼返回“l(fā)oop”,并開始下一次迭代。
值C4-C0保持在R6和R7中(如圖20的R6和R7所示)。該循環(huán)的第二次迭代開始于lmvex_skip_once指令。在該第二次迭代中,對(duì)應(yīng)于time=1,該lmvex_skip_once指令根據(jù)存儲(chǔ)在R12中的參數(shù)和控制字段,將X3-X0加載至R8,并將X1加載至R9,如圖20中的R8和R9所示。在此次迭代中,由于skip_cnt為4,并且rA指向X-3為第一個(gè)要加載的分量,加載4個(gè)分量X-3-X0。此時(shí),由于加載了skip_cnt(4)個(gè)分量,并且還沒有加載cnt(5)個(gè)分量,則從“skip”個(gè)ms大小(半字)的單位的位置處加載下一分量。因此,在此示例中,值為-4的skip允許從0x28-4*2=0x20加載分量X1。(注意,存儲(chǔ)器200可半字尋址;因此,skip個(gè)ms大小的單位處表示-4個(gè)半字處。)注意,如上所述,在time=1時(shí),存儲(chǔ)器200中的最近分量存儲(chǔ)在0x20,其為前一最老的時(shí)間采樣的位置。因此,lmvex_skip_once指令以從最老到最新的時(shí)間采樣順序,從存儲(chǔ)器位置0x20-0x28向R8和R9正確地加載了用于計(jì)算Y1所需的5個(gè)分量。
第一條矢量乘積累加指令(vmac.h)對(duì)寄存器R6和R8的半字分量執(zhí)行矢量乘積累加運(yùn)算,并將結(jié)果存儲(chǔ)至R10。因此,R10現(xiàn)在存儲(chǔ)C4*X-3+C3*X-2+C2*X-1+C1*X0,如圖20中的R10所示。第二條矢量乘積累加指令對(duì)寄存器R7和R9的半字分量執(zhí)行矢量乘積累加運(yùn)算,并將結(jié)果存儲(chǔ)至R11。因此,R11現(xiàn)在存儲(chǔ)C0*X1+0*0+0*0+0*0,其就等于C0*X1。注意,在當(dāng)前的示例中,通過每一加載矢量指令(lmvex和lmvex_skip_once),寄存器(例如R7和R9)的其余未使用部分清零,從在R11中產(chǎn)生正確結(jié)果。否則,如果例如,反而從存儲(chǔ)器200加載值a、b或c(或者t、u和v),則R11可能為不正確的值,。
然后,第一條求和指令對(duì)R10和R11的值求和,并將結(jié)果存儲(chǔ)至R10(此運(yùn)算并未在圖20中示出)。然后可在需要時(shí)存儲(chǔ)對(duì)應(yīng)于上面等式2的Y1的該值,例如回到存儲(chǔ)器200。第二條求和指令將循環(huán)緩沖的起始指針向前移動(dòng)至下一個(gè)半字,使得對(duì)于time=2,該起始指針現(xiàn)在指向地址0x24的X-2,如圖18和21所示。接下來,修改R13,使得skip_cnt=skip_cnt-1。因此。經(jīng)過上面代碼段的第二次迭代,skip_cnt現(xiàn)在等于3??墒褂醚h(huán)計(jì)數(shù)器或附加指令(未包括在上面的代碼段中)指示是否退出該循環(huán)。如果不退出該循環(huán),則代碼返回至“l(fā)oop”,并開始下一次迭代。
第三次迭代類似于第一次和第二次迭代操作。對(duì)于第三次迭代,其對(duì)應(yīng)于time=2,lmvex_skip_once指令將X-2,X-1,X0,X1,X2加載至寄存器R8和R9,如圖21所示。因此,一旦加載了分量X-2,X-1和X0(開始于0x24),就已經(jīng)加載了skip_cnt個(gè)分量,并且使用skip加載X1和X2。后面的矢量乘積累加指令導(dǎo)致C4*X-2+C3*X-1+C2*X0+C1*X1存儲(chǔ)在R10中,并且導(dǎo)致C0*X2存儲(chǔ)在R11中。第一條求和指令將對(duì)應(yīng)于Y2的結(jié)果存儲(chǔ)在R10中,其中,然后可將Y2存儲(chǔ)至存儲(chǔ)器,如果需要的話。第二條求和指令然后將該指針向前移動(dòng)至起始位置0x26,如圖22中所示。另外,修改R13,使得skip_cnt=skip_cnt-1。因此。經(jīng)過上面代碼段的第三次迭代,skip_cnt現(xiàn)在等于2??墒褂醚h(huán)計(jì)數(shù)器或附加指令(未包括在上面的代碼段中)指示是否退出該循環(huán)。如果不退出該循環(huán),則代碼返回至“l(fā)oop”,并開始下一次迭代。
通過上面參考圖4和5所述的lmvex指令,重置該記錄skip_cnt的機(jī)制(例如,計(jì)數(shù)器),使得當(dāng)加載下一skip_cnt個(gè)分量時(shí)(并且假設(shè)還沒有加載cnt個(gè)分量),從skip*ms個(gè)單位處加載下一分量。然而,在當(dāng)前示例中,使用lvmex_skip_once指令,使得當(dāng)加載skip_cnt個(gè)分量時(shí),不重置記錄skip_cnt的機(jī)制。按照這種方式,在加載全部cnt個(gè)分量前,將不會(huì)再一次地使用跳躍。這允許在后面的迭代中,正確地加載所有分量,如將所述,例如通過第四次迭代(對(duì)應(yīng)于time=3)。
第四次迭代類似于前面的迭代操作。對(duì)于第四次迭代,對(duì)應(yīng)于time=3,lmvex_skip_once指令將X-1,X0,X1,X2和X3加載至寄存器R8和R9,如圖22所示。在此次迭代中,注意,加載的第一個(gè)分量是來自位置0x26的X-1(如圖18對(duì)于time=3的表示)。加載X-1和X0之后,就已經(jīng)加載了skip_cnt(其等于2)個(gè)分量;因此,使用skip將指針繞回位置0x20,因?yàn)檫€沒有加載cnt(5)個(gè)分量。還要注意,并沒有重置skip_cnt機(jī)制。按照這種方式,即使加載了下一skip_cnt(2)個(gè)分量,也不進(jìn)行跳躍。如果在下一skip_cnt個(gè)分量后對(duì)于此次迭代進(jìn)行跳躍,則在跳躍前僅取回分量X1和X2,從而遺漏了X3。因此,盡管在前面的迭代中,在第一次跳躍后是否重置skip_cnt并不重要,但在某些迭代中,例如此次迭代,其可確定是否取回正確的分量。因此,可以知道如何將lmvex_skip_once指令用于正確地執(zhí)行循環(huán)緩沖,例如,對(duì)于濾波器應(yīng)用。還要注意,能夠以多種不同的方法書寫上面的代碼段。例如,該循環(huán)可以展開,而不是寫為循環(huán)形式。在此示例中,可以對(duì)于time=0,1,2使用lmvex指令,而僅對(duì)于time=3和4使用lmvex_skip_once指令。
在圖22中可以看出,一旦加載了X-1,X0,X1,X2和X3,后面的矢量乘積累加指令導(dǎo)致C4*X-1+C3*X0+C2*X1+C1*X2存儲(chǔ)在R10中,并且導(dǎo)致C0*X3存儲(chǔ)在R11中。第一條求和指令將對(duì)應(yīng)于Y3的結(jié)果存儲(chǔ)在R10中,其中,然后可將Y3存儲(chǔ)至存儲(chǔ)器,如果需要的話。此時(shí),流程按照上面對(duì)于前面迭代的說明繼續(xù)進(jìn)行。在一個(gè)實(shí)施例中,在將R12修改為skip_cnt為0的指針后,可退出該循環(huán),使得重置skip_cnt,例如,返回5,并重復(fù)整個(gè)過程。
因此,能夠理解如何將矢量加載指令,連同skip、skip_cnt和cnt用于執(zhí)行循環(huán)緩沖。在一個(gè)實(shí)施例中,可使用循環(huán)緩沖加載多個(gè)矢量分量(lmvex_cb)指令,如圖28所示。該指令類似于上面參考圖4和5說明的lmvex指令,除了在rB中存儲(chǔ)的附加參數(shù)為buffer_size(緩沖大小)和offset(偏移)。(在使用lmvex指令時(shí),注意,在替換實(shí)施例中,可作為操作碼或子操作碼部分包括該附加參數(shù))。圖29表示如何使用這些附加參數(shù)定義循環(huán)緩沖。例如,在使用上述加載指令時(shí),rA表示存儲(chǔ)器中存儲(chǔ)該循環(huán)緩沖的存儲(chǔ)器位置的起始,如圖29所示。該buffer_size表示“緩沖分量總數(shù)*ms”,并且offset定義在該循環(huán)緩沖中哪里是將要加載的第一個(gè)分量。另外注意,盡管并未示出,還可使用循環(huán)緩沖存儲(chǔ)多個(gè)矢量分量(stmvex_cb)指令,作為lmvex_cb的存儲(chǔ)對(duì)應(yīng)。對(duì)于lmvex_cb和stmvex_cb指令,在某些實(shí)施例中,由“offset”表示的當(dāng)前起始值(current_start)在每次遍歷該循環(huán)緩沖后,即在處理了cnt個(gè)分量后,自動(dòng)增加或降低預(yù)定數(shù)量的分量,作為執(zhí)行l(wèi)mvex_cb或stmvex_cb指令的一部分。
圖30表示循環(huán)緩沖加載分量流(lstrmvex_cb)指令,其類似于上面lstrmvex指令操作,除了附加參數(shù)包括buffer_size和offset(如上面參考圖29的說明),而不是cnt、skip和skip_cnt。正如上面的lstrmvex指令,該lstrmvex_cb指令從存儲(chǔ)器發(fā)起矢量分量流,其中,例如根據(jù)rD何時(shí)用作后面指令的特定源操作數(shù),這些分量可以出隊(duì)。因此,除了關(guān)于尋址模式外,上面對(duì)于lstrmvex的相同討論此處也適用于lstrmvex_cb。還要注意,盡管沒有說明,但也可以使用循環(huán)緩沖存儲(chǔ)矢量分量流(ststrmvex_cb)指令,作為lstrmvex_cb的存儲(chǔ)對(duì)應(yīng)。對(duì)于lstrmvex_cb和ststrmvex_cb指令,在一些實(shí)施例中,每次遍歷該循環(huán)緩沖后,由“offset”表示的當(dāng)前起始值(current_start)自動(dòng)遞增預(yù)定數(shù)量的分量。
lmvex_cb、stmvex_cb、lstrmvex_cb和ststrmvex_cb指令的可選指示符包括rcnt和stride(未在圖29和30中示出),它們?nèi)缤懊鎸?duì)于lmvex、lmvex2、stmvex、stmvex2、lstrmvex和ststrmvex指令的說明操作。這允許控制加載至寄存器rD的每一實(shí)例,或從源寄存器rS的每一示例存儲(chǔ)的循環(huán)緩沖分量的數(shù)量,并且控制遍歷訪問該循環(huán)緩沖的跨度。例如,可使用跨度執(zhí)行分?jǐn)?shù)速率濾波運(yùn)算,或抽取濾波器。
圖23-26表示如何使用lstrmvex指令(如上參考圖7的說明)執(zhí)行,例如,矩陣相乘的一個(gè)示例。對(duì)于此示例,將使用圖12的存儲(chǔ)器部分100,和矩陣102、106和108。圖23-26表示在矩陣相乘期間的不同時(shí)間點(diǎn)的寄存器文件內(nèi)容,例如圖1的標(biāo)量寄存器文件34的內(nèi)容等。
在當(dāng)前示例中,矩陣102將乘以矩陣106,結(jié)果將對(duì)應(yīng)于矩陣108。例如,在執(zhí)行矩陣相乘時(shí),下列等式用于結(jié)果矩陣108的頭兩列。
Eq.5 aa=A*K+B*N+C*QEq.6 dd=D*K+E*N+F*QEq.7 gg=G*K+H*N+I*QEq.8 bb=A*L+B*O+C*REq.9 ee=D*L+E*O+F*REq.10 hh=G*L+H*O+I*R在上面的等式中,注意,在獲得aa、dd和gg時(shí),需要從矩陣102出隊(duì)分量(因?yàn)锳、B、C用于獲得aa;D、E、F用于獲得dd;并且然后G、H、I用于獲得gg),同時(shí)不需要使矩陣106出隊(duì)(因?yàn)樾枰狵、N、Q獲得每個(gè)aa、dd和gg)。因此,下面的偽碼提供如何使用指令,例如lstrmvex指令,獲得結(jié)果矩陣108的一個(gè)示例。注意,在下面的偽碼示例中,僅當(dāng)rD作為指令(例如,指令目標(biāo),源1,源2)的第一個(gè)源(源1)時(shí)才執(zhí)行出隊(duì)。
/*初始化R6,以存儲(chǔ)值為9的cnt,值為3的rcnt,值為1的stride,值為6的skip,和值為3的skip_cnt*//*初始化R4,以存儲(chǔ)0x12,即矩陣102的第一行的起始*//*初始化R7,以存儲(chǔ)值為9的cnt,值為3的rcnt,值為8的stride,值為-15的skip,和值為3的skip_cnt*//*初始化R5,以存儲(chǔ)0x54,即矩陣106的第一列的起始*/lstrmvex.u.mh.dh R1,R4,R6/*加載矩陣102的第一行A,B,C*/lstrmvex.u.mh.dh R2,R5,R7/*加載矩陣106的第一列K,N,Q*/vmac.h R10,R1,R2/*在R10中存儲(chǔ)aa,并使矩陣102的R1出隊(duì)*/vmac.h R11,R1,R2/*在R11中存儲(chǔ)dd,并使矩陣102的R1出隊(duì)*/vmac.h R12,R2,R1/*在R12中存儲(chǔ)gg,并使矩陣104的R2出隊(duì)*/lstrmvex.u.mh.dh R1,R4,R6/*加載矩陣102的第一行A,B,C*/vmac.h R13,R1,R2/*在R13中存儲(chǔ)bb,并使矩陣102的R1出隊(duì)*/vmac.h R14,R1,R2/*在R14中存儲(chǔ)ee,并使矩陣102的R1出隊(duì)*/vmac.h R15,R2,R1/*在R15中存儲(chǔ)hh,并使矩陣104的R2出隊(duì)*/上面的偽碼可用于獲得aa、dd、gg、bb、ee和hh,如上面的等式5-8所述。如在此示例中所使用,假設(shè)所有值為無符號(hào)的半字。首先,初始化R6,以存儲(chǔ)值為9的cnt,值為3的rcnt,值為1的stride,值為6的skip,和值為3的skip_cnt,其中,R6可用作lstrmvex指令的rB寄存器。如圖23所示,將R4初始化為指向位于0x12處的分量A,即圖12的矩陣102的第一行的第一個(gè)分量。初始化R7,以存儲(chǔ)值為9的cnt,值為3的rcnt,值為8的stride,值為-15的skip,和值為3的skip_cnt,其中,R7可用作lstrmvex指令的rB寄存器。如圖23所示,將R5初始化為指向0x54處的分量K,即矩陣106的第一列的第一個(gè)分量。
第一條lstrmvex指令發(fā)起矢量分量流,其依次加載矩陣102的每一行。首先,該指令將矩陣102的第一行加載至R1(如圖23中所示)。例如,分量A、B和C彼此距離1半字(因此需要值為1的stride)。值為3的rcnt每次僅向R1加載3個(gè)分量(其余部分清零),并且在加載skip_cnt個(gè)分量(此例中為3個(gè))之后,則在C(0x16)位置增加8*ms(8半字)的跳躍,以在位置0x22(0x16+0x08)獲得下一分量D的地址。當(dāng)R1用作后面指令的源1時(shí),如下所述,則其出隊(duì),使得矩陣102的下一行(如rcnt、stride和skip_cnt所定義)加載至R1。
第二條lstrmvex指令發(fā)起矢量分量流,其依次向R2加載矩陣106的每一列。首先,該指令將矩陣106的第一列加載至R2(如圖23中所示)。例如,分量K、N和Q在存儲(chǔ)器中彼此距離8個(gè)半字(因此需要值為8的stride)。值為3的rcnt每次僅向R2加載3個(gè)分量(其余部分清零),并且在加載skip_cnt個(gè)分量(此例中為3個(gè))之后,則將Q(0x74)位置增加-15*ms(-15或-0x0F個(gè)半字)的跳躍,以在位置0x56(0x74-0x0F*2)獲得下一分量D的地址,其中,L為矩陣106的第二列的第一個(gè)分量。當(dāng)R2用作后面指令的源1時(shí),如下所述,則其出隊(duì),使得矩陣106的下一列(如rcnt、stride和skip_cnt所定義)加載至R2。
第一條乘積累加指令(vmac)指令將A*K+B*N+C*Q(其等于aa)存儲(chǔ)至R10,如圖24中所示。由于R1用作源1,因而其根據(jù)第一條lstrmvex指令(和R6中的參數(shù))出隊(duì),使得矩陣102的下一行(D、E和F)存儲(chǔ)至R1,而其余部分清零。此時(shí),注意,由于R2沒有用作源1,則其不出隊(duì);因此,K、N和Q保持在R2中,并且矩陣106的下一列也不存儲(chǔ)至R2。
第二條乘積累加指令(vmac)指令將D*K+E*N+F*Q(其等于dd)存儲(chǔ)至R11,如圖25中所示。由于R1用作源1,其再一次地根據(jù)第一條lstrmvex指令(和R6中的參數(shù))出隊(duì),使得矩陣102的下一行(G、H和I)存儲(chǔ)至R1,而其余部分清零。此時(shí),已經(jīng)加載了對(duì)應(yīng)于第一條lstrmvex指令的9個(gè)分量,從而已經(jīng)加載了“cnt”個(gè)分量,并且此指令流終止。由于R2沒有用作源1,則其不出隊(duì);因此,K、N和Q保持在R2中,并且矩陣106的下一列也不存儲(chǔ)至R2。此時(shí),僅加載了對(duì)應(yīng)于lstrmvix指令的3個(gè)分量,從而對(duì)于此指令沒有加載cnt個(gè)分量。
第三條累加指令(vmac)指令將G*K+H*N+I*Q(其等于gg)存儲(chǔ)至R11,如圖26中所示。由于R2現(xiàn)在用作源1,因此其根據(jù)第二條lstrmvex指令(和R7中的參數(shù))出隊(duì),使得矩陣106的下一列(L、O和R)存儲(chǔ)至R2,而其余部分清零。此時(shí),已經(jīng)加載了矩陣106的9個(gè)分量中的6個(gè)。另外,由于通過第一條lstrmvex指令已經(jīng)加載了(矩陣102的)“cnt”個(gè)分量,因而R1并不改變,并仍然保存G、H和I。(此外,即使通過第一條lstrmvex指令還沒有加載“cnt”個(gè)分量,R1仍然不改變,因?yàn)橛捎赗1用作源2,其將不出隊(duì)。)第三條lstrmvex指令發(fā)起新的矢量分量流,其與第一條lstrmvex指令相同。也就是,該第三條lstrmvex指令依次將矩陣102的每一行加載至R1,如上所述。后面三條vmac指令分別向R13、R14和15存儲(chǔ)值bb、ee和hh。注意,在使用頭三條vmac指令時(shí),第一條lstrmvex指令通過第三條lstrmvex指令之后的頭兩條vmac指令出隊(duì),第二條lstrmvex指令通過第三條lstrmvex指令之后的第三條vmac指令出隊(duì)。此時(shí),矩陣106的最后一列(M、P和S)將加載至R2(未示出),并且對(duì)于第二條lstrmvex指令的加載將停止,因?yàn)榇藭r(shí)將要加載“cnt”個(gè)(即9個(gè))分量??墒褂妙愃频闹噶瞰@得cc、ff和ii。可將值aa、dd、gg、bb、ee、hh、cc、ff和ii分別存儲(chǔ)回至矩陣108的存儲(chǔ)位置0x8A,0x9A,0xAA,0x8C,0x9C,0xAC,0x8E,0x9E,0xAE。如此處所述,可使用矢量存儲(chǔ)指令執(zhí)行這些存儲(chǔ)。
注意,在上面的偽碼示例中,這些分量根據(jù)后面指令中rD的位置出隊(duì)(即rD是否用作源1或是源2)。然而要注意,在替換實(shí)施例中,可使用其它因子指示這些分量是否出隊(duì)。例如,可使用不同的操作碼指示出隊(duì),或者使用其它的指示符,例如標(biāo)志位等。此外,在一個(gè)實(shí)施例中,rD在任何時(shí)候用作為后面指令的源時(shí)出隊(duì),不是僅在其為源1時(shí)出隊(duì)。在又一實(shí)施例中,僅當(dāng)使用同一rD作為源操作數(shù)的指令為一個(gè)或多個(gè)由處理單元14執(zhí)行的所有指令的適當(dāng)子集中的預(yù)定指令時(shí)執(zhí)行出隊(duì)。也就是,在此實(shí)施例中,實(shí)際上僅有指令或指令功能的子集作為它們執(zhí)行的一部分執(zhí)行出隊(duì),而由處理器單元14執(zhí)行的其余指令不執(zhí)行出隊(duì),不論rD是否用作源操作數(shù)。該執(zhí)行出隊(duì)的子集可為所有執(zhí)行的指令的預(yù)定子集,并可基于數(shù)據(jù)處理系統(tǒng)10的需要確定。在又一實(shí)施例中,出隊(duì)可由用于控制該出隊(duì)操作的指令中的控制字段值確定。
盡管在前面說明圖23-26的段落中已經(jīng)說明了出隊(duì),但類似的入隊(duì)操作同樣適用于當(dāng)前發(fā)明的實(shí)施例,并以基本類似的方式操作??苫谌腙?duì)源寄存器rS作為后面指令目標(biāo)的位置,或者基于在由處理單元14執(zhí)行的所有指令的適當(dāng)子集中的一個(gè)或多個(gè)預(yù)定指令中成為目標(biāo)操作數(shù),來執(zhí)行入隊(duì)。也就是,在一個(gè)實(shí)施例中,實(shí)際上僅有指令或指令功能的子集作為它們執(zhí)行的一部分執(zhí)行入隊(duì),由處理器14執(zhí)行的其余指令并不執(zhí)行入隊(duì),無論rS是否用作目標(biāo)操作數(shù)。該執(zhí)行入隊(duì)的子集可為執(zhí)行的全部指令的預(yù)定子集,并可基于數(shù)據(jù)處理系統(tǒng)10的需要確定。在又一實(shí)施例中,入隊(duì)可由用于控制該入隊(duì)操作的指令中的控制字段值確定。
圖31表示可用于快速傅立葉變換(FFT)的指令。圖31表示加載多個(gè)矢量分量FFT(lmvex_fft)指令,其具有控制字段s/u、ms和ds以及操作數(shù)rD,rA和rB。這些控制字段和操作數(shù)的每一個(gè)如上對(duì)于其它加載指令的說明操作。該lmvex_fft指令還使用在rB中存儲(chǔ)的附加參數(shù)“radix”(基數(shù)),并且可選地如上對(duì)于其它加載矢量分量指令的說明執(zhí)行在rB中存儲(chǔ)的rcnt控制字段。在使用上面的指令時(shí),在替換實(shí)施例中,“radix”(和“rcnt”,如果存在的話)可為操作碼或子操作碼的一部分,并且因此,rB可能不是必要的。該lmvex_fft指令還可使用截短或舍入字段,如上所述。
圖32表示存儲(chǔ)多個(gè)矢量分量FFT(stmvex_fft)指令,其也具有控制字庫(kù)s/u、ms和ss以及操作數(shù)rS、rA和rB。這些控制字段和操作數(shù)中的每一個(gè)如上對(duì)于其它存儲(chǔ)指令的說明操作。該stmvex_fft指令還可使用截短或舍入字段,如上所述,并可選地如上對(duì)于其它存儲(chǔ)矢量分量指令的說明執(zhí)行rcnt控制字段。該stmvex_fft指令還使用在rB中存儲(chǔ)的附加參數(shù)“radix”。在使用上面的指令時(shí),在替換實(shí)施例中,“radix”可為該操作碼或子操作碼的一部分,并且因此,rB可能不是必要的。該stmvex_fft指令可視為lmvex_fft指令的存儲(chǔ)對(duì)應(yīng)。
重新參看該lmvex_fft指令,“radix”參數(shù)可用于根據(jù)FFT尋址算法向寄存器或寄存器組加載一系列數(shù)據(jù),如本領(lǐng)域所公知。例如,對(duì)于FFT,公知將以X0,X1,X2,X3,X4,X5,X6和X7為順序的數(shù)據(jù)進(jìn)行“比特翻轉(zhuǎn)”,形成X0,X4,X6,X2,X1,X5,X3,X7,以進(jìn)行特定FFT計(jì)算。在該lmvex_fft指令中,該“radix”定義分量的數(shù)量,以及這些分量的特定存儲(chǔ)順序。例如,圖34表示存儲(chǔ)器部分300,其可為,例如圖1的存儲(chǔ)器12的一部分。存儲(chǔ)器部分300分別包括存儲(chǔ)在位置0x16-0x24的分量X0,X1,X2,X3,X4,X5,X6和X7。存儲(chǔ)器部分300還包括存儲(chǔ)在位置0x44-0x52的分量Y0,Y4,Y6,Y2,Y1,Y5,Y3和Y7。
圖35表示諸如圖1的標(biāo)量寄存器文件34的寄存器文件的一部分。例如,基數(shù)8的lvmex_fft指令可用于以比特翻轉(zhuǎn)形式將X個(gè)分量送入寄存器R1和R2(如圖35所示),其中,R1由rD指定,并且將要加載的第一個(gè)存儲(chǔ)器位置(0x16)由rA指定。類似地,基數(shù)8的lmvex_fft可用于將比特翻轉(zhuǎn)的Y個(gè)分量以連續(xù)順序送入寄存器R4和R5(如圖35所示),其中,R4由rD指定,并且將要加載的第一個(gè)存儲(chǔ)器位置(0x44)由rA指定。因此,該lmvex_fft指令可以比特翻轉(zhuǎn)的形式加載分量,其中,這些分量可以一開始就進(jìn)行比特翻轉(zhuǎn),或者不翻轉(zhuǎn)。
類似地,stmvex_fft指令可用于將這些分量與比特翻轉(zhuǎn)形式存儲(chǔ)至存儲(chǔ)器。例如,基數(shù)8的該stmvex_fft指令可用于將比特翻轉(zhuǎn)的X個(gè)分量從R1和R2存儲(chǔ)至位置0x16-0x24的存儲(chǔ)器,使得存儲(chǔ)器中的這些分量與R1和R2中的那些分量相比沒有進(jìn)行比特翻轉(zhuǎn)。類似地,該stmvex_fft指令可用于將連續(xù)的Y個(gè)分量從R4和R5存儲(chǔ)至位置0x44-0x52的存儲(chǔ)器,使得存儲(chǔ)器中的這些分量與R4和R5中的那些分量相比進(jìn)行了比特翻轉(zhuǎn)。
圖33表示加載矢量分量流FFT(lmstrmvex_fft)指令,其具有控制字段s/u、ms和ds以及操作數(shù)rD、rA和rB。這些控制字段和操作數(shù)的每一個(gè)如上對(duì)于lmstrmvex指令的說明操作。該lmstrmvex_fft指令還使用存儲(chǔ)在rB中的附加參數(shù)“radix”,并且能夠如上對(duì)于其它加載矢量分量指令的說明可選地執(zhí)行存儲(chǔ)在rB中的rcnt控制字段。在利用上面的指令時(shí),在替換實(shí)施例中,“radix”(和“rcnt”,如果存在的話)可為操作碼或子操作碼的一部分,并且因此,rB可不是必要的?!皉adix”定義將要加載的分量的總數(shù)。在利用lmstrmvex_fft指令時(shí),該lmstrmvex_fft從存儲(chǔ)器發(fā)起矢量分量流,其中,以比特翻轉(zhuǎn)形式或以來自比特翻轉(zhuǎn)的連續(xù)順序加載這些分量,并且根據(jù)例如,后面指令中rD的位置使這些分量出隊(duì)。注意,盡管沒有表示出來,但可使用對(duì)應(yīng)的存儲(chǔ)指令發(fā)起以比特翻轉(zhuǎn)形式向存儲(chǔ)器存儲(chǔ)分量流,例如對(duì)于FFT應(yīng)用。
因此,可以明白,如何將各種不同類型的矢量加載和存儲(chǔ)指令用于具有一組寄存器的系統(tǒng),例如,標(biāo)量寄存器文件等。也就是,上面的指令可用于現(xiàn)有設(shè)計(jì)或僅需對(duì)現(xiàn)有設(shè)計(jì)的執(zhí)行單元(例如執(zhí)行單元32)和控制單元(例如控制單元28)進(jìn)行少量的改動(dòng)。注意,此處說明的每一條指令可具有不同的格式,并且甚至可分為多條指令。另外,在從或向寄存器傳送矢量分量時(shí),可使用附加參數(shù)指示將哪一個(gè)寄存器分量傳送至存儲(chǔ)器(例如對(duì)于矢量存儲(chǔ)指令),或者寄存器中的哪一個(gè)寄存器分量存儲(chǔ)從存儲(chǔ)器加載的矢量分量(例如對(duì)于矢量加載指令)。此外,可使用附加參數(shù)定義如何將矢量分量放置在寄存器中,或者從存儲(chǔ)器的何處讀取矢量分量。例如,可提供起始位置指示符指示向或從寄存器中的何處開始傳送。另外,對(duì)于寄存器可給定跨度,使得能夠以非相鄰的方式在寄存器中向或從寄存器傳送參數(shù)。另外,此處說明的所有參數(shù)和控制字段可出現(xiàn)在任何這些指令的任何組合之中。
還要注意,上面已經(jīng)討論了不同的尋找模式,例如使用stride、skip、skip_cnt等的模式,或者使用buffer_size和offset的模式,或者使用基數(shù)(radix)的模式。然而,在替換實(shí)施例中,可使用不同的尋址模式。例如,可代之以指定陣列維數(shù),例如,陣列的維數(shù)等(例如,2-維4×4陣列,3-維5×5陣列等)。因此,與上面實(shí)施例一同說明的尋址模式可用于以各種模式加載或存儲(chǔ)數(shù)據(jù)或數(shù)據(jù)陣列,包括例如,zig-zag模式和其它規(guī)則模式,如上所述。與在當(dāng)前SIMD處理器中所需的開銷相比,此處說明的指令還可降低向或從存儲(chǔ)器傳送存儲(chǔ)器分量所需的開銷。例如,在能夠進(jìn)行SIMD運(yùn)算的當(dāng)前處理器中,需要大量的指令向或從存儲(chǔ)器傳送矢量分量(例如,矢量或數(shù)據(jù)陣列或其它規(guī)則模式的數(shù)據(jù))。然而,可利用上述矢量加載和存儲(chǔ)指令完成相同的分量傳送,其中,降低的指令數(shù)量(或者僅用一條指令)可用于完成此傳送。
下面的段落提供本發(fā)明的各種方面,形式和實(shí)施例的說明。每一說明僅提供各種實(shí)施例的示例,目的并不是限制上面討論的任何說明或?qū)嵤├?br> 根據(jù)本發(fā)明的一個(gè)方面,一種數(shù)據(jù)處理系統(tǒng)具有用于存儲(chǔ)操作數(shù)的存儲(chǔ)器和至少一個(gè)通用寄存器。處理器電路執(zhí)行一條或多條指令,并且該一條或多條指令中的至少一條在該存儲(chǔ)器和該至少一個(gè)通用寄存器間傳送數(shù)據(jù)分量。該至少一條或多條指令指定存儲(chǔ)器中數(shù)據(jù)分量的大小,其獨(dú)立于指定該至少一個(gè)通用寄存器中數(shù)據(jù)分量的大小。在一種形式中,該一條或多條指令包括獨(dú)立字段,其用于分別存儲(chǔ)用于存儲(chǔ)器的第一數(shù)據(jù)大小指定符和用于該至少一個(gè)通用寄存器的第二數(shù)據(jù)大小指定符。在另一形式中,該一條或多條指令指定用于定義存儲(chǔ)器的第一數(shù)據(jù)大小指定符和該至少一個(gè)通用寄存器的第二數(shù)據(jù)大小指定符的存儲(chǔ)位置。在一種形式中,該存儲(chǔ)位置為存儲(chǔ)器中的位置和該存儲(chǔ)器外部的處理器寄存器位置中的任何一個(gè)。在另一形式中,該存儲(chǔ)位置為該數(shù)據(jù)處理系統(tǒng)的控制寄存器。在一種形式中,該存儲(chǔ)位置為該數(shù)據(jù)處理系統(tǒng)的寄存器,算術(shù)、邏輯和移位操作由該數(shù)據(jù)處理系統(tǒng)工具執(zhí)行。該存儲(chǔ)器可進(jìn)一步包括將在該存儲(chǔ)器和該至少一個(gè)通用寄存器間傳送的多個(gè)數(shù)據(jù)分量。在一種形式中,該多個(gè)數(shù)據(jù)分量在該存儲(chǔ)器中相鄰。在另一形式中,該多個(gè)數(shù)據(jù)分量在存儲(chǔ)器中不相鄰。在一種形式中,該至少一個(gè)通用寄存器中的每一個(gè)保存多個(gè)數(shù)據(jù)分量。在另一形式中,該至少一個(gè)通用寄存器中的每一個(gè)包括具有一維存儲(chǔ)器映射的標(biāo)量寄存器。
當(dāng)該至少一條或多條指令指定存儲(chǔ)器中的源數(shù)據(jù)分量的大小大于該至少一個(gè)通用寄存器中的目標(biāo)數(shù)據(jù)分量的大小時(shí),該處理器電路可截短存儲(chǔ)器中的源數(shù)據(jù)分量的一部分。存儲(chǔ)器中該源數(shù)據(jù)分量被截短的部分可為該存儲(chǔ)器中源數(shù)據(jù)分量的高階部分。存儲(chǔ)器中該源數(shù)據(jù)分量被截短的部分可為該存儲(chǔ)器中源數(shù)據(jù)分量的低階部分。當(dāng)該至少一條或多條指令指定存儲(chǔ)器中的源數(shù)據(jù)分量的大小大于該至少一個(gè)通用寄存器中的目標(biāo)數(shù)據(jù)分量的大小時(shí),該處理器電路可基于該存儲(chǔ)器中源數(shù)據(jù)分量低階部分的值,舍入(round)該存儲(chǔ)器中源數(shù)據(jù)分量的高階部分。當(dāng)該至少一條或多條指令指定存儲(chǔ)器中的源數(shù)據(jù)分量的大小小于該至少一個(gè)通用寄存器中的目標(biāo)數(shù)據(jù)分量的大小時(shí),該處理器電路可將預(yù)定數(shù)據(jù)值放入該至少一個(gè)通用寄存器的目標(biāo)數(shù)據(jù)分量沒有被來自該存儲(chǔ)器的源數(shù)據(jù)分量填充的部分。在一種形式中,該處理器電路通過使用零擴(kuò)展將預(yù)定數(shù)據(jù)值放入該至少一個(gè)通用寄存器的目標(biāo)數(shù)據(jù)分量的一部分。在另一種形式中,該處理器電路通過使用符號(hào)擴(kuò)展將預(yù)定數(shù)據(jù)值放入該至少一個(gè)通用寄存器的目標(biāo)數(shù)據(jù)分量的一部分。在還一形式中,該處理器電路通過用預(yù)定比特值填充該至少一個(gè)通用寄存器的目標(biāo)數(shù)據(jù)分量的低階數(shù)據(jù)部分,將預(yù)定數(shù)據(jù)值放入該至少一個(gè)通用寄存器的目標(biāo)數(shù)據(jù)分量的一部分,其中,該預(yù)定比特值為零值。
當(dāng)該至少一條或多條指令指定存儲(chǔ)器中的目標(biāo)數(shù)據(jù)分量的大小小于該至少一個(gè)通用寄存器中的源數(shù)據(jù)分量的大小時(shí),該處理器電路可截短該至少一個(gè)通用寄存器中源數(shù)據(jù)分量的一部分。在一種形式中,該處理器電路截短該至少一個(gè)通用寄存器中源數(shù)據(jù)分量的高階部分。在另一種形式中,該處理器電路截短該至少一個(gè)通用寄存器中源數(shù)據(jù)分量的低階部分。當(dāng)該至少一條或多條指令指定存儲(chǔ)器中的目標(biāo)數(shù)據(jù)分量的大小小于該至少一個(gè)通用寄存器中的源數(shù)據(jù)分量的大小時(shí),該處理器電路可根據(jù)該源數(shù)據(jù)分量的低階部分的值,舍入在該至少一個(gè)通用寄存器中的源數(shù)據(jù)分量的高階部分。當(dāng)該至少一條或多條指令指定存儲(chǔ)器中的目標(biāo)數(shù)據(jù)分量的大小大于該至少一個(gè)通用寄存器中的源數(shù)據(jù)分量的大小時(shí),該處理器電路可將預(yù)定數(shù)據(jù)值放入該存儲(chǔ)器中目標(biāo)數(shù)據(jù)分量沒有被該至少一個(gè)通用寄存器中源數(shù)據(jù)分量填充的部分。在另一形式中,該處理器電路通過使用零擴(kuò)展將預(yù)定數(shù)據(jù)值放入該存儲(chǔ)器中未被填充的目標(biāo)數(shù)據(jù)分量部分,或者通過使用符號(hào)擴(kuò)展將預(yù)定數(shù)據(jù)值放入該存儲(chǔ)器中未被填充的目標(biāo)數(shù)據(jù)分量部分。在另一形式中,通過將預(yù)定比特值放置在該目標(biāo)數(shù)據(jù)分量的低階數(shù)據(jù)部分,將預(yù)定數(shù)據(jù)值放置在該存儲(chǔ)器中目標(biāo)數(shù)據(jù)分量的未填充部分。
根據(jù)另一方面,用于在數(shù)據(jù)處理系統(tǒng)中加載和存儲(chǔ)數(shù)據(jù)分量的方法包括提供存儲(chǔ)操作數(shù)的存儲(chǔ)器和提供至少一個(gè)通用寄存器。執(zhí)行一條或多條指令,該一條或多條指令中的至少一條引起在該存儲(chǔ)器和該至少一個(gè)通用寄存器間的數(shù)據(jù)分量的傳送。該至少一條或多條指令指定該存儲(chǔ)器中數(shù)據(jù)分量的大小,其獨(dú)立于指定該至少一個(gè)通用寄存器中數(shù)據(jù)分量的大小。通過執(zhí)行該至少一條或多條指令中的獨(dú)立字段指定數(shù)據(jù)分量的大小,第一字段表示用于存儲(chǔ)器的第一數(shù)據(jù)大小指定符,第二字段表示用于該至少一個(gè)通用寄存器的第二數(shù)據(jù)大小指定符。通過執(zhí)行該至少一條或多條指令中的預(yù)定字段指定數(shù)據(jù)分量的大小,該預(yù)定字段表示存儲(chǔ)位置,其定義用于存儲(chǔ)器的第一數(shù)據(jù)大小指定符和用于該至少一個(gè)通用寄存器的第二數(shù)據(jù)大小指定符。當(dāng)該至少一條或多條指令指定存儲(chǔ)器中的源數(shù)據(jù)分量的大小大于該至少一個(gè)通用寄存器中的目標(biāo)數(shù)據(jù)分量的大小時(shí),可截短該存儲(chǔ)器中源數(shù)據(jù)分量的一部分。在另一種形式中,當(dāng)該至少一條或多條指令指定存儲(chǔ)器中的源數(shù)據(jù)分量的大小大于該至少一個(gè)通用寄存器中的目標(biāo)數(shù)據(jù)分量的大小時(shí),根據(jù)該存儲(chǔ)器中的源數(shù)據(jù)分量低階部分的值,舍入該存儲(chǔ)器中的源數(shù)據(jù)分量的高階部分。在另一形式中,數(shù)據(jù)處理系統(tǒng)包括存儲(chǔ)器和用于執(zhí)行數(shù)據(jù)處理指令的處理器。至少一條數(shù)據(jù)處理指令包括指定存儲(chǔ)在該存儲(chǔ)器中的數(shù)據(jù)分量大小的控制信息,其獨(dú)立于指定存儲(chǔ)在該存儲(chǔ)器外部的數(shù)據(jù)處理系統(tǒng)中的至少一個(gè)存儲(chǔ)位置的數(shù)據(jù)分量的大小。
在另一形式中,該系統(tǒng)中的處理器電路執(zhí)行至少第一條指令和該第一條指令之后的第二條指令。該第一條指令在存儲(chǔ)器和至少一個(gè)通用寄存器間傳送數(shù)據(jù)分量流,這些數(shù)據(jù)分量將在該存儲(chǔ)器和該至少一個(gè)通用寄存器的至少一個(gè)中進(jìn)行排隊(duì)。該第二條指令包括至少第一源操作數(shù),并且基于作為該第二條指令的源操作數(shù)的該至少一個(gè)通用寄存器,使該數(shù)據(jù)分量流的一部分條件出隊(duì)。當(dāng)該至少一個(gè)通用寄存器用作由該第二條指令指定的預(yù)定類型功能的源操作數(shù)時(shí),可執(zhí)行該數(shù)據(jù)分量一部分的條件出隊(duì)。在另一種形式中,基于該第二條指令的控制字段值執(zhí)行該部分?jǐn)?shù)據(jù)分量的條件出隊(duì)。該第二條指令還可進(jìn)一步包括第二源操作數(shù),并且當(dāng)該至少一個(gè)通用寄存器用作該第一源操作數(shù)時(shí),執(zhí)行該條件出隊(duì)。在一種形式中,當(dāng)該至少一個(gè)通用寄存器作為該第二源操作數(shù)時(shí),不執(zhí)行該條件出隊(duì)。
根據(jù)另一方面,數(shù)據(jù)處理系統(tǒng)中數(shù)據(jù)分量的選擇性出隊(duì)方法包括提供存儲(chǔ)操作數(shù)的存儲(chǔ)器和提供至少一個(gè)通用寄存器。執(zhí)行至少第一條指令和該第一條指令后的第二條指令。在該存儲(chǔ)器和該至少一個(gè)通用寄存器間傳送數(shù)據(jù)分量流,以響應(yīng)該第一條指令。對(duì)該存儲(chǔ)器和該至少一個(gè)通用寄存器中的至少一個(gè)中的數(shù)據(jù)分量進(jìn)行排隊(duì)。執(zhí)行該第一條指令之后的第二條指令。該第二條指令包括至少第一源操作數(shù)。根據(jù)作為該第二條指令的源操作數(shù)的該至少一個(gè)通用寄存器,使數(shù)據(jù)分量流的一部分條件出隊(duì)。當(dāng)該至少一個(gè)通用寄存器用作由該第二條指令指定的預(yù)定類型功能的第二源操作數(shù)時(shí),使該部分?jǐn)?shù)據(jù)分量流條件出隊(duì)??稍谠摰诙l指令中提供第二源操作數(shù),并且在當(dāng)該至少一個(gè)通用寄存器作為第一源操作數(shù)時(shí)使該部分?jǐn)?shù)據(jù)分量流條件出隊(duì)。在一種形式中,當(dāng)該至少一個(gè)通用寄存器用作該第二源操作數(shù)時(shí)不執(zhí)行出隊(duì)。
根據(jù)另一方面,數(shù)據(jù)處理系統(tǒng)包括存儲(chǔ)操作數(shù)的存儲(chǔ)器和至少一個(gè)通用寄存器。處理器電路執(zhí)行多條指令,該多條指令中的第一條在該存儲(chǔ)器和該至少一個(gè)通用寄存器間傳送數(shù)據(jù)分量流,并在該存儲(chǔ)器和該至少一個(gè)通用寄存器中的至少一個(gè)中對(duì)這些數(shù)據(jù)分量進(jìn)行排隊(duì)。數(shù)據(jù)分量流的一部分條件出隊(duì),以響應(yīng)對(duì)應(yīng)于該多條指令的適當(dāng)子集中預(yù)定指令的該多條指令中的第二條。該處理器電路可基于作為該多條指令的第二條的源操作數(shù)的該至少一個(gè)通用寄存器,進(jìn)一步使該部分?jǐn)?shù)據(jù)分量流條件出隊(duì)。該處理器電路可基于該多條指令的第二條的控制字段值,進(jìn)一步使該部分?jǐn)?shù)據(jù)分量流條件出隊(duì)。
根據(jù)另一方面,數(shù)據(jù)處理系統(tǒng)中數(shù)據(jù)分量的選擇性出隊(duì)方法包括提供存儲(chǔ)操作數(shù)的存儲(chǔ)器和提供至少一個(gè)通用寄存器。執(zhí)行多條指令,該多條指令的第一條在該存儲(chǔ)器和該至少一個(gè)通用寄存器間傳送數(shù)據(jù)分量流。在該存儲(chǔ)器和該至少一個(gè)通用寄存器中的至少一個(gè)中對(duì)該數(shù)據(jù)分量流進(jìn)行排隊(duì)。使該數(shù)據(jù)分量流的一部分條件出隊(duì),以響應(yīng)對(duì)應(yīng)于該多條指令的適當(dāng)子集中預(yù)定指令的該多條指令的第二條。
根據(jù)另一方面,數(shù)據(jù)處理系統(tǒng)包括存儲(chǔ)操作數(shù)的存儲(chǔ)器和至少一個(gè)通用寄存器。處理器電路執(zhí)行多條指令。該多條指令的第一條在該存儲(chǔ)器和至少一個(gè)通用寄存器間傳送數(shù)據(jù)分量流,這些數(shù)據(jù)分量將在該存儲(chǔ)器和該至少一個(gè)通用寄存器中的至少一個(gè)中進(jìn)行排隊(duì)。根據(jù)作為該多條指令的第二條的目標(biāo)操作數(shù)的該至少一個(gè)通用寄存器,使該數(shù)據(jù)分量流的一部分條件入隊(duì)。
根據(jù)另一方面,數(shù)據(jù)處理器中數(shù)據(jù)分量的選擇性入隊(duì)方法包括提供存儲(chǔ)操作數(shù)的存儲(chǔ)器和提供至少一個(gè)通用寄存器。執(zhí)行多條指令,該多條指令的第一條在該存儲(chǔ)器和該至少一個(gè)通用寄存器間傳送數(shù)據(jù)分量流,這些數(shù)據(jù)分量將在該存儲(chǔ)器和該至少一個(gè)通用寄存器中的至少一個(gè)中進(jìn)行排隊(duì)。根據(jù)作為該多條指令的第二條的目標(biāo)操作數(shù)的該至少一個(gè)通用寄存器,使該數(shù)據(jù)分量流的一部分條件入隊(duì)。
根據(jù)另一方面,數(shù)據(jù)處理系統(tǒng)包括存儲(chǔ)操作數(shù)的存儲(chǔ)器和至少一個(gè)通用寄存器。該處理器電路執(zhí)行至少第一條指令和該第一條指令后的第二條指令。該第一條指令在存儲(chǔ)器和至少一個(gè)通用寄存器間傳送數(shù)據(jù)分量流,這些數(shù)據(jù)分量將在該存儲(chǔ)器和該至少一個(gè)通用寄存器中的至少一個(gè)中進(jìn)行排隊(duì)。該第二條指令包括至少第一目標(biāo)操作數(shù)?;谧鳛樵摰诙l指令的目標(biāo)操作數(shù)的該至少一個(gè)通用寄存器,使該數(shù)據(jù)分量流的一部分條件入隊(duì)。
根據(jù)另一方面,數(shù)據(jù)處理系統(tǒng)包括存儲(chǔ)操作數(shù)的存儲(chǔ)器和至少一個(gè)通用寄存器。該處理器電路執(zhí)行至少第一條指令和該第一條指令后的第二條指令。該第一條指令在該存儲(chǔ)器和該至少一個(gè)通用寄存器間傳送數(shù)據(jù)分量流,這些數(shù)據(jù)分量將在該存儲(chǔ)器和該至少一個(gè)通用寄存器中的至少一個(gè)中進(jìn)行排隊(duì)。該第一條指令進(jìn)一步指定將要傳送的數(shù)據(jù)分量的數(shù)量,并且基于作為該第二條指令的源操作數(shù)的該至少一個(gè)通用寄存器,使來自該部分?jǐn)?shù)據(jù)分量流的的多個(gè)數(shù)據(jù)分量條件出隊(duì)。
根據(jù)另一方面,數(shù)據(jù)處理系統(tǒng)包括存儲(chǔ)操作數(shù)的存儲(chǔ)器和至少一個(gè)通用寄存器。該處理器電路執(zhí)行至少第一條指令和該第一條指令后的第二條指令。該第一條指令在存儲(chǔ)器和至少一個(gè)通用寄存器間傳送數(shù)據(jù)分量流,這些數(shù)據(jù)分量將在該存儲(chǔ)器和該至少一個(gè)通用寄存器中的至少一個(gè)中進(jìn)行排隊(duì)。該第一條指令進(jìn)一步指定將要傳送的數(shù)據(jù)分量的數(shù)量,并且基于作為該第二條指令的目標(biāo)操作數(shù)的該至少一個(gè)通用寄存器,使來自該部分?jǐn)?shù)據(jù)分量流的的多個(gè)數(shù)據(jù)分量條件入隊(duì)。
根據(jù)另一方面,數(shù)據(jù)處理系統(tǒng)包括存儲(chǔ)操作數(shù)的存儲(chǔ)器、至少一個(gè)通用寄存器和處理器電路。該處理器電路包括多條指令。該多條指令中的第一條在存儲(chǔ)器和至少一個(gè)通用寄存器間傳送數(shù)據(jù)分量流,這些數(shù)據(jù)分量將在該存儲(chǔ)器和該至少一個(gè)通用寄存器中的至少一個(gè)中進(jìn)行排隊(duì)。條件執(zhí)行該數(shù)據(jù)分量流的一部分的入隊(duì)和出隊(duì)中的至少一個(gè),以響應(yīng)該多條指令的第二條中的控制字段。
根據(jù)另一方面,數(shù)據(jù)處理系統(tǒng)包括存儲(chǔ)操作數(shù)的存儲(chǔ)器和多個(gè)通用寄存器,其中,每個(gè)通用寄存器保存多個(gè)數(shù)據(jù)分量。處理器電路執(zhí)行一條或多條指令,該一條或多條指令中的至少一條在該存儲(chǔ)器和該多個(gè)通用寄存器中的至少兩個(gè)間傳送多個(gè)數(shù)據(jù)分量,其中,該至少一條或多條指令指定將要在該多個(gè)通用寄存器中的至少兩個(gè)中的每一個(gè)和該存儲(chǔ)器間傳送的寄存器分量的數(shù)量。該一條或多條指令除了指定將要傳送的寄存器分量的數(shù)量外,還指定將加載或存儲(chǔ)哪一個(gè)寄存器分量。在另一種形式中,當(dāng)在該多個(gè)通用寄存器中的至少兩個(gè)中的每一個(gè)和該存儲(chǔ)器間僅傳送該多個(gè)數(shù)據(jù)分量的子集時(shí),用預(yù)定值填充任何未指定的數(shù)據(jù)分量。
根據(jù)另一方面,在數(shù)據(jù)處理系統(tǒng)中傳送數(shù)據(jù)分量的方法包括在存儲(chǔ)器中存儲(chǔ)操作數(shù)。在多個(gè)通用寄存器的每一個(gè)中存儲(chǔ)多個(gè)數(shù)據(jù)分量。該數(shù)據(jù)處理系統(tǒng)執(zhí)行一條或多條指令。該一條或多條指令中的至少一條引起在該存儲(chǔ)器和該多個(gè)通用寄存器中的至少兩個(gè)間的多個(gè)數(shù)據(jù)分量的傳送。該至少一條或多條指令指定將要在該多個(gè)寄存器中的至少兩個(gè)中的每一個(gè)和該存儲(chǔ)器間傳送的寄存器分量的數(shù)量。
根據(jù)另一方面,數(shù)據(jù)處理系統(tǒng)包括存儲(chǔ)操作數(shù)的存儲(chǔ)器和多個(gè)通用寄存器,其中,每個(gè)通用寄存器保存多個(gè)數(shù)據(jù)分量。處理器電路執(zhí)行一條或多條指令,該一條或多條指令中的至少一條在該存儲(chǔ)器和該多個(gè)通用寄存器中的至少兩個(gè)間傳送多個(gè)數(shù)據(jù)分量。該至少一條或多條指令指定將要傳送該多個(gè)通用寄存器中的至少兩個(gè)中的哪些數(shù)據(jù)分量。當(dāng)僅傳送多個(gè)數(shù)據(jù)分量的子集時(shí),該處理器電路用預(yù)定值填充任何未指定的數(shù)據(jù)分量。在一種形式中,由該至少一條或多條指令指定的數(shù)據(jù)分量在該多個(gè)通用寄存器中的至少兩個(gè)中連續(xù)排列。在另一種形式中,由該至少一條或多條指令指定的數(shù)據(jù)分量在該多個(gè)通用寄存器中的至少兩個(gè)中不是連續(xù)排列。
根據(jù)另一方面,在數(shù)據(jù)處理系統(tǒng)中傳送數(shù)據(jù)分量的方法包括在存儲(chǔ)器中存儲(chǔ)操作數(shù)和在多個(gè)通用寄存器中的每一個(gè)中保存多個(gè)數(shù)據(jù)分量。執(zhí)行一條或多條指令,該一條或多條指令中的至少一條在該存儲(chǔ)器和該多個(gè)通用寄存器中的至少兩個(gè)間引起多個(gè)數(shù)據(jù)分量的傳送,其中,至少一條或多條指令指定將要傳送該多個(gè)通用寄存器中的至少兩個(gè)中的哪些數(shù)據(jù)分量。
根據(jù)另一方面,一種數(shù)據(jù)處理系統(tǒng)包括存儲(chǔ)操作數(shù)的存儲(chǔ)器和多個(gè)通用寄存器,其中,每一通用寄存器保存多個(gè)數(shù)據(jù)分量。處理器電路執(zhí)行一條或多條指令,該一條或多條指令中的至少一條在該存儲(chǔ)器和該多個(gè)通用寄存器中的至少兩個(gè)間傳送多個(gè)數(shù)據(jù)分量。該至少一條或多條指令既指定將要在該多個(gè)寄存器中的至少兩個(gè)中的每一個(gè)和該存儲(chǔ)器間傳送的數(shù)據(jù)分量的數(shù)量,還進(jìn)一步指定將要傳送的數(shù)據(jù)分量的總數(shù)。
根據(jù)另一方面,數(shù)據(jù)處理系統(tǒng)包括存儲(chǔ)操作數(shù)的存儲(chǔ)器和至少一個(gè)通用寄存器。處理器電路執(zhí)行一條或多條指令,該一條或多條指令中的至少一條用于在該存儲(chǔ)器和該至少一個(gè)通用寄存器間傳送多個(gè)數(shù)據(jù)分量,其中,該一條或多條指令指定(a)存儲(chǔ)器中連續(xù)數(shù)據(jù)分量間的第一部分中數(shù)據(jù)分量間的第一偏移;(b)將在該存儲(chǔ)器和該至少一個(gè)GPR間傳送的數(shù)據(jù)分量的第一數(shù)量;以及(c)該存儲(chǔ)器中數(shù)據(jù)分量的第一部分和第二部分間的第二偏移。在一種形式中,該一條或多條指令中的這一條還指定存儲(chǔ)器中數(shù)據(jù)分量的數(shù)據(jù)分量大小。在另一形式中,該一條或多條指令中的這一條還指定該存儲(chǔ)器中數(shù)據(jù)分量的大小,其獨(dú)立于指定該至少一個(gè)通用寄存器中數(shù)據(jù)分量的大小。該處理器電路基于該存儲(chǔ)器中數(shù)據(jù)分量的大小,確定將要傳送的數(shù)據(jù)分量的總數(shù)。該處理器電路可基于該至少一個(gè)通用寄存器中數(shù)據(jù)分量的大小,確定將要傳送的數(shù)據(jù)分量的總數(shù)。該一條或多條指令中的這一條可進(jìn)一步指定將要在該存儲(chǔ)器和該至少一個(gè)通用寄存器間傳送的數(shù)據(jù)分量的總數(shù)。該數(shù)據(jù)處理系統(tǒng)可進(jìn)一步包括第一通用寄存器和第二通用寄存器,其中,該一條或多條指令中的這一條在該存儲(chǔ)器和第一通用寄存器與第二通用寄存器間傳送數(shù)據(jù)分量,以響應(yīng)執(zhí)行該一條或多條指令中的該條指令。該一條或多條指令中的這一條指令可進(jìn)一步指定將要在該存儲(chǔ)器和第一通用寄存器與第二通用寄存器間傳送的數(shù)據(jù)分量的總數(shù)。如果傳送的數(shù)據(jù)分量的總數(shù)并沒有完全填充該第二通用寄存器,則處理器電路可用預(yù)定值填充任何剩余比特位置的一部分。該一條或多條指令中的這一條指令可獨(dú)立地指定將要在該存儲(chǔ)器和該第一與第二通用寄存器中的每一個(gè)間傳送的數(shù)據(jù)分量的數(shù)量。如果傳送的數(shù)據(jù)分量的總數(shù)并沒有完全填充該第二通用寄存器,則該處理器電路可用預(yù)定值填充任何剩余比特位置的至少一部分。該一條或多條指令中的這一條指令可進(jìn)一步包括指示符,其中,該處理器電路使用該第二偏移不超過一次,同時(shí)傳送第一數(shù)量的數(shù)據(jù)分量。當(dāng)該一條或多條指令中的這一條指定僅使用該第二偏移一次時(shí),該處理器電路可利用循環(huán)緩沖發(fā)送存儲(chǔ)器中的數(shù)據(jù)分量。該一條或多條指令中的這一條可進(jìn)一步包括指示符,其中,如果將要傳送的數(shù)據(jù)分量的第一數(shù)量是將要傳送的數(shù)據(jù)分量的第一部分的兩倍,則該處理器電路使用該第二偏移多于一次。
根據(jù)另一方面,數(shù)據(jù)處理系統(tǒng)包括存儲(chǔ)操作數(shù)的存儲(chǔ)器和至少一個(gè)通用寄存器。處理器電路執(zhí)行一條或多條指令,該一條或多條指令中的至少一條在該存儲(chǔ)器和該至少一個(gè)通用寄存器間傳送數(shù)據(jù)分量,其中,該一條或多條指令的一條指定基數(shù)指示符,用于在該存儲(chǔ)器和該至少一個(gè)通用寄存器間以比特翻轉(zhuǎn)的順序執(zhí)行傳送一個(gè)或多個(gè)數(shù)據(jù)分量。
根據(jù)另一方面,一種使用多個(gè)尋址模式的方法提供存儲(chǔ)操作數(shù)的存儲(chǔ)器。提供至少一個(gè)通用寄存器。執(zhí)行一條或多條指令,該一條或多條指令中的至少一條在該存儲(chǔ)器和該至少一個(gè)通用寄存器間傳送數(shù)據(jù)分量。該一條或多條指令中的至少一條指定該存儲(chǔ)器中連續(xù)數(shù)據(jù)分量的第一部分中數(shù)據(jù)分量間的第一偏移。該一條或多條指令中的至少一條指定將在該存儲(chǔ)器和該至少一個(gè)通用寄存器(GPR)間傳送的數(shù)據(jù)分量的第一數(shù)量。該一條或多條指令中的至少一條可進(jìn)一步指定該存儲(chǔ)器中數(shù)據(jù)分量的第一部分和第二部分間的第二偏移。該一條或多條指令中的至少一條可用于進(jìn)一步指定存儲(chǔ)器中數(shù)據(jù)分量的數(shù)據(jù)分量大小。該一條或多條指令中的至少一條可用于進(jìn)一步指定該存儲(chǔ)器中數(shù)據(jù)分量的大小,其獨(dú)立于指定該至少一個(gè)通用寄存器中數(shù)據(jù)分量的大小。處理器基于該存儲(chǔ)器中數(shù)據(jù)分量的大小,用于確定將要傳送的數(shù)據(jù)分量的總數(shù)。該處理器可基于該至少一個(gè)通用寄存器中數(shù)據(jù)分量的大小,確定將要傳送的數(shù)據(jù)分量的總數(shù)。該一條或多條指令中的至少一條指令可用于進(jìn)一步指定將要在該存儲(chǔ)器和該至少一個(gè)通用寄存器間傳送的數(shù)據(jù)分量的總數(shù)。可提供第一通用寄存器和第二通用寄存器并且在該存儲(chǔ)器和第一通用寄存器與第二通用寄存器間傳送數(shù)據(jù)分量,以響應(yīng)執(zhí)行該一條或多條指令中的該條指令。該一條或多條指令中的這一條指令可用于進(jìn)一步指定將要在該存儲(chǔ)器和第一通用寄存器與第二通用寄存器間傳送的數(shù)據(jù)分量的總數(shù)。在一種形式中,如果傳送的數(shù)據(jù)分量的總數(shù)并沒有完全填充該第二通用寄存器,則用預(yù)定值填充該第二通用寄存器中任何剩余的未填充的比特位置的至少一部分。該一條或多條指令中的這一條指令可用于進(jìn)一步獨(dú)立地指定將要在該存儲(chǔ)器和該第一與第二通用寄存器中的每一個(gè)間傳送的數(shù)據(jù)分量的數(shù)量。在一種形式中,如果傳送的數(shù)據(jù)分量的總數(shù)并沒有完全填充該第二通用寄存器,則利用諸如零的預(yù)定值填充任何剩余比特位置的至少一部分??稍谠撘粭l或多條指令中的這一條中提供指示符,其中,作為該指示符的響應(yīng),處理器僅使用該第二偏移一次,來傳送第一數(shù)量的數(shù)據(jù)分量。
根據(jù)另一方面,當(dāng)該一條或多條指令中的這一條指定僅使用該第二偏移一次時(shí),則可利用循環(huán)緩沖,在該處理器的控制之下,發(fā)送存儲(chǔ)器中的數(shù)據(jù)分量??稍谠撘粭l或多條指令中的這一條中提供指示符,其中,作為該指示符的響應(yīng),如果將要傳送的第一數(shù)量的數(shù)據(jù)分量是將要傳送的存儲(chǔ)器中數(shù)據(jù)分量的第一部分中的數(shù)據(jù)分量數(shù)量的兩倍,則該處理器使用該第二偏移多于一次??稍撘粭l或多條指令的這一條中提供基數(shù)指示符,用于在該存儲(chǔ)器和該至少一個(gè)通用寄存器間以比特翻轉(zhuǎn)的順序執(zhí)行一個(gè)或多個(gè)數(shù)據(jù)分量的傳送。
根據(jù)另一方面,一種數(shù)據(jù)處理尋址方法包括提供存儲(chǔ)操作數(shù)的存儲(chǔ)器和提供至少一個(gè)通用寄存器。執(zhí)行一條或多條指令,該一條或多條指令中的至少一條在該存儲(chǔ)器和該至少一個(gè)通用寄存器間傳送數(shù)據(jù)分量。該一條或多條指令中的至少一條在該一條或多條指令的這一條中指定基數(shù)指示符,該基數(shù)指示符在該存儲(chǔ)器和該至少一個(gè)通用寄存器間以比特翻轉(zhuǎn)的順序執(zhí)行一個(gè)或多個(gè)數(shù)據(jù)分量的傳送。
根據(jù)另一方面,一種數(shù)據(jù)處理系統(tǒng)尋址方法包括提供存儲(chǔ)操作數(shù)的存儲(chǔ)器和提供至少一個(gè)通用寄存器。提供處理器電路以執(zhí)行一條或多條指令。該一條或多條指令中的至少一條在該存儲(chǔ)器和該至少一個(gè)通用寄存器間傳送數(shù)據(jù)分量,其中,該一條或多條指令中的一條執(zhí)行以比特翻轉(zhuǎn)的順序?qū)㈩A(yù)定數(shù)據(jù)分量存儲(chǔ)至存儲(chǔ)器中,并將該預(yù)定數(shù)據(jù)分量傳送至該至少一個(gè)通用寄存器。該一條或多條指令中的至少一條進(jìn)一步指定將要傳送至該至少一個(gè)通用寄存器中的數(shù)據(jù)分量的數(shù)量。在另一形式中,該一條或多條指令中的至少一條進(jìn)一步指定該存儲(chǔ)器中數(shù)據(jù)分量的大小,其獨(dú)立于指定該至少一個(gè)通用寄存器中數(shù)據(jù)分量的大小。
根據(jù)另一方面,一種數(shù)據(jù)處理系統(tǒng)尋址方法包括提供存儲(chǔ)操作數(shù)的存儲(chǔ)器和提供至少一個(gè)通用寄存器。提供處理器電路以執(zhí)行一條或多條指令,該一條或多條指令中的至少一條在該存儲(chǔ)器和該至少一個(gè)通用寄存器間傳送數(shù)據(jù)分量,其中,該一條或多條指令中的一條在該存儲(chǔ)器中以連續(xù)順序存儲(chǔ)預(yù)定數(shù)據(jù)分量,并且以比特翻轉(zhuǎn)順序?qū)⒃擃A(yù)定數(shù)據(jù)分量傳送至該至少一個(gè)通用寄存器。
根據(jù)另一方面,一種數(shù)據(jù)處理系統(tǒng)尋址方法包括提供存儲(chǔ)操作數(shù)的存儲(chǔ)器和提供至少一個(gè)通用寄存器。提供處理器電路以執(zhí)行一條或多條指令,該一條或多條指令中的至少一條在該存儲(chǔ)器和該至少一個(gè)通用寄存器間傳送數(shù)據(jù)分量,其中,該一條或多條指令中的一條在該至少一個(gè)通用寄存器中執(zhí)行以比特翻轉(zhuǎn)順序存儲(chǔ)預(yù)定數(shù)據(jù)分量,并且將該預(yù)定數(shù)據(jù)分量傳送至該存儲(chǔ)器。
根據(jù)另一方面,一種數(shù)據(jù)處理系統(tǒng)尋址方法包括提供存儲(chǔ)操作數(shù)的存儲(chǔ)器和提供至少一個(gè)通用寄存器。提供處理器電路以執(zhí)行一條或多條指令,該一條或多條指令中的至少一條在該存儲(chǔ)器和該至少一個(gè)通用寄存器間傳送數(shù)據(jù)分量,其中,該一條或多條指令中的一條在該至少一個(gè)通用寄存器中以連續(xù)順序存儲(chǔ)預(yù)定數(shù)據(jù)分量,并且以比特翻轉(zhuǎn)順序?qū)⒃擃A(yù)定數(shù)據(jù)分量傳送至該存儲(chǔ)器。
在前述說明中,參考特定實(shí)施例、示例和方面說明了本發(fā)明。然而,本領(lǐng)域的普通技術(shù)人員明白,可進(jìn)行各種修改和變化,而不脫離權(quán)利要求說明的本發(fā)明的精神與范圍。例如,框圖可包括與已表示的方框不同的方框,并且可具有更多或更少的方框,或不同的布置。另外,作為另一示例,此處說明的指令可具有不同于那些已經(jīng)說明的指令的各種不同格式,并使用不同的控制字段和參數(shù)。每一條指令甚至可作為多條指令執(zhí)行。另外,作為另一示例,此處說明的寄存器可為位于該數(shù)據(jù)處理系統(tǒng)任何地方的任何類型的存儲(chǔ)電路。因此,說明書與附圖將視為說明意義,而不是限定意義,并且所有這樣的改變將包含在本發(fā)明的范圍之內(nèi)。
已經(jīng)針對(duì)特定實(shí)施例說明了益處、優(yōu)勢(shì)和問題的解決方案。然而,這些益處、優(yōu)勢(shì)和問題的解決方案以及使任何益處、優(yōu)勢(shì)、問題的解決方案出現(xiàn)或變得更加顯著的任何要素將不被視為任何或所有權(quán)利要求的關(guān)鍵的、必須的或本質(zhì)的特征或要素。如此處所使用,術(shù)語“包括”,或其任何變體,將涵蓋非排它性的包涵,使得包括一系列要素的過程、方法、物品或裝置不僅包括那些要素,還可包括沒有明確列出的,或這些過程、方法、物品或裝置固有的其它要素。
權(quán)利要求
1.一種數(shù)據(jù)處理系統(tǒng),其包括存儲(chǔ)操作數(shù)的存儲(chǔ)器;至少一個(gè)通用寄存器;以及執(zhí)行一條或多條指令的處理器電路,所述一條或多條指令中的至少一條用于在所述存儲(chǔ)器和所述至少一個(gè)通用寄存器間傳送數(shù)據(jù)分量,其中,所述一條或多條指令中的一條指定(a)存儲(chǔ)器中連續(xù)數(shù)據(jù)分量的第一部分中數(shù)據(jù)分量間的第一偏移;(b)將在所述存儲(chǔ)器和所述至少一個(gè)GPR間傳送的數(shù)據(jù)分量的第一數(shù)量;以及(c)所述存儲(chǔ)器中數(shù)據(jù)分量的第一部分和第二部分間的第二偏移。
2.一種數(shù)據(jù)處理系統(tǒng),其包括存儲(chǔ)操作數(shù)的存儲(chǔ)器;至少一個(gè)通用寄存器;以及執(zhí)行一條或多條指令的處理器電路,所述一條或多條指令中的至少一條用于在所述存儲(chǔ)器和所述至少一個(gè)通用寄存器間傳送數(shù)據(jù)分量,其中,所述一條或多條指令中的一條指定基數(shù)指示符,用于在所述存儲(chǔ)器和所述至少一個(gè)通用寄存器間以比特翻轉(zhuǎn)的順序執(zhí)行一個(gè)或多個(gè)數(shù)據(jù)分量的傳送。
3.一種用于使用多個(gè)尋址模式的方法,其包括提供存儲(chǔ)操作數(shù)的存儲(chǔ)器;提供至少一個(gè)通用寄存器;執(zhí)行一條或多條指令,所述一條或多條指令中的至少一條在所述存儲(chǔ)器和所述至少一個(gè)通用寄存器間傳送數(shù)據(jù)分量;利用所述一條或多條指令中的所述至少一條指定所述存儲(chǔ)器中連續(xù)數(shù)據(jù)分量的第一部分中數(shù)據(jù)分量間的第一偏移;利用所述一條或多條指令中的所述至少一條指定將在所述存儲(chǔ)器和所述至少一個(gè)GPR間傳送的數(shù)據(jù)分量的第一數(shù)量;以及利用所述一條或多條指令中的所述至少一條指定所述存儲(chǔ)器中數(shù)據(jù)分量的第一部分和第二部分間的第二偏移。
4.一種數(shù)據(jù)處理尋址方法,其包括提供存儲(chǔ)操作數(shù)的存儲(chǔ)器;提供至少一個(gè)通用寄存器;執(zhí)行一條或多條指令,所述一條或多條指令中的至少一條在所述存儲(chǔ)器和所述至少一個(gè)通用寄存器間傳送數(shù)據(jù)分量;利用所述一條或多條指令中的所述至少一條指定所述一條或多條指令的這一條指令中的基數(shù)指示符,所述基數(shù)指示符在所述存儲(chǔ)器和所述至少一個(gè)通用寄存器間以比特翻轉(zhuǎn)的順序執(zhí)行一個(gè)或多個(gè)數(shù)據(jù)分量的傳送。
5.一種數(shù)據(jù)處理系統(tǒng)尋址方法,其包括提供存儲(chǔ)操作數(shù)的存儲(chǔ)器;提供至少一個(gè)通用寄存器;以及提供處理器電路以執(zhí)行一條或多條指令,所述一條或多條指令中的至少一條用于在所述存儲(chǔ)器和所述至少一個(gè)通用寄存器間傳送數(shù)據(jù)分量,其中,所述一條或多條指令中的一條執(zhí)行以比特翻轉(zhuǎn)的順序?qū)㈩A(yù)定數(shù)據(jù)分量存儲(chǔ)至所述存儲(chǔ)器中,并將所述預(yù)定數(shù)據(jù)分量傳送至所述至少一個(gè)通用寄存器。
6.一種數(shù)據(jù)處理系統(tǒng)尋址方法,其包括提供存儲(chǔ)操作數(shù)的存儲(chǔ)器;提供至少一個(gè)通用寄存器;以及提供處理器電路以執(zhí)行一條或多條指令,所述一條或多條指令中的至少一條用于在所述存儲(chǔ)器和所述至少一個(gè)通用寄存器間傳送數(shù)據(jù)分量,其中,所述一條或多條指令中的一條以連續(xù)順序?qū)㈩A(yù)定數(shù)據(jù)分量存儲(chǔ)至所述存儲(chǔ)器中,并以比特翻轉(zhuǎn)的順序?qū)⑺鲱A(yù)定數(shù)據(jù)分量傳送至所述至少一個(gè)通用寄存器。
7.一種數(shù)據(jù)處理系統(tǒng)尋址方法,其包括提供存儲(chǔ)操作數(shù)的存儲(chǔ)器;提供至少一個(gè)通用寄存器;以及提供處理器電路以執(zhí)行一條或多條指令,所述一條或多條指令中的至少一條用于在所述存儲(chǔ)器和所述至少一個(gè)通用寄存器間傳送數(shù)據(jù)分量,其中,所述一條或多條指令中的一條執(zhí)行以比特翻轉(zhuǎn)的順序?qū)㈩A(yù)定數(shù)據(jù)分量存儲(chǔ)至所述至少一個(gè)通用寄存器中,并將所述預(yù)定數(shù)據(jù)分量傳送至所述存儲(chǔ)器。
8.一種數(shù)據(jù)處理系統(tǒng)尋址方法,其包括提供存儲(chǔ)操作數(shù)的存儲(chǔ)器;提供至少一個(gè)通用寄存器;以及提供處理器電路以執(zhí)行一條或多條指令,所述一條或多條指令中的至少一條在所述存儲(chǔ)器和所述至少一個(gè)通用寄存器間傳送數(shù)據(jù)分量,其中,所述一條或多條指令中的一條以連續(xù)順序?qū)㈩A(yù)定數(shù)據(jù)分量存儲(chǔ)至所述至少一個(gè)通用寄存器中,并以比特翻轉(zhuǎn)的順序?qū)⑺鲱A(yù)定數(shù)據(jù)分量傳送至所述存儲(chǔ)器。
9.一種數(shù)據(jù)處理系統(tǒng),其包括存儲(chǔ)操作數(shù)的存儲(chǔ)器;至少一個(gè)通用寄存器;以及用于執(zhí)行至少第一條指令和該第一條指令之后的第二條指令的處理器電路,所述第一條指令在所述存儲(chǔ)器和所述至少一個(gè)通用寄存器間傳送數(shù)據(jù)分量流,這些數(shù)據(jù)分量將在所述存儲(chǔ)器和所述至少一個(gè)通用寄存器的至少一個(gè)中進(jìn)行排隊(duì),其中,所述第二條指令包括至少第一源操作數(shù),并且基于作為所述第二條指令的源操作數(shù)的所述至少一個(gè)通用寄存器,使所述數(shù)據(jù)分量流的一部分有條件地出隊(duì)。
10.一種在數(shù)據(jù)處理系統(tǒng)中選擇性地使數(shù)據(jù)分量出隊(duì)的方法,其包括提供存儲(chǔ)操作數(shù)的存儲(chǔ)器;提供至少一個(gè)通用寄存器;以及執(zhí)行至少第一條指令和該第一條指令之后的第二條指令;在所述存儲(chǔ)器和所述至少一個(gè)通用寄存器間傳送數(shù)據(jù)分量流,以響應(yīng)所述第一條指令;在所述存儲(chǔ)器和所述至少一個(gè)通用寄存器中的至少一個(gè)中對(duì)數(shù)據(jù)分量流進(jìn)行排隊(duì);執(zhí)行所述第一條指令之后的第二條指令,所述第二條指令包括至少第一源操作數(shù);以及根據(jù)作為所述第二條指令的源操作數(shù)的所述至少一個(gè)通用寄存器,使數(shù)據(jù)分量流的一部分有條件地出隊(duì)。
11.一種數(shù)據(jù)處理系統(tǒng),其包括存儲(chǔ)操作數(shù)的存儲(chǔ)器;至少一個(gè)通用寄存器;以及用于執(zhí)行多條指令的處理器電路,所述多條指令中的第一條在所述存儲(chǔ)器和所述至少一個(gè)通用寄存器間傳送數(shù)據(jù)分量流,并在所述存儲(chǔ)器和所述至少一個(gè)通用寄存器中的至少一個(gè)中對(duì)這些數(shù)據(jù)分量進(jìn)行排隊(duì),并且使數(shù)據(jù)分量流的一部分有條件地出隊(duì),以響應(yīng)對(duì)應(yīng)于所述多條指令的適當(dāng)子集中預(yù)定指令的所述多條指令中的第二條。
12.一種在數(shù)據(jù)處理系統(tǒng)中選擇性使數(shù)據(jù)分量出隊(duì)的方法,其包括提供存儲(chǔ)操作數(shù)的存儲(chǔ)器;提供至少一個(gè)通用寄存器;以及執(zhí)行多條指令,所述多條指令的第一條在所述存儲(chǔ)器和所述至少一個(gè)通用寄存器間傳送數(shù)據(jù)分量流;在所述存儲(chǔ)器和所述至少一個(gè)通用寄存器中的至少一個(gè)中對(duì)所述數(shù)據(jù)分量流進(jìn)行排隊(duì);以及使所述數(shù)據(jù)分量流的一部分有條件地出隊(duì),以響應(yīng)對(duì)應(yīng)于所述多條指令的適當(dāng)子集中預(yù)定指令的所述多條指令的第二條。
13.一種數(shù)據(jù)處理系統(tǒng),其包括存儲(chǔ)操作數(shù)的存儲(chǔ)器;至少一個(gè)通用寄存器;以及用于執(zhí)行多條指令的處理器電路,所述多條指令中的第一條在所述存儲(chǔ)器和所述至少一個(gè)通用寄存器間傳送數(shù)據(jù)分量流,并在所述存儲(chǔ)器和所述至少一個(gè)通用寄存器中的至少一個(gè)中對(duì)這些數(shù)據(jù)分量進(jìn)行排隊(duì),根據(jù)作為所述多條指令的第二條的目標(biāo)操作數(shù)的所述至少一個(gè)通用寄存器,使所述數(shù)據(jù)分量流的一部分有條件地入隊(duì)。
14.一種在數(shù)據(jù)處理系統(tǒng)中選擇性使數(shù)據(jù)分量入隊(duì)的方法,其包括提供存儲(chǔ)操作數(shù)的存儲(chǔ)器;提供至少一個(gè)通用寄存器;以及執(zhí)行多條指令,所述多條指令的第一條在所述存儲(chǔ)器和所述至少一個(gè)通用寄存器間傳送數(shù)據(jù)分量流,這些數(shù)據(jù)分量將在所述存儲(chǔ)器和所述至少一個(gè)通用寄存器中的至少一個(gè)中進(jìn)行排隊(duì);以及根據(jù)作為所述多條指令的第二條的目標(biāo)操作數(shù)的所述至少一個(gè)通用寄存器,使所述數(shù)據(jù)分量流的一部分有條件地入隊(duì)。
15.一種數(shù)據(jù)處理系統(tǒng),其包括存儲(chǔ)操作數(shù)的存儲(chǔ)器;至少一個(gè)通用寄存器;以及用于執(zhí)行至少第一條指令和該第一條指令之后的第二條指令的處理器電路,所述第一條指令在所述存儲(chǔ)器和所述至少一個(gè)通用寄存器間傳送數(shù)據(jù)分量流,這些數(shù)據(jù)分量將在所述存儲(chǔ)器和所述至少一個(gè)通用寄存器的至少一個(gè)中進(jìn)行排隊(duì),其中,所述第二條指令包括至少第一目標(biāo)操作數(shù),并且基于作為所述第二條指令的目標(biāo)操作數(shù)的所述至少一個(gè)通用寄存器,使所述數(shù)據(jù)分量流的一部分有條件地入隊(duì)。
16.一種數(shù)據(jù)處理系統(tǒng),其包括存儲(chǔ)操作數(shù)的存儲(chǔ)器;至少一個(gè)通用寄存器;以及執(zhí)行至少第一條指令和該第一條指令后的第二條指令的處理器電路,所述第一條指令在所述存儲(chǔ)器和所述至少一個(gè)通用寄存器間傳送數(shù)據(jù)分量流,這些數(shù)據(jù)分量將在所述存儲(chǔ)器和所述至少一個(gè)通用寄存器中的至少一個(gè)中進(jìn)行排隊(duì),其中,所述第一條指令進(jìn)一步指定將要傳送的數(shù)據(jù)分量的數(shù)量,并且基于作為所述第二條指令的源操作數(shù)的所述至少一個(gè)通用寄存器,使來自部分?jǐn)?shù)據(jù)分量流的多個(gè)數(shù)據(jù)分量有條件地出隊(duì)。
17.一種數(shù)據(jù)處理系統(tǒng),其包括存儲(chǔ)操作數(shù)的存儲(chǔ)器;至少一個(gè)通用寄存器;以及執(zhí)行至少第一條指令和該第一條指令后的第二條指令的處理器電路,所述第一條指令在所述存儲(chǔ)器和所述至少一個(gè)通用寄存器間傳送數(shù)據(jù)分量流,這些數(shù)據(jù)分量將在所述存儲(chǔ)器和所述至少一個(gè)通用寄存器中的至少一個(gè)中進(jìn)行排隊(duì),其中,所述第一條指令進(jìn)一步指定將要傳送的數(shù)據(jù)分量的數(shù)量,并且基于作為所述第二條指令的目標(biāo)操作數(shù)的所述至少一個(gè)通用寄存器,使來自部分?jǐn)?shù)據(jù)分量流的多個(gè)數(shù)據(jù)分量有條件地入隊(duì)。
18.一種數(shù)據(jù)處理系統(tǒng),其包括存儲(chǔ)操作數(shù)的存儲(chǔ)器;至少一個(gè)通用寄存器;以及執(zhí)行多條指令的處理器電路,所述多條指令的第一條在所述存儲(chǔ)器和所述至少一個(gè)通用寄存器間傳送數(shù)據(jù)分量流,這些數(shù)據(jù)分量將在所述存儲(chǔ)器和所述至少一個(gè)通用寄存器中的至少一個(gè)中進(jìn)行排隊(duì),并且有條件地執(zhí)行使所述數(shù)據(jù)分量流的一部分的入隊(duì)和出隊(duì)中的至少一個(gè),以響應(yīng)所述多條指令的第二條中的控制字段。
19.一種數(shù)據(jù)處理系統(tǒng),其包括存儲(chǔ)操作數(shù)的存儲(chǔ)器;至少一個(gè)通用寄存器;以及執(zhí)行一條或多條指令的處理器電路,所述一條或多條指令的至少一條用于在所述存儲(chǔ)器和所述至少一個(gè)通用寄存器間傳送數(shù)據(jù)分量,其中,所述至少一條或多條指令指定所述存儲(chǔ)器中數(shù)據(jù)分量的大小,其與指定所述至少一個(gè)通用寄存器中數(shù)據(jù)分量的大小相分離且無關(guān)。
20.一種用于在數(shù)據(jù)處理系統(tǒng)中加載和存儲(chǔ)數(shù)據(jù)分量的方法,其包括提供存儲(chǔ)操作數(shù)的存儲(chǔ)器;提供至少一個(gè)通用寄存器;以及執(zhí)行一條或多條指令,所述一條或多條指令的至少一條引起在所述存儲(chǔ)器和所述至少一個(gè)通用寄存器間傳送數(shù)據(jù)分量,其中,所述至少一條或多條指令指定所述存儲(chǔ)器中數(shù)據(jù)分量的大小,其與指定所述至少一個(gè)通用寄存器中數(shù)據(jù)分量的大小相分離且無關(guān)。
21.一種數(shù)據(jù)處理系統(tǒng),其包括存儲(chǔ)器和用于執(zhí)行數(shù)據(jù)處理指令的處理器,至少一條數(shù)據(jù)處理指令包括指定存儲(chǔ)在所述存儲(chǔ)器中的數(shù)據(jù)分量大小的控制信息,上述指定與指定存儲(chǔ)在所述存儲(chǔ)器外部的數(shù)據(jù)處理系統(tǒng)中的至少一個(gè)存儲(chǔ)位置中的數(shù)據(jù)分量的大小相分離且無關(guān)。
22.一種數(shù)據(jù)處理系統(tǒng),其包括存儲(chǔ)操作數(shù)的存儲(chǔ)器;多個(gè)通用寄存器,其中,每個(gè)通用寄存器保存多個(gè)數(shù)據(jù)分量;以及執(zhí)行一條或多條指令的處理器電路,所述一條或多條指令中的至少一條用于在所述多個(gè)通用寄存器中的至少兩個(gè)和所述存儲(chǔ)器間傳送多個(gè)數(shù)據(jù)分量,其中,所述至少一條或多條指令指定將要在所述多個(gè)通用寄存器中的至少兩個(gè)中的每一個(gè)和所述存儲(chǔ)器間傳送的寄存器分量的數(shù)量。
23.一種在數(shù)據(jù)處理系統(tǒng)中傳送數(shù)據(jù)分量的方法,其包括在存儲(chǔ)器中存儲(chǔ)操作數(shù);在多個(gè)通用寄存器的每一個(gè)中存儲(chǔ)多個(gè)數(shù)據(jù)分量;以及在所述數(shù)據(jù)處理系統(tǒng)中執(zhí)行一條或多條指令,所述一條或多條指令中的至少一條引起在所述多個(gè)通用寄存器中的至少兩個(gè)和所述存儲(chǔ)器間的多個(gè)數(shù)據(jù)分量的傳送,其中,所述至少一條或多條指令指定將要在所述多個(gè)寄存器中的至少兩個(gè)中的每一個(gè)和所述存儲(chǔ)器間傳送的寄存器分量的數(shù)量。
24.一種數(shù)據(jù)處理系統(tǒng),其包括存儲(chǔ)操作數(shù)的存儲(chǔ)器;多個(gè)通用寄存器,其中,每一通用寄存器保存多個(gè)數(shù)據(jù)分量;以及執(zhí)行一條或多條指令的處理器電路,所述一條或多條指令中的至少一條在所述多個(gè)通用寄存器中的至少兩個(gè)和所述存儲(chǔ)器間傳送多個(gè)數(shù)據(jù)分量,其中,所述至少一條或多條指令指定將要傳輸所述多個(gè)通用寄存器的至少兩個(gè)中的哪些數(shù)據(jù)分量。
25.一種在數(shù)據(jù)處理系統(tǒng)中傳送數(shù)據(jù)分量的方法,其包括在存儲(chǔ)器中存儲(chǔ)操作數(shù);在多個(gè)通用寄存器的每一個(gè)中保存多個(gè)數(shù)據(jù)分量;以及執(zhí)行一條或多條指令,所述一條或多條指令中的至少一條引起在所述多個(gè)通用寄存器中的至少兩個(gè)和所述存儲(chǔ)器間傳送多個(gè)數(shù)據(jù)分量,其中,所述至少一條或多條指令指定將要傳輸所述多個(gè)通用寄存器的至少兩個(gè)中的哪些數(shù)據(jù)分量。
26.一種數(shù)據(jù)處理系統(tǒng),其包括存儲(chǔ)操作數(shù)的存儲(chǔ)器;多個(gè)通用寄存器,其中,每一通用寄存器保存多個(gè)數(shù)據(jù)分量;以及執(zhí)行一條或多條指令的處理器電路,所述一條或多條指令中的至少一條用于在所述多個(gè)通用寄存器中的至少兩個(gè)和所述存儲(chǔ)器間傳送多個(gè)數(shù)據(jù)分量,其中,所述至少一條或多條指令既指定將要在所述多個(gè)寄存器中的至少兩個(gè)中的每一個(gè)和所述存儲(chǔ)器間傳送的數(shù)據(jù)分量的數(shù)量,還進(jìn)一步指定將要傳送的數(shù)據(jù)分量的總數(shù)。
全文摘要
可使用各種加載與存儲(chǔ)指令在寄存器文件(元件34)中的寄存器和存儲(chǔ)器(元件12)間傳送多個(gè)矢量分量??墒褂胏nt參數(shù)表示將向或從存儲(chǔ)器傳送的分量的總數(shù),并且可使用rcnt參數(shù)表示向或從寄存器文件中的單個(gè)寄存器傳送的矢量分量的最大數(shù)量。另外,這些指令可使用各種不同的尋址模式??瑟?dú)立于該寄存器分量大小指定該存儲(chǔ)器分量大小,使得指令中的源與目標(biāo)的大小可不相同。通過一些指令,可發(fā)起矢量流,并條件入隊(duì)或出隊(duì)??商峁┙囟袒蛏崛胱侄?,使得在傳送時(shí)可截短或舍入源數(shù)據(jù)分量。另外,可在傳送時(shí)對(duì)源數(shù)據(jù)分量進(jìn)行有符號(hào)或無符號(hào)擴(kuò)展。
文檔編號(hào)G06F9/318GK1842779SQ200480024425
公開日2006年10月4日 申請(qǐng)日期2004年8月30日 優(yōu)先權(quán)日2003年9月8日
發(fā)明者威廉·C·莫耶, 詹姆斯·M·諾里斯, 菲利普·E·馬伊, 肯特·唐納德·莫特, 雷蒙德·B·埃西克四世, 布賴恩·杰夫里·盧卡斯 申請(qǐng)人:飛思卡爾半導(dǎo)體公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1