欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

處理器、協(xié)處理器、信息處理系統(tǒng)及其方法

文檔序號(hào):6339321閱讀:312來(lái)源:國(guó)知局
專(zhuān)利名稱(chēng):處理器、協(xié)處理器、信息處理系統(tǒng)及其方法
技術(shù)領(lǐng)域
本發(fā)明涉及信息處理系統(tǒng),并且具體地,涉及用于執(zhí)行由不具有操作數(shù)的多個(gè)指 令形成的指令序列的處理器、協(xié)處理器、信息處理系統(tǒng)以及用于控制處理器、協(xié)處理器和信 息處理系統(tǒng)的方法。
背景技術(shù)
微處理器具有基本的運(yùn)算指令(基本指令)。通過(guò)組合多個(gè)指令,微處理器可以 執(zhí)行期望的操作。為了改善用于具體應(yīng)用的微處理器的性能,可以添加提供多個(gè)所選擇的 指令的操作的新指令。也就是,通過(guò)將多個(gè)指令組合為單一指令,可以得到壓縮指令的優(yōu) 點(diǎn)。因此,可以提高性能。這是因?yàn)闇p少了所需處理周期(cycle)的數(shù)量,并減少了指令的 數(shù)量。即使當(dāng)將多個(gè)指令成群為單一指令時(shí),仍可以在與基本指令所需的周期數(shù)量(通常 一個(gè)周期)相同的周期數(shù)量?jī)?nèi)執(zhí)行指令,如果處理負(fù)載不是太高的話。然而,如果處理負(fù)載 高,則即使在將多個(gè)指令組合為單一指令之后,指令的周期的數(shù)量也可能與多個(gè)指令所需 的處理周期的數(shù)量相同。即使在這樣的情況下,仍減少了指令的數(shù)量,因此,可以得到可以 減少處理周期的數(shù)量的如下三個(gè)優(yōu)點(diǎn)。第一優(yōu)點(diǎn)是在具有指令高速緩存(cache)的處理器中,可以增加可以針對(duì)一個(gè)指 令高速緩存線而定義的處理量。通常,主要指令高速緩存的容量是幾KB。如果將執(zhí)行大量 處理的指令序列取到有限的容量中,則相比于僅僅使用基本指令的情況,可以得到與增大 容量時(shí)得到的相同的優(yōu)點(diǎn)。因此,可以增大高速緩存命中率(hit rate),因此,可以減少處 理周期的數(shù)量(增大指令高速緩存命中率的優(yōu)點(diǎn))。第二優(yōu)點(diǎn)是通過(guò)循環(huán)展開(kāi)(loop unroll),可以減少循環(huán)處理指令(例如,分支指 令)的數(shù)量,因此,可以減少處理周期的數(shù)量。在循環(huán)處理中,大約需要四個(gè)指令用于循環(huán) 條件變量初始化、循環(huán)條件變量更新、循環(huán)條件變量比較以及分支。例如,在下面討論四個(gè) 循環(huán)處理。如果循環(huán)包括5條基本指令,則生成20條指令(5條指令乂4個(gè)循環(huán))。在這之 后,去除4條循環(huán)處理指令。因此通過(guò)循環(huán)展開(kāi)來(lái)生成總共16條指令。相反,當(dāng)將五條基 本指令組合為單一指令時(shí),僅僅生成包括用于循環(huán)的4條單一指令的四個(gè)指令。在這樣的 情況下,指令的數(shù)量小于在執(zhí)行循環(huán)展開(kāi)之前的五條指令、即四個(gè)循環(huán)處理指令加上將被 循環(huán)的指令。通常,流水線處理器(pipeline processor)被設(shè)計(jì)來(lái)使得分支指令具有比正 常指令多的周期的數(shù)量,因?yàn)榉种е噶顚?dǎo)致分支操作。因此,即使當(dāng)指令的數(shù)量比循環(huán)展開(kāi) 之前的指令的數(shù)量大時(shí),仍可以減少處理周期的數(shù)量,因?yàn)闇p少了分支指令的執(zhí)行數(shù)(當(dāng) 利用循環(huán)展開(kāi)時(shí)獲得的優(yōu)點(diǎn))。第三優(yōu)點(diǎn)是減少了用于取出(fetch)指令的總線訪問(wèn)數(shù),因?yàn)闇p少了程序大小。 因此,可以減小總線的擁塞程度,因此,可以減小在多處理器系統(tǒng)中指令取出和數(shù)據(jù)取出的 訪問(wèn)等待時(shí)間。也就是,可以間接減少處理周期的數(shù)量(減少總線流量的優(yōu)點(diǎn))。如上所述,將多個(gè)指令組合為單一指令的優(yōu)點(diǎn)是明顯的。然而,所組合的指令的數(shù) 量受限,因?yàn)椴僮鞔a的位數(shù)量受限,并且減小了指令譯碼器(decoder)的處理速度。因此,通過(guò)對(duì)每個(gè)應(yīng)用提供一定數(shù)量的成群(grouped)指令,可以實(shí)現(xiàn)對(duì)特定應(yīng)用具有改善性能 的處理器。另外,最近幾年,開(kāi)發(fā)了執(zhí)行不具有操作數(shù)的指令的計(jì)算機(jī)(例如,堆棧機(jī)(stack machine)和隊(duì)列機(jī)(queue machine)).例如,開(kāi)發(fā)了在圖形對(duì)象協(xié)處理器的像素組合模塊 中使用堆棧機(jī)的信息處理裝置(例如,參見(jiàn)日本未實(shí)審專(zhuān)利申請(qǐng)公開(kāi)No. 2001-005776并且 特別是圖9)。

發(fā)明內(nèi)容
在上述現(xiàn)有技術(shù)中,通過(guò)將多個(gè)指令組合為單一指令、或者在堆棧機(jī)或隊(duì)列機(jī)中 使用不具有操作數(shù)的指令,可以壓縮指令,因此,可以減少處理周期的數(shù)量。然而,即使當(dāng)使用這樣的技術(shù)壓縮指令時(shí),也需要分支指令,以提供處理的分支。 因此,需要以某種方式來(lái)保持或生成分支地址。另外,如果在分支地址上沒(méi)有強(qiáng)加限制,則 很難在指令譯碼之前確定分支地址的候選者。因此,很難有效地預(yù)取出分支目的地。因此,本發(fā)明提供了通過(guò)限制分支指令的分支目的地來(lái)增加壓縮指令的效率的技 術(shù)。為了解決上述問(wèn)題,根據(jù)本發(fā)明的實(shí)施例,一種處理器包括指令緩沖器,用于將 由不具有操作數(shù)的多個(gè)指令形成的指令序列分離為多個(gè)段,并存儲(chǔ)這些段;數(shù)據(jù)保存單元, 用于保存將通過(guò)使用多個(gè)指令處理的數(shù)據(jù);譯碼器,用于參考保存在數(shù)據(jù)保存單元中的數(shù) 據(jù),并逐個(gè)從位于指令序列的頂部處的指令順序地譯碼這些指令中的至少一個(gè);指令執(zhí)行 單元,用于根據(jù)由譯碼器執(zhí)行的譯碼的結(jié)果,執(zhí)行指令;以及指令序列更新控制單元,用于 根據(jù)由譯碼器執(zhí)行的譯碼的結(jié)果,控制指令序列的更新。當(dāng)所譯碼的頂部指令是分支指令 時(shí),如果發(fā)生分支,則指令序列更新控制單元更新指令序列,使得這些段中的任何一個(gè)的頂 部指令變得位于指令序列的頂部處,以及如果不發(fā)生分支,則指令序列更新控制單元更新 指令序列,使得緊跟在分支指令之后的下一個(gè)指令變得位于指令序列的頂部處。以這種方 式,可以提供將分支目的地限制到段的頂部的優(yōu)點(diǎn)。可以將分支指令的分支目的地限制到在包括分支指令的段之前的段的頂部處的 指令。以這種方式,可以防止死鎖的發(fā)生。譯碼器可以譯碼與用于執(zhí)行指令的功能有關(guān)的功能類(lèi)型和與在執(zhí)行指令之后的 指令序列的更新有關(guān)的執(zhí)行類(lèi)型,指令執(zhí)行單元可以根據(jù)功能類(lèi)型執(zhí)行指令,以及指令序 列更新控制單元可以根據(jù)執(zhí)行類(lèi)型來(lái)控制指令序列的更新。以這種方式,可以根據(jù)功能類(lèi) 型和執(zhí)行類(lèi)型來(lái)更新指令序列。譯碼器可以參考保存在數(shù)據(jù)保存單元中的數(shù)據(jù),并從位于指令序列的頂部處的指 令開(kāi)始順序地譯碼多個(gè)指令,以及指令執(zhí)行單元可以同時(shí)執(zhí)行與根據(jù)功能類(lèi)型確定的數(shù)量 相等的多個(gè)指令。指令序列更新控制單元可以控制指令序列的更新,使得從指令緩沖器輸 出與根據(jù)執(zhí)行類(lèi)型確定的數(shù)量相等的數(shù)量的指令。以這種方式,可以通過(guò)收攏(fold)來(lái)執(zhí) 行指令。指令序列更新控制單元具有如下功能逐個(gè)偏移多個(gè)段中僅僅頂部段的指令,并 保存狀態(tài)標(biāo)簽,其指示被包含在頂部段中的每個(gè)指令是否僅僅被保存在頂部段中。存儲(chǔ)在數(shù)據(jù)保存單元中的數(shù)據(jù)可以包括堆棧,以及當(dāng)完成指令序列的執(zhí)行時(shí),可以輸出保存在堆棧的頂部處的數(shù)據(jù)項(xiàng)。在這樣的情況下,堆??梢跃哂蓄A(yù)定數(shù)量的級(jí) (stage),如果向堆棧輸入超過(guò)預(yù)定數(shù)量的級(jí)的多個(gè)數(shù)據(jù)項(xiàng),則從保存在堆棧的底部處的數(shù) 據(jù)項(xiàng)開(kāi)始,數(shù)據(jù)項(xiàng)可以消失。以這種方式,可以限制堆棧的級(jí)數(shù)。保存在數(shù)據(jù)保存單元中的數(shù)據(jù)包括隊(duì)列,以及當(dāng)完成指令序列的執(zhí)行時(shí),可以輸 出保存在隊(duì)列的尾部處的數(shù)據(jù)項(xiàng)。該處理器還可以包括數(shù)據(jù)格式指定單元,用于指定當(dāng)完成指令序列的執(zhí)行時(shí)輸出 的數(shù)據(jù)項(xiàng)的格式。根據(jù)本發(fā)明的另一實(shí)施例,提供了一種協(xié)處理器和包括該協(xié)處理器的信息處理系 統(tǒng)。該協(xié)處理器包括指令緩沖器,用于從更高層處理器接收由不具有操作數(shù)的多個(gè)指令形 成的指令序列,將這些指令分離為多個(gè)段,并存儲(chǔ)這些段;數(shù)據(jù)保存單元,用于保存將通過(guò) 使用多個(gè)指令處理的數(shù)據(jù);譯碼器,用于參考保存在數(shù)據(jù)保存單元中的數(shù)據(jù),并從位于指令 序列的頂部處的指令順序地譯碼這些指令中的至少一個(gè);指令執(zhí)行單元,用于根據(jù)由譯碼 器執(zhí)行的譯碼的結(jié)果來(lái)執(zhí)行指令;指令序列更新控制單元,用于根據(jù)由譯碼器執(zhí)行的譯碼 的結(jié)果來(lái)控制指令序列的更新;以及輸出單元,用于當(dāng)完成指令序列的執(zhí)行時(shí),輸出保存在 數(shù)據(jù)保存單元中的數(shù)據(jù)。當(dāng)所譯碼的頂部指令是分支指令時(shí),如果發(fā)生分支,則指令序列更 新控制單元更新指令序列,使得這些段中的任何一個(gè)的頂部指令變得位于指令序列的頂部 處,以及如果不發(fā)生分支,則指令序列更新控制單元更新指令序列,使得緊跟在分支指令之 后的下一個(gè)指令變得位于指令序列的頂部處。以這種方式,在協(xié)處理器執(zhí)行的處理中,可以 提供將分支目的地限制到段的頂部的優(yōu)點(diǎn)。根據(jù)本發(fā)明的再一實(shí)施例,提供了一種在處理器中使用的指令序列更新控制方 法。該處理器包括指令緩沖器,用于將由不具有操作數(shù)的多個(gè)指令形成的指令序列分離 為多個(gè)段,并存儲(chǔ)這些段;數(shù)據(jù)保存單元,用于保存將通過(guò)使用多個(gè)指令處理的數(shù)據(jù);譯碼 器,用于參考保存在數(shù)據(jù)保存單元中的數(shù)據(jù),并從位于指令序列的頂部處的指令順序地譯 碼這些指令中的至少一個(gè);指令執(zhí)行單元,用于根據(jù)由譯碼器執(zhí)行的譯碼的結(jié)果,執(zhí)行指 令;以及指令序列更新控制單元,用于根據(jù)由譯碼器執(zhí)行的譯碼的結(jié)果,控制指令序列的更 新。該方法包括如下步驟當(dāng)所譯碼的頂部指令是分支指令時(shí),如果發(fā)生分支,則更新指令 序列,使得這些段中的任何一個(gè)的頂部指令變得位于指令序列的頂部處,以及如果不發(fā)生 分支,則更新指令序列,使得緊跟在分支指令之后的下一個(gè)指令變得位于指令序列的頂部 處。以這種方式,可以提供將分支目的地限制到段的頂部的優(yōu)點(diǎn)。根據(jù)本發(fā)明,通過(guò)限制分支指令的分支目的地,可以提供壓縮指令的效率增大的 明顯優(yōu)點(diǎn)。


