專利名稱:指令編碼方法和處理器的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及指令編碼方法和處理器,尤其涉及一種并行指令的指令編碼方 法和處理器。
背景技術(shù):
為了加快處理器的處理速度,許多處理器都具有每個(gè)時(shí)鐘周期可以發(fā)射多 條指令的能力。目前具有這種能夠每個(gè)時(shí)鐘周期發(fā)射多條指令的能力的處理器 主要有兩種。 一種是超標(biāo)量處理器,超標(biāo)量處理器在單個(gè)時(shí)鐘周期內(nèi)可以發(fā)射 執(zhí)行多條指令。為了使這多條指令可以并行執(zhí)行,超標(biāo)量處理器一般具有多個(gè) 處理單元,如多個(gè)定點(diǎn)運(yùn)算單元、浮點(diǎn)運(yùn)算單元和裝載/存儲(chǔ)單元等。超標(biāo)量處 理器主要通過(guò)硬件從應(yīng)用的程序代碼中尋找指令級(jí)并行性,如果沒(méi)有找到較多 的指令級(jí)并行,就可能出現(xiàn)空置的指令槽。對(duì)于較低指令級(jí)并行性的 一 些應(yīng)用, 超標(biāo)量處理器并不能體現(xiàn)出它在性能方面的優(yōu)勢(shì)。此外,超標(biāo)量處理器由于過(guò) 多的利用硬件進(jìn)行指令動(dòng)態(tài)調(diào)度,使得硬件開(kāi)銷過(guò)大。另一種是超長(zhǎng)指令字
(VLIW)處理器。超長(zhǎng)指令字處理器也可以在單個(gè)時(shí)鐘周期內(nèi)發(fā)射多條指令, 它主要是通過(guò)編譯器來(lái)尋找指令級(jí)并行性,然后編碼成一條由可同時(shí)發(fā)射的多 條微指令組合而成的超長(zhǎng)指令。相比于超標(biāo)量處理器,超長(zhǎng)指令字處理器在處 理器硬件開(kāi)銷方面具有 一 定的優(yōu)勢(shì)。
超長(zhǎng)指令字處理器采用了并行指令技術(shù),在同一時(shí)間可以同時(shí)對(duì)多條指令 進(jìn)行處理。通??梢园淹瑫r(shí)進(jìn)行處理的并行指令稱為一個(gè)指令包或指令字。一 個(gè)指令包的大小往往受限于總線寬度。 一般來(lái)說(shuō),現(xiàn)今普遍使用的總線寬度為 32位或64位。例如,對(duì)于64位總線寬度的處理器,其指令包的長(zhǎng)度最大為 64位。
超長(zhǎng)指令字處理器的指令包都非常長(zhǎng),往往會(huì)相當(dāng)程度地增加指令代碼的 存放空間。而處理器需要利用各種特定的指令組合來(lái)完成要求的應(yīng)用程序。存
儲(chǔ)指令代碼除了占用內(nèi)存,還需占用緩存,這些對(duì)芯片面積都將造成影響。特 別對(duì)于單芯片系統(tǒng),芯片面積是直接決定成本的最重要因素之一,指令集代碼 的編碼效率是設(shè)計(jì)中面臨的非常重要的一個(gè)問(wèn)題。而且,對(duì)指令代碼進(jìn)行存取 操作需要功耗,指令的長(zhǎng)短也直接影響著取指令代碼所需的功耗大小。
處理器中有的指令需要執(zhí)行比較復(fù)雜的功能或者帶有長(zhǎng)立即數(shù)等特性,需 要相對(duì)較長(zhǎng)的長(zhǎng)度,而有的指令執(zhí)行的功能較為簡(jiǎn)單,只需要相對(duì)較短的指令 長(zhǎng)度。如果所有的指令采用同樣的長(zhǎng)度,則通常需要滿足具有最長(zhǎng)指令長(zhǎng)度的 指令的要求,這樣,即使執(zhí)行較簡(jiǎn)單功能的指令也采用了更長(zhǎng)的指令長(zhǎng)度,這 在一定程度上浪費(fèi)了指令存儲(chǔ)空間。因此,有的處理器采用變長(zhǎng)指令來(lái)減少指 令占用的存儲(chǔ)空間。對(duì)于采用并行指令技術(shù)的超長(zhǎng)指令字處理器來(lái)說(shuō),如果同 時(shí)使用變長(zhǎng)指令, 一個(gè)指令包中的每條指令的長(zhǎng)度是不確定的,無(wú)法判斷一個(gè) 指令包是否已譯碼完成。因此,指令譯碼的時(shí)候,必須在指令編碼中顯示每個(gè) 指令包的邊界,使得處理器的流水線能夠辨認(rèn)哪幾條指令構(gòu)成了 一個(gè)指令包。 在一些現(xiàn)有的處理器中,在每條指令編碼時(shí)加入一個(gè)連接域,用一位或多位代 碼來(lái)表示指令包中的該條指令之后有無(wú)下一條指令,藉此可以判斷一個(gè)指令包 中的全部指令是否已完成譯碼。由于處理器的指令空間壓縮有時(shí)可能幅度非常 大,可能造成指令空間編碼十分緊張。為了有效的節(jié)省指令編碼空間,本發(fā)明 試圖從指令包的角度來(lái)考慮改進(jìn)指令編碼方法,以節(jié)省指令編碼空間。
發(fā)明內(nèi)容
為克服現(xiàn)有技術(shù)中存在的缺陷,本發(fā)明提出了一種用于可發(fā)射并行指令的 處理器的指令編碼方法,可以減少并行指令的指令長(zhǎng)度,節(jié)省指令存儲(chǔ)空間和 取指令功耗。
本發(fā)明并提供了 一種可以節(jié)省指令存儲(chǔ)空間和取指令功耗的處理器。 根據(jù)本發(fā)明的一個(gè)方面, 一種用于可發(fā)射并行指令的處理器的指令編碼方 法,該方法將每條指令編碼為多個(gè)編碼域,其特征在于,編碼域中可選擇性地 包含表征是否后續(xù)指令與當(dāng)前指令屬于同一個(gè)指令包的連接域。
根據(jù)本發(fā)明的 一 個(gè)方面,連接域的設(shè)置與否由處理器的計(jì)算單元的數(shù)量和 裝載/存儲(chǔ)單元的數(shù)量決定。
在對(duì)指令并行發(fā)射的指令包中,最多包含一條未設(shè)置連接域的指令,并且, 當(dāng)指令包中包含一 條未設(shè)置連接域的指令時(shí),未設(shè)置連接域的指令編碼在指令 包的最后一條指令。
在一些實(shí)施例中,處理器中設(shè)置了一個(gè)計(jì)算單元,多個(gè)裝載/存儲(chǔ)單元,指 令編碼中,對(duì)于裝載/存儲(chǔ)指令設(shè)置連接域,對(duì)于計(jì)算指令不設(shè)置連接域。
在另一些實(shí)施例中,處理器中設(shè)置了一個(gè)裝載/存儲(chǔ)單元,多個(gè)計(jì)算單元, 指令編碼中,對(duì)于計(jì)算指令設(shè)置連接域,對(duì)于裝載/存儲(chǔ)指令不設(shè)置連接域。
根據(jù)本發(fā)明的另 一個(gè)方面, 一種可發(fā)射并行指令的處理器設(shè)置了至少一個(gè) 裝載/存儲(chǔ)單元和至少一個(gè)計(jì)算單元,存儲(chǔ)器中存放有多條指令,指令的編碼域 中可選擇性地包含表征是否后續(xù)指令與當(dāng)前指令屬于同 一 個(gè)指令包的連接域, 連接域的設(shè)置與否由處理器的計(jì)算單元的數(shù)量和裝載/存儲(chǔ)單元的數(shù)量決定。
在本發(fā)明的一個(gè)實(shí)施例中,處理器設(shè)置了至少一個(gè)裝載/存儲(chǔ)單元, 一個(gè)計(jì) 算單元,存儲(chǔ)器中存放有多條指令,指令中的裝載/存儲(chǔ)指令在編碼域中設(shè)置表 征是否后續(xù)指令與當(dāng)前指令屬于同一個(gè)指令包的連接域,指令中的計(jì)算指令在 編碼域中不設(shè)置連接域。
在本發(fā)明的另一個(gè)實(shí)施例中,處理器設(shè)置了至少一個(gè)計(jì)算單元, 一個(gè)裝載 /存儲(chǔ)單元,存儲(chǔ)器中存放有多條指令,指令中的計(jì)算指令在編碼域中設(shè)置表征 是否后續(xù)指令與當(dāng)前指令屬于同一個(gè)指令包的連接域,指令中的裝載/存儲(chǔ)指令 在編碼域中不設(shè)置連接域。
以下附圖為對(duì)本發(fā)明示例性實(shí)施例的輔助說(shuō)明,結(jié)合以下附圖對(duì)本發(fā)明實(shí) 施例的闡述,是為進(jìn)一步揭示本發(fā)明的特征所在,但并不限制本發(fā)明,圖中相 同符號(hào)代表實(shí)施例中相應(yīng)元件或步驟,其中
圖1為根據(jù)本發(fā)明一實(shí)施例的處理器的結(jié)構(gòu)示意圖。
圖2為根據(jù)本發(fā)明一實(shí)施例的一種指令編碼示意圖。
圖3為根據(jù)本發(fā)明 一 實(shí)施例的一個(gè)指令包的編碼結(jié)構(gòu)示意圖。
圖4為根據(jù)本發(fā)明另 一實(shí)施例的處理器的結(jié)構(gòu)示意圖。
圖5為根據(jù)本發(fā)明另 一實(shí)施例的一種指令編碼示意圖。
圖6為根據(jù)本發(fā)明另 一實(shí)施例的一個(gè)指令包的編碼結(jié)構(gòu)示意圖。 圖7為根據(jù)本發(fā)明一實(shí)施例的一示例性指令包的編碼結(jié)構(gòu)示意圖。 圖8為根據(jù)本發(fā)明另 一實(shí)施例的一示例指令包的編碼結(jié)構(gòu)示意圖。
具體實(shí)施例方式
參見(jiàn)圖1,根據(jù)本發(fā)明的一個(gè)示例性的實(shí)施例,處理器10設(shè)置了兩個(gè)裝栽 /存儲(chǔ)單元11、 13和一個(gè)計(jì)算單元12。裝載/存儲(chǔ)單元用于存放指令和數(shù)據(jù),在 執(zhí)行并行指令時(shí),總線可同時(shí)對(duì)兩個(gè)裝載/存儲(chǔ)單元進(jìn)行存取操作??刂茊卧?15從裝載/存儲(chǔ)單元中取出指令并對(duì)指令進(jìn)行譯碼,再由計(jì)算單元根據(jù)譯碼后 的指令從裝載/存儲(chǔ)單元中取出數(shù)據(jù)執(zhí)行運(yùn)算。處理器的每個(gè)流水線周期可以執(zhí) 行一個(gè)指令包, 一個(gè)指令包的最大長(zhǎng)度為例如64位,在本示例性實(shí)施例中最 多由一條計(jì)算指令和兩條存取指令共三條指令構(gòu)成。由于在VLIW體系中,一 個(gè)指令包中的所有指令都是在同 一 個(gè)流水線周期并發(fā)執(zhí)行的指令,所以同 一 指 令包中的指令的排列順序無(wú)關(guān)緊要,任何排列順序執(zhí)行的結(jié)果都是一樣的,這 樣使得傳統(tǒng)基于每一條指令編碼中都含有連接域(LinkBit)的方法本質(zhì)上有冗 余,這樣的冗余不僅帶來(lái)編碼空間的浪費(fèi),也降低了指令編碼的效率,增加了 存儲(chǔ)指令的存儲(chǔ)器的大小和取指令所用的功耗。 由于指令包內(nèi)部指令排列的無(wú)關(guān)性,為了壓縮編碼空間,本發(fā)明提出了一 種用于可發(fā)射并行指令的處理器的指令編碼方法,有效解決了并行指令的連接 域的冗余問(wèn)題。該方法將每條指令編碼為多個(gè)編碼域,但并非每個(gè)指令的編碼 域中都包含有表征是否后續(xù)指令與當(dāng)前指令屬于同一個(gè)指令包的連接域,而是 根據(jù)處理器的硬件結(jié)構(gòu)在部分指令的編碼域中設(shè)置連接域。本發(fā)明中指令的連 接域的設(shè)置與否由處理器的計(jì)算單元的數(shù)量和裝載/存儲(chǔ)單元的數(shù)量來(lái)決定。在 發(fā)射并行指令的指令包中,最多包含一條未設(shè)置連接域的指令,當(dāng)指令包中包 含一 條未設(shè)置連接域的指令時(shí),該未設(shè)置連接域的指令編碼在指令包的最后一 條指令。
在一些示例性的實(shí)施例中,處理器中設(shè)置了 一個(gè)計(jì)算單元以及至少一個(gè)存 儲(chǔ)單元。例如,圖1所示的處理器中,設(shè)置了兩個(gè)裝載/存儲(chǔ)單元和一個(gè)計(jì)算單 元。根據(jù)這樣的硬件結(jié)構(gòu),按照本發(fā)明,可以只對(duì)該處理器的所有裝載/存儲(chǔ)指
令設(shè)置連接域,而對(duì)所有計(jì)算指令不設(shè)置連接域。在對(duì)指令并行發(fā)射的指令包 中,最多包含一條計(jì)算指令。當(dāng)指令包中包含一條計(jì)算指令時(shí),該計(jì)算指令編 碼在指令包的最后一條指令。圖2為一種示例性的指令編碼示意圖。每條裝載 /存儲(chǔ)指令包括操作碼域、操作數(shù)1域和連接域,并可選性地包括操作數(shù)2域等。 每條計(jì)算指令也包括操作碼域和操作數(shù)1域,并可選性地包括操作數(shù)2域和操
作數(shù)3域等。操作數(shù)1域、操作數(shù)2域和操作數(shù)3域分別可以是寄存器,或者 是立即數(shù)(指令的這些編碼域?yàn)楸绢I(lǐng)域的已知內(nèi)容,這里不再贅述)。在控制 單元對(duì)指令進(jìn)行譯碼后,處理器根據(jù)由指令的操作碼域譯碼得到的操作信息來(lái) 執(zhí)行指令,例如進(jìn)行存儲(chǔ)/裝栽指令/數(shù)據(jù),或者進(jìn)行地址/數(shù)據(jù)的計(jì)算等。在一 些實(shí)施例中,連接域可以用編碼中的一個(gè)位或多個(gè)位來(lái)表示。例如,可以設(shè)置 一個(gè)1位長(zhǎng)度、名為連接位link bit (簡(jiǎn)稱L)的編碼域來(lái)表示連接域,當(dāng)link bit 位的值為1時(shí),表示后續(xù)指令與當(dāng)前指令屬于同一個(gè)指令包;當(dāng)linkbit位的值 為0時(shí),表示后續(xù)指令與當(dāng)前指令不屬于同一個(gè)指令包。當(dāng)然,本領(lǐng)域的技術(shù) 人員還可以采用其它方式表示連接域,例如linkbit位的值為0時(shí),表示后續(xù)指 令與當(dāng)前指令屬于同一個(gè)指令包;當(dāng)link bit位的值為1時(shí),表示后續(xù)指令與當(dāng) 前指令不屬于同一個(gè)指令包。另外,本領(lǐng)域的技術(shù)人員還可以任選地用多個(gè)位 來(lái)表示連接域,這里不再贅述。
根據(jù)本發(fā)明的一個(gè)實(shí)施例,指令長(zhǎng)度有例如16位,24位和32位等,指令 包最大長(zhǎng)度可以是64位。在指令長(zhǎng)度等條件滿足的情況下,該處理器可以并 行執(zhí)行兩條裝載/存儲(chǔ)指令和一條計(jì)算指令。圖3示意性地表示了兩條裝載/存 儲(chǔ)指令和 一 條計(jì)算指令組成的 一 個(gè)指令包。當(dāng)執(zhí)行由這樣三條指令組成的 一 個(gè) 指令包時(shí),兩條裝載/存儲(chǔ)指令放在指令包的前面,而一條計(jì)算指令放在指令包 的最后,該計(jì)算指令未設(shè)置連接域。在控制單元進(jìn)行指令譯碼時(shí),由于指令包 的前兩條指令均為裝載/存儲(chǔ)指令,其中分別設(shè)置了連接域以表示后續(xù)指令與當(dāng) 前指令屬于同一指令包,因此,當(dāng)該指令包中還含有計(jì)算指令時(shí),指令包中的 這兩條裝載/存儲(chǔ)指令根據(jù)連接域的指示,可以知道該指令包還沒(méi)譯碼完,后面 還存在指令。當(dāng)譯碼出計(jì)算指令時(shí),由于控制單元根據(jù)計(jì)算指令本身的性質(zhì), 即控制單元從譯碼出來(lái)的操作碼可得知該指令為計(jì)算指令,因此,控制單元可 以判斷出該指令包已經(jīng)完成譯碼。當(dāng)該處理器并行執(zhí)行由 一條裝載/存儲(chǔ)指令和
一條計(jì)算指令組成的指令包時(shí),類似地,把裝載/存儲(chǔ)指令放在指令包的前面, 該裝載/存儲(chǔ)指令設(shè)置連接域表示后續(xù)指令與當(dāng)前指令屬于同一指令包,而計(jì)算 指令放在指令包的最后,該計(jì)算指令未設(shè)置連接域。從裝載/存儲(chǔ)指令中的連接 域可以判斷出指令包中還存在其他指令,而從計(jì)算指令可以明確指令包已經(jīng)完 成譯碼。當(dāng)該處理器并行執(zhí)行由兩條裝載/存儲(chǔ)指令組成的指令包時(shí),則指令包 中在前的裝載/存儲(chǔ)指令的連接域可以指示出指令包中還有后續(xù)指令,而指令包 中在后的裝載/存儲(chǔ)指令的連接域可以指示出指令包中已經(jīng)沒(méi)有后續(xù)指令,從而 完成了全部譯碼。當(dāng)該處理器僅執(zhí)行由一條裝載/存儲(chǔ)指令組成的指令包時(shí),通 過(guò)該裝載/存儲(chǔ)指令的連接域可以指示出指令包中沒(méi)有后續(xù)指令。當(dāng)該處理器僅 執(zhí)行由 一 條計(jì)算指令組成的指令包時(shí),則通過(guò)計(jì)算指令本身譯碼出的操作碼顯 示出其為計(jì)算指令,因而可以判斷出該指令包已經(jīng)完成譯碼。
例如,下面列出的一個(gè)指令包包含三條并行指令的例子,其具體編碼可參 見(jiàn)圖7。
LDW Al, Dl II LDW A2, D2 || ADD Dl, D2, D3
該指令包可用來(lái)進(jìn)行地址的計(jì)算。在指令包的三條并行指令中,前兩條指 令均為L(zhǎng)DW指令,分別用來(lái)把地址寄存器尋址到的一個(gè)字的內(nèi)存數(shù)據(jù)Al、 A2 裝載到數(shù)據(jù)寄存器,屬于裝載/存儲(chǔ)指令。ADD指令用來(lái)執(zhí)行將數(shù)據(jù)寄存器D1 與數(shù)據(jù)寄存器D2進(jìn)行加法運(yùn)算,結(jié)果存入目標(biāo)數(shù)據(jù)寄存器D3。 LDW指令屬 于裝載/存儲(chǔ)指令,在編碼時(shí)設(shè)置連接位link bit,在圖7中以L位表示。而ADD 指令屬于計(jì)算指令,在編碼時(shí)未設(shè)置連接位link bit,并且該計(jì)算指令放在指令 包的最后。在如上三條并行指令組成的指令包中,由于指令包的兩條LDW指 令后面都跟有其它并行指令,因此,這兩條LDW指令的連接域L位都為例如 1,表示后續(xù)指令與當(dāng)前指令屬于同一個(gè)指令包。在另一示例中,例如該指令 包僅包含前兩條并行的裝載/存儲(chǔ)指令LDW指令,而不包含計(jì)算指令A(yù)DD指 令時(shí),指令包中的第1條LDW指令的連接位L位為例如1,表示指令包中還 有并行指令在其后,而第2條LDW指令的連接位L位為例如0,表示指令包 已經(jīng)結(jié)束,后面沒(méi)有并行指令。
從以上描述可以看出,對(duì)于可執(zhí)行多條并行指令的處理器,本發(fā)明省略了 計(jì)算指令的連接域而減少了指令占用的存儲(chǔ)空間,但同樣可以準(zhǔn)確判斷出指令
包是否已經(jīng)完成譯碼。改變指令長(zhǎng)度模式和/或指令包最大并行長(zhǎng)度的情況,例 如僅采用16位和32位兩類指令長(zhǎng)度,這仍屬于本發(fā)明的實(shí)質(zhì)范圍內(nèi)。
在另 一些實(shí)施例中,處理器中設(shè)置了一個(gè)存儲(chǔ)單元以及至少一個(gè)計(jì)算單
元。例如,圖4所示的處理器40,設(shè)置了兩個(gè)計(jì)算單元42、 44和一個(gè)存儲(chǔ)單 元41。根據(jù)這樣的硬件結(jié)構(gòu),按照本發(fā)明,可以只對(duì)該處理器的所有計(jì)算指令 設(shè)置連接域,而對(duì)所有裝載/存儲(chǔ)指令不設(shè)置連接域。在對(duì)指令并行發(fā)射的指令 包中,最多包含一條裝載/存儲(chǔ)指令。當(dāng)指令包中包含一條裝載/存儲(chǔ)指令時(shí), 該裝載/存儲(chǔ)指令編碼在指令包的最后一條指令。困5為一種指令編碼示意圖。 每條裝載/存儲(chǔ)指令包括操作碼域和地址1域,并可選性地包括地址2域等。每 條計(jì)算指令也包括操作碼域、地址l域和連接域,并可選性地包括地址2域和 立即數(shù)域等。在控制單元對(duì)指令進(jìn)行譯碼后,處理器根據(jù)由指令的操作碼域譯 碼得到的操作信息來(lái)執(zhí)行指令,例如進(jìn)行存儲(chǔ)/裝載指令/數(shù)據(jù),或者進(jìn)行地址/ 數(shù)據(jù)的計(jì)算等。在一些實(shí)施例中,連接域可以用編碼中的一個(gè)位或多個(gè)位來(lái)表 示。例如,可以設(shè)置一個(gè)1位長(zhǎng)度、名為連接位link bit的編碼域,在圖8中以 連接位L位表示。當(dāng)連接位link bit位的值為1時(shí),表示后續(xù)指令與當(dāng)前指令 屬于同一個(gè)指令包;當(dāng)連接位link bit位的值為0時(shí),表示后續(xù)指令與當(dāng)前指令 不屬于同一個(gè)指令包。當(dāng)然,本領(lǐng)域的技術(shù)人員還可以采用其它方式表示連接 城,例如link bit位的值為0時(shí),表示后續(xù)指令與當(dāng)前指令屬于同一個(gè)指令包; 當(dāng)linkbit位的值為1時(shí),表示后續(xù)指令與當(dāng)前指令不屬于同一個(gè)指令包。另夕卜, 本領(lǐng)域的技術(shù)人員還可以任選地用多個(gè)位來(lái)表示連接域,這里不再贅述。
根據(jù)本發(fā)明的一個(gè)實(shí)施例,指令長(zhǎng)度有例如16位,24位和32位等,指令 包最大長(zhǎng)度可以是64位。在指令長(zhǎng)度等條件滿足的情況下,該處理器可以并 行執(zhí)行一條裝載/存儲(chǔ)指令和兩條計(jì)算指令。圖6示意性地表示了一條裝載/存 儲(chǔ)指令和兩條計(jì)算指令組成的 一個(gè)指令包。當(dāng)執(zhí)行由這樣三條指令組成的一個(gè) 指令包時(shí),兩條計(jì)算指令放在指令包的前面,而裝載/存儲(chǔ)指令放在指令包的最 后,其中計(jì)算指令設(shè)置了連接域,而裝載/存儲(chǔ)指令未設(shè)置連接域。在控制單元 進(jìn)行指令譯碼時(shí),由于指令包的前兩條指令均為計(jì)算指令,其中分別設(shè)置了連 接域,因此,當(dāng)該指令包中還含有后續(xù)指令時(shí),指令包中的這兩條計(jì)算指令根 據(jù)連接域的指示,可以知道該指令包還沒(méi)譯碼完,后面還存在后續(xù)指令。當(dāng)譯
碼出裝載/存儲(chǔ)指令時(shí),由于控制單元根據(jù)裝載/存儲(chǔ)指令本身的性質(zhì),即控制 單元從譯碼出來(lái)的操作碼可得知該指令為裝載/存儲(chǔ)指令,因此,控制單元可以 判斷出該指令包已經(jīng)完成譯碼。當(dāng)該處理器并行執(zhí)行由 一 條裝載/存儲(chǔ)指令和一 條計(jì)算指令組成的指令包時(shí),類似地,把計(jì)算指令放在指令包的前面,而裝載 /存儲(chǔ)指令放在指令包的最后。計(jì)算指令中的連接域被置位成表示后續(xù)指令與當(dāng) 前指令屬于同一個(gè)指令包,而裝載/存儲(chǔ)指令未設(shè)置連接域,因此從計(jì)算指令的 連接域可以判斷出指令包中還存在其他指令,而從裝載/存儲(chǔ)指令可以明確指令 包已經(jīng)完成譯碼。當(dāng)該處理器并行執(zhí)行由兩條計(jì)算指令組成的指令包時(shí),則指 令包中在前的計(jì)算指令的連接域可以指示出指令包中還有后續(xù)指令,而指令包 中在后的計(jì)算指令的連接域可以指示出指令包中已經(jīng)沒(méi)有后續(xù)指令,從而完成 全部譯碼。當(dāng)該處理器僅執(zhí)行由一條計(jì)算指令組成的指令包時(shí),通過(guò)該計(jì)算指 令的連接域可以指示出指令包中沒(méi)有后續(xù)指令。當(dāng)該處理器僅執(zhí)行由 一 條裝載 /存儲(chǔ)指令組成的指令包時(shí),則通過(guò)裝載/存儲(chǔ)指令本身譯碼出的操作碼顯示出 其為裝載/存儲(chǔ)指令,就可以判斷出該指令包已經(jīng)完成譯碼。
例如,下面列出的一個(gè)指令包包含三條并行指令的例子,其具體編碼可參 見(jiàn)圖8。
ADD Dl, #1F, D2 || ADD Dl, D2, D3 || STW D3, Al
該指令包可用來(lái)進(jìn)行數(shù)據(jù)的計(jì)算和存儲(chǔ)的計(jì)算。在指令包的三條并行指令 中,前兩條指令為ADD指令,第1條ADD指令是基于短立即數(shù)的加法操作指 令,將數(shù)據(jù)寄存器D1中的數(shù)據(jù)與5位無(wú)符號(hào)立即數(shù)弁1F相加后,暫存于數(shù)據(jù) 寄存器D2。第2條ADD指令是基于數(shù)據(jù)寄存器的加法操作指令,將數(shù)據(jù)寄存 器Dl中的數(shù)據(jù)與數(shù)據(jù)寄存器D2中的數(shù)據(jù)相加后,暫存于數(shù)據(jù)寄存器D3。STW 指令用來(lái)把數(shù)據(jù)寄存器D3中的數(shù)據(jù)存放到地址寄存器Al所指向的內(nèi)存地址。 在這個(gè)實(shí)施例中,前兩條ADD指令屬于計(jì)算指令,在編碼時(shí)設(shè)置連接位(link bit),在圖8中以L表示。STW指令屬于裝載/存儲(chǔ)指令,在編碼時(shí)未設(shè)置連 接位(link bit),并且放在指令包的最后。在如上三條并行指令組成的指令包 中,由于指令包的兩條計(jì)算指令A(yù)DD指令后面都跟有其它并行指令,因此, 這兩條ADD指令的連接域L位都為例如1,表示后續(xù)指令與當(dāng)前指令屬于同 一指令包。在另一示例中,例如該指令包僅包含前兩條并行的計(jì)算指令A(yù)DD
指令,而不包含裝載/存儲(chǔ)指令STW指令時(shí),此時(shí)指令包中的第1條ADD指 令的連接位L位為例如1,表示指令包中還有并行指令在其后,而第2條ADD 指令的連接位L位為例如0,表示指令包已經(jīng)結(jié)束,后面沒(méi)有并行指令。
從以上描述的幾種情況,可以看出,對(duì)于可執(zhí)行多條并行指令的處理器, 本發(fā)明省略了裝載/存儲(chǔ)指令的連接域而減少了指令占用的存儲(chǔ)空間,但本發(fā)明 仍可準(zhǔn)確判斷出指令包是否已經(jīng)完成譯碼。同樣地,在改變指令長(zhǎng)度模式和/ 或指令包最大并行長(zhǎng)度的情況下,本發(fā)明仍可實(shí)施。
權(quán)利要求
1.一種用于可發(fā)射并行指令的處理器的指令編碼方法,將每條指令編碼為多個(gè)編碼域,其中,編碼域中可選擇性地包含表征是否后續(xù)指令與當(dāng)前指令屬于同一個(gè)指令包的連接域。
2. 如權(quán)利要求1所述的指令編碼方法,其特征在于,連接域的設(shè)置與否 由處理器的計(jì)算單元的數(shù)量和裝載/存儲(chǔ)單元的數(shù)量決定。
3. 如權(quán)利要求2所述的指令編碼方法,其特征在于,所述指令包可包括最多 一條第一指令,所述第一指令未設(shè)置連接域,所述指令包還可包括至少一條第 二指令,所述第二指令設(shè)置有連接域。
4. 如權(quán)利要求3所述的指令編碼方法,其特征在于,當(dāng)指令包中包含所 述第一指令時(shí),將該第一指令作為所述指令包的最后一條指令。
5. 如權(quán)利要求3或4所述的指令編碼方法,其特征在于,所述處理器中設(shè) 置了一個(gè)計(jì)算單元和至少一個(gè)裝載/存儲(chǔ)單元,其中,所述第一指令是對(duì)應(yīng)于所 述計(jì)算單元的計(jì)算指令,所述第二指令是對(duì)應(yīng)于所述裝載/存儲(chǔ)單元的裝載/存 儲(chǔ)指令。
6. 如權(quán)利要求3或4所述的指令編碼方法,其特征在于,所述處理器中設(shè) 置了一個(gè)裝載/存儲(chǔ)單元和至少一個(gè)計(jì)算單元,其中,所述第一指令是對(duì)應(yīng)于所 述裝載/存儲(chǔ)單元的裝載/存儲(chǔ)指令,所述第二指令是對(duì)應(yīng)于所述計(jì)算單元的計(jì) 算指令。
7. —種可發(fā)射并行指令的處理器,其特征在于,所述處理器包括一個(gè)計(jì) 算單元和至少一個(gè)裝載/存儲(chǔ)單元,對(duì)應(yīng)于裝載/存儲(chǔ)單元的裝載/存儲(chǔ)指令中設(shè) 置表征是否后續(xù)指令與當(dāng)前指令屬于同一個(gè)指令包的連接域,對(duì)應(yīng)于計(jì)算單元的計(jì)算指令中不設(shè)置連接域,且當(dāng)指令包中包含所述計(jì)算指令時(shí),將該計(jì)算指 令作為所述指令包的最后一條指令。
8. 如權(quán)利要求7所述的處理器,其特征在于,所述處理器包括兩個(gè)裝載/ 存儲(chǔ)單元。
9. 一種可發(fā)射并行指令的處理器,其特征在于,所述處理器包括一個(gè)裝載/存儲(chǔ)單元和至少 一 個(gè)計(jì)算單元,對(duì)應(yīng)于計(jì)算單元的計(jì)算指令中設(shè)置表征是否 后續(xù)指令與當(dāng)前指令屬于同一個(gè)指令包的連接域,對(duì)應(yīng)于裝載/存儲(chǔ)單元的裝載/存儲(chǔ)指令中不設(shè)置連接域,且當(dāng)指令包中包含所述裝載/存儲(chǔ)指令時(shí),將該裝 載/存儲(chǔ)指令作為所述指令包的最后 一 條指令。
10. 如權(quán)利要求9所述的處理器,其特征在于,所述處理器包括兩個(gè)計(jì)算 單元。
全文摘要
提供了一種用于可發(fā)射并行指令的處理器的指令編碼方法和處理器,將每條指令編碼為多個(gè)編碼域,編碼域中可選擇性地包含表征是否后續(xù)指令與當(dāng)前指令屬于同一個(gè)指令包的連接域,連接域的設(shè)置與否由處理器的計(jì)算單元的數(shù)量和裝載/存儲(chǔ)單元的數(shù)量決定。
文檔編號(hào)G06F9/38GK101369223SQ200710044970
公開(kāi)日2009年2月18日 申請(qǐng)日期2007年8月17日 優(yōu)先權(quán)日2007年8月17日
發(fā)明者周振亞, 張亞林 申請(qǐng)人:上海奇碼數(shù)字信息有限公司