亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

基于向量中斷的編譯器的優(yōu)化方法

文檔序號:9396735閱讀:316來源:國知局
基于向量中斷的編譯器的優(yōu)化方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明創(chuàng)造屬于編譯器優(yōu)化領(lǐng)域,尤其是涉及一種基于向量中斷的編譯器的優(yōu)化方法。
【背景技術(shù)】
[0002]編譯器,是一種電腦程式,它將用某種高級編程語言寫成的源代碼(源語言),轉(zhuǎn)換成另一種編程語言(目標語言)。編譯器從結(jié)構(gòu)體上分為前段、中端和后端,前端主要是詞法分析、語法分析階段,前端生成的賦值樹作為輸入,提供給中端作為輸入,中端包括中間代碼生成和優(yōu)化中間代碼,中端生成的中間代碼作為輸出,提供給后端作為輸入,后端將中間代碼編譯成匯編代碼。
[0003]中斷是處理器響應(yīng)外設(shè)請求的最常用的方式。處理器響應(yīng)中斷,本質(zhì)上是執(zhí)行中斷服務(wù)函數(shù),由于處理器響應(yīng)中斷后需要繼續(xù)進行發(fā)生中斷時執(zhí)行的程序,就好像中斷沒有發(fā)生過一樣,所以處理器在執(zhí)行中斷服務(wù)函數(shù)之前需要保存中斷現(xiàn)場,在執(zhí)行中斷服務(wù)函數(shù)之后還原中斷現(xiàn)場。
[0004]向量中斷,外部中斷控制器通過單獨一條連接到處理器的數(shù)據(jù)總線,在進行中斷請求的同時告知處理器中斷服務(wù)函數(shù)的地址。
[0005]中斷響應(yīng)的一般流程為:
[0006](I)進入中斷
[0007](2)保存中斷現(xiàn)場
[0008](3)跳轉(zhuǎn)到中斷服務(wù)函數(shù)
[0009](4)執(zhí)行中斷服務(wù)函數(shù)
[0010](5)從中斷服務(wù)函數(shù)返回
[0011](6)還原中斷現(xiàn)場
[0012](7)返回中斷現(xiàn)場
[0013]這里“保存中斷現(xiàn)場”,保存所有軟件可訪問的寄存器,涉及大量store操作,“還原中斷現(xiàn)場”,還原所有軟件可訪問的寄存器,涉及大量load操作,這里并沒有考慮到中斷服務(wù)函數(shù)中是否用到;“跳轉(zhuǎn)到中斷服務(wù)函數(shù)”和“從中斷服務(wù)函數(shù)返回”涉及兩次跳轉(zhuǎn)操作。更關(guān)鍵的是執(zhí)行中斷服務(wù)函數(shù)時,作為函數(shù),編譯器會將其使用的需要保存的寄存器進行保存,這點與“保存中斷現(xiàn)場”是重復(fù)保存操作,中斷響應(yīng)的一般流程無法充分體現(xiàn)向量中斷的優(yōu)勢。

【發(fā)明內(nèi)容】

