当前位置: 首页 > news >正文

GCC RISCV 后端 -- GCC 后端框架的一些理解

        GCC 已经提供了一整套的编译框架,从前端(Frontend / GENERIC-Tree)对编程语言的语法语义处理,到中端(Middle-End / GIMPLE-Tree)的目标机器无关(Target Indepndent)的优化处理,再到后端(Backend / RTL)的目标机器相关的处理,即目标机器码生成(Code - Generation)的相关处理。整个流程,GCC都已经提供了一个框架。因此,对于不同部分的新增功能,只要对框架中对应部分进行修改即可。

        如,需要新增一个目标机器的后端,最主要的两个部分是:

        1. 通过 GCC 定义的机器描述语言(Machine Description Language),其语法为GCC后端中间语言(RTL),用以描述目标机器的指令架构(ISA)等指令特征。

        2. 通过头文件(.h)与源文件(.c),重新定义(redefine)GCC后端框架中的可配置的变量、函数。主要通过宏定义(Macro)进行重新定义。

        这样,GCC 框架就能获取足够的目标机器信息,从而生成对应的编译器。因此,基于GCC框架,精确地把目标机器的信息提供给GCC,让GCC能够生成高质量的编译器。

        由此,掌握GCC,主要要了解 GCC 提供的框架及其提供的可配置点与配置方式(是通过宏定义,还是通过描述语言,还是通过对应函数指针)。

        GCC使用一系列的机制,使得通过不同方式提供的目标机器信息,揉合进其编译框架类,最终生成对应目标机器的编译器。

        另外,在GCC框架中,处理过程是用 Pass 的方式进行组织。也就是说,从处理流程的角度看,C程序源代码经过一系列的变换,最终形成对应目标机器的汇编程序。其中的一系列变换就是一系列的处理过程,也就是一系列的 pass 组织起来对其上下代码的处理。其中,后端的处理过程是基于 RTL 中间语言(IR)进行处理。在不同的后端处理过程中,其处理过程需要目标机器的信息,那么,就通过上述两个机制(机器描述语言、宏定义)来提供。

        例如,指令调度的处理,需要知道每条指令的执行特性,计算指令的执行时延等,这就需要机器描述语言中对指令的描述及目标机器的处理单元的流水特性的描述。

        因此,在新增一个GCC的后端,需要从两个角度去看,一个是目标信息提供的角度,另一个是从后端处理流程的角度。多数情况是从目标信息提供的角度出发,编写对应信息提供方式。

        

http://www.dtcms.com/a/50755.html

相关文章:

  • Html5学习教程,从入门到精通,HTML 5 图像语法知识点语法知识点及案例代码(9)
  • AWS VPC行业解决方案:构建安全、灵活的企业云网络
  • Spring项目中常用操作记录
  • 因子分析讲解
  • C++类与对象:银行管理系统项目实战开发LeetCode每日一题
  • 【Web前端开发】---HTML标签及标签属性
  • 云计算中的“按需扩展”和“自动扩展”有何不同?
  • Ubuntu20.04双系统安装及软件安装(七):Anaconda3
  • pnpm+monorepo实现前端公共函数、组件库
  • 千兆网络测试仪使用全解析:从线序检测到性能压测实战
  • MySql基础以及安装
  • Ubuntu20.04双系统安装及软件安装(十一):向日葵远程软件
  • 如何在 C# 中检查两个对象是否完全相同?
  • 山东大学计算机科学与技术学院软件工程实验日志
  • python及pycharm安装配置
  • Pytorch构建LeNet进行MNIST识别 #自用
  • leetcode日记(76)格雷编码
  • DAIR-V2X-R数据集服务器下载
  • 机器学习之逻辑回归
  • 用CLI操作MySQL 92数据库的命令
  • 安装mysql
  • 解码未来!安徽艾德未来智能科技有限公司荣获“GAS消费电子科创奖-产品创新奖”!
  • Netty笔记5:Netty开发实例
  • 机器学习校招面经二
  • 【JavaScript—前端快速入门】JavaScript 综合案例 — 猜数字
  • 串口通讯基础
  • 【四.RAG技术与应用】【11.阿里云百炼应用(上):RAG在云端的实践】
  • 认识时钟树
  • Non-Homophilic Graph Pre-Training and Prompt Learning
  • ==和===在不同场景下的具体区别是什么?