專利名稱:安排處理器中的暫存器以模擬部分堆疊的裝置及方法
技術(shù)領(lǐng)域:
本發(fā)明有關(guān)于一種處理器相關(guān)的裝置和方法,特別是關(guān)于一種于處理器中安排暫存器以模擬(emulate)一部分堆疊性能的裝置及方法。
背景技術(shù):
處理器(例如微處理器)為眾所皆知且廣泛應(yīng)用在各式各樣的產(chǎn)品上,從桌上型計算機(jī)到可攜式電子產(chǎn)品,例如手機(jī)及個人數(shù)字助理(PDA)等,皆微處理器的應(yīng)用范疇。如同所知,有些處理器其功能非常強(qiáng)大(例如尖端計算機(jī)工作站的處理器),而其它基本、較為便宜的應(yīng)用及產(chǎn)品,其處理器則有較為簡單的設(shè)計。
與平臺無關(guān)的程序語言(platform-independent programminglanguages),例如升陽計算機(jī)(Sun Microsystem Inc.)的Java程序語言,和傳統(tǒng)的平臺特定語言(platform-specific languages)比較起來,其提供了不同的結(jié)構(gòu)及不同的操作特性。與平臺無關(guān)的程序語言其基本上使用的與平臺無關(guān)的程序代碼(如機(jī)器可讀的指令,machine-readableinstructions),此程序代碼適合執(zhí)行于多種硬件平臺(multiple hardwareplatforms),且與硬件平臺的相關(guān)特定指令集(particular instruction set)無關(guān)。硬件平臺通常包含具有一或多個處理器(例如微處理器或為控制器)的計算機(jī)系統(tǒng),用以執(zhí)行具有特定型式的特定指令集(particularinstruction set),此特定指令集有時亦稱做原生指令集(native instructionset)。平臺特定語言須使用一特定的平臺編譯器(compiler)以產(chǎn)生對應(yīng)于一特定硬件平臺的原生(native)程序代碼。然而在一些應(yīng)用例中,相同的原始碼(source code)通常須透過不同的特定平臺編譯器,以編譯成適合多種不同平臺的程序代碼,換句話說此種編譯后的程序代碼并非為與平臺無關(guān)(platform-independent)的程序代碼。
指令集中的一類包含了那些使用以堆疊式為基礎(chǔ)的方法(stack-based approach)來儲存及處理其所執(zhí)行的數(shù)據(jù)項(date items)的指令集。支持這樣堆疊式指令集(stack-based instruction set)的數(shù)據(jù)處理系統(tǒng)其內(nèi)的堆疊,可能儲存一序列的數(shù)據(jù)項,例如運(yùn)算值(operand values),而這一序列的數(shù)據(jù)項以一特定次序被存放于堆疊中,然后再以該次序的反向從堆疊中移出。因此,最后被存放置堆疊中的數(shù)據(jù)項通常也會是第一個從堆疊中移出的數(shù)據(jù)項。以堆疊為基礎(chǔ)的處理器(stack-basedprocessor)可提供一包含復(fù)數(shù)個可尋址(addressable)的堆疊入口(stackentries)的堆疊,其中,數(shù)據(jù)項將通過搭配一顯示目前堆疊頂端位置的堆疊指標(biāo)(stack-pointer),寫入堆疊入口或從堆疊入口讀出。堆疊指標(biāo)將指明堆疊存儲器中之一參考點,該參考點標(biāo)示了最后存入堆疊的數(shù)據(jù)項,而堆疊的其它存取操作即可由此參考點位置做為操作參考基礎(chǔ)。
堆疊式指令集(stack-based set)之一例子為由升陽計算機(jī)所提出的Java虛擬機(jī)器指令集(Java Virtual Machine instruction set)。Java程序語言試圖提供一個環(huán)境,使得以Java寫成的計算機(jī)軟件能在許多不同的處理硬件平臺上執(zhí)行,而不需要針對不同的處理硬件平臺改變Java軟件。
另一類指令集包含那些使用以暫存器為基礎(chǔ)的方法(register-basedapproach)來儲存及處理其所執(zhí)行的數(shù)據(jù)項的指令集。使用這種指令集的暫存器式系統(tǒng)(register-based systems)的一例子為由英國安謀所出產(chǎn)的(ARM Limited of Cambridge,England)ARM處理器。ARM的指令將基于儲存于指令內(nèi)的暫存器字段(register fields)所指定的處理器的暫存器的操作數(shù),執(zhí)行操作(例如數(shù)學(xué)處理、負(fù)載操作、儲存操作等)。
如同所知,某些設(shè)計用來執(zhí)行暫存器式指令(register-basedinstructions)的數(shù)據(jù)處理系統(tǒng),亦支持堆疊式指令(stack-basedinstructions)的執(zhí)行。在這樣的系統(tǒng)中,堆疊式指令將通過暫存器排組(register bank)或暫存器集(register set)內(nèi)的暫存器,轉(zhuǎn)換成一序列可供處理器核心(processor core)執(zhí)行的操作。那些操作所需的堆疊中的數(shù)據(jù)項從堆疊儲存到暫存器排組的暫存器中,使其可被處理器核心所使用。一般而言,暫存器排組中的一組暫存器將被用來分配儲存來自堆疊之一部份的堆疊數(shù)據(jù)項(在此亦稱堆疊操作數(shù))。暫存器集中不同的暫存器,從堆疊之一部份子堆疊中不同的位置,儲存各自相對的堆疊操作數(shù),此動作產(chǎn)生了復(fù)數(shù)個不同的對應(yīng)狀態(tài)(mappingstates)。這些對應(yīng)狀態(tài)將依據(jù)增加或移除暫存器集中的堆疊操作數(shù)的操作而有所改變,藉此,提供一個類似于堆疊內(nèi)的堆疊指標(biāo)的功能。這樣的方法試圖降低于暫存器式處理器的暫存器內(nèi)提供堆疊式儲存(stack-like storage)時所需要處理的功夫。
在這樣的系統(tǒng)中,堆疊中的堆疊入口可以視為具有固定的大小,且每一暫存器集之中用來儲存堆疊操作數(shù)的暫存器,可被安排只儲存其所對應(yīng)之一堆疊入口的數(shù)據(jù)。然而,此可用來儲存堆疊操作數(shù)的處理器核心的暫存器,將因其尚須提供出其它暫存器以得到相關(guān)所需功能而受到限制,這些相關(guān)所需功能包括,例如安排堆疊式指令的解碼,使其成為可在暫存器式處理器執(zhí)行的操作,以及例如,為模擬其它控制值,如常見于堆疊式處理系統(tǒng)中的變量指標(biāo)(variables pointer)或常數(shù)群(constant pool)指標(biāo)等。這表示處理器內(nèi)暫存器可供使用的數(shù)量有限,故儲存于暫存器集中的堆疊操作數(shù),可能需要被移回當(dāng)初的堆疊,以提供空間給新的堆疊操作數(shù)放置于暫存器集中。
如同所知,使用處理器的暫存器來實現(xiàn)模擬一部份的存儲器堆疊(memory stack)的做法,將較傳統(tǒng)只采用存儲器堆疊達(dá)到更佳的效率成果;此由于,數(shù)據(jù)于處理器的暫存器間的移動將較于暫存器與存儲器間的移動來得快。然而,至今已知的實施或應(yīng)用中通常將導(dǎo)致大量的暫存器間的傳送(register-to-register transfer)操作。有鑒于此,亟需提供于暫存式處理器中模擬堆疊式操作的裝置架構(gòu)與方法,以達(dá)到減少暫存器間的傳送操作,進(jìn)而進(jìn)一步提升效率。
發(fā)明內(nèi)容
本發(fā)明特定的目的、優(yōu)點、及新的特色部分將于說明書中陳述,通過對以下說明的檢視或由發(fā)明的實施學(xué)習(xí),本發(fā)明的相關(guān)部分對于本領(lǐng)域的專業(yè)技術(shù)人員將顯而易見。本發(fā)明的目的及優(yōu)點將通過附錄的權(quán)利要求范圍所指出的方法及組合而得。
為達(dá)到特定的優(yōu)點及新的特色,本發(fā)明有別于傳統(tǒng)提出一種于一處理器中模擬一部分堆疊的方法及裝置。本發(fā)明的特定實施例提出了通過安排復(fù)數(shù)個處理器的暫存器來儲存堆疊的頂端部位的裝置和方法。其中,堆疊相關(guān)數(shù)據(jù)項將通過安排一指定目前的堆疊頂端暫存器的指標(biāo),以被安排至這些復(fù)數(shù)個暫存器中。當(dāng)數(shù)據(jù)項由堆疊被推入或推出時,堆疊頂端指標(biāo)亦將因而遞增或遞減。
圖1A為說明傳統(tǒng)技術(shù)的處理器管線內(nèi)的某些特定處理階層的方塊圖;圖1B顯示已知技術(shù)中用以模擬一堆疊存儲器中之一部份的暫存器的方塊圖;圖2為一類似于圖1B的方塊圖,用以顯示本發(fā)明一實施例與圖1B的操作的差異;圖3顯示本發(fā)明一實施例所使用的特定產(chǎn)品的組成方塊圖;圖4顯示根據(jù)本發(fā)明一實施例所建構(gòu)之一處理器管線的內(nèi)部產(chǎn)品的方塊圖,其中內(nèi)部產(chǎn)品包含有其相關(guān)的邏輯電路單元;
圖5為一類似于圖4的方塊圖,用以顯示本發(fā)明之一另一實施例的特征;圖6根據(jù)本發(fā)明一實施例的高階層功能性操作(top-level functionaloperation)的流程圖;圖7根據(jù)本發(fā)明另一實施例的高階層功能性操作的流程圖;及圖8根據(jù)本發(fā)明再一實施例的高階層功能性操作的流程圖。
圖中符號說明R0-R7暫存器110 指令擷取單元120 解碼單元130 執(zhí)行單元132 中斷訊號產(chǎn)生邏輯電路134 中斷訊號136 分支訊號產(chǎn)生邏輯電路138 分支/返回訊號140 存儲器存取單元150 暫存器寫回單元160 暫存器檔案162 暫存器166 PUSH指令167 ADD指令168 STR指令169 LDR指令201 模擬堆疊的復(fù)數(shù)個暫存器202 第一時序列204 第二時序列205 堆疊頂端指標(biāo)206 第三時序列207 PUSH指令
208 ADD指令209 LDR指令215 堆疊頂端指標(biāo)值控制邏輯電路217 其它的暫存器220 存儲器225 將數(shù)據(jù)由暫存器移入/移出的控制邏輯電路230 擷取階層231 編解碼232 解碼階層234 暫存器存取階層236 執(zhí)行階層240 由堆疊推入或推出的控制邏輯電路250 決定是否激活轉(zhuǎn)移的控制邏輯電路260 來自分支預(yù)測失敗的回饋265 監(jiān)督堆疊指標(biāo)執(zhí)行狀況的邏輯電路302~332 為流程方塊圖具體實施方法前述已就本發(fā)明各不同方面做概括性的描述,本發(fā)明的詳細(xì)描述將參考其所附的圖標(biāo)進(jìn)行的。本發(fā)明將配合圖標(biāo)做相關(guān)的描述,而此意不在對在公開的實施例做限制。相反的,本發(fā)明的精神及范疇所包含的相關(guān)改變、修正、及等價的事物為本文專利申請范圍的定義所涵蓋。
要注意的是下列附圖用以舉例說明本發(fā)明的實施例的特征及概觀。由說明書應(yīng)了解到各種替換或相關(guān)的實施例可以以本發(fā)明一致的精神與范疇來完成。
參閱圖1A,其顯示一用以執(zhí)行相關(guān)指令的5階層管線處理器(fivestage pipeline processor)架構(gòu)的方塊圖。其它具有較多或較少管線階層及/或不同的配置的管線架構(gòu),可由一致的原理及技術(shù)來實施。圖1A的架構(gòu)中,包含一指令擷取單元(instruction fetch unit)110、解碼單元(adecode unit)120、執(zhí)行單元(an execute unit)130、存儲器存取單元(memory access unit)140、及暫存器寫回單元(register writer unit)150等5階層。除非在本文特別說明,否則文中所出現(xiàn)的這些單元(或邏輯電路方塊)的操作為一般本領(lǐng)域的技術(shù)者所已知,不再加以描述。
如同所知,指令擷取單元110執(zhí)行指令存儲器擷取(instructionmemory fetches)。此單元用以決定位于暫存器檔案(register file)160內(nèi)的程序計數(shù)器(program counter)的值或內(nèi)容以提供依序的指令執(zhí)行(in-order instruction execution),以及提供意外向量(exceptionvectors)、分支(branch)操作、及返回(return)操作。指令擷取單元110亦被設(shè)定為決定所有意外及分支連結(jié)(branch-link)指令的返回地址,以及將返回地址寫入或存入暫存器檔案160內(nèi)適當(dāng)?shù)臅捍嫫髦?。指令擷取的尋址可透過實體地址(physical addresses)直接到存儲器,或者透過指令高速緩存(instruction cache,圖未顯示)采用實體地址或虛擬地址的方式。雖然暫存器檔案160內(nèi)部架構(gòu)未顯示于圖中,然而,暫存器檔案160包含了處理器所使用的各種不同的暫存器。如同所知,這些暫存器可能包含了一般目的(general-purpose)暫存器或特殊目的(special-purpose)暫存器(例如,狀態(tài)暫存器(status register)或程序計數(shù)器(program counter)等)。此外,暫存器檔案160內(nèi)的暫存器將可能以排組(banked)或未排組(unbanked,或稱分散)的形式存在。如同所知,每一未排組的暫存器指可于所有的處理器操作模式所使用的單一實體暫存器(signal physical register)。一般而言,未排組的暫存器為一般目的的暫存器(general-purpose register),并無架構(gòu)上的特殊用途。當(dāng)然,這些操作將取決于程序設(shè)計者的規(guī)劃,以確保當(dāng)改變操作模式時或者在處理分支程序(branch routines)或其它次程序(subroutines)時暫儲器的內(nèi)容被儲存(例如被推入至一堆疊),或當(dāng)從一被改變的操作模式中返回時被復(fù)原(restore)。
暫存器檔案160包含了復(fù)數(shù)個暫存器162(于此例中標(biāo)記為R0到R7)以及其它復(fù)數(shù)個暫存器(未顯示于圖中)用以執(zhí)行傳統(tǒng)處理器的暫存器的功能及操作。暫存器162用以被設(shè)定和控制以模擬復(fù)數(shù)個(于此例為8個)位于堆疊頂端的存儲器位置(memory locations)。在操作上,暫存器R0到R7將保留存儲器堆疊頂端8個數(shù)據(jù)項。關(guān)于暫存器162其相關(guān)操作及處理流程以及其它相關(guān)的描述將于之后內(nèi)容配合圖1B敘述之。
解碼單元120用以對來自指令擷取單元110的指令進(jìn)行解碼,并產(chǎn)生必要的控制訊號予執(zhí)行單元130使其完成特定指令的執(zhí)行。解碼單元120的具體架構(gòu)視處理器而定,但其一般的操作與組成為本領(lǐng)域的技術(shù)人員所了解。同樣的,本領(lǐng)域的技術(shù)人員亦可了解,執(zhí)行單元130的具體結(jié)構(gòu)及相關(guān)操作亦須視處理器而定。一般而言,執(zhí)行單元包含了用以實行如解碼單元120產(chǎn)生的控制訊號所決定的相關(guān)指令操作的電路。
如圖1A所示,此實施例的執(zhí)行單元130包含了邏輯電路132以產(chǎn)生一或多個中斷訊號(interrupt signals)134,以及包含邏輯電路136以產(chǎn)生一或多個分支訊號(branch signals)138。如同其名稱所示,中斷訊號134用以指示一中斷狀況(例如IRQ、FIRQ等)。同樣地,分支訊號138指示一分支狀況(亦或指示一來自分支的返回(return)狀況)。這些訊號間接地顯示了脫序指令(out-of-order instructions)。
存儲器存取單元(memory access unit)140作為與外部數(shù)據(jù)存儲器的介面,用來讀寫數(shù)據(jù),以響應(yīng)執(zhí)行單元130所執(zhí)行的指令。當(dāng)然,并非所有的指令都需要存儲器存取,但是對需要的指令而言,存儲器存取單元140完成了對外部存儲器必須的存取。這樣的存儲器存取可能是直接就進(jìn)行存取,或通過實體(physical)或虛擬(virtual)地址透過一數(shù)據(jù)高速緩存(data cache)來完成。
最后,暫存器寫回單元150負(fù)責(zé)將內(nèi)容(指令執(zhí)行的結(jié)果)儲存或?qū)懭霑捍嫫鳈n案160中適當(dāng)?shù)臅捍嫫鳌@?,一指令的?zhí)行情況將二個一般目的暫存器的內(nèi)容相加,然后將相加后的內(nèi)容存入第三個一般目的暫存器。執(zhí)行這樣的指令后,暫存器寫回單元150將使得相加所得的值寫入至此第三個一般目的暫存器中。
參考圖1B,說明已知系統(tǒng)于模擬存儲器堆疊的頂端部分時,暫存器162的操作情形。于圖1B中,堆疊模擬(stack-emulation)暫存器162間數(shù)據(jù)的內(nèi)容的移動,通過PUSH 166及ADD 167指令的執(zhí)行來舉例說明的。在此已知系統(tǒng)中,給定的暫存器(R0)被指定為存儲器堆疊的頂端位置。而次一暫存器(R1)(與堆疊的頂端相鄰)為下一個位置,等等。在第一時序列163中,暫存器包含了特定的內(nèi)容,分別標(biāo)記為A到H(字母A及H表示任意的數(shù)值),其中,暫存器R7的內(nèi)容為A,暫存器R6的內(nèi)容為B,依此類推直到暫存器R0,其內(nèi)容為H。以PUSH指令166(或任和其它能使新的數(shù)據(jù)項倍加或推入存儲器堆疊的指令)為例,被推入至堆疊的數(shù)據(jù)(J)儲存于暫存器R0,其中暫存器R0將維持為堆疊數(shù)據(jù)的頂端。在內(nèi)容J被推入堆疊暫存器頂端R0之前,其余每一暫存器的內(nèi)容從暫存器R7開始,將被推移到其下一個暫存器中。在此情況下,暫存器R7的內(nèi)容(A)將被儲存到存儲器中一個由存儲器堆疊指標(biāo)(memory stack pointer)所定義的位置;此操作將伴隨著一儲存R7的操作STR 168來執(zhí)行。接著,暫存器R6的內(nèi)容(B)將被推移到暫存器R7,而暫存器R5的內(nèi)容(C)將被推移到暫存器R6,依此類推直到暫存器R0的內(nèi)容(H)推移到暫存器R1。最后,內(nèi)容(J)被推入到堆疊的頂端上的暫存器R0中。
繼之,若接下來的指令為一ADD指令167,則存儲器堆疊的頂端二個位置的數(shù)據(jù)(J及H)將被相加并儲存在存儲器堆疊頂端位置(暫存器R0)中。此將使得下一個暫存器R1空下來(因其內(nèi)容已于執(zhí)行ADD指令時被使用了)。然后,其余暫存器R2到R7的值將被往上推移,使得暫存器R2的內(nèi)容(G)被推移到現(xiàn)在可用(空下來)的暫存器R1,而暫存器R3的內(nèi)容(F)被推移到暫存器R2等,直到暫存器R7的內(nèi)容(B)被推移到暫存器R6。這使得暫存器R7將空下來并可用以接收之前存到存儲器中其它堆疊的數(shù)據(jù)(A),此操作將由一負(fù)載操作LDR 169執(zhí)行的。
前述討論的圖1B一般傳統(tǒng)通過復(fù)數(shù)個處理器的暫存器以模擬存儲器堆疊操作的一簡單例子;然而如同所知,其相關(guān)的設(shè)計及操作方法非常的繁復(fù),其將耗費(fèi)相當(dāng)大的頻寬和工作周期以處理不同暫存器間的數(shù)據(jù)推移(例如,推入(push)和跳出(pop)堆疊操作所引發(fā)的相關(guān)漣波般的推移動作(ripple shifting))。
鑒于上述,本發(fā)明提出于暫存器式處理器中模擬堆疊式操作的改良系統(tǒng)與方法,并提出相關(guān)實施例以說明。參考圖2,為類似圖1B的方塊圖,并通過相同的二個指令PUSH 207及ADD 208的操作來舉例說明其與傳統(tǒng)操作結(jié)果的差異。在此,8個暫存器201(R0到R7)的內(nèi)容將透過202、204、206此三個連續(xù)的時序列,以分別說明各暫存器于在執(zhí)行PUSH指令207及ADD指令208之前以及其響應(yīng)此二指令后的內(nèi)容變化情形。在第一時序列202中,暫存器R0到R7的內(nèi)容與圖1B的時序列163中的內(nèi)容相同;且同樣地,堆疊頂端指標(biāo)205指向暫存器R0。于執(zhí)行PUSH指令207(或任何使得數(shù)據(jù)被推入至堆疊頂端的相關(guān)指令)中,暫存器R7的內(nèi)容(A)將被儲存于存儲器中的一個位置,如同圖1B中的STR 168操作。然而,此實施例中,不同于圖1B中的操作是,R0到R6的內(nèi)容將維持不變;同時,堆疊指標(biāo)205的頂端將改為指到暫存器R7,以取代傳統(tǒng)暫存器間的數(shù)據(jù)內(nèi)容做連續(xù)漣波式的推移動作。然后,被推入堆疊的內(nèi)容(J)將被寫入至?xí)捍嫫鱎7。繼之,執(zhí)行ADD指令208時,目前被指定為模擬堆疊的頂端位置的暫存器R7的內(nèi)容(J),將被加到下一個連續(xù)的堆疊位置R0。此時,堆疊頂端指標(biāo)將接著移動(例如以遞增或遞減的方式移動)并再度指向暫存器R0,于是現(xiàn)在暫存器R0的內(nèi)容(J+H)包含最后兩個被推入到堆疊的元素之和。然后,就像圖1B的操作169,一下載操作LDR 209將被執(zhí)行以恢復(fù)之前儲存到存儲器的內(nèi)容(A)至?xí)捍嫫鱎7中。
相較圖1B所示的操作,圖2所示的模擬堆疊的處理器暫存器操作,其效能上將有相當(dāng)大的提升。本實施例在處理相關(guān)指令中,如無論是處理從存儲器堆疊推入(push)或推出(pop)數(shù)據(jù)的操作,借著有效地安排堆疊頂端指標(biāo)205的遞增或遞減,將可得相當(dāng)大的效益。亦即,通過有效地安排堆疊頂端指標(biāo)205的位置,其避免了傳統(tǒng)須執(zhí)行大量的推移操作,以將不同暫存器的內(nèi)容推移到其相鄰的暫存器中。
描述完本發(fā)明的主要操作方式后,參考圖3,其一用以說明本發(fā)明之一實施例的特定基本組成產(chǎn)品的方塊圖。配合圖2的實施例所示,圖3中復(fù)數(shù)個暫存器201用以模擬存儲器堆疊的頂端位置。在圖2中以八個暫存器為例,來模擬存儲器堆疊的頂端八個位置。然而,暫存器的個數(shù)多寡依特定的設(shè)計或架構(gòu)的各種不同要求因素而定,將可能采用較多或較少的暫存器來完成本發(fā)明的所述功能。堆疊頂端指標(biāo)205用來指向復(fù)數(shù)個暫存器201中,含有目前存在存儲器堆疊頂端內(nèi)容的個暫存器。于實施例中,堆疊頂端指標(biāo)205將以一下載有一數(shù)值的處理器暫存器實現(xiàn)的(其中當(dāng)暫存器內(nèi)原先的數(shù)值改變時,其將重新被下載一新數(shù)值)。在另一實施例中,堆疊頂端指標(biāo)205將以一可逆計數(shù)器(up/down counter)實現(xiàn)的,并通過遞增或遞減操作以指向復(fù)數(shù)個暫存器201中的連續(xù)相繼的暫存器之一。
在以八個暫存器模擬堆疊頂端八個位置的實施例中,反轉(zhuǎn)計數(shù)器(rollover counter)中的至少三個位元將用以定義堆疊頂端指標(biāo)205的內(nèi)容。在一實施例中,計數(shù)器將進(jìn)行反轉(zhuǎn)以響應(yīng)遞增或遞減的操作。例如,若此三個位元皆為1,其顯示堆疊頂端指標(biāo)的值為7(例如指到暫存器R7),當(dāng)對計數(shù)值遞增加1,則計數(shù)值將會數(shù)到8(亦或此三個位元皆變成0),藉此,其將有效地使得堆疊頂端指標(biāo)205的值為0,以指向暫存器R0。然而,用以控制指標(biāo)之值的相關(guān)邏輯電路的組成及實施方法,將因所給定的系統(tǒng)或架構(gòu)的設(shè)計目標(biāo)而定。
此外,存儲器220用以保存或維持未被復(fù)數(shù)個暫存器201所模擬的堆疊的內(nèi)容。于一實施例中,存儲器220可以一般的方法來安排及實現(xiàn)。邏輯電路225用以安排或控制復(fù)數(shù)個暫存器201與存儲器220間數(shù)據(jù)的移動。亦即,當(dāng)堆疊束(stack-bound)數(shù)據(jù)超過所配置的暫存器空間時,其將被挪移到存儲器220中的堆疊配置(stack-allocated)的部分。同理,當(dāng)堆疊數(shù)據(jù)將被讀入到配置的暫存器時(例如從由堆疊推出),則堆疊數(shù)據(jù)將由存儲器220移到空置的暫存器空間中。
參閱圖4,用以說明根據(jù)本發(fā)明的實施例的實施特征方塊圖。在此,圖4以處理器管線的擷取230、解碼232、暫存器存取(registeraccess)234、及執(zhí)行236等階層為例。于此實施例中,用以控制堆疊頂端指標(biāo)205的邏輯電路215內(nèi)嵌于解碼器232。如同所知,編解碼(compiled code)231將由擷取單元230進(jìn)行讀取。編解碼231由一編譯器所產(chǎn)生,其中此編譯器用以對程序代碼進(jìn)行編譯以供傳統(tǒng)如圖1A及圖1B所示的相關(guān)裝置執(zhí)行。如前所述,一指定的暫存器(R0)總是維持為堆疊的頂端;因此,此用以控制堆疊頂端指標(biāo)的邏輯電路215將執(zhí)行一指標(biāo)轉(zhuǎn)移操作以轉(zhuǎn)換暫存器R0,例如,將指標(biāo)轉(zhuǎn)移到目前指定為堆疊頂端位置的暫存器。舉例來說,若此被指定的暫存器為暫存器R3,則暫存器R3的相關(guān)識別訊息將從解碼器232傳送到暫存器存取單元234,而非傳送暫存器R0的訊息。接著,暫存器R3的內(nèi)容將由堆疊模擬暫存器201得到并傳送到執(zhí)行單元236中。
在圖4實施例中,邏輯電路240位于執(zhí)行單元236內(nèi),用來完成關(guān)于將數(shù)據(jù)推入或推出存儲器堆疊的相關(guān)執(zhí)行。此邏輯電路240(或操作)的回饋訊號將傳送到用以控制堆疊頂端指標(biāo)的邏輯電路215中。在此實施例中,每一次在執(zhí)行推入或推出存儲器堆疊的操作時,邏輯電路215將必須隨之對堆疊頂端指標(biāo)的值進(jìn)行遞增或遞減的操作,以指示出目前做為堆疊頂端位置的暫存器。此外,圖4中的邏輯電路250用以決定是否激活(enable)或停止(disable)暫存器的轉(zhuǎn)移操作(例如決定是否改變堆疊頂端指標(biāo)的值等)。因此,堆疊頂端指標(biāo)將可能如以上述的方法被控制改變,亦或不被改變。而在一實施例中,解碼器232將設(shè)計為可于復(fù)數(shù)個不同的指令集下執(zhí)行操作;例如,一第一指令集可包含16位的指令,第二指令集包含32位的指令,而第三指令集包含JAVA指令。在這樣的實施例中,假設(shè)此16及32位的指令并非為堆疊式指令(stack-based instructions),則在執(zhí)行這些傳統(tǒng)指令的期間,上述本發(fā)明的相關(guān)操作將被停止(disabled),而本發(fā)明所述的操作將會于執(zhí)行JAVA或其它堆疊式指令的操作期間激活(enabled)。
上述的實際例子,可以考慮手機(jī)的情況。當(dāng)手機(jī)開啟時(power-up),來自16或32位指令集的指令將被執(zhí)行以控制手機(jī)的基本操作。然而,如果手機(jī)有能力可下載及執(zhí)行以JAVA程序為基礎(chǔ)的應(yīng)用,則在這些指令程序(routine)的執(zhí)行期間,上述發(fā)明的特性將可被激活(enable)。通過邏輯電路250與邏輯電路215的合作將得以控制本發(fā)明的特征的激活與停止。
參考圖5,為類似于圖4所舉的例的方塊圖,用以說明本發(fā)明另一實施例的特征。在此實施例中,回饋260由執(zhí)行單元236提供至解碼器232中的邏輯電路265。特別的是,回饋260由執(zhí)行單元236的分支預(yù)測邏輯電路(branch prediction logic)(圖標(biāo)未顯示)所產(chǎn)生。如同所知,于處理器管線中,分支預(yù)測邏輯電路用以當(dāng)發(fā)生于管線處理器稍早的擷取及/或解碼操作遇到一分支指令時,預(yù)測(或猜測)伴隨此分支接下來的指令流程(例如,此分支將發(fā)生與否)。當(dāng)分支預(yù)測失敗,基本上將會有來自執(zhí)行單元236的回饋產(chǎn)生,且其將導(dǎo)致中間管線階層(intermediate pipeline stages)的內(nèi)容的清除(flush)。當(dāng)執(zhí)行本發(fā)明時,因中間管線階層可能包含了暫時(interim)或稱過渡的堆疊頂端暫存器位置,故管線的部分清除(a partial flush of the pipeline)亦必須確保堆疊頂端指標(biāo)的完整性。因此,邏輯電路265設(shè)置于解碼器232內(nèi)以反映執(zhí)行堆疊指標(biāo)。當(dāng)一部分管線清除動作實施時,邏輯電路265將用以確認(rèn)是否邏輯電路215回復(fù)一適當(dāng)?shù)闹笜?biāo)位置予堆疊頂端指標(biāo)。從前面的相關(guān)描述知,不同的實施方法及實施例將可在與本發(fā)明的精神及范疇一致的情況下被提供,附錄的權(quán)利要求范圍并非用以限制此處所描述的實施例。
各種不同的方法將可依據(jù)本發(fā)明來實施,圖6為說明一相關(guān)方法的流程圖。根據(jù)本發(fā)明,如圖6所示,通過安排處理器中的暫存器以模擬部分堆疊的方法被提出。首先,配置復(fù)數(shù)n個暫存器以模擬一存儲器堆疊的頂端n個位置(302)。接著,建立一指標(biāo)以指定n個暫存器中之一作為堆疊位置的頂端(304)。于響應(yīng)一用以呼叫一待被推入堆疊之值的已解碼指令時,此待被推入的值將被移動到目前被指標(biāo)指定為堆疊頂端位置的暫存器中,而其余暫存器的值維持不動(306)。接著,堆疊頂端指標(biāo)將被更新(update)以指定復(fù)數(shù)n個暫存器之一連續(xù)相繼的暫存器作為堆疊位置目前的頂端(308)。要了解的是,此更新步驟(如上所述)將視系統(tǒng)較佳的操作流程而定,其可能發(fā)生在移動步驟之前或之后。當(dāng)有其它額外的數(shù)據(jù)待被從堆疊中推入/推出時,前述的步驟將被重復(fù)操作之(310)。另外,其它額外的步驟亦可被提出,例如,儲存一給定的暫存器的內(nèi)容至一外部存儲器,或從一外部存儲器內(nèi)之一堆疊位置,下載復(fù)數(shù)個暫存器中之一的內(nèi)容;然上述的額外步驟并未特別顯示于圖中。在此操作中,復(fù)數(shù)個暫存器與外部存儲器間的數(shù)據(jù)移動將與某些暫存器操作同時(平行)發(fā)生,或至少于一關(guān)鍵性時序路徑(critical timing path)的外發(fā)生,因此不致于使暫存器操作產(chǎn)生延遲(delay)等操作瓶頸。
參考圖7,其為說明本發(fā)明另一實施例的流程圖。此實施例的方法中,于響應(yīng)一用以呼叫一待被推入(push)堆疊之值的已解碼指令時,目前被指定為堆疊頂端的暫存器(the top of stack register)內(nèi)的數(shù)據(jù)將被傳送出。接著,此待被推入堆疊之值將被移入到目前指定為堆疊暫存器頂端的暫存器(320)。然后,修正或更新堆疊暫存器頂端的指定(designation)以改以指定一連續(xù)相繼的暫存器為堆疊暫存器頂端(322)。在一實施例中,堆疊暫存器頂端通過一指標(biāo)來指定,而此指標(biāo)可如前所述以一簡單暫存器或一增/減量計數(shù)器(或可逆計數(shù)器)來實現(xiàn)。
參考圖8,其為根據(jù)本發(fā)明類似于圖7所示的通過安排復(fù)數(shù)個暫存器以模擬堆疊的部分頂端的流程圖,與圖7不同處為其說明響應(yīng)一推出(pop)操作而非推入操作。此實施例方法中,于響應(yīng)一用以呼叫一待被從堆疊推出(pop)之值的已解碼指令時,目前被指定為堆疊頂端的暫存器(the top of stack register)內(nèi)的內(nèi)容將被傳送出(例如,傳送出至處理器管線的執(zhí)行單元)(330)。接著,數(shù)據(jù)將從一外部存儲器被傳輸入目前被指定為堆疊暫存器頂端位置的暫存器中(332)。然后,堆疊頂端指標(biāo)將被更新以指定一連續(xù)相繼的暫存器作為具有堆疊頂端的值的暫存器。
前述的內(nèi)容并非用以詳盡涵蓋或是限制本發(fā)明公開的形式或內(nèi)容。本發(fā)明的一些明顯的相關(guān)修正或變化可經(jīng)由上述的技術(shù)揭露而得。本文中所討論的實施例為用以描述并提供本發(fā)明的原理的最佳例證,藉此使得本領(lǐng)域的技術(shù)人員可將本發(fā)明應(yīng)用于各種不同的適合或特定意圖的實施例以及各種不同的相關(guān)修正。當(dāng)然,根據(jù)公平、合法授權(quán)的幅度來闡釋時,所有相關(guān)的修正及變化涵蓋于所述的專利權(quán)利要求的范疇中。
權(quán)利要求
1.一種安排處理器中的暫存器以模擬部分堆疊的方法,其特征是,包含配置復(fù)數(shù)n個暫存器以模擬該堆疊的頂端n個位置;建立一指標(biāo)以指定該n個暫存器之一為一堆疊的頂端;對一用以呼叫等待被推入該堆疊之一值之一指令進(jìn)行解碼;移動該值至目前被該指標(biāo)指定作為堆疊位置的頂端的暫存器,并維持該復(fù)數(shù)n個暫存器中其它暫存器目前所存的值;及更新該指標(biāo)以指定該n個暫存中另一個暫存器作為該堆疊位置的頂端。
2.如權(quán)利要求1所述的安排處理器中的暫存器以模擬部分堆疊的方法,其特征是,該更新步驟包含下列可能變化的至少一種發(fā)生于該移動步驟之前及發(fā)生于該移動步驟之后。
3.如權(quán)利要求1所述的安排處理器中的暫存器以模擬部分堆疊的方法,其特征是,更包含于移動該值進(jìn)入該暫存器之前,將被指定為堆疊位置頂端的該暫存器內(nèi)的數(shù)據(jù)傳送出去。
4.權(quán)利要求3所述的安排處理器中的暫存器以模擬部分堆疊的方法,其特征是,該傳送步驟更特別包含傳送該數(shù)據(jù)至一存儲器中之一堆疊位置。
5.如權(quán)利要求3所述的安排處理器中的暫存器以模擬部分堆疊的方法,其特征是,該傳送步驟與其它暫存器的操作同時進(jìn)行,或至少于其它暫存器操作之一關(guān)鍵性時序路徑外進(jìn)行。
6.如權(quán)利要求1所述的安排處理器中的暫存器以模擬部分堆疊的方法,其特征是,更包含若該指令也呼叫一待從該堆疊推出的數(shù)據(jù),則將該被指定為堆疊位置頂端的暫存器內(nèi)的值移出,然后傳送一新數(shù)據(jù)進(jìn)入該被指定為堆疊位置頂端的暫存器。
7.如權(quán)利要求1所述的安排處理器中的暫存器以模擬部分堆疊的方法,其特征是,該更新步驟的發(fā)生使得該復(fù)數(shù)個暫存器以一序列及循環(huán)的方式分別地被指定為該堆疊的頂端位置。
8.一種安排處理器中的暫存器以模擬部分堆疊的方法,其特征是,包含配置復(fù)數(shù)n個暫存器以模擬該堆疊頂端的n個位置;建立一指標(biāo)以指定該n個暫存器之一為該堆疊位置的頂端;對一用以呼叫一等待被推出該堆疊之一值的指令進(jìn)行解碼;從目前被該指標(biāo)指定為該堆疊位置頂端的該暫存器中移動該值并維持該復(fù)數(shù)n個暫存器中其它暫存器目前所儲存的值;及更新該指令以指定該n個暫存器的另一暫存器為該堆疊的頂端。
9.如權(quán)利要求8所述的安排處理器中的暫存器以模擬部分堆疊的方法,其特征是,更包含將一數(shù)據(jù)從一存儲器中之一堆疊位置傳輸出,并于該值從該暫存器中被移動后,將該數(shù)據(jù)傳輸至該被指定為該堆疊位置頂端的暫存器。
10.一種安排處理器中的暫存器以模擬部分堆疊的方法,其中于一處理器系統(tǒng)中配置復(fù)數(shù)個暫存器以模擬一堆疊的一頂端部分,其特征是,包含對一用以呼叫一待被推入一堆疊之一值的指令進(jìn)行解碼;將被指定為該堆疊的頂端位置之一暫存器內(nèi)的數(shù)據(jù)傳送出去;移動該值至目前被指定為該堆疊的頂端位置的該暫存器;及更新目前被指定為該堆疊的頂端位置的該暫存器以指定一不同的暫存器做為該堆疊的頂端。
11.如權(quán)利要求10所述的安排處理器中的暫存器以模擬部分堆疊的方法,其中于一處理器系統(tǒng)中配置復(fù)數(shù)個暫存器以模擬一堆疊的一頂端部分,其特征是,該傳送該數(shù)據(jù)的步驟更包含傳送該數(shù)據(jù)至一存儲器中之一堆疊位置。
12.如權(quán)利要求10所述的安排處理器中的暫存器以模擬部分堆疊的方法,于一處理器系統(tǒng)中配置復(fù)數(shù)個暫存器以模擬一堆疊的一頂端部分,其特征是,該傳送該數(shù)據(jù)的步驟與其它暫存器操作同時進(jìn)行,或至少于其它暫存器操作之一關(guān)鍵性時序路徑外進(jìn)行。
13.如權(quán)利要求10所述的安排處理器中的暫存器以模擬部分堆疊的方法,其中于一處理器系統(tǒng)中配置復(fù)數(shù)個暫存器以模擬一堆疊之一頂端部分,其特征是,該更新步驟包含下列可能變化的至少一種發(fā)生于該傳送步驟之前以及發(fā)生于該傳送步驟之后。
14.如權(quán)利要求10所述的安排處理器中的暫存器以模擬部分堆疊的方法,其中于一處理器系統(tǒng)中配置復(fù)數(shù)個暫存器以模擬一堆疊的一頂端部分,其特征是,該更新步驟的發(fā)生使得該復(fù)數(shù)個暫存器以一序列及循環(huán)的方式分別地被指定為該堆疊的頂端位置。
15.如權(quán)利要求10所述的安排處理器中的暫存器以模擬部分堆疊的方法,其中于一處理器系統(tǒng)中配置復(fù)數(shù)個暫存器以模擬一堆疊的一頂端部分,其特征是,該輸送及該移動步驟將影響或改變被指定為堆疊位置頂端的暫存器的數(shù)據(jù),但其它暫存器的數(shù)據(jù)則維持不變或不動。
16.一種安排處理器中的暫存器以模擬部分堆疊的方法,其中于一處理器系統(tǒng)中配置復(fù)數(shù)個暫存器以模擬一堆疊的一頂端部分,其特征是,包含對一用以呼叫一待被從一堆疊推出之一值的指令進(jìn)行解碼;從目前被指定為該堆疊之一頂端位置之一暫存器移動該值;傳送一數(shù)據(jù)至目前被指定為該堆疊的頂端位置的該暫存器;及更新目前被指定為該堆疊的頂端位置的該暫存器以指定一不同的暫存器做為該堆疊的頂端。
17.如權(quán)利要求16所述的安排處理器中的暫存器以模擬部分堆疊的方法,其中于一處理器系統(tǒng)中配置復(fù)數(shù)個暫存器以模擬一堆疊的一頂端部分,其特征是,該傳送該數(shù)據(jù)的步驟更包含從一存儲器中之一堆疊位置輸出該數(shù)據(jù)。
18.一種安排處理器中的暫存器以模擬部分堆疊的方法,其特征是,包含于一處理器中安排復(fù)數(shù)個暫存器藉以模擬復(fù)數(shù)個堆疊位置;于其它處理器暫存器與該復(fù)數(shù)個暫存器之間移動一數(shù)據(jù),以響應(yīng)一用以呼叫并使數(shù)據(jù)于該其它處理器暫存器與該堆疊位置間移動的指令;指定該復(fù)數(shù)個暫存器之一暫存器做為一堆疊位置的頂端;及當(dāng)數(shù)據(jù)從該復(fù)數(shù)個暫存器中移入或移出以模擬堆疊位置時,更新該指定步驟以指定該復(fù)數(shù)個暫存器中的其它暫存器做為該堆疊位置的頂端。
19.如權(quán)利要求18所述的安排處理器中的暫存器以模擬部分堆疊的方法,其特征是,該更新步驟的發(fā)生使得該復(fù)數(shù)個暫存器以一序列及循環(huán)的方式個別地被指定為該堆疊的頂端位置。
20.一種安排處理器中的暫存器以模擬部分堆疊的裝置,其特征是,包含一第一邏輯電路,以對一用以呼叫一待被推入一堆疊之一值的指令進(jìn)行解碼;一第二邏輯電路,以將目前被指定為該堆疊的頂端地址之一暫存器內(nèi)的數(shù)據(jù)傳送出去;一第三邏輯電路,以移動該值至目前被指定為該堆疊的頂端位置的該暫存器;及一第四邏輯電路,以更新目前被指定為該堆疊頂端位置的該暫存器以指定一不同的暫存器作為該堆疊的頂端。
21.一種安排處理器中的暫存器以模擬部分堆疊的裝置,其特征是,包含一第一邏輯電路,以對一用以呼叫待被推出一堆疊之一值的指令進(jìn)行解碼;一第二邏輯電路,以將該值從目前被指定為該堆疊的頂端位置之一暫存器移出;一第三邏輯電路,以傳送一數(shù)據(jù)進(jìn)入目前被指定為該堆疊的頂端位置的該暫存器;及一第四邏輯電路,以更新目前被指定為該堆疊頂端位置的該暫存器以指定一不同的暫存器作為該堆疊的頂端。
22.一種安排處理器中的暫存器以模擬部分堆疊的裝置,其特征是,包含一第一邏輯電路,以于一處理器安排復(fù)數(shù)個暫存器以模擬復(fù)數(shù)個堆疊位置;一第二邏輯電路,以于其它處理器暫存器與該復(fù)數(shù)個暫存器的暫存器間移動一數(shù)據(jù),以響應(yīng)一用以呼叫并使數(shù)據(jù)于該其它處理器暫存器與該堆疊位置間移動的指令;一第三邏輯電路,以指定該復(fù)數(shù)個暫存器中之一個暫存器做為一堆疊位置的頂端;及一第四邏輯電路,以當(dāng)數(shù)據(jù)從該復(fù)數(shù)個暫存器中移入或移出以模擬該堆疊位置時,更新該指定以指定該復(fù)數(shù)個暫存器中的其它暫存器做為該堆疊位置的頂端。
23.一種安排處理器中的暫存器以模擬部分堆疊的裝置,其特征是,包含一執(zhí)行邏輯電路,以從復(fù)數(shù)個指令集之中執(zhí)行指令;一顯示邏輯電路,以顯示一目前的指令是否為一Java指令集的指令;一安排邏輯電路,以根據(jù)該顯示邏輯電路,于該處理器內(nèi)安排復(fù)數(shù)個暫存器以模擬一堆疊的頂端位置;一指定邏輯電路,以于目前時刻指定該復(fù)數(shù)個暫存器中之一作為一堆疊頂端位置;及一更新邏輯電路,以當(dāng)響應(yīng)用以呼叫數(shù)據(jù)從該堆疊移入或移出的指令時,更新該被指定為堆疊頂端位置的暫存器,其中,對于任何從該堆疊移出或移入的單一數(shù)據(jù)移動操作而言,只有該復(fù)數(shù)個暫存器中的一個暫存器的數(shù)據(jù)被改變,而該復(fù)數(shù)個暫存器中的剩余的暫存器的數(shù)據(jù)值將不被改變或移動。
24.如權(quán)利要求23所述的安排處理器中的暫存器以模擬部分堆疊的裝置,其特征是,該更新邏輯電路的該更新步驟使得該復(fù)數(shù)個暫存器被以一序列及循環(huán)的方式個別地指定為該堆疊頂端位置。
25.如權(quán)利要求23所述的安排處理器中的暫存器以模擬部分堆疊的裝置,其特征是,該顯示邏輯電路包含一單一控制位及該邏輯電路包含一指標(biāo)。
26.如權(quán)利要求23所述的安排處理器中的暫存器以模擬部分堆疊的裝置,其特征是,更包含一第一邏輯電路以當(dāng)該堆疊大小變大并超過該復(fù)數(shù)個暫存器所能容納的大小時,安排該復(fù)數(shù)個暫存器及外部存儲器間的數(shù)據(jù)交換。
27.如權(quán)利要求26所述的安排處理器中的暫存器以模擬部分堆疊的裝置,其特征是,該安排邏輯電路安排該交換操作于一關(guān)鍵性時序路徑外進(jìn)行,使得被執(zhí)行指令所定義的功能性處理操作將不會被延遲。
全文摘要
本發(fā)明有關(guān)在一處理器中模擬一部分堆疊的方法及裝置。本發(fā)明的特定實施例通過安排復(fù)數(shù)個處理器的暫存器以儲存欲模擬的堆疊的頂端部分內(nèi)容。其中,通過安排一用以指向一目前的堆疊頂端的暫存器的指標(biāo),相關(guān)的數(shù)據(jù)將被安排于這些復(fù)數(shù)個暫存器中。當(dāng)數(shù)據(jù)被從堆疊推入或推出時,堆疊頂端的指標(biāo)之值亦將隨著遞增或遞減。本發(fā)明提供暫存式處理器中模擬堆疊式操作的裝置架構(gòu)與方法,可以達(dá)到減少暫存器間的傳送操作,進(jìn)而進(jìn)一步提升效率。
文檔編號G11C5/00GK1673953SQ20051006555
公開日2005年9月28日 申請日期2005年4月15日 優(yōu)先權(quán)日2004年4月19日
發(fā)明者查理斯·F·雪洛 申請人:威盛電子股份有限公司