TWI450196B - 非循序執行微處理器之條件儲存指令 - Google Patents

非循序執行微處理器之條件儲存指令 Download PDF

Info

Publication number
TWI450196B
TWI450196B TW101112260A TW101112260A TWI450196B TW I450196 B TWI450196 B TW I450196B TW 101112260 A TW101112260 A TW 101112260A TW 101112260 A TW101112260 A TW 101112260A TW I450196 B TWI450196 B TW I450196B
Authority
TW
Taiwan
Prior art keywords
microinstruction
register
instruction
result
microprocessor
Prior art date
Application number
TW101112260A
Other languages
English (en)
Other versions
TW201301136A (zh
Inventor
G Glenn Henry
Terry Parks
Rodney E Hooker
Gerard M Col
Colin Eddy
Original Assignee
Via Tech Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Priority claimed from US13/224,310 external-priority patent/US8880851B2/en
Priority claimed from US13/333,631 external-priority patent/US8924695B2/en
Priority claimed from US13/333,520 external-priority patent/US9032189B2/en
Priority claimed from US13/333,572 external-priority patent/US8880857B2/en
Priority claimed from US13/413,258 external-priority patent/US9274795B2/en
Priority claimed from US13/413,346 external-priority patent/US9043580B2/en
Priority claimed from US13/412,888 external-priority patent/US9141389B2/en
Priority claimed from US13/413,300 external-priority patent/US20120260073A1/en
Priority claimed from US13/412,914 external-priority patent/US9146742B2/en
Priority claimed from US13/412,904 external-priority patent/US9317288B2/en
Priority claimed from US13/413,314 external-priority patent/US9176733B2/en
Priority claimed from US13/416,879 external-priority patent/US9128701B2/en
Application filed by Via Tech Inc filed Critical Via Tech Inc
Publication of TW201301136A publication Critical patent/TW201301136A/zh
Publication of TWI450196B publication Critical patent/TWI450196B/zh
Application granted granted Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30043LOAD or STORE instructions; Clear instruction
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30072Arrangements for executing specific machine instructions to perform conditional operations, e.g. using predicates or guards
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/3017Runtime instruction translation, e.g. macros
    • G06F9/30174Runtime instruction translation, e.g. macros for non-native instruction set, e.g. Javabyte, legacy code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30181Instruction operation extension or modification
    • G06F9/30189Instruction operation extension or modification according to execution mode, e.g. mode flag
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3854Instruction completion, e.g. retiring, committing or graduating
    • G06F9/3858Result writeback, i.e. updating the architectural state or memory
    • G06F9/38585Result writeback, i.e. updating the architectural state or memory with result invalidation, e.g. nullification

Description

非循序執行微處理器之條件儲存指令
本發明係關於微處理器之技術領域,特別是關於非循序執行(out-of-order execution)微處理器。
由Intel Corporation of Santa Clara,California開發出來的x86處理器架構以及由ARM Ltd.of Cambridge,UK開發出來的進階精簡指令集機器(advanced risc machines,ARM)架構係電腦領域中兩種廣為人知的處理器架構。許多使用ARM或x86處理器之電腦系統已經出現,並且,對於此電腦系統的需求正在快速成長。現今,ARM架構處理核心係主宰低功耗、低價位的電腦的市場需求,例如手機、手持式電子產品、平板電腦、網路路由器與集線器、機上盒等。舉例來說,蘋果iPhone與iPad主要的處理能力即是由ARM架構之處理核心提供。另一方面,x86架構處理器則是主宰需要高效能之高價位市場,例如膝上電腦、桌上型電腦與伺服器等。然而,隨著ARM核心效能的提升,以及某些x86處理器在功耗與成本的改善,前述低價位與高價位市場的界線逐漸模糊。在行動運算市場,如智慧型手機,這兩種架構已經開始激烈競爭。在膝上電腦、桌上型電腦與伺服器市場,可以預期這兩種架構將會有更頻繁的競爭。
前述競爭態勢使得電腦裝置製造業者與消費者陷入兩 難,因無從判斷哪一個架構將會主宰市場。更精確來說,無法判定哪一種架構的軟體開發商將會開發更多軟體。舉例來說,一些每月或每年會定期購買大量電腦系統的消費個體,基於成本效率的考量,例如大量採購的價格優惠與系統維修的簡化等,會傾向於購買具有相同系統配置設定的電腦系統。然而,這些大型消費個體中的使用者群體,對於這些具有相同系統配置設定的電腦系統,往往有各種各樣的運算需求。具體來說,部分使用者的需求是希望能夠在ARM架構處理器上執行程式,其他部分使用者的需求是希望能夠在x86架構處理器上執行程式,甚至有部分使用者希望能夠同時在兩種架構上執行程式。此外,新的、預期外的運算需求也可能出現而需要使用另一種架構。在這些情況下,這些大型個體所投入的部分資金就變成浪費。在另一個例子中,使用者具有一個重要的應用程式,只能在x86架構上執行,因而他購買了x86架構的電腦系統(反之亦然)。不過,這個應用程式的後續版本改為針對ARM架構開發,並且優於原本的x86版本。使用者會希望轉換架構來執行新版本的應用程式,但不幸地,他已經對於不傾向使用的架構投入相當成本。同樣地,使用者原本投資於只能在ARM架構上執行的應用程式,但是後來也希望能夠使用針對x86架構開發而未見於ARM架構的應用程式或是優於以ARM架構開發的應用程式,亦會遭遇這樣的問題,反之亦然。值得注意的是,雖然小實體或是個人投入的金額較大實體為小,然而投資損失比例可能更 高。其他類似之投資損失的例子可能出現在各種不同的運算市場中,例如由x86架構轉換至ARM架構或是由ARM架構轉換至x86架構的情況。最後,投資大量資源來開發新產品的運算裝置製造業者,例如OEM廠商,也會陷入此架構選擇的困境。若是製造業者基於x86或ARM架構研發製造大量產品,而使用者的需求突然改變,則會導致許多有價值之研發資源的浪費。
對於運算裝置之製造業者與消費者,能夠保有其投資免於受到二種架構中何者勝出之影響是有幫助的,因而有必要提出一種解決方法讓系統製造業者發展出可讓使用者同時執行x86架構與ARM架構之程式的運算裝置。
使系統能夠執行多個指令集程式的需求由來已久,這些需求主要是因為消費者會投入相當成本在舊硬體上執行的軟體程式,而其指令集往往不相容於新硬體。舉例來說,IBM 360系統Model 30即具有相容於IBM 1401系統的特徵來緩和使用者由1401系統轉換至較高效能與改良特徵之360系統的痛苦。Model 30具有360系統與1401系統之唯讀儲存控制(Read Only Storage,ROS),使其在輔助儲存空間預先存入所需資訊的情況下能夠使用於1401系統。此外,在軟體程式以高階語言開發的情況下,新的硬體開發商幾乎沒有辦法控制為舊硬體所編譯的軟體程式,而軟體開發商也欠缺動力為新硬體重新編譯(re-compile)源碼,此情形尤其發生在軟體開發商與硬體開發商是不同個體的情況。Siberman與Ebcioglu於Computer,June 1993,No. 6提出之文章“An Architectural Framework for Supporting Heterogeneous Instruction-Set Architectures”。中揭露一種利用執行於精簡指令集(RISC)、超純量架構(superscalar)與超長指令字(VLIW)架構(下稱原生架構)之系統來改善既存複雜指令集(CISC)架構(例如IBM S/390)執行效率的技術,其所揭露之系統包含有執行原生碼之原生引擎(native engine)與執行目的碼之遷移引擎(migrant engine),並可依據轉譯軟體將目的碼(object bode)轉譯為原生碼(native code)的轉譯效果,在這兩種編碼間視需要進行轉換。請參照2006年5月16日公告之美國專利第7,047,394號專利案,Van Dyke et al.揭露一處理器,具有用以執行原生精簡指令集(Tapestry)之程式指令的執行管線,並利用硬體轉譯與軟體轉譯之結合,將x86程式指令轉譯為原生精簡指令集之指令。Nakada et al.提出具有ARM架構之前端管線與Fujitsu FR-V(超長指令字)架構之前端管線的異質多線程處理器(heterogeneous SMT processor),ARM架構前端管線係用於非規則(irregular)軟體程式(如作業系統),而Fujitsu FR-V(超長指令字)架構之前端管線係用於多媒體應用程式,其將一增加的超長指令字佇列提供予FR-V超長指令字之後端管線以維持來自前端管線之指令。請參照Buchty與Weib,eds,Universitatsverlag Karlsruhe於2008年11月在First International Workshop on New Frontiers in High-performance and Hardware-aware Computing(HipHaC’08),Lake Como,Italy,(配合MICRO-41)發表之論文集 (ISBN 978-3-86644-298-6)的文章“OROCHI:A Multiple Instruction Set SMT Processor”。文中提出之方法係用以降低整個系統在異質系統單晶片(SOC)裝置(例如德州儀器OMAP應用處理器)內部所佔據之空間,此異質系統單晶片裝置具有一個ARM處理器核心加上一個或多個協處理器(co-processors)(例如TMS320、多種數位訊號處理器、或是多種圖形處理單元(GPUs))。這些協處理器並不分享指令執行資源,只是整合於同一晶片上之不同處理核心。
軟體轉譯器(software translator)、或稱軟體模擬器(software emulator,software simulator)、動態二進制碼轉譯器等,亦被用於支援將軟體程式在與此軟體程式架構不同之處理器上執行的能力。其中受歡迎的商用實例如搭配蘋果麥金塔(Macintosh)電腦之Motorola 68K-to-PowerPC模擬器,其可在具有PowerPC處理器之麥金塔電腦上執行68K程式,以及後續研發出來之PowerPC-to-x86模擬器,其可在具有x86處理器之麥金塔電腦上執行68K程式。位於加州聖塔克拉拉(Santa Clara,California)的全美達公司,結合超長指令字(VLIW)之核心硬體與“純粹軟體指令之轉譯器(亦即程式碼轉譯軟體(Code Morphing Software))以動態地編譯或模擬(emulate)x86程式碼序列”以執行x86程式碼,請參照2011年維基百科針對全美達(Transmeta)的說明<http://en.wikipedia.org/wiki/Transmeta>。另外,參照1998年11月3日由Kelly et al.提出之美國專利第5,832,205號公告案。IBM的DAISY(Dynamic Architecture Instruction Set from Yorktown)系統具有超長指令字(VLIW)機器與動態二進制軟體轉譯,可提供100%的舊架構軟體相容模擬。DAISY具有位於唯讀記憶體內之虛擬機器觀測器(Virtual Machine Monitor),以平行處理(parallelize)與儲存超長指令字原始碼(VLIW primitives)至未見於舊有系統架構之部分主要記憶體內,期能避免這些舊有體系架構之程式碼片段在後續程序被重新編譯(re-translation)。DAISY具有高速編譯器優化演算法(fast compiler optimization algorithms)以提升效能。QEMU係一具有軟體動態轉譯器之機器模擬器(machine emulator)。QEMU可在多種主系統(host),如x86、PowerPC、ARM、SPARC、Alpha與MIPS,模擬多種中央處理器,如x86、PowerPC、ARM與SPARC。請參照QEMU,a Fast and Portable Dynamic Translator,Fabrice Bellard,USENIX Association,FREENIX Track:2005 USENIX Annual Technical Conference,如同其開發者所稱“動態轉譯器對目標處理器指令執行時的轉換(runtime conversion),將其轉換至主系統指令集,產生的二進制碼係儲存於一轉譯快取以利重複取用。…QEMU〔較之其他動態轉譯器〕遠為簡單,因為它只連接至GNC C編譯器於離線(off line)時所產生的機器碼片段”。同時可參照2009年6月19日Adelaide大學Lee Wang Hao的學位論文“ARM Instruction Set Simulation on Multi-core x86 Hardware”。雖然以軟體轉譯為基礎之解決方案所提供之處理效能可以滿足運算需求之一部分,但是不大能夠滿足多個使用者的情況。
靜態(static)二進位制轉譯是另一種具有高效能潛力的技術。不過,二進位制轉譯技術之使用存在技術上的問題(例如:自我修改程式碼(self-modifying code)、只在執行時(run-time)可知之間接分支(indirect branches)數值)以及商業與法律上的障礙(例如此技術可能需要硬體開發商配合開發散佈新程式所需的管道;對原程式散佈者存在潛在的授權或是著作權侵害的風險)。
ARM指令集架構(ISA)具有條件指令執行之特色。如ARM架構參考手冊(ARM Architecture Reference Manual)第A4-3頁所述:“大部分ARM指令可被有條件地執行。意謂若是APSR中的N、Z、C與V旗標滿足指令所指定的條件,他們才會在程式者之模式操作、記憶體與協同處理器發揮正常的效果。若是這些旗標不滿足條件,指令就會如同一個不操作(NOP)機器指令,此指令執行至下一個正常指令,包括對於例外事件(exception)採行之所有相關的確認動作,但不會有其他效果。”
條件執行有利於減少指令碼的大小,並能透過縮減分支指令的數量來提升效能,但卻會伴隨而來因指令錯誤預測的效能減損。因此,如何有效率地執行條件指令,尤其在支援高微處理器時脈的情況,是亟待解決的問題。
本發明之一實施例提供一種具有一指令集架構之微處理器。指令集架構定義有一條件儲存指令。此微處理器包 含一儲存佇列與一暫存器檔案。此微處理器包含一指令轉譯器,用以將條件儲存指令轉譯為至少二個微指令。其中,條件儲存指令指定暫存器檔案內之一資料暫存器、一基底暫存器與一偏移暫存器。其中,條件儲存指令在微處理器之條件旗標滿足一特定條件時,指示微處理器將來自資料暫存器之資料儲存至一記憶體位置。此微處理器並包含一非循序執行管線,此非循序執行管線包含複數個執行單元以執行這些微指令。其中,為了執行這些微指令內之一第一微指令,這些執行單元其中之一由暫存器檔案接收一基底值與一偏移量,並對應地以基底值與偏移量之一函數產生一第一結果,其中,第一結果係指定記憶體位置之一位址。其中,為了執行這些微指令內之一第二微指令,這些執行單元其中之一接收第一結果,並對應地在條件旗標滿足條件時,將第一結果寫入儲存佇列所分配之一入口,其中,儲存佇列係在後續步驟中將資料寫入前述位址所指定之記憶體位置,而在條件旗標不滿足條件時,刪除儲存佇列所分配之入口,以使儲存佇列無法將資料寫入前述位址所指定之記憶體位置。
本發明之另一實施例提供一種操作一微處理器之方法。微處理器具有一指令集架構定義有一條件儲存指令,此微處理器並具有一儲存佇列與一暫存器檔案。此方法包含:將條件儲存指令轉譯為至少二個微指令,其中,此條件儲存指令係指定暫存器檔案內之一資料暫存器、一基底暫存器與一偏移暫存器,其中,此條件儲存指令在微處理 器之條件旗標滿足一特定條件時,指示微處理器將來自資料暫存器之資料儲存至一記憶體位置。此方法並利用微處理器之一非循序執行管線執行這些微指令。其中,執行這些微指令內之一第一微指令之步驟包含,由暫存器檔案接收一基底值與一偏移量,並對應地以基底值與偏移量之一函數產生一第一結果,其中,第一結果係指定記憶體位置之一位址。其中,執行這些微指令內之一第二微指令之步驟包含,接收第一結果,並對應地在條件旗標滿足條件時,將第一結果寫入儲存佇列所分配之一入口,其中,此儲存佇列係在後續步驟將資料寫入前述位址所指定之記憶體位置,而在條件旗標不滿足條件時,刪除儲存佇列所分配之入口,以使儲存佇列無法將資料寫入前述位址所指定之記憶體位置。
本發明之又一實施例提供一種具有一指令集架構之微處理器。指令集架構定義有一條件儲存指令。此微處理器包含一儲存佇列與一暫存器檔案。此微處理器並包含一指令轉譯器,用以將條件儲存指令轉譯為至少二個微指令,其中,條件儲存指令係指定暫存器檔案內之一資料暫存器與一基底暫存器,其中,基底暫存器係一不同於資料暫存器之暫存器,其中,條件儲存指令在微處理器之條件旗標滿足一特定條件時,指示微處理器將來自資料暫存器之資料儲存至一記憶體位置,其中,條件儲存指令指定基底暫存器在一條件滿足時需被更新。此微處理器並包含一非循序執行管線,此非循序執行管線包含複數個執行單元以執 行這些微指令。其中,為了執行這些微指令內之一第一微指令,這些執行單元其中之一依據由基底暫存器所接收之基底值之一函數計算記憶體位置之位址。在條件旗標滿足條件時,將此位址寫入儲存佇列所分配之一入口,其中,儲存佇列係在後續步驟將資料寫入此位址所指定之記憶體位置,而在條件旗標不滿足條件時,刪除儲存佇列所分配之入口,以使儲存佇列無法將資料寫入此位址所指定之記憶體位置。其中,為了執行這些微指令內之一第二微指令,這些執行單元其中之一接收一偏移量與基底暫存器之一先前數值,對應地計算偏移量與基底暫存器之先前數值之總和,並提供一第一結果,在條件滿足時此第一結果係前述總和,在條件不滿足時,此第一結果係基底暫存器之先前數值。其中,基底暫存器之先前數值包含一微指令執行產生之一結果,其係對應於第二微指令之最近、循序且先前寫入該基底暫存器之數值。
本發明之再一實施例提供一種操作一微處理器之方法,此微處理器具有一指令集架構定義有一條件儲存指令,此微處理器並具有一儲存佇列與一暫存器檔案。此方法包含將條件儲存指令轉譯為至少二個微指令,其中,條件儲存指令係指定暫存器檔案內之一資料暫存器與一基底暫存器,其中,基底暫存器係一不同於資料暫存器之暫存器,其中,條件儲存指令在微處理器之條件旗標滿足一特定條件時,指示微處理器將來自資料暫存器之資料儲存至一記憶體位置,其中,條件儲存指令指定基底暫存器在一 條件滿足時需被更新。此方法更包含利用一非循序執行管線執行該些微指令。其中,執行這些微指令內之一第一微指令之步驟包含依據由基底暫存器所接收之一基底值之一函數計算記憶體位置之一位址。在條件旗標滿足條件時,將此位址寫入儲存佇列所分配之一入口,其中,儲存佇列係在後續步驟將資料寫入前述位址所指定之記憶體位置,而在條件旗標不滿足條件時,刪除儲存佇列所分配之入口,以使儲存佇列無法將資料寫入位址所指定之記憶體位置。其中,執行這些微指令內之一第二微指令之步驟包含,接收一偏移量與基底暫存器之一先前數值,對應地計算偏移量與基底暫存器之先前數值之總和,並提供一第一結果,在條件滿足時第一結果係前述總和,在條件不滿足時,第一結果係基底暫存器之先前數值。其中,基底暫存器之先前數值包含一微指令執行產生之一結果,其係對應於該第二微指令之最近、循序且先前寫入該基底暫存器的數值。
關於本發明之優點與精神可以藉由以下的發明詳述及所附圖式得到進一步的瞭解。
名詞定義
指令集,係定義二進位制編碼值之集合(即機器語言指令)與微處理器所執行操作間的對應關係。機器語言程式基本上以二進位制進行編碼,不過亦可使用其他進位制的系統,如部分早期IBM電腦的機器語言程式,雖然最終 亦是以電壓高低呈現二進位值之物理信號來表現,不過卻是以十進位制進行編碼。機器語言指令指示微處理器執行的操作如:將暫存器1內之運算元與暫存器2內之運算元相加並將結果寫入暫存器3、將記憶體位址0x12345678之運算元減掉指令所指定之立即運算元並將結果寫入暫存器5、依據暫存器7所指定之位元數移動暫存器6內的數值、若是零旗標被設定時,分支到指令後方分割出之36個位元組、將記憶體位址0xABCD0000的數值載入暫存器8。因此,指令集係定義各個機器語言指令使微處理器執行所欲執行之操作的二進位編碼值。需要瞭解的是,指令集定義二進位值與微處理器操作間的對應關係,並不意味著單一個二進位值就會對應至單一個微處理器操作。具體來說,在部分指令集中,多個二進位值可能會對應至同一個微處理器操作。
指令集架構(ISA),從微處理器家族的脈絡來看包含(1)指令集;(2)指令集之指令所能存取之資源集(例如:記憶體定址所需之暫存器與模式);以及(3)微處理器回應指令集之指令執行所產生的例外事件集(例如:除以零、分頁錯誤、記憶體保護違反等)。因為撰寫者,如組譯器與編譯器的撰寫者,想要作出機器語言程式在一微處理器家族執行時,就需要此微處理器家族之ISA定義,所以微處理器家族的製造者通常會將ISA定義於使用者操作手冊中。舉例來說,2009年3月公佈之Intel 64與IA-32架構軟體開發者手冊(Intel 64 and IA-32 Architectures Software Developer’s Manual)即定義Intel 64與IA-32處理器架構的ISA。此軟體開發者手冊包含有五個章節,第一章是基本架構;第二A章是指令集參考A至M;第二B章是指令集參考N至Z;第三A章是系統編程指南;第三B章是系統編程指南第二部分,此手冊係列為本案的參考文件。此種處理器架構通常被稱為x86架構,本文中則是以x86、x86 ISA、x86 ISA家族、x86家族或是相似用語來說明。在另一個例子中,2010年公佈之ARM架構參考手冊,ARM v7-A與ARM v7-R版本Errata markup,定義ARM處理器架構之ISA。此參考手冊係列為參考文件。此ARM處理器架構之ISA在此亦被稱為ARM、ARM ISA、ARM ISA家族、ARM家族或是相似用語。其他眾所周知的ISA家族還有IBM System/360/370/390與z/Architecture、DEC VAX、Motorola 68k、MIPS、SPARC、PowerPC與DEC Alpha等等。ISA的定義會涵蓋處理器家族,因為處理器家族的發展中,製造者會透過在指令集中增加新指令、以及/或在暫存器組中增加新的暫存器等方式來改進原始處理器之ISA。舉例來說,隨著x86程式集架構的發展,其於Intel Pentium III處理器家族導入一組128位元之多媒體擴展指令集(MMX)暫存器作為單指令多重數據流擴展(SSE)指令集的一部分,而x86 ISA機器語言程式已經開發來利用XMM暫存器以提升效能,雖然現存的x86 ISA機器語言程式並不使用單指令多重數據流擴展指令集之XMM暫存器。此外,其他製造商亦設計且製造出可執行x86 ISA機 器語言程式之微處理器。例如,超微半導體(AMD)與威盛電子(VIA Technologies)即在x86 ISA增加新技術特徵,如超微半導體之3DNOW!單指令多重數據流(SIMD)向量處理指令,以及威盛電子之Padlock安全引擎隨機數產生器與先進譯碼引擎(advanced cryptography engine)的技術,前述技術都是採用x86 ISA之機器語言程式,但卻非由現有之Intel微處理器實現。以另一個實例來說明,ARM ISA原本定義ARM指令集狀態具有4位元組之指令。然而,隨著ARM ISA的發展而增加其他指令集狀態,如具有2位元組指令以提升編碼密度之Thumb指令集狀態以及用以加速Java位元組碼程式之Jazelle指令集狀態,而ARM ISA機器語言程式已被發展來使用部分或所有其他ARM ISA指令集狀態,即使現存的ARM ISA機器語言程式並未採用這些其他ARM ISA指令集狀態。
指令集架構(ISA)機器語言程式,包含ISA指令序列,即ISA指令集對應至程式撰寫者要程式執行之操作序列的二進位編碼值序列。因此,x86 ISA機器語言程式包含x86 ISA指令序列,ARM ISA機器語言程式則包含ARM ISA指令序列。機器語言程式指令係存放於記憶體內,且由微處理器擷取並執行。
硬體指令轉譯器,包含多個電晶體的配置,用以接收ISA機器語言指令(例如x86 ISA或是ARM ISA機器語言指令)作為輸入,並對應地輸出一個或多個微指令至微處理器之執行管線。執行管線執行微指令的執行結果係由 ISA指令所定義。因此,執行管線透過對這些微指令的集體執行(collective execution)來“實現”ISA指令。也就是說,執行管線透過對於硬體指令轉譯器輸出之實行微指令的集體執行,實現所輸入ISA指令所指定之操作,以產生此ISA指令定義的結果。因此,硬體指令轉譯器可視為是將ISA指令“轉譯(translate)”為一個或多個實行微指令。本實施例所描述之微處理器具有硬體指令轉譯器以將x86 ISA指令與ARM ISA指令轉譯為微指令。不過,需理解的是,硬體指令轉譯器並非必然可對x86使用者操作手冊或是ARM使用者操作手冊所定義的整個指令集進行轉譯,而往往只能轉譯這些指令中一個子集合,如同絕大多數x86 ISA與ARM ISA處理器只支援其相對應之使用者操作手冊所定義的一個指令子集合。具體來說,x86使用者操作手冊定義而由硬體指令轉譯器轉譯之指令子集合,不必然就對應至所有現存的x86 ISA處理器,ARM使用者操作手冊定義而由硬體指令轉譯器轉譯之指令子集合,不必然就對應至所有現存的ARM ISA處理器。
執行管線係一多層序列(sequence of stages),此多層序級列之各個層級分別具有硬體邏輯與一硬體暫存器。硬體暫存器係保持硬體邏輯之輸出信號,並依據微處理器之時脈信號,將此輸出信號提供至多層級序列之下一層級。執行管線可以具有複數個多層級序列,例多重執行管線(multiple pipelines)。執行管線接收微指令作為輸入信號,並相應地執行微指令所指定的操作以輸出執行結果。微指 令所指定,且由執行管線之硬體邏輯所執行的操作包括但不限於算術、邏輯、記憶體載入/儲存、比較、測試、與分支解析,對進行操作的資料格式包括但不限於整數、浮點數、字元、二進編碼十進數(BCD)、與壓縮格式(packed format)。執行管線執行微指令以實現ISA指令(如x86與ARM),藉以產生ISA指令所定義的結果。執行管線不同於硬體指令轉譯器。具體來說,硬體指令轉譯器產生實行微指令,執行管線則是執行這些指令,但不產生實行這些微指令。
指令快取,係微處理器內的一個隨機存取記憶裝置,微處理器將ISA機器語言程式之指令(例如x86 ISA與ARM ISA的機器語言指令)放置其中,這些指令係擷取自系統記憶體並由微處理器依據ISA機器語言程式之執行流程來執行。具體來說,ISA定義一指令位址暫存器以擷取下一個待執行ISA指令的記憶體位址(舉例來說,在x86 ISA係定義為指令指標(IP)而在ARM ISA係定義為程式計數器(PC)),而在微處理器執行機器語言程式以控制程式流程時,微處理器會更新指令位址暫存器的內容。ISA指令係被快取來供後續擷取之用。當該暫存器所包含的下一個機器語言程式的ISA指令位址係位於目前的指令快取中,可依據指令暫存器的內容快速地從指令快取擷取ISA指令,而非由系統記憶體中取出該ISA指令。尤其是,此程序係基於指令位址暫存器(如指令指標(IP)或是程式計數器(PC))的記憶體位址向指令快取取得資料,而非特地運用 一載入或儲存指令所指定之記憶體位址來進行資料擷取。因此,將指令集架構之指令視為資料(例如採用軟體轉譯之系統的硬體部分所呈現的資料)之專用資料快取,特地運用一載入/儲存位址,而非基於指令位址暫存器的數值,就不是此處所稱的指令快取。此外,可取得指令與資料之混合式快取,係基於指令位址暫存器的數值以及基於載入/儲存位址,而非僅僅基於載入/儲存位址,亦被涵蓋在本說明對指令快取的定義內。在本說明內容中,載入指令係指將資料由記憶體讀取至微處理器之指令,儲存指令係指將資料由微處理器寫入記憶體之指令。
微指令集,係微處理器之執行管線能夠執行之指令(微指令)的集合。
實施例說明
本發明實施例揭露之微處理器可透過硬體將其對應之x86 ISA與ARM ISA指令轉譯為由微處理器執行管線直接執行之微指令,以達到可執行x86 ISA與ARM ISA機器語言程式之目的。此微指令係由不同於x86 ISA與ARM ISA之微處理器微架構(microarchitecture)的微指令集所定義。由於本文所述之微處理器需要執行x86與ARM機器語言程式,微處理器之硬體指令轉譯器會將x86與ARM指令轉譯為微指令,並將這些微指令提供至微處理器之執行管線,由微處理器執行這些微指令以實現前述x86與ARM指令。由於這些實行微指令係直接由硬體指令轉譯器提供至執行管線來執行,而不同於採用軟體轉譯器之系統需於 執行管線執行指令前,將預先儲存本機(host)指令至記憶體,因此前揭微處理器具有潛力能夠以較快的執行速度執行x86與ARM機器語言程式。
第1圖係一方塊圖顯示本發明執行x86 ISA與ARM ISA機器語言程式之微處理器100之實施例。此微處理器100具有一指令快取102;一硬體指令轉譯器104,用以由指令快取102接收x86 ISA指令與ARM ISA指令124並將其轉譯為微指令126;一執行管線112,執行由硬體指令轉譯器104接收之微指令126以產生微指令結果128,該結果係以運算元的型式回傳至執行管線112;一暫存器檔案106與一記憶體子系統108,分別提供運算元至執行管線112並由執行管線112接收微指令結果128;一指令擷取單元與分支預測器114,提供一擷取位址134至指令快取102;一ARM ISA定義之程式計數器暫存器116與一x86 ISA定義之指令指標暫存器118,依據微指令結果128進行更新,且提供其內容至指令擷取單元與分支預測器114;以及多個組態暫存器122,提供一指令模式指標132與一環境模式指標136至硬體指令轉譯器104與指令擷取單元與分支預測器114,並基於微指令結果128進行更新。
由於微處理器100可執行x86 ISA與ARM ISA機器語言指令,微處理器100係依據程式流程由系統記憶體(圖未示)擷取指令至微處理器100。微處理器100存取最近擷取的x86 ISA與ARM ISA之機器語言指令至指令快取102。指令擷取單元114依據將由系統記憶體擷取之x86 或ARM指令位元組區段,產生一擷取位址134。若是命中指令快取102,指令快取102將位於擷取位址134之x86或ARM指令位元組區段提供至硬體指令轉譯器104,否則由系統記憶體中擷取指令集架構的指令124。指令擷取單元114係基於ARM程式計數器116與x86指令指標118的值產生擷取位址134。具體來說,指令擷取單元114會在一擷取位址暫存器中維持一擷取位址。任何時候指令擷取單元114擷取到新的ISA指令位元組區段,它就會依據此區段的大小更新擷取位址,並依據既有方式依序進行,直到出現一控制流程事件為止。控制流程事件包含例外事件的產生、分支預測器114的預測顯示擷取區段內有一將發生的分支(taken branch)、以及由執行管線112回應一非由分支預測器114所預測之將發生分支指令之執行結果,而對ARM程式計數器116與x86指令指標118進行之更新。指令擷取單元114係將擷取位址相應地更新為例外處理程序位址、預測目標位址或是執行目標位址以回應一控制流程事件。在一實施例中,指令快取102係一混合快取,以存取ISA指令124與資料。值得注意的是,在此混合快取之實施例中,雖然混合快取可基於一載入/儲存位址將資料寫入快取或由快取讀取資料,在微處理器100係由混合快取擷取指令集架構之指令124的情況下,混合快取係基於ARM程式計數器116與x86指令指標118的數值來存取,而非基於載入/儲存位址。指令快取102可以係一隨機存取記憶體裝置。
指令模式指標132係一狀態指示微處理器100當前是否正在擷取、格式化(formatting)/解碼、以及將x86 ISA或ARM ISA指令124轉譯為微指令126。此外,執行管線112與記憶體子系統108接收此指令模式指標132,此指令模式指標132會影響微指令126的執行方式,儘管只是微指令集內的一個小集合受影響而已。x86指令指標暫存器118持有下一個待執行之x86 ISA指令124的記憶體位址,ARM程式計數器暫存器116持有下一個待執行之ARM ISA指令124的記憶體位址。為了控制程式流程,微處理器100在其執行x86與ARM機器語言程式時,分別更新x86指令指標暫存器118與ARM程式計數器暫存器116至下一個指令、分支指令之目標位址或是例外處理程序位址。在微處理器100執行x86與ARM ISA之機器語言程式的指令時,微處理器100係由系統記憶體擷取機器語言程式之指令集架構的指令,並將其置入指令快取102以取代最近較不被擷取與執行的指令。此指令擷取單元114基於x86指令指標暫存器118或是ARM程式計數器暫存器116的數值,並依據指令模式指標132指示微處理器100正在擷取的ISA指令124是x86或是ARM模式來產生擷取位址134。在一實施例中,x86指令指標暫存器118與ARM程式計數器暫存器116可實施為一共享的硬體指令位址暫存器,用以提供其內容至指令擷取單元與分支預測器114並由執行管線112依據指令模式指標132指示之模式是x86或ARM與x86或ARM之語意(semantics)來進行更新。
環境模式指標136一狀態係指示微處理器100是使用x86或ARM ISA之語意於此微處理器100所操作之多種執行環境,例如虛擬記憶體、例外事件、快取控制、與全域執行時間保護。因此,指令模式指標132與環境模式指標136共同產生多個執行模式。在第一種模式中,指令模式指標132與環境模式指標136都指向x86 ISA,微處理器100係作為一般的x86 ISA處理器。在第二種模式中,指令模式指標132與環境模式指標136都指向ARM ISA,微處理器100係作為一般的ARM ISA處理器。在第三種模式中,指令模式指標132指向x86 ISA,不過環境模式指標136則是指向ARM ISA,此模式有利於在ARM作業系統或是超管理器之控制下執行使用者模式x86機器語言程式;相反地,在第四種模式中,指令模式指標132係指向ARM ISA,不過環境模式指標136則是指向x86 ISA,此模式有利於在x86作業系統或超管理器之控制下執行使用者模式ARM機器語言程式。指令模式指標132與環境模式指標136的數值在重置(reset)之初就已確定。在一實施例中,此初始值係被視為微碼常數進行編碼,不過可透過熔斷組態熔絲與/或使用微碼修補丁進行修改。在另一實施例中,此初始值則是由一外部輸入提供至微處理器100。在一實施例中,環境模式指標136只在由一重置至ARM(reset-to-ARM)指令124或是一重置至x86(reset-to-x86)指令124執行重置後才會改變(請參照下述第6A及6B圖);亦即,在微處理器100正常運作而未 由一般重置、重置至x86或重置至ARM指令124執行重置時,環境模式指標136並不會改變。
硬體指令轉譯器104接收x86與ARM ISA之機器語言指令124作為輸入信號,相應地提供一個或多個微指令126作為輸出以實現x86或ARM ISA指令124。執行管線112執行前揭一個或多個微指令126,其集體執行之結果實現x86或ARM ISA指令124。也就是說,這些微指令126的集體執行可依據輸入端所指定的x86或ARM ISA指令124,來執行x86或是ARM ISA指令124所特定的操作,以產生x86或ARM ISA指令124所定義的結果。因此,硬體指令轉譯器104係將x86或ARM ISA指令124轉譯為一個或多個微指令126。硬體指令轉譯器104包含一組電晶體,以一預設方式進行配置來將x86 ISA與ARM ISA之機器語言指令124轉譯為實行微指令126。硬體指令轉譯器104並具有布林邏輯閘以產生實行微指令126(如第2圖所示之簡單指令轉譯器204)。在一實施例中,硬體指令轉譯器104並具有一微碼唯讀記憶體(如第2圖中複雜指令轉譯器206之元件234),硬體指令轉譯器104利用此微碼唯讀記憶體,並依據複雜ISA指令124產生實行微指令126,這部份將在第2圖的說明內容會有進一步的說明。就一較佳實施例而言,硬體指令轉譯器104不必然要能轉譯x86使用者操作手冊或是ARM使用者操作手冊所定義之整個ISA指令124集,而只要能夠轉譯這些指令的一個子集合即可。具體來說,由x86使用者操作手冊定義且由硬 體指令轉譯器104轉譯的ISA指令124的子集合,並不必然對應至任何Intel開發之既有x86 ISA處理器,而由ARM使用者操作手冊定義且由硬體指令轉譯器104轉譯之ISA指令124的子集合並不必然對應至任何由ARM Ltd.開發之既有的ISA處理器。前揭一個或多個用以實現x86或ARM ISA指令124的實行微指令126,可由硬體指令轉譯器104一次全部提供至執行管線112或是依序提供。本實施例的優點在於,硬體指令轉譯器104可將實行微指令126直接提供至執行管線112執行,而不需要將這些微指令126儲存於設置兩者間之記憶體。在第1圖之微處理器100的實施例中,當微處理器100執行x86或是ARM機器語言程式時,微處理器100每次執行x86或是ARM指令124時,硬體指令轉譯器104就會將x86或ARM機器語言指令124轉譯為一個或多個微指令126。不過,第8圖的實施例則是利用一微指令快取以避免微處理器100每次執行x86或ARM ISA指令124所會遭遇到之重複轉譯的問題。硬體指令轉譯器104之實施例在第2圖會有更詳細的說明。
執行管線112執行由硬體指令轉譯器104提供之實行微指令126。基本上,執行管線112係一通用高速微指令處理器。雖然本文所描述的功能係由具有x86/ARM特定特徵的執行管線112執行,但大多數x86/ARM特定功能其實是由此微處理器100的其他部分,如硬體指令轉譯器104,來執行。在一實施例中,執行管線112執行由硬體指令轉譯器104接收到之實行微指令126的暫存器重命名(register renaming)、超純量發布、與非循序執行。執行管線112在第4圖會有更詳細的說明。
微處理器100的微架構包含:(1)微指令集;(2)微指令集之微指令126所能取用之資源集,此資源集係x86與ARM ISA之資源的超集合(superset);以及(3)微處理器100相應於微指令126之執行所定義的微例外事件(micro-exception)集,此微例外事件集係x86 ISA與ARM ISA之例外事件的超集合。此微架構不同於x86 ISA與ARM ISA。具體來說,此微指令集在許多面向不同於x86 ISA與ARM ISA之指令集。首先,微指令集之微指令指示執行管線112執行的操作與x86 ISA與ARM ISA之指令集的指令指示微處理器執行的操作並非一對一對應。雖然其中許多操作相同,不過仍有一些微指令集指定的操作並非x86 ISA及/或ARM ISA指令集所指定。相反地,有一些x86 ISA及/或ARM ISA指令集指定的操作並非微指令集所指定。其次,微指令集之微指令係以不同於x86 ISA與ARM ISA指令集之指令的編碼方式進行編碼。亦即,雖然有許多相同的操作(如:相加、偏移、載入、返回)在微指令集以及x86與ARM ISA指令集中都有指定,微指令集與x86或ARM ISA指令集的二進制操作碼值對應表並沒有一對一對應。微指令集與x86或ARM ISA指令集的二進制操作碼值對應表相同通常是巧合,其間仍不具有一對一的對應關係。第三,微指令集之微指令位元欄與x86或是ARM ISA指令集之指令位元欄也不是一對一對應。
整體而言,微處理器100可執行x86 ISA與ARM ISA機器語言程式指令。然而,執行管線112本身無法執行x86或ARM ISA機器語言指令;而是執行由x86 ISA與ARM ISA指令轉譯成之微處理器100微架構之微指令集的實行微指令126。然而,雖然此微架構與x86 ISA以及ARM ISA不同,本發明亦提出其他實施例將微指令集與其他微架構特定的資源係開放給使用者。在這些實施例中,此微架構可有效地作為在x86 ISA與ARM ISA外之一個具有微處理器所能執行之機器語言程式的第三ISA。
微處理器100也包含一些微架構特定的資源,如微架構特定的通用暫存器、媒體暫存器與區段暫存器(如用於重命名的暫存器或由微碼所使用的暫存器)以及未見於x86或ARM ISA的控制暫存器,以及一私有隨機存取記憶體(PRAM)。此外,此微架構可產生例外事件,亦即前述之微例外事件,這些例外事件未見於x86或ARM ISA或是由它們所指定。需理解的是,本文表1所列的位元欄,表2所列的微指令,以及微架構特定的資源與微架構特定的例外事件,只是作為例示說明本發明之微架構,而非窮盡本發明之所有可能實施例。
暫存器檔案106包含硬體暫存器,並為微指令126持有來源及/或目的運算元。執行管線112將其微指令結果128寫入暫存器檔案106,並由暫存器檔案106為微指令126接收運算元。硬體暫存器係引用(instantiate)x86 ISA定義與ARM ISA定義通用暫存器係共享暫存器檔案106中之一些暫存器。舉例來說,在一實施例中,暫存器檔案106係引用十五個32位元的暫存器,由ARM ISA暫存器R0至R14以及x86 ISA累積暫存器(EAX register)至R14D暫存器所共享。因此,若是一第一微指令126將一數值寫入 ARM R2暫存器,隨後一後續的第二微指令126讀取x86累積暫存器將會接收到與第一微指令126寫入相同的數值,反之亦然。此技術特徵有利於使x86 ISA與ARM ISA之機器語言程式得以快速透過暫存器進行溝通。舉例來說,假設在ARM機器語言作業系統執行的ARM機器語言程式能使指令模式132改變為x86 ISA,並將控制權轉換至一x86機器語言程序以執行特定功能,因為x86 ISA可支援一些指令,其執行操作的速度快於ARM ISA,在這種情形下將有利於執行速度的提升。ARM程式透過暫存器檔案106之共享暫存器提供需要的資料給x86執行程序。反之,x86執行程序可將執行結果提供至暫存器檔案106之共享暫存器內,以使ARM程式在x86執行程序回覆後可見到此執行結果。相似地,在x86機器語言作業系統執行之x86機器語言程式可使指令模式132改變為ARM ISA並將控制權轉換至ARM機器語言程序;此x86程式可透過暫存器檔案106之共享暫存器提供所需的資料給ARM執行程序,而此ARM執行程序可透過暫存器檔案106之共享暫存器提供執行結果,以使x86程式在ARM執行程序回覆後可見到此執行結果。因為ARM R15暫存器係一獨立引用的ARM程式計數器暫存器116,因此,引用x86 R15D暫存器的第十六個32位元暫存器並不分享給ARM R15暫存器。此外,在一實施例中,x86之十六個128位元XMM0至XMM15暫存器與十六個128位元進階單指令多重數據擴展(Advanced SIMD(“Neon”))暫存器的32位 元區段係分享給三十二個32位元ARM VFPv3浮點暫存器。暫存器檔案106亦引用旗標暫存器(即x86 EFLAGS暫存器與ARM條件旗標暫存器),以及x86 ISA與ARM ISA所定義之多種控制權與狀態暫存器,這些架構控制與狀態暫存器包括x86架構之特定模型暫存器(model specific registers,MSRs)與保留給ARM架構的協同處理器(8-15)暫存器。此暫存器檔案106亦引用非架構暫存器,如用於暫存器重命名或是由微碼234所使用的非架構通用暫存器、以及非架構x86特定模型暫存器與實作定義的、或是由製造商指定之ARM協同處理器暫存器。暫存器檔案106在第5圖會有更進一步的說明。
記憶體次系統108包含一由快取記憶體構成的快取記憶體階層架構(在一實施例中包含第1層(level-1)指令快取102、第1層(level-1)資料快取與第2層混合快取)。此記憶體次系統108包含多種記憶體請求佇列,如載入、儲存、填入、窺探、合併寫入(write-combine)緩衝區。記憶體次系統亦包含一記憶體管理單元(MMU)。記憶體管理單元具有轉譯後備緩衝區(TLBs),尤以獨立的指令與資料轉譯後備緩衝區為佳。記憶體次系統還包含一查表引擎(table walk engine)以獲得虛擬與實體位址間之轉譯,來回應轉譯後備緩衝區的錯失。雖然在第1圖中指令快取102與記憶體次系統108係顯示為各自獨立,不過,在邏輯上,指令快取102亦是記憶體次系統108的一部分。記憶體次系統108係設定使x86與ARM機器語言程式分享一共同的記憶空 間,以使x86與ARM機器語言程式容易透過記憶體互相溝通。
記憶體次系統108得知指令模式132與環境模式136,使其能夠在適當ISA內容中執行多種操作。舉例來說,記憶體次系統108依據指令模式指標132指示為x86或ARM ISA,來執行特定記憶體存取違規的檢驗(例如過限檢驗(limit violation check))。在另一實施例中,回應環境模式指標136的改變,記憶體次系統108會更新(flush)轉譯後備緩衝區;不過在指令模式指標132改變時,記憶體次系統108並不相應地更新轉譯後備緩衝區,以在前述指令模式指標132與環境模式指標136分指x86與ARM之第三與第四模式中提供較佳的效能。在另一實施例中,回應一轉譯後備緩衝區錯失(TKB miss),查表引擎依據環境模式指標136指示為x86或ARM ISA,從而決定利用x86分頁表或ARM分頁表來執行一分頁查表動作以取出轉譯後備緩衝區。在另一實施例中,若是環境狀態指標136指示為x86 ISA,記憶體次系統108檢查會影響快取策略之x86 ISA控制暫存器(如CR0 CD與NW位元)的架構狀態,若是環境模式指標136指示為ARM ISA,則檢查相關之ARM ISA控制暫存器(如SCTLR I與C位元)的架構模式。在另一實施例中,若是狀態指標136指示為x86 ISA,記憶體次系統108檢查會影響記憶體管理之x86 ISA控制暫存器(如CR0 PG位元)的架構狀態;若是環境模式指標136指示為ARM ISA,則檢查相關之ARM ISA控 制暫存器(如SCTLR M位元)的架構模式。在另一實施例中,若是狀態指標136指示為x86 ISA,記憶體次系統108檢查會影響對準檢測之x86 ISA控制暫存器(如CR0 AM位元)的架構狀態;若是環境模式指標136指示為ARM ISA,則檢查相關之ARM ISA控制暫存器(如SCTLR A位元)的架構模式。在另一實施例中,若是狀態指標136指示為x86 ISA,記憶體次系統108(以及用於特權指令之硬體指令轉譯器104)檢查當前所指定特權級(CPL)之x86 ISA控制暫存器的架構狀態;若是環境模式指標136指示為ARM ISA,則檢查指示使用者或特權模式之相關ARM ISA控制暫存器的架構模式。不過,在一實施例中,x86 ISA與ARM ISA係分享微處理器100中具有相似功能之控制位元組/暫存器,微處理器100並不對各個指令集架構引用獨立的控制位元組/暫存器。
雖然組態暫存器122與暫存器檔案106在圖示中是各自獨立,不過組態暫存器122可被理解為暫存器檔案106的一部分。組態暫存器122具有一全域組態暫存器,用以控制微處理器100在x86 ISA與ARM ISA各種不同面向的操作,例如使多種特徵生效或失效的功能。全域組態暫存器可使微處理器100執行ARM ISA機器語言程式之能力失效,即讓微處理器100成為一個僅能執行x86指令的微處理器100,並可使其他相關且專屬於ARM的能力(如啟動x86(launch-x86)與重置至x86的指令124與本文所稱之實作定義協同處理器暫存器)失效。全域組態暫存器亦可 使微處理器100執行x86 ISA機器語言程式的能力失效,亦即讓微處理器100成為一個僅能執行ARM指令的微處理器100,並可使其他相關的能力(如啟動ARM與重置至ARM的指令124與本文所稱之新的非架構特定模型暫存器)失效。在一實施例中,微處理器100在製造時具有預設的組態設定,如微碼234中之硬式編碼值,此微碼234在啟動時係利用此硬式編碼值來設定微處理器100的組態,例如寫入編碼暫存器122。不過,部分編碼暫存器122係以硬體而非以微碼234進行設定。此外,微處理器100具有多個熔絲,可由微碼234進行讀取。這些熔絲可被熔斷以修改預設組態值。在一實施例中,微碼234讀取熔絲值,對預設值與熔絲值執行一互斥或操作,並將操作結果寫入組態暫存器122。此外,對於熔絲值修改的效果可利用一微碼234修補(patch)而回復。在微處理器100能夠執行x86與ARM程式的情況下,全域組態暫存器可用於確認微處理器100(或如第7圖所示處理器之多核心部分之一特定核心100)在重置或如第6A及6B圖所示在回應x86形式之INIT指令時,會以x86微處理器的形態還是以ARM微處理器的形態進行開機。全域組態暫存器並具有一些位元提供起始預設值給特定的架構控制暫存器,如ARM ISASCTLT與CPACR暫存器。第7圖所示之多核心的實施例中僅具有一個全域組態暫存器,即使各核心的組態可分別設定,如在指令模式指標132與環境模式指標136都設定為x86或ARM時,選擇以x86核心或是ARM核心開機。 此外,啟動ARM指令126與啟動x86指令126可用以在x86與ARM指令模式132間動態切換。在一實施例中,全域組態暫存器可透過一x86 RDMSR指令對一新的非架構特定模型暫存器進行讀取,並且其中部分的控制位元可透過x86 WRMSR指令對前揭新的非架構特定模型暫存器之寫入來進行寫入操作。全域組態暫存器還可透過ARM MCR/MCRR指令對一對應至前揭新的非架構特定模型暫存器之ARM協同處理器暫存器進行讀取,而其中部分的控制位元可透過ARM MRC/MRRC指令對應至此新的非架構特定模型暫存器的ARM協同處理器暫存器之寫入來進行寫入操作。
組態暫存器122並包含多種不同的控制暫存器從不同面向控制微處理器100的操作。這些非x86(non-x86)/ARM的控制暫存器包括本文所稱之全域控制暫存器、非指令集架構控制暫存器、非x86/ARM控制暫存器、通用控制暫存器、以及其他類似的暫存器。在一實施例中,這些控制暫存器可利用x86 RDMSR/WRMSR指令至非架構特定模型暫存器(MSRs)進行存取、以及利用ARM MCR/MRC(或MCRR/MRRC)指令至新實作定義之協同處理器暫存器進行存取。舉例來說,微處理器100包含非x86/ARM之控制暫存器,以確認微型(fine-grained)快取控制,此微型快取控制係小於x86 ISA與ARM ISA控制暫存器所能提供者。
在一實施例中,微處理器100提供ARM ISA機器語言程式透過實作定義ARM ISA協同處理器暫存器存取x86 ISA特定模型暫存器,這些實作定義ARM ISA協同處理器暫存器係直接對應於相對應的x86特定模型暫存器。此特定模型暫存器的位址係指定於ARM ISA R1暫存器。此資料係由MRC/MRRC/MCR/MCRR指令所指定之ARM ISA暫存器讀出或寫入。在一實施例中,特定模型暫存器之一子集合係以密碼保護,亦即指令在嘗試存取特定模型暫存器時必須使用密碼,在此實施例中,密碼指定於ARM R7:R6暫存器。若是此存取動作導致x86通用保護錯誤,微處理器100隨即產生一ARM ISA未定義指令中止模式(UND)例外事件。在一實施例中,ARM協同處理器4(位址為:0,7,15,0)係存取相對應的x86特定模型暫存器。
微處理器100並包含一個耦接至執行管線112之中斷控制器(未圖示)。在一實施例中,此中斷控制器係一x86型式之先進可程式化中斷控制器(APIC)。中斷控制器係將x86 ISA中斷事件對應至ARM ISA中斷事件。在一實施例中,x86 INTR係對應至ARM IRQ中斷事件;x86 NMI對應至ARM IRQ中斷事件;x86 INIT在微處理器100啟動時引發起動重置循序過程(INIT-reset sequence),無論那一個指令集架構(x86或ARM)原本是由硬體重置啟動的;x86 SMI對應至ARM FIQ中斷事件;以及x86 STPCLK、A20、Thermal、PREQ、與Rebranch則不對應至ARM中斷事件。ARM機器語言能透過新的實作定義之ARM協同處理器暫存器存取先進可程式化中斷控制器(APIC)之功能。在一實施例中,APIC暫存器位址係指定於ARM R0 暫存器,此APIC暫存器的位址與x86的位址相同。在一實施例中,ARM協處理器6係通常用於作業系統執行之特權模式功能。此ARM協處理器6的位址為:0,7,nn,0;其中nn為15時以可存取先進可程式化中斷控制器;nn為12-14時以存取匯流排介面單元,藉以在處理器匯流排上執行8位元、16位元與32位元輸入/輸出循環。微處理器100並包含一匯流排介面單元(圖未示),此匯流排介面單元耦接至記憶體次系統108與執行管線112,作為微處理器100與處理器匯流排之介面。在一實施例中,處理器匯流排符合一個Intel Pentium微處理器家族之微處理器匯流排的規格。ARM機器語言程式可透過新的實作定義之ARM協同處理器暫存器存取匯流排介面單元之功能以在處理器匯流排上產生輸入/輸出循環,即由輸入輸出匯流排傳送至輸入輸出空間之一特定位址,藉以與系統晶片組溝通,舉例來說,ARM機器語言程式可產生一SMI認可之特定循環或是關於C狀態轉換之輸入輸出循環。在一實施例中,輸入輸出位址係指定於ARM R0暫存器。在一實施例中,微處理器100具有電力管理能力,如習知的P-state與C-state管理。ARM機器語言程式可透過新的實作定義ARM協同處理器暫存器執行電力管理。在一實施例中,微處理器100包含一加密單元(圖未示),此加密單元係位於執行管線112內。在一實施例中,此加密單元實質上類似於具有Padlock安全科技功能之VIA微處理器的加密單元。ARM機器語言程式能透過新的實作定義的ARM協同 處理器暫存器取得加密單元的功能,如加密指令。在一實施例中,ARM協處理器5係用於通常由使用者模式應用程式執行之使用者模式功能,例如那些使用加密單元之技術特徵所產生的功能。
在微處理器100執行x86 ISA與ARM ISA機器語言程式時,每一次微處理器100執行x86或是ARM ISA指令124,硬體指令轉譯器104就會執行硬體轉譯。反之,採用軟體轉譯之系統則能在多個事件中重複使用同一個轉譯,而非對之前已轉譯過的機器語言指令重複轉譯,因而有助於改善效能。此外,第8圖之實施例使用微指令快取以避免微處理器每一次執行x86或ARM ISA指令124時可能發生之重複轉譯動作。本發明之前述各個實施例所描述的方式係配合不同之程式特徵及其執行環境,因此確實有助於改善效能。
分支預測器114存取之前執行過的x86與ARM分支指令的歷史資料。分支預測器114依據之前的快取歷史資料,來分析由指令快取102所取得快取線是否存在x86與ARM分支指令以及其目標位址。在一實施例中,快取歷史資料包含分支指令124的記憶體位址、分支目標位址、一個方向指標、分支指令的種類、分支指令在快取線的起始位元組、以及一個顯示是否橫跨多個快取線的指標。在一實施例中,如2011年4月7日提出之美國第61/473,067號臨時申請案“APPARATUS AND METHOD FOR USING BRANCH PREDICTION TO EFFICIENTIY EXECUTE CONDITIONAL NON-BRANCH INSTRUCTIONS”,其提供改善分支預測器114之效能以使其能預測ARM ISA條件非分支指令方向的方法。在一實施例中,硬體指令轉譯器104並包含一靜態分支預測器,可依據執行碼、條件碼之類型、向後(backward)或向前(forward)等等資料,預測x86與ARM分支指令之方向與分支目標位址。
本發明亦考量多種不同的實施例以實現x86 ISA與ARM ISA定義之不同特徵的組合。舉例來說,在一實施例中,微處理器100實現ARM、Thumb、ThumbEE與Jazelle指令集狀態,但對Jazelle擴充指令集則是提供無意義的實現(trivial implementation);微處理器100並實現下述擴充指令集,包含:Thumb-2、VFPv3-D32、進階單指令多重數據(Advanced SIMD(Neon))、多重處理、與VMSA;但不實現下述擴充指令集,包含:安全性擴充、快速內容切換擴充、ARM除錯(ARM程式可透過ARM MCR/MRC指令至新的實作定義協同處理器暫存器取得x86除錯功能)、效能偵測計數器(ARM程式可透過新的實作定義協同處理器暫存器取得x86效能計數器)。舉例來說,在一實施例中,微處理器100將ARM SETEND指令視為一無操作指令(NOP)並且只支援Little-endian資料格式。在另一實施例中,微處理器100並不實現x86 SSE 4.2的功能。
本發明考量多個實施例之微處理器100之改良,例如對台灣台北的威盛電子股份有限公司所生產之商用微處理器VIA NanoTM 進行改良。此Nano微處理器能夠執行x86 ISA機器語言程式,但無法執行ARM ISA機器語言程式。Nano微處理器包含高效能暫存器重命名、超純量指令技術、非循序執行管線與一硬體轉譯器以將x86 ISA指令轉譯為微指令供執行管線執行。本發明對於Nano硬體指令轉譯器之改良,使其除了可轉譯x86機器語言指令外,還可將ARM ISA機器語言指令轉譯為微指令供執行管線執行。硬體指令轉譯器的改良包含簡單指令轉譯器的改良與複雜指令轉譯器的改良(亦包含微碼在內)。此外,微指令集可加入新的微指令以支援ARM ISA機器語言指令與微指令間的轉譯,並可改善執行管線使能執行新的微指令。此外,Nano暫存器檔案與記憶體次系統亦可經改善使其能支援ARM ISA,亦包含特定暫存器之共享。分支預測單元可透過改善使其在x86分支預測外,亦能適用於ARM分支指令預測。此實施例的優點在於,因為在很大的程度與ISA無關(largely ISA-agnostic),因而只需對於Nano微處理器的執行管線進行輕微的修改,即可適用於ARM ISA指令。對於執行管線的改良包含條件碼旗標之產生與使用方式、用以更新與回報指令指標暫存器的語意、存取特權保護方法、以及多種記憶體管理相關的功能,如存取違規檢測、分頁與轉譯後備緩衝區(TLB)的使用、與快取策略等。前述內容僅為例示,而非限定本案發明,其中部分特徵在後續內容會有進一步的說明。最後,如前述,x86 ISA與ARM ISA定義之部分特徵可能無法為前揭對Nano微處理器進行改良的實施例所支援,這些特徵如x86 SSE 4.2與 ARM安全性擴充、快速內容切換擴充、除錯與效能計數器。其中部分特徵在後續內容會有更進一步的說明。此外,前揭透過對於Nano處理器的改良以支援ARM ISA機器語言程式,係為一整合使用設計、測試與製造資源以完成能夠執行x86與ARM機器語言程式之單積體電路產品的實施例,此單積體電路產品係涵蓋市場絕大多數既存的機器語言程式,而符合現今市場潮流。本文所述之微處理器100的實施例實質上可被配置為x86微處理器、ARM微處理器、或是可同時執行x86 ISA與ARM ISA機器語言程式微處理器。此微處理器可透過在單一微處理器100(或是第7圖之核心100)上之x86與ARM指令模式132間的動態切換,以取得同時執行x86 ISA與ARM ISA機器語言程式的能力,亦可透過將多核心微處理100(對應於第7圖所示)之一個或多個核心配置為ARM核心而一或多個核心配置為x86核心,亦即透過在多核心100的每一個核心上進行x86與ARM指令間的動態切換,以取得同時執行x86 ISA與ARM ISA機器語言程式的能力。此外,傳統上,ARM ISA核心係被設計作為知識產權核心,而被各個第三者協力廠商納入其應用,如系統晶片與/或嵌入式應用。因此,ARM ISA並不具有一特定的標準處理器匯流排,作為ARM核心與系統之其他部分(如晶片組或其他周邊設備)間的介面。有利的是,Nano處理器已具有一高速x86型式處理器匯流排作為連接至記憶體與周邊設備的介面,以及一記憶體一致性結構可協同微處理器100在x86電腦系統環境下支援 ARM ISA機器語言程式之執行。
請參照第2圖,圖中係以方塊圖詳細顯示第1圖之硬體指令轉譯器104。此硬體指令轉譯器104包含硬體,更具體來說,就是電晶體的集合。硬體指令轉譯器104包含一指令格式化程式202,由第1圖之指令快取102接收指令模式指標132以及x86 ISA與ARM ISA指令位元組124的區塊,並輸出格式化的x86 ISA與ARM ISA指令242;一簡單指令轉譯器(SIT)204接收指令模式指標132與環境模式指標136,並輸出實行微指令244與一微碼位址252;一複雜指令轉譯器(CIT)206(亦稱為一微碼單元),接收微碼位址252與環境模式指標136,並提供實行微指令246;以及一多工器212,其一輸入端由簡單指令轉譯器204接收微指令244,另一輸入端由複雜指令轉譯器206接收微指令246,並提供實行微指令126至第1圖的執行管線112。指令格式化程式202在第3圖會有更詳細的說明。簡單指令轉譯器204包含一x86簡單指令轉譯器222與一ARM簡單指令轉譯器224。複雜指令轉譯器206包含一接收微碼位址252之微程式計數器(micro-PC)232,一由微程式計數器232接收唯讀記憶體位址254之微碼唯讀記憶體234,一用以更新微程式計數器的微序列器236、一指令間接暫存器(instruction indirection register,IIR)235、以及一用以產生複雜指令轉譯器所輸出之實行微指令246的微轉譯器(microtranslator)237。由簡單指令轉譯器204所產生之實行微指令244與由複雜指令轉譯器206所產生之實行微指 令246都屬於微處理器100之微架構的微指令集之微指令126,並且都可直接由執行管線112執行。
多工器212係受到一選擇輸入248所控制。一般的時候,多工器212會選擇來自簡單指令轉譯器204之微指令;然而,當簡單指令轉譯器204遭遇一複雜x86或ARM ISA指令242而將控制權移轉、或遭遇陷阱(traps)、以轉移至複雜指令轉譯器206時,簡單指令轉譯器204控制選擇輸入248讓多工器212選擇來自複雜指令轉譯器的微指令246。當暫存器配置表(RAT)402(請參照第4圖)遭遇到一個微指令126具有一特定位元指出其為實現複雜ISA指令242序列的最後一個微指令126時,暫存器配置表402隨即控制選擇輸入248使多工器212回復至選擇來自簡單指令轉譯器204之微指令244。此外,當重排緩衝器422(請參照第4圖)準備要使微指令126引退且該指令之狀態指出需要選擇來自複雜指令器的微指令時,重排緩衝器422控制選擇輸入248使多工器212選擇來自複雜指令轉譯器206的微指令246。前揭需引退微指令126的情形如:微指令126已經導致一例外條件產生。
簡單指令轉譯器204接收ISA指令242,並且在指令模式指標132指示為x86時,將這些指令視為x86 ISA指令進行解碼,而在指令模式指標132指示為ARM時,將這些指令視為ARM ISA指令進行解碼。簡單指令轉譯器204並確認此ISA指令242係為簡單或是複雜ISA指令。簡單指令轉譯器204能夠為簡單ISA指令242,輸出所有 用以實現此ISA指令242之實行微指令126;也就是說,複雜指令轉譯器206並不提供任何實行微指令126給簡單ISA指令124。反之,複雜ISA指令124要求複雜指令轉譯器206提供至少部分(若非全部)的實行微指令126。在一實施例中,對ARM與x86 ISA指令集之指令124的子集合而言,簡單指令轉譯器204輸出部分實現x86/ARM ISA指令126的微指令244,隨後將控制權轉移至複雜指令轉譯器206,由複雜指令轉譯器206接續輸出剩下的微指令246來實現x86/ARM ISA指令126。多工器212係受到控制,首先提供來自簡單指令轉譯器204之實行微指令244作為提供至執行管線112的微指令126,隨後提供來自複雜指令轉譯器206之實行微指令246作為提供至執行管線112的微指令126。簡單指令轉譯器204知道由硬體指令轉譯器104執行,以針對多個不同複雜ISA指令124產生實行微指令126之多個微碼程序(rountines)中之起始微碼唯讀記憶體234的位址,並且當簡單指令轉譯器204對一複雜ISA指令242進行解碼時,簡單指令轉譯器204會提供相對應的微碼程序位址252至複雜指令轉譯器206之微程式計數器232。簡單指令轉譯器204輸出實現ARM與x86 ISA指令集中相當大比例之指令124所需的微指令244,尤其是對於需要由x86 ISA與ARM ISA機器語言程式來說係較常執行之ISA指令124,而只有相對少數的指令124需要由複雜指令轉譯器206提供實行微指令246。依據一實施例,主要由複雜指令轉譯器206實現的x86指 令如RDMSR/WRMSR、CPUID、複雜運算指令(如FSQRT與超越指令(transcendental instruction))、以及IRET指令;主要由複雜指令轉譯器206實現的ARM指令如MCR、MRC、MSR、MRS、SRS、與RFE指令。前揭列出的指令並非限定本案發明,僅例示指出本案複雜指令轉譯器206所能實現之ISA指令的種類。
當指令模式指標132指示為x86,x86簡單指令轉譯器222對於x86 ISA指令242進行解碼,並且將其轉譯為實行微指令244;當指令模式指標132指示為ARM,ARM簡單指令轉譯器224對於ARM ISA指令242進行解碼,並將其轉譯為實行微指令244。在一實施例中,簡單指令轉譯器204係一可由習知合成工具合成之布林邏輯閘方塊。在一實施例中,x86簡單指令轉譯器222與ARM簡單指令轉譯器224係獨立的布林邏輯閘方塊;不過,在另一實施例中,x86簡單指令轉譯器222與ARM簡單指令轉譯器224係位於同一個布林邏輯閘方塊。在一實施例中,簡單指令轉譯器204在單一時脈週期中轉譯最多三個ISA指令242並提供最多六個實行微指令244至執行管線112。在一實施例中,簡單指令轉譯器204包含三個次轉譯器(未圖示),各個次轉譯器轉譯單一個格式化的ISA指令242,其中,第一個轉譯器能夠轉譯需要不多於三個實行微指令126之格式化ISA指令242;第二個轉譯器能夠轉譯需要不多於兩個實行微指令126之格式化ISA指令242;第三個轉譯器能後轉譯需要不多於一個實行微指令126之格式 化ISA指令242。在一實施例中,簡單指令轉譯器204包含一硬體狀態機器使其能夠在多個時脈週期輸出多個微指令244以實現一個ISA指令242。
在一實施例中,簡單指令轉譯器204並依據指令模式指標132與/或環境模式指標136,執行多個不同的例外事件檢測。舉例來說,若是指令模式指標132指示為x86且x86簡單指令轉譯器222對一個就x86 ISA而言是無效的ISA指令124進行解碼,簡單指令轉譯器204隨即產生一個x86無效操作碼例外事件;相似地,若是指令模式指標132指示為ARM且ARM簡單指令轉譯器224對一個就ARM ISA而言是無效的ISA指令124進行解碼,簡單指令轉譯器204隨即產生一個ARM未定義指令例外事件。在另一實施例中,若是環境模式指標136指示為x86 ISA,簡單指令轉譯器204隨即檢測是否其所遭遇之每個x86 ISA指令242需要一特別特權級,若是,檢測當前特權級(CPL)是否滿足此x86 ISA指令242所需之特別特權級,並於不滿足時產生一例外事件;相似地,若是環境模式指標136指示為ARM ISA,簡單指令轉譯器204隨即檢測是否每個格式化ARM ISA指令242需要一特權模式指令,若是,檢測當前的模式是否為特權模式,並於現在模式為使用者模式時,產生一例外事件。複雜指令轉譯器206對於特定複雜ISA指令242亦執行類似的功能。
複雜指令轉譯器206輸出一系列實行微指令246至多工器212。微碼唯讀記憶體234儲存微碼程序之唯讀記憶體指令247。微碼唯讀記憶體234輸出唯讀記憶體指令247以回應由微碼唯讀記憶體234取得之下一個唯讀記憶體指令247的位址,並由微程式計數器232所持有。一般來說, 微程式計數器232係由簡單指令轉譯器204接收其起始值252,以回應簡單指令轉譯器204對於一複雜ISA指令242的解碼動作。在其他情形,例如回應一重置或例外事件,微程式計數器232分別接收重置微碼程序位址或適當之微碼例外事件處理位址。微程序器236通常依據唯讀記憶體指令247的大小,將微程式計數器232更新為微碼程序的序列,以及選擇性地更新為執行管線112回應控制型微指令126(如分支指令)執行所產生的目標位址,以使指向微碼唯讀記憶體234內之非程序位址的分支生效。微碼唯讀記憶體234係製造於微處理器100之半導體晶片內。
除了用來實現簡單ISA指令124或部分複雜ISA指令124的微指令244外,簡單指令轉譯器204也產生ISA指令資訊255以寫入指令間接暫存器235。儲存於指令間接暫存器235的ISA指令資訊255包含關於被轉譯之ISA指令124的資訊,例如,確認由ISA指令所指定之來源與目的暫存器的資訊以及ISA指令124的格式,如ISA指令124係在記憶體之一運算元上或是在微處理器100之一架構暫存器106內執行。這樣可使微碼程序能夠變為通用,亦即不需對於各個不同的來源與/或目的架構暫存器106使用不同的微碼程序。尤其是,簡單指令轉譯器204知道暫存器檔案106的內容,包含哪些暫存器是共享暫存器504,而能將x86 ISA與ARM ISA指令124內提供的暫存器資訊,透過ISA指令資訊255之使用,轉譯至暫存器檔案106內之適當的暫存器。ISA指令資訊255包含一移位欄、一立 即欄、一常數欄、各個來源運算元與微指令126本身的重命名資訊、用以實現ISA指令124之一系列微指令126中指示第一個與最後一個微指令126的資訊、以及儲存由硬體指令轉譯器104對ISA指令124轉譯時所蒐集到的有用資訊的其他位元。
微轉譯器237係由微碼唯讀記憶體234與間接指令暫存器235的內容接收唯讀記憶體指令247,並相應地產生實行微指令246。微轉譯器237依據由間接指令暫存器235接收的資訊,如依據ISA指令124的格式以及由其指特定之來源與/或目的架構暫存器106組合,來將特定唯讀記憶體指令247轉譯為不同的微指令246系列。在一些實施例中,許多ISA指令資訊255係與唯讀記憶體指令247合併以產生實行微指令246。在一實施例中,各個唯讀記憶體指令247係大約有40位元寬,並且各個微指令246係大約有200位元寬。在一實施例中,微轉譯器237最多能夠由一個微讀記憶體指令247產生三個微指令246。微轉譯器237包含多個布林邏輯閘以產生實行微指令246。
使用微轉譯器237的優點在於,由於簡單指令轉譯器204本身就會產生ISA指令資訊255,微碼唯讀記憶體234不需要儲存間接指令暫存器235提供之ISA指令資訊255因而可以其大小。此外,因為微碼唯讀記憶體234不需要為了各個不同的ISA指令格式、以及各個來源與/或目的架構暫存器106之組合,提供一獨立的程序,微碼唯讀記憶體234程序可包含較少的條件分支指令。舉例來說,若是 複雜ISA指令124係記憶體格式,簡單指令轉譯器204會產生微指令244的邏輯編程,其包含將來源運算元由記憶體載入一暫時暫存器106之微指令244,並且微轉譯器237會產生微指令246用以將結果由暫時暫存器106儲存至記憶體;然而,若複雜ISA指令124係暫存器格式,此邏輯編程會將來源運算元由ISA指令124所指定的來源暫存器移動至暫時暫存器,並且微轉譯器237會產生微指令246用以將結果由暫時暫存器移動至由間接指令暫存器235所指定之架構目的暫存器106。在一實施例中,微轉譯器237之許多面向係類似於2010年4月23日提出之美國專利第12/766,244號申請案,在此係列為參考資料。不過,本案之微轉譯器237除了x86 ISA指令124外,亦經改良以轉譯ARM ISA指令124。
值得注意的是,微程式計數器232不同於ARM程式計數器116與x86指令指標118,亦即微程式計數器232並不持有ISA指令124的位址,為程式計數器232所持有的位址亦不落於系統記憶體位址空間內。此外,更值得注意的是,微指令246係由硬體指令轉譯器104所產生,並且直接提供給執行管線112執行,而非作為執行管線112之執行結果128。
請參照第3圖,圖中係以方塊圖詳述第2圖之指令格式化器202。指令格式化器202由第1圖之指令快取102接收x86 ISA與ARM ISA指令位元組124區塊。憑藉x86 ISA指令長度可變之特性,x86指令124可以由指令位元 組124區塊之任何位元組開始。由於x86 ISA容許首碼位元組的長度會受到當前位址長度與運算元長度預設值之影響,因此確認快取區塊內之x86 ISA指令的長度與位置之任務會更為複雜。此外,依據當前ARM指令集狀態322與ARM ISA指令124的操作碼,ARM ISA指令的長度不是2位元組就是4位元組,因而不是2位元組對齊就是4位元組對齊。因此,指令格式化程式202由指令位元組124串(stream)擷取不同的x86 ISA與ARM ISA指令,此指令位元組124串係由指令快取102接收之區塊所構成。也就是說,指令格式化器202格式化x86 ISA與ARM ISA指令位元組串,因而大幅簡化第2圖之簡單指令轉譯器對ISA指令124進行解碼與轉譯的困難任務。
指令格式化器202包含一預解碼器302,在指令模式指標132指示為x86時,預解碼器302預先將指令位元組124視為x86指令位元組進行解碼以產生預解碼資訊,在指令模式指標132指示為ARM時,預解碼器302預先將指令位元組124視為ARM指令位元組進行解碼以產生預解碼資訊。指令位元組佇列(IBQ)304接收ISA指令位元組124區塊以及由預解碼器302產生之相關預解碼資訊。
一個由長度解碼器與漣波邏輯閘306構成的陣列接收指令位元組佇列304底部項目(bottom entry)的內容,亦即ISA指令位元組124區塊與相關的預解碼資訊。此長度解碼器與漣波邏輯閘306亦接收指令模式指標132與ARM ISA指令集狀態322。在一實施例中,ARM ISA指令集狀 態322包含ARM ISA CPSR暫存器之J與T位元。為了回應其輸入資訊,此長度解碼器與漣波邏輯閘306產生解碼資訊,此解碼資訊包含ISA指令位元組124區塊內之x86與ARM指令的長度、x86首碼資訊、以及關於各個ISA指令位元組124的指標,此指標指出此位元組是否為ISA指令124之起始位元組、終止位元組、以及/或一有效位元組。一多工器佇列308接收ISA指令位元組126區塊、由預解碼器302產生之相關預解碼資訊、以及由長度解碼器與漣波邏輯閘306產生之相關解碼資訊。
控制邏輯(未圖示)檢驗多工器佇列(MQ)308底部項目的內容,並控制多工器312擷取不同的或格式化的ISA指令與相關的預解碼與解碼資訊,所擷取的資訊提供至一格式化指令佇列(FIQ)314。格式化指令佇列314在格式化ISA指令242與提供至第2圖之簡單指令轉譯器204之相關資訊間作為緩衝。在一實施例中,多工器312在每一個時脈週期內擷取至多三個格式化ISA指令與相關的資訊。
在一實施例中,指令格式化程式202在許多方面類似於2009年10月1日提出之美國專利第12/571,997號、第12/572,002號、第12/572,045號、第12/572,024號、第12/572,052號與第12/572,058號申請案共同揭露的XIBQ、指令格式化程式、與FIQ,這些申請案在此列為參考資料。然而,前述專利申請案所揭示的XIBQ、指令格式化程式、與FIQ透過修改,使其能在格式化x86 ISA指令124外,還能格式化ARM ISA指令124。長度解碼器306被修改, 使能對ARM ISA指令124進行解碼以產生長度以及起點、終點與有效性的位元組指標。尤其,若是指令模式指標132指示為ARM ISA,長度解碼器306檢測當前ARM指令集狀態322與ARM ISA指令124的操作碼,以確認ARM指令124是一個2位元組長度或是4位元組長度的指令。在一實施例中,長度解碼器306包含多個獨立的長度解碼器分別用以產生x86 ISA指令124的長度資料以及ARM ISA指令124的長度資料,這些獨立的長度解碼器之輸出再以連線或(wire-ORed)耦接在一起,以提供輸出至漣波邏輯閘306。在一實施例中,此格式化指令佇列314包含獨立的佇列以持有格式化指令242之多個互相分離的部分。在一實施例中,指令格式化程式202在單一時脈週期內,提供簡單指令轉譯器204至多三個格式化ISA指令242。
請參照第4圖,圖中係以方塊圖詳細顯示第1圖之執行管線112,此執行管線112耦接至硬體指令轉譯器104以直接接收來自第2圖之硬體指令轉譯器104的實行微指令。執行管線112包含一微指令佇列401,以接收微指令126;一暫存器配置表402,由微指令佇列401接收微指令;一指令調度器404,耦接至暫存器配置表402;多個保留站406,耦接至指令調度器404;一指令發送單元408,耦接至保留站406;一重排緩衝器422,耦接至暫存器配置表402、指令調度器404與保留站406;以及,執行單元424耦接至保留站406、指令發送單元408與重排緩衝器422。暫存器配置表402與執行單元424接收指令模式指標132。
在硬體指令轉譯器104產生實行微指令126的速率不同於執行管線112執行微指令126之情況下,微指令佇列401係作為一緩衝器。在一實施例中,微指令佇列401包含一個M至N可壓縮微指令佇列。此可壓縮微指令佇列使執行管線112能夠在一給定的時脈週期內,從硬體指令轉譯器104接收至多M個(在一實施例中,M是六)微指令126,並且隨後將接收到的微指令126儲存至寬度為N(在一實施例中,N是三)的佇列結構,以在每個時脈週期提供至多N個微指令126至暫存器配置表402,此暫存器配置表402能夠在每個時脈週期處理最多N個微指令126。微指令佇列401係可壓縮的,因它不論接收到微指令126之特定時脈週期為何,皆會依序在將由硬體指令轉譯器104所傳送之微指令126時填滿佇列的空項目,因而不會在佇列項目中留下空洞。此方法的優點為能夠充分利用執行單元424(請參照第4圖),因為它可比不可壓縮寬度M或寬度M的指令佇列提供較高的指令儲存效能。具體來說,不可壓縮寬度N的佇列會需要硬體指令轉譯器104,尤其是簡單指令轉譯器204,在之後的時脈週期內會重複轉譯一個或多個已經在之前的時脈週期內已經被轉譯過的ISA指令124。會這樣做的原因是,不可壓縮寬度N的佇列無法在同一個時脈週期接收多於N個微指令126,而重複轉譯將導致電力耗損。不過,不可壓縮寬度M的佇列雖然不需要簡單指令轉譯器204重複轉譯,但卻會在佇列項目中產生空洞而導致浪費,因而需要更多列項目以及一個 較大且更耗能的佇列來提供相當的緩衝能力。
暫存器配置表402係由微指令佇列401接收微指令126並產生與微處理器100內進行中之微指令126的附屬資訊,暫存器配置表402並執行暫存器重命名動作來增加微指令平行處理之能力,以利於執行管線112之超純量、非循序執行能力。若是ISA指令124指示為x86,暫存器配置表402會對應於微處理器100之x86 ISA暫存器106,產生附屬資訊且執行相對應的暫存器重命名動作;反之,若是ISA指令124指示為ARM,暫存器配置表402就會對應於微處理器100之ARM ISA暫存器106,產生附屬資訊且執行相對應的暫存器重命名動作;不過,如前述,部分暫存器106可能是由x86 ISA與ARM ISA所共享。暫存器配置表402亦在重排緩衝器422中依據程式順序配置一項目給各個微指令126,因此重排緩衝器422可使微指令126以及其相關的x86 ISA與ARM ISA指令124依據程式順序進行引退,即使微指令126的執行對應於其所欲實現之x86 ISA與ARM ISA指令124而言係以非循序的方式進行的。重排緩衝器422包含一環形佇列,此環形佇列之各個項目係用以儲存關於進行中之微指令126的資訊,此資訊除了其他事項,還包含微指令126執行狀態、一個確認微指令126係由x86或是ARM ISA指令124所轉譯的標籤、以及用以儲存微指令126之結果的儲存空間。
指令調度器404由暫存器配置表402接收暫存器重命名微指令126與附屬資訊,並依據指令的種類以及執行單 元424之可利用性,將微指令126及其附屬資訊分派至關聯於適當的執行單元424之保留站406。此執行單元424將會執行微指令126。
對各個在保留站406中等待的微指令126而言,指令發布單元408測得相關執行單元424可被運用且其附屬資訊被滿足(如來源運算元可被運用)時,即發布微指令126至執行單元424供執行。如前述,指令發布單元408所發布的微指令126,可以非循序以及以超純量方式來執行。
在一實施例中,執行單元424包含整數/分支單元412、媒體單元414、載入/儲存單元416、以及浮點單元418。執行單元424執行微指令126以產生結果128並提供至重排緩衝器422。雖然執行單元424並不大受到其所執行之微指令126係由x86或是ARM ISA指令124轉譯而來的影響,執行單元424仍會使用指令模式指標132與環境模式指標136以執行相對較小的微指令126子集。舉例來說,執行管線112管理旗標的產生,其管理會依據指令模式指標132指示為x86 ISA或是ARM ISA而有些微不同,並且,執行管線112係依據指令模式指標132指示為x86 ISA或是ARM ISA,對x86 EFLAGS暫存器或是程式狀態暫存器(PSR)內的ARM條件碼旗標進行更新。在另一實例中,執行管線112對指令模式指標132進行取樣以決定去更新x86指令指標(IP)118或ARM程式計數器(PC)116,還是更新共通的指令位址暫存器。此外,執行管線122亦藉此來決定使用x86或是ARM語意執行前述動 作。一旦微指令126變成微處理器100中最舊的已完成微指令126(亦即,在重排緩衝器422佇列的排頭且呈現已完成的狀態),重排緩衝器422就會引退ISA指令124並釋放與實行微指令126相關的項目。在一實施例中,微處理器100可在一時脈週期內引退至多三個ISA指令124。此處理方法的優點在於,執行管線112係一高效能、通用執行引擎,其可執行支援x86 ISA與ARM ISA指令124之微處理器100微架構的微指令126。
請參照第5圖,圖中係以方塊圖詳述第1圖之暫存器檔案106。就一較佳實施例而言,暫存器檔案106為獨立的暫存器區塊實體。在一實施例中,通用暫存器係由一具有多個讀出埠與寫入埠之暫存器檔案實體來實現;其他暫存器可在實體上獨立於此通用暫存器檔案以及其他會存取這些暫存器但具有較少之讀取寫入埠的鄰近功能方塊。在一實施例中,部分非通用暫存器,尤其是那些不直接控制微處理器100之硬體而僅儲存微碼234會使用到之數值的暫存器(如部分x86 MSR或是ARM協同處理器暫存器),則是在一個微碼234可存取之私有隨機存取記憶體(PRAM)內實現。不過,x86 ISA與ARM ISA程式者無法見到此私有隨機存取記憶體,亦即此記憶體並不在ISA系統記憶體位址空間內。
總括來說,如第5圖所示,暫存器檔案106在邏輯上係區分為三種,亦即ARM特定的暫存器502、x86特定的暫存器504、以及共享暫存器506。在一實施例中,共享暫 存器506包含十五個32位元暫存器,由ARM ISA暫存器R0至R14以及x86 ISA EAX至R14D暫存器所共享,另外有十六個128位元暫存器由x86 ISA XMM0至XMM15暫存器以及ARM ISA進階單指令多重數據擴展(Neon)暫存器所共享,這些暫存器之部分係重疊於三十二個32位元ARM VFPv3浮點暫存器。如前文第1圖所述,通用暫存器之共享意指由x86 ISA指令124寫入一共享暫存器的數值,會被ARM ISA指令124在隨後讀取此共享暫存器時見到,反之亦然。此方式的優點在於,能夠使x86 ISA與ARM ISA程序透過暫存器互相溝通。此外,如前述,x86 ISA與ARM ISA之架構控制暫存器的特定位元亦可被引用為共享暫存器506。如前述,在一實施例中,x86特定模型暫存器可被ARM ISA指令124透過實作定義協同處理器暫存器存取,因而是由x86 ISA與ARM ISA所共享。此共享暫存器506可包含非架構暫存器,例如條件旗標之非架構同等物,這些非架構暫存器同樣由暫存器配置表402重命名。硬體指令轉譯器104知道哪一個暫存器係由x86 ISA與ARM ISA所共享,因而會產生實行微指令126來存取正確的暫存器。
ARM特定的暫存器502包含ARM ISA所定義但未被包含於共享暫存器506之其他暫存器,而x86特定的暫存器502包含x86 ISA所定義但未被包含於共享暫存器506之其他暫存器。舉例來說,ARM特定的暫存器502包含ARM程式計數器116、CPSR、SCTRL、FPSCR、CPACR、 協同處理器暫存器、多種意外事件模式的備用通用暫存器與程序狀態保存暫存器(saved program status registers,SPSRs)等等。前文列出的ARM特定暫存器502並非為限定本案發明,僅為例示以說明本發明。另外,舉例來說,x86特定的暫存器504包含x86指令指標(EIP或IP)118、EFLAGS、R15D、64位元之R0至R15暫存器的上面32位元(亦即未落於共享暫存器506的部分)、區段暫存器(SS,CS,DS,ES,FS,GS)、x87 FPU暫存器、MMX暫存器、控制暫存器(如CR0-CR3、CR8)等。前文列出的x86特定暫存器504並非為限定本案發明,僅為例示以說明本發明。
在一實施例中,微處理器100包含新的實作定義ARM協同處理器暫存器,在指令模式指標132指示為ARM ISA時,此實作定義協同處理器暫存器可被存取以執行x86 ISA相關的操作。這些操作包含但不限於:將微處理器100重置為一x86 ISA處理器(重置至x86指令)的能力;將微處理器100初始化為x86特定的狀態,將指令模式指標132切換至x86,並開始在一特定x86目標位址擷取x86指令124(啟動至x86指令)的能力;存取前述全域組態暫存器的能力;存取x86特定暫存器(如EFLAGS)的能力,此x86暫存器係指定在ARM R0暫存器中,存取電力管理(如P狀態與C狀態的轉換),存取處理器匯流排功能(如輸入/輸出循環)、中斷控制器之存取、以及加密加速功能之存取。此外,在一實施例中,微處理器100包含新的x86非架構特定模型暫存器,在指令模式指標132指示為x86 ISA 時,此非架構特定模型暫存器可被存取以執行ARM ISA相關的操作。這些操作包含但不限於:將微處理器100重置為一ARM ISA處理器(重置至ARM指令)的能力;將微處理器100初始化為ARM特定的狀態,將指令模式指標132切換至ARM,且開始在一特定ARM目標位址擷取ARM指令124(啟動至ARM指令)的能力;存取前述全域組態暫存器的能力;存取ARM特定暫存器(如CPSR)的能力,此ARM暫存器係指定在EAX暫存器內。
請參照第6A與6B圖,圖中顯示一流程說明第1圖之微處理器100的操作程序。此流程始於步驟602。
如步驟602所示,微處理器100係被重置。可向微處理器100之重置輸入端發出信號來進行此重置動作。此外,在一實施例中,此微處理器匯流排係一x86型式之處理器匯流排,此重置動作可由x86型式之INIT命令進行。回應此重置動作,微碼234的重置程序被調用來執行。此重置微碼之動作包含:(1)將x86特定的狀態504初始化為x86 ISA所指定的預設數值;(2)將ARM特定的狀態502初始化為ARM ISA所特定的預設數值;(3)將微處理器100之非ISA特定的狀態初始化為微處理器100製造商所指定的預設數值;(4)將共享ISA狀態506,如GPRs,初始化為x86 ISA所指定的預設數值;以及(5)將指令模式指標132與環境模式指標136設定為指示x86 ISA。在另一實施例中,不同於前揭動作(4)與(5),此重置微碼將共享ISA狀態506初始化為ARM ISA特定的預設數值,並將指令模式指 標132與環境模式指標136設定為指示ARM ISA。在此實施例中,步驟638與642的動作不需要被執行,並且,在步驟614之前,此重置微碼會將共享ISA狀態506初始化為x86 ISA所指定的預設數值,並將指令模式指標132與環境模式指標136設定為指示x86 ISA。接下來進入步驟604。
在步驟604,重置微碼確認微處理器100係配置為一個x86處理器或是一個ARM處理器來進行開機。在一實施例中,如前述,預設ISA開機模式係硬式編碼於微碼,不過可透過熔斷組態熔絲的方式,或利用一微碼修補來修改。在一實施例中,此預設ISA開機模式作為一外部輸入提供至微處理器100,例如一外部輸入接腳。接下來進入步驟606。在步驟606中,若是預設ISA開機模式為x86,就會進入步驟614;反之,若是預設開機模式為ARM,就會進入步驟638。
在步驟614中,重置微碼使微處理器100開始由x86 ISA指定的重置向量位址擷取x86指令124。接下來進入步驟616。
在步驟616中,x86系統軟體(如BIOS)係配置微處理器100來使用如x86 ISA RDMSR與WRMSR指令124。接下來進入步驟618。
在步驟618中,x86系統軟體執行一重置至ARM的指令124。此重置至ARM的指令使微處理器100重置並以一ARM處理器的狀態離開重置程序。然而,因為x86特定狀 態504以及非ISA特定組態狀態不會因為重置至ARM的指令126而改變,此方式有利於使x86系統韌體執行微處理器100之初步設定並使微處理器100隨後以ARM處理器的狀態重開機,而同時還能使x86系統軟體執行之微處理器100的非ARM組態配置維持完好。藉此,此方法能夠使用“小型的”微開機碼來執行ARM作業系統的開機程序,而不需要使用微開機碼來解決如何配置微處理器100之複雜問題。在一實施例中,此重置至ARM指令係一x86 WRMSR指令至一新的非架構特定模型暫存器。接下來進入步驟622。
在步驟622,簡單指令轉譯器204進入陷阱至重置微碼,以回應複雜重置至ARM(complex reset-to-ARM)指令124。此重置微碼使ARM特定狀態502初始化至由ARM ISA指定的預設數值。不過,重置微碼並不修改微處理器100之非ISA特定狀態,因而有利於保存步驟616執行所需的組態設定。此外,重置微碼使共享ISA狀態506初始化至ARM ISA指定的預設數值。最後,重置微碼設定指令模式指標132與環境模式指標136以指示ARM ISA。接下來進入步驟624。
在步驟624中,重置微碼使微處理器100開始在x86 ISA EDX:EAX暫存器指定的位址擷取ARM指令124。此流程結束於步驟624。
在步驟638中,重置微碼將共享ISA狀態506,如GPRs,初始化至ARM ISA指定的預設數值。接下來進入 步驟642。
在步驟642中,重置微碼設定指令模式指標132與環境模式指標136以指示ARM ISA。接下來進入步驟644。
在步驟644中,重置微碼使微處理器100開始在ARM ISA指定的重置向量位址擷取ARM指令124。此ARM ISA定義兩個重置向量位址,並可由一輸入來選擇。在一實施例中,微處理器100包含一外部輸入,以在兩個ARM ISA定義的重置向量位址間進行選擇。在另一實施例中,微碼234包含在兩個ARM ISA定義的重置向量位址間之一預設選擇,此預設選則可透過熔斷熔絲以及/或是微碼修補來修改。接下來進入步驟646。
在步驟646中,ARM系統軟體設定微處理器100來使用特定指令,如ARM ISA MCR與MRC指令124。接下來進入步驟648。
在步驟648中,ARM系統軟體執行一重置至x86的指令124,來使微處理器100重置並以一x86處理器的狀態離開重置程序。然而,因為ARM特定狀態502以及非ISA特定組態狀態不會因為重置至x86的指令126而改變,此方式有利於使ARM系統韌體執行微處理器100之初步設定並使微處理器100隨後以x86處理器的狀態重開機,而同時還能使由ARM系統軟體執行之微處理器100的非x86組態配置維持完好。藉此,此方法能夠使用“小型的”微開機碼來執行x86作業系統的開機程序,而不需要使用微開機碼來解決如何配置微處理器100之複雜問題。在一實 施例中,此重置至x86指令係一ARM MRC/MRCC指令至一新的實作定義協同處理器暫存器。接下來進入步驟652。
在步驟652中,簡單指令轉譯器204進入陷阱至重置微碼,以回應複雜重置至x86指令124。重置微碼使x86特定狀態504初始化至x86 ISA所指定的預設數值。不過,重置微碼並不修改微處理器100之非ISA特定狀態,此處理有利於保存步驟646所執行的組態設定。此外,重置微碼使共享ISA狀態506初始化至x86 ISA所指定的預設數值。最後,重置微碼設定指令模式指標132與環境模式指標136以指示x86 ISA。接下來進入步驟654。
在步驟654中,重置微碼使微處理器100開始在ARM ISA R1:R0暫存器所定的位址擷取ARM指令124。此流程終止於步驟654。
請參照第7圖,圖中係以一方塊圖說明本發明之一雙核心微處理器700。此雙核心微處理器700包含兩個處理核心100,各個核心100包含第1圖微處理器100所具有的元件,藉此,各個核心均可執行x86 ISA與ARM ISA機器語言程式。這些核心100可被設定為兩個核心100都執行x86 ISA程式、兩個核心100都執行ARM ISA程式、或是一個核心100執行x86 ISA程式而另一個核心100則是執行ARM ISA程式。在微處理器700的操作過程中,前述三種設定方式可混合且動態改變。如第6圖(包含6A及6B圖)之說明內容所述,各個核心100對於其指令模式指標132與環境模式指標136均具有一預設數值,此預設數 值可利用熔絲或微碼修補做修改,藉此,各個核心100可以獨立地透過重置改變為x86或是ARM處理器。雖然第7圖的實施例僅具有二個核心100,在其他實施例中,微處理器700可具有多於二個核心100,而各個核心均可執行x86 ISA與ARM ISA機器語言程式。
請參照第8圖,圖中係以一方塊圖說明本發明另一實施例之可執行x86 ISA與ARM ISA機器語言程式的微處理器100。第8圖之微處理器100係類似於第1圖之微處理器100,其中的元件編號亦相似。然而,第8圖之微處理器100亦包含一微指令快取892,此微指令快取892存取由硬體指令轉譯器104產生且直接提供給執行管線112之微指令126。微指令快取892係由指令擷取單元114所產生之擷取位址做索引。若是擷取位址134命中微指令快取892,執行管線112內之多工器(未圖示)就選擇來自微指令快取892之微指令126,而非來自硬體指令轉譯器104之微指令126;反之,多工器則是選擇直接由硬體指令轉譯器104提供之微指令126。微指令快取的操作,通常亦稱為追蹤快取,係微處理器設計之技術領域所習知的技術。微指令快取892所帶來的優點在於,由微指令快取892擷取微指令126所需的時間通常會少於由指令快取102擷取指令124並且利用硬體指令轉譯器將其轉譯為微指令126的時間。在第8圖之實施例中,微處理器100在執行x86或是ARM ISA機器語言程式時,硬體指令轉譯器104不需要在每次執行x86或ARM ISA指令124時都執行硬 體轉譯,亦即當實行微指令126已經存在於微指令快取892,就不需要執行硬體轉譯。
在此所述之微處理器的實施例之優點在於,其透過內建之硬體指令轉譯器來將x86 ISA與ARM ISA指令轉譯為微指令集之微指令,而能執行x86 ISA與ARM ISA機器語言程式,此微指令集不同於x86 ISA與ARM ISA指令集,且微指令可利用微處理器之共用的執行管線來執行以提供實行微指令。在此所述之微處理器的實施例之優點在於,透過協同利用大量與ISA無關之執行管線來執行由x86 ISA與ARM ISA指令硬體轉譯來的微指令,微處理器的設計與製造所需的資源會少於兩個獨立設計製造之微處理器(亦即一個能夠執行x86 ISA機器語言程式,一個能夠執行ARM ISA機器語言程式)所需的資源。此外,這些微處理器的實施例中,尤其是那些使用超純量非循序執行管線的微處理器,具有潛力能提供相較於既有ARM ISA處理器更高的效能。此外,這些微處理器的實施例相較於採用軟體轉譯器之系統,亦在x86與ARM的執行上可更具潛力地提供更高的效能。最後,由於微處理器可執行x86 ISA與ARM ISA機器語言程式,此微處理器有利於建構一個能夠高效地同時執行x86與ARM機器語言程式的系統。
條件載入/儲存(CONDITIONAL LOAD/STORE)指令
對微處理器而言,在指令集中內含讓載入/儲存指令被條件執行的功能是令人想要的。條件執行載入/儲存指令的意思就是,載入/儲存指令會指定一條件(如零、或負、或 大於),如果滿足條件旗標,就會由微處理器執行,如果不滿足條件旗標,就不會執行。進一步來說,在條件載入指令的情況下,若是條件滿足,隨後資料就會由記憶體載入至一架構暫存器,否則,微處理器就會將此條件載入指令視為一個不操作指令;在條件儲存指令的情況下,若是條件滿足,隨後資料就會由一架構暫存器儲存至記憶體,否則,微處理器就會將此條件儲存指令視為一個不操作指令。
如前述,參照ARM架構參考手冊所述,ARM ISA提供有包含載入/儲存指令在內之條件指令執行能力,例如手冊第A8-118至A8-125頁(可條件執行之載入暫存器指令)以及第A8-382至A8-387頁(可條件執行之儲存暫存器指令)。申請人為英國劍橋ARM有限公司在美國第5,961,633號專利案之實施例所描述的資料處理器係提供整個指令集的條件執行能力。此資料處理器可執行記憶體讀取/寫入操作,並包含一條件測試器與一指令執行單元,其形式與ARM6處理器相同。條件測試器測試處理器旗標之狀態,處理器旗標係呈現由之前執行的指令所產生之處理器狀態。只有在適當的旗標被設定為當前指令之條件欄所指定之狀態時,這個指令才會被允許以執行。若是條件測試器指出當前的指令不應被執行,這個指令就會被取消而不會改變與資料處理器有關之任何暫存器或記憶體位置的狀態。
相較之下,本文所描述之實施例係以一有效率的方式在一非循序執行微處理器內執行ISA條件載入/儲存指 令。一般而言,依據本文所述之實施例,硬體指令轉譯器係將一條件執行之ISA載入/儲存指令轉譯為一個或多個微指令構成的指令序列,以提供一非循序執行管線執行。微指令的數量與種類會受到此指令是載入指令或儲存指令、定址模式以及條件載入/儲存指令所指定之位址偏移來源之影響。微指令的數量與種類也會因為指定來源運算元其中之一(即一偏移暫存器值)之條件載入/儲存指令124是否有一預先移位操作施加其上而受影響。在一實施例中,此預移位操作包含如ARM架構參考手冊第A8-10至A8-12頁所述之操作。
在本文中,條件載入/儲存指令係一ISA指令,指示微處理器在條件滿足時,將資料從記憶體載入至一目的暫存器(條件載入)、或是將資料從一資料暫存器儲存至記憶體(條件儲存),否則就指示微處理器將指令視為一不操作指令。亦即,一條件載入指令只有在處理器條件旗標滿足此指令所指定之條件時,才會將資料由一記憶體位置載入至一處理器暫存器;一條件儲存指令只有在處理器條件旗標滿足此指令所指定之條件時,才會將資料由一處理器暫存器儲存至一記憶體位置。
第9圖係以一方塊圖詳細顯示第1圖之微處理器,尤其是其中的執行管線112。如圖中所示,在第4圖中出現過的暫存器配置表(RAT)402係耦接至一記分表(scoreboard)902、一微指令佇列904與第4圖之重排緩衝器422。此微指令佇列904係第4圖之保留站406的一部 分,且第9圖之保留站406係分別顯示第4圖之保留站406中持有來源運算元之重排緩衝器標籤與暫存器重命名標籤之部分,這在下文會有進一步說明。記分表902耦接至保留站406。保留站406耦接至微指令佇列904、暫存器配置表402、與第4圖之指令發送單元408。指令發送單元408耦接至微指令佇列904與第4圖之執行單元424。第1圖之記憶體子系統108透過一匯流排968耦接至執行單元424。此匯流排968允許資料、位址與控制信號在記憶體子系統108與執行單元424間傳遞,例如將第4圖之儲存單元416寫入的資料儲存至記憶體子系統108的儲存佇列。微指令佇列904透過一匯流排966提供微指令126至執行單元424。重排緩衝器422透過一匯流排972耦接至執行單元424。此匯流排972上包含重排緩衝器422與執行單元424間的控制信號,例如依據微指令126執行狀態對重排緩衝器之更新。
在此係以不同方式顯示第1圖之暫存器檔案106,即架構暫存器檔案106A、推測(speculative)暫存器檔案106B、架構旗標暫存器106C與推測旗標暫存器檔案106D。暫存器檔案106係耦接至微指令佇列904與第4圖之執行單元424。架構暫存器檔案106A耦接並接收來自推測暫存器檔案106B之更新信號,架構旗標暫存器106C耦接並接收來自推測旗標暫存器檔案106D之更新信號。多個多工器912中的每一個(為了清楚說明,本文將第9圖予以簡化,僅顯示單一個多工器912)都在其輸入端接收 有來自架構暫存器檔案106A之讀取埠、來自推測暫存器檔案106B之讀取埠、來自耦接至微指令佇列之常數匯流排之來源運算元。各個多工器912在其輸入端之多個來源中選擇其一,以輸出一運算元(為了清楚說明,本文將第9圖予以簡化,僅顯示單一個多工器912),作為對應多工器922的輸入之一。多個多工器914中的每一個(為了清楚說明,本文將第9圖予以簡化,僅顯示單一個多工器914)都在其輸入端接收有來自架構旗標暫存器106C之讀取埠與來自推測旗標暫存器檔案106D之讀取埠之條件旗標。各個多工器914在其輸入端之多個來源中選擇其一,以輸出一條件旗標(為了清楚說明,本文將第9圖予以簡化,僅顯示單一個多工器914),作為對應多工器924的輸入之一。也就是說,雖然圖中僅顯示一組多工器912與922,不過此微處理器100對提供至執行單元424之各個來源運算元都分別有一組多工器912/922進行處理。因此,在一實施例中,例如有六個執行單元424,架構暫存器檔案106A與/或推測暫存器檔案106B可提供兩個來源運算元給各個執行單元424,微處理器100因此具有十二組多工器912/922,各個執行單元424之各個來源運算元分配一個。此外,雖然圖中僅顯示一組多工器914與924,但微處理器100對各個執行單元424都有一組多工器914/924。一些實施例中,部分執行單元424並未接收條件旗標964,而部分執行單元424被設計從架構暫存器檔案106A與/或推測暫存器檔案106B接收少於兩個來源運算元。
架構暫存器檔案106A持有微處理器100之通用暫存器之架構狀態,例如前文所述之ARM與/或x86 ISA通用暫存器。架構暫存器檔案106A並可包含非ISA暫時暫存器,這些暫存器可供指令轉譯器104使用,例如第2圖之複雜指令轉譯器206之微碼,但它們無法由ISA指令124指定。在一實施例中,微處理器100包含一整數(integer)架構暫存器檔案與一分開的媒體架構暫存器檔案,這兩個暫存器檔案都包含在架構暫存器檔案106A之內。在一實施例中,整數架構暫存器檔案106A包含三個寫入埠與八個讀取埠(對應於四個讀取整數暫存器檔案106A之執行單元424,每個執行單元424分配兩個讀取埠),而媒體架構暫存器檔案106A包含三個寫入埠與四個讀取埠(對應於兩個讀取媒體架構暫存器檔案106A之執行單元424,每個執行單元424分配兩個讀取埠)。此架構暫存器檔案106A係利用微指令佇列904提供之架構暫存器標籤作為其索引,這在下文會有更詳細的說明。
推測暫存器檔案106B,也就是重排緩衝器暫存器檔案,包含複數個暫存器對應於重排緩衝器422之各個入口。在一實施例中,微處理器100包含一整數推測暫存器檔案與一分離的媒體推測暫存器檔案,這兩個暫存器檔案都包含於推測暫存器檔案106B之內。推測暫存器檔案106B之各個暫存器都可用來從執行單元424接收此微指令126之推測結果(即架構狀態尚未退出之結果),其中暫存器配置表402將一微指令126於重排緩衝器422之相對應 入口配置給這個微指令126。在微處理器100引退一微指令126時,它會將其結果由推測暫存器檔案106B複製至架構暫存器檔案106A內之適當暫存器。在一實施例中,每個時脈週期至多可引退三個微指令126。在一實施例中,推測暫存器檔案106B包含六個寫入埠(對應於六個執行單元424,每個執行單元424分配一個)與十五個讀取埠(對應於六個執行單元424,每個執行單元424分配兩個,另外三個用來引退送到架構暫存器檔案106A的結果)。此推測暫存器檔案106B利用微指令佇列904提供之暫存器重命名標籤作為索引,這在下文會有更詳細的說明。
架構旗標暫存器106C持有微處理器100之條件旗標的架構狀態,例如上文所述之ARM PSR與/或x86 EFLAGS暫存器。此架構旗標暫存器106C包含儲存位置以儲存微處理器100之架構狀態,此架構狀態會受到指令集架構中部分指令的影響。舉例來說,在一實施例中,依據ARM指令集架構,架構旗標暫存器106C包含四個狀態位元,即:一個負值(N)位元(在指令結果為負時設定為1)、一個零值(Z)位元(在指令結果為零時設定為1)、一個進位(C)位元(在指令會產生進位時設定為1)、以及一溢位(V)位元(在指令結果處於一溢位狀態設定為1)。依據x86指令集架構,架構旗標暫存器106C包含習知的x86 EFLAGS暫存器位元。條件載入/儲存指令124係指定一條件,在此條件下,記憶體之載入/儲存操作將依據條件旗標之當前數值是否滿足條件而選擇性地執行。依據一相容於ARM指 令集架構之實施例,條件載入/儲存指令124之條件碼欄位係指定於上方四個位元(即位元[31:28]),以便能依據下表3對十六個不同的可能值進行編碼。對架構版本相關之數值(0b1111)而言,此指令無法由架構版本預測,而是用來指出用於其他版本之一非條件指令延伸空間。
推測旗標暫存器檔案106D,即重排緩衝器旗標檔案,包含有複數個暫存器對應於重排緩衝器422之多個入口。推測旗標暫存器檔案106D之各個暫存器都可從一執行單元424接收此微指令126之推測(即尚未引退至架構狀態)條件旗標,其中暫存器配置表402將一微指令126於重排緩衝器422之對應入口配置給這個微指令126。在微處理器100引退一微指令126時,若此微指令126係一寫入條件旗標之微指令,微處理器100會將其條件旗標結果從推測旗標暫存器檔案106D複製至架構旗標暫存器106C。在一實施例中,推測旗標暫存器檔案106D包含六個寫入埠(對應於六個執行單元424,每一個分配一個寫入埠)與七個讀取埠(對應於六個執行單元424,每一個分配一個, 另一個用來引退送到架構旗標暫存器106C的結果)。此推測旗標暫存器檔案106D利用微指令佇列904提供之暫存器重命名標籤作為其索引,這在下文會有更詳細的說明。
各個執行單元424透過結果匯流排128提供一結果值(例如一整數/浮點算術操作結果、布林操作結果、移位/轉動操作結果、媒體操作結果、載入/儲存資料等等)與一條件旗標結果。在一實施例中,並非所有執行單元424都產出與/或使用(consume)一條件旗標結果。複數個多工器922中之每一個多工器922的其他輸入端,都由執行單元424透過結果匯流排128接收來源運算元,並在這些來源運算元中選擇其一,以輸出一運算元作為一對應執行單元424的輸入。複數個多工器924中的每一個多工器924的其他輸入端,都由執行單元424透過結果匯流排128接收條件旗標,並在這些來源中選擇其一作為輸出,以提供至一對應執行單元424作為輸入。此外,執行單元424之結果係透過結果匯流排128寫入此推測暫存器檔案106B,執行單元424之條件旗標結果係透過結果匯流排128寫入此推測旗標暫存器檔案106D。就一較佳實施例而言,各個執行單元424中用以輸入來源運算元之輸入端,係耦接以接收來自一對應多工器922之來源運算元,此多工器922則是由一對應多工器912接收來源運算元;類似地,各個執行單元424(接收一條件旗標)中用以輸入條件旗標之輸入端係耦接以接收來自一對應多工器924之條件旗標,此多工器924由一相對應多工器914接收條件旗標。
如前述,重排緩衝器422包含多個入口以持有微指令126之相關資訊,其包含控制/狀態資訊,如有效、完成、例外與融合位元。如前述,推測暫存器檔案106B為一對應之微指令126持有執行結果,而推測旗標暫存器檔案106D則是為對應之微指令126持有條件旗標結果。
暫存器配置表402依據程式順序輸出微指令126。ISA指令124係以一順序出現在程式中。指令轉譯器104依據ISA指令出現在程式中的順序,亦即依據程式順序,將一ISA指令轉譯為一個或多個微指令126。若是一ISA指令124被轉譯為多於一個微指令126,這些微指令126之順序係由指令轉譯器104所決定。微指令126的程式順序是,與一給定ISA指令124相關的微指令126相關,其係維持此ISA指令124之程式順序,而與一給定ISA指令124相關之微指令126係維持著由指令轉譯器104所指示的順序。當暫存器配置表402由指令轉譯器104接收到微指令126,暫存器配置表402隨後將重排緩衝器422之多個入口依據程式順序以環形佇列方式分配給各個微指令126。重排緩衝器422之入口係以環型佇列方式進行排列,各個入口具有一索引值,即重排緩衝器標籤或重排緩衝器索引。所以各個微指令126都具有一重排緩衝器標籤,其數值等同於暫存器配置表402分配給此微指令126之重排緩衝器入口之索引。當一執行單元424執行一微指令126,執行單元424係將執行結果伴隨著此微指令126之重排緩衝器標籤一起輸出。前述特徵使得執行結果可以被寫入重排緩 衝器標籤所指定之推測暫存器檔案106B之暫存器,並且使條件旗標結果(如果有產生的話)可以被寫入重排緩衝器標籤所指定之推測旗標暫存器檔案106D之暫存器。前述特徵並使指令發送單元408得以確認哪一個執行結果可作為來源運算元提供給相關的微指令126。若是重排緩衝器422已滿,暫存器配置表402就會停止輸出微指令126。
在暫存器配置表402將重排緩衝器422內之一入口分配給一微指令126的時候,暫存器配置表402將此微指令126提供至微指令佇列904。在一實施例中,此暫存器配置表402每個時脈週期可提供至多三個微指令126至微指令佇列904。在一實施例中,此微指令佇列904包含三個寫入埠(每個暫存器配置表402輸出之微指令126分配一個)與六個讀取埠(每個執行單元424的結果分配一個)。各個微指令佇列904之入口持有各個微指令126之相關資訊。這些資訊包含各個來源運算元之兩個標籤欄:一個架構暫存器標籤與一個重命名暫存器標籤。架構暫存器標籤係用以作為架構暫存器檔案106A之索引,使架構暫存器檔案106A可以產生所需的來源運算元。指令轉譯器104係利用來自轉譯為微指令126之ISA指令124的數值,填入架構暫存器標籤。重命名暫存器標籤係用以作為推測暫存器檔案106B與推測旗標暫存器檔案106D之索引。由指令轉譯器104接收到微指令時,重命名暫存器標籤會是空的,並在執行暫存器重命名操作時,暫存器配置表402會填入重命名暫存器標籤。此暫存器配置表402會維護一重命名 表。當暫存器配置表402由指令轉譯器104接收一微指令126,對此微指令126所指定之各個架構來源暫存器而言,暫存器配置表402會檢視重命名表中架構來源暫存器標籤的數值,以確認架構來源暫存器中的最近、循序且先前寫入之重排緩衝器標籤,並且,暫存器配置表402會利用此最近、循序且先前寫入之重排緩衝器標籤填入重命名暫存器標籤欄。對於一個指定一來源運算元暫存器Q之微指令A而言,最近、循序且先前寫入之數值係一微指令B滿足下述條件:(1)微指令B在程式順序上係在微指令A之前,亦即在程式順序上較微指令A為舊;(2)微指令B寫入暫存器Q;以及(3)微指令B係滿足條件(1)與(2)之最近的微指令(即程式順序上最新的微指令)。在此概念下,暫存器配置表402會對架構來源暫存器重新命名。以此方法,因為第4圖之指令發送單元408係在微指令126之所有來源運算元都可獲得後,才會發送微指令A至一執行單元424執行,所以,暫存器配置表402會產生微指令A與微指令B之關聯資訊(dependency)。(在此實例中,微指令A即為相關微指令)當指令發送單元408因窺探(snoop)而發現一執行單元424輸出之一重排緩衝器標籤吻合來源運算元之重命名暫存器標籤時,指令發送單元408就將此來源運算元記錄為可獲得。若是對重命名表內之架構暫存器標籤的探查結果顯示沒有最近、循序且先前寫入之數值,暫存器配置表402就不會產生關聯(在一實施例中,在重命名暫存器標籤寫入一預設值即表示為無關聯),而來源運算元將會 由架構暫存器檔案106A獲得(利用架構暫存器標籤)。
如前述,各個執行單元424係關聯至一個保留站406。保留站406持有各個等待發送至其相對應執行單元424之微指令126的重排緩衝器標籤。各個保留站406入口並持有此微指令126之多個來源運算元之重命名暫存器標籤。在各個時脈週期內,指令發送單元408會窺探執行單元424所輸出之重排緩衝器標籤來確認微指令126是否完成發送至執行單元424以供執行之準備。尤其是,指令發送單元408會比較所窺探之重排緩衝器標籤與保留站406內之重命名暫存器標籤。對於保留站406入口內之微指令126而言,一旦執行單元424已可以執行微指令126並且此微指令126之來源運算元已可獲得時,微指令126就完成發送的準備。若是不存在關聯,來源運算元將會由架構暫存器檔案106A取得即表示此來源運算元係可獲得的;又,若是在微指令到達執行單元424之時,重命名暫存器標籤所指示之最近、循序且先前寫入之結果將可由指向(forwarding)結果匯流排128或是由推測暫存器檔案106B取得時,亦表示此來源運算元係可獲得的。若是保留站406內有多個完成準備的微指令126,指令發送單元408會撿取最舊的微指令126來發送。在一實施例中,因為微指令126離開保留站406後,需要花費多個時脈週期(例如四個)才能抵達執行單元424,指令發送單元408會檢視是否完成準備,亦即是否執行單元424與來源運算元在微指令126抵達執行單元424時都處於可獲得的狀態。
當暫存器配置表402將微指令126寫入至微指令佇列904,暫存器配置表402也會透過記分表902將微指令126之重排緩衝器標籤寫入對應於將執行此微指令126之執行單元424的保留站406,此暫存器配置表402也會將重命名暫存器標籤寫入保留站406入口。當保留站406內之一微指令完成發送至一執行單元424之準備,此保留站406就會輸出此完成準備之微指令126的重排緩衝器標籤,作為微指令佇列904之索引,而微指令佇列904相應地將此重排緩衝器標籤索引之微指令126輸出至執行單元424。微指令佇列904也會輸出重命名暫存器標籤與架構暫存器標籤至暫存器檔案106,暫存器檔案106則是相應地將這些標籤所指定之來源運算元輸出至執行單元424。最後,微指令佇列904會輸出其他與微指令126有關的資訊,包含常數匯流排952上的常數。在一實施例中,這些常數可以包含一個64位元之位移值、一個64位元之後續指令指標值與多種算術常數,例如零常數。
記分表902係一個位元陣列,其中的各個位元係對應於一個重排緩衝器索引,因此對應的重排緩衝器422入口可分配給微指令126。當暫存器配置表402透過記分表902將微指令126寫入保留站406時,記分表902之位元會被設定。而當微指令126被執行時、或是因為分支指令之誤預測且已修正後而施加於微指令126之清除動作,記分表902之位元會被清除。因此,記分表902內之一設定位元係對相對應之微指令126指出執行管線112,但尚未執行, 亦即等待執行中。當微指令126在由暫存器配置表402傳送至保留站406之過程經過記分表902時,記分表902中對應於重命名暫存器標籤之位元就會被檢查,以確認關聯於目前微指令(亦即最近、循序且先前寫入者順序在前之最近寫入器)之微指令126是否正在等待。若否,在執行單元424可使用且保留站406內沒有更舊且完成準備之微指令126的情況下,此微指令126可在下一個週期發送。值得注意的是,若是暫存器配置表402對一最近、循序且先前寫入者產生關聯,此最近、循序且先前寫入者不是在等待、就是執行而未引退,這是因為暫存器配置表402不會對一個已引退之微指令126產生關聯。
雖然第9圖之實施例所顯示的是一個非循序執行管線112,不過,在微處理器100內之其他結構,亦可作為實施例,以類似於本文所述的方式執行由條件載入/儲存指令124轉譯而來的微指令126。舉例來說,可利用其他結構來完成暫存器重命名以及非循序微指令126之發送與執行。
請參照第10A圖,圖中係一方塊圖詳細顯示第9圖中的載入單元416。此載入單元416包含一加法器1004A與一控制邏輯1002A耦接至一第一多工器1006A與一第二多工器1006B,控制邏輯1002A由微指令佇列904接收匯流排966上的微指令126。第10A圖即顯示控制邏輯1002A接收一條件載入(LD.CC)微指令126(這在第11、12與19圖會有更詳細的說明)。進一步來說,此LD.CC微指令126包含一條件,即轉譯出此LD.CC微指令126之條件載入指 令124所指定之條件。控制邏輯1002A會對微指令126解碼,以瞭解如何執行。
加法器1004A係將三個加數相加以產生一記憶體位址透過匯流排968提供至記憶體子系統108。其中一個加數是微指令126之第二源運算元,對於第11與19圖所示之LD.CC微指令而言,第二來源運算元就是基底暫存器(RN)或是偏移暫存器(RM)之先前數值。這在下文會有更詳細的說明。第二個加數是微指令126之第四來源運算元,對於第11與19圖所示之LD.CC微指令而言,第四來源運算元就是一立即偏移常數或是一零值常數。這在下文會有更詳細的說明。第三個加數是多工器1006A之輸出值。多工器1006A接收一零常數輸入與第一來源運算元962,對於第11與19圖所示之LD.CC微指令而言,第一來源運算元就是目的暫存器(RT)或是基底暫存器(RN)之先前數值。這在下文會有更詳細的說明。在第11圖(包含第11A及11B圖)之實施例中,控制邏輯1002A控制多工器1006A選擇零常數輸入。然而,在第19圖(包含第19A及19B圖)之步驟1924/1926/1934/1936所述之另一個實施例,LD.CC指令則是指示載入單元416選擇第一來源運算元962。在一實施例中,加法器1004A包含一第四輸入,此第四輸入係一區段描述值,在微處理器100運作於x86模式的時候協助產生位址。
控制邏輯1002A也會由執行單元424,經由結果匯流排128,接收一運算元生效信號,以指出載入單元416所 接收之來源運算元是否有效。另外,如下文第12圖所示,控制邏輯1002A利用匯流排972上之一結果有效輸出,向重排緩衝器422指示來源運算元是有效抑或無效。
控制邏輯1002A亦由記憶體子系統108,經由匯流排968接收一例外信號,以指出微指令126是否導致一例外條件之發生。此控制邏輯1002A本身亦可偵測例外條件。另外,如下文第12圖所示,控制邏輯1002A亦透過匯流排972向重排緩衝器422指出是否存在例外條件,其係本身測得例外條件還是依據來自記憶體子系統108之指示。
控制邏輯1002A透過匯流排968由記憶體子系統108接收一快取錯失指標,指出載入位址是否不存在於記憶體子系統108之資料快取(圖未示)內。另外,如下文第12圖所述,控制邏輯1002A並透過匯流排972向重排緩衝器422指出是否有快取錯失發生。
控制邏輯1002A接收條件旗標964作為其第三來源運算元。如下文第12圖所述,控制邏輯1002A並確認條件旗標是否滿足微指令126內指定之條件。若是,控制邏輯1002A會指示記憶體子系統透過匯流排968之一執行載入(do-the-load)指標將資料從記憶體載入。所載入之資料係透過匯流排968由記憶體子系統108回傳至多工器1008A。此外,控制邏輯1002A會控制多工器1008A選擇此資料以提供至結果匯流排128。不過,若是條件並不滿足,控制邏輯1002A就會控制多工器1008A選擇第一來源運算元以提供至結果匯流排128,就第11與19圖之LD.CC微指令 而言,第一來源運算元就是目的暫存器(RT)或是基底暫存器(RN)之先前數值,這在下文會有更詳細的說明。此外,因為條件並不滿足,條件邏輯1002A會透過匯流排968之執行載入指標,指示記憶體子系統108不要執行任何會改變架構狀態的動作。這在下文會有更詳細的說明。
請參照第10B圖,圖中係一方塊圖詳細顯示第9圖之儲存單元416。此儲存單元416包含之許多元件與信號係類似於第10A圖所示之載入單元,並以類似標號表示,僅以字尾“B”取代字尾“A”作為區別。
第10B圖顯示控制邏輯1002B接收一條件載入有效位址(LEA.CC)微指令126(在第11、13、15、19與20圖會有更詳細的說明)。LEA.CC微指令126亦包含一條件,即轉譯出LEA.CC微指令126之條件載入指令124所指定之條件。此控制邏輯1002B會對微指令126進行解碼以便瞭解如何執行。
加法器1004B係將三個加數相加以產生一記憶體位址且透過匯流排968提供給記憶體子系統108,進一步來說,就是提供至記憶體子系統108之一儲存佇列入口。其中一個加數係微指令126之第二來源運算元,就第11、15、19與20圖所述之LEA.CC微指令126而言,此第二來源運算元是一零常數、偏移暫存器之先前數值、或是一暫時暫存器(T2),這在下文會有更詳細的說明。第二加數係微指令126之第四來源運算元,就第11、15、19與20圖所述之LEA.CC微指令126而言,此第四來源運算元是一立即偏 移常數或是一零值常數,這在下文會有更詳細的說明。第三加數係多工器1008B之輸出值。多工器1008B接收一零常數輸入與第一來源運算元962,就第11、15、19與20圖所述之LEA.CC微指令126而言,此第一來源運算元是基底暫存器之先前數值,這在下文會有更詳細的說明。就第11、15、19與20圖所述之實施例而言,在對一LEA.CC微指令進行解碼時,控制邏輯1002B會控制多工器1008B選擇第一來源運算元962,即基底暫存器(RN)之先前數值。
控制邏輯1002B也會透過結果匯流排128由執行單元424接收一運算元生效信號,以指出載入單元416接收之來源運算元是否有效。另外,如下文第13圖所示,控制邏輯1002B利用匯流排972上之一結果生效輸出,向重排緩衝器422指出此來源運算元是有效抑或無效。
控制邏輯1002B並接收透過匯流排968由記憶體子系統108接收一例外信號以指出此微指令126是否導致一例外條件產生。此控制邏輯1002B亦可偵測例外條件本身。另外,如下文第16圖所示,控制邏輯1002B本身亦透過匯流排972向重排緩衝器422指出是否存在例外條件,而例外條件係本身測得還是依據來自記憶體子系統108之指示。
控制邏輯1002B亦接收條件旗標964作為其第三來源運算元。如下文第13圖所述,控制邏輯1002B確認條件旗標是否滿足微指令126內所指定之條件。若是,控制邏輯1002B會控制多工器1008B選擇由加法器1004B所產生 並提供至匯流排128之記憶體位址968。不過,若條件並未滿足,控制邏輯1002B就會控制多工器1008B選擇第一來源運算元962並提供至結果匯流排128,而對第11、15、19與20圖的LEA.CC微指令而言,第一來源運算元就是基底暫存器之先前數值。這在下文會有更詳細的說明。
請參照第10C圖,圖中係以一方塊圖詳細顯示第9圖中的整數單元412。此整數單元412包含控制邏輯1002C,此控制邏輯1002C耦接並控制一多工器1008C。此控制邏輯1002C透過匯流排966接收來自指令佇列904之一微指令126。第10C圖顯示控制邏輯1002C接收一條件移動(MOV.CC)微指令126(在第11、14、15、19與20圖會有更詳細的說明)。進一步來說,此MOV.CC微指令126包含一條件,亦即由轉譯出此MOV.CC微指令126之條件載入指令124所指定之條件。控制邏輯1002C係對此微指令126進行解碼以瞭解如何執行。
控制邏輯1002C並由執行單元424透過結果匯流排128接收一運算元生效信號,以指出載入單元416所接收之來源運算元是否有效。另外,如下文第14圖所示,控制邏輯1002C利用匯流排972上之一結果生效輸出,向重排緩衝器422指出此來源運算元有效抑或無效。
控制邏輯1002C並接收透過匯流排968由記憶體子系統108接收一例外信號,指出此微指令126是否導致一例外條件產生。此控制邏輯1002C亦可偵測例外條件本身。另外,如下文第14圖所示,控制邏輯1002C亦透過匯流 排972向重排緩衝器422指出是否存在例外條件,這是例外條件是本身測得還是依據來自記憶體子系統108之指示。
多工器1008C接收微指令126之第二來源運算元作為一輸入,就第11、15、19與20圖之實施例所示之MOV.CC微指令126而言,此第二來源運算元就是一暫時暫存器(T1)。多工器1008C接收微指令126之第一來源運算元作為一第二輸入,就第11、15、19與20圖之實施例所示之MOV.CC微指令126而言,此第一來源運算元就是資料暫存器(RT)之前值或是基底暫存器(RN)之先前數值。此多工器1008C亦接收一第三輸入或多個其他輸入,不過,對於第11、15、19與20圖之實施例所示之條件移動微指令126而言,此多工器1008C並未使用其他算術邏輯單元的輸出信號。
控制邏輯1002C亦接收條件旗標964作為其第三來源運算元。如下文第14圖所示,控制邏輯1002會確認條件旗標是否滿足微指令126所指定的條件。若是,控制邏輯1002C會控制多工器1008C選擇第二來源運算元提供至結果匯流排128,就第11、15、19與20圖之實施例所示之MOV.CC微指令126而言,第二來源運算元就是暫時暫存器(T1);不過,若是條件並未滿足,控制邏輯1002C就會控制多工器1008C選擇第一來源運算元962提供至結果匯流排128,而就第11、15、19與20圖之實施例所示之MOV.CC微指令126而言,第一來源運算元962就是資料 暫存器之先前數值或是基底暫存器(RN)之先前數值。這在下文第14圖會有更詳細的說明。
請參照第10D圖,圖中係以一方塊圖詳細顯示第9圖中的儲存單元416。第10D圖的儲存單元416係相同於第10B圖之儲存單元416;不過,第10D圖顯示儲存單元416接收一條件儲存融合(ST.FUSED.CC)微指令126時的操作,而非接收一LEA.CC微指令時之運作。
加法器1004B係將三個加數相加以產生一記憶體位址並透過匯流排968提供至記憶體子系統108,進一步來說,就是提供至記憶體子系統108之一儲存佇列入口,這在第15與16圖會有更詳細的說明。其中一個加數係微指令126之第二來源運算元,就第11、15、19與20圖之ST.FUSED.CC微指令126而言,此第二來源運算元就是基底暫存器的先前數值或是一暫時暫存器(T1)。這在下文會有更詳細的說明。第二加數係微指令126之第四來源運算元,就第11、15、19與20圖之ST.FUSED.CC微指令126而言,此第四來源運算元就是一立即偏移常數或是一零值常數,這在下文會有更詳細的說明。第三加數係多工器1006B之輸出值。多工器1006B接收一零值常數輸入與第一來源運算元962,就第11、15、19與20圖之ST.FUSED.CC微指令126而言,此第一來源運算元962就是資料暫存器的先前數值,這在下文會有更詳細的說明。對於第11、15、19與20圖之實施例而言,控制邏輯1002B在其對一ST.FUSED.CC微指令進行解碼時,控制多工器1006B選擇 零常數輸入。在一實施例中,此加法器1004B包含一第四輸入,此第四輸入係一分區描述值,以支援微處理器100操作於x86模式下所產生之位址。
控制邏輯1002B由執行單元424透過結果匯流排128接收一運算元生效指令,以指出載入單元416所接收之來源運算元是否有效。另外,如下文第16圖所示,此控制邏輯1002B並透過匯流排972上之一結果生效輸出,向重排緩衝器422指出此來源運算元是有效抑或無效。
控制邏輯1002B並接收透過匯流排968由記憶體子系統108接收一例外信號以指出此微指令126是否導致一例外條件產生。此控制邏輯本身1002B亦可偵測例外條件。另外,如下文第16圖所示,控制邏輯1002B亦透過匯流排972向重排緩衝器422指出是否存在例外條件,且這例外條件是本身測得還是依據來自記憶體子系統108之指示。
控制邏輯1002B亦接收條件旗標964作為其第三來源運算元。如下文第16圖所述,控制邏輯1002B確認條件旗標是否滿足微指令126內所指定之條件。若是,請參照下文第10E、15與17圖,控制邏輯1002B會在匯流排968之執行儲存指標(do-the-store instruction)上產生一數值提供給記憶體子系統108,以指示記憶體子系統108將記憶體位址968寫入儲存佇列入口,隨後再將由ST.FUSED.CC微指令126之儲存資料部分所寫入之資料,儲存至記憶體。不過,若是條件並未滿足,控制邏輯1002B就會透過 執行儲存指標968指示記憶體子系統108不要執行任何改變架構狀態之動作,這在下文會有更詳細的說明。第10F圖之另一個實施例則是描述儲存單元416執行一條件儲存融合更新(ST.FUSED.UPDATE.CC)微指令126。
請參照第10E圖,圖中係以一方塊圖詳細顯示第9圖之整數單元412。第10E圖之整數單元412係相同於第10C圖之整數單元412;不過,第10E圖係描述整數單元412接收到一個ST.FUSED.CC微指令126時之運作,而非接收到一個MOV.CC微指令126之運作。此ST.FUSED.CC微指令126係一個單一的微指令126,僅佔據單一個重排緩衝器422入口、單一個保留站406入口、單一個指令轉譯器104槽、單一個暫存器配置表402槽(slot)等。不過,此微指令會發送至兩個執行單元424,即發送至儲存單元416(如第10D、10E、15、16與17圖所述)與整數單元412。儲存單元416將此ST.FUSED.CC微指令視為一儲存位址微指令126執行,整數單元412將此ST.FUSED.CC微指令視為一儲存資料微指令126執行。在此理解下,ST.FUSED.CC微指令可理解為是將兩個微指令126“融合(fused)”成單一個微指令126。控制邏輯1002C在其對ST.FUSED.CC微指令126進行解碼時,會控制多工器1008C選擇第一來源運算元962且提供至結果匯流排128,對第15與20圖之ST.FUSED.CC微指令126而言,即是來自資料暫存器之資料值,這在下文第15、17與20圖會有更詳細的說明。如第17圖所述,資料暫存器提供至結果匯流排128之資料, 會被寫入記憶體子系統108之儲存佇列中。
請參照第10F圖,圖中係以一方塊圖詳細顯示第9圖之儲存單元416之另一實施例。第10F圖之儲存單元416之許多部分都類似於第10D圖之儲存單元416;不過,第10F圖係描述儲存單元416接收到一個條件儲存融合更新(ST.FUSED.UPDATE.CC)微指令126時之操作,而不是接收到ST.FUSED.CC微指令126之操作。此ST.FUSED.UPDATE.CC微指令126係將一更新值寫入目的暫存器(即第20圖之實施例中的步驟2012與2014所述之基底暫存器),這在下文第20與21圖會有更詳細的說明。第10F圖之儲存單元416與第10D圖之儲存單元416的其他差異處係如下所述。
第10F圖係採用三對一的多工器1008F來取代第10D圖中之二對一的多工器1008B。第10F圖之多工器1008F係接收微指令126之第二來源運算元作為其第三輸入,就第20圖之ST.FUSED.UPDATE.CC微指令而言,此第二來源運算元即是基底暫存器(RN)之先前數值,這在下文會有更詳細的說明。第10F圖並具有一第三多工器1012F,接收微指令126之第二來源運算元以及加法器1004B之加總輸出1022。控制邏輯1002B會視其條件旗標是否滿足微指令126內所指定之條件,以及此ST.FUSED.UPDATE.CC微指令126是第20圖所示之後索引類型或是預索引類型(亦即是第20圖之步驟2012之條件儲存融合更新後索引(ST.FUSED.UPDATE.POST.CC)微指令或是第20圖之步驟 2014之條件儲存融合更新預索引(ST.FUSED.UPDATE.PRE.CC)微指令),依據下表4控制多工器1008F與1012F。這在下文第20與21圖亦有說明。
請參照第11圖(包含11A及11B圖),圖中係以一流程圖顯示第9圖微處理器100之指令轉譯器104將條件載入指令124轉譯為微指令126之操作。此流程始於步驟1102。
在步驟1102中,指令轉譯器104遭遇一條件載入指令124,在步驟1112至1136之流程中,指令轉譯器104會依據條件載入指令124之特徵,將其轉譯為一個或多個微指令126。此條件載入指令124指定一條件(在第11圖中標 示為<C>),而在條件旗標滿足此條件時,資料將會由一記憶體位址載入一架構目的暫存器。在第11A及11B圖中,目的暫存器係標示為“RT”。條件載入指令124亦指定一架構基底暫存器與一偏移量,此基底暫存器持有一基底位址。在第11圖中,基底暫存器係標示為“RN”。偏移量可能選自三個來源:(1)由條件載入指令124所指定之一立即值;(2)由一架構偏移暫存器所持有之值;或是(3)將偏移暫存器持有之值以條件載入指令124所指定之立即值進行移位操作。在第11圖中,偏移暫存器係標示為“RM”。條件載入指令124之一個特徵係定址模式。定址模式指定如何計算將要用來載入資料之記憶體位址。第11圖之實施例提供三種可能的定址模式:後索引、預索引、以及偏移定址。在後索引定址模式中,記憶體位址就是基底位址,基底暫存器係以基底位址與偏移量之加總進行更新。在預索引定址模式中,記憶體位址係基底位址與偏移量之加總,基底暫存器係以基底位址與偏移量之加總進行更新。在索引定址模式,記憶體位址係基底位址與偏移量之加總,而基底暫存器不會更新。值得注意的是,此條件載入指令124亦可以是指定基底位址與偏移量之差,而非其加總。在此情況下,指令轉譯器104就會發出與條件載入指令124指定加總時略為不同的微指令126。舉例來說,指令轉譯器104所產生之一立即偏移量就會是相反的。接下來進入決策步驟1103。
在決策步驟1103中,指令轉譯器104決定偏移量之來 源是一立即值、一暫存器值、或是一移位後之暫存器值。若是一立即值,流程即會前進至決策步驟1104;若是一暫存器值,流程就會前進至決策步驟1106;若是一移位後之暫存器值,流程就會前進至決策步驟1108。
在決策步驟1104中,指令轉譯器104確認此定址模式是後索引、預索引、還是偏移定址。若是後索引,流程就會前進至步驟1112;若是前索引,流程就會前進至步驟1114;若是偏移定址,流程就會前進至步驟1116。
在決策步驟1106中,指令轉譯器104確認此定址模式是後索引、預索引、還是偏移定址。若是後索引,流程就會前進至步驟1122;若是前索引,流程就會前進至步驟1124;若是偏移定址,流程就會前進至步驟1126。
在決策步驟1108中,指令轉譯器104確認此定址模式是後索引、預索引、還是偏移定址。若是後索引,流程就會前進至步驟1132;若是前索引,流程就會前進至步驟1134;若是偏移定址,流程就會前進至步驟1136。
在步驟1112中,指令轉譯器104將立即偏移後索引條件載入(immediate offset post-indexed conditional load)指令124轉譯為兩個微指令126:一條件載入微指令(LD.CC)126與一條件載入有效位址微指令(LEA.CC)126。每個微指令都具有條件載入指令124所指定之條件。此LD.CC微指令126係:(1)將資料暫存器,亦即被指定為條件載入指令124的目的暫存器之架構暫存器106A,指定為其目的暫存器;(2)將資料暫存器指定為一來源運算元962;(3)將基底暫存 器,亦即被指定為條件載入指令124的基底暫存器之架構暫存器106A,指定為一來源運算元962;(4)將條件旗標964指定為一來源運算元;以及(5)將一零常數952指定為一來源運算元962。此LD.CC微指令126之執行的詳細說明可參照第12圖。LEA.CC微指令126係:(1)將基底暫存器,亦即被指定為條件載入指令124的基底暫存器之架構暫存器106A,指定為其目的暫存器;(2)將基底暫存器指定為一來源運算元962;(3)將一零常數952指定為一來源運算元962;(4)將條件旗標964指定為一來源運算元;以及(5)將條件載入指令124所指定之立即常數952指定為一來源運算元962。值得注意的是,若是LD.CC微指令導致一例外事件產生(例如分頁錯誤),隨後產生之LEA.CC微指令的結果就不會被引退至架構狀態來更新基底暫存器,即使這個結果可能會被寫入推測暫存器檔案106B。
在步驟1114中,指令轉譯器104將立即偏移預索引條件載入指令124轉譯為兩個微指令126:即類似於步驟1112中所述之LD.CC微指令126與LEA.CC微指令126,但步驟1114之LD.CC微指令係將由條件載入指令124所指定之立即常數952指定為來源運算元962。相較之下,步驟1112之LD.CC微指令則是將零常數952指定為來源運算元962。因此,計算出來將用於載入資料之記憶體位址會是基底位址與偏移量之加總,這在第12圖會有更詳細的說明。
在步驟1116中,指令轉譯器104將立即偏移偏移定位索引條件載入指令124轉譯為單一個微指令126:即類似 於步驟1114中所述之LD.CC微指令126。因為偏移定位之定位模式並不需要請求更新基底暫存器,所以此步驟不需要步驟1112與1114所述之LEA.CC微指令126。
在步驟1122中,指令轉譯器104將暫存器偏移後索引條件載入指令124轉譯為兩個微指令126:一個LD.CC微指令126與一個LEA.CC微指令126。每個微指令126都具有由條件載入指令124所指定之條件。其中,LD.CC微指令與步驟1112所述者相同。LEA.CC微指令126則是:(1)將基底暫存器,亦即被指定為條件載入指令124的基底暫存器之架構暫存器106A,指定為其目的暫存器;(2)將基底暫存器指定為一來源運算元962;(3)將偏移暫存器,亦即被指定為條件載入指令124的偏移暫存器之架構暫存器106A,指定為一來源運算元;(4)將條件旗標964指定為一來源運算元;(5)將一零常數952指定為來源運算元962。也就是說,步驟1122之LEA.CC微指令除了是將偏移暫存器指定為一來源運算元而非將一零常數指定為其第二來源運算元,以及將一零常數而非將立即常數指定為其第四來源運算元,其他都類似於步驟1112之LEA.CC微指令。因此,計算出來之更新基底位址,會是基底位址與來自偏移暫存器之暫存器偏移量之加總,這在第13圖會有更詳細的說明。
在步驟1124中,指令轉譯器係將暫存器偏移預索引條件載入指令124轉譯為三個微指令126,分別是:一非條件載入有效位址微指令(LEA)126、一條件載入微指令 (LD.CC)126與一條件移動微指令(MOV.CC)126。LD.CC微指令與MOV.CC微指令都具有由條件載入指令124所指定之條件。LEA微指令則是:(1)將暫時暫存器(T1)指定為其目的暫存器;(2)將基底暫存器,亦即被指定為條件載入指令124的基底暫存器之架構暫存器106A指定為一來源運算元962;(3)將偏移暫存器,亦即被指定為條件載入指令124的偏移暫存器之架構暫存器106A,指定為一來源運算元962;(4)指定第三源運算元為忽略(DC)(因為這是非條件的微指令,不需要條件旗標964作為來源運算元962);以及(5)將一零常數952指定為一來源運算元962。請同時參照第13圖所述,LEA微指令126之執行除了是非條件外,其他部分都類似於LEA.CC微指令。LD.CC微指令則是將:(1)目的暫存器,亦即被指定為條件載入指令124的目的暫存器之架構暫存器106A,指定為其目的暫存器;(2)將目的暫存器指定為一來源運算元;(3)將暫時暫存器(T1),亦即被指定為條件載入指令124的暫時暫存器之架構暫存器106A,指定為一來源運算元;(4)將條件旗標964指定為一來源運算元;以及(5)將一零常數952指定為一來源運算元962。亦即,步驟1124之LD.CC微指令係類似於步驟1122。不過,步驟1124之LD.CC微指令係將暫存器T1(即非條件載入有效位址微指令之目的暫存器)指定為一來源運算元962,而非如步驟1122之LD.CC微指令係將基底暫存器指定為來源運算元962。因此,計算出來將用於資料載入之記憶體位址,會是基底位址與暫存器偏 移量之加總。MOV.CC微指令則是:(1)將基底暫存器,亦即被指定為條件載入指令124的基底暫存器之架構暫存器106A,指定為其目的暫存器;(2)將基底暫存器指定為一來源運算元962;(3)將暫時暫存器(T1),亦即被指定為條件載入指令124的暫時暫存器之架構暫存器106A,指定為一來源運算元962;(4)將條件旗標964指定為一來源運算元;以及(5)將一零常數952指定為來源運算元962。因此,MOV.CC微指令會導致基底暫存器依據基底位址與暫存器偏移量(來自LEA微指令之暫存器T1)之加總進行更新。值得注意的是,若是LD.CC微指令導致一例外事件(例如分頁錯誤)發生,隨後產生之MOV.CC微指令的結果就不會被引退至架構狀態來更新基底暫存器,即使這個結果可能會被寫入推測暫存器檔案106B。
在步驟1126中,指令轉譯器104係將暫存器偏移偏移定址條件載入指令(register offset offset-addressed conditional load instruction)124轉譯為兩個微指令126,分別是:一個非條件載入有效位址微指令(LEA)126與一個條件載入微指令(LD.CC)126。這兩個微指令係類似於步驟1124之LEA微指令與LD.CC微指令。值得注意的是,此步驟並不需要MOV.CC微指令,因為偏移定位之定位模式並不需要請求更新基底暫存器。
在步驟1132中,指令轉譯器104係將移位暫存器偏移後索引條件載入指令(shifted register offset post-indexed conditional load instruction)124轉譯為三個微指令126,分 別是:一個移位微指令(SHF)126、一個條件載入微指令(LD.CC)126以及一個條件載入有效位址微指令(LEA.CC)126。SHF微指令126係:(1)將暫存器(T2)亦即暫時暫存器106,指定為其目的暫存器;(2)將偏移暫存器(RM),亦即被指定為條件載入指令124的偏移暫存器之架構暫存器106A,指定為一來源運算元962;(3)指定第二來源運算元為忽略(DC);(4)指定第三來源運算元為忽略(DC)(這是因為移位微指令係非條件之指令,因而不需要條件旗標964作為其來源運算元);以及(5)將條件載入指令124所指定之立即常數952指定為一來源運算元962,此立即常數係指定偏移暫存器內將被移位以產生移位暫存器偏移量之值的大小。此步驟之LD.CC微指令係相同於步驟1112所述者。LEA.CC微指令則是:(1)將基底暫存器,亦即被指定為條件載入指令124的基底暫存器之架構暫存器106A,指定為其目的暫存器;(2)將基底暫存器指定為一來源運算元962;(3)將暫存器(T2),亦為作為移位微指令(SHE)之目的暫存器之暫時暫存器106A,指定為一來源運算元962;(4)將條件旗標964指定為一來源運算元;(5)將一零常數952指定為一來源運算元962。亦即,除了是將暫存器(T2)指定為來源暫存器而非將偏移暫存器指定為其第二來源運算元之外,步驟1132之LEA.CC微指令之其他部分係類似於步驟1122所述。因此,計算出來之更新基底位址,會是基底位址與移位暫存器偏移量之加總。
在步驟1134中,指令轉譯器104係將移位暫存器偏移 預索引條件載入指令轉譯為四個微指令,分別是:一個移位微指令(SHF)126、一個非條件載入有效位址微指令(LEA)126、一個條件載入微指令(LD.CC)126以及一個條件移動微指令(MOV.CC)126。其中之SHF微指令係相同於步驟1132中的SHF微指令,LD.CC微指令與MOV.CC微指令係相同於步驟1124之LD.CC微指令與MOV.CC微指令。LEA微指令除了將暫存器(T2),亦即作為SHE微指令之目的暫存器之暫時暫存器106A,指定為其第二來源運算元外,其他部分則是相同於步驟1124中之LEA微指令。因此,用以進行資料載入之記憶體位址與更新後之基底位址值,會是基底位址與移位暫存器偏移量之加總。
在步驟1136中,指令轉譯器104係將移位暫存器偏移偏移定址條件載入指令(shifted register offset offset-addressed conditional load instruction)124轉譯為三個微指令126,分別是:一個移位微指令(SHF)126、一個非條件載入有效位址微指令(LEA)126、以及一個條件載入微指令(LD.CC)126,這些微指令係相同於步驟1134中所述之SHF、LEA與LD.CC微指令。值得注意的是,此步驟並不需要MOV.CC微指令126,因為偏移定址之定址模式並不需要請求更新基底暫存器。
值得注意的是,指令轉譯器104係發出第11圖(所述之SHF、LEA、LD.CC、LEA.CC與MOV.CC微指令126,以及(第15圖之)ST.FUSED.CC微指令126,這些微指令並不去更新條件旗標。
如前述,硬體之指令轉譯器104係依序發出微指令126。這也就是說,硬體之指令轉譯器104係將ISA指令124依據其出現於ISA程式之順序進行轉譯,藉此,由相對應之ISA指令124轉譯發出之微指令126群組,係依據此相對應ISA程式指令124出現於ISA程式之順序發出。其次,同一個群組內的微指令126亦有其順序。如第11圖(以及第15、19、20圖)所示,流程圖之各個步驟亦呈現有步驟中硬體指令轉譯器104發出微指令126之順序。舉例來說,在步驟1112中,LD.CC微指令126係在LEA.CC微指令126之前。此外,暫存器配置表402係將重排緩衝器422內之入口依據硬體指令轉譯器104發出微指令126之順序,分配給這些微指令126。因此,一個ISA指令124轉譯發出之同一群組內的微指令126,係依據其由硬體指令轉譯器104發出之順序依序引退。不過,執行管線112在一給定微指令126與其他微指令126之關聯性容許的範圍內,可以非循序執行微指令126,亦即以不同於硬體指令轉譯器104發出之順序來執行。依序引退微指令126另外具有一優點是,若是第一微指令126導致一例外條件的產生,晚於此第一微指令126之第二微指令126的結果將不會被引退至架構狀態,如引退至架構通用暫存器106A或架構旗標暫存器106C。
請參照第12圖,圖中係以一流程圖,顯示第9圖之微處理器100執行一條件載入微指令126(如第11A及11B圖中的LD.CC微指令)之操作。此流程始於步驟1202。
在步驟1202中,載入單元416由微指令佇列904接收到LD.CC微指令以及其來源運算元962/964。接下來前進至步驟1218。
在步驟1218中,載入單元416將這兩個相關的來源運算元相加,以計算出記憶體位址。舉例來說,就第11圖(包含11A及11B圖)之LD.CC微指令126而言,載入單元416係將指定於基地暫存器(RN)內之基底位址與偏移量相加,以產生記憶體位址。如前述,偏移量可以是提供於常數匯流排952之立即值或是一暫存器或是提供於運算元匯流排962其中之一之一偏移暫存器值。隨後,此載入單元416會提供計算出來之記憶體位址至記憶體子系統108以對資料快取進行存取。接下來進入決策步驟1222。
在決策步驟1222中,載入單元416確認步驟1202所提供之來源運算元是否有效。亦即,此微架構預測來源運算元有效,也就是旗標964、目的暫存器962之先前數值與位址計算來源運算元962。若是載入單元416獲悉其來源運算元並非有效,例如載入單元依據一載入錯失(load miss)獲悉其結果無效,此載入單元416隨後就會通知重排緩衝器422依據下述步驟1224重複執行LD.CC微指令126。不過,在第18圖所提供之經過最佳化的另一個實施例中,若是載入單元416偵測到旗標有效但不滿足條件,而之前的目的暫存器值有效時(在步驟1802中),即使位址運算元962並非有效,載入單元416還是會通知重排緩衝器422微指令126已執行完畢,也就是說,載入單元416 並不通知重排緩衝器422重複執行條件載入/儲存微指令126,而是提供目的暫存器之先前數值於結果匯流排128,這類似於後續篇幅中步驟1234所述之方法。由微指令“A”126(例如步驟1112之LD.CC微指令126)所接收之暫存器(例如目的/基底暫存器)之先前數值,係另一個微指令“B”126執行產生之結果,其係對應於微指令A之最近、循序且先前寫入者。亦即,微指令B所表示之微指令126係:(1)會寫入暫存器(亦即,微指令B指定為其目的暫存器之暫存器106A係相同於微指令A指定為其來源暫存器106A其中之一之暫存器);(2)在硬體指令轉譯器104所發出之微指令126流中,此微指令之順序在微指令A之前;以及(3)在此微指令流所有順序在微指令A之前的微指令中,微指令B會寫入此暫存器之最接近微指令,也就是在微指令流中,最近且先前寫入於暫存器者。如前述,暫存器之先前數值可透過架構暫存器檔案106A、推測暫存器檔案106B、或是指向匯流排128,提供至執行微指令A之執行單元424。一般而言,旗標係由程式中順序早於條件載入/儲存指令124之指令124(例如ADD指令124)所轉譯出之一非引退微指令(unretired microinstruction)126所寫入,因而使旗標寫入微指令126早於條件載入/儲存指令124轉譯出的LD.CC、LEA.CC與/或MOV.CC微指令126。因此,暫存器配置表402會依據較舊的旗標寫入微指令126,對各個條件微指令(例如LD.CC、LEA.CC與/或MOV.CC微指令)產生關聯性資訊。若是來源運算元 962/964有效,流程會前進至決策步驟1232;否則就會前進至步驟1224。
在步驟1224中,載入單元416通知此操作已完畢而結果128為無效。在另一實施例中,載入單元416會通知錯失發生而非操作完畢。此流程終止於步驟1224。
在決策步驟1232中,載入單元416確認步驟1202接收的條件旗標964是否滿足由LD.CC微指令所指定之條件。在另一實施例中,則是由執行單元424以外的邏輯元件,如指令發送單元408,做出條件旗標是否滿足條件之判斷並提供指示至執行單元424,而不是由執行單元424自己進行判斷。判斷結果若為是,流程就會前進至決策步驟1242;否則就會前進至步驟1234。
在步驟1234中,載入單元416並不執行任何會導致微處理器100改變其架構狀態的動作。進一步來說,在一實施例中,載入單元416不會:(1)執行一查表操作(tablewalk)(即使轉譯後備緩衝區(TLB)內之記憶體位址發生錯失的情形,因為查表還涉及頁表更新);(2)產生一架構例外事件(例如分頁錯誤,即使是與記憶體位址有關之記憶體分頁由實體記憶體內消失);(3)執行任何匯流排傳輸(例如相對應於快取錯失或需要由記憶體內一個不可快取區域擷取資料進行載入操作)。其次,載入單元416並不在記憶體子系統108之資料快取內配置一記憶線。換句話說,載入單元416除了不在重排緩衝器422入口設定一例外位元給LD.CC微指令外,其他動作與在產生有例外事件時並無二 致。至於其他不是由載入單元416(或是步驟1634所述儲存單元416等)執行之動作,則是適用於載入/儲存單元416與記憶體子系統108整體;舉例來說,由記憶體子系統108之查表引擎(tablewalk engine)執行之不去執行表格遊走或是匯流排傳輸或是在資料快取內配置一記憶線之動作。此外,載入單元416會提供之前的目的暫存器數值926於結果匯流排128上,以載入目的暫存器。此之前的目的暫存器數值926係另一個微指令126執行產生之結果,此微指令126係相對應於LD.CC微指令126之最近、循序且先前寫入目的暫存器之數值。值得注意的是,即使條件旗標不滿足條件,LD.CC微指令126執行後仍會將一結果寫入目的暫存器(假定LD.CC微指令會引退),這屬於微處理器100之架構狀態的一部分;不過,若是條件旗標並未滿足條件,LD.CC微指令126執行後並不會改變目的暫存器,這是因為目的暫存器的先前數值在步驟1234中會被再次寫入目的暫存器。對於條件載入指令124而言,在條件並不滿足的情況下,這是指令集架構所定義之正確的架構結果。最後,載入單元416會通知此操作已經完畢而此結果128為有效。流程終止於步驟1234。
在決策步驟1242中,載入單元416確認LD.CC微指令是否導致一例外條件產生,例如一分頁錯誤、記憶體保護錯誤、資料存取失敗條件、對準錯誤條件等等。若無,流程前進至決策步驟1252;否則就前進至步驟1244。
在步驟1244中,載入單元416通知此操作導致一例外 事件。流程終止於此。
在決策步驟1252中,載入單元416確認步驟1218計算出來的記憶體位址是否無法在資料快取中找到。若是,流程前進至步驟1254;否則就前進至步驟1256。
在步驟1254中,載入單元416通知快取錯失以及結果無效。這會使重排緩衝器422重新執行任何與此錯失載入資料相關之較新的微指令126。此外,載入單元416會從適當的來源取得此資料。進一步來說,載入單元416會從階層式快取之另一個快取記憶體(例如L2快取)取得資料,若失敗,再從系統記憶體取得資料。載入單元416隨後提供此資料於結果匯流排128以載入目的暫存器並通知操作完畢且結果有效。此流程終止於此。
在步驟1256中,載入單元416將步驟1218由資料快取取得的資料提供至結果匯流排128,以載入目的暫存器,並且通知操作完畢且結果有效。此流程終止於此。
請參照第13圖,圖中係一流程圖顯示第9圖之微處理器100執行一條件載入有效位址微指令126(例如第11圖之LEA.CC微指令)。此流程始於步驟1302。
在步驟1302中,儲存單元416由微指令佇列904接收此LEA.CC微指令以及伴隨的來源運算元962/964。接下來前進至步驟1318。
在步驟1318中,儲存單元416透過將這兩個相關的來源運算元相加以計算出位址。此動作類似於載入單元416在步驟1218中計算記憶體位址的動作。舉例來說,就第 11圖之LEA.CC微指令而言,儲存單元416係將基底暫存器所指定之基底位址與偏移量相加以產生此位址。如前述,此偏移量可以是提供於常數匯流排952上之一立即值或是一暫存器或是提供於運算元匯流排962其中之一之偏移暫存器值。接下來前進至決策步驟1322。
在決策步驟1322中,儲存單元416確認步驟1302提供之運算元是否有效。若是儲存單元416得知到其來源運算元並非有效,儲存單元416隨後會通知重排緩衝器422如下述步驟1324中重新執行LEA.CC微指令。但就一較佳實施例而言,若是儲存單元416偵測到旗標有效但不滿足條件,而之前的目的暫存器值有效時,即使位址運算元962並非有效,儲存單元416還是會通知重排緩衝器422微指令126已執行完畢,亦即儲存單元416並不通知重排緩衝器422重複執行條件載入/儲存微指令126,而是提供基底暫存器之先前數值於結果匯流排128。這類似於後續篇幅中步驟1334所述之方法。若是來源運算元962/964有效,流程前進至決策步驟1332;否則就前進至步驟1324。
在步驟1324中,儲存單元416通知此操作完畢且結果有效。流程終止於此。
在決策步驟1332中,儲存單元416確認步驟1302所接收到的條件旗標964是否滿足LEA.CC所指定之條件。若是,流程前進至決策步驟1356;否則就前進至步驟1334。
在步驟1334中,儲存單元416提供之先前的基底暫存器之數值926於結果匯流排128用以載入基底暫存器。此 基底暫存器係被LEA.CC微指令指定為其目的暫存器(可參照第11圖之步驟1112、1114、1122與1132)。在此所謂之前的基底暫存器數值926係另一個微指令126執行產生的結果。此微指令126係相對應於LEA.CC微指令126的最近、循序且先前寫入之基底暫存器(RN)的數值。值得注意的是,即使條件旗標並不滿足條件,LEA.CC微指令126執行後還是會將一結果寫入基底暫存器(假定LEA.CC微指令會引退),這屬於微處理器100之架構狀態的一部分;不過,若是條件旗標未滿足條件,LEA.CC微指令126執行後並不會改變基底暫存器,這是因為基底暫存器的先前數值在步驟1334中會被再次寫入基底暫存器。對於條件載入指令124而言,在條件並不滿足的情況下,這是指令集架構所定義之正確的架構結果。最後,儲存單元416會通知操作已經完畢而結果128為有效。流程終止於步驟1234。
在步驟1356中,儲存單元126提供步驟1318計算出來的位址至結果匯流排128用以載入基底暫存器,並通知操作完畢且結果有效。此流程終止於此。
儲存單元416執行非條件載入有效位址微指令126(例如第11圖之LEA微指令)之操作係類似於以上第13圖所述;不過,步驟1332與1334並不會被執行,這是因為LEA微指令126係一非條件微指令。如前述第11圖,在一些情況下,指令轉譯器104係將一暫時暫存器106,而非一架構暫存器106,指定為LEA微指令126之目的暫存器。
一般而言,程式在執行上具有明顯較高之比例是從記 憶體讀取資料甚於寫入記憶體。因此,使用儲存單元的機會通常會少於載入單元。在前述第12與13圖之實施例中,儲存單元416係執行LEA.CC微指令126,載入單元416則是執行LD.CC微指令126。在如步驟1112、1114、1122與1132所述的情況中,LD.CC微指令126與LEA.CC微指令126互相並不具有關連性;因而可以各別發送以供執行。在一實施例中,LD.CC微指令126與LEA.CC微指令可在同一個時脈週期,分別發送至載入單元416與儲存單元416以供執行(假定這兩個微指令126都完成發送準備,亦即,載入與儲存單元416以及來源運算元962/964都處於可獲得狀態)。因此,對於許多指令流而言,可減少任何與第二微指令126有關之額外時間延遲。此外,在本發明之一實施例中,執行管線112具有對稱之載入/儲存雙單元416,而非分開的載入單元416與儲存單元416。對於條件載入指令124而言,此實施例具有一類似優點,因為LD.CC微指令126與LEA.CC微指令126可同時發送至對稱之載入儲存雙單元416。此外,對於條件儲存指令124而言,此實施例亦有一類似優點,因為不具有關聯性之ST.FUSED.CC微指令126與LEA.CC微指令126可同時發送至對稱之載入儲存雙單元416以供執行。
請參照第14圖,圖中係一流程圖顯示第9圖之微處理器100執行一條件移動微指令126(例如第11圖之MOV.CC微指令)。此流程始於步驟1402。
在步驟1402中,整數單元412由微指令佇列904接收 到MOV.CC微指令以及其來源運算元962/964。接下來進入決策步驟1422。
在決策步驟中,整數單元412確認步驟1402提供之運算元是否有效。若是這些來源運算元962/964有效,流程就前進至決策步驟1432;否則就前進至步驟1424。
在步驟1424中,整數單元412通知此操作已完畢且結果128有效。流程終止於此。
在決策步驟1432中,整數單元412確認步驟1402接收到的條件旗標964是否滿足MOV.CC微指令所指定之條件。若是,流程前進至決策步驟1442;否則就前進至步驟1434。
在步驟1434中,整數單元412提供之先前之基底暫存器數值926至結果匯流排128用以載入基底暫存器。此基底暫存器被MOV.CC微指令指定為目的暫存器(例如第11圖之步驟1124與1134所述)。在此所謂之先前之基底暫存器數值926係另一個微指令126執行產生之結果。此微指令126係MOV.CC微指令126之最近、循序且先前寫入基底暫存器之數值。值得注意的是,即使條件旗標並未滿足條件,MOV.CC微指令126執行後還是會將一結果寫入基底暫存器(假定MOV.CC微指令會引退),這屬於微處理器100之架構狀態的一部分;不過,在條件旗標並不滿足條件之情況下,此MOV.CC微指令126執行後並不會改變基底暫存器,這是因為基底暫存器之先前數值在步驟1434中會被再次寫入基底暫存器。對於條件載入指令124而 言,在條件並不滿足的情況下,這是指令集架構所定義之正確的架構結果。在MOV.CC微指令126係由指令轉譯器104產生之一些情況下,MOV.CC微指令係提供之前的目的暫存器值926(而非之前的基底暫存器值)於結果匯流排128用以載入目的暫存器。此目的暫存器係被MOV.CC微指令指定為目的暫存器(例如第19圖之步驟1924、1926、1934與1936所述)。最後,整數單元412通知操作已完成且結果有效。此流程終止於此。
在決策步驟1442中,整數單元412確認MOV.CC微指令是否導致一例外條件產生。若否,流程前進至步驟1456;否則就前進至步驟1444。
在步驟1444中,整數單元412通知操作導致一例外事件發生。此流程終止於此。
在步驟1456中,整數單元412提供第二來源運算元962(例如第11圖之步驟1124與1134所述之暫時暫存器T1)於結果匯流排128,以載入基底暫存器或目的暫存器,並通知操作完畢且結果有效。載入的是基底暫存器或是目的暫存器,端視哪一個暫存器係被指令轉譯器104指定為MOV.CC微指令之目的暫存器。此流程終止於此。
請參照第15圖(包含第15A及15B圖),圖中係以一流程圖顯示第9圖之微處理器100之指令轉譯器104將一條件儲存指令124轉譯為微指令126之操作。
在步驟1502中,指令轉譯器104遭遇到一條件儲存指令124,並依據條件儲存指令具有之特徵執行步驟1512至 1536之操作,將其轉譯為一個或多個微指令126。此條件儲存指令124指定有一條件(在第15圖中標示為<C>),在條件旗標滿足此條件時,資料將會從一資料暫存器被儲存至一資料位址。在第15圖中,此資料暫存器係標示為“RT”。條件儲存指令124亦指定一基底暫存器與一偏移量。此基底暫存器係持有一基底位址。在第15圖中,基底暫存器係標示為“RN”。偏移量可選自三個來源:(1)由條件儲存指令124所指定之一立即值;(2)偏移暫存器持有之值;(3)將偏移暫存器持有之值利用條件儲存指令指定之一立即值移位後產生之值。在第15圖中,此偏移暫存器係標示為“RM”。條件儲存指令124指定之特徵包含一定址模式。此定址模式係指定如何計算出記憶體位址,而哪個資料將會被儲存。第15圖之實施例提供有三種可能的定址模式:後索引、預索引與偏移定址。在後索引定址模式中,記憶體位址就是基底位址,而基底暫存器係以基底位址與偏移量的加總進行更新。在預索引定址模式中,記憶體位址係基底位址與偏移量的加總,而基底暫存器係以基底位址與偏移量的加總進行更新。在索引位址模式中,記憶體位址係基底位址與偏移量之加總,而基底暫存器不會更新。應注意的是,條件儲存指令124亦可以指定基底位址與偏移量之差值而非加總。此流程前進至決策步驟1503。
在決策步驟1503中,指令轉譯器104確認偏移量的來源是一立即值、一暫存器值、或是一移位後的暫存器值。若是一立即值,流程前進至決策步驟1504;若是一暫存器 值,流程前進至決策步驟1506;若是一移位後之暫存器值,流程前進至決策步驟1508。
在決策步驟1504中,指令轉譯器104確認此定址模式是後索引、預索引、還是偏移定址。若是後索引,流程就會前進至步驟1512;若是前索引,流程就會前進至步驟1514;若是偏移定址,流程就會前進至步驟1516。
在決策步驟1506中,指令轉譯器104確認此定址模式是後索引、預索引、還是偏移定址。若是後索引,流程就會前進至步驟1522;若是前索引,流程就會前進至步驟1524;若是偏移定址,流程就會前進至步驟1526。
在決策步驟1508中,指令轉譯器104確認此定址模式是後索引、預索引、還是偏移定址。若是後索引,流程就會前進至步驟1532;若是前索引,流程就會前進至步驟1534;若是偏移定址,流程就會前進至步驟1536。
在步驟1512中,指令轉譯器104將立即偏移後索引條件儲存(immediate offset post-indexed conditional store)指令124轉譯為兩個微指令126:一條件儲存融合微指令(ST.FUSED.CC)126與一條件載入有效位址微指令(LEA.CC)126。每個微指令都具有條件儲存指令124所指定之條件。ST.FUSED.CC微指令126係:(1)將其目的暫存器指定為忽略(DC)(這是因為ST.FUSED.CC微指令並不提供一結果);(2)將資料暫存器,亦即被指定為條件儲存指令124的資料暫存器之架構暫存器106A,指定為一來源運算元962;(3)將基底暫存器,亦即被指定為條件儲存指 令124的基底暫存器之架構暫存器106A,指定為一來源運算元962;(4)將條件旗標964指定為一來源運算元;以及(5)將一零常數952指定為一來源運算元962。此ST.FUSED.CC微指令126之執行的詳細說明可參照第16圖。ST.FUSED.CC微指令126係單一個微指令126,其占據重排緩衝器422內單一個入口;不過,此微指令會發送至儲存單元416與整數單元412。在一實施例中,儲存單元416執行指令中之儲存位址部分,以產生一儲存位址寫入一儲存佇列入口,而整數單元412執行指令中之儲存資料部分,以將儲存資料寫入儲存佇列入口。在一實施例中,此微處理器100並不具有分開的儲存資料單元,而是利用整數單元412來執行儲存資料之操作。在一實施例中,此ST.FUSED.CC微指令係類似於美國第8,090,931號專利案(CNTR.2387)中所描述者,此文獻一併提供作為參考。LEA.CC微指令係:(1)將基底暫存器,亦即被指定為條件儲存指令124的基底暫存器之架構暫存器106A,指定為其目的暫存器;(2)將基底暫存器指定為一來源運算元962;(3)將零常數952指定為一來源運算元962;(4)將條件旗標964指定為一來源運算元;以及(5)將條件儲存指令124所指定之立即常數952指定為一來源運算元962。此LEA.CC微指令126之執行的詳細說明可參照第13圖。應注意的是,若是ST.FUSED.CC微指令導致一例外事件產生(例如分頁錯誤),隨後產生之LEA.CC微指令的結果就不會被引退至架構狀態來更新基底暫存器,即使這個結果可能會被 寫入推測暫存器檔案106B。
在步驟1514中,指令轉譯器104將立即偏移預索引條件載入指令124轉譯為兩個微指令126:即類似於步驟1512所述之一條件儲存融合微指令(ST.FUSED.CC)126與一條件載入有效位址微指令(LEA.CC)126。但步驟1514之ST.FUSED.CC微指令係將由條件儲存指令124所指定之立即常數952指定為來源運算元962。相較之下,步驟1512之ST.FUSED.CC微指令則是將零常數952指定為來源運算元962,因此計算出來將用於儲存資料之記憶體位址會是基底位址與偏移量之加總,這在第16圖會有更多的說明。
在步驟1516中,指令轉譯器104將立即偏移偏移定位條件載入指令124轉譯為單一個微指令126:即類似於步驟1514中所述之條件儲存融合微指令(ST.FUSED.CC)126。因為偏移定位之定位模式並不需要請求更新基底暫存器,因此,此步驟不需要步驟1512與1514所述之LEA.CC微指令126。
在步驟1522中,指令轉譯器104將暫存器偏移後索引條件載入指令124轉譯為兩個微指令126:一個條件儲存融合微指令(ST.FUSED.CC)126與一個條件載入有效位址微指令(LEA.CC)126。每個微指令126都具有由條件儲存指令124所指定之條件,其中,ST.FUSED.CC微指令與步驟1512所述者相同。LEA.CC微指令126則是:(1)將基底暫存器,亦即被指定為條件載入指令124的基底暫存器之架構暫存器106A,指定為其目的暫存器;(2)將基底暫存 器指定為一來源運算元962;(3)將偏移暫存器,亦即被指定為條件載入指令124的偏移暫存器之架構暫存器106A,指定為一來源運算元;(4)將條件旗標964指定為一來源運算元;(5)將一零常數952指定為來源運算元962。這也就是說,步驟1522之LEA.CC微指令除了係將偏移暫存器指定為一來源運算元而非將立即常數指定為其第四來源運算元,將一零常數而非立即值指定為其第四來源運算元,其他部分都與步驟1512之LEA.CC微指令相類似。因此,請同時參照第13圖,計算出來之更新基底位址會是基底位址與來自偏移暫存器之暫存器偏移量之加總。
在步驟1524中,指令轉譯器104係將暫存器偏移預索引條件載入指令124轉譯為三個微指令126,分別是:一非條件載入有效位址微指令(LEA)126、一條件儲存融合微指令(ST.FUSED.CC)126與一條件移動微指令(MOV.CC)126。ST.FUSED.CC微指令與MOV.CC微指令都具有由條件載入指令124所指定之條件。LEA微指令則是:(1)將暫存器(T1)、一暫時暫存器106,指定為其目的暫存器;(2)將基底暫存器,亦即被指定為條件儲存指令124的基底暫存器之架構暫存器106A指定為一來源運算元962;(3)將偏移暫存器,亦即被指定為條件儲存指令124的偏移暫存器之架構暫存器106A,指定為一來源運算元962;(4)指定第三來源運算元為忽略(DC)(因為LEA微指令是非條件的微指令,不需要條件旗標964作為來源運算元962);以及(5)將一零常數952指定為一來源運算元 962。ST.FUSED.CC微指令則是將:(1)其目的暫存器指定為忽略(DC);(2)將目的暫存器指定為一來源運算元962;(3)將暫存器T1,亦即被指定為LEA微指令之目的暫存器之架構暫存器106A,指定為一來源運算元962;(4)將條件旗標964指定為一來源運算元;以及(5)將一零常數952指定為一來源運算元962。亦即,步驟1524之ST.FUSED.CC微指令係類似於步驟1522。不過,步驟1524之ST.FUSED.CC微指令係將暫存器T1(即LEA微指令之目的暫存器)特指定為一來源運算元962,而非如步驟1522之ST.FUSED.CC微指令係將基底暫存器指定為來源運算元962。因此,計算出來將用於資料儲存之記憶體位址,會是基底位址與暫存器偏移量之加總。MOV.CC微指令則是:(1)將基底暫存器,亦即被指定為條件儲存指令124的基底暫存器之架構暫存器106A,指定為其目的暫存器;(2)將基底暫存器指定為一來源運算元962;(3)將暫存器T1,亦即被指定作為LEA微指令之目的暫存器之架構暫存器106A,指定為一來源運算元962;(4)將條件旗標964指定為一來源運算元;以及(5)將一零常數952指定為來源運算元962。因此,MOV.CC微指令會導致基底暫存器依據基底位址與暫存器偏移量(來自LEA微指令之暫存器T1)之加總進行更新。值得注意的是,若是ST.FUSED.CC微指令導致一例外事件(例如分頁錯誤)發生,就不會將MOV.CC微指令的結果引退出至架構狀態來更新基底暫存器,即使這個結果會被寫入推測暫存器檔案106B。
在步驟1526中,指令轉譯器104係將暫存器偏移偏移定址條件儲存指令124轉譯為兩個微指令126,分別是:一個非條件載入有效位址微指令(LEA)126與一個條件儲存融合微指令(ST.FUSED.CC)126。這兩個微指令係類似於步驟1524之LEA微指令與ST.FUSED.CC微指令。值得注意的是,此步驟並不需要MOV.CC微指令126,因為偏移定址之定址模式並不需要請求更新基底暫存器。
在步驟1532中,指令轉譯器104係將移位暫存器偏移後索引條件儲存指令(shifted register offset post-indexed conditional store instruction)124轉譯為三個微指令126,分別是:一個移位微指令(SHF)126、一個條件儲存融合微指令(ST.FUSED.CC)126以及一個條件載入有效位址微指令(LEA.CC)126。SHF微指令126係:(1)將暫存器T2、暫時暫存器106,指定為其目的暫存器;(2)將偏移暫存器,亦即被指定為條件儲存指令124的偏移暫存器之架構暫存器106A,指定為一來源運算元962;(3)指定第二來源運算元為忽略;(4)指定第三來源運算元為忽略(因為SHF微指令係非條件之指令,不需要條件旗標964作為其來源運算元);以及(5)將條件儲存指令124所指定之立即常數952指定為一來源運算元962,此立即常數係指定偏移暫存器內將被移位以產生移位暫存器偏移量之值的大小。此步驟之ST.FUSED.CC微指令係相同於步驟1512所述者。LEA.CC微指令則是:(1)將基底暫存器,亦即被指定為條件儲存指令124的基底暫存器之架構暫存器106A,指定為 其目的暫存器;(2)將基底暫存器指定為一來源運算元962;(3)將暫存器T2、亦即被指定作為SHE微指令之目的暫存器之暫時暫存器106A,指定為一來源運算元962;(4)將條件旗標964指定為一來源運算元;(5)將一零常數952指定為一來源運算元962。亦即,除了是將暫存器T2指定為來源暫存器而非將偏移暫存器指定為其第二來源運算元之外,步驟1532之LEA.CC微指令之其他部分係類似於步驟1522所述者。因此,計算出來之更新基底位址,會是基底位址與移位暫存器偏移量之加總。
在步驟1534中,指令轉譯器104係將移位暫存器偏移預索引條件儲存指令轉譯為四個微指令,分別是:一個移位微指令(SHF)126、一個非條件載入有效位址微指令(LEA)126、一個條件儲存融合微指令(ST.FUSED.CC)126以及一個條件移動微指令(MOV.CC)126。其中之SHF微指令係相同於步驟1532中的SHF微指令,ST.FUSED.CC微指令與MOV.CC微指令係相同於步驟1524之ST.FUSED.CC微指令與MOV.CC微指令。LEA微指令除了係將暫存器T2、亦即被指定作為SHF微指令之目的暫存器之暫時暫存器106A,指定為其第二來源運算元外,其他部分則是相同於步驟1524中之LEA微指令。因此,用以進行資料儲存之記憶體位址與更新後之基底位址值,會是基底位址與移位暫存器偏移量之加總。
在步驟1536中,指令轉譯器104係將移位暫存器偏移偏移定址條件儲存指令(shifted register offset offset-addressed conditional store instruction)124轉譯為三個微指令126,分別是:一個移位微指令(SHF)126、一個非條件載入有效位址微指令(LEA)126、以及一個條件儲存融合微指令(ST.FUSED.CC)126,這些微指令係相同於步驟1534中所述之SHF、LEA與ST.FUSED.CC微指令。值得注意的是,此步驟並不需要MOV.CC微指令126,因為偏移定址之定址模式並不需要請求更新基底暫存器。
請參照第16圖,圖中係以一流程圖說明第9圖之微處理器100執行一條件儲存融合微指令126(例如第11圖之ST.FUSED.CC微指令)之儲存位址部分。此流程始於步驟1602。
在步驟1602中,儲存單元416由微指令佇列904接收到ST.FUSED.CC微指令與其來源運算元962/964。在ST.FUSED.CC微指令發送至儲存單元416時,記憶體子系統108會由微指令佇列904窺探匯流排並偵得ST.FUSED.CC微指令126已經發送。此際,記憶體子系統108會在儲存佇列內分配一個入口給ST.FUSED.CC微指令做回應。在另一實施例中,記憶體子系統108則是透過窺探暫存器配置表402以及偵測ST.FUSED.CC微指令何時被發送至保留站406與微指令佇列904,來分配儲存佇列內之入口給ST.FUSED.CC微指令。請同時參照步驟1656,將儲存資料之記憶體位址,隨後會被寫入所分配之儲存佇列入口。其次,請同時參照第17圖之步驟1756,要儲存的資料隨後會被寫入所分配之儲存佇列入口。隨後,若是 ST.FUSED.CC微指令最終會引退,記憶體子系統108將會將儲存佇列之入口內的資料,儲存至位於儲存佇列入口內之記憶體位址的記憶體。接下來流程前進至步驟1618。
在步驟1618,儲存單元416透過加總這兩個相關的來源運算元來計算出記憶體位址。舉例來說,就第15圖之ST.FUSED.CC微指令126而言,儲存單元416係將指定於基底暫存器內之基底位址與偏移量加總,以產生記憶體位址。如前述,此偏移量可以是提供至常數匯流排952之一立即值、一暫存器、或是提供至運算元匯流排962之其中之一之移位暫存器值。接下來進入決策步驟1622。
在決策步驟1622中,儲存單元413確認步驟1602提供之運算元是否有效。若是來源運算元962/964有效,流程前進至決策步驟1632;否則就前進至步驟1624。
在步驟1624中,儲存單元416通知此操作已完畢。在另一實施例中,儲存單元416並不通知操作完畢。此流程終止於此。
在決策步驟1632中,儲存單元416確認步驟1602接收之條件旗標964是否滿足ST.FUSED.CC微指令所指定之條件。若是,流程前進至步驟1642;否則就前進至步驟1634。
在步驟1634中,儲存單元416並不執行任何會導致微處理器100改變其架構狀態的動作。進一步來說,在一實施例中,儲存單元416不會:(1)執行一查表操作(即使轉譯後備緩衝區(TLB)內之記憶體位址發生錯失的情形,因為 查表還涉及頁表更新);(2)產生一架構例外事件(例如分頁錯誤,即使與記憶體位址有關之記憶體分頁由實體記憶體內消失);(3)執行任何匯流排傳輸(例如儲存資料於記憶體)。其次,儲存單元416並不在記憶體子系統108之資料快取內配置一記憶線。換句話說,儲存單元416除了不在重排緩衝器422入口設定一例外位元給ST.FUSED.CC微指令外,其他動作與在產生有例外事件時並無二致。此外,儲存單元416會通知記憶體子系統108刪除儲存佇列在步驟1602中分配給ST.FUSED.CC微指令之入口,因此記憶體子系統108不會執行任何儲存操作,這個儲存佇列入口也可以釋放出來配合第17圖之步驟1756中,整數單元412進行之寫入儲存資料的操作。最後,儲存單元416會通知操作已完畢且結果有效。流程終止於此。
在決策步驟1642中,儲存單元416確認ST.FUSED.CC為指令是否導致一例外條件發生。若否,流程前進至步驟1656;否則就前進至步驟1644。
在步驟1644中,儲存單元416通知此操作導致一例外事件產生。此流程終止於此。
在步驟1656中,儲存單元將步驟1618計算出來將要儲存資料之記憶體位址,寫入所分配的儲存佇列入口。此外,儲存單元416通知操作完畢且結果有效。若是ST.FUSED.CC微指令最終會引退,記憶體子系統108隨後會將來自儲存佇列入口之資料,寫入位於儲存佇列入口之記憶體位址之記憶體內。此流程終止於此。
請參照第17圖,圖中係以一流程圖顯示第9圖之微處理器100執行一條件儲存融合微指令126(例如第11圖之ST.FUSED.CC微指令)之儲存資料部分。此流程始於步驟1702。
在步驟1702中,整數單元412由微指令佇列904接收此ST.FUSED.CC微指令與其來源運算元962/964。接下來進入決策步驟1722。
在決策步驟1722中,整數單元確認步驟1702提供之運算元是否有效。若是來源運算元962/964有效,就進入步驟1756;否則就進入步驟1724。
在步驟1756中,整數單元412將來自來源資料暫存器(例如第15圖之資料暫存器)之儲存資料提供至結果匯流排128,以載入至第16圖之步驟1602所分配之儲存佇列入口,並通知操作完畢且結果有效。此流程終止於此。
雖然前述各實施例中,條件儲存指令轉譯產生之一個或多個微指令係包含一個條件儲存融合微指令,不過,本發明並不限與此;更明確的說,其他將條件儲存指令轉譯出分開之條件儲存位址微指令與儲存資料微指令的實施例,亦可適用於本發明。舉例來說,第15圖之步驟1512所述的情形,就可能轉譯出不同之微指令126序列,如下所述:
STA.CC DC,RT,RN,FLAGS,ZERO
STD DC,RT,RN,FLAGS,ZERO
LEA.CC RN,RN,ZERO,FLAGS,IMM
其中,STA.CC微指令126與STD微指令126係分別以類似於第16與17圖所描述之方式執行;不過,這兩個微指令126並不分享同一個重排緩衝器入口;更明確的說,各個微指令126分別分配一個重排緩衝器入口。此實施例之在微架構指令集可以不包含一儲存融合微指令126,因此可簡化微處理器100之部分設計。不過,此實施例需要使用一個額外的重排緩衝器422入口,並且可能會有增加硬體指令轉譯器104之複雜度的缺點。特別是在條件儲存指令124所轉譯產生之微指令126的總數超過簡單指令轉譯器204之寬度的情形,亦即超過簡單指令轉譯器204單一時脈週期能夠發送之微指令126數量的情況下,此缺點特別明顯。
請參照第19圖(包含第19A及19B圖),圖中係以一流程圖顯示第9圖之指令轉譯器104將一條件載入指令124轉譯為微指令126之操作之另一實施例。第19圖之流程圖係類似於第11圖,相同的步驟係以相同標號表示。不過,在第19圖中,第11圖中的步驟1124、1126、1134與1136則是分別以步驟1924、1926、1934與1936取代。
在步驟1924中,指令轉譯器104係將暫存器偏移預索引條件載入指令124轉譯為三個微指令126,分別是:一個條件載入微指令(LD.CC)126、一個條件載入有效位址微指令(LEA.CC)126、以及一個條件移動微指令(MOV.CC)126。LD.CC微指令126與MOV.CC微指令126包含條件載入指令124所指定之條件。LD.CC微指令係: (1)將暫存器T1、暫時暫存器106,指定為其目的暫存器;(2)將基底暫存器,亦即被指定為條件載入指令124之基底暫存器之架構暫存器106A,指定為一來源運算元962;(3)將偏移暫存器,亦即被指定為條件載入指令124之偏移暫存器之架構暫存器106A,指定為一來源運算元962;(4)將條件旗標964指定為一來源運算元;以及(5)將一零常數952指定為一來源運算元962。LEA.CC微指令則是:(1)將基底暫存器,亦即被指定為條件載入指令124之基底暫存器之架構暫存器106A,指定為一來源運算元;(2)將基底暫存器指定為一來源運算元;(3)將偏移暫存器,亦即被指定為條件載入指令124之偏移暫存器之架構暫存器106A,指定為一來源運算元;(4)將條件旗標964指定為一來源運算元;以及(5)將一零常數952指定為一來源運算元962。MOV.CC微指令則是:(1)將目的暫存器(RT)、亦即被指定為條件載入指令124之目的暫存器之架構暫存器106A,特定為其目的暫存器;(2)將目的暫存器,亦即被指定為一來源運算元962;(3)將暫存器T1,亦即被指定為LD.CC微指令之目的暫存器之架構暫存器106A,特定為一來源運算元962;(4)將條件旗標964指定為一來源運算元;以及(5)將一零常數952指定為來源運算元962。值得注意的是,在第19圖之實施例中,指令轉譯器104係產生一LD.CC微指令126,而非一非條件載入微指令126。即使在第19圖之實施例中係載入一暫時暫存器,而非一架構暫存器,以避免採取架構狀態更新之動作,亦是如此。請 同時參照第12圖之步驟1234,在此步驟中,LD.CC微指令在條件不滿足時,就不去更新架構狀態。步驟1924之實施例係不同於步驟1124,其差異在於載入微指令與載入有效位址微指令126互相顛倒,而微指令126之關聯性亦有不同,這些差異會影響到微處理器100面對一給定之指令124流之整體效能,當然整體效能也會受到執行單元424之組成、快取命中率等因素影響。
在步驟1926,指令轉譯器104係將暫存器偏移偏移定址條件載入指令124轉譯為兩個微指令126,分別是:一個條件載入微指令(LD.CC)126與一個條件移動微指令(MOV.CC)126。這兩個微指令與步驟1924之LD.CC微指令與MOV.CC微指令相同。值得注意的是,此步驟並不需要LEA.CC微指令126,因為偏移定址之定址模式並不需要請求更新基底暫存器。
在步驟1934中,指令轉譯器將移位暫存器偏移預索引條件載入指令124轉譯為四個微指令126,分別是:一偏移微指令(SHF)126、一條件載入微指令(LD.CC)126、一條件載入有效位址微指令(LEA.CC)126、以及一條件移動微指令(MOV.CC)126。其中,LD.CC、LEA.CC、與MOV.CC微指令126包含條件載入指令124所指定之條件。此SHF微指令係相同於步驟1132所描述者,而LEA.CC微指令與MOV.CC微指令係相同於步驟1924所描述者。LD.CC微指令除了係將暫存器T2,亦即被指定為SHF微指令之目的暫存器之暫時暫存器106A指定為其第二來源運算元962 外,其他部分都與步驟1132所述者相同。因此,載入資料所由之記憶體位址與更新後之基底位址值,係基底位址與移位暫存器之偏移量之加總。步驟1934之實施例係不同於步驟1134,其差異點在於載入微指令與載入有效位址微指令126係顛倒,並且微指令126的關聯性資料也不同。這些差異會影響微處理器100面對一給定指令124流的處理效能。當然也會受到執行單元424之組成、快取命中率等因素之影響。
在步驟1936中,指令轉譯器104係將移位暫存器偏移偏移定址條件載入指令124轉譯為三個微指令126,也就是:一個移位微指令(SHF)126、一個條件載入微指令(LD.CC)126、以及一個條件移動微指令(MOV.CC)126。這些微指令係相同於步驟1934所描述之SHF、LD.CC與MOV.CC微指令。值得注意的是,本步驟不需要LEA.CC微指令126,這是因為偏移定址之定址模式並不需要請求更新基底暫存器。
請參照第20圖(包含第20A及20B圖),圖中係一流程圖顯示第9圖之微處理器100之指令轉譯器104將一條件儲存指令124轉譯為微指令126之操作之另一實施例。第20圖之流程係類似於第15圖,相同部分係以相同標號表示。不過,在第20圖中,第15圖之步驟1512與1514則是分別以步驟2012與2014取代。
在步驟2012中,指令轉譯器104係將立即偏移後索引條件儲存指令124轉譯產生單一條件儲存融合後更新微指 令(ST.FUSED.UPDATE.POST.CC)126,此微指令具有條件儲存指令124所指定之條件。此ST.FUSED.UPDATE.POST.CC微指令係:(1)將基底暫存器(RN),亦即被指定為條件儲存指令124之基底暫存器之架構暫存器106A,指定為一來源運算元962;(2)將資料暫存器亦即被指定為條件儲存指令124之資料暫存器之架構暫存器106A,指定為一來源運算元962;(3)將基底暫存器指定為一來源運算元962;(4)將條件旗標964指定為一來源運算元;以及(5)將條件儲存指令124所指定之立即常數952指定為一來源運算元962。ST.FUSED.UPDATE.CC微指令126之執行在第21圖會有更詳細的描述。此ST.FUSED.UPDATE.CC微指令126之操作係類似於ST.FUSED.CC微指令;但ST.FUSED.UPDATE.CC微指令126還會將結果寫入一目的暫存器。在步驟2012之實施例中,目的暫存器為基底暫存器,由ST.FUSED.UPDATE.POST.CC微指令126寫入基底暫存器之更新位址係基底位址與立即偏移量的加總。
在步驟2014中,指令轉譯器104將立即偏移預索引條件儲存指令124轉譯為單一個條件儲存融合預更新微指令(ST.FUSED.UPDATE.PRE.CC)126。步驟2014之ST.FUSED.UPDATE.PRE.CC微指令126係類似於步驟2012之ST.FUSED.UPDATE.POST.CC微指令,其差異點僅在於ST.FUSED.UPDATE.PRE.CC微指令126係將資料儲存至基底位址(而非基底位址與立即偏移量之加總),即使 如此,ST.FUSED.UPDATE.PRE.CC微指令126如同ST.FUSED.UPDATE.POST.CC微指令126一樣,還是將基底位址與立即偏移量之加總寫入目的暫存器。
請參照第21圖,圖中係以一流程圖顯示第9圖之微處理器100執行一條件儲存融合更新微指令(例如第20圖之步驟2012之ST.FUSED.UPDATE.POST.CC微指令與步驟2014之ST.FUSED.UPDATE.PRE.CC微指令,在此均以ST.FUSED.UPDATE.CC微指令表示)。第21圖之流程圖類似於第16圖,相同步驟係以相同標號表示。但在第21圖中,原本第16圖之步驟1602、1618、1624、1636與1656則分別是以步驟2102、2118、2124、2134與2156取代。
在步驟2102中,儲存單元416由微指令佇列904接收到ST.FUSED.UPDATE.CC微指令與其來源運算元962/964。當ST.FUSED.UPDATE.CC微指令發送至儲存單元416時,記憶體子系統108會透過微指令佇列904檢視匯流排,並偵測到ST.FUSED.UPDATE.CC微指令126已經發送。此際,記憶體子系統108會在儲存佇列內分配一個入口給ST.FUSED.UPDATE.CC微指令以為回應。隨後,將儲存資料之記憶體位址,會被寫入所分配之儲存佇列入口。其次,請同時參照第17圖之步驟1756,要儲存的資料會在後續步驟中,被寫入所分配之儲存佇列入口。接下來,若是ST.FUSED.UPDATE.CC微指令最後要引退出,記憶體子系統108將會將儲存佇列之入口內的資料,儲存至位於儲存佇列入口內之記憶體位址的記憶體。接下來流 程前進至步驟2118。
在步驟2118中,儲存單元416利用來源運算元計算記憶體位址與一更新位址。此儲存單元416係透過將兩個相關的來源運算元相加,以計算更新位址。舉例來說,就第15圖之ST.FUSED.UPDATE.CC微指令而言,儲存單元416係將指定於基底暫存器之基底位址與偏移量加總以產生一更新位址。如前述,此偏移量可以是提供於常數匯流排952之一立即值或是一暫存器或是提供於運算元匯流排962之其中之一之一移位暫存器值。就ST.FUSED.UPDATE.POST.CC微指令而言,儲存單元416係將基底位址與零加總以計算記憶體位址。就ST.FUSED.UPDATE.PRE.CC微指令而言,儲存單元416則是如同計算更新位址之方法,將兩個相關的來源運算元加總以計算記憶體位址。接下來前進至步驟2124。
在步驟2124中,儲存單元416通知此操作已完畢且結果128有效。此流程終止於此。
在步驟2134中,儲存單元416以類似於步驟1634執行ST.FUSED.CC微指令之方法,執行ST.FUSED.UPDATE.CC微指令。不過,儲存單元416另外還提供之前的基底暫存器值926至結果匯流排128以載入基底暫存器。此基底暫存器係被指定為ST.FUSED.UPDATE.CC微指令之目的暫存器(例如第20圖之步驟2012與2014)。此之前的基底暫存器值926係另一個微指令執行產生之結果。此微指令係 ST.FUSED.UPDATE.CC微指令126的最近、循序且先前寫入基底暫存器之數值。值得注意的是,即使條件旗標並不滿足條件,ST.FUSED.UPDATE.CC微指令126之執行還是會將結果寫入基底暫存器(假定ST.FUSED.UPDATE.CC微指令會引退),這屬於微處理器100之架構狀態之一部分;不過,在條件旗標不滿足條件的情況下,ST.FUSED.UPDATE.CC微指令126之執行並不會改變基底暫存器,這是因為步驟2134係將基底暫存器之先前數值再次寫入基底暫存器。對於條件載入指令124而言,這是由指令集架構所定義,在條件不被滿足時之正確的架構結果。
在步驟2156中,儲存單元416將步驟2118計算出來且將用以儲存資料之記憶體位址,寫入所分配之儲存佇列入口。其次,儲存單元416通知操作完畢且結果有效。若是ST.FUSED.CC微指令最終會引退,記憶體子系統108隨後會將來自儲存佇列入口之資料,寫入位於儲存佇列入口內之記憶體位址之記憶體內。其次,儲存單元416會提供步驟2118計算之更新位址至結果匯流排128以載入基底暫存器,此基底暫存器即係被指定為ST.FUSED.UPDATE.CC微指令之目的暫存器(例如第20圖之步驟2012與2014)。在一實施例中,提供更新位址至結果匯流排128之步驟係快於將記憶體位址寫入儲存佇列入口,而儲存位址單元416通知更新位址完畢之步驟係快於通知記憶體位址寫入儲存佇列入口完畢。此實施例可以使更新位址更快速地傳送至相關聯之微指令126,因而有 益於本案發明。此流程終止於此。
由前述圖示中所描述之微處理器的操作可以發現,載如/儲存位址係基底位址值與偏移量值之一函數;就一後索引定址模式而言,此載入/儲存位址就是基底位址值;而就一預索引或是偏移定址之定址模式而言,此載入/儲存位址會是偏移量值與基底位址值的加總。
本文所述之實施例利用條件載入指令124來指定一目的暫存器,此目的暫存器係不同於所有由條件載入指令124所指定之來源運算元(例如基底與偏移)暫存器。其次,本文所述之實施例利用條件儲存指令124來指定一資料暫存器,此資料暫存器係不同於所有由條件儲存指令124所指定之來源運算元(例如基底與偏移)暫存器。
在前述實施例中,微處理器100內之架構暫存器檔案106A所具有之讀取埠的數量僅能提供至多兩個來源運算元至執行單元424以執行微指令126來實現條件載入/儲存指令124。請參照第1圖,圖中所示之微處理器100係一商用微處理器之改良版。此商用微處理器之通用暫存器所持有之暫存器檔案所具有之讀取埠,僅足以提供至多兩個來源運算元至執行單元以執行本文所述用以實現條件載入/儲存指令124之微指令126。因此,本文所述之實施例可調和適用於既有之商用微處理器之微架構。而在第1圖中,此商用之微處理器原本係針對x86 ISA進行設計,其中,指令之條件執行並非一決定性的特徵,在此情況下,因為屬於累加器之微處理器,而通常需要將來源運算元之 其中之一作為目的運算元,因此看來並不能合理說明此額外讀取埠。
由前述內容可以發現,本文所述之實施例具有潛力能避免利用微架構來執行微指令以指定額外的來源運算元,以便在條件載入指令之情況下,取得基底暫存器值與偏移暫存器值以外之目的暫存器之先前數值,或是在條件儲存指令之情況下,取得資料、基底與偏移暫存器值,所造成的缺點。這些缺點如下所述。首先,在微指令126中增加一個額外的來源運算元,將需要對各個會利用此額外來源運算元執行微指令126之執行單元424,在架構暫存器檔案106A增加一個額外的讀取埠。其次,在微指令126中增加一個額外的源運算元,將需要對各個會利用此額外來源運算元執行微指令126之執行單元424,在推測暫存器檔案106B增加一個額外的讀取埠。第三,在微指令126中增加一個額外的來源運算元,將需要對各個會利用此額外來源運算元執行微指令126之執行單元424,在指向匯流排中使用更多的線路。第四,在微指令126中增加一個額外的來源運算元,將需要一個額外且相對較大之多工器,來配核給各個會利用此額外來源運算元執行微指令126之執行單元424。第五,在微指令126中增加一個額外的來源運算元,將需要較多數量的標籤比較器,其數量係執行單元424數量、分配給各個執行單元424之保留站406入口的數量、由執行單元424執行之微指令所指定之來源運算元的最大數量、以及能夠指向到各個執行單元424之 執行單元424的數量之函數。第六,在微指令126中增加一個額外的來源運算元,將需要為此額外的來源運算元,在暫存器配置表402內增設額外的重命名探查程序。第七,在微指令126中增加一個額外的來源運算元,將需要在擴充保留站406以處理額外的來源運算元。
因此,本文所述之實施例之一優點在於,其可利用非循序執行管線有效執行ISA條件載入/儲存指令,同時又在通用與重排緩衝器暫存器檔案中維持足夠數量之讀取埠。雖然在本文所述之實施例中,ISA(例如ARM ISA)條件載入/儲存指令係指定至多兩個來自於通用架構暫存器之來源運算元,並且此通用暫存器檔案與重排緩衝器暫存器檔案之讀取埠的數量係維持在每個執行單元分配兩個,不過,ISA條件載入/儲存指令指定多於兩個來自於通用架構暫存器之來源運算元,而通用暫存器檔案與重排緩衝器暫存器檔案之讀取埠的數量仍然維持在所需數量之其他ISA的實施例,亦可適用於本發明。舉例來說,在不同的ISA中,條件載入/儲存指令可能會由通用架構暫存器中指定三個來源運算元,如一基底暫存器值、一索引暫存器值與一偏移暫存器值。在此實施例中,每個執行單元之讀取埠的數量可以為三,微指令可以用來指定一個額外的來源運算元,而條件載入/儲存指令轉譯產生之微指令的數量可以是類似於本文所述者。在另一實施例中,每個執行單元之讀取埠的數量可以為二,而條件載入/儲存指令轉譯產生之微指令的數量可以是大於或是不同於本文所述者。舉例來 說,就一類似於第11圖之步驟1134所述但額外指定一索引暫存器之條件載入指令而言,此索引暫存器係被加入基底暫存器值與偏移暫存器值以產生記憶體位址與更新位址值,而條件載入指令則是被轉譯為:
LDR<C>RT,RN,RM,RL,PRE-INDEXED
SHF T2,RM,DC,DC,IMM
LEA T1,RN,T2,DC,DC
LEA T3,RL,T1,DC,DC
LD.CC RT,RT,T3,FLAGS,ZERO
MOV.CC RN,RN,T3,FLAGS,ZERO
在另一個例子中,就一類似於第15圖之步驟1516所述但額外指定一索引暫存器之條件儲存指令而言,此索引暫存器係被加入基底暫存器值與立即偏移值以產生記憶體位址,條件儲存指令則是被轉譯為:
STR<C>RT,RN,RL,IMM,OFFSET-ADDR
LEA T1,RL,RN,FLAGS,IMM
ST.FUSED.CC DC,RT,T1,FLAGS,IMM
本文所述之實施例之另外一個優點是,雖然在一些情況下,執行條件載入/儲存指令124轉譯產生之兩個、三個或四個微指令會有執行延遲的情形,各個微指令所執行的操作還是相對簡單的,因而可用於支援較高核心時脈之管線架構。
雖然本文所述之微處理器100能夠執行ARM ISA與x86 ISA,本發明之實施例不限於此。本發明之實施例之微 處理器亦可執行單一個ISA。此外,雖然本文之實施例中所述的微處理器100係將ARM ISA條件載入/儲存指令轉譯為微指令126,不過,本發明亦可適用於微處理器執行不同於ARM但在指令集內包含有條件載入/儲存指令之其他指令集架構。
惟以上所述者,僅為本發明之較佳實施例而已,當不能以此限定本發明實施之範圍,即大凡依本發明申請專利範圍及發明說明內容所作之簡單的等效變化與修飾,皆仍屬本發明專利涵蓋之範圍內。舉例來說,軟體可以執行本發明所述之裝置與方法的功能、製造、形塑、模擬、描述以及/或測試等。這可由一般的程式語言(如C、C++)、硬體描述語言(HDL)包含Verilog HDL,VHDL等,或是其他既有程式來達成。此軟體可以設置於任何已知的電腦可利用媒介,如磁帶、半導體、磁碟、光碟(如CD-ROM、DVD-ROM等)、網路接線、無線或是其他通訊媒介。此處描述之裝置與方法的實施例可被包含於一半導體智財核心,例如一微處理核心(如以硬體描述語言的實施方式)並且透過積體電路的製作轉換為硬體。此外,本文所描述之裝置與方法亦可包含硬體與軟體之結合。因此,本文所述的任何實施例,並非用以限定本發明之範圍。此外,本發明可應用於一般通用電腦之微處理器裝置。最後,所屬技術領域具有通常知識者利用本發明所揭露的觀念與實施例作為基礎,來設計並調整出不同的結構已達成相同的目的,亦不超出本發明之範圍。
惟以上所述者,僅為本發明之較佳實施例而已,當不能以此限定本發明實施之範圍,即大凡依本發明申請專利範圍及發明說明內容所作之簡單的等效變化與修飾,皆仍屬本發明專利涵蓋之範圍內。另外本發明的任一實施例或申請專利範圍不須達成本發明所揭露之全部目的或優點或特點。此外,摘要部分和標題僅是用來輔助專利文件搜尋之用,並非用來限制本發明之權利範圍。
100‧‧‧微處理器(處理核心)
102‧‧‧指令快取
104‧‧‧硬體指令轉譯器
106‧‧‧暫存器檔案
108‧‧‧記憶體子系統
112‧‧‧執行管線
114‧‧‧指令擷取單元與分支預測器
116‧‧‧ARM程式計數器(PC)暫存器
118‧‧‧x86指令指標(IP)暫存器
122‧‧‧組態暫存器(configuration register)
124‧‧‧ISA指令
126‧‧‧微指令
128‧‧‧結果
132‧‧‧指令模式指標(instruction mode indicator)
134‧‧‧擷取位址
136‧‧‧環境模式指標(environment mode indicator)
202‧‧‧指令格式化程式
204‧‧‧簡單指令轉譯器(SIT)
206‧‧‧複雜指令轉譯器(CIT)
212‧‧‧多工器(mux)
222‧‧‧x86簡單指令轉譯器
224‧‧‧ARM簡單指令轉譯器
232‧‧‧微程式計數器(micro-program counter,micro-PC)
234‧‧‧微碼唯讀記憶體
236‧‧‧微程序器(microsequencer)
235‧‧‧指令間接暫存器(instruction indirection register,IIR)
237‧‧‧微轉譯器(microtranslator)
242‧‧‧格式化ISA指令
244‧‧‧實行微指令(implementing microinstructions)
246‧‧‧實行微指令
248‧‧‧選擇輸入
252‧‧‧微碼位址
254‧‧‧唯讀記憶體位址
255‧‧‧ISA指令資訊
302‧‧‧預解碼器(pre-decoder)
304‧‧‧指令位元組佇列(IBQ)
306‧‧‧長度解碼器(length decoders)與漣波邏輯閘(ripple logic)
308‧‧‧多工器佇列(mux queue,MQ)
312‧‧‧多工器
314‧‧‧格式化指令佇列(formatted instruction queue,FIQ)
322‧‧‧ARM指令集狀態
401‧‧‧微指令佇列
402‧‧‧暫存器配置表(register allocation table,RAT)
404‧‧‧指令調度器(instruction dispatcher)
406‧‧‧保留站(reservation station)
408‧‧‧指令發送單元(instruction issue unit)
412‧‧‧整數/分支(integer/branch)單元
414‧‧‧媒體單元(media unit)
416‧‧‧載入/儲存(load/store)單元
418‧‧‧浮點(floating point)單元
422‧‧‧重排緩衝器(reorder buffer,ROB)
424‧‧‧執行單元
502‧‧‧ARM特定暫存器
504‧‧‧x86特定暫存器
506‧‧‧共享暫存器
700‧‧‧雙核心微處理器
892‧‧‧微指令快取
402‧‧‧暫存器配置表
422‧‧‧重排緩衝器
902‧‧‧記分表
406‧‧‧保留站
408‧‧‧指令發送單元
904‧‧‧微指令佇列
912,914,922,924‧‧‧多工器
106A,106B‧‧‧架構暫存器檔案
106C‧‧‧架構旗標暫存器
106D‧‧‧架構旗標暫存器檔案
1002A,1002B,1002C‧‧‧控制邏輯
962,964,966,968,972,1022,1024‧‧‧匯流排
1008A,1006A,1008B,1006B,1008C,1008F,1012F‧‧‧多工器
1004A,1004B‧‧‧加法器
第1圖係本發明執行x86程式集架構與ARM程式集架構機器語言程式之微處理器一實施例之方塊圖。
第2圖係一方塊圖,詳細顯示第1圖之硬體指令轉譯器。
第3圖係一方塊圖,詳細顯示第2圖之指令格式化程式(instruction formatter)。
第4圖係一方塊圖,詳細顯示第1圖之執行管線。
第5圖係一方塊圖,詳細顯示第1圖之暫存器檔案。
第6圖(包含第6A及6B圖)係一流程圖,顯示第1圖之微處理器之操作步驟。
第7圖係本發明一雙核心微處理器之方塊圖。
第8圖係本發明執行x86 ISA與ARM ISA機器語言程式之微處理器另一實施例之方塊圖。
第9圖係以一方塊圖詳細顯示第1圖之微處理器,尤其是其中的執行管線。
第10A圖係一方塊圖詳細顯示第9圖中的載入單元。
第10B圖係一方塊圖詳細顯示第9圖之儲存單元。
第10C圖係以一方塊圖詳細顯示第9圖中的整數單元。
第10D圖係以一方塊圖詳細顯示第9圖中的儲存單元。
第10E圖係以一方塊圖詳細顯示第9圖之整數單元。
第10F圖係以一方塊圖詳細顯示第9圖之儲存單元之另一實施例。
第11圖(包含第11A及11B圖)係一流程圖顯示第9圖之微處理器之指令轉譯器將條件載入指令轉譯為微指令之操作。
第12圖係一流程圖顯示第9圖之微處理器執行一條件載入微指令之操作。
第13圖係一流程圖顯示第9圖之微處理器執行一條件載入有效位址微指令之操作。
第14圖係一流程圖顯示第9圖之微處理器執行一條件移動微指令之操作。
第15圖(包含第15A及15B圖)係一流程圖顯示第9圖之微處理器之指令轉譯器將一條件儲存指令轉譯為微指令之操作。
第16與17圖係以流程圖說明第9圖之微處理器執行一條件儲存融合微指令之操作。
第18圖係一流程圖顯示第9圖之微處理器執行條件載入微指令之操作之另一實施例。
第19圖(包含第19A及19B圖)係一流程圖顯示第9圖之指令轉譯器將一條件載入指令轉譯為微指令之操作之另一實 施例。
第20圖(包含第20A及20B圖)係一流程圖顯示第9圖之微處理器之指令轉譯器將一條件儲存指令轉譯為微指令之操作之另一實施例。
第21圖係一流程圖顯示第9圖之微處理器執行一條件儲存融合微指令之操作之另一實施例。
100‧‧‧微處理器
102‧‧‧指令快取
104‧‧‧硬體指令轉譯器
106‧‧‧暫存器檔案
108‧‧‧記憶體子系統
112‧‧‧執行管線
114‧‧‧指令擷取單元與分支預測器
116‧‧‧ARM程式計數器(PC)暫存器
118‧‧‧x86指令指標(IP)暫存器
122‧‧‧組態暫存器(configuration register)
124‧‧‧ISA指令
126‧‧‧微指令
128‧‧‧結果
132‧‧‧指令模式指標(instruction mode indicator)
134‧‧‧擷取位址
136‧‧‧環境模式指標(environment mode indicator)

Claims (43)

  1. 一種具有一指令集架構之微處理器,該指令集架構定義有一條件儲存指令,該微處理器包含:一儲存佇列;一暫存器檔案;一指令轉譯器,將該條件儲存指令轉譯為至少二個微指令,其中,該條件儲存指令係指定該暫存器檔案內之一資料暫存器、一基底暫存器與一偏移暫存器,其中,該條件儲存指令在該微處理器之條件旗標滿足一特定條件時,指示該微處理器將來自該資料暫存器之資料儲存至一記憶體位置;以及一非循序執行管線,包含複數個執行單元以執行該些微指令;其中,為了執行該些微指令內之一第一微指令,該些執行單元之其中之一係由該暫存器檔案接收一基底值與一偏移量,並對應地以該基底值與該偏移量之一函數產生一第一結果,其中,該第一結果係指定該記憶體位置之一位址;其中,為了執行該些微指令內之一第二微指令,該些執行單元其中之一接收該第一結果,並對應地:在該條件旗標滿足該條件時,將該第一結果寫入該儲存佇列所分配之一入口,其中,該儲存佇列係在後續步驟將該資料寫入該位址所指定之該記憶體位置;以及在該條件旗標不滿足該條件時,刪除該儲存佇列所分配之該入口,以使該儲存佇列無法將該資料寫入該位址所指定 之該記憶體位置。
  2. 如申請專利範圍第1項之微處理器,其中,該基底暫存器係一不同於該資料暫存器與該偏移暫存器之暫存器,其中,該條件儲存指令係指定該基底暫存器在該條件滿足時需被更新;其中,該至少二個微指令包含一第三微指令,其中,為了執行該第三微指令,該些執行單元之其中之一接收該基底暫存器之一先前數值與該第一結果,並對應地提供一第二結果以寫入該基底暫存器,其中,在該條件滿足時該第三結果係該第一結果,在該條件不滿足時,該第三結果係該基底暫存器之該先前數值;其中,該基底暫存器之該先前數值包含一微指令執行產生之一結果,其係對應於該第三微指令之最近、循序且先前寫入該基底暫存器的數值。
  3. 如申請專利範圍第2項之微處理器,其中,該條件儲存指令更指定一移位量;其中,該至少二個微指令包含一第四微指令,其中,為了執行該第四微指令,該些執行單元其中之一由該暫存器檔案接收該移位量與該偏移量,並對應地提供一第三結果,該第三結果係將該偏移量依據該移位量移位後產生;其中,執行該第一微指令之該執行單元係接收該第三結果而非來自該暫存器檔案之該偏移量,並利用該第三結果產 生該第一結果而非利用來自該暫存器檔案之該偏移量。
  4. 如申請專利範圍第2項之微處理器,其中,該第三微指令指定該第二結果被寫入該基底暫存器;其中,順序晚於該第三微指令之一消費微指令將一來源暫存器指定為該基底暫存器,其中該消費微指令利用該第三微指令之該第三結果作為一來源運算元而不論該條件是否滿足。
  5. 如申請專利範圍第1項之微處理器,其中,該條件儲存指令更指定一移位量;其中,該至少二個微指令包含一第三微指令,其中,為了執行該第三微指令,該些執行單元其中之一由該暫存器檔案接收該移位量與該偏移量,並對應地提供一第二結果,該第二結果係將該偏移量依據該移位量移位後產生;其中,執行該第一微指令之該執行單元係接收該第二結果而非來自該暫存器檔案之該偏移量,並利用該第二結果產生該第一結果而非利用來自該暫存器檔案之該偏移量。
  6. 如申請專利範圍第1項之微處理器,其中,更為了執行該第二微指令,該些執行單元之另一個係:由該資料暫存器接收該資料;以及 將該資料寫入該儲存佇列所分配之該入口。
  7. 如申請專利範圍第1項之微處理器,其中,該至少二個微指令包含一第三微指令,其中,為了執行該第三微指令,該些執行單元之另一個係:由該資料暫存器接收該資料;以及將該資料寫入該儲存佇列所分配之該入口。
  8. 如申請專利範圍第1項之微處理器,其中該微指令係以一不同於該指令集架構所定義之指令的編碼方式進行編碼。
  9. 如申請專利範圍第1項之微處理器,其中對執行該些微指令之各該執行單元而言,該暫存器檔案包含至多二個讀取埠一次提供至多二個來源運算元至該執行單元。
  10. 如申請專利範圍第1項之微處理器,其中該第一微指令將該暫存器檔案之一非架構暫存器指定為其目的暫存器,其中該第二微指令將該第一微指令所指定之該非架構暫存器指定為其來源暫存器之其中之一。
  11. 一種操作一微處理器之方法,該微處理器具有一指令集架構其定義有一條件儲存指令,該微處理器並具有一儲存佇列與一暫存器檔案,該方法包含:將該條件儲存指令轉譯為至少二個微指令,其中該條件 儲存指令係指定該暫存器檔案內之一資料暫存器、一基底暫存器與一偏移暫存器,其中,該條件儲存指令在該微處理器之條件旗標滿足一特定條件時,指示該微處理器將來自該資料暫存器之資料儲存至一記憶體位置;以及利用該微處理器之一非循序執行管線以執行該些微指令;其中,執行該些微指令內之一第一微指令之步驟包含,由該暫存器檔案接收一基底值與一偏移量,並對應地以該基底值與該偏移量之一函數產生一第一結果,其中,該第一結果係指定該記憶體位置之一位址;其中,執行該些微指令內之一第二微指令之步驟包含,接收該第一結果,並對應地:在該條件旗標滿足該條件時,將該第一結果寫入該儲存佇列所分配之一入口,其中該儲存佇列係在後續步驟將該資料寫入該位址所指定之該記憶體位置;以及在該條件旗標不滿足該條件時,刪除該儲存佇列所分配之該入口,以使該儲存佇列無法將該資料寫入該位址所指定之該記憶體位置。
  12. 如申請專利範圍第11之方法,其中,該基底暫存器係一不同於該資料暫存器與該偏移暫存器之暫存器,其中該條件儲存指令係指定該基底暫存器在該條件滿足時需被更新;其中,該至少二個微指令包含一第三微指令; 其中,執行該第三微指令之步驟包含,接收該基底暫存器之一先前數值與該第一結果,並對應地提供一第二結果以寫入該基底暫存器,其中在該條件滿足時該第三結果係該第一結果,在該條件不滿足時,該第三結果係該基底暫存器之該先前數值;其中,該基底暫存器之該先前數值包含一微指令執行產生之一結果,其係對應於該第三微指令之最近、循序且先前寫入該基底暫存器的數值。
  13. 如申請專利範圍第12項之方法,其中,該條件儲存指令更指定一移位量;其中,該至少二個微指令包含一第四微指令;其中,執行該第四微指令之步驟包含,由該暫存器檔案接收該移位量與該偏移量,並對應地提供一第三結果,該第三結果係將該偏移量依據該移位量移位後產生;其中,由該暫存器檔案接收該偏移量之步驟包含接收該第三結果而非來自該暫存器檔案之該偏移量,並利用該第三結果產生該第一結果而非利用來自該暫存器檔案之該偏移量。
  14. 如申請專利範圍第12項之方法,其中,該第三微指令指定該第二結果被寫入該基底暫存器;其中,順序晚於該第三微指令之一消費微指令將一來源 暫存器指定為該基底暫存器,其中,該消費微指令利用該第三微指令之該第三結果作為一來源運算元而不論該條件是否滿足。
  15. 如申請專利範圍第11項之方法,其中,該條件儲存指令更指定一移位量;其中,該至少二個微指令包含一第三微指令;其中,執行該第三微指令之步驟包含,由該暫存器檔案接收該移位量與該偏移量,並對應地提供一第二結果,該第二結果係將該偏移量依據該移位量移位後產生;其中,由該暫存器檔案接收該偏移量之步驟包含接收該第二結果而非來自該暫存器檔案之該偏移量,並利用該第二結果產生該第一結果而非利用來自該暫存器檔案之該偏移量。
  16. 如申請專利範圍第11項之方法,其中,執行該第二微指令之步驟更包含:由該資料暫存器接收該資料;以及將該資料寫入該儲存佇列所分配之該入口。
  17. 如申請專利範圍第11項之方法,其中,該至少二個微指令包含一第三微指令;其中,執行該第三微指令之步驟包含:由該資料暫存器接收該資料;以及 將該資料寫入該儲存佇列所分配之該入口。
  18. 如申請專利範圍第11項之方法,其中該微指令係以一不同於該指令集架構所定義之指令的編碼方式進行編碼。
  19. 一種具有一指令集架構之微處理器,該指令集架構定義有一條件儲存指令,該微處理器包含:一儲存佇列;一暫存器檔案;一指令轉譯器,將該條件儲存指令轉譯為至少二個微指令,其中該條件儲存指令係指定該暫存器檔案內之一資料暫存器與一基底暫存器,其中,該基底暫存器係一不同於該資料暫存器之暫存器,其中,該條件儲存指令在該微處理器之條件旗標滿足一特定條件時,指示該微處理器將來自該資料暫存器之資料儲存至一記憶體位置,其中該條件儲存指令指定該基底暫存器在一條件滿足時需被更新;以及一非循序執行管線,包含複數個執行單元以執行該些微指令;其中,為了執行該些微指令內之一第一微指令,該些執行單元之其中之一係:將該記憶體位置之一位址視為由該基底暫存器接收之一基底值之函數以進行計算;在該條件旗標滿足該條件時,將該位址寫入該儲存佇列所分配之一入口,其中,該儲存佇列係在後續步驟將該 資料寫入該位址所指定之該記憶體位置;以及在該條件旗標不滿足該條件時,刪除該儲存佇列所分配之該入口,以使該儲存佇列無法將該資料寫入該位址所指定之該記憶體位置;其中,為了執行該些微指令內之一第二微指令,該些執行單元之其中之一接收一偏移量與該基底暫存器之一先前數值,對應地計算該偏移量與該基底暫存器之該先前數值之總和,並提供一第一結果,在該條件滿足時該第一結果係該總和,在該條件不滿足時,該第一結果係該基底暫存器之該先前數值;其中,該基底暫存器之該先前數值包含一微指令執行產生之一結果,其係對應於該第二微指令之最近、循序且先前寫入該基底暫存器的數值。
  20. 如申請專利範圍第19項之微處理器,其中該條件儲存指令指定該特定該記憶體位置之該位址,寫入該記憶體位置之該資料係該基底暫存器之值與該偏移量之總和,其中,該指令轉譯器發出該第一微指令以指示該執行單元計算為該偏移量與該基底值之該總和作為該記憶體位置之該位址。
  21. 如申請專利範圍第19項之微處理器,其中該條件儲存指令係將該基底值指定為該位址,其中該指令轉譯器發出該第一微指令以指示該執行單元將該位址計算為該基底值。
  22. 如申請專利範圍第19項之微處理器,其中該條件儲存指令係將一立即值指定為該偏移量,其中該指令轉譯器發出該第一微指令以指示該執行單元接收該立即值而不存取該暫存器檔案。
  23. 如申請專利範圍第22項之微處理器,其中若是該條件儲存指令指定該基底暫存器不被更新,該指令轉譯器隨後就會將該條件儲存指令轉譯為一個單一微指令,而非至少二個微指令,其中該單一微指令係該第一微指令。
  24. 如申請專利範圍第22項之微處理器,其中該指令轉譯器將該條件儲存指令轉譯為一個單一微指令而非至少二個微指令,其中該單一微指令係該第一微指令,其中,為了執行該第一微指令,該些執行單元之其中之一更係:接收該偏移量與該基底暫存器之該先前數值,對應地計算該偏移量與該基底暫存器之該先前數值之一總和,並提供該第一結果,在該條件滿足時該第一結果係該總和,在該條件不滿足時,該第一結果係該基底暫存器之該先前數值。
  25. 如申請專利範圍第19項之微處理器,其中該條件儲存指令將該偏移量指定為一暫存器之值,其中該指令轉譯器發出該第一微指令指示該執行單元接收來自該暫存器檔案之一偏移暫存器之該偏移量之值。
  26. 如申請專利範圍第19項之微處理器,其中,該條件儲存指令更指定一移位量;其中,該至少二個微指令包含一第三微指令,其中,為了執行該第三微指令,該些執行單元其中之一接收該移位量並由該暫存器檔案接收該偏移量,並對應地提供一第二結果,該第二結果係將該偏移量依據該移位量移位後產生;其中,執行該第二微指令之該執行單元係接收該偏移量作為該第二結果。
  27. 如申請專利範圍第26項之微處理器,其中該第三微指令將該暫存器檔案之一非架構暫存器指定為其目的暫存器,其中,該第二微指令將該第三微指令指定之該非架構暫存器指定為其來源暫存器之其中之一。
  28. 如申請專利範圍第19項之微處理器,其中,更為了執行該第一微指令,該些執行單元之另一個係:由該資料暫存器接收該資料;以及將該資料寫入該儲存佇列所分配之該入口。
  29. 如申請專利範圍第19項之微處理器,其中該至少二個微指令包含一第三微指令,其中,為了執行該第三微指令,該些執行單元之另一個係:由該資料暫存器接收該資料;以及 將該資料寫入該儲存佇列所分配之該入口。
  30. 如申請專利範圍第19項之微處理器,其中該微指令係以一不同於該指令集架構所定義之指令的編碼方式進行編碼。
  31. 如申請專利範圍第19項之微處理器,其中對執行該些微指令之各該執行單元而言,該暫存器檔案包含至多二個讀取埠一次提供至多二個來源運算元至該執行單元。
  32. 一種操作一微處理器之方法,該微處理器具有一指令集架構其定義有一條件儲存指令,該微處理器並具有一儲存佇列與一暫存器檔案,該方法包含:將該條件儲存指令轉譯為至少二個微指令,其中,該條件儲存指令係指定該暫存器檔案內之一資料暫存器與一基底暫存器,其中,該基底暫存器係一不同於該資料暫存器之暫存器,其中,該條件儲存指令在該微處理器之條件旗標滿足一特定條件時,指示該微處理器將來自該資料暫存器之資料儲存至一記憶體位置,其中,該條件儲存指令指定該基底暫存器在一條件滿足時需被更新;以及利用一非循序執行管線執行該些微指令;其中,執行該些微指令內之一第一微指令之步驟包含:將依據該基底暫存器接收之一基底值與一函數以計算該記憶體位置之一位址; 在該條件旗標滿足該條件時,將該位址寫入該儲存佇列所分配之一入口,其中該儲存佇列係在後續步驟將該資料寫入該位址所指定之該記憶體位置;以及在該條件旗標不滿足該條件時,刪除該儲存佇列所分配之該入口,以使該儲存佇列無法將該資料寫入該位址所指定之該記憶體位置;其中,執行該些微指令內之一第二微指令之步驟包含,接收一偏移量與該基底暫存器之一先前數值,對應地計算該偏移量與該基底暫存器之該先前數值之總和,並提供一第一結果,在該條件滿足時該第一結果係該總和,在該條件不滿足時,該第一結果係該基底暫存器之該先前數值;其中,該基底暫存器之該先前數值包含一微指令執行產生之一結果,其係對應於該第二微指令之最近、循序且先前寫入該基底暫存器的數值。
  33. 如申請專利範圍第32項之方法,其中,該條件儲存指令指定該特定該記憶體位置之該位址,寫入該資料之該記憶體位置之該位址係該基底值與該偏移量之總和,其中,轉譯該條件儲存指令之步驟包含發出該第一微指令以指示該執行單元計算該偏移量與該基底值之該總和作為該記憶體位置之該位址。
  34. 如申請專利範圍第32項之方法,其中該條件儲存指令係將該基底值指定為該位址,其中,轉譯該條件儲存指令之 步驟包含發出該第一微指令以指示該執行單元將該位址計算為該基底值。
  35. 如申請專利範圍第32項之方法,其中該條件儲存指令係將一立即值指定為該偏移量,其中,轉譯該條件儲存指令之步驟包含發出該第一微指令以指示該執行單元接收該立即值而不存取該暫存器檔案。
  36. 如申請專利範圍第35項之方法,其中若是該條件儲存指令指定該基底暫存器不被更新,隨後轉譯該條件儲存指令之步驟就會將該條件儲存指令轉譯為一個單一微指令,而非至少二個微指令,其中,該單一微指令係該第一微指令。
  37. 如申請專利範圍第35項之方法,其中轉譯該條件儲存指令之步驟包含將該條件儲存指令轉譯為一個單一微指令而非至少二個微指令,其中,該單一微指令係該第一微指令,其中,執行該第一微指令之步驟更包含:接收該偏移量與該基底暫存器之該先前數值,對應地計算該偏移量與該基底暫存器之該先前數值之一總和,並提供該第一結果,在該條件滿足時該第一結果係該總和,在該條件不滿足時,該第一結果係該基底暫存器之該先前數值。
  38. 如申請專利範圍第32項之方法,其中該條件儲存指令將該偏移量指定為一暫存器之值,其中,轉譯該條件儲存指 令之步驟包含發出該第一微指令指示該執行單元接收來自該暫存器檔案之一偏移暫存器之該偏移量之值。
  39. 如申請專利範圍第32項之方法,其中,該條件儲存指令更指定一移位量;其中,該至少二個微指令包含一第三微指令;其中,執行該第三微指令之步驟包含,接收該移位量並由該暫存器檔案接收該偏移量,並對應地提供一第二結果,該第二結果係將該偏移量依據該移位量移位後產生;其中,執行該第二微指令之步驟包含,接收該偏移量作為該第二結果。
  40. 如申請專利範圍第39項之方法,其中該第三微指令將該暫存器檔案之一非架構暫存器指定為其目的暫存器,其中,該第二微指令將該第三微指令指定之該非架構暫存器指定為其來源暫存器之其中之一。
  41. 如申請專利範圍第40項之方法,其中,執行該第一微指令之步驟更包含:由該資料暫存器接收該資料;以及將該資料寫入該儲存佇列所分配之該入口。
  42. 如申請專利範圍第32項之方法,其中,該至少二個微指令包含一第三微指令; 其中,執行該第三微指令之步驟包含:由該資料暫存器接收該資料;以及將該資料寫入該儲存佇列所分配之該入口。
  43. 如申請專利範圍第32項之方法,其中該微指令係以一不同於該指令集架構所定義之指令的編碼方式進行編碼。
TW101112260A 2011-04-07 2012-04-06 非循序執行微處理器之條件儲存指令 TWI450196B (zh)

Applications Claiming Priority (21)

Application Number Priority Date Filing Date Title
US201161473062P 2011-04-07 2011-04-07
US201161473069P 2011-04-07 2011-04-07
US201161473067P 2011-04-07 2011-04-07
US13/224,310 US8880851B2 (en) 2011-04-07 2011-09-01 Microprocessor that performs X86 ISA and arm ISA machine language program instructions by hardware translation into microinstructions executed by common execution pipeline
US201161537473P 2011-09-21 2011-09-21
US201161541307P 2011-09-30 2011-09-30
US201161547449P 2011-10-14 2011-10-14
US201161555023P 2011-11-03 2011-11-03
US13/333,572 US8880857B2 (en) 2011-04-07 2011-12-21 Conditional ALU instruction pre-shift-generated carry flag propagation between microinstructions in read-port limited register file microprocessor
US13/333,520 US9032189B2 (en) 2011-04-07 2011-12-21 Efficient conditional ALU instruction in read-port limited register file microprocessor
US13/333,631 US8924695B2 (en) 2011-04-07 2011-12-21 Conditional ALU instruction condition satisfaction propagation between microinstructions in read-port limited register file microprocessor
US201261604561P 2012-02-29 2012-02-29
US13/413,258 US9274795B2 (en) 2011-04-07 2012-03-06 Conditional non-branch instruction prediction
US13/413,346 US9043580B2 (en) 2011-04-07 2012-03-06 Accessing model specific registers (MSR) with different sets of distinct microinstructions for instructions of different instruction set architecture (ISA)
US13/412,888 US9141389B2 (en) 2011-04-07 2012-03-06 Heterogeneous ISA microprocessor with shared hardware ISA registers
US13/413,300 US20120260073A1 (en) 2011-04-07 2012-03-06 Emulation of execution mode banked registers
US13/412,914 US9146742B2 (en) 2011-04-07 2012-03-06 Heterogeneous ISA microprocessor that preserves non-ISA-specific configuration state when reset to different ISA
US13/412,904 US9317288B2 (en) 2011-04-07 2012-03-06 Multi-core microprocessor that performs x86 ISA and ARM ISA machine language program instructions by hardware translation into microinstructions executed by common execution pipeline
US13/413,314 US9176733B2 (en) 2011-04-07 2012-03-06 Load multiple and store multiple instructions in a microprocessor that emulates banked registers
US13/416,879 US9128701B2 (en) 2011-04-07 2012-03-09 Generating constant for microinstructions from modified immediate field during instruction translation
US201261614893P 2012-03-23 2012-03-23

Publications (2)

Publication Number Publication Date
TW201301136A TW201301136A (zh) 2013-01-01
TWI450196B true TWI450196B (zh) 2014-08-21

Family

ID=46969560

Family Applications (4)

Application Number Title Priority Date Filing Date
TW101112266A TWI514265B (zh) 2011-04-07 2012-04-06 將條件載入/儲存指令轉譯為數量可變的微指令之微處理器
TW101112260A TWI450196B (zh) 2011-04-07 2012-04-06 非循序執行微處理器之條件儲存指令
TW101112263A TWI569203B (zh) 2011-04-07 2012-04-06 非循序執行微處理器之條件載入指令
TW105133761A TWI613591B (zh) 2011-04-07 2012-04-06 非循序執行微處理器之條件載入指令

Family Applications Before (1)

Application Number Title Priority Date Filing Date
TW101112266A TWI514265B (zh) 2011-04-07 2012-04-06 將條件載入/儲存指令轉譯為數量可變的微指令之微處理器

Family Applications After (2)

Application Number Title Priority Date Filing Date
TW101112263A TWI569203B (zh) 2011-04-07 2012-04-06 非循序執行微處理器之條件載入指令
TW105133761A TWI613591B (zh) 2011-04-07 2012-04-06 非循序執行微處理器之條件載入指令

Country Status (4)

Country Link
EP (5) EP3151110B1 (zh)
CN (3) CN103907089B (zh)
TW (4) TWI514265B (zh)
WO (3) WO2012138950A2 (zh)

Families Citing this family (85)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9032189B2 (en) 2011-04-07 2015-05-12 Via Technologies, Inc. Efficient conditional ALU instruction in read-port limited register file microprocessor
US9043580B2 (en) 2011-04-07 2015-05-26 Via Technologies, Inc. Accessing model specific registers (MSR) with different sets of distinct microinstructions for instructions of different instruction set architecture (ISA)
US9317288B2 (en) 2011-04-07 2016-04-19 Via Technologies, Inc. Multi-core microprocessor that performs x86 ISA and ARM ISA machine language program instructions by hardware translation into microinstructions executed by common execution pipeline
US9274795B2 (en) 2011-04-07 2016-03-01 Via Technologies, Inc. Conditional non-branch instruction prediction
US8880857B2 (en) 2011-04-07 2014-11-04 Via Technologies, Inc. Conditional ALU instruction pre-shift-generated carry flag propagation between microinstructions in read-port limited register file microprocessor
US9141389B2 (en) 2011-04-07 2015-09-22 Via Technologies, Inc. Heterogeneous ISA microprocessor with shared hardware ISA registers
US9898291B2 (en) 2011-04-07 2018-02-20 Via Technologies, Inc. Microprocessor with arm and X86 instruction length decoders
US9378019B2 (en) 2011-04-07 2016-06-28 Via Technologies, Inc. Conditional load instructions in an out-of-order execution microprocessor
US9336180B2 (en) 2011-04-07 2016-05-10 Via Technologies, Inc. Microprocessor that makes 64-bit general purpose registers available in MSR address space while operating in non-64-bit mode
US8880851B2 (en) 2011-04-07 2014-11-04 Via Technologies, Inc. Microprocessor that performs X86 ISA and arm ISA machine language program instructions by hardware translation into microinstructions executed by common execution pipeline
US9244686B2 (en) 2011-04-07 2016-01-26 Via Technologies, Inc. Microprocessor that translates conditional load/store instructions into variable number of microinstructions
US9146742B2 (en) 2011-04-07 2015-09-29 Via Technologies, Inc. Heterogeneous ISA microprocessor that preserves non-ISA-specific configuration state when reset to different ISA
US9292470B2 (en) 2011-04-07 2016-03-22 Via Technologies, Inc. Microprocessor that enables ARM ISA program to access 64-bit general purpose registers written by x86 ISA program
US8924695B2 (en) 2011-04-07 2014-12-30 Via Technologies, Inc. Conditional ALU instruction condition satisfaction propagation between microinstructions in read-port limited register file microprocessor
US9176733B2 (en) 2011-04-07 2015-11-03 Via Technologies, Inc. Load multiple and store multiple instructions in a microprocessor that emulates banked registers
US9645822B2 (en) 2011-04-07 2017-05-09 Via Technologies, Inc Conditional store instructions in an out-of-order execution microprocessor
US9128701B2 (en) 2011-04-07 2015-09-08 Via Technologies, Inc. Generating constant for microinstructions from modified immediate field during instruction translation
US9361097B2 (en) * 2013-10-18 2016-06-07 Via Technologies, Inc. Selectively compressed microcode
US9372696B2 (en) * 2013-10-18 2016-06-21 Via Technologies, Inc. Microprocessor with compressed and uncompressed microcode memories
US20160011876A1 (en) * 2014-07-11 2016-01-14 Cavium, Inc. Managing instruction order in a processor pipeline
US10175964B2 (en) * 2014-09-26 2019-01-08 Microsoft Technology Licensing, Llc Compiler caching for runtime routine redundancy tracking
US10146539B2 (en) 2014-12-14 2018-12-04 Via Alliance Semiconductor Co., Ltd. Load replay precluding mechanism
US10120689B2 (en) 2014-12-14 2018-11-06 Via Alliance Semiconductor Co., Ltd Mechanism to preclude load replays dependent on off-die control element access in an out-of-order processor
WO2016097790A1 (en) 2014-12-14 2016-06-23 Via Alliance Semiconductor Co., Ltd. Apparatus and method to preclude non-core cache-dependent load replays in out-of-order processor
EP3055769B1 (en) 2014-12-14 2018-10-31 VIA Alliance Semiconductor Co., Ltd. Mechanism to preclude load replays dependent on page walks in out-of-order processor
US10089112B2 (en) 2014-12-14 2018-10-02 Via Alliance Semiconductor Co., Ltd Mechanism to preclude load replays dependent on fuse array access in an out-of-order processor
US10146546B2 (en) * 2014-12-14 2018-12-04 Via Alliance Semiconductor Co., Ltd Load replay precluding mechanism
US10209996B2 (en) 2014-12-14 2019-02-19 Via Alliance Semiconductor Co., Ltd. Apparatus and method for programmable load replay preclusion
WO2016097800A1 (en) 2014-12-14 2016-06-23 Via Alliance Semiconductor Co., Ltd. Power saving mechanism to reduce load replays in out-of-order processor
WO2016097814A1 (en) 2014-12-14 2016-06-23 Via Alliance Semiconductor Co., Ltd. Mechanism to preclude shared ram-dependent load replays in out-of-order processor
US10146540B2 (en) 2014-12-14 2018-12-04 Via Alliance Semiconductor Co., Ltd Apparatus and method to preclude load replays dependent on write combining memory space access in an out-of-order processor
US10108427B2 (en) * 2014-12-14 2018-10-23 Via Alliance Semiconductor Co., Ltd Mechanism to preclude load replays dependent on fuse array access in an out-of-order processor
US10175984B2 (en) 2014-12-14 2019-01-08 Via Alliance Semiconductor Co., Ltd Apparatus and method to preclude non-core cache-dependent load replays in an out-of-order processor
US9740271B2 (en) 2014-12-14 2017-08-22 Via Alliance Semiconductor Co., Ltd. Apparatus and method to preclude X86 special bus cycle load replays in an out-of-order processor
US10114646B2 (en) 2014-12-14 2018-10-30 Via Alliance Semiconductor Co., Ltd Programmable load replay precluding mechanism
US10127046B2 (en) 2014-12-14 2018-11-13 Via Alliance Semiconductor Co., Ltd. Mechanism to preclude uncacheable-dependent load replays in out-of-order processor
WO2016097802A1 (en) 2014-12-14 2016-06-23 Via Alliance Semiconductor Co., Ltd. Mechanism to preclude load replays dependent on long load cycles in an out-order processor
US10228944B2 (en) 2014-12-14 2019-03-12 Via Alliance Semiconductor Co., Ltd. Apparatus and method for programmable load replay preclusion
WO2016097796A1 (en) 2014-12-14 2016-06-23 Via Alliance Semiconductor Co., Ltd. Mechanism to preclude i/o-dependent load replays in out-of-order processor
US9804845B2 (en) 2014-12-14 2017-10-31 Via Alliance Semiconductor Co., Ltd. Apparatus and method to preclude X86 special bus cycle load replays in an out-of-order processor
US10083038B2 (en) 2014-12-14 2018-09-25 Via Alliance Semiconductor Co., Ltd Mechanism to preclude load replays dependent on page walks in an out-of-order processor
WO2016097804A1 (en) * 2014-12-14 2016-06-23 Via Alliance Semiconductor Co., Ltd. Programmable load replay precluding mechanism
US10108420B2 (en) 2014-12-14 2018-10-23 Via Alliance Semiconductor Co., Ltd Mechanism to preclude load replays dependent on long load cycles in an out-of-order processor
US10108430B2 (en) 2014-12-14 2018-10-23 Via Alliance Semiconductor Co., Ltd Mechanism to preclude load replays dependent on off-die control element access in an out-of-order processor
US10088881B2 (en) 2014-12-14 2018-10-02 Via Alliance Semiconductor Co., Ltd Mechanism to preclude I/O-dependent load replays in an out-of-order processor
US10133580B2 (en) 2014-12-14 2018-11-20 Via Alliance Semiconductor Co., Ltd Apparatus and method to preclude load replays dependent on write combining memory space access in an out-of-order processor
US10108421B2 (en) 2014-12-14 2018-10-23 Via Alliance Semiconductor Co., Ltd Mechanism to preclude shared ram-dependent load replays in an out-of-order processor
EP3055768B1 (en) 2014-12-14 2018-10-31 VIA Alliance Semiconductor Co., Ltd. Mechanism to preclude uncacheable-dependent load replays in out-of-order processor
WO2016154795A1 (en) 2015-03-27 2016-10-06 Intel Corporation Efficient address translation
CN107533461B (zh) * 2015-04-24 2022-03-18 优创半导体科技有限公司 具有用于对存储器寻址的不同寄存器的计算机处理器
US11294815B2 (en) * 2015-06-10 2022-04-05 Mobileye Vision Technologies Ltd. Multiple multithreaded processors with shared data cache
GB2540944B (en) * 2015-07-31 2018-02-21 Advanced Risc Mach Ltd Vector operand bitsize control
GB2540942B (en) 2015-07-31 2019-01-23 Advanced Risc Mach Ltd Contingent load suppression
US11061672B2 (en) * 2015-10-02 2021-07-13 Via Alliance Semiconductor Co., Ltd. Chained split execution of fused compound arithmetic operations
US10642617B2 (en) * 2015-12-08 2020-05-05 Via Alliance Semiconductor Co., Ltd. Processor with an expandable instruction set architecture for dynamically configuring execution resources
CN107315569B (zh) * 2016-04-27 2021-06-18 中科寒武纪科技股份有限公司 一种用于执行RMSprop梯度下降算法的装置及方法
CN106406972B (zh) * 2016-11-04 2019-05-24 珠海市杰理科技股份有限公司 程序编译方法和编译器
US10223266B2 (en) 2016-11-30 2019-03-05 International Business Machines Corporation Extended store forwarding for store misses without cache allocate
CN108228239B (zh) * 2016-12-13 2021-04-20 龙芯中科技术股份有限公司 基于快速模拟器qemu的分支指令抓取方法和装置
US10241789B2 (en) * 2016-12-27 2019-03-26 Intel Corporation Method to do control speculation on loads in a high performance strand-based loop accelerator
US10572376B2 (en) * 2016-12-30 2020-02-25 Intel Corporation Memory ordering in acceleration hardware
US11132599B2 (en) * 2017-02-28 2021-09-28 Microsoft Technology Licensing, Llc Multi-function unit for programmable hardware nodes for neural network processing
US10579387B2 (en) 2017-10-06 2020-03-03 International Business Machines Corporation Efficient store-forwarding with partitioned FIFO store-reorder queue in out-of-order processor
US10606591B2 (en) 2017-10-06 2020-03-31 International Business Machines Corporation Handling effective address synonyms in a load-store unit that operates without address translation
US11175924B2 (en) 2017-10-06 2021-11-16 International Business Machines Corporation Load-store unit with partitioned reorder queues with single cam port
US10417002B2 (en) 2017-10-06 2019-09-17 International Business Machines Corporation Hazard detection of out-of-order execution of load and store instructions in processors without using real addresses
US10552131B2 (en) * 2017-10-16 2020-02-04 Microsoft Technology Licensing, Llc Barrier reduction during code translation
GB2569275B (en) * 2017-10-20 2020-06-03 Graphcore Ltd Time deterministic exchange
CN107943518B (zh) * 2017-11-24 2021-07-16 中国航空工业集团公司西安航空计算技术研究所 一种局部跳转指令取指电路
US11200186B2 (en) 2018-06-30 2021-12-14 Intel Corporation Apparatuses, methods, and systems for operations in a configurable spatial accelerator
US11055105B2 (en) 2018-08-31 2021-07-06 Micron Technology, Inc. Concurrent image measurement and execution
CN110021272A (zh) * 2019-01-29 2019-07-16 信利(惠州)智能显示有限公司 显示模组的gamma调节方法、装置、计算机和存储介质
US20200264921A1 (en) * 2019-02-20 2020-08-20 Nanjing Iluvatar CoreX Technology Co., Ltd. (DBA "Iluvatar CoreX Inc. Nanjing") Crypto engine and scheduling method for vector unit
CN109918132B (zh) * 2019-03-26 2021-04-16 龙芯中科技术股份有限公司 一种指令安装方法、装置、电子设备及存储介质
CN117632785A (zh) * 2019-05-31 2024-03-01 苹果公司 机器学习任务到共享高速缓存中的分配
CN110750304B (zh) * 2019-09-30 2022-04-12 百富计算机技术(深圳)有限公司 提升任务切换效率的方法及终端设备
US11907713B2 (en) 2019-12-28 2024-02-20 Intel Corporation Apparatuses, methods, and systems for fused operations using sign modification in a processing element of a configurable spatial accelerator
CN111585878B (zh) * 2020-04-23 2022-03-25 腾讯科技(深圳)有限公司 一种智能控制方法、智能网关及系统
US11461098B2 (en) 2020-06-27 2022-10-04 Intel Corporation Apparatuses, methods, and systems for instructions for operating system transparent instruction state management of new instructions for application threads
US11275686B1 (en) * 2020-11-09 2022-03-15 Centaur Technology, Inc. Adjustable write policies controlled by feature control registers
CN112379928B (zh) * 2020-11-11 2023-04-07 海光信息技术股份有限公司 指令调度方法以及包括指令调度单元的处理器
US11687347B2 (en) * 2021-05-25 2023-06-27 Andes Technology Corporation Microprocessor and method for speculatively issuing load/store instruction with non-deterministic access time using scoreboard
CN113590197B (zh) * 2021-07-30 2023-09-26 中国人民解放军国防科技大学 一种支持可变长向量处理的可配置处理器及其实现方法
US11663013B2 (en) 2021-08-24 2023-05-30 International Business Machines Corporation Dependency skipping execution
CN116627507B (zh) * 2023-06-19 2024-04-12 海光信息技术股份有限公司 队列控制方法、装置、电子设备和计算机可读存储介质

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20060095733A1 (en) * 2004-09-08 2006-05-04 Samsung Electronics Co., Ltd. Hardware device for executing conditional instruction out-of-order fetch and execution method thereof
US20100205404A1 (en) * 2009-02-12 2010-08-12 Via Technologies, Inc. Pipelined microprocessor with fast conditional branch instructions based on static microcode-implemented instruction state
CN101876889A (zh) * 2009-02-12 2010-11-03 威盛电子股份有限公司 执行多个快速条件分支指令的方法以及相关的微处理器

Family Cites Families (32)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6112287A (en) * 1993-03-01 2000-08-29 Busless Computers Sarl Shared memory multiprocessor system using a set of serial links as processors-memory switch
GB2282245B (en) 1993-09-23 1998-04-15 Advanced Risc Mach Ltd Execution of data processing instructions
US6378062B1 (en) * 1994-01-04 2002-04-23 Intel Corporation Method and apparatus for performing a store operation
US5887152A (en) * 1995-04-12 1999-03-23 Advanced Micro Devices, Inc. Load/store unit with multiple oldest outstanding instruction pointers for completing store and load/store miss instructions
US5832297A (en) * 1995-04-12 1998-11-03 Advanced Micro Devices, Inc. Superscalar microprocessor load/store unit employing a unified buffer and separate pointers for load and store operations
US6643765B1 (en) * 1995-08-16 2003-11-04 Microunity Systems Engineering, Inc. Programmable processor with group floating point operations
US6185668B1 (en) * 1995-12-21 2001-02-06 Intergraph Corporation Method and apparatus for speculative execution of instructions
US5832205A (en) 1996-08-20 1998-11-03 Transmeta Corporation Memory controller for a microprocessor for detecting a failure of speculation on the physical nature of a component being addressed
JP3570188B2 (ja) * 1997-12-25 2004-09-29 富士通株式会社 可変長符号処理機構を有するデータ処理装置
US6684323B2 (en) * 1998-10-27 2004-01-27 Stmicroelectronics, Inc. Virtual condition codes
US7065633B1 (en) 1999-01-28 2006-06-20 Ati International Srl System for delivering exception raised in first architecture to operating system coded in second architecture in dual architecture CPU
US8127121B2 (en) * 1999-01-28 2012-02-28 Ati Technologies Ulc Apparatus for executing programs for a first computer architechture on a computer of a second architechture
US7941647B2 (en) * 1999-01-28 2011-05-10 Ati Technologies Ulc Computer for executing two instruction sets and adds a macroinstruction end marker for performing iterations after loop termination
EP1050803B1 (en) * 1999-05-03 2007-01-17 STMicroelectronics S.A. Guarded computer instruction execution
US6647489B1 (en) * 2000-06-08 2003-11-11 Ip-First, Llc Compare branch instruction pairing within a single integer pipeline
US6871273B1 (en) 2000-06-22 2005-03-22 International Business Machines Corporation Processor and method of executing a load instruction that dynamically bifurcate a load instruction into separately executable prefetch and register operations
US20040064684A1 (en) * 2002-09-30 2004-04-01 Kalluri Seshagiri P. System and method for selectively updating pointers used in conditionally executed load/store with update instructions
EP1447742A1 (en) * 2003-02-11 2004-08-18 STMicroelectronics S.r.l. Method and apparatus for translating instructions of an ARM-type processor into instructions for a LX-type processor
US9977674B2 (en) * 2003-10-14 2018-05-22 Intel Corporation Micro-operation generator for deriving a plurality of single-destination micro-operations from a given predicated instruction
US20060015708A1 (en) * 2004-07-14 2006-01-19 Boggs Darrell D Microprocessor with branch target determination in decoded microinstruction code sequence
US7421566B2 (en) * 2005-08-12 2008-09-02 International Business Machines Corporation Implementing instruction set architectures with non-contiguous register file specifiers
US7504982B2 (en) * 2005-12-06 2009-03-17 Raytheon Company Anti-Missile system and method
US7793079B2 (en) * 2007-06-27 2010-09-07 Qualcomm Incorporated Method and system for expanding a conditional instruction into a unconditional instruction and a select instruction
US7836278B2 (en) * 2007-07-25 2010-11-16 Advanced Micro Devices, Inc. Three operand instruction extension for X86 architecture
CN101436120B (zh) * 2007-08-17 2011-05-04 凹凸电子(武汉)有限公司 微控制器、执行指令的方法及电子系统
US8069340B2 (en) * 2008-02-08 2011-11-29 Via Technologies, Inc. Microprocessor with microarchitecture for efficiently executing read/modify/write memory operand instructions
US8090931B2 (en) * 2008-09-18 2012-01-03 Via Technologies, Inc. Microprocessor with fused store address/store data microinstruction
CN101866280B (zh) * 2009-05-29 2014-10-29 威盛电子股份有限公司 微处理器及其执行方法
US8301865B2 (en) * 2009-06-29 2012-10-30 Oracle America, Inc. System and method to manage address translation requests
US9501286B2 (en) * 2009-08-07 2016-11-22 Via Technologies, Inc. Microprocessor with ALU integrated into load unit
US8392693B2 (en) * 2009-08-28 2013-03-05 Via Technologies, Inc. Fast REP STOS using grabline operations
US8495343B2 (en) * 2009-09-09 2013-07-23 Via Technologies, Inc. Apparatus and method for detection and correction of denormal speculative floating point operand

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20060095733A1 (en) * 2004-09-08 2006-05-04 Samsung Electronics Co., Ltd. Hardware device for executing conditional instruction out-of-order fetch and execution method thereof
US20100205404A1 (en) * 2009-02-12 2010-08-12 Via Technologies, Inc. Pipelined microprocessor with fast conditional branch instructions based on static microcode-implemented instruction state
CN101876889A (zh) * 2009-02-12 2010-11-03 威盛电子股份有限公司 执行多个快速条件分支指令的方法以及相关的微处理器

Also Published As

Publication number Publication date
EP2695078B1 (en) 2016-10-19
EP3151110A1 (en) 2017-04-05
EP3151110B1 (en) 2019-12-25
TW201704992A (zh) 2017-02-01
TW201301126A (zh) 2013-01-01
WO2012138950A3 (en) 2014-05-01
CN103765400B (zh) 2016-05-04
EP2695055A4 (en) 2015-07-15
CN103907089A (zh) 2014-07-02
WO2012138950A2 (en) 2012-10-11
CN103765401B (zh) 2017-04-12
EP3151109B1 (en) 2019-12-25
TWI514265B (zh) 2015-12-21
EP2695055A2 (en) 2014-02-12
CN103765401A (zh) 2014-04-30
TW201305906A (zh) 2013-02-01
TW201301136A (zh) 2013-01-01
CN103765400A (zh) 2014-04-30
TWI613591B (zh) 2018-02-01
EP2695078A4 (en) 2014-07-23
WO2012138957A1 (en) 2012-10-11
EP2695055B1 (en) 2018-06-06
EP3151109A1 (en) 2017-04-05
EP2695077A4 (en) 2014-08-13
EP2695077B1 (en) 2018-06-06
CN103907089B (zh) 2017-07-07
WO2012138952A1 (en) 2012-10-11
EP2695078A1 (en) 2014-02-12
EP2695077A1 (en) 2014-02-12
TWI569203B (zh) 2017-02-01

Similar Documents

Publication Publication Date Title
TWI450196B (zh) 非循序執行微處理器之條件儲存指令
TWI474191B (zh) 控制暫存器對應於異質指令集架構處理器
TWI450188B (zh) 具有條件指令之微處理器、其處理方法及電腦程式產品
US9898291B2 (en) Microprocessor with arm and X86 instruction length decoders
TWI514266B (zh) 可執行x86指令集架構及ARM指令集架構機器語言程式指令的微處理器及其運作方法與編碼於一計算機裝置的至少一非暫態電腦可使用媒體中的電腦程式產品
US8880857B2 (en) Conditional ALU instruction pre-shift-generated carry flag propagation between microinstructions in read-port limited register file microprocessor
US9146742B2 (en) Heterogeneous ISA microprocessor that preserves non-ISA-specific configuration state when reset to different ISA
US9244686B2 (en) Microprocessor that translates conditional load/store instructions into variable number of microinstructions
US20120260065A1 (en) Multi-core microprocessor that performs x86 isa and arm isa machine language program instructions by hardware translation into microinstructions executed by common execution pipeline
US20130067199A1 (en) Control register mapping in heterogeneous instruction set architecture processor
US20120260064A1 (en) Heterogeneous isa microprocessor with shared hardware isa registers
CN107832083B (zh) 具有条件指令的微处理器及其处理方法
US9378019B2 (en) Conditional load instructions in an out-of-order execution microprocessor
TWI569205B (zh) 一種微處理器及其操作方法
US9645822B2 (en) Conditional store instructions in an out-of-order execution microprocessor
TWI478065B (zh) 執行模式備份暫存器之模擬