自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(185)
  • 收藏
  • 关注

原创 LEAN for Math

why LEAN can be used as a tool to study and research math.

2025-09-10 09:11:09 100

原创 Some Notes about Inductive Type in Lean

Some Notes about Inductive Type in Lean.

2025-09-09 14:47:34 707

原创 Some Notes about Universes in Lean

Some Notes about Universes in Lean.

2025-09-08 11:31:10 850

原创 Some notes about Function in Lean

Some notes about Function in Lean.

2025-09-05 11:25:05 844

原创 Some Notes about the Lean Type System

Some Notes about the Lean Type System.

2025-09-04 16:29:05 364

原创 GCC C语言整数转换的理解(Understanding of Integer Conversions in C with GCC)

简而言之,利用 Two's Complement 来表示整数,在宽整数(Wider)转到窄整数(Narrower),无论是否有符号(unsigned or not),都是直接截断(Truncated)成窄整数的,包括同宽度的有符号与无符号互转。反之,通过符号扩展或零扩展,将窄整数转换成宽整数。

2025-08-21 16:51:33 195

原创 QEMU RISCV TCG 详解十三 -- RISCV->X86 例子及注释

RISCV->X86 例子及注释

2025-07-31 09:40:46 197

原创 QEMU RISCV TCG 详解十二 -- TCG Ops -> X86

TCG Ops 转译成 Host ISA(X86)的一般过程。

2025-07-31 09:22:59 545

原创 QEMU RISCV TCG 详解十一 -- RISCV CPU 状态在TCG Variables中的表示(Representation)

在 TCG IR 中,是如何对 RISCV CPU 的寄存器进行访问。关键点在于对 struct ArchCPU* cpu,struct CPUArchState* env,TCGv_*,TCGTemp*,TCGArg 的理解。

2025-07-30 16:43:58 972

原创 QEMU RISCV TCG 详解十 -- RISCV ISA -> TCGOps

RISCV 指令转译成 TCG Ops 的解说。

2025-07-30 11:59:48 1312

原创 QEMU RISCV TCG 详解九 -- 初见SoftMMU (软内存管理器)

Guest Virtual Address -> Guest Physical Address -> Host Virtual Address。

2025-07-29 10:47:19 955

原创 QEMU RISCV TCG 详解八 -- TCGTBCPUState 值的获得

​在《指令转译宏观过程》 中,TB 在 key 值由 一个 TCGTBCPUState 定义,那么 TCGTBCPUState 的 值是如何而来的呢?

2025-07-28 10:13:24 257

原创 QEMU RISCV TCG 详解七 -- 指令转译宏观过程(Binary Translation Overview)

指令转译宏观过程。

2025-07-28 09:58:24 575

原创 QEMU RISCV TCG 详解六 -- RISCV CPU 的使能(How a RISCV CPU Realized)

RISCV CPU 的初始过程有:1. RISCV CPU 类型的注册,基于QEMU类型注册机制, type_init();2. RISCV CPU 的创建,基于 QOM 机制;3. RISCV CPU 的初始化,基于QOM机制;4. RISCV CPU 的使得(realize),基于 realize 属性(property)机制,属于 QOM 的一部分;5. RISCV CPU 的执行(TCG 执行循环)。

2025-07-25 10:20:21 1104

原创 QEMU RISCV TCG 详解五 -- RISCV CPU 的初始化(How a RISCV CPU Initialized)

RISCV CPU 的初始化

2025-07-24 17:05:18 283

原创 QEMU RISCV TCG 详解四 -- RISCV CPU 的构建(How a RISCV CPU Created)

讲述QEMU中 RISCV CPU 的构建过程。

2025-07-24 15:59:46 693

原创 QEMU RISCV TCG 详解三 -- TCGTBCPUState 的认识

TCGTBCPUState 的作用及构建过程。

2025-07-24 09:21:28 332

原创 QEMU RISCV TCG 详解二 -- RISCV CPU Representation

