RV32 Zclsd 与 RV64C 的源寄存器有什么不同?
RV64C 从 rs2 读取64位。RV32 Zclsd 要求偶数 rs2:rs2 保存源值的低32位,rs2+1保存高32位;rs2=x0时整个源为零且不读取x1。
RV64C:从 rs2 压缩存储 64 位双字;RV32 Zclsd:从偶数 rs2/rs2+1 寄存器对存储 64 位值。
扩展条件:RV64 的 C/Zca;或 RV32 的 Zclsd(依赖 Zilsd、Zca,与 Zcf 不兼容)。
C.SDSP 使用 CSS 格式。RV64C 将 rs2 的 64 位值存到 x2/sp 加零扩展、按 8 缩放的偏移地址;RV32 Zclsd 则由偶数 rs2 与 rs2+1 组成 64 位源值。两种形式的有效地址均为 x2 加偏移。
只展示官方定义的 16 位字段、操作数、条件和架构状态;不模拟流水线、缓存或时序。
RV64 C/Zca
自然对齐访问不得产生地址未对齐异常;任何地址仍可能因 EEI 定义的访问权限而产生访问错误。
C.SDSP 的基址固定为 x2/sp;CSS 偏移由编码位重组并按 8 缩放。RV64C 与 RV32 Zclsd 的源寄存器模型不同。
RV64 C/Zca,sp=0x2000、x10=0x0123456789abcdef:c.sdsp x10, 16(sp) 成功时写mem64[0x2010]。RV32 Zclsd同值取x10=0x89abcdef、x11=0x01234567。
RV64C 从 rs2 读取64位。RV32 Zclsd 要求偶数 rs2:rs2 保存源值的低32位,rs2+1保存高32位;rs2=x0时整个源为零且不读取x1。
地址为 8 字节倍数时不得产生地址未对齐异常;地址为 4 字节但不是 8 字节倍数时每个字访问必须原子,但仍可能陷入未对齐异常;其它未对齐情况也可能陷入异常。