專利名稱:多指令集的數(shù)據(jù)處理的制作方法
技術領域:
本發(fā)明涉及數(shù)據(jù)處理領域。更具體地說,本發(fā)明涉及利用多個程序指令字集的數(shù)據(jù)處理。
數(shù)據(jù)處理系統(tǒng)利用一在程序指令字的控制下進行操作的處理器核,這些指令字在譯碼時用于產生控制信號以控制該處理器核的不同單元以執(zhí)行必須的功能,從而實現(xiàn)在程序指令字中規(guī)定的處理。
典型的處理器核具有給定位寬度的數(shù)據(jù)通路,該寬度限制了對應一給定的指令可以操縱的數(shù)據(jù)字的長度。在數(shù)據(jù)處理領域,數(shù)據(jù)通路的寬度的增加一直是一個趨勢,即逐漸從8位的體系結構轉移到16位, 32位和64位的體系結構。在隨著數(shù)據(jù)通路寬度增加的同時,指令集中的可能的指令的數(shù)目(在CISC和RISC策略中)以及這些指令的位長度也在增加。比如已經從16位指令集的16位體系結構轉移到32位指令集的32位體系結構。
隨著向增加結構的寬度的遷移,一個問題是維護為以前各代機器所編寫的程序軟件的向后兼容。解決這一問題的一個途徑是提供具有兼容模式的新系統(tǒng)。比如,數(shù)字設備公司(Digital Equipment Corporation)的VAX11計算機具有能對較早的PDP11計算機的指令進行譯碼的兼容模式。盡管這一方法允許使用較早的程序軟件,然而這種使用并未充分利用所運行的新處理設備中的所提高的能力,即當系統(tǒng)實際上具有支持32位的運算的硬件時,可能只使用到多級16位運算。
與結構的寬度的改變相關的另一問題是使用新的增加的位寬度指令集的計算機程序的大小趨于增加(32位的程序指令字所占的存儲空間是16位程序指令字的兩倍)。盡管在程序大小的增加在一定程度上為指令所抵銷,因為新的指令指定的一個操作在以前可能需要多于一個的短指令,但是這一增加程序大小的趨勢仍然存在。
對付這一問題的一個方案是讓用戶能有效地指定它們的指令集。國際商用機器公司(International Business Machins Corporation)制造的IBM370計算機包括了一個可寫的控制存儲器,使用該控制存儲器,用戶可以建立它們自己的指令集,將指令程序字與所希望的處理器核的不同部分的操作進行映射。盡管這一方案提供了很好的靈活性,但難以產生高速度的操作,而且可寫的控制存儲器占據(jù)了很大的集成電路區(qū)域,因此有些不利。而且,設計一個有效的所說的指令集對用戶來說是一個很重的負擔。
眾所周知,在提供的系統(tǒng)中,一個指令集具有不同長度的程序指令字。這一方案的一個例子是由MOS工藝制造的6502微處理器。這一處理器使用8位的操作碼,操作碼后跟可變數(shù)目的操作數(shù)字節(jié)。在確定操作數(shù)和執(zhí)行指令之前首先要對操作碼進行譯碼。與固定的已知長度的程序指令字(即操作碼和任意操作數(shù))相比,這就要求多次存儲器訪問,而且是對系統(tǒng)性能的很大限制。
從本發(fā)明提供的處理數(shù)據(jù)的裝置可看到其一個特點,所述裝置包括一個處理器核,它具有N位的數(shù)據(jù)通路,并且響應多個核控制信號;第一譯碼裝置,它用于對來自一第一永久指令集(permanentinstruction set)的X位程序指令字進行譯碼,從而產生所述核控制信號,以觸發(fā)使用所述N位的數(shù)據(jù)通路的處理;第二譯碼裝置,它用于對來自一第二永久指令集(permanentinstruction set)的Y位程序指令字進行譯碼,從而產生所述核控制信號,以觸發(fā)使用所述N位的數(shù)據(jù)通路的處理,Y小于X;并且一個指令集切換裝置,它用于在接收到程序指令字時選擇使用所述第一譯碼裝置的第一處理模式,或者在接收到程序指令字時選擇使用所述第二譯碼裝置的第二處理模式。
本發(fā)明認識到,在一個具有一寬標準的X位指令集和N位數(shù)據(jù)通路的系統(tǒng)中(比如一個操作在32位的數(shù)據(jù)通路的32位的指令集),在通常的編程中并未充分用到X位指令集的性能。這一情況的一個例子就是32位的轉移指令。該轉移指令可能使用很少用到的32兆字節(jié)的范圍。從而,在大多數(shù)情況下,這種轉移僅用于少數(shù)指令,并且32位指令的大多數(shù)位不攜帶任何信息。大多數(shù)使用32位指令集的程序通常具有低的代碼密度,并且使用的程序存儲空間多于所需要的。
本發(fā)明通過提供一個單獨的永久的Y位指令集而解決這一問題,其中Y小于X,該指令集仍然操作在全N位數(shù)據(jù)通路上。因此,使用到了N位的數(shù)據(jù)通路的性能,同時對于那些不要求該X位指令集的復雜性的應用來說,其代碼密度得到提高。
在具有兩個永久指令集的裝置中存在一個協(xié)同作用。通過使用制造商有效地實現(xiàn)的兩個指令集(在諸如相對定時十分關鍵的RISC處理器的高性能系統(tǒng)中,這很重要)以及不犧牲N位數(shù)據(jù)通路的使用,允許使用者具有一種靈活性,以改變他們所使用的指令集來適應程序的環(huán)境。
這種結構的另一優(yōu)點是,在使用Y位指令集運行時,由于在每單位時間中運行較少字節(jié)的程序代碼,因此對于存儲程序碼的存儲系統(tǒng)的數(shù)據(jù)傳輸能力的要求就不十分高。這樣就降低了復雜性及其成本。
本發(fā)明也朝著與本領域的正常趨勢相反的方向發(fā)展。這一趨勢就是隨著每一代新處理器的出現(xiàn),要將更多的指令加入到該指令集中,為了適應這種要求,該指令集變得更寬了。相反,本發(fā)明是以一寬的復雜的指令集開始的,然后添加一較狹窄的指令集(以較少的空間用于大量的指令)以用于不要求寬指令集的整個范圍的情況。
應該認識到,第一指令集和第二指令集可以完全是獨立的。然而,在本發(fā)明的較佳實施例中,所述第二指令集提供了所述第一指令集所提供的操作的一個子集。
只要第二指令集是第一指令集的一個子集,由于處理器核的硬件單元可以實現(xiàn)得更易于適應兩個指令集,因此就允許更高效的操作。
當將一個增加了位長度的程序指令字的一個指令集已添加到一個現(xiàn)有的程序指令集中時,有可能要求來自兩個指令集的程序指令字是正交的。然而,該指令集切換裝置使得可以避免這一限制,而且允許系統(tǒng)中所述第二指令集非正交于所述第一指令集。
自由使用非正交指令集使得系統(tǒng)設計者的任務變得容易了,而且實現(xiàn)了本發(fā)明的另一特色,即能夠更高效地處理指令集的設計。
該指令集切換裝置可以是一個由手動干預進行控制的硬件型切換設備。然而,在本發(fā)明的較佳實施例中,所述指令集切換裝置由響應一個指令集標志的裝置構成,在用戶的程序控制下,所述指令集標志是可設置的。
在軟件控制下,能夠使用指令集切換裝置在第一指令集和第二指令集之間進行切換是相當有益的。比如,對于大多數(shù)程序,為了提高代碼密度程序員可以使用具有Y位程序指令字的第二指令集,而對于那些要求利用第一指令集的增加的能力和復雜性的程序的一小部分可以暫時切換到具有X位程序指令字的第一指令集。
對兩個獨立的指令集的支持可能會對系統(tǒng)引入另外的復雜性。在本發(fā)明的較佳實施例中,所述處理器核包括一個程序狀態(tài)寄存器(用于存儲當前適當?shù)奶幚頎顟B(tài)數(shù)據(jù))和一個保存程序狀態(tài)寄存器,當出現(xiàn)一個程序異常而引起執(zhí)行一個異常處理程序時所述保存程序狀態(tài)寄存器用于存儲與一個主程序有關的處理狀態(tài)數(shù)據(jù),所述指令集標志是所述處理狀態(tài)數(shù)據(jù)的一部分。
將指令集標志作為編程狀態(tài)數(shù)據(jù)的一部分就保證了當發(fā)生一個異常時對該標志進行保存。以此方式,一個異常處理程序就能夠處理兩個處理模式的異常,并且允許它訪問在保存程序狀態(tài)寄存器中的所保存的指令集標志(如果在處理該異常中它十分重要的話)。而且,使得該異常處理程序能夠使用任一指令集以提高設計約束所要求的速度或代碼密度。
為了處理不同指令集的不同的位長度,本發(fā)明的較佳實施例在所述的處理器核中包括一個程序計數(shù)器寄存器和一個程序計數(shù)器遞增器,后者用于對存儲在所述程序計數(shù)器寄存器中的程序計數(shù)器值進行遞增以指向下一個程序指令字,所述程序計數(shù)器遞增器在所述第一處理模式而不是在所述第二處理模式中使用一個不同的遞增步長。
將會理解到,第二指令集的較短的程序指令字不可能包含與第一指令集同樣多的信息。為了適應這一情況,可通過減少操作數(shù)的范圍節(jié)省第二指令集中的空間,其中操作數(shù)的范圍在一個程序指令字內被指定。
在本發(fā)明的較佳實施例中,所述處理器核通過一Y位數(shù)據(jù)總線連接到一個存儲系統(tǒng),從而所述第二指令集的程序指令字只要求一個取周期,所述第一指令集的程序指令字要求多個取周期。
使用Y位的數(shù)據(jù)總線和存儲系統(tǒng)在使得對于在至少第二指令集的每一程序指令字只需一個取周期的同時,也使得要建造的系統(tǒng)的總體開銷較少。
第一譯碼裝置和第二譯碼裝置可以完全是獨立的。然而在本發(fā)明的較佳實施例中,所述第二譯碼裝置重新使用了所述第一譯碼裝置的至少一部分。
第二譯碼裝置對于第一譯碼裝置的至少一部分的重新使用減少了電路的整體面積。而且,由于第一指令集通常不如第二指令集復雜,而且驅動同樣的處理器核,因此第二譯碼裝置的相當多的部分仍有可能重新使用。
從本發(fā)明提供的處理數(shù)據(jù)的一種方法可以看到其另一特色,所述方法包括為一個具有N位的數(shù)據(jù)通路并且響應多個核控制信號的處理器核選擇第一處理模式或第二模式之一;在所述第一譯碼模式中,對來自第一永久指令集(permanentinstruction set)的X位程序指令字進行譯碼,從而產生所述核控制信號,以觸發(fā)使用N位的數(shù)據(jù)通路的處理;并且在所述第二譯碼模式中,對來自第二永久指令集(permanentinstruction set)的Y位程序指令字進行譯碼,從而產生所述核控制信號,以觸發(fā)使用N位的數(shù)據(jù)通路的處理,Y小于X。
結合附圖將以舉例的方式對本發(fā)明的一個較佳實施例進行描述,其中
圖1概略地示出了包括一個處理器核和一存儲系統(tǒng)的數(shù)據(jù)處理裝置;圖2概略地示出了對于一個具有一個指令集的系統(tǒng)的指令和指令譯碼器;圖3示出了在具有兩個指令集的系統(tǒng)中使用的一個指令流水線和指令譯碼器;圖4示出了一個X位的程序指令字的譯碼過程;圖5和圖6示出了Y位程序指令字到X位程序指令字的映射;圖7示出了一個X位指令集;圖8示出了一個Y位指令集;以及圖9示出了第一指令集和第二指令集使用的處理寄存器。
圖1示出了一個數(shù)據(jù)處理系統(tǒng)(它形成為一個集成電路的一部分),該系統(tǒng)包括一個連接到一Y位存儲系統(tǒng)4的處理器核2。在本例中,Y=16。
處理器核2包括一個寄存器組6,一個Booths乘法器(Boothsmultiplier)8,一個桶式移位器(barrel shiftter)10,一個32位算術邏輯單元12,和一個寫數(shù)據(jù)寄存器14。在處理器核2和存儲系統(tǒng)4之間是一個指令流水線16,一個指令譯碼器18和一個寫數(shù)據(jù)寄存器20。圖中示出一個程序計數(shù)器寄存器22(它是處理器核2的一部分)正在尋址存儲系統(tǒng)4。在執(zhí)行每一指令以及必須為指令流水線16取出一新的指令時,程序計數(shù)器遞增器24起到遞增程序計數(shù)器寄存器22中的程序計數(shù)器值的作用。
處理器核2在各功能單元之間采用了N-位數(shù)據(jù)通路(在這個例子中為32位數(shù)據(jù)通路)。在運轉時,指令流水線16中的指令被指令譯碼器18譯碼,從而產生各種核控制信號,并被傳輸至處理器核2中的不同功能單元。作為對這些核控制信號的響應,處理器核的不同部分實施32-位處理操作,例如32-位乘法,32-位加法和32-位邏輯運算。
寄存器組6包含一個當前程序狀態(tài)寄存器26和一個保存程序狀態(tài)寄存器28。當前程序狀態(tài)寄存器26為處理器核2保存各種條件和狀態(tài)標志。這些標志包括處理模式標志(如系統(tǒng)模式,用戶模式,存貯器中止模式等),以及表示出現(xiàn)算術運算結果為零、出現(xiàn)進位等等的標志。保存程序狀態(tài)寄存器28(可以是成組的多個這種保存程序狀態(tài)寄存器中的一個)用來在一個異常出現(xiàn)而引起處理器模式切換時暫存當前程序狀態(tài)寄存器26的內容。這樣可以使對異常的處理更快更有效。
當前程序狀態(tài)寄存器26中含有一個指令集標志T。該指令集標志被傳送給指令譯碼器18和程序計數(shù)器遞增器24。當該指令集標志T被置位時,系統(tǒng)操作第二指令集中的指令(即Y-位程序指令字,在這個例子中為16-位程序指令字)。該指令集標志T控制程序計數(shù)器遞增器24,使之在第二指令集被操作時采用一個較小的增量步長。這與第二指令集的程序指令字字長較短,以至在存貯器系統(tǒng)4的存貯位置中,指令間具有更小間距是相一致的。
前面提到,存貯器系統(tǒng)4是一個16-位存貯器系統(tǒng),通過16-位數(shù)據(jù)總線與讀數(shù)據(jù)寄存器20和指令流水線16相連。相對于高性能的32-位存貯器系統(tǒng),這種16-位存貯器系統(tǒng)較為簡單和廉價。使用這種16-位存貯器系統(tǒng),可以在一個周期內取到16-位程序指令字。然而,如果需要使用一條第二指令集中的32-位指令(由指令集標志T指示),那么,需要進行兩次取指,從而還原一條32-位指令并將之提供給指令流水線16。
一旦所需的程序指令字已從存貯器系統(tǒng)4被還原,它們即被指令譯碼器18譯碼,同時,不管該指令是16-位指令還是32-位指令,在處理器核2中均開始32-位處理過程。
指令譯碼器18在圖1中被示意為一個方框。然而,為了處理一個以上的指令集,指令譯碼器1 8具有更為復雜的結構,這將結合圖2和圖3進行闡述。
圖2示意了指令流水線16和一個處理單指令集的指令譯碼器18。在這個例子中,指令譯碼器18只含有一個第一譯碼裝置30,用以譯碼32-位指令。該譯碼裝置30使用一個可編程邏輯陣列(PLA)對第一指令集(ARM指令集)進行譯碼,從而產生大量的核控制信號32并將之傳輸?shù)教幚砥骱?。當前被譯碼(即產生當前的核控制信號32)的程序指令字還保存在一個指令寄存器34中。處理器核2中的功能部件(如Booths乘法器8或寄存器組6)直接從這個指令寄存器34中讀取各自處理操作所需的操作數(shù)。
基于這種設計下的操作過程具有這樣一個特征,即第一譯碼裝置30要求必須在第一譯碼裝置開始操作的時鐘周期的開始階段獲得某些輸入(由流水線階段PipeC所輸出的、以實線標示出的P位)。這是為了保證核控制信號32能被及時產生,以便驅動處理器核2中的必要部件。第一譯碼裝置30是一個相對較大且較慢的可編程邏輯陣列結構,所以這種對時間的考慮是有重要意義的。
這種用可編程邏輯陣列結構來完成指令譯碼的設計是本領域中的一種傳統(tǒng)方法。一個輸入集合以及由這些輸入產生的所需輸出一起被定義。可以用市場上已提供的軟件來設計這種能夠從指定的輸入集合產生指定的輸出集合的PLA結構。
圖3示意了圖2中的系統(tǒng)經修改后的結構,它用來完成對第一指令集和第二指令集的譯碼。當通過指令集標志T選擇第一指令集時,系統(tǒng)將按照以上結合圖2所介紹過的過程運轉。當指令集標志T指示指令流水線16中的指令是來自第二指令集時,第二譯碼裝置36將被變?yōu)榛顒訝顟B(tài)。
該第二譯碼裝置采用一個快速PLA 38和一個并行慢速PLA 40對16-位指令(Thumb指令)進行譯碼??焖貾LA 38用來將16-位Thumb指令的各二進制位的一個子集(Q位)映射到用以驅動第一譯碼裝置的對應32-位ARM指令的P位。因為僅有相對較少的位數(shù)需要進行這種映射,快速PLA 38可以相對較“淺”,于是可以足夠迅速地操作,以提供第一譯碼裝置足夠的時間響應PipeC的內容而產生核控制信號32??梢哉J為快速PLA 38是在為第一譯碼裝置“偽造”一個對應32-位指令的關鍵位,而沒有花費任何不必要的時間來映射整條指令。
然而,如果使處理器核2在不做根本性改變和不添加重要附加電路部件的基礎上能夠工作時,那么完整的32-位指令仍然是需要的。在快速PLA 38正在進行關鍵映射的同時,并行相連的慢速PLA 40用來將16-位指令映射到對應的32-位指令,并將之放置于指令寄存器34中。這個更為復雜的映射將貫穿于快速PLA 38和第一譯碼裝置進行操作的整個過程之中。有一點非常重要,那就是,該32-位指令必須在指令寄存器34中存在充分長的時間,這樣使得為了響應核控制信號32對處理器核2產生控制,任意操作數(shù)均可從指令寄存器34中讀取。
比較好的情況是,圖3中的系統(tǒng)在譯碼第二指令集時的全部動作是當?shù)诙噶罴械?6-位指令通過指令流水線16時將其翻譯成第一指令集中的32-位指令。使這一點成為現(xiàn)實可行的措施是將第二指令集做成第一指令集的一個子集,以便保證在第二指令集中的指令和第一指令集中的指令之間存在一個一一映射。
提供指令集標志T使得第二指令集與第一指令集為非正交的關系。這一點在第一指令集是一個已存在的指令集,且沒有任何空余位可用來使另外的正交的指令集被檢測和譯碼的情況下是特別有用的。
圖4示意了一條32-位指令的譯碼過程。在圖4上部所示的連續(xù)的處理器時鐘周期中,完成了一個取操作、一個譯碼操作以及最后的一個執(zhí)行操作。如果所要求的是一條特殊的指令(如一條乘法指令),那么需要增加一個或多個附加的執(zhí)行周期。
一條32-位指令42由許多不同的域組成。后面結合圖7將要介紹,對于不同的指令,這些域的界限也將不同。
指令42中某些位要求在一個初級譯碼階段被譯碼。這些P位是位4至7,位20,和位22至27。正是這些位被第一譯碼裝置30所要求,且必須被快速PLA 38所“偽造”。這些位必須輸入到第一譯碼裝置并在其中譯碼,以便在譯碼周期的第一階段結束之前產生適當?shù)暮丝刂菩盘?2。如果需要的話,對整條指令的譯碼將持續(xù)到譯碼周期的末尾。在譯碼周期的末尾,處理器2在執(zhí)行周期中從指令寄存器34中讀取指令中的操作數(shù)。這些操作數(shù)可以是寄存器號、偏移量或其它變量。
圖5示意了作為例子的16-位指令到32-位指令的映射。粗線起源處為16-位指令中的Q位,它們需要被映射到32-位指令中的P位,以便被輸入到第一譯碼裝置30??梢钥闯?,這些位中的大部分或是直接被復制過去,或是經過一個簡單的映射。16-位指令中的操作數(shù)Rn′,Rd和立即數(shù)需要在其最高有效端用零填充,以填滿32-位指令。由于32-位指令的操作數(shù)范圍要比16-位指令的大,所以上述的填充是必需的。
從圖5下部給出的32-位指令通用結構可以看出,32-位指令比由16-位指令所代表的該指令的子集提供更多的靈活性。例如,32-位指令首部是條件碼Cond,它使該指令成為有條件地可執(zhí)行。相反,16-位指令中不帶有任何條件碼,它們所映射到的32-位指令中的條件碼被置為“1110”,這個值相當于條件執(zhí)行狀態(tài)“總是”。
圖6示意了另一種指令映射。在這個例子中,16-位指令是一個與圖5中所示指令類型不同的取數(shù)/存數(shù)指令。不過,該指令仍然是32-位指令集中簡單數(shù)據(jù)傳輸指令的一個子集。
圖7用圖表方式示意了32-位指令集中的11種不同類型指令的格式。這些指令依次是1.數(shù)據(jù)處理PSR傳輸;2.乘法;3.簡單數(shù)據(jù)交換;4.簡單數(shù)據(jù)傳輸;5.未定義;6.塊數(shù)據(jù)傳輸;7.分支;8.協(xié)處理器數(shù)據(jù)傳輸;9.協(xié)處理器數(shù)據(jù)操作;以及10.協(xié)處理器寄存器傳輸。
11.軟件中斷。
對該指令集的一個完整說明可以在先進RISC機器有限公司(Advanced RISC Machines Limited)生產的ARM6處理器的數(shù)據(jù)表中的得到。圖7中所突出強調的指令是圖5和圖6中所示的指令。
圖8示意了除32-位指令集之外的16-位指令集。在該指令集中所突出強調的指令分別在圖5和圖6中做了示意。該16-位指令集中的指令經過某種選擇,以使它們均可被映射到一條32-位指令,從而形成該32-位指令集的一個子集。
下面所說明的格式依次對應于該指令集中各條指令。格式1Op=0,1兩種操作均置條件碼標志。
0 ADD Rd,Rs,#立即數(shù)31 SUB Rd,Rs,#立即數(shù)3格式2Op=0,1兩種操作均置條件碼標志。
0 ADD Rd,Rm,Rn1 SUB Rd,Rm,Rn格式33個操作碼。用來生成大的立即數(shù)。
1=ADD Rd,Rd,#立即數(shù)8<<82=ADD Rd,Rd,#立即數(shù)8<<163=ADD Rd,Rd,#立即數(shù)8<<24格式4Op給出3個操作碼,所有操作均是MOVS Rd,Rs SHIFT#立即數(shù)5,其中SHIFT為0為LSL1為LSR2為ASR如ARM所定義的那樣,用零進行移位。格式5Op1*8+Op2給出32個ALU操作碼,Rd=Rd op Rn.所有操作均置條件碼標志。這些操作是AND,OR,EOR,BIC(AND NOT),NEGATE,CMP,CMN,MUL,TST,TEQ,MOV,MVN(NOT),LSL,LSR,ASR,ROR丟失ADC,SBC,MULL如ARM所定義的那樣,用零進行移位并且大于318個特殊操作碼,LO指定寄存器0-7,HI指定寄存器8-15SPECIAL是CPSR或SPSRMOV HI,LO(移動隱藏寄存器到可見寄存器)
MOV LO,HI(移動可見寄存器到隱藏寄存器)MOV HI,HI(如過程返回)MOVS HI,HI(如異常返回)MOVS HI,LO(如中斷返回,可以是SUBS HI,HI,#4)MOV SPECIAL,LO(MSR)MOV LO,SPECIAL(MRS)CMP HI,HI(堆棧界限檢查)8個空余操作碼格式6Op給出4個操作碼,所有操作均置條件碼標志0MOV Rd,#立即數(shù)81CMP Rs,#立即數(shù)82ADD Rd,Rd,#立即數(shù)8有可能用ADD Rd,Rs,#立即數(shù)5來替換ADD指令格式7取一個PC+Offset的字(256字,1024字節(jié))。注意,偏移量必須字對齊。
LDR Rd,[pc,#+1024]該指令用來訪問下一個字符區(qū),讀取常數(shù)、地址等等。格式8從SP(r7)+256個字(1024字節(jié))中存取字從SP(r7)+256個字節(jié)中存取字節(jié)LDR Rd,[SP,#+1024)LDRB Rd,[SP,#+256]這些指令用于堆棧和框架訪問格式9以帶符號的3位立即數(shù)偏移量(遲后增/減)存取字(或字節(jié)),強迫回寫L代表存/取,U代表上/下(加/減偏移量),B代表字節(jié)/字LDR{B}Rd,[Rb],#+/-Offset3STR{B}Rd,[Rb],#+/-Offset3這些指令用于數(shù)組的訪問偏移量編碼為0-7時代表字節(jié),編碼為0,4-28時代表字格式10以帶符號的寄存器偏移量(預先增/減)存取字(或字節(jié)),無回寫L代表存/取,U代表上/下(加減偏移量),B代表字節(jié)/字
LDR Rd,[Rb,+/-Ro,LSL#2]STR Rd,[Rb,+/-Ro,LSL#2]LDRB Rd,[Rb,+/-Ro]STRB Rd,[Rb,+/-Ro]這些指令用于“基址+偏移量”型指針的訪問,并且與8-位MOV,ADD,SUB結合時將帶來相當快速的立即數(shù)偏移量的訪問格式11以帶符號的5位立即數(shù)偏移量(預先增/減)存取字(或字節(jié)),無回寫L代表存/取,B代表字節(jié)/字LDR{B}Rd,[Rb,#+Offset5]STR{B}Rd,[Rb,#+Offset5]這些指令用于結構的訪問偏移量編碼為0-31時代表字節(jié),編碼為0,4-124時代表字格式12多重存取(強迫回寫)LDMIA Rb!,{Rlist}STMIA Rb!,{Rlist}Rlist指定寄存器r0-r7這些指令的一個子類是一對子程序調用和返回指令對于LDM,如果r7是基址,而rlist中的位7置位,則PC被取到對于STM,如果r7是基址,而rlist中的位7置位,則LR被存儲如果r7被用作基址寄存器,則以sp取而代之,那么在這兩種情況下,將實現(xiàn)一個全下行堆棧,即LDM類似ARM的LDMFD,STM類似ARM的STMFD因而對塊拷貝,將r7用作結束指針如果r7不是基址寄存器,LDM和STM類似ARM的LDMIA,STMIA格式13取地址。該指令將8位無符號常數(shù)與PC或堆棧指針相加,并將結果存于目的寄存器中ADD Rd,sp,+256字節(jié)ADD Rd,pc,+256字(1024字節(jié))
SP位表明SP或PC哪一個是源如果SP是源,而r7被指定為目的寄存器,則SP被用作目的寄存器格式14條件分支跳轉,+/-128個字節(jié),其中,cond定義了條件碼(象ARM中的那樣),cond=15編碼為SWI(僅256,應該足夠)格式15設置一個長跳轉和連接中的位2212。MOV lr,#offset<<12。格式16進行一個長跳轉和連接。操作為SUB newlr,pc,#4;ORR pc,oldlr,#offset<<1。newlr和oldlr代表在該操作之前和之后的lr寄存器。
如前所述,與32-位指令集相比,16-位指令集操作數(shù)的范圍縮小了。相應地,16-位指令集使用了寄存器6(參看圖1)的一個子集,而該寄存器6是提供給全32-位指令集用的。圖9示意了16-位指令集所使用的寄存器子集。
權利要求
1.一種處理數(shù)據(jù)的裝置,所述裝置包括一個處理器核,它具有N位數(shù)據(jù)通路,并且響應多個核控制信號;第一譯碼裝置,它用于對一第一永久指令集的X位程序指令字進行譯碼以產生所述核控制信號,來觸發(fā)利用所述N位數(shù)據(jù)通路的處理;第二譯碼裝置,它用于對一第二永久指令集的Y位程序指令字進行譯碼以產生所述核控制信號,來觸發(fā)利用所述N位數(shù)據(jù)通路的處理, Y小于X;以及一個指令集切換裝置,它用于在接收到程序指令字時選擇使用所述第一譯碼裝置的一第一處理模式,或者在接收到程序指令字時選擇使用所述第二譯碼裝置的一第二處理模式。
2.根據(jù)權利要求1的裝置,其中所述第二指令集提供了由所述第一指令集提供的操作的一個子集。
3.根據(jù)權利要求1和2的任一權利要求的裝置,其中第二指令集非正交于所述第一指令集。
4.根據(jù)權利要求1、2和3的任一權利要求的裝置,其中所述指令集切換裝置包括響應一個指令集標志的裝置,所述指令集標志可由用戶程序控制進行置位。
5.根據(jù)權利要求4的裝置,其中所述處理器核包括一個用于存儲當前適當?shù)奶幚頎顟B(tài)數(shù)據(jù)的程序狀態(tài)寄存器以及一個保存程序狀態(tài)寄存器,在發(fā)生一個程序異常引起一個異常處理程序執(zhí)行時,所述保存程序狀態(tài)寄存器用于存儲與一個主程序有關的處理狀態(tài)數(shù)據(jù),所述指令集標志是所述處理狀態(tài)數(shù)據(jù)的一部分。
6.根據(jù)前面任一權利要求的裝置,其中所述處理器核包括一個程序計數(shù)器寄存器和一個程序計數(shù)器遞增器,后者用于遞增存儲在所述程序計數(shù)器寄存器中的一個程序計數(shù)器值,以指向下一程序指令字,所述程序計數(shù)器遞增器在所述第一處理模式中而不是在所述第二處理模式中應用一個不同的遞增步長。
7.根據(jù)前面任一權利要求的裝置,其中與所述第一指令集的一個對應的程序指令字相比,所述第二指令集的至少一個程序指令字具有一個減少的操作數(shù)范圍。
8.根據(jù)前面任一權利要求的裝置,其中所述處理器核通過一個Y位數(shù)據(jù)總線連接到一個存儲系統(tǒng),使得所述第二指令集的程序指令字需要一個取周期,而所述第一指令集的程序指令字需要多個取周期。
9.根據(jù)前面任一權利要求的裝置,其中所述第二譯碼裝置重新使用所述第一譯碼裝置的至少一部分。
10.根據(jù)前面任一權利要求的裝置,其中所述裝置是一個集成電路。
11.一種處理數(shù)據(jù)的方法,所述方法包括以下步驟對于具有N位數(shù)據(jù)通路以及響應多個核控制信號的一個處理器核,選擇第一處理模式或第二處理模式;在所述第一處理模式中,對一第一永久指令集的X位程序指令字進行譯碼以產生所述核控制信號,來觸發(fā)利用所述N位數(shù)據(jù)通路的處理;在所述第二處理模式中,對一第二永久指令集的Y位程序指令字進行譯碼以產生所述核控制信號,來觸發(fā)利用所述N位數(shù)據(jù)通路的處理,Y小于X。
全文摘要
描述了一個利用兩個指令集的數(shù)據(jù)處理系統(tǒng),兩個指令集控制使用處理器核(2)的全N位數(shù)據(jù)通路。一個指令集是一32位指令集,而另一個是一16位指令集。兩個指令集都是永久地配備的,而且具有相關的指令譯碼硬件。
文檔編號G06F9/30GK1147307SQ95192870
公開日1997年4月9日 申請日期1995年2月15日 優(yōu)先權日1994年5月3日
發(fā)明者D·V·賈加 申請人:先進Risc機器有限公司