![編譯程序的構(gòu)造_第1頁(yè)](http://file4.renrendoc.com/view/fa356178527ee62a095af0a873c54d21/fa356178527ee62a095af0a873c54d211.gif)
![編譯程序的構(gòu)造_第2頁(yè)](http://file4.renrendoc.com/view/fa356178527ee62a095af0a873c54d21/fa356178527ee62a095af0a873c54d212.gif)
![編譯程序的構(gòu)造_第3頁(yè)](http://file4.renrendoc.com/view/fa356178527ee62a095af0a873c54d21/fa356178527ee62a095af0a873c54d213.gif)
![編譯程序的構(gòu)造_第4頁(yè)](http://file4.renrendoc.com/view/fa356178527ee62a095af0a873c54d21/fa356178527ee62a095af0a873c54d214.gif)
![編譯程序的構(gòu)造_第5頁(yè)](http://file4.renrendoc.com/view/fa356178527ee62a095af0a873c54d21/fa356178527ee62a095af0a873c54d215.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
編譯程序的構(gòu)造主要有三條途徑:用某種程序語(yǔ)言書(shū)寫(xiě)編譯程序通過(guò)LEX、YACC等工具進(jìn)行自動(dòng)構(gòu)造通過(guò)現(xiàn)有的編譯基礎(chǔ)設(shè)施進(jìn)行改造和組裝13.1編譯程序的書(shū)寫(xiě)一.編譯程序的書(shū)寫(xiě)語(yǔ)言與T型圖編譯程序的T型圖,如圖13.1所示:
如果一個(gè)編譯程序的源語(yǔ)言是X,目標(biāo)語(yǔ)言是Y,書(shū)寫(xiě)語(yǔ)言是Z,把該編譯程序記作CZXY,那么用T型圖表示如圖
13.2所示:二.編譯程序的自展技術(shù)自展思想:先用目標(biāo)機(jī)的匯編語(yǔ)言或機(jī)器語(yǔ)言書(shū)寫(xiě)源語(yǔ)言的一個(gè)子集的編譯程序,然后再用這個(gè)子集作為書(shū)寫(xiě)語(yǔ)言,實(shí)現(xiàn)源語(yǔ)言的編譯程序。如果把這個(gè)過(guò)程根據(jù)情況分成若干步,像滾雪球一樣直到生成預(yù)計(jì)源語(yǔ)言的編譯程序?yàn)橹?把這樣的實(shí)現(xiàn)方式稱為自展技術(shù)例如,在目標(biāo)機(jī)A上要實(shí)現(xiàn)L語(yǔ)言的編譯程序,可以把L的核心部分劃分為L(zhǎng)1第一步:先用A機(jī)器的匯編語(yǔ)言或機(jī)器語(yǔ)言A書(shū)寫(xiě)L1的編譯程序,表示為CAL1A,其T型圖如圖13.3所示:第二步:再用L1書(shū)寫(xiě)L語(yǔ)言的編譯程序?yàn)镃L1LA,其T型圖如圖13.4所示第三步:由于最終要求得到CALA,只要把CL1LA經(jīng)過(guò)CAL1A即可得到CALA。可用圖13.5的雙層結(jié)合T型圖表示:A結(jié)合T型圖的原則是:(1)下面的T型圖的左右上角兩個(gè)語(yǔ)言分別與上面左右兩個(gè)T型圖的底部語(yǔ)言相同(2)上面左右兩個(gè)T型圖的左右上角的語(yǔ)言必須分別相同如果把L分出L1,L2,這個(gè)過(guò)程用三層結(jié)合的T型圖表示如圖13.6所示:ACALACALACAL2ACL2LACL1L2ACLL1AL可以分成核心L1,L2,…,Ln都為L(zhǎng)1的逐步擴(kuò)充,使得
L=Ln,其自展的示意圖如圖13.7所示:三、交叉編譯程序交叉編譯:在一個(gè)平臺(tái)上生成另一個(gè)平臺(tái)上的可執(zhí)行代碼。平臺(tái):指體系結(jié)構(gòu)、操作系統(tǒng)。需要它的原因:1、目標(biāo)平臺(tái)上不允許或不能夠安裝所需要的編譯程序,而又需要這個(gè)編譯程序的某些特征。2、目標(biāo)平臺(tái)上的資源貧乏,無(wú)法運(yùn)行所需要的編譯程序。3、目標(biāo)平臺(tái)還沒(méi)有建立,沒(méi)有操作系統(tǒng),根本上談不上運(yùn)行什么編譯程序。特點(diǎn):與主機(jī)編譯相比,交叉編譯受到的限制更多:專利、版權(quán)、技術(shù)。四、編譯基礎(chǔ)設(shè)施編譯基礎(chǔ)設(shè)施是編譯程序的開(kāi)發(fā)環(huán)境,它提供一系列開(kāi)發(fā)編譯程序的策略和工具,支持多種源語(yǔ)言、多目標(biāo)機(jī)的編譯技術(shù),以便于人們?cè)诰哂休^高抽象層次的平臺(tái)上進(jìn)行編譯程序開(kāi)發(fā)和研究工作。編譯基礎(chǔ)設(shè)施為開(kāi)發(fā)各種編譯程序成分提供相應(yīng)的生成工具。五、可重定向編譯程序它能根據(jù)不同目標(biāo)機(jī),生成相應(yīng)的目標(biāo)代碼,而普通編譯程序?qū)⒃闯绦蚍g成特定目標(biāo)機(jī)的匯編代碼或目標(biāo)代碼。(1)可重定向編譯程序不是針對(duì)特定機(jī)器的編譯程序用戶而言的可重定向。(2)可重定向編譯程序不是編譯程序的生成器。(3)有多個(gè)針對(duì)不同機(jī)型的可選后端。一、概述可重定向編譯程序的研究和開(kāi)發(fā)對(duì)于編譯程序的構(gòu)造具有重大意義:1、它縮短了編譯程序的開(kāi)發(fā)周期。2、它提高了編譯程序研究的質(zhì)量,使研究人員能夠在抽象級(jí)的平臺(tái)上開(kāi)發(fā),把精力專注于研究本身而非基礎(chǔ)建設(shè)。3、便于更多的隊(duì)伍從事編譯程序研究,且其研究成果能夠被很好地共享,從而可以加快步伐。4、及時(shí)針對(duì)新機(jī)器和新語(yǔ)言開(kāi)發(fā)出配套的編譯程序,減少了采用新語(yǔ)言和新機(jī)器的障礙,有利于為產(chǎn)品創(chuàng)造更大的市場(chǎng)。13.2可重定向編譯程序二、支持可重定向編譯的關(guān)鍵技術(shù)可重定向編譯程序的目的是為了實(shí)現(xiàn)資源共享,方便于特定目標(biāo)機(jī)的編譯程序的剪裁和移植,因此,傳統(tǒng)的多目標(biāo)編譯后端構(gòu)造,中間表示、代碼優(yōu)化和代碼生成等編譯技術(shù),應(yīng)該為可重定向編譯程序的開(kāi)發(fā)提供依據(jù)。1、中間表示技術(shù)中間表示是在編譯程序?qū)⒏呒?jí)語(yǔ)言程序翻譯為匯編語(yǔ)言或機(jī)器代碼的過(guò)程中產(chǎn)生的。在可重定向編譯程序的研究中,應(yīng)提供一種結(jié)構(gòu)良好的中間表示,這種中間表示應(yīng)在適當(dāng)?shù)某橄髮哟紊?,向上能支持多語(yǔ)言的映射,向下能適應(yīng)多平臺(tái)轉(zhuǎn)換且宜于進(jìn)行各種優(yōu)化。2、機(jī)器描述技術(shù)研究表明,基于體系結(jié)構(gòu)描述語(yǔ)言詳細(xì)地指定體系結(jié)構(gòu)是產(chǎn)生高質(zhì)量機(jī)器級(jí)工具的關(guān)鍵技術(shù)。3、代碼生成程序的構(gòu)造技術(shù)一般來(lái)說(shuō),代碼生成程序的構(gòu)造器的輸入是機(jī)器描述,輸出是代碼生成程序。4、目標(biāo)機(jī)描述與目標(biāo)代碼生成的接口技術(shù)目標(biāo)機(jī)描述與目標(biāo)代碼生成的接口,指定了與目標(biāo)機(jī)無(wú)關(guān)的前端及與目標(biāo)機(jī)有關(guān)的后端之間的相互聯(lián)系。三、常用的可重定向編譯程序1、目前在世界范圍內(nèi)得到廣泛使用的可重定向編譯程序是屬于自由軟件的GCC(GNUcompilercollection:/)GCC是FSF啟動(dòng)的GNU工程的一部分,其開(kāi)發(fā)目標(biāo)在于提高GNU系統(tǒng)中編譯程序的質(zhì)量。GCC目前已支持的源語(yǔ)言有:C、C++、Objective_C、JAVA、Ada,已移植的平臺(tái)有100多種,涉及30多種處理器、60多種系統(tǒng)。2、LCC是由普林斯頓大學(xué)的ChristopherFraser和David
Hanson開(kāi)發(fā)的可重定向的ANSI
C編譯程序,可供匿名使用。兩者的主要區(qū)別在前端和后端的數(shù)量上:GCC支持C、C++、Java等7種源語(yǔ)言和MIPS、ARM等36種體系結(jié)構(gòu)系列。LCC源語(yǔ)言只支持標(biāo)準(zhǔn)C,后端支持ALPHA、MIPS
R3000、
SPARC和x86在機(jī)器描述的能力上:GCC所描述的處理器信息較多,強(qiáng)于LCC。在產(chǎn)生代碼質(zhì)量上:GCC經(jīng)過(guò)20~30多遍的優(yōu)化,大量測(cè)試表明代碼的穩(wěn)定性較好。LCC經(jīng)過(guò)少量的優(yōu)化,代碼質(zhì)量也比較可靠。GCC逐漸成為工業(yè)上的主流應(yīng)用,LCC應(yīng)用較少,且有被
GCC取代的趨勢(shì)。一.GCC的總體結(jié)構(gòu)編譯器的工作是將源代碼(通常使用高級(jí)語(yǔ)言編寫(xiě))翻譯成目標(biāo)代碼(通常是低級(jí)的目標(biāo)代碼或者機(jī)器語(yǔ)言),在現(xiàn)代編譯器的實(shí)現(xiàn)中,這個(gè)工作一般是分兩個(gè)階段來(lái)實(shí)現(xiàn)的:
第一階段,編譯器的前端接受輸入的源代碼,經(jīng)過(guò)詞法、語(yǔ)法和語(yǔ)義分析等等得到源程序的某種中間表示方式第二階段,編譯器的后端將前端處理生成的中間表示方式進(jìn)行一些優(yōu)化,并最終生成在目標(biāo)機(jī)器上可運(yùn)行的代碼13.3
GCC的剖析GCC設(shè)計(jì)中有兩個(gè)重要的目標(biāo):在構(gòu)建支持不同硬件平臺(tái)的編譯器時(shí),它的代碼能夠最大程度的被復(fù)用,所以
GCC必須要做到一定程度的硬件無(wú)關(guān)性。要生成高質(zhì)量的可執(zhí)行代碼,這就需要對(duì)代碼進(jìn)行集中的優(yōu)化。為了實(shí)現(xiàn)這兩個(gè)目標(biāo),GCC內(nèi)部使用了一種硬件平臺(tái)無(wú)關(guān)的語(yǔ)言,它能對(duì)實(shí)際的體系結(jié)構(gòu)做一種抽象,這個(gè)中間語(yǔ)言就是
RTL(RegisterTransferLanguage)GCC編譯系統(tǒng)由與源語(yǔ)言相關(guān)的前端、與源語(yǔ)言無(wú)關(guān)的后端和目標(biāo)機(jī)描述三部分組成,如圖13.8所示:對(duì)于其支持的每種源語(yǔ)言,存在一個(gè)獨(dú)立的、與語(yǔ)言相關(guān)的語(yǔ)法分析器。利用這些語(yǔ)法分析器,對(duì)不同的源語(yǔ)言產(chǎn)生相同的分析結(jié)果-語(yǔ)法樹(shù)。二.GCC的中間表示高層中間表示為語(yǔ)法樹(shù),低層中間表示為RTL。RTL的語(yǔ)法結(jié)構(gòu)類似于LISP語(yǔ)言的表達(dá)式,真正用于編譯內(nèi)部的只有91種操作碼,另外的24種操作碼則只出現(xiàn)在機(jī)器描述中。RTL的基本元素是rtx表達(dá)式,每個(gè)表達(dá)式的外部語(yǔ)法形式為:(code:mopn1opn2...)code為rtx的操作碼,該操作碼指明rtx的操作類型,如表示一條rtx指令、進(jìn)行某種算術(shù)運(yùn)行、引用某個(gè)符號(hào)名或寄存器以及表示某種說(shuō)明等等。除此這外,code還確定rtx的操作數(shù)個(gè)數(shù)及其種類。m表示機(jī)器方式,即數(shù)據(jù)和運(yùn)算結(jié)果的類型,它反映了數(shù)據(jù)類型與字長(zhǎng)兩部分信息。opn為操作數(shù)。rtx操作碼可以表示5種對(duì)象:一般整數(shù)、寬整數(shù)、字符串、rtx表達(dá)式、由指向rtx的指針組成的向量。下面是一條將寄存器值送入內(nèi)存的rtx表達(dá)式及其相應(yīng)的樹(shù)結(jié)構(gòu):(insn1113
(set
(mem:SF
(plus:S158)
(const_int32)))(reg:SF71))...圖13.9中的rtx表達(dá)式表示了一條將寄存器的值送至內(nèi)存的指令:RTL的基本元素rtx在形式上是統(tǒng)一的,但根據(jù)它們?cè)试S出現(xiàn)的場(chǎng)合可分為:指令的、具有副作用的、運(yùn)算的、初等值的rtx表示指令的rtx一共有7條,其中最主要的是INSN、
JUMP_INSN、CALL_INSN、CODE_LABEL和NOTE,它們分別表示一般指令、轉(zhuǎn)移指令、轉(zhuǎn)子指令、標(biāo)號(hào)定義和編譯指導(dǎo)信息GCC中間表示中每條RTL指令實(shí)際上都表示著目標(biāo)機(jī)的一條指令源程序中一個(gè)處理單元(函數(shù)或程序段)中所有RTL指令形成了如圖13.10所示的一個(gè)完整結(jié)構(gòu):三.GCC的機(jī)器描述1.宏定義頭文件:machine.h定義的主要內(nèi)容:(1)編譯驅(qū)動(dòng)程序的宏定義:用于指導(dǎo)編譯驅(qū)動(dòng)程序以什么形式的命令行參數(shù)運(yùn)行諸如預(yù)處理、編譯、匯編連接等處理步驟(2)存儲(chǔ)器的編址信息:如存儲(chǔ)器的尋址單位、尋址方式(3)各種類型數(shù)據(jù)對(duì)象的存儲(chǔ)約定(4)寄存器的個(gè)數(shù)、種類、名稱及各種寄存器的用途約定(5)棧的安排、函數(shù)的入口、出口及調(diào)用約定(6)有關(guān)匯編語(yǔ)言輸出的宏定義:指明匯編語(yǔ)言初始數(shù)據(jù)段、正文段、一般數(shù)據(jù)段等的格式要求,定義匯編輸出函數(shù)的函數(shù)名(7)目標(biāo)機(jī)操作系統(tǒng)所支持的目標(biāo)文件格式或調(diào)試輸出格式等等2.機(jī)器描述文件:machine.md它是一個(gè)正文文件其中除了允許以;打頭的注釋行外,其余均是采用RTL外部語(yǔ)法形式書(shū)寫(xiě)的rtx表達(dá)式這些rtx表達(dá)式的操作碼是專門(mén)用于機(jī)器描述的9條操作碼,由它們組成的機(jī)器描述包含目標(biāo)機(jī)指令集的各種內(nèi)容,主要包括以下幾個(gè)方面:(1)目標(biāo)機(jī)指令集的有關(guān)屬性,主要包括:指令的分類指令的數(shù)據(jù)類型指令的長(zhǎng)度指令的延遲槽功能部件(2)指令樣板,描述目標(biāo)機(jī)所支持的每一條指令相應(yīng)的
RTL指令形式和匯編輸出格式(3)指令樣板的補(bǔ)充信息,指出可以進(jìn)行與目標(biāo)機(jī)相關(guān)的優(yōu)化動(dòng)作及相應(yīng)的RTL指令形式define_insn具有4個(gè)或5個(gè)操作數(shù),其形式和動(dòng)作如下:操作數(shù)0為指令名,用字符串表示操作數(shù)1是一個(gè)不完全的rtx表達(dá)式或向量,稱為RTL模板操作數(shù)2為一字符串,稱為條件操作數(shù)3為一字符串,稱為輸出模板操作數(shù)4為一任選的rtx向量,稱為指令屬性下面是misp.md中一條指令樣板的例子:(define_insn“adddf3”(set(match_operand:DF0“register_operand”“f”)(plus:DF(match_operand:DF2“register_operand”“f”)(match_operand:DF2“register_operand”“f”))))“TARGER_HARD_FLOAT”“add.d\\t%0,%1,%2”((set_attr“type”“tadd”)(set_attr“mode”“DF”)(set_attr“l(fā)ength”“1”)RTL模板中set和plus運(yùn)算涉及的操作數(shù)均為形式如下的特殊rtx的表達(dá)式:(match_operand:mnpredicateconstaint)該表達(dá)式專門(mén)用于表示操作數(shù)n指明為第幾個(gè)操作數(shù)m為操作數(shù)的方式predicate指明操作數(shù)必須滿足的匹配條件constaint為對(duì)操作數(shù)的限制如圖13.11所示,指令樣板有兩個(gè)重要作用:用于構(gòu)造中間語(yǔ)言RTL中的指令、確定匯編代碼的輸出格式;它是支持多平臺(tái)思想得到實(shí)現(xiàn)的核心部分:四.GCC的代碼生成與機(jī)器描述的接口GCC的機(jī)器描述文件都是普通的正文文件,在編譯過(guò)程中,如果為構(gòu)造或匹配RTL在這種文件中搜索,那是極其緩慢的為此,一方面,在編譯內(nèi)部設(shè)計(jì)了一套專門(mén)的函數(shù)和數(shù)據(jù)結(jié)構(gòu)作為編譯主體與機(jī)器描述之間的接口,另一方面,在編譯之外設(shè)計(jì)了一套獨(dú)立的、專用的機(jī)器描述處理程序,這套程序?qū)⒄男问降臋C(jī)器描述轉(zhuǎn)換成方便接口調(diào)用的數(shù)據(jù)結(jié)構(gòu)與函數(shù)在GCC中,機(jī)器描述處理程序由11個(gè)獨(dú)立的程序組成,每個(gè)程序處理機(jī)器描述文件的一部分內(nèi)容,它們各自形成相應(yīng)的C源程序,分別作用于RTL生成、機(jī)器相關(guān)優(yōu)化和匯編代碼輸出等過(guò)程。其對(duì)應(yīng)關(guān)系如圖13.12所示:對(duì)于前面給出的mips.md中的那條雙精度浮點(diǎn)加指令樣板,經(jīng)過(guò)gen*處理后產(chǎn)生的內(nèi)容如圖13.13所示:對(duì)于每個(gè)標(biāo)準(zhǔn)運(yùn)算,GCC內(nèi)部有一張操作表,其形式如圖
13.14所示:13.4
GCC的定制一.GCC的剪裁為保證所開(kāi)發(fā)的編譯程序能夠在該體系結(jié)構(gòu)中正確運(yùn)行,并能充分利用其機(jī)器特征,以進(jìn)一步提高代碼的質(zhì)量,因此需要對(duì)所剪裁的編譯程序做一些修改工作編譯程序開(kāi)發(fā)人員可以根據(jù)具體的目標(biāo)機(jī)特性對(duì)其目標(biāo)描述文件進(jìn)行修改,從而避免了修改編譯系統(tǒng)源程序的繁瑣工作對(duì)MD文件的修改主要依賴于體系結(jié)構(gòu)的特征參數(shù),修改過(guò)程中主要的工作量集中在理解MD文件中的insn的含義、尋找GCC中對(duì)insn進(jìn)行操作的函數(shù)GCC編譯程序會(huì)產(chǎn)生一些THMP不支持的指令二.GCC編譯程序的安裝與配置(1)準(zhǔn)備需要的頭文件:下載交叉編譯程序所需要的頭文件包mips-inc.tgz,并在正確的目錄下解壓縮(2)下載需要的源程序包:目標(biāo)代碼工具包源碼binutils-2.13、編譯程序源碼gcc-3.2、函數(shù)庫(kù)源碼glibc-2.2.5、glibc-linuxthreads-2.2.5(3)建立交叉的目標(biāo)代碼工具包:(4)建立一個(gè)靜態(tài)的交叉編譯程序:(5)建立函數(shù)庫(kù):(6)配置交叉編譯程序使之支持C++語(yǔ)言:(7)刪除下述不再使用的目錄:13.5
GCC的優(yōu)化一.概述GCC的優(yōu)化用到了絕大多數(shù)與機(jī)器無(wú)關(guān)的編譯優(yōu)化技術(shù),如公共子表達(dá)式消除,常數(shù)合并等,它也利用了部分機(jī)器描述信息,進(jìn)行了一些常用的、與機(jī)器相關(guān)的優(yōu)化,如指令合并、指令調(diào)度等二.窺孔優(yōu)化(線性窺孔優(yōu)化)窺孔優(yōu)化方法是通過(guò)考查一小段目標(biāo)指令(窺孔)并把這些指令替換為更短更快的一段指令,從而提高目標(biāo)代碼的質(zhì)量.所謂孔:可以看成優(yōu)化對(duì)象中的一個(gè)小的活動(dòng)窗口,孔中的代碼根據(jù)優(yōu)化的需要可以連續(xù)也可以不連續(xù)窺孔優(yōu)化的一個(gè)特點(diǎn)是,優(yōu)化后所產(chǎn)生的結(jié)果可能會(huì)給后面的優(yōu)化提供進(jìn)一步的機(jī)會(huì)1.冗余存?。喝绻邢旅娴闹噶睿海?)STR0,A(2)LDR0,A2.不可達(dá)代碼:刪除不可達(dá)代碼。在無(wú)條件跳轉(zhuǎn)指令指令之后的無(wú)標(biāo)號(hào)指令應(yīng)該刪除。這種操作可以重復(fù),刪除一系列指令例如,出于調(diào)度目的,在一個(gè)大程序里可能會(huì)插入一些調(diào)試語(yǔ)句。這些調(diào)試語(yǔ)句只有在調(diào)試‘開(kāi)關(guān)’打開(kāi)時(shí)(即
debug為1)才執(zhí)行。用C語(yǔ)言寫(xiě)的源代碼如下:#definedebug0…if(debug){
打印調(diào)試信息
}翻譯為中間代碼可能是:ifdebug=1gotoL1gotoL2L1:打印輸出調(diào)試信息L2…經(jīng)過(guò)初步優(yōu)化,可能把它轉(zhuǎn)換為:ifdebug≠1gotoL2打印輸出調(diào)試信息L2:因此,上述程序相當(dāng)于:gotoL2打印調(diào)試信息L2:3.控制流優(yōu)化:這種不必要的連續(xù)跳轉(zhuǎn)可以在窺孔優(yōu)化時(shí)刪除。例如:gotoL1…L1:gotoL2可以轉(zhuǎn)換為:gotoL2…L1:gotoL2若沒(méi)有別的語(yǔ)句跳轉(zhuǎn)到L1,且L1:gotoL2緊跟在一個(gè)無(wú)條件語(yǔ)句之后,就可以將其刪除。4.強(qiáng)度削弱:有的指令可以用花費(fèi)時(shí)間更短的指令替代。例如,假設(shè)shiftleft為左移操作指令,則:MUL
R,#2可替換為shiftleftR,#1MUL
R,#4可替換為shiftleftR,#25.刪除無(wú)用操作:有些指令的執(zhí)行不會(huì)改變數(shù)據(jù)的結(jié)果,這種操作可以看成無(wú)用操作。例如:ADD
R,#0MUL
R,#1三.基于機(jī)器描述的窺孔優(yōu)化在GCC機(jī)器描述中定義窺孔優(yōu)化的模塊,這樣可以大大減少優(yōu)化的工作量,且修改過(guò)程更加直觀,并能達(dá)到良好的優(yōu)化效果。窺孔優(yōu)化模板的一般形式如下:(define_peephole[insn-pattern-1insn-pattern-2
…]
“condition”“template”“optionalinsn_attributer”)其中,insn-pattern等表示要匹配的相鄰指令的指令樣板,當(dāng)一個(gè)指令序列與其匹配時(shí)將對(duì)condition進(jìn)行檢查,如果
condition成立則對(duì)這一系列指令進(jìn)行窺孔優(yōu)化。template控制已歸并指令的輸出。以兩個(gè)(黑白)圖像進(jìn)行相加操作的函數(shù)為例,分別給出優(yōu)化前后所輸出的目標(biāo)代碼。兩個(gè)圖像相加函數(shù)的C源程序?yàn)椋簐oidImgAdd(unsignedchar*Srcl,unsignedchar*Src2,unsignedchar*Dest,intlength){inti;for(i=0;i<length/8;i=i+8){Dest[i]=Srcl[i]+Src2[i];Dest[i+1]=Srcl[i+1]+Src2[i+1];
Dest[i+2]=Srcl[i+2]+Src2[i+2];
Dest[i+3]=Srcl[i+3]+Src2[i+3];
Dest[i+4]=Srcl[i+4]+Src2[i+4];
Dest[i+5]=Srcl[i+5]+Src2[i+5];
Dest[i+6]=Srcl[i+6]+Src2[i+6];
Dest[i+7]=Srcl[i+7]+Src2[i+7];}}多媒體指令的窺孔優(yōu)化思想:將連續(xù)的四次lb、lb、addu、
sb操作用一次lw、lw、padd、sw來(lái)替代,當(dāng)然需要首先判斷對(duì)應(yīng)的四次lb操作以及四次sw操作的內(nèi)存空間是連續(xù)的例如,為實(shí)現(xiàn)并行加指令padd,在mips.md文件中添加的窺孔優(yōu)化模板見(jiàn)網(wǎng)址窺孔優(yōu)化的模板應(yīng)該滿足以下要求:①每一次進(jìn)行加法操作的
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年互聯(lián)網(wǎng)電路租賃合同(三篇)
- 2025年個(gè)人租房合租合同常用版(4篇)
- 保齡球館裝修合同范本
- 主題餐廳裝修免租合同
- 專賣店吊頂裝修合同
- 機(jī)場(chǎng)建設(shè)渣土運(yùn)輸協(xié)議范本
- 臨時(shí)承接合同范本
- 偽造員工勞動(dòng)合同范本案例
- 基金托管合同范例
- JJG 921-2021環(huán)境振動(dòng)分析儀
- GB/T 308.1-2013滾動(dòng)軸承球第1部分:鋼球
- 中藥炮制學(xué)-第五、六章
- 中國(guó)風(fēng)軍令狀誓師大會(huì)PPT模板
- 小兒高熱驚厥精品課件
- 2023機(jī)械工程師考試試題及答案
- 2022年電拖實(shí)驗(yàn)報(bào)告伍宏淳
- 豐田汽車戰(zhàn)略規(guī)劃與戰(zhàn)略管理體系研究(2021)
- 公共政策學(xué)(第三版)-課件
- 冷卻塔是利用水和空氣的接觸
- 我的家鄉(xiāng)--安徽亳州.PPT
評(píng)論
0/150
提交評(píng)論