圖1圖示了根據(jù)本發(fā)明的第一實(shí)施例的信息處理系統(tǒng)的示例配置;圖2圖示了根據(jù)本發(fā)明的第一實(shí)施例的微指令處理協(xié)處理器的示例配置;圖3A至3C圖示了根據(jù)本發(fā)明的第一實(shí)施例的存儲(chǔ)在微程序存儲(chǔ)器中的微程序的 例子結(jié)構(gòu);圖4圖示了根據(jù)本發(fā)明的第一實(shí)施例的微程序執(zhí)行單元的示例配置;圖5A至5B圖示了根據(jù)本發(fā)明的第一實(shí)施例的存儲(chǔ)在工作寄存器中的工作數(shù)據(jù)的例子結(jié)構(gòu);圖6A至6D圖示了根據(jù)本發(fā)明的第一實(shí)施例的存儲(chǔ)在寫(xiě)回格式寄存器中的寫(xiě)回格 式和數(shù)據(jù)的處理之間關(guān)系的例子;圖7圖示了根據(jù)本發(fā)明的第一實(shí)施例的微指令緩沖器的示例配置;圖8圖示了根據(jù)本發(fā)明的第一實(shí)施例的四個(gè)指令緩沖器的示例配置;圖9圖示了根據(jù)本發(fā)明的第一實(shí)施例的段(segment)更新選擇器的示例配置;圖10圖示了根據(jù)本發(fā)明的第一實(shí)施例的信息處理系統(tǒng)的微指令集合的例子;圖IlA至IlC圖示了根據(jù)本發(fā)明的第一實(shí)施例的信息處理系統(tǒng)的分支指令的分支 目的地;圖12圖示了根據(jù)本發(fā)明的第一實(shí)施例的微指令緩沖器的狀態(tài);圖13圖示了根據(jù)本發(fā)明的第一實(shí)施例的指令緩沖器狀態(tài)標(biāo)簽的狀態(tài)轉(zhuǎn)換的例子 (當(dāng)每個(gè)周期執(zhí)行單一指令時(shí));圖14圖示了根據(jù)本發(fā)明的第一實(shí)施例的指令緩沖器狀態(tài)標(biāo)簽的狀態(tài)轉(zhuǎn)換的例子 (當(dāng)每個(gè)周期執(zhí)行最多兩個(gè)指令時(shí));圖15圖示了根據(jù)本發(fā)明的第一實(shí)施例的指令緩沖器狀態(tài)標(biāo)簽的狀態(tài)轉(zhuǎn)換的例子 (當(dāng)每個(gè)周期執(zhí)行最多三個(gè)指令時(shí));圖16圖示了根據(jù)本發(fā)明的第一實(shí)施例的指令緩沖器狀態(tài)標(biāo)簽的狀態(tài)轉(zhuǎn)換的例子 (當(dāng)每個(gè)周期執(zhí)行最多四個(gè)指令時(shí));圖17圖示了根據(jù)本發(fā)明的第一實(shí)施例的微程序指令譯碼器的配置的第一例子;圖18圖示了根據(jù)本發(fā)明的第一實(shí)施例的由功能類(lèi)型確定單元的第一配置執(zhí)行的 處理過(guò)程;圖19圖示了根據(jù)本發(fā)明的第一實(shí)施例的執(zhí)行類(lèi)型確定單元的第一配置的處理過(guò) 程;圖20圖示了根據(jù)本發(fā)明的第一實(shí)施例的微程序指令譯碼器的配置的第二例子;圖21圖示了根據(jù)本發(fā)明的第一實(shí)施例的功能類(lèi)型確定單元的第二示例配置的處 理過(guò)程(例子1);圖22圖示了根據(jù)本發(fā)明的第一實(shí)施例的功能類(lèi)型確定單元的第二示例配置的處 理過(guò)程(例子2);圖23圖示了根據(jù)本發(fā)明的第一實(shí)施例的由功能類(lèi)型確定單元的第二示例配置執(zhí) 行的處理過(guò)程(例子3);圖M圖示了根據(jù)本發(fā)明的第一實(shí)施例的由執(zhí)行類(lèi)型確定單元的第二示例配置執(zhí) 行的處理過(guò)程(例子1);圖25圖示了根據(jù)本發(fā)明的第一實(shí)施例的由執(zhí)行類(lèi)型確定單元的第二示例配置執(zhí) 行的處理過(guò)程(例子2);圖沈圖示了根據(jù)本發(fā)明的第一實(shí)施例的由微指令集合中的NOP指令執(zhí)行的數(shù)據(jù) 操作的例子;圖27圖示了根據(jù)本發(fā)明的第一實(shí)施例的由微指令集合中的DUP指令執(zhí)行的數(shù)據(jù) 操作的例子;圖28圖示了根據(jù)本發(fā)明的第一實(shí)施例的由微指令集合中的POP指令執(zhí)行的數(shù)據(jù)操作的例子;圖四圖示了根據(jù)本發(fā)明的第一實(shí)施例的由微指令集合中的P0PX2指令執(zhí)行的數(shù) 據(jù)操作的例子;圖30圖示了根據(jù)本發(fā)明的第一實(shí)施例的由微指令集合中的ROT指令執(zhí)行的數(shù)據(jù) 操作的例子;圖31圖示了根據(jù)本發(fā)明的第一實(shí)施例的由微指令集合中的R0T4指令執(zhí)行的數(shù)據(jù) 操作的例子;圖32圖示了根據(jù)本發(fā)明的第一實(shí)施例的由微指令集合中的SWAP指令執(zhí)行的數(shù)據(jù) 操作的例子;圖33圖示了根據(jù)本發(fā)明的第一實(shí)施例的由微指令集合中的SORT指令執(zhí)行的數(shù)據(jù) 操作的例子;圖34圖示了根據(jù)本發(fā)明的第一實(shí)施例的由微指令集合中諸如NOT指令之類(lèi)的第 一操作數(shù)運(yùn)算指令執(zhí)行的數(shù)據(jù)操作的例子;圖35圖示了根據(jù)本發(fā)明的第一實(shí)施例的由微指令集合中諸如EQ指令之類(lèi)的第二 操作數(shù)運(yùn)算指令執(zhí)行的數(shù)據(jù)操作的例子;圖36圖示了根據(jù)本發(fā)明的第一實(shí)施例的由微指令集合中的SER指令執(zhí)行的數(shù)據(jù) 操作的例子;圖37圖示了根據(jù)本發(fā)明的第一實(shí)施例的由微指令集合中的ONE指令或^RO指令 執(zhí)行的數(shù)據(jù)操作的例子;圖38圖示了根據(jù)本發(fā)明的第一實(shí)施例的由微指令集合中的LDO指令執(zhí)行的數(shù)據(jù) 操作的例子;圖39圖示了根據(jù)本發(fā)明的第一實(shí)施例的由微指令集合中的LDl指令執(zhí)行的數(shù)據(jù) 操作的例子;圖40圖示了根據(jù)本發(fā)明的第一實(shí)施例的由微指令集合中的LD2指令執(zhí)行的數(shù)據(jù) 操作的例子;圖41圖示了根據(jù)本發(fā)明的第一實(shí)施例的由微指令集合中的STO指令執(zhí)行的數(shù)據(jù) 操作的例子;圖42圖示了根據(jù)本發(fā)明的第一實(shí)施例的由微指令集合中的STl指令執(zhí)行的數(shù)據(jù) 操作的例子;圖43圖示了根據(jù)本發(fā)明的第一實(shí)施例的由微指令集合中的ST2指令執(zhí)行的數(shù)據(jù) 操作的例子;圖44圖示了根據(jù)本發(fā)明的第一實(shí)施例的用于微指令集合的雙操作數(shù) (two-operand)運(yùn)算單元的配置的例子;圖45圖示了根據(jù)本發(fā)明的第一實(shí)施例的用于微指令集合的MIN(最小值)運(yùn)算單 元的配置的例子;圖46圖示了根據(jù)本發(fā)明的第一實(shí)施例的用于微指令集合的MAX (最大值)運(yùn)算單 元的配置的例子;圖47圖示了根據(jù)本發(fā)明的第一實(shí)施例的用于微指令集合的GT運(yùn)算單元的配置的 例子;
圖48圖示了根據(jù)本發(fā)明的第一實(shí)施例的用于微指令集合的GE運(yùn)算單元的配置的 例子;圖49圖示了根據(jù)本發(fā)明的第一實(shí)施例的用于微指令集合的EQ運(yùn)算單元的配置的 例子;圖50圖示了根據(jù)本發(fā)明的第一實(shí)施例的用于微指令集合的SER運(yùn)算單元的配置 的例子;圖51圖示了根據(jù)本發(fā)明的第一實(shí)施例的用于微指令集合的PAR運(yùn)算單元的配置 的例子;圖52圖示了根據(jù)本發(fā)明的第一實(shí)施例的用于微指令集合的單操作數(shù) (one-operand)運(yùn)算單元的配置的例子;圖53圖示了根據(jù)本發(fā)明的第一實(shí)施例的用于微指令集合的ORLU運(yùn)算單元的配置 的例子;圖M圖示了根據(jù)本發(fā)明的第一實(shí)施例的用于微指令集合的LU運(yùn)算單元的配置的 例子;圖55A和55B圖示了根據(jù)本發(fā)明的第一實(shí)施例的DUP_ST0的收攏(folding)的例 子;圖56A和56B圖示了根據(jù)本發(fā)明的第一實(shí)施例的LD0_EQ_ST1的收攏的例子;圖57A和57B圖示了根據(jù)本發(fā)明的第一實(shí)施例的LD0_EQ_SWAP的收攏的例子;圖58圖示了根據(jù)本發(fā)明的第一實(shí)施例的用于信息處理系統(tǒng)的微程序的列表的例 子;圖59圖示了根據(jù)本發(fā)明的第一實(shí)施例的NULL微程序的分支路徑;圖60圖示了根據(jù)本發(fā)明的第一實(shí)施例的MEAN微程序的分支路徑;圖61圖示了根據(jù)本發(fā)明的第一實(shí)施例的MEDIAN3微程序的分支路徑;圖62圖示了根據(jù)本發(fā)明的第一實(shí)施例的MEDIAN4微程序的分支路徑;圖63圖示了根據(jù)本發(fā)明的第一實(shí)施例的MEDCND微程序的分支路徑;圖64圖示了根據(jù)本發(fā)明的第一實(shí)施例的MED3微程序的分支路徑;圖65圖示了根據(jù)本發(fā)明的第一實(shí)施例的SMOD微程序的分支路徑;圖66圖示了根據(jù)本發(fā)明的第一實(shí)施例的DBMD_FRM微程序的分支路徑;圖67圖示了根據(jù)本發(fā)明的第一實(shí)施例的DBMD_FLD微程序的分支路徑;圖68圖示了根據(jù)本發(fā)明的第一實(shí)施例的DBIDX微程序的分支路徑;圖69圖示了根據(jù)本發(fā)明的第一實(shí)施例的使用JP指令的第一范例(sample)的分 支路徑;圖70圖示了根據(jù)本發(fā)明的第一實(shí)施例的使用JP指令的第二范例的分支路徑;圖71圖示了根據(jù)本發(fā)明的第一實(shí)施例的更高層處理器的協(xié)處理器指令的列表的 例子;圖72A和72B圖示了根據(jù)本發(fā)明的第一實(shí)施例的指令格式的例子;圖73A至73E圖示了根據(jù)本發(fā)明的第一實(shí)施例的來(lái)自更高層處理器的用于指示執(zhí) 行微程序的指令群的例子;以及圖74A和74B圖示了根據(jù)本發(fā)明的第二實(shí)施例的存儲(chǔ)在工作寄存器中的隊(duì)列寄存器的配置的例子。
具體實(shí)施例方式下面描述本發(fā)明的實(shí)施例。以如下順序進(jìn)行描述1.第一實(shí)施例(包括堆棧機(jī)的示例配置)2.第二實(shí)施例(包括隊(duì)列機(jī)的示例配置)3.修改1.第一實(shí)施例信息處理系統(tǒng)的示例配置圖1圖示了根據(jù)本發(fā)明的第一實(shí)施例的信息處理系統(tǒng)的示例配置。信息處理系統(tǒng) 包括更高層處理器100、微指令處理協(xié)處理器200、指令高速緩存310、數(shù)據(jù)高速緩存320、 存儲(chǔ)器總線390和存儲(chǔ)器400。更高層處理器100位于比微指令處理協(xié)處理器200更高的層中。更高層處理器 100指示微指令處理協(xié)處理器200執(zhí)行協(xié)處理器指令。更高層處理器100使用存儲(chǔ)在存儲(chǔ) 器400中的數(shù)據(jù)來(lái)執(zhí)行處理。指令高速緩存310和數(shù)據(jù)高速緩存320使用存儲(chǔ)器總線390 在更高層處理器100和存儲(chǔ)器400之間相連。存儲(chǔ)器400保存由更高層處理器100執(zhí)行的處理所需的指令和數(shù)據(jù)。在指令高速 緩存310和數(shù)據(jù)高速緩存320中保存在存儲(chǔ)器400中的一部分?jǐn)?shù)據(jù)的拷貝。指令高速緩存 310是用于存儲(chǔ)更高層處理器100的指令(處理器指令)的高速緩存存儲(chǔ)器。數(shù)據(jù)高速緩 存320是用于存儲(chǔ)更高層處理器100處理指令所需的數(shù)據(jù)的高速緩存存儲(chǔ)器。處理器總線 390用于將存儲(chǔ)器400連接到指令高速緩存310和數(shù)據(jù)高速緩存320。更高層處理器100包括程序計(jì)數(shù)器更新單元110、處理器指令譯碼器120、處理器 運(yùn)算單元流水線130、通用寄存器文件140和負(fù)載存儲(chǔ)單元150。程序計(jì)數(shù)器更新單元110包括存儲(chǔ)當(dāng)前執(zhí)行的程序的指令(處理器指令)地址的 程序計(jì)數(shù)器。程序計(jì)數(shù)器更新單元110還包括用于更新程序計(jì)數(shù)器的電路。程序計(jì)數(shù)器更 新單元110響應(yīng)于從處理器指令譯碼器120發(fā)送的控制信號(hào)來(lái)更新程序計(jì)數(shù)器。存儲(chǔ)在程 序計(jì)數(shù)器中的地址被提供給指令高速緩存310,并用作指令取出地址。處理器指令譯碼器120使用指令取出地址來(lái)譯碼所取出的指令(處理器指令)。 作為由處理器指令譯碼器120執(zhí)行的譯碼的結(jié)果,控制信號(hào)被提供給更高層處理器100的 各種部件。處理器運(yùn)算單元流水線130是在更高層處理器100中執(zhí)行運(yùn)算操作的運(yùn)算單元。 通用寄存器文件140存儲(chǔ)更高層處理器100的通用寄存器(GPR)。負(fù)載存儲(chǔ)單元150從存 儲(chǔ)器400裝載數(shù)據(jù),并將數(shù)據(jù)存儲(chǔ)在存儲(chǔ)器400中。微指令處理協(xié)處理器200是在更高層處理器100的控制下操作的協(xié)處理器。當(dāng)處 理器指令譯碼器120檢測(cè)到協(xié)處理器指令時(shí),指示微指令處理協(xié)處理器200經(jīng)由協(xié)處理器 指令隊(duì)列210執(zhí)行協(xié)處理器指令。將微指令處理協(xié)處理器200的執(zhí)行結(jié)果經(jīng)由寫(xiě)回緩沖器 250寫(xiě)回通用寄存器文件140。圖2圖示了根據(jù)本發(fā)明的第一實(shí)施例的微指令處理協(xié)處理器200的示例配置。微 指令處理協(xié)處理器200包括協(xié)處理器指令隊(duì)列210、協(xié)處理器指令譯碼器220、微程序存儲(chǔ)器230、微程序執(zhí)行單元240和寫(xiě)回緩沖器250。協(xié)處理器指令隊(duì)列210是用于存儲(chǔ)從更高層處理器100遞交的協(xié)處理器指令的先 進(jìn)先出(FIFO)隊(duì)列。順序地將被存儲(chǔ)在協(xié)處理器指令隊(duì)列210中的協(xié)處理器指令提供給 協(xié)處理器指令譯碼器220。注意,存儲(chǔ)在協(xié)處理器指令隊(duì)列210中的協(xié)處理器指令不一定與 在更高層處理器100中使用的協(xié)處理器指令相同。例如,可以僅僅將通用寄存器所需的值 嵌入到協(xié)處理器指令隊(duì)列210中。協(xié)處理器指令譯碼器220是譯碼從協(xié)處理器指令隊(duì)列210提供的協(xié)處理器指令的 譯碼器。作為由協(xié)處理器指令譯碼器220執(zhí)行的譯碼操作的結(jié)果,生成微程序存儲(chǔ)器230 中的微程序號(hào)(MPID)、數(shù)據(jù)和控制信號(hào)。微程序存儲(chǔ)器230是用于存儲(chǔ)微程序組的存儲(chǔ)器。微程序存儲(chǔ)器230包括微程序 ROM 231和微程序寄存器A至IK232至23幻。微程序ROM 231是用于存儲(chǔ)預(yù)定微程序組的 存儲(chǔ)器。通常,微程序ROM 231是不可重寫(xiě)的。相反,微程序寄存器A至IK232至235)用 作可以存儲(chǔ)可以由用戶定義的微程序組的存儲(chǔ)器。微程序寄存器A至IK232至23 通過(guò) 微程序更新指令是可重寫(xiě)的。當(dāng)從協(xié)處理器指令譯碼器220接收微程序號(hào)時(shí),微程序存儲(chǔ) 器230將存儲(chǔ)在相應(yīng)地址處的微程序經(jīng)由信號(hào)線239提供給微程序執(zhí)行單元M0。微程序指令單元240執(zhí)行從微程序存儲(chǔ)器230提供的微程序。微程序執(zhí)行單元 240將執(zhí)行的結(jié)果輸出給寫(xiě)回緩沖器250。根據(jù)第一實(shí)施例,微程序執(zhí)行單元240具有堆棧 機(jī)配置。注意,微程序執(zhí)行單元240是在權(quán)利要求書(shū)中限定的指令執(zhí)行單元。在下面更詳 細(xì)描述微程序指令單元M0。寫(xiě)回緩沖器250是用于存儲(chǔ)從微程序執(zhí)行單元240輸出的執(zhí)行結(jié)果的緩沖器。寫(xiě) 回緩沖器250將由微指令處理協(xié)處理器200執(zhí)行的執(zhí)行結(jié)果寫(xiě)回到更高層處理器100的通 用寄存器文件140。圖3A至3C圖示了根據(jù)本發(fā)明的第一實(shí)施例的存儲(chǔ)在微程序存儲(chǔ)器230中的微 程序的例子結(jié)構(gòu)。在該例子中,每個(gè)微程序包括16條微指令(miO至mil5)411、寫(xiě)回格式 (mwf)418 和常數(shù)(ml2)419。每個(gè)微指令411具有5位數(shù)量據(jù)結(jié)構(gòu)。從具有最小號(hào)(miO)的微指令開(kāi)始順序地 執(zhí)行微指令411。然而,如下所述,可以同時(shí)執(zhí)行多個(gè)微處理器。如圖3A所述,四個(gè)微指令 411形成段。也就是,微指令#0至#3形成段#0。微指令#4至#7形成段#1。微指令#8至 #11形成段#2。微指令#12至#15形成段#3。如圖:3B所示,寫(xiě)回格式(mwf)418具有2位數(shù)量據(jù)結(jié)構(gòu)。寫(xiě)回格式(mwf)418定 義了在將數(shù)據(jù)寫(xiě)回到更高層處理器100時(shí)使用的數(shù)據(jù)格式。在下面更詳細(xì)描述寫(xiě)回格式 (mwf)4180如圖3C所示,常數(shù)419具有32位數(shù)據(jù)結(jié)構(gòu)。每個(gè)微指令參考用作常數(shù)數(shù)據(jù)的常 數(shù) 419。根據(jù)本發(fā)明的第一實(shí)施例,微程序執(zhí)行單元240具有堆棧機(jī)配置。因此,操作數(shù)不 是必要的,以及分支地址的指定不是必要的。以這種方式,定義5位固定長(zhǎng)度微指令。另外, 因?yàn)榭梢詼p小指令的長(zhǎng)度、并且可以在簡(jiǎn)化的工作寄存器中操縱數(shù)據(jù),所以可以簡(jiǎn)化電路。 因此,可以實(shí)現(xiàn)高頻率操作。圖4圖示了根據(jù)本發(fā)明的第一實(shí)施例的微程序執(zhí)行單元240的示例配置。微程序執(zhí)行單元240包括微指令緩沖器Ml、工作寄存器M2、微程序指令譯碼器500、寫(xiě)回格式 寄存器對(duì)3、運(yùn)算單元M4-1至M4-N、選擇器M5、執(zhí)行類(lèi)型識(shí)別單元246和寫(xiě)回?cái)?shù)據(jù)處理 單元對(duì)7。微指令緩沖器241存儲(chǔ)從微程序存儲(chǔ)器230提供的微指令411中的16條微指令 411。將存儲(chǔ)在微指令緩沖器Ml中的微指令411經(jīng)由信號(hào)線609提供給微程序指令譯碼 器 500。工作寄存器242是用于存儲(chǔ)執(zhí)行微程序所需的工作數(shù)據(jù)的寄存器。在下面更詳細(xì) 描述工作數(shù)據(jù)的示范性數(shù)據(jù)格式。注意,工作寄存器242是在權(quán)利要求書(shū)中限定的數(shù)據(jù)保 存單元的例子。微程序指令譯碼器500譯碼存儲(chǔ)在微指令緩沖器Ml中的微指令411。當(dāng)微程序 指令譯碼器500執(zhí)行譯碼操作時(shí),參考存儲(chǔ)在工作寄存器M2中的工作數(shù)據(jù)。作為譯碼操 作的結(jié)果,確定功能類(lèi)型和執(zhí)行類(lèi)型。經(jīng)由信號(hào)線519和5 輸出功能類(lèi)型和執(zhí)行類(lèi)型。功 能類(lèi)型用于識(shí)別指令執(zhí)行的功能。執(zhí)行類(lèi)型是與微指令緩沖器241的更新以及在執(zhí)行指令 之后的數(shù)據(jù)的寫(xiě)回有關(guān)的類(lèi)型。注意,微程序指令譯碼器500是在權(quán)利要求書(shū)中限定的譯 碼器的例子。寫(xiě)回格式寄存器243是用于存儲(chǔ)從微程序存儲(chǔ)器230提供的微程序的寫(xiě)回格式 418的寄存器。存儲(chǔ)在寫(xiě)回格式寄存器對(duì)3中的寫(xiě)回格式在完成微程序的執(zhí)行之前保持不 變。當(dāng)完成微程序的執(zhí)行時(shí),將寫(xiě)回格式提供給寫(xiě)回?cái)?shù)據(jù)處理單元對(duì)7。注意,寫(xiě)回格式寄 存器243是在權(quán)利要求書(shū)中限定的數(shù)據(jù)格式指定單元的例子。運(yùn)算單元244-1至244-N是可以并行地操作的N個(gè)SMD (單指令多數(shù)據(jù))運(yùn)算單 元。運(yùn)算單元對(duì)4-1至對(duì)44可以執(zhí)行不同功能類(lèi)型的計(jì)算或者相同類(lèi)型的計(jì)算。注意在 下文中,在恰當(dāng)時(shí)將運(yùn)算單元244-1至244-N統(tǒng)稱(chēng)為“運(yùn)算單元M4”。選擇器245是根據(jù)作為由微程序指令譯碼器500執(zhí)行的譯碼操作的結(jié)果的功能類(lèi) 型、選擇由N個(gè)運(yùn)算單元244執(zhí)行的計(jì)算的結(jié)果之一的選擇器。在這之后,選擇器245將所 選擇的一個(gè)結(jié)果提供給工作寄存器對(duì)2。如下所述,可以對(duì)于某功能類(lèi)型,選擇多個(gè)計(jì)算結(jié)果。執(zhí)行類(lèi)型識(shí)別單元246識(shí)別作為由微程序指令譯碼器500執(zhí)行的譯碼操作的結(jié)果 的執(zhí)行類(lèi)型。也就是,執(zhí)行類(lèi)型識(shí)別單元246確定執(zhí)行類(lèi)型是否指示代表微程序的執(zhí)行完 成的RET指令。如果執(zhí)行類(lèi)型指示RET指令,則執(zhí)行類(lèi)型識(shí)別單元246指示寫(xiě)回?cái)?shù)據(jù)處理 單元247處理寫(xiě)回?cái)?shù)據(jù)。當(dāng)執(zhí)行類(lèi)型識(shí)別單元246指示時(shí),寫(xiě)回?cái)?shù)據(jù)處理單元247處理存儲(chǔ)在工作寄存器 242中的數(shù)據(jù),并以寫(xiě)回?cái)?shù)據(jù)的形式將處理后的數(shù)據(jù)輸出給信號(hào)線M8。寫(xiě)回?cái)?shù)據(jù)處理單元 247根據(jù)從寫(xiě)回格式寄存器243提供的寫(xiě)回格式來(lái)處理數(shù)據(jù)。另外,當(dāng)輸出有效寫(xiě)回?cái)?shù)據(jù) 時(shí),從信號(hào)線249輸出寫(xiě)回?cái)?shù)據(jù)使能信號(hào)。圖5A和5B圖示了根據(jù)本發(fā)明的第一實(shí)施例的存儲(chǔ)在工作寄存器242中的工作數(shù) 據(jù)的例子結(jié)構(gòu)。根據(jù)第一實(shí)施例,微程序執(zhí)行單元240作為堆棧機(jī)的部件而操作。因此,工 作數(shù)據(jù)包括4級(jí)堆棧寄存器421至424以及每個(gè)具有32位長(zhǎng)度的三個(gè)本地變量寄存器425 至427。可以同時(shí)讀和寫(xiě)寄存器。分別將堆棧寄存器421至似4稱(chēng)為“堆棧寄存器#0至#3(STK0至STK3) ”。將新的數(shù)據(jù)項(xiàng)推到具有更小號(hào)的堆棧寄存器。每次推入新的數(shù)據(jù)項(xiàng),偏移所有數(shù)據(jù)項(xiàng)。也就是, 當(dāng)沒(méi)有存儲(chǔ)數(shù)據(jù)項(xiàng)時(shí),如果推入第一數(shù)據(jù)項(xiàng),則將第一數(shù)據(jù)存儲(chǔ)在堆棧寄存器#0中。在這 之后,如果推入第二數(shù)據(jù)項(xiàng),則將第一數(shù)據(jù)項(xiàng)偏移到堆棧寄存器#1中,并將第二數(shù)據(jù)項(xiàng)存 儲(chǔ)在堆棧寄存器#0中。以這種方式,每次執(zhí)行推入操作,數(shù)據(jù)項(xiàng)向下偏移。當(dāng)所有堆棧寄 存器#0至#3存儲(chǔ)數(shù)據(jù)項(xiàng)時(shí),如果推入新的數(shù)據(jù)項(xiàng),則所有數(shù)據(jù)項(xiàng)偏移。所以,存儲(chǔ)在堆棧 寄存器#3中的數(shù)據(jù)項(xiàng)消失。相反,當(dāng)執(zhí)行彈出操作時(shí),輸出存儲(chǔ)在堆棧寄存器#0中的數(shù)據(jù)項(xiàng)。在這之后,所有 數(shù)據(jù)項(xiàng)向上偏移。存儲(chǔ)在堆棧寄存器#3中的數(shù)據(jù)項(xiàng)保持不變。當(dāng)完成微程序的執(zhí)行時(shí),存儲(chǔ)在堆棧寄存器#(K421)中的數(shù)據(jù)項(xiàng)被提供給寫(xiě)回?cái)?shù) 據(jù)處理單元對(duì)7,并用于生成寫(xiě)回?cái)?shù)據(jù)。注意,堆棧寄存器421至424的集合是在權(quán)利要求書(shū)中限定的堆棧的例子。每個(gè)本地變量寄存器425至427代表用作單獨(dú)(stand-alone)寄存器的區(qū)域???以使用裝載微指令將每個(gè)本地變量寄存器425至427中的值推到堆棧寄存器#0。另外,每 個(gè)本地變量寄存器425至427可以使用存儲(chǔ)微指令,來(lái)存儲(chǔ)從堆棧寄存器#0彈出的值。本 地變量寄存器427是專(zhuān)用(special)寄存器。當(dāng)從微程序存儲(chǔ)器230提供微程序時(shí),將包 括在微程序中的常數(shù)(ml2) 419設(shè)置在本地變量寄存器427中。因此,可以由微指令411使 用常數(shù)419。圖6A至6D圖示了根據(jù)本發(fā)明的第一實(shí)施例的存儲(chǔ)在寫(xiě)回格式寄存器243中的寫(xiě) 回格式和數(shù)據(jù)的處理之間的關(guān)系的例子。在該例子中,寫(xiě)回格式具有2位長(zhǎng)度。因此,寫(xiě)回 格式的值在“0”至“3”的范圍內(nèi)。根據(jù)寫(xiě)回格式,由寫(xiě)回?cái)?shù)據(jù)處理單元247對(duì)存儲(chǔ)在堆棧 寄存器#0中的32位數(shù)據(jù)STKO執(zhí)行如下數(shù)據(jù)處理。首先,當(dāng)寫(xiě)回格式代表“0”時(shí),直接將存儲(chǔ)在堆棧寄存器#0中的數(shù)據(jù)STKO[31:0] 輸出作為寫(xiě)回?cái)?shù)據(jù)??商娲兀?dāng)寫(xiě)回格式代表“1”時(shí),用“0”填充在數(shù)據(jù)STK0[31:0]中的 從第8位到第15位的八個(gè)位以及從第沈位到第31位的八個(gè)位。在這之后,將該值輸出作 為寫(xiě)回?cái)?shù)據(jù)。再一可替代地,當(dāng)寫(xiě)回格式代表“2”時(shí),將具有與STK[15:0]的相同的較低16 位和為“0”的較高16位的值輸出作為寫(xiě)回?cái)?shù)據(jù)。又一可替代地,當(dāng)寫(xiě)回格式代表“3”時(shí), 將具有與STKO[31:16]的相同的較低16位和為“0”的較高16位的值輸出作為寫(xiě)回?cái)?shù)據(jù)。 以這種方式,可以根據(jù)期望的數(shù)據(jù)格式得到計(jì)算的結(jié)果而無(wú)需由更高層層處理器100執(zhí)行 的額外計(jì)算。圖7圖示了根據(jù)本發(fā)明的第一實(shí)施例的微指令緩沖器241的示例配置。微指令緩 沖器Ml包括存儲(chǔ)微指令的序列的指令緩沖器610和更新微指令的指令序列的指令序列更 新控制單元601。指令緩沖器610包括分別用于四個(gè)段#0至#3的指令緩沖器610-0至610_3。指 令緩沖器610-0至610-3的每個(gè)保存四個(gè)微指令。在下面更詳細(xì)地描述每個(gè)指令緩沖器 610-0至610-3的配置。指令序列更新控制單元601包括段更新選擇器620、執(zhí)行類(lèi)型識(shí)別單元630和選 擇器 640-0 至 640-3。段更新選擇器620是用于從存儲(chǔ)在指令緩沖器610-0至610_1中的八條微指 令segO和segl中選擇作為隨后將被存儲(chǔ)在指令緩沖器610_0中的候選者的四個(gè)微指令nsegO的選擇器。也就是,將由段更新選擇器620更新的段是段#0。在下面更詳細(xì)地描述 段更新選擇器620的配置的例子。執(zhí)行類(lèi)型識(shí)別單元630識(shí)別作為由微程序指令譯碼器500執(zhí)行的譯碼操作的結(jié)果 的執(zhí)行類(lèi)型。也就是,如果執(zhí)行類(lèi)型指示作為有條件分支指令的BR指令,則執(zhí)行類(lèi)型識(shí)別 單元630將具有值“2”的選擇信號(hào)segsft提供給選擇器640-0至640-3。然而,如果執(zhí)行 類(lèi)型是作為無(wú)條件分支指令的JP指令,則執(zhí)行類(lèi)型識(shí)別單元630將具有值“1”的選擇信號(hào) segsft提供給選擇器640-0至640-3。否則,執(zhí)行類(lèi)型識(shí)別單元630將具有值“O”的選擇 信號(hào)segsft提供給選擇器640-0至640-3。選擇器640-0至640-3是用于選擇將在隨后被存儲(chǔ)在指令緩沖器610_0至610_3 中的四個(gè)微指令的選擇器。將四個(gè)RET指令輸入到選擇器640-2至640-3中的每一個(gè)。在 下面,與分支類(lèi)型的描述一起來(lái)詳細(xì)描述該操作。微指令緩沖器241從與段#0相應(yīng)的指令緩沖器610-0中的頂部順序地將微指令 經(jīng)由信號(hào)線609提供給微程序指令譯碼器500。圖8圖示了根據(jù)本發(fā)明的第一實(shí)施例的每個(gè)指令緩沖器610-0至610-3的示例配 置。指令緩沖器610-0至610-3的每個(gè)包括四個(gè)選擇器611-a至611-d以及四個(gè)寄存器 612-a 至 612-d。選擇器611-a至611_d的每個(gè)是用于選擇從微程序存儲(chǔ)器230提供的微指令和來(lái) 自選擇器640-0至640-3的輸出的集合中的一個(gè)的選擇器。從協(xié)處理器指令譯碼器220經(jīng) 由信號(hào)線2 提供用于選擇器611-a至611-d的選擇信號(hào)。寄存器612-a至612-d分別存儲(chǔ)由選擇器611-a至611-d選擇的5位微指令。分 別經(jīng)由信號(hào)線619-0至619-3輸出存儲(chǔ)在寄存器612-a至612_d中的微指令。圖9圖示了根據(jù)本發(fā)明的第一實(shí)施例的段更新選擇器620的示例配置。段更新選 擇器620是用于從存儲(chǔ)在指令緩沖器610-和610-1中的八條微指令segO和segl中選擇 作為將在隨后被存儲(chǔ)在指令緩沖器610-0中的候選者的四個(gè)微指令nsegO。段更新選擇器 620包括指令緩沖器狀態(tài)標(biāo)簽621、指令緩沖器狀態(tài)標(biāo)簽轉(zhuǎn)換確定單元622和選擇器623。指令緩沖器狀態(tài)標(biāo)簽621是用于指示存儲(chǔ)在指令緩沖器610-0中的四個(gè)微指令中 的每一個(gè)是否是僅僅存儲(chǔ)在指令緩沖器610-0中的指令。通常,指令緩沖器610-0存儲(chǔ)該 段#0的微指令,以及指令緩沖器610-1存儲(chǔ)該段#1的微指令。然而,如下所述,為了簡(jiǎn)化 偏移操作,可能發(fā)生例外狀態(tài)。因此,對(duì)于存儲(chǔ)在指令緩沖器610-0中的四個(gè)微指令,提供 指令緩沖器狀態(tài)標(biāo)簽621來(lái)確定該微指令是否還存儲(chǔ)在指令緩沖器610-1至610-3中。指令緩沖器狀態(tài)標(biāo)簽轉(zhuǎn)換確定單元622根據(jù)指令緩沖器狀態(tài)標(biāo)簽621的值和由微 程序指令譯碼器500譯碼的執(zhí)行類(lèi)型來(lái)確定指令緩沖器狀態(tài)標(biāo)簽621的更新值。另外,指 令緩沖器狀態(tài)標(biāo)簽轉(zhuǎn)換確定單元622確定針對(duì)選擇器623的偏移量。在該例子中,執(zhí)行類(lèi) 型指示在作為有條件分支指令的BR指令中發(fā)生分支。在下面更詳細(xì)描述由指令緩沖器狀 態(tài)標(biāo)簽轉(zhuǎn)換確定單元622引起的轉(zhuǎn)換。選擇器623是用于選擇偏移操作的選擇器,其中根據(jù)由指令緩沖器狀態(tài)標(biāo)簽轉(zhuǎn)換 確定單元622確定的偏移量來(lái)偏移存儲(chǔ)在指令緩沖器610-0和610-1中的八條微指令。選 擇器623的輸出被輸入到選擇器640-0的輸入“0”。微指令緩沖器的狀態(tài)轉(zhuǎn)換圖10圖示了根據(jù)本發(fā)明的第一實(shí)施例的信息處理系統(tǒng)的微指令集合的例子。在該例子中,提供了 32種類(lèi)型的微指令。在圖10的“堆棧狀態(tài)”中,在“= >”的左側(cè)示出了在 執(zhí)行微指令之前的堆棧狀態(tài),并在“= >,,的右側(cè)示出了在執(zhí)行了微指令之后的堆棧狀態(tài)。 在每個(gè)堆棧狀態(tài)中,堆棧的頂部在右側(cè)。項(xiàng)目“操作”指示在微指令中如何執(zhí)行該處理。項(xiàng) 目“功能類(lèi)型”指示通過(guò)使用指令執(zhí)行的功能的類(lèi)型。RET指令(指令代碼=0)是用于完成當(dāng)前執(zhí)行的微程序的返回指令。RET指令是 無(wú)條件分支指令之一。即使在執(zhí)行RET指令之后,堆棧狀態(tài)保持不變。JP指令(指令代碼 =1)是跳轉(zhuǎn)到位于當(dāng)前執(zhí)行的段的下一段的頂部處的微指令的無(wú)條件分支指令。在執(zhí)行 JP指令之后,堆棧狀態(tài)保持不變。注意,RET指令和JP指令的功能類(lèi)型是“NOP”,其指示基 本上不操縱數(shù)據(jù)的指令。BR指令(指令代碼=2)是如果發(fā)生分支、則分支到位于當(dāng)前之段前兩段的段的 頂部處的微指令的有條件分支指令。BP指令的功能類(lèi)型是“POP”,其指示數(shù)據(jù)操縱正從堆 棧寄存器彈出(pop)數(shù)據(jù)。也就是,為了確定是否發(fā)生分支,從堆棧寄存器彈出一個(gè)數(shù)據(jù)項(xiàng) (Ni)。如果所彈出的數(shù)據(jù)項(xiàng)(Ni)的LSB是“1”,則發(fā)生分支。然而,如果所彈出的數(shù)據(jù)項(xiàng) (Ni)的LSB是“0”,則不發(fā)生分支。NOT指令(指令代碼=3)是反相32位數(shù)據(jù)的較高16位數(shù)據(jù)和較低16位數(shù)據(jù)的 每個(gè)的邏輯值的邏輯反相指令。從堆棧寄存器彈出32位數(shù)據(jù)項(xiàng)(Ni)。在這之后,將32位 執(zhí)行結(jié)果數(shù)據(jù)(Rl)推入到堆棧寄存器上。注意,在NOT指令之后的指令的功能類(lèi)型與指令 的名稱(chēng)相同。功能類(lèi)型指示如何處理數(shù)據(jù)。NEG指令(指令代碼=4)是反相32位數(shù)據(jù)的較高16位數(shù)據(jù)和較低16位數(shù)據(jù)中 每一個(gè)的符號(hào)的符號(hào)反相指令。從堆棧寄存器彈出32位數(shù)據(jù)項(xiàng)(Ni)。在這之后,將32位 執(zhí)行結(jié)果數(shù)據(jù)(Rl)推入到堆棧寄存器上。ABS指令(指令代碼=5)是用于生成32位數(shù)據(jù)的較高16位數(shù)據(jù)和第16位數(shù)據(jù) 中的每一個(gè)的絕對(duì)值的指令。從堆棧寄存器彈出32位數(shù)據(jù)項(xiàng)(Ni)。在這之后,將32位執(zhí) 行結(jié)果數(shù)據(jù)(Rl)推入到堆棧寄存器上。MUL2指令(指令代碼=6)是對(duì)32位數(shù)據(jù)的較高16位數(shù)據(jù)和較低16位數(shù)據(jù)中的 每一個(gè)執(zhí)行1位運(yùn)算左移的雙倍值生成指令。從堆棧寄存器彈出32位數(shù)據(jù)項(xiàng)(Ni)。在這 之后,將32位執(zhí)行結(jié)果數(shù)據(jù)(Rl)推入到堆棧寄存器上。DIV2指令(指令代碼=7)是對(duì)32位數(shù)據(jù)的較高16位數(shù)據(jù)和較低16位數(shù)據(jù)中的 每一個(gè)執(zhí)行1位運(yùn)算右移的減半值生成指令。從堆棧寄存器彈出32位數(shù)據(jù)項(xiàng)(Ni)。在這 之后,將32位執(zhí)行結(jié)果數(shù)據(jù)(Rl)推入到堆棧寄存器上。ORLU指令(指令代碼=8)是生成32位數(shù)據(jù)的較高16位數(shù)據(jù)和較低16位數(shù)據(jù)的 邏輯和、分配得到的結(jié)果作為32位數(shù)據(jù)的較高16位數(shù)據(jù)和較低16位數(shù)據(jù)、并輸出32位數(shù) 據(jù)的邏輯求和分配指令。也就是,邏輯地對(duì)多個(gè)運(yùn)算單元的結(jié)果值求和,并將得到的值視為 所有運(yùn)算單元的結(jié)果值。從堆棧寄存器彈出32位數(shù)據(jù)項(xiàng)(Ni)。在這之后,將32位執(zhí)行結(jié) 果值(Rl)推入到堆棧寄存器上。LU指令(指令代碼=9)是分配32位數(shù)據(jù)的較低16位數(shù)據(jù)作為32位數(shù)據(jù)的較高 16位數(shù)據(jù)和較低16位數(shù)據(jù)并輸出32位數(shù)據(jù)的分配指令。從堆棧寄存器彈出32位數(shù)據(jù)項(xiàng) (Ni)。在這之后,將32位執(zhí)行結(jié)果數(shù)據(jù)(Rl)推入到堆棧寄存器上。GT指令(指令代碼=10)是將32位數(shù)據(jù)項(xiàng)(Ni)的較低16位數(shù)據(jù)和32位數(shù)據(jù)項(xiàng)(擬)的較低16位數(shù)據(jù)相比較、并將32位數(shù)據(jù)項(xiàng)(Ni)的較高16位數(shù)據(jù)和32位數(shù)據(jù)項(xiàng) (N2)的較高16位數(shù)據(jù)相比較的運(yùn)算比較指令。如果m>N2,則輸出“1”。反之,輸出“0”。 從堆棧寄存器彈出兩個(gè)32位數(shù)據(jù)項(xiàng)(首先N2,然后W)。在這之后,將32位執(zhí)行結(jié)果數(shù)據(jù) (Rl)推入到堆棧寄存器上。GE指令(指令代碼=11)是將32位數(shù)據(jù)項(xiàng)(Ni)的較低16位數(shù)據(jù)和32位數(shù)據(jù) 項(xiàng)(擬)的較低16位數(shù)據(jù)相比較、并將32位數(shù)據(jù)項(xiàng)(Ni)的較高16位數(shù)據(jù)和32位數(shù)據(jù)項(xiàng) (N2)的較高16位數(shù)據(jù)相比較的運(yùn)算比較指令。如果附彡N2,則輸出“1”。反之,輸出“0”。 從堆棧寄存器彈出兩個(gè)32位數(shù)據(jù)項(xiàng)(首先N2,然后W)。在這之后,將32位執(zhí)行結(jié)果數(shù)據(jù) (Rl)推入到堆棧寄存器上。EQ指令(指令代碼=12)是將32位數(shù)據(jù)項(xiàng)(Ni)的較低16位數(shù)據(jù)和32位數(shù)據(jù) 項(xiàng)(擬)的較低16位數(shù)據(jù)相比較、并將32位數(shù)據(jù)項(xiàng)(Ni)的較高16位數(shù)據(jù)和32位數(shù)據(jù)項(xiàng) (N2)的較高16位數(shù)據(jù)相比較的運(yùn)算比較指令。如果附=N2,則輸出“1”。反之,輸出“0”。 從堆棧寄存器彈出兩個(gè)32位數(shù)據(jù)項(xiàng)(首先N2,然后W)。在這之后,將32位執(zhí)行結(jié)果數(shù)據(jù) (Rl)推入到堆棧寄存器上。AND (與)指令(指令代碼=13)是生成32位數(shù)據(jù)項(xiàng)(Ni)的較低16位數(shù)據(jù)和32 位數(shù)據(jù)項(xiàng)(擬)的較低16位數(shù)據(jù)的邏輯與(AND)、并生成32位數(shù)據(jù)項(xiàng)(Ni)的較高16位數(shù) 據(jù)和32位數(shù)據(jù)項(xiàng)(擬)的較高16位數(shù)據(jù)的邏輯與的邏輯與生成指令。從堆棧寄存器彈出 兩個(gè)32位數(shù)據(jù)項(xiàng)(首先N2,然后W)。在這之后,將32位執(zhí)行結(jié)果數(shù)據(jù)(Rl)推入到堆棧 寄存器上。OR指令(指令代碼=14)是生成32位數(shù)據(jù)項(xiàng)(Ni)的較低16位數(shù)據(jù)和32位數(shù)據(jù) 項(xiàng)(擬)的較低16位數(shù)據(jù)的邏輯或(OR)、并生成32位數(shù)據(jù)項(xiàng)(Ni)的較高16位數(shù)據(jù)和32 位數(shù)據(jù)項(xiàng)(擬)的較高16位數(shù)據(jù)的邏輯或的邏輯或生成指令。從堆棧寄存器彈出兩個(gè)32位 數(shù)據(jù)項(xiàng)(首先N2,然后W)。在這之后,將32位執(zhí)行結(jié)果數(shù)據(jù)(Rl)推入到堆棧寄存器上。XOR指令(指令代碼=15)是生成32位數(shù)據(jù)項(xiàng)(Ni)的較低16位數(shù)據(jù)和32位數(shù) 據(jù)項(xiàng)(N2)的較低16位數(shù)據(jù)的邏輯異或(exclusive logical OR)、并生成32位數(shù)據(jù)項(xiàng)(Ni) 的較高16位數(shù)據(jù)和32位數(shù)據(jù)項(xiàng)(擬)的較高16位數(shù)據(jù)的邏輯異或的邏輯異或生成指令。 從堆棧寄存器彈出兩個(gè)32位數(shù)據(jù)項(xiàng)(首先N2,然后W)。在這之后,將32位執(zhí)行結(jié)果數(shù)據(jù) (Rl)推入到堆棧寄存器上。ADD指令(指令代碼=16)是執(zhí)行32位數(shù)據(jù)項(xiàng)(Ni)的較低16位數(shù)據(jù)和32位數(shù) 據(jù)項(xiàng)(擬)的較低16位數(shù)據(jù)的運(yùn)算加法、并執(zhí)行32位數(shù)據(jù)項(xiàng)(Ni)的較高16位數(shù)據(jù)和32位 數(shù)據(jù)項(xiàng)(擬)的較高16位數(shù)據(jù)的運(yùn)算加法的運(yùn)算加法指令。從堆棧寄存器彈出兩個(gè)32位 數(shù)據(jù)項(xiàng)(首先N2,然后W)。在這之后,將32位執(zhí)行結(jié)果數(shù)據(jù)(Rl)推入到堆棧寄存器上。SUB指令(指令代碼=17)是在32位數(shù)據(jù)項(xiàng)(Ni)的較低16位數(shù)據(jù)和32位數(shù)據(jù) 項(xiàng)(擬)的較低16位數(shù)據(jù)之間執(zhí)行運(yùn)算減法、并在32位數(shù)據(jù)項(xiàng)(Ni)的較高16位數(shù)據(jù)和32 位數(shù)據(jù)項(xiàng)(擬)的較高16位數(shù)據(jù)之間執(zhí)行運(yùn)算減法(m-擬)的運(yùn)算減法指令。從堆棧寄存 器彈出兩個(gè)32位數(shù)據(jù)項(xiàng)(首先N2,然后W)。在這之后,將32位執(zhí)行結(jié)果數(shù)據(jù)(Rl)推入 到堆棧寄存器上。PAR指令(指令代碼18)是將32位數(shù)據(jù)項(xiàng)(Ni)的較低16位數(shù)據(jù)與32位數(shù)據(jù)項(xiàng) (N2)的較低16位數(shù)據(jù)相組組合輸出32位數(shù)據(jù)項(xiàng)的封裝指令。從堆棧寄存器彈出兩個(gè)32位數(shù)據(jù)項(xiàng)m和N2(首先N2,然后Ni)。在這之后,將32位執(zhí)行結(jié)果數(shù)據(jù)(Rl)推入到堆棧 寄存器上。通常,從堆棧的頂部順序地彈出多個(gè)數(shù)據(jù)項(xiàng)。將數(shù)據(jù)項(xiàng)的預(yù)定位位置處的數(shù)據(jù) 或預(yù)定堆棧的數(shù)據(jù)項(xiàng)被鏈接(concatenate)為一個(gè)數(shù)據(jù)項(xiàng),將該數(shù)據(jù)項(xiàng)推入堆棧頂部。DUP指令(指令代碼=19)是從堆棧寄存器彈出32位數(shù)據(jù)項(xiàng)(Ni)、并將數(shù)據(jù)項(xiàng)兩 次推入堆棧寄存器、使得堆疊了兩個(gè)32位數(shù)據(jù)項(xiàng)(Rl和似)的拷貝指令。SER指令(指令代碼=20)是檢索32位數(shù)據(jù)項(xiàng)(Ni)的較高16位、將該16位用作 32位數(shù)據(jù)項(xiàng)(Rl)的較高16位、檢索數(shù)據(jù)項(xiàng)(Ni)的較低16位、并將該16位用作另一 32位 數(shù)據(jù)項(xiàng)(似)的較高16位或較低16位的封裝指令。從堆棧寄存器彈出用作源的32位數(shù)據(jù) 項(xiàng)(Ni)。在這之后,將兩個(gè)32位執(zhí)行結(jié)果數(shù)據(jù)項(xiàng)(Rl和似)推入堆棧寄存器(首先R1,然 后似)。通常,堆棧的頂部處的數(shù)據(jù)項(xiàng)被分離為多個(gè)數(shù)據(jù)項(xiàng),并以預(yù)定方式處理每個(gè)分離的 數(shù)據(jù)項(xiàng)。在這之后,將數(shù)據(jù)項(xiàng)順序地推入到堆棧頂部上。ROT指令(指令代碼=21)是從堆棧寄存器彈出三個(gè)32位數(shù)量據(jù)項(xiàng)、并執(zhí)行三次 推入操作、使得將底部處的數(shù)據(jù)項(xiàng)偏移到第三位置的旋轉(zhuǎn)指令。SWAP指令(指令代碼=22)是從堆棧寄存器彈出兩個(gè)32位數(shù)據(jù)項(xiàng)、并執(zhí)行兩次推 入操作、使得在堆棧寄存器中交換(exchange)數(shù)據(jù)項(xiàng)的交換(swap)指令。SORT指令(指令代碼=2 是將32位數(shù)據(jù)項(xiàng)(Ni)的較高16位數(shù)據(jù)和32位數(shù)據(jù) 項(xiàng)(擬)的較高16位數(shù)據(jù)相比較、并將32位數(shù)據(jù)項(xiàng)(Ni)的較低16位數(shù)據(jù)和32位數(shù)據(jù)項(xiàng) (N2)的較低16位數(shù)據(jù)相比較的挑選(sort)指令。在這之后,較小者用作執(zhí)行結(jié)果數(shù)據(jù)R1, 以及較大者用作執(zhí)行結(jié)果數(shù)據(jù)R2。從堆棧寄存器彈出兩個(gè)32位數(shù)量據(jù)項(xiàng)(首先N2,然后 Ni).在這之后,將兩個(gè)執(zhí)行結(jié)果數(shù)據(jù)項(xiàng)Rl和R2推入到堆棧寄存器上(首先R1,然后R2)。 也就是,彈出堆棧寄存器的頂部處的數(shù)據(jù)項(xiàng)和頂部第二的數(shù)據(jù)項(xiàng)。使用兩者之間的大小關(guān) 系來(lái)選擇兩個(gè)數(shù)據(jù)項(xiàng)之一。在這之后,推入沒(méi)有選擇的數(shù)據(jù)項(xiàng),之后,推入選擇的數(shù)據(jù)項(xiàng)。^RO指令(指令代碼=24)是將具有為“0”的較高16位和為“0”的較低16位的 32位數(shù)據(jù)項(xiàng)額外地推入堆棧寄存器中的零推入指令。ONE指令(指令代碼=25)是將具有 為“1”的較高16位和為“1”的較低16位的32位數(shù)據(jù)項(xiàng)額外地推入堆棧寄存器中的一推 入指令。LDO指令(指令代碼=26)是將存儲(chǔ)在本地寄存器#(K425)中的值額外地推入堆 棧寄存器中的裝載0指令。LDl指令(指令代碼=27)是將存儲(chǔ)在本地寄存器#1(426)中 的值額外推入堆棧寄存器的裝載1指令。LD2指令(指令代碼=28)是將存儲(chǔ)在本地寄存 器#2(427)中的值額外推入堆棧寄存器中的裝載2指令。STO指令(指令代碼=29)是將從堆棧寄存器彈出的數(shù)據(jù)存儲(chǔ)到本地變量寄存器 #0(425)中的存儲(chǔ)0指令。STl指令(指令代碼=30)是將從堆棧寄存器彈出的數(shù)據(jù)存儲(chǔ) 到本地變量寄存器#1(426)中的存儲(chǔ)1指令。ST2指令(指令代碼=31)是將從堆棧寄存 器彈出的數(shù)據(jù)存儲(chǔ)到本地變量寄存器#2(427)中的存儲(chǔ)2指令。圖IlA至IlC圖示了根據(jù)本發(fā)明的第一實(shí)施例的信息處理系統(tǒng)中的分支指令的分 支目的地的例子。如上所述,微程序包括四個(gè)段和16條微指令。為了統(tǒng)一分支指令的操作, 提供兩個(gè)虛擬段。也就是,提供每個(gè)包括四個(gè)RET指令的段#4和段#5。然而,不需要將段 #4和#5存儲(chǔ)在微程序存儲(chǔ)器230中。如圖7所示,通過(guò)設(shè)計(jì)對(duì)于選擇器640-2和640-3的 某種類(lèi)型的輸入,容易實(shí)現(xiàn)段#4和#5。
圖IlA圖示了當(dāng)RET指令出現(xiàn)在微程序中時(shí)的分支目的地。從具有較小號(hào)的指令 到具有較大號(hào)的指令地執(zhí)行普通指令。如果執(zhí)行RET指令,則完成微程序。即使當(dāng)?shù)?6微 指令是普通指令時(shí),如果虛擬段#4的頂部是RET指令,則仍可以完成微程序。圖IlB圖示了當(dāng)JP指令出現(xiàn)在微程序中時(shí)的分支目的地。從具有較小號(hào)的指令 到具有較大號(hào)的指令地執(zhí)行普通指令。如果執(zhí)行JP指令,則控制傳遞到下一段的頂部處的 微指令。即使當(dāng)在段#3中執(zhí)行JP指令時(shí),如果虛擬段#4的頂部是RET指令,則可以完成 微程序。圖IlC圖示了當(dāng)在微程序中發(fā)生BR指令的有條件分支時(shí)的分支目的地。從具有 較小號(hào)的指令到具有較大號(hào)的指令地順序執(zhí)行普通指令。然而,如果發(fā)生BR指令的有條件 分支,則控制傳遞到該段之前兩段的段的頂部處的指令。即使當(dāng)在段#2或#3中發(fā)生BR指 令的分支時(shí),可以通過(guò)在虛擬段#3或#4的頂部處設(shè)置RET指令來(lái)完成微程序。也就是,通過(guò)使用BR指令來(lái)非隱式地指定分支目的地的微地址,即使當(dāng)微程序中 的指令的數(shù)量增加時(shí),分支指令的指定的變化仍是不必要的,因此,分支目的地地址的位數(shù) 量改變。因此,指示控制是傳遞到當(dāng)前段之前一段的段的頂部還是當(dāng)前段之前兩段的段的 頂部的單一規(guī)則的變化不是必要的。以這種方式,本發(fā)明的第一實(shí)施例可以提供微程序中 的指令的數(shù)量的擴(kuò)展的可伸縮性。另外,根據(jù)本發(fā)明的第一實(shí)施例,因?yàn)槎沃械姆种康牡貎H僅具有三種類(lèi)型,所以 可以有效執(zhí)行預(yù)取(prefetch)。也就是,可以設(shè)計(jì)它來(lái)使得參考如下三個(gè)指令下一指令、 當(dāng)前段之前一段的段的頂部處的指令、以及當(dāng)前段之前兩段的段的頂部處的指令。因此,可 以簡(jiǎn)化電路配置。此外,根據(jù)本發(fā)明的第一實(shí)施例,通過(guò)將BR指令的分支目的地限制為前向 (forward)分支目的地,可以防止死鎖。微程序寄存器232至235可以存儲(chǔ)用戶定義的微程 序。如果對(duì)于普通處理器指令允許后向(backward)分支,則可能發(fā)生由無(wú)限循環(huán)引起的死 鎖。因此,根據(jù)本發(fā)明的第一實(shí)施例,為了防止這樣的死鎖,在所有時(shí)刻僅僅允許前向分支 目的地。圖12圖示了根據(jù)本發(fā)明的第一實(shí)施例的微指令緩沖器Ml的狀態(tài)。根據(jù)執(zhí)行類(lèi) 型,在執(zhí)行微指令之后微指令緩沖器Ml的狀態(tài)改變。xl、x2、x3和x4的執(zhí)行類(lèi)型分別指 示執(zhí)行單一指令、同時(shí)執(zhí)行兩個(gè)指令、同時(shí)執(zhí)行三個(gè)指令以及同時(shí)執(zhí)行四個(gè)指令。另外,執(zhí) 行類(lèi)型指示分支不發(fā)生。RET、JP和BR的執(zhí)行類(lèi)型分別指示當(dāng)發(fā)生分支時(shí)的RET指令、JP 指令和BR指令的執(zhí)行。當(dāng)執(zhí)行類(lèi)型是xl、x2、x3、x4或RET時(shí),除了第一段之外的段的狀態(tài)保持不變。在 執(zhí)行期間僅僅第一段經(jīng)受偏移操作。在偏移操作期間,將微指令從下一段偏移到第一段中。 即使在這樣的情況下,除了第一段之外的段保持不變。圖9所示的指令緩沖器狀態(tài)標(biāo)簽621 中的每一個(gè)指示存儲(chǔ)在指令緩沖器610-0中的四個(gè)微指令的相應(yīng)一個(gè)是否是僅僅存儲(chǔ)在 指令緩沖器610-0中的指令。以這種方式,每次執(zhí)行指令時(shí),不執(zhí)行整個(gè)微指令緩沖器241中的偏移。因此,可 以使用指令緩沖器狀態(tài)標(biāo)簽621,將第一段與其他段相區(qū)分,直到逐段地執(zhí)行偏移操作。圖13至16圖示了根據(jù)本發(fā)明的第一實(shí)施例的指令緩沖器狀態(tài)標(biāo)簽621的狀態(tài)轉(zhuǎn) 換的例子。在圖13至16中,在段更新選擇器620中,格式A指示執(zhí)行類(lèi)型,格式B指示在逐段的偏移操作的數(shù)量,以及格式C指示逐個(gè)微指令的偏移操作的數(shù)量。在格式A中,執(zhí)行 類(lèi)型“BR1”指示將在BR指令中發(fā)生分支。在格式B中,“0”指示不執(zhí)行逐段的偏移,以及 “1”指示以一段為單位執(zhí)行逐段偏移?!?”指示以兩段為單位執(zhí)行逐段偏移。在格式C中, “0”指示不執(zhí)行逐個(gè)微指令的偏移,以及“1”指示以一個(gè)微指令為單位執(zhí)行逐個(gè)微指令的偏 移?!?2 ”指示以兩個(gè)微指令為單位執(zhí)行逐個(gè)微指令的偏移。在圖13中,每個(gè)周期執(zhí)行一個(gè)指令。在圖14中,每個(gè)周期執(zhí)行最多兩個(gè)指令。在 圖15中,每個(gè)周期執(zhí)行最多三個(gè)指令。在圖16中,每個(gè)周期執(zhí)行最多四個(gè)指令。在可同時(shí) 執(zhí)行的微指令的最大數(shù)量以及電路維度和最大操作頻率中的每一個(gè)之間存在折中。因此, 根據(jù)使用環(huán)境來(lái)確定可同時(shí)執(zhí)行的微指令的最大數(shù)量。如圖13所示,隨著分支數(shù)減少,電 路變得更簡(jiǎn)單,電路維度變得更小,并且最大操作頻率變得更高。下面描述當(dāng)每個(gè)周期執(zhí)行 單一指令時(shí)和當(dāng)每個(gè)周期執(zhí)行最多三個(gè)指令時(shí)執(zhí)行的微指令的譯碼。微指令的譯碼圖17圖示了根據(jù)本發(fā)明的第一實(shí)施例的微程序指令譯碼器500的配置的第一例 子。在配置的第一例子中,每個(gè)周期執(zhí)行單一指令。微程序指令譯碼器500的配置的第一 例子包括功能類(lèi)型確定單元510和執(zhí)行類(lèi)型確定單元520。功能類(lèi)型確定單元510用于確定與指令的執(zhí)行的功能有關(guān)的功能類(lèi)型。在配置的 第一例子中,功能類(lèi)型確定單元510使用在微指令緩沖器241的頂部處的第一指令i0 (501) 和從堆棧寄存器彈出的數(shù)據(jù)項(xiàng)(50 來(lái)確定功能類(lèi)型519。執(zhí)行類(lèi)型確定單元520用于確定與執(zhí)行指令之后微指令緩沖器241的更新和寫(xiě)回 有關(guān)的執(zhí)行類(lèi)型。在配置的第一例子中,執(zhí)行類(lèi)型確定單元520使用在微指令緩沖器241 的頂部處的第一指令i0(501)和從堆棧寄存器彈出的數(shù)據(jù)項(xiàng)(50 確定執(zhí)行類(lèi)型529。圖18圖示了根據(jù)本發(fā)明的第一實(shí)施例的由功能類(lèi)型確定單元510的第一配置執(zhí) 行的處理過(guò)程。首先,確定微指令緩沖器Ml的頂部處的第一指令i0(501)的指令代碼(步驟 S911)。如果指令iO是RET指令或JP指令,則將功能類(lèi)型確定為“NOP” (步驟S914)。當(dāng)指令iO是BR指令時(shí),如果從堆棧寄存器彈出的數(shù)據(jù)項(xiàng)(505)的LSB是“1”(步 驟S912),則將功能類(lèi)型確定為“POP” (步驟S913)。然而,當(dāng)指令 0是BR指令時(shí),如果從 堆棧寄存器彈出的數(shù)據(jù)項(xiàng)(505)的LSB是“0”(步驟S912),則將功能類(lèi)型確定為“iO”(步 驟 S915)。如果指令iO是除了上述指令之外的指令(步驟S911),則將功能類(lèi)型確定為 “iO”(步驟S915)。注意,功能類(lèi)型“iO”是指示每個(gè)周期執(zhí)行單一指令的數(shù)據(jù)操作的功能類(lèi)型。圖19圖示了根據(jù)本發(fā)明的第一實(shí)施例的由執(zhí)行類(lèi)型確定單元520的第一配置執(zhí) 行的處理過(guò)程。首先,確定在微指令緩沖器Ml的頂部處的第一指令iO (501)的指令代碼(步驟 S921)。如果指令iO是RET指令,則將執(zhí)行類(lèi)型確定為“RET”(步驟S9M)。然而,如果指 令iO是JP指令,則將執(zhí)行類(lèi)型確定為“ Jp” (步驟S925)。當(dāng)指令iO是BR指令時(shí),如果從堆棧寄存器彈出的數(shù)據(jù)項(xiàng)(505)的LSB是“1”(步 驟S922),則將執(zhí)行類(lèi)型確定為“BR”(步驟S923)。然而,當(dāng)指令iO是BR指令時(shí),如果從堆棧寄存器彈出的數(shù)據(jù)項(xiàng)(505)的LSB是“0”(步驟S922),則將執(zhí)行類(lèi)型確定為“xl”(步驟 S926)。如果指令i0是除了上述指令之外的指令(步驟S921),則將執(zhí)行類(lèi)型確定為 “xl”(步驟S擬6)。如上所述,當(dāng)每個(gè)周期執(zhí)行單一指令時(shí),顯著簡(jiǎn)化了指令譯碼器。注意,步驟S923或S925是在權(quán)利要求書(shū)中限定的第一步驟的例子。另外,步驟 S926是在權(quán)利要求書(shū)中限定的第二步驟的例子。圖20圖示了根據(jù)本發(fā)明的第一實(shí)施例的微程序指令譯碼器500的配置的第二例 子。在微程序指令譯碼器500的配置的第二例子中,每個(gè)周期執(zhí)行最多三個(gè)指令。微程序 指令譯碼器500的配置的第二例子包括功能類(lèi)型確定單元510、執(zhí)行類(lèi)型確定單元520和運(yùn) 算單元530。在第二配置中,功能類(lèi)型確定單元510參考位于從微指令緩沖器Ml的頂部開(kāi)始 的三個(gè)指令iO至i2 (501至503)以及作為從頂部開(kāi)始的第九指令的指令i8 (504)。另外, 功能類(lèi)型確定單元510參考首先從堆棧寄存器彈出的數(shù)據(jù)項(xiàng)(505)、存儲(chǔ)在本地變量寄存 器#0中的數(shù)據(jù)項(xiàng)(507)以及運(yùn)算單元530的輸出。通過(guò)參考這些數(shù)據(jù)項(xiàng),功能類(lèi)型確定單 元510可以確定功能類(lèi)型519。另外,在配置的第二例子中,執(zhí)行類(lèi)型確定單元520參考作為從微指令緩沖器241 的頂部開(kāi)始的第二指令的第二指令il (502)、第三指令i2 (50 和第九指令i8 (504)。此 外,執(zhí)行類(lèi)型確定單元520參考首先從堆棧寄存器彈出的數(shù)據(jù)項(xiàng)(50 、存儲(chǔ)在本地變量寄 存器#0中的數(shù)據(jù)項(xiàng)(507)以及運(yùn)算單元530的輸出。通過(guò)參考這些數(shù)據(jù)項(xiàng),執(zhí)行類(lèi)型確定 單元520可以確定執(zhí)行類(lèi)型529。當(dāng)運(yùn)算單元530在一個(gè)周期中執(zhí)行GE、ORLU或BR時(shí),運(yùn)算單元530使用如下等式 來(lái)計(jì)算作為指示是否將發(fā)生分支的位的GE_ORLU W]GE_0RLU
= (STK1[15:0] >= STKO [15:0] ?1:0)(STK1[31:16] >= STKO[3116] ?1:0)GE_0RLU
用于確定下面描述的圖22和25所示的過(guò)程中的功能類(lèi)型和執(zhí)行類(lèi)型。圖21至23圖示了根據(jù)本發(fā)明的第一實(shí)施例的由功能類(lèi)型確定單元510的第二示 例配置執(zhí)行的處理過(guò)程。圖對(duì)和25圖示了根據(jù)本發(fā)明的第一實(shí)施例的由執(zhí)行類(lèi)型確定單 元520的第二配置執(zhí)行的處理過(guò)程。雖然在圖21至25中沒(méi)有提供詳細(xì)描述,但是可以看 到該配置的第二例子比該配置的第一例子復(fù)雜。在處理過(guò)程中,通過(guò)下劃線來(lái)指示執(zhí)行收攏的指令圖案。在譯碼的路徑中示出了 這樣的圖案。如在此使用的,術(shù)語(yǔ)“收攏”指多個(gè)指令的同時(shí)執(zhí)行。例如,在ADD_DIV2_RET 的情況下,按照該順序排列微指令A(yù)DD指令、DIV2指令和RET指令,并且在一個(gè)周期中同時(shí) 執(zhí)行這些指令。對(duì)于指令的每個(gè)組合,預(yù)先確定在一個(gè)周期中同時(shí)執(zhí)行哪些指令。當(dāng)在同時(shí)執(zhí)行了除了分支指令之外的多個(gè)微指令之后執(zhí)行RET指令時(shí),在執(zhí)行了 除了 RET指令之外的微指令之后完成微程序。當(dāng)在同時(shí)執(zhí)行了除了分支指令之外的多個(gè)微指令之后執(zhí)行BR指令時(shí),如果發(fā)生分支,則執(zhí)行指令直到緊挨在BR指令之前的指令。下一 指令是BR指令。然而,如果不發(fā)生分支,則還執(zhí)行BR指令。下一指令是緊跟在BR指令之 后的指令。當(dāng)在同時(shí)執(zhí)行了除了分支指令之外的多個(gè)微指令之后執(zhí)行JP指令時(shí),執(zhí)行指令 直到緊挨在JP指令之前的指令。下一指令是包括JP段的段的下一段的頂部處的指令。圖沈至43圖示了根據(jù)本發(fā)明的第一實(shí)施例的由微指令集合中的每個(gè)微指令執(zhí)行 的數(shù)據(jù)操作的例子。在圖26至43中,在上部示出了微指令的名稱(chēng)。另外,STKO至SK3分 別指示在執(zhí)行指令之前的堆棧寄寄存器421至424的值。LO至L2分別指示在執(zhí)行指令之 前的本地變量寄存器425至427的值。另外,nSTKO至nSTK3分別指示在執(zhí)行了指令之后 堆棧寄存器421至424的值。nLO至nL2分別指示在執(zhí)行了指令之后本地變量寄存器425 至427的值。圖44至M圖示了根據(jù)本發(fā)明的第一實(shí)施例的用于微指令集合的運(yùn)算單元的配置 的例子。每個(gè)運(yùn)算單元接收第一次從堆棧寄存器彈出的數(shù)據(jù)項(xiàng)(STKO)或第二次彈出的數(shù) 據(jù)項(xiàng)(STKl)。運(yùn)算操作與在圖10中所說(shuō)明的那些相同。因此,不重復(fù)其描述。圖55至57圖示了根據(jù)本發(fā)明的第一實(shí)施例的收攏的例子。圖55A圖示了 DUP_ST0的收攏的例子。鏈接并重寫(xiě)圖27所示的DUP指令和圖41 所示的ST0。另外,圖55B圖示了修改并優(yōu)化圖55A所示的例子使得數(shù)據(jù)操作更加簡(jiǎn)化的例 子。在DUP指令和STO指令之間,取消推入操作和彈出操作。因此,這樣的修改是可用的。 以這種方式,可以保留當(dāng)順序執(zhí)行指令時(shí)由于每次堆棧操作而消失的數(shù)據(jù)項(xiàng)。圖56圖示了 LD0_EQ_ST1的收攏的例子。圖57圖示了 LD0_EQ_SWAP的收攏的例 子。例如,在圖57A中,用STK2重寫(xiě)STK3。然而,在圖57B中,保持STK3。因此,可以得到 當(dāng)堆棧深度是5時(shí)與在執(zhí)行計(jì)算之后的堆棧狀態(tài)相同的堆棧狀態(tài)。通過(guò)這樣的優(yōu)化,當(dāng)執(zhí)行收攏時(shí),通過(guò)僅僅推入由最后一個(gè)指令執(zhí)行的計(jì)算的結(jié) 果,可以使得堆棧的深度看起來(lái)好像該深度大于實(shí)際深度。另外,如可以從圖55A和55B的比較、圖56A和56B的比較以及圖57A和57B的比 較中看到的,即使當(dāng)執(zhí)行收攏時(shí),數(shù)據(jù)操作也不一定變得復(fù)雜。如圖55A和55B所示的例 子,通過(guò)僅僅用STKO重寫(xiě)L0,操作變得比在執(zhí)行收攏之前的DUP或STO簡(jiǎn)單。這是堆棧機(jī) 的特點(diǎn)。微程序的例子圖58圖示了根據(jù)本發(fā)明的第一實(shí)施例的用于信息處理系統(tǒng)的微程序的列表的例 子。在微程序存儲(chǔ)器230中,將具有MPID “0”至“11”的12種微程序預(yù)存儲(chǔ)(prestore) 在微程序ROM 231中。另外,用戶可以將具有MPID “ 12”至“ 15”的4種微程序存儲(chǔ)在微程 序寄存器232至235中。圖58所示的微程序是可用于諸如MPEG2、VCl或H. 264之類(lèi)的視 頻編解碼器的實(shí)際程序的例子。NUL微程序(MPID = 0、1和11)是無(wú)需執(zhí)行數(shù)據(jù)操作而完成的微程序。當(dāng)執(zhí)行微 程序時(shí),需要將符合接口的自變量(argument)推入到堆棧寄存器上或?qū)⒆宰兞吭O(shè)置到本 地變量寄存器中。啟動(dòng)微程序執(zhí)行的更高層處理器100的指令可以一次僅僅將數(shù)據(jù)項(xiàng)傳輸 到通用寄存器RT和RS中。為了傳輸三個(gè)或更多的數(shù)據(jù)項(xiàng),需要推入數(shù)據(jù)項(xiàng)。因此,提供僅 僅執(zhí)行推入操作的宏指令,使得可以在執(zhí)行之前設(shè)置三個(gè)或更多的自變量。為了使用啟動(dòng) 微程序的執(zhí)行的更高層處理器100的指令的機(jī)制來(lái)實(shí)現(xiàn)推入專(zhuān)用指令,使用NULL微程序。
21也就是,通過(guò)將MPID設(shè)置為“0”或“1”并使用NULL微程序,可以使用僅僅執(zhí)行數(shù)據(jù)設(shè)置的 宏指令。MEAN微程序(MPID = 2)是計(jì)算某種類(lèi)型的兩個(gè)運(yùn)動(dòng)向量的分量的平均值的微程 序。MEDIAN2微程序(MPID = 3)是計(jì)算某種類(lèi)型的三個(gè)運(yùn)動(dòng)向量的分量的中間值的微程 序。MEDIAN4微程序(MPID = 4)是計(jì)算四個(gè)某類(lèi)型運(yùn)動(dòng)向量的分量的中間值的微程序。MEDCND微程序(MPID = 5)是對(duì)MED3微程序(MPID = 6)執(zhí)行預(yù)處理的微程序。 在預(yù)處理中,確定是否滿足例外處理的條件。MED3微程序是根據(jù)從MEDCND微程序輸出的結(jié) 果來(lái)計(jì)算某種類(lèi)型的三個(gè)運(yùn)動(dòng)向量的分量的中間值的微程序。SMOD微程序(MPID = 7)是按照如下執(zhí)行帶符號(hào)的取模(modulus)計(jì)算的微程序SMOD (A,b) = ((A+b)&Ob_l))-b DBMD_FRM微程序(MPID = 8)是執(zhí)行與H. 264幀處理的解塊(deblocking)模式有 關(guān)的計(jì)算的微程序。DBMD_FLD微程序(MPID = 9)是執(zhí)行與H. 264場(chǎng)(field)處理的解塊 模式有關(guān)的計(jì)算的微程序。DBIDX微程序(MPID = 10)是執(zhí)行與H. 264解塊濾波器的參數(shù) 表格有關(guān)的索引計(jì)算的微程序。圖59至68圖示了根據(jù)本發(fā)明的第一實(shí)施例的圖58所示的每個(gè)微程序的分支路 徑。在圖59至68中的每張圖中,在左側(cè)部分示出了微程序的細(xì)節(jié),并在右側(cè)部分示出了微 程序的分支路徑。執(zhí)行類(lèi)型被附接到分支路徑的每個(gè)分支。另外,在上部示出了工作寄存 器的狀態(tài)。在“= > ”的左側(cè)示出了在執(zhí)行微程序之前的狀態(tài),并在“= >,,的右側(cè)示出了 執(zhí)行微程序之后的狀態(tài)。在每個(gè)堆棧狀態(tài)中,堆棧頂部位于右側(cè)。另外,在括號(hào)中示出了在 本地變量寄存器中設(shè)置的值??梢詮脑摾涌吹剑词箤?duì)于實(shí)際微程序,最多三個(gè)指令的收攏也是可用的。通過(guò) 壓縮指令,可以執(zhí)行有效的處理。圖69圖示了根據(jù)本發(fā)明的第一實(shí)施例的使用JP指令的第一范例的分支路徑。在 第一范例中,作為無(wú)條件分支指令的JP指令是有必要的。分支路徑是固定的。因此,即使 當(dāng)在mi5、mi6和mi7中不存在將被處理的指令時(shí),仍需要執(zhí)行微程序。在這樣的情況下,通 過(guò)使用JP指令將控制分支到下一段,使得周期的數(shù)量最小化。圖70圖示了根據(jù)本發(fā)明的第一實(shí)施例的使用JP指令的第二范例的分支路徑。在 第二范例中,微程序不包括JP指令。當(dāng)不使用JP指令時(shí),可以安排三個(gè)NOP指令來(lái)調(diào)整。 然而,為了執(zhí)行收攏,希望分配運(yùn)算指令而不使用NOP指令。因此,因?yàn)橥ㄟ^(guò)執(zhí)行ROT指令三 次來(lái)恢復(fù)數(shù)據(jù),所以在該例子中消除了 NOP指令的使用。注意,在兩個(gè)NOP指令的情況下, 可以執(zhí)行SWAP指令兩次。對(duì)更高層處理器的接口圖71圖示了根據(jù)本發(fā)明的第一實(shí)施例的更高層處理器100的協(xié)處理器指令的列 表的例子。記憶符號(hào)的前綴“cop_”指示該指令是協(xié)處理器指令。cop_setprg0和cop_setprgl是用于重寫(xiě)微程序寄存器232至235的指令。cop_ push和COp_pUSh2是用于將存儲(chǔ)在通用寄存器中的數(shù)據(jù)推入堆棧寄存器421至4 中的指 令。在其記憶符號(hào)中包括“invoke(調(diào)用)”的其他指令是用于指示微指令處理協(xié)處理 器200執(zhí)行微程序的指令。因?yàn)橛糜诠ぷ骷拇嫫?42的設(shè)計(jì)方法彼此不同,所以提供多種類(lèi)型的指令。cop_invoke指令是用于指示微指令處理協(xié)處理器200執(zhí)行與在指令中指定的 號(hào)MPID相應(yīng)的微程序的指令。c0p_r0t4push_inv0ke指令是用于將更高層處理器100的寄 存器的值推入到堆棧上、在堆棧中檢索最老數(shù)據(jù)、將所檢索的最老數(shù)據(jù)推入堆棧的頂部、并 指示微指令處理協(xié)處理器200執(zhí)行與號(hào)MPID相應(yīng)的微程序的指令。copjnvokej指令是 用于使用更高層處理器100的寄存器的值來(lái)確定號(hào)MPID、并指示微指令處理協(xié)處理器200 執(zhí)行與該號(hào)MPID相應(yīng)的微程序的指令。COp_inVOke_C指令是用于彈出堆棧頂部處的值、使 用所彈出的值確定將被執(zhí)行的微程序的號(hào)MPID、并指示微指令處理協(xié)處理器200執(zhí)行與該 號(hào)MPID相應(yīng)的微程序的指令。圖72A和72B圖示了根據(jù)本發(fā)明的第一實(shí)施例的更高層處理器100的指令格式的 例子。圖72A圖示了基本指令格式?;局噶罡袷骄哂邪ú僮鞔a(OPC)、讀操作數(shù)(RS和 RT)、功能(FUNC)、寫(xiě)操作數(shù)(RD)和中間值(IMM5)的32位字段結(jié)構(gòu)。圖72B圖示了協(xié)處理器指令的指令格式。操作碼字段指示協(xié)處理器指令(COP)。 功能字段指示協(xié)處理器指令的類(lèi)型(C0P_FUNC)。另外,中間值字段可以指示微程序號(hào) (MPID)。圖73A至73E圖示了根據(jù)本發(fā)明的第一實(shí)施例的用于由更高層處理器100指示微 程序的執(zhí)行的指令群。圖73A圖示了用于執(zhí)行MEDCND微程序和MED3微程序的協(xié)處理器指令。通過(guò)使用 cop_push2指令和cop_ldOpush_invoke指令,執(zhí)行MEDCND微程序。另外,通過(guò)使用cop_ push2指令和cop_rot4push_invoke指令,執(zhí)行MED3微程序。在該例子中,由MEDCND進(jìn)行 條件確定,并將結(jié)果存儲(chǔ)在微指令處理協(xié)處理器200的工作寄存器242中。之后,將新的自 變量推入工作寄存器M2,并執(zhí)行用于選擇三個(gè)值的中間值的中間過(guò)程。因?yàn)橥迫肓诵碌淖?變量,所以使用C0p_r0t4pUSh_inV0ke指令來(lái)在開(kāi)始執(zhí)行之前將MEDCND的執(zhí)行結(jié)果偏移到 堆棧的頂部。圖7 圖示了用于執(zhí)行MEAN2的協(xié)處理器指令。圖73C圖示了用于執(zhí)行MEDIAN3 的協(xié)處理器指令。圖73D圖示了用于執(zhí)行MEDIAN4的協(xié)處理器指令。圖73E圖示了用于使用rs_MPID的值在NULL、MEAN2、MEDIAN3和MEDIAN4之間切 換并執(zhí)行所切換的那一個(gè)的協(xié)處理器指令。c0p_inV0ke_i^g令用于切換。當(dāng)如圖58所示 分配微程序時(shí),如果rs_MPID指示特定值“0”或“ 1 ”,則執(zhí)行NULL微程序。因此,寫(xiě)回堆棧 的頂部處的值。如果rs_MPID指示特定值“2”,則寫(xiě)回MEAN2的執(zhí)行結(jié)果。如果rs_MPID指 示特定值“3”,則寫(xiě)回MEDIAN3的執(zhí)行結(jié)果。如果rs_MPID指示特定值“4”,則寫(xiě)回MEDIAN4 的執(zhí)行結(jié)果。通常,當(dāng)由更高層處理器100執(zhí)行這樣的切換時(shí),復(fù)雜的分支處理是必要的。 然而,在該例子中,僅僅四個(gè)指令實(shí)現(xiàn)了分支處理。注意,當(dāng)使用作為緊挨在之前的微程序 的執(zhí)行結(jié)果的STKO來(lái)進(jìn)行相同MPID確定時(shí),可以使用copjnvokej指令。如上所述,根據(jù)本發(fā)明的第一實(shí)施例,通過(guò)限制諸如JP指令、BR指令和RET指令 之類(lèi)的分支指令的分支目的地,可以增加指令壓縮效率。另外,促進(jìn)預(yù)取操作。此外,可以 防止死鎖。2.第二實(shí)施例在第一實(shí)施例中,微程序執(zhí)行單元240被配置為堆棧機(jī)。然而,微程序執(zhí)行單元 MO的配置不限于此。在如下第二實(shí)施例中,微程序執(zhí)行單元240被配置為隊(duì)列機(jī)。注意,信息處理系統(tǒng)的基本配置與第一實(shí)施例的相同。因此,不重復(fù)基本配置的詳細(xì)描述。隊(duì)列機(jī)的基本概念圖74A和74B圖示了根據(jù)本發(fā)明的第二實(shí)施例的存儲(chǔ)在工作寄存器242中的隊(duì)列 寄存器的配置的例子。隊(duì)列機(jī)使用FIFO隊(duì)列來(lái)利用隊(duì)列寄存器。在該例子中,使用包括四 個(gè)隊(duì)列寄存器431至434的FIFO隊(duì)列。注意,隊(duì)列寄存器431至434是在權(quán)利要求書(shū)中限 定的隊(duì)列的例子。在堆棧機(jī)中,從堆棧的頂部彈出數(shù)據(jù),并執(zhí)行計(jì)算。在這之后,將計(jì)算的結(jié)果推入 堆棧的頂部上。相反,在隊(duì)列機(jī)中,從隊(duì)列的頭部輸出數(shù)據(jù),并執(zhí)行計(jì)算。在這之后,將計(jì)算 的結(jié)果輸入到隊(duì)列的尾部。以這種方式,執(zhí)行處理。為了實(shí)現(xiàn)用作微程序執(zhí)行單元MO的 工作寄存器M2的隊(duì)列,將隊(duì)列的頭部固定為隊(duì)列寄存器431,并將隊(duì)列的長(zhǎng)度存儲(chǔ)在隊(duì)列 長(zhǎng)度寄存器435中。因此,實(shí)現(xiàn)隊(duì)列機(jī)的功能。因此,通過(guò)使用工作寄存器M2中的隊(duì)列寄 存器431至434,可以實(shí)現(xiàn)與第一實(shí)施例相同的功能。也就是,根據(jù)本發(fā)明的第二實(shí)施例,通過(guò)將隊(duì)列機(jī)用作微程序執(zhí)行單元MO的配 置,可以提供與第一實(shí)施例相同的優(yōu)點(diǎn)。特別地,因?yàn)楦鶕?jù)隊(duì)列的深度來(lái)優(yōu)化隊(duì)列機(jī),所 以隊(duì)列機(jī)具有如下優(yōu)點(diǎn)隨著隊(duì)列的深度增大,可以更容易地提取出微指令層并行處理 (parallelism)。因此,隊(duì)列機(jī)更適合于諸如SIMD之類(lèi)的并行計(jì)算。3.修改雖然參考利用堆棧機(jī)或隊(duì)列機(jī)來(lái)處理微指令的應(yīng)用描述了本發(fā)明的實(shí)施例,但是 該技術(shù)不試圖限制微程序的這樣的應(yīng)用。例如,本發(fā)明可應(yīng)用到普通指令集合。另外,雖然參考在協(xié)處理器的執(zhí)行單元中利用堆棧機(jī)或隊(duì)列機(jī)的應(yīng)用描述了本發(fā) 明的實(shí)施例,但是該技術(shù)不試圖限于協(xié)處理器。例如,本發(fā)明可應(yīng)用到普通處理器。所描述的本發(fā)明的實(shí)施例在所有方面僅僅被視為是說(shuō)明性的而不是限制性的。如 在本發(fā)明的實(shí)施例中提請(qǐng)注意的,本發(fā)明實(shí)施例中的每個(gè)元件具有與權(quán)利要求中描述的本 發(fā)明的某特征的相應(yīng)性。類(lèi)似地,在權(quán)利要求中描述的本發(fā)明的某特征具有與具有相同名 稱(chēng)的本發(fā)明實(shí)施例中的元件的相應(yīng)性。然而,本發(fā)明不限于實(shí)施例,并且可以進(jìn)行各種修改 而不脫離本發(fā)明的范圍。此外,在本發(fā)明的實(shí)施例中描述的處理過(guò)程可以被視為包括處理過(guò)程的一系列步 驟的方法,可以被視為導(dǎo)致計(jì)算機(jī)執(zhí)行處理過(guò)程的一系列步驟的程序,或者可以被視為存 儲(chǔ)程序的記錄介質(zhì)。記錄介質(zhì)的例子包括壓縮盤(pán)(CD)、迷你盤(pán)(MD)、數(shù)字多功能盤(pán)(DVD)、 存儲(chǔ)卡、藍(lán)光盤(pán)(注冊(cè)商標(biāo)名稱(chēng))。本申請(qǐng)包括與2009年12月28日提交給日本專(zhuān)利局的日本優(yōu)先權(quán)專(zhuān)利申請(qǐng)JP 2009-297764中公開(kāi)的主題相關(guān)的主題,通過(guò)參考將其全部?jī)?nèi)容組合于此。本領(lǐng)域技術(shù)人員應(yīng)該理解的是,取決于設(shè)計(jì)要求和其他因素,可以發(fā)生各種修改、 組合、子組合和替代,只有它們?cè)谒綑?quán)利要求或其等價(jià)物的范圍內(nèi)即可。
權(quán)利要求
1.一種處理器,包括指令緩沖器,用于將由不具有操作數(shù)的多個(gè)指令形成的指令序列分離為多個(gè)段,并存 儲(chǔ)這些段;數(shù)據(jù)保存單元,用于保存將通過(guò)使用所述多個(gè)指令處理的數(shù)據(jù);譯碼器,用于參考保存在所述數(shù)據(jù)保存單元中的數(shù)據(jù),并逐個(gè)從位于指令序列的頂部 處的指令順序地譯碼這些指令中的至少一個(gè);指令執(zhí)行單元,用于根據(jù)由所述譯碼器執(zhí)行的譯碼的結(jié)果,執(zhí)行指令;以及指令序列更新控制單元,用于根據(jù)由所述譯碼器執(zhí)行的譯碼的結(jié)果,控制指令序列的更新;其中當(dāng)所譯碼的頂部指令是分支指令時(shí),如果發(fā)生分支,則所述指令序列更新控制單 元更新指令序列,使得這些段中的任何一個(gè)的頂部指令變得位于指令序列的頂部處,以及 如果不發(fā)生分支,則所述指令序列更新控制單元更新指令序列,使得緊跟在所述分支指令 之后的下一個(gè)指令變得位于指令序列的頂部處。
2.根據(jù)權(quán)利要求1所述的處理器,其中將所述分支指令的分支目的地限制到在包括所 述分支指令的段之前的段的頂部處的指令。
3.根據(jù)權(quán)利要求2所述的處理器,其中所述譯碼器譯碼與用于執(zhí)行指令的功能有關(guān)的 功能類(lèi)型和與執(zhí)行該指令之后更新指令序列有關(guān)的執(zhí)行類(lèi)型,以及其中所述指令執(zhí)行單元 根據(jù)所述功能類(lèi)型執(zhí)行該指令,以及其中所述指令序列更新控制單元根據(jù)所述執(zhí)行類(lèi)型控 制指令序列的更新。
4.根據(jù)權(quán)利要求3所述的處理器,其中所述譯碼器參考保存在所述數(shù)據(jù)保存單元中的 數(shù)據(jù),并從位于指令序列的頂部處的指令開(kāi)始順序地譯碼多個(gè)指令,以及其中所述指令執(zhí) 行單元同時(shí)執(zhí)行與根據(jù)所述功能類(lèi)型確定的數(shù)量相等的多個(gè)指令,以及其中所述指令序列 更新控制單元控制指令序列的更新,使得從所述指令緩沖器輸出與根據(jù)所述執(zhí)行類(lèi)型確定 的數(shù)量相等的多個(gè)指令。
5.根據(jù)權(quán)利要求4所述的處理器,其中所述指令序列更新控制單元具有逐個(gè)偏移多個(gè) 段中僅僅頂部段的指令的功能,并保存指示在所述頂部段中包含的每個(gè)指令是否僅僅被保 存在所述頂部段中的狀態(tài)標(biāo)簽。
6.根據(jù)權(quán)利要求2所述的處理器,其中存儲(chǔ)在所述數(shù)據(jù)保存單元中的數(shù)據(jù)包括堆棧, 以及其中當(dāng)完成指令序列的執(zhí)行時(shí),輸出保存在所述堆棧的頂部處的數(shù)據(jù)項(xiàng)。
7.根據(jù)權(quán)利要求6所述的處理器,其中所述堆棧具有預(yù)定數(shù)量的級(jí),以及如果向所述 堆棧輸入超過(guò)所述預(yù)定數(shù)量的級(jí)的多個(gè)數(shù)據(jù)項(xiàng),則從在所述堆棧的底部處保存的數(shù)據(jù)項(xiàng)開(kāi) 始,數(shù)據(jù)項(xiàng)消失。
8.根據(jù)權(quán)利要求6所述的處理器,還包括數(shù)據(jù)格式指定單元,用于指定當(dāng)完成指令序列的執(zhí)行時(shí)輸出的數(shù)據(jù)項(xiàng)的格式。
9.根據(jù)權(quán)利要求2所述的處理器,其中保存在所述數(shù)據(jù)保存單元中的數(shù)據(jù)包括隊(duì)列, 以及其中當(dāng)完成指令序列的執(zhí)行時(shí),輸出在所述隊(duì)列的尾部處保存的數(shù)據(jù)項(xiàng)。
10.根據(jù)權(quán)利要求9所述的處理器,還包括數(shù)據(jù)格式指定單元,用于指定當(dāng)完成指令序列的執(zhí)行時(shí)輸出的數(shù)據(jù)項(xiàng)的格式。
11.一種協(xié)處理器,包括指令緩沖器,用于從更高層處理器接收由不具有操作數(shù)的多個(gè)指令形成的指令序列,將這些指令分離為多個(gè)段,并存儲(chǔ)這些段;數(shù)據(jù)保存單元,用于保存將通過(guò)使用所述多個(gè)指令處理的數(shù)據(jù); 譯碼器,用于參考保存在所述數(shù)據(jù)保存單元中的數(shù)據(jù),并逐個(gè)從位于指令序列的頂部 處的指令順序地譯碼這些指令中的至少一個(gè);指令執(zhí)行單元,用于根據(jù)由所述譯碼器執(zhí)行的譯碼的結(jié)果,執(zhí)行指令; 指令序列更新控制單元,用于根據(jù)由所述譯碼器執(zhí)行的譯碼的結(jié)果,控制指令序列的 更新;以及輸出單元,用于當(dāng)完成指令序列的執(zhí)行時(shí),輸出保存在所述數(shù)據(jù)保存單元中的數(shù)據(jù); 其中當(dāng)所譯碼的頂部指令是分支指令時(shí),如果發(fā)生分支,則所述指令序列更新控制單 元更新指令序列,使得這些段中的任何一個(gè)的頂部指令變得位于指令序列的頂部處,以及 如果不發(fā)生分支,則所述指令序列更新控制單元更新指令序列,使得緊跟在所述分支指令 之后的下一個(gè)指令變得位于指令序列的頂部處。
12.一種信息處理系統(tǒng),包括 更高層處理器;以及協(xié)處理器;其中所述更高層處理器向所述協(xié)處理器輸出由不具有操作數(shù)的多個(gè)指令形成的指令 序列,以及所述協(xié)處理器從所述更高層處理器接收所述指令序列,并當(dāng)完成指令序列的執(zhí) 行時(shí),向所述更高層處理器輸出指令序列的執(zhí)行的結(jié)果,以及其中所述協(xié)處理器包括指令 緩沖器,用于從所述更高層處理器接收由不具有操作數(shù)的多個(gè)指令形成的指令序列,將這 些指令分離為多個(gè)段,并存儲(chǔ)這些段;數(shù)據(jù)保存單元,用于保存將通過(guò)使用所述多個(gè)指令處 理的數(shù)據(jù);譯碼器,用于參考保存在所述數(shù)據(jù)保存單元中的數(shù)據(jù),并從位于指令序列的頂部 處的指令順序地譯碼這些指令中的至少一個(gè);指令執(zhí)行單元,用于根據(jù)由所述譯碼器執(zhí)行 的譯碼的結(jié)果,執(zhí)行指令;指令序列更新控制單元,用于根據(jù)由所述譯碼器執(zhí)行的譯碼的結(jié) 果,控制指令序列的更新;以及輸出單元,用于當(dāng)完成指令序列的執(zhí)行時(shí),輸出保存在所述 數(shù)據(jù)保存單元中的數(shù)據(jù);以及其中當(dāng)所譯碼的頂部指令是分支指令時(shí),如果發(fā)生分支,則所 述指令序列更新控制單元更新指令序列,使得這些段中的任何一個(gè)的頂部指令變得位于指 令序列的頂部處,以及如果不發(fā)生分支,則所述指令序列更新控制單元更新指令序列,使得 緊跟在所述分支指令之后的下一個(gè)指令變得位于指令序列的頂部處。
13.—種在處理器中使用的指令序列更新控制方法,所述處理器包括指令緩沖器,用 于將由不具有操作數(shù)的多個(gè)指令形成的指令序列分離為多個(gè)段,并存儲(chǔ)這些段;數(shù)據(jù)保存 單元,用于保存將通過(guò)使用所述多個(gè)指令處理的數(shù)據(jù);譯碼器,用于參考保存在所述數(shù)據(jù)保 存單元中的數(shù)據(jù),并從位于指令序列的頂部處的指令順序地譯碼這些指令中的至少一個(gè); 指令執(zhí)行單元,用于根據(jù)由所述譯碼器執(zhí)行的譯碼的結(jié)果,執(zhí)行指令;以及指令序列更新控 制單元,用于根據(jù)由所述譯碼器執(zhí)行的譯碼的結(jié)果,控制指令序列的更新,所述方法包括第一步驟當(dāng)所譯碼的頂部指令是分支指令時(shí),如果發(fā)生分支,則更新指令序列,使得 這些段中的任何一個(gè)的頂部指令變得位于指令序列的頂部處;以及第二步驟如果不發(fā)生分支,則更新指令序列,使得緊跟在所述分支指令之后的下一個(gè) 指令變得位于指令序列的頂部處。
全文摘要
一種處理器包括緩沖器,用于將不具有操作數(shù)的指令序列分離為多個(gè)段,并存儲(chǔ)這些段;數(shù)據(jù)保存器,用于保存將被處理的數(shù)據(jù);譯碼器,用于參考所述數(shù)據(jù),并從序列的頂部順序地譯碼這些指令中的至少一個(gè);指令執(zhí)行單元,用于執(zhí)行指令;以及指令序列控制單元,用于根據(jù)譯碼結(jié)果來(lái)控制指令序列的更新。當(dāng)所譯碼的頂部指令是分支指令時(shí),如果發(fā)生分支,則指令序列控制單元更新序列,使得段之一的頂部指令位于序列的頂部處。如果不發(fā)生分支,則指令序列控制單元更新序列,使得緊跟在分支指令之后的下一個(gè)指令位于序列的頂部處。
文檔編號(hào)G06F9/38GK102109979SQ20101059824
公開(kāi)日2011年6月29日 申請(qǐng)日期2010年12月21日 優(yōu)先權(quán)日2009年12月28日
發(fā)明者坂口浩章 申請(qǐng)人:索尼公司
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
泰宁县| 吴旗县| 濮阳市| 区。| 定远县| 朝阳县| 汤原县| 台南市| 富阳市| 平乐县| 十堰市| 绥阳县| 堆龙德庆县| 深圳市| 黄平县| 大英县| 元氏县| 永昌县| 永城市| 舒兰市| 邢台市| 定安县| 曲靖市| 溧阳市| 元谋县| 资溪县| 慈利县| 沽源县| 辽阳县| 新民市| 大安市| 锡林浩特市| 南江县| 视频| 成武县| 绥化市| 宿迁市| 洛阳市| 卫辉市| 乐平市| 玉山县|