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

指令獲取設(shè)備和處理器的制作方法

文檔序號(hào):6356796閱讀:183來源:國知局
專利名稱:指令獲取設(shè)備和處理器的制作方法
技術(shù)領(lǐng)域
本發(fā)明涉及指令獲取設(shè)備。更具體地,本發(fā)明涉及用于預(yù)取包括分支指令的指令序列的指令獲取設(shè)備和處理器,以及涉及供所述設(shè)備和處理器使用的處理方法,并且還涉及用于使得計(jì)算機(jī)執(zhí)行所述處理方法的程序。
背景技術(shù)
為了最大化管線型CPU (中央處理單元;或處理器)的處理能力,管線內(nèi)的指令應(yīng)當(dāng)理想地被保持為在無障礙的情況下流動(dòng)。保持這樣的理想狀態(tài)要求要被處理的下一指令從其被保存到的存儲(chǔ)器位置被預(yù)取到CPU或指令緩存器。然而,如果程序包括分支指令, 則在分支指令被執(zhí)行之前,緊接該分支指令后所要被執(zhí)行的指令的地址不能確定地被識(shí)別出。因此,指令獲取被暫停;管線遲延發(fā)生;并且指令執(zhí)行的吞吐量下降。因此,許多CPU具有通過不論源自分支的不確定性如何都要執(zhí)行預(yù)取以抑制管線遲延的配置??赏ㄟ^簡(jiǎn)單硬件實(shí)施的一般預(yù)取方案被稱為下一行預(yù)取(參見日本專利 No. 4327237(圖1))。這是一種按照指令被編程的順序來預(yù)取指令的技術(shù)。處理器從存儲(chǔ)器獲取指令的基本模式涉及按照地址順次上升的順序訪問存儲(chǔ)器。因此,此通過硬件的預(yù)取構(gòu)成了將給定地址的指令存儲(chǔ)在緩存器中,然后假設(shè)還將使用下一緩存行并且還自動(dòng)地存儲(chǔ)下一緩存行的嘗試。

發(fā)明內(nèi)容
雖然上述下一行預(yù)取可以使用簡(jiǎn)單硬件結(jié)構(gòu)來實(shí)施,但是此預(yù)取通過假設(shè)沒有分支發(fā)生而被執(zhí)行的事實(shí)頻繁地導(dǎo)致不必要的預(yù)取(被稱為預(yù)取失效)。預(yù)取失效發(fā)生導(dǎo)致如下不利丟棄預(yù)取的指令,再次獲取正確分支目的地的指令,同時(shí)使得CPU在其等待狀態(tài)中運(yùn)行較長時(shí)間。另外,讀寫額外數(shù)據(jù)的需要使得增加了存儲(chǔ)器訪問并且增大了功耗。此外,頻繁無用的預(yù)取引起了惡化數(shù)據(jù)路徑中的流量擁塞的問題。用于減小預(yù)取無效的另一嘗試是使用被稱為分支預(yù)測(cè)的技術(shù)。下一行預(yù)取涉及通過預(yù)測(cè)下一行將永不會(huì)分支來預(yù)取此下一行,而分支預(yù)測(cè)特征在于基于過去的歷史預(yù)測(cè)分支方向,并且從預(yù)測(cè)的地址預(yù)取指令。分支預(yù)測(cè)是復(fù)雜的并且要求使用包含包括歷史表在內(nèi)的大電路面積的硬件。然而,通過分支預(yù)測(cè)得到的性能益處依賴于預(yù)測(cè)算法的效率,許多預(yù)測(cè)算法需要使用相對(duì)較大容量的存儲(chǔ)設(shè)備和復(fù)雜的硬件來實(shí)施。當(dāng)預(yù)測(cè)失敗時(shí),分支預(yù)測(cè)還造成與由下一行預(yù)取所引入的不利類似的不利。大多數(shù)實(shí)際程序它們的分支中的環(huán)路與例外處理的比率不成比例地高,從而分支預(yù)測(cè)的優(yōu)點(diǎn)通常勝于其缺點(diǎn)。盡管如此,一些應(yīng)用還是按照不管可以利用怎樣的預(yù)測(cè)算法都難以提高其預(yù)測(cè)性能的方式來構(gòu)建的。特別是,編解碼應(yīng)用傾向于使得它們的預(yù)測(cè)失效,除了回路的預(yù)測(cè)以外。隨著預(yù)測(cè)采樣數(shù)的比率自然希望被增大,用于實(shí)施此目的的方案在電路上變得越來越大并且越來越復(fù)雜,并且可能不會(huì)引起與實(shí)際電路的規(guī)模相稱的性能改善。與上述概括的用于僅在單方向中執(zhí)行預(yù)取的技術(shù)相對(duì),已經(jīng)提出了另一種技術(shù),
4其涉及在沒有預(yù)測(cè)的情況中在分支的兩個(gè)方向中預(yù)取指令以消除預(yù)取失效。與分支預(yù)測(cè)的技術(shù)相比,此技術(shù)能夠通過增加有限量的硬件來免除管線遲延。然而,不僅僅要被存儲(chǔ)用于預(yù)取的數(shù)據(jù)量簡(jiǎn)單被翻倍,而且不必要的數(shù)據(jù)總是必須被讀取。導(dǎo)致的數(shù)據(jù)路徑上的擁塞不利地影響了性能;增加的冗余電路使得電路結(jié)構(gòu)復(fù)雜化;并且增加的功耗也是不能忽視的。如上概括,現(xiàn)有的預(yù)取技術(shù)具有它們自己的優(yōu)點(diǎn)(預(yù)期能提升吞吐量)和缺點(diǎn) (增大了實(shí)現(xiàn)CPU的成本;分支預(yù)測(cè)處理的開銷)。對(duì)于這些技術(shù)中的每種技術(shù),存在成本和性能的折中。本發(fā)明是鑒于上述情況而做出的,并且提供了一種用于最小化在用于預(yù)取指令的下一行預(yù)取中所涉及的不利的創(chuàng)新性配置。在實(shí)現(xiàn)本發(fā)明中,根據(jù)本發(fā)明的一個(gè)實(shí)施例,提供了一種指令獲取設(shè)備,其包括 檢測(cè)狀態(tài)設(shè)定部件,被配置為設(shè)定其指令預(yù)取定時(shí)要被檢測(cè)的程序的執(zhí)行狀態(tài);程序執(zhí)行狀態(tài)生成部件,被配置為生成所述程序的當(dāng)前執(zhí)行狀態(tài);指令預(yù)取定時(shí)檢測(cè)部件,被配置為對(duì)所述程序的當(dāng)前執(zhí)行狀態(tài)與其設(shè)定執(zhí)行狀態(tài)進(jìn)行比較并且在兩者一致(match)的情況下檢測(cè)所述指令預(yù)取定時(shí);和指令預(yù)取部件,被配置為當(dāng)所述指令預(yù)取定時(shí)被檢測(cè)到時(shí)預(yù)取下一指令。該指令獲取設(shè)備提供了在預(yù)定執(zhí)行狀態(tài)被達(dá)到時(shí)預(yù)取下一指令的效果。優(yōu)選地,檢測(cè)狀態(tài)設(shè)定部件可以包括地址設(shè)定寄存器,地址設(shè)定寄存器被配置為設(shè)定其指令預(yù)取定時(shí)要被檢測(cè)的指令的地址的至少一部分;程序執(zhí)行狀態(tài)生成部件可以包括程序計(jì)數(shù)器,程序計(jì)數(shù)器被配置為保存當(dāng)前正在執(zhí)行的指令的地址作為所述程序的當(dāng)前執(zhí)行狀態(tài);并且指令預(yù)取定時(shí)檢測(cè)部件可以包括地址比較部件,地址比較部件被配置為對(duì)所述程序計(jì)數(shù)器上的值的至少一部分和地址設(shè)定寄存器中的值進(jìn)行比較并且在兩者一致的情況下檢測(cè)指令預(yù)取定時(shí)。此結(jié)構(gòu)提供了根據(jù)程序計(jì)數(shù)器的狀態(tài)來預(yù)取下一指令的效
: O 優(yōu)選地,本發(fā)明的此指令預(yù)取設(shè)備還可以包括指令分組保存部件,指令分組保存部件被配置為保存由使得程序指令序列分割成預(yù)定大小的指令有效載荷以及包括用于指定下一指令有效載荷的預(yù)取定時(shí)的預(yù)取定時(shí)信息的指令頭構(gòu)成的指令分組。在此指令預(yù)取設(shè)備中,檢測(cè)狀態(tài)設(shè)定部件可以基于預(yù)取定時(shí)信息來設(shè)定地址設(shè)定寄存器。此結(jié)構(gòu)提供了根據(jù)基于在指令頭中包括的預(yù)取定時(shí)信息而設(shè)定的指令地址來預(yù)取下一指令的效果。優(yōu)選地,檢測(cè)狀態(tài)設(shè)定部件可以包括設(shè)定步長地址寄存器,設(shè)定步長地址寄存器被配置為保存指示其指令預(yù)取定時(shí)要被檢測(cè)的指令的地址的設(shè)定粒度的步長值;和乘算部件,乘算部件被配置為通過將在預(yù)取定時(shí)信息中包括的步長計(jì)數(shù)與所述步長值相乘來設(shè)定地址設(shè)定寄存器。此結(jié)構(gòu)提供了根據(jù)基于步長值和步長計(jì)數(shù)而設(shè)定的指令地址來預(yù)取下一指令的效果。優(yōu)選地,本發(fā)明的此指令預(yù)取設(shè)備還可以包括指令分組保存部件,指令分組保存部件被配置為保存由使得程序指令序列分割成預(yù)定大小的指令有效載荷和包括分支預(yù)測(cè)信息的指令頭構(gòu)成的指令分組,分支預(yù)測(cè)信息指示在指令有效載荷中包括的分支指令分支到既不是包括在指令有效載荷也不是包括在下一指令有效載荷中的指令的可能性程度。在此指令預(yù)取設(shè)備中,檢測(cè)狀態(tài)設(shè)定部件可以基于分支預(yù)測(cè)信息來設(shè)定地址設(shè)定寄存器。此結(jié)構(gòu)提供了根據(jù)基于在指令頭中包括的分支預(yù)測(cè)信息而設(shè)定的指令地址來預(yù)取下一指令
5
優(yōu)選地,檢測(cè)狀態(tài)設(shè)定部件可以包括執(zhí)行次數(shù)設(shè)定寄存器,執(zhí)行次數(shù)設(shè)定寄存器被配置為將預(yù)定指令類型的執(zhí)行次數(shù)設(shè)定作為其指令預(yù)取定時(shí)要被檢測(cè)的所述程序的執(zhí)行狀態(tài);并且程序執(zhí)行狀態(tài)生成部件可以生成所述預(yù)定指令類型的當(dāng)前執(zhí)行次數(shù)作為所述程序的當(dāng)前執(zhí)行狀態(tài)。本此結(jié)構(gòu)提供了在預(yù)定類型的指令被執(zhí)行了預(yù)定次數(shù)時(shí)預(yù)取下一指令的效果。在此結(jié)構(gòu)中,程序執(zhí)行狀態(tài)生成部件可以優(yōu)選地包括指令類型設(shè)定寄存器,被配置為設(shè)定所述預(yù)定指令類型;指令類型比較部件,被配置為通過在當(dāng)前正執(zhí)行的指令的指令類型與所述預(yù)定指令類型之間進(jìn)行比較而檢測(cè)它們之間的匹配;和執(zhí)行次數(shù)計(jì)數(shù)器, 被配置為使得每當(dāng)指令類型比較部件檢測(cè)到當(dāng)前正執(zhí)行的指令的指令類型與所述預(yù)定指令類型之間的匹配時(shí),執(zhí)行次數(shù)計(jì)數(shù)器獲取所涉及的指令類型的執(zhí)行次數(shù)。根據(jù)本發(fā)明的另一實(shí)施例,提供了一種處理器,其包括檢測(cè)狀態(tài)設(shè)定部件,被配置為設(shè)定其指令預(yù)取定時(shí)要被檢測(cè)的程序的執(zhí)行狀態(tài);程序執(zhí)行狀態(tài)生成部件,被配置為生成所述程序的當(dāng)前執(zhí)行狀態(tài);指令預(yù)取定時(shí)檢測(cè)部件,被配置為對(duì)所述程序的當(dāng)前執(zhí)行狀態(tài)和其設(shè)定執(zhí)行狀態(tài)進(jìn)行比較并且在兩者一致的情況下檢測(cè)所述指令預(yù)取定時(shí);指令預(yù)取部件,被配置為當(dāng)所述指令預(yù)取定時(shí)被檢測(cè)到時(shí)預(yù)取下一指令;和指令執(zhí)行部件,被配置為執(zhí)行通過指令預(yù)取而獲得的指令。此處理器提供了在預(yù)定執(zhí)行狀態(tài)達(dá)到時(shí)預(yù)取下一指令的效果。根據(jù)如上所概括而例示的本發(fā)明,能夠最小化用于預(yù)取指令的下一行預(yù)取中所涉及的不利。


