一起学RISC-V汇编第2讲RISC-V之march与mabi
这一章讲一些RISC-V的一些零碎知识点,后面章节可能要用到这些概念。
1 RISC-V的各种扩展march
x86 与 arm 是增量型ISA,意味着新处理器需要兼容过去所有的指令,这样会导致ISA指令随时间流逝而大幅增长。
而RISC-V被设计为模块化的,这与过去几乎所有的ISA都不同,其核心是RV32I的基础ISA,可运行完整的软件栈。其它扩展都是可选的,这样RISC-V国际基金会将以可选扩展方式缓慢演进指令集,以规避过去增量型ISA带来野蛮生长的现象。
riscv的扩展如下,下表基于《riscv-spec-20191213.pdf》,有些扩展状态没有标出,最新的指令扩展又发生了变化,比如:一些扩展已经定稿了,一些扩展拆开成了几个子扩展,变得更加复杂了,详细信息可参阅最新的riscv-isa-manual
有如下几种状态:
Ratified:表示已经定稿,除非有严重bug,一般不会改
Frozen:冻结状态出现在定稿前,模块预计不会发生重大变化
Draft:表示草稿阶段,可能有较大修改
指令集模块名 | 说明 | 版本 | 状态 |
---|---|---|---|
I | 基本整数指令集,这是RV的基本指令集,是必选的,其它都是可选的。(Integer), RV32I与RV64I 已Ratified |
2.1 | Ratified |
F | 单精度浮点数扩展指令集(Float) | 2.2 | Ratified |
D | 双精度浮点数扩展指令集(Double) | 2.2 | Ratified |
Q | 四倍精度浮点数扩展指令集(Qual) | 2.2 | Ratified |
M | 整型乘除法扩展指令集(Multiple) | 2.0 | Ratified |
C | 压缩指令集(Compress) | 2.0 | Ratified |
A | 原子操作指令集(Atomic) | 2.1 | Ratified |
B | 位操作指令集(Bit) | 0.0 | Draft |
E | 为嵌入式设计的整型指令集(Embedded), RV32E为draft状态 | 1.9 | Draft |
H | 虚拟化扩展指令集(Hyper) | ||
K | 密码运算扩展指令集(Key) | ||
V | 可伸缩矢量扩展指令集(Vector) | 0.7 | Draft |
P | 打包SIMD扩展指令集(packed) | 0.2 | Draft |
J | 动态翻译语言(JIT)扩展指令集 | 0.0 | Draft |
T | 事务内存指令集(Transactional Memory) | ||
N | 用户态中断指令集(User-Level Non-maskable Interrupts) |
2 RISC-V的ABI
ABI(Application Binary Interface)为应用程序二进制接口,RISC-V目前定义了如下几种ABI规范:
详细的ABI规范可见后续函数调用章节。
ABI | 说明 | 状态 |
---|---|---|
ilp32 | 表示整数(I)类型、长(L)类型和指针(P)类型都占用32位。 即ILP32中整数、长整数和指针都使用32位表示 |
Ratified |
ilp32f | 在ilp32的基础上加上单精度浮点F | Ratified |
ilp32d | 在ilp32的基础上加上双精度浮点D | Ratified |
ilp32e | 在ilp32的基础上加上E扩展(嵌入式整数扩展) | Draft |
lp64 | 整数为32位,长(L)类型和指针(P)类型都占用64位 | Ratified |
lp64f | 在lp64基础上加上单精度浮点F | Ratified |
lp64d | 在lp64基础上加上双精度浮点D | Ratified |
lp64q | 在lp64基础上加上四倍精度浮点数扩展指令集 | Ratified |
参考:
-
《riscv-spec-20191213.pdf》