專利名稱:適用于微處理器中執(zhí)行位掃描指令的硬件裝置與方法
技術(shù)領(lǐng)域:
本發(fā)明涉及微處理器的技術(shù)領(lǐng)域,尤其涉及在微處理器中執(zhí)行位掃描指令的技 術(shù)。
背景技術(shù):
x86指令集架構(gòu)包括了前行位掃描(Bit Scan Forward,BSF)以及逆行位掃描(Bit Scan Reverse, BSR)指令,或通稱為位掃描指令。在傳統(tǒng)的微處理器中以微碼實際操作上述 位掃描指令,也就是說,當微處理器的指令轉(zhuǎn)譯器遇到(encounter)上述位掃描指令時,指 令轉(zhuǎn)譯器會將控制權(quán)轉(zhuǎn)移至存儲于微碼只讀存儲器中的微碼例程(microcode rountine), 而微碼例程卻需要耗用許多時鐘周期去執(zhí)行位掃描指令。因此,亟需有一種較為快速的方 式去執(zhí)行位掃描指令。
發(fā)明內(nèi)容
本發(fā)明的一實施例提供了一種適用于一微處理器中執(zhí)行一位掃描指令的硬件裝 置,其中上述位掃描指令指定(specify)包括N個字節(jié)的一輸入運算元,且上述N至少為2。 該硬件裝置包括了一第一編碼器,用以針對上述輸入運算元中的每個字節(jié)進行前行位掃描 編碼(forward bit scan encode)以產(chǎn)生N個第一位向量。該硬件裝置還包括一零值檢測 器,用以針對上述輸入運算元中的每個字節(jié)進行零值檢測(zero-detect)以產(chǎn)生一第二位 向量。該硬件裝置還包括一第二編碼器,用以針對上述第二位向量進行前行位掃描編碼以 產(chǎn)生一第三位向量。該硬件裝置還包括一第一 N對1多工器,由上述第三位向量控制以選 擇上述N個第一位向量中的一個為輸出的一第四位向量。該硬件裝置將上述第三位向量與 上述第四位向量連接為一第五位向量,上述第五位向量指示(indicate)上述輸入運算元 中最低有效被設(shè)位(least significant set bit)的位索引值。在一實施例中,該硬件裝 置處理了前行與逆行位掃描指令。一第三編碼器,用以針對上述輸入運算元中的每個字節(jié) 的一位逆向結(jié)果(bit-reversed version)進行前行位掃描編碼以產(chǎn)生N個第六位向量。一 第四編碼器,用以針對上述第二位向量的一位逆向結(jié)果進行前行位掃描編碼以產(chǎn)生一第七 位向量。一第二 N對1多工器,由上述第七位向量控制以選擇上述N個第六位向量中的一 個為輸出的一第八位向量。一選擇邏輯單元,用以接收指示上述位掃描指令為一前行或逆 行位掃描指令的一輸入,其中上述選擇邏輯單元于上述輸入指示上述位掃描指令為一前行 位掃描指令時選擇由上述第三位向量與上述第四位向量連接成為上述第五位向量,以及在 上述輸入指示上述位掃描指令為一逆行位掃描指令時選擇由上述第七位向量與上述第八 位向量連接成為上述第五位向量的一反相結(jié)果(inverted version) 0本發(fā)明的另一實施例提供了一種適用于一微處理器中執(zhí)行一位掃描指令的方法, 其中上述位掃描指令指定包括N個字節(jié)的一輸入運算元,上述N至少為2,該方法包括了針 對上述輸入運算元中的每個字節(jié)進行前行位掃描編碼以產(chǎn)生N個第一位向量。該方法還包 括針對上述輸入運算元中的每個字節(jié)進行零值檢測以產(chǎn)生一第二位向量。該方法還包括用以針對上述第二位向量進行前行位掃描編碼以產(chǎn)生一第三位向量。該方法還包括根據(jù)上述 第三位向量選擇上述N個第一位向量中的一個為輸出的一第四位向量。該方法還包括將上 述第三位向量與上述第四位向量連接為一第五位向量,其中上述第五位向量指示上述輸入 運算元中最低有效被設(shè)位的位索引值。
圖1根據(jù)本發(fā)明所述的微處理器的方塊圖。圖2A與圖2B所示的細部方塊圖描述本發(fā)明圖1中用以執(zhí)行實際操作位掃描指令 (前行/逆行位掃描指令)的微指令的執(zhí)行單元。圖3根據(jù)本發(fā)明另一實施例所述如圖1中用以執(zhí)行實際操作位掃描指令(前行/ 逆行位掃描指令)的第二微指令的執(zhí)行單元細部方塊圖。主要元件符號說明100 微處理器;102 指令快??;104 指令轉(zhuǎn)譯器;106 寄存器別名表;108 微指令;112 保留站;114 執(zhí)行單元;118 重排緩沖器;122 通用寄存器集合;202 來源運算元;204 運算元大??;206 零值遮罩邏輯單元;208、222、225、272、274、276、299、333、325 結(jié)果;212、216、218、252、256、262、264、266 邏輯單元;211、213、215 3 位數(shù)值;214,258 位逆向結(jié)果;217、222、224、223、233、242 輸出;221、231、238、321、331 2 對 1 多工器;226,228 8 對 1 多工器;227、327、347 反相器;229、337、349 反相結(jié)果;232、234、329 輸入;235 補零位;236、336 控制輸入;282 A寄存器;284 B寄存器;286 C寄存器;
288 D寄存器。
具體實施例方式本發(fā)明的實施例所述的微處理器以硬件、而非以傳統(tǒng)的微碼方式執(zhí)行位掃描指 令,從而有效地降低執(zhí)行每個位掃描指令時所需耗用的時鐘周期數(shù)。圖1根據(jù)本發(fā)明一實施例所述的微處理器的方塊圖。在此實施例中,微處理器100 為一非循序(out-of-order)執(zhí)行微處理器,包括了指令快取102以存儲包括位掃描指令在 內(nèi)的程序指令。微處理器100包括指令轉(zhuǎn)譯器104以將宏指令轉(zhuǎn)譯為多個微指令108,例 如實際操作位掃描指令的微指令。在一實施例中,指令轉(zhuǎn)譯器104會響應遇到一位掃描指 令而產(chǎn)生兩個微指令108,且每個微指令108的執(zhí)行在各自的執(zhí)行單元114中耗用一個時 鐘周期。然而,在另一實施例中,指令轉(zhuǎn)譯器104會響應遇到一位掃描指令而產(chǎn)生單一微指 令108,特別是微處理器100的時鐘周期時間能允許如圖2A與第2B或圖3所示的邏輯電路 (將于后續(xù)段落進一步說明)在單一時鐘周期內(nèi)產(chǎn)生一結(jié)果。在一實施例中,指令轉(zhuǎn)譯器 104為響應解碼一位掃描指令,而用以將上述位掃描指令直接轉(zhuǎn)譯為一或多個微指令,而非 將上述位掃描指令儲放至(trapping to) 一微碼存儲器。寄存器別名表(Register Alias Table, RAT) 106產(chǎn)生微指令108的相依性,特別 是在指令轉(zhuǎn)譯器104會響應遇到一位掃描指令而產(chǎn)生兩個微指令108的實施例中,寄存器 別名表106會根據(jù)第一微指令的結(jié)果產(chǎn)生第二微指令的相依性,寄存器別名表106將微指 令108發(fā)送(dispatch)至保留站112,而當微指令108準備好要執(zhí)行時,意即當其相依性被 滿足且有一執(zhí)行單元114可用時,保留站112再將微指令108送到(issue)各自的執(zhí)行單 元 114。特別是,一執(zhí)行單元114的存在為了執(zhí)行由指令轉(zhuǎn)譯器104所產(chǎn)生的微指令108 以實際操作位掃描指令。執(zhí)行單元114亦自一通用寄存器集合接收運算元。尤其是一位掃 描指令的來源運算元是來自于通用寄存器集合122,且該位掃描指令的結(jié)果會被寫回到通 用寄存器集合122。重排緩沖器(ReOrder Buffer, ROB) 118能夠確保微指令108及其相關(guān) 微指令的引退(retirement)。位掃描指令可指定六種基本運算,這是因為位掃描指令能指定16位、32位、或64 位的來源運算元,且再根據(jù)每種來源運算元指定一前行位掃描以找出最低有效被設(shè)位(二 進制值「1」),或根據(jù)每種來源運算元指定一逆行位掃描以找出最高有效被設(shè)位。一般而 言,通過將來源運算元的相關(guān)較高位遮罩掉、在適當時機使產(chǎn)生的8字節(jié)的位順序逆向 (reverse)、針對該字節(jié)的每個位執(zhí)行前行位掃描與零值檢測運算、以及將結(jié)果適時地反相 等步驟(將于后續(xù)段落進一步說明),用以執(zhí)行位掃描指令的一或多個執(zhí)行單元114就能將 上述的六種基本運算減少至單一個64位的前行掃描運算。圖2所示的細部方塊圖系描述本發(fā)明圖1中用以執(zhí)行實際操作位掃描指令(前行 /逆行位掃描指令)的微指令108的執(zhí)行單元114。圖2由圖2A與圖2B所組成。根據(jù)此 實施例,圖2A所描述的部分是執(zhí)行單元114中用以執(zhí)行實際操作位掃描指令的第一微指令 108,而圖2B所描述的部分是執(zhí)行單元114中用以執(zhí)行實際操作位掃描指令的第二微指令 108。圖2A中的執(zhí)行單元114包括位掃描指令的一來源運算元202。位掃描指令可指定來源運算元大小204為16位、32位、或64位,且不論來源運算元202的大小為何,執(zhí)行單元 114都接收由位掃描指令所指定的64位來源寄存器中的全部8字節(jié)。(在位掃描指令指定 來自存儲器的一來源運算元的情況下,指令轉(zhuǎn)譯器104產(chǎn)生一載入微指令以自存儲器載入 來源運算元202,而第一微指令相依于該載入運算)來源運算元202中的最低有效字節(jié)以 「字節(jié)0」標示,其次為「字節(jié)1」,以此類推至最高有效字節(jié),標示為「字節(jié)7」。零值遮罩邏輯單元206接收字節(jié)2至7,且于位掃描指令指定一 16位的來源運算 元202時,將字節(jié)2至7全部遮罩為零,以及在位掃描指令指定一 32位的來源運算元202, 將字節(jié)4至7全部遮罩為零,而在位掃描指令指定一 64位的來源運算元202時,不執(zhí)行任 何動作。零值遮罩邏輯單元206的輸出再與字節(jié)0與字節(jié)1連接成為一 8字節(jié)的結(jié)果208。
邏輯單元212使結(jié)果208的每個字節(jié)中的位逆向(reverse)以產(chǎn)生一個8字節(jié)的 位逆向結(jié)果214,也就是說,在每個字節(jié)中,位0被移至位7的位置、位1被移至位6的位置、 位2被移至位5的位置、位3被移至位4的位置、位4被移至位3的位置、位5被移至位2 的位置、位6被移至位1的位置、位7被移至位0的位置。邏輯單元216接收位逆向結(jié)果214并針對每個字節(jié)執(zhí)行一前行位掃描編碼運算 (forward bit scan encode operation)以產(chǎn)生八個3位結(jié)果222,每個3位結(jié)果222為一 無符號(unsigned)整數(shù)值,指定位逆向結(jié)果214中對應的最低有效被設(shè)位(二進制值「1」) 的位索引值(bit index)。在一實施例中,邏輯單元216為一編碼器(encoder)(第三編碼 器)O邏輯單元218接收結(jié)果208并針對每個字節(jié)執(zhí)行一前行位掃描編碼運算以產(chǎn)生八 個3位結(jié)果224,每個3位結(jié)果224為一無符號整數(shù)值,指定結(jié)果208中對應的最低有效被 設(shè)位(二進制值「1」)的位索引值。在一實施例中,邏輯單元218為一編碼器(第一編碼 器)O第一個8對1多工器226由其八個輸入接收八個3位結(jié)果222,并根據(jù)一控制輸入 272選擇八個3位結(jié)果222之一作為單一的3位輸出232。第二個8對1多工器228由其 八個輸入接收八個3位結(jié)果224,并根據(jù)一控制輸入274選擇八個3位結(jié)果224之一作為單 一的3位輸出234。2對1多工器238由其兩個輸入接收8對1多工器226與228的輸出 232與234,并選擇輸出232與234中的一個作為單一的3位輸出242。如果控制輸入236 指示該位掃描指令為一逆行位掃描指令,則2對1多工器238選擇輸出232 (意即選擇了前 行位掃描編碼的位逆向結(jié)果);反之,如果控制輸入236指示該位掃描指令為一前行位掃描 指令,則2對1多工器238選擇輸出234 (意即選擇了前行位掃描編碼的非位逆向結(jié)果)。2 對1多工器238的輸出242存儲于A寄存器282以供第二微指令之用。邏輯單元252針對結(jié)果208的每個字節(jié)執(zhí)行一零值檢測運算以產(chǎn)生8位的結(jié)果 254,如果結(jié)果254的位的對應字節(jié)208為零時,則結(jié)果254中對應位的值為偽(false)。在 一實施例中,邏輯單元252為一零值檢測器(zero detector)。邏輯單元256使結(jié)果254的位逆向以產(chǎn)生一 8位的逆向結(jié)果258。 邏輯單元262接收上述位逆向的結(jié)果258并執(zhí)行一前行位掃描編碼運算以產(chǎn)生一 3位的結(jié)果272,結(jié)果272即為8對1多工器226的控制輸入。在一實施例中,邏輯單262 為一編碼器(第四編碼器)。 3位的結(jié)果272為一無符號整數(shù)值,用以指定位逆向的結(jié)果258中最低有效位(二進制值「1」)的位索引值。邏輯單元262的輸出272存儲于B寄存器274中以供第二微指
令Z用ο邏輯單元264接收結(jié)果254并執(zhí)行一前行位掃描編碼運算以產(chǎn)生一 3位的結(jié)果 274,結(jié)果274即為8對1多工器228的控制輸入。編碼后的3位結(jié)果274為一無符號整數(shù) 值,用以指定結(jié)果254中最低有效位(二進制值「1」)的位索引值。邏輯單元264的輸出 274存儲于C寄存器286中以供第二微指令之用。在一實施例中,邏輯單元264為一編碼器 (第二編碼器)。邏輯單元266針對結(jié)果254執(zhí)行一零值檢測運算以產(chǎn)生一 1位的結(jié)果276,結(jié)果 276于結(jié)果254為零時(也就是當被遮罩的結(jié)果208為零時)則值為偽。邏輯單元266的 結(jié)果276存儲于D寄存器288中以供第二微指令之用。圖2B所示的細部方塊圖描述本發(fā)明用以執(zhí)行實際操作位掃描指令(前行/逆行 位掃描指令)的第二微指令108的執(zhí)行單元114。圖2B中的執(zhí)行單元114包括了圖2A中用以存儲第一微指令的結(jié)果的A寄存器 282、B寄存器284、C寄存器286、以及D寄存器288。2對1多工器221從兩輸入端口接受來自B寄存器284的3位數(shù)值211與來自C 寄存器286的3位數(shù)值213,并且根據(jù)圖2A中所示的控制輸入236選擇上述兩者其中之一 作為單一的3位輸出223。多工器221于控制輸入236指示該位掃描指令為一逆行位掃描 指令時選擇輸入211 ;相反地,多工器221于控制輸入236指示該位掃描指令為一前行位掃 描指令時選擇輸入213。輸出223的三個位與A寄存器282的輸出215連接(concatenate) 在一起而組成一 6位的結(jié)果225,其中結(jié)果225的第4到6位(Bits[5:3])為輸出223,而 結(jié)果225的第1到3位(Bits [2:0])為A寄存器282的輸出215。反相器227接收6位的結(jié)果225并產(chǎn)生一反相的結(jié)果229。2對1多工器231從 兩輸入端口接受6位的結(jié)果225與反相的結(jié)果229,并且根據(jù)圖2A所示的控制輸入236選 擇上述兩者其中之一作為單一的6位輸出233。2對1多工器231于控制輸入236指示上 述位掃描指令為一逆行位掃描指令時選擇輸出229 ;相反地,多工器231于控制輸入236指 示上述位掃描指令為一前行位掃描指令時選擇輸出225。輸出233的6個位再與補零位(zero padding bits,“0”bits) 235連接而組成大 小等同輸入來源(8位、16位、32位)的一結(jié)果299,結(jié)果299的第1到6位(Bits [5:0])為 輸出233,而結(jié)果299的其余的位則為補零位235。D寄存器288的輸出217被提供至圖1所示的重排緩沖器118,重排緩沖器118于 D寄存器288的輸出217指示該位掃描指令的來源運算元不為零時,將結(jié)果299寫入由該位 掃描指令所指定的目的寄存器。雖然附圖中的A寄存器282、B寄存器284、C寄存器286、以及D寄存器288為各 自分離的寄存器,但在一實施例中,第一微指令的10位結(jié)果(包括輸出242、272、274、276) 可存儲于一單一寄存器。需注意的是,上述成果雖然是通過圖2所示邏輯單元去實現(xiàn),但在 其它實施例中,也可使用不同邏輯單元去實現(xiàn)相同成果。舉例來說,如圖3所示的實施例則 使用了不同邏輯單元而實現(xiàn)了與第2B的實施例相同的成果。圖3根據(jù)本發(fā)明另一實施例所述如圖1中用以執(zhí)行實際操作位掃描指令(前行/ 逆行位掃描指令)的第二微指令108的執(zhí)行單元114細部方塊圖。圖3與圖2B的實施例
10中系使用相同的元件編號來表示類似的設(shè)計部分。反相器327接收B寄存器284的3位輸出211并且產(chǎn)生3位的反相結(jié)果337。2對1多工器321從兩個輸入端口從反相器327與C寄存器286各自接收反相后 的3位結(jié)果337與3位的數(shù)值213,并且根據(jù)控制輸入336選擇上述兩者的其中之一作為單 一的3位輸出323。多工器321于控制輸入336指示該位掃描指令為一前行位掃描指令時 選擇輸入337 ;反之,多工器321于控制輸入336指示該位掃描指令為一逆行位掃描指令時 選擇輸入213。反相器347接收A寄存器282的3位輸出215并且產(chǎn)生3位的反相輸出349。由三個2輸入異或門331所組成的集合(set)針對3位的反相輸出349與3位輸 入329中的對應位執(zhí)行一布爾異或(Boolean X0R)運算。3位輸入329由復制控制輸入336 三次而得到,異或門331的3位輸出為一 3位結(jié)果333。在一實施例中,當位掃描指令為一 前行位掃描時,3位輸入329的值全為布爾1,而于位掃描指令為一逆行位掃描時,3位輸入 329的值全為布爾0。因此,如果位掃描指令為一前行位掃描指令,則結(jié)果333為A寄存器 282的輸出215的反相(inverted version);反之,則結(jié)果333為A寄存器282的輸出215。2對1多工器321的輸出323的三個位與異或門331的輸出333連接而組成6 位結(jié)果325。其中,6位結(jié)果325中的第4到6位(Bits [5:3])為輸出323,而第1到3位 (Bits[2:0])為異或門331的輸出333。結(jié)果325的六個位與補零位235連接而組成結(jié)果 299,結(jié)果299中的第1到6位(Bits [5:0])為輸出325,而結(jié)果299中的其余位則為補零位 235。本發(fā)明雖以各種實施例公開如上,然而其僅為范例參考而非用以限定本發(fā)明的 范圍,本領(lǐng)域技術(shù)人員在不脫離本發(fā)明的精神和范圍內(nèi),當可做些許的更動與潤飾。舉 例來說,軟件可實現(xiàn)相關(guān)于本發(fā)明的裝置與方法的功能、制造、建模(modeling)、仿真 (simulation)、描述(description)、和/或測試等等。該軟件可使用一般程序設(shè)計語言 (如C、C++)、硬件描述語言(Hardware Description Language, HDL)(如Verilog HDL、 VHDL等等)、或其它可得的程序來實際操作。且該軟件可配置于任何公知的計算機可使 用介質(zhì)中,例如半導體、磁盤、或光盤(如只讀存儲器光盤(Compact Disc Read-Only Memory, CD-ROM)、數(shù)字多功能光盤(Digital Versatile Disc Read-Only Memory, DVD-ROM)等等)。本發(fā)明所述的裝置與方法的實施例可包括于一半導體知識產(chǎn)權(quán)內(nèi)核 (semiconductor intellectual property core)中,例如微處理器內(nèi)核(如嵌入于硬件 描述語言中),再進一步轉(zhuǎn)換為硬件的集成電路產(chǎn)品。另外,本發(fā)明所述的裝置與方法可以 硬件與軟件的一組合方式嵌入。因此,上述實施例并非用以限定本發(fā)明的范圍,本發(fā)明的保 護范圍當視所附權(quán)利要求書所界定者為準。特別是,本發(fā)明可實際操作于一微處理器裝置, 且該微處理器裝置可使用于一般用途的計算機。最后,本領(lǐng)域技術(shù)人員應當可理解在不脫 離本發(fā)明的精神和范圍內(nèi),以上述所公開的實施例與概念設(shè)計出與本發(fā)明相同目的的其它 架構(gòu)。
權(quán)利要求
一種硬件裝置,適用于一微處理器中執(zhí)行一位掃描指令,其中上述位掃描指令指定包括N個字節(jié)的一輸入運算元,上述N至少為2,上述硬件裝置包括一第一編碼器,針對上述輸入運算元中的每個字節(jié)進行前行位掃描編碼以產(chǎn)生N個第一位向量;一零值檢測器,針對上述輸入運算元中的每個字節(jié)進行零值檢測以產(chǎn)生一第二位向量;一第二編碼器,針對上述第二位向量進行前行位掃描編碼以產(chǎn)生一第三位向量;以及一第一N對1多工器,由上述第三位向量控制以選擇上述N個第一位向量中的一個為輸出的一第四位向量;其中上述第三位向量與上述第四位向量被連接成為一第五位向量,上述第五位向量指示上述輸入運算元中最低有效被設(shè)位的位索引值。
2.如權(quán)利要求1所述的硬件裝置,其中上述第五位向量的較高位經(jīng)由補零以產(chǎn)生一第 六位向量,上述第六位向量指示上述輸入運算元中最低有效被設(shè)位的位索引值。
3.如權(quán)利要求1所述的硬件裝置,其中上述微處理器的指令集架構(gòu)允許上述位掃描指 令指定包括N個字節(jié)的一輸入運算元,上述N為2、4、8中的任何一個,上述硬件裝置,還包 括一零值遮罩邏輯單元,用以自存儲上述輸入運算元的一 8字節(jié)寄存器接收一 8字節(jié)數(shù) 值,以及針對上述8字節(jié)數(shù)值進行零值遮罩以供上述第一編碼器與上述零值檢測器之用, 其中上述零值遮罩邏輯單元用以于上述位掃描指令指定一 2字節(jié)輸入運算元時將上述8字 節(jié)數(shù)值的第2至7字節(jié)遮罩為零,以及在上述位掃描指令指定一 4字節(jié)輸入運算元時將上 述8字節(jié)數(shù)值的第4至7字節(jié)遮罩為零。
4.如權(quán)利要求1所述的硬件裝置,還包括一第三編碼器,用以針對上述輸入運算元中的每個字節(jié)的一位逆向結(jié)果進行前行位掃 描編碼以產(chǎn)生N個第六位向量;一第四編碼器,用以針對上述第二位向量的一位逆向結(jié)果進行前行位掃描編碼以產(chǎn)生 一第七位向量;一第二 N對1多工器,由上述第七位向量控制以選擇上述N個第六位向量中的一個為 輸出的一第八位向量;以及一選擇邏輯單元,用以接收指示上述位掃描指令為一前行或逆行位掃描指令的一輸 入,其中上述選擇邏輯單元于上述輸入指示上述位掃描指令為一前行位掃描指令時選擇由 上述第三位向量與上述第四位向量連接成為上述第五位向量,以及在上述輸入指示上述位 掃描指令為一逆行位掃描指令時選擇由上述第七位向量與上述第八位向量連接而成為上 述第五位向量的一反相結(jié)果。
5.如權(quán)利要求4所述的硬件裝置,其中當上述輸入指示上述位掃描指令為一前行位掃 描指令時,則上述第四位向量包括上述第五位向量的最低有效位,以及當上述輸入指示上 述位掃描指令為一逆行位掃描指令時,則上述第八位向量的一反相結(jié)果包括上述第五位向 量的最低有效位。
6.如權(quán)利要求4所述的硬件裝置,其中上述選擇邏輯單元包括一第一 2對1多工器,用以于上述位掃描指令為一前行位掃描時選擇上述第四位向量為輸出的一第九位向量,以及在上述位掃描指令為一逆行位掃描時選擇上述第八位向量為 輸出的上述第九位向量;一第二 2對1多工器,用以于上述位掃描指令為一前行位掃描時選擇上述第三位向量 為輸出的一第十位向量,以及在上述位掃描指令為一逆行位掃描時選擇上述第七位向量為 輸出的上述第十位向量;以及一第三2對1多工器,用以于上述位掃描指令為一前行位掃描時選擇上述第九位向量 與上述第十位向量連接成為上述第五位向量,以及在上述位掃描指令為一逆行位掃描時選 擇上述第九位向量與上述第十位向量連接成為上述第五位向量的一反相結(jié)果。
7.如權(quán)利要求4所述的硬件裝置,其中上述選擇邏輯單元包括一第一 2對1多工器,用以于上述位掃描指令為一前行位掃描時選擇上述第四位向量 為輸出的一第九位向量,以及在上述位掃描指令為一逆行位掃描時選擇上述第八位向量為 輸出的上述第九位向量;一第二 2對1多工器,用以于上述位掃描指令為一前行位掃描時選擇上述第三位向量 為輸出的一第十位向量,以及在上述位掃描指令為一逆行位掃描時選擇上述第七位向量為 輸出的上述第十位向量;以及一異或門,用以針對上述第九位向量的一反相結(jié)果與一位向量執(zhí)行一布爾異或運算以 輸出一第十一位向量,其中于上述位掃描指令為一前行位掃描時,上述位向量的值全為布 爾1,而于上述位掃描指令為一逆行位掃描時,上述位向量的值全為布爾0 ;其中上述硬件裝置將上述第十位向量與上述第十一位向量連接成為上述第五位向量, 上述第五位向量指示上述輸入運算元中的最低有效被設(shè)位的位索引值。
8.如權(quán)利要求4所述的硬件裝置,其中上述微處理器包括一指令轉(zhuǎn)譯器用以將上述位 掃描指令轉(zhuǎn)譯為一第一微指令與一第二微指令,上述微處理器包括一第一執(zhí)行單元與一第 二執(zhí)行單元,上述第一執(zhí)行單元用以執(zhí)行上述第一微指令,上述第二執(zhí)行單元用以執(zhí)行上 述第二微指令,其中上述第一執(zhí)行單元包括上述第一編碼器、上述第二編碼器、上述第三編 碼器、上述第四編碼器、上述零值檢測器、上述第一 N對1多工器、以及上述第二 N對1多工 器,且上述第二執(zhí)行單元包括上述選擇邏輯單元。
9.一種位掃描指令執(zhí)行方法,適用于一微處理器執(zhí)行一位掃描指令,其中上述位掃描 指令指定包括N個字節(jié)的一輸入運算元,上述N至少為2,上述方法包括針對上述輸入運算元中的每個字節(jié)進行前行位掃描編碼以產(chǎn)生N個第一位向量; 針對上述輸入運算元中的每個字節(jié)進行零值檢測以產(chǎn)生一第二位向量; 用以針對上述第二位向量進行前行位掃描編碼以產(chǎn)生一第三位向量;以及 根據(jù)上述第三位向量選擇上述N個第一位向量中的一個為輸出的一第四位向量;以及 將上述第三位向量與上述第四位向量連接為一第五位向量,其中上述第五位向量指示 上述輸入運算元中最低有效被設(shè)位的位索引值。
10.如權(quán)利要求9所述的位掃描指令執(zhí)行方法,還包括將上述第五位向量的較高位補零以產(chǎn)生一第六位向量,其中上述第六位向量指示上述 輸入運算元中最低有效被設(shè)位的位索引值。
11.如權(quán)利要求9所述的位掃描指令執(zhí)行方法,其中上述微處理器的指令集架構(gòu)允許 上述位掃描指令指定包括N個字節(jié)的一輸入運算元,上述N為2、4、8中的任何一個,上述位掃描指令執(zhí)行方法,還包括自存儲上述輸入運算元的一 8字節(jié)寄存器接收一 8字節(jié)數(shù)值,以及針對上述8字節(jié)數(shù) 值進行零值遮罩,其中上述零值遮罩步驟包括于上述位掃描指令指定一 2字節(jié)輸入運算元 時將上述8字節(jié)數(shù)值的第2至7字節(jié)遮罩為零,以及在上述位掃描指令指定一 4字節(jié)輸入 運算元時將上述8字節(jié)數(shù)值的第4至7字節(jié)遮罩為零。
12.如權(quán)利要求9所述的位掃描指令執(zhí)行方法,還包括針對上述輸入運算元中的每個字節(jié)的一位逆向結(jié)果進行前行位掃描編碼以產(chǎn)生N個 第六位向量;針對上述第二位向量的一位逆向結(jié)果進行前行位掃描編碼以產(chǎn)生一第七位向量;根據(jù)上述第七位向量選擇上述N個第六位向量中的一個為輸出的一第八位向量;接收指示上述位掃描指令為一前行或逆行位掃描指令的一輸入;以及在上述輸入指示上述位掃描指令為一前行位掃描指令時,選擇由上述第三位向量與上 述第四位向量連接成為上述第五位向量,以及在上述輸入指示上述位掃描指令為一逆行位 掃描指令時,選擇由上述第七位向量與上述第八位向量連接而成為上述第五位向量的一反 相結(jié)果。
13.如權(quán)利要求12所述的位掃描指令執(zhí)行方法,其中當上述輸入指示上述位掃描指令 為一前行位掃描指令時,則上述第四位向量包括上述第五位向量的最低有效位,以及當上 述輸入指示上述位掃描指令為一逆行位掃描指令時,則上述第八位向量的一反相結(jié)果包括 上述第五位向量的最低有效位。
14.如權(quán)利要求12所述的位掃描指令執(zhí)行方法,其中上述選擇由上述第三位向量與上 述第四位向量連接成為上述第五位向量的步驟包括在上述位掃描指令為一前行位掃描時,選擇上述第四位向量為輸出的一第九位向量, 以及在上述位掃描指令為一逆行位掃描時,選擇上述第八位向量為輸出的上述第九位向 量;在上述位掃描指令為一前行位掃描時,選擇上述第三位向量為輸出的一第十位向量, 以及在上述位掃描指令為一逆行位掃描時,選擇上述第七位向量為輸出的上述第十位向 量;以及在上述位掃描指令為一前行位掃描時,選擇上述第九位向量與上述第十位向量連接成 為上述第五位向量,以及在上述位掃描指令為一逆行位掃描時,選擇上述第九位向量與上 述第十位向量連接成為上述第五位向量的一反相結(jié)果。
15.如權(quán)利要求12所述的位掃描指令執(zhí)行方法,其中上述選擇由上述第三位向量與上 述第四位向量連接成為上述第五位向量的步驟包括在上述位掃描指令為一前行位掃描時,選擇上述第四位向量為輸出的一第九位向量, 以及在上述位掃描指令為一逆行位掃描時,選擇上述第八位向量為輸出的上述第九位向 量;在上述位掃描指令為一前行位掃描時,選擇上述第三位向量為輸出的一第十位向量, 以及在上述位掃描指令為一逆行位掃描時,選擇上述第七位向量為輸出的上述第十位向 量;針對上述第九位向量的一反相結(jié)果與一位向量執(zhí)行一布爾異或運算以輸出一第十一位向量,其中于上述位掃描指令為一前行位掃描時,上述位向量的值全為布爾1,而于上述 位掃描指令為一逆行位掃描時,上述位向量的值全為布爾0 ;以及將上述第十位向量與上述第十一位向量連接成為上述第五位向量,其中上述第五位向 量指示上述輸入運算元中的最低有效被設(shè)位的位索引值。
全文摘要
適用于微處理器中執(zhí)行位掃描指令的硬件裝置與方法。該硬件裝置,用以執(zhí)行指定包括了N個字節(jié)的輸入運算元的位掃描指令,上述N至少為2。第一編碼器針對輸入運算元中的每個字節(jié)進行前行位掃描編碼以產(chǎn)生N個第一位向量。零值檢測器針對輸入運算元中的每個字節(jié)進行零值檢測以產(chǎn)生第二位向量。第二編碼器針對第二位向量進行前行位掃描編碼以產(chǎn)生第三位向量。第一N對1多工器由第三位向量控制以選擇N個第一位向量中的一個為輸出的第四位向量。其中第三位向量與第四位向量被連接成為第五位向量,第五位向量指示輸入運算元中最低有效被設(shè)位的位索引值。
文檔編號G06F9/30GK101887359SQ20101022084
公開日2010年11月17日 申請日期2010年7月1日 優(yōu)先權(quán)日2009年7月15日
發(fā)明者布萊恩·W·伯格 申請人:威盛電子股份有限公司