TWI423122B - 微處理器以及指令執行方法 - Google Patents
微處理器以及指令執行方法 Download PDFInfo
- Publication number
- TWI423122B TWI423122B TW099115641A TW99115641A TWI423122B TW I423122 B TWI423122 B TW I423122B TW 099115641 A TW099115641 A TW 099115641A TW 99115641 A TW99115641 A TW 99115641A TW I423122 B TWI423122 B TW I423122B
- Authority
- TW
- Taiwan
- Prior art keywords
- instruction
- condition code
- microprocessor
- flag
- code flag
- Prior art date
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/30105—Register structure
- G06F9/30116—Shadow registers, e.g. coupled registers, not forming part of the register space
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30094—Condition code generation, e.g. Carry, Zero flag
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30145—Instruction analysis, e.g. decoding, instruction word fields
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30181—Instruction operation extension or modification
- G06F9/30185—Instruction operation extension or modification according to one or more bits in the instruction, e.g. prefix, sub-opcode
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Executing Machine-Instructions (AREA)
- Advance Control (AREA)
Description
本發明係有關於一種微處理器中的條件式指令(conditional instructions),特別是其使用的條件碼旗標(condition code flags)。
傳統微處理器包括一結構可視的暫存器,其包括了由條件式指令(例如條件式分支指令(conditional branch instruction)或條件式搬移指令(conditional move instruction))所使用之條件碼旗標。舉例來說,在x86指令集架構中,EFLAGS暫存器包括了進位旗標(Carry Flag,CF)、同位旗標(Parity Flag,PF)、輔助進位旗標(Auxiliary Carry Flag,AF)、零旗標(Zero Flag,ZF)、符號旗標(Sign Flag,SF)以及溢位旗標(Overflow Flag,OF),這些係可為條件式指令所使用的條件碼旗標,並且明確定義於IA-32的英特爾處理器軟體發展員手冊(Intel architecture software developer's manual)的第一卷”基礎架構”之中。該手冊整體以引用方式併入本文中。x86架構中條件式指令的例子包括條件滿足時的跳轉(Condition Is Met,Jcc)指令、條件式搬移(Conditional Move,CMOVcc)指令、浮點條件式搬移(Floating Point Conditional Move,FCMOVcc)指令、循環LOOPZ和LOOPNZ指令、或是條件設置指令(Set Byte on Condition,SETcc)。其他的指令(亦即程式序列(program sequence)中比條件式指令更早的一個指令),用以執行算術或邏輯運算產生一結果值,而微處理器根據該結果值更新EFLAGS暫存器中的條件碼旗標。舉例來說,程式可包括一指令序列,其包括了條件轉移JNZ指令之前的加法(ADD)指令。該指令集架構用以指定(specify)微處理器係根據加法(ADD)指令的結果值來更新EFLAGS暫存器中的條件碼旗標。舉例來說,若加法(ADD)指令的結果值為0,則微處理器將會設定(set)EFLAGS暫存器中的零旗標。條件轉移JNZ指令用以指定當EFLAGS暫存器中的零旗標被清除時(亦即非零),微處理器將會跳轉至的目的位址。否則,微處理器將擷取條件轉移JNZ指令之後的下個順序的指令。
某些現代微處理器的另一個特色就是其包括了與微處理器之指令集架構(或架構,有時亦稱為巨集架構(macroarchitecture))不同的微架構(microarchitecture))。這在x86架構的微處理器中相當普遍。該微架構指定了指令集、暫存器集、異常集(set of exception)等等可為微處理器之組合語言程式設計師或編譯器撰寫者可見的集。另一方面,微架構指定了微處理器的內部組織,並包括了該架構中不可見的細節。舉例來說,微架構指定微處理器之各式各樣的功能單元以及其配置形式;指定微處理器為管線形式(pipeline)或非管線形式、為純量(scalar)或是超純量(superscalar)、係執行亂序處理(out-of-order execution)或是基於某些像是分支預測(branch prediction)和/或載入擊中(load hit)預測而預測執行(speculative execution);指定快取記憶體(cache memory)的大小和配置方式等等。兩個不同的微處理器可具有相同的架構,但卻又具有差異性極大的微架構。具體說來,在包括微碼(microcode)的微處理器中,微架構指定其所有的指令集,其與架構指令集不同且對程式設計師而言通常是不可見的。微架構的指令集係微處理器之功能單元所實際執行的指令的集合。架構指令集的指令可以是非常複雜且為可變的長度。對照之下,微架構指令集的指令通常比架構指令集的指令簡單,且符合精簡指令集(Reduced Instruction Set Computer,RISC)之載入-儲存(load-store)和固定指令長度的指令規則。再者,微架構暫存器集的暫存器數目通常比架構暫存器集中可用的暫存器的數目大。舉例來說,微架構可將暫存器更名成其較大的暫存器集合以提升效能。
具有不同之架構和微架構指令集的微處理器包括一指令編譯器(instruction translator),用以將架構指令(亦稱為巨集指令)編譯成微架構的指令(微指令)並發送(dispatch)至執行單元(execution units)執行。此外,此類的微處理器通常包括微碼,用以實現某些巨集指令。微碼係微架構指令集之微指令的程序或序列,儲存於微處理器的微碼記憶體中。當指令編譯器遇到以微碼實現的巨集指令,指令編譯器將控制權轉移給一微序列器(microsequencer),其從微碼記憶體擷取微碼微指令並傳送給執行單元執行。微指令集包括用以更新該架構之結構可視暫存器的指令,以便實現巨集指令。具體說來,微指令集包括用以更新擁有條件碼旗標之結構可視暫存器(例如x86的EFLAGS暫存器)的指令。
本發明的發明人認識到很多時候微碼必須包括條件式指令(例如條件式分支或條件式搬移指令),其根據算術及邏輯指令的結果值條件式地執行。舉例來說,用以實現浮點巨集指令的微碼程序可包括產生一中間值的算術或邏輯微指令,該中間值後續緊接著一條件式指令,舉例來說,該條件式指令欲了解該中間值是否產生進位、溢位、零值、負或正值。然而,微碼並無法改變架構之條件碼旗標的暫存器,除非以微碼實現的巨集指令更新了架構的條件碼旗標的暫存器,這對於x86(舉例來說)架構的許多指令來說並非如此。以另外一例子來說,微碼的異常處理器(microcode exception handler)可能需要包括產生一結果值的算術或邏輯微指令,其中該結果值後續的條件式指令欲了解該結果值的特性,例如條件碼一般所表示的特性。然而,異常處理器並不為架構所允許而更新此架構的條件碼旗標的暫存器。
因此,需要一種有微架構的有效方法,使得微架構指令集的微指令在不影響架構條件碼旗標之暫存器的條件碼旗標的情況下,來影響及檢視類似條件碼的特性。
在一實施例中,本發明揭露一種微處理器,具有一微架構指令集。微處理器包括一第一暫存器,具有複數第一條件碼旗標。微處理器亦包括一第二暫存器,具有複數第二條件碼旗標,其中上述第二條件碼旗標與上述第一條件碼旗標相同。微處理器亦包括微架構指令集之一第一指令。第一指令根據第一指令的結果值指示微處理器更新第一條件碼旗標或第二條件碼旗標。第一指令包括一欄位,用以表示是否要更新第一條件碼旗標或第二條件碼旗標。微處理器亦包括微架構指令集之一第二指令。第二指令根據第一條件碼旗標或第二條件碼旗標指示微處理器條件式地執行一運算。第二指令包括一欄位,用以表示是否要使用第條件碼旗標或第二條件碼旗標來決定是否要執行上述運算。
在另一實施例中,本發明揭露一種指令執行方法,用以根據條件碼旗標處理一微處理器之內的條件式指令,其中微處理器具有一微架構指令集。上述方法包括處理微架構指令集之一第一指令,其中第一指令根據第一指令的結果值指示上述微處理器更新一第一暫存器中的複數第一條件碼旗標或一第二暫存器中的複數第二條件碼旗標。第一指令包括一欄位,用以表示是否要更新第一條件碼旗標或第二條件碼旗標。上述方法亦包括處理微架構指令集之一第二指令。第二指令根第一條件碼旗標或第二條件碼旗標指示微處理器條件式地執行一運算。第二指令包括一欄位,用以表示是否要使用第一條件碼旗標或第二條件碼旗標來決定是否要執行上述運算。
為使本發明之上述目的、特徵和優點能更明顯易懂,下文特舉較佳實施例,並配合所附圖式,作詳細說明如下:在一實施例中,本發明增加一新的GFLAGS暫存器(第1圖的GFLAGS暫存器122))至微架構中,其如同EFLAGS暫存器(第1圖的EFLAGS暫存器124),包括了相同的條件碼旗標(第4圖的條件碼旗標402至414),但其並非為結構可視的。反而,其僅對於微架構指令集為可視。此外,本發明增加一G位元(第2圖的G位元208))至微指令格式,用以指定GFLAGS暫存器122的讀取或寫入,而非EFLAGS暫存器124。這使得指令集的指令可將該處理器之暫存器(第1圖的非架構暫存器集126和架構暫存器集128)的內容當成輸入運算元(input operands)使用,並在不實際更新EFLAGS暫存器124之下看EFLAGS暫存器124上的結果值為何。舉例來說,條件式分支(Jcc)和條件式搬移(MOVcc)可取決於GFLAGS暫存器122的條件之上,而非EFLAGS暫存器124。在另一例子中,用以產生一結果值的指令(例如加法(ADD)或移位(SHIFT)指令),可根據該結果值來指定(透過G位元208)更新GFLAGS暫存器122的條件碼旗標,而非EFLAGS暫存器124的條件碼旗標。
參照第1圖,其表示根據本發明所述之一微處理器100的方塊圖。微處理器100包括一指令快取(instruction cache)102,用以快取程式指令,其在此亦稱為巨集指令132。指令快取102提供巨集指令132至指令編譯器104。指令編譯器104將大部分的巨集指令132編譯成複數個微指令134。然而,指令編譯器104用以了解某些的巨集指令132係實現於微處理器100之微碼單元118的微碼142中。當指令編譯器104處理到實現於微碼142中的巨集指令132時,指令編譯器104將控制權轉交至微碼單元118的一微序列器microsequencer(圖未顯示),其從微碼單元118的微碼記憶體(圖未顯示)擷取微碼142的複數個微指令136,並傳送微指令136進行執行。
暫存器別名表(register alias table,RAT) 106,在此亦稱為相依性產生單元(dependency generation unit) 106,接收指令編譯器104所編譯的微指令134以及微碼單元118的微碼142的微指令136,並產生微指令134/136的相依性。在一實施例中,微處理器100係一亂序執行處理器,而暫存器別名表106係微處理器100最後依照程式順序(program order)來接收指令的管線。暫存器別名表106依照程式順序接收指令編譯器104所編譯的微指令134以及微碼單元118的微碼142的微指令136,並決定每一微指令134/136於微處理器100中其他未撤回之指令上的相依性。具體說來,對於每一來源運算元(其可為GFLAGS暫存器122或EFLAGS暫存器124),暫存器別名表106產生了對於一最新之未撤回微指令134/136的相依關係,該最新之未撤回微指令134/136係先前于微指令134/136,並用以更新微指令134/136所指定之架構暫存器集128或非架構暫存器集126中的暫存器來作為來源運算元的提供者,指定的方式不是顯性地指定於其運算元指定者欄位(第2圖的運算元指定者欄位204)中,就是隱性地透過其運算碼(第2圖的運算碼202)指定。暫存器別名表106儲存微處理器100中關於每一未撤回之指令的暫存器更名資訊。暫存器更名資訊合併指令的程式順序,其為重新序列緩衝器(reorder buffer) 116所用來根據程式序列撤回指令。在傳送每一指令至保留站(reservation stations)108之前,暫存器別名表106於重新序列緩衝器116中分配一位置(entry)給每一指令。重新序列緩衝器116係耦接至暫存器別名表106、保留站108、執行單元112和撤回單元(retire unit)114。
保留站108從暫存器別名表106接收微指令134/136,並隨著其來源運算元根據暫存器別名表106所產生的相依性資訊而可取得,以及隨著執行單元112可供使用,保留站108將微指令134/136傳送至執行單元112。也就是說,保留站108一直在等待發送微指令134/136,直到該類型之有能力執行微指令134/136的執行單元112可供使用為止。此外,保留站108一直等待發送微指令134/136,直到每一來源運算元(其可為GFLAGS暫存器122或EFLAGS暫存器124)之相依性所指定的較舊指令產生其結果值給微指令134/136為止。在一實施例中,較舊的指令可用三種方式的其中一種產生其結果值:藉著更新架構暫存器集128或非架構暫存器集126;藉著將其結果值寫入重新序列緩衝器116,這提供了該結果值;或是透過用以從執行單元112之輸出端將結果值提供回相關執行單元112之輸入端的傳送匯流排(forwarding buses)。
微處理器100亦包括架構暫存器集128和非架構暫存器集126,用以提供來源運算元至執行單元112。具體說來,根據第1圖的實施例,架構暫存器集128包括x86架構的EFLAGS暫存器124,其細節表示於第3圖習知技藝的方塊圖中。第3圖的EFLAGS暫存器124包括前述的進位旗標302、同位旗標304、輔助進位旗標306、零旗標308、符號旗標312以及溢位旗標314。此外,非架構暫存器集126包括GFLAGS暫存器122,其細節表示於第4圖的方塊圖中。第4圖的GFLAGS暫存器122包括進位旗標402、同位旗標404、輔助進位旗標406、零旗標408、符號旗標412以及溢位旗標414,其係與EFLAGS暫存器124之同名的旗標相對應。在第4圖的實施例中,GFLAGS暫存器122內的條件碼旗標所在的位元位置與EFLAGS暫存器124內的條件碼旗標所在的位元位置不同,如圖所示。
撤回單元114依照微指令134/136於重新序列緩衝器116中所辨識的程式順序將微指令134/136撤回。具體說來,撤回單元114將微指令134/136的結果值寫入微處理器100的架構狀態,例如寫入至架構暫存器集128或非架構暫存器集126,特別是寫入至GFLAGS暫存器122或EFLAGS暫存器124。撤回單元114可將微指令134/136的結果值寫入微處理器100的架構狀態,不論是從重新序列緩衝器116或直接從執行單元112寫入。
相對於前一微處理器,在一實施例中修改了微處理器100的下列元件。首先,如上所述,第1圖的GFLAGS暫存器122被新增到微架構,而第2圖的G個位元208被新增到微指令的格式。第二,暫存器別名表106被修改以產生GFLAGS暫存器122的相依性和EFLAGS暫存器124的相依性。第三,保留站108被修正以辨識GFLAGS暫存器122相依性。第四,若是G位元208被設定而非E位元206,則執行單元112被修正為從GFLAGS暫存器122而非EFLAGS暫存器124取得輸入運算元。第五,若G位元208被設定,則撤回單元114修正為更新GFLAGS暫存器122而非EFLAGS暫存器124。以上的修正使得微指令集的指令將微處理器100的暫存器當成輸入運算元使用,並且在不實際更新EFLAGS暫存器124的情況下看EFLAGS暫存器124上的結果會為何。舉例來說,條件式分支(Jcc)和條件式搬移(MOVcc)可取決於GFLAGS暫存器122中條件碼旗標的條件之上。此外,如果要的話,微碼可藉著把GFLAGS暫存器122的內容搬進另一暫存器來查閱GFLAGS暫存器122的條件碼旗標。
在一實施例中,微處理器100的架構係IA-32巨集架構(亦稱為x86架構)。如果微處理器可正確地執行大多數專門設計於IA-32微處理器之上執行的應用程式,則代表微處理器具有IA-32巨集架構。若得到預期的結果值,則應用程式正確地執行。然而,其他的實施例係實現於微處理器之巨集架構並非x86巨集架構之下,而且除了架構條件碼旗標暫存器之外又合併了另一種的條件碼旗標暫存器,其加入了一位元至指令格式,用以指示微處理器100讀取/寫入另一種的條件碼旗標暫存器,而非架構條件碼旗標暫存器。
參照第2圖,表示根據本發明第1圖之微處理器100之微指令134/136的格式的方塊圖。該指令格式包括一運算碼欄位202,其包括一運算碼,用以指定微處理器100為指令134/136所指示而執行的運算。具體說來,某些運算碼指示微處理器100根據GFLAGS暫存器122或EFLAGS暫存器124之微指令134/136所指定的條件碼旗標來條件式地執行運算。換言之,若指定的條件碼旗標具有一個值滿足運算碼所指定的條件,則微處理器100執行所指定的運算;否則,微處理器100不執行所指定的運算。舉例來說,若零旗標304/408係清除的,則微處理器100將執行由搬移指令MOVNZ(若非零則搬移)指令所指定的位元組搬移操作;否則,微處理器100將不執行所指定之位元組的搬移操作。
指令格式亦包括一或多個運算元指定者欄位204,用以指定指令134/136之來源和目的運算元的來源,例如架構暫存器集128和非架構暫存器集126的暫存器。指令格式亦包括E位元206,若將其設定的話,則指示微處理器100根據指令的結果值讀取或更新(根據運算碼202) EFLAGS暫存器124的條件碼旗標。指令格式亦包括G位元208,若將其設定的話,指示微處理器100根據指令的結果值讀取或更新(根據運算碼202) GFLAGS暫存器122的條件碼旗標。
雖然目前為止的實施例主要針對使用GFLAGS暫存器122的微碼142,但在其他的實施例中指令編譯器104亦產生使用GFLAGS暫存器122的微指令134。舉例來說,x86的LOOP和JCXZ指令係基於x86之ECX暫存器的值來分支。由于x86架構定義這些指令並不會修改EFLAGS暫存器124,因此指令編譯器104使用GFLAGS暫存器122,如以下表1和表2的兩個編譯序列所示。表1表示指令編譯器104對應於編譯一x86的LOOP巨集指令所產生的兩個微指令序列。表2表示指令編譯器104對應於編譯一x86的JCXZ巨集指令所產生的兩個微指令序列。在這些表中,G位元208係被設定,如微架構匯編語言指令中的”.G”所示。
在第(1)行,微指令將ECX暫存器減1,並將結果值放入ECX暫存器。此外,第(1)行的微指令根據該結果值更新GFLAGS暫存器122的條件碼旗標。
在第(2)行,微指令根據第4圖之GFLAGS暫存器122的零旗標條件碼旗標408是否被設定而條件式地分支至指定的目標位址。換言之,若ZF 408被設定則其分支至目標位址,若ZF 408被清除則其不分支至目標位址。
在第(3)行,微指令將0與ECX暫存器做互斥或的運算,並將結果值放入臨時暫存器。此外,第(3)行的微指令根據該結果值更新GFLAGS暫存器122的條件碼旗標。
在第(4)行,微指令根據第4圖之GFLAGS暫存器122的零旗標條件碼旗標408是否被設定而條件式地分支至指定的目標位址。換言之,若ZF 408被清除則其分支至目標位址,若ZF 408被設定則其不分支至目標位址。
參照至第5圖,其中表示了用以描述根據本發第1圖之微處理器100的流程圖方塊圖。流程開始於方塊502。
在方塊502中,微指令134/136到達暫存器別名表106,其具有設定的G位元208或E位元206。流程進行至判斷方塊504。
在方塊504中,暫存器別名表106判斷G位元208或E位元206被設定。如果是E位元206被設定,則流程進行至方塊536,而如果是G位元208被設定,則流程進行至方塊506。
在方塊506中,暫存器別名表106產生微指令134/136的相依性,包括任何與GFLAGS暫存器122有關的相依性,並將微指令134/136發送到保留站108。流程進行至方塊508。
在方塊508中,當微指令134/136的相依性滿足條件且相關的執行單元112為可用狀態時,保留站108將微指令134/136發送至該執行單元112。流程進行至方塊512。
在判斷方塊512中,執行單元112判斷GFLAGS暫存器122是否提供微指令134/136的來源或目的。若根據微指令134/136的結果值GFLAGS暫存器122為微指令134/136的目的,則流程進行至方塊518。反之,若GFLAGS暫存器122為微指令134/136之運算元的來源,則表示微指令134/136係基於GFLAGS暫存器122中的條件碼旗標之一者的條件式指令,流程進行至方塊514。
在方塊514中,執行單元112控制其運算元輸入多工器(muxes)(圖未顯示)以便從GFLAGS暫存器122接收條件碼旗標,並且根據條件式微指令134/136所指定的GFLAGS暫存器122中條件碼旗標的值,條件式地執行由條件式微指令134/136所指定的運算。流程進行至方塊516。
在方塊516中,撤回單元114適時地根據執行單元112是否執行條件式微指令134/136所指定的運算來更新微處理器100的架構狀態。流程結束於方塊516。
在方塊518中,執行單元112產生微指令134/136的結果值,並且也根據該結果值產生GFLAGS暫存器122的新的條件碼旗標的值。流程進行至方塊522。
在方塊522中,撤回單元114以微指令134/136的結果值更新微處理器100的架構狀態,包括以產生於方塊518之新的條件碼旗標的值更新GFLAGS暫存器122。流程結束於方塊522。
在方塊536中,暫存器別名表106產生微指令134/136的相依性,包括任何與EFLAGS暫存器124有關的相依性,並將微指令134/136發送到保留站108。流程進行至方塊538。
在方塊538中,當微指令134/136的相依性滿足條件且相關的執行單元112為可用狀態時,保留站108將微指令134/136發送至該執行單元112。流程進行至方塊542。
在判斷方塊542中,執行單元112判斷EFLAGS暫存器124是否提供微指令134/136的來源或目的。若根據微指令134/136的結果值EFLAGS暫存器124為微指令134/136的目的,則流程進行至方塊548。反之,若EFLAGS暫存器124為微指令134/136之運算元的來源,則表示微指令134/136係基於EFLAGS暫存器124中的條件碼旗標之一者的條件式指令,流程進行至方塊544。
在方塊544中,執行單元112控制其運算元輸入多工器(muxes)(圖未顯示)以便從EFLAGS暫存器124接收條件碼旗標,並且根據條件式微指令134/136所指定的EFLAGS暫存器124中的條件碼旗標的值,條件式地執行由條件式微指令134/136所指定的運算。流程進行至方塊546。
在方塊546中,撤回單元114適時地根據執行單元112是否執行條件式微指令134/136所指定的運算來更新微處理器100的架構狀態。流程結束於方塊546。
在方塊548中,執行單元112產生微指令134/136的結果值,並且也根據該結果值產生EFLAGS暫存器124的新的條件碼旗標的值。流程進行至方塊552。
在方塊552中,撤回單元114以微指令134/136的結果值更新微處理器100的架構狀態,包括以產生於方塊548之新的條件碼旗標的值更新EFLAGS暫存器124。流程結束於方塊552。
雖然本發明主要以微處理器100為包括EFLAGS暫存器124之x86的架構微處理器來說明,但另一種形式的條件碼旗標暫存器其僅屬於微處理器之微架構的一部分而非屬於此微處理器之架構的一部分,這樣的概念亦可合併入具有其他架構的微處理器中。
此外,雖然本發明說明了微處理器包括了另一種形式的條件碼旗標暫存器其僅屬於微處理器之微架構的一部分而非屬於此微處理器之架構的一部分,在其他的實施例中可包括該另一種形式的條件碼旗標暫存器亦為架構的一部分,亦即,對於架構的指令係可視的。類似的實施例係表示於第6圖中,其中GFLAGS暫存器122係架構暫存器集128的一部分。在第6圖的實施例中,微處理器100之指令集架構的巨集指令132的指令格式包括一個位元,其與第2圖的G位元208類似,用以表示是否要更新或讀取GFLAGS暫存器122而非EFLAGS暫存器124。
本發明敘述了各種的實施例,必須知道的是,這些實施例僅以範例的方式說明,而非用以限定本發明。對熟悉電腦相關領域的相關人士而言,在不違背本發明的精神之下,可對本發明實施例的形式和細節做各式各樣的改變。舉例來說,可用軟體來實現本發明之裝置和方法所述的功能、製造、模塑化、模擬、描述和/或測試。這可用程式語言(例如C、C++)、硬體描述語言(HDL)(包括Verilog硬體描述語言、VHDL等等),或其他可用的程式等等來實現。類似的軟體可存放於任何已知的電腦可讀取媒體之中,例如半導體、磁碟、或光碟(例如CD-ROM、DVD-ROM等等)。本發明所述之裝置和方法的實施例可包括於一半導體智慧財產核心之中,例如一微處理器核心(例如嵌入於硬體描述語言之中),並於生產積體電路時轉換成硬體的形式。此外,本發明所述的裝置和方法可內嵌成硬體和軟體結合。因此,本發明並不限定於所述的任何實施例,而僅為後附的申請專利範圍所定義。具體說來,本發明可實現於一微處理器裝置,其可用於一個一般用途的電腦中。最後,熟悉此技藝之人士可了解其在不違背本發明後附申請專利範圍所定義的範疇之下,可輕易地使用所揭露的概念和特定實施例,當成設計或修改其他結構實現與本發明相同目的的基礎。
本發明雖以較佳實施例揭露如上,然其並非用以限定本發明的範圍,任何熟習此項技藝者,在不脫離本發明之精神和範圍內,當可做些許的更動與潤飾,因此本發明之保護範圍當視後附之申請專利範圍所界定者為準。
102...指令快取
104...指令編譯器
106...暫存器別名表
108...保留站
112...執行單元
114...撤回單元
116...重新序列緩衝器
118...微碼單元
122...GFLAGS暫存器
124...EFLAGS暫存器
126...非架構暫存器集
128...架構暫存器集
132...巨集指令
134、136...微指令
142...微碼
202...運算碼
204...運算元指定者欄位
206...E位元
208...G位元
302、402...進位旗標
304、404...同位旗標
306、406...輔助進位旗標
308、408...零旗標
312、412...符號旗標
314、414...溢位旗標
502、504、506、508、512、514、516、518、522、536、538、542、544、546、548、552...流程方塊
第1圖表示根據本發明所述之一微處理器的方塊圖;
第2圖表示根據本發第1圖所示之微處理器之微指令的格式的方塊圖;
第3圖表示一習知方塊圖,說x86架構之EFLAGS暫存器的條件碼旗標;
第4圖表示根據本發明一實施例所述之方塊圖,說第1圖之GFLAGS暫存器的條件碼旗標;
第5圖表示用以描述根據本發第1圖之微處理器的流程方塊圖;以及
第6圖表示根據本發明另一實施例所述之一微處理器的方塊圖。
102...指令快取
104...指令編譯器
106...暫存器別名表
108...保留站
112...執行單元
114...撤回單元
116...重新序列緩衝器
118...微碼單元
122...GFLAGS暫存器
124...EFLAGS暫存器
126...非架構暫存器集
128...架構暫存器集
132...巨集指令
134、136...微指令
142...微碼
Claims (22)
- 一種微處理器,具有一微架構指令集,包括:一第一暫存器,具有複數第一條件碼旗標;一第二暫存器,具有複數第二條件碼旗標,上述第二條件碼旗標與上述第一條件碼旗標相同;上述微架構指令集之一第一指令,其中上述第一指令根據上述第一指令之一結果值指示上述微處理器更新上述第一條件碼旗標或上述第二條件碼旗標,上述第一指令包括一欄位,用以表示是否要更新上述第一條件碼旗標或上述第二條件碼旗標;以及上述微架構指令集之一第二指令,其中上述第二指令根據上述第一條件碼旗標或上述第二條件碼旗標指示上述微處理器條件式地執行一運算,上述第二指令包括一欄位,用以表示是否要使用上述第一條件碼旗標或上述第二條件碼旗標來決定是否要執行上述運算。
- 如申請專利範圍第1項所述之微處理器,其中上述第一暫存器包括一x86架構的EFLAGS暫存器。
- 如申請專利範圍第2項所述之微處理器,其中上述第一條件碼旗標包括上述x86架構的EFLAGS暫存器的進位旗標、同位旗標、輔助進位旗標、零旗標、符號旗標以及溢位旗標。
- 如申請專利範圍第1項所述之微處理器,其中上述微處理器之上述微架構指令集係與上述微處理器之架構指令集不同。
- 如申請專利範圍第1項所述之微處理器,更包括:一執行單元,耦接至上述第一暫存器和上述第二暫存器,並用以執行上述第二指令,其中上述執行單元係用以當上述第二指令的上述欄位表示使用上述第一條件碼旗標來決定是否要執行上述運算時,從上述第一暫存器接收上述第一條件碼旗標,其中上述執行單元係用以當上述第二指令的上述欄位表示使用上述第二條件碼旗標來決定是否要執行上述運算時,從上述第二暫存器接收上述第二條件碼旗標。
- 如申請專利範圍第1項所述之微處理器,更包括:一撤回單元,耦接至上述第一暫存器和上述第二暫存器,並用以撤回上述第一指令,其中上述撤回單元係用以當上述第一指令的上述欄位表示更新上述第一條件碼旗標時,更新上述第一條件碼旗標,其中上述撤回單元係用以當上述第一指令的上述欄位表示更新上述第二條件碼旗標時,更新上述第二條件碼旗標。
- 如申請專利範圍第1項所述之微處理器,更包括:一相依性產生單元,用以產生上述第二指令於其他指令之上的相依性,其中上述相依性產生單元用以產生上述第二指令於一最新之未撤回指令之上的相依性,其中上述最新之未撤回指令係早於上述第二指令,且當上述第二指令的上述欄位表示使用上述第一條件碼旗標來決定是否要執行上述運算時,上述最新之未撤回指令將上述第一暫存器更新,以及上述相依性產生單元用以產生上述第二指令於另一最新之未撤回指令之上的相依性,其中上述另一最新之未撤回指令係早於上述第二指令,且當上述第二指令的上述欄位表示使用上述第二條件碼旗標來決定是否要執行上述運算時,上述另一最新之未撤回指令將上述第二暫存器更新。
- 如申請專利範圍第7項所述之微處理器,更包括:一指令發送單元,耦接至上述相依性產生單元,其中上述指令發送單元等待將上述第二指令發送至一執行單元,直到當上述第二指令的上述欄位表示使用上述第一條件碼旗標來決定是否要執行上述運算時,上述最新之未撤回指令產生了上述第一條件碼旗標的更新值給上述第二指令為止,以及上述指令發送單元等待將上述第二指令發送至上述執行單元,直到當上述第二指令的上述欄位表示使用上述第二條件碼旗標來決定是否要執行上述運算時,上述另一最新之未撤回指令產生了上述第二條件碼旗標的更新值給上述第二指令為止。
- 如申請專利範圍第1項所述之微處理器,其中上述第一指令和上述第二指令係包括於上述微處理器之一微碼單元中,上述微碼單元包含複數微指令,其用以實現上述微處理器之架構的一指令。
- 如申請專利範圍第1項所述之微處理器,更包括:一指令編譯器,用以將上述微處理器之架構的一指令編譯成上述第一指令和上述第二指令。
- 如申請專利範圍第1項所述之微處理器,其中上述第一暫存器係上述微處理器之一架構暫存器,上述第二暫存器係上述微處理器之一非架構暫存器。
- 一種指令執行方法,用以根據條件碼旗標處理一微處理器之內的條件式指令,其中上述微處理器具有一微架構指令集,上述方法包括:處理上述微架構指令集之一第一指令,其中上述第一指令根據上述第一指令之一結果值指示上述微處理器更新一第一暫存器中的複數第一條件碼旗標或一第二暫存器中的複數第二條件碼旗標,上述第一指令包括一欄位,用以表示是否要更新上述第一條件碼旗標或上述第二條件碼旗標;以及處理上述微架構指令集之一第二指令,其中上述第二指令根據上述第一條件碼旗標或上述第二條件碼旗標指示上述微處理器條件式地執行一運算,上述第二指令包括一欄位,用以表示是否要使用上述第一條件碼旗標上述第二條件碼旗標來決定是否要執行上述運算。
- 如申請專利範圍第12項所述之指令執行方法,其中上述第一暫存器包括一x86架構的EFLAGS暫存器。
- 如申請專利範圍第13項所述之指令執行方法,其中上述條件碼旗標包括上述x86架構的EFLAGS暫存器的進位旗標、同位旗標、輔助進位旗標、零旗標、符號旗標以及溢位旗標。
- 如申請專利範圍第12項所述之指令執行方法,其中上述微處理器之上述微架構指令集係與上述微處理器之架構指令集不同。
- 如申請專利範圍第12項所述之指令執行方法,更包括:當上述第二指令的上述欄位表示使用上述第一條件碼旗標來決定是否要執行上述運算時,從上述第一暫存器接收上述第一條件碼旗標;以及當上述第二指令的上述欄位表示使用上述第二條件碼旗標來決定是否要執行上述運算時,從上述第二暫存器接收上述第二條件碼旗標,其中上述第一條件碼旗標或第二條件碼旗標的接收係由上述微處理器之一執行單元所執行。
- 如申請專利範圍第12項所述之指令執行方法,更包括:當上述第一指令的上述欄位表示更新上述第一條件碼旗標時,更新上述第一條件碼旗標;以及當上述第一指令的上述欄位表示更新上述第二條件碼旗標時,更新上述第二條件碼旗標。
- 如申請專利範圍第12項所述之指令執行方法,更包括:產生上述第二指令於一最新之未撤回指令之上的相依性,其中上述最新之未撤回指令係早於上述第二指令,且當上述第二指令的上述欄位表示使用上述第一條件碼旗標來決定是否要執行上述運算時,上述最新之未撤回指令將上述第一暫存器更新;以及產生上述第二指令於另一最新之未撤回指令之上的相依性,其中上述另一最新之未撤回指令係早於上述第二指令,且當上述第二指令的上述欄位表示使用上述第二條件碼旗標來決定是否要執行上述運算時,上述另一最新之未撤回指令將上述第二暫存器更新。
- 如申請專利範圍第18項所述之指令執行方法,更包括:等待將上述第二指令發送至一執行單元,直到當上述第二指令的上述欄位表示使用上述第一條件碼旗標來決定是否要執行上述運算時,早於上述第二指令之上述最新之未撤回指令產生了上述第一條件碼旗標的更新值給上述第二指令為止;以及等待將上述第二指令發送至上述執行單元,直到當上述第二指令的上述欄位表示使用上述第條件碼旗標來決定是否要執行上述運算時,早於上述第二指令之上述另一最新之未撤回指令產生了上述第二條件碼旗標的更新值給上述第二指令為止。
- 如申請專利範圍第12項所述之指令執行方法,其中上述第一指令和第二指令係包括於上述微處理器之一微碼單元中,上述微碼單元包含複數微指令,其用以實現上述微處理器之架構的一指令。
- 如申請專利範圍第12項所述之指令執行方法,更包括:將上述微處理器之架構的一指令編譯成上述第一指令和第二指令。
- 如申請專利範圍第12項所述之指令執行方法,其中上述第一暫存器係上述微處理器之一架構暫存器,上述第二暫存器係上述微處理器之一非架構暫存器。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US12/469,430 US8069339B2 (en) | 2009-05-20 | 2009-05-20 | Microprocessor with microinstruction-specifiable non-architectural condition code flag register |
Publications (2)
Publication Number | Publication Date |
---|---|
TW201042540A TW201042540A (en) | 2010-12-01 |
TWI423122B true TWI423122B (zh) | 2014-01-11 |
Family
ID=42771718
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
TW099115641A TWI423122B (zh) | 2009-05-20 | 2010-05-17 | 微處理器以及指令執行方法 |
TW102143702A TWI506543B (zh) | 2009-05-20 | 2010-05-17 | 微處理器以及指令執行方法 |
Family Applications After (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
TW102143702A TWI506543B (zh) | 2009-05-20 | 2010-05-17 | 微處理器以及指令執行方法 |
Country Status (3)
Country | Link |
---|---|
US (1) | US8069339B2 (zh) |
CN (1) | CN101847092B (zh) |
TW (2) | TWI423122B (zh) |
Families Citing this family (28)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8909908B2 (en) * | 2009-05-29 | 2014-12-09 | Via Technologies, Inc. | Microprocessor that refrains from executing a mispredicted branch in the presence of an older unretired cache-missing load instruction |
US8332618B2 (en) * | 2009-08-07 | 2012-12-11 | Via Technologies, Inc. | Out-of-order X86 microprocessor with fast shift-by-zero handling |
US8799628B2 (en) * | 2009-08-31 | 2014-08-05 | Advanced Micro Devices, Inc. | Early branch determination |
US9952864B2 (en) * | 2009-12-23 | 2018-04-24 | Intel Corporation | System, apparatus, and method for supporting condition codes |
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 |
US9645822B2 (en) | 2011-04-07 | 2017-05-09 | Via Technologies, Inc | Conditional store instructions in an out-of-order execution microprocessor |
US9141389B2 (en) | 2011-04-07 | 2015-09-22 | Via Technologies, Inc. | Heterogeneous ISA microprocessor with shared hardware ISA registers |
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 |
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 |
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 |
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) |
US9274795B2 (en) | 2011-04-07 | 2016-03-01 | Via Technologies, Inc. | Conditional non-branch instruction prediction |
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 |
US9176733B2 (en) | 2011-04-07 | 2015-11-03 | Via Technologies, Inc. | Load multiple and store multiple instructions in a microprocessor that emulates banked registers |
US9898291B2 (en) | 2011-04-07 | 2018-02-20 | Via Technologies, Inc. | Microprocessor with arm and X86 instruction length decoders |
US9032189B2 (en) | 2011-04-07 | 2015-05-12 | Via Technologies, Inc. | Efficient conditional ALU instruction in read-port limited register file microprocessor |
US9128701B2 (en) | 2011-04-07 | 2015-09-08 | Via Technologies, Inc. | Generating constant for microinstructions from modified immediate field during instruction translation |
US9378019B2 (en) | 2011-04-07 | 2016-06-28 | Via Technologies, Inc. | Conditional load instructions in an out-of-order execution microprocessor |
EP2624126B1 (en) * | 2011-04-07 | 2016-11-02 | VIA Technologies, Inc. | Efficient conditional ALU instruction in read-port limited register file microprocessor |
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 |
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 |
WO2013095569A1 (en) * | 2011-12-22 | 2013-06-27 | Intel Corporation | Method, apparatus and system for selective execution of a commit instruction |
CN102637149B (zh) * | 2012-03-23 | 2015-07-01 | 山东极芯电子科技有限公司 | 一种处理器及其运行方法 |
US9256427B2 (en) | 2012-12-11 | 2016-02-09 | International Business Machines Corporation | Tracking multiple conditions in a general purpose register and instruction therefor |
CN105993000B (zh) * | 2013-10-27 | 2021-05-07 | 超威半导体公司 | 用于浮点寄存器混叠的处理器和方法 |
US11281468B2 (en) | 2019-06-12 | 2022-03-22 | Shanghai Zhaoxin Semiconductor Co., Ltd. | Instruction execution method and instruction execution device |
CN110221862B (zh) * | 2019-06-12 | 2021-06-01 | 上海兆芯集成电路有限公司 | 指令执行方法及指令执行装置 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
TW569136B (en) * | 2002-05-09 | 2004-01-01 | Ip First Llc | Apparatus and method for conditional instruction execution |
US6684323B2 (en) * | 1998-10-27 | 2004-01-27 | Stmicroelectronics, Inc. | Virtual condition codes |
TW200515280A (en) * | 2003-07-15 | 2005-05-01 | Transitive Ltd | Shared code caching method and apparatus for program code conversion |
US7376819B2 (en) * | 2002-06-28 | 2008-05-20 | Renesas Technology Corp. | Data processor with selectable word length |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5440702A (en) * | 1992-10-16 | 1995-08-08 | Delco Electronics Corporation | Data processing system with condition code architecture for executing single instruction range checking and limiting operations |
US5551051A (en) * | 1994-09-20 | 1996-08-27 | Motorola, Inc. | Isolated multiprocessing system having tracking circuit for verifyng only that the processor is executing set of entry instructions upon initiation of the system controller program |
US6629235B1 (en) * | 2000-05-05 | 2003-09-30 | International Business Machines Corporation | Condition code register architecture for supporting multiple execution units |
CN1302379C (zh) * | 2003-12-12 | 2007-02-28 | 上海奇码数字信息有限公司 | 条件控制管理装置及方法 |
-
2009
- 2009-05-20 US US12/469,430 patent/US8069339B2/en active Active
-
2010
- 2010-05-13 CN CN2010101741578A patent/CN101847092B/zh active Active
- 2010-05-17 TW TW099115641A patent/TWI423122B/zh active
- 2010-05-17 TW TW102143702A patent/TWI506543B/zh active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6684323B2 (en) * | 1998-10-27 | 2004-01-27 | Stmicroelectronics, Inc. | Virtual condition codes |
TW569136B (en) * | 2002-05-09 | 2004-01-01 | Ip First Llc | Apparatus and method for conditional instruction execution |
US7376819B2 (en) * | 2002-06-28 | 2008-05-20 | Renesas Technology Corp. | Data processor with selectable word length |
TW200515280A (en) * | 2003-07-15 | 2005-05-01 | Transitive Ltd | Shared code caching method and apparatus for program code conversion |
Also Published As
Publication number | Publication date |
---|---|
US20100299504A1 (en) | 2010-11-25 |
TW201415357A (zh) | 2014-04-16 |
US8069339B2 (en) | 2011-11-29 |
CN101847092A (zh) | 2010-09-29 |
TWI506543B (zh) | 2015-11-01 |
TW201042540A (en) | 2010-12-01 |
CN101847092B (zh) | 2013-08-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
TWI423122B (zh) | 微處理器以及指令執行方法 | |
US8850164B2 (en) | Microprocessor that fuses MOV/ALU/JCC instructions | |
TWI470546B (zh) | 微處理器、管線式微處理器、快速執行條件分支指令之方法、以及解析第一或第二類別條件分支指令之方法 | |
US8856496B2 (en) | Microprocessor that fuses load-alu-store and JCC macroinstructions | |
TWI506550B (zh) | 管線式微處理器、執行兩種條件分支指令的方法以及其電腦程式產品 | |
EP2430526B1 (en) | Instruction cracking based on machine state | |
TWI502500B (zh) | 微處理器、微處理器操作方法及其電腦程式產品 | |
US10394562B2 (en) | Microprocessor that fuses if-then instructions | |
CN107003853B (zh) | 用于数据推测执行的系统、装置和方法 | |
CN107003850B (zh) | 用于数据推测执行的系统、装置和方法 | |
EP1562107B1 (en) | Apparatus and method for performing early correction of conditional branch instruction mispredictions | |
KR101723711B1 (ko) | 조건부 쇼트 포워드 브랜치들을 산술적으로 동등한 술어적 명령어들로 변환 | |
US7185182B2 (en) | Pipelined microprocessor, apparatus, and method for generating early instruction results | |
CN110221862A (zh) | 指令执行方法及指令执行装置 | |
JP2009524167A (ja) | オペランドの早期の条件付き選択 | |
US8560810B2 (en) | Microprocessor with microtranslator and tail microcode instruction for fast execution of complex macroinstructions having both memory and register forms | |
US7100024B2 (en) | Pipelined microprocessor, apparatus, and method for generating early status flags | |
FitzRoy-Dale | The VLIW and EPIC processor architectures | |
Steele | Instruction Decoder Design for an Embedded Processor | |
HAICHEN | A general framework to realize an abstract machine as an ILP processor with application to java | |
Subramanian | Implementation of a Synchronous Counterflow Pipeline Processor |