国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

如何在32個處理器中編輯并且翻譯64固定的點進位計算

發布時間:2010-11-17 12:41    發布者:designer
關鍵詞: 處理器 , 點進位 , 翻譯 , 計算
介紹嵌式32位CPU在編譯器中解決64位運算的方法,并列舉一個加法運算的例子,給出可供參考的指令模板。包括32位RISC體系嵌入式CPU層次結構和編譯器后端結構。

1 概述  

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

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

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

圖1是一個集成了DSP(數字信號處理器)嵌入式CPU的層次圖。



從圖1可看到,編譯器在整個CPU結構中處于ASIC硬件電路之下和操作系統之上,擔負著將高級的、抽象的表達式轉化為相對低級的表達式,最終生成系統指令集。  

3 CPU編譯器后端結構  

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

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

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

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號寄存器作進位使用  
"")  

② 將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,high; //rtx為一種處理表達式的數據類型  
low[0]=gen_lowpart(Simode,operands[0]);  
low=gen_lowpart(Simode,operands);  
low=gen_lowpart(Simode,operands);  
high[0]=gen_rtx(REG,Simode,REGNO(operands[0]-1);  
high=gen_rtx(REG,Simode,REGNO(operands-1);  
high=gen_rtx(REG,Simode,REGNO(operands-1);  
//由于方舟CPU地址存儲方式采用的是Big-Endian,即字節中的最高有效位具有最低序號,所以高位硬寄存器號要減1。  
emit_insn(gen_addsi3_set_carry(low[0],low,low)) //低32位加并設置進位  
emit_insn(gen_addsi3_use_carry(high[0],high,high)); //高32位加并處理進位  
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))] //以下判斷是否有進位。有,則6號寄存器置1(set(reg:SI6)  
(itu:SI(plus:SI(match_dup 1)match_dup 2))(match_dup 1)))]  
""  
"add\t%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\t%0,%0,r6" //生成高32位帶進位加匯編模板  
)  
在機器描述文件中,DI為64位機器方式,SI為32位方式。該文件由機器描述處理程序進行格式轉換,它將調用編譯內部一套專門的函數和數據結構作為接口,生成gen_開頭的預處理函數對指令模板作進一步的處理,再生成由insn_開頭的函數對模板作匹配后生成匯編代碼。  
結語  
在方舟二號CPU上測試的結果達到了64運算的要求,相關的指令代碼如下:  
……  
132 r18,[r15,4]  
132 r19,[r15,8]  
add r16,r16,r18  
add r17,r17,r19  
add r17,r17,r6  
……  
用SPEC95進行定點運算測試,可達280MIPS以上,收到了較好的預期結果。
本文地址:http://m.qingdxww.cn/thread-40059-1-1.html     【打印本頁】

本站部分文章為轉載或網友發布,目的在于傳遞和分享信息,并不代表本網贊同其觀點和對其真實性負責;文章版權歸原作者及原出處所有,如涉及作品內容、版權和其它問題,我們將根據著作權人的要求,第一時間更正或刪除。
您需要登錄后才可以發表評論 登錄 | 立即注冊

廠商推薦

  • Microchip視頻專區
  • 使用SAM-IoT Wx v2開發板演示AWS IoT Core應用程序
  • 使用Harmony3加速TCP/IP應用的開發培訓教程
  • 集成高級模擬外設的PIC18F-Q71家族介紹培訓教程
  • 探索PIC16F13145 MCU系列——快速概覽
  • 貿澤電子(Mouser)專區

相關在線工具

相關視頻

關于我們  -  服務條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯系我們
電子工程網 © 版權所有   京ICP備16069177號 | 京公網安備11010502021702
快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品系列在线一区| 亚欧成人一区二区| 色婷婷5月| 天天噜夜夜噜| 99国产在线精品观看二区| 久久九九亚洲精品| 浴室里强摁做开腿呻吟的漫画| 亚洲黄色第一页| 亚洲 另类 在线 欧美 制服| 亚洲色图15p| 国产自产视频在线观看香蕉| 亚洲精品在线看| 一级黄片毛片| 亚洲清色| 曰批视频免费| 毛片在线网址| 青青久操视频| 色老头久久久久| 亚洲国产人成中文幕一级二级| 国产成人永久免费视频| 亚洲国产在线午夜视频无| 午夜一级毛片不卡| 亚洲一级片在线播放| 中文字幕在线天堂| 青草精品国产福利在线视频| 一级毛片免费不卡直观看| 四虎影永久在线观看精品| 亚洲v视频| 国产亚洲欧洲日韩在线三区| 伊人色啪啪天天综合婷婷| 欧美一区精品| 四虎免费观看| 大桥未久电影在线| 亚洲AV无码久久流水呻蜜桃久色| 天天色图| 青草青视频在线观看| 失禁尿丝袜vk| 成人国产亚洲欧美成人综合网| 亚洲第一免费播放区| 午夜高清视频| 兽皇日本|