完成其執(zhí)行而不讀取進(jìn)位標(biāo)志的循環(huán)指令的制作方法
【專利摘要】本公開涉及一種處理元件和芯片組系統(tǒng),用于完成對(duì)循環(huán)指令的執(zhí)行且不讀取進(jìn)位標(biāo)志。本公開的一個(gè)方面包括接收循環(huán)指令。該循環(huán)指令可指示源操作數(shù)和循環(huán)量。結(jié)果可存儲(chǔ)在由循環(huán)指令指示的目的操作數(shù)中。該結(jié)果可使得源操作數(shù)循環(huán)了所述循環(huán)量??梢酝瓿蓪?duì)循環(huán)指令的執(zhí)行而不讀取進(jìn)位標(biāo)志,不讀取溢出標(biāo)志,不讀取符號(hào)標(biāo)志、不讀取零標(biāo)志,并且不寫入進(jìn)位標(biāo)志、不寫入溢出標(biāo)志、不寫入符號(hào)標(biāo)志、不寫入零標(biāo)志。
【專利說(shuō)明】完成其執(zhí)行而不讀取進(jìn)位標(biāo)志的循環(huán)指令
[0001] 本申請(qǐng)是美國(guó)優(yōu)先權(quán)號(hào)為12/655, 213、中國(guó)申請(qǐng)?zhí)枮?01010623118. 1、題為"完 成其執(zhí)行而不讀取進(jìn)位標(biāo)志的循環(huán)指令"的申請(qǐng)的分案申請(qǐng)。 發(fā)明領(lǐng)域
[0002] 各種不同的實(shí)施例涉及指令、執(zhí)行所述指令的方法、執(zhí)行指令的執(zhí)行單元或包含 這類執(zhí)行單元的設(shè)備。尤其,各種不同的實(shí)施例涉及完成執(zhí)行而不讀取進(jìn)位標(biāo)志的循環(huán)指 令、執(zhí)行所述指令的方法、執(zhí)行所述指令的執(zhí)行單元或包含這類執(zhí)行單元的設(shè)備。
【背景技術(shù)】
[0003] 循環(huán)指令通常包含在指令集架構(gòu)(ISA)中。循環(huán)指令允許設(shè)備對(duì)數(shù)據(jù)進(jìn)行循環(huán)。
[0004] -種已知的循環(huán)指令是ROR指令-循環(huán)右移指令。ROR指令記載在英特爾架構(gòu)軟 件開發(fā)者手冊(cè)的第2卷"指令集說(shuō)明",序號(hào):243192, 1999年中。
[0005] 除了會(huì)引起循環(huán)之外,ROR指令還讀取進(jìn)位標(biāo)志。讀取這種算術(shù)標(biāo)志容易花費(fèi)額 外的時(shí)間。此外,對(duì)讀取進(jìn)位標(biāo)志的需要容易增加串行化,從而容易限制并行處理和/或預(yù) 測(cè)執(zhí)行。
[0006] 此外,ROR指令還會(huì)用目的操作數(shù)覆寫源操作數(shù)。一旦ROR指令執(zhí)行完成,就會(huì)破 壞源操作數(shù)。在一些場(chǎng)合下,可能需要額外的數(shù)據(jù)移動(dòng)指令或操作來(lái)保留源操作數(shù)。這些 數(shù)據(jù)移動(dòng)指令或操作容易花費(fèi)額外的時(shí)間。
[0007] 由于快速、有效處理數(shù)據(jù)的重要性,新的且不同的循環(huán)指令將是有益的。
【專利附圖】
【附圖說(shuō)明】
[0008] 通過(guò)參考以下用來(lái)闡述本發(fā)明實(shí)施例的描述和附圖,可最大程度地理解本發(fā)明。 在附圖中:
[0009] 圖1是指令處理裝置的一示例性實(shí)施例的方框圖。
[0010] 圖2是處理一循環(huán)指令實(shí)施例的方法實(shí)施例的方框流程圖。
[0011] 圖3示出了代表合適標(biāo)志寄存器一特定示例性實(shí)施例并具有進(jìn)位標(biāo)志(CF)和溢 出標(biāo)志(OF)的EFLAGS寄存器。
[0012] 圖4示出了合適的32位通用寄存器組的一個(gè)特定示例性實(shí)施例。
[0013] 圖5示出了合適的64位通用寄存器組的另一特定示例性實(shí)施例。
[0014] 圖6示出了對(duì)代表循環(huán)指令一特定示例性實(shí)施例的RORX指令的說(shuō)明。
[0015] 圖7示出了對(duì)代表循環(huán)指令一特定示例性實(shí)施例的RORX指令進(jìn)行偽代碼操作。
[0016] 圖8是合適的計(jì)算機(jī)系統(tǒng)的第一示例性實(shí)施例的方框圖。
[0017] 圖9是合適的計(jì)算機(jī)系統(tǒng)的第二示例性實(shí)施例的方框圖。
【具體實(shí)施方式】
[0018] 在下面的記述中,闡述了眾多具體細(xì)節(jié),例如指令執(zhí)行明細(xì)、數(shù)據(jù)類型、寄存器類 型、寄存器安排、處理器類型、系統(tǒng)配置,及類似物。然而應(yīng)該理解,本發(fā)明的實(shí)施例在沒(méi)有 這些特定細(xì)節(jié)的情況下也可以實(shí)施。在其它例子中,為了不使記述內(nèi)容難以理解,未詳細(xì)說(shuō) 明公知的電路、結(jié)構(gòu)和特征。
[0019] 實(shí)施例涉及具有執(zhí)行單元的指令處理裝置,其中所述執(zhí)行單元用來(lái)執(zhí)行循環(huán)指令 并完成對(duì)循環(huán)指令的執(zhí)行而不讀取進(jìn)位標(biāo)志。
[0020] 圖1是指令處理裝置100的示例性實(shí)施例的方框圖。在一個(gè)或多個(gè)實(shí)施例中,指令 處理裝置可以是通用處理器。該處理器可以是多種復(fù)雜指令集計(jì)算(CISC)處理器、多種精 簡(jiǎn)指令集計(jì)算(RISC)處理器、多種非常長(zhǎng)指令字(VLIW)處理器、前述處理器的多種混合形 式,或完全其它類型的處理器中的任何一者。在一個(gè)或多個(gè)實(shí)施例中,處理器可以是由加利 福尼亞州圣克拉拉市的英特爾公司制造的那種類型的通用處理器,盡管這不是必需的。可 從英特爾公司獲得的通用處理器的特殊示例包括但不局限于,Intel?C〇re?i7處理器至 尊版、,Intel?C〇re?i7 處理器、Intel?C〇re?i5 處理器、Intel?C〇re?2 至尊版處理 器、Intel? core?2 四核處理器、Intel?C〇re?2 雙核處理器、Intel?Pentium?處理 器,以及Intel?Celeron?處理器。
[0021] 作為替代,指令處理裝置可以是專用處理器。合適的專用處理器的代表例包括但 不局限于,網(wǎng)絡(luò)處理器、通信處理器、加密處理器、圖形處理器、協(xié)處理器、嵌入式處理器,以 及數(shù)字信號(hào)處理器(DSP),這里僅列舉出一些例子。這些處理器也可基于CISC、RISC、VLIW、 其混合形式,或完全其它類型的處理器。
[0022] 在又一些其它實(shí)施例中,指令處理裝置可以是控制器(例如,微控制器),或者能 處理指令的其它類型的邏輯電路。在又一些其它實(shí)施例中,指令處理裝置可以是指令執(zhí)行 加密電路。
[0023] 再次參見(jiàn)圖1,在使用中,指令處理裝置可接收循環(huán)指令102的一個(gè)實(shí)施例。作為 示例,可從存儲(chǔ)器或軟件接收循環(huán)指令。循環(huán)指令可代表由指令處理裝置識(shí)別的機(jī)器指令 或控制信號(hào)。指令處理裝置可具有專門或特定的電路或其它邏輯(例如,與硬件和/或固 件組合的軟件),它們可操作用于響應(yīng)循環(huán)指令和/或根據(jù)循環(huán)指令的規(guī)定,對(duì)數(shù)據(jù)執(zhí)行循 環(huán)操作,以及用于響應(yīng)機(jī)器指令或作為機(jī)器指令的結(jié)果,存儲(chǔ)循環(huán)結(jié)果。
[0024] 指令處理裝置的圖示實(shí)施例包括指令解碼器104。解碼器可接收并解碼循環(huán)指令。 解碼器可產(chǎn)生并輸出反映原始循環(huán)指令或從原始循環(huán)指令導(dǎo)出的一個(gè)或多個(gè)微操作、微代 碼入口點(diǎn)、微指令、其它指令,或者其它控制信號(hào)。解碼器可使用多種不同機(jī)構(gòu)來(lái)實(shí)現(xiàn)。合 適結(jié)構(gòu)的示例包括但不局限于,微代碼只讀存儲(chǔ)器(ROM)、查找表、硬件實(shí)現(xiàn)、可編程邏輯陣 列(PLA),以及類似物。
[0025] 解碼器不是該裝置的必備組件。在一個(gè)或多個(gè)其它實(shí)施例中,裝置可改為具有指 令仿真器、指令翻譯器、指令變形器、指令解釋器,或者其它指令轉(zhuǎn)換邏輯。多種不同類型的 指令仿真器、指令變形器、指令翻譯器,以及類似物是業(yè)內(nèi)已知的。指令變換邏輯可接收循 環(huán)指令,仿真、翻譯、變形、解釋或以其它方式變換循環(huán)指令,并輸出與原始循環(huán)指令對(duì)應(yīng)的 一個(gè)或多個(gè)指令或控制信號(hào)。指令變換邏輯可用軟件、硬件、固件或其組合來(lái)實(shí)現(xiàn)。在一些 情形下,一些或全部指令變換邏輯可與指令處理裝置的其余部分一起位于芯片外,例如位 于分離的芯片或系統(tǒng)存儲(chǔ)器中。在一些情形下,指令處理裝置可既具有解碼器又具有指令 變換邏輯。
[0026] 再次參見(jiàn)圖1,指令處理裝置包括執(zhí)行單元106。作為示例,執(zhí)行單元可包括算術(shù) 邏輯單元,或其它類型的能執(zhí)行循環(huán)操作的邏輯單元。執(zhí)行單元包括循環(huán)單元108。不同類 型的循環(huán)單元是業(yè)內(nèi)已知的,例如桶式循環(huán)器。本發(fā)明不局限于任何已知類型的循環(huán)電路 或單元。
[0027] 在圖示的實(shí)施例中,執(zhí)行單元與解碼器的輸出耦合,或以其它方式與其通信。術(shù)語(yǔ) "耦合"可表示兩個(gè)或更多個(gè)元件直接電氣接觸或連接。然而,"耦合"也可指兩個(gè)或更多個(gè) 元件彼此并不直接連接,但它們?nèi)匀槐舜藚f(xié)作或交互(例如,通過(guò)居間組件)。作為一個(gè)示 例,解碼器和執(zhí)行單元可通過(guò)居間的可選緩沖器或業(yè)內(nèi)已知的可能耦合在解碼器和執(zhí)行單 元之間的其它組件而相互耦合。作為解碼器對(duì)循環(huán)指令的解碼結(jié)果,執(zhí)行單元可接收反映 循環(huán)指令或從循環(huán)指令導(dǎo)出的一個(gè)或多個(gè)微操作、微代碼入口點(diǎn)、微指令、其它指令,或者 其它控制信號(hào)。作為替代,執(zhí)行單元可接收和執(zhí)行來(lái)自前述指令變換邏輯的指令或控制信 號(hào)。
[0028] 在一個(gè)或多個(gè)實(shí)施例中,由于指示了源操作數(shù)(SRC)和循環(huán)量的循環(huán)指令102,執(zhí) 行單元可操作用于在由循環(huán)指令指示的目的操作數(shù)(DEST)中存儲(chǔ)一結(jié)果,其中該結(jié)果使 得源操作數(shù)循環(huán)了所述循環(huán)量。在一個(gè)或多個(gè)實(shí)施例中,循環(huán)指令可以是循環(huán)右移指令,其 中循環(huán)右移指令可使數(shù)據(jù)向右循環(huán)。被循環(huán)移出最低有效位(LSB)的那些位可通過(guò)最高有 效位(MSB)轉(zhuǎn)回或繞回。作為替代,循環(huán)指令可以是循環(huán)左移指令。在循環(huán)中,數(shù)據(jù)沒(méi)有丟 失而僅僅是被循環(huán)或重置了。執(zhí)行單元可以包括可操作用于執(zhí)行從循環(huán)指令導(dǎo)出的指令或 其它控制信號(hào)并對(duì)源操作數(shù)作所述循環(huán)量的循環(huán)操作的電路或其它執(zhí)行邏輯(例如,與硬 件和/或固件組合的軟件)。
[0029] 循環(huán)指令可以隱含地指示和/或顯式地指定(例如,通過(guò)一個(gè)或多個(gè)專用字段或 位組)源操作數(shù)、目的操作數(shù),以及循環(huán)量。作為示例的操作數(shù)和循環(huán)量的合適源包括,寄 存器、存儲(chǔ)器、指令的直接數(shù),及其組合。在各種實(shí)施例中,源操作數(shù)和目的操作數(shù)可以是16 位、32位或64位操作數(shù),盡管這不是必需的。
[0030] 在一個(gè)或多個(gè)實(shí)施例中,一些或全部的源操作數(shù)和目的操作數(shù)可存儲(chǔ)在寄存器組 110的寄存器中。寄存器組可以是寄存器棧的一部分,而寄存器棧還有其它寄存器,例如狀 態(tài)寄存器、標(biāo)志寄存器,等等。寄存器可以是用來(lái)存儲(chǔ)數(shù)據(jù)的存儲(chǔ)單元(storagelocation) 或裝置。寄存器組通常與執(zhí)行單元一起實(shí)體位于芯片上。從處理器外部或從編程者的角度, 寄存器可以是可見(jiàn)的。例如,指令可以規(guī)定存儲(chǔ)在寄存器中的操作數(shù)。各種不同類型的寄 存器是適用的,只要它們能如本文所述地存儲(chǔ)和提供數(shù)據(jù)即可。這些寄存器可以或可以不 被重命名。合適寄存器的示例包括但不局限于,專用物理寄存器、使用寄存器重命名的動(dòng)態(tài) 分配的物理寄存器、專用物理寄存器和動(dòng)態(tài)分配的物理寄存器的組合,等等。作為替代,可 以將一個(gè)或多個(gè)源操作數(shù)和目的操作數(shù)存儲(chǔ)在除寄存器以外的存儲(chǔ)單元中,例如系統(tǒng)存儲(chǔ) 器中的某個(gè)單元。
[0031] 再次參見(jiàn)附圖,處理器或其它指令執(zhí)行裝置可包括多個(gè)算術(shù)標(biāo)志114。算術(shù)標(biāo)志至 少包括進(jìn)位標(biāo)志116。在一個(gè)或多個(gè)實(shí)施例中,標(biāo)志可包含在寄存器112中,例如狀態(tài)寄存 器、標(biāo)志寄存器,或者條件碼寄存器(CCR)。
[0032] 處理器和多種其它類型的邏輯器件經(jīng)常利用算術(shù)標(biāo)志。通常在寄存器中,標(biāo)志可 以包括一個(gè)或多個(gè)位。標(biāo)志不一定是寄存器中的位。標(biāo)志可以包括觸發(fā)器電路。位標(biāo)志可 存儲(chǔ)二進(jìn)制值,例如二進(jìn)制1或二進(jìn)制0。多個(gè)位可存儲(chǔ)二進(jìn)制值序列,或者代碼。這類二 進(jìn)制值或者二進(jìn)制值序列可代表標(biāo)志的不同值。標(biāo)志的這些不同值對(duì)于處理器或其它邏輯 器件可以具有賦予或明白的含義。標(biāo)志可用于各種不同的目的。在一些情形下,標(biāo)志可用 來(lái)將運(yùn)算的狀態(tài)、情形、條件或結(jié)果記錄在處理器或其它邏輯器件中。
[0033] 進(jìn)位標(biāo)志是在處理器和其它邏輯器件中常見(jiàn)的公知類型的算術(shù)標(biāo)志。進(jìn)位標(biāo)志可 用來(lái)指示算術(shù)運(yùn)算中是否存在溢出。例如,如果在前計(jì)算過(guò)程中存在溢出,則進(jìn)位標(biāo)志可具 有第一值,或者如果不存在這樣的溢出,則進(jìn)位標(biāo)志可具有第二值。進(jìn)位標(biāo)志可用來(lái)指示, 算術(shù)運(yùn)算已產(chǎn)生大小大于給定寄存器中的或者存儲(chǔ)單元所能表示的位數(shù)的結(jié)果。例如,在 一個(gè)或多個(gè)實(shí)施例中,進(jìn)位標(biāo)志可以是一個(gè)位,如果算術(shù)運(yùn)算產(chǎn)生超出結(jié)果的最高有效位 的進(jìn)位或借位,則將該位設(shè)為1,否則就將進(jìn)位標(biāo)志設(shè)為0。進(jìn)位標(biāo)志經(jīng)常用于算術(shù)運(yùn)算 中,例如加法和減法。
[0034] 在一個(gè)或多個(gè)實(shí)施例中,算術(shù)標(biāo)志也可包括溢出標(biāo)志。溢出標(biāo)志是在處理器和其 它邏輯器件中常見(jiàn)的另一種公知類型的算術(shù)標(biāo)志。溢出標(biāo)志通常是寄存器中的一個(gè)位。溢 出標(biāo)志粗略地對(duì)應(yīng)于進(jìn)位標(biāo)志的符號(hào)形式。溢出指示何時(shí)運(yùn)算中發(fā)生了算術(shù)溢出。當(dāng)最高 有效位(MSB)被置位或清零時(shí),就對(duì)溢出標(biāo)志置位。如果結(jié)果是太大的正數(shù)或者是太小的 負(fù)數(shù),可以對(duì)溢出標(biāo)志置位,以適應(yīng)目的操作數(shù)。溢出標(biāo)志可用來(lái)指示前一運(yùn)算導(dǎo)致了一帶 符號(hào)的數(shù),而其符號(hào)與產(chǎn)生它的操作數(shù)的符號(hào)不同。例如,當(dāng)兩個(gè)正數(shù)相加產(chǎn)生一負(fù)數(shù)結(jié)果 時(shí),或者當(dāng)兩個(gè)負(fù)數(shù)相加產(chǎn)生一正數(shù)結(jié)果時(shí),就可對(duì)溢出標(biāo)志置位。充分徹底地理解進(jìn)位標(biāo) 志和溢出標(biāo)志的功能和用途對(duì)于理解本文公開的實(shí)施例并非那么重要。
[0035] 在一個(gè)或多個(gè)實(shí)施例中,算術(shù)標(biāo)志也可包括一種或多種其它類型的算術(shù)標(biāo)志。有 時(shí)包含在處理器或某些其它邏輯器件中的其它算術(shù)標(biāo)志包括符號(hào)標(biāo)志、零標(biāo)志、輔助進(jìn)位 標(biāo)志或奇偶標(biāo)志,或者其組合。不是全部這些標(biāo)志都包含在所有處理器或其它邏輯器件中。 另外,對(duì)于這些不同的標(biāo)志,有時(shí)使用不同的名稱。
[0036] 在一個(gè)或多個(gè)實(shí)施例中,執(zhí)行單元可操作用于完成對(duì)循環(huán)操作的執(zhí)行而不讀取進(jìn) 位標(biāo)志。示圖中用通過(guò)箭頭的大"X"對(duì)此作概念上的表示。
[0037] 在一個(gè)或多個(gè)實(shí)施例中,執(zhí)行單元可操作用于完成對(duì)循環(huán)指令的執(zhí)行而不讀取溢 出標(biāo)志。在一個(gè)或多個(gè)實(shí)施例中,執(zhí)行單元可操作用于完成對(duì)循環(huán)指令的執(zhí)行而不寫入進(jìn) 位或溢出標(biāo)志。在一個(gè)或多個(gè)實(shí)施例中,執(zhí)行單元可操作用于完成對(duì)循環(huán)指令的執(zhí)行而不 讀取任何進(jìn)位標(biāo)志、溢出標(biāo)志、符號(hào)標(biāo)志、零標(biāo)志、輔助進(jìn)位標(biāo)志,或奇偶標(biāo)志。在一個(gè)或多 個(gè)實(shí)施例中,執(zhí)行單元可操作用于完成對(duì)循環(huán)指令的執(zhí)行,既不讀取也不寫入任何進(jìn)位標(biāo) 志、溢出標(biāo)志、符號(hào)標(biāo)志、零標(biāo)志、輔助進(jìn)位標(biāo)志,或奇偶標(biāo)志。在一個(gè)或多個(gè)實(shí)施例中,執(zhí)行 單元可操作用于完成對(duì)循環(huán)指令的執(zhí)行,既不讀取也不寫入任何算術(shù)標(biāo)志。作為替代,在一 個(gè)或多個(gè)實(shí)施例中,執(zhí)行單元可操作用于寫入全部算術(shù)標(biāo)志而不讀取任何算術(shù)標(biāo)志。
[0038] 為了避免使記述內(nèi)容難以理解,示出和描述了相對(duì)簡(jiǎn)單的指令處理裝置。應(yīng)該理 解,其它實(shí)施例可以具有多個(gè)執(zhí)行單元。例如,指令處理裝置可以包括多個(gè)不同類型的執(zhí)行 單元,例如邏輯單元、算術(shù)邏輯單元(ALU)、算術(shù)單元、整數(shù)單元,等等。這些單元中的至少 一個(gè)單元可以對(duì)本文公開的循環(huán)指令的實(shí)施例作出響應(yīng)。又一些其它的實(shí)施例可以具有多 核、邏輯處理器,或者執(zhí)行引擎。如本文公開的可操作用于執(zhí)行循環(huán)指令的執(zhí)行單元可以包 含在至少一個(gè)、至少兩個(gè)、大多數(shù)或全部?jī)?nèi)核、邏輯處理器或執(zhí)行引擎內(nèi)。
[0039] 指令處理裝置也可以可選地包括一個(gè)或多個(gè)其它公知的組件。例如,其它實(shí)施例 可以可選擇地包括取指令邏輯、預(yù)解碼邏輯、調(diào)度邏輯、重新排序緩沖器、分支預(yù)測(cè)邏輯、退 移邏輯、寄存器重命名邏輯,及類似物,或者其某些組合。這些組件可以按傳統(tǒng)方式實(shí)現(xiàn), 或者在實(shí)現(xiàn)時(shí),基于本文公開進(jìn)行本領(lǐng)域技術(shù)人員顯而易見(jiàn)的微小改動(dòng)。不需要為了理解 本文實(shí)施例而對(duì)這些組件作進(jìn)一步的說(shuō)明,盡管該進(jìn)一步說(shuō)明在必要時(shí)很容易從公開文獻(xiàn) 中獲得。確實(shí)存在業(yè)內(nèi)已知的這些組件的許多不同的組合和配置。本發(fā)明的范圍不局限于 任何已知的這類組合或配置。實(shí)施例可以采用這些附加組件或不采用這些附加組件來(lái)實(shí) 現(xiàn)。
[0040] 圖2是處理一循環(huán)指令實(shí)施例的方法實(shí)施例220的方框流程圖。在各種實(shí)施例 中,該方法可通過(guò)通用處理器、專用處理器(例如,圖形處理器或數(shù)字信號(hào)處理器)、硬件加 速器(例如,加密加速器),或者另一類型的邏輯器件或指令處理裝置來(lái)實(shí)現(xiàn)。
[0041] 可在方框221接收循環(huán)指令。該循環(huán)指令可指示源操作數(shù)和循環(huán)量。
[0042] 可在方框222將結(jié)果存儲(chǔ)在由循環(huán)指令指示的目的操作數(shù)中。所述結(jié)果可使得源 操作數(shù)循環(huán)了所述循環(huán)量。
[0043] 對(duì)循環(huán)指令的執(zhí)行可在方框223完成。在一個(gè)或多個(gè)實(shí)施例中,可完成對(duì)循環(huán)指 令的執(zhí)行而不讀取進(jìn)位標(biāo)志。
[0044] 在一個(gè)或多個(gè)實(shí)施例中,執(zhí)行單元可操作用于完成對(duì)循環(huán)指令的執(zhí)行而不讀取溢 出標(biāo)志。在一個(gè)或多個(gè)實(shí)施例中,執(zhí)行單元可操作用于完成對(duì)循環(huán)指令的執(zhí)行而不寫入進(jìn) 位或溢出標(biāo)志。在一個(gè)或多個(gè)實(shí)施例中,執(zhí)行單元可操作用于完成對(duì)循環(huán)指令的執(zhí)行而不 讀取任何進(jìn)位標(biāo)志、溢出標(biāo)志、符號(hào)標(biāo)志、零標(biāo)志、輔助進(jìn)位標(biāo)志,或奇偶標(biāo)志。在一個(gè)或多 個(gè)實(shí)施例中,執(zhí)行單元可操作用于完成對(duì)循環(huán)指令的執(zhí)行,既不讀取也不寫入任何進(jìn)位標(biāo) 志、溢出標(biāo)志、符號(hào)標(biāo)志、零標(biāo)志、輔助進(jìn)位標(biāo)志,或奇偶標(biāo)志。在一個(gè)或多個(gè)實(shí)施例中,執(zhí)行 單元可完成對(duì)循環(huán)指令的執(zhí)行,既不讀取也不寫入任何算術(shù)標(biāo)志。作為替代,在一個(gè)或多個(gè) 實(shí)施例中,執(zhí)行單元可操作用于寫入全部算術(shù)標(biāo)志而不讀取任何算術(shù)標(biāo)志。
[0045] 完成對(duì)循環(huán)指令的執(zhí)行而不讀取進(jìn)位標(biāo)志,或者在某些情形下不讀取進(jìn)位標(biāo)志或 溢出標(biāo)志,或者在某些情形下不讀取任何算術(shù)標(biāo)志,可以有助于增加循環(huán)指令的執(zhí)行速度。 讀取進(jìn)位標(biāo)志要花費(fèi)時(shí)間。此外,即使讀取,進(jìn)位標(biāo)志和其它算術(shù)標(biāo)志也經(jīng)常不被循環(huán)指令 所使用。從而,由于讀取這些標(biāo)志要花費(fèi)時(shí)間,并且由于這些標(biāo)志常常不被使用,因此可以 通過(guò)不讀取進(jìn)位標(biāo)志和/或溢出標(biāo)志以及一個(gè)或多個(gè)其它標(biāo)志,來(lái)提高循環(huán)指令的執(zhí)行速 度。
[0046] 另外,完成對(duì)循環(huán)指令的執(zhí)行而不讀取進(jìn)位標(biāo)志,或者在某些情形下不讀取進(jìn)位 標(biāo)志或溢出標(biāo)志,或者在某些情形下不讀取任何算術(shù)標(biāo)志,可以有助于減少由于標(biāo)志依存 性而引起的串行化。減少這種串行化允許更好地開發(fā)并行處理、無(wú)序執(zhí)行和/或預(yù)測(cè)執(zhí)行, 這些可以有助于提高許多算法的速度。
[0047] 循環(huán)指令經(jīng)常與修改標(biāo)志的其它指令一起包含在算法中。例如,循環(huán)指令經(jīng)常與 邏輯指令一起包含在算法中,例如AND指令、XOR指令,及類似物。這類邏輯指令通常更新標(biāo) 志。公知的ROR指令可以讀取標(biāo)志,并因此對(duì)標(biāo)志具有依存性。結(jié)果,ROR指令可能需要在 它能夠執(zhí)行或至少完全執(zhí)行之前,等待完成對(duì)在前邏輯指令的執(zhí)行。這容易因標(biāo)志依存性 而導(dǎo)致串行化。注意,這不是由數(shù)據(jù)依存性引起的,而是因標(biāo)志依存性引起的。有些算法, 例如散列算法和加密算法,往往使用相對(duì)大比例的邏輯指令和循環(huán)指令兩者。因此,這類算 法中依賴于標(biāo)志的串行化的量可能相對(duì)較高。
[0048] 這種串行化往往會(huì)妨礙并行處理、無(wú)序執(zhí)行和/或預(yù)測(cè)執(zhí)行。例如,即使可能不存 在數(shù)據(jù)依存性,無(wú)序機(jī)仍可能無(wú)法在邏輯指令之前執(zhí)行公知的ROR指令。這往往會(huì)減慢對(duì) 這些算法的執(zhí)行。
[0049] 然而如前所述,在一個(gè)或多個(gè)實(shí)施例中,循環(huán)指令可完成而不讀取進(jìn)位標(biāo)志,或者 在一些情形下不讀取進(jìn)位標(biāo)志或溢出標(biāo)志,或者在一些情形下不讀取任何算術(shù)標(biāo)志。這可 以有助于減少對(duì)一個(gè)或多個(gè)標(biāo)志的依存性,在循環(huán)指令與修改標(biāo)志的邏輯或其它指令一起 使用的情形下,這樣做可以有助于減少算法的串行化。結(jié)果,可以在并行處理、無(wú)序執(zhí)行和/ 或預(yù)測(cè)執(zhí)行等方面獲得更大的優(yōu)勢(shì)。這容易提高散列、加密和其它算法的速度和/或效率。
[0050] 在一個(gè)或多個(gè)實(shí)施例中,循環(huán)指令可以具有進(jìn)一步幫助提高各種算法的執(zhí)行速度 的操作數(shù)定義。記住,公知的ROR指令使源操作數(shù)被目的操作數(shù)覆寫。結(jié)果,除非移動(dòng)(例 如,通過(guò)MOV或其它移動(dòng)指令)源操作數(shù)或以其它方式保留源操作數(shù),否則對(duì)ROR指令的執(zhí) 行將使得源操作數(shù)被目的操作數(shù)覆寫。換句話說(shuō),源操作數(shù)將被破壞。然而,在一些算法中, 可能在執(zhí)行循環(huán)指令之后需要源操作數(shù)。因此,這些算法常常包括額外的MOV或其它移動(dòng) 指令,或者其它類型的用于保留源操作數(shù)的指令。在極端情形下,這些額外指令的數(shù)目可以 相當(dāng)大。這些額外的指令需要被譯碼、可能被緩沖、并被執(zhí)行。
[0051] 在一個(gè)或多個(gè)實(shí)施例中,循環(huán)指令可顯式地指定源操作數(shù)并顯式地指定目的操作 數(shù)。較為有利地,這可以允許為源操作數(shù)和目的操作數(shù)顯式地指定不同的寄存器或其它存 儲(chǔ)單元,以防止源操作數(shù)被目的操作數(shù)覆寫。結(jié)果,在循環(huán)指令完成時(shí),源操作數(shù)和目的操 作數(shù)兩者均可用。這可以具有若干可能的優(yōu)勢(shì)。首先,這可以有助于避免數(shù)據(jù)移動(dòng)指令或 者用于保留源操作數(shù)的其它類型指令。較為有利地,這可以有助于減少需要被譯碼、可能被 緩沖、并被執(zhí)行的指令的數(shù)目。其次,如果擬使用解碼流緩沖器(DSB)或類似物,則減少指 令數(shù)目可以有助于將解碼指令環(huán)裝入DSB內(nèi)。較為有利地,這可以有助于通過(guò)避免限速解 碼操作而增加處理速度。
[0052] 容易大量使用循環(huán)指令的兩個(gè)領(lǐng)域是散列和加密。在過(guò)去的幾年,對(duì)散列和加密 兩者的使用已有顯著的增加。越來(lái)越多的因特網(wǎng)和其它網(wǎng)絡(luò)交易正以加密方式得到保護(hù)。 結(jié)果,專用加密加速器、嵌入式加密處理器、支持許多連接的服務(wù)器及類似物會(huì)非常頻繁地 執(zhí)行這些加密算法。因此,這些設(shè)備的性能可能受到它們能夠執(zhí)行這些加密算法的速度和/ 或效率的重大影響。盡管可能不那么頻繁,但臺(tái)式計(jì)算機(jī)和膝上計(jì)算機(jī)以及其它設(shè)備也會(huì) 被要求執(zhí)行這類加密算法。另外,循環(huán)指令在某些散列和加密算法中的比例往往相對(duì)較高。 例如,在一些散列和加密算法中,大約10%或更多的指令會(huì)是循環(huán)指令。結(jié)果,提高循環(huán)指 令的執(zhí)行速度會(huì)對(duì)算法執(zhí)行的總速度產(chǎn)生重大影響。當(dāng)然,除散列和加密用途之外,循環(huán)指 令還具有很多各種其它用途(例如,數(shù)據(jù)壓縮、解壓縮、數(shù)據(jù)擾碼、解擾碼,等等)。
[0053] 現(xiàn)在討論循環(huán)量,循環(huán)指令的各個(gè)不同的實(shí)施例可以按各種不同方式指定循環(huán) 量。在一個(gè)或多個(gè)實(shí)施例中,循環(huán)指令可通過(guò)直接數(shù)(immediate)指示或指定循環(huán)量。直 接數(shù)可代表被直接編碼而作為循環(huán)指令的一部分或包含在循環(huán)指令中的操作數(shù)。直接字節(jié) 值經(jīng)常由i_8表示。
[0054] 作為另一種選擇,在一個(gè)或多個(gè)實(shí)施例中,循環(huán)指令可隱含地指示具有循環(huán)量的 第二源操作數(shù)。例如,循環(huán)量可存儲(chǔ)在隱含寄存器或其它存儲(chǔ)單元中。在一個(gè)特定示例性 實(shí)施例中,隱含寄存器可以是被稱為CL的通用寄存器。
[0055] 作為又一種選擇,在一個(gè)或多個(gè)實(shí)施例中,循環(huán)指令可顯式地指定第二源操作數(shù), 例如具有循環(huán)量的寄存器。例如,在一個(gè)或多個(gè)實(shí)施例中,循環(huán)指令可選擇地使用VEX編 碼。VEX編碼可允許指令顯式地指定一額外的操作數(shù)。作為一個(gè)特例,循環(huán)指令可指定操作 DEST=ROTATE(SRC/SRC2)。如有需要,可在Intel? 64和IA-32架構(gòu)軟件開發(fā)者手冊(cè)第 2A卷"指令集說(shuō)明",A-M,序號(hào):253666-032US,2009年9月中獲得對(duì)VEX的進(jìn)一步描述。
[0056] 圖3示出代表合適標(biāo)志寄存器的一特定實(shí)施例的EFLAGS寄存器330。該特殊寄存 器和這些特殊標(biāo)志當(dāng)然不是必需的。
[0057]EFLAGS寄存器是包括一組狀態(tài)標(biāo)志、控制標(biāo)志和一組系統(tǒng)標(biāo)志的32位寄存器。狀 態(tài)標(biāo)志包括進(jìn)位標(biāo)志(CF,位0)、奇偶標(biāo)志(PF,位2)、輔助進(jìn)位標(biāo)志(AF,位4)、零標(biāo)志(ZF, 位6)、符號(hào)標(biāo)志(SF,位7)以及溢出標(biāo)志(OF,位11)。
[0058]系統(tǒng)標(biāo)志包括陷阱標(biāo)志(TF,位8)、中斷使能標(biāo)志(IF,位9)、I/O特權(quán)級(jí)(IOPL, 位12-13)、嵌套任務(wù)(NT,位14)、恢復(fù)標(biāo)志(RF,位16)、虛擬-8086模式(VM,位17)、對(duì)齊校 驗(yàn)(AC,位18)、虛擬中斷標(biāo)志(VIF,位19)、虛擬中斷待定(VIP,位20)以及ID標(biāo)志(ID,位 21)??刂茦?biāo)志包括方向標(biāo)志(DF,位10)。EFLAGS的位22-31被預(yù)留。
[0059]EFLAGS寄存器是早先16位FLAGS寄存器的后繼者。另外,64位模式處理器中的 EFLAGS寄存器已通過(guò)RFLAGS寄存器而后繼并擴(kuò)展至64位。RFLAGS的低32位與EFLAGS 的相同。在FLAGS、EFLAGS和RFLAGS寄存器的每一個(gè)中,進(jìn)位標(biāo)志(CF)是位0而溢出標(biāo)志 (OF)是位11。對(duì)EFLAGS/RFLAGS寄存器以及進(jìn)位標(biāo)志的額外說(shuō)明,需要時(shí),可從Intel? 64andIA-32架構(gòu)軟件開發(fā)者手冊(cè)第1卷"基礎(chǔ)架構(gòu)",序號(hào):253665-032US,2009年9月中 獲得。
[0060] 在一個(gè)或多個(gè)實(shí)施例中,循環(huán)指令可指示通用寄存器組中的源操作數(shù)和/或目的 操作數(shù)。為了進(jìn)一步說(shuō)明某些概念,將闡述可在各種X86架構(gòu)處理器中用到的合適通用寄 存器的示例性實(shí)施例,但是這些特定寄存器當(dāng)然不是必需的。
[0061] 圖4示出了合適的32位通用寄存器432的一個(gè)特定示例性實(shí)施例。32位寄存器 組包括八個(gè)32位或雙字通用寄存器。這些寄存器被表示為EAX、EBX、ECX、EDX、ESI、EDI、 EBP和ESP。這些32位寄存器也可按16位和8位模式尋址。EAX、EBX、ECX和EDX寄存器 的低16位分別被表示為AX、BX、CX和DX。例如,具有16位的字無(wú)符號(hào)整數(shù)可分別存儲(chǔ)在 寄存器BX、CX和DX中。具有32位的雙字無(wú)符號(hào)整數(shù)可存儲(chǔ)在寄存器EAX、EBX、ECX、EDX、 ESI、EDI、EBP、ESP、R8D-R15D中。
[0062] 圖5示出合適的64位通用寄存器組534的另一特定示例性實(shí)施例。該64位寄 存器組包括16個(gè)64位或四字通用寄存器。這些寄存器被表示為RAX、RBX、RCX、RDX、RSI、 RDI、RBP、RSP、R8、R9、R10、R11、R12、R13、R14 和R15。這些寄存器對(duì) 32 位操作數(shù)工作在 32 位模式,而對(duì)64位操作數(shù)工作在64位模式。RAX、RBX、RCX、RDX、RSI、RDI、RBP和RSP寄存 器的低32位分別對(duì)應(yīng)于EAX、EBX、ECX、EDX、ESI、EDI、EBP和ESP寄存器。寄存器R8-R15 的低32位也可按32位模式尋址,并用R8D-R1?表示。作為示例,具有64位的四字無(wú)符號(hào) 整數(shù)可存儲(chǔ)在寄存器RAX、RBX、RCX、RDX、RSI、RDI、RBP、RSP或R8-R15 中。
[0063] 如有需要,可在Intel? 64和IA-32架構(gòu)軟件開發(fā)者手冊(cè)第I卷"基礎(chǔ)架構(gòu)",序 號(hào):253665-032US,2009年9月中獲得對(duì)通用寄存器的額外描述。這些特定寄存器只是示 例性的,而非必需的。
[0064] 根據(jù)一個(gè)特定示例性實(shí)施例,循環(huán)指令是不影響標(biāo)志的循環(huán)右移邏輯(RORX)指 令。RORX指令是雙操作數(shù)指令,其中兩個(gè)操作數(shù)都是顯式操作數(shù)。表1示出了RORX指令的 指令操作數(shù)編碼。
[0065] 表I.RORX操作數(shù)編碼
[0066]
【權(quán)利要求】
1. 一種處理元件,包括: 高速緩存; 執(zhí)行單元,耦合到所述高速緩存,用于響應(yīng)于一循環(huán)右移指令,完成所述循環(huán)右移指令 的執(zhí)行,并將結(jié)果存儲(chǔ)在由所述循環(huán)右移指令指示的目的操作數(shù)中, 其中,所述循環(huán)右移指令還指示源操作數(shù)和循環(huán)量;以及 所述執(zhí)行單元完成對(duì)所述循環(huán)右移指令的執(zhí)行而不讀取進(jìn)位標(biāo)志,不讀取溢出標(biāo)志, 不讀取符號(hào)標(biāo)志、不讀取零標(biāo)志,并且不寫入進(jìn)位標(biāo)志、不寫入溢出標(biāo)志、不寫入符號(hào)標(biāo)志、 不寫入零標(biāo)志。
2. 如權(quán)利要求1所述的處理元件,其特征在于,所述處理元件能工作在32位模式或64 位模式中。
3. 如權(quán)利要求2所述的處理元件,其特征在于,所述循環(huán)量由直接數(shù)來(lái)指示,或被存儲(chǔ) 在寄存器中。
4. 如權(quán)利要求3所述的處理元件,其特征在于,所述高速緩存還包括一個(gè)或多個(gè)中級(jí) 高速緩存。
5. 如權(quán)利要求2-4中任意一項(xiàng)所述的處理元件,其特征在于,所述源操作數(shù)被顯式地 指定在所述循環(huán)右移指令中,并且指示源寄存器可被用在32位模式或64位模式中。
6. 如權(quán)利要求2-4中任意一項(xiàng)所述的處理元件,其特征在于,所述目的操作數(shù)被顯式 地指定在所述循環(huán)右移指令中,并且指示目的寄存器可被用在32位模式或64位模式中。
7. -種64位的芯片組系統(tǒng),包括: 多核處理器,包括兩個(gè)以上的核,其中每個(gè)核包括: 至少一個(gè)處理元件,包括: 高速緩存; 執(zhí)行單元,耦合到所述高速緩存,用于響應(yīng)于一循環(huán)右移指令,完成所述循環(huán)右移指令 的執(zhí)行,并將結(jié)果存儲(chǔ)在由所述循環(huán)右移指令指示的目的操作數(shù)中, 其中,所述循環(huán)右移指令還指示源操作數(shù)和循環(huán)量;以及 所述執(zhí)行單元完成對(duì)所述循環(huán)右移指令的執(zhí)行而不讀取進(jìn)位標(biāo)志,不讀取溢出標(biāo)志, 不讀取符號(hào)標(biāo)志、不讀取零標(biāo)志,并且不寫入進(jìn)位標(biāo)志、不寫入溢出標(biāo)志、不寫入符號(hào)標(biāo)志、 不寫入零標(biāo)志。
8. 如權(quán)利要求7所述的芯片組系統(tǒng),其特征在于,所述多核處理器包括四個(gè)核。
9. 如權(quán)利要求7所述的芯片組系統(tǒng),其特征在于,所述多核處理器包括八個(gè)核。
10. 如權(quán)利要求7所述的芯片組系統(tǒng),其特征在于,所述循環(huán)量由直接數(shù)來(lái)指示,或被 存儲(chǔ)在寄存器中。
11. 如權(quán)利要求7所述的芯片組系統(tǒng),其特征在于,所述高速緩存還包括一個(gè)或多個(gè)中 級(jí)高速緩存。
12. 如權(quán)利要求7-11中任意一項(xiàng)所述的芯片組系統(tǒng),其特征在于,所述源操作數(shù)被顯 式地指定在所述循環(huán)右移指令中,并且指示源寄存器具有64位的大小。
13. 如權(quán)利要求7-11中任意一項(xiàng)所述的芯片組系統(tǒng)件,其特征在于,所述目的操作數(shù) 被顯式地指定在所述循環(huán)右移指令中,并且指示目的寄存器具有64位的大小。
【文檔編號(hào)】G06F9/30GK104484154SQ201410680656
【公開日】2015年4月1日 申請(qǐng)日期:2010年12月24日 優(yōu)先權(quán)日:2009年12月26日
【發(fā)明者】V·戈帕爾, J·D·吉爾福德, G·M·沃爾里齊, W·K·費(fèi)格哈利, E·奧茲圖科, M·G·迪克森, S·P·米萊克斯, B·L·托爾, M·洛克西金, M·C·戴維斯, A·J·法希 申請(qǐng)人:英特爾公司