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

計(jì)算機(jī)系統(tǒng)和改編計(jì)算機(jī)系統(tǒng)以使其支持寄存器窗口架構(gòu)的方法

文檔序號(hào):6456059閱讀:248來(lái)源:國(guó)知局

專利名稱::計(jì)算機(jī)系統(tǒng)和改編計(jì)算機(jī)系統(tǒng)以使其支持寄存器窗口架構(gòu)的方法
技術(shù)領(lǐng)域
:本發(fā)明通常涉及計(jì)算機(jī)和計(jì)算機(jī)系統(tǒng)領(lǐng)域。更具體地講,本發(fā)明涉及一種被改編以支持寄存器窗口架構(gòu)的計(jì)算機(jī)系統(tǒng)以及一種改編計(jì)算機(jī)系統(tǒng)以使其支持寄存器窗口架構(gòu)的方法。
背景技術(shù)
:中央處理單元(CPU)或處理器處于所有現(xiàn)代計(jì)算系統(tǒng)的心臟。處理器執(zhí)行計(jì)算機(jī)程序的指令,從而使計(jì)算機(jī)能夠執(zhí)行有用的工作。不僅在諸如個(gè)人計(jì)算機(jī)、膝上型電腦和PDA的專用計(jì)算機(jī)器中,在現(xiàn)代生活中的所有形式的數(shù)字裝置中都普遍存在CPU?,F(xiàn)代微處理器出現(xiàn)在從汽車到洗衣機(jī)到兒童玩具的每一件物品中。產(chǎn)生這樣的問(wèn)題可由一種類型的處理器執(zhí)行的程序代碼經(jīng)常不能由任何其它類型的處理器執(zhí)行。首先,每一種類型的處理器具有其自身的獨(dú)特指硬件特點(diǎn)。因此,程序代碼轉(zhuǎn)換領(lǐng)域已經(jīng)發(fā)展為將為一種類型的處理器撰寫的程序代碼自動(dòng)轉(zhuǎn)換為可由另一種類型的處理器執(zhí)行的代碼,或者針對(duì)同一類型的處理器將舊的、效率低的一段代碼優(yōu)化為更新更快的版本。即,在嵌入式和非嵌入式CPU中,有主導(dǎo)ISA(針對(duì)主導(dǎo)ISA,大部分軟件已經(jīng)存在),這些主導(dǎo)ISA可以進(jìn)行性能"加速"或者被"翻譯"給體現(xiàn)出更好的成本/性能效益的其它處理器。還發(fā)現(xiàn)主導(dǎo)CPU架構(gòu),這些主導(dǎo)CPU架構(gòu)被實(shí)時(shí)地鎖定于其ISA并且在性能或者市場(chǎng)占有方面無(wú)法發(fā)展。這一問(wèn)題涉及所有級(jí)別的電子產(chǎn)業(yè),從獨(dú)立袖珍式裝置直到具有幾十或幾百個(gè)強(qiáng)大的計(jì)算機(jī)的大規(guī)模網(wǎng)絡(luò)。作為程序代碼轉(zhuǎn)換這一領(lǐng)域的背景信息,名稱為"ProgramCodeConversion"的WO2000/22521號(hào)PCT公布、名稱為"MethodandApparatusforPerformingInterpreterOptimizationsduringProgramCodeConversion"的WO2004/095264號(hào)PCT乂^布、名稱為"ImprovedArchitectureforGeneratingIntermediateRepresentationsforProgramCodeConversion"的WO2004/097631號(hào)PCT公布、名稱為"MethodandApparatusforPerformingAdjustablePrecisionExceptionHandling"的WO2005/006106號(hào)PCT公布以及名稱為"MethodandApparatusforPreciseHandlingofExceptionsDuringProgramCodeConversion"的WO2006/103395號(hào)PCT公布通過(guò)引用全部包含于此,這些PCT公布公開了提高程序代碼轉(zhuǎn)換能力的方法和設(shè)備,這些方法和設(shè)備可在這里所討論的示例實(shí)施例中采用。大部分現(xiàn)代處理器包括一組寄存器作為快速存取存儲(chǔ)器。處理器在執(zhí)行計(jì)算機(jī)程序中的指令序列時(shí)利用這些寄存器來(lái)保存臨時(shí)值。處理器硬件包含有限數(shù)量的這種寄存器,并且在使用中,程序的執(zhí)行會(huì)很容易地使臨時(shí)數(shù)據(jù)值填滿所有可用的寄存器。當(dāng)處理器從一個(gè)代碼段移動(dòng)到另一代碼段時(shí),這會(huì)導(dǎo)致對(duì)可用寄存器的竟?fàn)?,因?yàn)槊恳淮a段均將產(chǎn)生臨時(shí)值并將需要使用處理器中的寄存器來(lái)存儲(chǔ)這些臨時(shí)數(shù)據(jù)值。響應(yīng)這一困難,已開發(fā)出具有寄存器窗口架構(gòu)的處理器。例如,二十世紀(jì)九十年代初的基于BerkeleyRISC設(shè)計(jì)的寄存器窗口架構(gòu)提供一個(gè)大的硬件寄存器集(寄存器文件),并且僅允許這些寄存器中的一個(gè)小的子集(寄存器窗口)被當(dāng)前代碼段訪問(wèn)。寄存器文件中位于寄存器窗口的當(dāng)前位置之外的其它寄存器不能被當(dāng)前的計(jì)算機(jī)程序段訪問(wèn)。例如,在總共64個(gè)寄存器的寄存器文件中,任何時(shí)候都僅有8個(gè)寄存器是可見的。當(dāng)處理器從一個(gè)代碼段移動(dòng)到另一個(gè)代碼段時(shí),例如在執(zhí)行進(jìn)程調(diào)用時(shí),寄存器窗口在寄存器文件中移動(dòng)位置并為新的代碼段暴露不同的寄存器子集。這些移動(dòng)大致分為兩類一類引起SAVE(保存)類型的移動(dòng),其中,寄存器窗口移動(dòng)到先前未使用過(guò)的位置,從而為正在執(zhí)行的對(duì)象代碼呈現(xiàn)一組干凈的硬件寄存器;另一類是RESTORE(恢復(fù))類型的移動(dòng),該移動(dòng)將寄存器窗口往回向著先前暴露過(guò)的位置移位,從而將一組先前使用過(guò)的寄存器展現(xiàn)給正在執(zhí)行的代碼,從而恢復(fù)對(duì)這些寄存器中保存的數(shù)據(jù)值的訪問(wèn)。然而,取決于執(zhí)行程序所調(diào)用的進(jìn)程調(diào)用級(jí)別的數(shù)量,寄存器文件中的有限數(shù)量的硬件寄存器最終將被耗盡。這里,執(zhí)行SPILL(溢出)操作,寄存器中的數(shù)據(jù)值藉此被移動(dòng)到安全位置,例如處理器之外的第二級(jí)存儲(chǔ)器中。稍后,F(xiàn)ILL(載入)操作將這些數(shù)據(jù)值移回到硬件寄存器中以便處理器能夠繼續(xù)執(zhí)行相關(guān)的代碼段。這種寄存器窗口架構(gòu)的目的在于通過(guò)為大部分計(jì)算機(jī)程序避免費(fèi)時(shí)費(fèi)力的寄存器溢出和載入操作來(lái)使計(jì)算系統(tǒng)更快地執(zhí)行,特別是在處理器頻繁地從一個(gè)代碼段移動(dòng)到另一個(gè)代碼段,然后返回到最初的代碼段(即,執(zhí)行進(jìn)程調(diào)用)時(shí)。這種寄存器窗口架構(gòu)已經(jīng)-故諸如SPARC、AMD2卯00和Inteli960的處理器大規(guī)模地商業(yè)應(yīng)用。因此,已經(jīng)撰寫了僅在這些架構(gòu)上執(zhí)行且不能由任何其它類型的處理器執(zhí)行的大部分代碼。在這些商業(yè)處理器中,SPARC特別流行。在例如由佛羅里達(dá)州圣何塞市SPARC國(guó)際公司公布的"SPARC架構(gòu)指南(第八版)"第4.1節(jié)"寄存器"以及"SPARC架構(gòu)指南(第九版)"第5.1節(jié)"寄存器"中可以找到關(guān)于SPARC寄存器窗口架構(gòu)的進(jìn)一步的背景信息,所述內(nèi)容通過(guò)引用包含于此。作為示例,圖1示出在現(xiàn)有技術(shù)的第9版本的SPARC架構(gòu)中的寄存器窗口的使用。第9版本的SPARC架構(gòu)提供多個(gè)控制/狀態(tài)寄存器和大量通用("r")寄存器。通用寄存器包括8個(gè)永久可見的全局寄存器(和另外8個(gè)備用全局寄存器)以及可移動(dòng)的24-寄存器窗口,該24-寄存器窗口被劃分為8個(gè)"in"寄存器、8個(gè)"local(局部)"寄存器和8個(gè)"out"寄存器??偧拇嫫魑募械漠?dāng)前窗口由控制/狀態(tài)寄存器之一中保存的"當(dāng)前窗口指針(CWP)"給出。每次執(zhí)行"restore"指令時(shí),CWP增加;每次執(zhí)行"save"指令或者當(dāng)發(fā)生陷阱(trap)時(shí),CWP減小。在該示例中,24-寄存器窗口與相鄰窗口位置部分重疊,例如一個(gè)窗口位置的8個(gè)"out"寄存器與相鄰窗口位置的8個(gè)"in"寄存器重疊,同時(shí)對(duì)于每一窗口位置,局部寄存器是獨(dú)有的。也就是說(shuō),窗口位置CWP+1的"out"寄存器也可按照相鄰窗口位置CWP的"in"寄存器進(jìn)行尋址。此外,當(dāng)前窗口CWP的"out"寄存器等同于下一窗口CWP-1的"in"寄存器。第9版本的SPARC架構(gòu)支持最少3個(gè)到最多32個(gè)的窗口位置,這取決于具體的硬件實(shí)現(xiàn)。因此,連同永久可見的全局寄存器,第9版本的SPARC架構(gòu)需要64至528個(gè)通用硬件寄存器(8個(gè)全局寄存器、8個(gè)備用全局寄存器以及每一窗口位置所需的16個(gè)寄存器)。圖2示出在示例第9版本的SPARC架構(gòu)中的窗口化的寄存器文件的環(huán)形特征。硬件寄存器的數(shù)量有限,并且在本示例中,存在與8個(gè)寄存器窗口位置對(duì)應(yīng)的128個(gè)窗口化的硬件寄存器。圖2示出窗口位置W0作為當(dāng)前窗口(CWP=0)。如果利用當(dāng)前窗口位置WO的過(guò)程^丸行RESTORE,則窗口位置W7將變?yōu)楫?dāng)前窗口(CWP=+1)。如果位置WO處的過(guò)程改為執(zhí)行SAVE,當(dāng)前窗口。當(dāng)所有的寄存器窗口位置均已被消耗時(shí),即由于這些寄存器已經(jīng)包含來(lái)自于之前執(zhí)行的程序代碼段的有效數(shù)據(jù),從而不應(yīng)該被覆寫時(shí),發(fā)生窗口上溢陷阱。在示例第9版本的架構(gòu)中,利用鏈接到CWP的CANSAVE控制/狀態(tài)寄存器來(lái)檢測(cè)窗口上溢。此時(shí),寄存器的內(nèi)容被溢出到存儲(chǔ)器的較慢的存取區(qū)域,如主對(duì)象存儲(chǔ)器8的執(zhí)行堆棧,以便在不覆寫寄存器文件中存儲(chǔ)的有效數(shù)據(jù)的情況下繼續(xù)執(zhí)行。當(dāng)程序最終恢復(fù)到再次需要原始寄存器值的點(diǎn)時(shí),載入操作將寄存器值從所述堆棧載回到寄存器文件的硬件寄存器中。這里,參考CANRESTORE控制/狀態(tài)寄存器,窗口下溢陷阱防止寄存器窗口的無(wú)效恢復(fù)移動(dòng)。在本示例中,原始程序代碼(這里被稱作"對(duì)象代碼")依賴于具有寄存器窗口架構(gòu)的特定類型的對(duì)象硬件。然而,在本發(fā)明的程序代碼轉(zhuǎn)換領(lǐng)域,對(duì)象代碼被轉(zhuǎn)換為目標(biāo)代碼并由目標(biāo)計(jì)算系統(tǒng)執(zhí)行。也就是說(shuō),并非使用較新的目標(biāo)計(jì)算機(jī)系統(tǒng)替代基于該寄存器窗口架構(gòu)的較舊的對(duì)象計(jì)算機(jī)系統(tǒng),而是期望使目標(biāo)計(jì)算機(jī)系統(tǒng)支持對(duì)象計(jì)算系統(tǒng)的寄存器窗口架構(gòu)。本發(fā)明的目的在于提供一種被改編以支持寄存器窗口架構(gòu)的計(jì)算系統(tǒng)。示例性實(shí)施例的目的在于改編計(jì)算機(jī)系統(tǒng)以使其支持外來(lái)的、非本地的寄存器窗口架構(gòu)。
發(fā)明內(nèi)容根據(jù)本發(fā)明,提供如所附權(quán)利要求中所闡述的一種計(jì)算系統(tǒng)、一種改編計(jì)算機(jī)系統(tǒng)的方法以及一種計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)。從所附權(quán)利要求以及跟隨的描述,本發(fā)明的其它特征將是明顯的。在本發(fā)明的一個(gè)示例性方面,提供一種至少包括解碼器單元、編碼器單元、存儲(chǔ)器和目標(biāo)處理器的計(jì)算系統(tǒng)。解碼器單元被布置為將可由基于寄存器窗口的對(duì)象計(jì)算架構(gòu)的對(duì)象處理器執(zhí)行的對(duì)象代碼解碼,在該基于寄存器窗口的對(duì)象計(jì)算架構(gòu)中,當(dāng)前寄存器窗口被定位為使從窗口化的寄存器文件中選擇的對(duì)象寄存器的子集顯露。所述對(duì)象代碼包括基于窗口的指令和基于寄存器的指令,基于窗口的指令影響與寄存器文件有關(guān)的寄存器窗口的位置,基于寄存器的指令包含對(duì)寄存器窗口中的寄存器的引用。解碼器單元還被布置為識(shí)別對(duì)象代碼中的意圖引起寄存器窗口的移動(dòng)的基于窗口的指令,并從基于窗口的指令獲得寄存器窗口移動(dòng)信息。此外,解碼器單元被布置為識(shí)別對(duì)象代碼中的基于寄存器的指令,并從基于寄存器的指令獲得一個(gè)或多個(gè)窗口化的對(duì)象寄存器引用。存儲(chǔ)器包括堆棧數(shù)據(jù)結(jié)構(gòu),該堆棧數(shù)據(jù)結(jié)構(gòu)被布置為存儲(chǔ)多個(gè)條目。編碼器單元被布置為從解碼器單元所解碼的對(duì)象代碼產(chǎn)生目標(biāo)代碼。目標(biāo)處理器被布置為執(zhí)行由編碼器單元產(chǎn)生的目標(biāo)代碼。目標(biāo)代碼在目標(biāo)處理器上的執(zhí)行設(shè)置與堆棧數(shù)據(jù)結(jié)構(gòu)的頭有關(guān)的堆棧指針,參考由解碼器單元獲得的寄存器窗口移動(dòng)信息調(diào)節(jié)該堆棧指針,參考該堆棧指針與從解碼器單元所獲得的每一窗口化的對(duì)象寄存器引用確定的位移的組合來(lái)訪問(wèn)堆棧數(shù)據(jù)結(jié)構(gòu)中的條目。在本發(fā)明的另一示例性方面中,提供一種改編計(jì)算系統(tǒng)以使其支持寄存器窗口架構(gòu)的方法。該方法包括步驟將可由基于寄存器窗口的對(duì)象計(jì)算架構(gòu)的對(duì)象處理器執(zhí)行的對(duì)象代碼解碼,其中,寄存器窗口被定位為使從窗口化的寄存器文件中選擇的對(duì)象寄存器的子集顯露,包括從對(duì)象代碼中的指令識(shí)別窗口化的對(duì)象寄存器引用,以及從對(duì)象代碼中的導(dǎo)致寄存器窗口的移動(dòng)的指令獲得寄存器窗口移動(dòng)信息,其中所述窗口化的對(duì)象寄存器引用包括對(duì)寄存器窗口中的所述對(duì)象寄存器之一的引用;在計(jì)算系統(tǒng)的存儲(chǔ)器中設(shè)置堆棧數(shù)據(jù)結(jié)構(gòu),并設(shè)置指示在存儲(chǔ)器中該堆棧數(shù)據(jù)結(jié)構(gòu)的頭的堆棧指針,其中該堆棧數(shù)據(jù)結(jié)構(gòu)被布置為存儲(chǔ)多個(gè)條目;將對(duì)象代碼轉(zhuǎn)換為目標(biāo)代碼,并在計(jì)算系統(tǒng)的目標(biāo)處理器上執(zhí)行該目標(biāo)代碼;參考識(shí)別出的寄存器窗口移動(dòng)信息調(diào)節(jié)堆棧指針;參考堆棧指針與從窗口化的對(duì)象寄存器引用確定的位移的組合來(lái)訪問(wèn)堆棧數(shù)據(jù)結(jié)構(gòu)中的至少一個(gè)條目。在本發(fā)明的另一示例性方面,提供一種記錄有計(jì)算機(jī)可實(shí)現(xiàn)的指令的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),當(dāng)所述計(jì)算機(jī)可實(shí)現(xiàn)的指令被執(zhí)行時(shí),改編計(jì)算系統(tǒng)以使其支持寄存器窗口架構(gòu),其中,該計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)包括被布置為將可由基于寄存器窗口的對(duì)象計(jì)算架構(gòu)的對(duì)象處理器執(zhí)行的對(duì)象代碼解碼的代碼單元,在所述基于寄存器窗口的對(duì)象計(jì)算架構(gòu)中,當(dāng)前寄存器窗口被定位為使從窗口化的寄存器文件中選擇的對(duì)象寄存器的子集顯露,所述解碼包括從對(duì)象代碼中的指令識(shí)別窗口化的對(duì)象寄存器引用,以及從對(duì)象代碼中的導(dǎo)致寄存器窗口的移動(dòng)的指令獲得寄存器窗口移動(dòng)信息,其中所述窗口化的對(duì)象寄存器引用包括對(duì)寄存器窗口中的所述對(duì)象寄存器之一的引用;被布置為在計(jì)算系統(tǒng)的存儲(chǔ)器中設(shè)置堆棧數(shù)據(jù)結(jié)構(gòu)并設(shè)置堆棧指針的代碼單元,其中該堆棧數(shù)據(jù)結(jié)構(gòu)被布置為存儲(chǔ)多個(gè)條目,所述堆棧指針指示在存儲(chǔ)器中該堆棧數(shù)據(jù)結(jié)構(gòu)的頭;被布置為將對(duì)象代碼轉(zhuǎn)換為目標(biāo)代碼并使該目標(biāo)代碼在計(jì)算系統(tǒng)的處理器上執(zhí)行,從而參考識(shí)別出的寄存器窗口移動(dòng)信息調(diào)節(jié)堆棧指針,并且參考調(diào)節(jié)的堆棧指針與從窗口化的對(duì)象寄存器引用確定的位移的組合來(lái)訪問(wèn)堆棧數(shù)據(jù)結(jié)構(gòu)中的至少一個(gè)條目的代碼單元。本發(fā)明的示例性實(shí)施例涉及改編計(jì)算系統(tǒng)以使其支持寄存器窗口架構(gòu)的機(jī)制,特別適用于將用于對(duì)象計(jì)算系統(tǒng)的對(duì)象處理器的對(duì)象代碼轉(zhuǎn)換為由目標(biāo)計(jì)算系統(tǒng)上的目標(biāo)處理器執(zhí)行的目標(biāo)代碼。該機(jī)制在目標(biāo)計(jì)算系統(tǒng)的存儲(chǔ)器中設(shè)置堆棧數(shù)據(jù)結(jié)構(gòu)(SR堆棧)。SR堆棧具有多個(gè)幀。SR堆棧上的每一幀存儲(chǔ)一組條目,所述條目與對(duì)象代碼所尋址的寄存器窗口中的窗口化的對(duì)象寄存器子集對(duì)應(yīng)。然后,在目標(biāo)計(jì)算架構(gòu)上執(zhí)行的目標(biāo)代碼訪問(wèn)SR堆棧。SR堆棧能夠存儲(chǔ)大量這樣的幀,避免了諸如模擬從對(duì)象架構(gòu)的窗口化的寄存器文件的自動(dòng)溢出和載入操作的開銷。在一個(gè)示例性實(shí)施例中,僅具有16個(gè)工作寄存器的目標(biāo)計(jì)算系統(tǒng)被改編以支持表現(xiàn)依賴幾十甚至幾百個(gè)對(duì)象寄存器的窗口化的寄存器文件的寄存器窗口架構(gòu)。此外,即使在目標(biāo)計(jì)算系統(tǒng)被改編為支持寄存器窗口架構(gòu)時(shí),示例性實(shí)施例也允許目標(biāo)計(jì)算系統(tǒng)的有效率的操作,特別是在處理速度方面。為了更好地理解本發(fā)明并示出可如何實(shí)現(xiàn)本發(fā)明的實(shí)施例,現(xiàn)在將以示例的方式說(shuō)明附圖,其中圖1示出在現(xiàn)有技術(shù)的示例對(duì)象計(jì)算架構(gòu)中的寄存器文件部分;圖2進(jìn)一步示出在現(xiàn)有技術(shù)的示例對(duì)象計(jì)算架構(gòu)中的寄存器文件;圖3是由本發(fā)明的示例性實(shí)施例采用的設(shè)備的示意性框圖4是由本發(fā)明的示例性實(shí)施例采用的程序代碼轉(zhuǎn)換處理的示意性概括圖5是由本發(fā)明的示例性實(shí)施例提供的寄存器窗口仿真機(jī)制的示意性概括圖6是圖5的寄存器窗口仿真機(jī)制的更詳細(xì)的示意圖;圖7是進(jìn)一步示出圖5和圖6的寄存器窗口仿真機(jī)制的示例實(shí)施例的表;圖8A和圖8B是進(jìn)一步示出圖5和圖6的寄存器窗口仿真機(jī)制的另一示例實(shí)施例的表;圖9是示出根據(jù)本發(fā)明示例性實(shí)施例的改編計(jì)算機(jī)系統(tǒng)以使其支持寄存器窗口架構(gòu)的方法的示意性流程圖10是示出本發(fā)明的示例性實(shí)施例的計(jì)算系統(tǒng)中的存儲(chǔ)器的選擇的部分的示意圖;.圖11是示出執(zhí)行本發(fā)明的示例性實(shí)施例的傳遞機(jī)制的示例方法的示意性流程圖12A和圖12B是更詳細(xì)地示出該傳遞機(jī)制的示意圖。具體實(shí)施例方式提供下面的描述以使本領(lǐng)域的技術(shù)人員能夠?qū)崿F(xiàn)并使用本發(fā)明,下面的描述闡述發(fā)明人預(yù)期的執(zhí)行其發(fā)明的最佳方式。然而,各種修改對(duì)于本領(lǐng)域技術(shù)人員而言仍然是明顯的,因?yàn)檫@里已經(jīng)具體定義了本發(fā)明的一般原理以提供改善的程序代碼轉(zhuǎn)換方法和設(shè)備。參照?qǐng)D3,對(duì)象程序17意圖在具有對(duì)象處理器3的對(duì)象計(jì)算平臺(tái)1上執(zhí)行。這里,對(duì)象計(jì)算平臺(tái)1可以是任何形式的電子裝置,該電子裝置依賴于對(duì)象處理器3中的計(jì)算操作來(lái)操作該裝置。然而,目標(biāo)計(jì)算平臺(tái)IO用于通過(guò)翻譯器單元19來(lái)執(zhí)行對(duì)象程序17,該翻譯器單元19執(zhí)行程序代碼轉(zhuǎn)換。這里,翻譯器單元19將對(duì)象代碼17轉(zhuǎn)換為目標(biāo)代碼21,以使得目標(biāo)代碼21能夠被目標(biāo)計(jì)算平臺(tái)IO執(zhí)行。如本領(lǐng)域技術(shù)人員所熟悉的,對(duì)象處理器3具有一組對(duì)象寄存器5。除了其它內(nèi)容,對(duì)象存儲(chǔ)器8還保存對(duì)象代碼17和對(duì)象操作系統(tǒng)2。類似地,圖3中的示例目標(biāo)計(jì)算平臺(tái)10包括具有多個(gè)目標(biāo)寄存器15的目標(biāo)處理器13以及存儲(chǔ)器18,存儲(chǔ)器18存儲(chǔ)包括目標(biāo)操作系統(tǒng)20、對(duì)象代碼17、翻譯器代碼19和翻譯的目標(biāo)代碼21的多個(gè)操作組件。目標(biāo)計(jì)算平臺(tái)10通常是基于微處理器的計(jì)算機(jī)或其它適合的計(jì)算機(jī)。在一個(gè)實(shí)施例中,翻譯器代碼19是在優(yōu)化或沒有優(yōu)化的情況下,將對(duì)象指令集架構(gòu)(ISA)的對(duì)象代碼翻譯成另一ISA的翻譯的目標(biāo)代碼的仿真器(常被稱為"this-to-that"翻譯器)。在另一實(shí)施例中,翻譯器19起到通過(guò)執(zhí)行程序代碼優(yōu)化來(lái)將對(duì)象代碼翻譯為目標(biāo)代碼(對(duì)象代碼和目標(biāo)代;烏均具有相同的ISA)的功能(被稱為"thistothis"翻譯器或者"加速器")。適宜地,翻譯器代碼19是用于實(shí)現(xiàn)翻譯器的源代碼的編譯版本,并與操作系統(tǒng)20結(jié)合地在目標(biāo)處理器13上運(yùn)行。應(yīng)該理解的是,圖3示出的結(jié)構(gòu)僅是示例性的,例如根據(jù)本發(fā)明實(shí)施例的軟件、方法和處理可以在駐留于操作系統(tǒng)20之內(nèi)或之下的代碼中實(shí)現(xiàn)。存儲(chǔ)器18的對(duì)象代碼17、翻譯器代碼19、操作系統(tǒng)20和存儲(chǔ)機(jī)制可以是本領(lǐng)域技術(shù)人員所知的各種類型中的一種。在根據(jù)圖3的設(shè)備中,在運(yùn)行時(shí),動(dòng)態(tài)地執(zhí)行程序代碼轉(zhuǎn)換從而在目標(biāo)代碼21運(yùn)行的同時(shí)在目標(biāo)架構(gòu)10上執(zhí)行程序代碼轉(zhuǎn)換。也就是說(shuō),翻譯器19與翻譯的目標(biāo)代碼21內(nèi)聯(lián)地運(yùn)行。通過(guò)翻譯器19運(yùn)行對(duì)象程序17包括以交織方式執(zhí)行的兩種不同類型的代碼翻譯器代碼19;和目標(biāo)代碼21。因此,在運(yùn)行時(shí),始終基于存儲(chǔ)的正被翻譯的程序的對(duì)象代碼17,通過(guò)翻譯器代碼19來(lái)產(chǎn)生目標(biāo)代碼21。在一個(gè)實(shí)施例中,翻譯器單元19對(duì)對(duì)象架構(gòu)1的相關(guān)部分,如對(duì)象處理器3,特別是對(duì)象寄存器5進(jìn)行仿真,同時(shí)將對(duì)象程序17作為目標(biāo)代碼21在目標(biāo)處理器13上實(shí)際執(zhí)行。在優(yōu)選實(shí)施例中,提供至少一個(gè)全局寄存器貯備27(也被稱為對(duì)象寄存器組27或抽象寄存器組27)。在多處理器環(huán)境下,可選地,根據(jù)所考慮的對(duì)象處理器的架構(gòu)提供一個(gè)以上的抽象寄存器組27。通過(guò)翻譯器19和目標(biāo)代碼21的組件來(lái)提供對(duì)象狀態(tài)的表示。即,翻譯器19在多個(gè)顯式的程序語(yǔ)言器件,如變量和/或?qū)ο笾写鎯?chǔ)對(duì)象狀態(tài)。相比之下,翻譯的目標(biāo)代碼21在由目標(biāo)代碼21的目標(biāo)指令控制的目標(biāo)寄存器15和存儲(chǔ)位置18中隱含地提供對(duì)象處理器狀態(tài)。例如,全局寄存器貯備27的低級(jí)別表示僅是分配的存儲(chǔ)器的區(qū)域。然而,在翻譯器19的源代碼中,全局寄存器貯備27是能夠在更高級(jí)別下被訪問(wèn)和操作的數(shù)據(jù)序列或者對(duì)象。目標(biāo)代碼21的執(zhí)行執(zhí)行對(duì)象代碼17所預(yù)期的工作,并且還更新對(duì)象處理器3的仿真模型,以使得翻譯器19能夠確定仿真的執(zhí)行上下文(對(duì)象狀態(tài)),并且作為響應(yīng),準(zhǔn)確地控制執(zhí)行的流程以動(dòng)態(tài)地選擇、翻譯和執(zhí)行對(duì)象程序的適當(dāng)?shù)膲K作為目標(biāo)代碼。術(shù)語(yǔ)"基本塊"應(yīng)該是本領(lǐng)域技術(shù)人員所熟悉的?;緣K是具有將塊代碼限于單個(gè)控制路徑的確切的一個(gè)入口點(diǎn)和確切的一個(gè)出口點(diǎn)的代碼段。因此,基本塊是控制流程的有用的基本單元。適宜地,翻譯器19將對(duì)象代碼17劃分為多個(gè)基本塊,其中每一基本塊是單個(gè)入口點(diǎn)處的第一指令和單個(gè)出口點(diǎn)(如跳轉(zhuǎn)、調(diào)用或者分支指令)處的最終指令之間的連續(xù)指令集。翻譯器19可以僅選擇這些基本塊中的一個(gè)(塊模式),或者可以選擇一組基本塊(組塊模式)。適宜地,組塊包括將作為一個(gè)單元被對(duì)待的兩個(gè)或多個(gè)基本塊。另外,翻譯器可形成等同塊(iso-block),該等同塊表示不同入口條件下的對(duì)象代碼的相同基本塊。在優(yōu)選實(shí)施例中,作為從原始對(duì)象程序17產(chǎn)生目標(biāo)代碼21的處理的一部分,基于對(duì)象指令序列產(chǎn)生中間表示(IR)樹。IR樹是由對(duì)象程序計(jì)算的表達(dá)式以及由對(duì)象程序執(zhí)行的操作的抽象表示。隨后,基于IR樹產(chǎn)生("培育")目標(biāo)代碼21。實(shí)際上,IR節(jié)點(diǎn)的集合是有向無(wú)環(huán)圖(DAG),但是通俗地稱為"樹"。本領(lǐng)域技術(shù)人員應(yīng)該理解,在一個(gè)實(shí)施例中,利用面向?qū)ο蟮木幊陶Z(yǔ)言,如C+十來(lái)實(shí)現(xiàn)翻譯器19。例如,IR節(jié)點(diǎn)被實(shí)現(xiàn)為C+屮對(duì)象,對(duì)其它節(jié)點(diǎn)的引用被實(shí)現(xiàn)為對(duì)與這些其它節(jié)點(diǎn)對(duì)應(yīng)的C十+對(duì)象的C+十引用。因此,IR樹被實(shí)現(xiàn)為包含彼此間的各種引用的IR節(jié)點(diǎn)對(duì)象的集合。此外,在所討論的實(shí)施例中,IR的產(chǎn)生利用與對(duì)象架構(gòu)的特定特征對(duì)應(yīng)的寄存器定義集,其中對(duì)象程序17意圖在該對(duì)象架構(gòu)上運(yùn)行。例如,存在用于對(duì)象架構(gòu)上的每一物理寄存器(即,圖3的對(duì)象寄存器5)的唯一寄存器IR樹)的引用的C+十對(duì)象。被所述寄存器定義集引用的所有IR樹的總和被稱為工作IR森林("森林"緣自其包含多個(gè)抽象寄存器根,每一抽象寄存器根引用IR樹)。適宜地,這些IR樹和其它處理形成翻譯器19的一部分。圖3還示出目標(biāo)架構(gòu)10的存儲(chǔ)器18中的本地代碼28。來(lái)源于對(duì)象代碼17的運(yùn)行時(shí)翻譯的目標(biāo)代碼21與直接針對(duì)目標(biāo)架構(gòu)撰寫或編譯的本地代碼28之間存在區(qū)別。在一些實(shí)施例中,當(dāng)翻譯器19檢測(cè)到對(duì)象程序的控制流程進(jìn)入對(duì)象代碼17的諸如對(duì)象庫(kù)的部分,而針對(duì)該部分存在對(duì)象代碼的本地版本時(shí),通過(guò)翻譯器19來(lái)實(shí)現(xiàn)本地綁定。代替翻譯對(duì)象代碼,翻譯器19改為使等效的本地代碼28在目標(biāo)處理器13上執(zhí)行。在示例實(shí)施例中,翻譯器19利用定義的接口,如本地代碼或目標(biāo)代碼調(diào)用存根(stub)來(lái)將產(chǎn)生的目標(biāo)代碼21綁定到本地代碼28,在公布的PCT申請(qǐng)WO2005/008478中更詳細(xì)地討論了所述接口,所述PCT申請(qǐng)通過(guò)引用包含于此。圖4更詳細(xì)地示出在目標(biāo)計(jì)算平臺(tái)10上運(yùn)行時(shí)的翻譯器19。如上所述,翻譯器19的前端包括解碼器單元191,該解碼器單元191將對(duì)象程序17的當(dāng)前所需的部分解碼以提供多個(gè)對(duì)象代碼塊17a、17b、17c(通常均包含對(duì)象代碼的一個(gè)基本塊),并且還可提供關(guān)于每一對(duì)象塊以及其中包含的對(duì)象指令的解碼器信息171,該信息將幫助翻譯器19隨后的操作。在一些實(shí)施例中,翻譯器19的核心192中的IR單元從解碼的對(duì)象指令生成中間表示(IR),根據(jù)中間表示恰當(dāng)?shù)貓?zhí)行優(yōu)化。作為翻譯器19的后端部分的編碼器193產(chǎn)生(培育)可由目標(biāo)處理器13執(zhí)行的目標(biāo)代碼21。在該簡(jiǎn)化示例中,產(chǎn)生三個(gè)目標(biāo)代碼塊21a-21c,以便與對(duì)象代碼塊17a-17c在對(duì)象平臺(tái)1上的執(zhí)行等效地在目標(biāo)平臺(tái)IO上執(zhí)行工作。此外,編碼器193可以為一些或所有目標(biāo)代碼塊21a-21c產(chǎn)生頭代碼(headercode)和/或腳代碼(footercode)211,所述代碼211執(zhí)行諸如設(shè)置目標(biāo)塊將操作的環(huán)境以及在適當(dāng)?shù)那闆r下將控制傳遞回翻譯器19的功能。在一個(gè)實(shí)施例中,翻譯器19保持已經(jīng)產(chǎn)生了目標(biāo)代碼21a-21c的對(duì)象代碼塊17a-17c的記錄。因此,當(dāng)隨后在程序中再次遇到對(duì)象代碼的相同塊時(shí),可以取來(lái)先前產(chǎn)生的目標(biāo)代碼并再次使用。然而,本發(fā)明的其它實(shí)施例可使用其它特定機(jī)制來(lái)動(dòng)態(tài)地將對(duì)象代碼與產(chǎn)生的目標(biāo)代碼匹配。在圖4中,適宜地,對(duì)象代碼17是由翻譯器19轉(zhuǎn)換以便在目標(biāo)系統(tǒng)上運(yùn)行的應(yīng)用程序。作為一般示例,應(yīng)用程序17是復(fù)雜程序,如web服務(wù)器、數(shù)字內(nèi)容服務(wù)器(例如流式音頻或流式視頻服務(wù)器)、文字處理器、電子表格編輯器、圖形圖像編輯工具或者數(shù)據(jù)庫(kù)應(yīng)用程序等。然而,在其它示例中,對(duì)象代碼17是使計(jì)算系統(tǒng)能夠執(zhí)行有用的工作并控制電子裝置的操作的任何種類的程序。除了諸如與操作系統(tǒng)20和翻譯器19關(guān)聯(lián)的其它任務(wù)之外,目標(biāo)計(jì)算平臺(tái)10經(jīng)常還需要同時(shí)運(yùn)行許多這樣的程序。在示例實(shí)施例中,對(duì)象代碼17采取專門針對(duì)對(duì)象架構(gòu)創(chuàng)建(例如,編譯)的可執(zhí)行二進(jìn)制形式。不存在對(duì)對(duì)象代碼17的人為千預(yù)或者檢查的機(jī)會(huì)。相反,通過(guò)翻譯器19,目標(biāo)計(jì)算平臺(tái)10自動(dòng)將對(duì)象代碼17轉(zhuǎn)換為在目標(biāo)計(jì)算平臺(tái)10上執(zhí)行的二進(jìn)制的目標(biāo)代碼21。因此,在示例性實(shí)施例中,翻譯器19是二進(jìn)制翻譯器,其將可通過(guò)對(duì)象ISA執(zhí)行的二進(jìn)制的對(duì)象代碼17轉(zhuǎn)換為可通過(guò)目標(biāo)ISA執(zhí)行的二進(jìn)制的目標(biāo)代碼。此外,翻譯器19是動(dòng)態(tài)二進(jìn)制翻譯器,其將翻譯與目標(biāo)代碼21的塊的執(zhí)行交織。圖5示出由本發(fā)明的實(shí)施例采用的在目標(biāo)計(jì)算平臺(tái)10中對(duì)具有寄存器窗口架構(gòu)的對(duì)象處理器3的關(guān)鍵組件進(jìn)行仿真的機(jī)制。如上所述,對(duì)對(duì)象處理器的這些組件進(jìn)行仿真使翻譯器19能夠產(chǎn)生目標(biāo)代碼21,該目標(biāo)代碼21忠實(shí)地模仿了對(duì)象代碼17的預(yù)期行為。在下面的示例實(shí)施例中,與對(duì)象處理器相比,目標(biāo)處理器13的架構(gòu)不提供寄存器窗口,或者使用不同形式的寄存器窗口。因此,對(duì)象代碼17不能在目標(biāo)處理器13上運(yùn)行。作為實(shí)際的例子,翻譯器19被安排用來(lái)將意圖在具有至少64個(gè)(更具代表性的是幾百個(gè))64位通用硬件寄存器的第9版本的SPARC處理器上執(zhí)行的對(duì)象代碼翻譯成在僅具有16個(gè)通用硬件寄存器的64位x86類型的處理器上的目標(biāo)代碼。如本示例所示出的,在每種處理器中可用寄存器的數(shù)量和類型以及寄存器的構(gòu)造方式方面,對(duì)象處理器3和目標(biāo)處理器13有時(shí)從根本上不兼容。盡管對(duì)象處理器3的一般結(jié)構(gòu)和操作是本領(lǐng)域技術(shù)人員所熟悉的,但是這里為了示出并討論由目標(biāo)系統(tǒng)仿真的對(duì)象處理器的這些組件,提供簡(jiǎn)要回顧。在這里所討論的示例實(shí)施例中,對(duì)象處理器3采用根據(jù)示例第9版本的SPARC架構(gòu)的寄存器窗口排列,上面已參照?qǐng)D1和圖2對(duì)其進(jìn)行了大致地討論。在這種情況下,寄存器窗口位置重疊并且具有旋轉(zhuǎn)式配置。然而,應(yīng)該理解的是,本發(fā)明的實(shí)施例還可以針對(duì)具有其它特定配置,如非重疊和/或非旋轉(zhuǎn)配置的寄存器窗口架構(gòu)實(shí)現(xiàn)。這種寄存器窗口架構(gòu)的一些相關(guān)技術(shù)描述提及多個(gè)寄存器窗口,這些寄存器窗口中僅有一個(gè)窗口是當(dāng)前窗口(即,存在許多窗口,每一窗口均具有固定的位置,并且這些窗口中每次只有一個(gè)窗口是打開的)。為了一致起見,下面的描述考慮移動(dòng)到不同的寄存器窗口位置的單個(gè)當(dāng)前窗口,但是本領(lǐng)域技術(shù)人員應(yīng)該很容易地理解,本發(fā)明可以等同地應(yīng)用于按照多個(gè)固定的窗口定義的架構(gòu)。圖5示出對(duì)象處理器3中設(shè)置的大量通用硬件寄存器5。為了清晰和解釋容易起見,控制/狀態(tài)寄存器和對(duì)象處理器3的許多其它部件沒有被示出。這些對(duì)象寄存器5包括一小組全局可見寄存器501("全局對(duì)象寄存器"),這些寄存器是靜態(tài)的并且對(duì)于對(duì)象代碼17的所有部分均是可見的;大的寄存器文件502("窗口化的對(duì)象寄存器"),這些寄存器被窗口化從而對(duì)于對(duì)象代碼17的當(dāng)前執(zhí)行的部分,僅該寄存器文件的一個(gè)子集是可見的,并作為移動(dòng)到多個(gè)寄存器窗口位置511中的一個(gè)位置處的當(dāng)前"寄存器窗口"510。因此,任何時(shí)候,在窗口化的對(duì)象寄存器502中僅落在寄存器窗口510的當(dāng)前位置之下的子集可被正在執(zhí)行的代碼訪問(wèn)。盡管在對(duì)象硬件中設(shè)置了大量寄存器,但是任何時(shí)候,對(duì)象代碼17僅能夠?qū)?2個(gè)可見的通用寄存器,即8個(gè)全局對(duì)象寄存器501(g0-g7)以及窗口化的對(duì)象寄存器502中的24寄存器窗口510(i0-i7,10-17,。0-o7)進(jìn)行尋址。因此,對(duì)象代碼是引用這樣一組可見的32個(gè)寄存器名稱撰寫的?,F(xiàn)在考慮目標(biāo)計(jì)算平臺(tái)10,通過(guò)例如將對(duì)象代碼17加載到目標(biāo)系統(tǒng)的存儲(chǔ)器18的可用區(qū)域來(lái)提供對(duì)象代碼17,并且逐塊地將對(duì)象代碼17轉(zhuǎn)換為目標(biāo)代碼21并執(zhí)行。如上所述,當(dāng)翻譯器19首先遇到對(duì)象代碼塊時(shí),解碼器單元191將對(duì)象指令解碼。該解碼處理包括識(shí)別對(duì)象代碼指令內(nèi)的對(duì)對(duì)象架構(gòu)的通用對(duì)象寄存器的引用,特別包括對(duì)窗口化的對(duì)象寄存器502和全局對(duì)象寄存器501的引用。其次,識(shí)別這樣的對(duì)象代碼指令,該對(duì)象代碼指令引起當(dāng)前寄存器窗口向新位置的SAVE和RESTORE類型的移動(dòng)。這里,用于示例第9版本的SPARC硬件的指令集架構(gòu)包括至少"save"和"restore"指令,這些指令在對(duì)象平臺(tái)上將引起當(dāng)前寄存器窗口510移動(dòng)到另一位置511。由解碼器191獲得的寄存器引用和寄存器窗口移動(dòng)信息被傳遞給核心192并且在編碼器193中被使用以產(chǎn)生目標(biāo)代碼21。在初始階段,翻譯器19提供將在稍后用于仿真對(duì)象處理器的各種存儲(chǔ)器結(jié)構(gòu)。具體地講,翻譯器19提供如上所述的抽象寄存器組27,即用于存儲(chǔ)對(duì)象處理器3的寄存器(包括全局對(duì)象寄存器501和窗口化的對(duì)象寄存器502)中應(yīng)保存的數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)。這里,在目標(biāo)存儲(chǔ)器18中定義存儲(chǔ)區(qū)域420,該存儲(chǔ)區(qū)域420具有一組8個(gè)靜態(tài)位置421以形成抽象寄存器組27的與8個(gè)全局對(duì)象寄存器501關(guān)聯(lián)的靜態(tài)部分。在解碼器單元191所解碼的對(duì)象代碼指令中識(shí)別出對(duì)全局對(duì)象寄存器501的引用之處,用對(duì)存儲(chǔ)區(qū)域420中的這些靜態(tài)位置421的適當(dāng)引用來(lái)產(chǎn)生等效的目標(biāo)代碼指令。即,目標(biāo)代碼21通常這樣使用表示這些全局對(duì)象寄存器501的內(nèi)容的數(shù)據(jù)值將數(shù)據(jù)從靜態(tài)位置421加載到目標(biāo)處理器13的工作寄存器15中,然后在目標(biāo)代碼的執(zhí)行期間將結(jié)果適當(dāng)?shù)卮婊氐竭@些存儲(chǔ)位置421。這樣,目標(biāo)代碼21模擬對(duì)象代碼17的依賴于全局對(duì)象寄存器501的那些指令的行為。窗口化的對(duì)象寄存器502在如上所述的動(dòng)態(tài)窗口化的配置下運(yùn)轉(zhuǎn),因此現(xiàn)在在目標(biāo)平臺(tái)中設(shè)置單獨(dú)的機(jī)制來(lái)對(duì)這些對(duì)象寄存器進(jìn)行仿真。如圖5所示,為了實(shí)現(xiàn)寄存器窗口機(jī)制,翻譯器19在目標(biāo)平臺(tái)10的存儲(chǔ)器18內(nèi)設(shè)置堆棧數(shù)據(jù)結(jié)構(gòu),下面將其稱為"SR堆棧"400。如本領(lǐng)域技術(shù)人員所熟悉的,堆棧是在最常用的計(jì)算架構(gòu)中有效地創(chuàng)建和管理的LIFO(后入先出)類型的存儲(chǔ)結(jié)構(gòu)。通常,堆棧在存儲(chǔ)器中按照給定的基礎(chǔ)地址(起始地址)定位,并且隨著數(shù)據(jù)被添加到堆棧或者從堆棧被去除,堆棧在存儲(chǔ)器中向下(或向上)生長(zhǎng)。通過(guò)參考堆棧指針來(lái)確定堆棧的頂部(頭)的當(dāng)前位置,堆棧指針被定期更新以計(jì)算當(dāng)數(shù)據(jù)被推到堆棧上時(shí)消耗的存儲(chǔ)位置以及相反地當(dāng)從堆棧彈出數(shù)據(jù)時(shí)釋放的存儲(chǔ)位置。通常,通過(guò)相對(duì)于堆棧指針對(duì)存儲(chǔ)器尋址來(lái)操縱堆棧上的數(shù)據(jù)。在下面的示例中,SR堆棧400在目標(biāo)存儲(chǔ)器18中從給定的基礎(chǔ)地址SR—BASE開始向下(即,利用遞減存儲(chǔ)地址)生長(zhǎng),并且堆棧指針SR-SP用于確定SR堆棧的當(dāng)前頭。SR堆棧400用于存儲(chǔ)數(shù)據(jù)值,每一數(shù)據(jù)值表示對(duì)象代碼17所引用的窗口化的對(duì)象寄存器502之一的內(nèi)容。即,對(duì)象代碼17的解碼揭示出在執(zhí)行期間對(duì)象代碼17所訪問(wèn)的窗口化的對(duì)象寄存器502,并且對(duì)象代碼所使用的數(shù)據(jù)值現(xiàn)在被存儲(chǔ)為SR堆棧400中的條目401。產(chǎn)生目標(biāo)代碼21,以便將這些數(shù)據(jù)值存儲(chǔ)在目標(biāo)存儲(chǔ)器18中的SR堆棧400上,當(dāng)目標(biāo)代碼21需要時(shí)將數(shù)據(jù)值加載到目標(biāo)處理器13的工作寄存器15中,并在目標(biāo)代碼的執(zhí)行期間適當(dāng)?shù)貙⒔Y(jié)果存回到SR堆棧400。因此,SR堆棧400形成抽象寄存器組27的對(duì)窗口化的對(duì)象寄存器502進(jìn)行仿真的部分,并且使目標(biāo)代碼21能夠模擬依賴于對(duì)象寄存器502的對(duì)象代碼指令的執(zhí)行。在圖5所示的示例實(shí)施例中,SR堆棧40(^皮劃分為多個(gè)幀410,其中每個(gè)幀410包含一組數(shù)據(jù)條目401。在本示例中,一組可尋址的24個(gè)窗口化的對(duì)象寄存器502被對(duì)象代碼17稱為"iO"-"i7"、"10"-"17"、"oO"-"o7"(或者等同地,稱為r[8]至r[31])。因此,從對(duì)象代碼17的角度來(lái)看,對(duì)象代碼中的寄存器定義和寄存器引用(這里統(tǒng)稱為"寄存器引用")按照這樣的可尋址的一組寄存器名稱被表達(dá)。在這里所討論的仿真機(jī)制中,對(duì)象代碼17所需的對(duì)象寄存器502中的那些數(shù)據(jù)值被存儲(chǔ)在SR堆棧400的具有24個(gè)條目401的一幀410中。其次,在對(duì)象處理器3中對(duì)象代碼17會(huì)引起當(dāng)前寄存器窗口510移動(dòng)到新的位置511之處,在當(dāng)前仿真機(jī)制中,在SR堆棧400上設(shè)置具有條目401的新幀410。由于窗口化的對(duì)象寄存器502的重疊特性,當(dāng)前示例實(shí)施例在SR堆棧400上為每一新巾貞410設(shè)置16個(gè)新的條目401,同時(shí)8個(gè)舊的條目(與先前幀410的"oO""o8"對(duì)應(yīng))現(xiàn)在給予用于當(dāng)前幀的"i0"-"i8"寄存器引用的數(shù)據(jù)值。圖6是這里所討論的寄存器窗口仿真機(jī)制的更詳細(xì)的示意圖,以示出用于SR堆棧尋址的示例機(jī)制。在下面的討論中,提供示例偽代碼指令作為對(duì)象代碼段17a、17b和目標(biāo)代碼段21a、21b,并且這里為了清晰起見,將所述指令示為簡(jiǎn)化的匯編器類型的偽代碼。對(duì)象代碼示例通?;赟PARC第9版本ISA(即,源,芬的她),但是為了清晰起見,諸如延遲時(shí)隙和特定指令自變量的細(xì)節(jié)將省略。類似地,目標(biāo)代碼示例被示為通?;诶肐ntel語(yǔ)法的Linux匯編語(yǔ)言(即,凍#《的她,源)的匯編器類型的偽代碼。當(dāng)然,本發(fā)明的涉及動(dòng)態(tài)二進(jìn)制翻譯器的示例實(shí)施例將接收作為二進(jìn)制機(jī)器代碼的對(duì)象代碼17,并產(chǎn)生作為二進(jìn)制機(jī)器代碼的目標(biāo)代碼,但是為了解釋方便起見,提供匯編器類型的偽代碼。下面還將參照?qǐng)D7和圖8更詳細(xì)地討論圖6中示出的示例偽代碼。如圖6所示,翻譯器19的解碼器單元191對(duì)第一對(duì)象代碼塊17a和第二對(duì)象代碼塊17b中的指令進(jìn)行解碼。為了簡(jiǎn)便,第一示例實(shí)施例根據(jù)"save"和"restore"對(duì)象指令的位置將對(duì)象代碼劃分為第一塊和第二塊。在實(shí)際的實(shí)施例中,對(duì)象代碼的每一塊17a、17b將通常包含大約IO條指令,但是有時(shí)將包含多達(dá)約一百條指令。解碼器191識(shí)別對(duì)窗口化的對(duì)象寄存器502的對(duì)象代碼引用175,并得到窗口移動(dòng)信息176。在該示例偽代碼中,第一對(duì)象塊17a包括兩個(gè)"mov"指令和一個(gè)"add"指令,這些指令包含對(duì)窗口化的對(duì)象寄存器"17"、"13"和"o6"(即,1ocal寄存器3、1ocal寄存器7和out寄存器6)的引用175。關(guān)于寄存器窗口移動(dòng)信息176,"save"指令這里被識(shí)別為引起SAVE類型移動(dòng)的指令。類似地,第二代碼段17b被解碼以識(shí)別對(duì)"13"(1ocal寄存器3)的另一引用175以及導(dǎo)致RESTORE類型的寄存器窗口移動(dòng)的"restore"176。該示例偽代碼中的"return"返回到圖中沒有示出的對(duì)象代碼的一些其它調(diào)用者部分。在這種情況下由翻譯器19產(chǎn)生的目標(biāo)代碼21由目標(biāo)代碼塊21a和21b示出。這里,翻譯器19至少部分地基于識(shí)別出的對(duì)象寄存器引用,來(lái)產(chǎn)生目標(biāo)代碼指令以對(duì)SR堆棧400上的相關(guān)條目401進(jìn)行尋址。在第一實(shí)施例中,通過(guò)考慮識(shí)別出的窗口化的對(duì)象寄存器引用175,相對(duì)于堆棧指針SR-SP來(lái)對(duì)相關(guān)SR堆棧條目401尋址。方便地,響應(yīng)于在每一對(duì)象塊的末尾發(fā)現(xiàn)的識(shí)別出的寄存器窗口移動(dòng)信息176,在每一目標(biāo)塊的末尾更新堆棧指針SR—SP。即,響應(yīng)于通過(guò)解碼器191獲得的SAVE和RESTORE寄存器窗口移動(dòng)信息176,產(chǎn)生目標(biāo)代碼12以更新SR堆棧指針SR—SP,以便跟蹤SR堆棧的頭的當(dāng)前位置。這里,產(chǎn)生的目標(biāo)代碼包含目標(biāo)指令,這些目標(biāo)指令使SR堆棧指針SR—SP更新,從而對(duì)于識(shí)別出的每一SAVE類型移動(dòng),指針SR一SP在SR堆棧400中向前移動(dòng)16個(gè)64位條目401,或者對(duì)于識(shí)別出的每一RESTORE類型移動(dòng),指針SR—SP向后滾動(dòng)16個(gè)條目。這里,由于每一幀410內(nèi)的表示"i"(in寄存器)和"o"(out寄存器)的條目的重疊,堆棧指針更新16個(gè)條目,而非全部幀的24個(gè)條目。如圖6的示例所示出的,對(duì)于與第一幀410a相關(guān)的第一目標(biāo)代碼塊21a,SR—SP被設(shè)為第一值"SR—SP1",并且SR—SP被更新為第二值"SR—SP2"以使得第二目標(biāo)代碼塊21b改為引用第二幀410b中的條目401。還如圖6中所示,在該第一實(shí)施例中,在位于堆棧指針SR一SP的當(dāng)前值所引用的SR堆棧400的頭部的具有24個(gè)條目401的當(dāng)前幀410中找到所需的SR堆棧條目401。這里,每一寄存器引用175確定與堆棧指針SR—SP的當(dāng)前值有關(guān)的預(yù)定位移。作為簡(jiǎn)化示例,通過(guò)使"o0"的條目具有位移0(即,堆棧指針SR一SP引用作為堆棧上的第一條目的"oO,,),"ol"和"o2"的條目分別具有+1和+2的64位字的位移,直至"i7"的條目具有+23的64位字的位移。這里,目標(biāo)代碼21通過(guò)將堆棧指針的當(dāng)前值與所需位移相組合來(lái)計(jì)算堆棧上的所需條目的地址。方便地,在將上下文傳遞給目標(biāo)代碼時(shí),選擇一個(gè)目標(biāo)寄存器13來(lái)保存堆棧指針SR—SP,并且將堆棧指針的當(dāng)前值加載到該目標(biāo)寄存器13中。在示例64位x86目標(biāo)架構(gòu)中,方便地,堆棧指針被加載到一個(gè)臨時(shí)寄存器,如rbp中。即,作為一種選擇,在調(diào)用示出的第一目標(biāo)代碼段21a之前,在翻譯器19的運(yùn)行環(huán)路中將堆棧指針SR一SP加載到目標(biāo)寄存器rbp中。可選地,rbp作為頭代碼211(見圖4)的一部分被方便地加載。因此,在目標(biāo)代碼段21a和21b中可使用寄存器rbp中的堆棧指針SR一SP。執(zhí)行這一操作的示例指令示出如下,其中"fs:SR—SP"是對(duì)上下文切換期間存儲(chǔ)的堆棧指針的存儲(chǔ)位置(是由翻譯器19保存的對(duì)象狀態(tài)的一部分)的引用movrbp,(fs:SR一SP),下面的例子示出SR堆棧上的位移的計(jì)算,其中,在對(duì)象代碼中,一個(gè)全局對(duì)象寄存器"gl"被加載到窗口化的局部對(duì)象寄存器"15"(local寄存器5)中。這里,"15"條目位于"+13"的位移處,即13個(gè)64位字(在一些按照8位字節(jié)尋址的架構(gòu)中,方便地表達(dá)為13x8=1048位字節(jié))的位移處。在目標(biāo)代碼中,我們可以假設(shè)"gl"的值已經(jīng)從存儲(chǔ)區(qū)域420中加載到可用目標(biāo)寄存器rax中對(duì)象代碼目標(biāo)代碼movgl,15mov(rbp+13),rax響應(yīng)于識(shí)別出的SAVE移動(dòng)176,rbx中現(xiàn)在保存的當(dāng)前堆棧指針值SR一SP在SR堆棧400上前進(jìn)了16個(gè)64位字。這會(huì)將16個(gè)新的條目401添加到SR堆棧,或者會(huì)將當(dāng)前幀410向前移動(dòng)到先前占據(jù)過(guò)的位置,從而現(xiàn)在將暴露這些存儲(chǔ)位置中存儲(chǔ)的數(shù)據(jù)值。其次,有益的是,此時(shí)還更新fs:SR一SP處的存儲(chǔ)器中保存的SR—SP的版本,盡管這也可以單獨(dú)進(jìn)行。響應(yīng)于每一SAVE類型移動(dòng)信息175,通過(guò)例如下面的目標(biāo)指令,堆棧指針SR一SP在存儲(chǔ)器中向下前進(jìn)addrbp,-16mov(fs:SR—SP),rbp相反,響應(yīng)于每一RESTORE類型移動(dòng)信息176,通過(guò)例如下面的目標(biāo)指令,堆棧指針SR—SP在存儲(chǔ)器中向上后退特定位移,從而引用SR堆棧400上的先前遇到過(guò)的具有條目401的幀410:addrbp,+16mov(fs:SR_SP),rbp圖7是更詳細(xì)地示出圖6中的上述示例實(shí)施例的表。即,圖7示出如上所述的對(duì)象代碼塊17a、17b。此外,圖7示出通過(guò)將對(duì)象代碼指令解碼而識(shí)別出的對(duì)象寄存器引用175,并且示出識(shí)別出的每一引用175的相關(guān)位移177。此外,如圖7所示,對(duì)象代碼17的解碼獲得識(shí)別出的寄存器窗口移動(dòng)信息176。最后,圖7示出參照寄存器引用175和寄存器窗口移動(dòng)信息176從對(duì)象代碼指令產(chǎn)生的目標(biāo)代碼塊21a、21b。如圖7所示,第一目標(biāo)代碼塊21a以頭代碼211開始,在本示例中,該頭代碼211包括將堆棧指針SR—SP加載到臨時(shí)目標(biāo)寄存器rbp中的指令(未示出)。此時(shí),我們可以假設(shè)rbp保存值"SR—SP1",并因此引用圖6的幀410a。接下來(lái),將常數(shù)"10"和"3"加載到目標(biāo)寄存器rax和rbx,然后,這些值也被存儲(chǔ)到SR堆棧400上的關(guān)于從寄存器引用175獲得的位移177的引用"13"中對(duì)象代碼所預(yù)期的數(shù)據(jù)值。然后,使用這些目標(biāo)寄存器rax和rbx執(zhí)行與示例"add"對(duì)象指令等效的工作,并且結(jié)果被存儲(chǔ)到與"06"引用相關(guān)的條目401。本實(shí)施例中的"save"對(duì)象指令終止第一對(duì)象塊17a。此外,響應(yīng)于從"save"獲得的寄存器窗口移動(dòng)信息176,產(chǎn)生目標(biāo)代碼21a以將rbp中保存的堆棧指針SR—SP修改為在SR堆棧400上前進(jìn)16個(gè)條目,以使得SR—SP現(xiàn)在具有值"SR—SP2"并引用圖6中的幀410b。該第一目標(biāo)代碼21a中的腳代碼211現(xiàn)在確定下一動(dòng)作,例如將控制傳遞回翻"^奪器19以選才奪下一對(duì)象代碼塊使其作為翻譯的目標(biāo)代碼執(zhí)行,或者將控制直接傳遞給已經(jīng)產(chǎn)生的下一目標(biāo)代碼塊。在本示例中,腳代碼211將執(zhí)行控制直接傳遞給第二目標(biāo)代碼塊21b,而不需返回到翻譯器19。適宜地,第二目標(biāo)代碼塊21b中的頭代碼211準(zhǔn)備用于該塊的上下文。在大多數(shù)情況下,這包括將SR—SP從fs:SR—SP處的存儲(chǔ)器加栽到rbp,盡管在本示例中,目標(biāo)代碼優(yōu)化將允許僅從塊21a向前傳送rbp中已經(jīng)存在的值。然后,目標(biāo)代碼執(zhí)行來(lái)自對(duì)象塊17b的對(duì)象"add"指令的工作。需要注意的是,由于rbp中SR—SP的更新的值,對(duì)"13"(1ocal寄存器3)的寄存器引用并不決定與第一對(duì)象代碼塊17a中相同的SR堆棧400中的條目401。也就是說(shuō),在對(duì)象塊17a中,對(duì)"B"的引用決定幀410a中的條目,而現(xiàn)在在對(duì)象塊17b中,對(duì)"13"的引用改為決定幀410b中的條目。這樣,SR堆棧400對(duì)對(duì)象處理器中的寄存器窗口的預(yù)期行為進(jìn)行仿真。最后,響應(yīng)于來(lái)自對(duì)象塊17b中的最后"restore"的寄存器窗口移動(dòng)信息176,產(chǎn)生目標(biāo)代碼21b以更新rbp中的SR_SP的值,從而使堆棧指針后退16個(gè)條目,由此,堆棧指針現(xiàn)在再次引用圖6的幀410a。此外,對(duì)象"restore"指令起到選擇該第二對(duì)象塊17b的終止點(diǎn)的作用。在大多數(shù)情況下,"restore"會(huì)使翻譯器終止對(duì)象塊17b。然而,在本示例中,實(shí)際上在緊隨"restore"之后的"return"處終止對(duì)象塊。此時(shí),最好將更新的堆棧指針SR—SP從rbp保存回fs:SR_SP,并且腳代碼211現(xiàn)在確定下一動(dòng)作,例如在這種情況下,將執(zhí)行控制返回給翻譯器19,從而翻譯器可將控制返回給調(diào)用作為"funcl"的第一對(duì)象塊17a的對(duì)象代碼(未示出),以繼續(xù)對(duì)象程序的執(zhí)行。圖8是與上述圖6和圖7的示例類似的另一個(gè)表,示出了對(duì)SR堆棧400尋址的第二示例機(jī)制。翻譯器19的解碼器單元191如上所述識(shí)別窗口化的對(duì)象寄存器引用175和寄存器窗口移動(dòng)信息176。此外,識(shí)別出的寄存器窗口移動(dòng)176用于獲得幀偏移178,該幀偏移178在對(duì)象代碼21中被表達(dá)為相對(duì)于SR—SP堆棧指針的幀偏移。然后,每一寄存器引用175提供相對(duì)于該幀偏移的位移,以在SR堆棧400中對(duì)相關(guān)條目進(jìn)行尋址。因此,貫穿目標(biāo)代碼塊21a,即使在該塊期間考慮條目401的兩個(gè)或多個(gè)幀410,堆棧指針SR—SP仍始終保持恒定。特別地,圖8示出的第二實(shí)施例允許翻譯器使目標(biāo)代碼的單個(gè)塊內(nèi)的葉函數(shù)(leaffunction)內(nèi)聯(lián),其中,葉函數(shù)是其自身不調(diào)用另一函數(shù)的函數(shù)。通過(guò)將調(diào)用者對(duì)象代碼指令和被調(diào)用者對(duì)象代碼指令視為單個(gè)塊對(duì)象代碼17a并從該單個(gè)塊對(duì)象代碼17a創(chuàng)建相應(yīng)的單個(gè)目標(biāo)代碼塊21a,來(lái)使該函數(shù)內(nèi)聯(lián)。在圖8的簡(jiǎn)化示例中,不存在葉函數(shù),但是下面討論的操作可等同地應(yīng)用于該目的。在另一個(gè)示例實(shí)施例中,當(dāng)解碼器191檢測(cè)到對(duì)象代碼17的一個(gè)部分所包含的SAVE或RESTORE超過(guò)預(yù)定數(shù)量時(shí),塊的解碼此時(shí)被停止(被打斷),并且在使幀偏移返回到默認(rèn)值("fD")的情況下創(chuàng)建新的塊。即,當(dāng)對(duì)象代碼段所包含的SAVE或RESTORE超過(guò)允許的數(shù)量時(shí),通過(guò)創(chuàng)建另外的對(duì)象代碼塊來(lái)將該對(duì)象代碼段細(xì)分為兩個(gè)或多個(gè)更小的段。這一限制便于在否則相對(duì)冗長(zhǎng)的塊中進(jìn)行中斷。如圖8A所示,識(shí)別出的寄存器窗口移動(dòng)176在SAVE和RESTORE方向上向上或向下調(diào)節(jié)相對(duì)于假設(shè)的起始位置的幀偏移178。方便地,在每一解碼的塊的開始處將幀偏移178設(shè)為"0",并且對(duì)于每一連續(xù)的SAVE移動(dòng),將幀偏移178—個(gè)計(jì)數(shù)一個(gè)計(jì)數(shù)地調(diào)節(jié)為"-l"、"-2"等。相反,對(duì)于識(shí)別出的每一RESTORE類型移動(dòng),幀偏移一個(gè)計(jì)數(shù)一個(gè)計(jì)數(shù)地增加。因此,幀偏移基于在塊期間遇到的識(shí)別出的寄存器窗口移動(dòng)信息176提供相對(duì)于默認(rèn)起始位置的當(dāng)前累積偏移。例如,對(duì)于默認(rèn)"0",SAVE將幀偏移178調(diào)節(jié)為"-l"。然后,第二個(gè)SAVE將偏移調(diào)節(jié)為"-2"。然而,RESTORE現(xiàn)在將偏移調(diào)節(jié)回"-l,,,第二個(gè)RESTORE將偏移調(diào)節(jié)回"0",又一個(gè)RESTORE現(xiàn)在將偏移節(jié)為"+r,等等。圖8中的表顯示了識(shí)別出的寄存器引用175和識(shí)別出的寄存器窗口移動(dòng)176。此外,該表還示出位移177以及從位移177獲得的幀偏移178。另外,該表還示出示例目標(biāo)代碼21,該目標(biāo)代碼21將幀偏移178和位移177組合在一起,來(lái)對(duì)SR堆棧400上位于各個(gè)不同的幀410中的各個(gè)條目401進(jìn)行尋址。即,核心192和編碼器單元193在產(chǎn)生和培育目標(biāo)代碼時(shí)使用當(dāng)前偏移178和位移177。編碼器193因此可以培育目標(biāo)代碼21,該目標(biāo)代碼通過(guò)允許"基礎(chǔ)加偏移"類型的尋址來(lái)簡(jiǎn)化SR堆棧中的尋址。如圖8A所示,目標(biāo)代碼塊21a以頭代碼211開始,如在先前的示例中一樣,適宜的是,該頭代碼211將堆棧指針SR—SP加載到目標(biāo)寄存器rbp中。在本示例中,假設(shè)rbp中的值引用圖6的幀410a。接下來(lái),如上所述,目標(biāo)代碼執(zhí)行與示例"mov"和"add"對(duì)象指令等效的工作。響應(yīng)于從"save"獲得的寄存器窗口移動(dòng)信息176,幀偏移178—個(gè)計(jì)數(shù)一個(gè)計(jì)數(shù)地減小,并且產(chǎn)生目標(biāo)代碼以將rbp中保存的堆棧指針SR一SP臨時(shí)修改為在SR堆棧400上前進(jìn)16個(gè)條目,從而SR—SP現(xiàn)在引用圖6中的后續(xù)幀410b。需要注意的是,"save"對(duì)象指令這里不終止對(duì)象塊。也就是說(shuō),不需要頭代碼和腳代碼的開銷。圖8中的目標(biāo)代碼現(xiàn)在利用rax立即執(zhí)行第二對(duì)象"add"指令的工作。響應(yīng)于從"restore"獲得的寄存器窗口移動(dòng)信息176,產(chǎn)生目標(biāo)代碼以根據(jù)新的偏移178來(lái)更新rbp中的SR—SP的值,以使堆棧指針后退16個(gè)條目,由此,堆棧指針現(xiàn)在再次引用圖6的幀410a。此外,最后的對(duì)象"restore"指令起到選擇該對(duì)象塊17a的終止點(diǎn)的作用。因此,腳211現(xiàn)在將更新的堆棧指針SR—SP從rbp保存回fs:SR_SP。如上面的圖7—樣,對(duì)象塊17a末尾的"return"可將執(zhí)行控制返回給翻譯器,然后翻譯器可返回給調(diào)用作為"func1"的對(duì)象塊17a的對(duì)象代碼(未示出)。圖8B示出SR尋址機(jī)制中的進(jìn)一步的優(yōu)化。這里,在產(chǎn)生目標(biāo)代碼之前,將偏移178與位移177相組合,從而避免臨時(shí)調(diào)節(jié)rbp中的SR一SP的值的工作。即,圖8A的末尾處的三個(gè)目標(biāo)指令"add"、"mov"和"add"如圖8B所示被方便地組合為單個(gè)"add"指令。在這種情況下,偏移178和位移177被組合為-16+1=-5,從而給出相對(duì)于原始rbp值的組合的調(diào)節(jié)-5。這里,寄存器引用175和關(guān)聯(lián)的位移177以及寄存器窗口移動(dòng)信息176和關(guān)聯(lián)的幀偏移178的識(shí)別使得有效的、優(yōu)化的目標(biāo)代碼被培育,該目標(biāo)代碼執(zhí)行對(duì)象代碼的工作并且對(duì)與對(duì)象代碼的操作相關(guān)的對(duì)象處理器的關(guān)鍵組件進(jìn)行仿真。圖8中的上述尋址機(jī)制允許翻譯器19提供單個(gè)目標(biāo)代碼塊,該目標(biāo)代碼塊包括在單個(gè)目標(biāo)代碼塊內(nèi)對(duì)對(duì)象代碼的多個(gè)"save"和/或"restore"指令的效果進(jìn)行仿真的目標(biāo)指令。應(yīng)該理解的是,該機(jī)制還允許翻譯器19將對(duì)象函數(shù),特別是葉函數(shù)內(nèi)聯(lián)到目標(biāo)代碼中。即,用于執(zhí)行進(jìn)程調(diào)用的對(duì)象"call"和"return"指令包括寄存器窗口510的相同SAVE和RESTORE類型移動(dòng),并且現(xiàn)在可以在不需要目標(biāo)代碼中的函數(shù)調(diào)用的情況下實(shí)現(xiàn)。圖9是執(zhí)行這里所討論的寄存器窗口仿真機(jī)制的方法的示意性流程圖。在步驟901,選擇并解碼對(duì)象代碼17的一個(gè)塊。在步驟902,識(shí)別該對(duì)象代碼17的塊中對(duì)對(duì)象處理器3的對(duì)象寄存器5的引用175。更具體地講,引用175引用窗口化的對(duì)象寄存器文件502。此外,在步驟卯3,識(shí)別對(duì)象代碼17中引起寄存器窗口510的移動(dòng)的指令176。在步驟904,如上所述參考堆棧指針SR_SP在目標(biāo)計(jì)算平臺(tái)10上設(shè)置SR堆棧400。在步驟卯5,參考SR堆棧400和堆棧指針SR一SP產(chǎn)生目標(biāo)代碼21。即,利用將數(shù)據(jù)值存儲(chǔ)為SR堆棧400上的條目401并對(duì)其進(jìn)行檢索的目標(biāo)代碼指令來(lái)產(chǎn)生對(duì)象代碼21的每一塊。這里,在步驟卯6,從識(shí)別出的寄存器窗口移動(dòng)信息176獲得的目標(biāo)代碼通過(guò)將堆棧指針SR—SP直接更新為引用堆棧的新的頭或者通過(guò)調(diào)節(jié)臨時(shí)幀偏移178,來(lái)調(diào)節(jié)堆棧指針SR—SP。在步驟907,SR—SP的關(guān)聯(lián)位移,訪問(wèn)SR堆棧的幀410內(nèi)的期望的條目401。有利地,SR堆棧機(jī)制400不限制其同時(shí)可存儲(chǔ)的幀401的數(shù)量。再參照?qǐng)D5,需要注意的是,對(duì)象處理器3的該示例硬件實(shí)現(xiàn)僅提供8個(gè)寄存器窗口位置511,并且根據(jù)定義,SPARC硬件僅能提供最多32個(gè)寄存器窗口位置。一旦每一寄存器窗口位置511包含有效數(shù)據(jù),則另外任何的SAVE會(huì)強(qiáng)迫溢出操作來(lái)清空窗口化的寄存器文件502,以便釋放新的臨時(shí)工作空間。相比之下,當(dāng)前仿真的寄存器窗口機(jī)制避免了與對(duì)象架構(gòu)的自動(dòng)溢出和載入操作的檢測(cè)和執(zhí)行相關(guān)聯(lián)的可觀開銷。也就是說(shuō),當(dāng)前的寄存器窗口機(jī)制不受這樣的有限硬件限制的局限,相反,SR堆棧400按照需要擴(kuò)展以便包含用于每一SAVE的必需的另外的條目401。如果對(duì)象計(jì)算架構(gòu)包括最多有限數(shù)量n個(gè)寄存器窗口位置,則隨著執(zhí)行進(jìn)展,SR堆??删哂衜個(gè)幀410,其中m和n均是正整數(shù),且m大于n。SR堆棧400相對(duì)大,并且不具有預(yù)定的有限大小。在大多數(shù)目標(biāo)計(jì)算平臺(tái)中,存儲(chǔ)器18足夠大,因此對(duì)于翻譯器19而言,SR堆棧400看起來(lái)像無(wú)限資源。從根本上講,SR堆棧400的大小有限,但是在實(shí)際中,堆棧的理論最大大小遠(yuǎn)超過(guò)任何理想實(shí)現(xiàn)所需的大小(例如,每16個(gè)64位條目1Kb),從而SR堆??梢员划?dāng)作無(wú)限資源(即,SR堆棧400可以容易地存儲(chǔ)幾百個(gè)幀410)。圖IO是示出目標(biāo)計(jì)算架構(gòu)的存儲(chǔ)器中的多個(gè)堆棧數(shù)據(jù)結(jié)構(gòu)的示意圖,用于解釋本發(fā)明的另一方面。圖IO示出如上所述的SR堆棧400,在這種情況下,SR堆棧400在圖中垂直向下生長(zhǎng)。此外,在目標(biāo)計(jì)算架構(gòu)IO的存儲(chǔ)器中定義了許多其它堆棧,這是本領(lǐng)域技術(shù)人員所熟悉的。示出的堆棧包括對(duì)象堆棧450、目標(biāo)堆棧460和翻譯器堆棧470等。這里,對(duì)象堆棧450對(duì)對(duì)象架構(gòu)中為對(duì)象代碼的執(zhí)行而設(shè)置的執(zhí)行堆棧(也稱為控制堆棧或函數(shù)堆棧)進(jìn)行仿真。也就是說(shuō),從對(duì)象代碼到目標(biāo)代碼的程序代碼轉(zhuǎn)換的一部分處理包括在目標(biāo)架構(gòu)上創(chuàng)建和操作對(duì)象堆棧450。目標(biāo)堆棧460是為目標(biāo)代碼21的執(zhí)行設(shè)置的堆棧。翻譯器堆棧470是為翻譯器19的執(zhí)行設(shè)置的堆棧。這些堆棧以及其它堆棧均同時(shí)存在于目標(biāo)架構(gòu)的存儲(chǔ)器中,并且通常由目標(biāo)操作系統(tǒng)20結(jié)合翻譯器代碼19和目標(biāo)代碼21等來(lái)管理。對(duì)象堆棧450特別受關(guān)注,因?yàn)樵趯?duì)象架構(gòu)l中,寄存器溢出操作將寄存器值從窗口化的硬件對(duì)象寄存器502傳遞到對(duì)象系統(tǒng)的存儲(chǔ)器8中設(shè)置的對(duì)象堆棧上。相反,對(duì)象架構(gòu)中的載入操作將寄存器值從對(duì)象堆棧傳遞到窗口化的硬件對(duì)象寄存器502。在示例第9版本的SPARC架構(gòu)中,每一SAVE類型的寄存器移動(dòng)導(dǎo)致在執(zhí)行堆棧中預(yù)留空間,當(dāng)溢出操作被執(zhí)行時(shí),該空間將被來(lái)自各個(gè)寄存器窗口位置511中的寄存器502的寄存器值填充。即,如圖10所示,對(duì)象代碼17(現(xiàn)在被翻譯為目標(biāo)代碼21)可合理地假設(shè),在某些情況下,所需數(shù)據(jù)值將出現(xiàn)在仿真版本的對(duì)象堆棧450中分配的空間中。然而,除非這樣的數(shù)據(jù)值實(shí)際上是從SR堆棧400復(fù)制到仿真的對(duì)象堆棧450中的,否則數(shù)據(jù)值將不會(huì)如預(yù)期地出現(xiàn)。圖IO示出SR堆棧400上的示例的一組具有條目的幀。這里,幀410被標(biāo)記為F0至F8。幀如圖5所示互相重疊,但是在圖IO中為了清晰起見,沒有示出為重疊。此外,為了清晰起見,在圖IO不再示出各個(gè)條目401。為了仿真對(duì)象平臺(tái)的行為,當(dāng)每一新幀410F0-F8被添加到SR堆棧400中時(shí),在仿真的執(zhí)行堆棧450上預(yù)留空間。此外,仿真的對(duì)象堆棧450點(diǎn)綴有其它數(shù)據(jù),如臨時(shí)值以及函數(shù)的調(diào)用和返回參數(shù),這是對(duì)執(zhí)行對(duì)象代碼17在對(duì)象堆棧上的效果進(jìn)行仿真所需的。存在具體影響數(shù)據(jù)從對(duì)象寄存器到對(duì)象堆棧的傳遞的某些對(duì)象代碼指令。在這里所討"i侖的第9版本的SPARC示例中,"flushw"指令通過(guò)重復(fù)地執(zhí)行溢出陷阱,將除了當(dāng)前窗口位置之外的所有寄存器502從窗口化的硬件對(duì)象寄存器502刷入對(duì)象執(zhí)行堆棧。通過(guò)在任何寄存器窗口位置(除了當(dāng)前寄存器窗口位置之外)具有有效內(nèi)容時(shí)引起溢出陷阱來(lái)實(shí)現(xiàn)"flushw"指令。在對(duì)象架構(gòu)上,.參考CANSAVE控制/狀態(tài)寄存器來(lái)計(jì)算具有有效數(shù)據(jù)的窗口位置的數(shù)量。此外,編程語(yǔ)言C可包括專門針對(duì)對(duì)象計(jì)算平臺(tái)編譯的本地代碼庫(kù)。C編程語(yǔ)言包括諸如"setjmp"和"longjmp"的指令,這些指令盡管現(xiàn)在被廣泛認(rèn)為是陳舊的,并且實(shí)現(xiàn)起來(lái)極其困難,但是這些指令可出現(xiàn)在許多現(xiàn)實(shí)世界的對(duì)象程序中,特別是遺留程序中。在C編程語(yǔ)言中"setjmp1p"lon&jmp"指令通常用于非本地出口或者軟件異常處理。setjmp函數(shù)通過(guò)保存關(guān)于在對(duì)象代碼中出現(xiàn)對(duì)setjmp函數(shù)的調(diào)用時(shí)的執(zhí)行環(huán)境的信息來(lái)識(shí)別返回點(diǎn)。對(duì)象程序的執(zhí)行通常在對(duì)setjmp的調(diào)用之后繼續(xù),直到在隨后的一些點(diǎn),對(duì)longjmp的調(diào)用導(dǎo)致脫離該返回點(diǎn),從而#丸行控制#皮傳遞回setjmp纟皮調(diào)用時(shí)的點(diǎn)。setjmp例程通常包括將寄存器值從對(duì)象寄存器復(fù)制到對(duì)象堆棧,longjmp函數(shù)通常將這些值從堆?;謴?fù)到對(duì)象寄存器中。作為另一個(gè)示例,編程語(yǔ)言C可包括具有創(chuàng)建、保存和恢復(fù)上下文的函數(shù)的處理器家族專用實(shí)現(xiàn),用于信號(hào)處理或者用戶多線程。一些C庫(kù)在名稱"getcontext,,、"secontex"和"makecontext"下提供這樣的例程。像本地C庫(kù)的一部分一樣提供上下文函數(shù),但是其具有用于特定硬件,如ARM、PowerPC,SPARC和x86的特定實(shí)現(xiàn)。作為另一個(gè)示例,更高級(jí)的編程緒言〔++提供專用于處理軟件異常的指令。與更典型的"if,類型的指令相比,盡管這些€++異常處理指令主要意在處理對(duì)象程序的執(zhí)行期間遇到的異常情形,但是這些〔++異常處理指令本身也是方便的編程結(jié)構(gòu),并且經(jīng)常用于簡(jiǎn)化程序的算法。具體地講,C+十異常指令包括"try"、"catch"和"throw"指令。在可由對(duì)象處理器執(zhí)行的二進(jìn)制對(duì)象代碼中實(shí)現(xiàn)這些指令因此包括數(shù)據(jù)在對(duì)象寄存器和對(duì)象堆棧之間的傳遞。還有許多其它需要這樣的數(shù)據(jù)傳遞的情形,包括例如堆?;赝?,其中對(duì)象程序沿執(zhí)行堆棧往回運(yùn)行,因此需要在執(zhí)行堆棧上呈現(xiàn)有效的對(duì)象寄存器值。圖11是示出在用于仿真窗口化的對(duì)象寄存器502的SR堆棧400和用于仿真對(duì)象平臺(tái)的執(zhí)行堆棧的對(duì)象堆棧450之間傳遞數(shù)據(jù)值(反之亦然)的機(jī)制的示意性流程圖。在步驟1101,對(duì)象代碼17被解碼以便識(shí)別如上所述的SAVE和RESTORE類型寄存器窗口移動(dòng)176等。在步驟1102,針對(duì)識(shí)別出的每一寄存器窗口移動(dòng)176更新CR計(jì)數(shù)器。適當(dāng)?shù)?,每一SAVE使CR計(jì)數(shù)器加1,每一RESTORE從CR計(jì)數(shù)器減1。因此,當(dāng)對(duì)象程序進(jìn)行時(shí),CR計(jì)數(shù)器計(jì)算SR堆棧400上具有條目401的幀410的數(shù)量。此外,在步驟1103,識(shí)別這樣的對(duì)象指令在對(duì)象架構(gòu)中,這些對(duì)象指令需要窗口化的對(duì)象寄存器502中保存的數(shù)據(jù)值被保存到對(duì)象執(zhí)行堆棧中,這些對(duì)象指令在這里被稱為SPILL類型指令。作為SPARC對(duì)象架構(gòu)的特定示例,"flushw"對(duì)象指令被識(shí)別。在步驟1104,如圖10中所示,提供目標(biāo)代碼21來(lái)將確定數(shù)量的具有條目401的幀410從SR堆棧400刷入仿真的對(duì)象堆棧450上分配的相應(yīng)的空間。在圖10示出的示例中,SR堆棧400包含^f皮標(biāo)記為F0至F8的9個(gè)幀的條目。這里,CR計(jì)數(shù)器顯示8個(gè)較早的幀F(xiàn)0至F7(即,不包括當(dāng)前條目幀F(xiàn)8)需要被從SR堆棧400復(fù)制到對(duì)象堆棧(CR=8)。在步驟1105,在這樣重復(fù)的溢出操作之后,CR計(jì)數(shù)器更新為零,以顯示所有需要的幀410均已被從SR堆棧400復(fù)制到對(duì)象堆棧450。如上所述,在對(duì)象架構(gòu)中,"flushw"指令使除了當(dāng)前位置之外的所有寄存器窗口位置511無(wú)效,從而對(duì)象執(zhí)行堆?,F(xiàn)在為所有先前的寄存器窗口位置保存對(duì)象寄存器值的標(biāo)準(zhǔn)版本。一些對(duì)象程序,如C上下文函數(shù)、setjmp/longjump函數(shù)和0++異常將改變存儲(chǔ)在對(duì)象堆棧中的數(shù)據(jù)值。因此,在圖IO所示的仿真環(huán)境下,重要的是,引用仿真的對(duì)象執(zhí)行堆棧450中現(xiàn)在保存的數(shù)據(jù)而非SR堆棧400上的條目401中的(現(xiàn)在可能是無(wú)效的)數(shù)據(jù)。因此,在步驟1106,現(xiàn)在產(chǎn)生目標(biāo)代碼以適當(dāng)?shù)卦L問(wèn)仿真的對(duì)象堆棧450上的期望數(shù)據(jù)值。步驟1107包括識(shí)別這樣的對(duì)象代碼指令,在對(duì)象架構(gòu)中這些對(duì)象代碼指令導(dǎo)致寄存器值被從對(duì)象執(zhí)行堆棧加載到窗口化的寄存器文件502中,這些對(duì)象代碼指令在這里將被稱為FILL類型指令。在示例SPARC對(duì)象架構(gòu)中,適宜地,這是"restore"指令。在這里所提供的仿真的機(jī)制中,在步驟1108測(cè)試CR計(jì)數(shù)器。如果CR計(jì)數(shù)器非零(CR>0),從而指示SR堆棧400中存在一個(gè)或多個(gè)有效幀410,則在步驟1105,響應(yīng)于RESTORE指令,CR被更新(在這種情況下遞減,CR=CR-1),并且沒有從對(duì)象堆棧450復(fù)制數(shù)據(jù)。這里,如上所述,對(duì)象"restore"導(dǎo)致堆棧指針SR_SP的調(diào)節(jié),以便在SR堆棧400上選擇不同的幀410。然而,當(dāng)CR計(jì)數(shù)器為零(CR=0),從而指示在SR堆棧上不存在較早的有效的幀時(shí),在步驟1109,執(zhí)行載入操作以將數(shù)據(jù)值的幀從對(duì)象堆棧450復(fù)制回SR堆棧400,以便用作RESTORE之后的新的當(dāng)前幀410。來(lái)自對(duì)象堆棧450的數(shù)據(jù)值的幀可被對(duì)象程序修改,因此現(xiàn)在這些數(shù)據(jù)值的標(biāo)準(zhǔn)版本在SR堆棧400的條目401中再次可用,以便于對(duì)象程序中的后續(xù)使用。具體地講,常規(guī)的SPARC架構(gòu)將用于對(duì)象堆棧的堆棧指針存儲(chǔ)在對(duì)象寄存器o6(其別名為sp)中。由于寄存器窗口位置511的重疊,用于調(diào)用者進(jìn)程的堆棧指針在對(duì)象寄存器i6中也是可用的。先前的堆棧指針被稱為幀指針(并且可以利用別名fp對(duì)其訪問(wèn))。對(duì)存儲(chǔ)的寄存器值的修改通常包括改變用于幀指針(i6/fp)和/或堆棧指針(o6/sp)的寄存器值。因此,重要的是,通過(guò)這里所討論的仿真機(jī)制來(lái)正確地維持這些數(shù)據(jù)值。圖12A更詳細(xì)地示出示例溢出操作。首先針對(duì)標(biāo)記為F0和F1的幀執(zhí)行操作"flushw",因此該"flushw"操作將CR計(jì)數(shù)器重設(shè)為零。因此,存在另外(至少)17個(gè)SAVE寄存器移動(dòng)以便在SR堆棧400上形成幀F(xiàn)2至F19,如CR計(jì)數(shù)器所指示的(CR=17)。在對(duì)象代碼中識(shí)別SPILL指令(即,"flushw"),該SPILL指令導(dǎo)致寄存器值的17個(gè)幀F(xiàn)19至F2被從SR堆棧400復(fù)制到對(duì)象堆棧,并使CR計(jì)數(shù)器歸零。所有幀F(xiàn)2至F18現(xiàn)在是無(wú)效的,在SR堆棧上僅當(dāng)前活動(dòng)的幀F(xiàn)19保持有效。圖12B更詳細(xì)地示出從圖12A中所示的情形開始繼續(xù)的示例載入操作。這里,從當(dāng)前活動(dòng)的幀F(xiàn)19的RESTORE(其中,CR=0)導(dǎo)致從對(duì)象堆棧450加載寄存器值的幀以形成新的當(dāng)前幀(這里為F18),替換SR堆棧上該幀中先前的(無(wú)效)數(shù)據(jù)。利用加載到新的當(dāng)前幀F(xiàn)18中的寄存器值來(lái)繼續(xù)執(zhí)行。立即更新或者在對(duì)象代碼塊的末尾更新用于SR堆棧SP一SRS的堆棧指針,以解釋該寄存器窗口移動(dòng)。該傳遞機(jī)制的其它特定實(shí)施例也被構(gòu)思。具體地講,在溢出操作"flushw"之后,SR堆棧上的任何合適的點(diǎn)可用作新的當(dāng)前幀,因?yàn)?flushw"使除了當(dāng)前窗口之外的所有寄存器窗口無(wú)效。例如,SR堆棧可被清空,并且在每一"flushw"之后完全收回的堆??臻g或者SR堆棧上的默認(rèn)位置(如沿著為堆棧分配的空間的一半)可被設(shè)置為新的當(dāng)前幀??梢岳脤S玫挠布为?dú)地構(gòu)造本發(fā)明的至少一些實(shí)施例,這里所使用的諸如"模塊"或"單元"的術(shù)語(yǔ)可包括(但不限于)執(zhí)行特定任務(wù)的硬件裝置,如現(xiàn)場(chǎng)可編程門陣列(FPGA)或?qū)S眉呻娐?ASIC)。可選地,本發(fā)明的元件可構(gòu)造為駐留于可尋址的存儲(chǔ)介質(zhì)上,并被構(gòu)造為在一個(gè)或多個(gè)處理器上執(zhí)行。因此,在一些實(shí)施例中,本發(fā)明的功能元件可包括例如諸如軟件組件、面向?qū)ο蟮能浖M件、類組件和任務(wù)組件的組件、進(jìn)程、函數(shù)、屬性、過(guò)程、子進(jìn)程、程序代碼段、驅(qū)動(dòng)程序、固件、微碼、電路、數(shù)據(jù)、數(shù)據(jù)庫(kù)、數(shù)據(jù)結(jié)構(gòu)、表、數(shù)組和變量。此外,盡管已參照這里所討論的組件、模塊和單元描述了優(yōu)選實(shí)施例,但是這些功能元件可被組合為更少的元件或者被分離為另外的元件。盡管已經(jīng)顯示和描述了一些示例實(shí)施例,但是本領(lǐng)域技術(shù)人員應(yīng)該理解,在不脫離權(quán)利要求中限定的本發(fā)明的范圍的情況下,可以進(jìn)行各種改變和修改。需要注意與本說(shuō)明書同時(shí)提交或者在本說(shuō)明書之前提交的與本申請(qǐng)相關(guān)的用于公眾對(duì)本說(shuō)明書的檢查公開的所有文件和文檔,所有這些文件和文檔的內(nèi)容通過(guò)引用包含于此。本說(shuō)明書(包括權(quán)利要求、摘要和附圖)中公開的所有特征以及所公開的任何方法或處理的所有步驟可以按照任何組合方式進(jìn)行組合,除了其中至少一些這樣的特征和/或步驟互相排斥的組合。本說(shuō)明書(包括權(quán)利要求、摘要和附圖)中公開的每一特征可以通過(guò)針對(duì)相同、等同或相似的目的的可選特征來(lái)替換,除非另外明確地聲明。因此,除非另外明確地聲明,所公開的每一特征僅是一類等同或相似特征的一個(gè)示例。本發(fā)明不限于前述實(shí)施例的細(xì)節(jié)。本發(fā)明延伸至本說(shuō)明書(包括權(quán)利要合,或者延伸至所公開的任何方法或處理的步驟中的任何新穎的步驟或任何新穎的步驟組合。權(quán)利要求1、一種計(jì)算系統(tǒng),該計(jì)算系統(tǒng)被改編以支持寄存器窗口架構(gòu),以便使用可由基于寄存器窗口的對(duì)象計(jì)算架構(gòu)的對(duì)象處理器執(zhí)行的對(duì)象代碼,在該基于寄存器窗口的對(duì)象計(jì)算架構(gòu)中,寄存器窗口被定位為使從窗口化的寄存器文件中選擇的對(duì)象處理器的對(duì)象寄存器的子集顯露,所述對(duì)象代碼包括基于窗口的指令和基于寄存器的指令,基于窗口的指令影響寄存器窗口,基于寄存器的指令包含對(duì)寄存器窗口中的對(duì)象寄存器的引用,該計(jì)算系統(tǒng)包括解碼器單元,被布置為將對(duì)象代碼解碼,以從基于窗口的指令中獲得寄存器窗口移動(dòng)信息并從基于寄存器的指令中獲得一個(gè)或多個(gè)窗口化的對(duì)象寄存器引用;具有堆棧數(shù)據(jù)結(jié)構(gòu)的存儲(chǔ)器,該堆棧數(shù)據(jù)結(jié)構(gòu)被布置為存儲(chǔ)多個(gè)條目;編碼器單元,被布置為從解碼器單元所解碼的對(duì)象代碼產(chǎn)生目標(biāo)代碼;和目標(biāo)處理器,被布置為執(zhí)行該目標(biāo)代碼,以設(shè)置與存儲(chǔ)器中的堆棧數(shù)據(jù)結(jié)構(gòu)的頭有關(guān)的堆棧指針,參考寄存器窗口移動(dòng)信息調(diào)節(jié)該堆棧指針,參考該堆棧指針與關(guān)于各個(gè)窗口化的對(duì)象寄存器引用確定的位移的組合來(lái)訪問(wèn)堆棧數(shù)據(jù)結(jié)構(gòu)中的條目。2、根據(jù)權(quán)利要求1所述的計(jì)算系統(tǒng),其中,解碼器單元被布置為識(shí)別對(duì)象代碼中導(dǎo)致寄存器窗口的至少SAVE和RESTORE類型移動(dòng)的一個(gè)或多個(gè)基于窗口的指令,并從其獲得至少SAVE和RESTORE類型寄存器窗口移動(dòng)信息。3、根據(jù)權(quán)利要求2所述的計(jì)算系統(tǒng),其中,目標(biāo)處理器被布置為響應(yīng)于每一條所述SAVE和RESTORE類型寄存器窗口移動(dòng)信息調(diào)節(jié)堆棧指針。4、根據(jù)權(quán)利要求3所述的計(jì)算系統(tǒng),其中,目標(biāo)處理器被布置為響應(yīng)于每一條所述SAVE和RESTORE類型寄存器窗口移動(dòng)信息,將堆棧指針調(diào)節(jié)預(yù)定的偏移。5、根據(jù)權(quán)利要求4所述的計(jì)算系統(tǒng),其中,目標(biāo)處理器被布置為響應(yīng)于每一條所述SAVE類型寄存器窗口移動(dòng)信息,使堆棧指針增加預(yù)定的偏移,響應(yīng)于每一條所述RESTORE類型寄存器窗口移動(dòng)信息,使堆棧指針減小預(yù)定的偏移;或者響應(yīng)于每一條所述SAVE類型寄存器窗口移動(dòng)信息,使堆棧指針減小預(yù)定的偏移,響應(yīng)于每一條所述RESTORE類型寄存器窗口移動(dòng)信息,使堆棧指針增加預(yù)定的偏移。6、根據(jù)權(quán)利要求5所述的計(jì)算系統(tǒng),其中,所述預(yù)定的偏移與可尋址的一組窗口化的對(duì)象寄存器引用的大小對(duì)應(yīng)。7、根據(jù)權(quán)利要求6所述的計(jì)算系統(tǒng),其中,目標(biāo)處理器被布置為關(guān)于各個(gè)窗口化的對(duì)象寄存器引用在可尋址的一組窗口化的對(duì)象寄存器引用中的位置,為每一窗口化的對(duì)象寄存器引用確定所述位移。8、根據(jù)權(quán)利要求1所述的計(jì)算系統(tǒng),其中,編碼器單元被布置為發(fā)布至少一個(gè)目標(biāo)代碼指令,所述目標(biāo)代碼指令使目標(biāo)處理器通過(guò)結(jié)合調(diào)節(jié)的堆棧指針和確定的位移來(lái)訪問(wèn)從堆棧數(shù)據(jù)結(jié)構(gòu)中選擇的條目。9、根據(jù)權(quán)利要求1所述的計(jì)算系統(tǒng),其中,目標(biāo)處理器被布置為根據(jù)寄存器窗口移動(dòng)信息來(lái)確定幀偏移以便將堆棧指針調(diào)節(jié)預(yù)定數(shù)量的條目,并且根據(jù)確定的幀偏移和確定的位移來(lái)調(diào)節(jié)堆棧指針以訪問(wèn)從堆棧數(shù)據(jù)結(jié)構(gòu)中選擇的條目。10、根據(jù)權(quán)利要求1所述的計(jì)算系統(tǒng),其中,解碼器單元被布置為根據(jù)對(duì)象代碼中的基于窗口的指令將對(duì)象代碼劃分為多個(gè)塊,寄存器窗口移動(dòng)信息是從所述基于窗口的指令獲得的。11、根據(jù)權(quán)利要求1所述的計(jì)算系統(tǒng),其中,所述對(duì)象代碼包括執(zhí)行調(diào)用被調(diào)用者部分的功能的至少一個(gè)調(diào)用者部分,并且編碼器單元被布置為產(chǎn)生將被調(diào)用者部分內(nèi)聯(lián)入調(diào)用者部分中的單個(gè)目標(biāo)代碼塊。12、根據(jù)權(quán)利要求11所述的計(jì)算系統(tǒng),其中,編碼器單元被布置為產(chǎn)生由目標(biāo)處理器執(zhí)行的目標(biāo)代碼指令,以便i)根據(jù)在對(duì)象代碼的調(diào)用者部分中識(shí)別出的窗口化的對(duì)象寄存器引用,參考從窗口化的對(duì)象寄存器引用獲得的位移以及堆棧指針來(lái)訪問(wèn)從堆棧數(shù)據(jù)結(jié)構(gòu)中選4奪的條目;ii)根據(jù)從對(duì)象代碼的調(diào)用者部分獲得的寄存器窗口移動(dòng)信息,增加與堆棧數(shù)據(jù)結(jié)構(gòu)的預(yù)定數(shù)量的條目相等的幀偏移;iii.)根據(jù)在對(duì)象代碼的被調(diào)用者部分中識(shí)別出的窗口化的對(duì)象寄存器引用,參考從窗口化的對(duì)象寄存器引用獲得的位移以及根據(jù)幀偏移調(diào)節(jié)的堆棧指針來(lái)訪問(wèn)從堆棧數(shù)據(jù)結(jié)構(gòu)選擇的條目;iv)根據(jù)從對(duì)象代碼的被調(diào)用者部分獲得的寄存器窗口移動(dòng)信息減'J、幀偏移。13、根據(jù)權(quán)利要求1所述的計(jì)算系統(tǒng),其中所述存儲(chǔ)器還包括仿真的部分,該仿真的部分被布置為對(duì)用于對(duì)象代碼的執(zhí)行的執(zhí)行堆棧進(jìn)行仿真;解碼器單元被布置為將對(duì)象代碼解碼以識(shí)別至少SAVE和SAVE類型寄存器窗口移動(dòng)信息;識(shí)別出的寄存器窗口移動(dòng)更新計(jì)數(shù)器,所述更新包括針對(duì)每一SAVE類型移動(dòng)使計(jì)數(shù)器增加并且針對(duì)每一RESTORE類型移動(dòng)使計(jì)數(shù)器減小,計(jì)數(shù)器藉此計(jì)算幀的數(shù)量,每一所述幀包含存儲(chǔ)在堆棧數(shù)據(jù)結(jié)構(gòu)上的預(yù)定數(shù)量的條目;解碼器單元被布置為識(shí)別對(duì)象代碼中的SPILL類型指令,該SPILL類型指令將需要從對(duì)象代碼中的基于寄存器的指令獲得的窗口化的對(duì)象寄存器引用中所保存的數(shù)據(jù)值的溢出;編碼器單元被布置為產(chǎn)生由目標(biāo)處理器執(zhí)行的目標(biāo)代碼,以便將數(shù)據(jù)值從堆棧數(shù)據(jù)結(jié)構(gòu)中的條目復(fù)制到存儲(chǔ)器中的仿真的執(zhí)行堆棧上所分配的相應(yīng)條目,其中,所述條目位于由計(jì)數(shù)器確定的數(shù)量的幀中;編碼器單元被布置為產(chǎn)生由目標(biāo)處理器執(zhí)行的目標(biāo)代碼,以便將計(jì)數(shù)器重設(shè)為默認(rèn)值,該默認(rèn)值指示在堆棧數(shù)據(jù)結(jié)構(gòu)中不存在有效的條目的幀;編碼器單元被布置為產(chǎn)生由目標(biāo)處理器執(zhí)行的目標(biāo)代碼,以便對(duì)存儲(chǔ)器中的仿真的執(zhí)行堆棧中的條目中所存儲(chǔ)的數(shù)據(jù)值進(jìn)行尋址。14、根據(jù)權(quán)利要求13所述的計(jì)算系統(tǒng),其中解碼器單元還被布置為識(shí)別對(duì)象代碼中的FILL類型指令,該FILL類型指令需要存儲(chǔ)器中的仿真的執(zhí)行堆棧中的條目中所存儲(chǔ)的數(shù)據(jù)值的載入;編碼器單元被布置為產(chǎn)生由目標(biāo)處理器執(zhí)行的目標(biāo)代碼,以便相對(duì)于默認(rèn)值測(cè)試計(jì)數(shù)器,并且i)當(dāng)計(jì)數(shù)器的測(cè)試顯示堆棧數(shù)據(jù)結(jié)構(gòu)中存在一個(gè)或多個(gè)有效的條目的幀時(shí),根據(jù)識(shí)別出的FILL指令更新計(jì)數(shù)器,ii)當(dāng)計(jì)數(shù)器的測(cè)試顯示堆棧數(shù)據(jù)結(jié)構(gòu)上不存在較早的有效的條目的幀時(shí),將數(shù)據(jù)值從存儲(chǔ)器中的仿真的執(zhí)行堆棧的條目的幀復(fù)制到存儲(chǔ)器中的堆棧數(shù)據(jù)結(jié)構(gòu),作為堆棧數(shù)據(jù)結(jié)構(gòu)中的當(dāng)前的條目的幀。15、根據(jù)權(quán)利要求1所述的計(jì)算系統(tǒng),其中,解碼器單元被布置為將對(duì)象代碼劃分為多個(gè)對(duì)象代碼塊,并且編碼器單元^f皮布置為將目標(biāo)代碼產(chǎn)生為的執(zhí)行相交織。16、根據(jù)權(quán)利要求1所述的計(jì)算系統(tǒng),其中,所述對(duì)象代碼是二進(jìn)制可執(zhí)行代碼,所述目標(biāo)代碼是二進(jìn)制可執(zhí)行代碼。17、一種被改編以支持寄存器窗口架構(gòu)的計(jì)算系統(tǒng)的控制方法,該方法包括以下步驟(a)將可由基于寄存器窗口的對(duì)象計(jì)算架構(gòu)的對(duì)象處理器執(zhí)行的對(duì)象代碼解碼,其中,寄存器窗口被定位為使從窗口化的寄存器文件中選擇的對(duì)象寄存器的子集顯露,包括以下步驟(al)從對(duì)象代碼中的指令識(shí)別窗口化的對(duì)象寄存器引用,其中所述窗口化的對(duì)象寄存器引用包括對(duì)寄存器窗口中的所述對(duì)象寄存器之一的引用;(a2)從對(duì)象代碼中的用于引起寄存器窗口的移動(dòng)的指令獲得寄存器窗口移動(dòng)信息;(b)在計(jì)算系統(tǒng)的存儲(chǔ)器中設(shè)置堆棧數(shù)據(jù)結(jié)構(gòu),并設(shè)置指示在存儲(chǔ)器中該堆棧數(shù)據(jù)結(jié)構(gòu)的頭的堆棧指針,其中該堆棧數(shù)據(jù)結(jié)構(gòu)被布置為存儲(chǔ)多個(gè)條目;(c)將對(duì)象代碼轉(zhuǎn)換為目標(biāo)代碼,并在計(jì)算系統(tǒng)的目標(biāo)處理器上執(zhí)行該目標(biāo)代碼,從而執(zhí)行以下步驟(cl)參考識(shí)別出的寄存器窗口移動(dòng)信息調(diào)節(jié)堆棧指針;(c2)參考堆棧指針與從窗口化的對(duì)象寄存器引用確定的位移的組合來(lái)訪問(wèn)堆棧凄t據(jù)結(jié)構(gòu)中的至少一個(gè)條目。18、根據(jù)權(quán)利要求17所述的方法,其中步驟(a2)包括識(shí)別對(duì)象代碼中導(dǎo)致寄存器窗口的至少SAVE和RESTORE類型移動(dòng)的一個(gè)或多個(gè)指令,從而獲得至少SAVE和RESTORE類型寄存器窗口移動(dòng)信息;步驟(cl)包括響應(yīng)于每一條所述SAVE類型寄存器窗口移動(dòng)信息,使堆棧指針增加預(yù)定的幀偏移,響應(yīng)于每一條所述RESTORE類型寄存器窗口移動(dòng)信.息,使堆棧指針減小預(yù)定的幀偏移;或者響應(yīng)于每一條所述SAVE類型寄存器窗口移動(dòng)信息,使堆棧指針減小預(yù)定的幀偏移,響應(yīng)于每一條所述RESTORE類型寄存器窗口移動(dòng)信息,使堆棧指針增加預(yù)定的幀偏移。19、根據(jù)權(quán)利要求18所述的方法,其中,堆棧數(shù)據(jù)結(jié)構(gòu)中的每一條目與對(duì)象代碼中的基于寄存器的指令中的窗口化的對(duì)象寄存器引用集合中的一個(gè)對(duì)應(yīng);,在步驟(cl)中,所述幀偏移在堆棧數(shù)據(jù)結(jié)構(gòu)上將堆棧指針調(diào)節(jié)與所述集合的大小對(duì)應(yīng)數(shù)量的條目;在步驟(c2)中,所述位移根據(jù)窗口化的對(duì)象寄存器在所述集合內(nèi)的相對(duì)位置,將堆棧指針在堆棧數(shù)據(jù)結(jié)構(gòu)上移動(dòng)一定數(shù)量的條目。20、根據(jù)權(quán)利要求17所述的方法,還包括步驟根據(jù)從其獲得寄存器窗口移動(dòng)信息的指令的位置將對(duì)象代碼劃分為多個(gè)塊,并且針對(duì)每一個(gè)這樣的塊,相對(duì)于對(duì)象代碼塊中的對(duì)象代碼指令來(lái)執(zhí)行步驟(a)、(b)和(c)。21、根據(jù)權(quán)利要求17所述的方法,其中,所述對(duì)象代碼包括執(zhí)行調(diào)用被調(diào)用者部分的功能的至少一個(gè)調(diào)用者部分,并且步驟(c)還包括提供將被調(diào)用者部分內(nèi)聯(lián)入調(diào)用者部分中的單個(gè)目標(biāo)代碼塊。22、根據(jù)權(quán)利要求21所述的方法,還包括步驟將堆棧指針設(shè)置為第一值,并且執(zhí)行一個(gè)或多個(gè)目標(biāo)代碼指令,以便根據(jù)在對(duì)象代碼的調(diào)用者部分中識(shí)別出的窗口化的對(duì)象寄存器引用,參考從窗口化的對(duì)象寄存器引用獲得的位移以及堆棧指針的第一值來(lái)訪問(wèn)從堆棧數(shù)據(jù)結(jié)構(gòu)中選擇的條目;根據(jù)從對(duì)象代碼的調(diào)用者部分獲得的寄存器窗口移動(dòng)信息,將幀偏移增加預(yù)定數(shù)量的條目;執(zhí)行一個(gè)或多個(gè)目標(biāo)代碼指令,以便根據(jù)在對(duì)象代碼的被調(diào)用者部分中識(shí)別出的窗口化的對(duì)象寄存器引用,參考從窗口化的對(duì)象寄存器引用獲得的位移以及根據(jù)幀偏移調(diào)節(jié)的堆棧指針來(lái)訪問(wèn)從堆棧數(shù)據(jù)結(jié)構(gòu)選擇的條目;根據(jù)從對(duì)象代碼的被調(diào)用者部分獲得的寄存器窗口移動(dòng)信息減d、幀偏移。23、根據(jù)權(quán)利要求18所述的方法,還包括在計(jì)算系統(tǒng)的所述存儲(chǔ)器中設(shè)置仿真的執(zhí)行堆棧,該仿真的執(zhí)行堆棧對(duì)用于對(duì)象代碼的執(zhí)行的執(zhí)行堆棧進(jìn)行仿真;將對(duì)象代碼解碼以識(shí)別至少SAVE和SAVE類型寄存器窗口移動(dòng)信息;針對(duì)每一條所述SAVE和SAVE類型寄存器窗口移動(dòng)信息更新計(jì)數(shù)器,所述更新包括針對(duì)每一SAVE類型移動(dòng)使計(jì)數(shù)器增加并且針對(duì)每一RESTORE類型移動(dòng)使計(jì)數(shù)器減小,計(jì)數(shù)器藉此計(jì)算存儲(chǔ)在堆棧數(shù)據(jù)結(jié)構(gòu)上的條目的幀的數(shù)量;識(shí)別對(duì)象代碼中的SPILL類型指令,該SPILL類型指令需要將由對(duì)象代碼尋址的窗口化的對(duì)象寄存器中所保存的數(shù)據(jù)值溢出到執(zhí)行堆棧中;將數(shù)據(jù)值從堆棧數(shù)據(jù)結(jié)構(gòu)中的一定數(shù)量的條目的幀復(fù)制到仿真的執(zhí)行堆棧上所分配的相應(yīng)空間中,其中,所述條目的幀的數(shù)量由計(jì)數(shù)器確定;將計(jì)數(shù)器重設(shè)為默認(rèn)值,該默認(rèn)值指示在堆棧數(shù)據(jù)結(jié)構(gòu)中不存在有效的條目的幀;產(chǎn)生目標(biāo)代碼,以便對(duì)仿真的執(zhí)行堆棧中所存儲(chǔ)的數(shù)據(jù)值進(jìn)行尋址。24、根據(jù)權(quán)利要求23所述的方法,還包括識(shí)別對(duì)象代碼中的FILL類型指令,該FILL類型指令需要仿真的執(zhí)行堆棧中所存儲(chǔ)的數(shù)據(jù)值被載入到由對(duì)象代碼尋址的窗口化的對(duì)象寄存器中;相對(duì)于默認(rèn)值測(cè)試計(jì)數(shù)器;當(dāng)計(jì)數(shù)器的測(cè)試顯示堆棧數(shù)據(jù)結(jié)構(gòu)中存在一個(gè)或多個(gè)有效的條目的幀時(shí),根據(jù)識(shí)別出的FILL指令更新計(jì)數(shù)器;將數(shù)據(jù)值的幀從仿真的執(zhí)行堆棧復(fù)制到堆棧數(shù)據(jù)結(jié)構(gòu),以用作當(dāng)前的條目的巾貞。25、一種記錄有計(jì)算機(jī)可實(shí)現(xiàn)的指令的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),當(dāng)所述計(jì)算機(jī)可實(shí)現(xiàn)的指令被執(zhí)行時(shí),改編計(jì)算系統(tǒng)使其支持寄存器窗口架構(gòu),其中,該計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)包括(a)被布置為將可由基于寄存器窗口的對(duì)象計(jì)算架構(gòu)的對(duì)象處理器執(zhí)行的對(duì)象代碼解碼的代碼單元,在所述基于寄存器窗口的對(duì)象計(jì)算架構(gòu)中,當(dāng)前寄存器窗口被定位為使從窗口化的寄存器文件中選擇的對(duì)象寄存器的子集顯露,所述解碼包括從對(duì)象代碼中的指令識(shí)別窗口化的對(duì)象寄存器引用,其中所述窗口化的對(duì)象寄存器引用包括對(duì)寄存器窗口中的所述對(duì)象寄存器之一的引用;從對(duì)象代碼中的導(dǎo)致寄存器窗口的移動(dòng)的指令獲得寄存器窗口移動(dòng)信息;(b)被布置為在計(jì)算系統(tǒng)的存儲(chǔ)器中設(shè)置堆棧數(shù)據(jù)結(jié)構(gòu)并設(shè)置堆棧指針的代碼單元,其中該堆棧數(shù)據(jù)結(jié)構(gòu)被布置為存儲(chǔ)多個(gè)條目,所述堆棧指針指示在存儲(chǔ)器中該堆棧數(shù)據(jù)結(jié)構(gòu)的頭;(c)被布置為將對(duì)象代碼轉(zhuǎn)換為目標(biāo)代碼并使該目標(biāo)代碼在計(jì)算系統(tǒng)的處理器上執(zhí)行,從而參考識(shí)別出的寄存器窗口移動(dòng)信息調(diào)節(jié)堆棧指針,并且參考調(diào)節(jié)的堆棧指針與從窗口化的對(duì)象寄存器引用確定的位移的組合來(lái)訪問(wèn)堆棧數(shù)據(jù)結(jié)構(gòu)中的至少一個(gè)條目的代碼單元。全文摘要目標(biāo)計(jì)算系統(tǒng)(10)被改編以支持寄存器窗口架構(gòu),特別用于將非本地對(duì)象代碼(17)轉(zhuǎn)換為由目標(biāo)處理器(13)執(zhí)行的目標(biāo)代碼(21)時(shí)。存儲(chǔ)器中的對(duì)象寄存器堆棧數(shù)據(jù)結(jié)構(gòu)(“SR堆?!?(400)具有多個(gè)幀(410),每一幀包含與對(duì)象處理器(3)中的一個(gè)寄存器窗口(510)的對(duì)象寄存器子集(502)對(duì)應(yīng)的一組條目(401)。在目標(biāo)處理器(13)上執(zhí)行的目標(biāo)代碼(21)訪問(wèn)SR(10)堆棧(400)。SR堆棧(400)存儲(chǔ)大量這樣的幀410,從而避免了諸如模擬從對(duì)象架構(gòu)的窗口化的寄存器文件的自動(dòng)溢出和載入操作的開銷。在一個(gè)實(shí)施例中,具有16個(gè)通用工作寄存器的目標(biāo)計(jì)算系統(tǒng)(10)被改編以支持依賴包含幾十或幾百個(gè)對(duì)象寄存器(502)的寄存器文件(15)的寄存器窗口架構(gòu)。文檔編號(hào)G06F9/455GK101523349SQ200780036887公開日2009年9月2日申請(qǐng)日期2007年9月27日優(yōu)先權(quán)日2006年10月2日發(fā)明者亞歷山大·巴拉克勞·布朗申請(qǐng)人:特蘭斯蒂有限公司
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
奉节县| 福海县| 安吉县| 新津县| 长治县| 东乡县| 辽阳县| 华亭县| 武定县| 忻城县| 开封市| 云阳县| 尼木县| 海晏县| 阳信县| 涟水县| 宝丰县| 突泉县| 深泽县| 边坝县| 马鞍山市| 宜春市| 子长县| 徐汇区| 平定县| 介休市| 玉树县| 上虞市| 宾川县| 奎屯市| 阿拉善盟| 凤山市| 泾源县| 溆浦县| 筠连县| 格尔木市| 读书| 灵宝市| 太仆寺旗| 依兰县| 建瓯市|