<dfn id="w48us"></dfn><ul id="w48us"></ul>
  • <ul id="w48us"></ul>
  • <del id="w48us"></del>
    <ul id="w48us"></ul>
  • 如何在32個處理器中編輯并且翻譯64固定的點進位計算

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

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

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

    1 概述

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

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

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

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

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

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

    機器描述文件由各種與目標機有關的指令模板、功能模板、C語言形式的預處理函數(shù)等構(gòu)成。本文涉及到的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[3],high[3]; //rtx為一種處理表達式的數(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地址存儲方式采用的是Big-Endian,即字節(jié)中的最高有效位具有最低序號,所以高位硬寄存器號要減1。

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

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

    DONE;

    }

    ③ 處理低32位加。

    (define_insn "addsi_set_carry"

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

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

    【如何在32個處理器中編輯并且翻譯64固定的點進位計算】相關文章:

    編輯給論文寫作的10點建議03-26

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

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

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

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

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

    視頻監(jiān)控系統(tǒng)中多畫面處理器的設計03-19

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

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

    主站蜘蛛池模板: 日韩精品系列产品| 四虎国产精品免费观看| 99精品国产自在现线观看| 精品国产日韩亚洲一区| 国产成人精品高清在线观看93 | 亚洲?V乱码久久精品蜜桃| 久久99热国产这有精品| 欧美精品久久久久久久自慰| 欧美激情视频精品一区二区 | 国产精品VIDEOSSEX久久发布| 国产精品成人A区在线观看| 在线亚洲精品自拍| 精品亚洲欧美无人区乱码| 四虎影视国产精品亚洲精品hd| 国产精品日本一区二区在线播放| 中文字幕久久精品| 亚洲av无码成人精品区| 久久精品夜色噜噜亚洲A∨| 亚洲人成亚洲精品| 精品久久久久久综合日本| 高清免费久久午夜精品| 精品久久久久久国产潘金莲| 人妻AV一区二区三区精品| 中日韩产精品1卡二卡三卡| 四虎国产精品永久地址入口| 人妻少妇看A偷人无码精品视频 | 无码人妻精品一区二区三区99仓本| 美女岳肉太深了使劲国产精品亚洲专一区二区三区 | 久久国产香蕉一区精品| 国内精品久久久久久久coent | 亚洲国产一成人久久精品| 亚洲精品视频在线观看你懂的| 少妇亚洲免费精品| 一级A毛片免费观看久久精品| 宅男在线国产精品无码| 一本久久a久久精品亚洲| 亚洲国产精品碰碰| 中文字幕精品亚洲无线码一区| 在线精品国产一区二区三区| 无码国产精品一区二区免费模式 | 亚洲欧美日韩精品久久亚洲区|