国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      計(jì)算機(jī)系統(tǒng)中的數(shù)據(jù)值一致性的制作方法

      文檔序號:6553833閱讀:343來源:國知局

      專利名稱::計(jì)算機(jī)系統(tǒng)中的數(shù)據(jù)值一致性的制作方法
      技術(shù)領(lǐng)域
      :本發(fā)明總體上涉及計(jì)算機(jī)
      技術(shù)領(lǐng)域
      ,更特別地涉及計(jì)算機(jī)微體系結(jié)構(gòu)、編譯器技術(shù)和調(diào)試技術(shù),尤其是當(dāng)翻譯程序代碼時(shí)計(jì)算機(jī)系統(tǒng)中的數(shù)據(jù)值一致性的問題。
      背景技術(shù)
      :計(jì)算機(jī)微體系結(jié)構(gòu)的領(lǐng)域本身涉及計(jì)算機(jī)內(nèi)部結(jié)構(gòu)的設(shè)計(jì)以便支持計(jì)算模型。編譯器技術(shù)是一種用來支持把計(jì)算機(jī)程序代碼從一種形式翻譯成另一種形式的技術(shù),并且調(diào)試技術(shù)通常是用來調(diào)試的技術(shù),換句話說就是找到計(jì)算機(jī)程序中的錯(cuò)誤的技術(shù)。當(dāng)把代碼從一種格式翻譯成另一種格式時(shí),代碼位置和數(shù)據(jù)值的一致性的喪失是一個(gè)問題。當(dāng)把源代碼從高級語言向下翻譯成目標(biāo)格式時(shí),或者當(dāng)把代碼從一種"目標(biāo)"格式翻譯成另一種"目標(biāo)"格式時(shí),都會(huì)暴露出所述問題。因此,可以在一個(gè)或幾個(gè)步驟中把所述源代碼翻譯成目標(biāo)代碼。在后一種情況下,可以把任何中間代碼格式視為"源"和/或"目標(biāo)"格式。在每個(gè)翻譯步驟中,都將有源格式和目標(biāo)格式,盡管給定翻譯步驟中的源格式可能是前一翻譯步驟中的目標(biāo)格式。當(dāng)對用高級語言表示的源代碼在翻譯成目標(biāo)代碼的過程中進(jìn)行轉(zhuǎn)換和優(yōu)化時(shí),無法支持在目標(biāo)寄存器與源變量之間的直接映射。所述轉(zhuǎn)換過程移動(dòng)并且刪除對變量值進(jìn)行操作的指令。所述轉(zhuǎn)換過程還可以使用不同的寄存器或存儲(chǔ)器位置來保存在翻譯后的程序中的不同點(diǎn)處的變量值。所述轉(zhuǎn)換過程甚至可以使用一個(gè)寄存器來保存所述值,與此同時(shí),其他變量在該相同的寄存器或存儲(chǔ)器位置中保持它們的值。此外,所述轉(zhuǎn)換過程可能已經(jīng)在一個(gè)變量的生命期的一些部分期間去除了所述值保存寄存器;用常數(shù)負(fù)載來替換該寄存器,或者如上所述,使用還保存來自其他(多個(gè))變量的一個(gè)或多個(gè)值的寄存器。報(bào)告各變量的駐留狀態(tài)(residency)(也就是在某一程序點(diǎn)所述變量所駐留的寄存器或存儲(chǔ)器位置以及它們所具有的值)是一個(gè)技術(shù)問題。在執(zhí)行時(shí),不僅報(bào)告當(dāng)前值而且還報(bào)告變量在某一程序點(diǎn)的預(yù)期值也是一個(gè)問題。特別地,當(dāng)為了另一種類型的機(jī)器或系統(tǒng)而對預(yù)定在一種類型的機(jī)器或系統(tǒng)上執(zhí)行的二進(jìn)制代碼進(jìn)行轉(zhuǎn)換和優(yōu)化時(shí),在原始二進(jìn)制代碼中被存儲(chǔ)在某些寄存器內(nèi)的值在所得到的代碼中將被存儲(chǔ)在其他寄存器內(nèi)。在計(jì)算機(jī)技術(shù)的領(lǐng)域內(nèi),在對目標(biāo)體系結(jié)構(gòu)進(jìn)行優(yōu)化和適配之后呈現(xiàn)原始體系結(jié)構(gòu)的狀態(tài)(比如寄存器內(nèi)容)特別成問題。一致性的喪失的一般問題可以分解成以下主要問題如何把目標(biāo)代碼表示中的指令地址映射到源代碼表示中的指令地址?如何把目標(biāo)代碼表示中的諸如寄存器或存儲(chǔ)器變量之類的數(shù)據(jù)值容器的地址映射到源代碼表示中的數(shù)據(jù)值容器的地址?如何把目標(biāo)代碼表示中的數(shù)據(jù)值容器地址的多個(gè)有效實(shí)例映射回到源代碼表示中的正確數(shù)據(jù)值地址?第一個(gè)問題闡述了代碼位置的問題。后兩個(gè)問題涉及到數(shù)據(jù)值問題。所述數(shù)據(jù)值問題有時(shí)被闡述為報(bào)告或者跟蹤在某一程序點(diǎn)所預(yù)期的原始寄存器(或者在一般高級語言的情況下是變量)的預(yù)期值的問題。確定是否可以在其所賦值的寄存器中訪問原始寄存器或變量的問題典型地被稱作在參考文獻(xiàn)[1]中概述的駐留問題。參考文獻(xiàn)[l]注意到,為了適當(dāng)?shù)貦z測變量的駐留狀態(tài),使用該變量的生命期就足夠了,所謂的生命期也就是從把該變量賦值給一個(gè)寄存器直到在另一條指令中最后一次使用該寄存器的代碼的范圍。但是所述駐留狀態(tài)可以持續(xù)到另一個(gè)值被賦值給包含該變量的值的該寄存器。該程序點(diǎn)是該變量的逐出點(diǎn)。在[l]中,檢測變量的逐出點(diǎn)是通過對在調(diào)試器中優(yōu)化的代碼應(yīng)用數(shù)據(jù)流分析而實(shí)施的。相關(guān)4支術(shù)參考文獻(xiàn)[2]涉及一種內(nèi)置調(diào)試支持設(shè)備,其在多個(gè)通用計(jì)算機(jī)上實(shí)現(xiàn)多處理器仿真環(huán)境以便提高調(diào)試效率。參考文獻(xiàn)[3]涉及一種用于微處理器的軟件調(diào)試端口。當(dāng)與片上蹤跡高速緩存相結(jié)合地使用時(shí),該軟件調(diào)試端口提供用于在處理器上重建指令執(zhí)行流的蹤跡信息,并且能夠在不停止處理器操作的情況下檢查寄存器內(nèi)答。參考文獻(xiàn)[4]涉及一種調(diào)試支持設(shè)備,其具有調(diào)試異??刂撇考?,該部件在接收到來自CPU內(nèi)核的調(diào)試異常的生成指令時(shí)保留寄存器狀態(tài),以及把程序計(jì)數(shù)器改變到調(diào)試異常句柄的地址,并且在接收到恢復(fù)指令時(shí)把該寄存器返回到所述調(diào)試生成之前的狀態(tài)。參考文獻(xiàn)[5]公開了一種具有緊湊蹤跡記錄存儲(chǔ)裝置的調(diào)試接口,該緊湊蹤跡記錄存儲(chǔ)裝置具有多個(gè)蹤跡數(shù)據(jù)存儲(chǔ)元件。所述存儲(chǔ)元件的格式包括表示蹤跡信息的類型的蹤跡代碼字段以及表示蹤跡信息數(shù)據(jù)的類型的蹤跡數(shù)據(jù)字段。參考文獻(xiàn)[6]涉及一種可編程邏輯器件(PLD),其提供觀察及控制隱埋的內(nèi)部節(jié)點(diǎn)的邏輯狀態(tài)的能力。所述PLD提供用于內(nèi)部節(jié)點(diǎn)的影子存儲(chǔ)單元,所述內(nèi)部節(jié)點(diǎn)比如是邏輯元件寄存器、存儲(chǔ)單元和i/o寄存器。樣本/負(fù)載數(shù)據(jù)路徑包括雙向數(shù)據(jù)總線和移位寄存器,其便于對內(nèi)部節(jié)點(diǎn)進(jìn)行采樣以便觀察其邏輯狀態(tài)以及對內(nèi)部節(jié)點(diǎn)進(jìn)行加載以便控制其邏輯狀態(tài)。
      發(fā)明內(nèi)容本發(fā)明的一個(gè)一般目的是實(shí)現(xiàn)并且支持一種對所述數(shù)據(jù)值問題的一般解決方案。一個(gè)特定目的是提供一種當(dāng)執(zhí)行從源代碼表示翻譯成目標(biāo)代碼表示的程序代碼時(shí)對計(jì)算機(jī)系統(tǒng)中的所謂的駐留問題的解決方案。特別地,期望提供一種支持原始源代碼與翻譯后的目標(biāo)代碼之間的數(shù)據(jù)值一致性的機(jī)制。本發(fā)明的一個(gè)特定目的是提供一種用于在計(jì)算機(jī)系統(tǒng)上執(zhí)行翻譯后的目標(biāo)代碼時(shí)支持跟蹤原始源代碼的數(shù)據(jù)值的方法。本發(fā)明的另一個(gè)特定目的是提供一種用于當(dāng)在計(jì)算機(jī)系統(tǒng)上執(zhí)行相應(yīng)的翻譯后的目標(biāo)代碼時(shí)支持原始源代碼的數(shù)據(jù)值容器(比如寄存器或存儲(chǔ)器變量)的視圖的設(shè)備或模塊。一個(gè)特定目的是支持原始寄存器與目標(biāo)寄存器之間的寄存器一致性。特別地,一個(gè)目的是在對于一個(gè)不同計(jì)算機(jī)系統(tǒng)優(yōu)化及適配了所述程序代碼之后維持原始計(jì)算機(jī)系統(tǒng)的數(shù)據(jù)值視圖,尤其是當(dāng)針對該目標(biāo)系統(tǒng)對預(yù)定在該原始系統(tǒng)上執(zhí)行的二進(jìn)制代碼進(jìn)行轉(zhuǎn)換及優(yōu)化時(shí)。如所附專利權(quán)利要求書所限定的那樣,本發(fā)明滿足了這些和其他目的。如所述,本發(fā)明涉及一般數(shù)據(jù)值問題,尤其是當(dāng)執(zhí)行從源代碼表示翻譯成目標(biāo)代碼表示的程序代碼時(shí)計(jì)算機(jī)系統(tǒng)中的駐留問題。本發(fā)明的基本思想是在程序代碼翻譯期間把對目標(biāo)代碼中的目標(biāo)數(shù)據(jù)值容器的索引與源代碼的原始數(shù)據(jù)值容器的相應(yīng)地址信息相關(guān)聯(lián),并且在執(zhí)行目標(biāo)代碼時(shí)存儲(chǔ)與目標(biāo)代碼相關(guān)的信息連同原始數(shù)據(jù)值容器的相關(guān)地址信息,以便支持原始源代碼表示的數(shù)據(jù)值視圖。這樣,可以以非常高效的方式支持在目標(biāo)系統(tǒng)中執(zhí)行翻譯后的目標(biāo)代碼時(shí)跟蹤原始源代碼的數(shù)據(jù)值。數(shù)據(jù)值容器的例子包括普通的微計(jì)算機(jī)寄存器以及高級編程語言中的分配了存儲(chǔ)器的變量。因此,對于寄存器情況,本發(fā)明提供對于源代碼的原始寄存器組與目標(biāo)代碼的目標(biāo)寄存器組之間的寄存器一致性的支持。涉及存儲(chǔ)器變量的情況反映了對于更一般的數(shù)據(jù)值駐留問題的解決方案。本發(fā)明還使得有可能在對于一個(gè)不同計(jì)算機(jī)系統(tǒng)優(yōu)化及適配了程序代碼之后維持原始計(jì)算機(jī)系統(tǒng)的數(shù)據(jù)值視圖。在本發(fā)明的一個(gè)優(yōu)選實(shí)施例中,在代碼翻譯期間關(guān)于數(shù)據(jù)值一致性對目標(biāo)代碼指令加標(biāo)簽,以便提供目標(biāo)代碼中的目標(biāo)數(shù)據(jù)值容器(比如目標(biāo)寄存器或目標(biāo)變量)與源代碼中的原始數(shù)據(jù)值容器之間的關(guān)聯(lián)。優(yōu)選地,在目標(biāo)代碼執(zhí)行時(shí)與所述相關(guān)聯(lián)的原始數(shù)據(jù)值容器地址存儲(chǔ)在一起的信息包括相應(yīng)的目標(biāo)指令地址信息和/或相應(yīng)的指令操作數(shù)值。在后一種情況下,允許跟蹤原始數(shù)據(jù)值容器的值而無需參考任何目標(biāo)數(shù)據(jù)值容器。有利地,上面的跟蹤信息被寫入到專門設(shè)計(jì)的額外寄存器文件中,其在下面被稱作寄生(ghost)寄存器文件,并且優(yōu)選地被實(shí)施為微計(jì)算機(jī)體系結(jié)構(gòu)中的硬件寄存器文件。加了標(biāo)簽的目標(biāo)指令包括表示原始數(shù)據(jù)值容器的賦值的一個(gè)或多個(gè)目標(biāo)指令,所述原始數(shù)據(jù)值容器比如是源代碼中的寄存器或變量。為據(jù)值:器地址信息從一口個(gè)條目(或寄存器)移動(dòng)到另一個(gè)條'目:這樣,本發(fā)明固有地支持其中取決于所取的執(zhí)行路徑可能把不同的原始寄存器(或變量)值賦予目標(biāo)寄存器(或變量)的情況。這對于其中已經(jīng)把原始寄存器(或變量)的不同實(shí)例翻譯成目標(biāo)寄存器的并行實(shí)例的情況也是適用的。為了連貫地反映目標(biāo)系統(tǒng)中的原始數(shù)據(jù)值容器的駐留狀態(tài),本發(fā)明優(yōu)選地還包括用于支持寄生寄存器文件操作的順序連貫性的邏輯。此外,本發(fā)明優(yōu)選地還提供用于選擇性地轉(zhuǎn)換寄生寄存器文件操作的操作流處理。所述操作處理邏輯典型地把分離自處理器的普通操作流的操作轉(zhuǎn)換成針對所述額外寄存器文件的賦值、移動(dòng)、存儲(chǔ)和空操作。所述轉(zhuǎn)換通常受到原始普通操作和所述額外寄存器文件的所謂的讀取等待時(shí)間窗內(nèi)的在前轉(zhuǎn)換的操作的控制。因此,目標(biāo)代碼的指令字中的額外字段、額外的寄存器文件以及某還維持原始源代碼的數(shù)據(jù)值容器的狀態(tài),并且如果需要的話甚至允許維持兩種不同的計(jì)算機(jī)體系結(jié)構(gòu)的狀態(tài)。除了所述寄生寄存器文件或等效的存儲(chǔ)器設(shè)備之外,本發(fā)明還提供單獨(dú)的"編-澤時(shí)間,,和"運(yùn)行時(shí)間"組件、以及這種單獨(dú)組件的集成系統(tǒng)組合。例子包括可操作用于執(zhí)行所謂的加標(biāo)簽的編譯時(shí)間組件、以及可操作用于把相關(guān)信息存儲(chǔ)在所述寄生寄存器文件內(nèi)的運(yùn)行時(shí)間組件。本發(fā)明提供以下優(yōu)點(diǎn)>針對變量和寄存器的數(shù)據(jù)值駐留問題的解決方案。>對于計(jì)算機(jī)系統(tǒng)中的數(shù)據(jù)值一致性的支持。>提高了高效調(diào)試和蹤跡分析的能力。>允許在執(zhí)行翻譯后的目標(biāo)代碼時(shí)跟蹤原始源代碼的數(shù)據(jù)值。>當(dāng)執(zhí)行相應(yīng)的翻譯后的目標(biāo)代碼時(shí)維持原始源代碼表示的數(shù)據(jù)值視圖的可能性。>寄存器一致性支持。>在為了在一個(gè)不同的計(jì)算機(jī)系統(tǒng)上執(zhí)行而對程序代碼進(jìn)行了優(yōu)化和適配之后,對于原始計(jì)算機(jī)系統(tǒng)的數(shù)據(jù)值跟蹤的支持。當(dāng)閱讀下面對本發(fā)明的實(shí)施例的描述時(shí),將會(huì)認(rèn)識(shí)到本發(fā)明所提供的其他優(yōu)點(diǎn)。通過參考下面結(jié)合附圖進(jìn)行的描述,將會(huì)最好地理解本發(fā)明及其進(jìn)一步的目的和優(yōu)點(diǎn)。圖1是說明根據(jù)本發(fā)明一個(gè)優(yōu)選實(shí)施例的用于支持原始源代碼與目標(biāo)代碼之間的數(shù)據(jù)值一致性的機(jī)制的示意圖2是用于在執(zhí)行相應(yīng)的目標(biāo)代碼時(shí)跟蹤原始源代碼的數(shù)據(jù)值的示例性總體方法的示意流程圖,其中包括調(diào)試和/或蹤跡分析;圖3說明根據(jù)本發(fā)明一個(gè)特定實(shí)施例的示例性處理器環(huán)境中的寄生寄存器文件;圖4是目標(biāo)寄存器文件和寄生寄存器文件的示意圖,其示出所述寄生寄存器文件的不同使用的例子;圖5是目標(biāo)寄存器文件和寄生寄存器文件的示意圖,其示出當(dāng)順序代碼中的目標(biāo)寄存器已經(jīng)被并行化從而使得順序目標(biāo)寄存器具有幾個(gè)并行實(shí)例時(shí)使用所述寄生寄存器文件的一個(gè)例子;圖6說明用于確保寄生寄存器文件操作的順序連貫性的寄生寄存器文件管道步驟邏輯的一個(gè)例子;圖7說明用于選擇性地轉(zhuǎn)換寄生寄存器文件操作的操作流處理邏輯的一個(gè)例子;以及重載操作的例子。具體實(shí)施例方式在整個(gè)附圖中,相同的附圖標(biāo)記將被用于相應(yīng)的或類似的元件。過去并沒有完全解決所述數(shù)據(jù)值問題,尤其是,微處理器工業(yè)和學(xué)術(shù)界還沒有解決對于跟蹤在計(jì)算機(jī)系統(tǒng)中容易進(jìn)行優(yōu)化代碼翻譯的原始數(shù)據(jù)值容器值的硬件支持。這種支持將大大緩解在這種系統(tǒng)上的計(jì)算機(jī)程序調(diào)試問題。首先將在一般情況下作為對數(shù)據(jù)值駐留狀態(tài)問題的一般解決方案來描述本發(fā)明。隨后,將分別在寄存器一致性支持和跟蹤高級語言中的存儲(chǔ)器變量的情況下舉例說明本發(fā)明。圖1是說明根據(jù)本發(fā)明一個(gè)優(yōu)選實(shí)施例的用于支持原始源代碼與目標(biāo)代碼之間的數(shù)據(jù)值一致性的機(jī)制的示意圖。所述程序代碼是以原始源代碼表示給出的,其被簡單地稱作源代碼10,并且關(guān)于一組數(shù)據(jù)值容器20(比如寄存器或存儲(chǔ)器變量)操作。原始源代碼的數(shù)據(jù)值容器被稱作原始數(shù)據(jù)值容器。源代碼10被翻譯成目標(biāo)代碼表示,其被簡單地稱作目標(biāo)代碼30。該目標(biāo)代碼30關(guān)于另一組數(shù)據(jù)值容器40操作。目標(biāo)代碼的數(shù)據(jù)值容器被稱作目標(biāo)數(shù)據(jù)值容器。所述代碼翻譯通常包括代碼轉(zhuǎn)換、優(yōu)化以及寄存器分配和靜態(tài)變量的分配。然而,根據(jù)本發(fā)明,在程序代碼翻譯期間的一個(gè)附加的任務(wù)是把對目標(biāo)代碼指令中的目標(biāo)數(shù)據(jù)值容器的索引與源代碼的原始數(shù)據(jù)值容器的相應(yīng)地址信息相關(guān)聯(lián)。優(yōu)選地,這是通過利用涉及原始數(shù)據(jù)值容器的相關(guān)信息對目標(biāo)代碼指令加標(biāo)簽來實(shí)現(xiàn)的。例如,所述加標(biāo)簽過程可以利用原始容器的地址/名稱來標(biāo)記(或者加標(biāo)簽)指令的目的地容器。在目標(biāo)代碼運(yùn)行時(shí)間期間,當(dāng)執(zhí)行加了標(biāo)簽的目標(biāo)代碼30時(shí),指令操作數(shù)值被賦予目標(biāo)數(shù)據(jù)值容器,并且通常還在不同的目標(biāo)容器之間被移動(dòng)。另外,根據(jù)本發(fā)明,與目標(biāo)代碼指令相關(guān)的信息和原始數(shù)據(jù)值容器的相關(guān)聯(lián)的地址信息一起被存儲(chǔ)在一組所謂的"寄生,,或"影子"數(shù)據(jù)值容器50中。這樣,可以在目標(biāo)代碼運(yùn)行時(shí)間內(nèi)維持或者支持原始源代碼表示的數(shù)據(jù)值視圖,從而大大方便了調(diào)試和/或蹤跡分析。在微計(jì)算機(jī)體系結(jié)構(gòu)中,用于支持原始源代碼的數(shù)據(jù)值視圖的數(shù)據(jù)值容器50優(yōu)選地被實(shí)施在"寄生"寄存器文件內(nèi),盡管也存在替換的實(shí)施方式,其中包括使用普通的事務(wù)存儲(chǔ)器。所述"寄生"數(shù)據(jù)值容器50還可以是被分配給高級編程語言中的變量的存儲(chǔ)器位置。圖2是用于在執(zhí)行相應(yīng)的目標(biāo)代碼時(shí)跟蹤原始源代碼的數(shù)據(jù)值的示例性總體方法的示意流程圖,其中包括調(diào)試和/或蹤跡分析。在代碼翻譯階段,優(yōu)選地關(guān)于數(shù)據(jù)值一致性給目標(biāo)代碼指令加標(biāo)簽,以便提供目標(biāo)代碼中的目標(biāo)數(shù)據(jù)值容器(比如目標(biāo)寄存器或目標(biāo)變量)與源代碼中的原始數(shù)據(jù)值容器之間的關(guān)聯(lián)(Sl)。在執(zhí)行目標(biāo)代碼時(shí),把諸如目標(biāo)指令地址信息之類的信息和/或相應(yīng)的指令操作數(shù)值與相關(guān)聯(lián)的原始數(shù)據(jù)值容器地址存儲(chǔ)在一起(S2)。在調(diào)試階段,可以基于所存儲(chǔ)的跟蹤信息來分析原始源代碼。正如稍后將解釋的那樣,當(dāng)目標(biāo)指令地址信息和原始數(shù)據(jù)值容器地址被作為跟蹤信息存儲(chǔ)時(shí),調(diào)試實(shí)用程序可以使用目標(biāo)指令地址信息來再現(xiàn)在經(jīng)過優(yōu)化的目標(biāo)代碼中有效的值。如果指令操作數(shù)值本身被存儲(chǔ),則可以在不參考任何目標(biāo)數(shù)據(jù)值容器的情況下跟蹤原始數(shù)據(jù)值容器的值。代碼分析器和翻譯器(典型地是編譯器)通常分析所述代碼以便提供原始源代碼的數(shù)據(jù)值容器信息,可以稍后在執(zhí)行所得到的目標(biāo)代碼的過程中與所選擇的運(yùn)行時(shí)間信息一起使用所述數(shù)據(jù)值容器信息,以便提供原始源代碼的數(shù)據(jù)值容器視圖。因此,本發(fā)明提供針對數(shù)據(jù)值駐留狀態(tài)問題的解決方案,尤其是針對在由翻譯后的經(jīng)過優(yōu)化的代碼設(shè)置時(shí)報(bào)告變量值(在高級語言翻譯的情況下)或原始寄存器值(在二進(jìn)制翻譯的情況下)以及/或者報(bào)告它們在蹤跡/斷點(diǎn)處駐留在哪些目標(biāo)寄存器中的問題。寄存器一致性下面將關(guān)于原始代碼中的原始寄存器和目標(biāo)代碼中的目標(biāo)寄存器詳細(xì)分析數(shù)據(jù)值問題。為了說明不同的寄存器一致性問題,下面給出兩個(gè)基本代碼實(shí)例。原始體系結(jié)構(gòu)中的寄存器被稱作原始寄存器OREG。關(guān)于目標(biāo)體系結(jié)構(gòu)的寄存器被稱作目標(biāo)寄存器treg:s。實(shí)例1:〃目標(biāo)寄存器tregB從地址ADDR0處的存儲(chǔ)器〃中取值〃把目標(biāo)寄存器tregB的值移動(dòng)到tregA中〃tregB取得新值ldtregB,ADDR0;mvtregA,tregB;ldtregB,ADDR1;sttregA,ADDR2;〃把tregB的前一個(gè)值溢出到地址ADDR2處的〃存儲(chǔ)器ldtregC,ADDR2〃把tregB的前一個(gè)值重載到寄存器tregC中conditional」umpLl;mvtregC,tregD;〃把tregD的值力口載到tregC中U)mvtregE,tregC;〃在tregE的賦值中使用tregD的值或tregB的前〃一個(gè)值假設(shè)tregB初始從ADDR0處的存儲(chǔ)器單元取得原始寄存器0REG1的值(也就是第一條原始指令從ADDR0加載OREG1),并且tregD包含OREG2的值,tregE在Ll處取得何值?這個(gè)問題的答案取決于所述代碼是通過哪一條路徑執(zhí)行的以及編譯器可以給出關(guān)于所述賦值的哪些信息。這意味著對所述問題的一種解決方案,其中既使用動(dòng)態(tài)信息又使用靜態(tài)信息。所述優(yōu)化過程還可以把原始代碼中的不同時(shí)間點(diǎn)處的原始寄存器中的值分配到目標(biāo)代碼中的相同時(shí)間點(diǎn)。這在實(shí)例2中說明。實(shí)例2:LDOREGA,ADDR1;〃用存儲(chǔ)器地址ADDR1中的值來加載〃OREGA...〃這里的計(jì)算鏈基于OREGA中的值...〃采用OREGB中的結(jié)果STOREGB,ADDR1〃把新值存儲(chǔ)在存儲(chǔ)器中LDOREGA,ADDR2〃用另一個(gè)值加載OREGA...〃另一個(gè)計(jì)算鏈基于新值...〃采用OREGC中的結(jié)果STOREGC,ADDR2〃把下一個(gè)新值存儲(chǔ)在存儲(chǔ)器中這里,OREGA寄存器被用于不同時(shí)間的值。在更寬分發(fā)機(jī)器(比如VLIW(超長指令字)機(jī)器)中,這兩個(gè)計(jì)算鏈可能已被并行化。〃OREGA的兩個(gè)實(shí)例已經(jīng)被翻譯成在tregl7和tregl9中保存的兩〃個(gè)并行實(shí)例。ldtregl7,addrl;ldtregl9,addr2;nop;nop;〃這兩個(gè)計(jì)算鏈被并行化在各VLIW機(jī)器功能單元上?!ù鎯?chǔ)也被并行化,產(chǎn)生gr21和gr23sttreg21,addrl,sttreg23,addr2這造成一個(gè)問題,因?yàn)檎{(diào)試器和/或蹤跡實(shí)用程序需要知道哪個(gè)值構(gòu)成OREGA的哪個(gè)實(shí)例。在我們的方法中,目標(biāo)系統(tǒng)中的動(dòng)態(tài)計(jì)算通常是關(guān)于哪些原始寄存器(在二進(jìn)制翻譯的情況下)或變量(在高級翻譯的情況下)被賦予哪些目標(biāo)寄存器。該信息優(yōu)選地被維持在"寄生"寄存器文件中。因此,在任何給定點(diǎn)處,通過搜索所述"寄生"寄存器文件來確定原始寄存器(或變量)的駐留狀態(tài)。在該處找到的原始寄存器(或變量)是駐留的,沒有找到的不是駐留的。對于翻譯系統(tǒng)的關(guān)于源代碼中的原始寄存器或變量的駐留問題,與[l]相比,我們的方法利用相對簡單的硬件實(shí)施方式結(jié)合用某些賦值下的原始寄存器對編譯器中的指令加標(biāo)簽來代替調(diào)試器中的數(shù)據(jù)流計(jì)算。這種方法的一個(gè)優(yōu)點(diǎn)在于,仍然可以報(bào)告已逐出的原始寄存器(或變量值),只要它不是被另一個(gè)原始寄存器(或變量)值逐出的即可。在下面假設(shè)源指令地址在編譯期間被歸因于相應(yīng)的目標(biāo)指令,并且以適當(dāng)?shù)姆绞奖惶峁┙o蹤跡/調(diào)試實(shí)用程序。在一個(gè)優(yōu)選實(shí)施例中,目標(biāo)指令原語(比如VLIW或RISC原語)中的目的地寄存器編碼具有用于原始寄存器地址的額外字段。如果該字段具有有效的原始寄存器地址,則所述操作的結(jié)果也將被寫入到支持原始寄存器組的一致性的寄生寄存器中。除非用于蹤跡和調(diào)試目的,否則該寄生寄存器組將從不被讀取。因此,對于寄生寄存器文件容許長的操作等待時(shí)間。這意味著所述寄生寄存器文件處在關(guān)鍵路徑之外,以及可以把對其的訪問進(jìn)行流水線式安排以滿足定時(shí)需求,并且寄生寄存器文件可以被放置在芯片上的幾乎任何位置處。如果需要支持"目標(biāo)寄存器件之間傳送仿真的寄存器標(biāo)簽。當(dāng)支持"僅僅原始寄存器值"跟蹤時(shí),如果沒有對移動(dòng)操作進(jìn)行原始寄存器加標(biāo)簽,則也是這種情況。在這些情況下,由于所述移動(dòng)操作是組合的讀取和寫入,因此通常需要從寄生寄存器文件進(jìn)行讀取。由于GRF等待時(shí)間,移動(dòng)操作意味著對鄰近的GRF操作的依賴性。這可以通過利用對長GRF操作等待時(shí)間的容限來處理。下面給出關(guān)于這方面的更多內(nèi)容。編譯器知道從原始寄存器組到目標(biāo)寄存器組的映射,如果一條指令表示源代碼中的原始寄存器的賦值,則該編譯器利用該原始寄存器的地址/名稱來給該指令的目的地寄存器加標(biāo)簽。在上面的例子中,這將意味著實(shí)例hldtregB(OREGl),ADDRO〃原始寄存器0REG1的值被加載到〃tregB中mvtregA(OREGl),tregB;〃原始寄存器0REG1的值被移動(dòng)到〃tregA中IdtregB,ADDR1;〃tregB取得新值sttregA,ADDR2;〃0REG1的值被溢出到地址ADDR1處〃的存儲(chǔ)器ldtregC(OREGl),ADDR1〃OREGl的值被重載到寄存器tregC中conditional」umpLl;mvtregC(OREG2),tregD;〃OREG2的值被加載到tregC中所述編譯器無法推斷出原始寄存器OREG1還是OREG2的值將被賦予tregE,因?yàn)檫@取決于到達(dá)L1處的語句的途徑。因此,在沒有動(dòng)態(tài)信息的情況下,不可能分辨是把OREG1還是OREG2的值賦予tregE。然而,所能夠推斷出的是OREG1的最近的值是來自ADDR0的值,因?yàn)闆]有其他值被賦予具有標(biāo)簽OREGl的目標(biāo)寄存器。同樣,OREG2的最近的值是tregD的值(其中tregD當(dāng)然可能已經(jīng)在早先從存儲(chǔ)器取得其值,正如OREGl那樣)。實(shí)例(1)意味著,為了僅僅保存原始寄存器的最近的值,在編譯/鏈接時(shí)間利用原始目的地寄存器給目標(biāo)目的地寄存器加標(biāo)簽并且隨后在運(yùn)行時(shí)間把所述值寫到寄生寄存器就足夠了。為了跟蹤原始寄存器值在程序中的每一點(diǎn)處駐留在什么位置,對于其中取決于所取的執(zhí)行路徑可能把不同的原始寄存器值賦予目標(biāo)寄存器的情況,必須在寄生寄存器文件中具有運(yùn)行時(shí)間的支持。正如下面將解釋的那樣,這優(yōu)選地是通過在寄生寄存器文件內(nèi)移動(dòng)信息的特殊寄生寄存器操作類型來實(shí)現(xiàn)的。實(shí)例2:〃OREGA的兩個(gè)實(shí)例已經(jīng)被翻i奪成在grl7和grl9中保存的兩個(gè)并〃行實(shí)例。ldtregl7(OREGA),addrl;ldtregl9(OREGA),addr2;nop;nop;因此目標(biāo)指令字中的額外字段、額外的寄存器文件以及某種操作處理邏輯允許在目標(biāo)代碼執(zhí)行時(shí)維持原始源代碼和翻譯后的目標(biāo)代碼的數(shù)據(jù)值容器的狀態(tài),并且如果需要的話甚至允許當(dāng)目標(biāo)代碼被優(yōu)化以便〃OREGl或OREG2的值被用在tregE的〃賦值中在不同于原始系統(tǒng)的目標(biāo)系統(tǒng)上執(zhí)行時(shí)維持兩種不同的計(jì)算機(jī)體系結(jié)構(gòu)的狀態(tài)。圖3說明根據(jù)本發(fā)明一個(gè)特定實(shí)施例的示例性處理器環(huán)境中的寄生寄存器文件。在簡化視圖中,該示例性處理器100具有四級指令取出110、解碼120、執(zhí)行130和提交140。該處理器系統(tǒng)還具有普通寄存器文件40和寄生寄存器文件50。當(dāng)在存儲(chǔ)器和普通體系結(jié)構(gòu)寄存器文件40上操作的普通指令被提交時(shí),從解碼級120中的普通代碼流解碼寄生寄存器操作并且將其提交給寄生寄存器50。從寄生寄存器文件到存儲(chǔ)器件;o駐留^與執(zhí)行管道相距多:管道步驟的地方:以便:可能的情況下處理讀取等待時(shí)間。所述多個(gè)管道步驟的實(shí)際數(shù)目被選擇成易于實(shí)施。存儲(chǔ)器讀取數(shù)據(jù)路徑被省略,其他必要的常見結(jié)構(gòu)也被省略,比如數(shù)據(jù)讀取地址總線、指令地址總線等等。可以由調(diào)試實(shí)用程序200讀取在寄生寄存器文件(GRF)50中存儲(chǔ)的跟蹤信息,以便對原始源代碼執(zhí)行調(diào)試和/或蹤跡分析。該調(diào)試實(shí)用程序當(dāng)然還可以從普通寄存器文件40讀取信息,以便支持目標(biāo)代碼調(diào)試。該調(diào)試實(shí)用程序讀取在存儲(chǔ)器中存儲(chǔ)的GRF的快照。在實(shí)踐中,通常是通過執(zhí)行寄生存儲(chǔ)操作把GRF的內(nèi)容排序到存儲(chǔ)器中而取得GRF的快照,就像通過(普通)存儲(chǔ)操作把普通寄存器文件存儲(chǔ)到存儲(chǔ)器那樣。寄生存儲(chǔ)操作的實(shí)際編碼可以處在操作碼字段中或者處在地址字段中。在本發(fā)明的一個(gè)特定實(shí)施例中,從編譯器/鏈接器的角度看,一條指令有三種能夠把寄存器寫入目的地寫到寄存器的方式1)僅僅寫入到目標(biāo)寄存器。2)寫入到目標(biāo)寄存器并且還寫入到寄生寄存器。3)僅僅寫入到寄生寄存器。寄生寄存器組例如可以處在三種寫入模式下。所述寫入模式在對寄存器進(jìn)行寫入的指令當(dāng)中包括不同的各組寄存器寫入目的地。第一寫入模式是其中沒有寫入寄存器一致性信息的情況。在該模式下,僅僅在指令當(dāng)中找到寄存器寫入目的地情況1。第二寫入模式是標(biāo)準(zhǔn)寄存器一致性支持情況,也就是,僅僅在對原始寄存器賦值的未去除語句中的目的地寄存器被加標(biāo)簽。在該模式下,可以在指令中找到寄存器寫入目的地情況1和2。也就是,具有未用原始寄存器加標(biāo)簽的目的地寄存器的指令將被寫入到目標(biāo)寄存器,而具有用原始寄存器加了標(biāo)簽的目的地寄存器的指令將被寫入到目標(biāo)寄存器和寄生寄存器中。第三寫入模式是一種額外寄存器一致性支持情況,也就是,編譯器將保存"寄生"賦值語句,其中用原始寄存器標(biāo)簽和寫入目的地3標(biāo)簽來給目的地寄存器加標(biāo)簽,即使已經(jīng)在優(yōu)化中去除了真實(shí)賦值也是如此。在該寫入模式下,在指令當(dāng)中找到所有寄存器寫入目的地情況。這意味著除了寄存器寫入目的地情況1和2(第二寫入模式)之外,在該模式下還在指令當(dāng)中找到寄存器寫入目的地情況3。具有寄存器寫入目的地3的指令表示已經(jīng)在優(yōu)化期間被編譯器去除的指令。在寄存器一致性的情況下,第三寫入模式主要是理論上令人感興趣,因?yàn)榧拇嫫鞣峙洳豢赡馨鸭纳拇嫫髋c目標(biāo)寄存器的賦值分離,也就是,寄存器分配將也在已去除的指令上進(jìn)行分配。因此,僅有寄生的賦值在代碼中的存在可能會(huì)對寄存器使用和溢出帶來影響(取決于寄存器文件尺寸)。對于這些問題可能會(huì)有補(bǔ)救方法,比如對于一個(gè)或幾個(gè)原始寄存器僅僅使用第三寫入模式、把目標(biāo)寄存器組(如果足夠大的話)分成兩組(較大的一組用于真實(shí)賦值,較小的一組用于寄生賦值)或者僅僅與"僅對原始寄存器值的跟蹤,,相結(jié)合地使用第三寫入模式。在使用時(shí),在處理器控制寄存器中指定寫入模式。調(diào)試器/蹤跡實(shí)用程序?qū)⒖梢栽L問一組寄生寄存器以及每個(gè)寄生寄存器被寫入的指令地址。它還將具有寄存器寫入目的地標(biāo)識(shí),從而它可以推斷出寄生寄存器被如何寫入。這將使得所述實(shí)用程序能夠再現(xiàn)在優(yōu)化后的目標(biāo)代碼中有效的原始寄存器值。寄生寄存器文件通常包含與目標(biāo)體系結(jié)構(gòu)中的寄存器數(shù)目一樣多的條目,并且優(yōu)選地還包括一個(gè)溢出區(qū)域。如果該溢出區(qū)域與所述目標(biāo)寄存器組一樣大,則所有寄生寄存器都可以被容易地溢出。每個(gè)條目優(yōu)選地包括原始寄存器編號以及該寄存器被寫入和/或數(shù)據(jù)值被存儲(chǔ)的指令地址。在一種特定示例性實(shí)施方式中,添加附加的可選信息,從而每個(gè)條目優(yōu)選地包括以下字l爻<table>complextableseeoriginaldocumentpage19</column></row><table>OR-原始寄存器編號RWD-寄存器寫入目的地(通常是1比特,編碼情況2和3)TMIA-目標(biāo)機(jī)器指令地址E-已逐出的值(通常是1比特)V-值表I當(dāng)跟蹤目標(biāo)寄存器中的原始寄存器值時(shí),不需要值字段(V),這是因?yàn)榭梢栽谙鄳?yīng)的目標(biāo)寄存器中找到該值。當(dāng)僅僅跟蹤原始寄存器值時(shí),需要值字段(V),這是因?yàn)槟繕?biāo)寄存器可能被賦予新值,在這種情況下,(多個(gè))舊值將被從目標(biāo)寄存器中逐出。RWD字段通常是由用于第二寫入目的地(第一個(gè)將絕不會(huì)存在于寄生寄存器中)的處理器控制寄存器中的模式值產(chǎn)生的。如果處理器處在第三寫入模式下,則第三寫入目的地被賦予RWD字段,并且目標(biāo)目的地寄存器被定義為空。目標(biāo)寄存器非修改操作的編碼也可以通過操作碼中的1比特或者模式比特字段以及目標(biāo)目的地寄存器中的1比特來實(shí)現(xiàn)。如果僅僅需要寄存器寫入目的地2,則可以省略RWD字段。(保存指令比特的)另一個(gè)選項(xiàng)是使用寄存器地址圖中的一個(gè)寄存器條目作為空標(biāo)記。對該寄存器條目的寫入將不改變其內(nèi)容。如果被使用的話,則該寄存器條目可以被用來總是產(chǎn)生零。如果E比特被設(shè)置,則該值(V)被一個(gè)非原始寄存器值從TMIA處的目標(biāo)寄存器中逐出。圖4和圖5分別說明在"順序代碼,,和"并行代碼"的情況下對寄生寄存器文件的示例性操作。寄生寄存器文件和目標(biāo)寄存器文件被描繪成彼此鄰近。通常來說并不是這種情況,以免與目標(biāo)寄存器文件周圍的路由和放置發(fā)生干擾。附圖僅僅提供了邏輯視圖。圖4和圖5對應(yīng)于上面描述的實(shí)例1)和2)。圖4的實(shí)例1)被用于示出在啟用"跟蹤目標(biāo)寄存器中的源寄存器值"時(shí)以及在啟用"僅僅跟蹤源寄存器的值"時(shí)對寄生寄存器文件的不同使用。為了清楚起見,這里V字段在這兩種情況下都存在。實(shí)例1)作為順序代碼被給出,也就是,它尚未被并行化為例如VLIW指令字。對于寄生寄存器的使用是相同的,而不管它是從RISC指令字還是VLIW指令字寫入的。圖4中的實(shí)箭頭線表示在跟蹤源寄存器的值時(shí)的操作,而虛箭頭線表示在跟蹤目標(biāo)寄存器中的源寄存器值時(shí)所添加的操作。例如,在目標(biāo)指令I(lǐng)A處執(zhí)行的把ADDRO中的值加載到目標(biāo)寄存器tregB中的操作^eg^「(9/^G/」,v4DZ)7^"意味著把信息/"(9i^G/,2,",/"y4DDi^77寫入到寄生寄存器"ghosttregB",其中OR是OREGl,RWD等于2,目標(biāo)機(jī)器指令地址是IA,并且值V是從ADDRO處的存儲(chǔ)器位置取得的。把tregB的值移動(dòng)到tregA中的操作"move^eg」(^^EG/」,"egS"被映射到把tregB的值賦予寄生寄存器ghosttregA的寄生操作中,其中OR等于OREGl,RWD等于2,并且該移動(dòng)-燥作的指令地址也^C寫入到ghosttregA中/O/^G/,2,","eg5/。在實(shí)例1)中,在可以靜態(tài)地推斷出時(shí),由編譯器利用原始寄存器地址給移動(dòng)操作加標(biāo)簽。另一個(gè)替換方案是根本不給移動(dòng)操作加標(biāo)簽(僅僅給初始賦值或加載操作加標(biāo)簽),而是令寄生移動(dòng)操作總是把寄生源寄存器值(OR,RWD,TMIA,E,V)拷貝到寄生目的地寄存器。在對寄生寄存器文件操作的描述以及下面的編譯器描述中預(yù)先假定該替換方案。處理器控制寄存器中的控制比特(EVICT)定義未加標(biāo)簽的目標(biāo)寄存器賦值(即寄生寄存器字段中的無效寄存器地址)是否應(yīng)當(dāng)使寄生寄使用。如果目標(biāo)寄存器中的原始寄存器值應(yīng)當(dāng)被跟蹤',則EVICT、^當(dāng)總是被設(shè)置。因此,只有在僅僅對原始寄存器值感興趣的情況下,該EVICT控制比特才是有意義的。如果被清除,則即使原始寄存器值不存在于目標(biāo)寄存器中,它們也被保存,并且它們將僅僅被用原始寄存器加了標(biāo)簽的指令所重寫。如果被設(shè)置的話,則原始寄存器值可能被未加標(biāo)簽的賦值從寄生寄存器文件中驅(qū)逐。這可以在下面的表II中被概括<table>complextableseeoriginaldocumentpage21</column></row><table>表II如果將要執(zhí)行快照或事后分析,則禁用追蹤,并且通過寄生寄存器轉(zhuǎn)儲(chǔ)例程讀取寄生寄存器存儲(chǔ)器并寫入到主存儲(chǔ)器。通過向寄生寄存器轉(zhuǎn)儲(chǔ)例程插入陷阱,可以保存原始體系結(jié)構(gòu)寄存器組的快照或檢查點(diǎn)以供稍后進(jìn)行分析。圖5的實(shí)例2)被用來示出在順序代碼中的目標(biāo)寄存器已被并行化時(shí)對寄生寄存器文件的使用,從而"順序"目標(biāo)寄存器具有幾個(gè)并行"實(shí)例"。茅i茅存器義伴力部錄#所述寄生寄存器文件(包括溢出區(qū)域)是一個(gè)暫存器,其支持原始源代碼的寄存器;f見圖或者在目標(biāo)體系結(jié)構(gòu)上仿真的原始體系結(jié)構(gòu)。通過兩種基本操作類型來操作該暫存器。茅i,存器橫斧類f一種操作是賦值操作,其是執(zhí)行管道中的算術(shù)或加載指令的副作用。這些算術(shù)或加載指令在其原始寄存器目的地字段中明確地指出相應(yīng)的原始寄存器名稱。另一種操作是移動(dòng)操作。該移動(dòng)操作源自執(zhí)行管道中的移動(dòng)指令。其不同之處在于,該操作沒有明確地指出將寫入到寄生寄存器文件中的原始寄存器的名稱。移動(dòng)操作必須把由移動(dòng)操作源目標(biāo)寄存器編號索引的寄生寄存器條目的OR字段拷貝到由移動(dòng)操作目的地目標(biāo)寄存器編號索引的寄生寄存器條目。并非目標(biāo)寄存器文件中的所有移動(dòng)操作都將引起寄生寄存器文件中的移動(dòng)操作。例如,在非逐出情況下的未加OR標(biāo)簽的移動(dòng)操作在其到達(dá)寄生寄存器時(shí)將是NOP。加了OR標(biāo)簽的移動(dòng)操作將被轉(zhuǎn)換成寄生寄存器賦值操作。寄生存儲(chǔ)操作被用來把寄生寄存器內(nèi)容寫入到存儲(chǔ)器中。當(dāng)在代碼流中的各觀察點(diǎn)處取得寄生寄存器內(nèi)容的快照時(shí)使用寄生存儲(chǔ)操作。包含寄生存儲(chǔ)器指令的代碼可以是異常或中斷例程中的代碼或者普通代碼,這取決于人們想要如何設(shè)置所述觀察。隨后,使用這些觀察快照作為到分析調(diào)試軟件的輸入。NOP指令是空操作,其不對寄生寄存器文件進(jìn)行操作。寄生移動(dòng)操作必須從寄生寄存器文件進(jìn)行讀取,以便能夠?qū)⑵銸R值寫入到寄生寄存器文件中。賦值操作僅僅需要寫入到寄生寄存器文件。賦值操作支持把OR信息從編譯器靜態(tài)傳送到寄生寄存器文件中。移動(dòng)操作支持OR信息在寄生寄存器文件中的動(dòng)態(tài)的、執(zhí)行相關(guān)的傳送。為了支持移動(dòng)和賦值操作,一種優(yōu)選的解決方案是對于每個(gè)有效功能處理器單元(即對于該處理器內(nèi)的每個(gè)有效操作產(chǎn)生實(shí)體)為寄生寄存器文件提供一個(gè)寫入端口和一個(gè)讀取端口。換句話說,每個(gè)發(fā)布槽一個(gè)讀取端口和一個(gè)寫入端口。寄生寄存器操作順序連貫性由于讀取操作在完成之前具有一個(gè)等待時(shí)間,因此我們需要額外的邏輯來支持操作流中的順序連貫性。在該流中稍后的任何其他操作之前必須寫入移動(dòng)操作讀取的結(jié)果,不管是讀取還是寫入該移動(dòng)操作的目的地條目。如果這種連貫性不受支持,則寄生寄存器文件將不根據(jù)由編譯器和目標(biāo)機(jī)器的動(dòng)態(tài)執(zhí)行路徑指定的賦值和移動(dòng)操作來描繪原始體系結(jié)構(gòu)的寄存器狀態(tài)。關(guān)于在執(zhí)行流水線情況下的數(shù)據(jù)危險(xiǎn)的一般討論參見參考文獻(xiàn)[7]。因此,對于復(fù)雜調(diào)試,寄生寄存器文件需要某種邏輯來確保這種連貫性。這在圖6的幫助下進(jìn)行了描述,該圖說明用于確保寄生寄存器文件操作的順序連貫性的寄生寄存器文件管道步驟邏輯的一個(gè)例子(描繪一個(gè)操作流)。由于寄生寄存器文件50需要支持與機(jī)器中的功能單元的數(shù)目一樣多的操作流,因此該邏輯將被復(fù)制。為了簡潔起見,圖6省略了RWD和TMIA單元的傳輸和寫入。還省略了到存儲(chǔ)器的存儲(chǔ)路徑(即到執(zhí)行管道的數(shù)據(jù)路徑)以及存儲(chǔ)地址路徑。在該例中,引入了多個(gè)管道寄存器(Pl、P2、P3、...)。這些寄存器包含RWD標(biāo)志、TMIA值(在圖6中都被省略)、目的地目標(biāo)寄存器編號(dtreg)、原始寄存器編號(oreg,如果該操作是賦值的話)或者源目標(biāo)寄存器(streg,如果該操作是移動(dòng)的話)以及操作指示符(賦值或移動(dòng))。轉(zhuǎn)發(fā)和寫入控制單元60優(yōu)選地監(jiān)視管道寄存器數(shù)據(jù),并且如果檢測到移動(dòng)操作,它將把源目標(biāo)寄存器編號(streg)轉(zhuǎn)發(fā)到讀取地址端口,以便當(dāng)該移動(dòng)操作處在最后一個(gè)管道級中時(shí)具有來自寄存器文件的數(shù)據(jù)(OR值)以進(jìn)行寫入。如果在管道中檢測到對移動(dòng)操作源的一個(gè)或多個(gè)賦值,則在所述移動(dòng)之前的最后一個(gè)OR賦值將被設(shè)置為將在移動(dòng)寫入中寫入的數(shù)據(jù)。在這種情況下,所傳送的過期OR值將被忽略。這優(yōu)選地是通過把最后一個(gè)管道步驟寄存器目的地目標(biāo)寄存器編號(到寄生文件中的寫入索引)與先前的管道步驟寄存器源目標(biāo)寄存器編號(如果該管道寄存器包含移動(dòng)操作的話)進(jìn)行比較而實(shí)現(xiàn)的。如果這兩個(gè)目標(biāo)寄存器索引相匹配,則將用最后一個(gè)管道寄存器的OR值來加載等待從寄生文件傳送OR值的寄存器。來自寄生文件的OR傳送(過期值)在下一循環(huán)中將被忽略,并且將使用被寫入到所述移動(dòng)的源寄存器的新的OR值。下面通過偽代碼來解釋這一示例性邏輯。所需要的存儲(chǔ)結(jié)構(gòu)(寄存器)被稱作端口接口結(jié)構(gòu)中的元件P0,即寄生寄存器文件之前的最后一個(gè)管道步驟。請注意,所述代碼并不完整,例如省略了忽略標(biāo)志處理。還省略了存儲(chǔ)操作處理。盡管所述存儲(chǔ)操作是GRF讀取,但是它并不對GRF進(jìn)行寫入,而是寫入到存儲(chǔ)器。在所述存儲(chǔ)之前的所有操作通過移動(dòng)源地址轉(zhuǎn)發(fā)來支持所述連貫性。所述偽代碼僅僅作為示例性概略而給出,以便提供對所述邏輯的更好的理解。P0.radr;〃讀取地址,其一皮用于移動(dòng)地址轉(zhuǎn)發(fā)P0.rdata;〃當(dāng)移動(dòng)操作將在寄生文件中被完成時(shí),從所述移動(dòng)的源〃讀取數(shù)據(jù)、OR值以便寫入到該移動(dòng)的目的地。P0.we;〃寫入使能。P0.rdati;〃如果要忽略來自寄生寄存器文件的數(shù)據(jù),則讀取忽略〃標(biāo)志。P0.wadr;〃寫入地址,即在賦值操作以及移動(dòng)操作的最后一部分中〃使用的寫入地址。P0.wdata〃寫入數(shù)據(jù),或者是來自賦值操作的OR值,或者是來自〃移動(dòng)操作的OR值。移動(dòng)操作OR值或者源自對寄生文〃件的讀取,或者源自對該移動(dòng)操作的源的賦值操作的寫〃入數(shù)據(jù)。P0.wadr〃寫入地址、賦值或移動(dòng)才喿作目的地。到所述轉(zhuǎn)發(fā)和寫入控制單元中的最后一個(gè)管道步驟的輸入數(shù)據(jù)是先前管道步驟P1、P2、P3的數(shù)據(jù)。{P3-Pl}.dtreg;〃目的地目標(biāo)寄存器編號,到寄生寄存器文件中的〃寫入索引{P3-Pl}.streg;〃源目標(biāo)寄存器,到寄生寄存器文件中的讀取索〃引。如果操作是移動(dòng),則是有效編號。{P3-Pl}.oreg;〃原始寄存器編號,OR數(shù)據(jù)值。如果操作是賦值,〃則是有效編號。{P3-Pl}.op;〃操作,即空操作、移動(dòng)或賦值〃如果管道中有移動(dòng)操作,則它觸發(fā)讀取地址的轉(zhuǎn)發(fā)。IF(P4.op==,move,)THENP0.radr:=streg;P0.rdati:=FALSE;〃接受將被傳送的數(shù)據(jù)ENDIFIF(PI.op=='assignment')〃如果將執(zhí)行的操作是賦值。THEN〃..利用目的地目標(biāo)寄存器加載寫入地址。P0.wadr:=Pl.dtreg;〃..以及將要寫入的顯式OR值P0.wdata:=Pl.oreg;P0.we:=TRUE;ELSEIF(PI.op,move,)〃如果將執(zhí)行的操作是移動(dòng)。THEN〃..利用目的地目標(biāo)寄存器加載寫入地址。PO.wadr:=Pl.dtreg;〃..以及從寄生寄存器文件加載的OR值PO.wdata:=PO.rdata;PO.we:=TRUE;ELSEIF(PI.op,nop,)〃如果操作是空操作,則禁用寫入。THENPO.we:=FALSE;END〃如果移動(dòng)前面更新該移動(dòng)操作的源的操作。IF(P2.op=='move'ANDP2.streg==Pl.dtreg)THENIF(PI.op'assignment')〃..并且在前操作是賦值..THEN〃..用在前操作的OR值加載數(shù)據(jù)寄存器PO.rdata:=Pl.oreg;〃..以及忽略過期值。P0.rdati:=TRUE;ELSEIF(PI.op==,move,)Z人.否則,如杲在前操作是移動(dòng)THEN〃..再利用在前的移動(dòng)的所取出的OR值..P0.rdata:=P0.rdata;〃..以及忽略該移動(dòng)的來自寄生文件的值。P0.rdati:=TRUE;ENDIF〃如果操作是NOP,則什么也不做。ENDIF利用更多的管道步驟可以處理更長的讀取等待時(shí)間。隨著在前操作的數(shù)目的增大,對于移動(dòng)操作的源內(nèi)容的在前更新的轉(zhuǎn)發(fā)和控制的處理將或多或少更為復(fù)雜。上面的例子被簡化,因?yàn)樗鼉H僅描繪了一個(gè)操作流。對于移動(dòng)源修改操作,必須檢查來自其他操作流的在前操作。通過寄存器存儲(chǔ)器的等待時(shí)間也被選擇得低,從而不必檢查多個(gè)移動(dòng)操作。在所述轉(zhuǎn)發(fā)窗口中存在多個(gè)移動(dòng)操作將增大可能的多個(gè)修改值所需的存儲(chǔ)裝置的數(shù)目。寄生寄存器文件50在關(guān)鍵路徑之外,因?yàn)槌蚣纳拇嫫魑募?生寄存器k件及其二的i持邏輯組放置在芯^上的任何地方。如果存在位置和路線定時(shí)問題,則僅僅在操作傳輸路徑中添加一定數(shù)目的管道步驟。茅^爭存器襲#^:^邏圖7說明用于選擇性地轉(zhuǎn)換寄生寄存器文件操作的操作流處理邏輯的一個(gè)例子??梢詮募纳拇嫫魑募?0向后移動(dòng)對在前操作的分析,以便確保足夠的分析時(shí)間。該操作流處理邏輯70過濾從各功能單元(FU)到寄生寄存器文件空操作的不相關(guān)的指令代碼。如果移動(dòng)之前是源修改操作,則該操作流處理邏輯70還可以作廢所轉(zhuǎn)發(fā)的移動(dòng)操作讀取地址,并且用賦值操作來替換該移動(dòng)才喿作。新的賦值才喿作從在前的源修改操作取得其目的地寄存器值。所述操作流處理還將把一些移動(dòng)操作轉(zhuǎn)換成空操作和賦值操作(參見上面對寄生寄存器操作類型的描述)。它還可以把一些加載和存儲(chǔ)(溢出和重載)轉(zhuǎn)換成移動(dòng)操作(與下面對寄存器分配的描述相比)。對所述操作流的處理70可以被放置在任何地方,并且寄生寄存器文件50也是如此。寄生寄存器文件SO和操作處理70不需要是鄰近的。源試器/^遊異,^^為、^f該實(shí)用程序從存儲(chǔ)器讀取寄生寄存器數(shù)據(jù)。所取得的每個(gè)快照通常將包含以下數(shù)據(jù)目標(biāo)機(jī)器指令地址(當(dāng)快照發(fā)生時(shí))。寄生寄存器文件內(nèi)容。該實(shí)用程序現(xiàn)在將使用所述快照目標(biāo)機(jī)器指令地址將其自身索引到目標(biāo)機(jī)器代碼中。這里它將找到多個(gè)目標(biāo)機(jī)器(例如VLIW)原語,其中的每一個(gè)都具有原始代碼的指令地址的屬性。這些原始代碼指令地址使得所述實(shí)用程序能夠?qū)⑵渥陨碛成浠氐皆即a中。*譯器在該方案中,編譯器的任務(wù)是對把原始寄存器值賦予目標(biāo)寄存器的指令的目的地寄存器加標(biāo)簽。這首先是在編譯器的翻譯階段中進(jìn)行的,其中,每條源語句被翻譯成一條或幾條目標(biāo)語句。如果該源語句對原始寄存器賦值,則至少其中一條所述目標(biāo)語句將把該值賦予一個(gè)虛擬或象征寄存器,其在此處表示原始寄存器。但是編譯器的任務(wù)通常不停止在翻譯階段。編譯器必須在整個(gè)優(yōu)化和寄存器分配階段維持虛擬寄存器上的標(biāo)簽,直到它最終把信息傳遞到鏈接器和目標(biāo)格式。下面假設(shè)已經(jīng)向編譯器給出了"標(biāo)準(zhǔn)"或"額外,,一致性(關(guān)于上面的寫入模式2和3)以作為一個(gè)選項(xiàng)。如果給出"無,,一致性,則執(zhí)4亍普通的編-澤。翻譯階段是所述編譯器中的階段,在該階段中,源指令被翻譯成一個(gè)包括一條或多條目標(biāo)指令的序列。這通常是通過從表示源程序或?qū)ο蟮闹虚g形式翻譯成表示目標(biāo)程序或?qū)ο蟮闹虚g形式而實(shí)現(xiàn)的。一般來說,所述翻譯是朝向尺寸無限的象征或虛擬寄存器組進(jìn)行的。換句話說,所述翻譯階段不用麻煩把目標(biāo)寄存器賦予目標(biāo)指令。此后,直到寄存器分配階段,當(dāng)我們說到目標(biāo)寄存器時(shí)將指的是虛擬目標(biāo)寄存器。然而,應(yīng)當(dāng)理解,"翻譯"這一表達(dá)還包括從源代碼到目標(biāo)代碼的總體代碼翻譯或轉(zhuǎn)換,其中包括優(yōu)化和寄存器分配。在該方案中,所述編譯器在翻譯階段中的任務(wù)是對于每個(gè)翻譯后的指令利用表示原始目的地寄存器的編號或名稱來給目標(biāo)目的地寄存器加標(biāo)簽。該標(biāo)簽通常被保存為表示所述目標(biāo)程序的中間形式中的一個(gè)屬性。更具體來說,它被保存在表示所述翻譯后的指令的數(shù)據(jù)結(jié)構(gòu)中。編譯器選擇給目標(biāo)指令序列中的表示把原始寄存器值加載到目標(biāo)目的地寄存器中的源指令的目標(biāo)指令加標(biāo)簽。這意味著并不是將利用所述原始目的地寄存器給所有的目標(biāo)加載指令加標(biāo)簽。例如,當(dāng)然將不對地址計(jì)算指令、臨時(shí)計(jì)算指令、索引或指針檢查或者其他運(yùn)行時(shí)間檢查指令加標(biāo)簽,因?yàn)樗鼈儾槐硎炯虞d或原始寄存器。這開啟了不使位于被賦予非原始寄存器值的目標(biāo)寄存器中的原始寄存器值無效或者使其無效的選項(xiàng)(參見上面)。說'必,覆優(yōu)化階段是這樣的階段,其中可選地對通常由中間形式表示的目標(biāo)程序進(jìn)行分析、轉(zhuǎn)換和調(diào)整,以便適合于特定目標(biāo)系統(tǒng)。稍后解釋的寄存器分配和指令調(diào)度器也可以被認(rèn)為是優(yōu)化階段。一般來說,編譯器在優(yōu)化階段中的任務(wù)是在整個(gè)轉(zhuǎn)換過程中把(翻譯階段設(shè)置的)原始寄存器標(biāo)簽保持在加載原始寄存器值的指令的目標(biāo)目的地寄存器上??赡艹霈F(xiàn)不同的情況加了標(biāo)簽的指令將被去除-如果為編譯器給出了"額外"一致性這一選項(xiàng),則該指令不被去除,而是具有"僅僅寫入到寄生寄存器"的屬性。如果給出了"標(biāo)準(zhǔn)"一致性的選項(xiàng),則去除該指令。加了標(biāo)簽的指令將被替換-目的地寄存器上的標(biāo)簽被移動(dòng)到替換舊指令的該指令中的目的地寄存器中。加了標(biāo)簽的指令將被提升或下降-具有未改變的的目的地寄存器上的標(biāo)簽的目標(biāo)指令被提升或下降。寄存器分配指的是其中所述代碼內(nèi)的無限的虛擬或象征寄存器組的實(shí)例被賦予來自目標(biāo)體系結(jié)構(gòu)的物理寄存器名稱的情況。由于機(jī)器中的物理寄存器的數(shù)目有限,因此寄存器分配器有時(shí)會(huì)插入及去除指令,其負(fù)責(zé)寄存器值出入存儲(chǔ)器以及在寄存器之間的加載、存儲(chǔ)和移動(dòng)。由于在某一程序點(diǎn)處可以獲得的空閑物理寄存器有限而把寄存器值存儲(chǔ)及加載到存儲(chǔ)器的做法被稱作"寄存器溢出"。因此,虛擬寄存器的一個(gè)實(shí)例不必被映射到物理寄存器的一個(gè)實(shí)例。正如其他階段一樣,寄存器分配器的任務(wù)就是在整個(gè)寄存器分配階段把原始寄存器標(biāo)簽保持在目標(biāo)目的地寄存器上,而不管目標(biāo)寄存器在寄存器分配的不同階段中的不同中間表示如何。對于"僅僅源寄存器值"的跟蹤模式來說,它僅必須在賦值過程中參與維持標(biāo)簽。這將導(dǎo)致寄生寄存器文件在運(yùn)行時(shí)間被賦予寄生寄存器中的值。對于"跟蹤目標(biāo)寄存器值中的原始寄存器值"的跟蹤模式來說,寄生寄存器文件中的移動(dòng)操作將負(fù)責(zé)跟蹤各寄存器之間的值。然而,為了能夠跟蹤已被溢出到存儲(chǔ)器并且隨后被重載的原始寄存器值,如果可以靜態(tài)地推斷出的話,則寄存器分配器的溢出代碼發(fā)生器必須用原始寄存器名稱或編號給所插入的加載指令的目的地寄存器加標(biāo)簽。如果不能的話,則所述溢出代碼必須包括從所溢出的寄存器到寄生寄存器文件的溢出區(qū)域的寄生寄存器移動(dòng),并且所述重載代碼必須包括從寄生寄存器文件溢出區(qū)域到寄生寄存器文件的對應(yīng)于目標(biāo)寄存器組的區(qū)域中的移動(dòng)??梢园凑找韵路绞骄幋a動(dòng)態(tài)情況由編譯器標(biāo)記溢出存儲(chǔ),從而使它到達(dá)寄生寄存器文件。該寄生寄存器文件的處理邏輯把該溢出存儲(chǔ)轉(zhuǎn)換成一個(gè)移動(dòng),該移動(dòng)把寄生寄存器數(shù)據(jù)轉(zhuǎn)移到溢出區(qū)域。由編譯器標(biāo)記重載加載指令,從而使得寄生寄存器文件的處理邏輯將其轉(zhuǎn)換成從溢出區(qū)域到寄生寄存器文件的對應(yīng)于目標(biāo)寄存器組的區(qū)域的移動(dòng)(到達(dá)寄生寄存器文件的通常的加載被轉(zhuǎn)換成賦值)。該重載加載的OR值被編譯器賦予所溢出的目標(biāo)寄存器編號,其隨后被用作寄生寄存器移動(dòng)操作中的源寄存器操作數(shù)。這在下面的表m中表示并且還在圖8中說明。<table>complextableseeoriginaldocumentpage29</column></row><table>表III圖8說明用于"動(dòng)態(tài)"情況的寄生寄存器文件50中的溢出和重載操作的例子。由于所述跟蹤模式是處理器狀態(tài),因此支持兩種跟蹤模式的編譯器必須在可能情況下給重載代碼加標(biāo)簽,或者引入到寄生寄存器文件的溢出區(qū)域或來自該溢出區(qū)域的移動(dòng)。措令源i器指令調(diào)度器是這樣一個(gè)階段,在該階段中,指令被放置在代碼流中,從而機(jī)器的微體系結(jié)構(gòu)被高效地利用,并且等待時(shí)間和硬件資源約束不會(huì)被代碼破壞,當(dāng)然也保留了程序的語義。這可以導(dǎo)致指令被移動(dòng)到順序代碼流中,并且對于VLIW系統(tǒng)來說,該階段還意味著把指令并行化成VLIW字。在該方案中,指令調(diào)度器保持指令上的原始寄存器標(biāo)簽。遂#器鏈接器是這樣一個(gè)階段,在該階段中,可重定位的地址被解析成物理地址。這里通常不涉及寄存器,但是如果有鏈接時(shí)間優(yōu)化,則適用于編譯器中的優(yōu)化的相同規(guī)則也適用于所述鏈接時(shí)間優(yōu)化。如前所述,寄生寄存器的操作(賦值、空操作、移動(dòng))可以替換地被指向普通的事務(wù)存儲(chǔ)器。于是反向分析被留給卸載蹤跡數(shù)據(jù)之后的分析階段(在SW中實(shí)施)或者被留給調(diào)試器。在此丟失對數(shù)據(jù)的壓縮。對寄生寄存器鏡像的離線多通重建。所述蹤跡必須大到^以容納定義所有目標(biāo)寄存器的動(dòng)作,當(dāng)存在寄生寄存器文件時(shí)所述定義將總是可以被直接訪問。在一般的高級別情況下跟蹤分配了存儲(chǔ)器的變量中的值當(dāng)跟蹤變量的值時(shí),如上所述的對寄生寄存器字的編碼是不同的。取代保存原始寄存器編號的OR字段,所述OR字段現(xiàn)在表示某一上下文中的變量。所述編碼是由翻譯系統(tǒng)(編譯器/鏈接器)進(jìn)行的,從而在程序地址范圍內(nèi)的每個(gè)活變量具有唯一的編碼號。該變量編碼字段在下文中被稱作變量編碼(VE)。所述編碼必須作為來自翻譯系統(tǒng)的輸出被提供給調(diào)試器/蹤跡系統(tǒng)。所述TMIA字段是解析所述變量編碼的關(guān)鍵,因?yàn)樵揟MIA總是被包括在一個(gè)地址范圍內(nèi),其對于與該TMIA相關(guān)聯(lián)的VE總是具有唯一的變量身份。編譯器利用變量編碼號給從變量加載寄存器的每個(gè)目標(biāo)指令加標(biāo)簽。如在寄存器一致性情況中那樣,這導(dǎo)致寄生寄存器文件或等效模塊中的賦值。當(dāng)在目標(biāo)寄存器之間移動(dòng)變量值時(shí),如在寄存器一致性情況中那樣,這導(dǎo)致寄生寄存器文件中的移動(dòng)操作。應(yīng)當(dāng)注意,在變量值跟蹤情況中不需要寄生寄存器文件的溢出區(qū)域,因?yàn)楸4孀兞恐档募拇嫫骺偸潜灰绯龅阶兞看鎯?chǔ)器位置。隨后,編譯器當(dāng)然必須對把所述變量重載到目標(biāo)寄存器文件中的指令加標(biāo)簽。這種方法示出存在于寄存器中的變量的駐留狀態(tài)和當(dāng)前值。上面描述的實(shí)施例僅僅是作為例子給出的,應(yīng)當(dāng)理解,本發(fā)明不限于此。保留在此公開并要求保護(hù)的基本原理的更多的修改、改變和改進(jìn)都在本發(fā)明的范圍內(nèi)。參考文獻(xiàn)"EvictedVariablesandtheInteractionofGlobalRegisterAllocationandSymbolicDebugging",Ali-RezaAdlTabatabai,ThomasGross,Proceedingofthe20thACMsymposiumonPrinciplesofProgrammingLanguages.P]JP8221296美國專利6,185,732JP2000181746美國專利6,094,729美國專利6,243,304"ComputerArchitecture,AQuantitativeApproach",JohnL.Hennessy,DavidA.Patterson,MorganKaufmannPublishers,chapter3.4'DataHazards'.權(quán)利要求1、一種用于在計(jì)算機(jī)系統(tǒng)上執(zhí)行被稱作目標(biāo)代碼的源代碼的翻譯后的版本時(shí)支持跟蹤原始源代碼的數(shù)據(jù)值的方法,所述方法包括以下步驟-在程序代碼翻譯期間,把對目標(biāo)代碼指令中的目標(biāo)數(shù)據(jù)值容器的索引與所述源代碼的原始數(shù)據(jù)值容器的相應(yīng)地址信息相關(guān)聯(lián);-在執(zhí)行目標(biāo)代碼時(shí),存儲(chǔ)與目標(biāo)代碼指令相關(guān)的信息連同所述源代碼的原始數(shù)據(jù)值容器的相關(guān)地址信息,以便支持原始源代碼表示的數(shù)據(jù)值視圖。2、權(quán)利要求l所述的方法,其中,所述對目標(biāo)代碼指令中的數(shù)據(jù)值容器的索引進(jìn)行關(guān)聯(lián)的步驟包括以下步驟利用所述原始源代碼的相應(yīng)的數(shù)據(jù)值容器地址信息給目標(biāo)代碼指令加標(biāo)簽。3、權(quán)利要求l所述的方法,其中,所述與目標(biāo)代碼指令相關(guān)的信息包括以下各項(xiàng)的至少其中之一-相應(yīng)的目標(biāo)指令地址信息;以及-相應(yīng)的指令操作數(shù)值,其允許在不參考目標(biāo)數(shù)據(jù)值容器的情況下跟蹤原始數(shù)據(jù)值容器的值。4、權(quán)利要求l所述的方法,其中,所述存儲(chǔ)步驟包括以下步驟把所述與目標(biāo)代碼指令相關(guān)的信息連同所述原始源代碼的相關(guān)數(shù)據(jù)值容器地址信息一起寫入到寄生寄存器文件中。5、權(quán)利要求4所述的方法,還包括以下步驟把所述原始源代碼的數(shù)據(jù)值容器地址信息從所述寄生寄存器文件中的第一寄生寄存器移動(dòng)到第二寄生寄存器。6、權(quán)利要求4所述的方法,其中,在目標(biāo)代碼指令中表示的目標(biāo)數(shù)據(jù)值容器的地址信息對所述寄生寄存器文件進(jìn)行索引。7、權(quán)利要求4所述的方法,還包括以下步驟基于多個(gè)管道寄存器來支持寄生寄存器文件操作的順序連貫性,所述多個(gè)管道寄存器用于處理讀取等待時(shí)間以便連貫地反映原始數(shù)據(jù)值容器在目標(biāo)系統(tǒng)中的駐留狀態(tài)。8、權(quán)利要求4所述的方法,還包括用于選擇性地轉(zhuǎn)換寄生寄存器文件操作的操作流處理。9、權(quán)利要求l所述的方法,其中,所述目標(biāo)指令包括至少一個(gè)表示所述源代碼中的原始數(shù)據(jù)值容器的賦值的目標(biāo)指令。10、權(quán)利要求l所述的方法,其中,所述源代碼的原始數(shù)據(jù)值容器對應(yīng)于原始寄存器組,所述目標(biāo)代碼的目標(biāo)數(shù)據(jù)值容器對應(yīng)于目標(biāo)寄存器組,并且所述存儲(chǔ)步驟包括以下步驟把所述信息寫入到寄生寄存器文件中以便支持所述原始源代碼的寄存器視圖,從而支持該原始寄存器組與該目標(biāo)寄存器組之間的寄存器一致性。11、權(quán)利要求l所述的方法,其中,所述原始源代碼適合于原始計(jì)算機(jī)系統(tǒng),所述目標(biāo)代碼適合于與該原始系統(tǒng)不同的目標(biāo)計(jì)算機(jī)系統(tǒng)。12、權(quán)利要求l所述的方法,其中,所述數(shù)據(jù)值容器對應(yīng)于一般的高級編程語言中的分配了存儲(chǔ)器的變量。13、一種用于支持原始程序代碼與被稱作目標(biāo)代碼的該原始程序代碼的翻譯后的版本之間的數(shù)據(jù)值一致性的系統(tǒng),所述系統(tǒng)包括-用于在執(zhí)行該目標(biāo)代碼時(shí)存儲(chǔ)與至少一個(gè)表示所述原始代碼中的數(shù)據(jù)值容器的賦值的目標(biāo)代碼指令相關(guān)的信息連同所述原始數(shù)據(jù)值容器的相關(guān)地址信息的裝置,以便支持所述原始程序代碼的數(shù)據(jù)值視圖。14、權(quán)利要求13所述的系統(tǒng),還包括用于在程序代碼翻譯期間把對目標(biāo)代碼指令中的目標(biāo)數(shù)據(jù)值容器的索引與所述原始代碼的原始數(shù)據(jù)值容器的相應(yīng)地址信息相關(guān)聯(lián)的裝置。15、權(quán)利要求13所述的系統(tǒng),其中,所述與目標(biāo)代碼指令相關(guān)的信息包括以下各項(xiàng)的至少其中之一-相應(yīng)的目標(biāo)指令地址信息;以及-相應(yīng)的指令操作數(shù)值,其允許在不參考目標(biāo)數(shù)據(jù)值容器的情況下跟蹤原始數(shù)據(jù)值容器的值。16、權(quán)利要求13所述的系統(tǒng),其中,所述用于存儲(chǔ)的裝置包括用于把與所述至少一個(gè)目標(biāo)代碼指令相關(guān)的所述信息連同所述原始數(shù)據(jù)值容器的相關(guān)地址信息一起寫入到寄生寄存器文件中的裝置。17、權(quán)利要求16所述的系統(tǒng),還包括用于把所述原始代碼的數(shù)據(jù)值容器地址信息從所述寄生寄存器文件中的第一寄生寄存器條目移動(dòng)到第二寄生寄存器條目的裝置。18、權(quán)利要求16所述的系統(tǒng),其中,在目標(biāo)代碼指令中表示的目標(biāo)數(shù)據(jù)值容器的地址信息對所述寄生寄存器文件進(jìn)行索引。19、權(quán)利要求16所述的系統(tǒng),還包括用于基于多個(gè)管道寄存器來支持寄生寄存器文件操作的順序連貫性的邏輯,所述多個(gè)管道寄存器用于處理讀取等待時(shí)間。20、權(quán)利要求16所述的系統(tǒng),其中,對所述寄生寄存器文件的操作包括賦值、移動(dòng)、存儲(chǔ)和空操作,并且所述系統(tǒng)還包括用于選擇性地轉(zhuǎn)換寄生寄存器文件操作的操作流處理邏輯。21、權(quán)利要求13所述的系統(tǒng),還包括用于基于所存儲(chǔ)的信息對原始程序代碼執(zhí)行調(diào)試和/或蹤跡分析的調(diào)試實(shí)用程序。22、權(quán)利要求13所述的系統(tǒng),其中,所述原始程序代碼的原始數(shù)據(jù)值容器對應(yīng)于原始寄存器組,所述目標(biāo)代碼的目標(biāo)數(shù)據(jù)值容器對應(yīng)于目標(biāo)寄存器組,并且所述用于存儲(chǔ)的裝置包括用于把所述信息寫入到寄生寄存器文件中的裝置,以便支持所述原始程序代碼的寄存器視圖,從而支持該原始寄存器組與該目標(biāo)寄存器組之間的寄存器一致性。23、權(quán)利要求22所述的系統(tǒng),其中,所述原始源代碼適合于原始計(jì)算機(jī)系統(tǒng),所述目標(biāo)代碼適合于與該原始系統(tǒng)不同的目標(biāo)計(jì)算機(jī)系統(tǒng)。24、權(quán)利要求13所述的系統(tǒng),其中,所述數(shù)據(jù)值容器對應(yīng)于一般的高級編程語言中的被分配給變量的存儲(chǔ)器位置。25、一種用于支持原始程序代碼與被稱作目標(biāo)代碼的該原始程序代碼的翻譯后的版本之間的數(shù)據(jù)值一致性的系統(tǒng),所述系統(tǒng)包括-用于在程序代碼翻譯期間利用所述原始程序代碼的原始數(shù)據(jù)值容器的相應(yīng)地址信息給目標(biāo)代碼指令中的目標(biāo)數(shù)據(jù)值容器的索引加標(biāo)簽的裝置,以便允許在執(zhí)行所述目標(biāo)代碼時(shí)提供所述原始代碼的數(shù)據(jù)值容器視圖。26、一種用于在計(jì)算機(jī)系統(tǒng)上執(zhí)行相應(yīng)的翻譯后的目標(biāo)代碼時(shí)支持原始源代碼的數(shù)據(jù)值容器的視圖的設(shè)備,其中所述設(shè)備包括寄生寄存器文件,該寄生寄存器文件具有多個(gè)寄生寄存器條目,其中每個(gè)寄生寄存器條目包括i)用于與表示所述源代碼中的原始數(shù)據(jù)值容器的賦值的目標(biāo)代碼指令相關(guān)的信息的至少一個(gè)字段;以及ii)用于與所述原始數(shù)據(jù)值容器相關(guān)的地址信息的字段。27、權(quán)利要求26的設(shè)備,其中,用于與目標(biāo)代碼指令相關(guān)的信息的所述至少一個(gè)字段包括以下各項(xiàng)的至少其中之一-用于相應(yīng)的目標(biāo)指令地址信息的字段;-用于相應(yīng)的指令操作數(shù)值的值字段。28、權(quán)利要求26所述的設(shè)備,其中,每個(gè)所述寄生寄存器還包括逐出字段,其用于當(dāng)在不參考目標(biāo)數(shù)據(jù)值容器的情況下跟蹤原始數(shù)據(jù)值容器的值時(shí),表明當(dāng)指令操作值從相應(yīng)的目標(biāo)數(shù)據(jù)值容器中消失時(shí),是否應(yīng)當(dāng)把該值保存在所述寄生寄存器中。全文摘要本發(fā)明涉及一般的數(shù)據(jù)值問題,尤其是當(dāng)執(zhí)行從源代碼表示(10)翻譯成目標(biāo)代碼表示(30)的程序代碼時(shí)計(jì)算機(jī)系統(tǒng)中的駐留問題。本發(fā)明的基本思想是在程序代碼翻譯期間把對目標(biāo)代碼中的目標(biāo)數(shù)據(jù)值容器(40)的索引與源代碼的原始數(shù)據(jù)值容器(20)的相應(yīng)地址信息相關(guān)聯(lián),并且在執(zhí)行目標(biāo)代碼時(shí)存儲(chǔ)與目標(biāo)代碼指令相關(guān)的信息連同原始數(shù)據(jù)值容器的相關(guān)地址信息,以便支持原始源代碼表示的數(shù)據(jù)值視圖(50)。這樣,可以以高效的方式支持在目標(biāo)系統(tǒng)中執(zhí)行翻譯后的目標(biāo)代碼(30)時(shí)跟蹤原始源代碼(10)的數(shù)據(jù)值。文檔編號G06F9/45GK101198930SQ200580050121公開日2008年6月11日申請日期2005年4月13日優(yōu)先權(quán)日2005年4月13日發(fā)明者L·溫伯格,M·溫伯格,M·赫梅特克,N·O·尼爾森申請人:艾利森電話股份有限公司
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評論。精彩留言會(huì)獲得點(diǎn)贊!
      1