欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

指令分支的預(yù)跳轉(zhuǎn)方法和系統(tǒng)的制作方法

文檔序號:6363435閱讀:216來源:國知局
專利名稱:指令分支的預(yù)跳轉(zhuǎn)方法和系統(tǒng)的制作方法
技術(shù)領(lǐng)域
本發(fā)明涉及一種指令分支的預(yù)跳轉(zhuǎn)方法和系統(tǒng),特別涉及一種基于棧模式的預(yù)跳轉(zhuǎn)方法和系統(tǒng)。
背景技術(shù)
在微處理器的運行過程中,跳轉(zhuǎn)指令的出現(xiàn)十分頻繁,因此對跳轉(zhuǎn)指令的處理方式顯著的影響著以流水線方式工作的微處理器的性能。跳轉(zhuǎn)指令的一般功能是:如果滿足某一條件,則跳轉(zhuǎn)到某一目的地,而該條件通常是由該跳轉(zhuǎn)指令之前的用于生成跳轉(zhuǎn)發(fā)生的條件的條件生成指令(例如比較指令CMP)產(chǎn)生的。由于流水線的工作方式是:在流水線的起點讀取指令,在流水線的終點產(chǎn)生指令的結(jié)果,因此,如果按照指令的自然順序依次執(zhí)行指令,就會出現(xiàn)這樣的問題:當條件生成指令在流水線的最后一級Sn產(chǎn)生結(jié)果時,跳轉(zhuǎn)指令處于倒數(shù)第二級Sn_1;跳轉(zhuǎn)指令之后的按自然順序排列的各條指令也已經(jīng)被讀出并依次處于流水線的S1-Slrf級,此時,如果跳轉(zhuǎn)指令根據(jù)條件生成指令的結(jié)果判斷出跳轉(zhuǎn)條件已經(jīng)滿足,需要發(fā)生跳轉(zhuǎn),也就是說不再按照自然順序執(zhí)行指令,而是要執(zhí)行跳轉(zhuǎn)指令的跳轉(zhuǎn)目的地的指令,這樣一來,之前讀出的各條指令就必須取消執(zhí)行,造成了流水線資源的浪費。目前,解決這一問題的方法主要包括延遲槽技術(shù)和跳轉(zhuǎn)預(yù)測技術(shù)。延遲槽技術(shù)的原理是,將跳轉(zhuǎn)指令提前,將跳轉(zhuǎn)指令之前與跳轉(zhuǎn)無關(guān)的一定數(shù)量(即延遲槽長度,一般為2或3的固定長度)的指令放在跳轉(zhuǎn)指令之后,這樣,無論跳轉(zhuǎn)指令判斷的結(jié)果如何,被轉(zhuǎn)移到跳轉(zhuǎn)指令之后的與跳轉(zhuǎn)無關(guān)的指令都可以順序執(zhí)行。延遲槽技術(shù)的主要問題是,使得指令排序不自然,并且,這種定長延遲槽十分死板,當跳轉(zhuǎn)指令附近缺少合適的可調(diào)換的指令時,只能通過填入空操作NOP來滿足延遲槽長度,事實上,大多數(shù)時候只能通過NOP來構(gòu)成延遲槽,這同樣造成流水線資源的浪費。跳轉(zhuǎn)預(yù)測技術(shù)的原理是,根據(jù)很多歷史記錄猜測跳轉(zhuǎn)指令后應(yīng)該執(zhí)行哪一條指令,并按照猜測的結(jié)果讀取指令,如果猜測錯誤,則將已經(jīng)讀取的錯誤指令全部取消。這種跳轉(zhuǎn)預(yù)測技術(shù)的問題是,其邏輯十分復(fù)雜,硬件成本顯著,且某些已經(jīng)讀出甚至已經(jīng)執(zhí)行的指令是很難干凈的取消的,只能被迫推遲執(zhí)行,因此大大影響了微處理器的性能。

