跳转至

数据寄存器

通用寄存器

昆明湖 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 位。

浮点寄存器与通用寄存器间传输数据

通用寄存器与浮点寄存器之间可以进行数据传输,精度为单精度,该功能通过传输指令实现。

通用寄存器到浮点寄存器:

  1. FMV.W.X
  2. FCVT.S.W
  3. FCVT.S.WU
  4. FCVT.S.L
  5. FCVT.S.LU

浮点寄存器到通用寄存器:

  1. FMV.X.W
  2. FCVT.W.S
  3. FCVT.WU.S
  4. FCVT.L.S
  5. FCVT.LU.S

向量寄存器

昆明湖 V2R2 支持 RV64 的 V 扩展,具有 32 个 128 位的向量架构寄存器。

向量寄存器与通用寄存器间传输数据

向量寄存器与通用寄存器间可以进行数据传输,该功能由 VMV 指令实现,如下所示:

  1. VMV.V.X 将通用寄存器的值传输给向量寄存器
  2. VMV.S.X 将通用寄存器的值传输给向量寄存器首元素
  3. VMV.X.S 将向量寄存器首元素传输给通用寄存器

向量寄存器与浮点寄存器间传输数据

向量寄存器与浮点寄存器间可以进行数据传输,该功能由 VFMV 指令实现,如下所示:

  1. VFMV.V.F 将浮点寄存器的值传输给向量寄存器
  2. VFMV.S.F 将浮点寄存器的值传输给向量寄存器首元素
  3. VFMV.F.S 将向量寄存器首元素传输给浮点寄存器