一起学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

参考:

  1. 《riscv-spec-20191213.pdf》

  2. 【跟我学RISC-V】(一)认识RISC-V指令集并搭建实验环境

posted @ 2024-07-16 23:42  sureZ_ok  阅读(131)  评论(0编辑  收藏  举报