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

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的后端,需要从两个角度去看,一个是目标信息提供的角度,另一个是从后端处理流程的角度。多数情况是从目标信息提供的角度出发,编写对应信息提供方式。

        

相关文章:

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

GCC 已经提供了一整套的编译框架,从前端(Frontend / GENERIC-Tree)对编程语言的语法语义处理,到中端(Middle-End / GIMPLE-Tree)的目标机器无关(Target Indepndent)的优化处理&#…...

【前端】HTML 备忘清单(超级详细!)

文章目录 入门hello.html注释 Comment段落 ParagraphHTML 链接Image 标签文本格式标签标题Section Divisions内部框架HTML 中的 JavaScriptHTML 中的 CSS HTML5 标签页面标题导航HTML5 TagsHTML5 VideoHTML5 AudioHTML5 RubyHTML5 kdiHTML5 progressHTML5 mark HTML 表格Table …...

鸿蒙开发新视角:用ArkTS解锁责任链模式

责任链模式:概念与原理 责任链模式(Chain of Responsibility Pattern)是一种行为型设计模式,它将多个处理者对象连接成一条链,并将请求沿着链传递,直到有一个处理者能够处理该请求。这种模式的核心思想是将…...

Linux的用户与权限--第二天

认知root用户(超级管理员) root用户用于最大的系统操作权限 普通用户的权限,一般在HOME目录内部不受限制 su与exit命令 su命令: su [-] 用户名 -符号是可选的,表示切换用户后加载环境变量 参数为用户名&#xff0c…...

【Unity】搭建HTTP服务器并解决IP无法访问问题解决

一、核心目标与背景 在Unity中搭建本地HTTP服务器,可以用于实现Web与游戏交互、本地数据接口测试、跨设备通信等场景。但在实际部署中,开发者常遇到以下问题: ​本机IP无法访问:服务绑定localhost时,局域网设备无法连…...

【C语言】结构体自动对齐问题 解析与解决方案

【C语言】结构体自动对齐问题 解析与解决方案 文章目录 【C语言】结构体自动对齐问题 解析与解决方案一、引言:问题背景二、结构体对齐机制详解2.1 对齐规则2.2 示例分析 三、实际案例与错误复现3.1 问题代码修正 四、 解决方案对比与实现4.1 禁用自动对齐&#xff…...

安卓开发相机功能

相机功能 安卓中的相机调用功能也经历了很多的方案升级,目前可选的官方方案是CameraX、Camera2、Camera(废弃),还有一些第三方免费或者是付费的相机库。对于大多数开发者,建议使用 CameraX。 CameraX CameraX 是 An…...

Zookeeper 及 基于ZooKeeper实现的分布式锁

1 ZooKeeper 1.1 ZooKeeper 介绍 ZooKeeper是一个开源的分布式协调服务,它的设计目标是将那些复杂且容易出错的分布式一致性服务封装起来,构成一个高效可靠的原语集,并以一系列简单易用的接口提供给用户使用。 原语:操作系统或…...

Ubuntu20.04双系统安装及软件安装(五):VSCode

Ubuntu20.04双系统安装及软件安装(五):VSCode 打开VScode官网,点击中间左侧的deb文件下载: 系统会弹出下载框,确定即可。 在文件夹的**“下载”目录**,可看到下载的安装包,在该目录下…...

【计算机网络入门】初学计算机网络(十一)重要

目录 1. CIDR无分类编址 1.1 CIDR的子网划分 1.1.1 定长子网划分 1.1.2 变长子网划分 2. 路由聚合 2.1 最长前缀匹配原则 3. 网络地址转换NAT 3.1 端口号 3.2 IP地址不够用? 3.3 公网IP和内网IP 3.4 NAT作用 4. ARP协议 4.1 如何利用IP地址找到MAC地址…...

Android Flow操作符分类

Flow操作符分类...

经验分享:用一张表解决并发冲突!数据库事务锁的核心实现逻辑

