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

用于使用寄存器分配器建立調(diào)用約定序言和收尾程序代碼的方法和裝置的制作方法

文檔序號(hào):6626036閱讀:140來源:國(guó)知局
專利名稱:用于使用寄存器分配器建立調(diào)用約定序言和收尾程序代碼的方法和裝置的制作方法
技術(shù)領(lǐng)域
本發(fā)明一般涉及一種用于提高軟件應(yīng)用程序性能的方法和裝置。具體地說,本發(fā)明涉及一種使寄存器分配器建立用于子程序的調(diào)用約定序言和收尾程序代碼的方法和裝置在致力于提高與計(jì)算機(jī)程序執(zhí)行有關(guān)的效率的努力中,很多計(jì)算機(jī)程序在編譯過程中被“優(yōu)化”。優(yōu)化一個(gè)計(jì)算機(jī)程序一般用以消除實(shí)質(zhì)上不使用的計(jì)算機(jī)代碼部分。另外,作為編譯處理的一部分的優(yōu)化計(jì)算機(jī)程序可以重新構(gòu)成計(jì)算操作以提供更為高效地執(zhí)行的全部計(jì)算,從而消耗較少的計(jì)算機(jī)資源。
一個(gè)優(yōu)化器用于將一個(gè)計(jì)算機(jī)程序、例如以諸如C++,F(xiàn)ORTRAN,或Java字節(jié)碼之類的程序設(shè)計(jì)語言編寫的計(jì)算機(jī)程序高效變換或者否則編譯為更快的程序。更快的或者被優(yōu)化的程序一般包括基本上所有與原始的或預(yù)先變換的計(jì)算機(jī)程序一樣的、可觀察到的行為。具體地說,被優(yōu)化程序包括與其相關(guān)原始程序相同的數(shù)學(xué)行為。然而,優(yōu)化器一般使用更少的計(jì)算重新創(chuàng)建相同的數(shù)學(xué)行為。
正如本領(lǐng)域技術(shù)人員所了解的,一個(gè)優(yōu)化器一般包括一個(gè)用于控制寄存器在一個(gè)優(yōu)化的或者否則為編譯的程序內(nèi)部表示內(nèi)的使用的寄存器分配器。一個(gè)寄存器分配器分配一個(gè)其中存儲(chǔ)與程序有關(guān)的數(shù)據(jù)的寄存器空間。與存取和一個(gè)計(jì)算機(jī)相關(guān)的“常規(guī)”存儲(chǔ)器空間、例如被分為棧頁槽的棧空間相關(guān)的速度相比,一個(gè)寄存器是一個(gè)與計(jì)算機(jī)的處理器相關(guān)的、可以被相對(duì)較快存取的存儲(chǔ)單元。
在寄存器分配處理之前,一組值、即輸入變量為編譯器所知,并且位于一個(gè)調(diào)用約定所規(guī)定的固定存儲(chǔ)單元中。如本領(lǐng)域技術(shù)人員所公知的,一個(gè)調(diào)用約定一般是一個(gè)由此進(jìn)行到子程序的調(diào)用的約定。一個(gè)調(diào)用約定一般規(guī)定變量從哪里經(jīng)過,即,每個(gè)變量所出現(xiàn)在的寄存器或棧頁槽。另外,一個(gè)調(diào)用約定可以規(guī)定在子程序期間必須保留的寄存器,即,被被調(diào)用者-保存寄存器。如果在子程序中使用被被調(diào)用者-保存寄存器,則一般需要保存并恢復(fù)被被調(diào)用者-保存寄存器。調(diào)用約定可能還規(guī)定某些寄存器是不用于還是用于特定目的。保存和恢復(fù)寄存器以及任何其他的特定處理,一般發(fā)生在子程序的入口和出口,并且被稱為序言和收尾程序代碼。在寄存器分配處理完成之后可使用附加信息。這樣的附加信息包括,與子程序有關(guān)的棧幀大小以及要保存和恢復(fù)的一組寄存器,但是附加信息不限于這些。


