www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁 > 嵌入式 > 嵌入式教程
[導(dǎo)讀]如何在32個(gè)處理器中編輯并且翻譯64固定的點(diǎn)進(jìn)位計(jì)算

摘要:介紹嵌式32位CPU在編譯器中解決64位運(yùn)算的方法,并列舉一個(gè)加法運(yùn)算的例子,給出可供參考的指令模板。包括32位RISC體系嵌入式CPU層次結(jié)構(gòu)和編譯器后端結(jié)構(gòu)。

    關(guān)鍵詞:RTL 指令模板 編譯優(yōu)化

1 概述

在信息化飛速發(fā)展的今天,計(jì)算機(jī)已成為人們學(xué)習(xí)和工作不可缺少的工具,我國業(yè)已取得了電腦生產(chǎn)大國的地位;但是,作為計(jì)算機(jī)的核心——CPU的設(shè)計(jì)與制造,卻成了幾代計(jì)算機(jī)工作者的未了習(xí)愿,也給國家的安全帶來了隱憂。順應(yīng)潮流,中芯微系統(tǒng)公司于2001年推出了國內(nèi)第一顆實(shí)用化的32位CPU(方舟一號),主頻達(dá)到166MHz。下一代方舟CPU將采用0.18μm工藝,超流水結(jié)構(gòu),主頻能達(dá)到600MHz以上,在嵌入式CPU領(lǐng)域走到國際前列。

傳統(tǒng)的32位計(jì)算機(jī)處理64位運(yùn)算通常是設(shè)計(jì)具體的邏輯電路實(shí)現(xiàn)。隨著SoC(System on Chip)的出現(xiàn),芯片上集成各種功能部件越來越多,特別對于嵌入式系統(tǒng),片上能利用的空間就列加有限,這也要求將部分功能用軟件來實(shí)現(xiàn)。對于64位長字運(yùn)算軟件實(shí)現(xiàn)的方法通常有兩種:一是設(shè)計(jì)系統(tǒng)軟件供操作系統(tǒng)內(nèi)核調(diào)用;二是在相關(guān)的編譯器中設(shè)計(jì)指令模板來解決。前者執(zhí)行效率高,但每使用一次就要編譯一次;后者只需編譯一次,總的效率要高于前者。因此,實(shí)際采用在編譯器中設(shè)計(jì)指令模板予以解決。

2 32位RISC體系嵌入式CPU層次結(jié)構(gòu)描述

圖1是一個(gè)集成了DSP(數(shù)字信號處理器)嵌入式CPU的層次圖。從圖1可看到,編譯器在整個(gè)CPU結(jié)構(gòu)中處于ASIC硬件電路之下和操作系統(tǒng)之上,擔(dān)負(fù)著將高級的、抽象的表達(dá)式轉(zhuǎn)化為相對低級的表達(dá)式,最終生成系統(tǒng)指令集。

3 CPU編譯器后端結(jié)構(gòu)

CPU編譯器分為前端和后端:前端主要完成詞法/語法分析并生成語法樹,這里不再論述;后端是編譯的主體部分,它將語法樹轉(zhuǎn)換成不間語言,在此不間語言基礎(chǔ)上進(jìn)行各種編譯優(yōu)化,最終生成匯編指令代碼。編譯后端在進(jìn)行優(yōu)化的過程中要跟具體的目標(biāo)機(jī)的機(jī)器描述文件多次匹配,生成RTL語言(Register Transfer Language)—GNU CC的中間語言。

機(jī)器描述文件由各種與目標(biāo)機(jī)有關(guān)的指令模板、功能模板、C語言形式的預(yù)處理函數(shù)等構(gòu)成。本文涉及到的64位運(yùn)算就是由RTL和指令模板多次匹配后生成匯編指令來解決的,過程如圖2所示。

限于篇幅,這里僅舉64位加法運(yùn)算的部分例子,其它運(yùn)算與此類似。

4 64位加法運(yùn)算指令板

① RTL識別指令模板,第一次匹配。

(define_insn “adddi3”)

[(set(match_operand:DI 0 "register_operand" "=r")

(plus:DI (match_operand:DI 1“register_operand”“0”)

(match_operand:DI 2 "register_operand"“r”)))

(clobber(reg:SI 6))]//6號寄存器作進(jìn)位使用

"")

② 將64位加法分解成高32位和低32位運(yùn)算,第二次匹配。

