專(zhuān)利名稱(chēng):執(zhí)行條件指令的裝置及方法
技術(shù)領(lǐng)域:
本發(fā)明涉及微電子的領(lǐng)域,尤指一種能將條件執(zhí)行的能力納入一既有的微處理器指令集結(jié)構(gòu)的技術(shù)。
隨著過(guò)去三十年來(lái)使用上的爆炸性成長(zhǎng),在技術(shù)上也歷經(jīng)一相對(duì)應(yīng)的提升,其特征在于對(duì)下列項(xiàng)目有著日益升高的要求更快的速度、更強(qiáng)的尋址能力、更快的內(nèi)存存取、更大的操作數(shù)、更多種運(yùn)算(如浮點(diǎn)運(yùn)算、單一指令多重?cái)?shù)據(jù)(SIMD)、條件移動(dòng)等)以及附加的特殊運(yùn)算(如多媒體運(yùn)算)。如此造就了該領(lǐng)域中驚人的技術(shù)進(jìn)展,且都已應(yīng)用于微處理器的設(shè)計(jì),像擴(kuò)充管線(xiàn)化(extensive pipelining)、超規(guī)模結(jié)構(gòu)(super-scalararchitecture)、快取結(jié)構(gòu)、亂序處理(out-of-order processing)、爆發(fā)式存取(burst access)、分支預(yù)測(cè)(branch predication)以及假想執(zhí)行(speculative execution)??傊?,比起30年前剛出現(xiàn)時(shí),現(xiàn)在的微處理器呈現(xiàn)出驚人的復(fù)雜度,且具備了強(qiáng)大的能力。
但與許多其它產(chǎn)品不同的是,有另一非常重要的因素已限制了、并持續(xù)限制著微處理器結(jié)構(gòu)的演進(jìn)?,F(xiàn)今微處理器會(huì)如此復(fù)雜,一大部分得歸因于這項(xiàng)因素,即舊有軟件的兼容性。在市場(chǎng)考慮下,所多制造商選擇將新的結(jié)構(gòu)特征納入最新的微處理器設(shè)計(jì)中,但同時(shí)在這些最新的產(chǎn)品中,又保留了所有為確保兼容于較舊的,即所謂“舊有”(legacy)應(yīng)用程序所必需的能力。
這種舊有軟件兼容性的負(fù)擔(dān),沒(méi)有其它地方會(huì)比在x86-兼容的微處理器的發(fā)展史中更加顯而易見(jiàn)。大家都知道,現(xiàn)在的32/16位的虛擬模式(virtual-mode)x86微處理器,仍可執(zhí)行80年代所編寫(xiě)的8位真實(shí)模式(real-mode)的應(yīng)用程序。而熟悉此領(lǐng)域技術(shù)人員也承認(rèn),有不少相關(guān)的結(jié)構(gòu)“包袱”堆在x86結(jié)構(gòu)中,只是為了支持與舊有應(yīng)用程序及運(yùn)作模式的兼容性。雖然在過(guò)去,研發(fā)者可將新開(kāi)發(fā)的結(jié)構(gòu)特征加入既有的指令集結(jié)構(gòu),但如今使用這些特征所憑借的工具,即可編程指令,卻變得相當(dāng)稀少。更簡(jiǎn)單地說(shuō),在某些重要的指令集中,已沒(méi)有「多余」的指令,讓設(shè)計(jì)者可借以將更新的特征納入一既有的結(jié)構(gòu)中。
例如,在x86指令集結(jié)構(gòu)中,已經(jīng)沒(méi)有任何一未定義的一字節(jié)大小的操作碼狀態(tài),是尚未被使用的。在主要的一字節(jié)大小的x86操作碼圖中,全部256個(gè)操作碼狀態(tài)都已被既有的指令占用了。結(jié)果是,x86微處理器的設(shè)計(jì)者現(xiàn)在必須在提供新特征與放棄舊有軟件兼容性?xún)烧唛g作抉擇。若要提供新的可編程特征,則必須分派操作碼狀態(tài)給這些特征。若既有的指令集結(jié)構(gòu)沒(méi)有多余的操作碼狀態(tài),則某些既存的操作碼狀態(tài)必須重新定義,以提供給新的特征。因此,為了提供新的特征,就得犧牲舊有軟件兼容性了。
一個(gè)持續(xù)發(fā)展但在許多指令集結(jié)構(gòu)中仍未解決的領(lǐng)域,即是條件執(zhí)行(conditional execution)??删幊虠l件執(zhí)行特征允許程序員指定測(cè)試條件(如大于、小于等等),以作為一運(yùn)算指令(如加、減、將操作數(shù)從內(nèi)存移至緩存器等)的部分。經(jīng)過(guò)如此編程后,條件指令便通過(guò)微處理器的管線(xiàn),并在條件指令所指定的運(yùn)算執(zhí)行前,評(píng)估其測(cè)試條件。若條件評(píng)估為真(也即已滿(mǎn)足),則運(yùn)算就被執(zhí)行,并產(chǎn)生結(jié)果。若條件評(píng)估為假(也即未滿(mǎn)足),則運(yùn)算就不被執(zhí)行,條件指令也被撤回。在現(xiàn)代的微處理器管線(xiàn)結(jié)構(gòu)中,條件執(zhí)行的能力是非常有用的,因?yàn)樗梢员苊庖簧畹墓芫€(xiàn)被清空的現(xiàn)象。對(duì)于目前應(yīng)用程序中用來(lái)改變條件流程的常用的條件分支指令而言,此現(xiàn)象即是其分支預(yù)測(cè)錯(cuò)誤的結(jié)果。
因此,我們所需要的是,一種允許將條件執(zhí)行特征納入既有微處理器指令集結(jié)構(gòu)的技術(shù),其中該指令集結(jié)構(gòu)具有已完全占用的操作碼結(jié)構(gòu),而該技術(shù)則仍保留舊有應(yīng)用軟件的兼容性。
本發(fā)明的一個(gè)目的,為提出一種為既有微處理器指令集增添?xiàng)l件執(zhí)行特征的延伸機(jī)制。該延伸機(jī)制包括一延伸指令、一轉(zhuǎn)譯器及一條件執(zhí)行控制邏輯。該延伸指令指定一數(shù)個(gè)條件碼的子集合,作為一指定運(yùn)算是否執(zhí)行的判斷依據(jù),而該延伸指令包括該既有微處理器指令集的其中一指令,其后則接著一n位的延伸特征前置碼。該指令指出該延伸指令,而該n位延伸特征前置碼則指出該子集合。該轉(zhuǎn)譯器接收該延伸指令,并產(chǎn)生一微指令序列,以依據(jù)該子集合指導(dǎo)該指定運(yùn)算的條件執(zhí)行。該條件執(zhí)行控制邏輯耦接至轉(zhuǎn)譯器,用以評(píng)估對(duì)應(yīng)該子集合的條件碼,并于該子集合滿(mǎn)足時(shí),執(zhí)行該指定運(yùn)算。
本發(fā)明的另一目的,在于提出一種為既有微處理器指令集補(bǔ)充條件執(zhí)行的能力的指令集延伸模塊。該指令集延伸模塊具一逸出標(biāo)志(escape tag)與一條件指定元(condition specifier)。該逸出標(biāo)志由一轉(zhuǎn)譯邏輯接收,并指出一對(duì)應(yīng)指令的附隨部分是指定了一微處理器所要條件執(zhí)行的一延伸運(yùn)算,其中該逸出標(biāo)志為該既有微處理器指令集內(nèi)的一第一操作碼項(xiàng)目。該條件指定元耦接至該逸出標(biāo)志,且為該附隨部分其中之一。該條件指定元指定一條件碼狀態(tài),其為該延伸運(yùn)算是否執(zhí)行的判斷依據(jù)。該條件碼狀態(tài)被送至一條件執(zhí)行控制邏輯,其中該條件執(zhí)行控制邏輯致能/禁止(enable/diable)該延伸運(yùn)算的執(zhí)行。
本發(fā)明的再一目的,在于提供一種擴(kuò)充微處理器指令集的方法,以提供可編程條件執(zhí)行能力。該方法包括提供一延伸指令,該延伸指令包括一延伸標(biāo)志及一條件指定元前置碼,其中該延伸標(biāo)志為該微處理器指令集的其中一操作碼;通過(guò)該條件指定元前置碼與該延伸指令的其余部分指定所要執(zhí)行的一運(yùn)算,其中該運(yùn)算是否執(zhí)行決定于該條件指定元前置碼所指定的條件是否滿(mǎn)足;以及評(píng)估條件碼以判斷該條件是否滿(mǎn)足,且若該條件滿(mǎn)足,即執(zhí)行該運(yùn)算,若不滿(mǎn)足,便排除該執(zhí)行操作。
圖6為本發(fā)明用于條件執(zhí)行的延伸前置碼的一具體實(shí)施例的方塊圖;圖7為顯示由表六延伸前置碼的值所指定條件的表格;圖8為圖5的微處理器內(nèi)轉(zhuǎn)譯階段邏輯詳細(xì)的方塊圖;圖9為圖5的微處理器內(nèi)延伸執(zhí)行邏輯的方塊圖;
圖10為一表格,其對(duì)于常用的IF-THEN-ELSE敘述,比較條件執(zhí)行的流程與常用執(zhí)行的流程;以及圖11為描述本發(fā)明用以轉(zhuǎn)譯與執(zhí)行條件指令的方法的運(yùn)作流程圖。
圖號(hào)說(shuō)明100 指令格式 101 前置碼101 操作碼 103 地址指定元200 8位操作碼圖201 操作碼值 202 操作碼F1H300 延伸指令格式301 前置碼 302 操作碼 303 地址指定元304 延伸指令標(biāo)志 305 延伸前置碼400 8位前置碼圖401 結(jié)構(gòu)特征500 管線(xiàn)化微處理器501 提取邏輯 502 指令高速緩存/外部?jī)?nèi)存503 指令隊(duì)列 504 轉(zhuǎn)譯邏輯505 伸轉(zhuǎn)譯邏輯 506 微指令隊(duì)列507 執(zhí)行邏輯 508 延伸執(zhí)行邏輯600 延伸前置碼601 剩余字段 602 條件字段700 條件字段的邏輯狀態(tài)800 轉(zhuǎn)譯階段邏輯801 激活狀態(tài)信號(hào) 802 機(jī)器特定緩存器803 延伸特征字段804 指令緩沖器 805 轉(zhuǎn)譯邏輯806 轉(zhuǎn)譯控制器 807 禁止信號(hào)808 逸出指令檢測(cè)器 809 延伸前置碼譯碼器
810 指令譯碼器 811 控制只讀存儲(chǔ)器812 微指令緩沖器813 操作碼延伸項(xiàng)字段814 微操作碼字段815 目的字段816 來(lái)源字段817 位移字段900 延伸執(zhí)行邏輯901 操作數(shù)緩存器902 微指令緩存器903 操作碼延伸項(xiàng)字段904 其余字段905 操作數(shù)緩存器906 條件標(biāo)志緩存器 907 條件執(zhí)行控制邏輯908 致能信號(hào)GO 909 算術(shù)邏輯單元910 結(jié)果緩存器1000 比較IF-THEN-ELSE敘述的條件執(zhí)行流程與常用執(zhí)行流程的表格1100--1126 用以轉(zhuǎn)譯與執(zhí)行條件指令的方法的運(yùn)作流程前文已針對(duì)今日的微處理器內(nèi),如何擴(kuò)充其結(jié)構(gòu)特征,以超越相關(guān)指令集能力的技術(shù),作了背景的討論。有鑒于此,在圖1與圖2,將討論一相關(guān)技術(shù)的例子。此處的討論強(qiáng)調(diào)了微處理器設(shè)計(jì)者所一直面對(duì)的兩難,即一方面,他們想將最新開(kāi)發(fā)的結(jié)構(gòu)特征納入微處理器的設(shè)計(jì)中,但另一方面,他們又要保留執(zhí)行舊有應(yīng)用程序的能力。在圖1至圖2的例子中,一完全占用的操作碼圖,已把增加新操作碼至該范例結(jié)構(gòu)的可能性排除,因而迫使設(shè)計(jì)者要不就選擇將新特征納入,而犧牲某種程度的舊有軟件兼容性,要不就將結(jié)構(gòu)上的最新進(jìn)展一并放棄,以便維持微處理器與舊有應(yīng)用程序的兼容性。在相關(guān)技術(shù)的討論后,于圖3至圖11,將提供對(duì)本發(fā)明的討論。通過(guò)確認(rèn)與利用一既有但未使用的操作碼作為一延伸指令的前置碼標(biāo)志,本發(fā)明可讓微處理器設(shè)計(jì)者克服已完全使用的指令集結(jié)構(gòu)的限制,在允許他們提供條件執(zhí)行能力的同時(shí),也能保留與舊有應(yīng)用程序的兼容性。
請(qǐng)參閱圖1,其為一相關(guān)技術(shù)的微處理器指令格式100的方塊圖。該相關(guān)技術(shù)的指令100具有數(shù)量可變的數(shù)據(jù)項(xiàng)101-103,每一項(xiàng)目都設(shè)定成一特定值,合在一起便組成微處理器的一特定指令100。該特定指令100指示微處理器執(zhí)行一特定運(yùn)算,例如將兩操作數(shù)相加,或是將一操作數(shù)從內(nèi)存搬移至微處理器內(nèi)的緩存器。一般而言,指令100內(nèi)的操作碼項(xiàng)目102指定了所要執(zhí)行的特定運(yùn)算,而選用(optional)的地址指定元項(xiàng)目103位于操作碼102之后,以指定關(guān)于該特定運(yùn)算的附加信息,像是如何執(zhí)行該運(yùn)算,操作數(shù)位于何處等等。指令格式100并允許程序員在一操作碼102前加上前置碼項(xiàng)目101。在操作碼102所指定的特定運(yùn)算執(zhí)行時(shí),前置碼101用以指示是否使用特定的結(jié)構(gòu)特征。一般而言,這些結(jié)構(gòu)特征的應(yīng)用范圍涵蓋指令集中任何操作碼102所指定的運(yùn)算。例如,現(xiàn)今前置碼101存在于一些能使用不同大小操作數(shù)(如8位、16位、32位)執(zhí)行運(yùn)算的微處理器中。而當(dāng)許多此類(lèi)處理器被編程為一預(yù)設(shè)的操作數(shù)大小時(shí)(比如32位),在其個(gè)別指令集中所提供的前置碼101,仍能使程序員依據(jù)各個(gè)指令,選擇性地取代(override)該預(yù)設(shè)的操作數(shù)大小(如為了執(zhí)行16位運(yùn)算)??蛇x擇的操作數(shù)大小僅是結(jié)構(gòu)特征的一例,在許多現(xiàn)代的微處理器中,這些結(jié)構(gòu)特征能應(yīng)用于眾多可由操作碼102加以指定的運(yùn)算(如加、減、乘、布爾邏輯等)。
圖1所示的指令格式100,有一為業(yè)界所熟知的范例,此即x86指令格式100,其為所有現(xiàn)代的x86-兼容微處理器所采用。更具體地說(shuō),x86指令格式100(也稱(chēng)為x86指令集結(jié)構(gòu)100)使用了8位前置碼101、8位操作碼102以及8位地址指定元103。x86結(jié)構(gòu)100也具有數(shù)個(gè)前置碼101,其中兩個(gè)取代了x86微處理器所預(yù)設(shè)的地址/數(shù)據(jù)大小(即操作碼狀態(tài)66H與67H),另一個(gè)則指示微處理器依據(jù)不同的轉(zhuǎn)譯規(guī)則來(lái)解譯其后的操作碼字節(jié)102(即前置碼值0FH,其使得轉(zhuǎn)譯操作是依據(jù)所謂的二字節(jié)操作碼規(guī)則來(lái)進(jìn)行),其它的前置碼101則使特殊運(yùn)算重復(fù)執(zhí)行,直至某條件滿(mǎn)足為止(即REP操作碼F0H、F2H及F3H)。
現(xiàn)請(qǐng)參閱圖2,其顯示一表格200,用以描述一指令集結(jié)構(gòu)的指令201如何對(duì)應(yīng)至圖1指令格式內(nèi)一操作碼字節(jié)102的位邏輯狀態(tài)。表格200呈現(xiàn)了一示范性的8位操作碼圖200,其將一8位操作碼項(xiàng)目102所具有的最多256個(gè)值,關(guān)聯(lián)到對(duì)應(yīng)的微處理器操作碼指令201。表格200將操作碼項(xiàng)目102的一特定值,譬如02H,映像至一對(duì)應(yīng)的操作碼指令201(即指令I(lǐng)02)。在x86操作碼圖的例子中,為此領(lǐng)域中人所熟知的是,操作碼值14H為映像至x86的進(jìn)位累加(Add With Carry,ADC)指令,此指令將一8位的直接(immediate)操作數(shù)加至結(jié)構(gòu)緩存器AL的內(nèi)含值。熟悉此領(lǐng)域技術(shù)人員也將發(fā)覺(jué),上文提及的x86前置碼101(也即66H、67H、0FH、F0H、F2H及F3H)為實(shí)際的操作碼值201,其在不同思路下,指定要將特定的結(jié)構(gòu)延伸項(xiàng)應(yīng)用于隨后的操作碼項(xiàng)目102所指定的運(yùn)算。例如,在操作碼14H(正常情況下,為前述的ADC操作碼)前加上前置碼0FH,會(huì)使得x86處理器執(zhí)行一「解壓縮與插入低壓縮的單精度浮點(diǎn)值」(Unpack and Interleave Low PackedSingle-Precision Floating-Point Values)運(yùn)算,而非原本的ADC運(yùn)算。諸如此x86例子所述的特征,在現(xiàn)代的微處理器中是部分地致能,此因微處理器內(nèi)的指令轉(zhuǎn)譯/譯碼邏輯是依序解譯一指令100的項(xiàng)目101-103。所以在過(guò)去,于指令集結(jié)構(gòu)中使用特定操作碼值作為前置碼101,可允許微處理器設(shè)計(jì)者將不少先進(jìn)的結(jié)構(gòu)特征納入兼容舊有軟件的微處理器的設(shè)計(jì)中,而不會(huì)對(duì)未使用那些特定操作碼狀態(tài)的舊有程序,帶來(lái)執(zhí)行上的負(fù)面沖擊。例如,一未曾使用x86操作碼0FH的舊有程序,仍可在今日的x86微處理器上執(zhí)行。而一較新的應(yīng)用程序,借著運(yùn)用x86操作碼0FH作為前置碼101,就能使用許多x86結(jié)構(gòu)特征,如單一指令多重?cái)?shù)據(jù)(SIMD)運(yùn)算,條件移動(dòng)運(yùn)算等等。
盡管過(guò)去已通過(guò)指定可用/多余的操作碼值201作為前置碼101(也稱(chēng)為結(jié)構(gòu)特征標(biāo)志/指針101或逸出指令101),來(lái)提供結(jié)構(gòu)特征,但許多指令集結(jié)構(gòu)100在提供功能上的強(qiáng)化時(shí),仍會(huì)因?yàn)橐环浅V苯拥睦碛桑龅阶璧K所有可用/多余的操作碼值已被用完,也就是,操作碼圖200中的全部操作碼值已被結(jié)構(gòu)化地指定。當(dāng)所有可用的值被分派為操作碼項(xiàng)目102或前置碼項(xiàng)目101時(shí),就沒(méi)有剩余的操作碼值可作為納入新特征之用。這個(gè)嚴(yán)重的問(wèn)題存在于現(xiàn)在的許多微處理器結(jié)構(gòu)中,因而迫使設(shè)計(jì)者得在增添結(jié)構(gòu)特征與保留舊有程序的兼容性?xún)烧唛g作抉擇。
值得注意的是,圖2所示的指令201以一般性的方式表示(也即I24、I86),而非具體指涉實(shí)際的運(yùn)算(如進(jìn)位累加、減、異或)。這是因?yàn)?,在一些不同的微處理器結(jié)構(gòu)中,完全占用的操作碼圖200在結(jié)構(gòu)上,已將納入較新進(jìn)展的可能性排除。雖然圖2例子所提到的,是8位的操作碼項(xiàng)目102,熟悉此領(lǐng)域技術(shù)人員仍將發(fā)覺(jué),操作碼102的特定大小,除了作為一特殊情況來(lái)討論完全占用的操作碼結(jié)構(gòu)200所造成的問(wèn)題外,其它方面與問(wèn)題本身并不相干。因此,一完全占用的6位操作碼圖將有64個(gè)可結(jié)構(gòu)化地指定的操作碼/前置碼201,并將無(wú)法提供可用/多余的操作碼值作為擴(kuò)充之用。
另一種做法,則并非將原有指令集廢棄,以一新的格式100與操作碼圖200取代,而是只針對(duì)一部份既有的操作碼201,以新的指令方法(newinstruction meanings)取代,如圖2的操作碼40H至4FH。以這種混合的技術(shù),符合舊有規(guī)則的微處理器就可以兼容舊有軟件模式運(yùn)作,其中操作碼40H-4FH依舊有規(guī)則來(lái)解譯,或者以加強(qiáng)模式(enhanced mode)運(yùn)作,其中操作碼40H-4FH依加強(qiáng)的結(jié)構(gòu)規(guī)則來(lái)解譯。此項(xiàng)技術(shù)確能允許設(shè)計(jì)者將新特征納入設(shè)計(jì),然而,當(dāng)符合舊有規(guī)則的微處理器于加強(qiáng)模式運(yùn)作時(shí),缺點(diǎn)仍舊存在,因?yàn)槲⑻幚砥鞑荒軋?zhí)行任何使用操作碼40H-4FH的應(yīng)用程序。因此,站在保留舊有軟件兼容性的立場(chǎng),兼容舊有軟件/加強(qiáng)模式的技術(shù),還是無(wú)法接受的。
然而,對(duì)于操作碼空間已完全占用的指令集200,且該空間涵蓋所有于符合舊有規(guī)則的微處理器上執(zhí)行的應(yīng)用程序的情形,本發(fā)明發(fā)明人已注意到其中操作碼201的使用狀況,且他們也觀察出,雖然有些指令202是結(jié)構(gòu)化地指定,但未用于能被微處理器執(zhí)行的應(yīng)用程序中。圖2所述的指令I(lǐng)F1 202即為此現(xiàn)象的一例。事實(shí)上,相同的操作碼值202(也即F1H)為映像至未用于x86指令集結(jié)構(gòu)的一有效指令202。雖然該未使用的x86指令202是有效的x86指令202,其指示要在x86微處理器上執(zhí)行一結(jié)構(gòu)化地指定的運(yùn)算,但它卻未使用于任何能在現(xiàn)代x86微處理器上執(zhí)行的應(yīng)用程序。這個(gè)特殊的x86指令202被稱(chēng)為電路內(nèi)仿真斷點(diǎn)(In Circuit Emulation Breakpoint)(也即ICE BKPT,操作碼值為F1H),之前都是專(zhuān)門(mén)使用于一種現(xiàn)在已不存在的微處理器仿真設(shè)備中。ICE BKPT 202從未用于電路內(nèi)仿真器的外的應(yīng)用程序中,并且先前使用ICE BKPT 202的電路內(nèi)仿真設(shè)備已不復(fù)存在。因此,在x86的情形下,本發(fā)明人已在一完全占用的指令集結(jié)構(gòu)200內(nèi)發(fā)現(xiàn)一樣工具,借著利用一有效但未使用的操作碼202,以允許在微處理器的設(shè)計(jì)中納入先進(jìn)的結(jié)構(gòu)特征,而不需犧牲舊有軟件的兼容性。在一完全占用的指令集結(jié)構(gòu)200中,本發(fā)明利用一結(jié)構(gòu)化地指定但未使用的操作碼202,作為一指針標(biāo)志,以指出其后的一n位前置碼,因此允許微處理器設(shè)計(jì)者可將最多2n個(gè)最新發(fā)展的結(jié)構(gòu)特征,納入微處理器的設(shè)計(jì)中,同時(shí)保留與所有舊有軟件完全的兼容性。
本發(fā)明藉提供一n位的條件碼指定元前置碼,以使用前置碼標(biāo)志/延伸前置碼的概念,因而可允許程序員將一常用運(yùn)算編程,供微處理器執(zhí)行(如加、減、布爾運(yùn)算、操作數(shù)操作等),并在相同指令內(nèi),指定一該運(yùn)算賴(lài)以執(zhí)行的條件。在一具體實(shí)施例中,微處理器的條件碼狀態(tài),存于一條件碼緩存器中,且于該指定運(yùn)算執(zhí)行前被加以評(píng)估。若評(píng)估結(jié)果確定該條件滿(mǎn)足,則執(zhí)行該指定運(yùn)算。若該條件未滿(mǎn)足,則不執(zhí)行該指定運(yùn)算。本發(fā)明現(xiàn)將參照?qǐng)D3至圖11進(jìn)行討論。
現(xiàn)請(qǐng)參閱圖3,其為本發(fā)明的延伸指令格式300的方塊圖。與圖1所討論的格式100非常近似,該延伸指令格式300具有數(shù)量可變的數(shù)據(jù)項(xiàng)301-305,每一項(xiàng)目設(shè)定為一特定值,集合起來(lái)便組成微處理器的一特定指令300。該特定指令300指示微處理器執(zhí)行一特定運(yùn)算,像是將兩操作數(shù)相加,或是將一操作數(shù)從內(nèi)存搬移至微處理器的緩存器內(nèi)。一般而言,指令300的操作碼項(xiàng)目302指定了所要執(zhí)行的特定運(yùn)算,而選用的地址指定元項(xiàng)目303則位于操作碼302后,以指定該特定運(yùn)算的相關(guān)附加信息,像是如何執(zhí)行該運(yùn)算,操作數(shù)位于何處等等。指令格式300也允許程序員在一操作碼302前加上前置碼項(xiàng)目301。在操作碼302所指定的特定運(yùn)算執(zhí)行時(shí),前置碼項(xiàng)目301用來(lái)指示是否要使用既有的結(jié)構(gòu)特征。
然而,本發(fā)明的延伸指令300為前述圖1指令格式100的一超集(superset),其具有兩個(gè)附加項(xiàng)目304與305,可被選擇性作為指令延伸項(xiàng),并置于一格式化延伸指令300中所有其余項(xiàng)目301-303之前。這兩個(gè)附加項(xiàng)目304與305用以致能/禁止數(shù)個(gè)條件執(zhí)行特征,其中該些特征并無(wú)法在一完全占用的指令集結(jié)構(gòu)內(nèi)加以指定。選用項(xiàng)目304與305為一延伸指令標(biāo)志304與一條件執(zhí)行前置碼305。該延伸指令標(biāo)志304為一微處理器指令集內(nèi)另一結(jié)構(gòu)化地指定的操作碼。在一x86的實(shí)施例中,該延伸指令標(biāo)志304,或稱(chēng)逸出標(biāo)志304,為操作碼狀態(tài)F1H,其為早先使用的ICE BKPT指令。逸出標(biāo)志304向微處理器邏輯指出,該條件執(zhí)行前置碼305或稱(chēng)延伸特征指定元305跟隨其后,其中延伸特征指定元305用以指定延伸指令300的指定運(yùn)算所賴(lài)以執(zhí)行的一條件。在一具體實(shí)施例中,延伸指令標(biāo)志304指出,一對(duì)應(yīng)延伸指令300的附隨部分301-303及305指定了微處理器所要條件執(zhí)行的延伸運(yùn)算。延伸前置碼305,或稱(chēng)條件指定元,則指定了一條件碼狀態(tài),以送至一組態(tài)為致能/禁止該延伸運(yùn)算的執(zhí)行的條件執(zhí)行控制邏輯。
此處將本發(fā)明的條件執(zhí)行延伸技術(shù)作個(gè)概述。一指令延伸項(xiàng)以一既有指令集結(jié)構(gòu)其中一操作碼/指令304與一n位延伸特征前置碼進(jìn)行組態(tài)。所選取的操作碼指令作為一指針304,以指出指令300是一條件執(zhí)行指令300(也即,其指定了微處理器結(jié)構(gòu)的條件執(zhí)行延伸項(xiàng)),而該n位特征前置碼305則指定數(shù)個(gè)條件碼的一子集合,作為該延伸指令300的其余項(xiàng)目所指定的一運(yùn)算是否執(zhí)行的判斷依據(jù)。在一具體實(shí)施例中,延伸前置碼305具八位的大小,最多可指定256個(gè)不同的該數(shù)個(gè)條件碼的子集合,以作為一既有指令集中處理現(xiàn)行指令的判斷依據(jù)。n位前置碼的實(shí)施例,則最多可指定2n種不同的條件碼組合,以用于一特定運(yùn)算的條件執(zhí)行期間。
現(xiàn)請(qǐng)參閱圖4,一表格400顯示依據(jù)本發(fā)明,條件執(zhí)行延伸項(xiàng)如何映像至一8位延伸前置碼實(shí)施例的位邏輯狀態(tài)。類(lèi)似于圖2所討論的操作碼圖200,圖4的表格400呈現(xiàn)一示范性的8位條件碼的前置碼圖400,其將一8位延伸前置碼項(xiàng)目305的最多256個(gè)值,關(guān)聯(lián)到一符合舊有規(guī)則微處理器的對(duì)應(yīng)條件碼狀態(tài)401(如E34、E4D等)。在一x86的具體實(shí)施例中,本發(fā)明的8位延伸特征前置碼305為提供給延伸條件執(zhí)行指定元401(也即EOO-EFF)使用,該些指定元401乃現(xiàn)行x86指令集結(jié)構(gòu)所未能提供。
圖4所示的延伸特征401以一般性的方式表示,而非具體指涉實(shí)際的特征,此因本發(fā)明的技術(shù)可應(yīng)用于各種不同的結(jié)構(gòu)延伸項(xiàng)401與特定的指令集結(jié)構(gòu)。熟悉此領(lǐng)域技術(shù)人員將發(fā)覺(jué),許多不同的結(jié)構(gòu)特征401,其中一些已于上文提及,可依此處所述的逸出標(biāo)志304/延伸前置碼305技術(shù)將其納入一既有的指令集。圖4的8位前置碼實(shí)施例提供了最多256個(gè)不同的特征401,而一n位前置碼實(shí)施例則具有最多2n個(gè)不同特征401的編程選擇。
在對(duì)應(yīng)不同類(lèi)型的條件碼儲(chǔ)存與表示方式的實(shí)施例中,這些類(lèi)型對(duì)許多現(xiàn)代的微處理器而言是很常見(jiàn)的,條件可被指定為等于零、不等于零、偶校驗(yàn)(even parity)、奇校驗(yàn)(odd parity)、帶負(fù)號(hào)(sign)、不帶負(fù)號(hào)、溢位(overflow)、未溢位、進(jìn)位(carry)、未進(jìn)位,也可指定前述條件的組合,包括高于(above)(即未進(jìn)位且不等于零)、低于(below)或等于(即進(jìn)位或等于零)、大于(即不等于零且符號(hào)位等于進(jìn)位位)等等。在許多此種微處理器中,一條件碼狀態(tài)項(xiàng)目(也即緩存器)以數(shù)個(gè)條件碼位(或標(biāo)志)加以組態(tài),其中每一位代表一最近產(chǎn)生的結(jié)果是否已超過(guò)某一結(jié)果邊界條件,像是產(chǎn)生一進(jìn)位位,或有一符號(hào)位顯示該結(jié)果為一負(fù)數(shù)。然而,前述條件的狀態(tài)并非將本發(fā)明的范圍限制于一特定的微處理器條件碼集合。前述實(shí)施例可作為范例,用來(lái)解說(shuō)依本發(fā)明,一條件前置碼305如何被編碼,以提供條件子集合,作為一符合舊有規(guī)則的微處理器執(zhí)行運(yùn)算的判斷依據(jù)。熟悉此領(lǐng)域技術(shù)人員將可發(fā)覺(jué),一特殊的延伸條件前置碼305的組態(tài),依照一對(duì)應(yīng)微處理器中條件碼如何表示與儲(chǔ)存而定。
現(xiàn)請(qǐng)參閱圖5,其為解說(shuō)本發(fā)明用以執(zhí)行延伸條件執(zhí)行指令300的管線(xiàn)化微處理器500的方塊圖。微處理器500具有三個(gè)明顯的階段類(lèi)型提取、轉(zhuǎn)譯及執(zhí)行。提取階段具有提取邏輯501,可從指令高速緩存502或外部?jī)?nèi)存502提取指令。所提取的指令經(jīng)由指令隊(duì)列503送至轉(zhuǎn)譯階段。轉(zhuǎn)譯階段具有轉(zhuǎn)譯邏輯504,耦接至一微指令隊(duì)列506。轉(zhuǎn)譯邏輯504包括延伸轉(zhuǎn)譯邏輯505。執(zhí)行階段則有執(zhí)行邏輯507,其內(nèi)具有延伸執(zhí)行邏輯508。
依據(jù)本發(fā)明,于運(yùn)作時(shí),提取邏輯501從指令高速緩存/外部?jī)?nèi)存502提取格式化指令,并將這些指令依其執(zhí)行順序放入指令隊(duì)列503中。接著從指令隊(duì)列503提取這些指令,送至轉(zhuǎn)譯邏輯504。轉(zhuǎn)譯邏輯504將每一送入的指令轉(zhuǎn)譯/譯碼為一對(duì)應(yīng)的微指令序列,以指示微處理器500依據(jù)所指定的條件是否滿(mǎn)足,來(lái)執(zhí)行這些指令所指定的運(yùn)算。依本發(fā)明,延伸轉(zhuǎn)譯邏輯505檢測(cè)那些具有延伸前置碼標(biāo)志的指令,并提供作為對(duì)應(yīng)條件指定元前置碼的轉(zhuǎn)譯/譯碼之用。在一x86的實(shí)施例中,延伸轉(zhuǎn)譯邏輯505組態(tài)為檢測(cè)其值為F1H的延伸前置碼標(biāo)志,其為x86的ICE BKPT操作碼。微指令字段則提供于微指令隊(duì)列506中,以指定延伸指令中所指定的條件碼狀態(tài)。
微指令從微指令隊(duì)列506被送至執(zhí)行邏輯507,由延伸執(zhí)行邏輯508檢測(cè)其中是否有條件執(zhí)行的微指令,此處的條件執(zhí)行依微指令字段指示而致能,延伸執(zhí)行邏輯508并于所指定的運(yùn)算執(zhí)行前,評(píng)估條件碼儲(chǔ)存項(xiàng)目。若評(píng)估結(jié)果確定條件碼狀態(tài)為真,則延伸執(zhí)行邏輯508執(zhí)行該指定運(yùn)算。若條件碼狀態(tài)為假,則排除該指定運(yùn)算的執(zhí)行。
熟悉此領(lǐng)域技術(shù)人員將發(fā)現(xiàn),圖5所示的微處理器500為現(xiàn)代的管線(xiàn)化微處理器500經(jīng)過(guò)簡(jiǎn)化的結(jié)果。事實(shí)上,現(xiàn)代的管線(xiàn)化微處理器500最多可包括有20至30個(gè)不同的管線(xiàn)階段。然而,這些階段可概括地歸類(lèi)為方塊圖所示的三個(gè)階段,因此,圖5的方塊圖500可用以點(diǎn)明前述本發(fā)明實(shí)施例所需的必要組件。為了簡(jiǎn)明起見(jiàn),微處理器500中無(wú)關(guān)的組件并未顯示出來(lái)。
現(xiàn)請(qǐng)參閱圖6,其為本發(fā)明用于條件執(zhí)行的延伸前置碼600的一具體實(shí)施例的方塊圖。該延伸條件指定元前置碼600為一8位延伸前置碼600,且具有一包括位[30]的條件字段602與一包括位[74]的剩余字段601。
圖7為顯示由圖6延伸前置碼的值所指定的條件范例的表格700。其中某些條件,像是偶校驗(yàn)與不帶負(fù)號(hào),代表許多現(xiàn)代的微處理器結(jié)構(gòu)中,個(gè)別條件碼標(biāo)志的狀態(tài),而其它條件,像是不高于與大于或等于,則代表個(gè)別條件碼標(biāo)志的組合。
圖6與圖7所討論的示范實(shí)施例用來(lái)解說(shuō)本發(fā)明在應(yīng)用上的彈性,可配合一考慮采行的指令集結(jié)構(gòu)中表示條件碼的特定方式。然而,熟悉此領(lǐng)域技術(shù)人員將會(huì)察覺(jué),圖6與圖7的范例并未使本發(fā)明的范圍限于4位的條件指定元。
現(xiàn)請(qǐng)參閱圖8,其為圖5的微處理器內(nèi)轉(zhuǎn)譯階段邏輯800的詳細(xì)的方塊圖。轉(zhuǎn)譯階段邏輯800具有一指令緩沖器804,依本發(fā)明,其提供延伸條件執(zhí)行指令至轉(zhuǎn)譯邏輯805。轉(zhuǎn)譯邏輯805耦接至一具有一延伸特征字段803的機(jī)器特定緩存器(machine specific register)802。轉(zhuǎn)譯邏輯805具一轉(zhuǎn)譯控制器806,其提供一禁止信號(hào)807至一逸出指令檢測(cè)器808及一延伸前置碼譯碼器809。逸出指令檢測(cè)器808耦接至延伸前置碼譯碼器809及一指令譯碼器810。延伸前置碼譯碼器809與指令譯碼邏輯810存取一控制只讀存儲(chǔ)器(ROM)811,其中儲(chǔ)存了對(duì)應(yīng)至某些延伸指令的樣板(template)微指令序列。轉(zhuǎn)譯邏輯805也包括一微指令緩沖器812,其具有一操作碼延伸項(xiàng)字段813、一微操作碼字段814、一目的字段815、一來(lái)源字段816以及一位移字段817。
運(yùn)作上,在微處理器通電激活期間,機(jī)器特定緩存器802內(nèi)的延伸字段803的狀態(tài)通過(guò)信號(hào)激活狀態(tài)(signal power-up state)801決定,以指出該特定微處理器是否能轉(zhuǎn)譯與執(zhí)行本發(fā)明的延伸條件執(zhí)行指令。在一具體實(shí)施例中,信號(hào)801從一特征控制緩存器(圖上未顯示)導(dǎo)出,該特征控制緩存器則讀取一于制造時(shí)即已組態(tài)的熔合數(shù)組(fuse array)(未顯示)。機(jī)器特定緩存器802將延伸特征字段803的狀態(tài)送至轉(zhuǎn)譯控制器806。轉(zhuǎn)譯控制邏輯806則控制從指令緩沖器804所提取的指令,要依照延伸條件執(zhí)行轉(zhuǎn)譯規(guī)則或既有轉(zhuǎn)譯規(guī)則進(jìn)行解譯。提供這樣的控制特征,可允許監(jiān)督應(yīng)用程序(如BIOS)致能/禁止微處理器的延伸執(zhí)行特征。若延伸執(zhí)行被禁止,則具有被選為延伸特征標(biāo)志的操作碼狀態(tài)的指令,將依既有轉(zhuǎn)譯規(guī)則進(jìn)行轉(zhuǎn)譯。在一x86的具體實(shí)施例中,選取操作碼狀態(tài)F1H作為標(biāo)志,則在常用的轉(zhuǎn)譯規(guī)則下,遇到F1H將造成不合法的指令異常(exception)。然而,在延伸轉(zhuǎn)譯規(guī)則下,若遇到標(biāo)志,則會(huì)被逸出指令檢測(cè)器808檢測(cè)出來(lái)。逸出指令檢測(cè)器808因而于延伸前置碼譯碼器809轉(zhuǎn)譯/譯碼標(biāo)志之后的延伸條件指定元前置碼時(shí),禁止指令譯碼器810的運(yùn)作,并于轉(zhuǎn)譯/譯碼該延伸指令的剩余部分時(shí),致能指令譯碼器810。某些特定指令將導(dǎo)致對(duì)控制ROM 811的存取,以獲取對(duì)應(yīng)的微指令序列樣板。微指令緩沖器812的操作碼延伸項(xiàng)字段813由前置碼譯碼器809進(jìn)行組態(tài),以指定用以判斷一指定運(yùn)算是否執(zhí)行的條件。其它緩沖器字段814-817則由指令譯碼器810來(lái)進(jìn)行組態(tài)。經(jīng)過(guò)組態(tài)的微指令812被送至一微指令隊(duì)列(未顯示于圖中),由處理器進(jìn)行后續(xù)執(zhí)行。
現(xiàn)請(qǐng)參閱圖9,其為圖5微處理器內(nèi)的延伸執(zhí)行邏輯900的方塊圖。該延伸執(zhí)行邏輯900具一算術(shù)邏輯單元(arithematic logic unit,ALU)909,其經(jīng)由一致能信號(hào)GO 908耦接至條件執(zhí)行控制邏輯907。條件執(zhí)行控制器907則存取一條件標(biāo)志儲(chǔ)存機(jī)制906,或稱(chēng)條件標(biāo)志緩存器906。兩操作數(shù)OPERAND 1與OPERAND 2,由ALU 909從操作數(shù)緩存器901與905提取出來(lái)。一微指令緩存器902則提供一微指令給ALU 909與條件執(zhí)行控制器907。該微指令緩存器902具有一操作碼延伸項(xiàng)字段903與一其余字段904。ALU 909并另外耦接至一結(jié)果緩存器910。
運(yùn)作上,當(dāng)一延伸條件執(zhí)行指令依本發(fā)明被轉(zhuǎn)譯成一微指令序列時(shí),延伸微指令以及緩存器901與905內(nèi)的可用操作數(shù)都經(jīng)由微指令緩存器902,被送至延伸執(zhí)行邏輯900。若操作碼延伸項(xiàng)字段903指出了用來(lái)判斷其余字段904所指定運(yùn)算是否執(zhí)行的條件,則條件執(zhí)行控制邏輯907會(huì)在該運(yùn)算執(zhí)行前,存取該條件標(biāo)志儲(chǔ)存機(jī)制906,以判斷該條件是否為真。若該條件為真,則執(zhí)行控制器907通過(guò)信號(hào)GO 908指示ALU 909執(zhí)行該指定運(yùn)算,并提供一結(jié)果至結(jié)果緩存器910。若條件為假,則信號(hào)GO 908設(shè)定為假,以指示ALU 909排除該運(yùn)算的執(zhí)行,因此,就沒(méi)有結(jié)果送至結(jié)果緩存器910。
現(xiàn)請(qǐng)參閱圖10,其顯示一表格1000,對(duì)于常用的IF-THEN-ELSE敘述,比較其條件執(zhí)行流程與常用的執(zhí)行流程。在左邊的字段中,表格1000顯示一常用的C語(yǔ)言程序碼表示式,用于比較兩個(gè)操作數(shù)A與B。若A大于B,則操作數(shù)C設(shè)定為3。若A不大于B,則操作數(shù)C設(shè)定為1。這種表示式常見(jiàn)于許多應(yīng)用程序中。再者,此種比較形式的結(jié)果并非總是可預(yù)測(cè)的。
表格1000的中間字段顯示一常用的x86執(zhí)行流程,以實(shí)作前述的C語(yǔ)言表示式。首先,指令MOV EAX,[A]從內(nèi)存提取操作數(shù)A至緩存器EAX。接著,指令CMP EAX,[B]將緩存器EAX的內(nèi)容與內(nèi)存中的操作數(shù)B做比較。條件跳躍指令JLE ELSE檢查前面比較指令所產(chǎn)生的條件碼狀態(tài)。若條件碼顯示比較的結(jié)果是小于或等于的情形,則程序流程分支至卷標(biāo)ELSE,將操作數(shù)C設(shè)定為1。否則,操作數(shù)C設(shè)定為3,且程序流程靠一隨后的無(wú)條件跳躍指令JMP COMMON所指引,而跳至卷標(biāo)COMMON,再繼續(xù)進(jìn)行。
在現(xiàn)代的深度管線(xiàn)化微處理器中,若分支預(yù)測(cè)邏輯對(duì)條件跳躍指令JLEELSE的結(jié)果預(yù)測(cè)錯(cuò)誤,則許多指令將從指令管線(xiàn)中被清空,以依據(jù)正確的程序流程開(kāi)始執(zhí)行指令。
同樣的C語(yǔ)言表示式的條件執(zhí)行流程,則顯示于表格1000的右邊字段,以解說(shuō)本發(fā)明如何使用延伸指令,以避免管線(xiàn)因錯(cuò)誤的分支預(yù)測(cè)結(jié)果而被清空。對(duì)比于需執(zhí)行條件跳躍指令(即JLE ELSE)及后續(xù)的無(wú)條件跳躍指令(即JMP COMMON),此處執(zhí)行的是兩個(gè)延伸條件搬移指令(GT.MOV[C],3與之后的LE.MOV[C],1)。第一個(gè)搬移指令的執(zhí)行依比較指令的結(jié)果而定(即CMPEAX,[B])。若比較的結(jié)果是大于,則執(zhí)行第一個(gè)搬移指令,將操作數(shù)C設(shè)為3。若比較結(jié)果是小于或等于,則第一個(gè)搬移指令被排除,并執(zhí)行第二個(gè)搬移指令,設(shè)定操作數(shù)C為1。因此,本發(fā)明的指令流程避免了由于錯(cuò)誤的分支預(yù)測(cè)結(jié)果,導(dǎo)致管線(xiàn)被清空的現(xiàn)象。
現(xiàn)請(qǐng)參閱圖11,其為描述本發(fā)明用以轉(zhuǎn)譯與執(zhí)行條件指令的方法的運(yùn)作流程圖1100。流程開(kāi)始于方塊1102,其中一個(gè)以條件執(zhí)行指令進(jìn)行組態(tài)后的程序被送至微處理器。流程接著進(jìn)行至方塊1104。
于方塊1104中,下一個(gè)指令從高速緩存/外部?jī)?nèi)存提取。流程接著進(jìn)行至判斷方塊1106。
于判斷方塊1106中,對(duì)在方塊1104中所提取的下個(gè)指令進(jìn)行檢查,以判斷是否包括一延伸逸出標(biāo)志/碼。若否,則流程進(jìn)行至方塊1112。若檢測(cè)到該延伸逸出碼,則流程進(jìn)行至方塊1108。
于方塊1108中,由于在方塊1106中已檢測(cè)到一延伸逸出標(biāo)志,轉(zhuǎn)譯/譯碼在一延伸前置碼上執(zhí)行,以判斷一對(duì)應(yīng)運(yùn)算所賴(lài)以執(zhí)行的指定條件是否滿(mǎn)足。流程接著進(jìn)行到方塊1110。
于方塊1110中,一微指令序列的對(duì)應(yīng)字段被組態(tài)為指出該延伸前置碼所指定的指定條件。流程接著進(jìn)行至方塊1112。
于方塊1112中,該指令的其余部分(如前置碼項(xiàng)目、操作碼、地址指定元)被轉(zhuǎn)譯/譯碼,以判斷所要執(zhí)行的運(yùn)算及關(guān)聯(lián)操作數(shù)的屬性。流程接著進(jìn)行至方塊714。
于方塊1114中,一微指令序列的其余字段被組態(tài)為指定該指定運(yùn)算及其操作數(shù)格式。流程接著進(jìn)行至方塊1116。
于方塊1116中,該微指令序列,其包括方塊1110所組態(tài)的操作碼延伸項(xiàng)字段以及方塊1114所組態(tài)的其余字段,被送至一微指令隊(duì)列,由微處理器執(zhí)行。流程接著進(jìn)行至方塊1118。
于方塊1118中,依照本發(fā)明,該微指令序列由延伸條件執(zhí)行邏輯進(jìn)行提取。流程接著進(jìn)行至方塊1120。
于方塊1120中,延伸條件執(zhí)行邏輯存取一條件碼儲(chǔ)存結(jié)構(gòu),以讀取對(duì)應(yīng)于操作碼延伸項(xiàng)字段中所指定條件的程序代碼狀態(tài)。流程接著進(jìn)行至判斷方塊1122。
于判斷方塊1122中,評(píng)估程序代碼狀態(tài),以判斷所指定的條件是否滿(mǎn)足。若滿(mǎn)足,則流程進(jìn)行至方塊1124。若未滿(mǎn)足,則流程進(jìn)行至方塊1126,因而排除了指定運(yùn)算的執(zhí)行。
于方塊1124中,由于指定條件為真,便執(zhí)行指定運(yùn)算。流程接著進(jìn)行至方塊1126。
于方塊1126中,本方法完成。
雖然本發(fā)明及其目的、特征與優(yōu)點(diǎn)已詳細(xì)敘述,其它實(shí)施例也可包括在本發(fā)明的范圍內(nèi)。例如,本發(fā)明已就如下的技術(shù)加以敘述利用已完全占用的指令集結(jié)構(gòu)內(nèi)單一、未使用的操作碼狀態(tài)作為標(biāo)志,以指出其后的延伸特征前置碼。但本發(fā)明的范圍就任一方面來(lái)看,并不限于已完全占用的指令集結(jié)構(gòu),或未使用的指令,或是單一標(biāo)志。相反地,本發(fā)明涵蓋了未完全映像的指令集、具已使用操作碼的實(shí)施例以及使用一個(gè)以上的指令標(biāo)志的實(shí)施例。例如,考慮一沒(méi)有未使用操作碼狀態(tài)的指令集結(jié)構(gòu)。本發(fā)明的一具體實(shí)施例包括了選取一作為逸出標(biāo)志的操作碼狀態(tài),其中選取標(biāo)準(zhǔn)依市場(chǎng)因素而決定。另一具體實(shí)施例則包括使用操作碼的一特殊組合作為標(biāo)志,如操作碼狀態(tài)7FH的連續(xù)出現(xiàn)。因此,本發(fā)明的本質(zhì)在于使用一標(biāo)志序列,其后則為-n位的延伸前置碼,可使一延伸指令所指定運(yùn)算的執(zhí)行,依據(jù)該n位延伸前置碼所指定數(shù)個(gè)條件的一子集合是否滿(mǎn)足而定。
此外,本發(fā)明已通過(guò)一具有一組條件碼或標(biāo)志的微處理器來(lái)作為范例,該組條件碼指出一先前所產(chǎn)生結(jié)果的邊界條件,包括校驗(yàn)、溢位、正負(fù)號(hào)及零。雖然這些類(lèi)型的條件指針在今日仍廣為使用,但本發(fā)明并不僅限于應(yīng)用在這些類(lèi)型的條件。例如,本發(fā)明另外的實(shí)施例即包括其它的指定條件,像是一特殊緩存器內(nèi)容的狀態(tài)、一通訊端口或其它I/O裝置是否使用中、是否有可用的內(nèi)存或高速緩存空間等等。
再者,雖然上文利用微處理器為例來(lái)解說(shuō)本發(fā)明及其特征和優(yōu)點(diǎn),熟悉此領(lǐng)域技術(shù)人員仍可察覺(jué),本發(fā)明的范圍并不限于微處理器的結(jié)構(gòu),而可涵蓋所有形式的可編程裝置,如信號(hào)處理器、工業(yè)用控制器(industrialcontroller)、陣列處理機(jī)及其它同類(lèi)裝置。
總之,以上所述僅為本發(fā)明的較佳實(shí)施例而已,不能限定本發(fā)明所實(shí)施的范圍。凡依本發(fā)明權(quán)利要求所作的等效變化與修飾,都應(yīng)仍屬于本發(fā)明專(zhuān)利涵蓋的范圍內(nèi)。
權(quán)利要求
1.一種用于一微處理器中的條件執(zhí)行裝置,包括一轉(zhuǎn)譯邏輯,用以將一延伸指令轉(zhuǎn)譯成對(duì)應(yīng)的微指令,其中該延伸指令包括一延伸前置碼,用以指定一條件,而該延伸指令所指定的運(yùn)算是否執(zhí)行,依該條件有否滿(mǎn)足而定;以及一延伸前置碼標(biāo)志,用以指出該延伸前置碼,其中該延伸前置碼標(biāo)志為該微處理器的一指令集內(nèi)另一結(jié)構(gòu)化地指定的操作碼;以及一延伸執(zhí)行邏輯,耦接至該轉(zhuǎn)譯邏輯,用以接收該對(duì)應(yīng)的微指令,并評(píng)估該條件,其中若該條件未滿(mǎn)足,則該延伸執(zhí)行邏輯便排除該運(yùn)算的執(zhí)行。
2.如權(quán)利要求1所述的條件執(zhí)行裝置,其中該延伸指令還包括依據(jù)該指令集所結(jié)構(gòu)化地指定的數(shù)個(gè)項(xiàng)目。
3.如權(quán)利要求2所述的條件執(zhí)行裝置,其中該些結(jié)構(gòu)化地指定的項(xiàng)目包括一操作碼項(xiàng)目,用以指定該運(yùn)算。
4.如權(quán)利要求1所述的條件執(zhí)行裝置,其中該延伸前置碼包括數(shù)個(gè)位,且其中該些位的每一邏輯狀態(tài)為對(duì)應(yīng)到數(shù)個(gè)結(jié)果條件的一子集合。
5.如權(quán)利要求1所述的條件執(zhí)行裝置,其中該對(duì)應(yīng)的微指令包括一微操作碼字段與一微操作碼延伸項(xiàng)字段。
6.如權(quán)利要求5所述的條件執(zhí)行裝置,其中該延伸執(zhí)行邏輯使用該微操作碼延伸項(xiàng)字段,以決定該條件,且其中該延伸執(zhí)行邏輯使用該微操作碼字段以決定該運(yùn)算。
7.如權(quán)利要求6所述的條件執(zhí)行裝置,其中該延伸執(zhí)行邏輯包括一條件執(zhí)行控制器,組態(tài)為評(píng)估該條件,并依據(jù)該條件致能/禁止該運(yùn)算的執(zhí)行。
8.如權(quán)利要求1所述的條件執(zhí)行裝置,其中該轉(zhuǎn)譯邏輯包括一逸出指令檢測(cè)邏輯,用于檢測(cè)該延伸前置碼標(biāo)志;以及一延伸前置碼譯碼邏輯,耦接至該逸出指令檢測(cè)邏輯,用以轉(zhuǎn)譯該延伸前置碼,并對(duì)該對(duì)應(yīng)微指令內(nèi)的一微操作碼延伸項(xiàng)字段進(jìn)行組態(tài),該微操作碼延伸項(xiàng)字段則指定該條件。
9.如權(quán)利要求8所述的條件執(zhí)行裝置,其中該轉(zhuǎn)譯邏輯還包括一指令譯碼邏輯,用以組態(tài)該對(duì)應(yīng)微指令內(nèi)的其它字段,該其它字段依據(jù)該指令集指定該運(yùn)算。
10.一種為一既有微處理器指令集增添?xiàng)l件執(zhí)行特征的延伸機(jī)制,包括一延伸指令,組態(tài)為指定一數(shù)個(gè)條件碼的子集合,以作為一指定運(yùn)算是否執(zhí)行的判斷依據(jù),其中該延伸指令包括該既有微處理器指令集的其中一指令,其后則為一n位延伸特征前置碼,該指令指出該延伸指令,而該n位延伸特征前置碼則指出該子集合;一轉(zhuǎn)譯器,組態(tài)為接收該延伸指令,并產(chǎn)生一微指令序列,以依據(jù)該子集合指導(dǎo)該指定運(yùn)算的條件執(zhí)行;以及一條件執(zhí)行控制邏輯,耦接至該轉(zhuǎn)譯器,組態(tài)為評(píng)估對(duì)應(yīng)該子集合的條件碼,并于該子集合滿(mǎn)足時(shí),執(zhí)行該指定運(yùn)算。
11.如權(quán)利要求10所述的延伸機(jī)制,其中該延伸指令還包括數(shù)個(gè)指令部分,組態(tài)為指定該指定運(yùn)算。
12.如權(quán)利要求11所述的延伸機(jī)制,其中該些指令部分依照該既有微處理器指令集加以格式化。
13.如權(quán)利要求10所述的延伸機(jī)制,其中該轉(zhuǎn)譯器包括一逸出指令檢測(cè)器,用以檢測(cè)該指令;以及一延伸前置碼譯碼器,耦接至該逸出指令檢測(cè)器,用以轉(zhuǎn)譯該n位的延伸特征前置碼,并產(chǎn)生指定該子集合的該微指令序列內(nèi)的一微操作碼延伸項(xiàng)字段。
14.一種為一既有微處理器指令集補(bǔ)充條件執(zhí)行的能力的指令集延伸模塊,包括一逸出標(biāo)志,由一轉(zhuǎn)譯邏輯接收,用以指出一對(duì)應(yīng)指令的附隨部分指定了一微處理器所要條件執(zhí)行的一延伸運(yùn)算,其中該逸出標(biāo)志為該既有微處理器指令集內(nèi)的一第一操作碼項(xiàng)目;以及一條件指定元,耦接至該逸出標(biāo)志,且為該伴隨部分其中之一,用以指定一條件碼狀態(tài),該條件碼狀態(tài)為該延伸運(yùn)算是否執(zhí)行的判斷依據(jù),且被送至一條件執(zhí)行控制邏輯,其中該條件執(zhí)行控制邏輯組態(tài)為致能/禁止該延伸運(yùn)算的執(zhí)行。
15.如權(quán)利要求14所述的指令集延伸模塊,其中該轉(zhuǎn)譯邏輯將該逸出標(biāo)志與該附隨部分轉(zhuǎn)譯成對(duì)應(yīng)的微指令,該對(duì)應(yīng)的微指令指示一延伸執(zhí)行邏輯去執(zhí)行該延伸運(yùn)算。
16.如權(quán)利要求15所述的指令集延伸模塊,其中該條件執(zhí)行控制邏輯評(píng)估一條件碼項(xiàng)目,以判斷該條件碼狀態(tài)是否為真,且若該條件碼狀態(tài)為假,則該條件執(zhí)行控制邏輯指示該延伸執(zhí)行邏輯排除該延伸運(yùn)算的執(zhí)行。
17.如權(quán)利要求14所述的指令集延伸模塊,其中該轉(zhuǎn)譯邏輯包括一逸出標(biāo)志檢測(cè)邏輯,用以檢測(cè)該逸出標(biāo)志,并指示該附隨部分的轉(zhuǎn)譯操作需依據(jù)延伸轉(zhuǎn)譯規(guī)則(conventions);以及一譯碼邏輯,耦接至該逸出標(biāo)志檢測(cè)邏輯,用以依據(jù)該既有微處理器指令集的規(guī)則,執(zhí)行微處理器指令的轉(zhuǎn)譯操作,并依據(jù)該延伸轉(zhuǎn)譯規(guī)則執(zhí)行該對(duì)應(yīng)指令的轉(zhuǎn)譯,以致能該延伸運(yùn)算。
18.一種擴(kuò)充一微處理器指令集的方法,以提供可編程條件執(zhí)行能力,該方法包括提供一延伸指令,該延伸指令包括一延伸標(biāo)志及一條件指定元前置碼,其中該延伸標(biāo)志為該微處理器指令集的其中一操作碼;通過(guò)該條件指定元前置碼與該延伸指令的其余部分指定所要執(zhí)行的一運(yùn)算,其中該運(yùn)算是否執(zhí)行決定于該條件指定元前置碼所指定的一條件是否滿(mǎn)足;以及評(píng)估條件碼項(xiàng)目以判斷該條件是否滿(mǎn)足,若該條件滿(mǎn)足,即執(zhí)行該運(yùn)算,若不滿(mǎn)足,便排除該執(zhí)行操作。
19.如權(quán)利要求18所述的方法,其中該指定所要執(zhí)行的運(yùn)算的操作包括首先指定該運(yùn)算,該首先指定的操作使用了該微處理器指令集中另一不同的操作碼。
20.如權(quán)利要求18所述的方法,還包括將該延伸指令轉(zhuǎn)譯成微指令,其中該微指令在執(zhí)行該延伸運(yùn)算前,指示一延伸執(zhí)行邏輯去判斷該條件是否滿(mǎn)足。
21.如權(quán)利要求20所述的方法,其中該轉(zhuǎn)譯延伸指令的操作包括于一轉(zhuǎn)譯邏輯內(nèi),檢測(cè)該延伸標(biāo)志;以及依照條件執(zhí)行轉(zhuǎn)譯規(guī)則譯碼該條件指定元前置碼與該延伸指令的其余部分。
全文摘要
本發(fā)明提供一種用于微處理器的條件執(zhí)行裝置。該條件執(zhí)行裝置包括一轉(zhuǎn)譯邏輯與一延伸執(zhí)行邏輯。該轉(zhuǎn)譯邏輯將一延伸指令轉(zhuǎn)譯為對(duì)應(yīng)的微指令。該延伸指令具有一延伸前置碼與一延伸前置碼標(biāo)志。該延伸前置碼指定一條件,而該延伸指令所指定的運(yùn)算是否執(zhí)行,決定于該條件是否滿(mǎn)足。該延伸前置碼標(biāo)志指出該延伸前置碼,且為微處理器指令集內(nèi)另一結(jié)構(gòu)化地指定的操作碼。該延伸執(zhí)行邏輯耦接至轉(zhuǎn)譯邏輯,用以接收該對(duì)應(yīng)的微指令,并評(píng)估該條件。若條件未滿(mǎn)足,則延伸執(zhí)行邏輯即排除該運(yùn)算的執(zhí)行。
文檔編號(hào)G06F9/22GK1414466SQ0215056
公開(kāi)日2003年4月30日 申請(qǐng)日期2002年11月13日 優(yōu)先權(quán)日2002年5月9日
發(fā)明者G·葛蘭·亨利, 羅德·E·胡克, 泰瑞·派克斯 申請(qǐng)人:智慧第一公司