C.ADDW

RISC-V C.ADDW 指令详解

指令手册CA-format

32位加法再符号扩展至64位。CA格式,RV64C。

指令语法

c.addw rd', rs2'

rd′ 选择 x8–x15,既是旧源又是写回目标;读取旧值后写回。

rs2′ 也选择 x8–x15;同名源具有同一旧值。

RV64C:保留加法低32位,再符号扩展到64位;不是完整64位加法结果。

C压缩指令

指令行为说明

RV64C 的 16 位 CA 格式:将 x[rd'] 与 x[rs2'] 相加,保留低 32 位后符号扩展到 64 位并写回 rd';两个寄存器均为 x8–x15。

C.ADDW 指令解析与执行动画

只展示手册定义的 16 位字段、操作数和 ISA 可见结果;不模拟流水线、缓存、时序或实现的内存异常处理。

c.addw,
执行环境

适用:RV64C,16 位 CA 编码。

x8 = 0xFFFFFFFF80000000; x9 = 0x0000000000000001 -> (0x80000000 + 0x00000001) mod 2^32 = 0x80000001 -> sext.w -> 0xFFFFFFFF80000001 -> x8 = 0xFFFFFFFF80000001
16 位编码字段

rd'=000 -> x8; rs2'=001 -> x9

15..10
funct6
100111
9..7
rd'/rs1'
000
6..5
funct2
01
4..2
rs2'
001
1..0
op
01
执行数据路径
x8 = 0xFFFFFFFF80000000; x9 = 0x0000000000000001
(0x80000000 + 0x00000001) mod 2^32 = 0x80000001 -> sext.w -> 0xFFFFFFFF80000001
x8 <- 0xFFFFFFFF80000001
尚未提交架构状态。

快速理解与检索要点

RV64C 的 16 位 CA 格式:将 x[rd'] 与 x[rs2'] 相加,保留低 32 位后符号扩展到 64 位并写回 rd';两个寄存器均为 x8–x15。

C.ADDW 是真实 16 位编码,语义对应 ADDW,目标同时提供第一个旧源值。
仅 RV64C 有该 W 形式,RV32C 没有。
rd' 和 rs2' 是压缩寄存器子集 x8..x15。

常见使用场景

32 位和的符号扩展

RV64C,旧 x8=0x7fffffff、x9=1:c.addw x8, x9 的低32位和为0x80000000,写 x8=0xffffffff80000000。

使用前检查清单

语法检查
  • rd′ 选择 x8–x15,既是旧源又是写回目标;读取旧值后写回。
  • rs2′ 也选择 x8–x15;同名源具有同一旧值。
语义检查
  • RV64C:保留加法低32位,再符号扩展到64位;不是完整64位加法结果。

容易混淆 / 常见误区

仅 RV64C 有该 W 形式,RV32C 没有。
rd' 和 rs2' 是压缩寄存器子集 x8..x15。

常见问题

c.addw 为什么有寄存器限制?

多数 C 扩展格式用较短字段编码寄存器,因此部分形式只能访问 x8..x15 或固定寄存器。

c.addw 是否只是汇编伪指令?

不是。它是 C 扩展定义的 16 位编码指令。