激情欧美日韩一区二区,浪货撅高贱屁股求主人调教视频,精品无码成人片一区二区98,国产高清av在线播放,色翁荡息又大又硬又粗视频

如何在32個(gè)處理器中編輯并且翻譯64固定的點(diǎn)進(jìn)位計算

時(shí)間:2024-07-27 01:35:27 理工畢業(yè)論文 我要投稿
  • 相關(guān)推薦

如何在32個(gè)處理器中編輯并且翻譯64固定的點(diǎn)進(jìn)位計算

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

1 概述

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

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

2 32位RISC體系嵌入式CPU層次結構描述

圖1是一個(gè)集成了DSP(數字信號處理器)嵌入式CPU的層次圖。從圖1可看到,編譯器在整個(gè)CPU結構中處于A(yíng)SIC硬件電路之下和操作系統之上,擔負著(zhù)將高級的、抽象的表達式轉化為相對低級的表達式,最終生成系統指令集。

3 CPU編譯器后端結構

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

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

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

4 64位加法運算指令板

① 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位運算,第二次匹配。

(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為一種處理表達式的數據類(lèi)型

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地址存儲方式采用的是Big-Endian,即字節中的最高有效位具有最低序號,所以高位硬寄存器號要減1。

emit_insn(gen_addsi3_set_carry(low[0],low[1],low[2])) //低32位加并設置進(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")

如何在32個(gè)處理器中編輯并且翻譯64固定的點(diǎn)進(jìn)位計算

【如何在32個(gè)處理器中編輯并且翻譯64固定的點(diǎn)進(jìn)位計算】相關(guān)文章:

編輯給論文寫(xiě)作的10點(diǎn)建議03-26

試論如何在中職計算機教學(xué)中培養學(xué)生的學(xué)習興趣論文12-07

英漢翻譯中的翻譯癥03-02

數字信號處理器中D/A功能的實(shí)現03-19

翻譯中的視點(diǎn)轉移03-18

如何在旅游管理教學(xué)中運用案例11-18

視頻監控系統中多畫(huà)面處理器的設計03-19

論等效翻譯及其在漢英翻譯中的應用03-11

研究如何在企業(yè)中應用好績(jì)效管理03-21

激情欧美日韩一区二区,浪货撅高贱屁股求主人调教视频,精品无码成人片一区二区98,国产高清av在线播放,色翁荡息又大又硬又粗视频