LLVM Cpu0 新后端 系列课程总结
想好好熟悉一下llvm开发一个新后端都要干什么,于是参考了老师的系列文章:
LLVM 后端实践笔记
代码在这里(还没来得及准备,先用网盘暂存一下):
链接: https://pan.baidu.com/s/1yLAtXs9XwtyEzYSlDCSlqw?pwd=vd6s 提取码: vd6s
系列课程告一段落,这里对这个系列课程做个总结。
1.文件对应的功能
| 文件 | 功能 | 
| Cpu0AsmParser.cpp | 汇编器 | 
| Cpu0Disassembler.cpp | 反汇编器 | 
| Cpu0ABIInfo.cpp/.h | Cpu0ABIInfo.cpp定义ABI的信息,提供了O32、S32和未知三种ABI规范。 | 
| Cpu0AsmBackend.cpp/.h | 定义后端的一些功能,包括重定位等等 | 
| Cpu0BaseInfo.h | 一些flag信息的定义 | 
| Cpu0ELFObjectWriter.cpp | 用来完成最终的 ELF 文件格式的写入任务 | 
| Cpu0ELFStreamer.cpp/.h | 定义了一个cpu0架构的elf文件输出流类 | 
| Cpu0FixupKinds.h | 重定位相关的Fixups结构的定义 | 
| Cpu0InstPrinter.cpp/.h | 将Cpu0的MCInst(Machine Code Instruction)转换成可读的Cpu0汇编指令 | 
| Cpu0MCAsmInfo.cpp/.h | 定义了一些汇编文件格式通用的东西 | 
| Cpu0MCCodeEmitter.cpp/.h | 负责汇编指令最后发射 | 
| Cpu0MCExpr.cpp/.h | 定义一些汇编阶段的符号、表达式等 | 
| Cpu0MCTargetDesc.cpp/.h | Cpu0MCTargetDesc里边包括了对Cpu0架构的详细描述,包括对td文件生成的相应的inc文件的引用,以及对Cpu0各个工具的注册 | 
| Cpu0TargetStreamer.cpp/.h | 定义了一个cpu0架构的后端输出流类 | 
| Cpu0TargetInfo.cpp/.h | Cpu0TargetMachine就是为了定义Cpu0 Target供外部文件引用的 | 
| Cpu0.h | Cpu0后端全局函数的入口 | 
| Cpu0.td | Cpu0后端入口的td文件,include了其余的td文件 | 
| Cpu0AnalyzeImmediate.cpp/.h | 分析一些带立即数的指令,framelowering的辅助函数 | 
| Cpu0AsmPrinter.cpp/.h | 将LLVM的机器代码(Machine Code)转换成Cpu0汇编代码 | 
| Cpu0CallingConv.td | Cpu0架构的Calling Convention | 
| Cpu0DelaySlotFiller.cpp | 延迟槽插入的后端PASS | 
| Cpu0DelUselessJMP.cpp | JMP优化的后端PASS | 
| Cpu0FrameLowering.cpp/.h | 栈桢处理相关的,包括prologue和epilogue。 | 
| Cpu0InstrFormats.td | 定一个Cpu0Inst这个指令父类,以及Cpu0架构的各种指令形式 | 
| Cpu0InstrInfo.cpp/.h | 对于Cpu0GenInstrInfo类的使用,td文件能定义的功能有限,还需要使用cpp文件进一步扩展。 | 
| Cpu0InstrInfo.td | 定义了各种指令,以及各种匹配模式 | 
| Cpu0ISelDAGToDAG.cpp/.h | 指令选择的一些接口 | 
| Cpu0ISelLowering.cpp/.h | LLVM IR转换为DAG。 | 
| Cpu0MachineFunctionInfo.cpp/.h | Cpu0架构Machine Function一些通用接口的定义 | 
| Cpu0MCInstLower.cpp/.h | 将 MI 指令 lower 到 MCInst 指令的工作 | 
| Cpu0RegisterInfo.cpp/.h | 对于Cpu0GenRegisterInfo类的使用,td文件能定义的功能有限,还需要使用cpp文件进一步扩展。 | 
| Cpu0RegisterInfo.td | 定义了各种寄存器,以及寄存器集合 | 
| Cpu0Schedule.td | 定义了指令调度策略 | 
| Cpu0SEFrameLowering.cpp/.h | 栈桢处理相关的,包括prologue和epilogue。 | 
| Cpu0SEInstrInfo.cpp/.h | 对于Cpu0GenInstrInfo类的使用,td文件能定义的功能有限,还需要使用cpp文件进一步扩展。 | 
| Cpu0SEISelDAGToDAG.cpp/.h | 指令选择的一些接口 | 
| Cpu0SEISelLowering.cpp/.h | LLVM IR转换为DAG。 | 
| Cpu0SERegisterInfo.cpp/.h | 对于Cpu0GenRegisterInfo类的使用,td文件能定义的功能有限,还需要使用cpp文件进一步扩展。 | 
| Cpu0Subtarget.cpp/.h | Cpu0架构Subtarget的定义 | 
| Cpu0TargetMachine.cpp/.h | Cpu0架构Target Machine接口的定义 | 
| Cpu0TargetObjectFile.cpp/.h | 定义cpu0架构目标文件的一些配置 | 
2.后端流程