在 QEMU 里,如何表征 RISCV CPU 呢?该代码就位于 qemu/target/riscv/cpu-qom.h 中。

2025-07-23 15:34:03 294

原创 QEMU RISCV TCG 详解一 -- 主执行循环(Main Execution Loop)

​在分析例子之前,先在源代码中,找到对应的解析执行代码,通过代码来查看 QEMU TCG 是如何 将 RISCV ISA 转换成 Host ISA (即 X86_64 ISA)的。

2025-07-23 10:29:04 876

原创 QEMU 的一些理解

通过例子的详细讲解,理解 QEMU的内部运作机制,从而更具象地理解QEMU是如何实现二进制翻译的。

2025-07-16 15:33:35 419

原创 RISCV Linux 虚拟内存精讲系列三 -- setup_vm()

setup_vm()将 kernel_map, trampoline_pg_dir 及 early_pg_dir 配置完成,使得后续的 relocate 可以正常执行,切入虚拟地址访问机制。

2025-07-08 12:00:21 701

原创 RISCV Linux 虚拟内存精讲系列二 -- Linux 入口 head.S

介绍 head.S。

2025-07-07 16:13:22 572 1

原创 RISCV Linux 虚拟内存精讲系列一 Sv39

以 RISCV Linux 以及 RISCV Sv39 为例,通过一系列的文章,详细地梳理清楚 在 RISCV Sv39 上,Linux 是如何实现其虚拟内存机制的。这是该系列的第一篇文章,主要讲述 RISCV Sv39。

2025-07-07 15:09:59 1157 1

原创 QEMU TCG RISCV 转 X86 例子注解 ( RISCV Binary Code to X86 Example Annotation)

例子的功能是往地址 0x1000'0000 写入 'a',即 0x61。

2025-06-19 14:42:27 257

原创 C语言之 比特(bit)、字节(Byte)、字(Word)、整数(Int)

字(Word)的概念就在这些原生类型中抽象出来的,是在语义级(Semantics)上的概念,也就是跟业务逻辑(Business Logic)相关的概念。其由字节(Bytes)所组成,具体多少字节形成一个字(Word),也叫单字(Single World),由其业务逻辑所定义,通常一个字(Word)的大小等于一个整数(Int)。

2025-05-19 11:31:28 453

原创 C语言中类型(Type)的意义

在C语言中,类型(Type)为内存块赋予意义,定义其允许的操作。对象(Object)实质上是内存块,其意义由对象类型决定。类型可视为集合,定义了其包含的值和允许的操作,集合的大小表示该类型的信息量,通过内存块(对象)表示。C语言操作对象是内存块,程序逻辑从类型出发,确保程序正确性。由于C语言的类型系统不丰富,许多程序逻辑无法直接通过类型系统表达,需程序员额外保证正确性,这也是C语言被认为不安全的原因。然而,C语言的高效性源于其对裸机的最薄抽象。因此,使用C语言时,需明确程序逻辑、类型表达及最终生成的汇编代码

2025-05-13 09:33:19 366

原创 C 语言中的 对象(object),表征(Representation),类型(Type),值(Value)

C语言的抽象计算模型(Abstract Computational Model)是图灵完备的图灵机(Turing-Completed Turing Machine)。因此,C语言中所操作的对象(Object)是一块内存。型是用于对内存块赋予意义的,从而定义其允许的操作。而对象实质上内存块,其意义由其对象类型所赋予,并定义其允许的操作。

2025-05-09 15:09:40 274

原创 RISCV GCC 后端 -- 依赖(Dependence)简析

当编译器中的一种优化转换(Optimization Transformation)保留了(Preserve)程序的依赖关系,那么,保留了(Preserve)程序的意义(Meaning),那么该转换(Transformation)是有效的(Valid)。

2025-04-07 11:57:11 396

原创 RISCV GCC 后端 -- 数据流(Data Flow)的一些理解

由于基础块(Basic Block)的属性,连续按顺序执行其指令序列,可以将一个基础块看成一个复合指令,如 <BBOp> defs, uses。