(define_split

[(set(match_operand:DI 0 "register_operand"“=r”)

(plus:DI (match_operand:DI 1“register_operand”“0”)

(match_operand:DI 2 “register_operand”“r”)))

(clobber(reg:SI 6))]

"reload_complete"

“{

[(const_int 0)] //寄存器使用前清零

rtx low[3],high[3]; //rtx為一種處理表達(dá)式的數(shù)據(jù)類型

low[0]=gen_lowpart(Simode,operands[0]);

low[1]=gen_lowpart(Simode,operands[1]);

low[2]=gen_lowpart(Simode,operands[2]);

high[0]=gen_rtx(REG,Simode,REGNO(operands[0]-1);

high[1]=gen_rtx(REG,Simode,REGNO(operands[1]-1);

high[2]=gen_rtx(REG,Simode,REGNO(operands[2]-1);

//由于方舟CPU地址存儲(chǔ)方式采用的是Big-Endian,即字節(jié)中的最高有效位具有最低序號,所以高位硬寄存器號要減1。

emit_insn(gen_addsi3_set_carry(low[0],low[1],low[2])) //低32位加并設(shè)置進(jìn)位

emit_insn(gen_addsi3_use_carry(high[0],high[1],high[2])); //高32位加并處理進(jìn)位

DONE;

}

③ 處理低32位加。

(define_insn "addsi_set_carry"

[(set(match_operand:SI 0 (match_operand:SI1 "register_operand" "r")

(match_operand:SI 2

"register_operand"“r”))) (clobber(reg:SI6))] //以下判斷是否有進(jìn)位。有,則6號寄存器置1(set(reg:SI6)

(itu:SI(plus:SI(match_dup 1)match_dup 2))(match_dup 1)))]

""

"add %0,%1,%2" //生成低32位匯編模板

④處理高32位加。

(define_insn "addi3_use_carry"

(define_insn "adddi3_use_carry"

[(set(match_operand:SI 0 "register_operand"“=r”)

(plus:SI(plus:SI(match_operand:SI 1 "register_operand" "r"))

(reg:SI 6)))

(clobber(reg:SI 6))]

“”

"add%0,%1,%2;add %0,%0,r6" //生成高32位帶進(jìn)位加匯編模板

)

在機(jī)器描述文件中,DI為64位機(jī)器方式,SI為32位方式。該文件由機(jī)器描述處理程序進(jìn)行格式轉(zhuǎn)換,它將調(diào)用編譯內(nèi)部一套專門的函數(shù)和數(shù)據(jù)結(jié)構(gòu)作為接口,生成gen_開頭的預(yù)處理函數(shù)對指令模板作進(jìn)一步的處理,再生成由insn_開頭的函數(shù)對模板作匹配后生成匯編代碼。

結(jié)語

在方舟二號CPU上測試的結(jié)果達(dá)到了64運(yùn)算的要求,相關(guān)的指令代碼如下:

……

132 r18,[r15,4]

132 r19,[r15,8]

add r16,r16,r18

add r17,r17,r19

add r17,r17,r6

……

用SPEC95進(jìn)行定點(diǎn)運(yùn)算測試,可達(dá)280MIPS以上,收到了較好的預(yù)期結(jié)果。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

LED驅(qū)動(dòng)電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: 驅(qū)動(dòng)電源

在工業(yè)自動(dòng)化蓬勃發(fā)展的當(dāng)下,工業(yè)電機(jī)作為核心動(dòng)力設(shè)備,其驅(qū)動(dòng)電源的性能直接關(guān)系到整個(gè)系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動(dòng)勢抑制與過流保護(hù)是驅(qū)動(dòng)電源設(shè)計(jì)中至關(guān)重要的兩個(gè)環(huán)節(jié),集成化方案的設(shè)計(jì)成為提升電機(jī)驅(qū)動(dòng)性能的關(guān)鍵。

關(guān)鍵字: 工業(yè)電機(jī) 驅(qū)動(dòng)電源

LED 驅(qū)動(dòng)電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個(gè)照明設(shè)備的使用壽命。然而,在實(shí)際應(yīng)用中,LED 驅(qū)動(dòng)電源易損壞的問題卻十分常見,不僅增加了維護(hù)成本,還影響了用戶體驗(yàn)。要解決這一問題,需從設(shè)計(jì)、生...

關(guān)鍵字: 驅(qū)動(dòng)電源 照明系統(tǒng) 散熱

根據(jù)LED驅(qū)動(dòng)電源的公式,電感內(nèi)電流波動(dòng)大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關(guān)鍵字: LED 設(shè)計(jì) 驅(qū)動(dòng)電源

電動(dòng)汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產(chǎn)業(yè)的重要發(fā)展方向。電動(dòng)汽車的核心技術(shù)之一是電機(jī)驅(qū)動(dòng)控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機(jī)驅(qū)動(dòng)系統(tǒng)中的關(guān)鍵元件,其性能直接影響到電動(dòng)汽車的動(dòng)力性能和...

關(guān)鍵字: 電動(dòng)汽車 新能源 驅(qū)動(dòng)電源

在現(xiàn)代城市建設(shè)中,街道及停車場照明作為基礎(chǔ)設(shè)施的重要組成部分,其質(zhì)量和效率直接關(guān)系到城市的公共安全、居民生活質(zhì)量和能源利用效率。隨著科技的進(jìn)步,高亮度白光發(fā)光二極管(LED)因其獨(dú)特的優(yōu)勢逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關(guān)鍵字: 發(fā)光二極管 驅(qū)動(dòng)電源 LED

LED通用照明設(shè)計(jì)工程師會(huì)遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關(guān)鍵字: LED 驅(qū)動(dòng)電源 功率因數(shù)校正

在LED照明技術(shù)日益普及的今天,LED驅(qū)動(dòng)電源的電磁干擾(EMI)問題成為了一個(gè)不可忽視的挑戰(zhàn)。電磁干擾不僅會(huì)影響LED燈具的正常工作,還可能對周圍電子設(shè)備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來解決L...

關(guān)鍵字: LED照明技術(shù) 電磁干擾 驅(qū)動(dòng)電源

開關(guān)電源具有效率高的特性,而且開關(guān)電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機(jī)重量也有所下降,所以,現(xiàn)在的LED驅(qū)動(dòng)電源

關(guān)鍵字: LED 驅(qū)動(dòng)電源 開關(guān)電源

LED驅(qū)動(dòng)電源是把電源供應(yīng)轉(zhuǎn)換為特定的電壓電流以驅(qū)動(dòng)LED發(fā)光的電壓轉(zhuǎn)換器,通常情況下:LED驅(qū)動(dòng)電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: LED 隧道燈 驅(qū)動(dòng)電源
關(guān)閉