3.待补充
之后想到了什么会继续补充
相关文章:
 
LLVM Cpu0 新后端 系列课程总结
想好好熟悉一下llvm开发一个新后端都要干什么,于是参考了老师的系列文章: LLVM 后端实践笔记 代码在这里(还没来得及准备,先用网盘暂存一下): 链接: https://pan.baidu.com/s/1yLAtXs9XwtyEzYSlDCSlqw?…...
 
【云原生】Kubernetes----RBAC用户资源权限
目录 引言 一、Kubernetes安全机制概述 二、认证机制 (一)认证方式 1.HTTPS证书认证 1.1 证书颁发 1.2 config文件 1.3 认证类型 1.4 Service Account 1.4.1 作用 1.4.2 包含内容 1.4.3 与Secret的关系 2.Bearer Tokens 3.基本认证 三、鉴…...
 
ORA-01652 表空间不够解决方案
前章:出现表空间不足不要手动强制删除对应数据文件存储目录下的DBF文件,需要用SQL语句进行数据文件的DROP,否则会导致ORA-01033报错,因为我没有开启数据库的归档所以不能通过RECOVER的形式找回数据文件最后只能重装本地ORACLE。 …...
亚马逊 AWS 视频转码功能、AWS Elemental MediaConvert 中创建和管理转码作业
上传的视频需要转码成不同的编码, 可以直接在 AWS Elemental MediaConvert 中创建和管理转码作业 AWS Elemental MediaConvert 中创建和管理转码作业 /*** 视频转码* return bool* author wzb* data 2024/5/30*/function videoTranscode(&$data){$fileId $data[id] ?? …...
 
RocketMQ可视化界面安装
RocketMQ可视化界面安装 **起因:**访问rocketmq-externals项目的git地址,下载了源码,在目录中并没有找到rocketmq-console文件夹。 git下面文档提示rocketMQ的仪表板转移到了新的项目中,点击仪表板到新项目地址; 下载…...
 
【ffmpeg】本地格式转换 mp4转wav||裁剪mp4
个人感受:太爽了!!!(可能用惯了转换网站和无良的转换软件) ———— 使用FFmpeg把mp4文件转换为WAV文件 - 简书 (jianshu.com) FFMPEG 视频分割和合并 - 简书 (jianshu.com) ———— 示例 ffmpeg -i …...
 
基于Django+MySQL的智慧校园系统
此项目基于Django MySQL HTML CSS JS jQuery bootstrap实现的功能有 学生管理部门管理代办清单管理校园论坛校园医疗服务校园看点校园生活助手常用功能入口 1. 一些注意点 1. 页面body会自动有一些边界距,处理方法: <head><style>b…...
 
Linux基础指令(一)
前言 Linux基础指令主要学习:对目录、文件、压缩包、匹配查找,权限等操作 第一次接触ubuntu需要知道的基本知识 sudo passwd root 先给root用户设置密码 su root 切换到root用户 su zhangsan …...
 
三极管十大品牌
三极管十大品牌-三极管品牌-晶体三极管哪个品牌好-Maigoo品牌榜...
需求记录(共享元素)
MainActivity1 列表展示,使用共享元素完成页面间的切换 package com.example.animactivity;import android.annotation.SuppressLint; import android.app.ActivityOptions; import android.content.Intent; import android.os.Build; import android.os.Bundle; i…...
.Net 使用 MongoDB
安装nuget包 MongoDB.Driver 简单代码 using MongoDB.Bson; using MongoDB.Driver; using System.Buffers; using System.Collections.Concurrent; using System.Diagnostics;namespace ConsoleApp4 {internal class Program{static void Main(string[] args){var client = ne…...
【TensorFlow深度学习】值函数估计:蒙特卡洛方法与TD学习
值函数估计:蒙特卡洛方法与TD学习 值函数估计:蒙特卡洛方法与TD学习的深度探索蒙特卡洛方法时序差分学习(TD)Python代码示例结论 值函数估计:蒙特卡洛方法与TD学习的深度探索 在强化学习的奇妙世界里,值函数估计扮演着至关重要的…...
成功解决ModuleNotFoundError: No module named ‘cv2’
成功解决ModuleNotFoundError: No module named ‘cv2’ 🌈 欢迎莅临我的个人主页👈这里是我深耕Python编程、机器学习和自然语言处理(NLP)领域,并乐于分享知识与经验的小天地!🎇 🎓…...
 
中国蚁剑 安装教程 2024年5月
2024/5/11 中国蚁剑 安装教程 一、下载中国蚁剑的加载器和核心源码(两个都要用到) github官方下载地址:https://github.com/AntSwordProject/ 参考文档:antSword/README_CN.md at master AntSwordProject/antSword GitHub 核…...
 
Golang-分离式加载器(传参)AES加密
目录 enc.go 生成: dec.go --执行dec.go...--上线 cs生成个c语言的shellcode. enc.go go run .\enc.go shellcode 生成: --key为公钥. --code为AES加密后的数据, ----此脚本每次运行key和code都会变化. package mainimport ("bytes""crypto/aes"&…...
速览三版HTTP的改进策略
HTTP(Hypertext Transfer Protocol)是互联网通信的基础协议,自从其第一个版本推出以来,经历了多个版本的改进,每个版本都针对之前的不足进行了优化和增强。以下是HTTP/1.1、HTTP/2和HTTP/3的主要改进总结: …...
window.open(“.html“,“_blank“) 执行是下载,并没有打开新窗口显示html
window.open() 方法在浏览器中打开一个新窗口或者新标签页。如果你的 .html 文件被下载而不是在新窗口中打开,那可能是因为服务器的响应头设置了 Content-Disposition: attachment,这会导致浏览器把响应的内容作为一个文件下载。 如果你有权限修改服务器…...
 
【QT5.14.2】编译MQTT库example的时候报No such file or directory
【QT5.14.2】编译MQTT库example的时候报No such file or directory 前几天导师让跑一下MQTT库,用的5.14.2版本的QT,于是就上网搜了一个教程:https://www.bilibili.com/video/BV1dH4y1e7hG/?spm_id_from333.337.search-card.all.click&v…...
 
【数据结构】前缀树(字典树)汇总
基础 {“a”,“abc”,“bac”,“bbc”,“ca” }的字典树如下图: 最主用的应用:一,字符串编码。二,位运算。 字符串编码 相比利用哈希映射编码,优点如下: 依次查询长度为n的字符串s的前缀时间复杂度是O(…...
 
Linux:基础开发工具
文章目录 Linux 软件包管理器 yum什么是软件包关于rzsz查看软件包安装软件卸载软件安装扩展源 Linux 编辑器 vimvim的基本概念正常/普通/命令模式(Normal mode)插入模式(Insert mode)底行模式(last line mode) vim的基本操作[命令模式]切换至[插入模式][插入模式]切换至[命令模…...
 
【网络安全产品大调研系列】2. 体验漏洞扫描
前言 2023 年漏洞扫描服务市场规模预计为 3.06(十亿美元)。漏洞扫描服务市场行业预计将从 2024 年的 3.48(十亿美元)增长到 2032 年的 9.54(十亿美元)。预测期内漏洞扫描服务市场 CAGR(增长率&…...
JVM垃圾回收机制全解析
Java虚拟机(JVM)中的垃圾收集器(Garbage Collector,简称GC)是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象,从而释放内存空间,避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...
 
376. Wiggle Subsequence
376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...
【HTML-16】深入理解HTML中的块元素与行内元素
HTML元素根据其显示特性可以分为两大类:块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...
Rapidio门铃消息FIFO溢出机制
关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系,以下是深入解析: 门铃FIFO溢出的本质 在RapidIO系统中,门铃消息FIFO是硬件控制器内部的缓冲区,用于临时存储接收到的门铃消息(Doorbell Message)。…...
Mobile ALOHA全身模仿学习
一、题目 Mobile ALOHA:通过低成本全身远程操作学习双手移动操作 传统模仿学习(Imitation Learning)缺点:聚焦与桌面操作,缺乏通用任务所需的移动性和灵活性 本论文优点:(1)在ALOHA…...
MySQL账号权限管理指南:安全创建账户与精细授权技巧
在MySQL数据库管理中,合理创建用户账号并分配精确权限是保障数据安全的核心环节。直接使用root账号进行所有操作不仅危险且难以审计操作行为。今天我们来全面解析MySQL账号创建与权限分配的专业方法。 一、为何需要创建独立账号? 最小权限原则…...
 
Unsafe Fileupload篇补充-木马的详细教程与木马分享(中国蚁剑方式)
在之前的皮卡丘靶场第九期Unsafe Fileupload篇中我们学习了木马的原理并且学了一个简单的木马文件 本期内容是为了更好的为大家解释木马(服务器方面的)的原理,连接,以及各种木马及连接工具的分享 文件木马:https://w…...
JAVA后端开发——多租户
数据隔离是多租户系统中的核心概念,确保一个租户(在这个系统中可能是一个公司或一个独立的客户)的数据对其他租户是不可见的。在 RuoYi 框架(您当前项目所使用的基础框架)中,这通常是通过在数据表中增加一个…...
 
技术栈RabbitMq的介绍和使用
目录 1. 什么是消息队列?2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...