背景 对于一些内部使用的管理系统来说,可能没有引入Redis,又想基于现有的基础设施处理并发问题,而数据库是每个应用都避不开的基础设施之一,因此分享个我曾经维护过的一个系统中,使用数据库表来实现事务锁的方式。 之…...

C#项目文件.csproj 文件结构解析

以下是对提供的 .csproj 文件内容的详细解析&#xff1a; 1. ‌项目根元素‌ <Project ToolsVersion"12.0" DefaultTargets"Build" xmlns"http://schemas.microsoft.com/developer/msbuild/2003"> ToolsVersion"12.0": 指定使…...

C++-第二十章:智能指针

目录 第一节&#xff1a;std::auto_ptr 第二节&#xff1a;std::unique_ptr 第三节&#xff1a;std::shared_ptr 第四节&#xff1a;std::shared_ptr的缺陷 4-1.循环引用 4-2.删除器 下期预告&#xff1a; 智能指针的作用是防止指针出作用域时忘记释放内存而造成内存泄漏&…...

chrome Vue.js devtools 提示不支持该扩展组件,移除

可能是版本不兼容&#xff0c;可以重新安装&#xff0c;推荐网址极简插件官网_Chrome插件下载_Chrome浏览器应用商店 直接搜索vue&#xff0c;下载旧版&#xff0c;vue2、vue3都支持&#xff0c;上面那个最新版本试了下&#xff0c;vue2的肯定是不能用...

C# 中的Action和Func是什么?Unity 中的UnityAction是什么? 他们有什么区别?

所属范围&#xff1a;Action 和 Func 是 C# 语言标准库中的委托类型&#xff0c;可在任何 C# 项目里使用&#xff1b;UnityAction 是 Unity 引擎专门定义的委托类型&#xff0c;只能在 Unity 项目中使用。 返回值&#xff1a;Action 和 UnityAction 封装的方法没有返回值&…...

【流行病学】Melodi-Presto因果关联工具

title: “[流行病学] Melodi Presto因果关联工具” date: 2022-12-08 lastmod: 2022-12-08 draft: false tags: [“流行病学”,“因果关联工具”] toc: true autoCollapseToc: true 阅读介绍 Melodi-Presto: A fast and agile tool to explore semantic triples derived from …...

Stream在Swift 和 Flutter上的对比

Swift 和 Flutter 都是跨平台开发框架&#xff0c;它们各自提供了强大的工具来处理数据流&#xff0c;尤其是在移动应用开发中。虽然 Swift 主要用于 iOS 开发&#xff0c;而 Flutter 主要用于移动应用的开发&#xff08;包括 iOS 和 Android&#xff09;&#xff0c;但它们各自…...

Vue3 TransitionGroup组件深入解析:结合Element Plus实践指南

引言 在动态列表交互场景中&#xff0c;元素的增删排序需要优雅的过渡效果。Vue3的TransitionGroup组件为这类需求提供了专业解决方案。本文将通过Element Plus等流行UI库的实战案例&#xff0c;深入剖析TransitionGroup的应用技巧。 一、TransitionGroup核心特性 1.1 与Tran…...

关于opencv中solvepnp中UPNP与DLS与EPNP的参数

The methods SOLVEPNP_DLS and SOLVEPNP_UPNP cannot be used as the current implementations are unstable and sometimes give completely wrong results. If you pass one of these two flags, SOLVEPNP_EPNP method will be used instead.、 由于当前的实现不稳定&#x…...

Versal - XRT(CPP) 2024.1

目录 1.简介 2. XRT 2.1 XRT vs OpenCL 2.2 Takeways 2.3 XRT C APIs 2.4 Device and XCLBIN 2.5 Buffers 2.5.1 Buffer 创建 2.5.1.1 普通 Buffer 2.5.1.2 特殊 Buffer 2.5.1.3 用户指针 Buffer 2.5.2 Data Transfer 2.5.2.1 read/write API 2.5.2.2 map API 2…...

