├── AsmParser
│ ├── CMakeLists.txt
│ └── Cpu0AsmParser.cpp //可以把平台相关的汇编语句转换为LLVM-IR
├── CMakeLists.txt
├── Cpu0.h //定义了4个pass
├── Cpu0.td //描述CPU0的基本特性
├── Cpu0AnalyzeImmediate.cpp //解析指令中的立即数
├── Cpu0AnalyzeImmediate.h
├── Cpu0Asm.td //包括寄存器td文件和Cpu.td
├── Cpu0AsmPrinter.cpp //输出汇编代码
├── Cpu0AsmPrinter.h
├── Cpu0CallingConv.td //描述调用规约
├── Cpu0CondMov.td //定义条件移动指令,例如movz
├── Cpu0Config.h
├── Cpu0DelUselessJMP.cpp //一个pass例子,删除无用的JMP指令
├── Cpu0DelaySlotFiller.cpp //延迟槽相关
├── Cpu0EmitGPRestore.cpp //恢复全局寄存器
├── Cpu0FrameLowering.cpp //函数调用栈帧相关
├── Cpu0FrameLowering.h
├── Cpu0ISelDAGToDAG.cpp //LLVM DAG转换为CPU0 DAG
├── Cpu0ISelDAGToDAG.h
├── Cpu0ISelLowering.cpp //DAG节点转换为汇编指令
├── Cpu0ISelLowering.h
├── Cpu0InstrFormats.td //定义指令格式,例如R型指令
├── Cpu0InstrInfo.cpp
├── Cpu0InstrInfo.h
├── Cpu0InstrInfo.td //定义指令
├── Cpu0LongBranch.cpp //生成长跳转指令
├── Cpu0MCInstLower.cpp //将CPU0指令集的机器指令转换为LLVM MCInst的形式,MCInst是指令的抽象表现形式,便于转换为汇编或者二进制机器码
├── Cpu0MCInstLower.h
├── Cpu0MachineFunction.cpp //函数调用相关,和Cpu0FrameLowering相互关联
├── Cpu0MachineFunction.h
├── Cpu0Other.td
├── Cpu0RegisterInfo.cpp
├── Cpu0RegisterInfo.h
├── Cpu0RegisterInfo.td //寄存器相关
├── Cpu0RegisterInfoGPROutForAsm.td
├── Cpu0RegisterInfoGPROutForOther.td
├── Cpu0SEFrameLowering.cpp //Stack Engine(SE) 是专门处理栈操作指令的硬件。类似 PUSH、POP、CALL、RET 这样的指令都算栈操作指令。
├── Cpu0SEFrameLowering.h
├── Cpu0SEISelDAGToDAG.cpp
├── Cpu0SEISelDAGToDAG.h
├── Cpu0SEISelLowering.cpp
├── Cpu0SEISelLowering.h
├── Cpu0SEInstrInfo.cpp
├── Cpu0SEInstrInfo.h
├── Cpu0SERegisterInfo.cpp
├── Cpu0SERegisterInfo.h
├── Cpu0Schedule.td //指令调度相关,包括指令的延迟周期、操作数之间的依赖关系、指令调度器的实现
├── Cpu0SetChapter.h
├── Cpu0Subtarget.cpp //Subtarget代表一个特定的目标机器,包括一些全局配置信息
├── Cpu0Subtarget.h
├── Cpu0TargetMachine.cpp //targetMachine初始化
├── Cpu0TargetMachine.h
├── Cpu0TargetObjectFile.cpp //生成文件相关
├── Cpu0TargetObjectFile.h
├── Cpu0TargetStreamer.h
├── Disassembler
│ ├── CMakeLists.txt
│ └── Cpu0Disassembler.cpp //反汇编
├── InstPrinter
│ ├── CMakeLists.txt
│ ├── Cpu0InstPrinter.cpp //输出汇编指令
│ └── Cpu0InstPrinter.h
├── MCTargetDesc
│ ├── CMakeLists.txt
│ ├── Cpu0ABIInfo.cpp //ABI相关
│ ├── Cpu0ABIInfo.h
│ ├── Cpu0AsmBackend.cpp //Cpu0架构的汇编后端,包括处理fixup信息、生成NOP指令、转换为ELF
│ ├── Cpu0AsmBackend.h
│ ├── Cpu0BaseInfo.h
│ ├── Cpu0ELFObjectWriter.cpp
│ ├── Cpu0FixupKinds.h
│ ├── Cpu0MCAsmInfo.cpp
│ ├── Cpu0MCAsmInfo.h
│ ├── Cpu0MCCodeEmitter.cpp
│ ├── Cpu0MCCodeEmitter.h
│ ├── Cpu0MCExpr.cpp
│ ├── Cpu0MCExpr.h
│ ├── Cpu0MCTargetDesc.cpp
│ ├── Cpu0MCTargetDesc.h
│ └── Cpu0TargetStreamer.cpp
└── TargetInfo
├── CMakeLists.txt
└── Cpu0TargetInfo.cpp
CPU0文件解析系列--第一章--概述
最新推荐文章于 2024-06-08 17:05:57 发布
该文描述了一个针对CPU0架构的LLVM编译器实现,包括汇编解析、指令选择、函数调用约定、指令调度和目标机器描述等关键组件。它涉及汇编语言转换为LLVM-IR,以及优化如删除无用JMP、填充延迟槽等。此外,还涵盖了反汇编、目标流和栈帧处理等方面。
摘要由CSDN通过智能技术生成