C.LI

RISC-V C.LI 指令详解

指令手册CI format

将有符号 6 位立即数加载到非零 rd:rd = imm。CI 格式。

指令语法

c.li rd, imm
操作数说明
本指令为 CI format 格式,请根据汇编语法确认各操作数位置。
C压缩指令

指令行为说明

C.LI 使用 CI 格式,将 6 位符号扩展立即数写入非零 rd,并展开为 addi rd, x0, imm。rd 是完整 5 位字段;rd=x0 的编码是 HINT,而不是普通 C.LI 写回。

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

按实际 CR 或 CI 16 位编码解码,并分清普通指令、HINT 与共享编码。

当前步骤

概念步骤:解码 16 位字段

动画直接展示 C 扩展的 16 位字段,而不是把它伪装成 32 位标量指令。

16 位编码
0x556D = 0101010101101101
funct3 [15..13]
010
imm[5] [12]
1
rd [11..7]
01010
imm[4:0] [6..2]
11011
op [1..0]
01
操作数与计算
imm[5:0] = 111011
sext(imm[5:0]) = -5
source is x0 = 0
解码结果与架构状态
C.LI

x10 = 0xFFFFFFFB

动画只展示官方定义的解码、寄存器读取、算术和架构状态,不表示实现的流水线、缓存、预测或时序。

快速理解与检索要点

C.LI 是把一个 6 位有符号立即数写入 rd 的 16 位 CI 编码;常规形式要求 rd 非零。

C.LI 展开为 addi rd, x0, imm,立即数符号扩展到 XLEN。
rd 是完整 5 位字段,但 rd=x0 的编码是 HINT;它不是会改变 x0 的 C.LI。

常见使用场景

数据加载

结合 «c.li x10, 5 # x10 = 5» 等实际代码理解该场景。

使用前检查清单

语法检查
  • 确认当前指令格式为 CI format。
  • 确认操作数排列顺序与示例一致。
语义检查
  • 确认目标寄存器用途和调用约定兼容。
  • 确认该指令不是伪指令展开后的底层形式。

容易混淆 / 常见误区

常规 C.LI 的 rd 必须非零;rd=x0 的编码是 HINT,不写入普通 C.LI 结果。
立即数是有符号 6 位值,范围为 -32 到 31。

常见问题

C.LI 能加载哪些立即数?

C.LI 的 CI 立即数字段是 6 位有符号数,因此可加载 -32 到 31。