数据寄存器
通用寄存器
昆明湖 V2R2 具有 32 个 64 位的通用寄存器,其功能可以参照 RISC-V 的手册定义,如下表
| 寄存器 | ABI名称 | 描述 | 保存者 |
|---|---|---|---|
| x0 | zero | 硬件连线0 | \ |
| x1 | ra | 返回地址 | 调用者 |
| x2 | sp | 堆栈指针 | 被调用者 |
| x3 | gp | 全局指针 | \ |
| x4 | tp | 线程指针 | \ |
| x5 | t0 | 临时/备用链接寄存器 | 调用者 |
| x6-7 | t1-2 | 临时寄存器 | 调用者 |
| x8 | s0/fp | 保留寄存器/帧指针 | 被调用者 |
| x9 | s1 | 保留寄存器 | 被调用者 |
| x10-11 | a0-1 | 函数参数/返回值 | 调用者 |
| x12-17 | a2-7 | 函数参数 | 调用者 |
| x18-27 | s2-11 | 保留寄存器 | 被调用者 |
| x28-31 | t3-6 | 临时寄存器 | 调用者 |
浮点寄存器
昆明湖 V2R2 支持 RV64 的 F 扩展与 D 扩展,具有 32 个 64 位的浮点寄存器,其功能可以参照 RISC-V 的手册定义,如下表
| 寄存器 | ABI名称 | 描述 | 保存者 |
|---|---|---|---|
| f0-7 | ft0-7 | 浮点临时寄存器 | 调用者 |
| f8-9 | fs0-1 | 浮点保留寄存器 | 被调用者 |
| f10-11 | fa0-1 | 浮点参数/返回值 | 调用者 |
| f12-17 | fa2-7 | 浮点参数 | 调用者 |
| f18-27 | fs2-11 | 浮点保留寄存器 | 被调用者 |
| f28-31 | ft8-11 | 浮点临时寄存器 | 调用者 |
昆明湖 V2R2 同时支持单精度浮点运算与双精度浮点运算,在进行单精度浮点运算时,只使用浮点寄存器的低 32 位。 昆明湖 V2R2 还支持 zfa 扩展中的半精度运算,它们仅仅使用浮点寄存器的低 16 位。
浮点寄存器与通用寄存器间传输数据
通用寄存器与浮点寄存器之间可以进行数据传输,精度为单精度,该功能通过传输指令实现。
通用寄存器到浮点寄存器:
- FMV.W.X
- FCVT.S.W
- FCVT.S.WU
- FCVT.S.L
- FCVT.S.LU
浮点寄存器到通用寄存器:
- FMV.X.W
- FCVT.W.S
- FCVT.WU.S
- FCVT.L.S
- FCVT.LU.S
向量寄存器
昆明湖 V2R2 支持 RV64 的 V 扩展,具有 32 个 128 位的向量架构寄存器。
向量寄存器与通用寄存器间传输数据
向量寄存器与通用寄存器间可以进行数据传输,该功能由 VMV 指令实现,如下所示:
- VMV.V.X 将通用寄存器的值传输给向量寄存器
- VMV.S.X 将通用寄存器的值传输给向量寄存器首元素
- VMV.X.S 将向量寄存器首元素传输给通用寄存器
向量寄存器与浮点寄存器间传输数据
向量寄存器与浮点寄存器间可以进行数据传输,该功能由 VFMV 指令实现,如下所示:
- VFMV.V.F 将浮点寄存器的值传输给向量寄存器
- VFMV.S.F 将浮点寄存器的值传输给向量寄存器首元素
- VFMV.F.S 将向量寄存器首元素传输给浮点寄存器