級(jí)別說(shuō)明0常數(shù)合并:編譯器預(yù)先計(jì)算結(jié)果,盡可能用常數(shù)代替表達(dá)式。包括運(yùn)行地址計(jì)算。
優(yōu)化簡(jiǎn)單訪問(wèn):編譯器優(yōu)化訪問(wèn)8051系統(tǒng)的內(nèi)部數(shù)據(jù)和位地址。
跳轉(zhuǎn)優(yōu)化:編譯器總是擴(kuò)展跳轉(zhuǎn)到最終目標(biāo),多級(jí)跳轉(zhuǎn)指令被刪除。
本文引用地址:http://cafeforensic.com/article/201611/321745.htm
1死代碼刪除:沒(méi)用的代碼段被刪除。
拒絕跳轉(zhuǎn):嚴(yán)密的檢查條件跳轉(zhuǎn),以確定是否可以倒置測(cè)試邏輯來(lái)改進(jìn)或刪除。
2數(shù)據(jù)覆蓋:適合靜態(tài)覆蓋的數(shù)據(jù)和位段被確定,并內(nèi)部標(biāo)識(shí)。BL51連接/定位器可以通
過(guò)全局?jǐn)?shù)據(jù)流分,選擇可被覆蓋的段。
3窺孔優(yōu)化:清除多余的MOV指令。這包括不必要的從存儲(chǔ)區(qū)加載和常數(shù)加載操作。當(dāng)存
儲(chǔ)空間或執(zhí)行時(shí)間可節(jié)省時(shí),用簡(jiǎn)單操作代替復(fù)雜操作。
4寄存器變量:如有可能,自動(dòng)變量和函數(shù)參數(shù)分配到寄存器上。為這些變量保留的存儲(chǔ)區(qū)就省略了。
優(yōu)化擴(kuò)展訪問(wèn):IDATA、XDATA、PDATA和CODE的變量直接包含在操作中。在多數(shù)時(shí)間沒(méi)
必要使用中間寄存器。
局部公共子表達(dá)式刪除:如果用一個(gè)表達(dá)式重復(fù)進(jìn)行相同的計(jì)算,則保存第一次計(jì)算
結(jié)果,后面有可能就用這結(jié)果。多余的計(jì)算就被刪除。
Case/Switch優(yōu)化:包含SWITCH和CASE的代碼優(yōu)化為跳轉(zhuǎn)表或跳轉(zhuǎn)隊(duì)列。
5全局公共子表達(dá)式刪除:一個(gè)函數(shù)內(nèi)相同的子表達(dá)式有可能就只計(jì)算一次。中間結(jié)果
保存在寄存器中,在一個(gè)新的計(jì)算中使用。
簡(jiǎn)單循環(huán)優(yōu)化:用一個(gè)常數(shù)填充存儲(chǔ)區(qū)的循環(huán)程序被修改和優(yōu)化。
6循環(huán)優(yōu)化:如果結(jié)果程序代碼更快和有效則程序?qū)ρh(huán)進(jìn)行優(yōu)化。
7擴(kuò)展索引訪問(wèn)優(yōu)化:適當(dāng)時(shí)對(duì)寄存器變量用DPTR。對(duì)指針和數(shù)組訪問(wèn)進(jìn)行執(zhí)行速度和代碼大小優(yōu)化。
8公共尾部合并:當(dāng)一個(gè)函數(shù)有多個(gè)調(diào)用,一些設(shè)置代碼可以復(fù)用,因此減少程序大小。
9公共塊子程序:檢測(cè)循環(huán)指令序列,并轉(zhuǎn)換成子程序。Cx51甚至重排代碼以得到更大的循環(huán)序列。
評(píng)論