【零基础到精通Java合集】第十八集:多线程与并发编程-线程池与Callable/Future应用

课程标题:线程池与Callable/Future应用(15分钟) 目标:掌握线程池的创建与管理,理解Callable任务与Future异步结果处理机制 0-1分钟:课程引入与线程池意义 以“银行窗口服务”类比线程池:复用固定资源(柜员)处理多任务(客户)。说明线程池的核心价值——避免频繁创建…...

windows下安装Open Web UI

windows下安装openwebui有三种方式,docker,pythonnode.js,整合包. 这里我选择的是第二种,非docker. 非Docker方式安装 1. 安装Python&#xff1a; 下载并安装Python 3.11&#xff0c;建议安装路径中不要包含中文字符&#xff0c;并勾选“Add python 3.11 to Path”选项。 安…...

【自用】NLP算法面经(4)

一、deepseek 1、MLA &#xff08;1&#xff09;LLM推理过程 prefill阶段&#xff1a;模型对全部的prompt tokens一次性并行计算&#xff0c;最终生成第一个输出token。decode阶段&#xff1a;每次生成一个token&#xff0c;直到生成EOS&#xff08;end-of-sequence&#xf…...

LeetCode热题100JS(20/100)第四天|​41. 缺失的第一个正数​|​73. 矩阵置零​|​54. 螺旋矩阵​|​48. 旋转图像​

41. 缺失的第一个正数 题目链接&#xff1a;41. 缺失的第一个正数 难度&#xff1a;困难 刷题状态&#xff1a;1刷 新知识&#xff1a; 解题过程 思考 示例 1&#xff1a; 输入&#xff1a;nums [1,2,0] 输出&#xff1a;3 解释&#xff1a;范围 [1,2] 中的数字都在数组中…...

【银河麒麟高级服务器操作系统实际案例分享】数据库资源重启现象分析及处理全过程

更多银河麒麟操作系统产品及技术讨论&#xff0c;欢迎加入银河麒麟操作系统官方论坛 https://forum.kylinos.cn 了解更多银河麒麟操作系统全新产品&#xff0c;请点击访问 麒麟软件产品专区&#xff1a;https://product.kylinos.cn 开发者专区&#xff1a;https://developer…...

开源架构与人工智能的融合:开启技术新纪元

最近五篇文章推荐&#xff1a; 开源架构的自动化测试策略优化版&#xff08;New&#xff09; 开源架构的容器化部署优化版&#xff08;New&#xff09; 开源架构的微服务架构实践优化版&#xff08;New&#xff09; 开源架构中的数据库选择优化版&#xff08;New&#xff09; 开…...

缓存那些事儿

为什么要使用缓存 性能 我们在碰到需要执行耗时特别久&#xff0c;且结果不频繁变动的SQL&#xff0c;就特别适合将运行结果放入缓存。这样&#xff0c;后面的请求就去缓存中读取&#xff0c;使得请求能够迅速响应。 并发 在大并发的情况下&#xff0c;所有的请求直接访问数…...

【弹性计算】弹性裸金属服务器和神龙虚拟化(二):适用场景

《弹性裸金属服务器》系列&#xff0c;共包含以下文章&#xff1a; 弹性裸金属服务器和神龙虚拟化&#xff08;一&#xff09;&#xff1a;功能特点弹性裸金属服务器和神龙虚拟化&#xff08;二&#xff09;&#xff1a;适用场景弹性裸金属服务器和神龙虚拟化&#xff08;三&a…...

通往 AI 之路:Python 机器学习入门-语法基础

第一章 Python 语法基础 Python 是一种简单易学的编程语言&#xff0c;广泛用于数据分析、机器学习和人工智能领域。在学习机器学习之前&#xff0c;我们需要先掌握 Python 的基本语法。本章将介绍 Python 的变量与数据类型、条件语句、循环、函数以及文件操作&#xff0c;帮助…...