發(fā)明內(nèi)容
本發(fā)明提出了一種指令分支的預(yù)跳轉(zhuǎn)方法和系統(tǒng),其克服了現(xiàn)有技術(shù)中的上述問題,不受定長延遲槽的限制,也無需引入取消執(zhí)行,提高了編譯靈活性和流水線效率,降低了設(shè)計復(fù)雜度。根據(jù)本發(fā)明的方法和系統(tǒng)基于棧模式,特別有利于循環(huán)嵌套語句的優(yōu)化。根據(jù)本發(fā)明的一方面,提出了一種指令分支的預(yù)跳轉(zhuǎn)方法,該方法包括:步驟Sll:當根據(jù)當前指令判斷出后續(xù)指令中包含跳轉(zhuǎn)指令時,根據(jù)當前指令的結(jié)果,判斷所述跳轉(zhuǎn)指令是否執(zhí)行跳轉(zhuǎn);步驟S12:若判斷結(jié)果為執(zhí)行跳轉(zhuǎn),則確定跳轉(zhuǎn)指令的跳轉(zhuǎn)位置和跳轉(zhuǎn)目的地,并將所述跳轉(zhuǎn)位置和所述跳轉(zhuǎn)目的地壓入棧,若判斷結(jié)果為不執(zhí)行跳轉(zhuǎn),則按原有順序執(zhí)行之后的指令;步驟S13:當所述棧頂部的跳轉(zhuǎn)位置與待執(zhí)行的指令地址一致時,則彈出所述棧頂部的跳轉(zhuǎn)位置和跳轉(zhuǎn)目的地,以彈出的所述跳轉(zhuǎn)目的地作為下一條指令的地址,當所述棧頂部的跳轉(zhuǎn)位置與待執(zhí)行的指令地址不一致時,則以待執(zhí)行的指令地址作為下一條指令的地址;步驟S14,根據(jù)所述下一條指令的地址讀取指令并執(zhí)行。優(yōu)選地,步驟S12通過預(yù)跳轉(zhuǎn)指令來實現(xiàn),該預(yù)跳轉(zhuǎn)指令基于條件生成指令的結(jié)果進行操作,若條件生成指令的結(jié)果指示為執(zhí)行跳轉(zhuǎn),則確定跳轉(zhuǎn)指令的跳轉(zhuǎn)位置和跳轉(zhuǎn)目的地,并將所述跳轉(zhuǎn)位置和所述跳轉(zhuǎn)目的地壓入棧,若判斷結(jié)果為不執(zhí)行跳轉(zhuǎn),則順序執(zhí)行之后的指令。優(yōu)選地,所述與跳轉(zhuǎn)指令包括條件字段、跳轉(zhuǎn)位置字段和跳轉(zhuǎn)目的地字段。優(yōu)選地,待執(zhí)行的指令的地址由程序計數(shù)器指示。根據(jù)本發(fā)明的另一方面,提出了一種指令分支的預(yù)跳轉(zhuǎn)系統(tǒng),該系統(tǒng)包括:用于存儲預(yù)跳轉(zhuǎn)數(shù)據(jù)的棧;預(yù)跳轉(zhuǎn)模塊,其輸入端連接指令處理模塊的輸出,其輸入端連接所述棧的輸入,當指令處理模塊的輸出結(jié)果指示后面的跳轉(zhuǎn)指令將執(zhí)行跳轉(zhuǎn)時,將所述跳轉(zhuǎn)指令的跳轉(zhuǎn)位置和跳轉(zhuǎn)目的地作為跳轉(zhuǎn)數(shù)據(jù)壓入所述棧;指令地址比較模塊,其比較所述棧的頂部的跳轉(zhuǎn)位置和待執(zhí)行的指令地址,當所述棧頂部的跳轉(zhuǎn)位置與待執(zhí)行的指令地址一致時,則彈出所述棧頂部的跳轉(zhuǎn)位置和跳轉(zhuǎn)目的地作為指令地址比較模塊的輸出,當所述棧頂部的跳轉(zhuǎn)位置與待執(zhí)行的指令地址不一致時,則以所述待執(zhí)行的指令地址作為指令地址比較模塊的輸出;指令讀取模塊,根據(jù)指令地址比較模塊的輸出讀取指令;指令處理模塊,對指令讀取模塊讀取的指令進行處理,輸出結(jié)果。優(yōu)選地,由程序計數(shù)器指示所述待執(zhí)行的指令地址。優(yōu)選地,指令處理器模塊進行指令譯碼、讀操作數(shù)、運算操作。


