專利名稱::微處理器以及相關指令執(zhí)行的方法
技術領域:
:本發(fā)明有關于微處理器,特別有關于一管線(pipelined)微處理器中的呼叫以及返回指令的處理。
背景技術:
:程序通常包含子程序呼叫指令(subroutinecallinstructions)以及從子程序返回指令(returninstruction)0一個呼叫指令會使得一個程序流程從目前的程序或指令序列改變至一個與目前提取及執(zhí)行的程序不同的一指令序列或程序。一呼叫指令指定(specify)一個呼叫地址或稱目的地址,其為子程序的第一個指令的地址。此外,呼叫指令指示處理器儲存在呼叫指令之后的下一個指令地址,此地址稱為返回地址。一返回指令也會使得一個程序流程改變至一個與目前提取及執(zhí)行的程序不同的一個指令序列。然而,一個返回指令并沒有明確的指定目的地址(targetaddress)。此外,一個返回指令指示微處理器使用最近一個儲存的返回地址當做不同指令序列的第一指令的地址,或是一現在返回(now-returning)子程序的地址。上述現在返回子程序中的返回指令使得處理器開始提取在最近一個已執(zhí)行的呼叫指令的次一指令。呼叫以及返回指令將更新系統(tǒng)的結構狀態(tài)(architecturalstate)。例如,于一個傳統(tǒng)x86架構中的處理器,一個呼叫指令更新一個結構堆疊指針暫存器以及更新存儲器(即將一個返回地址推入(push)至存儲器中的一個堆疊的堆疊指針值上)。一個返回指令亦會更新結構堆疊指針暫存器。許多傳統(tǒng)處理器也預測地(speculatively)執(zhí)行指令。也就是說,當傳統(tǒng)處理器遇到一個條件分支指令,其預測分支指令的結果(即方向以及目的地址),并根據預測結果繼續(xù)提取以及執(zhí)行指令。當一個呼叫或返回指令發(fā)生在指令的預測路徑上,直到處理器不再預測的執(zhí)行時,處理器才更新關聯于呼叫或返回指令的結構狀態(tài),亦即直到處理器解析(resolve)完所有在呼叫或返回指令之前的條件分支指令。也就是說,傳統(tǒng)的處理器將呼叫或返回指令送至其多個執(zhí)行單元,并且在執(zhí)行單元解析完所有在呼叫或返回指令之前被提取且未引退的條件分支指令之后,更新關聯于呼叫或返回指令的結構狀態(tài)。因此,呼叫以及返回指令像其他指令(例如條件分支指令),會通過執(zhí)行階段(stage)以及引退(retirement)階段以被執(zhí)行以及引退。因此,就時脈周期來說,呼叫或返回指令的延遲與其他指令相同。再者,呼叫或返回指令消耗相當多的資源,例如,執(zhí)行單元的時間槽(timeslot)、暫存器別名表(registeraliastable,以下簡稱RAT)項目(entry)、保留站項目或重排序緩沖器項目。因此,需要一種具有更佳技術的微處理器,以允許程序來呼叫子程序以及從子程序返回。
發(fā)明內容本發(fā)明實施例提供一種微處理器,包括一指令集結構,其中包括一呼叫指令類型、一返回指令類型以及其他指令類型。且該微處理器包括一執(zhí)行單元,其用以正確地執(zhí)行其他指令類型的程序指令;以及一呼叫/返回堆疊,其具有多個以后進先出方式設置的項目。呼叫/返回堆疊為微處理器的結構狀態(tài),其不可被其他指令類型的程序指令所修改,但其可被呼叫以及返回指令類型的程序指令所修改。微處理器也包括一提取單元,用以提取程序指令以及傳送其他指令類型的程序指令至執(zhí)行單元以被正確地執(zhí)行。提取單元正確地執(zhí)行呼叫以及返回指令類型的程序指令,而不傳送呼叫以及返回指令類型的程序指令至執(zhí)行單元以被正確地執(zhí)行。本發(fā)明另一實施例提供一種指令執(zhí)行的方法,用以立即地執(zhí)行一微處理器的一提取單元中呼叫以及返回指令類型的程序指令。方法包含由提取單元提取程序指令,其中程序指令包括微處理器的一指令集結構的一呼叫指令類型、一返回指令類型以及其他指令類型。方法包含由提取單元傳送其他指令類型的程序指令至微處理器的執(zhí)行單元以被正確地執(zhí)行。方法也包含正確地執(zhí)行呼叫以及返回指令類型的程序指令,而不傳送上述呼叫以及返回指令類型的程序指令至執(zhí)行單元以被正確地執(zhí)行。其中正確地執(zhí)行上述呼叫以及返回指令類型的程序指令由提取單元所執(zhí)行。呼叫以及返回指令類型的程序指令修改一呼叫/返回堆疊,此呼叫/返回堆疊為微處理器的結構狀態(tài)。其中,呼叫/返回堆疊具有多個個以后進先出方式設置的項目,且其中呼叫/返回堆疊為不可被其他指令類型的程序指令所修改的結構狀態(tài)。本發(fā)明的其中一個優(yōu)點在于,由于提取單元(其可為微碼單元)可在不將快速呼叫以及返回指令分配至執(zhí)行管線的情況下,直接執(zhí)行以及引退快速呼叫以及返回指令,因此,快速呼叫以及返回指令的執(zhí)行可以比傳統(tǒng)呼叫以及返回指令的執(zhí)行具有更少的延遲。其次,利用提取單元正確的執(zhí)行快速呼叫以及返回指令,可避免在傳統(tǒng)呼叫以及返回指令中,產生的錯誤預測以及后續(xù)更正(correction)所耗費的微處理器資源。本發(fā)明的另一個優(yōu)點為,可使用比傳統(tǒng)呼叫以及返回指令所需的更少的微處理器資源來解析以及引退快速呼叫以及返回指令。例如,由于快速呼叫或返回指令并沒有被分配至執(zhí)行管線,因此快速呼叫以及返回指令并不會占用在暫存器別名表、保留站、執(zhí)行單元或重排序緩沖器中的項目。圖1是顯示依據本發(fā)明施例的一微處理器的區(qū)塊圖。圖2是顯示圖1中依據本發(fā)明的快速呼叫/返回堆疊單元122的區(qū)塊圖。圖3是顯示一依據本發(fā)明實施例的流程圖,顯示快速呼叫/返回堆疊單元的初始化流程。圖4是顯示依據本發(fā)明實施例的圖1的提取單元的操作流程圖,以處理一個快速呼叫指令。圖5是顯示依據本發(fā)明實施例的一流程圖,用以顯示圖1的提取單元執(zhí)行一個快速返回指令的操作。圖6是顯示依據本發(fā)明實施例的一流程圖,用以顯示圖1的微處理器執(zhí)行一個條件分支指令的操作。圖7a、圖7b與圖7c是顯示依據本發(fā)明實施例的一表格,用以顯示圖1的微處理器100執(zhí)行一個程序順序的操作。圖8是顯示依據本發(fā)明另一實施例的一微處理器示意圖。圖9是顯示依據本發(fā)明實施例的一流程圖,用以顯示圖8的微處理器的操作,用以處理由微碼所實現的一使用者程序,其中使用者程序可包含可由一微碼單元所提取以及執(zhí)行的快速呼叫以及返回指令。具體實施方式為使本發(fā)明的上述和其他目的、特征、和優(yōu)點能更明顯易懂,下文特舉出較佳實施例,并配合所附圖式,作詳細說明如下。參見圖1,是顯示依據本發(fā)明的一微處理器100的區(qū)塊圖。微處理器100包括一提取單元(fetchunit)104,其從一指令快取106提取程序指令。一指令指針暫存器112提供一提取地址168至指令快取106。提取單元104從指令快取106的提取地址168上提取指令。提取的程序指令可包含使用者程序指令,例如一個操作系統(tǒng)或應用程序。提取的指令可包含一般指令,其中包含條件分支指令(conditionalbranchinstruction,以下簡稱CB)。提取的指令也包含依據本發(fā)明的快速呼叫以及返回指令。一般指令(normalinstruction)為由微處理器100的執(zhí)行單元138執(zhí)行以及引退單元(retireunit)144引退的程序指令。相反地,一個快速呼叫或返回指令為一由微處理器100的提取單元104或微碼單元128所解析以及引退的程序指令,而非由微處理器100的執(zhí)行單元138以及引退單元144來處理。提取單元104也包含一分支預測器118。分支預測器118相應于提取單元104的指令指針暫存器(pointer)112產生一個提取地址168至指令快取106的動作,產生一預測目的地址156至多工器114以及一預測方向158至提取地址控制器126。特別地,分支預測器118依據提取地址168是否指定一個先前包含一條件分支指令的快取列,指示提取地址控制器126預測目的地址156及預測方向158是否為有效(valid)。于一實施例中,分支預測器118包含一個分支目的快取(未圖示)。當提取地址168在分支目的快取中時,分支預測器118產生預測目的地址156至多工器114以及預測方向158至提取地址控制器126。微處理器100利用先前執(zhí)行過的條件分支指令地址以及解析的目的地址更新分支目的快取。此外,微處理器100依據先前執(zhí)行過的條件分支指令的已解析方向所得到的方向預測信息更新分支目的快取。提取單元104從指令快取106中讀出程序指令,并傳送提取到的程序指令至指令解碼器108。指令解碼器108解碼提取到的指令,并判斷每一個提取到的指令應該發(fā)送至微處理器100的執(zhí)行管線或在提取單元104中執(zhí)行以及引退。此處執(zhí)行管線可視為于圖1所示的提取單元104以及微碼單元128之下的管線部份,即多工器132、暫存器別名表134、指令排程器136、執(zhí)行單元138以及引退單元144。一個條件分支指令為指令解碼器108發(fā)送至執(zhí)行單元的一般指令146的例子之一。在發(fā)送一個一般指令146至微處理器100的執(zhí)行單元的同時,指令解碼器108也產生一個CB發(fā)送指示162至提取單元104的快速呼叫/返回堆疊單元122。CB發(fā)送指示162的操作請參見以下的快速呼叫/返回堆疊單元122的描述。指令解碼器108傳送一般指令146至一多工器132,此多工器132從來自提取單元104的一般指令146以及來自一個微碼單元128的一般指令148之間進行選擇。微碼單元128提供一般指令148至多工器132,其將詳細描述于圖8。多工器132傳送一般指令146/148至暫存器別名表134。暫存器別名表134(RAT)決定所有一般指令146/148的運算元相依性。一個在暫存器別名表134中的目前一般指令146/148可具有一或多個相依于先前執(zhí)行過的一般指令146/148的結果的運算元。暫存器別名表134決定這些運算元相依性之后,轉送一般指令146/148至一個指令排程器136。于一條件分支指令146例子中,對一先前指令產生一個用以解析分支條件或條件分支指令146的目的地址的結果,會存在一運算元相依性。指令排程器136用以排程一般指令146/148以供執(zhí)行。在指令排程器136發(fā)送欲執(zhí)行的一般指令146/148之前,指令排程器136將等候,一直到要求的運算元為可用(available)。在一條件分支指令146的例子中,在指令排程器136發(fā)送條件分支指令146準備執(zhí)行之前,一個先前一般指令146的結果必須為可用。指令排程器136傳送所具有可用運算元的一般指令146/148至微處理器100的多個執(zhí)行單元138。執(zhí)行單元138執(zhí)行一般指令146/148。對一個條件分支146,執(zhí)行單元138計算正確的分支方向以及目的地址,接著將計算的正確分支方向與隨著條件分支指令146下至執(zhí)行管線的預測方向158進行比較,并且將計算的正確分支目的地址與伴隨條件分支指令146下至執(zhí)行管線的預測目的地址156進行比較。當上述兩預測的值皆正確時,分支預測器118正確地預測分支,且提取單元104在提取條件分支指令146后提取到適當的指令。否貝IJ,分支預測器118不正確地預測分支結果,且提取單元104在提取條件分支指令146后提取到錯誤的指令,以上情形的錯誤預測必須要被更正。執(zhí)行單元138傳送所有已執(zhí)行的一般指令146/148其包含條件分支指令錯誤預測信息的結果至一引退單元144。引退單元144架構性地位于執(zhí)行管線的末端,用以寫回執(zhí)行結果至微處理器100的結構暫存器以及引退一般指令146/148。微處理器100的執(zhí)行管線包含多工器132、暫存器別名表134、指令排程器136、執(zhí)行單元138以及引退單元144。在條件分支指令146的例子中,引退單元144產生一個CB錯誤預測指示(CBmispredictedindication)178至提取單元104以及微碼單元128。當分支預測器118錯誤預測分支結果時,CB錯誤預測指示178為真。在這種情況下,引退單元144也會產生一個CB正確目的地址176。其地址為執(zhí)行單元138解析分支會發(fā)生時,條件分支指令146中所指定的分支目的地址,或當執(zhí)行單元138解析分支不會發(fā)生時,條件分支指令146之后的下一個接續(xù)地址。錯誤預測一個條件分支指令146將致使微處理器100從微處理器100的執(zhí)行管線中刷新(flush)(例如,依照程序順序)比條件分支指令146更新的所有指令,并開始從引退單元144所產生的CB正確目的地址176中提取指令。提取單元104中的提取地址控制器126從引退單元144中接收CB錯誤預測指示178以及CB正確目的地址176。多工器選擇信號152控制多工器114以從多個可能的地址中選擇其中一個,提取單元104將這些位于指令快取106中的可能地址上提取指令。多工器114將選到的地址載入至指令指針暫存器112。若CB錯誤預測指示178為真,提取地址控制器126產生多工器選擇信號152以選擇CB正確目的地址176。若CB錯誤預測指示178為假,提取地址控制器126預設產生多工器選擇信號152以選擇下一接續(xù)IP地址(nextsequentialIPaddress,以下簡稱NSIP)154,除非分支預測器118預測有一個會發(fā)生的分支,或指令解碼器108指出遇到一個快速呼叫或返回指令。NSIP154是由一個遞增電路116所產生的提取地址168之后的下一個接續(xù)地址。指令解碼器108從指令快取106中提取快速呼叫以及返回指令。指令解碼器100分別產生其值為真的一個呼叫指令指示124或一個返回指令指示142至快速呼叫/返回堆疊單元122以及提取地址控制器126。快速呼叫/返回堆疊單元122正確地以及非選擇性的執(zhí)行以及引退在提取單元104里的快速呼叫或返回指令(即不管任何情況,提取單元104絕對不會分配快速呼叫以及返回指令至執(zhí)行單元138),并且不會將快速呼叫或返回指令轉送至微處理器100的執(zhí)行管線。特別地,快速呼叫/返回堆疊單元122包含并更新相關的結構狀態(tài),以如前述執(zhí)行以及引退快速呼叫或返回指令。因此,本發(fā)明的微處理器100,可以比必須被分配至執(zhí)行管線的一個一般呼叫以及返回指令使用更少時脈周期,并且更快及正確地執(zhí)行并引退快速呼叫以及返回指令。值得注意的是,此處所描述的快速呼叫以及返回指令的早期執(zhí)行以及引退,有別于處理器設計領域所熟知的呼叫或返回指令預測。于一個可預測呼叫以及返回指令的傳統(tǒng)微處理器中,必須進行預測操作,并發(fā)現錯誤預測后清除不正確的提取到的指令,以及在正確目的地址(即正確的呼叫或返回地址)提取指令。反之,本發(fā)明的快速呼叫/返回堆疊單元122永遠正確地執(zhí)行以及解析在提取單元104中的快速呼叫以及返回指令,如此一來不需要使用執(zhí)行單元138以及引退單元144以正確地執(zhí)行呼叫以及返回指令,也不需由快速呼叫/返回堆疊單元122更正一個錯誤預測,因為快速呼叫/返回堆疊單元122不需要預測快速呼叫以及返回指令。指令解碼器108也提供呼叫指令指示124以及返回指令指示142至提取地址控制器126。指令解碼器108也提供呼叫地址164至多工器114??焖俸艚?返回堆疊單元122也從指令解碼器108接收CB發(fā)送指示162以及從引退單元144接收CB錯誤預測指示178。最后,快速呼叫/返回堆疊單元122提供一個推出的(popped)返回地址166至提取地址控制器126。關于快速呼叫/返回堆疊單元122以及其操作將詳細描述于以下的圖2以及圖7a-圖7c的區(qū)塊圖以及圖3-圖6的流程圖。接著參見圖2,是顯示圖1中依據本發(fā)明的快速呼叫/返回堆疊單元122的區(qū)塊圖。快速呼叫/返回堆疊單元122包括多個呼叫/返回堆疊212(call/returnstacks,以下簡稱為CRS212),如圖所示的呼叫/返回堆疊0212至呼叫/返回堆疊3212。于一實施例中,快速呼叫/返回堆疊單元122包含4個CRS212。雖然所有實施例包含多個CRS212于快速呼叫/返回堆疊單元122中,其它實施例可包含更多或更少于4的CRS212。每一CRS212包含相同多個項目,其中每一個項目用以儲存來自一個快速呼叫指令的返回地址,以一后進先出(lastinfirstout,LIF0)的方式設置。于一實施例中,每一個CRS212具有8個呼叫/返回堆疊項目(雖然圖2只顯示6個項目),僅管其他實施例可考慮每一CRS212中具有更多或更少于8個的項目。一個CRS212中的項目數為一個設計項目,通過考量可能由一個程序所執(zhí)行的快速呼叫指令的最大期望數量,以及微處理器100的架構中每個CRS212所消耗的電力(在沒有一個插入的快速返回指令下)。當快速呼叫/返回堆疊單元122執(zhí)行一呼叫指令時,快速呼叫/返回堆疊單元122將返回指令推入至多個CRS212中適當的一個,以及當快速呼叫/返回堆疊單元122執(zhí)行一個快速返回指令時,快速呼叫/返回堆疊單元122從多個CRS212中的一適當者推出一個返回地址??焖俸艚?返回堆疊單元122包括一個堆疊指針(未圖示),其用來指示推入以及推出一個返回地址至每一個CRS212的項目。每一CRS212具有一個指定的對應的呼叫/返回堆疊計數器214(Call/returnstackcounter,以下稱為CRSC214),使得快速呼叫/返回堆疊單元122包含有與CRSC214相同數目的呼叫/返回堆疊212。當對應的CRS212為目前的CRS212時,每個CRSC214維持一提取單元104分配去執(zhí)行管線的未解析條件分支指令146的計數值。換句話說,每一個CRSC214在關聯于CRS212的預測層級中,維持看見的未解析的條件分支指令146的一個計數值。于一實施例中,每一CRSC214為一個6位計數器并且可計數最多64個未解析條件分支指令。另一實施例中,CRSC214中可包含更多或更少的位。一個未解析條件分支指令146為尚未被執(zhí)行單元138解析以及尚未被引退單元144引退的條件分支指令146。亦即,執(zhí)行單元138尚未決定正確的分支方向以及目的地址,并且引退單元144尚未產生一個真值或假值于圖1的CB錯誤預測指示178上,以供條件分支指令指示是否條件分支指令被正確地或不正確地預測??焖俸艚?返回堆疊單元122包括一個預測指針(speculativ印ointer)206以及一個非預測指針(non-speculativepointer)208,均儲存一值可用來指向多個CRS212中的一個CRS212。預測指針206指向CRS212中的目前呼叫/返回堆疊,即分別相應于一個快速呼叫或返回指令,推入或推出一個返回地址的CRS212。非預測指針208指向多個CRS212中的一個CRS212,其包含關聯于在程序順序中所有未解析條件分支指令146之前的未引退呼叫指令的返回地址。換句話說,如以下圖6的步驟626所討論,非預測指針208指向CRS212,其中提取單元104于當一個條件分支指令146被解析為不正確時,提取單元104復制非預測指針208至預測指針206。快速呼叫/返回堆疊單元122也包含控制邏輯單元204,此控制邏輯單元204控制關于CRS212、CRSC214、預測指針206以及非預測指針208的讀取、寫入、遞增操作、遞減操作以及清除操作??刂七壿媶卧?04相應于接收來自圖1的指令解碼器108的呼叫指令指示124,產生一個推入的返回地址232至由預測指針206所指示的目前CRS212。推入的返回地址232的值為在呼叫指令地址之后的下一地址,當呼叫指令的地址為圖1的提取地址168時,則推入的返回地址232的值為NSIP154??刂七壿媶卧?04相應于接收來自圖1指令解碼器108的返回指令指示142,使得預測指針206所指示的目前CRS212產生圖1的推出的返回地址166至多工器114??刂七壿媶卧?04也通過讀取呼叫/返回堆疊計數器信號228讀取每一CRSC214,并通過增加/清除/減少/選取的呼叫/返回堆疊計數器信號226寫入CRSC214。控制邏輯單元204通過信號216讀取預測指針206,以依據預測指針206的值下達控制指令,并且根據上述控制指令通過信號218寫入預測指針206??刂七壿媶卧?04也通過信號224讀取非預測指針208,以依據非預測指針208的值下達控制指令,并且根據上述控制指令通過信號222寫入非預測指針208。關于控制指令以及快速呼叫/返回堆疊單元122的詳細操作請參見以下圖3至圖6的流程圖以及圖7a-圖7c的區(qū)塊圖。CRS212以及CRSC214,整體觀之,位于關聯于快速呼叫以及返回指令的微處理器100的結構狀態(tài)中,因此,當快速呼叫/返回堆疊單元122相應于提取單元104解碼一個快速呼叫或返回指令更新CRS212時,快速呼叫或返回指令將由提取單元104正確地執(zhí)行以及引退。CRS212以及CRSC214只可間接的由微處理器100指令集架構的快速呼叫以及返回指令所修改,而不可由指令集架構中其它指令所修改。因此,由于快速呼叫以及返回指令由提取單元所執(zhí)行及引退,故CRS212以及CRSC214僅可由提取單元所修改,而不可由其他單元(ex.執(zhí)行單元)所修改。此為相反于其它傳統(tǒng)微處理器,其關聯于傳統(tǒng)呼叫以及返回指令的結構狀態(tài),可被指令集架構中的呼叫以及返回指令以外的指令所修改。例如,于x86架構中,關聯于CALL以及RET指令的結構狀態(tài)為一個結構堆疊指針暫存器以及存儲器,其可由指令架構中的其它指令,例如PUSH、POP、ENTER、LEAVE以及MOV指令所修改。此外,指令集架構對包含快速呼叫以及返回指令的程序加入一個限制,使得在執(zhí)行每一個快速呼叫返回指令前,程序必須已經在先前執(zhí)行過一個對應的快速呼叫指令。如前述,CRS212并不是用來預測快速返回指令的返回地址。因此,CRS212將不會與處理器設計領域所熟知用以預測返回地址的呼叫/返回堆疊所混淆,例如名稱為“METHODANDAPPARATUSFORCORRECTINGANINTERNALCALL/RETURNSTACKINAMICR0PR0CESSORTHATSPECULATIVELYEXECUTESCALLANDRETURNINSTRUCTION,,的美國第6314514號專利所描述的內部呼叫/返回堆疊。美國第6314514號專利所描述的內部呼叫/返回堆疊不是系統(tǒng)結構狀態(tài)的一部份;相反的,于美國第6314514號專利的系統(tǒng)中是以系統(tǒng)存儲器儲存返回地址的結構狀態(tài),并且內部呼叫/返回堆疊是簡單的試圖保留一個結構狀態(tài)的快取版本于系統(tǒng)存儲器中。然而,內部呼叫/返回堆疊可能變成與在系統(tǒng)存儲器中的結構狀態(tài)不一致。因此,內部呼叫/返回堆疊所提供的返回地址為一種可能需要更正的預測,導致相當多的時脈周期損失。也就是說,盡管美國第6314514號專利的發(fā)明試圖保持與系統(tǒng)存儲器中的結構堆疊一致,因為非系統(tǒng)結構狀態(tài)的內部呼叫/返回堆疊的內容可能變成跟系統(tǒng)存儲器中的結構堆疊不一致,內部呼叫/返回堆疊所提供的預測的返回地址可能需要更正。相反地,本發(fā)明的CRS212是包含在關聯于快速呼叫以及返回指令的一設置在微處理器100中的結構狀態(tài)。值得注意的是,本發(fā)明的實施例除了考慮此處所描述的快速呼叫以及返回指令之夕卜,且微處理器100的指令以及架構可包含結構狀態(tài)有別于關聯于快速呼叫以及返回指令的結構狀態(tài)的一般呼叫以及返回指令。于一實施例中,關聯于微處理器100的指令及架構的一般呼叫以及返回指令的結構狀態(tài),為包含在系統(tǒng)存儲器中由一結構堆疊指針暫存器所指向的一個堆疊。此外,提取單元104用于分辨一般呼叫以及返回指令以及快速呼叫以及返回指令。更詳細的來說,提取單元104把一般呼叫及返回指令分配至執(zhí)行管線以執(zhí)行與引退,但提取單元104本身正確地執(zhí)行及引退快速呼叫及返回指令。于一實施例中,一般呼叫以及返回指令為x86架構CALL以及RET指令。除非文章中有另外提到,于本發(fā)明實施例中,一個呼叫或返回指令分別視為一個快速呼叫或返回指令,而非一個一般呼叫或返回指令。圖3顯示一依據本發(fā)明實施例的流程圖,顯示快速呼叫/返回堆疊單元122的初始化流程。流程開始于步驟304。于步驟304,微處理器100在開機、一個例外情況(exc印tioncondition)發(fā)生、或快速呼叫/返回堆疊單元122接收一第一個呼叫指令指示124、第一個返回指令指示142或第一個CB發(fā)送指示162時,接著執(zhí)行步驟306。于步驟306,提取單元104清除預測指針206、非預測指針208、多個CRS212以及多個CRSC214,之后流程結束于步驟306。參見圖4,顯示依據本發(fā)明實施例的圖1的提取單元104的操作的流程圖,用以處理一個快速呼叫指令。流程開始于步驟404。于步驟404,提取單元104在指令指針暫存器112提供提取地址168至指令快取106之后,從指令快取106提取一個快速呼叫指令。接著執(zhí)行步驟406。于步驟406,指令解碼器108解碼被提取的快速呼叫指令,并且產生呼叫指令指示124至快速呼叫/返回堆疊單元122以及提取地址控制器126。指令解碼器108也擷取與計算來自解碼的呼叫指令的呼叫地址164,并且提供呼叫地址164至多工器114。接著執(zhí)行步驟408。于步驟408,提取單元104通過測試呼叫/返回堆疊計數器是否包含一個非零值來判斷是否有未解決條件分支指令。若選取的CRSC214包含一個非零值,則表示有未解析條件分支指令146。若選取的CRSC214包含一個零值,則表示沒有未解析條件分支指令146。流程接著執(zhí)行至判斷步驟412。于判斷步驟412,若有未解析條件分支指令146存在時,則流程執(zhí)行判斷步驟422;否則,流程執(zhí)行步驟414。于步驟414,提取單元104將快速呼叫指令的返回地址推入至預測指針206所指的目前CRS212??焖俸艚?返回堆疊單元122中的控制邏輯單元204讀取預測指針206以決定目前CRS212,將推入的返回地址232(其為NSIP154)寫入至對應于從預測指針206所讀出的值所對應的CRS212,并且隨著更新目前CRS212的堆疊指針。于一實施例中,若返回地址的推入動作會造成目前CRS212的溢位(overflow),微處理器100將產生一個堆疊溢位例夕卜(stackoverflowexception)。此例夕卜處理例行程序(exceptionhandler)將目前CRS212的內容存到存儲器,以空出返回地址所需的空間。相反地,若于圖5的步驟514中的返回地址的推出動作會造成目前CRS212的下溢(underflow),微處理器100將產生一個堆疊下溢例外。此例外處理例行程序將從存儲器中回存(restore)目前CRS212的內容。于此實施例中,當一個效能不佳的程序產生一個相對多數的例外時,例外的產生以及例外的處理可能抵銷此處所描述的快速呼叫以及返回指令的優(yōu)點;然而,一般的程序(即以防止執(zhí)行多于CRS212的深度的快速呼叫指令)仍可以從快速呼叫以及返回指令獲得好處。流程接著執(zhí)行步驟416。于步驟416,提取地址控制器126相應于呼叫指令指示124,經由多工器選擇信號152控制多工器114以將呼叫地址164載入指令指針暫存器112,使得下一個指令將在指令快取106的呼叫地址164上被提取。流程接著執(zhí)行步驟418。于步驟418,提取單元104引退快速呼叫指令。特別來說,快速呼叫指令不會被分配至執(zhí)行管線中。流程結束于步驟418。于判斷步驟422,提取單元104判斷是否快速呼叫指令為在一條件分支指令146之后所提取的第一個呼叫或返回指令。當指令解碼器108分配一個條件分支指令146至執(zhí)行管線時,指令解碼器108產生一值為真的CB發(fā)送指示162至快速呼叫/返回堆疊單元122,以通知快速呼叫/返回堆疊單元122,并且當一個條件分支指令被引退時,引退單元144亦會通知快速呼叫/返回堆疊單元122。如此,自CB發(fā)送指示162為真后,控制邏輯單元204會持續(xù)的追蹤被分配的快速呼叫或返回指令的數目。當提取單元104判斷快速呼叫指令為在一條件分支指令146之后所提取的第一個呼叫或返回指令時,則預測層級將增加并且流程執(zhí)行至步驟424;否則,預測層級將不會被增加并且流程執(zhí)行至步驟414。于步驟424,當在目前的預測層級中沒有任何可用(available)的CRS212時,提取單元104停止提取指令并且暫停快速呼叫指令的執(zhí)行,直到有一個CRS212變成可用。當于步驟428(或于圖5的步驟528)增加預測指針206的值將會使得其值與非預測指針208的值相同時,表示在目前的預測層級中沒有任何可用的CRS212。如下面將討論的,當指令解碼器108發(fā)送一個條件分支指令146至執(zhí)行管線之后解碼第一個快速呼叫指令(或于圖5的步驟526,當一個快速返回指令被解碼)時,快速呼叫/返回堆疊單元122于步驟426配置一個新的CRS212,其使得此新配置的CRS212不可再被配置。相反地,當一條件分支指令146被解析時,一CRS212可能變成可被配置。特別地,當一條件分支指令被錯誤預測時,因為預測指針206將于以下所描述的圖6中的步驟626中被更新,一或多個CRS212可能變成可用。此外,當一條件分支指令被解析為正確地預測時,當其他條件也滿足時,因為非預測指針208將于以下所描述的圖6中的步驟624中被更新,一CRS212變成可用的。流程接著執(zhí)行至步驟428。于步驟426,提取單元104配置一個新的CRS212,復制目前CRS212的內容至新配置的CRS212中,其中包含了堆疊中的項目,并且清除新的CRSC214。特別地,于目前CRS212中的返回地址被復制至新配置的CRS212中。流程接著執(zhí)行至步驟428。于步驟428,提取單元104遞增預測指針206的值以指向新配置的CRS212。當提取單元104增加預測指針206的值時,預測層級將增加。提取單元104以于一包裹(wrapping)方式遞增預測指針206,使得CRS212以環(huán)狀隊列(circularqueue)設置。也就是說,例如當CRS212的數目為4、當預測指針206的目前值為3、當控制邏輯單元204增加預測指針206時,新的值將為零??刂七壿媶卧?04執(zhí)行一類似的包裹(wrapping)方式遞增操作,如圖6中于步驟624中的非預測指針208所示。流程接著執(zhí)行至步驟432。于步驟432,控制邏輯單元204將返回地址232(其為NSIP154)推入至目前CRS212,亦即于步驟426中新配置的CRS212。流程接著執(zhí)行至步驟416。圖5顯示依據本發(fā)明實施例的一流程圖,用以顯示圖1的提取單元104執(zhí)行一個快速返回指令的操作。流程開始于步驟504。于步驟504,提取單元104在指令指針暫存器112提供提取地址168至指令快取106之后,從指令快取106提取一個快速返回指令。流程接著執(zhí)行至步驟506。于步驟506,指令解碼器108解碼提取到的快速返回指令,并且產生返回指令指示142至快速呼叫/返回堆疊單元122以及提取地址控制器126。流程接著執(zhí)行至步驟508。于步驟508,提取單元104通過測試目前CRSC214是否為非零值,判斷是否有未解析條件分支指令146。如果選取的CRSC214包含了一個非零值,則表示有未解析分支條件指令146。如果選取的CRSC214包含了一個零值,則表示沒有未解析分支條件指令146。流程接著執(zhí)行至判斷步驟512。于判斷步驟512,當有未解析條件分支指令146存在時,則流程執(zhí)行判斷步驟522;否則,流程執(zhí)行步驟514。于步驟514,提取單元104將從預測指針206所指的目前CRS212中推出返回地址??焖俸艚?返回堆疊單元122中的控制邏輯單元204讀取預測指針206以決定目前CRS212,更新目前CRS212的堆疊指針,并且從對應于預測指針206的目前堆疊指針讀出的值的CRS212來讀出返回地址166。流程接著執(zhí)行步驟516。于步驟516,相應于返回指令指示142,提取地址控制器126經由多工器選擇信號152控制多工器114以將推出的返回地址166載入指令指針暫存器112,使得下一個指令將在指令快取106上的推出的返回地址166提取。流程接著執(zhí)行步驟518。于步驟518,提取單元104引退快速返回指令。特別來說,快速返回指令不會被分配至執(zhí)行管線中。流程結束于步驟518。于判斷步驟522,提取單元104判斷是否快速返回指令為在一條件分支指令146之后所提取的第一個呼叫或返回指令。當返回指令為自上一個CB發(fā)送指示162后的第一個被分配的快速呼叫或返回指令時,則預測層級將增加并且流程執(zhí)行至步驟524;否則,預測層級將不會被增加并且流程執(zhí)行至步驟514。于步驟524,當在目前的預測層級中沒有任何可用的CRS212時,提取單元104停止提取指令并且暫??焖俜祷刂噶畹膱?zhí)行,直到有一個CRS212變成可用。流程接著執(zhí)行步驟526。于步驟526,提取單元104配置一個新的CRS212,復制目前CRS212的內容至新配置的CRS212中,并清除新的CRSC214。特別地,于目前CRS212中的返回地址復制至新配置的CRS212中。流程接著執(zhí)行至步驟528。于步驟528,提取單元104遞增預測指針206以指向新配置的CRS212。流程接著執(zhí)行至步驟532。于步驟532,控制邏輯單元204從新配置的CRS212推出返回地址166。流程接著執(zhí)行至步驟516。圖6顯示依據本發(fā)明實施例的一流程圖,其用以顯示圖1的微處理器100執(zhí)行一個條件分支指令的操作。流程開始于步驟604。于步驟604,提取單元104在指令指針暫存器112提供提取地址168至指令快取106之后,從指令快取106提取一個條件分支指令。流程接著執(zhí)行至步驟606。于步驟606,指令解碼器108解碼提取到的條件分支指令,并且產生一個真值在CB發(fā)送指示162??焖俸艚?返回堆疊單元122對應地增加由預測指針206所指向CRS212對應的CRSC214的值,亦即,目前CRSC214。每一個CRSC214儲存其對應的CRS212的未解析條件分支指令146的數目。流程接著執(zhí)行至步驟608。于步驟608,提取單元104依據預測方向158是否會發(fā)生,發(fā)送條件分支指令至執(zhí)行管線并且從預測目的地址156或NSIP154中提取下一個指令。流程接著執(zhí)行至步驟612。于步驟612,執(zhí)行管線執(zhí)行以及引退條件分支指令146。執(zhí)行管線包含多工器132、RAT134、排程器136、執(zhí)行單元138以及引退單元144。流程接著執(zhí)行至步驟614。于步驟614,引退單元144通過CB正確目的地址176通知提取單元104條件分支指令146已引退、正確分支目的地址、以及是否通過CB錯誤預測指示178所預測的分支為錯誤地預測。流程接著執(zhí)行至判斷步驟616。于判斷步驟616,提取單元104依據CB錯誤預測指示178來判斷應該執(zhí)行哪一種操作。當CB錯誤預測指示178為偽時,則分支被正確地預測,并且流程接著執(zhí)行至步驟618。當CB錯誤預測指示178為真時,則分支被不正確地預測,并且流程接著執(zhí)行至步驟626。于步驟618,因為分支預測器118正確地預測到條件分支指令146將被引退,提取單元104減少非預測指針208所指的CRSC214的值。流程接著執(zhí)行至判斷步驟622。于判斷步驟622,提取單元104判斷是否于步驟618所減少的CRSC214包含一個零值。一個在CRSC214中的零值表示沒有關聯于非預測指針208所指的CRS212的未解析條件分支指令146。當CRSC214為零時,流程接著執(zhí)行至步驟624;否則,流程結束于步驟622。于步驟624,提取單元104遞增非預測指針208的值,使其指向在CRS212的環(huán)狀隊列中的下一個CRS212。提取單元104如前述步驟426中所描述的以一個包裹方式遞增非預測指針208的值。流程結束于步驟624。于步驟626,由于偵測到一個條件分支指令的錯誤預測發(fā)生并且必須被更正,提取單元104復制非預測指針208的值至預測指針206。復制非預測指針208的值至預測指針206的操作使得由非預測指針208所指向的CRS212變?yōu)槟壳暗腃RS212。流程接著執(zhí)行至步驟628。于步驟628,微處理器100刷新執(zhí)行管線。錯誤預測的條件分支指令是將被引退亦即表示其為微處理器100中最老的指令。刷新執(zhí)行管線將清除所有來自于微處理器100且在其程序執(zhí)行順序中比錯誤預測以及目前引退的條件分支指令146還新的指令。此行為是必要的,因為分支預測器118錯誤地預測條件分支指令,使得提取單元104從不正確的路徑提取指令。流程接著執(zhí)行至步驟632。于步驟632,因為步驟628中的管線刷新操作使得微處理器100中沒有任何未解析的條件分支指令,提取單元104清除目前CRSC214。流程接著執(zhí)行至步驟634。于步驟634,提取單元104相應于其值為真的CB錯誤預測指示178,將CB正確目的地址176載入至指令指針暫存器112,使得提取單元104從CB正確目的地址176中提取下一指令。流程結束于步驟634。本發(fā)明的圖4-圖6所描述的方法描述提取單元104如何操作,以便于未解析條件分支指令146出現時,正確地執(zhí)行快速呼叫以及返回指令。當預測層級增加時,提取單元104配置一新的CRS212,當預測層級減少時,提取單元104解除一或多個CRS212的配置。因此,適當返回地址依據執(zhí)行管線如何解析條件分支指令146,對應于提取單元104如何預測條件分支指令146而被儲存。當一正確預測到的條件分支指令引退時,快速呼叫/返回堆疊單元122將減少被非預測指針208所指向的CRSC214的值(參見圖6的步驟618)。若已經沒有任何未解析條件分支指令146在目前的預測層級中,則目前CRS212為非預測的,并且快速呼叫/返回堆疊單元122遞增非預測指針208的值,以指向在下一個CRS212上(如圖6所示的步驟624)。當一錯誤預測到的條件分支指令引退時,由于沒有任何未解析的條件分支指令146,快速呼叫/返回堆疊單元122將使得由非預測CRS212所指向CRS212變成目前CRS212,刷新管線并清除目前CRSC214(參見圖6的步驟626-632)。圖7a顯示依據本發(fā)明實施例的一表格,用以顯示圖1的微處理器100執(zhí)行一個第一程序順序的操作。第一程序順序緊接在圖3所示的初始化步驟之后。圖7a_圖7c所顯示的例子使用四個CRSC214,標示為cO至c3。堆疊深度表示在目前操作完成之后,在目前CRS212上的返回地址數目。指針的值為在目前操作完成之后,非預測指針208以及預測指針206的內容。指令指針的值為在目前操作完成之后,在指令指針暫存器112的內容。每一指令的大小為四個位組并且地址以十六進位表示。雖然指令序列極可能包括許多其他非快速呼叫/返回指令以及非條件分支指令,為了簡化說明,本實施例中只顯示主要包含快速呼叫/返回指令以及條件分支指令的例子。于圖7a的第一步驟,微處理器100被初始化。初始化操作使得微處理器100清除所有CRS212以及CRSC214,連同預測指針206以及非預測指針208。于圖7a的第二步驟,提取單元104從一個地址為0x100的提取地址168中提取一初始指令。于圖7a的第三步驟,提取單元104提取一個快速呼叫指令(從地址0x104,在第二步驟的初始指令地址之后的下一個接續(xù)IP地址(NSIP)154)。呼叫指令指定跳躍(jump)至地址0x300的指令,于地址0x300,提取單元104提取一新的指令。指令解碼器108產生呼叫指令指示124至快速呼叫/返回堆疊單元122??焖俸艚?返回堆疊單元122產生推入的返回地址232,其將值為0x108的地址值(在呼叫指令指示124之后的下一接續(xù)地址)推入至目前CRS212(CRS0),并且將目前CRS212(CRS0)的堆疊深度增加為1。于圖7a的第四步驟,提取單元104從地址0x300中提取一條件分支指令146。條件分支指令146指定一值為OxCSO的目的地址。于此實施例中,假設分支預測器118預測分支會發(fā)生。分支預測器118產生一個值為OxCSO的預測目的地址156以及一預測方向158指示為分支會發(fā)生。多工器114選擇值為OxCSO的預測目的地址156并將預測目的地址156載入至指令指針暫存器112。指令解碼器108發(fā)送條件分支指令146至執(zhí)行管線,并產生CB發(fā)送指示162至快速呼叫/返回堆疊單元122,其使得快速呼叫/返回堆疊單元122將目前CRSC214(c0)的值增加為1。于圖7a的第五步驟,提取單元104從地址0xC80提取一快速返回地址,地址0xC80其為第四步驟中的條件分支指令的預測目的地址156。指令解碼器108產生一真值在返回指令指示142至快速呼叫/返回堆疊單元122。因為此為提取單元104在一條件分支指令146之后所提取的第一個呼叫或返回指令,提取單元104配置一新的CRS212(CRS1)并復制目前CRS212(CRS0)的內容至新的CRS212(CRS1),清除新的CRSC214(d),并增加預測指針206至1,致使CRS1變成目前CRS212??焖俸艚?返回堆疊單元122從新的CRS212(CRS1)中讀取推出的返回地址166。多工器114選擇值為0x108的推出的返回地址166,并且將選取的地址載入至指令指針暫存器112。因為返回指令指示142推出在新的CRS212(CRS1)上的唯一返回地址(0x108),堆疊深度返回至零。于圖7a的第六步驟,圖7a的第四步驟中的條件分支指令146被執(zhí)行以及引退,其中分支正確地解析為不會發(fā)生。然而,因為預測分支方向(會發(fā)生)并不符合正確地解析的分支方向(不會發(fā)生),此為一分支錯誤預測。引退單元144產生一值為真的CB錯誤預測指示178以及CB正確目的地址176至提取單元104。依據圖6的步驟626所示,提取單元104將非預測指針208的值復制至預測指針206。如此,使得CRS0變?yōu)槟壳癈RS212。因此,預測指針206以及非預測指針208均具有一個0的值。接著,如圖6的步驟632所示,提取單元104清除CRSC214(c0)o最后,如圖6的步驟628以及634所示,微處理器100刷新執(zhí)行管線并且將CB正確目的地址176(0x304)載入至指令指針暫存器112。圖7b顯示依據本發(fā)明實施例的一表格,用以顯示一個第二程序順序的操作。第二程序順序由圖7a的結束之處開始執(zhí)行,因此CRS212、CRSC214、堆疊的計數值、預測指針206以及非預測指針208與圖7a的最后一個步驟相同。于圖7b的第一步驟,指令指針暫存器112產生一個地址值為0x220的程序順序提取地址168。于圖7b的第二步驟,提取單元104從一個地址值為0x220的提取地址168中提取一快速呼叫指令。呼叫指令指定一呼叫地址值為0x600,其中提取單元104于此提取一新的指令序列。指令解碼器108產生一真值在呼叫指令指示124至快速呼叫/返回堆疊單元122??焖俸艚?返回堆疊單元122產生推入返回地址(0x224),為在呼叫指令之后的下一個接續(xù)地址,至目前CRS212(CRS0)。目前CRS212的堆疊深度為1。于圖7b的第三步驟,提取單元104從值為0x600的提取地址168提取一個非條件分支指令的一般指令146。指令解碼器108發(fā)送此一般指令146至執(zhí)行管線,且提取單元104增加指令指針暫存器112的值。于圖7b的第四步驟,提取單元104從值為0x604的提取地址168提取一個快速呼叫指令。呼叫指令指定一呼叫地址值為0x700,其中提取單元104將于此提取一新的指令序列。指令解碼器108產生一真值在呼叫指令指示124至快速呼叫/返回堆疊單元122??焖俸艚?返回堆疊單元122產生推入的返回地址232至目前CRS212(CRS0),其為在呼叫指令指示124之后的下一個接續(xù)地址的返回地址,該推入的返回地址232地址值為0x608。目前CRS212的堆疊深度為2。于圖7b的第五步驟,提取單元104從值為0x700的提取地址168提取一個非條件分支指令的一般指令146。指令解碼器108發(fā)送此一般指令146至執(zhí)行管線,并且提取單元104增加指令指針暫存器112的值。于圖7b的第六步驟,提取單元104從值為0x704的提取地址168提取一個非條件分支指令的一般指令146。指令解碼器108發(fā)送此一般指令146至執(zhí)行管線,并且提取單元104增加指令指針暫存器112的值。于圖7b的第七步驟,提取單元104從地址0x708中提取到一個條件分支指令,此條件分支指令的目的地址值為OxDSO。于此實施例中,假設分支預測器118預測分支不會發(fā)生。分支預測器118產生一個預測方向158指示為分支不會發(fā)生,并且遞增電路116產生NSIP154。多工器114將值為0x70C的NSIP154載入至指令指針暫存器112。指令解碼器108發(fā)送條件分支指令146至執(zhí)行管線,并產生一真值在CB發(fā)送指示162至快速呼叫/返回堆疊單元122,其使得快速呼叫/返回堆疊單元122將目前CRSC214(cO)的值增加為1。于圖7b的第八步驟,提取單元104從地址0x70C提取一快速返回地址。指令解碼器108產生一真值在返回指令指示142至快速呼叫/返回堆疊單元122。因為此為提取單元104在一條件分支指令146之后所提取的第一個呼叫或返回指令,提取單元104復制目前CRS212(CRS0)的內容至一新的CRS212(CRS1),清除新的CRSC214(cl),并增加預測指針206至1??焖俸艚?返回堆疊單元122從新的CRS212(CRS1)中讀取推出的返回地址166,并產生一真值在返回指令指示142至提取地址控制器126。多工器114選擇推出的返回地址166,并且由圖7b的第四步驟的返回地址0x608中提取下一指令。因為圖7b的第二步驟的返回地址0x224仍在CRS212中,堆疊深度返回至1。于圖7b的第九步驟,圖7b的第七步驟中的條件分支指令146被執(zhí)行以及引退,其中分支正確地解析為不會發(fā)生。由于不會發(fā)生預測分支方向158指示符合正確地的分支解析結果(不會發(fā)生),因此此為一正確的分支預測。引退單元144產生一偽CB錯誤預測指示178以及CB正確目的地址176至提取單元104。依據圖6的步驟618所示,提取單元104減少非預測指針208所指向的CRS212對應的CRSC214的值(cO)。接著,如圖6的步驟622所示,提取單元104檢查非預測CRSC214是否為零。于此例中,非預測CRSC214為c0,其具有一個0的值。因此,如圖6的步驟624所示,提取單元104將非預測指針208增加至1。于圖7b的第十步驟,提取單元104從地址0x60C提取一快速返回地址。指令解碼器108產生一真值在返回指令指示142至快速呼叫/返回堆疊單元122。快速呼叫/返回堆疊單元122從目前CRS212(CRS1)中讀取推出的返回地址166(0x224),并產生一真值在返回指令指示142至提取地址控制器126。多工器114選擇推出的返回地址166,且提取單元104由圖7b的第二步驟的返回地址0x224中提取下一指令。因為此并非提取單元104在提取一條件分支指令146之后所提取的第一個呼叫或返回指令,預測指針206并未被影響。因為目前CRS212中已經沒有任何返回地址,堆疊深度返回至0。圖7c顯示依據本發(fā)明實施例的一表格,用以顯示一個第三程序順序的操作。第三程序順序由圖7b的結束之處開始執(zhí)行,因此CRS212、CRSC214、堆疊的計數值、預測指針206以及非預測指針208與圖7b的最后一個步驟相同。于圖7c的第一步驟,指令指針暫存器112產生一個地址值為0x540的提取地址168。于圖7c的第二步驟,提取單元104從一個地址值為0x540的提取地址168中提取一快速呼叫指令。呼叫指令指定一呼叫地址值為0x580,其中提取單元104于此提取一新的指令序列。指令解碼器108產生一真值在呼叫指令指示124至快速呼叫/返回堆疊單元122。快速呼叫/返回堆疊單元122產生地址值為0x544的推入的返回地址232至目前CRS212(CRS1)。目前CRS212的堆疊深度為1。于圖7c的第三步驟,提取單元104從地址0x580提取一個條件分支指令146。條件分支指令146指定一值為0xE60的目的地址。于此實施例中,假設分支預測器118預測分支不會發(fā)生。分支預測器118產生一個預測方向158指示為分支不會發(fā)生,并且遞增電路116產生NSIP154。多工器114將值為0x584的NSIP154載入至指令指針暫存器112。指令解碼器108發(fā)送條件分支指令146至執(zhí)行管線,并產生一真值在CB發(fā)送指示162至快速呼叫/返回堆疊單元122,其使得快速呼叫/返回堆疊單元122將目前CRSC214(d)的值增加為1。于圖7c的第四步驟,提取單元104從地址值為0x584的提取地址168提取一快速呼叫指令。呼叫指令指定一呼叫地址值為0x5D0,其中提取單元104將于此提取下一個指令。指令解碼器108產生呼叫指令指示124至快速呼叫/返回堆疊單元122。因為此為提取單元104在提取一條件分支指令146之后所提取的第一個呼叫或返回指令,提取單元104復制目前CRS212(CRS1)的內容至一新的CRS212(CRS2),清除新的CRSC214(c2),并增加預測指針206至2??焖俸艚?返回堆疊單元122產生地址值為0x588的返回地址至新的CRS212(CRS2),該返回地址為在呼叫指令之后的下一個接續(xù)地址。新的CRS212(CRS2)的堆疊深度為2。于圖7c的第五步驟,提取單元104從地址0x5D0提取一快速返回指令。指令解碼器108產生一返回指令指示142至快速呼叫/返回堆疊單元122??焖俸艚?返回堆疊單元122從目前CRS212(CRS2)中讀取推出的返回地址166,并產生一真值在返回指令指示142至提取地址控制器126。多工器114選擇推出的返回地址166,并且由圖7c的第四步驟的返回地址0x588中提取下一指令。因為此并非提取單元104在提取一條件分支指令146之后所提取的第一個呼叫或返回指令,預測指針206并未被影響。因為圖7c的第二步驟的返回地址0x544仍然在CRS212上,因此堆疊深度返回至1。于圖7c的第六步驟,提取單元104從地址0x588提取一快速返回地址。指令解碼器108產生一返回指令指示142至快速呼叫/返回堆疊單元122??焖俸艚?返回堆疊單元122從目前CRS212(CRS2)中讀取推出的返回地址166,并產生一真值在返回指令指示142至提取地址控制器126。多工器114選擇推出的返回地址166,并且提取單元104由圖7c的第二步驟的返回地址0x544中提取下一指令。因為此并非提取單元104在提取一條件分支指令146之后所提取的第一個呼叫或返回指令,預測指針206并未被影響。因為目前CRS212(CRS2)中已經沒有任何返回地址,堆疊深度返回至0。于圖7c的第七步驟,圖7c的第三步驟中的條件分支指令146被執(zhí)行以及引退,其中分支正確地解析為不會發(fā)生。由于不會發(fā)生預測分支方向158指示符合正確地的分支解析結果(不會發(fā)生),因此此為一正確的分支預測。引退單元144產生一偽CB錯誤預測指示178以及CB正確目的地址176至提取單元104。依據圖6的步驟618所示,提取單元104減少非預測指針208所指向的CRS212對應的CRSC214的值(cl)。接著,如圖6的步驟622所示,提取單元104檢查非預測CRSC214是否為零。于此例中,非預測CRSC214為cl,其現在具有一個0的值。因此,如圖6的步驟624所示,提取單元104將非預測指針208增加至2。于圖7c的第八步驟,微處理器100遇到一個例外情況。如圖3所示,提取單元104清除預測指針206、非預測指針208、每一CRS212以及每一CRSC214。于此時,快速呼叫/返回堆疊單元122已被初始化,并且例外情況將決定于指令指針暫存器112中的下一個提取地址168。請參見圖8,是顯示依據本發(fā)明另一實施例的一微處理器800示意圖。微處理器800類似于、以及于一些實施例中是相同于圖1的微處理器100。圖8的實施例顯示圖1的微碼單元128的詳細細節(jié)。特別地,微碼單元128包含多個詳細描述于圖1中的類似元件,例如提取單元104。特別地,微碼單元128包含一快速呼叫/返回堆疊單元822,其是類似于圖2中所示的快速呼叫/返回堆疊單元122并且其操作類似于圖3至圖7a至圖7c圖描述的步驟,以正確地執(zhí)行以及引退快速呼叫以及返回指令于混合有條件分支指令的指令串流。圖8的快速呼叫/返回堆疊單元822中對應于圖2的快速呼叫/返回堆疊單元122。圖8的提取單元104類似于圖1的提取單元104,并且雖然未圖示,圖8的微處理器800也包含一指令快取106,其是類似于圖1的指令快取106。于圖8的實施例中,微碼單元128正確地執(zhí)行以及引退包含在混合有條件分支指令的微碼順序中的快速呼叫以及返回指令,類似于圖1的提取單元104正確地執(zhí)行以及引退混合有條件分支指令的使用者程序中的快速呼叫以及返回指令。特別地,快速呼叫以及返回指令并不發(fā)送至微處理器800的執(zhí)行管線中,而是由微碼單元128正確地執(zhí)行以及引退。于圖8的實施例中,微碼單元128從一微碼ROM806中提取微碼指令,而非如圖1所示的從指令快取106中提取。儲存在微碼ROM806中的微碼指令序列可包含如同儲存于指令快取106中的使用者程序所包含的包含條件分支指令的一般指令。儲存在微碼ROM806中的微碼指令序列也可包含如同儲存于指令快取106中的使用者程序所包含的快速呼叫以及返回指令。類似于圖1的提取單元104,微碼單元128可發(fā)送包含條件分支指令的一般指令148至微處理器800的執(zhí)行管線。因此,微碼單元128如同微處理器800里的一第二提取單元,其執(zhí)行儲存在微碼ROM806中的微碼,而非儲存于指令快取106中的使用者程序。依據一實施例,不同于圖1的提取單元104,微碼單元128并不包含分支預測器(盡管實施例中考慮微碼單元128包含一分支預測器的情形)。因此,于圖6的步驟608,微碼單元128將總是從微碼ROM806的下一接續(xù)地址854中提取指令。也就是說,當微碼單元128從微碼ROM806中提取到一條件分支指令時,微碼單元128將總“預測”條件分支指令的條件分支為不會發(fā)生。一遞增電路816遞增條件分支指令的提取地址868的值,其產生下一接續(xù)IP地址(NSIP)854。提取地址控制器826產生多工器選擇信號852,以選擇來自多工器814的NSIP854。選取到的地址載入至一指令指針暫存器812,使得提取地址868為NSIP854。當一個微碼條件分支指令148送至執(zhí)行單元138時,其可被正確地解析為會發(fā)生(taken)或不會發(fā)生(nottake)。然而,不同于圖1的提取單元104,當一條件分支指令正確地解析為會發(fā)生時,于所有情況下,一條件分支指令由微碼單元128所錯誤預測。此乃因為,如前述,微碼單元128將總“預測”條件分支指令的條件分支為不會發(fā)生,并且總是從微碼ROM806的NSIP地址854中提取指令。若執(zhí)行單元138正確地解析條件分支指令為會發(fā)生,引退單元144產生一真值在CB錯誤預測指示878至微碼單元128,連同一個CB正確目的地址876,并且提取地址控制器826產生一多工器選擇信號852以致使多工器814來選擇CB正確目的地址876。當條件分支指令148被錯誤預測時,將會使得如同前述圖6的步驟626-634所示的包含刷新執(zhí)行管線的動作發(fā)生。圖9顯示依據本發(fā)明實施例的一流程圖,用以顯示圖8的微處理器800的操作,用以處理由微碼所實現的一使用者程序,其中使用者程序可包含可由一微碼單元128所提取以及執(zhí)行的快速呼叫以及返回指令,其中上述微碼是專屬(privateto)于上述微處理器。流程開始于步驟904。于步驟904,圖8中的提取單元104從指令快取106中提取一使用者程序指令。使用者程序以微處理器800的原生(native)指令集所撰寫而成,并且為一操作系統(tǒng)、應用程序或任何微處理器800從指令快取106中提取的其他程序。流程接著執(zhí)行至步驟906。于步驟906,于提取單元104中的指令解碼器108解碼使用者程序指令。流程接著執(zhí)行至步驟908。于步驟908,于提取單元104中的指令解碼器108判斷是否使用者程序指令以微碼實現。微碼單元128提取并執(zhí)行微碼指令序列以實現較復雜及/或不常被執(zhí)行的使用者程序指令。此外,微碼指令序列包含例外處理例行程序。當使用者程序指令非以微碼實現時,流程接著執(zhí)行至步驟912。當使用者程序指令以微碼實現時,流程接著執(zhí)行至步驟916。于步驟912,于提取單元104中的指令解碼器108分配使用者程序指令至執(zhí)行單元138以被正確地執(zhí)行。流程接著執(zhí)行至步驟914。于步驟914,執(zhí)行單元138正確地執(zhí)行以及引退使用者程序指令。特別地,執(zhí)行單元138通過如前述圖6所示的方式決定正確的分支方向以及正確的目的地址,以正確地執(zhí)行以及引退由微碼單元128所分配的條件分支指令。流程結束于步驟914。于步驟916,于提取單元104中的指令解碼器108轉換控制權至微碼單元128,以實現使用者程序指令。微碼單元128儲存了可實現使用者程序指令的微碼指令序列。流程接著執(zhí)行至步驟918。于步驟918,微碼單元128從微碼ROM806中提取一微碼指令。初始地,微碼單元128從提取單元104所指定的一第一微碼程序地址中提取微碼指令。當微碼單元128遇到一個指示微碼單元128控制權轉換回提取單元104的微碼指令,微碼單元128將停止微碼指令的提取。依照這種方式,微碼單元128提取并執(zhí)行一連串的微碼指令,以實現一個使用者程序指令。流程接著執(zhí)行至步驟922。于步驟922,微碼單元128中的指令解碼器808解碼從步驟918提取到的微碼指令。流程接著執(zhí)行至判斷步驟924。于步驟924,微碼單元128判斷是否提取到的微碼指令為一快速呼叫或返回指令。利用類似于圖1至圖7所示的方式,微碼單元128執(zhí)行并引退微碼單元128里的快速呼叫或返回指令,并且不傳送快速呼叫或返回指令至微處理器800的執(zhí)行單元138。當提取到的微碼指令并非一快速呼叫或返回指令時,則接著執(zhí)行至步驟926。當提取到的微碼指令為一快速呼叫或返回指令時,則接著執(zhí)行至步驟932。于步驟926,微碼單元128中的指令解碼器808傳送提取到非快速呼叫或返回指令的微碼指令至執(zhí)行單元138以被正確地執(zhí)行以及引退。在一實施例中,提取的微碼指令為一一般指令148。流程接著執(zhí)行至步驟928。于步驟928,執(zhí)行單元138正確地執(zhí)行以及引退為一般指令148的微碼指令。當一般指令148為一條件分支指令時,執(zhí)行單元138以及引退單元144如步驟914所描述的執(zhí)行以及引退條件分支指令。當一般指令148為微碼指令序列中的最后一個指令時,微碼單元128轉換控制權至提取單元104,并且流程結束于步驟928;否則,流程接著執(zhí)行至步驟918。于步驟932,微碼單元128分別如同圖4或圖5所示的方式正確地執(zhí)行以及引退快速呼叫或返回指令。微碼單元128里執(zhí)行以及引退的微碼呼叫或返回指令為快速呼叫或返回指令,因為他們不會被發(fā)送至執(zhí)行單元138且不會造成執(zhí)行管線中的延遲。當快速呼叫或返回指令為微碼指令序列中的最后一個指令時,微碼單元128轉換控制權至提取單元104,并且流程結束于步驟932;否則,流程接著執(zhí)行至步驟918。雖然圖1-圖7以及圖8-圖9的實施例分開描述,于一設計良好的實施例中,提取單元104以及微碼單元128均可執(zhí)行以及引退快速呼叫以及返回指令。雖然本發(fā)明已以較佳實施例揭露如上,然其并非用以限定本發(fā)明,本領域技術人員,在不脫離本發(fā)明的精神和范圍內,當可做些許更動與潤飾,因此本發(fā)明的保護范圍當視前述權利要求書所界定者為準。例如,軟件可致能,例如,功能、制造、模型化、模擬、描述及/或測試本發(fā)明所述的裝置以及方法。上述可通過使用一般程序語言(例如c、c++)、硬件描述語言(HDL)包括VerilogHDL、VHDL等等來實現。此類軟件可以以程序碼的型態(tài)包含于實體介質,例如任何其他機器可讀取(如計算機可讀取)儲存介質如半導體、軟盤、硬盤或光盤片(例如⑶-ROM、DVD-ROM等等),其中,當程序碼被機器,如計算機載入且執(zhí)行時,此機器變成用以實施本發(fā)明的裝置。本發(fā)明的方法與裝置也可以以程序碼型態(tài)通過一些傳送介質,如電線或電纜、光纖、或是任何傳輸型態(tài)進行傳送,其中,當程序碼被機器,如計算機接收、載入且執(zhí)行時,此機器變成用以實施本發(fā)明的裝置。當在一般用途處理器實作時,程序碼結合處理器提供一操作類似于應用特定邏輯電路的獨特裝置。本發(fā)明所述的裝置以及方法可包含于一半導體知識產權核例如一微處理器核心(嵌入于HDL),并轉換成集成電路的硬件產品。此外,本發(fā)明所述的裝置以及方法可包含具有硬件以及軟件的組合的實體實施例。因此本發(fā)明的保護范圍當視前述權利要求書所界定者為準。最后,本領域技術人員可基于本發(fā)明所揭露的概念以及特定實施例,在不脫離本發(fā)明的精神和范圍內,可做些許更動與潤飾以達到本發(fā)明的相同目的。附圖中符號的簡單說明如下100微處理器;104提取單元;106指令快??;108指令解碼器;112指令指針暫存器;114多工器;116遞增電路;118分支預測器;122快速呼叫/返回堆疊單元;124呼叫指令指示;126提取地址控制器;128微碼單元;132多工器;134暫存器別名表;136指令排程器;138執(zhí)行單元;142返回指令指示;144引退單元;146,148指令;152多工器選擇信號;154下一接續(xù)IP地址(NSIP);156預測目的地址;158預測方向;162=CB發(fā)送指示;164呼叫地址;166推出的返回地址;168提取地址;176=CB正確目的地址;178=CB錯誤預測指示;204控制邏輯單元;206預測指針;208非預測指針;212呼叫/返回堆疊單元(CRS);214:呼叫/返回堆疊計數器(CRSC);222,224,216信號;226,228呼叫/返回堆疊計數器信號;232推入的返回地址;304-306、404-432、504_532、604-634執(zhí)行步驟;800微處理器;806微碼ROM;808指令解碼器;812指令指針暫存器;814多工器;816遞增電路;822快速呼叫/返回堆疊單元;824呼叫指令指示;826提取地址控制器;842返回指令指示;852多工器選擇信號;854下一接續(xù)地址;862=CB發(fā)送指示;864呼叫地址;866推出的返回地址;868提取地址;876=CB正確目的地址;878=CB錯誤預測指示;904-932執(zhí)行步驟。權利要求一種微處理器,其特征在于,包括一指令集結構,包括一呼叫指令類型、一返回指令類型以及其他指令類型;多個執(zhí)行單元,用以正確地執(zhí)行上述其他指令類型的程序指令;一呼叫/返回堆疊,其具有以一后進先出方式設置的多個項目,其中上述呼叫/返回堆疊為上述微處理器的結構狀態(tài),其不能被上述其他指令類型的程序指令所修改,其能被上述呼叫指令類型以及上述返回指令類型的程序指令所修改;以及一提取單元,用以提取多個程序指令以及傳送上述其他指令類型的上述程序指令至上述執(zhí)行單元以被正確地執(zhí)行,并且上述提取單元用以正確地執(zhí)行上述呼叫指令類型以及上述返回指令類型的程序指令,而不傳送上述呼叫指令類型以及上述返回指令類型的上述程序指令至上述執(zhí)行單元。2.根據權利要求1所述的微處理器,其特征在于,上述提取單元將相應于上述呼叫指令類型的一返回地址推入至上述呼叫/返回堆疊中,接著在上述呼叫指令類型的上述程序指令所指定的一目的地址上提取一程序指令。3.根據權利要求1所述的微處理器,其特征在于,上述提取單元將相應于上述返回指令類型的一返回地址從上述呼叫/返回堆疊中推出,接著在上述呼叫/返回堆疊所推出的上述返回地址上提取一程序指令。4.根據權利要求1所述的微處理器,其特征在于,上述呼叫/返回堆疊能由上述提取單元所修改且不能由上述執(zhí)行單元所修改。5.根據權利要求1所述的微處理器,其特征在于,在執(zhí)行每一上述返回指令類型的指令之前,必須先執(zhí)行過上述呼叫指令類型的一對應指令。6.根據權利要求1所述的微處理器,其特征在于,上述呼叫/返回堆疊設置在上述微處理器中。7.根據權利要求1所述的微處理器,其特征在于,還包括一微碼指令集結構,包括一微碼呼叫指令類型、一微碼返回指令類型以及微碼其他指令類型;一微碼單元,耦接至上述執(zhí)行單元,用以提取上述微碼指令集結構的一微碼指令,上述微碼單元用以傳送上述微碼呼叫指令類型、上述微碼返回指令類型以及上述微碼其他指令類型的上述微碼指令以使其被正確地執(zhí)行;其中當上述指令集結構的上述程序指令為一以微碼實現的程序指令,上述提取單元轉換控制權至上述微碼單元,并且上述微碼單元用以正確地執(zhí)行上述微碼呼叫指令類型以及上述微碼返回指令類型的程序指令,而不傳送上述微碼呼叫指令以及上述微碼返回指令至上述執(zhí)行單元。8.根據權利要求1所述的微處理器,其特征在于,上述微處理器包含多個呼叫/返回堆疊,上述呼叫/返回堆疊被設置為一環(huán)形隊列,其中上述指令集結構的上述其他指令類型包含一條件分支指令類型,其中當上述提取單元在發(fā)送未被上述執(zhí)行單元所解析的上述條件分支指令類型的一程序指令之后提取到上述呼叫指令類型以及上述返回指令類型的一程序指令時,上述微處理器配置上述呼叫/返回堆疊的一新呼叫/返回堆疊,并且復制目前呼叫/返回堆疊的內容至上述新呼叫/返回堆疊,以及將上述新呼叫/返回堆疊設置為上述目前呼叫/返回堆疊。9.根據權利要求8所述的微處理器,其特征在于,當上述微處理器偵測到上述呼叫/返回堆疊中沒有任何一個能被配置時,上述提取單元暫停提取程序指令并等候直到上述呼叫/返回堆疊的一個為可用。10.一種快速執(zhí)行呼叫以及返回指令類型的程序指令的方法,其特征在于,上述方法包括下列步驟由一提取單元提取程序指令,上述程序指令包括一微處理器的一指令集結構的一呼叫指令類型、一返回指令類型以及其他指令類型;由上述提取單元傳送上述其他指令類型的上述程序指令至上述微處理器的執(zhí)行單元以被正確地執(zhí)行;以及由上述提取單元正確地執(zhí)行上述呼叫指令類型以及上述返回指令類型的程序指令,而不傳送上述呼叫指令類型以及上述返回指令類型的上述程序指令至上述執(zhí)行單元以被正確地執(zhí)行,其中上述呼叫指令類型以及上述返回指令類型的程序指令修改一呼叫/返回堆疊,上述呼叫/返回堆疊為上述微處理器的結構狀態(tài),其中上述呼叫/返回堆疊具有以一后進先出方式設置的多個項目,其中上述呼叫/返回堆疊為不能被上述其他指令類型的程序指令所修改的結構狀態(tài)。11.根據權利要求10所述的快速執(zhí)行呼叫以及返回指令類型的程序指令的方法,其特征在于,還包括將相應于一呼叫指令類型的程序指令的一返回地址推入至上述呼叫/返回堆疊中;以及在上述呼叫指令類型的上述程序指令所指定的一目的地址上提取一程序指令。12.根據權利要求10所述的快速執(zhí)行呼叫以及返回指令類型的程序指令的方法,其特征在于,還包括由上述提取單元將相應于一返回指令類型的程序指令的一返回地址從上述呼叫/返回堆疊中推出;以及在上述呼叫/返回堆疊所推出的上述返回地址上提取一程序指令。13.根據權利要求10所述的快速執(zhí)行呼叫以及返回指令類型的程序指令的方法,其特征在于,上述呼叫/返回堆疊能由上述提取單元所修改且不能由上述執(zhí)行單元所修改。14.根據權利要求10所述的快速執(zhí)行呼叫以及返回指令類型的程序指令的方法,其特征在于,在執(zhí)行每一上述返回指令類型的指令之前,上述程序必須先執(zhí)行過上述呼叫指令類型的一對應指令。15.根據權利要求10所述的快速執(zhí)行呼叫以及返回指令類型的程序指令的方法,其特征在于,上述呼叫/返回堆疊設置在上述微處理器中。16.根據權利要求10所述的快速執(zhí)行呼叫以及返回指令類型的程序指令的方法,其特征在于,由一微碼單元提取包括一微碼指令集結構的指令的一使用者程序的指令,上述微碼指令集結構包括一微碼呼叫指令類型、一微碼返回指令類型以及微碼其他指令類型;以及由上述微碼單元傳送上述微碼呼叫指令類型、上述微碼返回指令類型以及上述微碼其他指令類型的上述使用者程序的指令至上述微碼單元以使其被正確地執(zhí)行;上述指令集結構的上述程序指令為一以微碼實現的程序指令,上述提取單元轉換控制權至上述微碼單元,并且上述微碼單元用以正確地執(zhí)行上述微碼呼叫指令類型以及上述微碼返回指令類型的程序指令,而不傳送上述微碼呼叫指令類型以及上述微碼返回指令類型至上述執(zhí)行單元。17.根據權利要求10所述的快速執(zhí)行呼叫以及返回指令類型的程序指令的方法,其特征在于,上述微處理器包含多個呼叫/返回堆疊,上述呼叫/返回堆疊被設置為一環(huán)形隊列,其中上述指令集結構的上述其他指令類型包含一條件分支指令類型,上述方法還包括當上述條件分支指令類型的一程序指令未被上述執(zhí)行單元所解析時,由上述提取單元提取到上述呼叫指令類型或上述返回指令類型的一程序指令;以及相應于上述提取步驟,配置上述呼叫/返回堆疊的一新呼叫/返回堆疊;復制目前呼叫/返回堆疊的內容至上述新呼叫/返回堆疊;以及將上述新呼叫/返回堆疊設置為上述目前呼叫/返回堆疊。18.根據權利要求17所述的快速執(zhí)行呼叫以及返回指令類型的程序指令的方法,其特征在于,還包括偵測到上述呼叫/返回堆疊中沒有任何一個能被配置;以及暫停提取程序指令并等候直到上述呼叫/返回堆疊的一個為可用。全文摘要本發(fā)明提供一種微處理器以及相關指令執(zhí)行的方法,微處理器包括指令集結構,指令集結構包括呼叫指令類型、返回指令類型及其他指令類型。執(zhí)行單元用以正確地執(zhí)行其他指令類型的程序指令。呼叫/返回堆疊具有多個以后進先出方式設置的項目。呼叫/返回堆疊為微處理器的結構狀態(tài),其不可被其他指令類型的程序指令所修改,但可被呼叫及返回指令類型的程序指令所修改。微處理器包括提取單元,用以提取程序指令及傳送其他指令類型的程序指令至執(zhí)行單元以被正確地執(zhí)行。提取單元正確地執(zhí)行呼叫及返回指令類型的程序指令,而不傳送呼叫及返回指令類型的程序指令至執(zhí)行單元以被正確地執(zhí)行。本發(fā)明需更少的微處理器資源來解析及引退快速呼叫及返回指令。文檔編號G06F9/38GK101819523SQ20101012686公開日2010年9月1日申請日期2010年3月4日優(yōu)先權日2009年3月4日發(fā)明者G·葛蘭·亨利,布蘭特·比恩,泰瑞·派克斯申請人:威盛電子股份有限公司