[發明專利]一種生成快速出棧的匯編代碼的編譯方法及編譯器有效
| 申請號: | 201410490577.5 | 申請日: | 2014-09-23 |
| 公開(公告)號: | CN104216754B | 公開(公告)日: | 2017-05-17 |
| 發明(設計)人: | 蘭光洋;王忠海;肖佐楠;鄭茳 | 申請(專利權)人: | 天津國芯科技有限公司 |
| 主分類號: | G06F9/45 | 分類號: | G06F9/45 |
| 代理公司: | 天津濱??凭曋R產權代理有限公司12211 | 代理人: | 楊慧玲 |
| 地址: | 300457 天津市濱海新區開發*** | 國省代碼: | 天津;12 |
| 權利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關鍵詞: | 一種 生成 快速 匯編 代碼 編譯 方法 編譯器 | ||
技術領域
本發明涉及處理器體系結構和編譯器開發技術領域,尤其是涉及一種生成快速出棧的匯編代碼的編譯方法及編譯器。
背景技術
隨著處理器技術和現代工藝的進步,處理器的運算速度越來越快,性能越來越強,同時人們對處理器的要求也越來越高。但僅僅依靠工藝的發展來滿足人們日益增長對處理器性能的要求是遠遠不夠的。因此,提高軟件編寫效率并最終減少有效代碼長度變得越來越重要。
在軟件應用中,對堆棧的使用是很頻繁的,比如函數中的參數值的保存,局部變量的保存等。現有技術中堆棧的出棧效率不高,極大的影響到了處理器的性能。
例如,在含有堆棧指針的情況下,編譯器針對C*core架構編譯出的出棧指令如下:
從上述C*core出棧操作的編譯過程中的虛線框中內容可以看出,編譯器在取出r4的堆棧指針后(r6中的值),根據C*core對堆棧指針的要求, 將r6的最低3位置成0(若低3位有值則此地址增加1),這樣的話就增加了出棧時所需要的指令條數,降低了出棧速度。
發明內容
本發明要解決的問題是提供一種生成快速出棧的匯編代碼的編譯方法及編譯器,尤其適用于32位嵌入式CPU--C*core的處理器架構及其指令集。
為解決上述技術問題,本發明采用的技術方案是:
一種生成快速出棧的匯編代碼的編譯方法,包含:
在對源程序進行預處理生成中間代碼后,針對中間代碼的堆棧操作,判斷當前程序是否有出棧操作,并進行分類標記,同時提取出棧地址并進行保存;
若無出棧操作,輸出匯編指令;
若有出棧操作,根據標記對其出棧地址進行分析,判斷當前出棧地址是否符合C*core所規定的堆棧地址要求;
若符合,則以此出棧地址作為最終的出棧地址,輸出匯編指令;
否則將出棧地址改寫成為符合C*core對堆棧地址要求的出棧地址,輸出匯編指令。
進一步的,將出棧地址改寫成為符合C*core對堆棧地址要求的出棧地址的方法是針對出棧地址的屬性:字、半字或者字節來計算出其真正所需要的堆棧地址的基地址,并將其值賦給原來的地址寄存器。
一種生成快速出棧的匯編代碼的編譯器,包括用于對源程序進行預處理并生成中間代碼的前端處理模塊和最終生成匯編代碼的后端處理模塊;所述后端處理模塊增加:
出棧檢測模塊,用來在前端處理模塊生成中間代碼后,判斷當前程序是否有出棧操作;
出棧地址處理單元,用來判斷當前出棧地址是否符合C*core所規定的 出棧地址要求;若符合,則以此地址作為最終的出棧地址直接輸出,否則將堆棧地址通過地址計算單元改寫成為符合C*core對堆棧地址要求的堆棧地址。
本發明具有的優點和積極效果是:
經過本發明編譯方法和編譯器編譯出來的出棧指令均要比以前編譯器編譯出來的匯編指令中出棧指令要少,而在程序的運行過程中,壓棧出棧是經常使用的指令;因此,處理器所要執行的有效指令的條數要比以前少很多,從而提高了處理器的處理速度和性能。
附圖說明
圖1是本發明的編譯方法的流程示意圖;
圖2是本發明的編譯器的出棧檢測模塊的處理流程圖;
圖3是本發明的編譯器的出棧地址處理單元的處理流程圖。
具體實施方式
本發明的實施例是針對32位嵌入式CPU--C*core的處理器架構及其指令集的特點提出的一種生成快速出棧的匯編代碼的編譯方法和編譯器,主要是針對簡單的壓棧出棧操作,不涉及到復雜的堆棧指針操作。下面結合附圖對本發明的具體實施做詳細說明。
本發明一種生成快速出棧的匯編代碼的編譯方法,如圖1所示包含:
在對源程序進行預處理生成中間代碼后,針對中間代碼的堆棧操作,判斷當前程序是否有出棧操作,并進行分類標記,同時提取出棧地址并進行保存;
本發明對上述步驟的一具體實施過程為,根據C*core處理器對其堆棧的要求和其指令集特點對中間代碼中的堆棧操作進行屬性標記處理。例如某個函數中沒有壓棧出棧操作,則將這段代碼標記為NULL屬性;如果該函數中只有簡單的壓棧出棧操作(沒有堆棧指針),那么將其標記為PP_Simple 屬性;再如果,該函數擁有堆棧指針的利用則將其標記為PP_Pointer屬性等;提取其堆棧地址信息并依照一定的算法將堆棧出棧地址保存下來。
若無出棧操作,輸出匯編指令;
該專利技術資料僅供研究查看技術是否侵權等信息,商用須獲得專利權人授權。該專利全部權利屬于天津國芯科技有限公司,未經天津國芯科技有限公司許可,擅自商用是侵權行為。如果您想購買此專利、獲得商業授權和技術合作,請聯系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201410490577.5/2.html,轉載請聲明來源鉆瓜專利網。
- 上一篇:一種防磨牙套組件
- 下一篇:一種半主動懸架ECU控制器軟件在線升級系統與方法





