專利名稱:一種支持用規(guī)則記錄變量訪問(wèn)專用寄存器組的處理方法
技術(shù)領(lǐng)域:
本發(fā)明涉及對(duì)于處理器中具有專用寄存器組的嵌入式軟件開(kāi)發(fā),特別涉及一種支持用規(guī)則記錄變量訪問(wèn)專用寄存器組的處理方法。
背景技術(shù):
高級(jí)語(yǔ)言的設(shè)計(jì)目的是讓程序按照人類的思維和語(yǔ)言習(xí)慣書(shū)寫(xiě),它是面向程序員的。在嵌入式領(lǐng)域被廣泛使用的高級(jí)語(yǔ)言是C語(yǔ)言。計(jì)算機(jī)能夠直接識(shí)別和執(zhí)行的不是高級(jí)語(yǔ)言,而是用二進(jìn)制代碼表示的機(jī)器指令的集合,即機(jī)器語(yǔ)言。匯編語(yǔ)言用助記符代替了二進(jìn)制機(jī)器指令,但是仍然是硬件操作的控制信息,所以它和機(jī)器語(yǔ)言一樣都是面向機(jī)器的低級(jí)語(yǔ)言。
高級(jí)語(yǔ)言書(shū)寫(xiě)的源程序需要變換成機(jī)器語(yǔ)言目標(biāo)代碼才能在計(jì)算機(jī)上運(yùn)行,這個(gè)變換通常包含兩個(gè)階段前一個(gè)階段是將源程序變換成匯編語(yǔ)言的表示,后一個(gè)階段則是將匯編表示變換成機(jī)器語(yǔ)言目標(biāo)代碼。后一個(gè)階段是由匯編器、鏈接器來(lái)完成的,與本發(fā)明無(wú)關(guān)。前一個(gè)階段是由編譯器來(lái)完成的,本發(fā)明的工作也都集中在這個(gè)階段。后文中的編譯,如果沒(méi)有特別指明,表示的就是從高級(jí)語(yǔ)言的源程序變換到匯編語(yǔ)言表示的過(guò)程。
編譯器的工作可以分為若干階段,通常劃分為詞法分析、語(yǔ)法分析、語(yǔ)義分析、中間代碼生成、代碼優(yōu)化和代碼生成階段,參見(jiàn)文獻(xiàn)1《編譯原理和技術(shù)(第二版)》,陳意云,1997年。編譯器的這些階段常常又被分為前端和后端。前端只依賴于源語(yǔ)言,通常包括前三個(gè)階段,即詞法分析、語(yǔ)法分析和語(yǔ)義分析。前端對(duì)源程序進(jìn)行不同的分析,以解釋源程序的結(jié)構(gòu)和基本數(shù)據(jù),決定它們的含義。其中,語(yǔ)義分析階段檢查程序的語(yǔ)義正確性,并為以后的代碼生成階段收集類型信息,它使用語(yǔ)法分析階段確定的語(yǔ)法樹(shù)來(lái)表示表達(dá)式和語(yǔ)句的算符和運(yùn)算對(duì)象。編譯器在中間代碼生成階段會(huì)產(chǎn)生源程序的中間表示。中間表示是一種抽象機(jī)的程序,易于產(chǎn)生,而且易于翻譯成目標(biāo)程序。編譯器的后端是指編譯器中依賴于目標(biāo)機(jī)的部分,一般獨(dú)立于源語(yǔ)言,而與中間語(yǔ)言相關(guān),包括代碼優(yōu)化、代碼生成等。代碼優(yōu)化階段試圖改進(jìn)代碼,產(chǎn)生執(zhí)行較快的目標(biāo)代碼。代碼生成階段則將中間代碼翻譯成等價(jià)的機(jī)器指令序列。
隨著嵌入式處理器的大量應(yīng)用,嵌入式軟件的開(kāi)發(fā)越來(lái)越來(lái)越重要。對(duì)于一款嵌入式處理器,能夠有大量的應(yīng)用程序支持是將之推向市場(chǎng)的前提。因此,縮短軟件開(kāi)發(fā)周期,提高軟件開(kāi)發(fā)質(zhì)量,在整個(gè)開(kāi)發(fā)過(guò)程中占有至關(guān)重要的作用。有些嵌入式處理器對(duì)性能有很高的要求,例如骨干網(wǎng)的路由器要求能夠支持上G的分組轉(zhuǎn)發(fā)速率。這一類嵌入式處理器中使用了特殊的技術(shù)來(lái)提高處理速度,其中的一種重要機(jī)制就是專用寄存器組。這些專用寄存器組用來(lái)存放關(guān)鍵數(shù)據(jù),以克服訪存瓶頸,加快數(shù)據(jù)存取,不能用于編譯器的寄存器分配。在嵌入式軟件中如何充分利用這些專用寄存器組是提高性能的關(guān)鍵之一。
在目前的嵌入式軟件開(kāi)發(fā)中,訪問(wèn)專用寄存器組主要有兩種方式匯編語(yǔ)言編程和使用高級(jí)語(yǔ)言與匯編語(yǔ)言的混合編程。
匯編語(yǔ)言編程的優(yōu)點(diǎn)是運(yùn)行效率高,可靈活的對(duì)專用寄存器組進(jìn)行控制,但是缺點(diǎn)是要求程序員直接操作硬件,編程效率不高,難于調(diào)試,難于移植。
混合編程是一種不得已的選擇。高級(jí)語(yǔ)言克服了匯編語(yǔ)言的缺點(diǎn),但是由于高級(jí)語(yǔ)言語(yǔ)法的局限,難以直接使用高級(jí)語(yǔ)言對(duì)嵌入式處理器提供的專用寄存器組進(jìn)行操作,只能借助于內(nèi)嵌到高級(jí)語(yǔ)言源程序中的匯編語(yǔ)句來(lái)操作硬件。如下面的C語(yǔ)言源程序片段所示int a asm(%r18”);//將全局變量a指定放入寄存器%r18中void function(){int b asm(“%r22”);//局部變量b指定放入寄存器%r22中…}混合編程的一個(gè)缺點(diǎn)是同樣難于移植,如果把某個(gè)專有寄存器的編號(hào)從%r18修改為%r17,就需要把源程序中所有出現(xiàn)的%r18修改一遍。另一個(gè)缺點(diǎn)是功能有限1)是嵌入式匯編只能使用標(biāo)量來(lái)訪問(wèn)專有寄存器,而不能使用結(jié)構(gòu)、數(shù)組等規(guī)則記錄變量,因此能夠訪問(wèn)的寄存器個(gè)數(shù)受標(biāo)量的最大寬度制約,通常不超過(guò)64位(即2個(gè)32位的專用寄存器);2)是標(biāo)量只能作為一個(gè)整體來(lái)進(jìn)行使用,當(dāng)程序員需要對(duì)專用寄存器的一位或者某幾位進(jìn)行位域操作時(shí),需要自己處理細(xì)節(jié),增大了出錯(cuò)機(jī)會(huì),降低了編程效率。
因此,人們希望支持高級(jí)語(yǔ)言中用規(guī)則記錄變量訪問(wèn)專用寄存器組的處理方法。
發(fā)明內(nèi)容
本發(fā)明的目的是克服現(xiàn)有技術(shù)中的不足,提供一種支持在高級(jí)語(yǔ)言中用規(guī)則記錄變量訪問(wèn)專用寄存器組的處理方法,能夠在嵌入式軟件開(kāi)發(fā)中直接使用規(guī)則記錄變量如結(jié)構(gòu)、聯(lián)合等訪問(wèn)處理器的專用寄存器組。
為了達(dá)到上述目的,本發(fā)明采取的技術(shù)方案如下支持用規(guī)則記錄變量訪問(wèn)專用寄存器組的處理方法,通過(guò)擴(kuò)展編譯器的功能,對(duì)于嵌入式處理器中普遍存在的專用寄存器組,可以在高級(jí)語(yǔ)言源程序中將專用寄存器組定義為具有一定屬性的規(guī)則記錄變量來(lái)進(jìn)行訪問(wèn),具體內(nèi)容包括如下四點(diǎn)1)設(shè)計(jì)新的類型屬性,以標(biāo)識(shí)需要放入專用寄存器組的規(guī)則記錄變量類型。
2)設(shè)計(jì)規(guī)則記錄變量的語(yǔ)法樹(shù)結(jié)構(gòu),用遞歸算法實(shí)現(xiàn)計(jì)算規(guī)則記錄變量各成員相對(duì)位置;其中變量的名稱、類型、成員域、大小和一般的變量語(yǔ)法樹(shù)結(jié)構(gòu)類似,增加表示步驟1)所述類型屬性的特征比特位,并忽視規(guī)則記錄變量以及其成員域的對(duì)齊要求信息;這是因?yàn)槌R?guī)的處理方法要求按照變量類型計(jì)算對(duì)齊以便編譯器為變量分配存儲(chǔ)位置,而本方法的規(guī)則記錄變量會(huì)存儲(chǔ)到專用寄存器組中,因此不需要計(jì)算對(duì)齊;規(guī)則記錄變量的成員域在語(yǔ)法樹(shù)結(jié)構(gòu)中是用鏈表表示的,成員是除了聯(lián)合變量之外的一般變量的語(yǔ)法樹(shù)結(jié)構(gòu);所述遞歸算法在編譯器分析到類型屬性信息后遍歷規(guī)則記錄變量語(yǔ)法結(jié)構(gòu)中的成員鏈,不考慮成員的類型和對(duì)齊要求計(jì)算成員在規(guī)則記錄變量中的偏移,重置編譯器在建立成員語(yǔ)法樹(shù)結(jié)構(gòu)時(shí)計(jì)算的位置信息。
3)設(shè)計(jì)規(guī)則記錄變量的中間表示;該結(jié)構(gòu)包括規(guī)則記錄變量和它每個(gè)成員域?qū)?yīng)的專用寄存器編號(hào)、大小、起始比特和結(jié)束比特;生成規(guī)則記錄變量的中間表示的算法包括遍歷規(guī)則記錄變量語(yǔ)法樹(shù)結(jié)構(gòu)的成員鏈,根據(jù)成員的相對(duì)位置和大小計(jì)算所占用的專用寄存器編號(hào)、起始比特和結(jié)束比特,同時(shí)指示編譯器專用寄存器不參與寄存器分配。
4)生成利用規(guī)則記錄變量訪問(wèn)專用寄存器組的代碼;所用算法分兩模塊從專用寄存器組提取規(guī)則記錄變量成員數(shù)據(jù)的數(shù)據(jù)提取模塊和將規(guī)則記錄變量成員數(shù)據(jù)存儲(chǔ)到專用寄存器組的數(shù)據(jù)存儲(chǔ)模塊;其中,數(shù)據(jù)提取模塊分3個(gè)過(guò)程數(shù)據(jù)對(duì)齊、數(shù)據(jù)無(wú)關(guān)位屏蔽和專用寄存器讀寫(xiě);數(shù)據(jù)存儲(chǔ)模塊的過(guò)程為上述3個(gè)過(guò)程的逆過(guò)程;每個(gè)過(guò)程根據(jù)數(shù)據(jù)大小和位置選擇合適的處理器指令或指令組合生成代碼;一般的數(shù)據(jù)對(duì)齊通常選擇移位指令,數(shù)據(jù)無(wú)關(guān)位屏蔽選擇按位與或指令,而專用寄存器讀寫(xiě)選擇數(shù)據(jù)移動(dòng)指令;對(duì)于單個(gè)成員數(shù)據(jù)占用多個(gè)專用寄存器的情況,算法根據(jù)寄存器邊界將該數(shù)據(jù)分割多個(gè)部分,每個(gè)部分位于單個(gè)專用寄存器,經(jīng)過(guò)提取或存儲(chǔ)代碼生成,最后再生成將各部分?jǐn)?shù)據(jù)合并的代碼。
與現(xiàn)有技術(shù)相比,本發(fā)明提出的處理方法具有如下的優(yōu)點(diǎn)1)保留了高級(jí)語(yǔ)言開(kāi)發(fā)的優(yōu)點(diǎn),又克服了高級(jí)語(yǔ)言難以對(duì)特殊硬件進(jìn)行直接控制的缺點(diǎn),程序員像使用普通規(guī)則記錄變量一樣使用處理器提供的專用寄存器組,而不需要借助于匯編語(yǔ)句,既可以把專用寄存器組作為一個(gè)整體來(lái)存取,也可以單獨(dú)存取單個(gè)寄存器的一位、幾位或者跨寄存器邊界存取,提高了編程效率,縮短了開(kāi)發(fā)周期;2)向程序員屏蔽了底層硬件的細(xì)節(jié),能靈活的處理各種專用寄存器組的使用規(guī)范,當(dāng)專用寄存器組使用規(guī)范變更的時(shí)候,只需要修改編譯器中生成中間代碼的映射過(guò)程,不需要對(duì)源程序程序作任何修改;3)向編譯器暴露了更多的優(yōu)化機(jī)會(huì),提高了系統(tǒng)性能。
具體實(shí)施例方式
下面結(jié)合具體實(shí)施方式
對(duì)本發(fā)明作進(jìn)一步詳細(xì)描述支持用規(guī)則記錄變量訪問(wèn)專用寄存器組的處理方法,處理流程如下1)在編譯器中增加對(duì)一種高級(jí)語(yǔ)言如C語(yǔ)言的類型屬性的支持,對(duì)源程序中的規(guī)則記錄變量進(jìn)行檢驗(yàn),如果具有該類型屬性,則編譯器將其識(shí)別為需要放到專用寄存器組中;如果沒(méi)有該類型屬性,則編譯器按照已知的方法進(jìn)行處理;該步驟包括如下子步驟
步驟1.1增加編譯器內(nèi)部的屬性數(shù)組的長(zhǎng)度,使其能夠容納新添的這種屬性;步驟1.2修改屬性數(shù)組的初始化函數(shù),使得新添的這種屬性參數(shù)能夠被正確初始化,同時(shí)編譯器在進(jìn)行詞法分析和語(yǔ)法分析時(shí)能夠識(shí)別這種屬性;2)編譯器前端根據(jù)類型屬性識(shí)別出需要放入專用寄存器組的規(guī)則記錄變量,將為其建立語(yǔ)法樹(shù)的結(jié)構(gòu),將語(yǔ)法樹(shù)結(jié)構(gòu)中對(duì)應(yīng)與該屬性的特征比特置1,并且根據(jù)變量的名稱、類型、成員域、大小、對(duì)齊要求等設(shè)置語(yǔ)法樹(shù)結(jié)構(gòu)的對(duì)應(yīng)域,除此以外,語(yǔ)法樹(shù)結(jié)構(gòu)和域信息的計(jì)算還由硬件設(shè)計(jì)者確定的專用寄存器組的使用規(guī)范(主要是數(shù)據(jù)排列方式)決定;該步驟包括如下子步驟步驟2.1修改編譯器內(nèi)部對(duì)語(yǔ)法樹(shù)結(jié)構(gòu)的定義,增加和該屬性對(duì)應(yīng)的特征比特;步驟2.2編譯器在進(jìn)行語(yǔ)法分析時(shí),對(duì)于變量定義將建立對(duì)應(yīng)的語(yǔ)法樹(shù)結(jié)構(gòu),并且將對(duì)應(yīng)這種屬性的標(biāo)志比特置1;步驟2.3編譯器對(duì)變量類型進(jìn)行分析,根據(jù)變量的名稱、類型、域,填充語(yǔ)法樹(shù)結(jié)構(gòu),根據(jù)專用寄存器組使用規(guī)范遞歸計(jì)算規(guī)則記錄變量各成員大小、對(duì)齊要求和起始位置。
3)編譯器的中間代碼生成階段對(duì)于特征比特為0的語(yǔ)法樹(shù)結(jié)構(gòu),按照普通變量進(jìn)行處理,而對(duì)于步驟2中生成的語(yǔ)法樹(shù)結(jié)構(gòu),將為變量和它每個(gè)子域建立對(duì)應(yīng)的中間表示,包括其對(duì)應(yīng)的專用寄存器編號(hào)、大小、起始比特和結(jié)束比特。該步驟包括如下子步驟步驟3.1如果語(yǔ)法樹(shù)結(jié)構(gòu)特征比特為0,則按照普通變量來(lái)進(jìn)行處理,執(zhí)行步驟4);步驟3.2對(duì)于步驟2.2中建立的特征比特為1的語(yǔ)法樹(shù)結(jié)構(gòu),為變量和它的每個(gè)子域建立對(duì)應(yīng)的中間表示,并初始化中間表示中變量的名稱、類型等基本信息;步驟3.3編譯器根據(jù)步驟2.3中計(jì)算出來(lái)得各個(gè)位域的大小、起始位置和對(duì)齊方式信息,將各個(gè)位域映射到專用寄存器組中,設(shè)置其對(duì)應(yīng)的中間代碼,包括其對(duì)應(yīng)的專用寄存器標(biāo)號(hào)、大小、起始比特和結(jié)束比特。
4)編譯器的后端利用步驟3)中生成的中間表示進(jìn)行代碼生成。該步驟包括如下子步驟
步驟4.1編譯器生成指令的中間代碼;指令的操作數(shù)存儲(chǔ)在專用寄存器組時(shí),或者要用指令對(duì)專用寄存器組中的數(shù)據(jù)進(jìn)行運(yùn)算時(shí),本專利支持?jǐn)?shù)據(jù)可以跨越專用寄存器邊界。對(duì)于這種占用多個(gè)物理寄存器的數(shù)據(jù),要生成數(shù)據(jù)提取代碼和數(shù)據(jù)合并代碼;步驟4.2編譯器根據(jù)現(xiàn)有技術(shù)提供的方法對(duì)指令的中間代碼進(jìn)行變換和優(yōu)化,包括刪除冗余的用于提取和合并數(shù)據(jù)的代碼,最后輸出匯編表示。
權(quán)利要求
1.一種支持用規(guī)則記錄變量訪問(wèn)專用寄存器組的處理方法,通過(guò)擴(kuò)展編譯器的功能,對(duì)于嵌入式處理器中普遍存在的專用寄存器組,在高級(jí)語(yǔ)言源程序中將專用寄存器組定義為具有一定屬性的規(guī)則記錄變量來(lái)進(jìn)行訪問(wèn),具體包括如下四點(diǎn)1)定義一種類型屬性,以標(biāo)識(shí)需要放入專用寄存器組的規(guī)則記錄變量類型;2)設(shè)計(jì)規(guī)則記錄變量的語(yǔ)法樹(shù)結(jié)構(gòu),用遞歸算法實(shí)現(xiàn)計(jì)算規(guī)則記錄變量各成員相對(duì)位置;其中變量的名稱、類型、成員域、大小和一般的變量語(yǔ)法樹(shù)結(jié)構(gòu)相同,增加表示步驟1)所述類型屬性的特征比特位,并忽視規(guī)則記錄變量以及其成員域的對(duì)齊要求信息;規(guī)則記錄變量的成員域在語(yǔ)法樹(shù)結(jié)構(gòu)中用鏈表表示,成員是一般變量的語(yǔ)法樹(shù)結(jié)構(gòu);3)設(shè)計(jì)規(guī)則記錄變量的中間表示;該結(jié)構(gòu)包括規(guī)則記錄變量和它每個(gè)成員域?qū)?yīng)的專用寄存器編號(hào)、大小、起始比特和結(jié)束比特;生成規(guī)則記錄變量的中間表示的算法包括遍歷規(guī)則記錄變量語(yǔ)法樹(shù)結(jié)構(gòu)的成員鏈,根據(jù)成員的相對(duì)位置和大小計(jì)算所占用的專用寄存器編號(hào)、起始比特和結(jié)束比特,同時(shí)指示編譯器專用寄存器不參與寄存器分配;4)生成利用規(guī)則記錄變量訪問(wèn)專用寄存器組的代碼;所用算法分兩模塊從專用寄存器組提取規(guī)則記錄變量成員數(shù)據(jù)的數(shù)據(jù)提取模塊和將規(guī)則記錄變量成員數(shù)據(jù)存儲(chǔ)到專用寄存器組的數(shù)據(jù)存儲(chǔ)模塊;其中,所述數(shù)據(jù)提取模塊分三個(gè)過(guò)程數(shù)據(jù)對(duì)齊、數(shù)據(jù)無(wú)關(guān)位屏蔽和專用寄存器讀寫(xiě);所述數(shù)據(jù)存儲(chǔ)模塊的過(guò)程為上述三個(gè)過(guò)程的逆過(guò)程;每個(gè)過(guò)程根據(jù)數(shù)據(jù)大小和位置選擇合適的處理器指令或指令組合生成代碼。
2.根據(jù)權(quán)利要求1所述的支持用規(guī)則記錄變量訪問(wèn)專用寄存器組的處理方法,其特征在于,步驟2)中的所述遞歸算法在編譯器分析到類型屬性信息后遍歷規(guī)則記錄變量語(yǔ)法結(jié)構(gòu)中的成員鏈,不考慮成員的類型和對(duì)齊要求計(jì)算成員在規(guī)則記錄變量中的偏移,重置編譯器在建立成員語(yǔ)法樹(shù)結(jié)構(gòu)時(shí)計(jì)算的位置信息。
3.一種支持用規(guī)則記錄變量訪問(wèn)專用寄存器組的處理方法,處理流程如下1)在編譯器中增加對(duì)一種高級(jí)語(yǔ)言的類型屬性的支持,對(duì)源程序中的規(guī)則記錄變量進(jìn)行檢驗(yàn),如果具有該類型屬性,則編譯器將其識(shí)別為需要放到專用寄存器組中;如果沒(méi)有該類型屬性,則編譯器按照已知的方法進(jìn)行處理;2)編譯器前端根據(jù)類型屬性識(shí)別出需要放入專用寄存器組的規(guī)則記錄變量,將為其建立語(yǔ)法樹(shù)的結(jié)構(gòu),將語(yǔ)法樹(shù)結(jié)構(gòu)中對(duì)應(yīng)與該屬性的特征比特置1,并且根據(jù)變量信息設(shè)置語(yǔ)法樹(shù)結(jié)構(gòu)的對(duì)應(yīng)域;3)編譯器的中間代碼生成階段對(duì)于特征比特為0的語(yǔ)法樹(shù)結(jié)構(gòu),按照普通變量進(jìn)行處理,而對(duì)于步驟2)中生成的語(yǔ)法樹(shù)結(jié)構(gòu),將為變量和它每個(gè)子域建立對(duì)應(yīng)的中間表示,包括其對(duì)應(yīng)的專用寄存器編號(hào)、大小、起始比特和結(jié)束比特;4)編譯器的后端利用步驟3)中生成的中間表示進(jìn)行代碼生成。
4.根據(jù)權(quán)利要求3所述的支持用規(guī)則記錄變量訪問(wèn)專用寄存器組的處理方法,其特征在于,所述步驟1)包括如下子步驟步驟1.1增加編譯器內(nèi)部的屬性數(shù)組的長(zhǎng)度,使其能夠容納新添的這種屬性;步驟1.2修改屬性數(shù)組的初始化函數(shù),使得新添的這種屬性參數(shù)能夠被正確初始化,同時(shí)編譯器在進(jìn)行詞法分析和語(yǔ)法分析時(shí)能夠識(shí)別這種屬性。
5.根據(jù)權(quán)利要求3所述的支持用規(guī)則記錄變量訪問(wèn)專用寄存器組的處理方法,其特征在于,所述步驟2)包括如下子步驟步驟2.1修改編譯器內(nèi)部對(duì)語(yǔ)法樹(shù)結(jié)構(gòu)的定義,增加和該屬性對(duì)應(yīng)的特征比特;步驟2.2編譯器在進(jìn)行語(yǔ)法分析時(shí),對(duì)于變量定義將建立對(duì)應(yīng)的語(yǔ)法樹(shù)結(jié)構(gòu),并且將對(duì)應(yīng)這種屬性的標(biāo)志比特置1;步驟2.3編譯器對(duì)變量類型進(jìn)行分析,根據(jù)變量的名稱、類型、域,填充語(yǔ)法樹(shù)結(jié)構(gòu),根據(jù)專用寄存器組使用規(guī)范遞歸計(jì)算規(guī)則記錄變量各成員大小、對(duì)齊要求和起始位置;所述步驟3)包括如下子步驟步驟3.1如果語(yǔ)法樹(shù)結(jié)構(gòu)特征比特為0,則按照普通變量來(lái)進(jìn)行處理,執(zhí)行步驟4);步驟3.2對(duì)于步驟2.2中建立的特征比特為1的語(yǔ)法樹(shù)結(jié)構(gòu),為變量和它的每個(gè)子域建立對(duì)應(yīng)的中間表示,并初始化中間表示中關(guān)于變量的基本信息;步驟3.3編譯器根據(jù)步驟2.3中計(jì)算出來(lái)得各個(gè)位域的大小、起始位置和對(duì)齊方式信息,將各個(gè)位域映射到專用寄存器組中,設(shè)置其對(duì)應(yīng)的中間表示,包括其對(duì)應(yīng)的專用寄存器標(biāo)號(hào)、大小、起始比特和結(jié)束比特。
6.根據(jù)權(quán)利要求3所述的支持用規(guī)則記錄變量訪問(wèn)專用寄存器組的處理方法,其特征在于,所述步驟4)包括如下子步驟步驟4.1編譯器生成指令的中間代碼;指令的操作數(shù)存儲(chǔ)在專用寄存器組時(shí),或者要用指令對(duì)專用寄存器組中的數(shù)據(jù)進(jìn)行運(yùn)算時(shí),數(shù)據(jù)可以跨越專用寄存器邊界;對(duì)于這種占用多個(gè)物理寄存器的數(shù)據(jù),要生成數(shù)據(jù)提取代碼和數(shù)據(jù)合并代碼;步驟4.2編譯器對(duì)指令的中間代碼進(jìn)行變換和優(yōu)化,包括刪除冗余的用于提取和合并數(shù)據(jù)的代碼,最后輸出匯編表示。
7.一種支持用規(guī)則記錄變量訪問(wèn)專用寄存器組的處理方法,處理流程如下1)在編譯器中增加對(duì)一種高級(jí)語(yǔ)言的類型屬性的支持,對(duì)源程序中的規(guī)則記錄變量進(jìn)行檢驗(yàn),如果具有該類型屬性,則編譯器將其識(shí)別為需要放到專用寄存器組中;如果沒(méi)有該類型屬性,則編譯器按照已知的方法進(jìn)行處理;該步驟包括如下子步驟步驟1.1增加編譯器內(nèi)部的屬性數(shù)組的長(zhǎng)度,使其能夠容納新添的這種屬性;步驟1.2修改屬性數(shù)組的初始化函數(shù),使得新添的這種屬性參數(shù)能夠被正確初始化,同時(shí)編譯器在進(jìn)行詞法分析和語(yǔ)法分析時(shí)能夠識(shí)別這種屬性;2)編譯器前端根據(jù)類型屬性識(shí)別出需要放入專用寄存器組的規(guī)則記錄變量,將為其建立語(yǔ)法樹(shù)的結(jié)構(gòu),將語(yǔ)法樹(shù)結(jié)構(gòu)中對(duì)應(yīng)與該屬性的特征比特置1,并且根據(jù)變量信息設(shè)置語(yǔ)法樹(shù)結(jié)構(gòu)的對(duì)應(yīng)域;該步驟包括如下子步驟步驟2.1修改編譯器內(nèi)部對(duì)語(yǔ)法樹(shù)結(jié)構(gòu)的定義,增加和該屬性對(duì)應(yīng)的特征比特;步驟2.2編譯器在進(jìn)行語(yǔ)法分析時(shí),對(duì)于變量定義將建立對(duì)應(yīng)的語(yǔ)法樹(shù)結(jié)構(gòu),并且將對(duì)應(yīng)這種屬性的標(biāo)志比特置1;步驟2.3編譯器對(duì)變量類型進(jìn)行分析,根據(jù)變量的名稱、類型、域,填充語(yǔ)法樹(shù)結(jié)構(gòu),根據(jù)專用寄存器組使用規(guī)范遞歸計(jì)算規(guī)則記錄變量各成員大小、對(duì)齊要求和起始位置;3)編譯器的中間代碼生成階段對(duì)于特征比特為0的語(yǔ)法樹(shù)結(jié)構(gòu),按照普通變量進(jìn)行處理,而對(duì)于步驟2中生成的語(yǔ)法樹(shù)結(jié)構(gòu),將為變量和它每個(gè)子域建立對(duì)應(yīng)的中間表示,包括其對(duì)應(yīng)的專用寄存器編號(hào)、大小、起始比特和結(jié)束比特;該步驟包括如下子步驟步驟3.1如果語(yǔ)法樹(shù)結(jié)構(gòu)特征比特為0,則按照普通變量來(lái)進(jìn)行處理,執(zhí)行步驟4);步驟3.2對(duì)于步驟2.2中建立的特征比特為1的語(yǔ)法樹(shù)結(jié)構(gòu),為變量和它的每個(gè)子域建立對(duì)應(yīng)的中間代碼,并初始化中間表示中關(guān)于變量的基本信息;步驟3.3編譯器根據(jù)步驟2.3中計(jì)算出來(lái)得各個(gè)位域的大小、起始位置和對(duì)齊方式信息,將各個(gè)位域映射到專用寄存器組中,設(shè)置其對(duì)應(yīng)的中間代碼,包括其對(duì)應(yīng)的專用寄存器標(biāo)號(hào)、大小、起始比特和結(jié)束比特;4)編譯器的后端利用步驟3)中生成的中間表示進(jìn)行代碼生成;該步驟包括如下子步驟步驟4.1編譯器生成指令的中間代碼;指令的操作數(shù)存儲(chǔ)在專用寄存器組時(shí),或者要用指令對(duì)專用寄存器組中的數(shù)據(jù)進(jìn)行運(yùn)算時(shí),數(shù)據(jù)可以跨越專用寄存器邊界;對(duì)于這種占用多個(gè)物理寄存器的數(shù)據(jù),要生成數(shù)據(jù)提取代碼和數(shù)據(jù)合并代碼;步驟4.2編譯器根據(jù)現(xiàn)有技術(shù)提供的方法對(duì)指令的中間代碼進(jìn)行變換和優(yōu)化,包括刪除冗余的用于提取和合并數(shù)據(jù)的代碼,最后輸出匯編表示。
全文摘要
本發(fā)明公開(kāi)了一種支持用規(guī)則記錄變量訪問(wèn)專用寄存器組的處理方法。該方法包括1)設(shè)計(jì)新的類型屬性,以標(biāo)識(shí)需要放入專用寄存器組的規(guī)則記錄變量類型;2)設(shè)計(jì)規(guī)則記錄變量的語(yǔ)法樹(shù)結(jié)構(gòu),用遞歸算法實(shí)現(xiàn)計(jì)算規(guī)則記錄變量各成員相對(duì)位置;3)設(shè)計(jì)規(guī)則記錄變量的中間表示;4)生成利用規(guī)則記錄變量訪問(wèn)專用寄存器組的代碼。本發(fā)明的優(yōu)點(diǎn)1)保留高級(jí)語(yǔ)言開(kāi)發(fā)的優(yōu)點(diǎn),又克服了高級(jí)語(yǔ)言難以對(duì)特殊硬件進(jìn)行直接控制的缺點(diǎn),提高編程效率,縮短開(kāi)發(fā)周期;2)向程序員屏蔽了底層硬件的細(xì)節(jié),能靈活的處理各種專用寄存器組的使用規(guī)范;3)向編譯器暴露更多的優(yōu)化機(jī)會(huì),提高系統(tǒng)性能。
文檔編號(hào)G06F9/45GK1920771SQ200510093279
公開(kāi)日2007年2月28日 申請(qǐng)日期2005年8月23日 優(yōu)先權(quán)日2005年8月23日
發(fā)明者賈耀倉(cāng), 桂劍, 霍瑋, 谷曉銘, 張兆慶, 馮曉兵 申請(qǐng)人:中國(guó)科學(xué)院計(jì)算技術(shù)研究所