• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    基于GCC的cmdsp2f01編譯工具移植開發(fā)

    2018-01-23 06:29:11張梅娟
    電子與封裝 2018年1期
    關(guān)鍵詞:編譯器套件寄存器

    張梅娟,張 榮,張 鉚,韋 祎

    (中國電子科技集團公司第五十八研究所,江蘇無錫 214072)

    1 引言

    編譯工具是指一組編譯套件,實現(xiàn)把某種編程語言編寫的代碼轉(zhuǎn)變成另一種計算機語言的功能。編譯技術(shù)是計算機領(lǐng)域的關(guān)鍵技術(shù)之一,隨計算機語言和處理器體系結(jié)構(gòu)的發(fā)展而發(fā)展,目前計算機系統(tǒng)高級語言已幾乎完全代替了匯編語言。常用的編譯工具包含了高級語言編譯器(C/C++等)、匯編器、鏈接器和其他二進制工具。

    高級語言編譯工具是一個大型系統(tǒng)軟件,開發(fā)難度較大,最早期的高級語言編譯工具共花費了18人/年的時間[1]。研究者們經(jīng)過幾十年的不懈努力,在編譯理論、技術(shù)和實驗上積累了豐富的成果[2,3,4]。隨著嵌入式系統(tǒng)的發(fā)展和高性能體系結(jié)構(gòu)的出現(xiàn),編譯工具的開發(fā)速度和質(zhì)量有了更高的要求,推動了可重定向編譯系統(tǒng)的研究,逐步將與高級語言相關(guān)的詞法語法分析模塊設(shè)計成可復用的前端,機器相關(guān)的部分被封裝起來,前端通過間接調(diào)用的方式與機器相關(guān)的部分發(fā)生關(guān)系。如圖1所示,針對不同處理器,只需要進行目標機器信息的描述(即編譯工具的移植),即可快速生成一套編譯工具。這大大減小了編譯工具的開發(fā)難度和開發(fā)時間。

    圖1 可重定向編譯系統(tǒng)

    可重定向編譯系統(tǒng)結(jié)構(gòu)定義良好,針對不同的后端,前端代碼基本上不用修改,做到了最大限度的代碼復用。但是前端只進行了一些通用的代碼優(yōu)化,沒有做與目標機相關(guān)的優(yōu)化,運行效率有一定的提升空間。

    GCC(GNU Compiler Collection,GNU 編譯器套件),是一套以GPL及LGPL許可證所發(fā)行的自由軟件,是可重定向編譯系統(tǒng)的代表,常被認為是跨平臺編譯工具移植的事實標準。該系統(tǒng)在所有平臺上都能使用同一個前端處理程序,產(chǎn)生相同的中間代碼,因此在不同平臺上,使用GCC系統(tǒng)移植編譯工具,不僅可以保證編譯工具的性能質(zhì)量,還能縮短開發(fā)周期[5]。但是嵌入式處理器體系結(jié)構(gòu)一般都不規(guī)則,對代碼質(zhì)量要求嚴格,必須對編譯系統(tǒng)的前端和后端進行針對性的優(yōu)化設(shè)計才能滿足要求,因此移植具有其特殊的難度和復雜性[6]。

    本文基于可重定向的GCC編譯系統(tǒng)的移植,成功構(gòu)建了cmdsp2f01處理器的編譯工具套件,經(jīng)測試驗證,編譯工具套件編譯功能正確。

    2 cmdsp2f01結(jié)構(gòu)

    編譯工具的移植,需要描述目標機器信息。cmdsp2f01是中國電科第58所開發(fā)的一款高性能DSP芯片,該芯片處理器采用超長指令字(VLIW)架構(gòu),支持單周期5條指令并行執(zhí)行,支持單指令多數(shù)據(jù)流(SIMD),使數(shù)據(jù)處理并行度更高,128 bit程序總線,雙256 bit數(shù)據(jù)總線,具備單精度浮點運算,支持16 bit、24 bit指令編碼。其內(nèi)部流水線支持7級,運算能力達12.8 GMACs。

    cmdsp2f01的DSP內(nèi)核架構(gòu)支持1字節(jié)、2字節(jié)和4字節(jié)數(shù)據(jù)格式,另支持32 bit單精度浮點數(shù)據(jù)格式和40 bit累加器值(MAC16時使用)。所有存儲在內(nèi)存的數(shù)據(jù)CPU都是字節(jié)尋址,字節(jié)順序固定為小端模式,即0字節(jié)是最低有效位字節(jié)。核指令基于32 bit虛擬和物理內(nèi)存尋址,指令和數(shù)據(jù)尋址可達4 GB尋址空間。尋址方式支持寄存器加立即數(shù)尋址。

    圖2 處理器架構(gòu)信息

    如圖2所示,cmdsp2f01 DSP除支持通用運算和存取指令外,還增加了專用定點矢量指令。其中,通用指令包含Move指令、加減指令、乘加指令、比較指令、分支指令、地址運算指令和存取指令。

    3 移植設(shè)計

    本文所述的編譯工具是指一組編譯套件,含C編譯器和匯編器、鏈接器等二進制工具集。移植的主要任務(wù)是目標機器信息的描述。GCC系統(tǒng)中,機器信息的描述主要采用寄存器轉(zhuǎn)換語言RTL(Register Transfer Language)語言實現(xiàn),輔助以C接口函數(shù)(API)的設(shè)計。RTL中間表作為GCC C編譯器后端的核心內(nèi)容,將后端中可重用的部分剝離出來,再通過相應(yīng)的接口為不同的目標機器定義各自的映射規(guī)則,這種方式極大地提高了GCC的適應(yīng)性,也增強了它的可維護性、可擴展性以及可移植性[7]。

    本文的移植是結(jié)合cmdsp2f01處理器特點,對機器描述進行設(shè)計和實現(xiàn),構(gòu)建一套新的編譯工具。編譯工具套件基本功能如下:

    (1)C編譯器(C-Compiler),將C語言程序代碼編譯成cmdsp2f01處理器對應(yīng)的匯編代碼,編譯器包括外殼程序(shell program)、優(yōu)化器和預處理器;

    (2)匯編器(Assembler),把匯編語言源文件轉(zhuǎn)換成基于公用目標文件(ELF)的機器目標文件,也就是常用的*.out文件;

    (3)鏈接器(Linker),把多個目標文件組合成單個可執(zhí)行目標模塊,除了能夠創(chuàng)建可執(zhí)行文件外,還可以調(diào)整外部符號的引用,鏈接器輸入的是可重定位的目標文件和目標文件庫;

    (4)歸檔器(archiver),允許用戶將一組文件收集到一個歸檔文件中,也叫歸檔庫,其最常見的用法是創(chuàng)建目標文件庫,也可以通過刪除、替換、提取或添加文件操作來調(diào)整庫;

    (5)Objdump,用來查看目標程序中的段信息和調(diào)試信息,也可以用來對目標程序進行反匯編;

    (6)Objcopy,用來拷貝或是翻譯目標文件;

    (7)Nm,列出目標文件、庫或是可執(zhí)行文件中的代碼符號及代碼符號所對應(yīng)的程序開始地址;

    (8)Size,顯示程序文件的段信息。

    3.1 移植思路

    編譯工具包含C/C++編譯器及二進制工具集(匯編、鏈接等工具),需要分別基于兩套代碼系統(tǒng)進行移植。GCC是高級語言編譯器相關(guān)的工具代碼,移植后可生成預處理器、高級語言編譯器等工具,binutils是二進制工具集代碼,移植后可生成匯編器、鏈接器、反匯編器等二進制工具。

    通常在編譯過程中所使用的GCC是一個驅(qū)動程序,在實際執(zhí)行編譯的過程中將根據(jù)輸入的命令參數(shù),調(diào)用不同的程序(包括預處理器、編譯器、匯編器以及鏈接器等)進行分析處理,實現(xiàn)對整個編譯過程的控制。

    編譯工具移植實現(xiàn)步驟如下:

    (1)移植環(huán)境準備(源代碼獲取、移植環(huán)境選擇);

    (2)分析處理器結(jié)構(gòu)及指令特點,進行目標機信息的描述;

    (3)構(gòu)建編譯工具;

    (4)測試驗證編譯工具。

    3.2 移植實現(xiàn)過程

    GCC幾乎可以運行在所有操作系統(tǒng)平臺上,如GNU/Linux、其他自由軟件平臺(BSD系列)等。通過Cygwin(或MinGW)工具,GCC也可以運行在MS DOS、MS Windows多個版本的平臺上。本文移植工作主機系統(tǒng)選擇Windows平臺,采用Cygwin作為虛擬環(huán)境。必要的源代碼包括gcc-5.2.0、二進制工具源代碼binutils-2.23.1。代碼閱讀使用Source Insight3.5工具。

    3.2.1 編譯器代碼移植

    代碼移植就是在GCC框架內(nèi)添加目標機器信息的描述,在./gcc-5.2.0/gcc/路徑中創(chuàng)建target文件夾,并在該文件夾中創(chuàng)建機器描述文件(如target.c、target.h、target.md等文件)。target.h定義大小端、指令類型、數(shù)據(jù)類型及字長、內(nèi)存邊界及對齊、尋址模式類型、標準寄存器的分配等信息。

    cmdsp2f01處理器有16個32位通用地址寄存器,分別為a0~a15。設(shè)計 a1用作棧指針sp,a2~a7用于函數(shù)調(diào)用處理。處理器寄存器信息定義如圖3所示。

    target.c文件中定義一些API接口函數(shù),供target.md描述指令時使用。如圖4所示,在target.c文件中定義有符號8位立即數(shù)。

    在target.md中描述加法操作數(shù)時引用該接口函數(shù),加法操作數(shù)詳細描述方法如圖5所示。

    target.md文件中,使用RTL語言對機器指令特點進行描述,描述語句遵循RTL語言規(guī)則。處理器支持5種加法類型指令,16位寄存器尋址加法指令add.n,16位立即數(shù)尋址加法指令,24位寄存器尋址加法指令add,24位立即數(shù)尋址加法指令addi,24位立即數(shù)尋址加法指令addmi,立即數(shù)尋址時左移8位。加法指令的描述如圖6所示。

    圖3 target.h文件內(nèi)容摘要

    圖4 8位立即數(shù)API定義

    圖5 加法操作數(shù)定義

    圖6 加法指令描述

    3.2.2 編譯器構(gòu)建過程

    gcc-5.2.0版本的編譯需要mpc的支持,而mpc又依賴于gmp和mpfr庫,因此需要從官網(wǎng)上下載源代碼mpc-0.8.1、gmp-4.3.2、mpfr-2.4.2。分別安裝3個庫,由于庫之間有依賴關(guān)系,庫的安裝有先后順序,安裝順序為gmp/mpfr/mpc。3個庫安裝在默認庫的路徑下(./usr/lib)。

    GCC構(gòu)建時,按照configure/make的步驟,詳細步驟如下:

    構(gòu)建好的工具在路徑./usr/local/bin下。

    3.2.3 二進制代碼構(gòu)建

    在../Binutils-2.23.1/include/路徑下,創(chuàng)建文件target-isa.h進行處理器架構(gòu)宏定義。在../Binutils-2.23.1/gas/config路徑下,創(chuàng)建target.c和target.h指令集描述文件,實現(xiàn)對指令集的映射。構(gòu)建過程與GCC構(gòu)建過程類似,配置選項相對簡單很多。

    3.3 應(yīng)用驗證

    編譯工具本身結(jié)構(gòu)復雜,進行全面的測試比較困難。編譯工具的測試與其他類型軟件的測試一樣,同樣分為黑盒測試與白盒測試。在實際工程應(yīng)用中,通常以黑盒測試為主,以白盒測試為輔[8]。黑盒測試具體是提供測試用例,將產(chǎn)生的結(jié)果與預期結(jié)果進行比較,測試用例的設(shè)計和選擇尤為重要。為了避免測試用例受到開發(fā)人員經(jīng)驗、偏好等因素的影響,本文選擇處理器性能評價標準程序為測試用例,對本文構(gòu)建的編譯工具進行測試驗證。黑盒測試流程如圖7所示。

    表1 標準benchmark測試程序

    測試程序執(zhí)行如圖8所示的自定義makefile文件后,輸出編譯中間結(jié)果及最終可執(zhí)行二進制文件。使用移植后的gdb加載運行后,執(zhí)行結(jié)果與VS2008下編譯程序執(zhí)行的結(jié)果比較,結(jié)果正確無誤。

    白盒測試,C語言編譯器輸出匯編代碼,編寫簡單的C源代碼如圖9 a.c文件,執(zhí)行taret-gcc5.2.0.exe-S a.c-o a.S命令后,輸出相應(yīng)匯編代碼,如圖9所示。加法操作被翻譯為16位寄存器尋址的加法指令add.n。常量數(shù)據(jù)放入特定的數(shù)據(jù)段.literal,每個變量定義了地址標號,便于立即尋址。

    圖7 黑盒測試流程

    圖8 自定義makefile文件

    圖9 C語言編譯結(jié)果

    4 結(jié)束語

    本文基于GCC,針對特定目標處理器實現(xiàn)了編譯工具的移植,全面描述了編譯工具移植的實施流程,針對目標處理器架構(gòu)特點,設(shè)計了機器描述文件內(nèi)容,成功構(gòu)建了特定處理器的編譯工具套件,并對工具套件進行了功能驗證。本文描述的技術(shù)同樣可用于其他處理器架構(gòu)編譯工具的移植開發(fā),可節(jié)省開發(fā)調(diào)試時間。

    [1]Backus,J W,R J Beeber,S Best,et al.The Fortran automatic coding system[C].Western Joint Computer Conference,1957:188-198.

    [2]Appel A W,Palsberg J.Modern Compiler Implementation in Java[M].Cambridge University Press,second edition,2002.

    [3]Aho A V,Sethi R,Ullman JD.Compilers Principles,Techniques,and Tools[M].Person Education,1986.

    [4]Muchnick S S.Advanced Compiler Design and Implementation[M].San Francisco,California:Morgan Kaufmann,1997.

    [5]Wang Xiaowei,Wang Kuixing,Yang Quansheng.Research and DevelopmentofCompilerBased on GCC[C].CSIE 2011,LNEE 126:809-814.

    [6]Rainer Leupers,Peter Marwedel.Retargetable compiler technology for embeded systems,tools and applications[M].Kluwer Academic Publishers,October 2001.

    [7]石博慧,陳英.GCC代碼優(yōu)化技術(shù)研究[J].微機發(fā)展,2004(8):67-70.

    [8]陳慈勇.基于GCC的交叉編譯器移植開發(fā)及其測試方案的設(shè)計研究[D].廈門,2011:67.

    猜你喜歡
    編譯器套件寄存器
    基于維修費用的關(guān)鍵部套件分析
    Lite寄存器模型的設(shè)計與實現(xiàn)
    “龍吟套件”創(chuàng)作感悟
    山東陶瓷(2020年5期)2020-03-19 01:35:36
    基于相異編譯器的安全計算機平臺交叉編譯環(huán)境設(shè)計
    分簇結(jié)構(gòu)向量寄存器分配策略研究*
    工業(yè)照明超頻三天棚燈套件改造工程
    中國照明(2016年5期)2016-06-15 20:30:13
    CSRmesh開發(fā)套件加速物聯(lián)網(wǎng)產(chǎn)品開發(fā)
    通用NC代碼編譯器的設(shè)計與實現(xiàn)
    高速數(shù)模轉(zhuǎn)換器AD9779/AD9788的應(yīng)用
    一種可重構(gòu)線性反饋移位寄存器設(shè)計
    高邑县| 莆田市| 会昌县| 定兴县| 兴宁市| 若羌县| 六盘水市| 盐边县| 合作市| 彩票| 永城市| 容城县| 松阳县| 德昌县| 千阳县| 襄汾县| 团风县| 阳朔县| 邵阳市| 永修县| 华蓥市| 若尔盖县| 特克斯县| 奉新县| 磐安县| 定日县| 陵川县| 新兴县| 永安市| 大邑县| 齐河县| 济源市| 嘉禾县| 海兴县| 行唐县| 宝坻区| 建昌县| 巴彦县| 资溪县| 沙河市| 神农架林区|