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

基于旋轉(zhuǎn)的別名保護(hù)寄存器中的寄存器分配的制作方法

文檔序號(hào):6484675閱讀:287來(lái)源:國(guó)知局
基于旋轉(zhuǎn)的別名保護(hù)寄存器中的寄存器分配的制作方法
【專利摘要】一種系統(tǒng)可以包括優(yōu)化器/調(diào)度器,用于對(duì)一組指令進(jìn)行調(diào)度,計(jì)算調(diào)度的指令組的數(shù)據(jù)相關(guān)性、檢查約束和/或防檢查約束,以及,基于數(shù)據(jù)相關(guān)性、檢查約束和/或防檢查約束,為調(diào)度的指令組分配別名寄存器。在一個(gè)實(shí)施例中,優(yōu)化器用于釋放未使用的寄存器,以減少用來(lái)保護(hù)調(diào)度的指令的別名寄存器。優(yōu)化器進(jìn)一步將偽指令插入到合并的指令之后,以中斷檢查約束和防檢查約束中的循環(huán)。
【專利說(shuō)明】基于旋轉(zhuǎn)的別名保護(hù)寄存器中的寄存器分配
[0001]背景
[0002]硬件/軟件共同設(shè)計(jì)的系統(tǒng)可以利用動(dòng)態(tài)二進(jìn)制優(yōu)化來(lái)改善性能。對(duì)于對(duì)存儲(chǔ)器指令的動(dòng)態(tài)二進(jìn)制優(yōu)化,可能需要存儲(chǔ)器別名信息。動(dòng)態(tài)二進(jìn)制優(yōu)化可以為原子區(qū)中的推測(cè)性的存儲(chǔ)器優(yōu)化利用硬件別名檢查。當(dāng)加載指令被推測(cè)性地重新排序到存儲(chǔ)指令之前并且它們之間有可能的存儲(chǔ)器別名時(shí),加載指令可能需要設(shè)置別名保護(hù)寄存器,其存儲(chǔ)器地址存儲(chǔ)在其中。響應(yīng)于存儲(chǔ)指令被執(zhí)行,存儲(chǔ)指令可以檢查帶有其存儲(chǔ)器地址的別名保護(hù)寄存器來(lái)檢測(cè)錯(cuò)誤推測(cè)。錯(cuò)誤推測(cè)可能會(huì)導(dǎo)致整個(gè)區(qū)域的回滾和非優(yōu)化的或不太優(yōu)化的代碼的重新執(zhí)行。
[0003]附圖簡(jiǎn)述
[0004]此處所描述的本發(fā)明是作為示例說(shuō)明的,而不僅限于各個(gè)附圖的圖形。為說(shuō)明簡(jiǎn)單和清楚起見(jiàn),圖形中所示出的元件不一定是按比例繪制的。例如,為了清楚起見(jiàn),某些元件的尺寸可以相對(duì)于其他元件而放大。此外,在合適的情況下,在不同的圖形中參考標(biāo)簽重復(fù)使用,以表示對(duì)應(yīng)的或類似的元件。
[0005]圖1A是根據(jù)本發(fā)明的一個(gè)實(shí)施例的示例性系統(tǒng)的框圖。
[0006]圖1B是根據(jù)本發(fā)明的一個(gè)實(shí)施例的另一示例性系統(tǒng)的框圖。
[0007]圖1C是根據(jù)本發(fā)明的一個(gè)實(shí)施例的再一個(gè)示例系統(tǒng)的框圖。
[0008]圖2A-2K是根據(jù)本發(fā)明的某些實(shí)施例的基于旋轉(zhuǎn)的別名保護(hù)寄存器中的寄存器分配的示意圖。
[0009]圖3是根據(jù)本發(fā)明的一些實(shí)施例的流程圖。
[0010]詳細(xì)描述
[0011]下面的描述說(shuō)明了提供別名寄存器分配算法,以減少基于旋轉(zhuǎn)的別名保護(hù)寄存器中的寄存器使用的技術(shù)。技術(shù)的實(shí)現(xiàn)不局限在計(jì)算系統(tǒng)中;它可以被任何執(zhí)行環(huán)境用于類似的目的,諸如,例如,任何其他數(shù)字/電子設(shè)備。在下面的描述中,闡述了諸如邏輯實(shí)現(xiàn)、操作碼、指定操作數(shù)的手段、資源分區(qū)/共享/重復(fù)實(shí)現(xiàn),系統(tǒng)組件的類型和相互關(guān)系,以及邏輯分區(qū)/集成選擇之類的很多具體細(xì)節(jié),以便提供對(duì)本發(fā)明的更全面的理解。然而,本發(fā)明可以在沒(méi)有這樣的具體細(xì)節(jié)的情況下實(shí)施。在其他情況下,沒(méi)有詳細(xì)示出控制結(jié)構(gòu)和完全軟件指令序列,以便不至于使本發(fā)明變得模糊。
[0012]說(shuō)明書(shū)中對(duì)〃 一個(gè)實(shí)施例"、〃實(shí)施例"、〃示例實(shí)施例〃等等的引用表示所描述的實(shí)施例可包括特定特征、結(jié)構(gòu)或特性,但是,每一個(gè)實(shí)施例可以不一定包括該特定特征、結(jié)構(gòu)或特征。此外,這樣的短語(yǔ)不一定是指同一個(gè)實(shí)施例。此外,當(dāng)結(jié)合一個(gè)實(shí)施例描述特定特征、結(jié)構(gòu)或特性時(shí),認(rèn)為在本領(lǐng)域技術(shù)人員學(xué)識(shí)范圍內(nèi),可以與其他實(shí)施例一起實(shí)施這樣的特征、結(jié)構(gòu)或特性,無(wú)論是否對(duì)此明確描述。
[0013]可以使用硬件、軟件、固件或其任何組合來(lái)實(shí)現(xiàn)本發(fā)明的各實(shí)施例。本發(fā)明的各實(shí)施例還可實(shí)現(xiàn)為存儲(chǔ)在機(jī)器可讀取的介質(zhì)中的可以由一個(gè)或多個(gè)處理器讀取和執(zhí)行的指令。機(jī)器可讀的介質(zhì)可以包括用于以機(jī)器(例如,計(jì)算設(shè)備)可讀的形式存儲(chǔ)或傳輸信息的任何機(jī)制。例如,機(jī)器可讀的介質(zhì)可以包括,只讀存儲(chǔ)器(ROM);隨機(jī)存取存儲(chǔ)器(RAM);磁盤存儲(chǔ)介質(zhì);光存儲(chǔ)介質(zhì);閃存設(shè)備;電的、光學(xué)的、聲音或其他形式的傳播信號(hào)(例如,載波、紅外信號(hào)、數(shù)字信號(hào)等等);及其他。
[0014]下面的描述可以包括只用于描述性的目的而不應(yīng)該理解為限制性的諸如第一、第二等等之類的術(shù)語(yǔ)。
[0015]圖1A示出了系統(tǒng)100的示例性實(shí)施例的框圖。系統(tǒng)100可以包括處理器102。處理器102可以包括任何類型的能夠執(zhí)行軟件和/或處理數(shù)據(jù)信號(hào)的處理器。在一個(gè)實(shí)施例中,處理器102可以包括復(fù)雜指令集計(jì)算機(jī)(CISC)微處理器、精簡(jiǎn)指令集計(jì)算(RISC)微處理器、超長(zhǎng)指令字(VLIW)微處理器、實(shí)現(xiàn)指令集的組合的處理器,或任何其他處理器設(shè)備,諸如數(shù)字信號(hào)處理器,諸如微處理器、數(shù)字信號(hào)處理器或微控制器。
[0016]雖然圖1A只示出了一個(gè)這樣的處理器102,但是,系統(tǒng)100中可以有一個(gè)或多個(gè)處理器,一個(gè)或多個(gè)處理器可以包括多個(gè)線程、多個(gè)核等等。本增強(qiáng)不僅限于計(jì)算系統(tǒng)。本發(fā)明的替換實(shí)施例可以用于使用統(tǒng)一可擴(kuò)展固件接口(UEFI)基本輸入/輸出系統(tǒng)(BIOS)的諸如手持式設(shè)備和嵌入式應(yīng)用之類的任何形狀因子設(shè)備中。手持式設(shè)備的某些示例包括蜂窩電話、網(wǎng)際協(xié)議設(shè)備、數(shù)碼相機(jī)、個(gè)人數(shù)字助理(PDA),或諸如上網(wǎng)本或筆記本之類的手持式PC。嵌入式應(yīng)用可包括微控制器、數(shù)字信號(hào)處理器(DSP)、單片系統(tǒng)、網(wǎng)絡(luò)計(jì)算機(jī)(NetPC)、機(jī)頂盒、網(wǎng)絡(luò)中樞、廣域網(wǎng)(WAN)交換機(jī),或任何其他系統(tǒng)。
[0017]處理器102可以耦合到系統(tǒng)邏輯芯片104。例如,在所示出的實(shí)施例中,系統(tǒng)邏輯芯片104可以是存儲(chǔ)器控制器中樞(MCH)。在一個(gè)實(shí)施例中,MCH104可以提供到系統(tǒng)存儲(chǔ)器106的存儲(chǔ)器路徑120用于指令和數(shù)據(jù)存儲(chǔ)和/或用于例如圖形命令、數(shù)據(jù)和紋理的存儲(chǔ)。存儲(chǔ)器路徑120可以包括存儲(chǔ)器總線。MCH104可以在系統(tǒng)100中的處理器102、系統(tǒng)存儲(chǔ)器106、及其他組件之間定向數(shù)據(jù)信號(hào),并在處理器102、系統(tǒng)存儲(chǔ)器106、以及系統(tǒng)I/O之間橋接數(shù)據(jù)信號(hào)。存儲(chǔ)器106可以是硬盤、軟盤、隨機(jī)存取存儲(chǔ)器(RAM)、只讀存儲(chǔ)器(ROM)、閃存,或可由處理器102讀取的任何其他類型的介質(zhì)。
[0018]MCH104可以通過(guò)本地I/O互連來(lái)耦合到I/O控制器中樞(ICH) 108。在一個(gè)實(shí)施例中,本地I/O互連可以是諸如外圍組件互連(PCI)總線之類的高速I/O總線。ICH108可以,例如,通過(guò)本地I/O互連,提供到一個(gè)或多個(gè)I/O設(shè)備的連接。某些示例可以包括數(shù)據(jù)存儲(chǔ)設(shè)備118、音頻1/0120、鍵盤/鼠標(biāo)1/0122,以及網(wǎng)絡(luò)控制器116,或其他集成的I/O組件,諸如集成的驅(qū)動(dòng)器電子設(shè)備(IDE),局域網(wǎng)(LAN)和串行擴(kuò)展端口,諸如通用串行總線(USB)、PCI插槽(未示出)、無(wú)線收發(fā)器,舊式I/O控制器等等。數(shù)據(jù)存儲(chǔ)設(shè)備118可以包括硬盤驅(qū)動(dòng)器、軟盤驅(qū)動(dòng)器、CD-ROM設(shè)備、閃存設(shè)備,或其他大容量存儲(chǔ)設(shè)備。
[0019]參考圖1A,諸如閃存112之類的非易失性存儲(chǔ)器可以通過(guò),例如,低管腳數(shù)(LPC)總線,耦合到ICH108。BIOS固件114可以駐留在閃存112中,引導(dǎo)程序可以執(zhí)行來(lái)自閃存,或固件的指令。雖然圖1A示出了閃存112中的BIOS固件114,但是,在某些實(shí)施例中,BIOS固件114可以存儲(chǔ)在諸如固件中樞之類的其他非易失性存儲(chǔ)器等等中。在一個(gè)實(shí)施例中,BIOS固件114可以通過(guò)統(tǒng)一可擴(kuò)展固件接口(UEFI)固件或任何其他固件來(lái)實(shí)現(xiàn)。
[0020]雖然圖1A示出了系統(tǒng)100,但是,根據(jù)本發(fā)明的各實(shí)施例可以用于任何其他硬件體系結(jié)構(gòu)中,諸如使用多個(gè)處理器核的平臺(tái),或使用處理器或協(xié)同處理器的平臺(tái),使用1/0中樞的平臺(tái),或可以使用嵌入在處理器內(nèi)的存儲(chǔ)器控制等等。
[0021]圖1B示出了實(shí)現(xiàn)本發(fā)明的原理的系統(tǒng)140的替換實(shí)施例。系統(tǒng)140可以包括處理器142。處理器142可以包括任何類型的能夠執(zhí)行軟件和/或處理數(shù)據(jù)信號(hào)的處理器。在一個(gè)實(shí)施例中,處理器142可以包括如上文對(duì)于處理器102所提及的任何類型的處理器或處理器設(shè)備。在一個(gè)實(shí)施例中,處理器142可以通過(guò)存儲(chǔ)器路徑(未示出)耦合到用于指令和數(shù)據(jù)存儲(chǔ)和/或用于,例如,圖形命令、數(shù)據(jù)和紋理的存儲(chǔ)的系統(tǒng)存儲(chǔ)器144。在另一個(gè)實(shí)施例中,處理器142可以通過(guò)PCI互連耦合到一個(gè)或多個(gè)外圍組件互連(PCI)端口 160 ;然而,在某些實(shí)施例中,PCI端口 160可能不是必需的。存儲(chǔ)器144可以是硬盤、軟盤、隨機(jī)存取存儲(chǔ)器(RAM)、只讀存儲(chǔ)器(ROM)、閃存,或可由處理器142讀取的任何其他類型的介質(zhì)。
[0022]雖然圖1B只示出了一個(gè)這樣的處理器142,但是,系統(tǒng)140中可以有一個(gè)或多個(gè)處理器,一個(gè)或多個(gè)處理器可以包括多個(gè)線程、多個(gè)核等等。本增強(qiáng)不僅限于計(jì)算機(jī)系統(tǒng)或數(shù)據(jù)處理設(shè)備系統(tǒng)。本發(fā)明的替換實(shí)施例可以用于使用統(tǒng)一可擴(kuò)展固件接口(UEFI)基本輸入/輸出系統(tǒng)(BIOS)的諸如手持式設(shè)備和嵌入式應(yīng)用之類的任何形狀因子設(shè)備中。手持式設(shè)備的某些示例包括蜂窩電話、網(wǎng)際協(xié)議設(shè)備、數(shù)碼相機(jī)、個(gè)人數(shù)字助理(PDA),或諸如上網(wǎng)本或筆記本之類的手持式PC,或諸如平板電腦或智能電話之類的智能設(shè)備等等。嵌入式應(yīng)用可包括微控制器、數(shù)字信號(hào)處理器(DSP)、單片系統(tǒng)、網(wǎng)絡(luò)計(jì)算機(jī)(NetPC)、機(jī)頂盒、網(wǎng)絡(luò)中樞、廣域網(wǎng)(WAN)交換機(jī),或任何其他系統(tǒng)。
[0023]處理器142可以耦合到系統(tǒng)邏輯芯片146。例如,在所示出的實(shí)施例中,系統(tǒng)邏輯芯片146可以是平臺(tái)控制器中樞(PCH)。在一個(gè)實(shí)施例中,PCH146可以,例如,通過(guò)本地I/O互連,提供到一個(gè)或多個(gè)I/O設(shè)備的連接。在一個(gè)實(shí)施例中,本地I/O互連可以是諸如外圍組件互連(PCI)總線之類的高速I/O總線。PCH146可以在處理器142和系統(tǒng)140中的一個(gè)或多個(gè)其他組件之間定向數(shù)據(jù)信號(hào)或其他信息,并在處理器142和系統(tǒng)I/O之間橋接數(shù)據(jù)信號(hào)或信息。
[0024]一個(gè)或多個(gè)組件的某些示例可以包括數(shù)據(jù)存儲(chǔ)設(shè)備142、一個(gè)或多個(gè)PCI端口154、網(wǎng)絡(luò)控制156、USB端口 158。在一個(gè)實(shí)施例中、數(shù)據(jù)存儲(chǔ)設(shè)備152可以包括硬盤驅(qū)動(dòng)器、軟盤驅(qū)動(dòng)器、CD-ROM設(shè)備、閃存設(shè)備,或其他大容量存儲(chǔ)設(shè)備。雖然圖1B示出了組件的某些示例,但是PCH146可以提供到任何其他組件的連接,諸如音頻I/O、鍵盤/鼠標(biāo)1/0,及其他集成I/O組件,諸如集成的驅(qū)動(dòng)器電子設(shè)備(IDE)、局域網(wǎng)(LAN)及其他串行擴(kuò)展端口,無(wú)線收發(fā)器,舊式I/O控制器等等。
[0025]參考圖1B,諸如閃存148之類的非易失性存儲(chǔ)器可以通過(guò),例如,低管腳數(shù)(LPC)總線,耦合到PCH146。BIOS固件150可以駐留在閃存148中,引導(dǎo)程序可以執(zhí)行來(lái)自閃存或固件的指令。雖然圖1B示出了閃存148中的BIOS固件150,但是,在某些實(shí)施例中,BIOS固件150可以存儲(chǔ)在諸如固件中樞之類的其他非易失性存儲(chǔ)器等等中。在一個(gè)實(shí)施例中,BIOS固件150可以通過(guò)統(tǒng)一可擴(kuò)展固件接口(UEFI)固件或任何其他固件來(lái)實(shí)現(xiàn)。
[0026]雖然圖1B示出了系統(tǒng)140,但是,根據(jù)本發(fā)明的各實(shí)施例可以用于任何其他硬件和軟件體系結(jié)構(gòu)中,諸如使用多個(gè)處理器核的平臺(tái),或使用處理器或協(xié)同處理器的平臺(tái),使用I/o集線器的平臺(tái),或可以使用嵌入在處理器內(nèi)的存儲(chǔ)器控制等等。
[0027]圖1C示出了可以實(shí)現(xiàn)本發(fā)明的原理的系統(tǒng)160的另一實(shí)施例。系統(tǒng)160可以包括處理器162。處理器162可以包括任何類型的能夠執(zhí)行軟件和/或處理數(shù)據(jù)信號(hào)的處理器。處理器162可以包括如上文對(duì)于處理器102所提及的任何類型的處理器或處理器設(shè)備。系統(tǒng)160可以包括存儲(chǔ)器163,該存儲(chǔ)器163可以通過(guò)互連168或諸如總線、存儲(chǔ)器路徑等等之類的任何其他連接耦合到處理器162。存儲(chǔ)器163的示例可以包括硬盤、軟盤、隨機(jī)存取存儲(chǔ)器(RAM)、只讀存儲(chǔ)器(ROM)、閃存、易失性存儲(chǔ)器設(shè)備或非易失性存儲(chǔ)器設(shè)備,或任何其他類型的可由處理器162讀取的介質(zhì)。在另一個(gè)實(shí)施例中,處理器162可以耦合到網(wǎng)絡(luò)組件164,網(wǎng)絡(luò)組件164可以包括,例如,有線網(wǎng)絡(luò)連接和/或無(wú)線網(wǎng)絡(luò)連接或任何其他網(wǎng)絡(luò)連接。處理器162可以進(jìn)一步耦合到I/O控制器165,該I/O控制器165可以耦合到一個(gè)或多個(gè)I/O設(shè)備166。圖1C示出了系統(tǒng)160的實(shí)施例;在某些實(shí)施例中,系統(tǒng)160可以包括可以以硬件、軟件、固件或它們的任何組合來(lái)實(shí)現(xiàn)的一個(gè)或多個(gè)其他組件。在另一個(gè)實(shí)施例中,系統(tǒng)160的示例可以包括如上文對(duì)于圖1A或IB所提及的任何形狀因子設(shè)備或裝置。
[0028]圖2A是根據(jù)本發(fā)明的一個(gè)實(shí)施例的不意圖。參考編號(hào)210可以表不可以具有store_0 (存儲(chǔ)_0)、store_l等等的順序的原始代碼或指令,如圖2A所示。在一個(gè)實(shí)施例中,原始代碼可以在原子區(qū)內(nèi);然而,在某些實(shí)施例中,原子區(qū)可能不是必需的。在一個(gè)實(shí)施例中,可以將原始代碼210重新排序或調(diào)度到可以相對(duì)于原始代碼具有不同的序列或順序的調(diào)度的代碼或指令220。例如,指令220a可以表示存儲(chǔ)器存儲(chǔ)指令Store_5,該存儲(chǔ)器存儲(chǔ)指令store_5可以被調(diào)度到由,例如,執(zhí)行邏輯執(zhí)行的第一指令。圖2A的實(shí)施例可以使用基于旋轉(zhuǎn)的別名保護(hù)寄存器,這些寄存器可以允許每一個(gè)存儲(chǔ)器指令設(shè)置別名保護(hù)寄存器,并針對(duì)帶有比特屏蔽的一組別名保護(hù)寄存器進(jìn)行檢查。
[0029]在一個(gè)實(shí)施例中,可以使用基于旋轉(zhuǎn)的別名檢查。別名保護(hù)寄存器可以以環(huán)形緩存器或基于AHPTR (別名首部指示符)270旋轉(zhuǎn)的循環(huán)隊(duì)列來(lái)組織,AHPTR270可以指向環(huán)形緩存器的首部。存儲(chǔ)器指令可以指定相對(duì)于當(dāng)前AHPTR270的別名保護(hù)寄存器編號(hào)0RD230(帶有可能的折回)。例如,參考圖2A,基于原始代碼的順序,可以在環(huán)形緩存器的首部設(shè)置第一指令storej)的帶有寄存器ORD “O”的第一別名保護(hù)寄存器,第二指令storej可以指定帶有寄存器ORD “I”的第二別名保護(hù)寄存器,等等。在另一個(gè)實(shí)施例中,存儲(chǔ)器指令可以具有P比特以表示,諸如處理器102或142之類的硬件或任何其他執(zhí)行邏輯可以為當(dāng)前指令設(shè)置帶有寄存器編號(hào)AHPTR+0RD的別名保護(hù)寄存器。在一個(gè)實(shí)施例中,可以檢查[AHPTR+ORD, AHPTR)的范圍中的寄存器。例如,如果AHPTR=2,ORD=I,并且總的寄存器編號(hào)是5 (例如,0-4),則可以檢查[3,2)范圍內(nèi)的寄存器3,寄存器4,寄存器O和寄存器I。在一個(gè)實(shí)施例中,可以使用折回。
[0030]存儲(chǔ)器指令可以具有C比特以表示,諸如處理器之類的硬件或任何其他執(zhí)行邏輯可以檢查所有帶有寄存器編號(hào)>=AHPTR+0RD (帶有可能的折回)的別名保護(hù)寄存器。響應(yīng)于指令調(diào)度,可以基于指令的原始執(zhí)行順序,為調(diào)度的指令分配帶有編號(hào)0RD230的別名保護(hù)寄存器。例如,在圖2A中,作為原始程序執(zhí)行的順序,可以分配帶有0RD230的別名保護(hù)
寄存器。
[0031]在另一個(gè)實(shí)施例中,存儲(chǔ)器指令可以指定旋轉(zhuǎn)編號(hào)R0T,該ROT可以表示別名首部指示符可以旋轉(zhuǎn)ROT中所指出的量。在一個(gè)實(shí)施例中,可以使用旋轉(zhuǎn)值ROT來(lái)表示可以釋放AHPTR和AHPTR+R0T之間的所有別名保護(hù)寄存器(帶有可能的折回,包括AHPTR,排除AHPTR+R0T),例如,在執(zhí)行指令之前。在一個(gè)實(shí)施例中,諸如處理器102或142之類的硬件可以將AHPTR旋轉(zhuǎn)R0T,并清除AHPTR和AHPTR+R0T之間的別名保護(hù)寄存器的所有有效比特。
[0032]在一個(gè)實(shí)施例中,響應(yīng)于設(shè)置帶有P比特的別名保護(hù)寄存器,硬件可以為寄存器設(shè)置有效比特。例如,帶有,例如,邏輯“I”的有效比特可以表示可以通過(guò),例如,硬件,檢查的有效別名保護(hù)寄存器。在另一個(gè)實(shí)施例中,帶有邏輯值,例如,“O”的有效比特可以表示可以不檢查相應(yīng)的別名保護(hù)寄存器。例如,圖2A的數(shù)字參考編號(hào)240可以表示“valid_all (有效_全部)”,“valid_all ”可以包括一組一個(gè)或多個(gè)別名保護(hù)寄存器的一組一個(gè)或多個(gè)有效比特。在一個(gè)實(shí)施例中,“valid_all”240中的有效比特的數(shù)量可以與別名保護(hù)寄存器的數(shù)量和/或調(diào)度的指令的數(shù)量相同;然而,在某些實(shí)施例中,有效比特的數(shù)量可以不同于調(diào)度的指令的數(shù)量。例如,基于原始代碼的順序,可以在valid_all240的最高階比特設(shè)置最后一個(gè)指令store_5的帶有ORD“5”的別名保護(hù)寄存器的有效比特,并可以在valid_all240的最低階比特設(shè)置第一指令store_0的帶有ORD “O”的別名保護(hù)寄存器的有效比特,等等;然而,在某些實(shí)施例中,可以按不同的順序提供valid_all240中的有效比特。在某些實(shí)施例中,valid_all240中的有效比特可以具有基于別名保護(hù)寄存器的ORD的順序。
[0033]例如,valid_all字段240a可以是“000000”,“000000”可以表示對(duì)于指令“st0re_5”(調(diào)度的序列中的第一指令),可以不檢查別名保護(hù)寄存器中的任何一個(gè)。valid_all字段240b可以涉及調(diào)度的代碼中的后續(xù)指令“store_2”。valid_all字段240b可以是“ 100000”,其中,有效比特“ I”可以對(duì)應(yīng)于前一指令“store_5”,并可以表示可以檢查“st0re_5”的別名保護(hù)寄存器。而且,240b中的有效比特“00000”可以表示,可以不檢查store_2 其本身、store_0、load_4 (加載 _4)、store_l, load_3 的別名保護(hù)寄存器。
[0034]參考圖2A,valid_st (有效_st)字段250可以涉及存儲(chǔ)指令,并可以包括一組一個(gè)或多個(gè)有效比特。例如,valid_st250可以與valid_all240的不同之處在于,加載指令的別名保護(hù)寄存器的有效比特可以具有valid_st250中的邏輯值“O”。在一個(gè)實(shí)施例中,諸如102或142之類的硬件或其他執(zhí)行邏輯可以為,例如,所有別名保護(hù)寄存器維持有效比特,并在執(zhí)行每一個(gè)指令之前,計(jì)算比特屏蔽260,用于檢查。加載指令可以不檢查另一個(gè)加載指令。從load_3的比特屏蔽260a可以看出,可以沒(méi)有l(wèi)oad_4的有效比特(例如,邏輯值“1”),或可以不斷言load_4的別名保護(hù)寄存器的有效比特。在另一個(gè)實(shí)施例中,對(duì)于load_3的比特屏蔽260a,可以沒(méi)有按原始執(zhí)行順序排序在load_3之前的store_0,store_l,和store_2的有效比特。硬件可以為所有指令(例如,valid_all240)以及只為存儲(chǔ)指令(例如,valid_st250),維持單獨(dú)的有效比特。存儲(chǔ)指令可以檢查valid_all240,加載指令可以只檢查valid_st250。
[0035]圖2A示出了諸如處理器或任何其他執(zhí)行邏輯之類的硬件維持valid_all240、valid_st250并基于0RD230,例如,以C語(yǔ)言語(yǔ)義,計(jì)算屏蔽260的公式的實(shí)施例。圖2A的基于旋轉(zhuǎn)的別名保護(hù)寄存器的寄存器分配的算法可以按它們的原始程序順序?yàn)槊恳粋€(gè)指令分配寄存器,在圖2A中示為“寄存器0RD”230。可以使用該算法來(lái)保證在別名檢查中沒(méi)有假陰性或假陽(yáng)性。參考圖2A,在一個(gè)實(shí)施例中,每一個(gè)指令都可以具有P/C比特(未示出),但是可以不具有R0T。在再一個(gè)實(shí)施例中,諸如處理器或任何其他執(zhí)行邏輯之類的硬件可以運(yùn)行帶有0RD/P/C230的調(diào)度的代碼220,并計(jì)算valid_all240、valid_st250和valid_mask (有效_屏蔽)260,以執(zhí)行別名檢查。
[0036]參考圖2B,示出了寄存器分配的實(shí)施例。在一個(gè)實(shí)施例中,可以使用圖2B的寄存器分配來(lái)減少基于旋轉(zhuǎn)的別名保護(hù)寄存器方案中所使用的別名保護(hù)寄存器的數(shù)量,并可能不生成假陽(yáng)性或假陰性。圖2B的實(shí)施例可以與指令調(diào)度和優(yōu)化集成,并可以用于動(dòng)態(tài)優(yōu)化。在一個(gè)實(shí)施例中,不是每一個(gè)存儲(chǔ)器指令都可以設(shè)置別名保護(hù)寄存器,并且不是每一個(gè)存儲(chǔ)器指令都可以檢查其他別名保護(hù)寄存器。例如,在圖2B中,storej)、^^01^_1和load_3中一個(gè)也不可以設(shè)置別名保護(hù)寄存器,因?yàn)闆](méi)有指令可以檢查它們。Store_5可以不檢查任何其他別名保護(hù)寄存器,因?yàn)樗徽{(diào)度為區(qū)域中的第一指令。圖2B的實(shí)施例可以使用三個(gè)寄存器,而并非六個(gè)寄存器。
[0037]參考圖2B,store_5、store_2和load_4可能需要保護(hù)(例如,它們的P比特可以設(shè)置為1,它們的C比特(未示出)可以設(shè)置為0),可以給它們分別分配帶有ORD編號(hào)2,0,和I的寄存器。Store_0、store_l和load_3可能不需要保護(hù),并可能只檢查其他別名寄存器(例如,它們的P比特可以設(shè)置為0,它們的C比特可以設(shè)置為I)。圖2B示出了基于0RD,P和C計(jì)算valid_all240、valid_st250和屏蔽260的實(shí)施例。
[0038]圖2C示出了寄存器分配的另一實(shí)施例。在圖2C的實(shí)施例中,響應(yīng)于判斷store_l和load_4可以不訪問(wèn)同一個(gè)存儲(chǔ)器,例如,通過(guò)軟件分析,store_l可以不檢查load_4。圖2C的實(shí)施例可以使用兩個(gè)寄存器。參考圖2C,可以保護(hù)st0re_5、st0re_2 (例如,它們的P比特=1),可以給它們分別分配帶有0RD1,以及O的寄存器。store_0, load_4, store_l以及l(fā)oad_3 (例如,它們的P比特=0,C比特=1)可以只檢查其他別名寄存器。在圖2A到2C的各實(shí)施例中,寄存器分配可以遵循原始程序順序。例如,如果在原始程序中第一指令將在第二指令之前執(zhí)行,則第一指令的寄存器編號(hào)可以不大于第二指令。
[0039]圖2D示出了寄存器分配的再一個(gè)實(shí)施例。參考圖2D,示出了數(shù)據(jù)相關(guān)性的實(shí)施例。例如,可以定義相關(guān)性Al—A2,如果I)以原始程序順序,指令A(yù)l將在指令A(yù)2之前執(zhí)行;2) Al和A2可以訪問(wèn)同一個(gè)存儲(chǔ)器;3)A1和A2中的至少一個(gè)是存儲(chǔ)指令。圖2D進(jìn)一步示出了檢查約束的實(shí)施例。例如,響應(yīng)于,例如,指令調(diào)度器推測(cè)Al和A2在運(yùn)行時(shí)可能不會(huì)沖突,指令調(diào)度器可以將A2移動(dòng)到Al之前。例如,指令調(diào)度器可以通過(guò)軟件來(lái)實(shí)現(xiàn)。如果Al — A2,并且指令A(yù)2被重新排序到Al之前,則A2可以設(shè)置要由Al檢查的別名保護(hù)寄存器??梢远x檢查約束Aloc A2,如果1)A1—A2;2)通過(guò)調(diào)度,A2被重新排序到Al之前。在一個(gè)實(shí)施例中,指令A(yù)l可以響應(yīng)于Alic A2,檢查指令A(yù)2。在某些實(shí)施例中,檢查約束可以不是過(guò)渡的。例如,Al=C A2和A2二c A3可以不暗示Al=c A3
[0040]在一個(gè)實(shí)施例中,檢查約束Al=c A2可以判斷哪一個(gè)指令可以設(shè)置別名保護(hù)寄存器,哪些指令可以檢查其他指令。例如,檢查約束Al=C A2可以判斷指令A(yù)2可以設(shè)置帶有P比特的新別名保護(hù)寄存器,而指令A(yù)l (帶有C比特)可以檢查指令A(yù)2。圖2D示出了原始程序順序的寄存器分配的實(shí)施例。例如,如圖2D所示,load_l和load_3可以基于相應(yīng)的檢查約束和/或數(shù)據(jù)相關(guān)性,設(shè)置帶有P比特的新別名保護(hù)寄存器,如圖2D所示。寄存器O和I可以根據(jù)它們的原始程序順序分別分配到load_l和load_3。Store_2可以檢查在store_2之前調(diào)度的指令load_3的寄存器I。Store_0可以檢查在store_0之前調(diào)度的指令load_l的寄存器O。在圖2D的實(shí)施例中,可以沒(méi)有檢查約束store_0—c load_3 (例如,
store_0可以不訪問(wèn)帶有l(wèi)oad_3的同一存儲(chǔ)器),并且store_0可能不需要檢查load_3。
[0041]圖2E示出了不在原始程序順序里的寄存器分配的實(shí)施例。例如,參考圖2E,可以按與它們的原始程序順序相反的順序,分別將寄存器O和I分配給load_3和load_l。參考圖2E,Load_3的寄存器O (0RD0/P)可以只由Store_2檢查(0RD0/C)。在圖2E的實(shí)施例中,在Store_2之后,可以不檢查寄存器O。參考圖2F,可以旋轉(zhuǎn)AHPTR達(dá)ROT “1”,以釋放寄存器O。例如,寄存器O可以在load_l的執(zhí)行開(kāi)始時(shí)旋轉(zhuǎn)和釋放;然而,在某些實(shí)施例中,寄存器O可以被釋放,例如,響應(yīng)于寄存器可能已經(jīng)被檢查并可能不被任何其他指令使用。在另一個(gè)實(shí)施例中,旋轉(zhuǎn)可以在store_2的執(zhí)行之后執(zhí)行。響應(yīng)于旋轉(zhuǎn),AHPTR可以增大I(例如,當(dāng)前AHPTR=I)。對(duì)于相對(duì)于當(dāng)前AHPTR計(jì)數(shù)的后續(xù)指令,ORD仍可以是“O”。圖2E和圖2F可以執(zhí)行相同別名檢查。例如,圖2F可以利用旋轉(zhuǎn)將寄存器編號(hào)減少為I個(gè)寄存器。
[0042]在圖2F的利用旋轉(zhuǎn)的寄存器分配的實(shí)施例中,可以響應(yīng)于store_2已經(jīng)檢查寄存器0,load_3所使用的寄存器O通過(guò)寄存器旋轉(zhuǎn)來(lái)釋放。在此實(shí)施例中,可以使用一個(gè)寄存器。圖2F示出了基于0RD,P,C,ROT和寄存器計(jì)數(shù)REG (例如,I)來(lái)計(jì)算valid_all、valid_st和屏蔽的實(shí)施例。在一個(gè)實(shí)施例中,可以相對(duì)于AHPTR,計(jì)算公式中的val id_al 1、valid_st和屏蔽。例如:
[0043]mask(n) =valid_all (η)& ~ ((1?0RD (η)) -1),如果 η 是存儲(chǔ)且 C(n);
[0044]=valid_st (n)& ~((1?0RD (n)) -1),如果 n 是加載且 C (n).[0045]在一個(gè)實(shí)施例中,硬件可以循環(huán)地將屏蔽左移位,達(dá)AHPTR,以便檢查。在一個(gè)實(shí)施例中,“循環(huán)地左移位”可以將屏蔽中的比特向左移,并向右折回溢出比特。例如,對(duì)于屏蔽00001111,循環(huán)地左移位2,會(huì)導(dǎo)致00111100。在圖2F的實(shí)施例中,可以相對(duì)于AHPTR,計(jì)算valid_all、valid_st,以及屏蔽。例如,如果AHPTR=2,屏蔽00001111可以表示寄存器2到寄存器5具有屏蔽值“ I”,寄存器6、7、0、I中每一個(gè)都可以具有屏蔽值“O”。
[0046]可以使用圖2G的實(shí)施例來(lái)基于與指令調(diào)度集成的檢查約束和防檢查約束來(lái)提供寄存器分配。在一個(gè)實(shí)施例中,如果`Al=C A2,Al的寄存器Al可以不大于A2的,以便Al檢查A2。在某實(shí)施例中,在寄存器分配中可以使用檢查約束和防檢查約束,來(lái)避免別名檢查中的假陽(yáng)性。在一個(gè)實(shí)施例中,可以定義防檢查約束Al = ac A2,如果1)A1 — A2 ;2)A1可以基于檢查約束AO=C Al,來(lái)設(shè)置別名保護(hù)寄存器;3)A2可以基于檢查約束A2=c A3來(lái)檢查某些別名保護(hù)寄存器;以及4)調(diào)度可以不將A2重新排序在Al之前。
[0047]在一個(gè)實(shí)施例中,基于防檢查約束Alsac A2,Al的寄存器編號(hào)可以小于A2,以防止A2檢查Al (例如,以避免可能的假陽(yáng)性)??梢允褂脵z查約束來(lái)減少或最小化寄存器分配中的約束,例如,以防止檢查中的假陰性,可以使用防檢查約束來(lái)減少/最小化寄存器分配中的額外的約束,例如,以防止檢查中的假陽(yáng)性。
[0048]當(dāng)用完別名寄存器時(shí),可以使用圖2G的實(shí)施例來(lái)動(dòng)態(tài)地限制調(diào)度。參考圖2G,可以在調(diào)度過(guò)程中遞增地構(gòu)建檢查約束和防檢查約束??梢灾豁憫?yīng)于指令被調(diào)度,分配指令的寄存器。如果Al=C A2或Al=ac A2,則可以延遲對(duì)于A2的寄存器分配,直到分配Al的寄存器。在圖2G的實(shí)施例中,P (A) ,C(A)、ORD (A)和ROT(A)可以分別表示指令A(yù)的P比特、C比特、ORD和R0T。在一個(gè)實(shí)施例中,優(yōu)化器/調(diào)度器可以被用來(lái)跟蹤在一個(gè)或多個(gè)指令的執(zhí)行過(guò)程中,例如,在調(diào)度過(guò)程中,可能發(fā)生的AHPTR變化。在一個(gè)實(shí)施例中,優(yōu)化器/調(diào)度器可以,例如,通過(guò)軟件來(lái)實(shí)現(xiàn)。例如,AHPTR_AT(A)可以為延遲的寄存器分配,在執(zhí)行指令A(yù)時(shí)記錄AHPTR。R(A)可以表示是否分配A的寄存器。在圖2G的實(shí)施例中,在所有檢查指令的指令都被調(diào)度之后(例如,基于檢查約束),可以延遲對(duì)于指令的寄存器分配。在一個(gè)實(shí)施例中,可以釋放一個(gè)或多個(gè)已分配的寄存器,例如,在相應(yīng)的調(diào)度的指令之后(例如,只在下一調(diào)度的指令的開(kāi)始時(shí))。雖然圖2G的實(shí)施例可以使用列表調(diào)度,但是,可以擴(kuò)展一些實(shí)施例,以與諸如模調(diào)度之類的任何其他調(diào)度技術(shù)一起協(xié)作。
[0049]參考圖2G,可以與指令調(diào)度集成的寄存器分配的實(shí)施例。在一個(gè)實(shí)施例中,實(shí)施例可以檢查它是否用完寄存器(例如,ORD(A) >=REG)。參考圖2G,ORD(A)可以涉及三個(gè)變量,可以表示寄存器計(jì)數(shù)的REG、AHPTR和AHPTR_AT (A)。AHPTR可以始終可用。變量“REG”可以被若干個(gè)指令包圍,P(A)=I和!R(A),P(A)可以表示指令A(yù)可能需要新寄存器來(lái)設(shè)置保護(hù),!R(A)可以表示指令A(yù)的寄存器還沒(méi)有分配。例如,變量“REG”可以被其寄存器分配被延遲的若干個(gè)指令包圍。在一個(gè)實(shí)施例中,AHPTR可以保持按調(diào)度的順序增大。AHPTR_AT(A)可以為延遲的寄存器分配,在執(zhí)行指令A(yù)時(shí)記錄AHPTR。在一個(gè)實(shí)施例中,可以計(jì)數(shù)延遲的寄存器分配,以阻止寄存器溢出。
[0050]在一個(gè)實(shí)施例中,優(yōu)化器/調(diào)度器可以在調(diào)度過(guò)程中跟蹤諸如變量REG、AHPTR,AHPTR_AT之類的信息,以估計(jì)是否有一個(gè)或多個(gè)別名保護(hù)寄存器待被分配給調(diào)度的指令或它是否用完寄存器。在一個(gè)實(shí)施例中,響應(yīng)于用完寄存器,可以防止任何新指令A(yù)的重新排序(即,P(A)=1)。在一個(gè)實(shí)施例中,可以按它們的原始執(zhí)行順序來(lái)調(diào)度剩余指令,以避免重新排序。
[0051]圖2H示出了可以使用別名寄存器的處理存儲(chǔ)器優(yōu)化的實(shí)施例。如果第二存儲(chǔ)器操作可能與它們之間的某些存儲(chǔ)器操作有沖突,則優(yōu)化可能是推測(cè)性的。例如,推測(cè)性的存儲(chǔ)器優(yōu)化可以使用別名寄存器保護(hù)和檢查。可以在指令調(diào)度之前應(yīng)用優(yōu)化,可以在指令調(diào)度過(guò)程中執(zhí)行別名寄存器分配:然而,在某些實(shí)施例中,指令優(yōu)化可能不是必需的。響應(yīng)于優(yōu)化和在調(diào)度過(guò)程中,已優(yōu)化的代碼可以在邏輯上被視為將消除的指令合并到其他指令,而合并的指令/代碼可以用于所有消除的指令上的別名檢查。參考圖2H,在store-load(存儲(chǔ)-加載)消除282的實(shí)施例中,代碼可以在邏輯上被視為將load_2合并到store_l。在1ad-1oad (加載-加載)消除284,代碼可以在邏輯上被視為將load_2合并到load_l。在store-store-elimination (存儲(chǔ)-存儲(chǔ)-消除)286,代碼可以在邏輯上被視為將store_l合并到store_2。在一個(gè)實(shí)施例中,合并的指令可以包含一個(gè)或多個(gè)邏輯指令/代碼。
[0052]在對(duì)于合并的指令的調(diào)度過(guò)程中,可以考慮合并的指令中的邏輯指令上的約束。例如,在圖21所不的代碼中,可以從store_0到load_3應(yīng)用store-load-elimination(存儲(chǔ)-加載-消除)。在優(yōu)化之后以及在調(diào)度中,當(dāng)調(diào)度storej)時(shí),可以考慮storej)和load_3上的約束。在圖21中,示出了寄存器分配。參考圖21,在優(yōu)化中,Store_2可以檢查L(zhǎng)oad_3, Store_0 可以檢查 Load_l。響應(yīng)于 Load_3 和 Store_0 被合并到 Store_0, Store_2可以檢查Store_0, Store_0可以檢查L(zhǎng)oad_l。Store_0和Load_l可能需要保護(hù)(P比特=1),并可以被分配寄存器O, I。Store_2和Store_0可以對(duì)照寄存器O檢查(C比特=1)。Store_0可以在設(shè)置保護(hù)(P比特=1)之前檢查寄存器0,如此,Store_0可以不檢查其本身。
[0053]在某些實(shí)施例中,合并的指令可能在數(shù)據(jù)相關(guān)性中包含循環(huán),這可能會(huì)導(dǎo)致檢查/防檢查約束中的循環(huán)。例如,檢查/防檢查約束中的循環(huán)可以被表示為:store」)(load_3)—c load_l —ac store_2—c store—O (load_3)n 在一個(gè)實(shí)施例中,如果
檢查/防檢查約束包含循環(huán),則分配別名保護(hù)寄存器可能會(huì)導(dǎo)致假陰性和假陽(yáng)性。
[0054]圖2J示出了插入偽加載以中斷約束循環(huán)的實(shí)施例。參考2J,在一個(gè)實(shí)施例中,合并的指令可以使用一個(gè)或多個(gè)別名保護(hù)寄存器來(lái)中斷約束循環(huán)。在另一個(gè)實(shí)施例中,可以將可以與合并的指令訪問(wèn)同一個(gè)存儲(chǔ)器但是相對(duì)于合并的指令可以使用不同的別名保護(hù)寄存器的偽存儲(chǔ)器指令插入在合并的指令緊接的后面。在一個(gè)實(shí)施例中,硬件可以實(shí)現(xiàn)偽存儲(chǔ)器指令,以只執(zhí)行別名保護(hù)/檢查,而沒(méi)有實(shí)際存儲(chǔ)器訪問(wèn),以減少開(kāi)銷。
[0055]在一個(gè)實(shí)施例中,如果約束循環(huán)可能不頻繁地發(fā)生,當(dāng)約束循環(huán)即將發(fā)生時(shí),可以插入偽存儲(chǔ)器操作。例如,在調(diào)度過(guò)程中,可以跟蹤有關(guān)合并的指令中的每一個(gè)邏輯指令的P/C比特的信息。在P/C比特位于合并的指令中的一個(gè)或多個(gè)邏輯指令的情況下,可以插入偽存儲(chǔ)器指令以分區(qū)P/C比特。在某些實(shí)施例中,如果合并的指令中的一個(gè)或多個(gè)邏輯指令訪問(wèn)同一個(gè)存儲(chǔ)器,則可以避免合并的指令中的一個(gè)或多個(gè)邏輯指令上的ρ/c比特設(shè)置。例如,在圖2H所示的加載-加載消除情況下,響應(yīng)于Load_2檢查的指令可以始終由Load_l檢查,Load_2上的C比特可以不設(shè)置。類似地,響應(yīng)于檢查L(zhǎng)oad_l的指令可以始終檢查L(zhǎng)oad_2,Load_l上的P比特可以不設(shè)置。在一個(gè)實(shí)施例中,可以保留至多三個(gè)邏輯指令上的C/P比特,諸如帶有C比特的最早的指令,帶有P比特的最近的指令和帶有P比特的最近的存儲(chǔ),不管有多少邏輯指令被合并到合并的指令中。圖2J的實(shí)施例示出了使用偽存儲(chǔ)器指令來(lái)中斷循環(huán)的示例。
[0056]在某些實(shí)施例中,偽存儲(chǔ)器指令可以中斷循環(huán),但是,可以不刪除檢查/防檢查約束。響應(yīng)于別名保護(hù)寄存器可能不足以用于調(diào)度,在循環(huán)的情況下,可以不執(zhí)行偽存儲(chǔ)器指令的調(diào)度。例如,在圖2J所示的調(diào)度中,響應(yīng)于在調(diào)度load_l之后沒(méi)有別名保護(hù)寄存器,可以不調(diào)度store_0或store_2中的任何一個(gè),如果對(duì)于任何一個(gè)調(diào)度需要至少多一個(gè)別名保護(hù)寄存器的話。圖2J的實(shí)施例可以示出,如果store_0將被調(diào)度,則對(duì)于將要被store_2檢查的du_y_load (偽_加載)可能需要新別名保護(hù)寄存器。如果store_2將被調(diào)度,則對(duì)于可能被store_0 (load_3)檢查的store_2,可能需要新別名保護(hù)寄存器。在一個(gè)實(shí)施例中,store_2的調(diào)度可以基于store_2的新別名保護(hù)寄存器的可用性來(lái)執(zhí)行。例如,響應(yīng)于判斷store_2的新別名保護(hù)寄存器可能不存在或可能不可用,可以不調(diào)度store_2。
[0057]在一個(gè)實(shí)施例中,可以預(yù)留若干個(gè)別名寄存器。例如,數(shù)量可以等于合并的指令中的消除的指令的數(shù)量。如果按它們的原始順序(對(duì)于合并的指令,其第一邏輯指令的順序)調(diào)度了所有剩余的指令,則只有重新排序的邏輯指令可以使用額外的別名寄存器。在預(yù)留了別名寄存器的情況下,可以在沒(méi)有用完寄存器的情況下執(zhí)行調(diào)度。
[0058]圖2K描繪了可以擴(kuò)展圖2G中的寄存器分配以處理寄存器溢出和約束循環(huán)的算法的實(shí)施例。參考圖2K,實(shí)施例可以為所有合并的指令預(yù)留寄存器計(jì)數(shù)。在一個(gè)實(shí)施例中,可以按照合并的指令中的消除的指令的數(shù)量來(lái)預(yù)留別名寄存器,以避免用完寄存器。在另一個(gè)實(shí)施例中,如果按它們的原始順序(對(duì)于合并的指令,其第一邏輯指令的順序)調(diào)度了所有剩余的指令,則只有重新排序的邏輯指令可能需要額外的別名寄存器。
[0059]圖3示出了方法的實(shí)施例。圖3的流程可以被用來(lái)對(duì)原始代碼執(zhí)行優(yōu)化和調(diào)度。在一個(gè)實(shí)施例中,在圖3的流程可以使用如圖2A到2K所示的一個(gè)或多個(gè)實(shí)施例。在一個(gè)實(shí)施例中,可以使用圖3的流程來(lái)實(shí)現(xiàn)可以優(yōu)化和/或調(diào)度原始代碼的優(yōu)化器/調(diào)度器。在一個(gè)實(shí)施例中,優(yōu)化器/調(diào)度器可以通過(guò)軟件來(lái)實(shí)現(xiàn);然而,在某些實(shí)施例中,優(yōu)化器/調(diào)度器可以通過(guò)硬件、軟件、固件和/或它們的任何組合來(lái)實(shí)現(xiàn)。在框302中,優(yōu)化器/調(diào)度器可以計(jì)算指令A(yù)l和A2之間的諸如Al — A2之類的數(shù)據(jù)相關(guān)性。在框304中,優(yōu)化器/調(diào)度器可以預(yù)留若干個(gè)別名寄存器,以阻止由于一個(gè)或多個(gè)合并的指令而導(dǎo)致的寄存器溢出。在一個(gè)實(shí)施例中,別名寄存器的數(shù)量可以等于合并的指令的數(shù)量;然而,在某些實(shí)施例中,別名寄存器的數(shù)量可以具有不同的值。在框306中,優(yōu)化器/調(diào)度器可以選擇一個(gè)指令,例如,第二指令A(yù)2,來(lái)調(diào)度,直到調(diào)度完原始代碼中的所有指令。
[0060]在框308中,響應(yīng)于判斷所選第二指令A(yù)2的調(diào)度可能會(huì)導(dǎo)致別名寄存器溢出,優(yōu)化器/調(diào)度器可以返回到框306,其中,優(yōu)化器/調(diào)度器可以選擇除第二指令A(yù)2以外的第三指令A(yù)3。響應(yīng)于在框306中選擇第三指令A(yù)3,優(yōu)化器/調(diào)度器可以判斷第三指令A(yù)3是否可以用完別名寄存器(框308)。如果是,則優(yōu)化器/調(diào)度器可以繼續(xù)選擇不同的指令來(lái)調(diào)度,直到判斷所選指令可能不會(huì)導(dǎo)致別名寄存器溢出。優(yōu)化器/調(diào)度器可以響應(yīng)于判斷所選指令可能不會(huì)導(dǎo)致別名寄存器溢出,來(lái)調(diào)度所選指令(框308)。在框310中,優(yōu)化器/調(diào)度器可以向約束圖(例如,如圖2K所示)添加涉及調(diào)度的指令(例如,A3)的約束,并設(shè)置相應(yīng)的C/P比特。在一個(gè)實(shí)施例中,優(yōu)化器/調(diào)度器可以向約束圖或任何其他結(jié)構(gòu)中添加對(duì)于調(diào)度的指令A(yù)3的檢查約束和/或防檢查約束。在框312中,優(yōu)化器/調(diào)度器可以插入偽存儲(chǔ)器操作或代碼,以阻止約束圖中的循環(huán)。在一個(gè)實(shí)施例中,優(yōu)化器/調(diào)度器可以刪除不需要的C/P比特,如果調(diào)度的指令A(yù)3是合并的指令的話。在另一個(gè)實(shí)施例中,如果調(diào)度的指令在多個(gè)邏輯指令上具有C/P比特,則優(yōu)化器/調(diào)度器可以插入一個(gè)或多個(gè)偽存儲(chǔ)器操作或指令以分區(qū)C/P比特。在另一個(gè)實(shí)施例中,如果調(diào)度的指令不需要?jiǎng)e名寄存器,則流程可以返回到框306以選擇和調(diào)度下一指令(框314)。在框316中,優(yōu)化器/調(diào)度器可以通過(guò)旋轉(zhuǎn)釋放已分配的別名寄存器。例如,釋放可以響應(yīng)于已分配的別名寄存器已經(jīng)被檢查并且沒(méi)有其他指令要對(duì)照已分配的寄存器檢查來(lái)實(shí)現(xiàn)。在一個(gè)實(shí)施例中,可以在下一指令的執(zhí)行開(kāi)始時(shí)釋放別名保護(hù)寄存器。在另一個(gè)實(shí)施例中,可以延遲當(dāng)前指令所使用的別名保護(hù)寄存器的分配,直到在下一指令的執(zhí)行開(kāi)始時(shí)釋放寄存器。在框316中,可以響應(yīng)于旋轉(zhuǎn),來(lái)更新AHPTR。在框318中,如果約束圖中的約束阻止對(duì)于調(diào)度的指令的別名寄存器分配,例如,如果有來(lái)自未被調(diào)度的后續(xù)指令的一個(gè)或多個(gè)約束,則優(yōu)化器/調(diào)度器可以延遲對(duì)于當(dāng)前調(diào)度的指令的寄存器分配。在一個(gè)實(shí)施例中,可以響應(yīng)于后續(xù)指令正在被調(diào)度,分配當(dāng)前調(diào)度的指令的別名寄存器。
[0061]例如,流程可以返回到框306,以選擇并調(diào)度下一指令。在框320中,響應(yīng)于判斷對(duì)于當(dāng)前調(diào)度的指令的寄存器分配可能不需要被延遲,優(yōu)化器/調(diào)度器可以為調(diào)度的指令分配別名寄存器。在框322中,響應(yīng)于為調(diào)度的指令分配新別名寄存器,優(yōu)化器/調(diào)度器可以刪除與調(diào)度的指令相關(guān)的約束,和/或可以遞歸地為其寄存器分配由于約束而被延遲的調(diào)度的指令分配別名寄存器。
[0062]在一個(gè)實(shí)施例中,圖2A到2K和圖3的各實(shí)施例可以用于對(duì)于基于旋轉(zhuǎn)的別名保護(hù)寄存器的寄存器分配。在一個(gè)實(shí)施例中,各實(shí)施例可以被用來(lái)減少基于旋轉(zhuǎn)的別名保護(hù)中所使用的寄存器的數(shù)量。例如,減少別名寄存器可以用于優(yōu)化優(yōu)點(diǎn)和性能。減少別名寄存器可以被用來(lái)實(shí)現(xiàn)別名硬件的減少,以節(jié)省管芯區(qū)和功耗。盡管圖3的方法被示為包括過(guò)程的序列,但是,某些實(shí)施例中的方法可以以不同的順序執(zhí)行所示出的過(guò)程。盡管如圖3和/或圖2A到2K所示的各實(shí)施例可以通過(guò)優(yōu)化器/調(diào)度器來(lái)實(shí)現(xiàn),但是,在某些實(shí)施例中,優(yōu)化和調(diào)度指令可以分別由優(yōu)化器和調(diào)度器分開(kāi)地實(shí)現(xiàn),或在某些實(shí)施例中,諸如寄存器分配邏輯之類的一個(gè)或多個(gè)邏輯可以被用來(lái)實(shí)現(xiàn)圖3和/或圖2A到2K的各實(shí)施例。在另一個(gè)實(shí)施例中,優(yōu)化和調(diào)度指令可以通過(guò)優(yōu)化器或者調(diào)度器來(lái)實(shí)現(xiàn)。盡管如此處所提及的各實(shí)施例可以涉及存儲(chǔ)和/或加載指令,但是,在某些實(shí)施例中,可以使用任何其他存儲(chǔ)器指令。
[0063]盡管參考各實(shí)施例描述了本發(fā)明的某些特征,但是,描述不旨在以限制性方式來(lái)解釋。對(duì)本發(fā)明涉及的所屬【技術(shù)領(lǐng)域】的專業(yè)人員顯而易見(jiàn)的對(duì)各實(shí)施例的各種修改,以及本發(fā)明的其他實(shí)施例被認(rèn)為在本發(fā)明的精神和范圍內(nèi)。
【權(quán)利要求】
1.一種方法,包括: 對(duì)一組指令執(zhí)行調(diào)度; 計(jì)算所述調(diào)度的指令組的數(shù)據(jù)相關(guān)性; 計(jì)算所述調(diào)度的指令組的檢查約束;以及 基于所述數(shù)據(jù)相關(guān)性和所述檢查約束,為所述調(diào)度的指令組分配別名寄存器。
2.如權(quán)利要求1所述的方法,還包括: 計(jì)算所述調(diào)度的指令組的防檢查約束;以及 進(jìn)一步基于所述防檢查約束,為所述調(diào)度的指令組分配別名寄存器。
3.如權(quán)利要求1所述的方法,還包括: 響應(yīng)于所述別名寄存器已經(jīng)被檢查,通過(guò)旋轉(zhuǎn),釋放為所述指令組中的第一調(diào)度的指令而分配的別名寄存器;以及 將所述釋放的別名寄存器分配到第二調(diào)度的指令。
4.如權(quán)利要求1所述的方法,還包括: 響應(yīng)于判斷要被調(diào)度的第一指令是導(dǎo)致別名寄存器溢出,選擇所述指令組中的第二指令來(lái)執(zhí)行所述調(diào)度。
5.如權(quán)利要求1所述的方法,還包括: 合并所述指令組中的至少兩個(gè)指令來(lái)提供合并的指令;以及 在所述指令組中插入偽指令以中斷所述檢查約束中的一個(gè)或多個(gè)循環(huán)。
6.如權(quán)利要求1所述的方法,還包括: 將偽指令插入到所述指令組中的合并的指令之后,其中,所述偽指令是與所述合并的指令訪問(wèn)同一個(gè)存儲(chǔ)器,并是與所述合并的指令使用不同的別名寄存器。
7.一種系統(tǒng),包括: 處理器;以及 優(yōu)化器,用于優(yōu)化要被所述處理器執(zhí)行的一組原始代碼,將所述優(yōu)化的代碼調(diào)度到調(diào)度的代碼中,以及基于所述調(diào)度的代碼的數(shù)據(jù)相關(guān)性和約束中的至少一個(gè),將新別名寄存器分配到所述調(diào)度的代碼。
8.如權(quán)利要求7所述的系統(tǒng),其中,所述優(yōu)化器進(jìn)一步計(jì)算所述調(diào)度的代碼的所述數(shù)據(jù)相關(guān)性和所述約束。
9.如權(quán)利要求7所述的系統(tǒng),其中,所述優(yōu)化器進(jìn)一步響應(yīng)于判斷所述分配的別名寄存器將不被所述調(diào)度的代碼檢查,旋轉(zhuǎn)分配的別名寄存器,以釋放所述新別名寄存器的所述分配的別名寄存器。
10.如權(quán)利要求7所述的系統(tǒng),其中,所述優(yōu)化器進(jìn)一步優(yōu)化所述原始代碼以提供合并的代碼,并且響應(yīng)于所述合并的代碼在所述合并的代碼中的多個(gè)邏輯代碼上包括C/P比特,插入偽代碼以分區(qū)所述C/P比特,具有C/P比特。
11.如權(quán)利要求7所述的系統(tǒng),其中,所述優(yōu)化器進(jìn)一步優(yōu)化所述原始代碼以提供合并的代碼,并將偽代碼插入到所述合并的代碼之后,以中斷所述約束中的一個(gè)或多個(gè)循環(huán),其中,所述偽代碼與所述合并的代碼訪問(wèn)同一個(gè)存儲(chǔ)器,并與所述合并的代碼使用不同的別名寄存器。
12.如權(quán)利要求7所述的系統(tǒng),其中,所述優(yōu)化器進(jìn)一步響應(yīng)于檢測(cè)到所述約束中的一個(gè)或多個(gè)循環(huán),延遲對(duì)于所述調(diào)度的代碼的所述寄存器分配,阻止對(duì)于所述調(diào)度的代碼的所述別名寄存器分配。
13.如權(quán)利要求12所述的系統(tǒng),其中,所述優(yōu)化器進(jìn)一步將偽代碼插入到所述寄存器分配延遲的代碼之后,以中斷所述約束中的所述循環(huán),其中,所述偽代碼與所述寄存器分配延遲的代碼訪問(wèn)同一個(gè)存儲(chǔ)器,并與所述寄存器分配延遲的代碼使用不同的別名寄存器。
14.如權(quán)利要求12所述的系統(tǒng),其中,所述約束包括檢查約束或防檢查約束。
15.如權(quán)利要求7所述的系統(tǒng),其中,所述優(yōu)化器進(jìn)一步響應(yīng)于所述新別名寄存器正在被分配,刪除所述調(diào)度的代碼的所述約束。
16.包含當(dāng)由處理系統(tǒng)執(zhí)行時(shí)導(dǎo)致計(jì)算系統(tǒng)執(zhí)行以下操作的指令的機(jī)器可讀取的介質(zhì): 調(diào)度一組指令; 計(jì)算所述調(diào)度的指令組的約束; 基于所述約束,為調(diào)度的指令中的一個(gè)分配新別名寄存器。
17.如權(quán)利要求16所述的機(jī)器可讀取的介質(zhì),其中,還包括響應(yīng)于被執(zhí)行導(dǎo)致所述計(jì)算系統(tǒng)執(zhí)行以下操作的多個(gè)指令: 釋放未使用的已分配的別名寄存器并為所述新別名寄存器分配所述釋放的寄存器。
18.如權(quán)利要求16所述的 機(jī)器可讀取的介質(zhì),其中,還包括響應(yīng)于被執(zhí)行導(dǎo)致計(jì)算設(shè)備執(zhí)行以下操作的多個(gè)指令: 在所述調(diào)度的指令組中插入偽調(diào)度指令以中斷所述約束中的循環(huán)。
【文檔編號(hào)】G06F9/06GK103502945SQ201180070544
【公開(kāi)日】2014年1月8日 申請(qǐng)日期:2011年11月29日 優(yōu)先權(quán)日:2011年4月7日
【發(fā)明者】王誠(chéng), 吳友峰 申請(qǐng)人:英特爾公司
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
嘉定区| 黄石市| 射阳县| 宁远县| 金沙县| 阜新市| 阜宁县| 云浮市| 绥德县| 临武县| 永春县| 西青区| 澄迈县| 呼玛县| 龙川县| 互助| 大丰市| 都安| 鹤岗市| 兴业县| 武汉市| 吕梁市| 偏关县| 长海县| 军事| 云安县| 宜兴市| 阿图什市| 开阳县| 西青区| 石棉县| 商水县| 天峻县| 称多县| 邮箱| 安徽省| 鄂尔多斯市| 浦江县| 佛教| 淅川县| 绥中县|