圖1是一個(gè)包括一個(gè)寄存器分配器和一個(gè)調(diào)用約定代碼發(fā)生器的編譯器的圖示。源代碼102作為輸入提供給編譯器106,該編譯器可能是一個(gè)優(yōu)化編譯器。一般地,源代碼102包括一個(gè)對(duì)子程序110的調(diào)用108,以及與該調(diào)用108有關(guān)的輸入變量112。具體地說,相對(duì)于調(diào)用108規(guī)定輸入變量112的位置。
編譯器106所包括的一個(gè)寄存器分配器116用于分配源代碼102所使用的存儲(chǔ)器空間。在寄存器分配器116執(zhí)行一個(gè)寄存器分配之后,調(diào)用約定代碼發(fā)生器118產(chǎn)生與源代碼102有關(guān)的序言和收尾程序代碼。以實(shí)例方式,如果在分配的任何部分使用任何被被調(diào)用者-保存寄存器,則將用于保存和恢復(fù)被被調(diào)用者-保存寄存器的代碼插入到序言和收尾程序代碼。序言和收尾程序代碼被包括在一個(gè)源代碼102的內(nèi)部表示120中。一旦產(chǎn)生內(nèi)部表示120,編譯器106從內(nèi)部表示120創(chuàng)建機(jī)器指令124。
除一個(gè)子程序的調(diào)用約定之外,內(nèi)部表示120包括復(fù)制、加載和存儲(chǔ)與變量定義和使用有關(guān)的指令。如圖所示,變量或值“c”和“d”存儲(chǔ)在一個(gè)棧內(nèi)。如本領(lǐng)域技術(shù)人員所公知的,變量“d”必須在子程序調(diào)用過程中溢出。因此,變量“d”在子程序調(diào)用之后被再次從棧加載到“foo”。
參照?qǐng)D2,該圖描述一個(gè)從包括調(diào)用約定的源代碼產(chǎn)生機(jī)器指令的過程。如本領(lǐng)域技術(shù)人員所公知的,過程202一般包括“虛擬”寄存器到“真實(shí)”寄存器的轉(zhuǎn)換。在分配之前,編譯器假設(shè)有不限數(shù)目的“虛擬”寄存器一起工作。分配器的工作是將無限制的虛擬寄存器映象到整個(gè)機(jī)器具有的非常有限的真實(shí)寄存器組。過程202在步驟204開始,在該步驟將調(diào)用約定代碼插入到編譯器所得到的源代碼。
一般地,在編譯器插入調(diào)用約定代碼或與一個(gè)子程序調(diào)用可能產(chǎn)生的約定有關(guān)的代碼之后,編譯器在步驟206研究調(diào)用約定。具體地說,編譯器研究與調(diào)用約定有關(guān)的輸入變量。在步驟208,確定輸入值或變量是否與一個(gè)寄存器或棧位置、例如棧頁槽有關(guān)。當(dāng)確定輸入變量存儲(chǔ)在一個(gè)寄存器時(shí),過程流進(jìn)入步驟216,在這里將輸入值復(fù)制到一個(gè)虛擬寄存器。一般地,使用寄存器到寄存器復(fù)制命令完成該復(fù)制。
一旦輸入值被復(fù)制到虛擬寄存器,則在步驟212,執(zhí)行寄存器分配。與執(zhí)行寄存器分配有關(guān)的步驟將在下面參照?qǐng)D3討論。寄存器分配過程產(chǎn)生分配選擇。即,整個(gè)寄存器分配過程可用于確定指定給寄存器、即“真實(shí)”寄存器和棧頁槽的值是如何不同。在寄存器分配過程完成之后,在步驟214通過編譯器將寄存器分配過程產(chǎn)生的分配選擇轉(zhuǎn)換為機(jī)器指令。應(yīng)該認(rèn)識(shí)到,將分配選擇變?yōu)闄C(jī)器指令包括使用寄存器分配過程期間所獲得的信息建立序言和收尾程序代碼。一旦分配選擇已被轉(zhuǎn)換,就完成創(chuàng)建機(jī)器指令的過程。
回到步驟208,確定輸入值是否與一個(gè)寄存器或棧位置有關(guān),當(dāng)確定輸入值存儲(chǔ)在一個(gè)棧位置時(shí),則在步驟210,將輸入值加載到一個(gè)虛擬寄存器。從步驟210,處理流程進(jìn)入到步驟212,在這里執(zhí)行寄存器分配。
圖3是表示響應(yīng)著色干涉圖與分配??臻g、即圖2的步驟212有關(guān)的步驟的流程圖。分配與一個(gè)源代碼段有關(guān)的存儲(chǔ)器的過程212在步驟302開始,在這里構(gòu)造一個(gè)用于源代碼段的干涉圖。在干涉圖構(gòu)成之后,在步驟306嘗試著色干涉圖。一般地說,在嘗試著色干涉圖時(shí)可以使用各種不同的方法。一旦在步驟306嘗試著色干涉圖,就在步驟310確定對(duì)著色干涉圖的嘗試是否成功。換言之,確定在沒有沖突的情況下與干涉圖有關(guān)的每個(gè)變量是否被成功指定到一個(gè)寄存器。
如果確定為對(duì)著色的嘗試不成功,則暗示在沒有干涉的情況下沒有足夠的寄存器使得源代碼段內(nèi)的每個(gè)變量被指定一個(gè)寄存器。由于處理器內(nèi)的寄存器數(shù)量是固定的,當(dāng)沒有可用于代碼存儲(chǔ)的寄存器空間時(shí),識(shí)別“溢出代碼”。如本領(lǐng)域技術(shù)人員所公開的,溢出代碼是將數(shù)據(jù)移動(dòng)到棧頁槽以及從棧頁槽移開的代碼,以減少同時(shí)需要的寄存器數(shù)目。當(dāng)所有寄存器占滿時(shí),棧頁槽是分配器用于保留信息的一段棧幀。一般地說,一個(gè)優(yōu)化器包括用于根據(jù)需要分配用于溢出代碼的棧頁槽的專門棧頁槽分配器。當(dāng)除適合寄存器的變量之外的變量通過棧時(shí)一般也需要用于溢出代碼的棧頁槽。
如果在步驟310確定為對(duì)著色干涉圖的嘗試不成功,則流程從步驟310移動(dòng)到步驟314,在這里得到一個(gè)有效范圍列表作為溢出候選者。即,識(shí)別可溢出到棧頁槽的變量。
一旦識(shí)別出溢出候選項(xiàng),則在步驟318,將加載指令和存儲(chǔ)指令指定到定義周圍并在源代碼段內(nèi)使用。具體地說,在源代碼段內(nèi)使用變量之前插入加載變量的加載命令,同時(shí)在源代碼段內(nèi)定義變量之后插入存儲(chǔ)變量的存儲(chǔ)指令。
在指定加載指令和存儲(chǔ)指令、即加載和存儲(chǔ)之后,在步驟322分配一個(gè)棧頁槽用于每次加載和存儲(chǔ)。通常,與寄存器分配器分開的一個(gè)棧頁槽分配器用于分配棧頁槽。盡管棧頁槽分配器與一個(gè)寄存器分配器分開,應(yīng)該明白,兩個(gè)分配器都包括在一個(gè)優(yōu)化器或一個(gè)編譯器內(nèi)。分配棧頁槽允許溢出候選項(xiàng)溢出到棧頁槽。從步驟322,處理流程回到步驟302,在這里構(gòu)成一個(gè)干涉圖。
回到步驟310,如果確定為對(duì)著色干涉圖的嘗試成功,則暗示每個(gè)變量已被成功地與一個(gè)寄存器或一個(gè)棧頁槽關(guān)聯(lián)。因此,處理流程進(jìn)入步驟326,在這里清除或結(jié)束該分配。在清除一個(gè)分配期間,棧頁槽號(hào)被轉(zhuǎn)換為到棧幀的偏移,復(fù)制根據(jù)需要表示為加載或存儲(chǔ),實(shí)際的寄存器號(hào)插入到機(jī)器指令,并且專著于其他的內(nèi)務(wù)清零雜務(wù),如本領(lǐng)域技術(shù)人員所公知的。
在構(gòu)成一個(gè)調(diào)用約定之前,例如,在產(chǎn)生調(diào)用約定的機(jī)器指令之前必須完成一個(gè)寄存器分配過程的要求具有幾個(gè)缺點(diǎn)。例如,為產(chǎn)生序言和收尾程序代碼,必須使用用于產(chǎn)生序言和收尾程序代碼的專門代碼段。這樣的代碼可能包含故障,并且最低程度可能需要調(diào)試。進(jìn)一步地,這樣的代碼還常常是與機(jī)器相關(guān)的,因此減少了代碼的可移植性。
因此,所需要的是一種高效產(chǎn)生用于調(diào)用約定的機(jī)器指令以便機(jī)器指令可以很容易地在不同計(jì)算系統(tǒng)之間移植的方法和裝置。這樣的方法和裝置可以進(jìn)一步允許溢出代碼試探法以選擇是否溢出一個(gè)被被調(diào)用者-保存寄存器并消除所需要的專門序言和收尾程序產(chǎn)生。具體地說,所需要的是一種使寄存器分配器實(shí)質(zhì)上建立一個(gè)調(diào)用約定的方法和裝置。
本發(fā)明涉及在創(chuàng)建一個(gè)調(diào)用約定中使用寄存器分配器。根據(jù)本發(fā)明的一個(gè)方面,用于產(chǎn)生與一個(gè)調(diào)用約定有關(guān)的代碼的計(jì)算機(jī)實(shí)現(xiàn)的方法包括獲得可編譯源代碼,并識(shí)別至少一個(gè)與該調(diào)用約定有關(guān)的變量。變量相對(duì)于存儲(chǔ)器空間的位置通過一個(gè)寄存器時(shí)標(biāo)來描述。該方法還包括使用用于分配寄存器的寄存器分配器執(zhí)行一個(gè)寄存器分配。在寄存器分配期間,產(chǎn)生與調(diào)用約定有關(guān)的代碼。
根據(jù)本發(fā)明的另一個(gè)方面,一種用于在基于對(duì)象的系統(tǒng)中建立與一個(gè)調(diào)用子程序有關(guān)的調(diào)用約定的方法包括獲得適合于編譯的源代碼,創(chuàng)建每個(gè)都具有一個(gè)帶有相關(guān)有效范圍的相關(guān)變量的多個(gè)寄存器時(shí)標(biāo),以及確定多個(gè)寄存器時(shí)標(biāo)的交集。使用交集執(zhí)行一個(gè)寄存器分配。除分配寄存器之外,該寄存器分配產(chǎn)生與調(diào)用約定有關(guān)的代碼。在一個(gè)實(shí)施例中,該方法進(jìn)一步包括將與調(diào)用約定有關(guān)的代碼轉(zhuǎn)換為機(jī)器指令,該機(jī)器指令適合于由一個(gè)計(jì)算系統(tǒng)執(zhí)行。
通過允許在寄存器分配期間、即當(dāng)一個(gè)寄存器分配器基本上自動(dòng)產(chǎn)生調(diào)用約定代碼時(shí)建立一個(gè)調(diào)用約定,該調(diào)用約定可以很容易地被特征化。該分配器可用于高效執(zhí)行一個(gè)分配。此外,當(dāng)一個(gè)寄存器分配器產(chǎn)生調(diào)用約定代碼時(shí),根據(jù)源代碼調(diào)用約定代碼可以很容易地在不同平臺(tái)之間移植。
通過閱讀下面的詳細(xì)描述并參照各個(gè)附圖,本發(fā)明的這些和其他優(yōu)點(diǎn)將變得顯而易見。
參照結(jié)合附圖所作的描述,將更好地理解本發(fā)明,其中圖1是用于建立一個(gè)調(diào)用約定的編譯器的圖示。
圖2是描述與產(chǎn)生機(jī)器指令有關(guān)的步驟的過程流程圖。
圖3是描述與分配棧空間的過程即圖2的步驟212有關(guān)的步驟的過程流程圖。
圖4a是根據(jù)本發(fā)明的一個(gè)實(shí)施例的一個(gè)包括用于建立一個(gè)調(diào)用約定的寄存器分配器的編譯器的圖示。
圖4b是根據(jù)本發(fā)明一個(gè)實(shí)施例的一個(gè)寄存器時(shí)標(biāo)的圖示。
圖5是根據(jù)本發(fā)明的一個(gè)實(shí)施例的描述與產(chǎn)生機(jī)器指令有關(guān)的步驟的過程流程圖。
圖6是根據(jù)本發(fā)明的一個(gè)實(shí)施例的描述與分配棧頁槽的過程、即圖4的步驟508有關(guān)的步驟的過程流程圖。
圖7是一個(gè)適用于實(shí)現(xiàn)本發(fā)明的通用計(jì)算機(jī)系統(tǒng)的圖示。
圖8是由圖7的計(jì)算機(jī)系統(tǒng)支持的并適用于實(shí)現(xiàn)本發(fā)明的虛擬機(jī)的圖示。
一個(gè)編譯器、例如優(yōu)化編譯器常常包括一個(gè)用于分配保留變量的棧頁槽的棧頁槽分配器,由于與一個(gè)處理器相關(guān)的寄存器的數(shù)量有限這個(gè)事實(shí),該變量可能不存儲(chǔ)在寄存器中。這樣的編譯器一般還包括一個(gè)用于建立子程序調(diào)用約定代碼的調(diào)用約定代碼發(fā)生器。在一個(gè)編譯器執(zhí)行寄存器分配之前,一組值、即輸入變量處于由一個(gè)調(diào)用約定規(guī)定的固定位置。為建立一個(gè)調(diào)用約定,需要諸如相關(guān)棧幀尺寸和用于存儲(chǔ)與調(diào)用約定相關(guān)的變量的存儲(chǔ)器組之類的附加信息。這樣的信息一般不可用,直到寄存器分配過程完成之后為止。通過要求在建立調(diào)用約定之前進(jìn)行寄存器分配過程,減少包括調(diào)用約定代碼的代碼的可移植性,因?yàn)樵谡{(diào)用約定代碼中關(guān)于調(diào)用約定的較小變化可能引起的較大的基于平臺(tái)的變化。
當(dāng)以與機(jī)器寄存器一樣的方式處理基于棧的值或變量時(shí),將不需要專門的棧頁槽分配器。使用分配棧頁槽的寄存器分配器使得以與寄存器相同的方式處理?xiàng)m摬?,從而消除與通常用于處理存儲(chǔ)在棧頁槽內(nèi)的值的試探法有關(guān)的故障。
進(jìn)一步,使用寄存器分配器來基本上自動(dòng)產(chǎn)生調(diào)用約定代碼允許在了解到子程序調(diào)用的輸入變量的位置時(shí)產(chǎn)生調(diào)用約定代碼。具體地說,通過高效集成指令分配、即子程序調(diào)用、變量分配的輸入和指令結(jié)果,寄存器分配器可以產(chǎn)生調(diào)用約定代碼。
允許寄存器分配器產(chǎn)生調(diào)用約定代碼一般對(duì)寄存器分配器具有最小的影響。通過實(shí)例的方式可看出,初始條件的設(shè)定影響寄存器分配器。因此,使用寄存器分配器產(chǎn)生調(diào)用約定代碼增加了包括調(diào)用約定代碼的全部代碼的靈活性,并且使得更快地執(zhí)行代碼。另外,使用寄存器分配器產(chǎn)生調(diào)用約定代碼使得調(diào)用約定代碼基本上獨(dú)立于機(jī)器。例如,通知分配器輸入變量的實(shí)際初始位置,而不是將它們立即移動(dòng)到虛擬寄存器。如果輸入位置被認(rèn)為是令人滿意的,則避免移動(dòng)到虛擬寄存器。如參照?qǐng)D4a所討論的,變量“d”通過棧。如果變量“d”被提升到虛擬寄存器,則其必須通過一個(gè)調(diào)用溢出到foo。將變量“d”留在棧內(nèi)的其初始位置避免該溢出。
在一個(gè)實(shí)施例中,一個(gè)溢出代碼機(jī)構(gòu)用于建立序言和收尾程序代碼,并且一個(gè)相對(duì)簡(jiǎn)單的接口可用于描述被被調(diào)用者-保存寄存器的行為,從而使其相對(duì)容易地將該接口移植到不同的中央處理單元(CPU)。這樣的接口還可以改變一組被被調(diào)用者-保存寄存器,即,相同CPU上的調(diào)用約定。使用溢出代碼機(jī)構(gòu)建立調(diào)用約定代碼、例如序言和收尾程序代碼允許溢出候選者選擇試探法以全局方式組合溢出被被調(diào)用者-保存寄存器或者不溢出被被調(diào)用者-保存寄存器的作用。常規(guī)的溢出候選者選擇技術(shù)通常是不完善的,因?yàn)槌R?guī)技術(shù)或者“急切地”抓取被被調(diào)用者-保存寄存器,可能迫使被被調(diào)用者-保存寄存器在一般情況下被溢出以便使其可用于不被頻繁執(zhí)行的代碼,或者在不了解該決定在整個(gè)分配過程中的作用的情況下就迫使對(duì)是否局部使用一個(gè)被被調(diào)用者-保存寄存器做出決定。
在所述實(shí)施例,取代插入調(diào)用約定代碼,一個(gè)寄存器分配器聲明基本上全部的被被調(diào)用者-保存寄存器在入口有效并在出口可用,例如,在到子程序的入口有效并在子程序的出口可用。這樣的聲明高效地創(chuàng)建了一組相對(duì)較長(zhǎng)的有效范圍,例如,它們可以覆蓋整個(gè)方法,并且基本上僅具有一個(gè)單獨(dú)用途和基本上僅一個(gè)單獨(dú)定義。如果需要的話,這樣的有效范圍產(chǎn)生理想的溢出候選者。
如果被被調(diào)用者-保存有效范圍溢出,則所插入的用于該有效范圍的加載和存儲(chǔ)將表現(xiàn)為傳統(tǒng)的序言和收尾程序代碼。應(yīng)該認(rèn)識(shí)到,不需要專門的序言和收尾程序代碼發(fā)生器,因?yàn)槭褂贸R?guī)的溢出機(jī)構(gòu)的溢出被被調(diào)用者-保存有效范圍的真正作用是產(chǎn)生序言和收尾程序代碼。
參照?qǐng)D4a,將描述根據(jù)本發(fā)明的一個(gè)實(shí)施例的一個(gè)包括用于產(chǎn)生調(diào)用約定代碼的寄存器分配器的編譯器。源代碼402作為輸入提供給一個(gè)編譯器406,在所述實(shí)施例,該編譯器是一個(gè)優(yōu)化編譯器。源代碼402包括一個(gè)到子程序410的調(diào)用408,以及輸入變量412。輸入變量412與調(diào)用108有關(guān),即,相對(duì)于調(diào)用108規(guī)定輸入變量112的位置。輸入變量的位置可以規(guī)定在寄存器時(shí)標(biāo)內(nèi),如下面參照?qǐng)D4b所述。在一個(gè)實(shí)施例,每個(gè)輸入變量具有一個(gè)相關(guān)的寄存器時(shí)標(biāo)。
優(yōu)化編譯器406所包括的寄存器分配器416用于分配源代碼402所使用的存儲(chǔ)器空間。如下面參照?qǐng)D5和6所述,寄存器分配器416以與分配寄存器空間的相同方式分配??臻g。寄存器分配器416進(jìn)一步用于使用輸入變量412創(chuàng)建調(diào)用約定代碼,該代碼包括在源代碼402的內(nèi)部表示420中。換言之,增加了被被調(diào)用者-保存寄存器的有效范圍。在圖4a,增加了用于機(jī)器寄存器EDI的有效范圍;將其定義為在到子程序的入口為有效,在子程序返回時(shí)需要回到EDI。優(yōu)化編譯器406進(jìn)一步用于將內(nèi)部表示420轉(zhuǎn)換為適合于執(zhí)行的機(jī)器指令424。
如前所述,由寄存器分配器使用以建立調(diào)用約定的每個(gè)輸入變量或輸入可變值可以具有一個(gè)相關(guān)的寄存器時(shí)標(biāo)。一個(gè)寄存器時(shí)標(biāo)是表示有效寄存器并且在某些情況下表示棧頁槽的位、或位時(shí)標(biāo)的集合。換言之,一個(gè)寄存器時(shí)標(biāo)是用于表示所有可能的機(jī)器寄存器并且,如果恰當(dāng)?shù)脑?,表示棧頁槽的?shù)空間。寄存器時(shí)標(biāo)內(nèi)的位數(shù)可以根據(jù)執(zhí)行機(jī)器指令的平臺(tái)而變化。作為一個(gè)實(shí)例,在一個(gè)Intel平臺(tái)、例如具有來自Santa Clara,California的Intel公司的商業(yè)上可得到的奔騰處理器的平臺(tái)上,一個(gè)寄存器時(shí)標(biāo)可以是96位的集合。
圖4b是根據(jù)本發(fā)明一個(gè)實(shí)施例的寄存器時(shí)標(biāo)的圖示。寄存器時(shí)標(biāo)452包括多個(gè)位460。每個(gè)位460設(shè)定為指示一個(gè)特定的寄存器相對(duì)于寄存器時(shí)標(biāo)452關(guān)聯(lián)的變量是否有效。位460的數(shù)目獨(dú)立于與一個(gè)特定處理器關(guān)聯(lián)的寄存器或棧頁槽數(shù)量,至少部分是這樣。在所述實(shí)施例,當(dāng)一位、例如位460b設(shè)定到值“1”時(shí),指示為與位460b相關(guān)的寄存器有效?;蛘?,當(dāng)一位、例如位460a設(shè)定到值“0”時(shí),指示為相關(guān)寄存器無效。在一個(gè)實(shí)施例,在寄存器時(shí)標(biāo)452中至多一位460被設(shè)定,即設(shè)定為“1”,這是因?yàn)槲?60表示諸如整數(shù)或浮點(diǎn)數(shù)之類的單個(gè)的精確值。在另一個(gè)實(shí)施例,就實(shí)例而言,當(dāng)位460表示長(zhǎng)整數(shù)時(shí),可以設(shè)定兩位460。
圖5是根據(jù)本發(fā)明一個(gè)實(shí)施例表示與產(chǎn)生機(jī)器指令有關(guān)的步驟的過程流程圖。具體地說,將描述與產(chǎn)生具有由一個(gè)寄存器分配器確定的調(diào)用約定的機(jī)器指令有關(guān)的步驟。使用包括一個(gè)寄存器分配器的優(yōu)化編譯器產(chǎn)生機(jī)器指令的過程502在步驟504開始,在這里得到用于調(diào)用約定的寄存器時(shí)標(biāo)。如前所述,一個(gè)寄存器時(shí)標(biāo)是表示有效寄存器集合并且在某些情況下表示棧頁槽集合的位或位時(shí)標(biāo)的集合。寄存器時(shí)標(biāo)內(nèi)所包括的位數(shù)例如可以根據(jù)與計(jì)算系統(tǒng)相關(guān)的處理器類型而變化很大。寄存器時(shí)標(biāo)被高效地用于描述與一個(gè)調(diào)用約定有關(guān)的值的位置。
一旦得到寄存器時(shí)標(biāo),則在步驟506,收集用于有效范圍的寄存器時(shí)標(biāo)的交集。如前所述,一個(gè)有效范圍是一個(gè)特定變量在其上保持可存取的范圍和距離。寄存器時(shí)標(biāo)的交集一般識(shí)別由多于一個(gè)值使用的寄存器或棧頁槽。換言之,寄存器時(shí)標(biāo)的交集提供一組用于干涉圖著色過程的“節(jié)點(diǎn)”,如下面參照?qǐng)D6所討論的。寄存器時(shí)標(biāo)交集的使用簡(jiǎn)化一個(gè)著色過程,因?yàn)橐话愦嬖谑S囝伾?。在交集用于一個(gè)特定有效范圍的寄存器時(shí)標(biāo)之后,如果寄存器時(shí)標(biāo)無顏色,則該有效范圍必須立即溢出。例如,如果一個(gè)輸入變量通過寄存器ECX,但在EDX內(nèi)用作一個(gè)輸出變量,則僅包含ECX和EDX的寄存器時(shí)標(biāo)的交集將為空。至少,需要ECX和EDX之間的復(fù)制。
在得到寄存器時(shí)標(biāo)的交集之后,則在步驟508執(zhí)行寄存器分配。下面將參照?qǐng)D6描述一種用于允許優(yōu)化編譯器以分配寄存器和棧頁槽的方法的實(shí)施例。該寄存器分配產(chǎn)生包括調(diào)用約定代碼的分配選擇。在步驟510將從步驟508的寄存器分配處理產(chǎn)生的分配選擇轉(zhuǎn)換為機(jī)器指令。一般地說,優(yōu)化編譯器將分配選擇轉(zhuǎn)換為機(jī)器指令。一旦分配選擇被轉(zhuǎn)換,就完成產(chǎn)生機(jī)器指令的處理。
參照?qǐng)D6,將描述根據(jù)本發(fā)明一個(gè)實(shí)施例的與分配寄存器和棧頁槽的過程、準(zhǔn)確地說即圖5的步驟508有關(guān)的步驟。具體地說,圖6描述與分配寄存器和棧頁槽協(xié)同操作的源代碼內(nèi)的干涉圖著色的性能。寄存器分配處理常常與干涉圖著色處理相關(guān)。分配存儲(chǔ)器空間的處理在步驟601開始,在這里,相對(duì)于源代碼插入被被調(diào)用者-保存有效范圍。處理流程從步驟601進(jìn)入步驟604,在這里創(chuàng)建,或“建立”一個(gè)用于特定源代碼段的干涉圖。源代碼段一般為基本上以任何適宜的程序設(shè)計(jì)語言,例如,C程序設(shè)計(jì)語言或Java字節(jié)代碼編寫的軟件應(yīng)用程序部分。通常,干涉圖的創(chuàng)建包括表示與源代碼內(nèi)的變量或值相關(guān)的有效范圍以及表示有效范圍之間的干涉,如前所述。從寄存器時(shí)標(biāo)的交集得到干涉圖的“節(jié)點(diǎn)”,如前面參照?qǐng)D5所描述的。
一旦建立干涉圖,則在步驟608試圖著色干涉圖。著色干涉圖包括在無沖突或干涉的情況下,將寄存器指定到不同的值。如本領(lǐng)域技術(shù)人員所知道的,用于著色一個(gè)干涉圖以執(zhí)行寄存器分配的方法可以變化很大。這樣的方法可以包括但不限于Briggs-Chaitin寄存器分配方法、the Chow style分配方法、以及l(fā)inear scan分配方法。
在步驟612就試圖著色干涉圖是否成功作出確定。換言之,確定在無任何沖突的情況下寄存器是否被指定給與干涉圖相關(guān)的所有變量。當(dāng)確定為試圖著色干涉圖不成功時(shí),則指示沒有足夠的寄存器使得在無沖突的情況下指定與干涉圖相關(guān)的所有變量。因此,在所述實(shí)施例,當(dāng)使用所有可用寄存器時(shí),分配棧頁槽用于變量存儲(chǔ)。
處理流程從步驟612進(jìn)入步驟616,在這里得到與干涉圖相關(guān)的有效范圍列表作為溢出候選者。即,識(shí)別可溢出到棧頁槽的值。通常,基本上可使用任何試探法以選擇溢出候選者。一般地說,選擇包括在試圖著色一個(gè)干涉圖之前,建立被被調(diào)用者-保存有效范圍,即,步驟601內(nèi)的建立??梢赃x擇被被調(diào)用者-保存有效范圍作為溢出候選者選擇處理的一部分。在所述實(shí)施例,溢出被被調(diào)用者-保存有效范圍高效地建立序言和收尾程序代碼。
在步驟620識(shí)別溢出候選者之后,復(fù)制指令被高效地指定或插入到定義周圍并使用相關(guān)的溢出候選者。在所述實(shí)施例,一個(gè)復(fù)制指令在與一個(gè)溢出候選者相關(guān)的定義之后并且在與一個(gè)溢出候選者相關(guān)、例如使用的指令之前指定。指定在定義或使用指令周圍的一個(gè)復(fù)制指令一般具有寄存器到寄存器,即,“reg-reg”復(fù)制指令的特征。如本領(lǐng)域技術(shù)人員所公知的,一個(gè)復(fù)制指令可以包括將值置于棧,但是一般不需要將值置于棧。一旦在步驟620將復(fù)制指令指定到定義周圍并使用相關(guān)的溢出候選者,則處理流程回到步驟604,在這里建立一個(gè)新的干涉圖。
回到步驟612并確定對(duì)著色的嘗試是否成功,當(dāng)確定為著色嘗試成功時(shí),則指示為溢出是不必要的。即,當(dāng)著色確定為成功時(shí),則不需要存儲(chǔ)變量的附加的棧頁槽。在所述實(shí)施例,一般存在與著色處理相關(guān)的剩余顏色。因此,對(duì)著色的嘗試一般是成功的。因此,處理流程進(jìn)入到步驟628,其中與復(fù)制指令相關(guān)的每個(gè)復(fù)制被指定在定義周圍并且評(píng)價(jià)使用以確定其是否對(duì)應(yīng)于一個(gè)存儲(chǔ)指令、一個(gè)加載指令或一個(gè)寄存器到寄存器復(fù)制指令。這樣的確定是必要的,因?yàn)镃PU內(nèi)的真實(shí)的復(fù)制指令一般不在棧頁槽和寄存器之間移動(dòng)值。為在棧頁槽和寄存器之間移動(dòng)值通常需要加載和存儲(chǔ)指令。
從步驟628,處理流程進(jìn)入步驟632,在這里確定包括步驟624分配的棧頁槽的棧幀尺寸。如前所述,調(diào)用約定代碼的產(chǎn)生使用諸如棧幀尺寸之類的信息。盡管棧幀尺寸可以基于各種不同尺寸系數(shù),在所述實(shí)施例,棧幀尺寸基于相關(guān)名稱內(nèi)的最大棧頁槽,如本領(lǐng)域技術(shù)人員所公知的。一旦確定棧幀尺寸,就在步驟636清零該棧。清零棧一般包括將復(fù)制適當(dāng)?shù)剞D(zhuǎn)換為加載和存儲(chǔ)。在所述實(shí)施例,不需要具體的“pass”以產(chǎn)生被被調(diào)用者-保存寄存器的保存和恢復(fù),即,序言和收尾程序代碼。在棧被清零之后,完成執(zhí)行分配的處理器。
圖7示出一個(gè)適用于實(shí)現(xiàn)本發(fā)明的典型的、一般的通用計(jì)算機(jī)系統(tǒng)。計(jì)算機(jī)系統(tǒng)1030包括任何數(shù)目的耦合到包括主存儲(chǔ)設(shè)備1034(一般為一個(gè)隨機(jī)存取存儲(chǔ)器或RAM)和主存儲(chǔ)設(shè)備1036(一般為只讀存儲(chǔ)器或ROM)的存儲(chǔ)器設(shè)備的處理器1032(還稱為中央處理單元或CPU)。
計(jì)算機(jī)系統(tǒng)1030或,具體地說,CPU1032可以用于支持一個(gè)虛擬機(jī),如本領(lǐng)域技術(shù)人員所公知的。下面參照?qǐng)D8將描述支持計(jì)算機(jī)系統(tǒng)1030的一個(gè)虛擬機(jī)的實(shí)例。如本領(lǐng)域技術(shù)人員所公知的,ROM用于單向傳送數(shù)據(jù)和指令到CPU1032,而RAM一般用于以雙向方式傳送數(shù)據(jù)和指令。CPU1032一般包括任何數(shù)目的處理器。兩個(gè)主存儲(chǔ)設(shè)備1034、1036可以包括任何適當(dāng)?shù)挠?jì)算機(jī)可讀介質(zhì)。一般為大容量存儲(chǔ)器設(shè)備的第二存儲(chǔ)介質(zhì)1038還雙向耦合到CPU1032并提供附加的數(shù)據(jù)存儲(chǔ)容量。大容量存儲(chǔ)器設(shè)備1038是可用于存儲(chǔ)包括計(jì)算機(jī)代碼,數(shù)據(jù),和類似數(shù)據(jù)的程序的計(jì)算機(jī)可讀介質(zhì)。一般地說,大容量存儲(chǔ)器設(shè)備1038是通常比主存儲(chǔ)設(shè)備1034、1036慢的諸如磁盤和磁帶之類的存儲(chǔ)介質(zhì)。大容量存儲(chǔ)器設(shè)備1038可以采取磁帶或紙帶讀取器的形式或某些其他公知的設(shè)備。應(yīng)該認(rèn)識(shí)到,在適當(dāng)?shù)那闆r下,大容量存儲(chǔ)器設(shè)備1038內(nèi)保留的信息可以加入到標(biāo)準(zhǔn)形式作為虛擬機(jī)的RAM1036的一部分。諸如CD-ROM之類的具體的主存儲(chǔ)設(shè)備1034可以單向通過數(shù)據(jù)到CPU1032。
CPU1032還耦合到一個(gè)或多個(gè)輸入/輸出設(shè)備1040,輸入/輸出設(shè)備1040可以包括但不限于諸如視頻監(jiān)視器、跟蹤球、鼠標(biāo)、鍵盤、麥克風(fēng)、觸摸-敏感顯示器、轉(zhuǎn)換器卡讀取器、磁帶或紙帶讀取器、輸入板、指示筆、語音或手寫識(shí)別器之類的設(shè)備或其他諸如自然包括其他計(jì)算機(jī)之類的公知輸入設(shè)備。最后,CPU1032可以使用一般在1012示出的網(wǎng)絡(luò)連接,可選地耦合到一個(gè)計(jì)算機(jī)或電信網(wǎng)絡(luò),例如,一個(gè)局域網(wǎng)、一個(gè)因特網(wǎng)或一個(gè)企業(yè)網(wǎng)。使用這樣的網(wǎng)絡(luò)連接,希望在執(zhí)行上述方法步驟的過程中CPU1032可以接收來自網(wǎng)絡(luò)的信息并將信息輸出到網(wǎng)絡(luò)。常常表示為使用CPU1032執(zhí)行的指令序列的這些信息可以例如以載波體現(xiàn)的計(jì)算機(jī)數(shù)據(jù)信號(hào)的形式從網(wǎng)絡(luò)接收并輸出到網(wǎng)絡(luò)。上述設(shè)備和材料為計(jì)算機(jī)硬件和軟件領(lǐng)域內(nèi)的技術(shù)人員所熟知。
如前所述,可以在計(jì)算機(jī)系統(tǒng)1030執(zhí)行虛擬機(jī)。圖8是圖7的計(jì)算機(jī)系統(tǒng)1030支持,并適用于實(shí)現(xiàn)本發(fā)明的虛擬機(jī)的圖示。當(dāng)執(zhí)行一個(gè)計(jì)算機(jī)程序,例如,以Palo Alto,California的SunMicrosystems開發(fā)的JavaTM程序設(shè)計(jì)語言編寫的計(jì)算機(jī)程序時(shí),在編譯時(shí)間環(huán)境1105將源代碼1110提供給編譯器1120。編譯器1120將源代碼1110轉(zhuǎn)換為字節(jié)代碼1130。通常,在軟件開發(fā)者創(chuàng)建源代碼1110時(shí)源代碼1110被轉(zhuǎn)換為字節(jié)代碼1130。
字節(jié)代碼1130一般被復(fù)制、下載或另外通過一個(gè)網(wǎng)絡(luò)、例如圖7的網(wǎng)絡(luò)1012分發(fā),或存儲(chǔ)在諸如圖7的主存儲(chǔ)器1034之類的設(shè)備。在所述實(shí)施例,字節(jié)代碼1130為與平臺(tái)無關(guān)的。即,基本上可以在運(yùn)行適當(dāng)?shù)奶摂M機(jī)1140的任何計(jì)算機(jī)系統(tǒng)執(zhí)行字節(jié)代碼1130。作為一個(gè)實(shí)例,在JavaTM環(huán)境下,字節(jié)代碼1130可以在運(yùn)行JavaTM虛擬機(jī)的計(jì)算機(jī)系統(tǒng)上執(zhí)行。
將字節(jié)代碼1130提供給包括虛擬機(jī)1140的運(yùn)行時(shí)環(huán)境1135。一般使用諸如圖7的CPU1032之類的處理器執(zhí)行運(yùn)行時(shí)環(huán)境1135。虛擬機(jī)1140包括一個(gè)編譯器1142,一個(gè)解釋器1144,和一個(gè)運(yùn)行時(shí)間系統(tǒng)1146。字節(jié)代碼1130一般可以提供給編譯器1142或解釋器1144。
當(dāng)字節(jié)代碼1130提供給編譯器1142時(shí),字節(jié)代碼1130所包含的方法被編譯為機(jī)器指令,如上所述。另一方面,當(dāng)字節(jié)代碼1130提供給解釋器1144時(shí),字節(jié)代碼1130一次一個(gè)字節(jié)地讀取到解釋器1144。接著在每個(gè)字節(jié)代碼被讀取到解釋器1144時(shí),解釋器1144執(zhí)行每個(gè)字節(jié)代碼定義的操作。通常,解釋器1144處理字節(jié)代碼1130并隨后連續(xù)執(zhí)行與字節(jié)代碼1130相關(guān)的操作。
當(dāng)從操作系統(tǒng)1160調(diào)用一個(gè)方法時(shí),如果確定調(diào)用該方法作為一個(gè)解釋方法,則運(yùn)行時(shí)間系統(tǒng)1146可以從解釋器1144得到該方法。如果,另一方面,確定調(diào)用該方法作為一個(gè)編譯方法,則運(yùn)行時(shí)間系統(tǒng)1146啟動(dòng)編譯器1142。接著編譯器1142從字節(jié)代碼1130產(chǎn)生機(jī)器指令,并執(zhí)行機(jī)器語言指令。通常,當(dāng)虛擬機(jī)1140終止時(shí)放棄該機(jī)器語言指令。
盡管已經(jīng)描述了本發(fā)明的幾個(gè)實(shí)施例,應(yīng)該明白,在不脫離本發(fā)明的精神和范圍的情況下,本發(fā)明可以以多種具體的形式體現(xiàn)。作為一個(gè)實(shí)例,可以記錄,移走或增加產(chǎn)生與調(diào)用約定有關(guān)的機(jī)器指令所包含的步驟。通常,在不脫離本發(fā)明的精神和范圍的情況下,可以記錄、移走或增加使用本發(fā)明方法所包含的步驟。
如本領(lǐng)域技術(shù)人員所公知的,一個(gè)被被調(diào)用者-保存寄存器是一個(gè)子程序調(diào)用不破壞其內(nèi)容的寄存器。一個(gè)被被調(diào)用者-保存寄存器的實(shí)例是Intel 80×86CPU內(nèi)的EDI寄存器。一般地說,一個(gè)計(jì)算機(jī)系統(tǒng)不使用與被被調(diào)用者-保存寄存器相關(guān)的寄存器空間。相反,計(jì)數(shù)所使用的被被調(diào)用者-保存寄存器的數(shù)目,并且執(zhí)行一個(gè)溢出以得到補(bǔ)償所有前面的被被調(diào)用者-保存寄存器的棧頁槽。通過將與被被調(diào)用者-保存寄存器相關(guān)的信息存儲(chǔ)到棧,使用被被調(diào)用者-保存寄存器作為一個(gè)“常規(guī)”寄存器,接著將相關(guān)信息返回到被被調(diào)用者-保存寄存器可以將本發(fā)明用于被被調(diào)用者-保存寄存器。具體地說,無論何時(shí)試圖避免使用與被被調(diào)用者-保存寄存器相關(guān)的空間。然而,當(dāng)需要空間時(shí),該空間被聲明使用。應(yīng)該明白,基本上自動(dòng)產(chǎn)生調(diào)用約定代碼的一個(gè)寄存器分配器一般用于處理到調(diào)用的輸入變量,來自調(diào)用,被被調(diào)用者-保存寄存器以及被調(diào)用者-保存寄存器的輸出變量。
盡管一種使用寄存器分配器建立一個(gè)調(diào)用約定的被描述為包括使用寄存器分配器根據(jù)需要分配棧頁槽,應(yīng)該明白,替換的方法和機(jī)構(gòu)可以用于分配棧頁槽。例如,可以使用常規(guī)方法分配棧頁槽。
與寄存器時(shí)標(biāo)相關(guān)的位數(shù)例如根據(jù)該寄存器時(shí)標(biāo)相關(guān)的平臺(tái)可以變化很大。盡管本發(fā)明描述為適用于Intel平臺(tái),本發(fā)明基本上可以適用于任何適當(dāng)?shù)钠脚_(tái),這些平臺(tái)包括但不限于Power PC平臺(tái)和Spare平臺(tái)。因此,本發(fā)明實(shí)例被認(rèn)為是示意性的但不具備限定性,并且本發(fā)明不被本文所給出的細(xì)節(jié)所限定,在附屬權(quán)利要求書的范圍內(nèi)可以修改本發(fā)明。
權(quán)利要求
1.一種用于產(chǎn)生與調(diào)用約定有關(guān)的代碼的計(jì)算機(jī)實(shí)現(xiàn)的方法,計(jì)算機(jī)實(shí)現(xiàn)的方法包括獲得源代碼,源代碼適合于由一個(gè)編譯器編譯,其中編譯器包括一個(gè)用于分配存儲(chǔ)器空間的寄存器分配器;識(shí)別至少一個(gè)與調(diào)用約定有關(guān)的變量,其中存儲(chǔ)器空間內(nèi)的變量位置由一個(gè)寄存器時(shí)標(biāo)描述;以及使用寄存器分配器執(zhí)行寄存器分配過程,其中該寄存器分配過程用于產(chǎn)生與調(diào)用約定有關(guān)的代碼。
2.一種用于建立一個(gè)調(diào)用約定的計(jì)算機(jī)實(shí)現(xiàn)的方法,在基于對(duì)象的系統(tǒng)該調(diào)用約定與一個(gè)到子程序的調(diào)用相關(guān),該計(jì)算機(jī)實(shí)現(xiàn)的方法包括獲得源代碼,源代碼適合于編譯;創(chuàng)建多個(gè)寄存器時(shí)標(biāo),多個(gè)寄存器時(shí)標(biāo)中的每一個(gè)具有一個(gè)相關(guān)變量,每個(gè)相關(guān)變量具有一個(gè)相關(guān)有效范圍,每個(gè)相關(guān)變量被進(jìn)一步包括在源代碼內(nèi);確定多個(gè)寄存器時(shí)標(biāo)的一個(gè)交集;以及執(zhí)行寄存器分配,其中執(zhí)行寄存器分配包括使用交集并產(chǎn)生與調(diào)用約定有關(guān)的代碼。
3.如權(quán)利要求2所述的計(jì)算機(jī)實(shí)現(xiàn)的方法,進(jìn)一步包括將與調(diào)用約定有關(guān)的代碼轉(zhuǎn)換為機(jī)器指令,該機(jī)器指令適合于由一個(gè)計(jì)算系統(tǒng)執(zhí)行。
4.如權(quán)利要求2和3中的一個(gè)所述的計(jì)算機(jī)實(shí)現(xiàn)的方法,其中確定多個(gè)寄存器時(shí)標(biāo)的一個(gè)交集包括識(shí)別用于與該交集有關(guān)的一個(gè)變量的有效寄存器。
5.如權(quán)利要求2和3中的一個(gè)所述的計(jì)算機(jī)實(shí)現(xiàn)的方法,其中確定多個(gè)寄存器時(shí)標(biāo)的一個(gè)交集包括識(shí)別用于與該交集有關(guān)的一個(gè)變量的棧頁槽。
6.如權(quán)利要求2-5中任何一個(gè)所述的計(jì)算機(jī)實(shí)現(xiàn)的方法,進(jìn)一步包括使用交集產(chǎn)生干涉圖。
7.如權(quán)利要求6所述的計(jì)算機(jī)實(shí)現(xiàn)的方法,進(jìn)一步包括著色干涉圖。
8.如權(quán)利要求2-7中任何一個(gè)所述的計(jì)算機(jī)實(shí)現(xiàn)的方法,其中執(zhí)行寄存器分配包括分配一個(gè)寄存器;和分配一個(gè)棧頁槽。
9.一種用于建立一個(gè)調(diào)用約定的計(jì)算機(jī)系統(tǒng),在與該計(jì)算機(jī)系統(tǒng)相關(guān)的基于對(duì)象的系統(tǒng)中,該調(diào)用約定與一個(gè)到子程序的調(diào)用相關(guān),該計(jì)算機(jī)系統(tǒng)包括一個(gè)處理器;源代碼輸入機(jī)構(gòu),用于獲得源代碼,源代碼適合于編譯;寄存器時(shí)標(biāo)發(fā)生器,用于創(chuàng)建多個(gè)寄存器時(shí)標(biāo),多個(gè)寄存器時(shí)標(biāo)中的每一個(gè)具有一個(gè)相關(guān)變量,每個(gè)相關(guān)變量具有一個(gè)相關(guān)有效范圍;確定器,用于確定多個(gè)寄存器時(shí)標(biāo)的一個(gè)交集;和編譯器,該編譯器包括一個(gè)寄存器分配器,其中該寄存器分配器用于使用交集產(chǎn)生與調(diào)用約定有關(guān)的代碼。
10.如權(quán)利要求9所述的計(jì)算機(jī)系統(tǒng),其中編譯器用于將與調(diào)用約定有關(guān)的代碼轉(zhuǎn)換為機(jī)器指令,該機(jī)器指令適合于執(zhí)行。
11.如權(quán)利要求9和10所述的計(jì)算機(jī)系統(tǒng),其中該寄存器分配器進(jìn)一步用于分配一個(gè)寄存器以及分配一個(gè)棧頁槽。
12.一種用于在基于對(duì)象的系統(tǒng)中建立調(diào)用約定的計(jì)算機(jī)程序產(chǎn)品,該計(jì)算機(jī)程序產(chǎn)品包括用于創(chuàng)建多個(gè)寄存器時(shí)標(biāo)的計(jì)算機(jī)代碼,多個(gè)寄存器時(shí)標(biāo)中的每一個(gè)具有一個(gè)相關(guān)變量,每個(gè)相關(guān)變量具有一個(gè)相關(guān)有效范圍;用于確定多個(gè)寄存器時(shí)標(biāo)的一個(gè)交集的計(jì)算機(jī)代碼;用于分配寄存器的計(jì)算機(jī)代碼,用于分配寄存器的計(jì)算機(jī)代碼包括用于使用交集產(chǎn)生調(diào)用約定的計(jì)算機(jī)代碼;和一個(gè)存儲(chǔ)計(jì)算機(jī)代碼的計(jì)算機(jī)可讀介質(zhì)。
13.如權(quán)利要求12所述的計(jì)算機(jī)程序產(chǎn)品,其中計(jì)算機(jī)可讀介質(zhì)是從由以載波、軟盤、CD-ROM、帶驅(qū)動(dòng)器、光盤驅(qū)動(dòng)器、閃速存儲(chǔ)器以及硬盤驅(qū)動(dòng)器體現(xiàn)的數(shù)據(jù)信號(hào)組成的組中選擇的一個(gè)。
全文摘要
公開一種用于使一個(gè)寄存器分配器建立一個(gè)調(diào)用約定的方法和裝置。根據(jù)本發(fā)明的一個(gè)方面,一種用于產(chǎn)生與調(diào)用約定有關(guān)的代碼的計(jì)算機(jī)實(shí)現(xiàn)的方法包括獲得源代碼,并識(shí)別至少一個(gè)與調(diào)用約定有關(guān)的變量。由一個(gè)寄存器時(shí)標(biāo)描述變量相對(duì)于存儲(chǔ)器空間的位置。該方法還包括使用用于分配寄存器的寄存器分配器執(zhí)行寄存器分配。在寄存器分配期間,在不需要使用特定的序言和收尾程序代碼發(fā)生器的情況下由分配器內(nèi)的溢出-代碼機(jī)構(gòu)自動(dòng)產(chǎn)生與調(diào)用約定有關(guān)的代碼。
文檔編號(hào)G06F9/45GK1271889SQ00107019
公開日2000年11月1日 申請(qǐng)日期2000年4月24日 優(yōu)先權(quán)日1999年4月23日
發(fā)明者小C·N·克利克, C·A·維克, M·H·帕萊茨尼 申請(qǐng)人:太陽微系統(tǒng)有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
松江区| 英德市| 聂拉木县| 贡觉县| 泸西县| 化隆| 瑞丽市| 贵南县| 子长县| 南澳县| 建昌县| 曲周县| 柘荣县| 岑巩县| 霍邱县| 东山县| 富阳市| 丹棱县| 曲松县| 淮滨县| 卓尼县| 沐川县| 云浮市| 肇州县| 兰州市| 霍山县| 墨竹工卡县| 新乐市| 富宁县| 土默特右旗| 哈巴河县| 宜昌市| 那曲县| 临夏县| 蓬溪县| 遂溪县| 祁连县| 普兰店市| 金湖县| 静海县| 夏津县|