專利名稱:生成用于程序代碼轉(zhuǎn)換的中間表示的體系結(jié)構(gòu)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明一般地涉及計算機和計算機軟件的領(lǐng)域,更具體地說,涉及用于例如代碼轉(zhuǎn)換器、仿真器(emulator)和加速器(accelerator)的程序代碼轉(zhuǎn)換方法與裝置。
背景技術(shù):
在嵌入式和非嵌入式CPU的市場上,人們尋找占優(yōu)勢的指令集體系結(jié)構(gòu)(ISA,Instruction Set Architecture),其中存在著大的軟件體,這些軟件體在性能上可以被“加速”,或者被“轉(zhuǎn)換”為能提供較好的性能/價格比的多種可能的處理器,只要這些處理器能透明地訪問相關(guān)的軟件。人們還尋找占優(yōu)勢的CPU體系結(jié)構(gòu),后者在時間上被鎖定于它們的ISA,因而無法在性能或者市場范圍方面取得進展,也不能得益于“合成CPU”共同體系結(jié)構(gòu)。
人們通常希望把為第一類型的計算機處理器(“源”處理器)編寫的程序代碼運行于第二類型的處理器(“目標(biāo)”處理器)上。這里,使用一個仿真器或轉(zhuǎn)換器來執(zhí)行程序代碼轉(zhuǎn)換,使得源程序能在目標(biāo)處理器上運行。仿真器提供一種虛擬環(huán)境,通過仿真源處理器,仿佛源程序以本地方式運行于源處理器之上。
以往,正如在題為“Program Code Conversion”的(專利公報)WO 00/22521并結(jié)合本申請書的圖1至圖5所描述的那樣,在使用所謂的基本結(jié)點的運行時間轉(zhuǎn)換期間,將源代碼轉(zhuǎn)換為計算機程序的中間表示。中間表示(IR,intermediate representation)是一個在計算機行業(yè)中廣泛使用的術(shù)語,它指的是抽象計算機語言的各種形式,在其中,一段程序可以被表達,但是不專用于任何特定的處理器,也不打算在任何特定的處理器上直接執(zhí)行。使用中間表示的、有助于這樣的加速、轉(zhuǎn)換和共同體系結(jié)構(gòu)能力的程序代碼轉(zhuǎn)換方法與裝置是,例如,在上述公報WO 00/22521中所講述的那樣。
發(fā)明內(nèi)容
根據(jù)本發(fā)明,提供了如在所附的權(quán)利要求書中所陳述的裝置與方法。從各項從屬權(quán)利要求以及隨后的敘述中,本發(fā)明的優(yōu)選的特征將是顯而易見的。
下面是根據(jù)本發(fā)明的各個方面的概括以及根據(jù)用于程序代碼轉(zhuǎn)換的改進的體系結(jié)構(gòu)的不同實施例的可實現(xiàn)的優(yōu)點。它作為一個簡介而提供,以幫助本領(lǐng)域的技術(shù)人員更快地認同隨后的本發(fā)明的詳細討論,并且不去限制、也不打算以任何方式去限制所附的權(quán)利要求書的范圍。
以下所描述的各個實施例涉及用于程序代碼轉(zhuǎn)換裝置的改進的體系結(jié)構(gòu)以及相關(guān)方法,用于把可以在源計算環(huán)境中執(zhí)行的源代碼(subject code)轉(zhuǎn)換為可以在目標(biāo)計算環(huán)境中執(zhí)行的目標(biāo)代碼。所述程序代碼轉(zhuǎn)換裝置生成源代碼的中間表示(“IR”),然后可以針對目標(biāo)計算環(huán)境對它進行優(yōu)化,以便更有效地生成目標(biāo)代碼。根據(jù)在轉(zhuǎn)換中所涉及的特定的源和目標(biāo)計算環(huán)境的體系結(jié)構(gòu),一個實施例的程序代碼轉(zhuǎn)換裝置確定在中間表示中將生成下列類型的IR結(jié)點中的哪一種基本結(jié)點、復(fù)雜結(jié)點、多形結(jié)點和體系結(jié)構(gòu)專用結(jié)點。程序代碼轉(zhuǎn)換體系結(jié)構(gòu)在生成中間表示時,將通過默認來生成基本結(jié)點,除非已經(jīng)確定另一種類型的結(jié)點更加適用于正在實現(xiàn)的特定轉(zhuǎn)換。
基本結(jié)點提供為表達運行源代碼的任何源體系結(jié)構(gòu)的語義所需的最小結(jié)點(即,抽象表達式)集,因此,基本結(jié)點提供一種類似于精簡指令集計算機(RISC,Reduced Instruction Set Computer)的功能。復(fù)雜結(jié)點是以比基本結(jié)點更加緊湊的表達方式來表達運行源代碼的任何源體系結(jié)構(gòu)的語義的類似于復(fù)雜指令集計算機(CISC,Complex Instruction Set Computer)的通用結(jié)點。同時所有復(fù)雜結(jié)點都可以被分解為具有相同語義的基本結(jié)點表示,復(fù)雜結(jié)點保留在單個IR結(jié)點中的復(fù)雜指令的語義,以便改進轉(zhuǎn)換器的性能。復(fù)雜結(jié)點實質(zhì)上擴大了在源代碼中用于類似于CISC指令的基本結(jié)點集?;窘Y(jié)點和復(fù)雜結(jié)點二者都通用于寬范圍的可能的源和目標(biāo)體系結(jié)構(gòu),因此,允許在含有基本結(jié)點和復(fù)雜結(jié)點的相應(yīng)的IR樹上進行一般的優(yōu)化。
如果被實現(xiàn)為通用IR結(jié)點,目標(biāo)計算環(huán)境的特征可能導(dǎo)致特定的源指令的語義丟失時,程序代碼轉(zhuǎn)換裝置將在中間表示中利用多形結(jié)點。多形結(jié)點含有一個函數(shù)指針,它指向?qū)S糜谠创a中的特定源指令的目標(biāo)計算環(huán)境的函數(shù),程序代碼轉(zhuǎn)換裝置還利用體系結(jié)構(gòu)專用結(jié)點來提供目標(biāo)專用的轉(zhuǎn)換部件,以便為某些目標(biāo)計算環(huán)境執(zhí)行專門化的代碼生成功能。
下面描述的改進的IR生成方法允許程序代碼轉(zhuǎn)換裝置被配置成任何源和目標(biāo)處理器體系結(jié)構(gòu)對,同時保持最佳的性能水平,并使轉(zhuǎn)換速度最大化。
為了更好地理解本發(fā)明,以及為了表示如何去實行本發(fā)明的實施例,現(xiàn)在借助于實例并引用附圖來加以說明,在附圖中圖1表示包括源和目標(biāo)計算環(huán)境的一個示例性的計算環(huán)境;圖2表示一個優(yōu)選的程序代碼轉(zhuǎn)換裝置;圖3是表示源代碼到目標(biāo)代碼的轉(zhuǎn)換的說明性計算環(huán)境的示意圖;圖4是根據(jù)本發(fā)明的一個優(yōu)選實施例,由程序代碼轉(zhuǎn)換裝置實現(xiàn)的各種中間表示的一個示意性的圖解;圖5是一個優(yōu)選的程序代碼轉(zhuǎn)換裝置的詳細示意圖;圖6表示使用基本結(jié)點和復(fù)雜結(jié)點產(chǎn)生的中間表示樹的實例;圖7是表示在一個加速器中用于實施本發(fā)明的ASN生成的實例的示意圖;圖8是表示在一個轉(zhuǎn)換器中用于實施本發(fā)明的ASN生成的實例的示意圖;圖9是當(dāng)使用按照本發(fā)明的一個優(yōu)選實施例的ASN時,所述轉(zhuǎn)換過程的操作流程圖;圖10是說明轉(zhuǎn)換過程和在所述過程中生成的相應(yīng)的中間表示(IR)的一個實例的示意圖;圖11是說明轉(zhuǎn)換過程和在所述過程中產(chǎn)生的相應(yīng)中間表示的另一個實例的示意圖;圖12是說明轉(zhuǎn)換過程和在所述過程中產(chǎn)生的相應(yīng)中間表示的一個進一步的實例的示意圖。
具體實施例方式
提供以下的說明是為了使本領(lǐng)域的任何技術(shù)人員都能實行和使用本發(fā)明,并且陳述本發(fā)明人所設(shè)想的關(guān)于如何實施他們的發(fā)明的最佳方式。然而,由于在這里已經(jīng)專門地規(guī)定了本發(fā)明的一般原理,以便為程序代碼轉(zhuǎn)換裝置提供一種改進的體系結(jié)構(gòu),所以各種修改對本領(lǐng)域的技術(shù)人員來說仍然是顯而易見的。
引用圖1,圖中表示包括源計算環(huán)境1和目標(biāo)計算環(huán)境2的一個示例性的計算環(huán)境。在源計算環(huán)境1中,源代碼10是可以以本地方式在一個源處理器12上執(zhí)行的代碼。源處理器12包括一組源寄存器14。在這里,正如本領(lǐng)域的技術(shù)人員所熟知的那樣,可以用具有介于源代碼10和源處理器12之間的中間層(例如,編譯器)的任何適當(dāng)?shù)恼Z言來表示源代碼10。
人們希望在目標(biāo)計算環(huán)境2中運行源代碼10,目標(biāo)計算環(huán)境2提供一個目標(biāo)處理器22,它使用一組目標(biāo)寄存器24。這兩個處理器12和22可以是內(nèi)在地不兼容的,因而,這兩個處理器使用不同的指令集。由此,在目標(biāo)計算環(huán)境2中提供一種程序代碼轉(zhuǎn)換體系結(jié)構(gòu)30,以便在所述不兼容的環(huán)境中運行源代碼10。程序代碼轉(zhuǎn)換體系結(jié)構(gòu)30可以包括轉(zhuǎn)換器、仿真器、加速器,或者任何其它適于將為一種處理器類型設(shè)計的程序代碼轉(zhuǎn)換為可以在另一種類型的處理器上執(zhí)行的程序代碼的體系結(jié)構(gòu)。為了對本發(fā)明進行討論的目的,在下文中,程序代碼轉(zhuǎn)換體系結(jié)構(gòu)30將被稱為“轉(zhuǎn)換器30”。應(yīng)當(dāng)注意的是,兩個處理器12和22也可以屬于相同類型的體系結(jié)構(gòu),諸如在加速器的情況下。
轉(zhuǎn)換器30對源代碼10進行轉(zhuǎn)換處理,并且提供已轉(zhuǎn)換的目標(biāo)代碼20,以便由目標(biāo)處理器22執(zhí)行。適當(dāng)?shù)?,轉(zhuǎn)換器30執(zhí)行二進制轉(zhuǎn)換,其中,采取適用于源處理器12的可執(zhí)行的二進制代碼形式的源代碼10被轉(zhuǎn)換為適用于目標(biāo)處理器22的可執(zhí)行的二進制代碼。轉(zhuǎn)換可以靜態(tài)地或動態(tài)地進行。在靜態(tài)轉(zhuǎn)換中,在已轉(zhuǎn)換的程序在目標(biāo)處理器上執(zhí)行之前,對整個程序進行轉(zhuǎn)換。這將引起明顯的延時。因此,轉(zhuǎn)換器30最好是動態(tài)地轉(zhuǎn)換源代碼10的若干小段,以便在目標(biāo)處理器22上立即執(zhí)行。由于大段的源代碼10在實際上不被使用或者僅僅偶爾地被使用,所以這是更加有效的。
現(xiàn)在引用圖2,圖中更詳細地圖示轉(zhuǎn)換器30的一個優(yōu)選實施例,轉(zhuǎn)換器30包括一個前端31,一個內(nèi)核32和一個后端33。前端31被配置專用于與源代碼相關(guān)的源處理器12。前端31取出源代碼10的預(yù)定的段,并且提供通用的中間表示塊(“IR塊”)。內(nèi)核32通過使用優(yōu)化技術(shù)來優(yōu)化由前端31生成的每一個IR塊,正如本領(lǐng)域的技術(shù)人員容易知道的那樣。后端33從內(nèi)核32取出已優(yōu)化的IR塊,并且生成可以在目標(biāo)處理器22上執(zhí)行的目標(biāo)代碼20。
適當(dāng)?shù)兀岸?1將源代碼10分為基本塊,其中,每一個基本塊都是在唯一入口點的第一指令和在唯一出口點的最后指令之間的順序指令集(諸如跳轉(zhuǎn)、調(diào)用或分支指令)。內(nèi)核32可以選擇含有準(zhǔn)備作為單個單元一起處理的兩個或多個基本塊的一組塊。還有,前端31可以形成表示不同入口條件下源代碼的同一基本塊的相同塊。在使用中,源代碼10的第一預(yù)定段(諸如一個基本塊)被識別,并且被在目標(biāo)處理器22上運行于轉(zhuǎn)換方式的轉(zhuǎn)換器30進行轉(zhuǎn)換。然后,目標(biāo)處理器22執(zhí)行目標(biāo)代碼20的相應(yīng)已優(yōu)化和已轉(zhuǎn)換的塊。
轉(zhuǎn)換器30包括多個在內(nèi)核32中適當(dāng)提供的抽象寄存器34,它表示將在源處理器12內(nèi)使用以執(zhí)行源代碼10的物理的源寄存器14。抽象寄存器34規(guī)定源處理器12的狀態(tài),所述狀態(tài)是通過表示源處理器寄存器上的源代碼指令的預(yù)期效果來進行仿真的。
使用這樣一種實施方式的結(jié)構(gòu)示于圖3。如圖所示,已編譯的本地源代碼被顯示為駐留在適當(dāng)?shù)挠嬎銠C存儲器存儲介質(zhì)100中,特定的和可替代的存儲器存儲機制是本領(lǐng)域的技術(shù)人員所熟知的。軟件組成包括待轉(zhuǎn)換的本地源代碼、轉(zhuǎn)換器代碼和操作系統(tǒng)。轉(zhuǎn)換器代碼,即,用于實現(xiàn)轉(zhuǎn)換器的源代碼的編譯版本,也類似地駐留在適當(dāng)?shù)挠嬎銠C存儲器存儲介質(zhì)102上。轉(zhuǎn)換器與存儲在存儲器中的操作系統(tǒng)104(諸如,運行于目標(biāo)處理器106上的UNIX,上述處理器典型地是一個微處理器或者其它適當(dāng)?shù)挠嬎銠C)結(jié)合在一起運行。人們將理解,圖3所示的結(jié)構(gòu)僅僅是示例性的,并且,例如,根據(jù)本發(fā)明的方法和處理過程可以用駐留于操作系統(tǒng)中或者在操作系統(tǒng)下的代碼實現(xiàn)。已轉(zhuǎn)換的代碼被示出駐留在一種適當(dāng)?shù)挠嬎銠C存儲器存儲介質(zhì)108中。源代碼、轉(zhuǎn)換器代碼、操作系統(tǒng)、已轉(zhuǎn)換的代碼和存儲機制可以是本領(lǐng)域的技術(shù)人員所熟知的多種類型中的任何一種。
在本發(fā)明的一個優(yōu)選實施例中,在運行時間動態(tài)地執(zhí)行程序代碼轉(zhuǎn)換,同時已轉(zhuǎn)換的程序在目標(biāo)計算環(huán)境中運行。轉(zhuǎn)換器30與已轉(zhuǎn)換的程序直接插入運行。已轉(zhuǎn)換的程序的執(zhí)行路徑是一個控制環(huán)路,包括下列各步驟執(zhí)行轉(zhuǎn)換器代碼,該代碼將源代碼塊轉(zhuǎn)換為已轉(zhuǎn)換代碼,然后執(zhí)行所述已轉(zhuǎn)換代碼塊,每個已轉(zhuǎn)換代碼塊的結(jié)尾含有將控制返回到轉(zhuǎn)換器代碼的指令。換句話說,轉(zhuǎn)換和隨后執(zhí)行源代碼的步驟被交織在一起,因此,每次僅轉(zhuǎn)換源程序的一些部分。
轉(zhuǎn)換器30的基本轉(zhuǎn)換單元是基本塊,這意味著轉(zhuǎn)換器30每次僅轉(zhuǎn)換一個基本塊的源代碼。一個基本塊被正式地定義為精確地具有一個入口點和精確地具有一個出口點的一段代碼,它把代碼塊限制到單個控制路徑。為此,基本塊是控制流程的基本單元。
中間表示(IR)樹在生成已轉(zhuǎn)換代碼的過程中,根據(jù)源指令序列來生成中間表示(“IR”)樹。IR樹包括作為由源程序計算的表達式和執(zhí)行的操作的抽象表示的各個結(jié)點。然后,根據(jù)IR樹來生成已轉(zhuǎn)換代碼。在這里所描述的IR結(jié)點的集合在口語上被稱為“樹”。我們注意到,正式地說,這樣的結(jié)構(gòu)事實上是有向非循環(huán)圖(DAG,directed acyclic graph),而不是樹。樹的正式定義要求每一個結(jié)點具有至多一個父輩。由于所描述的實施例在IR生成過程中使用共同的子表達式消除,所以各結(jié)點通常具有多個父輩。例如,標(biāo)志影響指令結(jié)果的IR可以由兩個抽象寄存器(即對應(yīng)于目標(biāo)源寄存器和標(biāo)志結(jié)果參數(shù)的寄存器)給出。
例如,源指令(add %r1,%r2,%r3)對源寄存器%r2和%r3的內(nèi)容進行加法運算,并且將結(jié)果存儲在源寄存器%r1中。因此,這條指令對應(yīng)于抽象表達式“%r1=%r2+%r3”。這個實例含有抽象寄存器%r1的定義,它采用一個加法表達式,后者含有表示所述指令操作數(shù)%r2和%r3的兩個子表達式。在源程序的上下文中,這些子表達式可以對應(yīng)于其它先前的源指令,或者它們可以表示當(dāng)前指令的細節(jié),諸如中間常數(shù)值。
當(dāng)“加法”指令被解析時,產(chǎn)生一個對應(yīng)于用于加法的抽象數(shù)學(xué)運算符的新的“Y”型IR結(jié)點。所述“Y”型IR結(jié)點存儲著表示操作數(shù)(保存在源寄存器中,被表示為子表達式樹)的其它IR結(jié)點的引用。“Y”型結(jié)點本身由適當(dāng)?shù)脑醇拇嫫鞫x(用于%r1的抽象寄存器,所述指令的目標(biāo)寄存器)引用。正如本領(lǐng)域的技術(shù)人員可以理解的那樣,在一個實施例中,使用面向?qū)ο蟮木幊陶Z言(諸如C++)來實現(xiàn)所述轉(zhuǎn)換器。例如,一個IR結(jié)點被實現(xiàn)為一個C++對象,同時對于其它結(jié)點的引用被實現(xiàn)為對于對應(yīng)于那些其它結(jié)點的C++對象的引用。因此,一棵IR樹被實現(xiàn)為各IR結(jié)點對象的一個集合,其中含有彼此之間的各種引用。
抽象寄存器(abstract register)還有,在所討論的實施例中,使用一組抽象寄存器34來生成IR。這些抽象寄存器34對應(yīng)于源體系結(jié)構(gòu)的特定特征。例如,對于源體系結(jié)構(gòu)12上的每一個物理寄存器14來說,存在唯一的抽象寄存器34。在IR生成過程中,抽象寄存器34用作IR樹的占位符。例如,位于源指令序列中的給定點的源寄存器%r2的值由一個特定IR表達式樹來表示,上述IR表達式樹與用于源寄存器%r2的抽象寄存器34有關(guān)。在一個實施例中,抽象寄存器34被實現(xiàn)為C++對象,后者經(jīng)由至所述樹的根結(jié)點對象的C++引用與特定的IR樹建立相關(guān)聯(lián)。
在上述指令序列的實例中,轉(zhuǎn)換器30在解析“加法”指令之前的源指令的同時,已經(jīng)生成對應(yīng)于%r2和%r3的值的IR樹。換句話說,計算%r2和%r3的值的子表達式已經(jīng)被表示為IR樹。當(dāng)生成用于“add %r1,%r2,%r3”指令的IR樹時,新的“Y”型結(jié)點含有對于%r2和%r3的IR子樹的引用。
在轉(zhuǎn)換器30和已轉(zhuǎn)換代碼中的組成之間劃分抽象寄存器34的實施方式。在轉(zhuǎn)換器的上下文中,抽象寄存器是在IR生成過程中使用的占位符,因此,抽象寄存器34與用于計算對應(yīng)于特定抽象寄存器34的源寄存器14的值的IR樹相關(guān)聯(lián)。如此,轉(zhuǎn)換器中的抽象寄存器34可以被實現(xiàn)為一個C++對象,它含有對于IR結(jié)點對象(即,IR樹)的引用。在已轉(zhuǎn)換代碼的上下文中,抽象寄存器34是抽象寄存器庫內(nèi)的一個特定位置,源寄存器14的值與實際的目標(biāo)寄存器24是通過進/出上述抽象寄存器庫來同步的??商娲兀?dāng)已經(jīng)從抽象寄存器庫加載一個值時,在已轉(zhuǎn)換的代碼中的抽象寄存器34可以被理解為目標(biāo)寄存器26,后者在執(zhí)行已轉(zhuǎn)換的代碼的過程中,在被回存到寄存器庫之前,暫時地保存源寄存器值。
如上所述的程序轉(zhuǎn)換的一個實例示于圖4。圖4表示x86指令的兩個基本塊的轉(zhuǎn)換,以及在轉(zhuǎn)換過程中產(chǎn)生的相應(yīng)IR樹。圖4左側(cè)表示在轉(zhuǎn)換過程中仿真器的執(zhí)行路徑。轉(zhuǎn)換器30將源代碼的第一基本塊153轉(zhuǎn)換(151)為目標(biāo)代碼,隨后執(zhí)行(155)所述目標(biāo)代碼。當(dāng)目標(biāo)代碼完成執(zhí)行時,控制返回到仿真器157。然后,轉(zhuǎn)換器30將源代碼的下一個基本塊159轉(zhuǎn)換(157)為目標(biāo)代碼,隨后執(zhí)行(161)所述目標(biāo)代碼,等等。
在將源代碼的第一基本塊153轉(zhuǎn)換(151)為目標(biāo)代碼的過程中,轉(zhuǎn)換器30根據(jù)所述基本塊生成IR樹163。在本例中,從作為標(biāo)志影響指令的源指令“add%ecx,%edx”產(chǎn)生IR樹163。在產(chǎn)生IR樹163的過程中,由這條指令定義4個抽象寄存器目標(biāo)源寄存器%ecx167,第一標(biāo)志影響指令參數(shù)169,第二標(biāo)志影響指令參數(shù)171,以及標(biāo)志影響指令結(jié)果173。對應(yīng)于“加法”指令的IR樹是一個簡單的“Y”型(算術(shù)加法)運算符175,其操作數(shù)是源寄存器%ecx 177和%edx179。
第一基本塊的仿真通過存儲標(biāo)志影響指令的各項參數(shù)和結(jié)果,將各項標(biāo)志置為掛起狀態(tài)。標(biāo)志影響指令為“add%ecx,%edx”。該指令的參數(shù)是仿真的源寄存器%ecx 177和%edx 179的當(dāng)前值。在源寄存器前面的“@”符號使用177和179來表示源寄存器的值是從全局寄存器庫里面分別對應(yīng)于%ecx和%edx的位置檢索的,因為這些特定的源寄存器事先沒有被當(dāng)前基本塊加載。然后,這些參數(shù)被存儲在第一(169)和第二(171)標(biāo)志參數(shù)抽象寄存器中。加法運算的結(jié)果175被存儲在標(biāo)志結(jié)果抽象寄存器173中。
在生成IR樹之后,根據(jù)所述IR來生成相應(yīng)的目標(biāo)代碼。從一個通用的IR生成目標(biāo)代碼的過程在本領(lǐng)域是眾所周知的。目標(biāo)代碼被插入到已轉(zhuǎn)換的塊的尾部,以便將抽象寄存器,包括用于標(biāo)志結(jié)果173和標(biāo)志參數(shù)169、171的抽象寄存器,保存到全局寄存器庫中。在生成目標(biāo)代碼之后,執(zhí)行步驟155。
在轉(zhuǎn)換源代碼的第二基本塊(159)的過程(157)中,轉(zhuǎn)換器30根據(jù)所述基本塊生成IR樹165。從源指令“pushf”生成IR樹165,這是一條標(biāo)志使用指令。指令“pushf”的語義是將所有狀態(tài)標(biāo)志的值存入堆棧,這要求明確地計算每一個標(biāo)志。如此,在生成IR的過程中,定義對應(yīng)于4個狀態(tài)標(biāo)志值的抽象寄存器零標(biāo)志(“ZF”)181,符號標(biāo)志(“S17”)183,進位標(biāo)志(“CF”)185,以及溢出標(biāo)志(“OF”)187。結(jié)點195是算術(shù)比較運算符“無符號小于”。根據(jù)來自先前的標(biāo)志影響指令的信息(在本例中為來自第一基本塊153的指令“add%ecx,%edx”)來進行狀態(tài)標(biāo)志的計算。計算狀態(tài)標(biāo)志值的IR是根據(jù)標(biāo)志影響指令的結(jié)果189和參數(shù)191、193。如上所述,在標(biāo)志參數(shù)標(biāo)號前面的符號“@”表示仿真器插入目標(biāo)代碼,以便在使用它們之前,從全局寄存器庫加載那些數(shù)值。
因此,第二基本塊迫使標(biāo)志值歸一化。在計算和使用各標(biāo)志數(shù)值之后(通過仿真“pushf”指令的目標(biāo)代碼),它們將被存儲到全局寄存器庫中。與此同時,掛起的標(biāo)志抽象寄存器(各項參數(shù)和結(jié)果)被置為一種未定義狀態(tài),以反映這樣一個事實各個標(biāo)志數(shù)值被明確地存儲(即,各個標(biāo)志已經(jīng)被歸一化)。
圖5表示根據(jù)本發(fā)明的一個優(yōu)選實施例而形成的轉(zhuǎn)換器30,它能生成幾種可以用于轉(zhuǎn)換的不同類型的IR結(jié)點,以及說明這些不同類型的IR結(jié)點的實施方式如何在轉(zhuǎn)換器30的前端31、內(nèi)核32和后端33等組成中進行分配。術(shù)語“實現(xiàn)”指的是IR生成,當(dāng)源代碼10的源指令被解碼(即,被解析)時,在前端31中進行IR生成。術(shù)語“種植”指的是目標(biāo)代碼生成,后者在后端33中進行。
要注意的是,當(dāng)下面用單個源指令來描述轉(zhuǎn)換過程時,如上所述,這些操作實際上對于源指令的整個基本塊立即發(fā)生。換句話說,整個基本塊被初始地解碼,以生成一個IR森林,然后,內(nèi)核32對整個IR森林進行優(yōu)化。最后,后端33以每次一個結(jié)點的方式對于已優(yōu)化的IR森林進行目標(biāo)代碼生成。
當(dāng)為一個基本塊生成一個IR森林時,轉(zhuǎn)換器30可以根據(jù)所預(yù)期的轉(zhuǎn)換性能以及源處理器和目標(biāo)處理器對的特定體系結(jié)構(gòu),生成基本結(jié)點、復(fù)雜結(jié)點、多形結(jié)點或者體系結(jié)構(gòu)專用結(jié)點(ASN)其中之一,或者它們的任何組合。
基本結(jié)點基本結(jié)點是任何源體系結(jié)構(gòu)的語義(即,表達式、計算和運算)的抽象表示,并且提供為表達源體系結(jié)構(gòu)的語義所需的標(biāo)準(zhǔn)或基本結(jié)點的最小集。如此,基本結(jié)點提供簡單的類似于精簡指令集計算機(RISC,Reduced Instruction Set Computer)的功能,例如,“加法”運算。與其它類型的結(jié)點相對比,每一個基本結(jié)點都是不可縮減的,這意味著它不能被進一步地分解為其它IR結(jié)點。由于它們的簡單性,基本結(jié)點也可以在所有后端33(即,目標(biāo)體系結(jié)構(gòu))上容易地被轉(zhuǎn)換器30轉(zhuǎn)換為目標(biāo)指令。
當(dāng)僅使用基本IR結(jié)點時,轉(zhuǎn)換過程完全在圖5的頂部(即,穿越“基本IR”塊204的路徑)發(fā)生。在解碼塊200中,前端31對來自源程序代碼10的源指令進行解碼,并且在實現(xiàn)塊202中實現(xiàn)(生成)由基本結(jié)點構(gòu)成的相應(yīng)IR樹。然后,所述IR樹從前端31被送往內(nèi)核32中的基本IR塊204,在這里,對整個IR森林實行優(yōu)化。由于IR森林被僅含有基本結(jié)點的基本IR塊204優(yōu)化,這對任何處理器體系結(jié)構(gòu)來說都是完全通用的。然后,已優(yōu)化的IR森林從內(nèi)核32中的基本IR塊204被送往后端33,后者在種植塊206中為每一個IR結(jié)點種植(生成)相應(yīng)的目標(biāo)代碼指令。隨后,由編碼塊208對目標(biāo)代碼指令進行編碼,以便由目標(biāo)處理器執(zhí)行。
如上所述,在所有后端33上,基本結(jié)點容易地被轉(zhuǎn)換為目標(biāo)指令,并且典型地可以完全通過基本結(jié)點的排他利用來生成已轉(zhuǎn)換的代碼。當(dāng)基本結(jié)點的排他利用很快實現(xiàn)用于轉(zhuǎn)換器30時,它將在已轉(zhuǎn)換的代碼中產(chǎn)生次最佳性能。為了提高已轉(zhuǎn)換的代碼的性能,可以通過使用IR結(jié)點的替代類型,諸如復(fù)雜結(jié)點、多形態(tài)結(jié)點和體系結(jié)構(gòu)專用結(jié)點(ASN)來使轉(zhuǎn)換器30專門化,以便使用目標(biāo)處理器體系結(jié)構(gòu)的特征。
復(fù)雜結(jié)點復(fù)雜結(jié)點是以一種比基本結(jié)點更緊湊的表達方式來表達源體系結(jié)構(gòu)的語義的通用結(jié)點。復(fù)雜結(jié)點提供一種類似于復(fù)雜指令集計算機(CISC,Complex Instruction Set Computer)的功能,例如“add_imm”(寄存器與立即常數(shù)相加)。具體地說,復(fù)雜結(jié)點典型地表示具有立即常數(shù)字段的指令。立即類型(immediate-type)指令是這樣的指令,在其中,一個常數(shù)操作數(shù)值被編碼到所述指令本身的一個“立即數(shù)(immediate)”字段中。對于那些小到足以置入立即數(shù)字段中的常數(shù)值來說,這樣的指令避免了使用寄存器來保存所述常數(shù)。對于復(fù)雜指令來說,復(fù)雜結(jié)點可以通過遠少于表征相同語義的等效基本結(jié)點的結(jié)點來表示復(fù)雜指令的語義。盡管復(fù)雜結(jié)點實質(zhì)上可以被分解為具有相同語義的基本結(jié)點表示,復(fù)雜結(jié)點在把立即型指令的語義保留在單個IR結(jié)點中是有用的,由此改進了轉(zhuǎn)換器30的性能。而且,在某些情況下,通過以基本結(jié)點的形式來表示復(fù)雜指令,可能使復(fù)雜指令的語義失去,并且因此,復(fù)雜結(jié)點實質(zhì)上擴大了基本結(jié)點集,以包括用于這樣的“類似于CISC的”指令的IR結(jié)點。
引用圖6,現(xiàn)在來說明通過使用一個與基本結(jié)點相比較的復(fù)雜結(jié)點來實現(xiàn)的效率的一個實例。例如,MIPS的加立即數(shù)指令“addi r1,#10”的語義將保存在寄存器r1中的數(shù)值加上10。取代把常數(shù)數(shù)值(10)加載到寄存器中,然后將兩個寄存器(的內(nèi)容)相加,指令addi簡單地將常數(shù)值10直接編碼到所述指令字段本身中,由此避免了使用第二寄存器的需求。當(dāng)生成一個嚴(yán)格地使用基本結(jié)點的這些語義的立即表示時,針對這條指令的基本結(jié)點表示將首先把來自const(#10)結(jié)點60的常數(shù)值加載到一個寄存器結(jié)點r(x)61中,然后,使用加法(add)結(jié)點來進行寄存器結(jié)點r162和寄存器結(jié)點r(x)61的加法運算。所述復(fù)雜結(jié)點表示包括單個“加立即數(shù)”IR結(jié)點70,它含有在結(jié)點70的一部分72的常數(shù)值10以及對寄存器r174的引用。在基本結(jié)點的情形中,后端33可能需要執(zhí)行能夠識別圖6所示的4結(jié)點圖案的慣用語法識別,以便識別并生長一條“加立即數(shù)”目標(biāo)指令。在沒有慣用語法識別的情況下,后端33將在執(zhí)行寄存器—寄存器加法運算之前,發(fā)出一條額外指令,以便把常數(shù)值10加載到寄存器中。
由于復(fù)雜結(jié)點含有比它們的基本結(jié)點等價物更多的語義信息,所以復(fù)雜結(jié)點降低了在后端33中進行慣用語法識別的要求。具體地說,復(fù)雜結(jié)點避免了由后端33來進行常數(shù)操作數(shù)的慣用語法識別的需求。通過比較,如果立即型源指令被分解為多個基本結(jié)點(并且所述目標(biāo)體系結(jié)構(gòu)也含有立即型指令),則轉(zhuǎn)換器30可能需要昂貴的后端33的慣用語法識別,以便把多結(jié)點簇識別為一個立即指令的候選者,或者產(chǎn)生低效能的目標(biāo)代碼(即,多于實際需要的指令,使用多于實際需要的寄存器)。換句話說,通過單獨地使用基本結(jié)點,無論在轉(zhuǎn)換器30中(通過慣用語法識別),還是在已轉(zhuǎn)換代碼中(通過額外生成的代碼,不用慣用語法識別),都會使性能下降。更一般地說,由于復(fù)雜結(jié)點是語義信息的一種更加緊湊的表達方式,所以它們減少了轉(zhuǎn)換器30必須生成、遍歷和刪除的IR結(jié)點的數(shù)目。
立即型指令對多種體系結(jié)構(gòu)來說是共同的。因此,復(fù)雜結(jié)點之所以是通用的是由于它們在一定范圍的體系結(jié)構(gòu)中是可以重復(fù)使用的。然而,并不是每一個復(fù)雜結(jié)點都存在于每一個轉(zhuǎn)換器的IR結(jié)點集中。轉(zhuǎn)換器的某些共同的特征是可配置的,這意味著當(dāng)為一個特定的源和目標(biāo)體系結(jié)構(gòu)的對編譯轉(zhuǎn)換器時,沒有被應(yīng)用于所述轉(zhuǎn)換器配置的那些特征可以從編譯中被排除。例如,在一個MIPS-MIPS(MIPS到MIPS)轉(zhuǎn)換器中,與任何MIPS指令的語義都不匹配的復(fù)雜結(jié)點將從IR結(jié)點集中被排除,因為它們將永遠用不上。
使用一種順序遍歷,復(fù)雜結(jié)點還可以進一步改進所生成的目標(biāo)代碼的性能。順序遍歷是幾種可替代的IR遍歷算法之一,用于決定IR樹內(nèi)的各IR結(jié)點被生成為目標(biāo)代碼的順序。具體地說,當(dāng)它被第一次遍歷時,順序遍歷生成每一個IR結(jié)點,由于沒有單獨的優(yōu)化越過整個IR樹,排除了后端33的慣用語法識別。與基本結(jié)點相比,復(fù)雜結(jié)點每個結(jié)點表達更多的語義信息,并且因此,慣用語法識別的某些工作被隱含在復(fù)雜結(jié)點本身內(nèi)。這允許轉(zhuǎn)換器30使用順序遍歷,而不會如單獨使用基本結(jié)點那樣在目標(biāo)代碼性能方面受到更多的損失。
當(dāng)轉(zhuǎn)換器30生成復(fù)雜結(jié)點(即,所述路徑穿越圖5中的復(fù)雜IR塊210)時,所述轉(zhuǎn)換過程類似于前面針對基本結(jié)點而敘述的轉(zhuǎn)換過程。唯一的差別在于,與一個復(fù)雜結(jié)點的語義相匹配的源指令被實現(xiàn)為實現(xiàn)塊202中的復(fù)雜結(jié)點,而不是基本結(jié)點(如分隔實現(xiàn)塊202的虛線所示)。復(fù)雜結(jié)點在寬范圍的體系結(jié)構(gòu)中仍然是通用的,這使得內(nèi)核32的優(yōu)化仍然可以施加于整個IR森林。而且,在CISC類型的目標(biāo)體系結(jié)構(gòu)上為復(fù)雜結(jié)點生成目標(biāo)代碼可能比基本結(jié)點等價物更為有效。
多形結(jié)點如圖5所示的轉(zhuǎn)換器30的一個優(yōu)選實施例還可以利用多形中間表示。多形中間表示是一種機制,借助于這種機制,后端33可以提供專門化的代碼生成,以便有效地將目標(biāo)體系結(jié)構(gòu)特征應(yīng)用于特定的、性能重要的源指令。多形機制被實現(xiàn)為一個通用的多形結(jié)點,它含有指向后端33代碼生成函數(shù)的函數(shù)指針。每一個函數(shù)指針都被專用于特定源指令。多形機制預(yù)先取得標(biāo)準(zhǔn)的前端31 IR生成機制,否則,上述機制將把源指令解碼為基本或復(fù)雜結(jié)點。在后端33中,如果沒有多形機制,這些基本結(jié)點的生成可能導(dǎo)致次最佳的目標(biāo)代碼,或者需要昂貴的慣用語法識別來重構(gòu)源指令的語義。
每一個多形函數(shù)專用于特定的源指令和目標(biāo)體系結(jié)構(gòu)函數(shù)對。多形結(jié)點向內(nèi)核32暴露關(guān)于它們的函數(shù)的最少信息。多形結(jié)點能夠參加正常的內(nèi)核32優(yōu)化,諸如表達式共享和表達式合并。內(nèi)核32可以使用函數(shù)指針來決定兩個多形結(jié)點是否相同。多形結(jié)點不保留源指令的任何語義信息,但是可以從函數(shù)指針推斷這樣的語義信息。
多形結(jié)點被用于源指令,后者可以被表示為一系列的精心選擇的目標(biāo)指令,這樣就排除了由內(nèi)核32確定最佳的目標(biāo)指令處于運行時間的需求。當(dāng)多形結(jié)點不是由使用基本結(jié)點的前端31來實現(xiàn)時,內(nèi)核32可以選擇把這些結(jié)點實現(xiàn)為多形結(jié)點。
而且,多形結(jié)點可以含有寄存器分配線索。由于目標(biāo)指令已知,所以在CISC體系結(jié)構(gòu)上所需的各個寄存器也可能是已知的。多形結(jié)點允許它們的操作數(shù)和結(jié)果出現(xiàn)在構(gòu)建IR時所選擇的寄存器中。
為了讓轉(zhuǎn)換器30利用多形結(jié)點(即,在圖5中穿越多形IR塊212的路徑),后端33向前端31提供源指令—目標(biāo)函數(shù)指針對的列表。在所提供的列表上的各項源指令被實現(xiàn)為含有相應(yīng)的后端33函數(shù)指針的多形結(jié)點。不在所提供的列表上的源指令被實現(xiàn)為如上所述的復(fù)雜或基本IR樹。在圖5中,由箭頭214反映的從后端33到前端31的路徑表示向位于前端31的實現(xiàn)決215提供源指令—目標(biāo)函數(shù)指針對的列表。當(dāng)前端31執(zhí)行在實現(xiàn)塊215中的實現(xiàn)功能(即,將源指令映射到IR結(jié)點)時,根據(jù)從后端33通過路徑214接收的信息來修改處理過程。
在內(nèi)核32的多形IR塊212中,由于內(nèi)核32可以從每一個結(jié)點中的函數(shù)指針推斷它們的語義,多形結(jié)點仍然可以參加一般的優(yōu)化。在后端33中,指向目標(biāo)代碼生成函數(shù)的目標(biāo)函數(shù)指針被簡單地去除引用并執(zhí)行。這種情況不同于基本結(jié)點和復(fù)雜結(jié)點情況,在后兩種情況下,后端33將特定IR結(jié)點映射到特定代碼生成函數(shù)。采用多形結(jié)點,多形函數(shù)在結(jié)點本身被直接地編碼,因此,后端33將執(zhí)行較少的計算。在圖5中,這種差別通過下列事實表現(xiàn)出來多形種植塊216與多形IR塊212和后端33相鄰(即,在多形IR塊212和多形種植塊216之間,沒有指定非平凡計算的箭頭)。
實例1多形的IR實例為了圖解優(yōu)化轉(zhuǎn)換器30以便在IR中利用多形結(jié)點的過程,以下的實例說明一個PPC P4(PowerPC至奔騰4)轉(zhuǎn)換器中所需的PPC(PowerPC“SHL 64”)指令(左移64位)的轉(zhuǎn)換,上述轉(zhuǎn)換首先使用基本結(jié)點,然后使用多形結(jié)點。
不優(yōu)化轉(zhuǎn)換器以實現(xiàn)多形結(jié)點,則PPC SHL 64指令的轉(zhuǎn)換將僅使用基本結(jié)點PPC SHL 64=>基本IR多結(jié)點=>P4多指令未經(jīng)優(yōu)化的轉(zhuǎn)換器的前端解碼器200對當(dāng)前塊進行解碼,并且遇到PPC SHL 64指令。其次,前端實現(xiàn)塊202指令內(nèi)核32去構(gòu)建一個含有多個基本結(jié)點的IR。然后,內(nèi)核32優(yōu)化IR森林(從指令的當(dāng)前塊生成),并且執(zhí)行一次順序遍歷,以決定在基本IR塊204中代碼生成的順序。接著,內(nèi)核32順序地為每一個IR結(jié)點進行代碼生成,指令后端33去種植適當(dāng)?shù)腞ISC類型指令。最后,后端33在種植塊206中種植代碼,并且在編碼塊208中,用一條或多條目標(biāo)體系結(jié)構(gòu)指令來編碼每一條RISC型指令。
當(dāng)通過前端31和后端33的專門化來優(yōu)化特定的目標(biāo)體系結(jié)構(gòu)以優(yōu)化對性能有重要影響的指令時PPC SHL 64>多個IR單結(jié)點>P4單/少數(shù)指令所述已經(jīng)優(yōu)化的轉(zhuǎn)換器的前端解碼器200對當(dāng)前塊進行解碼,并且遇到PPC SHL 64指令。其次,前端實現(xiàn)塊202指令內(nèi)核32去構(gòu)建一個含有單個多形IR結(jié)點的IR。當(dāng)生成所述單個多形結(jié)點時,后端33知道SHL 64的移位操作數(shù)必須處于特定的寄存器(P4上的%ecx)中。此項要求在多形結(jié)點中被編碼。然后,內(nèi)核32為當(dāng)前塊優(yōu)化IR森林,并且執(zhí)行順序遍歷,以固定多形IR塊212中的代碼生成順序。再次,內(nèi)核32為每一個結(jié)點進行代碼生成,指令后端33去種植適當(dāng)?shù)腞ISC類型指令。然而,在代碼生成過程中,以不同于基本結(jié)點的方式來處理多形結(jié)點。每一個多形結(jié)點都引起駐留在后端33中的專門化的代碼生成器的調(diào)用。后端33專門化的代碼生成器函數(shù)在種植塊216中種植代碼,并且在編碼塊208中,用一條或多條目標(biāo)體系結(jié)構(gòu)指令來編碼每一條源體系結(jié)構(gòu)指令。在生成階段的寄存器分配過程中,特定的寄存器信息被用來分配正確的寄存器。這樣就減少了由后端33進行的計算,如果已經(jīng)分配了不適當(dāng)?shù)募拇嫫?,將要求進行這樣的計算。代碼生成可能涉及用于暫時寄存器的寄存器分配。
實例2困難指令下面的實例說明將由本發(fā)明的轉(zhuǎn)換器30執(zhí)行的PPC MFFS指令(將32位FPU控制寄存器移動到64位通用FPU寄存器)的轉(zhuǎn)換和優(yōu)化。這條源指令是如此復(fù)雜,以至于無法用基本結(jié)點來表示。
在未經(jīng)優(yōu)化的情況下,將使用一個置換函數(shù)來轉(zhuǎn)換這條指令。對于使用標(biāo)準(zhǔn)的轉(zhuǎn)換方案特別難以轉(zhuǎn)換的源指令的特例來說,置換函數(shù)是明顯的轉(zhuǎn)換。置換函數(shù)轉(zhuǎn)換作為執(zhí)行源指令的語義的目標(biāo)代碼函數(shù)來實現(xiàn)。它們承受比基于標(biāo)準(zhǔn)的IR指令的轉(zhuǎn)換方案更高的執(zhí)行成本。用于這條指令的未經(jīng)優(yōu)化的轉(zhuǎn)換方案是這樣的PPC MFFS指令=>基本IR置換函數(shù)=>P4置換函數(shù)在一個使用多形IR的轉(zhuǎn)換器30中,使用多形結(jié)點來轉(zhuǎn)換這樣的特殊情況指令。多形結(jié)點的函數(shù)指針為后端33提供了一種更加有效的機制,即,為困難的源指令提供一種定制的轉(zhuǎn)換。用于相同指令的優(yōu)化的轉(zhuǎn)換方案是這樣的PPC MFFS指令=>單個多形IR結(jié)點=>P4 SSE2指令體系結(jié)構(gòu)專用結(jié)點在本發(fā)明的轉(zhuǎn)換器30的另一個優(yōu)選實施例中,轉(zhuǎn)換器30可以利用如圖5所示的體系結(jié)構(gòu)專用結(jié)點(ASN),后者專用于特定的體系結(jié)構(gòu)(即,一個特定的源體系結(jié)構(gòu)—目標(biāo)體系結(jié)構(gòu)的組合)。每一個體系結(jié)構(gòu)專用結(jié)點(ASN)都是針對特定指令而專門地定做的,由此得出專用于特定體系結(jié)構(gòu)的ASN。當(dāng)使用ASN機制時,可以實行體系結(jié)構(gòu)專用的優(yōu)化,理解ASN的語義并且因此能夠在ASN之上進行工作。
IR結(jié)點可以包括多達3個部件數(shù)據(jù)部件,實施部件和轉(zhuǎn)換部件。數(shù)據(jù)部件保存不是結(jié)點本身固有的任何語義信息(例如,一個常數(shù)立即指令字段的值)。實施部件執(zhí)行代碼生成,并且因此,專門地涉及一種特定的體系結(jié)構(gòu)。轉(zhuǎn)換部件將所述結(jié)點轉(zhuǎn)換為一種不同類型的IR結(jié)點,即ASN結(jié)點或基本結(jié)點。在本發(fā)明的一種給定的實施方式的轉(zhuǎn)換器中,在所生成的IR中的每一個基本結(jié)點和ASN中,都包括轉(zhuǎn)換部件或者實施部件,但不同時包括二者。
每一個基本結(jié)點都具有一個專用于目標(biāo)體系結(jié)構(gòu)的實施部件。基本結(jié)點沒有轉(zhuǎn)換部件,由于在IR結(jié)點層次結(jié)構(gòu)中,基本結(jié)點僅對可能的最小語義信息量進行編碼,因此,把基本結(jié)點轉(zhuǎn)換為其它類型的IR結(jié)點不會帶來任何好處。將基本結(jié)點轉(zhuǎn)換為其它類型的IR結(jié)點將要求通過慣用語法識別來重新收集語義信息。
ASN的實施部件專用于所述結(jié)點的體系結(jié)構(gòu),因此,它生成對應(yīng)于所述ASN的體系結(jié)構(gòu)專用指令。例如,MIPSLoad ASN的實施部件生成MIPS“l(fā)d”(加載)指令。當(dāng)使用具有相同的源和目標(biāo)體系結(jié)構(gòu)的本發(fā)明的轉(zhuǎn)換器(即,作為一個加速器)時,各源ASN將具有實施部件。當(dāng)使用具有不同源和目標(biāo)體系結(jié)構(gòu)的轉(zhuǎn)換器時,各源ASN將具有轉(zhuǎn)換部件。
例如,圖7表示當(dāng)在MIPS-MIPS加速器中使用本發(fā)明的實施例時,用于MIPS指令的ASN。前端31對MIPS“addi”(立即數(shù)相加)指令701進行解碼,并產(chǎn)生一個IR以包含相應(yīng)的ASN,MIPS_ADDI703。對加速器來說,源和目標(biāo)體系結(jié)構(gòu)是相同的,并且因此轉(zhuǎn)換部件“CVT”707未定義。定義實施部件“IMPL”705以生成相同的MIPS“addi”指令709,經(jīng)受代碼生成過程中的寄存器分配差異。
圖8表示當(dāng)在MIPS x86轉(zhuǎn)換器中使用本發(fā)明的實施例時,在用于相同的MIPS指令的IR中的各ASN。前端31對MIPS“addi”源指令進行解碼,并且生成一個相應(yīng)的源ASN,MIPS_ADDI 801。對這個加速器來說,源和目標(biāo)體系結(jié)構(gòu)是不同的,并且因此源ASN 801的實施部件803未定義。MIPS_ADDI的轉(zhuǎn)換部件805是一個專門化的轉(zhuǎn)換部件,它把源ASN 801轉(zhuǎn)換為目標(biāo)ASN 807。通過比較,一個通用的轉(zhuǎn)換部件將源ASN 801轉(zhuǎn)換為基本結(jié)點表示。MIPS_ADDI結(jié)點801的目標(biāo)ASN表示是單個x86 ADDI結(jié)點807。目標(biāo)ASN 807的轉(zhuǎn)換部件811未定義。目標(biāo)ASN 807的實施部件809生成一條目標(biāo)指令813,在本例中為x86指令“ADD $EAX#10”。
當(dāng)轉(zhuǎn)換器30正在使用各ASN時,所有源指令都被實現(xiàn)為源專用ASN。在圖5中,前端解碼塊200、ASN實現(xiàn)塊218以及源ASN塊220互相鄰接這個事實表示下列事實,即,由前端31定義各ASN,并且由于在源指令類型和源ASN類型之間存在一一對應(yīng)關(guān)系,所以所述實現(xiàn)方法是尋常的。前端31含有理解各源ASN的語義并在其上進行工作的源專用優(yōu)化。換句話說,所述源代碼被初始地實現(xiàn)為含有全部源ASN的一個IR森林,然后對其施加源專用優(yōu)化。
通過默認,源ASN具有一個通用轉(zhuǎn)換部件,它生成基本結(jié)點的IR樹。這允許使用通用的IR結(jié)點來支持一種新的源體系結(jié)構(gòu)被快速實施。在圖5中,源ASN被實現(xiàn)為通過穿越ASN基本IR塊222和種植塊206延伸的路徑的基本結(jié)點,它以相同于已在前面詳細說明的其它基本結(jié)點的方式,被轉(zhuǎn)換為目標(biāo)代碼。
對于那些對性能有顯著影響的源指令來說,相應(yīng)的源ASN結(jié)點提供專門化的轉(zhuǎn)換部件,其生成目標(biāo)ASN結(jié)點的IR樹??紤]是否實現(xiàn)一個專門化的轉(zhuǎn)換部件的因素包括(1)為特定的有效轉(zhuǎn)換提供的目標(biāo)體系結(jié)構(gòu)特征是否會在基本結(jié)點轉(zhuǎn)換中丟失;(2)源指令是否出現(xiàn)得如此頻繁,以至于它對性能產(chǎn)生顯著的影響。這些專門化的轉(zhuǎn)換部件是專用于源—目標(biāo)體系結(jié)構(gòu)對的。目標(biāo)ASN(根據(jù)定義,它具有與目標(biāo)相同的體系結(jié)構(gòu))包括實施部件。
當(dāng)實現(xiàn)專門化的轉(zhuǎn)換部件時,相應(yīng)的源ASN結(jié)點提供目標(biāo)專用的轉(zhuǎn)換部件,其通過目標(biāo)ASN塊224將源ASN轉(zhuǎn)換為目標(biāo)ASN。然后,目標(biāo)ASN的實施部件被調(diào)用,以便在目標(biāo)ASN種植塊226中執(zhí)行代碼生成。每一個目標(biāo)ASN對應(yīng)于一條特定的目標(biāo)指令,因此,由一個目標(biāo)ASN生成的代碼簡單地是所述ASN編碼的相應(yīng)目標(biāo)指令。如此,使用目標(biāo)ASN的代碼生成在計算上是最少的(在圖5中被反映為,目標(biāo)ASN種植塊226與后端33中的目標(biāo)ASN塊224和編碼塊208二者相鄰,在這些部件之間,沒有示出指定非尋常的計算的箭頭)。而且,IR遍歷、轉(zhuǎn)換和代碼生成過程全都受到內(nèi)核32的控制。
圖9表示根據(jù)本發(fā)明的、利用ASN機制的轉(zhuǎn)換器的一個優(yōu)選實施例而執(zhí)行的所述轉(zhuǎn)換過程。在前端31中,在步驟903,轉(zhuǎn)換器將源代碼901解碼為源ASN 904。在步驟905,轉(zhuǎn)換器對由源ASN構(gòu)成的IR樹進行源專用優(yōu)化。然后,在步驟907,通過調(diào)用源ASN的轉(zhuǎn)換部件,將每一個源ASN 904轉(zhuǎn)換為目標(biāo)兼容的IR結(jié)點(目標(biāo)ASN911)。通過默認,具有通用轉(zhuǎn)換部件的源ASN結(jié)點被轉(zhuǎn)換為基本結(jié)點909。如同由后端925所提供的那樣,具有專門化的轉(zhuǎn)換部件的各源ASN結(jié)點被轉(zhuǎn)換為各目標(biāo)ASN 911。轉(zhuǎn)換由此產(chǎn)生一個混合的IR森林913,它含有基本結(jié)點909和目標(biāo)ASN 911。在步驟915,在內(nèi)核32中,所述轉(zhuǎn)換器對混合IR森林913中的各基本結(jié)點進行一般優(yōu)化。隨后,在步驟916,轉(zhuǎn)換器對混合IR森林913中的各目標(biāo)ASN進行目標(biāo)專用優(yōu)化。最后,在步驟917,代碼生成調(diào)用混合樹中的每一個結(jié)點的實施部件(基本結(jié)點和目標(biāo)ASN結(jié)點二者都具有實施部件),接著生成目標(biāo)代碼919。
在代碼加速器的特例中,源和目標(biāo)體系結(jié)構(gòu)二者相同。在這個情形,在整個轉(zhuǎn)換過程中,各源ASN持續(xù)。在前端31,通過解碼生成來自各源指令的各源ASN。在內(nèi)核32,各源ASN通過體系結(jié)構(gòu)專用優(yōu)化。代碼生成調(diào)用各源ASN的實施部件生成相應(yīng)的指令。如此,在代碼加速器中ASN的使用避免了代碼激增,其方法是通過保證1∶1的源對目標(biāo)指令的最小轉(zhuǎn)換比,通過優(yōu)化可以增加這個比值。
本發(fā)明的轉(zhuǎn)換器的各個實施例都可以為特定的轉(zhuǎn)換器應(yīng)用(即,特定的源體系結(jié)構(gòu)—目標(biāo)體系結(jié)構(gòu)對)而進行配置。如此,本發(fā)明的轉(zhuǎn)換器可以被配置成這樣,將被設(shè)計在任何源體系結(jié)構(gòu)上運行的源代碼轉(zhuǎn)換為可以在任何目標(biāo)體系結(jié)構(gòu)上執(zhí)行的目標(biāo)代碼。在多種轉(zhuǎn)換器應(yīng)用中,每一個基本結(jié)點都具有多個實施部件,其中的每一個都支持目標(biāo)體系結(jié)構(gòu)。正在進行的特定配置(即,條件編譯)決定哪些IR結(jié)點和這些結(jié)點的哪些部件包括在特定的轉(zhuǎn)換器應(yīng)用中。
在本發(fā)明的一個優(yōu)選實施例中,ASN的使用提供了多種有利的效益。首先,使用源指令的通用IR實施方式可以快速地開發(fā)從頭建立的轉(zhuǎn)換器產(chǎn)品。其次,通過實現(xiàn)用于那些對性能具有重要影響的源指令的目標(biāo)專用轉(zhuǎn)換部件(正如事先知道的或者正如由經(jīng)驗決定的),現(xiàn)有的轉(zhuǎn)換器產(chǎn)品可以以增量方式被擴充。第三,隨著更多的轉(zhuǎn)換器產(chǎn)品被開發(fā),ASN結(jié)點的庫(以及所實現(xiàn)的功能)與時俱增,因此未來的轉(zhuǎn)換器產(chǎn)品可以快速地被實現(xiàn)或者被優(yōu)化。
本發(fā)明的這個實施例的后端實施方式檢出和選擇哪些源指令值得優(yōu)化(通過定義目標(biāo)專用的轉(zhuǎn)換部件)。通用的轉(zhuǎn)換部件允許快速地開發(fā)基于ASN的轉(zhuǎn)換器,同時專用的轉(zhuǎn)換部件允許對性能有重要影響的指令有選擇地和增量地被優(yōu)化。
實例3使用ASN的困難指令回到前面實例2的PowerPC SHL 64指令,使用ASN的轉(zhuǎn)換器30執(zhí)行下列各步驟前端解碼器200對當(dāng)前塊進行解碼,并且遇到PowerPC SHL 64指令。隨后,前端31實現(xiàn)針對所述指令(即,SHL64 PPC P4)的單個ASN。其次,內(nèi)核32優(yōu)化用于指令的當(dāng)前塊的IR,并且在準(zhǔn)備代碼生成的過程中執(zhí)行IR的順序遍歷。再次,內(nèi)核32通過調(diào)用每一個特定ASN結(jié)點的代碼生成器函數(shù)(它是實施部件的一個元件),為所述ASN結(jié)點執(zhí)行代碼生成。最后,后端33將源體系結(jié)構(gòu)(PPC)指令編碼為一條或多條目標(biāo)體系結(jié)構(gòu)(P4)指令。
MIPS實例現(xiàn)在引用圖10、11和12,圖中示出了分別使用基本IR結(jié)點、MIPS-MIPS ASN IR結(jié)點和MIPS-x86 ASN IR結(jié)點,從相同的MIPS指令序列生成的不同IR樹。示例性的MIPS源指令序列的語義(加載立即數(shù)的高位,然后對立即數(shù)進行按位或運算)是將32位常數(shù)數(shù)值Ox12345678裝入源寄存器“a1”。
在圖10中,二進制解碼器300是轉(zhuǎn)換器30的前端部件31,它把源代碼解碼(解析)為具體的源指令。在源指令被解碼之后,它們被實現(xiàn)為基本結(jié)點302,并且被添加到用于指令的當(dāng)前塊的正在工作的IR森林。IR管理器304是在IR生成過程中保持正在工作的IR森林的轉(zhuǎn)換器30的一部分。IR管理器304包括抽象寄存器和它們的相關(guān)IR樹(IR森林的根是各抽象寄存器)。例如,在圖10中,抽象寄存器“a V 306”是5個結(jié)點的IR樹308的根,這棵樹是當(dāng)前塊的正在工作的IR森林的一部分。在用C++實現(xiàn)的轉(zhuǎn)換器30中,IR管理器304可以被實現(xiàn)為一個C++對象,其包括一組抽象寄存器對象(或者對于IR結(jié)點對象的引用)。
圖10說明由僅使用基本結(jié)點由MIPS至x86轉(zhuǎn)換器產(chǎn)生的IR樹308。MIPS_LUI指令310實現(xiàn)具有兩個操作數(shù)結(jié)點316和318(在本例中為兩個常數(shù))的“SHL”(左移)基本結(jié)點314。MIPS_LUI指令310的語義是將一個常數(shù)值(Ox1234)向左移動一個恒定數(shù)目的位(16)。MIPS_ORI指令312實現(xiàn)具有兩個操作數(shù)結(jié)點314和322(即,SHL結(jié)點314的結(jié)果和一個常數(shù)值)的“ORI”(對立即數(shù)進行按位或運算)基本結(jié)點320。MIPS_ORI指令312的語義是將現(xiàn)有的寄存器內(nèi)容與一個常數(shù)值(Ox5678)進行按位或運算。
在一個未經(jīng)優(yōu)化的代碼生成器中,基本結(jié)點不包括除裝載立即數(shù)以外的立即數(shù)型運算符,這樣,每一個常數(shù)結(jié)點都導(dǎo)致生成一條加載立即數(shù)的指令。因此,對這個源指令序列來說,未經(jīng)優(yōu)化的基本結(jié)點轉(zhuǎn)換器需要5項RISC型操作(加載、加載、移位、加載、或)。后端33的慣用語法識別通過將常數(shù)結(jié)點與它們的父輩結(jié)點合并,能將這個數(shù)目從5減少到2,以便生成立即數(shù)型目標(biāo)指令(即,對立即數(shù)進行移位以及對立即數(shù)進行或運算)。這樣就把目標(biāo)指令的數(shù)目減少到2,但是在代碼生成器中,在執(zhí)行慣用語法識別時增加了轉(zhuǎn)換成本。
在IR中使用復(fù)雜結(jié)點可以實現(xiàn)立即數(shù)型IR結(jié)點,這樣就消除了在后端33中進行慣用語法識別的需求,并降低代碼生成器的轉(zhuǎn)換成本。復(fù)雜結(jié)點保留原始源指令的更多語義,并且,隨著被實現(xiàn)的IR結(jié)點更少,當(dāng)使用復(fù)雜結(jié)點時,結(jié)點生成的轉(zhuǎn)換成本也被降低。
圖11說明使用ASN由MIPS-X86(MIPS至X86)轉(zhuǎn)換器生成的IR樹。在源指令被二進制解碼器300解碼之后,他們被實現(xiàn)為MIPS_X86 ASN結(jié)點330,隨后被添加到用于當(dāng)前塊的工作IR森林。首先,由ASN的轉(zhuǎn)換部件將MIPS_X86_LUI ASN結(jié)點轉(zhuǎn)換為一個X8632位常數(shù)結(jié)點332。其次,MIPS_X86_ORI ASN結(jié)點產(chǎn)生一個X86 ORI結(jié)點,它被立即與先前的X86常數(shù)結(jié)點合并在一起(常數(shù)合并),結(jié)果得到單個X86 32位常數(shù)結(jié)點334。所述結(jié)點334被編碼為單個X86加載常數(shù)指令“mov%eax,$Ox12345678”。如同可以看到的那樣,ASN結(jié)點導(dǎo)致比基本結(jié)點實例更少的結(jié)點,由此降低了轉(zhuǎn)換成本,同時提供較好的目標(biāo)代碼。
圖12說明由MIPS-MIPS轉(zhuǎn)換器(即,MIPS加速器)使用ASN生成的IR樹。在源指令310、312被二進制解碼器300解碼之后,他們被實現(xiàn)為MIPS_MIPS ASN結(jié)點340,隨后,上述結(jié)點被添加到用于當(dāng)前塊工作IR森林。由于對MIPS-MIPS轉(zhuǎn)換器來說,源和目標(biāo)體系結(jié)構(gòu)是相同的,所以MIPS_MIPS_LUI和MIPS_MIPS_ORI ASN結(jié)點340具有空(未經(jīng)定義的)轉(zhuǎn)換部件。如此,在源指令和用于生成代碼的最后IR結(jié)點之間存在一種直接對應(yīng)關(guān)系。這保證了即使在施行任何優(yōu)化之前,1∶1的源對目標(biāo)指令的轉(zhuǎn)換比。換句話說,ASN結(jié)點消除了用于相同—相同轉(zhuǎn)換器(加速器)的代碼激增。ASN結(jié)點還允許16位常數(shù)結(jié)點被共享,這對于在MIPS平臺上的相鄰存儲器存取的有效轉(zhuǎn)換來說是有用的。
以每次轉(zhuǎn)換一條源指令的方式來轉(zhuǎn)換指令的基本塊。每一條源指令導(dǎo)致形成(實現(xiàn))一棵IR樹。在生成針對一條給定指令的IR樹之后,它被整合到針對當(dāng)前塊的工作IR森林中。工作IR森林的根是抽象寄存器,后者對應(yīng)于源寄存器和源體系結(jié)構(gòu)的其它特征。當(dāng)最后一條源指令已經(jīng)被解碼、實現(xiàn),并且它的IR樹被整合到工作IR森林之后,針對所述塊的IR森林完成。
在圖12中,第一源指令310是“l(fā)ui al Ox1234”。這條指令310的語義是將常數(shù)值Ox1234加載到源寄存器“al”342的高16位。這條指令310實現(xiàn)了具有一個立即數(shù)字段常數(shù)值Ox1234的MIPS_MIPS_LUI結(jié)點344。轉(zhuǎn)換器通過設(shè)置抽象寄存器“al”342(源指令的目標(biāo)寄存器),使之指向MIPS_MIPS_LUI IR結(jié)點344,來把這個結(jié)點添加到工作IR森林。
在圖12所示的同一實例中,第二源指令312為“ori al,al,Ox5678”。這條指令312的語義是執(zhí)行常數(shù)值Ox5678和源寄存器“al”342的當(dāng)前內(nèi)容的按位或運算,并且將結(jié)果存儲在源寄存器“al”346之中。這條指令312實現(xiàn)了具有一個立即數(shù)字段常數(shù)數(shù)值Ox5678的MIPS_MIPS_ORI結(jié)點348。轉(zhuǎn)換器通過首先設(shè)置ORI結(jié)點,使之指向由抽象寄存器“al”342(源指令的源寄存器)當(dāng)前所指向的IR樹,并且,隨后設(shè)置抽象寄存器“al”346(源指令的目標(biāo)寄存器),使之指向ORI結(jié)點348,把這個結(jié)點添加到工作IR森林。換句話說,以抽象寄存器342(即,LUI結(jié)點)為根的現(xiàn)有的“al”樹變?yōu)镺RI結(jié)點348的子樹350,并且隨后ORI結(jié)點348變?yōu)樾碌腶l樹。舊的“al”樹(在LUI之后,但是在ORI之前)以抽象寄存器342為根,并且被表示為被線345鏈接,而當(dāng)前的“al”樹(在ORI之后)以抽象寄存器346為根。
正如從上面可以看到的那樣,根據(jù)本發(fā)明形成的一個改進的程序代碼轉(zhuǎn)換裝置可以被配置用于任何源和目標(biāo)處理器體系結(jié)構(gòu)對,同時保持最佳的性能水平,并且在轉(zhuǎn)換速度和已轉(zhuǎn)換目標(biāo)代碼的效率之間取得平衡。而且,根據(jù)在轉(zhuǎn)換中涉及的源和目標(biāo)計算環(huán)境的特定的體系結(jié)構(gòu),通過利用在其中間表示中的基本結(jié)點、復(fù)雜結(jié)點、多形結(jié)點和體系結(jié)構(gòu)專用結(jié)點的組合,本發(fā)明的程序代碼轉(zhuǎn)換裝置可以被設(shè)計成具有通用和專用轉(zhuǎn)換特征的混合設(shè)計。
在上述每一個實施例中,單獨地描述了根據(jù)本發(fā)明的改進的程序代碼轉(zhuǎn)換裝置的不同結(jié)構(gòu)。然而,本發(fā)明的發(fā)明人充分注意到,這里所描述的每一個實施例的各個單獨的方面可以與這里所描述的其它實施例相結(jié)合。例如,根據(jù)本發(fā)明而構(gòu)成的轉(zhuǎn)換器可以包括各種IR類型的混合優(yōu)化。本領(lǐng)域的技術(shù)人員將理解,在不離開本發(fā)明的范圍和精神實質(zhì)的前提下,可以配置對剛剛描述的優(yōu)選實施例的調(diào)適和修改。因此,需要理解的是,在所附的權(quán)利要求書的范圍內(nèi),可以以不同于在這里專門地描述的方式來實施本發(fā)明。
雖然已經(jīng)展示和描述幾個優(yōu)選實施例,但是,本領(lǐng)域的技術(shù)人員將理解,在不離開如所附的權(quán)利要求書所規(guī)定的本發(fā)明的范圍的前提下,可以作出各種各樣的變更和修改。
注意到與本說明書(結(jié)合本申請書)同時或在這之前申請的、對公眾公開的所有論文和文獻,并且所有這些論文和文獻的內(nèi)容在此通過參考而并入。
在本說明書中(包括任何附帶的權(quán)利要求書、摘要和附圖)所公開的所有特征,和/或所公開的任何方法或工藝的所有步驟,都可以以任何組合方式加以組合,但是在其中至少某些這樣的特征和/或步驟互相排斥的組合除外。
在本說明書中(包括任何附帶的權(quán)利要求書、摘要和附圖)所公開的每一項特征,除非另有特別的說明,都可以被為此服務(wù)的可替代的特征、等價物或者類似的用途所替代。因此,除非另有特別的說明,所公開的每一項特征僅僅是等價物或者類似特征的一般系列中的一個實例。
本發(fā)明并不局限于上述(各)實施例的細節(jié)。本發(fā)明可以擴展到在本說明書(包括任何附帶的權(quán)利要求書、摘要和附圖)中所公開的各項特征中的任何新的一種,或者任何新的組合,或者擴展到所公開的任何方法或工藝的各步驟的任何新的一種,或者任何新的組合。
權(quán)利要求
1.一種用于產(chǎn)生程序代碼的中間表示的方法,包括下列各步驟對程序代碼中的各項指令進行解碼;產(chǎn)生已解碼的程序代碼的中間表示(IR),以包括多種可能類型的IR結(jié)點中的至少一種類型的IR結(jié)點;以及確定在已解碼的程序代碼中的每一條指令的中間表示(IR)中,生成哪一種類型的IR結(jié)點,其中,中間表示(IR)中的IR結(jié)點是程序代碼所執(zhí)行的表達式、計算和操作的抽象表示。
2.根據(jù)權(quán)利要求1所述方法,其中,多種可能類型的IR結(jié)點包括基本結(jié)點和復(fù)雜結(jié)點。
3.根據(jù)權(quán)利要求2所述方法,其中,基本結(jié)點表示運行所述程序代碼的任何源體系結(jié)構(gòu)的最基本語義,因此,基本結(jié)點的語義不能被分解為表示更多簡單語義的其它結(jié)點。
4.根據(jù)權(quán)利要求3所述方法,其中,基本結(jié)點在多種可能的源體系結(jié)構(gòu)上是通用的。
5.根據(jù)權(quán)利要求3或4所述方法,其中,復(fù)雜結(jié)點提供比基本結(jié)點表示更緊湊的程序代碼中的復(fù)雜指令的語義的表示。
6.根據(jù)權(quán)利要求5所述方法,其中,復(fù)雜結(jié)點表示立即數(shù)型指令,其中,一個常數(shù)操作數(shù)值被編碼到立即數(shù)型指令本身中,在一個立即數(shù)字段中。
7.根據(jù)權(quán)利要求5或6所述方法,其中,一個復(fù)雜結(jié)點可以被分解為多個基本結(jié)點,以表示已解碼程序代碼中的指令的相同語義。
8.根據(jù)權(quán)利要求5、6或7所述方法,其中,所述程序代碼被設(shè)計成由源體系結(jié)構(gòu)執(zhí)行,所述方法還包括僅為那些可以相應(yīng)地配置在源體系結(jié)構(gòu)上的特征生成復(fù)雜結(jié)點的步驟。
9.根據(jù)權(quán)利要求2或任何從屬于此的權(quán)利要求所述方法,其中,多種可能類型的IR結(jié)點還包括多形結(jié)點。
10.根據(jù)權(quán)利要求9所述方法,其中,所述程序代碼是源代碼,它被設(shè)計用于在源體系結(jié)構(gòu)上執(zhí)行,并且被動態(tài)地轉(zhuǎn)換為目標(biāo)代碼,以便在目標(biāo)體系結(jié)構(gòu)上執(zhí)行,所述方法還包括生成中間表示以包括多形結(jié)點,其中,多形結(jié)點包括一個函數(shù)指針,指向?qū)S糜谠创a中的特定指令的目標(biāo)體系結(jié)構(gòu)的函數(shù)。
11.根據(jù)權(quán)利要求10所述方法,其中,所述方法還包括,如果被實現(xiàn)為基本結(jié)點,目標(biāo)體系結(jié)構(gòu)的特征可能導(dǎo)致特定源指令的語義丟失時,生成多形結(jié)點。
12.根據(jù)權(quán)利要求10或11所述方法,其中,每一個多形結(jié)點專用于源代碼中的特定指令和目標(biāo)體系結(jié)構(gòu)的函數(shù)的組合。
13.根據(jù)權(quán)利要求10、11或12所述方法,其中,所述確定IR結(jié)點類型的步驟還包括識別源代碼中的一條指令,它對應(yīng)于將被實現(xiàn)為多形結(jié)點的多形指令的列表上的一條指令;以及當(dāng)一條源指令對應(yīng)于多形指令的列表上的一條指令時,所述IR生成步驟僅為那些對應(yīng)于多形指令的列表上的指令的源指令生成多形結(jié)點。
14.根據(jù)以上各項權(quán)利要求中任何一項所述方法,其中,多種可能類型的IR結(jié)點還包括基本結(jié)點和體系結(jié)構(gòu)專用結(jié)點。
15.根據(jù)權(quán)利要求14所述方法,其中,所述程序代碼是源代碼,它被設(shè)計用于在源體系結(jié)構(gòu)上執(zhí)行,并且被動態(tài)地轉(zhuǎn)換為目標(biāo)代碼,以便在目標(biāo)體系結(jié)構(gòu)上執(zhí)行,所述方法還包括生成中間表示以包括體系結(jié)構(gòu)專用結(jié)點,其專用于源體系結(jié)構(gòu)和目標(biāo)體系結(jié)構(gòu)的特定組合。
16.根據(jù)權(quán)利要求15所述方法,其中,所述中間表示生成步驟還包括把源代碼中的所有指令初始地表示為源體系結(jié)構(gòu)專用結(jié)點,每一個源體系結(jié)構(gòu)專用結(jié)點對應(yīng)于源代碼中的一條各自的指令;確定源代碼中的一條指令是否提供目標(biāo)體系結(jié)構(gòu)專用轉(zhuǎn)換函數(shù),對于那些已被確定提供目標(biāo)體系結(jié)構(gòu)專用轉(zhuǎn)換函數(shù)的指令,將源體系結(jié)構(gòu)專用結(jié)點轉(zhuǎn)換為目標(biāo)體系結(jié)構(gòu)專用結(jié)點;以及從那些沒有被識別為提供目標(biāo)體系結(jié)構(gòu)專用代碼生成函數(shù)的剩余源體系結(jié)構(gòu)專用結(jié)點中,生成基本結(jié)點。
17.根據(jù)權(quán)利要求16所述方法,還包括從專用于目標(biāo)體系結(jié)構(gòu)的目標(biāo)體系結(jié)構(gòu)專用結(jié)點中生成相應(yīng)的目標(biāo)代碼。
18.根據(jù)權(quán)利要求15、16或17所述方法,還包括從不專用于目標(biāo)體系結(jié)構(gòu)的基本結(jié)點中生成相應(yīng)的目標(biāo)代碼。
19.一種計算機可讀記錄介質(zhì),含有用于執(zhí)行前述各項權(quán)利要求中任何一項所述方法的程序代碼。
20.一種具有駐留于其上的、采取可以由計算機執(zhí)行的計算機可讀代碼形式的轉(zhuǎn)換器軟件的計算機可讀記錄介質(zhì),在從源程序代碼轉(zhuǎn)換為目標(biāo)程序代碼的過程中,執(zhí)行下列各步驟對源程序代碼中的各項指令進行解碼;生成已解碼源程序代碼的中間表示(IR),以包括多種可能類型的IR結(jié)點中的至少一種類型的IR結(jié)點;確定在已解碼的源程序代碼中的每一條指令的中間表示(IR)中,生成哪一種類型的IR結(jié)點,其中,中間表示中的IR結(jié)點是程序代碼所執(zhí)行的表達式、計算和操作的抽象表示;以及使用中間表示(IR)來生成目標(biāo)程序代碼。
21.根據(jù)權(quán)利要求20所述計算機可讀存儲介質(zhì),其中,多種可能類型的IR結(jié)點包括基本結(jié)點和復(fù)雜結(jié)點。
22.根據(jù)權(quán)利要求21所述計算機可讀存儲介質(zhì),其中,基本結(jié)點表示運行所述程序代碼的任何源體系結(jié)構(gòu)的最基本語義,因此,基本結(jié)點的語義不能被分解為表示更多的簡單語義的其它結(jié)點。
23.根據(jù)權(quán)利要求22所述計算機可讀存儲介質(zhì),其中,基本結(jié)點在多種可能的源體系結(jié)構(gòu)上是通用的。
24.根據(jù)權(quán)利要求22所述計算機可讀存儲介質(zhì),其中,復(fù)雜結(jié)點提供比基本結(jié)點表示更緊湊的程序代碼中的復(fù)雜指令的語義的表示。
25.根據(jù)權(quán)利要求24所述計算機可讀存儲介質(zhì),其中,復(fù)雜結(jié)點表示立即數(shù)型指令,其中,一個常數(shù)操作數(shù)值被編碼到立即數(shù)型指令本身中,在一個立即數(shù)字段中。
26.根據(jù)權(quán)利要求24所述計算機可讀存儲介質(zhì),其中,一個復(fù)雜結(jié)點可以被分解為多個基本結(jié)點,以表示已解碼程序代碼中的一條指令的相同語義。
27.根據(jù)權(quán)利要24所述計算機可讀存儲介質(zhì),其中,所述程序代碼被設(shè)計成由源體系結(jié)構(gòu)執(zhí)行,所述方法還包括僅為那些可以相應(yīng)地配置在源體系結(jié)構(gòu)上的那些特征生成復(fù)雜結(jié)點的步驟。
28.根據(jù)權(quán)利要求21至27中任何一項所述計算機可讀存儲介質(zhì),其中,多種可能類型的IR結(jié)點還包括多形結(jié)點。
29.根據(jù)權(quán)利要求28所述計算機可讀存儲介質(zhì),其中,所述源程序代碼被設(shè)計用于在源體系結(jié)構(gòu)上執(zhí)行,并且被動態(tài)地轉(zhuǎn)換為目標(biāo)代碼,以便在目標(biāo)體系結(jié)構(gòu)上執(zhí)行,所述轉(zhuǎn)換器軟件還包括可以由計算機執(zhí)行的計算機可讀代碼,用于執(zhí)行下列各步驟生成中間表示以包括多形結(jié)點,其中,多形結(jié)點包括一個函數(shù)指針,指向?qū)S糜谠创a中的特定指令的目標(biāo)體系結(jié)構(gòu)的函數(shù)。
30.根據(jù)權(quán)利要求29所述計算機可讀存儲介質(zhì),其中,所述轉(zhuǎn)換器軟件還包括可以由計算機執(zhí)行的計算機可讀代碼,以便如果被實現(xiàn)為基本結(jié)點,目標(biāo)體系結(jié)構(gòu)的特征將導(dǎo)致特定源指令的語義丟失時,生成多形結(jié)點。
31.根據(jù)權(quán)利要求29所述計算機可讀存儲介質(zhì),其中,每一個多形結(jié)點專用于源代碼中的特定指令和目標(biāo)體系結(jié)構(gòu)中的函數(shù)的組合。
32.根據(jù)權(quán)利要求29所述計算機可讀存儲介質(zhì),其中,所述用于確定IR結(jié)點類型的、可以由計算機執(zhí)行的計算機可讀代碼還用于識別源代碼中的一條指令,它對應(yīng)于將被實現(xiàn)為多形結(jié)點的多形指令的列表上的一條指令;以及當(dāng)一條源指令對應(yīng)于多形指令的列表上的一條指令時,僅為那些對應(yīng)于多形指令的列表上的指令的那些源指令生成多形結(jié)點。
33.根據(jù)權(quán)利要求20至32中任何一項所述計算機可讀存儲介質(zhì),其中,多種可能類型的IR結(jié)點還包括基本結(jié)點和體系結(jié)構(gòu)專用結(jié)點。
34.根據(jù)權(quán)利要求33所述計算機可讀存儲介質(zhì),其中,所述程序代碼被設(shè)計用于在源體系結(jié)構(gòu)上執(zhí)行,并且被動態(tài)地轉(zhuǎn)換為目標(biāo)代碼,以便在目標(biāo)體系結(jié)構(gòu)上執(zhí)行,所述轉(zhuǎn)換器軟件還包括可以由計算機執(zhí)行的計算機可讀代碼,用于執(zhí)行下列各步驟生成中間表示以包括體系結(jié)構(gòu)專用結(jié)點,專用于源體系結(jié)構(gòu)和目標(biāo)體系結(jié)構(gòu)的特定組合。
35.根據(jù)權(quán)利要求34所述計算機可讀存儲介質(zhì),其中,所述轉(zhuǎn)換器軟件還包括可以由計算機執(zhí)行的計算機可讀代碼,用于執(zhí)行下列各步驟把源代碼中的所有指令初始地表示為源體系結(jié)構(gòu)專用結(jié)點,每一個源體系結(jié)構(gòu)專用結(jié)點對應(yīng)于源代碼中的一條各自的指令;確定源代碼中的指令是否提供目標(biāo)體系結(jié)構(gòu)專用轉(zhuǎn)換函數(shù),對于那些已被確定提供目標(biāo)體系結(jié)構(gòu)專用轉(zhuǎn)換函數(shù)的指令,將源體系結(jié)構(gòu)專用結(jié)點轉(zhuǎn)換為目標(biāo)體系結(jié)構(gòu)專用結(jié)點;以及從沒有被識別為提供目標(biāo)體系結(jié)構(gòu)專用代碼生成函數(shù)的剩余源體系結(jié)構(gòu)專用結(jié)點中,生成基本結(jié)點。
36.根據(jù)權(quán)利要求35所述計算機可讀存儲介質(zhì),其中,所述轉(zhuǎn)換器軟件還包括可以由計算機執(zhí)行的計算機可讀代碼,用于從專用于目標(biāo)體系結(jié)構(gòu)的目標(biāo)體系結(jié)構(gòu)專用結(jié)點中生成相應(yīng)的目標(biāo)代碼。
37.根據(jù)權(quán)利要求34所述計算機可讀存儲介質(zhì),其中,所述轉(zhuǎn)換器軟件還包括可由計算機執(zhí)行的計算機可讀代碼,用于從不專用于目標(biāo)體系結(jié)構(gòu)的基本結(jié)點中生成相應(yīng)的目標(biāo)代碼。
38.一個用于目標(biāo)計算環(huán)境的轉(zhuǎn)換器裝置,它具有一個處理器和一個連接到所述處理器的存儲器,用于轉(zhuǎn)換適于源計算環(huán)境的源程序代碼,以產(chǎn)生適于目標(biāo)計算環(huán)境的目標(biāo)程序代碼,所述轉(zhuǎn)換器裝置包括解碼機構(gòu),它被配置對源程序代碼中的各項指令進行解碼;中間表示(IR)生成機構(gòu),它被配置生成已解碼程序代碼的中間表示,以包括多種可能類型的IR結(jié)點中的至少一種類型的IR結(jié)點;以及中間表示(IR)類型確定機構(gòu),它被配置確定已解碼程序代碼中的每一條各自的指令的中間表示(IR)中,生成哪一種類型的IR結(jié)點,其中,中間表示中的各IR結(jié)點是程序代碼所執(zhí)行的表達式、計算和操作的抽象表示。
39.根據(jù)權(quán)利要求38所述轉(zhuǎn)換器裝置,其中,多種可能類型的IR結(jié)點包括基本結(jié)點和復(fù)雜結(jié)點。
40.根據(jù)權(quán)利要求39所述轉(zhuǎn)換器裝置,其中,基本結(jié)點表示運行所述程序代碼的任何源體系結(jié)構(gòu)的最基本語義,因此,基本結(jié)點的語義不能被分解為表示更多簡單語義的其它結(jié)點。
41.根據(jù)權(quán)利要40所述轉(zhuǎn)換器裝置,其中,基本結(jié)點在多種可能的源體系結(jié)構(gòu)中是通用的。
42.根據(jù)權(quán)利要求40所述轉(zhuǎn)換器裝置,其中,復(fù)雜結(jié)點提供比基本結(jié)點表示更緊湊的程序代碼中的復(fù)雜指令的語義的表示。
43.根據(jù)權(quán)利要求42所述轉(zhuǎn)換器裝置,其中,復(fù)雜結(jié)點表示立即數(shù)型指令,在其中,一個常數(shù)操作數(shù)值被編碼到立即數(shù)型指令本身中,在一個立即數(shù)字段中。
44.根據(jù)權(quán)利要求42所述轉(zhuǎn)換器裝置,其中,一個復(fù)雜結(jié)點可以被分解為多個基本結(jié)點,以表示已解碼程序代碼中的一條指令的相同語義。
45.根據(jù)權(quán)利要42所述轉(zhuǎn)換器裝置,其中,所述程序代碼被設(shè)計成由源體系結(jié)構(gòu)執(zhí)行,所述中間表示生成機構(gòu)還包括僅為那些可以相應(yīng)地配置在源體系結(jié)構(gòu)上的特征生成復(fù)雜結(jié)點的復(fù)雜結(jié)點生成機構(gòu)。
46.根據(jù)權(quán)利要求39所述轉(zhuǎn)換器裝置,其中,多種可能類型的IR結(jié)點還包括多形結(jié)點。
47.根據(jù)權(quán)利要求46所述轉(zhuǎn)換器裝置,其中,所述程序代碼是源代碼,它被設(shè)計用于在源體系結(jié)構(gòu)上執(zhí)行,并且被動態(tài)地轉(zhuǎn)換為目標(biāo)代碼,以便在目標(biāo)體系結(jié)構(gòu)上執(zhí)行,所述中間表示生成機構(gòu)還包括多形結(jié)點生成機構(gòu),用于生成中間表示以包括多形結(jié)點,其中,多形結(jié)點包括一個函數(shù)指針,指向?qū)S糜谠创a中的特定指令的目標(biāo)體系結(jié)構(gòu)的函數(shù)。
48.根據(jù)權(quán)利要求47所述轉(zhuǎn)換器裝置,如果被實現(xiàn)為基本結(jié)點,目標(biāo)體系結(jié)構(gòu)的特征可能導(dǎo)致特定源指令的語義丟失時,所述多形結(jié)點生成機構(gòu)生成多形結(jié)點。
49.根據(jù)權(quán)利要求47所述轉(zhuǎn)換器裝置,其中,每一個多形結(jié)點專用于源代碼中的特定指令和目標(biāo)體系結(jié)構(gòu)的函數(shù)的組合。
50.根據(jù)權(quán)利要求47所述轉(zhuǎn)換器裝置,其中,所述中間表示類型確定機構(gòu)還包括一個多形識別機構(gòu),用于識別源代碼中的一條指令,它對應(yīng)于將被實現(xiàn)為多形結(jié)點的多形指令的列表上的一條指令;以及當(dāng)一條源指令對應(yīng)于多形指令的列表上的一條指令時,所述中間表示生成機構(gòu)僅為那些對應(yīng)于多形指令的列表上的指令的源指令生成多形結(jié)點。
51.根據(jù)權(quán)利要求38所述轉(zhuǎn)換器裝置,其中,多種可能類型的IR結(jié)點還包括基本結(jié)點和體系結(jié)構(gòu)專用結(jié)點。
52.根據(jù)權(quán)利要求51所述轉(zhuǎn)換器裝置,其中,所述程序代碼是源代碼,它被設(shè)計用于在源體系結(jié)構(gòu)上執(zhí)行,并且被動態(tài)地轉(zhuǎn)換為目標(biāo)代碼,以便在目標(biāo)體系結(jié)構(gòu)上執(zhí)行,所述中間表示生成機構(gòu)還包括用于生成中間表示的體系結(jié)構(gòu)專用結(jié)點生成機構(gòu),所述中間表示包括體系結(jié)構(gòu)專用結(jié)點,專用于源體系結(jié)構(gòu)和目標(biāo)體系結(jié)構(gòu)的特定組合。
53.根據(jù)權(quán)利要求52所述轉(zhuǎn)換器裝置,其中,所述中間表示生成機構(gòu)被配置用于把源代碼中的所有指令初始地表示為源體系結(jié)構(gòu)專用結(jié)點,每一個源體系結(jié)構(gòu)專用結(jié)點對應(yīng)于源代碼中的一條各自的指令;確定源代碼中的一條指令是否提供一個目標(biāo)體系結(jié)構(gòu)專用轉(zhuǎn)換函數(shù),對于那些已被確定提供一個目標(biāo)體系結(jié)構(gòu)專用轉(zhuǎn)換函數(shù)的指令,將源體系結(jié)構(gòu)專用結(jié)點轉(zhuǎn)換為目標(biāo)體系結(jié)構(gòu)專用結(jié)點;以及從那些沒有被識別為提供目標(biāo)體系結(jié)構(gòu)專用代碼生成函數(shù)的剩余源體系結(jié)構(gòu)專用結(jié)點中,生成基本結(jié)點。
54.根據(jù)權(quán)利要求53所述轉(zhuǎn)換器裝置,還包括一個專用目標(biāo)代碼生成機構(gòu),用于從專用于目標(biāo)體系結(jié)構(gòu)的目標(biāo)體系結(jié)構(gòu)專用結(jié)點中生成相應(yīng)的目標(biāo)代碼。
55.根據(jù)權(quán)利要求52所述轉(zhuǎn)換器裝置,還包括一個非專用目標(biāo)代碼生成機構(gòu),用于從不專用于目標(biāo)體系結(jié)構(gòu)的基本結(jié)點中生成相應(yīng)的目標(biāo)代碼。
56.根據(jù)權(quán)利要求47所述轉(zhuǎn)換器裝置,其中,所述已生成的多形結(jié)點指定在目標(biāo)代碼生成過程中將分配的寄存器。
57.根據(jù)權(quán)利要求47所述轉(zhuǎn)換器裝置,其中,通過從多形結(jié)點中的函數(shù)指針中推斷信息,而在通用內(nèi)核優(yōu)化中使用所述已生成的多形結(jié)點,否則,將無法從多形結(jié)點中確定所述信息。
58.根據(jù)權(quán)利要求50所述轉(zhuǎn)換器裝置,其中,當(dāng)一條源指令對應(yīng)于多形指令的列表上的一條指令時,所述中間表示生成機構(gòu)為那些對應(yīng)于多形指令的列表上的指令的源指令生成多形結(jié)點或基本結(jié)點。
59.根據(jù)權(quán)利要求10所述方法,其中,所述生成的多形結(jié)點指定在目標(biāo)代碼生成過程中將分配的寄存器。
60.根據(jù)權(quán)利要求10所述方法,其中,通過從多形結(jié)點中的函數(shù)指針中推斷信息,在通用內(nèi)核優(yōu)化中使用所述已生成的多形結(jié)點,否則,將無法從多形結(jié)點中確定所述信息。
61.根據(jù)權(quán)利要求13所述方法,其中,當(dāng)一條源指令對應(yīng)于多形指令的列表上的一條指令時,所述中間表示生成步驟為那些對應(yīng)于多形指令的列表上的指令的源指令生成多形結(jié)點或基本結(jié)點。
62.根據(jù)權(quán)利要求29所述計算機可讀存儲介質(zhì),其中,所述已生成的多形結(jié)點指定將在目標(biāo)代碼生成過程中分配的寄存器。
63.根據(jù)權(quán)利要求29所述計算機可讀存儲介質(zhì),其中,通過從多形結(jié)點中的函數(shù)指針推斷信息,在通用內(nèi)核優(yōu)化中使用所述已生成的多形結(jié)點,否則,將無法從多形結(jié)點中確定所述信息。
64.根據(jù)權(quán)利要求32所述轉(zhuǎn)換器裝置,其中,所述用于確定IR結(jié)點的類型的可以由計算機執(zhí)行的計算機可讀代碼,當(dāng)一條源指令對應(yīng)于多形指令的列表上的一條指令時,還為那些對應(yīng)于多形指令的列表上的指令的源指令生成多形結(jié)點或基本結(jié)點。
65.一種使用可在多種可能的源/目標(biāo)處理體系結(jié)構(gòu)對之間進行配置的轉(zhuǎn)換器,把能夠在一種源處理器體系結(jié)構(gòu)上執(zhí)行的源程序代碼轉(zhuǎn)換為能夠在一種目標(biāo)處理器體系結(jié)構(gòu)上執(zhí)行的目標(biāo)程序代碼的方法,所述方法包括選擇一種源處理器體系結(jié)構(gòu),在其中,所述源程序代碼被設(shè)計成可以由多種可能的源處理器體系結(jié)構(gòu)來執(zhí)行;選擇一種目標(biāo)處理器體系結(jié)構(gòu),在其中,所述目標(biāo)程序代碼被設(shè)計成可以由多種可能的目標(biāo)處理器體系結(jié)構(gòu)來執(zhí)行;以及配置一個轉(zhuǎn)換器,它使用一對選定的源處理器體系結(jié)構(gòu)和選定的目標(biāo)處理器體系結(jié)構(gòu),將所述源程序代碼轉(zhuǎn)換為目標(biāo)程序代碼。
66.根據(jù)權(quán)利要求65所述方法,還包括,動態(tài)地在運行時間將所述源程序代碼轉(zhuǎn)換為目標(biāo)程序代碼,同時目標(biāo)程序代碼在目標(biāo)處理體系結(jié)構(gòu)上執(zhí)行。
67.根據(jù)權(quán)利要求65所述方法,還包括對源程序代碼中的各項指令進行解碼;根據(jù)基于選定的源處理器體系結(jié)構(gòu)和選定的目標(biāo)處理器體系結(jié)構(gòu)對所采取的轉(zhuǎn)換器配置,確定在已解碼的程序代碼中的每一條各自的指令的已解碼程序代碼的中間表示中,使用多種可能類型的IR結(jié)點中的哪一種類型的中間表示(IR)結(jié)點;以及生成已解碼程序代碼的中間表示(IR)以包括多種可能類型的IR結(jié)點中的至少一種類型的IR結(jié)點;以及其中,中間表示中的各IR結(jié)點是程序代碼所執(zhí)行的表達式、計算和操作的抽象表示。
68.根據(jù)權(quán)利要求67所述方法,還包括產(chǎn)生中間表示(IR),以包括通用轉(zhuǎn)換特征和專用轉(zhuǎn)換特征的組合,其中,通用轉(zhuǎn)換特征能夠在多種可能的處理器體系結(jié)構(gòu)中實現(xiàn),同時,專用轉(zhuǎn)換特征能夠在一種特定的處理器體系結(jié)構(gòu)中實現(xiàn)。
69.根據(jù)權(quán)利要求68所述方法,其中,被采取的特定轉(zhuǎn)換器配置確定所使用的通用轉(zhuǎn)換特征和專用轉(zhuǎn)換特征的各自的組合。
70.一種具有駐留于其上的、采取可以由計算機執(zhí)行的計算機可讀代碼的形式的轉(zhuǎn)換器軟件的計算機可讀存儲介質(zhì),用于使用可在多種可能的源/目標(biāo)處理器體系結(jié)構(gòu)對之間進行配置的轉(zhuǎn)換器,執(zhí)行一種把能夠在源處理器體系結(jié)構(gòu)上執(zhí)行的源程序代碼轉(zhuǎn)換為能夠在目標(biāo)處理器體系結(jié)構(gòu)上執(zhí)行的目標(biāo)程序代碼的方法,所述方法包括選擇一種源處理器體系結(jié)構(gòu),在其中,所述源程序代碼被設(shè)計成可以由多種可能的源處理器體系結(jié)構(gòu)來執(zhí)行;選擇一種目標(biāo)處理器體系結(jié)構(gòu),在其中,所述目標(biāo)程序代碼被設(shè)計成可以由多種可能的目標(biāo)處理器體系結(jié)構(gòu)來執(zhí)行;以及配置一個轉(zhuǎn)換器,它使用一對選定的源處理器體系結(jié)構(gòu)和選定的目標(biāo)處理器體系結(jié)構(gòu),將所述源程序代碼轉(zhuǎn)換為目標(biāo)程序代碼。
71.根據(jù)權(quán)利要求70所述計算機可讀存儲介質(zhì),其中,所述轉(zhuǎn)換器軟件還包括可以由計算機執(zhí)行的計算機可讀代碼,動態(tài)地在運行時間將所述源程序代碼轉(zhuǎn)換為目標(biāo)程序代碼,同時目標(biāo)程序代碼在目標(biāo)處理器體系結(jié)構(gòu)上執(zhí)行。
72.根據(jù)權(quán)利要求70所述計算機可讀存儲介質(zhì),其中,所述轉(zhuǎn)換器軟件還包括可以由計算機執(zhí)行的計算機可讀代碼,用于執(zhí)行下列各步驟對源程序代碼中的各項指令進行解碼;根據(jù)基于選定的源處理器體系結(jié)構(gòu)和選定的目標(biāo)處理器體系結(jié)構(gòu)對所采取的轉(zhuǎn)換器配置,確定在已解碼的程序代碼中的每一條各自的指令的已解碼程序代碼的中間表示中,使用多種可能類型的IR結(jié)點中的哪一種類型的中間表示(IR)結(jié)點;以及產(chǎn)生已解碼程序代碼的中間表示(IR),以包括多種可能類型的IR結(jié)點中的至少一種類型的IR結(jié)點;其中,中間表示(IR)中的各IR結(jié)點是程序代碼所執(zhí)行的表達式、計算和操作的抽象表示。
73.根據(jù)權(quán)利要求72所述計算機可讀存儲介質(zhì),其中,所述轉(zhuǎn)換器軟件還包括可以由計算機執(zhí)行的計算機可讀代碼,用于產(chǎn)生中間表示(IR)以包括通用轉(zhuǎn)換特征和專用轉(zhuǎn)換特征的組合,其中,通用轉(zhuǎn)換特征能夠在多種可能的處理器體系結(jié)構(gòu)中實現(xiàn),同時,專用轉(zhuǎn)換特征能夠在一種特定的處理器體系結(jié)構(gòu)中實現(xiàn)。
74.根據(jù)權(quán)利要求73所述計算機可讀存儲介質(zhì),其中,所采取的特定轉(zhuǎn)換器配置確定所使用的通用轉(zhuǎn)換特征和專用轉(zhuǎn)換特征的各自的組合。
75.一個用于目標(biāo)計算環(huán)境的轉(zhuǎn)換器裝置,具有一個處理器和一個被連接到所述處理器的存儲器,用于使用可在多種可能的源/目標(biāo)處理器體系結(jié)構(gòu)對之間進行配置的轉(zhuǎn)換器,將能夠在源處理器體系結(jié)構(gòu)上執(zhí)行的源程序代碼轉(zhuǎn)換為能夠在目標(biāo)計算環(huán)境的目標(biāo)處理器體系結(jié)構(gòu)上執(zhí)行的目標(biāo)程序代碼,所述轉(zhuǎn)換器裝置包括一個源處理器選擇機構(gòu),它被配置去選擇一種源處理器體系結(jié)構(gòu),在其中,所述源程序代碼被設(shè)計成可以由多種可能的源處理器體系結(jié)構(gòu)來執(zhí)行;一個目標(biāo)處理器選擇機構(gòu),它被配置去選擇一種目標(biāo)處理器體系結(jié)構(gòu),在其中,所述目標(biāo)程序代碼被設(shè)計成可以由多種可能的目標(biāo)處理器體系結(jié)構(gòu)來執(zhí)行;以及一個配置機構(gòu),它被配置去構(gòu)成一個轉(zhuǎn)換器,以使用一對選定的源處理器體系結(jié)構(gòu)和選定的目標(biāo)處理器體系結(jié)構(gòu),將所述源程序代碼轉(zhuǎn)換為目標(biāo)程序代碼。
76.根據(jù)權(quán)利要求75所述轉(zhuǎn)換器裝置,還包括一個轉(zhuǎn)換機構(gòu),它被這樣配置動態(tài)地在運行時間將所述源程序代碼轉(zhuǎn)換為目標(biāo)程序代碼,同時目標(biāo)程序代碼在目標(biāo)處理器體系結(jié)構(gòu)上執(zhí)行。
77.根據(jù)權(quán)利要求75所述轉(zhuǎn)換器裝置,還包括一個解碼機構(gòu),它被配置對源程序代碼中的各項指令進行解碼;一個中間表示類型確定機構(gòu),它被這樣配置根據(jù)基于選定的源處理器體系結(jié)構(gòu)和選定的目標(biāo)處理器體系結(jié)構(gòu)對所采取的特定轉(zhuǎn)換器配置,確定在已解碼程序代碼的每一條各自的指令的已解碼程序代碼的中間表示中,使用多種可能類型的IR結(jié)點中的哪一種類型的中間表示(IR)結(jié)點;以及一個中間表示生成機構(gòu),它被配置去生成已解碼程序代碼的中間表示(IR),以包括多種可能類型的IR結(jié)點中的至少一種類型的IR結(jié)點;其中,中間表示(IR)中的各IR結(jié)點是程序代碼所執(zhí)行的表達式、計算和操作的抽象表示。
78.根據(jù)權(quán)利要求77所述轉(zhuǎn)換器裝置,其中,所述中間表示生成機構(gòu)還被配置去生成中間表示(IR),以包括通用轉(zhuǎn)換特征和專用轉(zhuǎn)換特征的組合,其中,通用轉(zhuǎn)換特征能夠在多種可能的處理器體系結(jié)構(gòu)中實現(xiàn),同時,專用轉(zhuǎn)換特征能夠由一種特定的處理器體系結(jié)構(gòu)中實現(xiàn)。
79.根據(jù)權(quán)利要求78所述轉(zhuǎn)換器裝置,其中,被采取的特定轉(zhuǎn)換器配置確定所使用的通用轉(zhuǎn)換特征和專用轉(zhuǎn)換特征的各自的組合。
全文摘要
一種用于程序代碼轉(zhuǎn)換裝置的改進的體系結(jié)構(gòu)和生成用于程序代碼轉(zhuǎn)換的中間表示的方法。所述程序代碼轉(zhuǎn)換裝置確定在待轉(zhuǎn)換的源代碼的中間表示中,生成哪一種類型的IR結(jié)點。根據(jù)轉(zhuǎn)換中所涉及的特定源和目標(biāo)計算環(huán)境,程序代碼轉(zhuǎn)換裝置在生成中間表示的過程中,使用基本結(jié)點、復(fù)雜結(jié)點、多形結(jié)點和體系結(jié)構(gòu)專用結(jié)點,或者它們的某種組合。
文檔編號G06F9/45GK1846196SQ200480011950
公開日2006年10月11日 申請日期2004年4月28日 優(yōu)先權(quán)日2003年5月2日
發(fā)明者丹尼爾·歐文, 強納森·J.·安德魯斯, 麥爾斯·P.·豪森, 大衛(wèi)·海克尼 申請人:可遞有限公司