当前位置: 首页 > 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.lryc.cn/news/546391.html

相关文章:

  • FastGPT 源码:如何实现 “问题优化“
  • CSS—flex布局、过渡transition属性、2D转换transform属性、3D转换transform属性
  • Spring Boot Gradle 项目中使用 @Slf4j 注解
  • FreeRTOS系列---程序正常,但任务无法创建
  • linux应用:errno、perror、open、fopen
  • 物联网中的气象监测设备具备顶级功能
  • 15-YOLOV8OBB损失函数详解
  • WHAT - 前端异步事件流处理场景梳理
  • 计算机网络软考
  • 安防监控/视频集中存储EasyCVR视频汇聚平台如何配置AI智能分析平台的接入?
  • 做小程序开发的安全防护全方案
  • 在Spring Boot项目中导出复杂对象到Excel文件
  • 从JDBC到数据库连接池:构建高性能Java应用的基石(中篇)
  • JavaWeb后端基础(6)
  • nio多线程版本
  • Electron、Tauri及其它跨平台方案终极对比
  • 蓝桥杯试题:二分查找
  • MongoDB Chunks核心概念与机制
  • 决策树(Decision Tree):机器学习中的经典算法
  • 高频 SQL 50 题(基础版)_1084. 销售分析 III
  • Python-selenium启动edge打开百度
  • 网络安全需要掌握哪些技能?
  • 自动扶梯人员摔倒掉落识别检测数据集VOC+YOLO格式5375张2类别
  • 中国棒球国家队征战世界棒球经典赛·棒球1号位
  • 重生之数据结构与算法----数组链表
  • 计算机网络常见疑问
  • C++07(继承)
  • 文件上传漏洞:upload-labs靶场1-10
  • 【Python/Pytorch】-- 创建3090Ti显卡所需环境
  • 自然语言转SQL之Vanna.ai:AI集成数据库