2025-04-02 10:06:44 372

原创 GCC RISCV 后端 -- 控制流(Control Flow)的一些理解

那么,对于不同的指令,抽象来看,都会有其 定义的值/变量(Definitions),以及有其 使用的值或变量(Uses),如上面的,result 为 其定义(defintion),src0, src1为其使用(use)。那么,通过对指令的定义及使用的分析,逐步往上,扩展到 基础块(Basic Block),控制流图(Control Flow Graph)等,实现程序的数据流分析(Data-Flow Analysis)。又例如,Domination Tree 的构建,Live-variable 等。

2025-04-01 17:27:02 372

原创 从图灵机(Turing Machine)到处理器(CPU)的一些理解

处理器(CPU)的原型就是对具备图灵完备的图灵机进行逻辑电路的实现。

2025-03-07 14:49:59 362

原创 GCC RISCV 后端 -- GCC Passes 注释

总结来说,经过初始化后,所有处理过程的实体会以单向列表的形式,分类地有层级地存放在 pass_manager 里面。

2025-03-06 14:40:53 693

原创 GCC RISCV 后端 -- C语言语法分析过程

关键是说明 C 源代码在解析(Parse)后,所存在的形式,如何提供到后面基于过程(Pass)机制的处理。

2025-03-05 19:19:08 551

原创 GCC RISCV 后端 -- cc1 入口

具体到C/C++的代码时,其最小抽象单元是函数,也就是理解函数在业务逻辑中的抽象意涵,也就是,知道函数的原型(Prototype),即其输入、输出、函数名,就能明白其作用。再往上抽象一层就是,类(Class),即对数据结构及相关处理函数的封装。再往上一层抽象就是库(library)。再往上就是包(Package)。这样一步步往上抽象,来组织管理整个程序代码,以使得其复杂度可以控制在便于维护及理解的程度。

2025-03-05 15:47:07 495

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

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

2025-03-04 10:57:24 511

原创 GCC RISCV 后端 -- GCC 构建系统简介

GCC RISCV 后端 -- GCC 构建系统简介

2025-03-03 16:33:22 353

原创 LEAN Compiler Toolchain 之 main 函数入口

前文已经对 LEAN Compiler Toolchain 的构建系统进行了简述,感兴趣的读者可以翻阅一下。本文主要是确定 lean 的 主函数入口,即 main 函数,在那个源文件里。

2025-01-03 15:25:33 319

原创 LEAN Compiler Toolchain 之 构建系统(Build System)

前文有提及过,要研究一个项目,要从其构建系统(Build System)着手。因为,构建系统是用于构建出对应项目的可执行程序(executable, binary)、相关库(libraries)、资源(resources)等。因此,通过对构建系统的研究,可以知道,该项目所要构建的东西是如何一步步构建出来的。

2025-01-03 14:43:05 423

原创 CompCert 之 eval_expr 解析

在 Clight.v 中,定义了 Clight 中间语言的 表达式(Expression)、语句(Statement),以及使用了在 Ctypes.v 中定义的 type,Values.v中定义的 val。因此,在Clight中,涉及到,C语言标准中定义的类型(Type),语句(Statement)以及表达式(Expression)。其中,每个表达式会对应一个类型,以及返回一个值(val)。

2025-01-02 16:17:36 926

原创 CompCert 之 SimplExpr.transl_stmt 与 SimpExpr.transl_expr

CompCert 中的 SimpExpr.transl_stmt 与 SimpExpr.transl_expr 是 将 CompCert C 中间语言(IR) 转换成 Clight 中间语言(IR)的核心处理函数。也就是通过 形式的变换,将 CompCert C 中的带有副作用(side-effect)的表达式,抽出来,转换成,赋值语句(statement)与纯表达式(Pure Expression)。

2024-12-26 12:00:40 181

The Type Theory of LEAN by Mario Carneiro in 2019

Mario Carneiro 于 2019年发布的文章,其中详细描述LEAN的类型理论。

2024-08-31

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除