專利名稱:控制指令集體系結(jié)構(gòu)之間的二進制編碼翻譯的兼容水平的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計算機處理。更具體地說,本發(fā)明涉及不同指令集體系結(jié)構(gòu)之間或者具有相同指令集體系結(jié)構(gòu)的不同優(yōu)化水平之間的二進制編碼翻譯。
背景技術(shù):
雖然當前的程序代碼編譯器被設(shè)計為產(chǎn)生利用當前指令集體系結(jié)構(gòu)(ISA)的最新發(fā)展的二進制編碼,但是基于先前的指令集體系結(jié)構(gòu)而產(chǎn)生的二進制編碼不能使用這些最新的發(fā)展。二進制編碼翻譯是一種常見方法,用于將基于一種指令集體系結(jié)構(gòu)的給定程序代碼/應用程序的二進制編碼翻譯為基于不同指令集體系結(jié)構(gòu)或基于同一指令集體系結(jié)構(gòu)的不同子集的給定程序代碼/應用程序的二進制編碼。所述不同指令集體系結(jié)構(gòu)可以是一種不同的體系結(jié)構(gòu)或者是先前的指令集體系結(jié)構(gòu)的改進的版本。
通常,經(jīng)二進制編碼翻譯的程序被希望精確地傳達與基于先前的指令集體系結(jié)構(gòu)的原始的經(jīng)二進制編碼翻譯的程序所提供的相同的功能性。換句話說,通常希望二進制編碼翻譯完全保持如先前的指令集體系結(jié)構(gòu)所定義的程序語義,從而提供完全的向后兼容。相應地,先前的指令集體系結(jié)構(gòu)的需求可以包括與該先前的指令集體系結(jié)構(gòu)所定義的程序執(zhí)行的常規(guī)指令流、數(shù)據(jù)精度、異常情況的行為和其他副作用相關(guān)聯(lián)的需求。
這種語義需求通常局限了二進制編碼翻譯的能力——通過在可翻譯的二進制編碼上造成某些限制,或者通過約束二進制編碼翻譯所能夠利用的新的指令集體系結(jié)構(gòu)的優(yōu)點的數(shù)量。例如,如果兩個不同的指令集體系結(jié)構(gòu)不支持同樣的浮點格式、寬度或者精度,則這些指令集體系結(jié)構(gòu)之間的浮點運算的二進制編碼翻譯可能是困難和/或低效的。
本發(fā)明的實施例可以通過參考以下的說明和示出這些實施例的附圖被最佳地理解。這里所包括的圖形的編號方案是這樣的圖形中的給定元素的頭位數(shù)字與圖形的序號相關(guān)聯(lián)。例如,系統(tǒng)100會位于圖1中。然而,對于在不同圖形之間相同的那些元素,元素編號是相同的。
在附圖中圖1示出了根據(jù)本發(fā)明實施例的示例系統(tǒng)100,其包括處理器102和104,用于控制指令集體系結(jié)構(gòu)之間的二進制編碼翻譯的兼容水平。
圖2示出了根據(jù)本發(fā)明實施例的處理器和相關(guān)聯(lián)的存儲器的更詳細的示圖。
圖3示出了根據(jù)本發(fā)明實施例的用于將來自基于第一指令集體系結(jié)構(gòu)的二進制編碼的指令翻譯到來自第二指令集體系結(jié)構(gòu)的指令的流程圖,所述第二指令集體系結(jié)構(gòu)部分地與第一指令集體系結(jié)構(gòu)兼容。
圖4示出根據(jù)本發(fā)明實施例的源碼和所產(chǎn)生的匯編碼,其中使用和沒有使用寄存器作為硬件棧的一部分。
具體實施例方式
在下面的說明中,為了解釋的目的,提出了許多特定的細節(jié),以提供對本發(fā)明的全面的理解。但是,對于本領(lǐng)域的技術(shù)人員來說很明顯,不用這些特定的細節(jié)也可以實現(xiàn)本發(fā)明。
本發(fā)明的實施例考慮部分兼容的指令集體系結(jié)構(gòu),其中,用于第一指令集體系結(jié)構(gòu)所產(chǎn)生的程序代碼的二進制編碼被翻譯為使用第二指令集體系結(jié)構(gòu)某些特征的二進制編碼,同時保持與第一指令集體系結(jié)構(gòu)部分兼容。在一個實施例中,兼容水平由程序環(huán)境控制,所述程序環(huán)境包括但不限于用戶、編譯器和操作系統(tǒng)。在一個這樣的實施例中,在第二指令集體系結(jié)構(gòu)之上定義了一組兼容模式或者開關(guān)。相應地,程序環(huán)境可以明確地設(shè)置所需的兼容模式。在用于硬件翻譯的一個實施例中,可以通過一組硬件指令進行兼容模式的設(shè)置。在用于軟件翻譯的一個實施例中,可以通過結(jié)合啟動二進制編碼的執(zhí)行一起使用的許多命令行標記,進行這種兼容模式的設(shè)置。
因此,如下面將更詳細描述的,本發(fā)明的實施例考慮以(和第一指令集體系結(jié)構(gòu)相關(guān)的)精確的程序語義的一些偏差換得(與第二指令集體系結(jié)構(gòu)相關(guān)的)性能改善。
此外,在一個實施例中,(這里所描述的)二進制編碼所基于的不同指令集體系結(jié)構(gòu)可以是許多不同指令集體系結(jié)構(gòu)中的任何一種,包括但不限于不同的復雜指令集計算機(CISC)指令集,以及不同的精簡指令集計算機(RISC)指令集。這樣的指令集體系結(jié)構(gòu)的例子包括IntelIA-32和IntelIA-64。
圖1示出了根據(jù)本發(fā)明實施例的示例系統(tǒng)100,其包括處理器102和104,用于控制指令集體系結(jié)構(gòu)之間的二進制編碼翻譯的兼容水平。雖然是在系統(tǒng)100的環(huán)境中進行描述,但是本發(fā)明可以在包括任何適當?shù)囊粋€或多個集成電路的任何適當?shù)挠嬎銠C系統(tǒng)中實現(xiàn)。
如圖1所示,計算機系統(tǒng)100包括處理器102和處理器104。計算機系統(tǒng)100還包括存儲器132、處理器總線110和輸入/輸出控制器中心(ICH)140。處理器102和104、存儲器132和ICH 140被耦合到處理器總線110。處理器102和104可以各自包括任何適當?shù)奶幚砥黧w系結(jié)構(gòu),并且對于一個實施例來說,包括例如在可從加利福尼亞州圣克拉拉市的Intel公司得到的Pentium系列處理器中所使用的Intel體系結(jié)構(gòu)。用于其他實施例的計算機系統(tǒng)100可以包括一個、三個或者多個處理器,其中的任一個可以執(zhí)行根據(jù)本發(fā)明實施例的一組指令。
存儲器132存儲例如用于計算機系統(tǒng)100的數(shù)據(jù)和/或指令,并且可以包括任何適當?shù)拇鎯ζ鳎e例來說,例如動態(tài)隨機存取存儲器(DRAM)。圖形控制器134控制在適當?shù)娘@示器136上的信息顯示,舉例來說,顯示器136例如是耦合到圖形控制器134的陰極射線管(CRT)或者液晶顯示器(LCD)。
ICH 140為計算機系統(tǒng)100提供到I/O設(shè)備或者外圍部件的接口。ICH140可以包括任何適當?shù)慕涌诳刂破?,以提供到處理?02/104、存儲器132和/或到與ICH 140相通信的任何適當?shù)脑O(shè)備或部件的任何適當?shù)耐ㄐ沛溌贰τ谝粋€實施例來說,ICH 140為每個接口提供適當?shù)闹俨煤途彌_。
對于一個實施例,ICH 140提供到一個或多個適當?shù)募沈?qū)動器電子設(shè)備(IDE)驅(qū)動器142、通過一個或多個通用串行總線(USB)端口144的一個或多個適當?shù)腢SB設(shè)備的接口,其中,IDE驅(qū)動器142例如是硬盤驅(qū)動器(HDD)或者光盤只讀存儲器(CR ROM)驅(qū)動器,用于存儲例如數(shù)據(jù)和/或指令。對于一個實施例來說,ICH 140還提供到鍵盤151、鼠標152、通過一個或多個并行端口153的例如打印機的一個或多個適當?shù)脑O(shè)備、通過一個或多個串行端口154的一個或多個適當?shù)脑O(shè)備以及軟盤驅(qū)動器155的接口。
另外,計算機設(shè)備100包括翻譯單元180。在一個實施例中,翻譯單元180可以是駐留在主存儲器132和/或處理器102和104中的進程或者任務(wù),并且可以在處理器102和104中被執(zhí)行。但是,本發(fā)明的實施例并不受此限制,因為翻譯單元180可以是執(zhí)行這里所描述的處理(在下面將更詳細地描述)的不同類型的硬件(例如數(shù)字邏輯)。
相應地,計算機系統(tǒng)100包括在其上存儲了指令集(即,軟件)的機器可讀介質(zhì),這些指令集體現(xiàn)了這里所描述的方法論的任何一個或者全部。例如,軟件可以完全地或者至少部分地駐留在存儲器132中和/或處理器102/104中。為了本說明的目的,術(shù)語“機器可讀介質(zhì)”應當被認為包括以機器(例如,計算機)可讀的形式提供(即,存儲和/或傳輸)信息的任何機構(gòu)。例如,機器可讀介質(zhì)包括只讀存儲器(ROM);隨機存取存儲器(RAM);磁盤存儲介質(zhì);光存儲介質(zhì);閃存設(shè)備;電、光、聲或者其他形式的傳播信號(例如,載波、紅外線信號、數(shù)字信號等)等。
圖2示出了根據(jù)本發(fā)明實施例的處理器的更詳細的示圖。具體地說,圖2圖示了處理器102/104中的一個處理器(以下稱為“處理器102”)的更詳細的示圖。如圖所示,存儲器接口單元270耦合到緩存緩沖器256、寄存器文件250(包括通用寄存器252和專用寄存器254)和指令緩沖器202,使得存儲器接口單元270可以獲取宏指令和相關(guān)聯(lián)的操作數(shù),并將這樣的數(shù)據(jù)存儲到指令緩沖器202和緩存緩沖器256、通用寄存器252和/或?qū)S眉拇嫫?54中。另外,緩存緩沖器256和寄存器文件250被耦合到譯碼器204、功能單元212~218和退休(retirement)邏輯228。
譯碼器204被耦合到指令緩沖器202,使得譯碼器204能從指令緩沖器202獲取指令。譯碼器204可以接收這些指令,并對它們中的每一個進行譯碼,以確定出給定的指令,而且還產(chǎn)生內(nèi)部指令集中的許多指令。例如,在一個實施例中,由譯碼器204所接收的指令是所謂的宏指令,而由譯碼器204所產(chǎn)生的指令是所謂的微指令(或微操作)。譯碼器204還被耦合到指令調(diào)度器208,使得指令調(diào)度器208可以接收這些微操作,用于所安排的功能單元212~218的執(zhí)行。
指令調(diào)度器208被耦合到分配(dispatch)邏輯226,使得指令調(diào)度器208能傳輸要被功能單元212~218執(zhí)行的指令。分配邏輯226被耦合到功能單元212~218,使得分配邏輯226將指令傳輸?shù)焦δ軉卧?12~218用于執(zhí)行。功能單元212~218可以是許多不同的執(zhí)行單元中的一種,包括但不限于整數(shù)算術(shù)邏輯單元(ALU)、浮點單元、存儲器加載/存儲單元等。功能單元212~218還被耦合到退休邏輯228,使得功能單元212~218執(zhí)行指令并將結(jié)果傳輸給退休邏輯228。退休邏輯228可以將這些結(jié)果傳輸?shù)教幚砥?02內(nèi)部或外部的存儲器,所述存儲器例如是寄存器文件250中的寄存器或緩存緩沖器或者(處理器102外部的)存儲器132。
現(xiàn)在將結(jié)合圖3的流程圖詳細地描述計算機系統(tǒng)100的操作。具體地說,圖3示出了根據(jù)本發(fā)明實施例的用于將來自基于第一指令集體系結(jié)構(gòu)的二進制編碼的指令翻譯到來自第二指令集體系結(jié)構(gòu)的指令的流程圖,所述第二指令集體系結(jié)構(gòu)部分地與第一指令集體系結(jié)構(gòu)兼容。
圖3的流程圖300被描述為計算機系統(tǒng)100的譯碼-執(zhí)行流程的一部分。但是,本發(fā)明的實施例并不受此限制。例如,在另一個實施例中,流程圖300中所示的翻譯操作可以不依賴于計算機系統(tǒng)100的譯碼-執(zhí)行流程而進行。在一個這樣的實施例中,翻譯后的指令可以被存儲在例如跟蹤緩存(trace cache)(圖1中未示出)的專用緩沖器(在處理器102的內(nèi)部或者外部)中。相應地,這樣的翻譯后的指令可以從這種專用緩沖器中被獲取,并在處理器102中被執(zhí)行。因此,在這樣的實施例中,兼容的水平是可選擇的,使得處理器102基于其當前的知識或者資源,能夠或者不能執(zhí)行翻譯后的指令。例如,翻譯后的指令可以在第一環(huán)境中(其中,翻譯后的指令被完全利用)被執(zhí)行,而在第二環(huán)境中(其中,執(zhí)行翻譯后的指令不增加性能效力)不被執(zhí)行。此外,在一個實施例中,翻譯后的指令的子集被結(jié)合到二進制編碼的執(zhí)行中。例如,給定的指令可以被翻譯許多次。但是,在一個實施例中,該翻譯后的指令被結(jié)合到二進制編碼的執(zhí)行中的次數(shù)小于該指令被翻譯的總的次數(shù)。
在過程框302,接收基于第一指令集體系結(jié)構(gòu)的程序代碼的第一二進制編碼。在一個實施例中,翻譯單元180接收基于第一指令集體系結(jié)構(gòu)的程序代碼的這種第一二進制編碼。在一個實施例中,譯碼器204接收基于第一指令集體系結(jié)構(gòu)的程序代碼的這種第一二進制編碼。在一個實施例中,翻譯單元180和譯碼器204都可以接收基于第一指令集體系結(jié)構(gòu)的程序代碼的這種第一二進制編碼。
在一個實施例中,翻譯單元180被用于進行軟件翻譯,將基于第一指令集體系結(jié)構(gòu)的這種第一二進制編碼翻譯為基于第一指令集體系結(jié)構(gòu)和第二指令集體系結(jié)構(gòu)的結(jié)合的第二或者不同的二進制編碼。在一個實施例中,譯碼器204被用于進行硬件翻譯,將基于第一指令集體系結(jié)構(gòu)的這種第一二進制編碼翻譯為基于第一指令集體系結(jié)構(gòu)和第二指令集體系結(jié)構(gòu)的結(jié)合的第二或者不同的二進制編碼。如下面將更詳細描述的,在一個實施例中,通過翻譯單元180的二進制編碼的軟件翻譯可以結(jié)合通過譯碼器204的相同二進制編碼的硬件翻譯一起使用。在另一個實施例中,通過翻譯單元180的二進制編碼的軟件翻譯排斥通過譯碼器204的相同二進制編碼的硬件翻譯,反之亦然。
在過程框304,檢查指令集體系結(jié)構(gòu)執(zhí)行標記,以確定第一二進制編碼的可能的翻譯。在一個實施例中,翻譯單元180檢查指令集體系結(jié)構(gòu)執(zhí)行標記,以確定第一二進制編碼的可能的翻譯。在一個實施例中,譯碼器204檢查指令集體系結(jié)構(gòu)執(zhí)行標記,以確定第一二進制編碼的可能的翻譯。盡管翻譯單元180可以通過不同的技術(shù)確定第一二進制編碼的可能的翻譯,不過,在一個實施例中,翻譯單元180通過檢查結(jié)合命令被接收的命令行標記來確定第一二進制編碼的這種可能的翻譯,所述的命令用于開始該第一二進制編碼的執(zhí)行(可以包括該翻譯)。例如,如果第一二進制編碼的名稱是“binary.exe”,則包含命令行標記的用于開始執(zhí)行的命令可以是“binary.exe-f64-s-o”,其中,命令行標記是(1)-f64(2)-s和(3)-o。這些命令行標記可以指示該第一二進制編碼的不同的翻譯。
為了幫助說明,翻譯單元180可以將“-s”解釋為指示將(基于不支持單指令多數(shù)據(jù)(SIMD)操作的指令集體系結(jié)構(gòu)的)許多單指令翻譯成支持這種操作的第二或者不同的指令集體系結(jié)構(gòu)中的一個或多個SIMD指令。如下面將更詳細描述的,因為基于第一指令集體系結(jié)構(gòu)的第一二進制編碼中的其他指令和操作可以被翻譯成基于第二或者不同的指令集體系結(jié)構(gòu)的其他指令和操作,所以這里所描述的不同指令集體系結(jié)構(gòu)執(zhí)行標記是示例性的,而不是限定性的。此外,在另一個實施例中(代替和/或結(jié)合了檢查命令行標記),翻譯單元180可以通過檢查例如寄存器文件250中的寄存器(示出在圖2中)的各種存儲器單元來查找可能的不同的翻譯,以確定第一二進制編碼的這種可能的翻譯。
返回圖3中的流程圖300的過程框304,譯碼器204還可以檢查指令集體系結(jié)構(gòu)執(zhí)行標記以確定第一二進制編碼的可能的翻譯。在一個實施例中,譯碼器204可以通過查詢例如寄存器文件250中的專用寄存器254(示出在圖2中)的寄存器,檢查指令集體系結(jié)構(gòu)執(zhí)行標記。在一個這樣的實施例中,給定的位與給定類型的翻譯相關(guān)聯(lián)。例如,位零與浮點操作數(shù)的精度修改(例如,從用于IntelIA-32指令集體系結(jié)構(gòu)的80位格式變到用于IntelIA-64指令集體系結(jié)構(gòu)的64位格式)相關(guān)聯(lián)。相應地,可能產(chǎn)生基于較低精度操作數(shù)的不同結(jié)果,其中因為處理器執(zhí)行基于這種第二或者不同的指令集體系結(jié)構(gòu)的指令通常比執(zhí)行基于第一指令集體系結(jié)構(gòu)的指令更快,所以執(zhí)行性能更高了。
在一個實施例中,在處理器102中的寄存器之中所存儲的這些指令集體系結(jié)構(gòu)執(zhí)行標記通過體系結(jié)構(gòu)指令被設(shè)置,這些體系結(jié)構(gòu)指令對寄存器中的給定標記進行設(shè)置和復位。在一個這樣的實施例中,可以在執(zhí)行二進制編碼之前通過操作系統(tǒng)使用這些指令。
在過程判斷框306,作出關(guān)于是否需要軟件翻譯來翻譯第一二進制編碼的判斷。在一個實施例中,翻譯單元180確定是否需要軟件翻譯來翻譯第一二進制編碼。如上面所描述的,翻譯單元180可以通過許多不同方式中的一種,確定是否需要軟件翻譯來翻譯第一二進制編碼。所述許多不同方式包括但不限于在啟動第一二進制編碼的執(zhí)行時查找命令行標記,以及檢查例如寄存器的不同的存儲器單元。
在過程框308,在確定出需要軟件翻譯來翻譯第一二進制編碼后,使用軟件翻譯將來自第一二進制編碼的至少一個指令翻譯成基于第二指令集體系結(jié)構(gòu)的至少一個指令。在一個實施例中,翻譯單元180進行這種翻譯。例如上面所描述的,翻譯單元180可以將許多(基于不支持SIMD操作的指令集體系結(jié)構(gòu)的)單指令翻譯為支持這種操作的第二或者不同的指令集體系結(jié)構(gòu)中的一個或多個SIMD指令。為了幫助說明,翻譯單元180可以遍歷(traverse)二進制編碼,并確定出該二進制編碼包括用于加法的四個不同的指令,使得有不同的四組操作數(shù)。相應地,翻譯單元180可以將該二進制編碼中的這四個不同的指令翻譯為用于加法的單個指令,其中,兩組四個操作數(shù)(每個是32位)被放置在處理器102中的兩個128位SIMD寄存器中,用于執(zhí)行。
在用于該SIMD翻譯的實施例中,單個的指令是基于第一指令集體系結(jié)構(gòu)的,而SIMD指令是基于第二指令集體系結(jié)構(gòu)的。在用于該SIMD翻譯的一個實施例中,單個指令是基于第一指令集體系結(jié)構(gòu)的,而SIMD指令也是基于第一指令集體系結(jié)構(gòu)的。相應地,SIMD翻譯考慮到了相同指令集體系結(jié)構(gòu)的指令中的改進。
這樣的翻譯可能導致與操作數(shù)有關(guān)的較低精度;但是,取決于應用程序和/或在其中執(zhí)行應用程序的執(zhí)行環(huán)境的類型,由這種翻譯所提供的性能的提高可能價值上高于對精度的考慮。因此,程序設(shè)計環(huán)境,例如用戶,能夠在考慮與性能提高相關(guān)聯(lián)的精度損失的同時,規(guī)定可以發(fā)生哪種類型的翻譯。例如,僅使用全浮點精度中的一部分的一些圖形應用程序可以容許浮點操作中的少量的精度不足。與之不同,在其浮點操作中使用全浮點精度的用于預測天氣的應用程序不能容許少量的精度不足,因為這樣的精度不足會產(chǎn)生不同的和很可能不準確的結(jié)果。
另外,取決于執(zhí)行環(huán)境,同一應用程序可以區(qū)別地容許這種操作數(shù)精度的修改。例如,應用程序可能容許對于第一組輸入數(shù)據(jù)的精度的這種修改,而同一應用程序可能不容許對于另外一組輸入數(shù)據(jù)的精度的這種修改。為了幫助說明,當一組輸入數(shù)據(jù)在由應用程序執(zhí)行這些數(shù)據(jù)之前已經(jīng)被驗證的時候,應用程序不需要處理精確的異常。相反地,如果這組輸入數(shù)據(jù)被認為特殊和/或還沒有被驗證,則應用程序可以被要求進行異常處理,該處理為異常提供精確和完全的數(shù)據(jù)。因此,程序設(shè)計環(huán)境可以解決輸入數(shù)據(jù)組中的這種差別,并允許在第一種情形中的翻譯,阻止在第二種情形中的翻譯。
通過翻譯單元180的軟件翻譯的另一個示例包括與程序棧有關(guān)的優(yōu)化。具體地說,給定的指令集體系結(jié)構(gòu),例如IntelIA-32指令集體系結(jié)構(gòu),可以包括具有壓入和彈出操作的硬件棧,其中,被傳遞到程序過程中的數(shù)據(jù)通過壓入操作被放置到棧中,并且在過程完成之后,通過彈出操作從棧中去除。另外,這樣的指令集體系結(jié)構(gòu)可以允許對棧指針(通常被存儲在專用寄存器254的一個中)的直接訪問。因此,由于這種指令集體系結(jié)構(gòu)允許對棧指針的明確訪問,所以應用程序的二進制編碼可以進行對該硬件棧的非傳統(tǒng)訪問。
例如,假定程序進入一個過程,并使用離棧指針的某個常數(shù)偏移,在棧中的某個位置“L”上存儲值“V”。程序然后從該過程返回。但是,在某些指令集體系結(jié)構(gòu)中,值“V”沒有明確地從棧中刪除。此外,這樣的指令集體系結(jié)構(gòu)保證了程序?qū)⑷匀荒軌蚧趨⒖紬V羔樀奈恢谩癓”(假定該位置還沒有被程序的其他部分重寫),從棧中訪問值“V”。相反地,不同的指令集體系結(jié)構(gòu)可以包括一種模式,其中,硬件棧具有更多的抽象語義,并且被釋放的棧存儲器的內(nèi)容是易失性的。具體地說,在過程完成之后,這種不同的指令集體系結(jié)構(gòu)可能不保證值“V”仍然被存儲在參考棧指針的位置“L”中。
相應地,在一個實施例中,翻譯單元180可以將第一二進制編碼翻譯成不同的二進制編碼,其中,過程中的至少一個被內(nèi)嵌到調(diào)用該過程的程序代碼中。例如,如果主過程“MAIN( )”包括對過程“first procedure(x,y)”的調(diào)用,其中,在“first procedure(x,y)”中包括了五行代碼,則翻譯單元180可以修改該二進制編碼,使得過程調(diào)用被去除,并且這五行代碼被直接包括在“MAIN( )”中。相應地,參數(shù)x和y可以不被放在棧中。但是,因為這種不同的二進制編碼是基于第二指令集體系結(jié)構(gòu)的,而第二指令集體系結(jié)構(gòu)涉及在過程調(diào)用返回之后為過程調(diào)用中的參數(shù)解除對棧指針的參考,所以程序代碼將不包括這樣的解除參考。如下面將更加詳細描述的,因為二進制編碼是基于一種指令集體系結(jié)構(gòu)的,該指令集體系結(jié)構(gòu)保證了在過程完成之后,將不通過參考棧指針的位置“L”訪問值“V”,所以通過譯碼器204的硬件翻譯也可以結(jié)合和/或排斥這種軟件翻譯而進行。
返回圖3的流程圖300,在過程框310,與是否在過程框308進行軟件翻譯無關(guān),在一個實施例中作出是否需要硬件翻譯來進行第一二進制編碼的翻譯的判斷。在一個實施例中,譯碼器204確定是否需要硬件翻譯來翻譯第一二進制編碼。如上面所描述的,譯碼器204可以通過許多不同的方式中的一種來確定是否需要硬件翻譯來翻譯第一二進制編碼。所述許多不同的方式包括但不限于查詢寄存器,例如寄存器文件250中的專用寄存器254之一(示出在圖2中)。
在過程框312,在確定出需要硬件翻譯來翻譯第一二進制編碼后,將來自第一二進制編碼的至少一個指令翻譯成基于第二指令集體系結(jié)構(gòu)的至少一個指令。在一個實施例中,譯碼器204將來自第一二進制編碼的至少一個指令翻譯成基于第二指令集體系結(jié)構(gòu)的至少一個指令。具體地說,在一個實施例中,譯碼器可以進行與第二指令集體系結(jié)構(gòu)的不同特征相關(guān)的許多不同的翻譯。
為了幫助說明,假定處理器102可以執(zhí)行基于IntelIA-32和IntelIA-64兩種指令集體系結(jié)構(gòu)的指令,并且已經(jīng)基于IntelIA-32產(chǎn)生了第一二進制編碼,使得浮點操作數(shù)具有80位寬度。另外,在執(zhí)行給定的二進制編碼之前或者與其結(jié)合地,可以設(shè)置專用寄存器254中的一個,以指示當前是基于IntelIA-32指令集體系結(jié)構(gòu)的80位操作數(shù)的浮點操作數(shù)將被轉(zhuǎn)換為基于IntelIA-64指令集體系結(jié)構(gòu)的64位操作數(shù)。因此,基于查詢該專用寄存器,譯碼器204將基于IntelIA-32指令集體系結(jié)構(gòu)的浮點指令翻譯為基于IntelIA-64指令集體系結(jié)構(gòu)的不同的一組浮點指令。
例如,在收到浮點乘法指令后,譯碼器204產(chǎn)生用于IntelIA-64指令集體系結(jié)構(gòu)的微操作(代替用于IntelIA-32指令集體系結(jié)構(gòu)的微操作),從而引導相關(guān)聯(lián)的浮點單元(在功能單元212~218中)將80位操作數(shù)修改為64位操作數(shù),并按照相關(guān)聯(lián)的用于IntelIA-64指令集體系結(jié)構(gòu)的指令執(zhí)行浮點乘法指令。因此,浮點操作數(shù)的精度將被降低;但是,基于新的指令集體系結(jié)構(gòu)的浮點指令可以提高應用程序的執(zhí)行中的性能。
通過譯碼器204的硬件翻譯的另一個示例包括與程序棧有關(guān)的優(yōu)化。具體地說,如上面所描述的,例如IntelIA-32指令集體系結(jié)構(gòu)的給定指令集體系結(jié)構(gòu)可以包括具有壓入和彈出操作的硬件棧,其中,被傳遞到程序過程中的數(shù)據(jù)通過壓入操作被放到棧中,并在過程完成之后,通過彈出操作從棧中被去除。此外,這樣的指令集體系結(jié)構(gòu)可以允許對棧指針(通常被存儲在專用寄存器254的一個中)的直接訪問。因此,由于這種指令集體系結(jié)構(gòu)允許對棧指針的明確訪問,二進制編碼或者應用程序可以進行對該硬件棧的非傳統(tǒng)訪問。
例如,程序進入一個過程,并使用離棧指針的某個常數(shù)偏移,在棧中的某個位置“L”上存儲值“V”。程序然后從該過程返回。但是,在某些指令集體系結(jié)構(gòu)中,值“V”沒有明確地從棧中刪除。此外,這樣的指令集體系結(jié)構(gòu)保證了程序?qū)⑷匀荒軌蚧趨⒖紬V羔樀奈恢谩癓”(假定該位置還沒有被程序的其他部分重寫),從棧中訪問值“V”。相反地,不同的指令集體系結(jié)構(gòu)可以包括一種模式,其中,硬件棧具有更多的抽象語義,并且被釋放的棧存儲器的內(nèi)容是易失性的。具體地說,在過程完成之后,這種另外的指令集體系結(jié)構(gòu)可能不保證值“V”仍然被存儲在參考棧指針的位置“L”中。
從而,在一個實施例中,除了在處理器102外部的例如存儲器132的存儲器中的棧,專用寄存器254中的一個可以被用作硬件棧的一部分。相應地,這樣減小了由與硬件棧相關(guān)聯(lián)的功能單元212~218進行的加載和存儲操作的數(shù)量。具體地說,圖4示出了根據(jù)本發(fā)明實施例的源碼和所產(chǎn)生的匯編碼,其中使用和沒有使用寄存器作為硬件棧的一部分。如圖所示,圖4包括源碼402、匯編碼404和匯編碼406。匯編碼404包括當處理器102中的寄存器沒有被用作硬件棧的一部分時,為源碼402產(chǎn)生的匯編碼指令的部分。匯編碼406包括當處理器102中的寄存器被用作硬件棧的一部分時,為源碼402產(chǎn)生的匯編碼指令的部分。
源碼402包括具有參數(shù)“x”和“y”的過程,其中,該過程中的指令將變量“z”設(shè)置為等于“x”和“y”的和。匯編碼404包括用于將“x”的值存儲到寄存器“r1”中的加載操作;將“y”的值存儲到寄存器“r2”中的加載操作;以及寄存器“r1”與寄存器“r2”的加法操作。如圖所示,需要兩個不同的加載操作來將“x”和“y”的值(被存儲在外部存儲器中的棧中)放入處理器102內(nèi)部的寄存器中。與之不同,匯編碼406(其中,處理器102中的專用寄存器被用作硬件棧的一部分)包括單個加載操作,其后跟隨一個加法操作。具體地說,匯編碼406包括將“y”的值存儲到寄存器“r2”中的加載操作;以及專用寄存器“sr1”與寄存器“r2”的加法操作(其中,專用寄存器“sr1”是硬件棧的一部分)。
如圖所示,當程序設(shè)計環(huán)境,例如用戶,指示出在對于程序棧上的變量的彈出操作之后將不作出對這些變量的訪問(即使基于其產(chǎn)生二進制編碼的第一指令集體系結(jié)構(gòu)允許這樣的訪問)時,專用寄存器254中的至少一個專用寄存器可以被用作程序棧的一部分。相應地,當設(shè)置了特定的指令集體系結(jié)構(gòu)執(zhí)行標記,用于指示被執(zhí)行的程序或者應用程序在具有棧上的數(shù)據(jù)參數(shù)的過程完成之后將不會試圖訪問這些數(shù)據(jù)參數(shù)的時候,譯碼器204可以為匯編碼406產(chǎn)生相關(guān)聯(lián)的微操作(代替匯編碼404的相關(guān)聯(lián)的微操作)。
由處理器102的部件進行的硬件翻譯的另一個示例涉及對存儲器的亂序訪問。具體地說,基于第一指令集體系結(jié)構(gòu)的程序可以保證對(處理器102內(nèi)部的和外部的兩種)存儲器的有序訪問。因此,為了保證具有第一指令集體系結(jié)構(gòu)的二進制編碼的兼容性,在該二進制編碼的執(zhí)行過程中的存儲器訪問必須是串行化的。這種串行化可能減慢二進制編碼的執(zhí)行性能。例如,如果第一指令需要完成從尚且未知的地址的加載操作,并且第二指令(其在該二進制編碼的串行執(zhí)行中將在第一指令之后被執(zhí)行)需要完成對已知的地址的存儲操作,則第一指令仍然必須在第二指令退休之前被完成,即使第二指令的存儲操作可以在等待第一指令的加載操作所需的地址的時候就已經(jīng)完成了。這樣的串行化對于保證多進程或者多處理器系統(tǒng)的正確執(zhí)行是至關(guān)重要的。
與之不同,第二指令集體系結(jié)構(gòu)可以允許亂序存儲器訪問,以及在已經(jīng)完成訪問之后用于排序這些訪問的方法。相應地,如果程序設(shè)計環(huán)境,例如用戶,可以保證基于第一指令集體系結(jié)構(gòu)的二進制編碼不要求指令執(zhí)行的串行化,則程序設(shè)計環(huán)境可以設(shè)置相關(guān)聯(lián)的指令集體系結(jié)構(gòu)執(zhí)行標記,以允許亂序存儲器訪問,從而允許二進制編碼執(zhí)行的性能的可能的提高。例如,如果二進制編碼是沒有與其他并發(fā)進程或者設(shè)備同步的單線程的程序,則二進制編碼可以安全地在允許亂序存儲器訪問的模式中執(zhí)行。
因此,在一個實施例中,在確定出允許亂序存儲器訪問后(對于基于不提供這種訪問的第一指令集體系結(jié)構(gòu)的二進制編碼),譯碼器204可以指示存儲器接口單元270參考二進制編碼中的指令的順序,亂序地為該二進制編碼調(diào)度存儲器的訪問。
在一個實施例中,通過計算機100的部件進行的硬件翻譯的示例涉及自修改代碼。具體地說,自修改代碼包括一種代碼,其向該代碼自身駐留的存儲器位置寫入。許多指令集體系結(jié)構(gòu)允許這種代碼的執(zhí)行。但是,這種代碼是低效的,并且降低了代碼執(zhí)行的性能。并且具體地說,為了確定代碼是否是自修改的,要求存儲器控制器和/或其他部件跟蹤進行寫入的存儲器單元。換句話說,這些存儲器控制器和/或其他部件確定,對于每個存儲器寫入來說由代碼正在進行寫入的存儲器中的位置是否包括該代碼自身。
與之不同,第二指令集體系結(jié)構(gòu)可以操作在不允許自修改代碼的模式中。相應地,如果程序設(shè)計環(huán)境,例如用戶,能夠保證基于第一指令集體系結(jié)構(gòu)的二進制編碼不包括自修改代碼,則程序設(shè)計環(huán)境可以設(shè)置相關(guān)聯(lián)的指令集體系結(jié)構(gòu)執(zhí)行標記,以取消對給定程序代碼是否修改其自身的檢查。
因此,在一個實施例中,在確定出二進制譯碼所基于的程序代碼不是自修改的之后,譯碼器204可以指示與存儲該二進制編碼的存儲器相關(guān)聯(lián)的存儲器控制器,不檢查給定的程序代碼是否修改其自身。相應地,每次執(zhí)行存儲器寫入操作,這樣的存儲器控制器都不檢查該存儲器寫入的位置是否是在該程序代碼所駐留的位置中,從而提高了二進制編碼執(zhí)行的速度。
在一個實施例中,通過計算機系統(tǒng)100的部件進行的硬件翻譯涉及存儲器分段。具體地說,存儲器分段被用于擴展程序代碼的可訪問的地址空間。例如,給定的體系結(jié)構(gòu)可能已經(jīng)具有對寄存器寬度大小的限制,從而限定了地址空間的大小。相應地,給定的程序代碼/二進制編碼可以訪問跨過存儲器中的許多不同的段而被存儲的數(shù)據(jù)。在一個實施例中,被存儲在專用寄存器254的一個中的值被用作從虛擬地址空間向物理地址空間進行轉(zhuǎn)換的偏移量。在一個實施例中,該值被加到虛擬地址上,以產(chǎn)生物理地址。因此,如果二進制編碼正訪問跨過寄存器中的許多段的數(shù)據(jù),則在程序執(zhí)行過程期間當從其訪問數(shù)據(jù)的段改變時,該值被更新。與之不同,最近的體系結(jié)構(gòu)定義了更大的寄存器寬度,例如32位或64位。從而允許在這種體系結(jié)構(gòu)上執(zhí)行的操作系統(tǒng)給程序提供足夠大的虛擬地址空間,而不用依賴于分段。
在一個實施例中,第一二進制編碼是基于第一指令集體系結(jié)構(gòu)的,其中,由第一二進制編碼訪問的數(shù)據(jù)被存儲在存儲器中的許多段中。另外,在一個實施例中,第二指令集體系結(jié)構(gòu)包括比用于第一指令集體系結(jié)構(gòu)的虛擬地址空間更大的虛擬地址空間。相應地,如果程序設(shè)計環(huán)境,例如用戶,可以保證由基于第一指令集體系結(jié)構(gòu)的第一二進制編碼所訪問的數(shù)據(jù)可以被存儲在基于第二指令集體系結(jié)構(gòu)的存儲器中的單個段中,則程序設(shè)計環(huán)境可以設(shè)置相關(guān)聯(lián)的執(zhí)行標記,以忽略存儲器分段,從而在存儲器地址的虛擬到物理的轉(zhuǎn)換期間回避分段。
在一個實施例中,使用寄存器文件250中的寄存器的更大寬度來允許更大的虛擬地址空間。例如,第一指令集體系結(jié)構(gòu)可以使用存儲在寄存器文件250中的具有32位寬度的寄存器的16個位,而第二指令集體系結(jié)構(gòu)可以使用這樣的寄存器的全部32個位。在一個實施例中,因為被存儲在專用寄存器254中的用于虛擬到物理地址空間的這個偏移量值在二進制編碼的執(zhí)行過程中保持不變(因為被二進制編碼訪問的數(shù)據(jù)在存儲器中的單個段內(nèi)),所以譯碼器204不產(chǎn)生用于更新該偏移量值的微操作。相應地,因為基于第二指令集體系結(jié)構(gòu),存儲器分段被忽略了,所以二進制編碼的執(zhí)行被加速。
此外,在一個實施例中,產(chǎn)生基于第一指令集體系結(jié)構(gòu)的二進制編碼,使得被該二進制編碼訪問的數(shù)據(jù)的大小可以被存儲在存儲器中的單個段中。相應地,被存儲在通用寄存器252中的值的寬度不需要被增加。在一個實施例中,程序設(shè)計環(huán)境可以設(shè)置指令集體系結(jié)構(gòu)執(zhí)行標記,其中二進制編碼不是基于與寄存器中的更大寬度有關(guān)的第二指令集體系結(jié)構(gòu)的。在一個這樣的實施例中,譯碼器204不產(chǎn)生用于更新被存儲在專用檢測器254的一個中的用于虛擬到物理地址空間的這個偏移量值的微操作。具體地說,因為被二進制編碼訪問的數(shù)據(jù)被存儲在存儲器中的單個段中,所以該值不需要被更新。
返回圖3的流程圖300,在過程框314,指令(可能已經(jīng)如上面所描述的那樣被修改)被執(zhí)行。在一個實施例中,功能單元212~218執(zhí)行這些指令。這里所描述的軟件和硬件翻譯是示例性的,而不是限定性的,因為本發(fā)明的實施例可以包括將基于第一指令集體系結(jié)構(gòu)的第一二進制編碼向基于第一指令集體系結(jié)構(gòu)和第二指令集體系結(jié)構(gòu)的結(jié)合的第二二進制編碼的其他翻譯(軟件和硬件都可)。此外,雖然已經(jīng)參考軟件和硬件描述了給定的翻譯,但是本發(fā)明的實施例并不受此限制。例如,雖然已經(jīng)相對于軟件翻譯描述了給定的翻譯,但是在另一個實施例中,這樣的翻譯可以以硬件和/或硬件與軟件的結(jié)合中進行。
此外,涉及軟件翻譯的本發(fā)明的實施例是相對于整個二進制編碼的翻譯被描述的。但是,本發(fā)明的實施例并不如此受限制。在一個實施例中,程序設(shè)計模型可以包括二進制編碼級對象之間的更復雜的交互。例如,假定二進制編碼的共享庫是基于第一指令集體系結(jié)構(gòu)被編譯的,并且使用該共享庫中的二進制編碼/與該共享庫中的二進制編碼相接口的主二進制編碼是基于第一和第二指令集體系結(jié)構(gòu)的結(jié)合的,如這里所描述的那樣。在一個實施例中,取決于所要求的功能、程序設(shè)計環(huán)境等,主二進制編碼可以在兩種不同的指令集體系結(jié)構(gòu)的不同功能之間切換。例如,取決于庫中的哪類二進制編碼被調(diào)用、主庫的全局程序狀態(tài)等,庫中的二進制編碼可以動態(tài)地設(shè)置第一和第二指令集體系結(jié)構(gòu)之間的兼容性水平。
雖然已經(jīng)參考具體的示例實施例描述了本發(fā)明,但是很明顯,可以對這些實施例作出各種修改和變化,而不脫離本發(fā)明的更廣闊的精神和范圍。相應地,說明書和附圖應被認為是示例性的,而不是限定性的。
權(quán)利要求
1.一種方法,包括接收程序代碼的二進制編碼,所述二進制編碼基于第一指令集體系結(jié)構(gòu);以及翻譯所述二進制編碼,其中,翻譯后的二進制編碼基于所述第一指令集體系結(jié)構(gòu)和第二指令集體系結(jié)構(gòu)的結(jié)合。
2.根據(jù)權(quán)利要求1所述的方法,包括檢查指令集體系結(jié)構(gòu)執(zhí)行標記,所述指令集體系結(jié)構(gòu)執(zhí)行標記指示對所述二進制編碼的一部分的至少一種翻譯。
3.根據(jù)權(quán)利要求2所述的方法,其中,所述指令集體系結(jié)構(gòu)執(zhí)行標記通過所述二進制編碼的程序設(shè)計環(huán)境被設(shè)置。
4.根據(jù)權(quán)利要求2所述的方法,其中,用于翻譯所述二進制編碼的處理器中的寄存器將存儲所述指令集體系結(jié)構(gòu)執(zhí)行標記。
5.根據(jù)權(quán)利要求2所述的方法,包括執(zhí)行所述翻譯后的二進制編碼。
6.根據(jù)權(quán)利要求5所述的方法,其中,所述翻譯和執(zhí)行基于一個命令,所述指令集體系結(jié)構(gòu)執(zhí)行標記基于與所述命令相關(guān)聯(lián)的多個命令行標記。
7.根據(jù)權(quán)利要求1所述的方法,其中,所述第一指令集體系結(jié)構(gòu)包括浮點指令,并且其中所述第二指令集體系結(jié)構(gòu)包括浮點指令,其中所述二進制編碼的翻譯包括將所述第一指令集體系結(jié)構(gòu)的所述浮點指令翻譯為所述第二指令集體系結(jié)構(gòu)的所述浮點指令。
8.根據(jù)權(quán)利要求1所述的方法,其中,所述二進制編碼的翻譯包括將硬件棧的一部分存儲在用于翻譯所述二進制編碼的處理器的寄存器中。
9.一種方法,包括接收程序代碼的二進制編碼,所述二進制編碼基于第一指令集體系結(jié)構(gòu);以及執(zhí)行所述二進制編碼,其中,所述執(zhí)行包括將基于所述第一指令集體系結(jié)構(gòu)的所述二進制編碼的至少一個指令翻譯為基于第二指令集體系結(jié)構(gòu)的至少一個指令。
10.根據(jù)權(quán)利要求9所述的方法,其中,所述第一指令集體系結(jié)構(gòu)包括對存儲器的順序訪問,并且所述第二指令集體系結(jié)構(gòu)包括對存儲器的亂序訪問,所述二進制編碼的翻譯包括由用于執(zhí)行所述二進制編碼的處理器對存儲器的亂序訪問。
11.根據(jù)權(quán)利要求9所述的方法,其中,所述第一指令集體系結(jié)構(gòu)允許所述二進制編碼自修改,并且所述第二指令集體系結(jié)構(gòu)不允許所述二進制編碼自修改,所述二進制編碼的翻譯包括對存儲所述二進制編碼的存儲器的控制器的指令,以進行寫操作,所述寫操作不依賴于對所述寫操作是否修改存儲所述二進制編碼的位置的檢查。
12.根據(jù)權(quán)利要求9所述的方法,其中,所述第二指令集體系結(jié)構(gòu)具有大于所述第一指令集體系結(jié)構(gòu)的地址空間,所述二進制編碼的翻譯包括使用所述第二指令集體系結(jié)構(gòu)的所述地址空間。
13.根據(jù)權(quán)利要求12所述的方法,其中,由所述二進制編碼訪問的數(shù)據(jù)被存儲在存儲器中的單個段中,并且其中用于將所述數(shù)據(jù)的虛擬地址翻譯為所述數(shù)據(jù)的物理地址的偏移量值在所述二進制編碼的執(zhí)行期間沒有被修改。
14.一種系統(tǒng),包括存儲器,所述存儲器包括基于第一指令集體系結(jié)構(gòu)的程序代碼的二進制編碼;和耦合到所述存儲器的處理器,所述處理器執(zhí)行所述二進制編碼,其中,執(zhí)行所述二進制編碼包括翻譯所述二進制編碼,翻譯后的二進制編碼基于所述第一指令集體系結(jié)構(gòu)和第二指令集體系結(jié)構(gòu)的結(jié)合。
15.根據(jù)權(quán)利要求14所述的系統(tǒng),其中,所述處理器包括用于存儲指令集體系結(jié)構(gòu)執(zhí)行標記的寄存器,所述指令集體系結(jié)構(gòu)執(zhí)行標記指示對所述二進制編碼的一部分的至少一種翻譯。
16.根據(jù)權(quán)利要求15所述的系統(tǒng),其中,所述指令集體系結(jié)構(gòu)執(zhí)行標記通過所述二進制編碼的程序設(shè)計環(huán)境被設(shè)置。
17.根據(jù)權(quán)利要求14所述的系統(tǒng),其中,所述第二指令集體系結(jié)構(gòu)具有大于所述第一指令集體系結(jié)構(gòu)的地址空間,所述二進制編碼的翻譯包括使用所述第二指令集體系結(jié)構(gòu)的所述地址空間。
18.根據(jù)權(quán)利要求17所述的系統(tǒng),其中,所述二進制編碼被存儲在所述存儲器中的單個段中,并且其中用于將虛擬地址翻譯為物理地址的偏移量值在所述二進制編碼的執(zhí)行期間沒有被修改。
19.一種裝置,包括譯碼器,用于接收基于第一指令集體系結(jié)構(gòu)的二進制編碼;和多個寄存器,其中所述多個寄存器中的至少一個存儲指令集體系結(jié)構(gòu)執(zhí)行標記,所述指令集體系結(jié)構(gòu)執(zhí)行標記指示二進制編碼的翻譯,翻譯后的二進制編碼基于所述第一指令集體系結(jié)構(gòu)和第二指令集體系結(jié)構(gòu)的結(jié)合。
20.根據(jù)權(quán)利要求19所述的裝置,其中所述第一指令集體系結(jié)構(gòu)包括浮點指令,并且其中所述第二指令集體系結(jié)構(gòu)包括浮點指令,其中所述二進制編碼的翻譯包括將所述第一指令集體系結(jié)構(gòu)的所述浮點指令翻譯為所述第二指令集體系結(jié)構(gòu)的所述浮點指令。
21.根據(jù)權(quán)利要求19所述的裝置,其中,所述二進制編碼的翻譯包括將硬件棧的一部分存儲在所述多個寄存器中的一個寄存器中。
22.根據(jù)權(quán)利要求19所述的裝置,其中,所述裝備被耦合到用于存儲所述二進制編碼的存儲器,其中,所述第一指令集體系結(jié)構(gòu)允許所述二進制編碼自修改,并且所述第二指令集體系結(jié)構(gòu)不允許所述二進制編碼自修改,所述二進制編碼的翻譯包括對所述存儲器的控制器的指令,以進行寫操作,所述寫操作不依賴于對所述寫操作是否修改存儲所述二進制編碼的位置的檢查。
23.根據(jù)權(quán)利要求19所述的裝置,其中,所述第二指令集體系結(jié)構(gòu)具有大于所述第一指令集體系結(jié)構(gòu)的地址空間,所述二進制編碼的翻譯包括使用所述第二指令集體系結(jié)構(gòu)的所述地址空間。
24.根據(jù)權(quán)利要求23所述的裝置,其中,由所述二進制編碼訪問的數(shù)據(jù)被存儲在耦合到所述裝置的存儲器中的單個段中,并且其中用于將所述數(shù)據(jù)的虛擬地址翻譯為所述數(shù)據(jù)的物理地址的偏移量值在所述二進制編碼的執(zhí)行期間沒有被修改。
25.一種提供指令的機器可讀介質(zhì),所述指令當被機器執(zhí)行時,引起機器進行操作,所述操作包括接收程序代碼的二進制編碼,所述二進制編碼基于第一指令集體系結(jié)構(gòu);以及翻譯所述二進制編碼,其中,翻譯后的二進制編碼基于所述第一指令集體系結(jié)構(gòu)和第二指令集體系結(jié)構(gòu)的結(jié)合。
26.根據(jù)權(quán)利要求25所述的機器可讀介質(zhì),包括執(zhí)行所述翻譯后的二進制編碼。
27.根據(jù)權(quán)利要求26所述的機器可讀介質(zhì),其中,所述翻譯和執(zhí)行基于一個命令,指令集體系結(jié)構(gòu)執(zhí)行標記基于與所述命令相關(guān)聯(lián)的多個命令行標記。
28.根據(jù)權(quán)利要求25所述的機器可讀介質(zhì),其中,所述第一指令集體系結(jié)構(gòu)包括浮點指令,并且其中所述第二指令集體系結(jié)構(gòu)包括浮點指令,其中所述二進制編碼的翻譯包括將所述第一指令集體系結(jié)構(gòu)的所述浮點指令翻譯為所述第二指令集體系結(jié)構(gòu)的所述浮點指令。
29.根據(jù)權(quán)利要求25所述的機器可讀介質(zhì),其中,所述第一指令集體系結(jié)構(gòu)允許所述二進制編碼自修改,并且所述第二指令集體系結(jié)構(gòu)不允許所述二進制編碼自修改,所述二進制編碼的翻譯包括對存儲所述二進制編碼的存儲器的控制器的指令,以進行寫操作,所述寫操作不依賴于對所述寫操作是否修改存儲所述二進制編碼的位置的檢查。
全文摘要
在一個實施例中,方法包括接收程序代碼的二進制編碼。該二進制編碼是基于第一指令集體系結(jié)構(gòu)的。該方法還包括翻譯所述二進制編碼,其中,翻譯后的二進制編碼是基于第一指令集體系結(jié)構(gòu)和第二指令集體系結(jié)構(gòu)的結(jié)合的。
文檔編號G06F9/45GK1613054SQ02826719
公開日2005年5月4日 申請日期2002年12月27日 優(yōu)先權(quán)日2002年1月2日
發(fā)明者羅尼·羅斯納, 亞伯拉罕·門德爾松 申請人:英特爾公司