圖1是根據(jù)本發(fā)明的一個實施例的一種指令分支的預(yù)跳轉(zhuǎn)方法的流程圖;圖2是一條預(yù)跳轉(zhuǎn)指令的示意性結(jié)構(gòu)圖;圖3是根據(jù)本發(fā)明的一個實施例的一種指令分支的預(yù)跳轉(zhuǎn)系統(tǒng)的結(jié)構(gòu)圖;圖4是本發(fā)明的預(yù)跳轉(zhuǎn)系統(tǒng)的一個優(yōu)選實施例。
具體實施例方式本發(fā)明提出了一種指令分支的預(yù)跳轉(zhuǎn)方法及系統(tǒng),其基本原理是:在判斷出后面將要發(fā)生跳轉(zhuǎn)時,就確定將要發(fā)生的跳轉(zhuǎn)的跳轉(zhuǎn)位置和跳轉(zhuǎn)目的地,從而在指令進行到該跳轉(zhuǎn)位置時完成跳轉(zhuǎn)操作。事實上,程序中的任何一個有條件的跳轉(zhuǎn)都是在條件生成時就能夠知道后面將會有跳轉(zhuǎn)發(fā)生的。例如對于標準的“for”循環(huán),在循環(huán)起點就可以知道,在后面肯定會面臨是否跳轉(zhuǎn)的判斷,甚至根據(jù)循環(huán)變量的當前數(shù)值,就能夠知道未來要不要跳轉(zhuǎn),根據(jù)本發(fā)明的方法在得知未來要跳轉(zhuǎn)的時候就指明在哪里跳轉(zhuǎn),要跳到哪里去,在指令進行到之前預(yù)計跳轉(zhuǎn)的位置時,就執(zhí)行之前預(yù)計的跳轉(zhuǎn)操作。本發(fā)明的預(yù)跳轉(zhuǎn)方法基于棧模式,其基本原理是可預(yù)先判斷后面將要發(fā)生的若干條跳轉(zhuǎn),將這些跳轉(zhuǎn)按順序壓棧,當?shù)竭_各個跳轉(zhuǎn)位置時將這些跳轉(zhuǎn)逐次彈棧,這種棧模式(即,先進后出的模式)與嵌套循環(huán)的模式是匹配的,因此特別適用于多重嵌套循環(huán)。圖1是根據(jù)本發(fā)明的一個實施例的一種指令分支的預(yù)跳轉(zhuǎn)方法的流程圖,其包括:步驟Sll:當根據(jù)當前指令判斷出后續(xù)指令中包含跳轉(zhuǎn)指令時,根據(jù)當前指令的結(jié)果,確定所述跳轉(zhuǎn)指令是否執(zhí)行跳轉(zhuǎn);步驟S12:若判斷結(jié)果為執(zhí)行跳轉(zhuǎn),則確定跳轉(zhuǎn)指令的跳轉(zhuǎn)位置和跳轉(zhuǎn)目的地,并將所述跳轉(zhuǎn)位置和所述跳轉(zhuǎn)目的地壓入棧,若判斷結(jié)果為不執(zhí)行跳轉(zhuǎn),則按原有順序執(zhí)行之后的指令;步驟S13:當所述棧頂部的跳轉(zhuǎn)位置與待執(zhí)行的指令地址一致時,則彈出所述棧頂部的跳轉(zhuǎn)位置和跳轉(zhuǎn)目的地,以彈出的所述跳轉(zhuǎn)目的地作為下一條指令的地址,當所述棧頂部的跳轉(zhuǎn)位置與待執(zhí)行的指令地址不一致時,則以待執(zhí)行的指令地址作為下一條指令的地址;步驟S14,根據(jù)所述下一條指令的地址讀取指令并執(zhí)行。其中,步驟S12可通過預(yù)跳轉(zhuǎn)指令PJ來實現(xiàn),該預(yù)跳轉(zhuǎn)指令PJ的功能是:基于條件生成指令的結(jié)果進行操作,若條件生成指令的結(jié)果指示為執(zhí)行跳轉(zhuǎn),則確定跳轉(zhuǎn)指令的跳轉(zhuǎn)位置和跳轉(zhuǎn)目的地,并將所述跳轉(zhuǎn)位置和所述跳轉(zhuǎn)目的地壓入棧,若判斷結(jié)果為不執(zhí)行跳轉(zhuǎn),則順序執(zhí)行之后的指令。圖2是一條預(yù)跳轉(zhuǎn)指令的示意性結(jié)構(gòu)圖。其中該預(yù)跳轉(zhuǎn)指令主要包括條件字段#C、跳轉(zhuǎn)位置字段B和跳轉(zhuǎn)目的地字段A。條件字段#(:規(guī)定了跳轉(zhuǎn)發(fā)生的條件,#C通常為常數(shù),可對應(yīng)于條件生成指令產(chǎn)生的標示位FLAG。跳轉(zhuǎn)位置字段B指示了在所執(zhí)行的指令中,“跳轉(zhuǎn)”這一動作所在的位置,即指明“在哪里跳轉(zhuǎn)”的問題,該位置與執(zhí)行“跳轉(zhuǎn)”操作的指令的指令地址相關(guān)聯(lián)。跳轉(zhuǎn)目的地字段A指示了執(zhí)行“跳轉(zhuǎn)”操作時,指令的分支地址,即指明“跳轉(zhuǎn)到哪里去”的問題。步驟S13可以通過將棧頂部的跳轉(zhuǎn)位置與程序計數(shù)器PC指示的指令地址相比較來實現(xiàn),其中程序技術(shù)器PC指示的地址就是待執(zhí)行的指令的地址,若棧頂?shù)奶D(zhuǎn)位置與PC指示的指令地址一致,則標志著指令已經(jīng)運行到了應(yīng)該發(fā)生跳轉(zhuǎn)的位置,則彈出棧頂部的跳轉(zhuǎn)位置和跳轉(zhuǎn)目的地,該跳轉(zhuǎn)目的地就是執(zhí)行跳轉(zhuǎn)時應(yīng)“跳轉(zhuǎn)”到的指令分支地址,按照這個指令分支地址讀取指令,就完成了此次跳轉(zhuǎn)。由于棧的工作機制是“先進后出”,因此在多層嵌套循環(huán)指令中,外層循環(huán)的跳轉(zhuǎn)先進棧,內(nèi)層循環(huán)的跳轉(zhuǎn)后進棧,此后指令必然先運行至內(nèi)層循環(huán)的跳轉(zhuǎn)位置,從而使頂部的內(nèi)層循環(huán)跳轉(zhuǎn)出棧。當指令運行到外層循環(huán)的跳轉(zhuǎn)位置時,再使外層循環(huán)跳轉(zhuǎn)出棧,從而完成整個多層嵌套循環(huán)。下面以標準的二重嵌套循環(huán)為例詳細描述本發(fā)明的方法。以下是標準的二重循環(huán)的c語言代碼:
權(quán)利要求
1.一種指令分支的預(yù)跳轉(zhuǎn)方法,該方法包括: 步驟Sll:當根據(jù)當前指令判斷出后續(xù)指令中包含跳轉(zhuǎn)指令時,根據(jù)當前指令的結(jié)果,判斷所述跳轉(zhuǎn)指令是否執(zhí)行跳轉(zhuǎn); 步驟S12:若判斷結(jié)果為執(zhí)行跳轉(zhuǎn),則確定跳轉(zhuǎn)指令的跳轉(zhuǎn)位置和跳轉(zhuǎn)目的地,并將所述跳轉(zhuǎn)位置和所述跳轉(zhuǎn)目的地壓入棧,若判斷結(jié)果為不執(zhí)行跳轉(zhuǎn),則按原有順序執(zhí)行之后的指令; 步驟S13:當所述棧頂部的跳轉(zhuǎn)位置與待執(zhí)行的指令地址一致時,則彈出所述棧頂部的跳轉(zhuǎn)位置和跳轉(zhuǎn)目的地,以彈出的所述跳轉(zhuǎn)目的地作為下一條指令的地址,當所述棧頂部的跳轉(zhuǎn)位置與待執(zhí)行的指令地址不一致時,則以待執(zhí)行的指令地址作為下一條指令的地址; 步驟S14,根據(jù)所述下一條指令的地址讀取指令并執(zhí)行。
2.根據(jù)權(quán)利要求1所述的指令分支的預(yù)跳轉(zhuǎn)方法,其中,步驟S12通過預(yù)跳轉(zhuǎn)指令來實現(xiàn),該預(yù)跳轉(zhuǎn)指令基于條件生成指令的結(jié)果進行操作,若條件生成指令的結(jié)果指示為執(zhí)行跳轉(zhuǎn),則確定跳轉(zhuǎn)指令的跳轉(zhuǎn)位置和跳轉(zhuǎn)目的地,并將所述跳轉(zhuǎn)位置和所述跳轉(zhuǎn)目的地壓入棧,若判斷結(jié)果為不執(zhí)行跳轉(zhuǎn),則順序執(zhí)行之后的指令。
3.根據(jù)權(quán)利要求2所述的指令分支的預(yù)跳轉(zhuǎn)方法,其中所述與跳轉(zhuǎn)指令包括條件字段、跳轉(zhuǎn)位置字段和跳轉(zhuǎn)目的地字段。
4.根據(jù)權(quán)利要求1所述的指令分支的預(yù)跳轉(zhuǎn)方法,其中待執(zhí)行的指令的地址由程序計數(shù)器指示。
5.一種指令分支的預(yù)跳轉(zhuǎn)系統(tǒng),該系統(tǒng)包括: 用于存儲預(yù)跳轉(zhuǎn)數(shù)據(jù)的棧; 預(yù)跳轉(zhuǎn)模塊,其輸入端連接指令處理模塊的輸出,其輸入端連接所述棧的輸入,當指令處理模塊的輸出結(jié)果指示后面的跳轉(zhuǎn)指令將執(zhí)行跳轉(zhuǎn)時,將所述跳轉(zhuǎn)指令的跳轉(zhuǎn)位置和跳轉(zhuǎn)目的地作為跳轉(zhuǎn)數(shù)據(jù)壓入所述棧; 指令地址比較模塊,其比較所述棧的頂部的跳轉(zhuǎn)位置和待執(zhí)行的指令地址,當所述棧頂部的跳轉(zhuǎn)位置與待執(zhí)行的指令地址一致時,則彈出所述棧頂部的跳轉(zhuǎn)位置和跳轉(zhuǎn)目的地作為指令地址比較模塊的輸出,當所述棧頂部的跳轉(zhuǎn)位置與待執(zhí)行的指令地址不一致時,則以所述待執(zhí)行的指令地址作為指令地址比較模塊的輸出; 指令讀取模塊,根據(jù)指令地址比較模塊的輸出讀取指令; 指令處理模塊,對指令讀取模塊讀取的指令進行處理,輸出結(jié)果。
6.根據(jù)權(quán)利要求5所述的指令分支的預(yù)跳轉(zhuǎn)系統(tǒng),其中由程序計數(shù)器指示所述待執(zhí)行的指令地址。
7.根據(jù)權(quán)利要求5所述的指令分支的預(yù)跳轉(zhuǎn)系統(tǒng),其中指令處理器模塊進行指令譯碼、讀操作數(shù)、運算操作。
全文摘要
一種指令分支的預(yù)跳轉(zhuǎn)方法和系統(tǒng),該方法包括當根據(jù)當前指令判斷出后續(xù)指令中包含跳轉(zhuǎn)指令時,根據(jù)當前指令的結(jié)果,判斷所述跳轉(zhuǎn)指令是否執(zhí)行跳轉(zhuǎn);若判斷結(jié)果為執(zhí)行跳轉(zhuǎn),則確定跳轉(zhuǎn)指令的跳轉(zhuǎn)位置和跳轉(zhuǎn)目的地,并將所述跳轉(zhuǎn)位置和所述跳轉(zhuǎn)目的地壓入棧,若判斷結(jié)果為不執(zhí)行跳轉(zhuǎn),則按原有順序執(zhí)行之后的指令;當所述棧頂部的跳轉(zhuǎn)位置與待執(zhí)行的指令地址一致時,則彈出所述棧頂部的跳轉(zhuǎn)位置和跳轉(zhuǎn)目的地,以彈出的所述跳轉(zhuǎn)目的地作為下一條指令的地址,當所述棧頂部的跳轉(zhuǎn)位置與待執(zhí)行的指令地址不一致時,則以待執(zhí)行的指令地址作為下一條指令的地址;根據(jù)所述下一條指令的地址讀取指令并執(zhí)行。
文檔編號G06F9/38GK103218206SQ20121001528
公開日2013年7月24日 申請日期2012年1月18日 優(yōu)先權(quán)日2012年1月18日
發(fā)明者沙力, 蘭軍強, 朱磊 申請人:上海算芯微電子有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
乌兰浩特市| 凤凰县| 屯门区| 秦安县| SHOW| 土默特左旗| 临潭县| 泰州市| 道真| 雅安市| 上犹县| 赫章县| 左贡县| 密云县| 新蔡县| 淅川县| 灌阳县| 东山县| 江城| 岗巴县| 衡东县| 西乌珠穆沁旗| 横山县| 鄂伦春自治旗| 南投县| 涞水县| 云和县| 三门县| 松阳县| 宜黄县| 江安县| 武胜县| 临西县| 凤城市| 称多县| 酉阳| 和平县| 铜鼓县| 沧州市| 广安市| 剑河县|