專利名稱:從混合源指令集架構(gòu)到單一目標(biāo)指令集架構(gòu)的二進(jìn)制代碼轉(zhuǎn)換中的多格式指令的格式選擇的制作方法
技術(shù)領(lǐng)域:
本發(fā)明的實(shí)施例涉及指令轉(zhuǎn)換領(lǐng)域。
背景技術(shù):
為了將適于源機(jī)器或處理器的源指令集架構(gòu)(ISA)的源代碼轉(zhuǎn)換成適于目標(biāo)操作系統(tǒng)上的目標(biāo)機(jī)器或處理器的目標(biāo)ISA的目標(biāo)代碼,可進(jìn)行二進(jìn)制轉(zhuǎn)換。在二進(jìn)制轉(zhuǎn)換中,源ISA的源指令可被轉(zhuǎn)換成目標(biāo)ISA的目標(biāo)指令。
在有些轉(zhuǎn)換中,源ISA可為混合ISA,而目標(biāo)ISA可為單一ISA?;旌螴SA具有可用相同或類似語(yǔ)義來(lái)操作不同格式的數(shù)據(jù)的一個(gè)或多個(gè)多格式指令(例如整型和浮點(diǎn)格式等)?;旌螴SA的一例是Intel公司(Santa Clara,California)的IA-32 ISA。IA-32 ISA包括Intel流式SIMD擴(kuò)展指令(例如SSE、SSE2和SSE3指令集等)。在IA-32 ISA中,有些寄存器(如128位XMM寄存器)是可存儲(chǔ)不同格式的數(shù)據(jù)的多格式寄存器。例如,寄存器可具有128位,可用于存儲(chǔ)四個(gè)32位壓縮的單精度浮點(diǎn)數(shù)據(jù)元,兩個(gè)64位壓縮的雙精度浮點(diǎn)數(shù)據(jù)元,或一個(gè)128位整型數(shù)據(jù)元。SSE、SSE2和SSE3指令集的MOVAPD、MOVAPS和MOVDQA指令是多格式指令,它使用相同或類似語(yǔ)義來(lái)根據(jù)特定指令在XMM寄存器之間和/或在XMM寄存器和處理器外存儲(chǔ)器之間移動(dòng)不同格式的數(shù)據(jù)。
在二進(jìn)制轉(zhuǎn)換期間,混合ISA的多格式指令(例如MOVAPD、MOVAPS和MOVDQA指令等)可被轉(zhuǎn)換成單一ISA的代碼(例如Itanium架構(gòu)的代碼,它適于64位Itanium處理器或架構(gòu)等)。
然而,單一ISA(例如,Itanium架構(gòu)等)可具有分開(kāi)的寄存器來(lái)存儲(chǔ)不同格式的數(shù)據(jù)和/或可允許并行處理純浮點(diǎn)格式或純整型格式的數(shù)據(jù)。為進(jìn)行二進(jìn)制轉(zhuǎn)換,可挑選多格式指令的格式。若多格式指令的格式的挑選不適當(dāng),則為了利用目標(biāo)機(jī)器或處理器上的源代碼,可能產(chǎn)生巨大的成本(例如處理器周期等)。
通過(guò)參照下面用于說(shuō)明本發(fā)明實(shí)施例的描述和附圖,可獲得對(duì)本發(fā)明的最好理解。在這些附圖中圖1是表示根據(jù)本發(fā)明的一個(gè)或多個(gè)實(shí)施例的二進(jìn)制轉(zhuǎn)換器的框圖。
圖2表示根據(jù)本發(fā)明的一個(gè)或多個(gè)實(shí)施例將源ISA的代碼塊的多格式指令分組并確認(rèn)這些組的邊界指令的方法流程圖。
圖3表示根據(jù)本發(fā)明的一個(gè)或多個(gè)實(shí)施例來(lái)選擇一些組的多格式指令的格式的方法流程圖。
圖4A表示使用本文公開(kāi)的方法在不進(jìn)行格式選擇的條件下從IA-32指令到對(duì)應(yīng)的Itanium指令的典型轉(zhuǎn)換。
圖4B表示根據(jù)本發(fā)明的一個(gè)或多個(gè)實(shí)施例在進(jìn)行格式選擇的條件下從IA-32指令到對(duì)應(yīng)的Itanium指令的典型轉(zhuǎn)換。
圖5是表示可用于實(shí)現(xiàn)本發(fā)明的一個(gè)或多個(gè)實(shí)施例的計(jì)算機(jī)系統(tǒng)的框圖。
具體實(shí)施例方式
在下面描述中,說(shuō)明了大量的特定細(xì)節(jié)。然而,要理解到本發(fā)明的實(shí)施例可在沒(méi)有這些特定細(xì)節(jié)的條件下實(shí)施。為清楚起見(jiàn),在另一些例中沒(méi)有對(duì)公知的電路、結(jié)構(gòu)和技術(shù)作詳細(xì)說(shuō)明。
圖1是表示根據(jù)本發(fā)明的一個(gè)或多個(gè)實(shí)施例的轉(zhuǎn)換環(huán)境的框圖。該轉(zhuǎn)換環(huán)境包括源架構(gòu)105的源代碼110,目標(biāo)架構(gòu)160的目標(biāo)代碼165,以及將源代碼中的至少一些指令轉(zhuǎn)換成目標(biāo)代碼發(fā)出的對(duì)應(yīng)指令的二進(jìn)制轉(zhuǎn)換器130。
該源代碼可包括可在源架構(gòu)上運(yùn)行的源程序或部分源程序。該源代碼可包括可用源架構(gòu)的匯編語(yǔ)言編寫(xiě)的程序或點(diǎn)編碼。該匯編碼可由編譯器生成或直接由文本編輯程序產(chǎn)生。該源代碼還可存在于源機(jī)器二進(jìn)制代碼中。匯編程序可生成機(jī)器二進(jìn)制代碼。源架構(gòu)可包括適于可執(zhí)行該源代碼的可執(zhí)行代碼的特定ISA的處理器。在本發(fā)明的一個(gè)或多個(gè)實(shí)施例中,源架構(gòu)可包括可具有多種格式或數(shù)據(jù)表示的寄存器組,例如Intel公司的IA-32 ISA的XMM寄存器和對(duì)應(yīng)的32位處理器等。該寄存器組可包括一些架構(gòu)寄存器。該源代碼通常包括一些源代碼塊,其中包括源代碼塊115。同樣,該源代碼塊通常包括一些源指令,其中包括多格式源指令120。
目標(biāo)代碼可包括可在目標(biāo)架構(gòu)上運(yùn)行的目標(biāo)程序。該目標(biāo)代碼可包括可用目標(biāo)架構(gòu)的匯編語(yǔ)言編寫(xiě)的程序或匯編碼。二進(jìn)制轉(zhuǎn)換器可轉(zhuǎn)換、發(fā)射或以其他方式從源代碼產(chǎn)生目標(biāo)代碼。作為可選的方案,該目標(biāo)代碼還可存在于目標(biāo)機(jī)器二進(jìn)制代碼中。目標(biāo)架構(gòu)可包含適于可執(zhí)行目標(biāo)代碼中的可執(zhí)行代碼的特定ISA的處理器。在本發(fā)明的一個(gè)或多個(gè)實(shí)施例中,目標(biāo)架構(gòu)(例如Itanium架構(gòu)等)的寄存器組可能不具有多種格式或數(shù)據(jù)表示。該寄存器組通常具有一些架構(gòu)寄存器。該目標(biāo)代碼通常包括一些目標(biāo)代碼塊,其中包括目標(biāo)代碼塊170。該目標(biāo)代碼塊可轉(zhuǎn)換自源代碼塊。該目標(biāo)代碼塊通常可包括一些目標(biāo)指令,其中包括可由二進(jìn)制轉(zhuǎn)換器從多格式源指令轉(zhuǎn)換的單格式目標(biāo)指令175。在本發(fā)明的一個(gè)或多個(gè)實(shí)施例中,單格式目標(biāo)指令可規(guī)定目標(biāo)架構(gòu)的目標(biāo)寄存器上的操作,該操作可能不支持由多格式源指令規(guī)定的源架構(gòu)的源寄存器的多個(gè)格式中的全部格式。
二進(jìn)制轉(zhuǎn)換器可將源代碼或至少可將多格式源指令轉(zhuǎn)換成目標(biāo)代碼或至少轉(zhuǎn)換成單格式目標(biāo)指令。在本發(fā)明的一個(gè)或多個(gè)實(shí)施例中,二進(jìn)制轉(zhuǎn)換器可包含轉(zhuǎn)換器135來(lái)完成轉(zhuǎn)換階段并可包含執(zhí)行部150來(lái)完成該轉(zhuǎn)換的執(zhí)行階段。如圖所示,該轉(zhuǎn)換器可包含指令組織邏輯部件140、成本估計(jì)邏輯部件142以及格式選擇邏輯部件145,它們分別用來(lái)組織源代碼和/或源代碼塊中的指令、估計(jì)與多格式指令的不同格式相關(guān)聯(lián)的成本以及在指令的組織之后并基于該指令的組織選擇多格式指令(如該多格式源指令)的格式。指令組織邏輯部件、成本估計(jì)邏輯部件和格式選擇邏輯部件的特定的非限定例將在下文描述。如下面進(jìn)一步討論的,二進(jìn)制轉(zhuǎn)換器或其任何部分(例如指令組織邏輯部件、成本估計(jì)邏輯部件和/或格式選擇邏輯部件,或它們的任意結(jié)合)可包括軟件、固件、微碼、硬件或它們的結(jié)合。
圖2表示根據(jù)本發(fā)明的一個(gè)或多個(gè)實(shí)施例將源ISA的代碼塊的多格式指令分組并通過(guò)分析寄存器使用關(guān)系來(lái)確認(rèn)這些組的邊界指令的方法流程圖。該方法包括進(jìn)行一連串的格式屬性和寄存器使用關(guān)系的判定,這些判定使當(dāng)前指令被加到多格式指令的新組中,被加到多格式指令的現(xiàn)有組中,或被確認(rèn)為多格式指令的新組或現(xiàn)有組的邊界指令,如單格式邊界指令。如下面進(jìn)一步討論的,該方法的實(shí)現(xiàn)使指令以有助于估計(jì)與選擇多格式指令的格式相關(guān)聯(lián)的成本的方式來(lái)組織。
在步驟205開(kāi)始后,當(dāng)前指令可在步驟210被設(shè)為基本代碼塊的最后一個(gè)指令。所說(shuō)明的方法可經(jīng)由基本代碼塊的指令向后進(jìn)行。在步驟210,還可任選地初始化用于實(shí)現(xiàn)該方法的附加變量(例如記數(shù)器、數(shù)組等)。
下一步,在步驟215,可判定已被掃描的塊中的代碼是否包含消耗性(consuming)指令。在本發(fā)明的一個(gè)或多個(gè)實(shí)施例中,該消耗性指令可以是順序地在代碼塊中的當(dāng)前指令之后并且規(guī)定當(dāng)前指令使用目標(biāo)寄存器的指令。就是說(shuō),當(dāng)前指令和消耗性指令可通過(guò)目標(biāo)寄存器的寄存器使用關(guān)系來(lái)關(guān)聯(lián)。如果在當(dāng)前指令之后有多個(gè)規(guī)定當(dāng)前指令使用目標(biāo)寄存器的指令,那么消耗性指令可為最接近當(dāng)前指令的指令,它是最近的規(guī)定使用目標(biāo)寄存器的指令。進(jìn)行該判定的一種方式是將關(guān)于指令的寄存器使用關(guān)系信息記錄在數(shù)組或其他數(shù)據(jù)結(jié)構(gòu)中,如由該方法(例如,指在步驟260的處理)對(duì)它們的處理??蓞⒖荚摂?shù)組和信息來(lái)判定消耗性指令。是否存在消耗性指令的判定是可用于將指令組織成組和邊界指令的判定,這將在下面進(jìn)一步說(shuō)明。判定結(jié)果可為″否″或″是″。若判定結(jié)果是″否″,即不存在消耗性指令,則可在步驟220判定當(dāng)前指令是否為多格式的。在本發(fā)明的一個(gè)或多個(gè)實(shí)施例中,為判定一指令是否為多格式的,可將該指令與預(yù)定列表或其他多格式指令的集合進(jìn)行比較以判定所考察的指令是否匹配該集合中的多格式指令之一。若該指令匹配多格式指令之一,則可判定該指令是多格式的。相反,若該指令不匹配多格式指令之一,則可判定指令不是多格式的。
若在步驟220的判定結(jié)果為″是″,則可在步驟225創(chuàng)建包含當(dāng)前指令的一個(gè)新組。該判定結(jié)果揭示了當(dāng)前指令是多格式的并且與已掃描的代碼中的消耗性指令沒(méi)有所規(guī)定的寄存器使用關(guān)系,因此可放置在一新組中。一方面,當(dāng)前指令可被置于代表該新組的數(shù)組中。然后,該方法可進(jìn)行到步驟260。相反,若在步驟220的判定結(jié)果為″否,則該方法可直接進(jìn)行到步驟260。后一個(gè)判定結(jié)果揭示了當(dāng)前指令不是多格式的并且不是對(duì)格式變換成本估計(jì)有用的邊界指令。關(guān)于步驟260中處理將稍后進(jìn)行討論。
再參照步驟215,若判定結(jié)果為″是″,則可在步驟230判定當(dāng)前指令是否為多格式的。該判定可按前述方式進(jìn)行。
若步驟230的判定結(jié)果為″是″,則可在步驟235判定消耗性指令是否為多格式的。若步驟235的判定結(jié)果為″是″,則可在步驟240將當(dāng)前指令加到包含消耗性指令的現(xiàn)有組中。在所說(shuō)明的方法中,可將被掃描的各多格式指令加到現(xiàn)有組或新組中。根據(jù)所說(shuō)明的邏輯,若由第一多格式指令定義的值被第二(所謂的″消耗性″)多格式指令使用,則可將第一指令和第二指令加到同一組,尤其是含有消耗性多格式指令的現(xiàn)有組中。
相反,若步驟235的判定結(jié)果為″否″,則可在步驟245創(chuàng)建包含當(dāng)前指令的新組,并且消耗性指令可被確認(rèn)為該新組的邊界指令。如下面進(jìn)一步描述的,邊界指令可用于估計(jì)與多格式指令的被選格式相關(guān)聯(lián)的格式變換成本,該成本可影響在利用單一ISA的目標(biāo)機(jī)器上利用混合源ISA的代碼的總體成本。該方法從步驟240或245進(jìn)到步驟260。
再參照步驟230,若判定結(jié)果為″否″,則可在步驟250判定消耗性指令是否是多格式的。若在步驟250的判定結(jié)果為″是″,則單格式的當(dāng)前指令可在步驟255被確認(rèn)為多格式的消耗性指令的邊界指令。然后,該方法可進(jìn)行到步驟260。相反,若在步驟250的判定結(jié)果為″否,則該方法可直接進(jìn)行到步驟260。
在步驟260,當(dāng)前指令可被記錄來(lái)規(guī)定使用源寄存器。如前所述,該記錄可用于在步驟215判定是否存在消耗性指令。一方面,名為USE[O...n]的數(shù)組可用于記錄使用特定寄存器的指令,其中,索引可包括寄存器號(hào),而可被記錄的指令是使用該寄存器的最近指令。該數(shù)組可在步驟260用源寄存器變址,或在步驟215用目標(biāo)寄存器變址。進(jìn)一步說(shuō)明,根據(jù)一個(gè)特定實(shí)施例,假設(shè)有下面的二指令序列,第二指令(op2 xram1 xmm3)在第一指令(op1 xmm3 xmm2)之后。所述方法可從第二指令向后進(jìn)到第一指令。對(duì)于第二指令(op2 xmm1xmm3),xmm1包含目標(biāo)寄存器,而xmm3包含源寄存器。在步驟260,第二指令(op2 xmm1 xmm3)可被記錄在數(shù)組中,在等于源寄存器(xmm3)的索引處。就是說(shuō),USE[xmm3]=第二指令。然后,在后續(xù)循環(huán)中,第一指令可被掃描。對(duì)于第一指令(op1 xmm3 xmm2),xmm3包含目標(biāo)寄存器,而xmm2包含源寄存器。在步驟215,可判定第二指令是消耗性指令,因?yàn)榈诙噶?op2 xmm1 xmm3)被記錄在數(shù)組中等于第一指令的目標(biāo)寄存器的索引處。就是說(shuō),USE[xmm3]=第二指令。
下一步,在步驟265判定是否存在前一指令。若在步驟265的判定結(jié)果為″是″,則當(dāng)前指令可在步驟270被設(shè)成該前一指令,然后所述方法可重新回到步驟215,上述方法可對(duì)該新的當(dāng)前指令來(lái)執(zhí)行。該循環(huán)可重復(fù)進(jìn)行,所述方法經(jīng)由基本代碼塊的所有指令向后循環(huán)。相反,若步驟265的判定結(jié)果為″否″,這種情況對(duì)于每個(gè)代碼塊可發(fā)生一次,則該方法在步驟275終止。舉例來(lái)說(shuō),在當(dāng)前指令是基本代碼塊中的第一個(gè)指令的情況下,可能不存在前一指令。在對(duì)一代碼塊的所有指令完成前述方法后,可對(duì)其他代碼塊重復(fù)進(jìn)行該方法。
為說(shuō)明根據(jù)本發(fā)明的一個(gè)或多個(gè)實(shí)施例的特定概念,已對(duì)判定進(jìn)行的特定方法和順序作了說(shuō)明和描述,然而本發(fā)明不限于該判定進(jìn)行的特定方法和順序。其他方法可基于重新安排的判定進(jìn)行順序和/或基于進(jìn)行不同的和/或另外的判定。對(duì)于從本公開(kāi)獲益的本領(lǐng)域技術(shù)人員來(lái)說(shuō),各種方法是顯而易見(jiàn)的。
圖3表示根據(jù)本發(fā)明的一個(gè)或多個(gè)實(shí)施例的選擇一些組的多格式指令的格式的方法,所述方法通過(guò)估計(jì)和比較用多格式指令的不同格式來(lái)將一些組的多格式指令從源ISA轉(zhuǎn)換成目標(biāo)ISA中對(duì)應(yīng)的指令的成本以估計(jì)其成本,從而進(jìn)行格式選擇。該方法包括將一基本代碼塊通過(guò)一些組的多格式指令進(jìn)行循環(huán),并且各組通過(guò)該組的多種可能格式進(jìn)行循環(huán)。對(duì)各可能格式的成本估計(jì)既基于用當(dāng)前被選格式來(lái)轉(zhuǎn)換該組多格式指令的成本,又基于在為該組選擇的當(dāng)前格式和該組的一個(gè)或多個(gè)邊界指令之間進(jìn)行格式變換的成本。
在步驟305開(kāi)始后,基本代碼塊的當(dāng)前組可在步驟310被選擇。在各方面,這些組可按升序、降序或隨機(jī)順序來(lái)選擇。然而,本發(fā)明不限于只按這些順序選擇這些組。
下一步,在步驟315,最小成本變量可被設(shè)成很大的數(shù)。例如,該最小成本變量可被設(shè)置成無(wú)限大,或至少設(shè)置成一值,該值明顯大于以任何可能的格式轉(zhuǎn)換該組所預(yù)期的值。
然后,在步驟320可從該組的可能格式中選擇一個(gè)當(dāng)前格式(例如整型或浮點(diǎn)格式等)。一方面,第一格式(例如整型等)可在第二格式(例如浮點(diǎn)等)之前被選。另一方面,這些格式也可按交替的順序來(lái)選擇或隨機(jī)地選擇。然而,本發(fā)明不限于只按這些方式來(lái)選擇格式。
然后在步驟325和330繼續(xù)進(jìn)行,其中,與用多格式指令的當(dāng)前格式將當(dāng)前組中的多格式指令從源ISA轉(zhuǎn)換成目標(biāo)ISA的指令相關(guān)聯(lián)的成本被估計(jì)。如圖示的實(shí)施例中說(shuō)明的,成本可通過(guò)既考慮對(duì)轉(zhuǎn)換多格式指令的成本的貢獻(xiàn),又考慮對(duì)在當(dāng)前格式和為當(dāng)前組確認(rèn)的邊界指令的格式之間進(jìn)行格式變換的成本的貢獻(xiàn)來(lái)進(jìn)行估計(jì)。所描述的估計(jì)成本的順序不是一定要求的,也可選擇其他的順序。在步驟325,可對(duì)用當(dāng)前被選格式來(lái)轉(zhuǎn)換當(dāng)前組的多格式指令的成本進(jìn)行估計(jì)。在本發(fā)明的一個(gè)或多個(gè)實(shí)施例中,成本可通過(guò)將轉(zhuǎn)換該組中的各個(gè)多格式指令的成本貢獻(xiàn)加在一起來(lái)估計(jì)。對(duì)于各多格式指令,可估計(jì)將多格式指令轉(zhuǎn)換成目標(biāo)ISA的對(duì)應(yīng)的單格式指令的成本貢獻(xiàn)。在本發(fā)明的一個(gè)或多個(gè)實(shí)施例中,各成本貢獻(xiàn)可基于和/或通過(guò)用對(duì)特定轉(zhuǎn)換的成本的預(yù)定估計(jì)來(lái)進(jìn)行估計(jì)。根據(jù)一個(gè)或多個(gè)實(shí)施例,成本可任選地用處理器周期來(lái)表達(dá)或至少與為執(zhí)行該轉(zhuǎn)換而預(yù)期的處理器周期數(shù)直接相關(guān)。然而本發(fā)明不限于這些特定實(shí)施例,且本文所討論的成本還可任選地根據(jù)發(fā)熱性、精度、寄存器利用或其他與選擇多格式指令的格式有關(guān)的標(biāo)準(zhǔn)來(lái)表達(dá)。
表1列出了各種多格式IA-32指令(即MOVAPD、MOVAPS和MOVDQA)的典型轉(zhuǎn)換的預(yù)定的處理器周期的成本,以及Itanium架構(gòu)中整型和浮點(diǎn)格式的對(duì)應(yīng)指令。
表1
IA-32指令可被任選地轉(zhuǎn)換成一個(gè)或多個(gè)(例如兩個(gè))Itanium指令。LDFD是8字節(jié)浮點(diǎn)裝載指令。LDFPD是16字節(jié)并行浮點(diǎn)裝載指令。Itanium2處理器可發(fā)出六個(gè)指令并將它們并行執(zhí)行,所以兩個(gè)LDFD指令的等待時(shí)間可能與一個(gè)LDFPD指令的等待時(shí)間相同。可將該組指令中的各個(gè)的單獨(dú)多格式指令的轉(zhuǎn)換成本估計(jì)(例如上面給出的)加在一起。如所說(shuō)明的,整型格式的成本可能小于浮點(diǎn)格式的成本。
然而,為改善對(duì)總成本的估計(jì),可任選地包括與進(jìn)行由當(dāng)前被選格式產(chǎn)生的格式變換相關(guān)聯(lián)的成本,這將在下面進(jìn)行討論。
在步驟330可任選地對(duì)進(jìn)行對(duì)應(yīng)于當(dāng)前組的格式和對(duì)應(yīng)于當(dāng)前組的一個(gè)或多個(gè)邊界指令的格式之間的格式變換的成本進(jìn)行估計(jì)。若當(dāng)前組的被選格式不同于當(dāng)前組的邊界指令的格式,則為在格式之間進(jìn)行變換,附加的變換代碼(例如包括一個(gè)或多個(gè)格式變換指令)可包含在所轉(zhuǎn)換的代碼中。格式變換指令可將具有與當(dāng)前組的當(dāng)前被選格式相同格式的單格式指令的格式變換成對(duì)應(yīng)于并且具有與當(dāng)前組的邊界指令相同格式的指令的不同格式。舉例來(lái)說(shuō),格式變換指令可將一個(gè)寄存器中的整型值變換成另一個(gè)寄存器中的浮點(diǎn)值,也可將一個(gè)寄存器中的浮點(diǎn)值變換成另一個(gè)寄存器中的整型值。Itanium架構(gòu)的典型變換指令包括(但不限于)getf.d和serf.d。
這時(shí),將變換代碼包括在內(nèi)可視為對(duì)進(jìn)行轉(zhuǎn)換的成本的附加貢獻(xiàn)。在本發(fā)明的一個(gè)或多個(gè)實(shí)施例中,當(dāng)前組的各變換指令的成本可被加在一起來(lái)確定歸于(至少部分地)當(dāng)前組的格式變換的總成本。一方面,包括特定變換指令的成本的預(yù)定估計(jì)可被列為表格或以其他方式來(lái)提供,并可用于成本估計(jì)。至少部分地由于當(dāng)前被選格式,一些變換指令有可能可消除,而為確定凈變換成本,這些被消除的變換指令可被減去或以其他方式移除。如前所述,成本估計(jì)可根據(jù)處理器周期和與多格式指令的格式選擇有關(guān)的其他標(biāo)準(zhǔn)。因此,對(duì)一組的格式選擇可至少部分基于指令之間的格式流的分析和對(duì)格式變換成本的估計(jì)。
表2列出在經(jīng)轉(zhuǎn)換代碼中包括Itanium架構(gòu)的各種變換指令的典型的處理器周期成本。
表2
再參照?qǐng)D3,在步驟335,可判定最小成本變量是否大于在步驟325和330估計(jì)的成本。該判定結(jié)果可為″是″或″否″。
若在步驟335的判定結(jié)果為″是″,則處理可進(jìn)行到步驟340。在第一次經(jīng)過(guò)該循環(huán)時(shí),判定結(jié)果可能為″是″,因?yàn)樵诓襟E315最小成本被設(shè)置成一大數(shù)。在步驟340,最小成本可被設(shè)成在步驟325和330估計(jì)的成本之和。這可將該大數(shù)替換為用該組中的多格式指令的第一被選格式產(chǎn)生的成本的總和。同時(shí),在步驟340,當(dāng)前格式可被選為當(dāng)前組的格式。這可將新的最小成本與對(duì)應(yīng)于該成本的格式相關(guān)聯(lián)。在后來(lái)經(jīng)過(guò)對(duì)該相同組進(jìn)行的循環(huán)時(shí),若所估計(jì)的成本的總和低于最小成本,則判定結(jié)果可為″是″。對(duì)該組的所有可能格式重復(fù)該判定可使格式選擇具有最低的所估計(jì)成本的總和。因此,對(duì)該組的格式選擇可基于對(duì)用多格式指令的多種不同的可能格式進(jìn)行轉(zhuǎn)換所估計(jì)的成本的比較。然后,該方法可進(jìn)行到步驟345。相反,若在步驟335的判定結(jié)果為″否″,則該方法可直接進(jìn)行到步驟345。在后一種情況下,前一格式的選擇和相關(guān)成本被保持。
在步驟345,可判定是否存在該組中的多格式指令的另一可能格式。若在步驟345的判定結(jié)果為″是″,則該方法可重新回到步驟320,在該步驟,可從其余可能格式中選擇另一當(dāng)前格式。對(duì)于多格式指令,這至少可在最初或第一次通過(guò)對(duì)各組進(jìn)行的循環(huán)期間進(jìn)行該判定,因?yàn)橹噶羁赡苡卸嘤谝粋€(gè)的格式。
相反,若在步驟345的判定結(jié)果為″否″,例如,當(dāng)該組所有可能格式的成本已被考慮過(guò)時(shí),就可能發(fā)生這種情況,則在步驟350,當(dāng)前組中的所有多格式指令可被指定為對(duì)應(yīng)于最小成本的被選格式。在本發(fā)明的一個(gè)或多個(gè)實(shí)施例中,當(dāng)前組的多格式指令可被指定為表格中的被選格式,或指定為可能是可機(jī)讀格式的其他數(shù)據(jù)結(jié)構(gòu)。當(dāng)為確定這些組的多格式指令的被選格式而轉(zhuǎn)換該塊時(shí),該數(shù)據(jù)結(jié)構(gòu)可被讀出或以其他方式訪問(wèn),然后對(duì)應(yīng)的轉(zhuǎn)換模板可用來(lái)執(zhí)行該轉(zhuǎn)換。因此,在所說(shuō)明的方法中,一組中的多格式指令的格式可基于(至少部分地)用多格式指令的不同的可能格式估計(jì)的成本之比較來(lái)選擇并指定。
再參照?qǐng)D3,在步驟355,可判定在代碼塊中是否存在另一組多格式指令。若判定結(jié)果為″是″,則該方法可重新回到步驟310,在該步驟選擇另一當(dāng)前組。相反,若判定結(jié)果為″否″,例如,可能是該代碼塊的所有組都已被考慮,則該方法在步驟360終止。
下一步,可用一些組的多格式指令的被選格式將該代碼從源ISA(例如IA-32 ISA等)轉(zhuǎn)換成目標(biāo)ISA(例如Itanium架構(gòu)或其他適于64位處理器的架構(gòu))。在本發(fā)明的一個(gè)或多個(gè)實(shí)施例中,一組中的所有多格式指令可用相同格式來(lái)轉(zhuǎn)換,該格式可代表相對(duì)低或最低成本的格式。轉(zhuǎn)換可用轉(zhuǎn)換器來(lái)實(shí)現(xiàn),例如,動(dòng)態(tài)二進(jìn)制轉(zhuǎn)換器或即時(shí)編譯器。動(dòng)態(tài)二進(jìn)制轉(zhuǎn)換器或即時(shí)編譯器可就在該代碼執(zhí)行前將源代碼轉(zhuǎn)換成目標(biāo)代碼。然而,不需要進(jìn)行動(dòng)態(tài)轉(zhuǎn)換。
圖2-3中描述的算法的指令組織階段和格式選擇階段的總時(shí)間復(fù)雜性可為O(n)。這意味著若塊中有n個(gè)指令,則該算法可能進(jìn)行k*n次操作,其中k是常數(shù)。該算法的低時(shí)間復(fù)雜性可很好地適合動(dòng)態(tài)二進(jìn)制轉(zhuǎn)換。其他算法可能具有O(n2),O(n3)的較高時(shí)間復(fù)雜性,或甚至更高。譬如說(shuō),對(duì)于O(n2)算法,可能進(jìn)行k*n*n次操作,其中k是常數(shù),而n是塊中的指令數(shù)。
此外,可以有在二進(jìn)制轉(zhuǎn)換器中實(shí)現(xiàn)的其他例程或優(yōu)化例程。一些例程可包括向后掃描而通過(guò)指令和/或塊的源高級(jí)中間表示(IR)?;叵雸D2中說(shuō)明的同樣地向后掃描通過(guò)塊中的指令的示范性算法的指令組織階段。在本發(fā)明的一個(gè)或多個(gè)實(shí)施例中,一個(gè)或多個(gè)例程或優(yōu)化例程可用本文公開(kāi)的方法(例如,圖2中說(shuō)明的也可向后掃描通過(guò)指令的指令組織方法)合并。就是說(shuō),在向后掃描而通過(guò)指令的期間,多個(gè)優(yōu)化例程可并行搜集關(guān)于指令的信息。這可允許多個(gè)例程的一些部分并行運(yùn)行,從而勢(shì)必可提高二進(jìn)制轉(zhuǎn)換的運(yùn)行時(shí)間性能。
為進(jìn)一步說(shuō)明某些概念,考慮應(yīng)用和未應(yīng)用本文公開(kāi)的格式選擇方法的典型轉(zhuǎn)換。尤其是,考慮從源IA-32 ISA中的指令到對(duì)應(yīng)的目標(biāo)Itanium架構(gòu)指令的轉(zhuǎn)換。圖4A表示未進(jìn)行本文公開(kāi)的方法進(jìn)行格式選擇的IA-32指令和對(duì)應(yīng)的Itanium指令。IA-32指令包括示范性的SSE2指令來(lái)裝載兩個(gè)浮點(diǎn)操作數(shù),獲得壓縮的雙字整型,并減去其結(jié)果。在IA-32指令中,MOVAPD指令是多格式指令,而PSUBD指令是單格式指令。對(duì)應(yīng)的經(jīng)轉(zhuǎn)換的Itanium指令在該圖的右側(cè)示出。ldfd和stfd指令代表浮點(diǎn)存儲(chǔ)器訪問(wèn)指令,fp.xmm*.low/high是Itanium架構(gòu)中對(duì)應(yīng)于IA-32架構(gòu)的XMM*的一對(duì)浮點(diǎn)寄存器,r.xmm*.low/high是Itanium架構(gòu)中對(duì)應(yīng)于IA-32架構(gòu)的XMM*的整型寄存器。此外,四個(gè)不同的getfd指令和兩個(gè)不同的setf.d指令包含在Itanium指令中。這些指令代表進(jìn)行格式變換的變換代碼。在目標(biāo)代碼中包含格式變換代碼的勢(shì)必會(huì)使代碼更冗長(zhǎng)并可代表在目標(biāo)架構(gòu)上利用源代碼的附加的處理器周期成本。
圖4B表示根據(jù)本發(fā)明的一個(gè)或多個(gè)實(shí)施例,進(jìn)行了類似于圖2-3中說(shuō)明的格式選擇的IA-32指令和對(duì)應(yīng)的Itanium指令。在指令組織過(guò)程(例如,類似于圖2表示的方法)中,MOVAPD xmm0,xmmword ptr[mem0]可確認(rèn)為組1中的指令,MOVAPD xmm1,xmmword ptr[mem1]可確認(rèn)為組2中的指令,以及MOVAPD xmmwordptr[mem0],xmm0可確認(rèn)為組3的指令。然后是格式選擇過(guò)程(例如,類似于圖3表示的方法),用來(lái)為這些組選擇格式。在這種方法的一應(yīng)用中,確定了如下格式組1xmm0選用了PINT格式;組2xmm1選用了PINT格式;以及組3xmmO選用了PINT格式。對(duì)應(yīng)的經(jīng)轉(zhuǎn)換的Itanium指令在該圖的右側(cè)示出。經(jīng)轉(zhuǎn)換的Itanium指令不太冗長(zhǎng)且低成本地利用作為本文公開(kāi)的方法的應(yīng)用結(jié)果。
本發(fā)明不限于前述的特定實(shí)施例。因此,這些實(shí)施例的描述應(yīng)被認(rèn)為是解釋性的而不是限制性的。許多另外的更改是可預(yù)期的。例如,在本發(fā)明的一個(gè)或多個(gè)實(shí)施例中,算法(例如,貪心算法)可用來(lái)各自地選擇多格式指令的格式而不是選擇所有組中的多格式指令的格式。在這種方法中,可用前向或后向順序來(lái)考察指令。
作為另一例,多格式指令可被分成組(例如前文所述),但另一不同的方法(例如,基于動(dòng)態(tài)程序設(shè)計(jì))可用于估計(jì)一組內(nèi)的成本并基于所估計(jì)的成本來(lái)選擇組的格式。作為再一個(gè)例子,完全枚舉算法可用于其中指令未被分組的情況,但該算法可通過(guò)完全枚舉和基本塊中的每個(gè)指令的每種可能格式的估計(jì)來(lái)嘗試選擇一種指令的有利格式。對(duì)于已從本公開(kāi)獲益的本領(lǐng)域技術(shù)人員來(lái)說(shuō),許多其他的更改和適應(yīng)是顯而易見(jiàn)的。
圖5是表示可用于實(shí)現(xiàn)本發(fā)明的一個(gè)或多個(gè)實(shí)施例的計(jì)算機(jī)系統(tǒng)的框圖。如文中使用的,計(jì)算機(jī)系統(tǒng)可包括具有硬件和/或軟件的裝置來(lái)處理數(shù)據(jù)。計(jì)算機(jī)系統(tǒng)可包括桌上型電腦、膝上型電腦、服務(wù)器或巨型計(jì)算機(jī),但不限于這里所說(shuō)的例子。該計(jì)算機(jī)系統(tǒng)代表用于實(shí)現(xiàn)本發(fā)明的一個(gè)或多個(gè)實(shí)施例的一種可能的計(jì)算機(jī)系統(tǒng),但是也可采用其他計(jì)算機(jī)系統(tǒng)以及該計(jì)算機(jī)系統(tǒng)的變形例。
該計(jì)算機(jī)系統(tǒng)包括總線502來(lái)傳送信息。該總線可任選地作為通過(guò)集線器連接的兩個(gè)或更多總線來(lái)實(shí)現(xiàn),這在計(jì)算機(jī)系統(tǒng)技術(shù)領(lǐng)域是公知的。處理器504與總線連接以進(jìn)行信息處理。在本發(fā)明的一個(gè)或多個(gè)實(shí)施例中,處理器可包括64位處理器,例如,Intel公司(Santa Clara,California)的IntelItanium2處理器或IntelItanium處理器。也可用其他64位處理器。還可任選地包括多個(gè)處理器。
該計(jì)算機(jī)系統(tǒng)還包含主存506,例如,隨機(jī)訪問(wèn)存儲(chǔ)器(RAM)或其他動(dòng)態(tài)存儲(chǔ)設(shè)備,與總線連接并存儲(chǔ)包括將被處理器執(zhí)行的指令的信息。在一些(但不是全部)計(jì)算機(jī)系統(tǒng)中包含不同類型的RAM存儲(chǔ)器,其中包括(但不限于)靜態(tài)RAM(SRAM)和動(dòng)態(tài)RAM(DRAM)。
如圖示說(shuō)明的實(shí)施例中示出的,操作系統(tǒng)507可存儲(chǔ)在主存中。使用的有代表性的基于Windows的操作系統(tǒng)包括(但不限于)基于64位Itanium系統(tǒng)的WindowsTMServer 2003企業(yè)版,基于64位Itanium系統(tǒng)的WindowsTMServer 2003數(shù)據(jù)中心版以及WindowsTMXP64位版。也可采用Linux、Unix和其他操作系統(tǒng)。
如在圖示說(shuō)明的實(shí)施例中進(jìn)一步示出的,二進(jìn)制轉(zhuǎn)換器508或其一部分(例如,指令組織邏輯部件、成本估計(jì)邏輯部件和/或格式選擇邏輯)或至少幫助實(shí)現(xiàn)本文公開(kāi)的方法的另一部分,可包括可存于主存的軟件。該軟件可包括具有完成與實(shí)現(xiàn)與該方法相關(guān)聯(lián)的特定任務(wù)的指令的代碼或代碼段。在各個(gè)方面,代碼段可代表驅(qū)動(dòng)程序、過(guò)程、函數(shù)、子程序、程序、例程、子例程、模塊、軟件包、類或指令組合、數(shù)據(jù)結(jié)構(gòu)、或程序語(yǔ)句或它們的某些組合。合適的語(yǔ)言包括(但不限于)Java,C/C++,匯編語(yǔ)言以及高級(jí)語(yǔ)言和匯編語(yǔ)言的結(jié)合。代碼段可通過(guò)傳遞和/或接收信息、數(shù)據(jù)自變量,參數(shù)或存儲(chǔ)內(nèi)容與另一代碼段或硬件交互。作為可選的方案,二進(jìn)制轉(zhuǎn)換器或其部分還可包括固件和/或微碼。
在本發(fā)明的一個(gè)或多個(gè)實(shí)施例中,本文公開(kāi)的方法和裝置可部分用于為較低-位和較老的處理器,(例如,32位處理器)提供在較高-位和較新的處理器(例如,64位處理器)上的ISA兼容性。可以預(yù)期,本文公開(kāi)的方法可有助于提高32位應(yīng)用程序運(yùn)行在64位處理器系統(tǒng)(例如,IntelItanium處理器族系統(tǒng))上的處理器周期和其他性能。還可預(yù)期,該方法可能有助于延長(zhǎng)傳統(tǒng)32位應(yīng)用程序(例如,不需要最大性能的應(yīng)用程序和/或源代碼不可用的應(yīng)用程序和/或庫(kù))的壽命和/或有效期。
在本發(fā)明的一個(gè)或多個(gè)實(shí)施例中,有助于實(shí)現(xiàn)一個(gè)或多個(gè)本文公開(kāi)的方法的軟件和代碼段可包含在Intel公司的IA-32執(zhí)行層(EL)軟件。IA-32 EL可在出廠時(shí)配備基于Itanium的操作系統(tǒng)和/或與基于Itanium的操作系統(tǒng)集成,并可用于通過(guò)動(dòng)態(tài)轉(zhuǎn)換來(lái)將IA-32指令變換成Itanium指令。IA-32 EL軟件可用包括轉(zhuǎn)換階段和執(zhí)行階段的兩階段轉(zhuǎn)換架構(gòu)。IA-32 EL可適于多種不同的操作系統(tǒng),例如,各種基于Windows的操作系統(tǒng)和一個(gè)或多個(gè)Linux操作系統(tǒng)。IA-32EL可在64位操作系統(tǒng)上在應(yīng)用程序虛擬空間和特許級(jí)(privilegedlevel)中運(yùn)行。IA-32 EL可從操作系統(tǒng)獲得控制以運(yùn)行虛擬地址空間內(nèi)的32位應(yīng)用程序代碼。若需要,關(guān)于IA-32 EL的其他背景信息可在Leonid Baraz等人的題為″IA-32 Execution Layera two-phasedynamic translator designed to support IA-32 application on Itanium-based systems(IA-32執(zhí)行層一種用來(lái)支持基于Itanium的系統(tǒng)上的IA-32應(yīng)用程序的二階段動(dòng)態(tài)轉(zhuǎn)換器)″并在IEEE的第36屆關(guān)于微架構(gòu)的國(guó)際研討會(huì)(MICRO-36 2003)的會(huì)議錄中公開(kāi)的文章。
如在圖示說(shuō)明的實(shí)施例中進(jìn)一步示出的,主存還可存儲(chǔ)并提供包含多格式指令(例如,IA-32 ISA的MOVAPD、MOVAPS和MOVDQA指令)的源代碼509。二進(jìn)制轉(zhuǎn)換器可將包含多格式指令的源代碼轉(zhuǎn)換成適于該處理器的指令。
該計(jì)算機(jī)系統(tǒng)還包括磁盤(pán)驅(qū)動(dòng)器514。所說(shuō)明的磁盤(pán)驅(qū)動(dòng)器在計(jì)算機(jī)系統(tǒng)的內(nèi)部,雖然也可選擇為在外部。磁盤(pán)驅(qū)動(dòng)器可包括對(duì)機(jī)器可訪問(wèn)和/或可讀介質(zhì)516讀和/或?qū)憯?shù)據(jù)的機(jī)器。適用的磁盤(pán)驅(qū)動(dòng)器包括(但不限于)硬盤(pán)驅(qū)動(dòng)器、軟盤(pán)驅(qū)動(dòng)器、磁盤(pán)驅(qū)動(dòng)器和光盤(pán)驅(qū)動(dòng)器。適用的對(duì)應(yīng)機(jī)器可訪問(wèn)介質(zhì)包括(但不限于)硬盤(pán)、軟盤(pán)、磁盤(pán)和光盤(pán)。在本發(fā)明的一個(gè)或多個(gè)實(shí)施例中,至少有助于實(shí)現(xiàn)本文公開(kāi)的方法中的一個(gè)或多個(gè)指令和代碼段,可存在機(jī)器可訪問(wèn)介質(zhì)上,由磁盤(pán)驅(qū)動(dòng)器從機(jī)器可訪問(wèn)介質(zhì)讀出并存儲(chǔ)在主存上,以在動(dòng)態(tài)和/或靜態(tài)二進(jìn)制轉(zhuǎn)換過(guò)程中使用。任選地,軟件指令和/或代碼段還可被預(yù)裝在主存中。任選地,適于源ISA并包含多格式指令的源代碼還可存儲(chǔ)在機(jī)器-可訪問(wèn)介質(zhì)上,讀出而存儲(chǔ)在主存上,并由使用一個(gè)或多個(gè)本文公開(kāi)的方法的二進(jìn)制轉(zhuǎn)換器來(lái)轉(zhuǎn)換。
再參照處理器,如虛線所示,在本發(fā)明的一個(gè)或多個(gè)可選實(shí)施例中,處理器可任選地包括代表二進(jìn)制轉(zhuǎn)換器505的電路或其任何部分,例如,指令組織邏輯部件、成本估計(jì)邏輯部件和/或格式選擇邏輯部件,或其他有助于實(shí)現(xiàn)一個(gè)或多個(gè)本文公開(kāi)的方法的邏輯部件。作為另一種選擇,這些硬件可在處理器以外的芯片上提供。
計(jì)算機(jī)系統(tǒng)還包括連接到總線用于存儲(chǔ)靜態(tài)信息和處理器指令(例如基本輸入輸出系統(tǒng)(BIOS))的只讀存儲(chǔ)器(ROM) 510。包含在一些但并非所有的計(jì)算機(jī)系統(tǒng)中的不同類型的存儲(chǔ)器包括閃存、可編程ROM(PROM)、可擦除可編程ROM(EPROM)以及電可擦除可編程ROMROM(EEPROM)。
計(jì)算機(jī)系統(tǒng)還可任選地通過(guò)總線與顯示信息給終端用戶的顯示器521(例如,陰極射線管(CRT)或液晶顯示器(LCD))連接。鍵盤(pán)522可任選地連接到總線并傳送信息和命令選擇給處理器。可任選地包括的另一類型的用戶輸入設(shè)備是將方向信息和命令選擇傳送給處理器并控制顯示設(shè)備上光標(biāo)移動(dòng)的光標(biāo)控制設(shè)備523,例如,鼠標(biāo)、跟蹤球和光標(biāo)方向鍵。
通信設(shè)備524也可任選地與總線連接。一些但并非所有的計(jì)算機(jī)系統(tǒng)中包含通信設(shè)備。取決于特定實(shí)現(xiàn)方式,通信設(shè)備可包括調(diào)制解調(diào)器、網(wǎng)絡(luò)接口卡或其他公知的接口設(shè)備,例如,為提供通信鏈路的目的,那些連接以太網(wǎng)、令牌環(huán)的設(shè)備或其他類型的附加設(shè)備來(lái)支持例如局域網(wǎng)或廣域網(wǎng)的設(shè)備。另外,實(shí)現(xiàn)本發(fā)明的一個(gè)或多個(gè)實(shí)施例的軟件指令也可由通信設(shè)備從網(wǎng)絡(luò)接收。
在上面描述中,為解釋的目的,說(shuō)明了大量特定細(xì)節(jié)以提供對(duì)本發(fā)明的實(shí)施例的充分理解。然而,一個(gè)或多個(gè)其他實(shí)施例可在沒(méi)有這些特定細(xì)節(jié)的條件下被實(shí)施,這對(duì)本領(lǐng)域技術(shù)人員來(lái)說(shuō)是顯而易見(jiàn)的。在另一些例子中,為了清楚起見(jiàn),對(duì)于公知的電路、結(jié)構(gòu)、設(shè)備和技術(shù)僅以框圖形式示出和/或不作詳細(xì)說(shuō)明。
本發(fā)明的一個(gè)或多個(gè)實(shí)施例可包括各種操作。這些操作可由硬件部件完成,或可體現(xiàn)在機(jī)器可執(zhí)行指令中,所述指令可用來(lái)使得或至少引發(fā)經(jīng)用該指令編程的通用或?qū)S锰幚砥骰蜻壿嫴考?lái)完成這些操作。作為可選的方案,這些操作也可由硬件和軟件的結(jié)合來(lái)實(shí)現(xiàn)。
本發(fā)明的一個(gè)或多個(gè)實(shí)施例可作為程序產(chǎn)品或其他制品來(lái)提供,這些產(chǎn)品和制品可包括機(jī)器可訪問(wèn)和/或可讀介質(zhì),在介質(zhì)上存儲(chǔ)或以其他方式提供一個(gè)或多個(gè)指令和/或數(shù)據(jù)結(jié)構(gòu)。機(jī)器可訪問(wèn)介質(zhì)可提供指令,當(dāng)這些指令被機(jī)器執(zhí)行時(shí),可引發(fā)和/或?qū)е聶C(jī)器實(shí)現(xiàn)本文公開(kāi)的一個(gè)或多個(gè)操作和方法。適用的機(jī)器包括(但不限于)處理器、計(jì)算機(jī)系統(tǒng)(例如,個(gè)人計(jì)算機(jī)、工作站和服務(wù)器)以及各種其他具有一個(gè)或多個(gè)處理器的設(shè)備。機(jī)器可訪問(wèn)介質(zhì)可包括提供(例如存儲(chǔ)和/或傳輸)可由機(jī)器訪問(wèn)的形式的信息的任何機(jī)構(gòu)。例如,機(jī)器可訪問(wèn)介質(zhì)可包括可記錄和/或不可記錄介質(zhì),如軟盤(pán)、光存儲(chǔ)介質(zhì)、光盤(pán)、CD-ROM、磁盤(pán)存儲(chǔ)介質(zhì)、光磁盤(pán)、只讀存儲(chǔ)器(ROM)、隨機(jī)訪問(wèn)存儲(chǔ)器(RAM)、DRAM、EPROM、EEPROM、閃存以及它們的組合(以上僅為舉例)。機(jī)器可訪問(wèn)介質(zhì)還可包括電、光、聲和其他形式的傳播信號(hào),例如載波、紅外線信號(hào)和傳播的數(shù)字信號(hào)。本發(fā)明的一個(gè)或多個(gè)實(shí)施例可作為計(jì)算機(jī)程序產(chǎn)品被下載,其中程序可借助包含在載波或其他傳播信號(hào)或介質(zhì)中的數(shù)據(jù)信號(hào)通過(guò)通信鏈路(例如,調(diào)制解調(diào)器或網(wǎng)絡(luò)連接)從一個(gè)計(jì)算機(jī)或其他機(jī)器傳送到另一計(jì)算機(jī)或其他機(jī)器。
雖然以最基本的形式對(duì)很多方法進(jìn)行了描述,但可任選地將操作加到方法中和/或從方法中刪除。方法可借助流程圖作為順序過(guò)程來(lái)說(shuō)明,盡管操作可任選地被并行或并發(fā)執(zhí)行。此外,操作的順序可任選地被重新安排??蓪?duì)本發(fā)明進(jìn)行許多其他的更改和調(diào)整,這對(duì)于本領(lǐng)域技術(shù)人員是顯而易見(jiàn)的。提供的特定實(shí)施例不是對(duì)本發(fā)明的限制,而是為了解釋本發(fā)明。本發(fā)明的范圍不是由所提供的特定例子來(lái)確定,而是由后附的權(quán)利要求規(guī)定。
還要理解到,整個(gè)說(shuō)明書(shū)中對(duì)例如″一個(gè)實(shí)施例″,″一實(shí)施例″,和″一個(gè)或多個(gè)實(shí)施例″,的引用意味著特定特征可包含在本發(fā)明的實(shí)施中。同樣,要理解到,對(duì)本發(fā)明的示范性實(shí)施例進(jìn)行的描述中,各種特征有時(shí)在單個(gè)實(shí)施例中被組合在一起,其中的附圖和描述是為了簡(jiǎn)化該公開(kāi)以及理解各發(fā)明性方面中的一個(gè)或多個(gè)的目的。然而,公開(kāi)的方法不應(yīng)被理解為反映這樣的意圖所主張的發(fā)明中需要比在各權(quán)利要求中清楚陳述的更多的特征。更確切的說(shuō),如下面權(quán)利要求所反映的,其發(fā)明形態(tài)少于前面公開(kāi)的單個(gè)實(shí)施例的所有特征。因此,“具體實(shí)施方式
”部分之后的權(quán)利要求書(shū)在此明示地結(jié)合到“具體實(shí)施方式
”部分中,各項(xiàng)權(quán)利要求本身代表本發(fā)明的一個(gè)實(shí)施例。
雖然已根據(jù)一些實(shí)施例對(duì)本發(fā)明進(jìn)行了描述,但本領(lǐng)域技術(shù)人員會(huì)認(rèn)識(shí)到本發(fā)明不限于所描述的實(shí)施例,而是可在附加的權(quán)利要求的精神和范圍內(nèi)進(jìn)行更改和調(diào)整。因此,本描述應(yīng)被認(rèn)為解釋性的而非限制性的。
權(quán)利要求
1.一種方法,包括如下操作用多格式指令的不同格式將源指令集架構(gòu)的多格式指令轉(zhuǎn)換成目標(biāo)指令集架構(gòu)的指令,估計(jì)與該轉(zhuǎn)換相關(guān)聯(lián)的成本,從而估計(jì)出各成本;以及至少部分基于所估計(jì)的成本來(lái)選擇所述多格式指令的格式。
2.如權(quán)利要求1所述的方法,其中,所述估計(jì)成本的操作包括用所述多格式指令的浮點(diǎn)格式將從IA-32指令集架構(gòu)的MOVAPD、MOVAPS和MOVDQA中選擇的多格式指令轉(zhuǎn)換成64位處理器的指令集架構(gòu)的指令,估計(jì)與該轉(zhuǎn)換相關(guān)聯(lián)的成本。
3.如權(quán)利要求1所述的方法,還包括將源指令集架構(gòu)的所述多格式指令動(dòng)態(tài)地轉(zhuǎn)換成具有所述被選格式的目標(biāo)指令集架構(gòu)的指令。
4.一種包含機(jī)器可訪問(wèn)介質(zhì)的制品,所述介質(zhì)提供當(dāng)被訪問(wèn)時(shí)使機(jī)器進(jìn)行如下操作的指令用所述多格式指令的不同格式將源指令集架構(gòu)的多格式指令轉(zhuǎn)換成目標(biāo)指令集架構(gòu)的指令,估計(jì)與該轉(zhuǎn)換相關(guān)聯(lián)的成本,從而估計(jì)出各成本;以及至少部分基于所估計(jì)的成本來(lái)選擇所述多格式指令的格式。
5.如權(quán)利要求4所述的制品,其中所述機(jī)器可訪問(wèn)介質(zhì)還提供當(dāng)被訪問(wèn)時(shí)使機(jī)器進(jìn)行如下操作的指令用所述多格式指令的浮點(diǎn)格式將從IA-32指令集架構(gòu)的MOVAPD、MOVAPS和MOVDQA中選擇的多格式指令轉(zhuǎn)換成64位處理器的指令集架構(gòu)的一個(gè)或多個(gè)指令,估計(jì)與該轉(zhuǎn)換相關(guān)聯(lián)的成本。
6.如權(quán)利要求4所述的制品,其中,所述機(jī)器可訪問(wèn)介質(zhì)還提供當(dāng)被訪問(wèn)時(shí)使機(jī)器進(jìn)行如下操作的指令通過(guò)訪問(wèn)并將以處理器周期數(shù)表示的預(yù)定成本估計(jì)全部相加來(lái)估計(jì)所述成本;以及選擇一個(gè)具有最低估計(jì)成本的格式。
7.一種裝置,包括第一電路,用多格式指令的不同格式將源指令集架構(gòu)的多格式指令轉(zhuǎn)換成目標(biāo)指令集架構(gòu)的對(duì)應(yīng)的單格式指令,估計(jì)與該轉(zhuǎn)換相關(guān)聯(lián)的成本,從而估計(jì)出各成本;以及第二電路,至少部分基于所估計(jì)的成本來(lái)選擇所述多格式指令的格式。
8.如權(quán)利要求7所述的裝置,其中所述多格式指令從MOVAPD、MOVAPS和MOVDQA中選擇,其中所述源指令集架構(gòu)包括IA-32指令集架構(gòu),而其中所述目標(biāo)指令集架構(gòu)包括適于64位處理器的指令集架構(gòu)。
9.如權(quán)利要求7所述的裝置,其中第一電路包含對(duì)在被選格式和與所述多格式指令相關(guān)聯(lián)的邊界指令的格式對(duì)應(yīng)的格式之間變換的格式變換成本進(jìn)行估計(jì)的電路部分。
10.一種包含機(jī)器可訪問(wèn)介質(zhì)的制品,所述介質(zhì)提供若被執(zhí)行就使機(jī)器進(jìn)行如下操作的指令估計(jì)對(duì)應(yīng)于源指令集架構(gòu)的多格式指令的第一格式的第一成本,其中估計(jì)第一成本的操作包含估計(jì)將第一格式的多格式指令轉(zhuǎn)換成目標(biāo)指令集架構(gòu)的第一格式的一個(gè)或多個(gè)單格式指令而對(duì)第一成本的第一貢獻(xiàn);以及估計(jì)將一個(gè)或多個(gè)單格式指令的第一格式變換成與所述多格式指令具有寄存器使用關(guān)系的邊界指令對(duì)應(yīng)的指令的不同格式而對(duì)第一成本的第二貢獻(xiàn);估計(jì)與多格式指令的第二格式對(duì)應(yīng)的第二成本;以及為所述多格式指令選擇第一格式和第二格式中具有較低對(duì)應(yīng)估計(jì)成本的格式。
11.如權(quán)利要求10所述的制品,其中,所述機(jī)器可訪問(wèn)介質(zhì)還提供若被執(zhí)行則使機(jī)器進(jìn)行如下操作的指令將所述多格式指令從源指令集架構(gòu)動(dòng)態(tài)地轉(zhuǎn)換到目標(biāo)指令集架構(gòu),其中所述多格式指令從MOVAPD、MOVAPS和MOVDQA中選擇,其中所述源指令集架構(gòu)包括IA-32指令集架構(gòu),而所述目標(biāo)指令集架構(gòu)適于64位處理器。
12.如權(quán)利要求10所述的制品,其中,所述機(jī)器可訪問(wèn)介質(zhì)還提供若被執(zhí)行則使機(jī)器進(jìn)行如下操作的指令估計(jì)出以處理器周期數(shù)表示的第一成本。
13.一種包含機(jī)器可訪問(wèn)介質(zhì)的制品,所述介質(zhì)提供若被執(zhí)行則使機(jī)器進(jìn)行如下操作的指令對(duì)于代碼塊中的第一指令,判定所述代碼塊是否包含第二指令,第二指令在第一指令之后,并且規(guī)定第一指令使用目標(biāo)寄存器;若所述代碼塊包含第二指令,則判定第一指令是否為多格式;若第一指令為多格式,則判定第二指令是否為多格式;以及若第二指令為多格式,則將第一指令加到含有第二指令的組中。
14.如權(quán)利要求13所述的制品,其中,所述機(jī)器可訪問(wèn)介質(zhì)還提供若被執(zhí)行則使機(jī)器進(jìn)行如下操作的指令若第二指令不是多格式,則創(chuàng)建含有第一指令的第二組,并將第二指令確認(rèn)為第二組的邊界指令。
15.如權(quán)利要求13所述的制品,其中,所述機(jī)器可訪問(wèn)介質(zhì)還提供若被執(zhí)行則使機(jī)器進(jìn)行如下操作的指令若第一指令不是多格式,則判定第二指令是否為多格式;以及若第二指令為多格式,則將第一指令確認(rèn)為第二指令的邊界指令。
16.一種包含機(jī)器可訪問(wèn)介質(zhì)的制品,所述介質(zhì)提供若被執(zhí)行則使機(jī)器進(jìn)行如下操作的指令對(duì)于代碼塊中的第一指令,判定所述代碼塊是否包含第二指令,第二指令在第一指令之后,并且規(guī)定第一指令使用目標(biāo)寄存器;若所述代碼塊不包含第二指令,則判定第一指令是否為多格式;以及若第一指令為多格式,則創(chuàng)建含有第一指令的組。
17.如權(quán)利要求16所述的制品,其中,所述機(jī)器可訪問(wèn)介質(zhì)還提供若被執(zhí)行則使機(jī)器進(jìn)行如下操作的指令若代碼塊包含第二指令,則判定第一指令是否為多格式;若第一指令為多格式,則判定第二指令是否為多格式;以及若第二指令不是多格式,則創(chuàng)建含有第一指令的第二組。
18.如權(quán)利要求17所述的制品,其中,所述機(jī)器可訪問(wèn)介質(zhì)還提供若被執(zhí)行則使機(jī)器進(jìn)行如下操作的指令若第二指令不是多格式,則將第二指令確認(rèn)為第二組的邊界指令。
19.一種包含機(jī)器可訪問(wèn)介質(zhì)的制品,所述介質(zhì)提供若被執(zhí)行則使機(jī)器進(jìn)行如下操作的指令通過(guò)分析所述多格式指令之間的寄存器使用關(guān)系,將源指令集架構(gòu)的代碼塊中的多格式指令分成至少包含一組的若干組;通過(guò)分析所述代碼塊中的一指令和所述組中的多格式指令之間的寄存器使用關(guān)系,將該指令確認(rèn)為所述組的邊界指令;用所述多格式指令的不同格式將所述組中的多格式指令轉(zhuǎn)換成目標(biāo)指令集架構(gòu)的單格式指令,估計(jì)與該轉(zhuǎn)換相關(guān)聯(lián)的成本,從而估計(jì)出各成本,其中所述估計(jì)成本的操作包含估計(jì)將目標(biāo)指令集架構(gòu)的單格式指令的格式變換成與所述組中的邊界指令對(duì)應(yīng)的指令的不同格式的成本;以及至少部分基于所估計(jì)的成本來(lái)選擇所述多格式指令的格式。
20.如權(quán)利要求19所述的制品,其中,所述機(jī)器可訪問(wèn)介質(zhì)還提供若被執(zhí)行則使機(jī)器進(jìn)行如下操作的指令通過(guò)用被選格式將源指令集架構(gòu)的多格式指令轉(zhuǎn)換成目標(biāo)指令集架構(gòu)的單格式指令,其中所述源指令集架構(gòu)包括IA-32指令集架構(gòu),而所述目標(biāo)指令集架構(gòu)適于64位處理器。
21.如權(quán)利要求19所述的制品,其中,所述機(jī)器可訪問(wèn)介質(zhì)還提供若被執(zhí)行則使機(jī)器進(jìn)行如下操作的指令至少部分基于所估計(jì)的成本來(lái)選擇所述組的格式。
22.一種系統(tǒng),包括總線;與所述總線連接的64位處理器;與所述總線連接的DRAM存儲(chǔ)器;存儲(chǔ)在所述DRAM存儲(chǔ)器中的代碼,所述代碼包含IA-32多格式指令;以及執(zhí)行如下操作的邏輯部件用IA-32多格式指令的一個(gè)不同格式將IA-32多格式指令轉(zhuǎn)換成64位處理器的指令集架構(gòu)的指令,估計(jì)與該轉(zhuǎn)換相關(guān)聯(lián)的成本,從而估計(jì)出各成本;至少部分基于所估計(jì)的成本來(lái)選擇IA-32多格式指令的格式;以及將所述IA-32多格式指令轉(zhuǎn)換成具有被選格式的64位處理器的指令集架構(gòu)的指令。
23.如權(quán)利要求22所述的系統(tǒng),其中所述邏輯部件包括存儲(chǔ)在所述DRAM存儲(chǔ)器中的指令,若所述指令被執(zhí)行則使所述64位處理器進(jìn)行所述操作。
24.如權(quán)利要求22所述的系統(tǒng),其中所述邏輯部件包括所述64位處理器上的電路。
全文摘要
一種方法,用多格式指令的不同格式將源指令集架構(gòu)的多格式指令轉(zhuǎn)換成目標(biāo)指令集架構(gòu)的指令,估計(jì)與該轉(zhuǎn)換相關(guān)聯(lián)的成本,從而估計(jì)出各成本,并至少部分基于所估計(jì)的成本來(lái)選擇所述多格式指令的格式。組織或分組多格式指令的方法基于寄存器使用關(guān)系。本發(fā)明還公開(kāi)了實(shí)現(xiàn)該方法的軟件、硬件和計(jì)算機(jī)系統(tǒng)。
文檔編號(hào)G06F9/30GK101095105SQ200480044804
公開(kāi)日2007年12月26日 申請(qǐng)日期2004年12月30日 優(yōu)先權(quán)日2004年12月30日
發(fā)明者Q·張, J·李, S·徐 申請(qǐng)人:英特爾公司