[0014]有鑒于此,本發(fā)明創(chuàng)造旨在提出一種基于向量中斷的編譯器的優(yōu)化方法,以實現(xiàn)精簡保存中斷現(xiàn)場、還原中斷現(xiàn)場過程中涉及的load、store次數(shù)同時中斷流程上的簡化也減少了跳轉(zhuǎn)的次數(shù),從而提高處理器中斷響應(yīng)的速度。
[0015]為達到上述目的,本發(fā)明創(chuàng)造的技術(shù)方案是這樣實現(xiàn)的:
[0016]基于向量中斷的編譯器的優(yōu)化方法,包括如下步驟:
[0017](I)通過預(yù)處理指令完成對向量中斷函數(shù)的定義;
[0018](2)編譯器在預(yù)編譯階段識別向量中斷函數(shù),分析中斷函數(shù)內(nèi)通用寄存器的使用情況;
[0019](3)根據(jù)處理器種類和編程模型確定需要保存的通用寄存器,及通用寄存器保存的順序;
[0020](4)根據(jù)處理器種類、編程模型和中斷服務(wù)函數(shù)的內(nèi)容確定需要保存的中斷現(xiàn)場,特別是特殊寄存器;
[0021](5)根據(jù)保存寄存器的順序還原寄存器,還原中斷現(xiàn)場;
[0022](6)中斷服務(wù)函數(shù)返回,同時也是中斷現(xiàn)場返回。
[0023]進一步的,所述步驟(I)中采用關(guān)鍵字定義向量中斷函數(shù),便于編譯器前端解析,所述關(guān)鍵字包括#pragma、—attribute—。
[0024]進一步的,所述步驟(2)中,編譯器前端在預(yù)編譯階段通過詞法分析、句法分析識別向量中斷函數(shù),通過預(yù)編譯得到的信息指導(dǎo)后續(xù)的寄存器分配過程;如果中斷服務(wù)函數(shù)使用這些寄存器,在中斷現(xiàn)場保存時進行保存,否則不必保存。
[0025]進一步的,所述步驟(3)中,保存通用寄存器遵循以下原則:
[0026](al)參數(shù)寄存器,用于函數(shù)調(diào)用時傳遞參數(shù)使用,根據(jù)編譯器分析結(jié)果確定寄存器是否保存,寄存器保存無順序要求,寄存器保存和還原順序?qū)?yīng);
[0027](a2)固定寄存器,根據(jù)編譯器分析結(jié)果確定寄存器是否保存,寄存器保存無順序要求,寄存器保存和還原順序?qū)?yīng);
[0028](a3)可跨越函數(shù)的寄存器,根據(jù)函數(shù)繁雜度和編程模型里面規(guī)定的寄存器調(diào)用的順序,編譯器選擇需要保存和還原的寄存器,寄存器保存和還原的順序?qū)?yīng)。
[0029]進一步的,所述步驟¢)中編譯器將中斷服務(wù)函數(shù)結(jié)尾的指令編譯為中斷返回指令。
[0030]進一步的,所述的步驟(3)、步驟(4)分析中斷服務(wù)函數(shù)中,對其子函數(shù)進行分析,分析的原則如下:
[0031](bl)編譯器需要分析中斷服務(wù)函數(shù)及其子函數(shù)中寄存器使用情況,直到分析的函數(shù)不再有子函數(shù)為止;
[0032](b2)對于中斷服務(wù)函數(shù)及其子函數(shù),均分析參數(shù)通用寄存器、固定通用寄存器以及高級語言會影響的特殊寄存器;
[0033](b3)只分析中斷服務(wù)函數(shù)中可跨越函數(shù)的寄存器的使用情況,中斷服務(wù)函數(shù)的子函數(shù)中不用分析可跨越函數(shù)的寄存器的使用情況;
[0034](b4)在中斷函數(shù)定義時指定的特殊寄存器需要保存
[0035]相對于現(xiàn)有技術(shù),本發(fā)明創(chuàng)造所述的基于向量中斷的編譯器的優(yōu)化方法具有以下優(yōu)勢:本發(fā)明將中斷現(xiàn)場保存在中斷服務(wù)函數(shù)內(nèi)進行,考慮到中斷服務(wù)函數(shù)使用的通用寄存器的狀況,減少了 load/store操作,簡化了流程,減少了跳轉(zhuǎn)到中斷服務(wù)函數(shù)和從中斷服務(wù)函數(shù)返回涉及到兩次跳轉(zhuǎn)操作,從而加快中斷函數(shù)執(zhí)行效率,提高處理器中斷響應(yīng)的速度。
【附圖說明】
[0036]構(gòu)成本發(fā)明創(chuàng)造的一部分的附圖用來提供對本發(fā)明創(chuàng)造的進一步理解,本發(fā)明創(chuàng)造的示意性實施例及其說明用于解釋本發(fā)明創(chuàng)造,并不構(gòu)成對本發(fā)明創(chuàng)造的不當限定。在附圖中:
[0037]圖1為示例處理器編程模型寄存器示例;
[0038]圖2為編譯器對中斷服務(wù)函數(shù)寄存器分析流程圖;
[0039]圖3為分析寄存器使用情況時寄存器初始狀態(tài)表;
[0040]圖4為分析寄存器使用情況時用到的寄存器狀態(tài)表;
[0041]圖5為對于示例1,使用傳統(tǒng)編譯器中斷服務(wù)程序編譯出來的匯編程序示意圖;
[0042]圖6為對于示例1,使用優(yōu)化的編譯器中斷服務(wù)程序編譯出來的匯編程序示意圖;
[0043]圖7為對于示例2,使用傳統(tǒng)編譯器中斷服務(wù)程序編譯出來的匯編程序示意圖;
[0044]圖8為對于示例2,使用優(yōu)化的編譯器中斷服務(wù)程序編譯出來的匯編程序示意圖。
【具體實施方式】
[0045]需要說明的是,在不沖突的情況下,本發(fā)明創(chuàng)造中的實施例及實施例中的特征可以相互組合。
[0046]下面將參考附圖并結(jié)合實施例來詳細說明本發(fā)明創(chuàng)造。
[0047]如圖1所述的處理器編程模型寄存器,設(shè)處理器沒有硬件保存中斷現(xiàn)場的機制,基于中斷的編譯器優(yōu)化方法【具體實施方式】如下所示:
[0048]在執(zhí)行中斷服務(wù)函數(shù)時,根據(jù)編譯器對寄存器是否保存的問題,可將寄存器分為三類:
[0049](I)所有通用寄存器,編譯器根據(jù)分析中斷服務(wù)函數(shù)內(nèi)寄存器分配,可知中斷服務(wù)函數(shù)中使用的通用寄存器以及需要保存的通用寄存器。
[0050](2)高級語言會影響的特殊寄存器,編譯器根據(jù)分析中斷服務(wù)函數(shù)內(nèi)的指令,可知中斷服務(wù)函數(shù)會影響哪些特殊寄存器,例如條件寄存器(cr),如果存在條件指令,則會影響條件寄存器的值。
[0051](3)只有匯編語言操作的特殊寄存器,也就是程序員在中斷服務(wù)函數(shù)中會對這些特殊寄存器通過匯編形式操作。這樣,編譯器不知道中斷服務(wù)函數(shù)是否會影響這些寄存器,而程序員應(yīng)該知道中斷服務(wù)函數(shù)是否會影響哪些特殊寄存器,因此,通過預(yù)處理指令定義中斷服務(wù)函數(shù)時,應(yīng)該為此類寄存器提供控制接口,這樣寄存器例如狀態(tài)寄存器(msr),處理器控制寄存器(ccr)。
[0052]步驟(I):需要通過預(yù)處理指令完成對向量中斷函數(shù)的定義,可以采用如下形式定義向量中斷函數(shù):
[0053]—attribute—((interrupt ( “msr”)))void I SR (void);
[0054]ISR為向量中斷服務(wù)函數(shù),并且在中斷服務(wù)函數(shù)中會使用狀態(tài)寄存器(msr)。
[0055]步驟(2):編譯器在預(yù)編譯階段識別向量中斷函數(shù),分析中斷函數(shù)內(nèi)通用寄存器的使用情況。
[0056]步驟(3):編譯器根據(jù)處理器種類和編程模型確定需要
當前第1頁1 2 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1