在閱讀了下面的描述和附圖之后,本發(fā)明的另外的目的和優(yōu)點(diǎn)將變得很明顯。圖1是示出本發(fā)明的第一實(shí)施例的處理器構(gòu)成部分的一般管線結(jié)構(gòu)的示意圖;圖2是示出第一實(shí)施例的處理器構(gòu)成部分的一般塊結(jié)構(gòu)的示意圖;圖3是示出對(duì)于第一實(shí)施例的一般指令分組結(jié)構(gòu)的示意圖;圖4是示出對(duì)于第一實(shí)施例的指令頭的一般字段結(jié)構(gòu)的示意圖;圖5是示出對(duì)于第一實(shí)施例的分支預(yù)測(cè)標(biāo)志的一般設(shè)置的示意圖;圖6是示出基于對(duì)指令辭典表的參考的壓縮一般被如何應(yīng)用于第一實(shí)施例的示意圖;圖7是示出對(duì)于第一實(shí)施例的一般如何改變用于基于對(duì)指令辭典表的參考的壓縮的分支預(yù)測(cè)標(biāo)志的示意圖;圖8是示出第一實(shí)施例生成指令分組所用的一般功能結(jié)構(gòu)的示意圖;圖9是示出第一實(shí)施例生成指令分組所用的一般過程的流程圖;圖10是示出第一實(shí)施例執(zhí)行指令所用的一般功能結(jié)構(gòu)的示意圖;圖11是示出第一實(shí)施例執(zhí)行指令所用的一般過程的流程圖;圖12是示出對(duì)于第一實(shí)施例的指令頭的字段結(jié)構(gòu)的變形例的示意圖;圖13是示出與本發(fā)明的第二實(shí)施例有關(guān)的在分支指令的布置與指令預(yù)取的開始位置之間的一般關(guān)系的示意圖;圖14A和14B是示出對(duì)于第二實(shí)施例的涉及預(yù)取開始地址設(shè)定寄存器的使用的配
6置示例的示意圖;圖15是示出對(duì)于第二實(shí)施例的涉及指令頭中的指令預(yù)取定時(shí)字段的使用的配置示例的示意圖;圖16是示出對(duì)于第二實(shí)施例的涉及預(yù)定指令執(zhí)行次數(shù)用作預(yù)取定時(shí)的配置示例的示意圖;圖17是示出對(duì)于第二實(shí)施例的如何在指令頭中一般地設(shè)定指令類型和執(zhí)行次數(shù)的示意圖;圖18是示出第二實(shí)施例執(zhí)行指令所用的一般功能結(jié)構(gòu)的示意圖;圖19是示出第二實(shí)施例執(zhí)行指令所用的一般過程的流程圖;圖20是示出與本發(fā)明第三實(shí)施例有關(guān)的用于加算控制處理的程序計(jì)數(shù)器的一般功能結(jié)構(gòu)的示意圖;圖21是示出對(duì)于第三實(shí)施例的加算控制寄存器的一般結(jié)構(gòu)的示意圖;圖22是示出第三實(shí)施例如何通過兩路分支來處理指令的示意圖;圖23是示出第三實(shí)施例如何通過多向分支來處理指令的示意圖;圖24A、24B、24C和24D是示出對(duì)于第三實(shí)施例的用于設(shè)定對(duì)于加算控制寄存器的值的一般指令集的示意圖;圖25是示出對(duì)于第三實(shí)施例的條件分支指令如何向加算控制寄存器設(shè)定值的示意圖;圖沈是示出對(duì)于第三實(shí)施例的控制寄存器改變指令如何為加算控制寄存器設(shè)定值的示意圖;圖27是示出第三實(shí)施例執(zhí)行指令所用的一般過程的流程圖;圖觀是示出本發(fā)明的第四實(shí)施例的處理器構(gòu)成部分的一般管線結(jié)構(gòu)的示意圖;圖四是示出第四實(shí)施例的處理器構(gòu)成部分的一般塊結(jié)構(gòu)的示意圖;圖30是示出對(duì)于第四實(shí)施例的分支指令和緩存行之間的一般關(guān)系的示意圖;圖31A和31B是示出第四實(shí)施例一般如何改變指令的布置的示意圖;圖32是示出第四實(shí)施例布置指令所用的一般功能結(jié)構(gòu)的示意圖;圖33是示出第四實(shí)施例布置指令所用的一般過程的流程圖;圖34A和34B是示出第四實(shí)施例如何一般地設(shè)定預(yù)取地址寄存器的示意圖;圖35是示出第四實(shí)施例執(zhí)行指令所用的一般功能結(jié)構(gòu)的示意圖;和圖36是示出第四實(shí)施例執(zhí)行指令所用的一般過程的流程圖。
具體實(shí)施例方式下面將描述本發(fā)明的優(yōu)選實(shí)施例。描述將按照以下標(biāo)題給出。1.第一實(shí)施例(用于使用分支預(yù)測(cè)信息來控制對(duì)指令預(yù)取的阻止)2.第二實(shí)施例(用于控制指令預(yù)取的定時(shí))3.第三實(shí)施例(用于通過以混合方式布置指令來均化指令預(yù)取的不利)4.第四實(shí)施例(用于通過固定分支目的地緩存行的布置來避免緩存行沖突)5.實(shí)施例的組合<1.第一實(shí)施例>
[處理器的結(jié)構(gòu)]圖1是示出本發(fā)明的第一實(shí)施例的處理器構(gòu)成部分的一般管線結(jié)構(gòu)的示意圖。此示例預(yù)先假定五個(gè)管線階段指令獲取階段(IF)ll、指令解碼階段(ID)21、寄存器獲取階段(RF)31、執(zhí)行階段(EX)41和存儲(chǔ)器訪問階段(MEM)51。這些管線以鎖存器19、29、39和 49而被劃界開。管線處理是與時(shí)鐘同步而被執(zhí)行的。指令獲取階段(IF) 11涉及執(zhí)行指令獲取處理。在指令獲取階段11處,程序計(jì)數(shù)器(PC) 18被加算部件12逐次增大。由程序計(jì)數(shù)器18指向的指令向下游被發(fā)送到指令解碼階段21。此外,指令獲取階段11包括指令緩存器(稍后討論),指令被預(yù)取到該指令緩存器。下一行預(yù)取部件13被用于預(yù)取下一行,S卩,包含當(dāng)前作為執(zhí)行目標(biāo)的指令的緩存行接下來的緩存行。指令解碼階段(ID) 21涉及對(duì)從指令獲取階段11提供來的指令進(jìn)行解碼。在指令解碼階段21處完成的解碼的結(jié)果被轉(zhuǎn)發(fā)到寄存器獲取階段(RF) 31。在分支指令的情況中, 指令的分支目的地地址被饋送到程序計(jì)數(shù)器(PC) 18。寄存器獲取階段(RF) 31涉及獲取指令執(zhí)行所必要的運(yùn)算元。對(duì)于若干管線處理器,運(yùn)算元訪問的目標(biāo)被限定為寄存器文件。在寄存器獲取階段31處所獲得的運(yùn)算元數(shù)據(jù)被提供到執(zhí)行階段(EX) 41。執(zhí)行階段(EX)41涉及使用運(yùn)算元數(shù)據(jù)執(zhí)行指令。例如,算數(shù)和邏輯運(yùn)算以及分支確定運(yùn)算被執(zhí)行。在執(zhí)行階段(EX)41處所獲得的執(zhí)行結(jié)果數(shù)據(jù)被存儲(chǔ)到寄存器文件中。在存儲(chǔ)指令的情況中,在存儲(chǔ)器訪問階段(MEM)51處對(duì)存儲(chǔ)器執(zhí)行寫操作。存儲(chǔ)器訪問階段(MEM)51涉及獲得對(duì)存儲(chǔ)器的訪問。在加載指令的情況中,對(duì)存儲(chǔ)器執(zhí)行讀訪問操作;在存儲(chǔ)指令的情況中,對(duì)存儲(chǔ)器執(zhí)行寫訪問操作。圖2是示出第一實(shí)施例的處理器構(gòu)成部分的一般塊結(jié)構(gòu)的示意圖。此處理器包括處理器核心110、指令緩存器120、數(shù)據(jù)緩存器130、下一行預(yù)取部件150和分組解復(fù)用器 160。此處理器還包含預(yù)取隊(duì)列170、指令隊(duì)列180、指令辭典索引191和指令辭典表192。 此外,此處理器被連接到系統(tǒng)存儲(chǔ)器140。處理器核心110包含處理器的除了指令獲取裝置以外的主要裝置,并且包括程序計(jì)數(shù)器111、指令寄存器112、指令解碼器113、執(zhí)行部件114和寄存器文件115。程序計(jì)數(shù)器111逐次對(duì)作為執(zhí)行目標(biāo)的指令的地址進(jìn)行計(jì)數(shù)。指令寄存器112保存作為程序計(jì)數(shù)器 111執(zhí)行目標(biāo)的指令。指令解碼器113對(duì)由指令寄存器112所保存的指令進(jìn)行解碼。執(zhí)行部件114執(zhí)行被指令解碼器113解碼了的指令。寄存器文件115提供保存執(zhí)行部件114執(zhí)行指令所必要的運(yùn)算元和其他數(shù)據(jù)。指令緩存器120是保存存儲(chǔ)在系統(tǒng)存儲(chǔ)器140中的指令拷貝的緩存器存儲(chǔ)器。當(dāng)處理器核心110訪問指令時(shí),指令緩存器120比系統(tǒng)存儲(chǔ)器140能夠允許處理器核心110更快速地訪問所涉及的指令。因此,優(yōu)選地盡可能預(yù)先將指令保存在指令緩存器120中。如果在對(duì)必要指令訪問時(shí)發(fā)現(xiàn)其被保存在指令緩存器120中,則訪問被稱為命中(hit);如果發(fā)現(xiàn)必要指令未被緩存,則訪問被稱為無效命中(miss hit)。數(shù)據(jù)緩存器130是保存存儲(chǔ)在系統(tǒng)存儲(chǔ)器140中的數(shù)據(jù)的拷貝的存儲(chǔ)器緩存器。 當(dāng)處理器核心Iio訪問數(shù)據(jù)時(shí),數(shù)據(jù)緩存器130比系統(tǒng)存儲(chǔ)器140能夠允許處理器核心110 更快地訪問數(shù)據(jù)。因此,優(yōu)選地盡可能預(yù)先將數(shù)據(jù)保存在指令緩存器120中。正如對(duì)于指令緩存器120那樣,如果在對(duì)必要數(shù)據(jù)訪問時(shí)發(fā)現(xiàn)其被保存在數(shù)據(jù)緩存器130中,則訪問被稱為命中;如果發(fā)現(xiàn)必要數(shù)據(jù)未被緩存,則訪問被稱為無效命中。與指令緩存器120不同, 數(shù)據(jù)緩存器130還用于寫訪問操作。下一行預(yù)取部件150被用于從系統(tǒng)存儲(chǔ)器140中預(yù)取下一行給指令緩存器120, 下一行即作為被預(yù)測(cè)為需要的指令的下一緩存行。下一行預(yù)取部件150對(duì)應(yīng)于管線結(jié)構(gòu)的下一行預(yù)取部件13,并且屬于指令獲取階段(IF) 11。下一行預(yù)取部件150監(jiān)控程序計(jì)數(shù)器 111的狀態(tài),并按照適當(dāng)?shù)臅r(shí)控方式向系統(tǒng)存儲(chǔ)器140發(fā)出用于從指令緩存器120預(yù)取指令緩存器120的緩存行的預(yù)取請(qǐng)求。分組解復(fù)用器160將從系統(tǒng)存儲(chǔ)器140取回的指令分組分割成指令頭和指令有效載荷。指令分組的結(jié)構(gòu)稍后將被描述。給定指令的緩存行被包含在其指令有效載荷中。預(yù)取隊(duì)列170是保存指令的包含在它們的有效載荷中的緩存行的隊(duì)列。在預(yù)取隊(duì)列170中所保存的緩存行從第一緩存行開始起被順次輸入指令緩存器120。指令隊(duì)列180是保存根據(jù)程序計(jì)數(shù)器111從指令緩存器120取回的指令的緩存行的隊(duì)列。指令辭典索引191和指令辭典表192被用于基于對(duì)指令辭典表的參考來執(zhí)行壓縮指令。當(dāng)由被設(shè)計(jì)為以高頻率出現(xiàn)的一串指令構(gòu)成的宏第一次出現(xiàn)時(shí),使用指令辭典寄存指令將該指令宏登記。當(dāng)該宏下次出現(xiàn)時(shí),其被有關(guān)指令辭典參考指令的單個(gè)指令替代。指令辭典表192保存每個(gè)由一串指令構(gòu)成的宏。指令辭典索引191用作用來訪問指令辭典表 192的索引。如何基于對(duì)指令辭典表的參考來使用壓縮指令將稍后討論。系統(tǒng)存儲(chǔ)器140存儲(chǔ)作為執(zhí)行目標(biāo)的指令以及用于執(zhí)行所涉及的指令必要的數(shù)據(jù)。處理器核心Iio請(qǐng)求對(duì)系統(tǒng)存儲(chǔ)器140的讀或?qū)懺L問操作。然而,只要在指令緩存器 120中或在數(shù)據(jù)緩存器130中存在命中,此請(qǐng)求就不會(huì)發(fā)生。順便提及,系統(tǒng)存儲(chǔ)器140是在所附權(quán)利要求中描述的指令分組保存部件的示例。在上述塊結(jié)構(gòu)示例中,程序計(jì)數(shù)器111、指令緩存器120、下一行預(yù)取部件150、分組解復(fù)用器160、預(yù)取隊(duì)列170和指令隊(duì)列180屬于圖1中所示的指令獲取階段(IF) 11。 此外,指令寄存器112、指令辭典索引191和指令辭典表192可以被認(rèn)為是指令獲取階段 (IF)Il的構(gòu)成部分。類似地,指令解碼器113屬于指令解碼階段(ID)21。而寄存器文件 115屬于寄存器獲取階段(RF)31。執(zhí)行部件114屬于執(zhí)行階段(EX)41。數(shù)據(jù)緩存器130和系統(tǒng)存儲(chǔ)器140屬于存儲(chǔ)器訪問階段(MEM)51。[指令分組的結(jié)構(gòu)]圖3是示出對(duì)于第一實(shí)施例的指令分組300的一般結(jié)構(gòu)的示意圖。指令分組300 包括指令頭310和指令有效載荷320。指令有效載荷320是容納至少一個(gè)指令緩存行的區(qū)域。在此示例中,假定“η” (η是至少為1的整數(shù))個(gè)那么多的每個(gè)1 字節(jié)的指令緩存行被保存在指令有效載荷320中。指令頭310被附接到每個(gè)指令有效載荷320并且保存有關(guān)指令有效載荷320的信息。圖4是示出對(duì)于第一實(shí)施例的指令頭310的一般字段結(jié)構(gòu)的示意圖。指令頭310 的第一結(jié)構(gòu)示例包括分支預(yù)測(cè)標(biāo)志字段311、指令預(yù)取定時(shí)字段312、指令有效載荷壓縮標(biāo)志字段313、指令有效載荷長度字段314和預(yù)取設(shè)定字段315。對(duì)于此示例,指令頭310被假定為32比特長。從最低有效位(LSB)開始,分支預(yù)測(cè)標(biāo)志字段311被分配比特0,之后是
9指令預(yù)取定時(shí)字段312被分配比特1和2,以及指令有效載荷壓縮標(biāo)志字段313被分配比特 3。此外,指令有效載荷長度字段314被分配比特4-7,并且預(yù)取設(shè)定字段315被分配比特 8-11。由其余的比特12-31形成的20比特未使用字段316可以用于其它目的,這將在稍后討論。分支預(yù)測(cè)標(biāo)志字段311是指示在指令有效載荷320中存在分支指令以及該指令很可能既不在指令有效載荷320內(nèi)分支也不分支到下一指令有效載荷的字段。也就是說,如果在預(yù)取時(shí)很有可能發(fā)現(xiàn)不希望下一行,則分支預(yù)測(cè)標(biāo)志311 —般可指示“1”;否則分支預(yù)測(cè)標(biāo)志311可指示“0”。順便提及,分支預(yù)測(cè)標(biāo)志311是在所附權(quán)利要求中描述的分支預(yù)測(cè)信息的示例。指令預(yù)取定時(shí)字段312是指示用于執(zhí)行指令預(yù)取的定時(shí)的字段。指令預(yù)取定時(shí)字段312將結(jié)合稍后描述的第二實(shí)施例來被討論。順便提及,指令預(yù)取定時(shí)312是在所附權(quán)利要求中描述的預(yù)取定時(shí)信息的示例。指令有效載荷壓縮標(biāo)志313是指示指令有效載荷320是否經(jīng)歷了無損壓縮的字段。無損壓縮是指使得沒有數(shù)據(jù)損失的一種可逆壓縮。經(jīng)歷了無損壓縮,指令有效載荷320 使其全部比特序列被壓縮。落入無損壓縮的種類有公知的哈夫曼(Huffman)編碼、算數(shù)編碼以及LZ編碼等等。如果指令有效載荷320被發(fā)現(xiàn)經(jīng)歷了無損壓縮,則其需要被擴(kuò)展;否則指令有效載荷32的指令不能被執(zhí)行。因此,如果指令有效載荷壓縮標(biāo)志313指示“ 1 ”,則指令在被解碼之前要被擴(kuò)展。使得一個(gè)指令緩存行經(jīng)歷無損壓縮的益處可以忽視,因?yàn)橐活A(yù)取的數(shù)據(jù)量沒有被減少。編碼效率只有在所涉及的比特序列較長時(shí)才增大。如果分支指令被包括,則指令分組需要被分割成基本塊。指令有效載荷長度字段314是指示指令有效載荷320的大小的字段。例如,指令有效載荷320的大小可以在指令緩存行計(jì)數(shù)的增大中被指示出。前面的示例預(yù)先假定“η” 個(gè)那么多的1 字節(jié)指令緩存行被存儲(chǔ)在指令有效載荷320中。在此情況中,值“η”被設(shè)定為指令有效載荷長度314。預(yù)取設(shè)定字段315是指示用于預(yù)設(shè)作為預(yù)取目標(biāo)的地址的字段。預(yù)取設(shè)定字段 315將結(jié)合稍后描述的第四實(shí)施例來被討論。[分支預(yù)測(cè)標(biāo)志]圖5是示出對(duì)于第一實(shí)施例的分支預(yù)測(cè)標(biāo)志311的一般設(shè)置的示意圖。此示例預(yù)先假定分支指令$1被包括在指令分組#1的有效載荷中并且在指令分組#2和#3中不包括分支指令。分支指令$1的分支目的地是在指令分組#3的指令有效載荷內(nèi)的指令地址。并且分支到該地址的可能性被預(yù)測(cè)為很高。因此,在此情況中,在指令分組#1的指令頭中的分支預(yù)測(cè)標(biāo)志311被設(shè)定為“1”。另一方面,在指令分組#2和#3的指令頭中的分支預(yù)測(cè)標(biāo)志311被設(shè)定為“0”,因?yàn)樵谥噶罘纸M#2和#3不包括分支指令。如稍后所討論的,分支預(yù)測(cè)標(biāo)志311被假定是在編譯時(shí)段一般基于簡(jiǎn)檔(profile)而靜態(tài)地被設(shè)定的。當(dāng)從指令分組#1來看時(shí),下一行被發(fā)現(xiàn)處于指令分組#2中,并且分支目的地行被發(fā)現(xiàn)處于指令分組 #3中。被如上所說明地設(shè)定的分支預(yù)測(cè)標(biāo)志311在指令預(yù)取時(shí)被參考。當(dāng)設(shè)定為“1”時(shí), 分支預(yù)測(cè)標(biāo)志311停止預(yù)取下一緩存行。這避免了被預(yù)測(cè)是不希望的指令預(yù)取。同時(shí),如果連續(xù)發(fā)生分支預(yù)測(cè)標(biāo)志311被設(shè)定為“1”的情況,則對(duì)指令預(yù)取的抑制會(huì)使得指令預(yù)取裝置不能夠被有效地利用。為了避免這樣連續(xù)的分支預(yù)測(cè)標(biāo)志311被設(shè)定為“1”的情況,考慮通過基于對(duì)指令辭典表的參考的壓縮處理來壓縮分支指令間的指令可能是有利的。這種基于對(duì)指令辭典表的參考的壓縮與和指令有效載荷壓縮標(biāo)志313有關(guān)的無損壓縮是不同的。[基于對(duì)指令辭典表的參考的壓縮]圖6是示出基于對(duì)指令辭典表的參考的壓縮一般被如何應(yīng)用于第一實(shí)施例的示意圖。在圖6中左邊的未壓縮碼示出如所示那樣放置的未壓縮指令序列331到335。這里假定指令序列331、332和335是相同的碼。還假定指令序列333和334是相同的碼。在圖6的中間的壓縮碼中,指令辭典登記指令% 1被置于指令序列331的緊后。此布置使得指令序列331的內(nèi)容被登記在指令辭典表192的區(qū)域% 1 (351)中。隨后,當(dāng)指令辭典參考指令<% 1(342)被執(zhí)行時(shí),指令辭典表192的區(qū)域% 1(351)被參考,并且與指令序列332相對(duì)應(yīng)的內(nèi)容在被饋送到指令隊(duì)列180之前被擴(kuò)展。此外,在此壓縮碼中,指令辭典登記指令% 2被置于指令序列333的緊后。此布置使得指令序列333的內(nèi)容被登記在指令辭典表192的區(qū)域% 2(35 中。隨后,當(dāng)指令辭典參考指令% 2(344)被執(zhí)行時(shí),指令辭典表192的區(qū)域% 2(352)被參考,并且與指令序列 334相對(duì)應(yīng)的內(nèi)容在被饋送到指令隊(duì)列180之前被擴(kuò)展。此外,當(dāng)指令辭典參考指令% 1 (345)被執(zhí)行時(shí),指令辭典表192的區(qū)域% 1 (351) 被參考,并且與指令序列335相對(duì)應(yīng)的內(nèi)容在被饋送到指令隊(duì)列180之前被擴(kuò)展。如上所述,借助指令辭典表192執(zhí)行了對(duì)指令序列的壓縮處理。此特征可用于如下所述改變分支預(yù)測(cè)標(biāo)志311的設(shè)置。圖7是示出對(duì)于第一實(shí)施例的一般如何改變用于基于對(duì)指令辭典表的參考的壓縮的分支預(yù)測(cè)標(biāo)志311的示意圖。在如在圖7中左邊所示指令分組#1和#2中分支預(yù)測(cè)標(biāo)志311被設(shè)定為“1”的情形中,指令預(yù)取將不被連續(xù)執(zhí)行。在此情況中,嘗試通過使用上述指令辭典表192的指令壓縮來防止分支預(yù)測(cè)標(biāo)志311被連續(xù)設(shè)定為“1”。也就是說,如在圖7中右邊所示,分支指令$1和$2之間的指令使用指令辭典表 192被壓縮,從而在指令分組#2中包括的分支指令$2被移動(dòng)到指令分組#1’。通過分支指令$2被如此從指令分組#2移除,指令分組#2,的分支預(yù)測(cè)標(biāo)志311可以被設(shè)定為“0”。一般而言,基于對(duì)指令辭典表的參考的壓縮指令可能比普通指令需要更大數(shù)目的解碼周期。因此,將此類型的壓縮指令應(yīng)用到所有指令可能與期望相反地會(huì)大大地惡化處理能力。盡管如此,此配置在存在以高的出現(xiàn)頻率為特征的指令宏的情況中仍有效地提供高壓縮效率。[指令分組生成處理]圖8是示出第一實(shí)施例生成指令分組所用的一般功能結(jié)構(gòu)的示意圖。此示例包括程序保存部件411、分支簡(jiǎn)檔保存部件412、指令分組生成部件420、分支預(yù)測(cè)標(biāo)志設(shè)定部件 430、指令壓縮部件440和指令分組保存部件413。優(yōu)選地在編譯時(shí)段或者鏈接時(shí)段生成指令分組。如果動(dòng)態(tài)鏈接是在可重定位OS的情況下執(zhí)行的,則還可在執(zhí)行時(shí)段生成指令分組。程序保存部件411保存要生成其指令分組的程序。分支簡(jiǎn)檔保存部件412保存由程序保存部件411保存的程序中所包括的分支指令的分支簡(jiǎn)檔。分支簡(jiǎn)檔是通過預(yù)先分析
11或執(zhí)行程序而得到的。在無條件的分支指令的情況中,是否執(zhí)行分支在許多情況中可以通過分析程序來確定。甚至對(duì)于無條件的分支指令,可以通過執(zhí)行程序來確定分支的統(tǒng)計(jì)概率。指令分組生成部件420通過將在程序保存部件411中保存的程序分割成固定大小以生成指令有效載荷320并且向所生成的指令有效載荷320附接指令頭310來生成指令分組300。如上所述,假定“η”個(gè)那么多的1 字節(jié)的指令緩存行被存儲(chǔ)在指令有效載荷320中。分支預(yù)測(cè)標(biāo)志設(shè)定部件430在由指令分組生成部件420所生成的指令頭310中設(shè)定分支預(yù)測(cè)標(biāo)志311。通過參考在分支簡(jiǎn)檔保存部件412中保存的分支簡(jiǎn)檔,分支預(yù)測(cè)標(biāo)志設(shè)定部件430預(yù)測(cè)在指令有效載荷320中包括的分支指令的分支目的地以及分支指令的分支概率來設(shè)定分支預(yù)測(cè)標(biāo)志311。如果在指令有效載荷320中發(fā)現(xiàn)分支指令并且如果該指令很可能既不在指令有效載荷320中分支也不分支到下一指令有效載荷,則“1”被設(shè)定給分支預(yù)測(cè)標(biāo)志311 ;否則“0”被設(shè)定給分支預(yù)測(cè)標(biāo)志311。順便提及,分支預(yù)測(cè)標(biāo)志設(shè)定部件430是在所附權(quán)利要求中描述的分支預(yù)測(cè)信息設(shè)定部件的示例。指令壓縮部件440對(duì)指令有效載荷320中包括的指令進(jìn)行壓縮。為了使用指令辭典表192來壓縮指令,指令壓縮部件440檢測(cè)以高頻率出現(xiàn)的指令宏。當(dāng)這樣的指令宏第一次被檢測(cè)到出現(xiàn)時(shí),使用指令辭典寄存指令將此指令宏登記。當(dāng)由一串指令構(gòu)成的該宏下一次出現(xiàn)時(shí),其被有關(guān)指令辭典參考指令的單個(gè)指令替代。結(jié)果,如果分支指令的布置被改變,則分支預(yù)測(cè)標(biāo)志311被再次設(shè)定。如果整個(gè)指令有效載荷320被發(fā)現(xiàn)經(jīng)歷了無損壓縮,則指令頭310中的指令有效載荷壓縮標(biāo)志313被設(shè)定為“1”。指令分組保存部件413將從指令壓縮部件440輸出的指令分組300保存。圖9是示出第一實(shí)施例生成指令分組所用的一般過程的流程圖。首先,指令分組生成部件420通過將在程序保存部件411中保存的程序分割成固定大小以生成指令有效載荷320并且向所生成的指令有效載荷320附接指令頭310來生成指令分組300(在步驟S911中)。然后,分支預(yù)測(cè)標(biāo)志設(shè)定部件430判斷在指令有效載荷 320中是否發(fā)現(xiàn)了分支指令,以及該指令是否很可能既不在指令有效載荷320中分支又不分支到下一指令有效載荷(在步驟S912中)。如果判定這樣的分支發(fā)生的概率很高,則“1” 被設(shè)定給分支預(yù)測(cè)標(biāo)志311(在步驟S913中)。否則,“0”被設(shè)定給分支預(yù)測(cè)標(biāo)志311。如果判定在連續(xù)的指令分組300的分支預(yù)測(cè)標(biāo)志311中設(shè)定了“1” (在步驟S914 中),則指令壓縮部件440使用指令辭典表192壓縮指令有效載荷320內(nèi)的指令(在步驟 S915中)。也可以使得整個(gè)指令有效載荷320經(jīng)歷無損壓縮。在此情況中,指令頭310的指令有效載荷壓縮標(biāo)志313被設(shè)定為“1”。[指令執(zhí)行處理]圖10是示出第一實(shí)施例執(zhí)行指令所用的一般功能結(jié)構(gòu)的示意圖。此示例包括指令分組保存部件413、指令分組分離部件450、分支預(yù)測(cè)標(biāo)志判斷部件460、指令預(yù)取部件 470、指令擴(kuò)展部件480和指令執(zhí)行部件490。指令分組分離部件450將在指令分組保存部件413中保存的指令分組300分離成指令頭310和指令有效載荷320。分支預(yù)測(cè)標(biāo)志判斷部件460參考指令頭310中的分支預(yù)測(cè)標(biāo)志311來判斷是否通過指令緩存器120預(yù)取下一緩存行。如果判定預(yù)取應(yīng)被執(zhí)行,則分支預(yù)測(cè)標(biāo)志判斷部件460 請(qǐng)求指令預(yù)取部件470執(zhí)行指令預(yù)取。順便提及,分支預(yù)測(cè)標(biāo)志判斷部件460是在所附權(quán)利要求中描述的分支預(yù)測(cè)信息確定部件的示例。當(dāng)分支預(yù)測(cè)標(biāo)志判斷部件460請(qǐng)求執(zhí)行指令預(yù)取時(shí),指令預(yù)取部件470向系統(tǒng)存儲(chǔ)器140發(fā)出針對(duì)下一緩存行的請(qǐng)求。所預(yù)取的指令被保存在指令緩存器120中,并且如果指令流沒有發(fā)生改變的話,則其然后被提供給指令執(zhí)行部件490。如果指令頭310中指令有效載荷壓縮標(biāo)志313被發(fā)現(xiàn)設(shè)定為“ 1 ”,則指令擴(kuò)展部件 480將經(jīng)歷了無損壓縮的指令有效載荷320擴(kuò)展成可解碼的指令序列。如果指令頭310中的指令有效載荷壓縮標(biāo)志313被發(fā)現(xiàn)沒有設(shè)定為“ 1 ”,則指令擴(kuò)展部件480無改變地輸出指令有效載荷320中的指令。指令執(zhí)行部件490執(zhí)行從指令擴(kuò)展部件480輸出的指令序列。如果是基于對(duì)指令辭典表的參考而經(jīng)歷了壓縮的指令序列,則指令執(zhí)行部件490通過執(zhí)行指令辭典寄存指令和指令辭典參考指令來擴(kuò)展此指令。同時(shí),在無損壓縮的情況中,此指令序列不能按原樣被解碼;其需要由指令擴(kuò)展部件480擴(kuò)展。圖11是示出第一實(shí)施例執(zhí)行指令所用的一般過程的流程圖。首先,指令分組分離部件450將指令分組保存部件413中保存的指令分組300分離成指令頭310和指令有效載荷320 (在步驟S921中)。然后。分支預(yù)測(cè)標(biāo)志判斷部件460 判斷指令頭310中的分支預(yù)測(cè)標(biāo)志311 (在步驟S922中)。如果判定“ 1”被設(shè)定給分支預(yù)測(cè)標(biāo)志311,則指令預(yù)取被阻止(在步驟S923中)。如果判定“0”被設(shè)定,則指令預(yù)取部件 470執(zhí)行指令預(yù)取(在步驟S9M中)。如果判定指令頭310中的指令有效載荷壓縮標(biāo)志313被設(shè)定為“1” (在步驟S925 中),則指令擴(kuò)展部件480對(duì)經(jīng)歷了無損壓縮的指令有效載荷320進(jìn)行擴(kuò)展(在步驟中)。如此獲得的指令被指令執(zhí)行部件490執(zhí)行(在步驟S927中)。在基于對(duì)指令辭典表的參考而經(jīng)歷了壓縮的指令序列的情況中,指令執(zhí)行部件490通過執(zhí)行指令辭典寄存指令和指令辭典參考指令對(duì)每個(gè)指令進(jìn)行擴(kuò)展。順便提及,步驟S921是在所附權(quán)利要求中描述的分離指令分組的步驟的示例。步驟S922是在所附權(quán)利要求中描述的確定分支預(yù)測(cè)信息的步驟的示例。步驟S923和S9M 是在所附權(quán)利要求中描述的預(yù)取指令的步驟的示例。如上所述,根據(jù)本發(fā)明的第一實(shí)施例,能夠通過預(yù)先適當(dāng)?shù)卦O(shè)定分支預(yù)測(cè)標(biāo)志311 來阻止不必要的指令預(yù)取。[變形例]圖12是示出對(duì)于第一實(shí)施例的指令頭310的字段結(jié)構(gòu)的變形例的示意圖。在圖4 中的字段結(jié)構(gòu)的示例中,比特12-31的20比特區(qū)域被示為未使用區(qū)域316,而圖12的變形例涉及在20比特區(qū)域317中保存指令有效載荷的開頭指令。雖然第一實(shí)施例預(yù)先假定了 32比特長的指令集,然而可以通過諸如從指令字段中去除不使用的部分以及減少運(yùn)算元之類的配置來將此開頭指令緊湊為20比特。此20比特指令然后被嵌入在區(qū)域317中。因?yàn)榇碎_頭指令被嵌入在區(qū)域317中,所以指令有效載荷320的大小被減少了一個(gè)指令,S卩,減少了 32比特。
13
在上述示例中,開頭指令被示為緊湊為20比特。然而,此緊湊的指令的比特寬度不限于20比特。此比特寬度可以與其它字段相關(guān)地被適當(dāng)?shù)卮_定。<2.第二實(shí)施例〉上述第一實(shí)施例預(yù)先假定使用指令分組來管理程序。然而,此類管理對(duì)于本發(fā)明的第二實(shí)施例不是強(qiáng)制性的。下面首先說明無需借助指令分組的指令預(yù)取控制,之后說明使用指令分組的指令預(yù)取。第二實(shí)施例的管線結(jié)構(gòu)和塊結(jié)構(gòu)與第一實(shí)施例的那些相同,并且因此將不對(duì)它們進(jìn)行討論。[分支指令布置和指令預(yù)取開始位置]圖13是示出與本發(fā)明的第二實(shí)施例有關(guān)的在分支指令布置與指令預(yù)取開始位置之間的一般關(guān)系的示意圖。在緩存行#1中發(fā)現(xiàn)的分支指令$1的分支目的地被包括在緩存行#3中。因此,如果分支指令$1被執(zhí)行并且從而相應(yīng)地分支被實(shí)現(xiàn),則緩存行#1接下來的緩存行#2即便被預(yù)取也將被浪費(fèi)。現(xiàn)在假定緩存器#2的預(yù)取從預(yù)取開始位置A開始。在此點(diǎn)處,執(zhí)行分支指令$1 的結(jié)果是未知的,所以緩存器#2的預(yù)取可被證明是不必要的。另一方面,如果緩存器#2的預(yù)取從預(yù)取開始位置B開始,則執(zhí)行分支指令$1的結(jié)果已經(jīng)知道,所以可以阻止對(duì)緩存器 #2的不必要的預(yù)取。如上所述,預(yù)取開始位置可影響是否要有效阻止對(duì)下一行預(yù)取的判斷。根據(jù)上面給出的示例,預(yù)取開始位置越靠后,越容易知道執(zhí)行分支指令的結(jié)果,這對(duì)于阻止不必要的預(yù)取越有利。另一方面,如果預(yù)取開始位置太靠后,則預(yù)取不能即時(shí)執(zhí)行,這可導(dǎo)致指令管線中的指令等待狀態(tài)。鑒于這些考慮,第二實(shí)施例被配置為按照預(yù)先建立的適當(dāng)?shù)臅r(shí)控方式執(zhí)行指令預(yù)取的裝置。[向預(yù)取開始地址設(shè)定寄存器設(shè)定定時(shí)]圖14A和圖14B是示出對(duì)于第二實(shí)施例的涉及預(yù)取開始地址設(shè)定寄存器的使用的配置示例的示意圖。如圖14A所示,此配置示例包括構(gòu)成下一行預(yù)取部件150的部分的預(yù)取開始地址設(shè)定寄存器153和地址比較部件154。預(yù)取開始地址設(shè)定寄存器153被用于設(shè)定每個(gè)緩存行中從其開始下一行預(yù)取的地址。在預(yù)取開始地址設(shè)定寄存器153中要設(shè)定的地址可以是在緩存行內(nèi)的相對(duì)地址。假定此地址是在編譯時(shí)段例如基于程序的分支指令頻率而確定的。順便提及,預(yù)取開始地址設(shè)定寄存器153是在所附權(quán)利要求中描述的地址設(shè)定寄存器的示例。地址比較部件巧4對(duì)在預(yù)取開始地址設(shè)定寄存器153中設(shè)定的地址與程序計(jì)數(shù)器 111的內(nèi)容進(jìn)行比較。當(dāng)通過有關(guān)緩存行中的相對(duì)地址的比較而檢測(cè)到匹配時(shí),地址比較部件IM發(fā)出下一行預(yù)取請(qǐng)求。根據(jù)上述配置示例,緩存行中的理想位置可以被選作為預(yù)取開始地址設(shè)定寄存器 153設(shè)定的預(yù)期開始地址。然后,可由地址比較部件巧4檢測(cè)匹配。圖14B是示出如所描述而設(shè)定的地址的示例。假定在緩存行中設(shè)立了約四個(gè)預(yù)期開始位置。當(dāng)緩存行被假定為1 字節(jié)長時(shí),緩存行可以以32字節(jié)的間隔被分割來設(shè)立四個(gè)位置開頭(字節(jié)0),字節(jié)32、字節(jié)64(中間)和字節(jié)96。如果指令集被假定包含每個(gè)4 字節(jié)(34)比特長的指令,則每個(gè)指令地址的二進(jìn)制符號(hào)中的低2比特可以忽略。因此,在此情況中,只需要比較從比特3到比特7的低5比特。
14
[指令頭的使用]圖15是示出對(duì)于第二實(shí)施例的涉及指令頭310中的指令預(yù)取定時(shí)字段312的使用的配置示例的示意圖。此配置示例使用了指令頭310中的指令預(yù)取定時(shí)字段312,并且假定上面結(jié)合第一實(shí)施例說明的指令分組被使用。此外,下一行預(yù)取部件150被構(gòu)建為除了包括圖14A中所示的預(yù)取開始地址設(shè)定寄存器153和地址比較部件154以外,還包括設(shè)定步長地址寄存器151和乘算部件152。設(shè)定步長地址寄存器151被用于保存用于設(shè)定預(yù)取開始地址的粒度,作為步長值。例如,如果正如其中預(yù)取開始位置被設(shè)立在緩存行的開頭(字節(jié)0)、字節(jié)32、字節(jié)64 和字節(jié)96處的前述示例那樣,步長值被設(shè)定為32字節(jié),則值“32”被保存在設(shè)定步長地址寄存器151中。乘算部件152被用于將指令預(yù)取定時(shí)字段312中的值與在設(shè)定步長地址寄存器 151中保存的步長值相乘。因?yàn)槿缟纤鲋噶铑A(yù)取定時(shí)字段312為2比特寬,所以該字段用其中保存的步長計(jì)數(shù)乘以由設(shè)定步長地址寄存器151指示的步長值補(bǔ)充。因此,在指令頭 310的指令預(yù)取定時(shí)字段312中,“00”被設(shè)定以表示緩存行的開頭(字節(jié)0),“01”表示字節(jié)32、“10”表示字節(jié)64并且“11”表示字節(jié)96。乘算部件152的乘算的結(jié)果被保存在預(yù)取開始地址設(shè)定寄存器153中。此配置的其余配置與圖14A中的那些相同。地址比較部件巧4將預(yù)取開始地址設(shè)定寄存器153中保存的地址與程序計(jì)數(shù)器111的內(nèi)容進(jìn)行比較。當(dāng)檢測(cè)到有關(guān)緩存行中的相對(duì)地址的匹配時(shí),地址比較部件巧4發(fā)出下一行預(yù)取請(qǐng)求。為了輔助乘算部件152的乘算或地址比較部件154的地址比較,步長值應(yīng)優(yōu)選為 2的η次冪,“η”是整數(shù)。根據(jù)上述配置示例,通過使用指令頭310中的指令預(yù)取定時(shí)字段312,預(yù)取開始地址可以被設(shè)定給預(yù)取開始地址設(shè)定寄存器153。[預(yù)定指令計(jì)數(shù)被用于預(yù)取定時(shí)的情況]圖16是示出對(duì)于第二實(shí)施例的涉及預(yù)定指令執(zhí)行次數(shù)用作預(yù)取定時(shí)的配置示例的示意圖。在上述圖14Α、14Β和15的配置示例中,緩存行中的固定位置被設(shè)立用作預(yù)取定時(shí)。在此配置示例中,相對(duì)照地,預(yù)取定時(shí)在特定類型的指令已經(jīng)被執(zhí)行了預(yù)定次數(shù)時(shí)被識(shí)別出。此配置包括構(gòu)成下一行預(yù)取部件150的部分的指令類型設(shè)定寄存器155、執(zhí)行次數(shù)設(shè)定寄存器156、指令類型比較部件157、執(zhí)行次數(shù)計(jì)數(shù)器158和執(zhí)行次數(shù)比較部件159。指令類型設(shè)定寄存器155被用于設(shè)定要計(jì)算其執(zhí)行次數(shù)的指令的類型??蓱?yīng)用的指令類型可以包括諸如除算指令和加載指令之類的具有相對(duì)長潛伏期的指令,以及分支指令。這里可以設(shè)定長潛伏期型指令,是因?yàn)榧词闺S后的指令或多或少被延遲,整個(gè)指令執(zhí)行也基本上不受影響。還可以設(shè)定分支型指令,是因?yàn)榇嬖谌缟厦鎱⒖紙D13所說明的分支指令可以優(yōu)選被等待以便確定隨后的指令的情況。執(zhí)行次數(shù)設(shè)定寄存器156被用于設(shè)定與在指令類型設(shè)定寄存器155中設(shè)定的指令類型相對(duì)應(yīng)的指令的執(zhí)行次數(shù)。當(dāng)相應(yīng)指令被執(zhí)行了在執(zhí)行次數(shù)設(shè)定寄存器156中設(shè)定的次數(shù)時(shí),執(zhí)行次數(shù)設(shè)定寄存器156發(fā)出下一行預(yù)取請(qǐng)求。指令類型和執(zhí)行次數(shù)可以在編譯時(shí)段靜態(tài)地確定,或者在執(zhí)行時(shí)段根據(jù)在簡(jiǎn)檔數(shù)據(jù)中包括的指令出現(xiàn)頻率而被動(dòng)態(tài)地確定。
指令類型比較部件157將在指令寄存器112中保存的指令的類型與在指令類型設(shè)定寄存器155中設(shè)定的指令類型進(jìn)行比較以確定匹配。每當(dāng)檢測(cè)到匹配時(shí),指令類型比較部件157向執(zhí)行次數(shù)計(jì)數(shù)器158輸出計(jì)數(shù)觸發(fā)。執(zhí)行次數(shù)計(jì)數(shù)器158計(jì)算與在指令類型設(shè)定寄存器155中設(shè)定的指令類型相應(yīng)的指令的執(zhí)行次數(shù)。執(zhí)行次數(shù)計(jì)數(shù)器158包括加算部件1581和計(jì)數(shù)值寄存器1582。加算部件1581向計(jì)數(shù)值寄存器1582中的計(jì)數(shù)值加“1”。計(jì)數(shù)值寄存器1582是用于保存執(zhí)行次數(shù)計(jì)數(shù)器158的計(jì)數(shù)值的寄存器。每當(dāng)指令類型比較部件157輸出計(jì)數(shù)觸發(fā)時(shí),計(jì)數(shù)值寄存器1582就將加算部件1581的輸出保存。執(zhí)行次數(shù)是按照這樣的方式計(jì)算出的。執(zhí)行次數(shù)比較部件159將計(jì)數(shù)值寄存器1582中的值與執(zhí)行次數(shù)設(shè)定寄存器156 中的值進(jìn)行比較以確定匹配。當(dāng)檢測(cè)到匹配時(shí),執(zhí)行次數(shù)比較部件159發(fā)出下一行預(yù)取請(qǐng)求??梢蕴峁┒鄬?duì)指令類型設(shè)定寄存器155和執(zhí)行次數(shù)設(shè)定寄存器156。在此情況中, 有必要單獨(dú)地提供執(zhí)行次數(shù)計(jì)數(shù)器158。當(dāng)與這些對(duì)中的任意一對(duì)的匹配被檢測(cè)到時(shí),下一行預(yù)取請(qǐng)求被發(fā)出。[指令頭的使用]圖17是示出對(duì)于第二實(shí)施例的如何在指令頭310中一般地設(shè)定指令類型和執(zhí)行次數(shù)的示意圖。在圖16的配置示例中,指令類型和執(zhí)行次數(shù)被示出為分別設(shè)定在指令類型設(shè)定寄存器1 和執(zhí)行次數(shù)設(shè)定寄存器156中。替代地,這些值可以改為被設(shè)定在指令頭 310 中。在圖17的示例中,指令類型被設(shè)定在指令頭310中從比特12到比特25的14比特區(qū)域318中,并且執(zhí)行次數(shù)被設(shè)定在從比特沈到比特31的6比特區(qū)域319中。因此,如果區(qū)域318被發(fā)送到指令類型比較部件157的一個(gè)輸入并且區(qū)域319的值被提供到執(zhí)行次數(shù)比較部件159的一個(gè)輸入,則能夠?qū)㈩A(yù)定指令執(zhí)行次數(shù)用作預(yù)取定時(shí)。[指令執(zhí)行處理]圖18是示出第二實(shí)施例執(zhí)行指令所用的一般功能結(jié)構(gòu)的示意圖。此示例包括程序執(zhí)行狀態(tài)生成部件510、檢測(cè)狀態(tài)設(shè)定部件520、指令預(yù)取定時(shí)檢測(cè)部件530、指令預(yù)取部件570和指令執(zhí)行部件590。程序執(zhí)行狀態(tài)生成部件510生成當(dāng)前程序的執(zhí)行狀態(tài)。例如,程序執(zhí)行狀態(tài)生成部件510可以生成保存當(dāng)前正執(zhí)行的指令的地址的程序計(jì)數(shù)器111的值作為當(dāng)前程序的執(zhí)行狀態(tài)。作為另一示例,程序執(zhí)行狀態(tài)生成部件510可以生成在執(zhí)行次數(shù)計(jì)數(shù)器158中保存的預(yù)定執(zhí)行類型的當(dāng)前執(zhí)行次數(shù)。檢測(cè)狀態(tài)設(shè)定部件520設(shè)定要檢測(cè)其指令預(yù)取定時(shí)的程序的執(zhí)行狀態(tài)。例如,作為此程序執(zhí)行狀態(tài),檢測(cè)狀態(tài)設(shè)定部件520可以設(shè)定預(yù)取開始地址設(shè)定寄存器153中的要檢測(cè)其指令預(yù)取定時(shí)的指令的地址的至少一部分。作為另一示例,檢測(cè)狀態(tài)設(shè)定部件520 可以設(shè)定執(zhí)行次數(shù)設(shè)定寄存器156中的預(yù)定指令類型的執(zhí)行次數(shù)。指令預(yù)取定時(shí)檢測(cè)部件530將當(dāng)前程序的執(zhí)行狀態(tài)與檢測(cè)狀態(tài)設(shè)定部件520中設(shè)定的程序執(zhí)行狀態(tài)進(jìn)行比較以確定匹配。在通過比較而確定兩個(gè)狀態(tài)之間匹配的情況中, 指令預(yù)取定時(shí)檢測(cè)部件530檢測(cè)到指令預(yù)取定時(shí)。地址比較部件IM或執(zhí)行次數(shù)比較部件 159可以被用作指令預(yù)取定時(shí)檢測(cè)部件530。
指令預(yù)取部件570在指令預(yù)取定時(shí)檢測(cè)部件530檢測(cè)到指令預(yù)取定時(shí)時(shí)執(zhí)行下一行的指令預(yù)取。指令執(zhí)行部件590執(zhí)行由指令預(yù)取部件570獲得的指令。指令執(zhí)行部件590的執(zhí)行結(jié)果影響由程序執(zhí)行狀態(tài)生成部件510生成的當(dāng)前程序的執(zhí)行狀態(tài)。也就是說,程序計(jì)數(shù)器111中的值和執(zhí)行次數(shù)計(jì)數(shù)器158中的值可以被更新。圖19是示出第二實(shí)施例執(zhí)行指令所用的一般過程的流程圖。首先,在檢測(cè)狀態(tài)設(shè)定部件520中設(shè)定要檢測(cè)其指令預(yù)取定時(shí)的程序的執(zhí)行狀態(tài) (在步驟S931中)。例如,在檢測(cè)狀態(tài)設(shè)定部件520中設(shè)定要檢測(cè)其指令預(yù)取定時(shí)的指令的地址或者預(yù)定指令類型的執(zhí)行次數(shù)。指令執(zhí)行部件590然后執(zhí)行指令(在步驟S932中)。指令預(yù)取定時(shí)檢測(cè)部件530 檢測(cè)指令預(yù)取定時(shí)(在步驟S933中)。例如,如果一組指令地址與程序計(jì)數(shù)器111上的值匹配或者如果預(yù)定指令類型的執(zhí)行次數(shù)與執(zhí)行次數(shù)計(jì)數(shù)器158上的值一致,則指令預(yù)取定時(shí)檢測(cè)部件530檢測(cè)到指令預(yù)取定時(shí)。當(dāng)通過指令預(yù)取定時(shí)檢測(cè)部件530檢測(cè)到指令預(yù)取定時(shí)時(shí),指令預(yù)取部件570執(zhí)行指令預(yù)取(在步驟S934中)。如上所述,根據(jù)本發(fā)明的第二實(shí)施例,能夠預(yù)設(shè)用于指令預(yù)取的定時(shí)以便控制指令預(yù)取定時(shí)。<3.第三實(shí)施例〉上面描述的第一和第二實(shí)施例被示出用于處理對(duì)是否阻止下一行預(yù)取的控制。下面要描述的本發(fā)明的第三實(shí)施例以及稍后描述的第四實(shí)施例將在假設(shè)下一行和分支目的地行都被預(yù)取的情況下進(jìn)行操作。第三實(shí)施例的管線結(jié)構(gòu)和塊結(jié)構(gòu)與第一實(shí)施例的那些相同,因此將不對(duì)它們進(jìn)一步說明。[程序計(jì)數(shù)器的加算控制處理]圖20是示出結(jié)合本發(fā)明第三實(shí)施例的用于加算控制處理的程序計(jì)數(shù)器的一般功能結(jié)構(gòu)的示意圖。此功能結(jié)構(gòu)示例包括指令獲取部件610、指令解碼部件620、指令執(zhí)行部件630、加算控制寄存器640、加算控制部件650和程序計(jì)數(shù)器660。指令獲取部件610根據(jù)程序計(jì)數(shù)器660上的值獲取作為執(zhí)行目標(biāo)的指令。指令獲取部件610對(duì)應(yīng)于指令獲取階段11。由指令獲取部件610獲取的指令被提供到指令解碼部件 620。指令解碼部件620對(duì)由指令獲取部件610獲取的指令進(jìn)行解碼。指令解碼部件 620對(duì)應(yīng)于指令解碼階段21。指令執(zhí)行部件630執(zhí)行已被指令解碼部件620解碼的指令。指令執(zhí)行部件630對(duì)應(yīng)于指令執(zhí)行階段41。有關(guān)所涉及的運(yùn)算元訪問的細(xì)節(jié)將不在下面討論。加算控制寄存器640保存供在程序計(jì)數(shù)器660的加算控制中使用的數(shù)據(jù)。加算控制寄存器640 —般是如何構(gòu)建的將稍后說明。加算控制部件650基于在加算控制寄存器640中保存的數(shù)據(jù)對(duì)程序計(jì)數(shù)器660執(zhí)行加算控制。程序計(jì)數(shù)器660對(duì)作為執(zhí)行目標(biāo)的指令的地址進(jìn)行計(jì)數(shù)。所以,程序計(jì)數(shù)器660 對(duì)應(yīng)于程序計(jì)數(shù)器(PC) 18。程序計(jì)數(shù)器660包括程序計(jì)數(shù)器值保存部件661和加算部件 662。程序計(jì)數(shù)器值保存部件661是保存程序計(jì)數(shù)器的值的寄存器。加算部件662將程序計(jì)數(shù)器值保存部件661中的值遞增。圖21是示出對(duì)于第三實(shí)施例的加算控制寄存器640的一般結(jié)構(gòu)的示意圖。加算控制寄存器640保存增量字?jǐn)?shù)(inCr)641和增量次數(shù)(Conti)642。增量字?jǐn)?shù)641被用于保存當(dāng)程序計(jì)數(shù)器值保存部件661的值被增大時(shí)使用的增量字?jǐn)?shù)。第三實(shí)施例預(yù)先假定每個(gè)為32比特G字節(jié))的指令的指令集,從而使得一個(gè)字為4 字節(jié)長。如果程序計(jì)數(shù)器660被假定通過省略地址的低2比特來以字為單位保存地址,則每次加算時(shí)一般加上增量值“1”。相對(duì)地,對(duì)于第三實(shí)施例,增量字?jǐn)?shù)641的值作為增量被加算。如果“1”被設(shè)定給增量字?jǐn)?shù)641,則以普通方式執(zhí)行運(yùn)算。如果整數(shù)“2”或更大值被設(shè)定,則可以在間拔(thin out)出一些指令的同時(shí)執(zhí)行運(yùn)算。此操作的具體示例將在稍后討論。順便提及,增量字?jǐn)?shù)641是在所附權(quán)利要求中描述的增量值寄存器的示例。增量次數(shù)642被用于保存加算部件662根據(jù)增量字?jǐn)?shù)641執(zhí)行的加算的次數(shù)。在普通設(shè)置中,一般加上增量值“ 1 ”。如果整數(shù)“ 1,,或更大值被設(shè)定給增量次數(shù)642,則根據(jù)增量字?jǐn)?shù)641來執(zhí)行加算。替代地,計(jì)算部件(未示出)可以在每次指令被執(zhí)行時(shí)從增量次數(shù)642中減去“1”,直到增量次數(shù)642變?yōu)椤?”為止。作為另一替代,可以提供單獨(dú)的計(jì)數(shù)器,此計(jì)數(shù)器在每次指令被執(zhí)行時(shí)被遞減1,直到此計(jì)數(shù)器的值變?yōu)椤?”。在任何情況中, 在根據(jù)增量字?jǐn)?shù)641執(zhí)行的加算執(zhí)行了由增量次數(shù)642指定的次數(shù)之后,利用增量值“1” 的通常加算被復(fù)原。順便提及,增量次數(shù)642對(duì)應(yīng)于在所附權(quán)利要求中描述的改變指定寄存器的示例。[如何執(zhí)行指令]圖22是示出第三實(shí)施例如何通過兩路分支來處理指令的示意圖。如果參考字符A 被假定用于表示用于兩路分支的分支指令的地址,則不經(jīng)歷分支的指令序列可以被配置為具有以1+4”、1+12”、1+20”、1+28”、1+36”、1+44”、1+52”、1+60”等的順序排序的指令。另一方面,經(jīng)歷分支的指令序列可以被配置為具有以“A+8”、“A+16”、“A+M”、“A+32”、 “A+40”、“A+48”、“A+56”、“A+64”等的順序排序的指令。也就是說,不經(jīng)歷分支的指令序列和經(jīng)歷分支的指令序列被彼此交替地配置。在上面的兩路分支的情況中,當(dāng)兩個(gè)指令序列的每個(gè)的開頭指令被執(zhí)行時(shí),“2”被設(shè)定給增量字?jǐn)?shù)641,并且每個(gè)指令序列中的指令數(shù)被設(shè)定給增量次數(shù)642。此配置使得能夠僅執(zhí)行彼此交替的兩個(gè)指令序列中的一個(gè)指令序列。圖23是示出第三實(shí)施例如何通過多路分支來處理指令的示意圖。雖然在圖23中所示的技術(shù)是針對(duì)三路分支的示例,但是相同的技術(shù)也可以應(yīng)用到四路或更多路分支的情況。如果參考字符A被假定用于表示用于三路分支的分支指令的地址,則第一指令序列可被配置為具有以 “A+4”、“A+16 ”、"A+28 ”、"A+40 ”、"A+52 ”、"A+64”、"A+76 ” 等的順序排序的指令。第二指令序列可被配置為具有以“A+8”、“A+20”、“A+32”、“A+44”、“A+56”、“A+68”、 “A+80”等的順序排序的指令。第三指令序列可被配置為具有以“A+12”、“A+M”、“A+36”、 “A+48”、“A+60”、“A+72”、“A+84”等的順序排序的指令。也就是說第一到第三指令序列構(gòu)成三個(gè)錯(cuò)排的指令的序列,這些錯(cuò)排的指令的一個(gè)指令與另一個(gè)指令被錯(cuò)開。在以上三路分支的情況中,當(dāng)每個(gè)指令序列的開頭指令被執(zhí)行時(shí),“3”被設(shè)定給增量字?jǐn)?shù)641并且每個(gè)指令序列中的指令數(shù)被設(shè)定給增量次數(shù)642。該配置使得可以執(zhí)行錯(cuò)排的指令的指令序列中的僅一個(gè)指令序列,這些錯(cuò)排的指令的一個(gè)指令與另一個(gè)指令被錯(cuò)
18開。[加算控制寄存器中的設(shè)定]圖24A、24B、24C和24D是示出對(duì)于第三實(shí)施例的用于設(shè)定對(duì)于加算控制寄存器 640的值的一般指令集的示意圖。圖24A示出第三實(shí)施例使用的一般指令格式。此指令格式包括6比特操作碼(OPCODE)、5比特第一源運(yùn)算元(rs)、5比特第二源運(yùn)算元(rt)、5比特目的地運(yùn)算元(rd)和11比特即值字段(imm)。圖24B示出第三實(shí)施例使用的一般操作碼的表。此操作碼的高3比特被示為在垂直方向并且其低3比特在表的水平方向被指示。在下面的說明中,將著重強(qiáng)調(diào)在操作碼的右下部分示出的條件分支指令和具有操作碼“100111”的控制寄存器改變指令。圖24C示出條件分支指令的一般指令格式。此種類型的一般條件分支指令有表中示出的 BEQfp、BNEfp、BLEfp、BGTZfp、BLTZfp、BGEZfp、BTLZALfp 和 BGEZALfp。參考字符 B 表示“分支”;B后跟隨EQ表示“相等”,兩個(gè)源運(yùn)算元的值是否相等的分支條件(rs = rt) ;B 后跟隨NE表示“不相等”,兩個(gè)源運(yùn)算元的值是否不相等的分支條件(rs興rt) ;B后跟隨LE 表示“小于或等于”,第一源運(yùn)算元是否小于或等于第二源運(yùn)算元的分支條件(rsSrt) ;B 后跟隨GTZ表示“大于零”,第一源運(yùn)算元是否大于零的分支條件(rs > 0) ;B后跟隨LTZ表示“小于零”,第一源運(yùn)算元是否小于零的分支條件(rs < 0) ;B后跟隨GEZ表示“大于或等于零”,第一源運(yùn)算元是否大于或等于零的分支條件(rs彡0) ;BLTZ和BGEZ后跟隨AL表示 “分支并鏈接”,保留分支時(shí)的返回地址的操作;以及這些縮寫中的每個(gè)后跟隨“fp”表示“浮點(diǎn)數(shù)”,指示兩個(gè)源運(yùn)算元的值都為浮點(diǎn)數(shù)。被給出作為目的地運(yùn)算元的增量字?jǐn)?shù)“incr” 是用于增大程序計(jì)數(shù)器660的值的增量字?jǐn)?shù)。被給出作為即值字段的增量次數(shù)“conti”表示程序計(jì)數(shù)器660根據(jù)增量字?jǐn)?shù)“incr”執(zhí)行加算的次數(shù)。當(dāng)條件分支指令被執(zhí)行時(shí),增量字?jǐn)?shù)“ incr"被設(shè)定給加算控制寄存器640中的增量字?jǐn)?shù)641,并且增量次數(shù)“conti ”被設(shè)定給增量次數(shù)642。圖24D示出控制寄存器改變指令PCINCM0DE的一般指令格式??刂萍拇嫫鞲淖冎噶頟CINCM0DE是將程序計(jì)數(shù)器660的增量模式設(shè)定給加算控制寄存器640的指令。執(zhí)行控制寄存器改變指令PCINCM0DE將增量字?jǐn)?shù)“incr”設(shè)定給加算控制寄存器640中的增量字?jǐn)?shù)641,并且將增量次數(shù)“conti”設(shè)定給增量次數(shù)642??刂萍拇嫫鞲淖冎噶頟CINCM0DE是與條件分支指令不同的指令。實(shí)踐中,控制寄存器改變指令PCINCM0DE結(jié)合條件分支指令來被使用。圖25是示出對(duì)于第三實(shí)施例的條件分支指令如何向加算控制寄存器640設(shè)定值的示意圖。在此示例中,條件分支指令BEQfp具有這里指定的分支條件“rs = rt”、增量字?jǐn)?shù)“2”以及增量次數(shù)“L/2”。假定條件分支指令BEQfp的指令字地址由“m”表示?;诖思俣ǎ绻种l件“rs = rt”滿足,則基于增量字?jǐn)?shù)“2”,指令“m+2”、“m+4”、“m+6”...直到“M+L”以此順序被執(zhí)行。另一方面,如果分支條件“rs = rt”不滿足,則基于增量字?jǐn)?shù) “2,,,指令“111+1”、“111+3”、“111+5” · · ·直到"M+(L-I),,以此順序被執(zhí)行。圖沈是示出對(duì)于第三實(shí)施例的控制寄存器改變指令PCINCM0DE如何為加算控制寄存器640設(shè)定值的示意圖。在此示例中,控制寄存器改變指令PCINCM0DE緊跟在不對(duì)加算控制寄存器640進(jìn)行設(shè)定的普通條件分支指令后。控制寄存器改變指令PCINCM0DE被示出為具有這里指定的增量字?jǐn)?shù)“2”和增量次數(shù)“L/2”。這里同樣假定控制寄存器改變指令PCINCM0DE的指令字地址由“m”表示?;诖思俣?,如果條件分支指令的分支條件滿足,則基于增量字?jǐn)?shù)巧”,指令“!!^”、“!!^”、“!!^”...直到“M+L”以此順序被執(zhí)行。另一方面,如果條件分支指令的分支條件不滿足,則基于增量字?jǐn)?shù)“2”,指令“m+l”、“m+3”、“m+5”...直到“M+(L-I) ”以此順序被執(zhí)行。[指令執(zhí)行處理]圖27是示出第三實(shí)施例執(zhí)行指令所用的一般過程的流程圖。這里假定已經(jīng)預(yù)先使用上述條件分支指令和控制寄存器改變指令等完成了對(duì)加算控制寄存器640的增量字?jǐn)?shù)和增量次數(shù)的設(shè)置。如果加算控制寄存器640中的增量次數(shù)642大于零(在步驟S941中),則由程序計(jì)數(shù)器660將增量字?jǐn)?shù)641乘以“4”獲得的值被加算部件662加到程序計(jì)數(shù)器值保存部件 661 (在步驟S942中)。在此情況中,加算控制寄存器640中的增量次數(shù)642被減小“ 1 ”(在步驟S943中)。如果加算控制寄存器640中的增量次數(shù)642不大于零(在步驟S941中), 則程序計(jì)數(shù)器660上的值如常那樣被加算部件662加到程序計(jì)數(shù)器值保存部件661 (在步驟S944中)。上述步驟被重復(fù)。順便提及,步驟S942是在所附權(quán)利要求中描述的改變?cè)隽考铀悴襟E的示例并且步驟S944是普通增量加算步驟。根據(jù)本發(fā)明的第三實(shí)施例,如上所述,通過以指令為單位以混合方式布置分支后的多個(gè)指令序列并且通過根據(jù)分支條件控制對(duì)程序計(jì)數(shù)器的加算來執(zhí)行適當(dāng)?shù)闹噶钚蛄械闹噶?。這使得能夠以適當(dāng)混合的方式布置下一行和分支目的地行,從而均化在指令預(yù)取操作中涉及的不利。<4.第四實(shí)施例〉[處理器的結(jié)構(gòu)]圖觀是示出本發(fā)明的第四實(shí)施例的處理器構(gòu)成部分的一般管線結(jié)構(gòu)的示意圖。 第四實(shí)施例的基本管線結(jié)構(gòu)被假定包括與上面說明的第一實(shí)施例相同的五個(gè)管線階段。然而,上述第一實(shí)施例被示為由下一行預(yù)取部件13執(zhí)行下一行預(yù)取,而第四實(shí)施例使得下一行分支目的地行預(yù)取部件14來預(yù)取下一行和分支目的地行。也就是說,所要預(yù)取的不僅僅有下一行,即包含作為當(dāng)前執(zhí)行目標(biāo)的指令的緩存行接下來的緩存行,而且還有分支目的地行,即包括分支目的地指令的緩存行。由下一行分支目的地行預(yù)取部件14預(yù)取出的分支目的地行被保存在預(yù)取隊(duì)列17中。在預(yù)取隊(duì)列17中保存的分支目的地行被提供到指令解碼階段(ID)21。因?yàn)橄乱恍惺侵苯訌闹噶罹彺嫫黟佀偷?,所以預(yù)取隊(duì)列17不必對(duì)下一行處理。圖四是示出第四實(shí)施例的處理器構(gòu)成部分的一般塊結(jié)構(gòu)的示意圖。第四實(shí)施例的基本塊結(jié)構(gòu)與上面說明的第一實(shí)施例的相同。然而,上述第一實(shí)施例被示為由下一行預(yù)取部件150預(yù)取下一行,而第四實(shí)施例使得下一行分支目的地行預(yù)取部件250預(yù)取下一行和分支目的地行。此外,預(yù)取隊(duì)列171 與指令緩存器120并置,從而分支目的地行可以直接從預(yù)取隊(duì)列171被饋送到指令寄存器 112。也就是說,如果發(fā)生分支,來自預(yù)取隊(duì)列171的指令被提供而旁路了即將從指令緩存器120饋送的指令。此配置使得指令被連續(xù)發(fā)出而不會(huì)遲延管線。順便提及,下一行分支目的地行預(yù)取部件250是在所附權(quán)利要求中所述的預(yù)取部件的示例,并且預(yù)取隊(duì)列171是預(yù)取隊(duì)列的示例。
因?yàn)閷?duì)于第四實(shí)施例無需強(qiáng)制將指令分割成指令分組,因此這樣的裝置被從本塊結(jié)構(gòu)中排除。此外,基于對(duì)指令辭典表的參考的壓縮對(duì)于第四實(shí)施例也是不是強(qiáng)制性的,所以這樣的裝置也從本塊結(jié)構(gòu)中排除。這些裝置可以按需結(jié)合實(shí)施。[分支指令和緩存行之間的關(guān)系]圖30是示出對(duì)于第四實(shí)施例的分支指令和緩存行之間的一般關(guān)系的示意圖。包含作為當(dāng)前執(zhí)行目標(biāo)的指令的緩存行被稱為當(dāng)前行,并且緊跟在當(dāng)前行后的緩存行被稱為下一行。包含被包括在當(dāng)前行中的分支指令的分支目的地指令的緩存行被稱為分支目的地行。在本示例中,分支指令被置于當(dāng)前行的末端。此布置意在使得下一行和分支目的地行在當(dāng)前行的開頭指令被執(zhí)行時(shí)被預(yù)取,從而使得這兩行都在分支指令被執(zhí)行前被預(yù)取。因此,可以不必要將分支指令布置在當(dāng)前行的末端。如果位于至少當(dāng)前行的后一半中,在一些情況中,對(duì)于要完成的預(yù)取可及時(shí)達(dá)到分支指令。如果分支指令被布置在當(dāng)前行的末端并且如果不滿足分支指令的分支條件并因此而不發(fā)生分支,則需要下一行。如果滿足分支條件并因此而發(fā)生分支,則需要分支目的地行。因此,為了無論分支條件是否滿足都成功地執(zhí)行預(yù)取,優(yōu)選預(yù)取下一行和分支目的地行二者。第四實(shí)施例使得下一行分支目的地行預(yù)取部件250預(yù)取這二兩行,從而獨(dú)立于分支條件是否滿足來連續(xù)地執(zhí)行指令。在本情況中,為了預(yù)取這兩行,吞吐量最好優(yōu)選是通常設(shè)置的二倍,但是這并不是強(qiáng)制性的。對(duì)于指令緩存器120中的緩存行的沖突,優(yōu)選對(duì)分支目的地行的設(shè)置施加約束。 例如在指令緩存器120按直接映射原理操作時(shí),如果試圖同時(shí)緩存具有相同行地址的緩存行,則它們會(huì)彼此沖突。在本情況中,如果預(yù)取的下一行后緊跟隨預(yù)取的具有相同行地址的分支目的地行,則下一行被從指令緩存器120驅(qū)出。在實(shí)行兩路設(shè)置關(guān)聯(lián)原理的情況中,這樣的沖突的可能被降低。盡管如此,依賴于緩存狀態(tài),所預(yù)取的分支目的地行可能影響其他緩存行。因此,對(duì)于第四實(shí)施例,指令緩存器被假定按照作為最嚴(yán)厲的條件的直接映射原理而操作。分支目的地行的布置然后通過編譯器或通過鏈接器按照下一行和分支目的地行將不具有相同行地址的方式而被調(diào)整。在指令地址的布置將通過編譯器或鏈接器被改變的情況中,下面說明的技術(shù)可以用作示例。這里假定下面所示的指令序列,其中,“Ox”后的數(shù)是十六進(jìn)制數(shù)。0x0000:指令 A0x0004:指令 B0x0008:指令 C如果上述指令序列的指令布置被希望向后偏移4字節(jié),則可以如下向序列插入 NOP (不操作)指令0x0000 :Ν0Ρ 指令0x0004:指令 A0x0008:指令 BOxOOOC:指令 C如果指令A(yù)是使得多個(gè)操作在執(zhí)行時(shí)被執(zhí)行的指令,則指令A(yù)可以被分割成如下所示的指令A(yù)A和指令A(yù)B。此配置也可以將上述指令序列的指令配置向后偏移4字節(jié)。0x0000:指令 AA
0x0004:指令 AB0x0008:指令 BOxOOOC 指令 C圖31A和31B是示出第四實(shí)施例如何一般地改變指令的布置的示意圖。如圖31A 中所示,考慮這樣的程序,其中,指令序列A和B之后是分支指令C,分支指令C分支到指令序列D或指令序列E以進(jìn)行處理,之后是指令序列F的處理。在本情況中,如果指令序列B 的結(jié)果不影響分支指令C的分支條件,則分支指令C可以移動(dòng)到指令序列A的緊后,指令序列B被布置在分支目的地處,如在圖31B中所示。按照這種方式,可以在不影響執(zhí)行結(jié)果的情況下改變指令的布置。[指令布置處理]圖32是示出第四實(shí)施例布置指令所用的一般功能結(jié)構(gòu)的示意圖。本功能結(jié)構(gòu)示例預(yù)先假定目標(biāo)碼(object code)是從在程序保存部件701中保存的程序生成的,并且所生成的目標(biāo)碼被保存在目標(biāo)碼保存部件702中。本結(jié)構(gòu)示例包括分支指令提取部件710、分支指令布置部件720、分支目的地指令布置部件730和目標(biāo)碼生成部件740。分支指令提取部件710從在程序保存部件701中保存的程序中提取分支指令。分支指令提取部件710獲取程序中的提取的分支指令的地址并且將此地址提供給分支指令布置部件720。此外,分支指令提取部件710獲取提取的分支指令的分支目的地地址并且將此分支目的地地址饋送給分支目的地指令布置部件730。分支指令布置部件720將由分支指令提取部件710提取的分支指令布置到緩存行 (當(dāng)前行)的后半部分。分支指令被布置到緩存行的后半部分,以使得在達(dá)到分支指令之前完成預(yù)取,如上所述。從此觀點(diǎn)來看,最好將分支指令布置在緩存行的末端。分支目的地指令布置部件730將由分支指令提取部件710提取的分支指令的分支目的地指令布置到具有與下一緩存行(下一行)不同行地址的另一緩存行(分支目的地行)。下一行和分支目的地行被布置到具有不同行地址的不同緩存行使得避免了指令緩存器120中的沖突,如上所述。目標(biāo)碼生成部件740從包含由分支指令布置部件720和分支目的地指令布置部件 730布置于其中的分支指令和分支目的地指令的指令序列生成目標(biāo)碼。由目標(biāo)碼生成部件 740生成的目標(biāo)碼被保存在目標(biāo)碼保存部件702中。順便提及,目標(biāo)碼生成部件740是在所附權(quán)利要求中所述的指令序列輸出部件。圖33是示出第四實(shí)施例布置指令所用的一般過程的流程圖。首先,分支指令提取部件710從在程序保存部件701中保存的程序提取分支指令 (在步驟S951中)。由分支指令提取部件710提取的分支指令被分支指令布置部件720布置到緩存行(當(dāng)前行)的后半部分(在步驟S952中)。由分支指令提取部件710提取的分支指令的分支目的地指令被分支目的地指令布置部件730布置到具有與下一緩存行(下一行)不同的行地址的另一緩存行(分支目的地行)(在步驟S953中)。目標(biāo)碼生成部件 740然后從包含由分支指令布置部件720和分支目的地指令布置部件730布置于其中的分支指令和分支目的地指令的指令序列生成目標(biāo)碼(在步驟S%4中)。順便提及,步驟S951是分支指令提取步驟的示例;步驟S952是分支指令布置步驟的示例;步驟S953是分支目的地指令布置步驟的示例;以及步驟S%4是指令序列輸出步
22驟的示例,所有步驟都在所述權(quán)利要求中描述。[預(yù)取地址的設(shè)定]圖34A和34B是示出第四實(shí)施例如何一般地設(shè)定預(yù)取地址寄存器的示意圖。如上所討論的,分支目的地行被布置到與下一行不同的行地址。然而,分支目的地行可以按照永久固定的方式使用相對(duì)于當(dāng)前行的位置被預(yù)取,替代地,分支目的地地址可以按照自動(dòng)的方式在每當(dāng)發(fā)生分支時(shí)被設(shè)定,如下所述。圖34A示出了預(yù)取地址寄存器(PRADDR) 790的一般結(jié)構(gòu)。預(yù)取地址寄存器790被用于設(shè)定預(yù)取分支目的地行從其被預(yù)取給指令緩存器120的那個(gè)預(yù)取地址。預(yù)取地址被保存在預(yù)取地址寄存器790的低12比特中。圖34B示出了用于設(shè)定預(yù)取地址寄存器(PRADDR) 790的設(shè)定值的MTSI_ PRADDR(移動(dòng)到特殊寄存器即值-PRADDR)指令的指令格式。MTSI_PRADDR指令是一種特殊的指令并且被用于設(shè)定對(duì)于特殊寄存器(在本情況中為預(yù)取地址寄存器790)的值。本指令的比特17-21表示預(yù)取地址寄存器PRADDR。本指令的比特11_8被設(shè)定為預(yù)取地址寄存器 790的比特11-8。這些設(shè)置建立起要被預(yù)取的分支目的地行的地址。假定指令緩存器120 是以兩路設(shè)定關(guān)聯(lián)原理操作并且提供總共16個(gè)行(每路8個(gè)行)用于構(gòu)建256字節(jié)的條目大小的4K字節(jié)緩存器。作為另一示例,可以借助上面結(jié)合第一實(shí)施例說明的分割成指令分組300并且利用指令頭310的預(yù)取設(shè)定字段315。在本情況中,圖4的指令頭310中從比特11到比特8 的預(yù)取設(shè)定字段315被設(shè)定為預(yù)取地址寄存器中的比特11到比特8。這使得能夠在無需借助特殊指令的情況下設(shè)定作為預(yù)取目標(biāo)的分支目的地行的地址。[指令執(zhí)行處理]圖35是示出第四實(shí)施例執(zhí)行指令所用的一般功能結(jié)構(gòu)的示意圖。本結(jié)構(gòu)預(yù)先假定行基于程序計(jì)數(shù)器111的檢測(cè)狀態(tài)被預(yù)取到指令緩存器120和預(yù)取隊(duì)列171。本結(jié)構(gòu)示例包括指令預(yù)取定時(shí)檢測(cè)部件750、下一行預(yù)取部件760、分支目的地行預(yù)取部件770。這些組件對(duì)應(yīng)于塊結(jié)構(gòu)中的下一行分支目的地行預(yù)取部件250。指令預(yù)取定時(shí)檢測(cè)部件750通過參考程序計(jì)數(shù)器111的狀態(tài)來檢測(cè)指令預(yù)取定時(shí)。對(duì)于第四實(shí)施例,優(yōu)選在較早階段開始預(yù)取以便按照兩路預(yù)取下一行和分支目的地行。 因此,指令預(yù)取定時(shí)可以在緩存行的開頭指令開始要被執(zhí)行時(shí)被檢測(cè)。下一行預(yù)取部件760預(yù)取下一行。從系統(tǒng)存儲(chǔ)器140預(yù)取的下一行被存儲(chǔ)到指令緩存器120。分支目的地行預(yù)取部件770預(yù)取分支目的地行。處于相對(duì)于當(dāng)前行的固定位置處的緩存行可以用作分支目的地行。替代地,可以使用在上述預(yù)取地址寄存器790中設(shè)定的地址。從系統(tǒng)存儲(chǔ)器140預(yù)取的分支目的地行被存儲(chǔ)到指令緩存器120和預(yù)取隊(duì)列171。圖36是示出第四實(shí)施例執(zhí)行指令所用的一般過程的流程圖。首先,指令預(yù)取定時(shí)檢測(cè)部件750檢測(cè)緩存行的開頭指令要開始被執(zhí)行(在步驟 S961中)。然后,下一行預(yù)取部件760預(yù)取下一行(在步驟S962中)。分支目的地行預(yù)取部件770預(yù)取分支目的地行(在步驟S963中)。這些步驟被重復(fù),從而下一行和分支目的地行的指令序列在兩路中被預(yù)取。根據(jù)本發(fā)明的第四實(shí)施例,如上所述,分支目的地行被配置為具有與下一行不同
23的行地址,從而使得下一行和分支目的地行的指令序列在兩路中被預(yù)取。本結(jié)構(gòu)有助于增
強(qiáng)吞吐量。<5.實(shí)施例的組合〉前面的段落單獨(dú)地討論了本發(fā)明的第一到第四實(shí)施例。替代地,這些實(shí)施例可以按照各種組合來實(shí)施。[將第一實(shí)施例與第二實(shí)施例組合]第一實(shí)施例被示為根據(jù)在指令頭310中的分支預(yù)測(cè)標(biāo)志311來判斷是否執(zhí)行預(yù)取。為了避免判斷中的失敗預(yù)測(cè),第一實(shí)施例可以有效地與第二實(shí)施例組合。也就是說,第二實(shí)施例被用于延遲對(duì)于預(yù)取的判斷,從而預(yù)先明確地判斷分支的存在與否,從而正確的緩存行被預(yù)取。[將第一或第二實(shí)施例與第三實(shí)施例組合]第三實(shí)施例在兩路中執(zhí)行預(yù)取。這意味著難以將第三實(shí)施例應(yīng)用到某些情況,例如,分支指令具有利用較遠(yuǎn)地址的分支目的地的情況以及“ if”語句沒有“else”子句的情況。例如,如果多向分支的所有情況不具有相同的指令數(shù),則需要插入NOP指令,直到指令的數(shù)目變得對(duì)于所有情況都相同為止。在相對(duì)較長指令序列的情況中,指令執(zhí)行的吞吐量和使用緩存器的效率趨于降低。作為針對(duì)這些困難的對(duì)策,第一實(shí)施例的分支預(yù)測(cè)標(biāo)志311 可用于在發(fā)現(xiàn)分支到較遠(yuǎn)地址的可能性較高的情況下阻止兩路預(yù)取。本配置消除了第三實(shí)施例的缺點(diǎn)。第三實(shí)施例的缺點(diǎn)還通過使用第二實(shí)施例而被避免,第二實(shí)施例將指令預(yù)取定時(shí)延遲以使得可以預(yù)先明確判定分支存在與否,從而不必要的預(yù)取被阻止。[將第一或第二實(shí)施例與第四實(shí)施例組合]第四實(shí)施例被示為總是預(yù)取下一行和分支目的地行。本結(jié)構(gòu)遭受如果當(dāng)前行不包含分支指令則不必要預(yù)取分支目的地行的缺點(diǎn)。因此,第一實(shí)施例的分支預(yù)測(cè)標(biāo)志311被用于確定執(zhí)行下一行的可能性。如果基于分支預(yù)測(cè)標(biāo)志311發(fā)現(xiàn)執(zhí)行下一行的可能性很高,則只預(yù)取下一行。本配置避免了第四實(shí)施例的缺點(diǎn)。第四實(shí)施例的缺點(diǎn)還可以使用第二實(shí)施例而被避免,第二實(shí)施例將指令預(yù)取定時(shí)延遲以使得可以預(yù)先明確判定分支存在與否,從而不必要的預(yù)取被阻止。[將第三實(shí)施例與第四實(shí)施例組合]第四實(shí)施例被示為在兩路中預(yù)取下一行和分支目的地行。在第三實(shí)施例也以組合被使用的情況中,能夠在三路或更多路中執(zhí)行多向分支。也就是說,通過在兩路中對(duì)其中多個(gè)指令序列共存的緩存行進(jìn)行預(yù)取,能夠執(zhí)行多向分支。在上述組合中,第三實(shí)施例可被應(yīng)用到具有有限分支范圍(例如有限的行大小范圍)的情況中,而第四實(shí)施例可被用于處理更廣泛的分支。第三和第四實(shí)施例的選擇性實(shí)施可以避免二者的缺點(diǎn)。也就是說,第四實(shí)施例具有總是在保持執(zhí)行吞吐量沒有減少的情況下以一半效率來使用指令緩存器的缺點(diǎn)。第三實(shí)施例具有在被應(yīng)用到廣泛分支的情況時(shí)效果不大的缺點(diǎn)。這兩個(gè)實(shí)施例因此可以被組合來消除它們的缺點(diǎn)。[其他組合]還可以實(shí)施上述實(shí)施例組合以外的實(shí)施例組合來增強(qiáng)單個(gè)實(shí)施例的效果。例如, 第一或第二實(shí)施例與第三實(shí)施例和第四實(shí)施例的組合加強(qiáng)了所涉及的實(shí)施例的效果。上述實(shí)施例及其變形例僅僅是其中可以實(shí)施本發(fā)明的示例。從上述可知,在優(yōu)選實(shí)施例的描述中的實(shí)施例及其變形例的細(xì)節(jié)基本與在所附權(quán)利要求中要求的創(chuàng)新性事物對(duì)應(yīng)。同樣,在所附權(quán)利要求中所稱的創(chuàng)新性事物基本對(duì)應(yīng)于在優(yōu)選實(shí)施例的描述中的具有相同名稱的事物。然而,本發(fā)明的這些實(shí)施例及其變形利以及其他示例不對(duì)其具有限制意義,而是本領(lǐng)域技術(shù)人員應(yīng)當(dāng)理解,依賴于設(shè)計(jì)要求和其他因素,可以發(fā)生各種修改、組合、子組合和替代,只要他們?cè)谒綑?quán)利要求或其等同物的范圍內(nèi)即可。此外,以上作為實(shí)施例的部分描述的步驟和處理序列可以被認(rèn)為是用于執(zhí)行這些步驟和處理的方法,作為用于使得計(jì)算機(jī)執(zhí)行這些方法的程序,或者作為存儲(chǔ)這些程序的記錄介質(zhì)。記錄介質(zhì)的示例包括CD (致密盤)、MD (迷你盤),DVD (數(shù)字通用盤)、存儲(chǔ)卡和藍(lán)光盤(注冊(cè)商標(biāo))。本申請(qǐng)包含與2010年3月四日向日本專利局提交的日本優(yōu)先專利申請(qǐng)JP 2010-075781中公開的主題有關(guān)的主題,該申請(qǐng)的全部內(nèi)容通過引用被結(jié)合于此。
權(quán)利要求
1.一種指令獲取設(shè)備,包括檢測(cè)狀態(tài)設(shè)定部件,被配置為設(shè)定其指令預(yù)取定時(shí)要被檢測(cè)的程序的執(zhí)行狀態(tài);程序執(zhí)行狀態(tài)生成部件,被配置為生成所述程序的當(dāng)前執(zhí)行狀態(tài);指令預(yù)取定時(shí)檢測(cè)部件,被配置為對(duì)所述程序的當(dāng)前執(zhí)行狀態(tài)和其設(shè)定執(zhí)行狀態(tài)進(jìn)行比較并在兩者匹配的情況下檢測(cè)所述指令預(yù)取定時(shí);和指令預(yù)取部件,被配置為當(dāng)所述指令預(yù)取定時(shí)被檢測(cè)到時(shí)預(yù)取下一指令。
2.根據(jù)權(quán)利要求1所述的指令預(yù)取設(shè)備,其中,所述檢測(cè)狀態(tài)設(shè)定部件包括地址設(shè)定寄存器,所述地址設(shè)定寄存器被配置為設(shè)定其指令預(yù)取定時(shí)要被檢測(cè)的指令的地址的至少一部分;所述程序執(zhí)行狀態(tài)生成部件包括程序計(jì)數(shù)器,所述程序計(jì)數(shù)器被配置為保存當(dāng)前正在執(zhí)行的指令的地址作為所述程序的所述當(dāng)前執(zhí)行狀態(tài);并且所述指令預(yù)取定時(shí)檢測(cè)部件包括地址比較部件,所述地址比較部件被配置為對(duì)所述程序計(jì)數(shù)器上的值的至少一部分和所述地址設(shè)定寄存器中的值之間進(jìn)行比較并在兩者匹配的情況下檢測(cè)所述指令預(yù)取定時(shí)。
3.根據(jù)權(quán)利要求2所述的指令預(yù)取設(shè)備,還包括指令分組保存部件,所述指令分組保存部件被配置為保存指令分組,所述指令分組由使得程序指令序列分割成預(yù)定大小的指令有效載荷以及包括用于指定下一指令有效載荷的預(yù)取定時(shí)的預(yù)取定時(shí)信息的指令頭構(gòu)成;其中,所述檢測(cè)狀態(tài)設(shè)定部件基于所述預(yù)取定時(shí)信息來設(shè)定所述地址設(shè)定寄存器。
4.根據(jù)權(quán)利要求3所述的指令預(yù)取設(shè)備,其中,所述檢測(cè)狀態(tài)設(shè)定部件包括設(shè)定步長地址寄存器,所述設(shè)定步長地址寄存器被配置為保存指示其指令預(yù)取定時(shí)要被檢測(cè)的指令的地址的設(shè)定粒度的步長值;和乘算部件,所述乘算部件被配置為通過將在所述預(yù)取定時(shí)信息中包括的步長計(jì)數(shù)與所述步長值相乘來設(shè)定所述地址設(shè)定寄存器。
5.根據(jù)權(quán)利要求2所述的指令預(yù)取設(shè)備,還包括指令分組保存部件,所述指令分組保存部件被配置為保存由使得程序指令序列分割成預(yù)定大小的指令有效載荷和包括分支預(yù)測(cè)信息的指令頭構(gòu)成的指令分組,所述分支預(yù)測(cè)信息指示在所述指令有效載荷中包括的分支指令分支到既不是包括在所述指令有效載荷也不是包括在所述下一指令有效載荷中的指令的可能性程度;其中,所述檢測(cè)狀態(tài)設(shè)定部件基于所述分支預(yù)測(cè)信息來設(shè)定所述地址設(shè)定寄存器。
6.根據(jù)權(quán)利要求1所述的指令預(yù)取設(shè)備,其中,所述檢測(cè)狀態(tài)設(shè)定部件包括執(zhí)行次數(shù)設(shè)定寄存器,所述執(zhí)行次數(shù)設(shè)定寄存器被配置為將預(yù)定指令類型的執(zhí)行次數(shù)設(shè)定作為其指令預(yù)取定時(shí)要被檢測(cè)的所述程序的所述執(zhí)行狀態(tài);并且所述程序執(zhí)行狀態(tài)生成部件生成所述預(yù)定指令類型的當(dāng)前執(zhí)行次數(shù)作為所述程序的所述當(dāng)前執(zhí)行狀態(tài)。
7.根據(jù)權(quán)利要求6所述的指令預(yù)取設(shè)備,其中,所述程序執(zhí)行狀態(tài)生成部件包括指令類型設(shè)定寄存器,被配置為設(shè)定所述預(yù)定指令類型;指令類型比較部件,被配置為通過在當(dāng)前正執(zhí)行的指令的指令類型與所述預(yù)定指令類型之間進(jìn)行比較而檢測(cè)它們之間的匹配;和執(zhí)行次數(shù)計(jì)數(shù)器,被配置為使得每當(dāng)所述指令類型比較部件檢測(cè)到當(dāng)前正執(zhí)行的指令的指令類型與所述預(yù)定指令類型之間的匹配時(shí),所述執(zhí)行次數(shù)計(jì)數(shù)器獲取所涉及的指令類型的執(zhí)行次數(shù)。
8.一種處理器,包括檢測(cè)狀態(tài)設(shè)定部件,被配置為設(shè)定其指令預(yù)取定時(shí)要被檢測(cè)的程序的執(zhí)行狀態(tài); 程序執(zhí)行狀態(tài)生成部件,被配置為生成所述程序的當(dāng)前執(zhí)行狀態(tài); 指令預(yù)取定時(shí)檢測(cè)部件,被配置為對(duì)所述程序的當(dāng)前執(zhí)行狀態(tài)和其設(shè)定執(zhí)行狀態(tài)進(jìn)行比較并在兩者匹配的情況下檢測(cè)所述指令預(yù)取定時(shí);指令預(yù)取部件,被配置為當(dāng)所述指令預(yù)取定時(shí)被檢測(cè)到時(shí)預(yù)取下一指令;和指令執(zhí)行部件,被配置為執(zhí)行通過指令預(yù)取而獲得的指令。
9.一種指令獲取設(shè)備,包括檢測(cè)狀態(tài)設(shè)定裝置,用于設(shè)定其指令預(yù)取定時(shí)要被檢測(cè)的程序的執(zhí)行狀態(tài); 程序執(zhí)行狀態(tài)生成裝置,用于生成所述程序的當(dāng)前執(zhí)行狀態(tài); 指令預(yù)取定時(shí)檢測(cè)裝置,用于對(duì)所述程序的當(dāng)前執(zhí)行狀態(tài)和其設(shè)定執(zhí)行狀態(tài)進(jìn)行比較并在兩者匹配的情況下檢測(cè)所述指令預(yù)取定時(shí);以及指令預(yù)取裝置,用于當(dāng)所述指令預(yù)取定時(shí)被檢測(cè)到時(shí)預(yù)取下一指令。
全文摘要
本發(fā)明公開了指令獲取設(shè)備和處理器。提供了一種指令獲取設(shè)備,其包括檢測(cè)狀態(tài)設(shè)定部件,被配置為設(shè)定其指令預(yù)取定時(shí)要被檢測(cè)的程序的執(zhí)行狀態(tài);程序執(zhí)行狀態(tài)生成部件,被配置為生成程序的當(dāng)前執(zhí)行狀態(tài);指令預(yù)取定時(shí)檢測(cè)部件,被配置為對(duì)程序的當(dāng)前執(zhí)行狀態(tài)和其設(shè)定執(zhí)行狀態(tài)進(jìn)行比較并在兩者匹配的情況下檢測(cè)指令預(yù)取定時(shí);和指令預(yù)取部件,被配置為當(dāng)指令預(yù)取定時(shí)被檢測(cè)到時(shí)預(yù)取下一指令。
文檔編號(hào)G06F9/38GK102207853SQ20111007332
公開日2011年10月5日 申請(qǐng)日期2011年3月22日 優(yōu)先權(quán)日2010年3月29日
發(fā)明者坂口浩章, 小林浩, 山本晴久, 平尾太一, 森田陽介, 甲斐齊, 目次勝彥, 長谷川浩一 申請(qǐng)人:索尼公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
德兴市| 台东县| 都昌县| 阿拉善右旗| 华蓥市| 晋中市| 商河县| 宾川县| 余江县| 金秀| 嘉义县| 米脂县| 秦皇岛市| 平安县| 濉溪县| 香格里拉县| 河源市| 五莲县| 黑水县| 仁寿县| 温宿县| 鄂伦春自治旗| 永兴县| 城市| 滦平县| 乌恰县| 达尔| 伊川县| 巢湖市| 珲春市| 修武县| 迁西县| 蒲江县| 浦江县| 县级市| 浦城县| 驻马店市| 遂宁市| 镇远县| 天门市| 随州市|