C.ADDI 的立即数范围是多少?
CI 格式把 imm[5] 和 imm[4:0] 组成 6 位有符号立即数,因此可表示 -32 到 31;常规 C.ADDI 不使用 0。
常规 C.ADDI 将非零有符号 6 位立即数加到非零 rd:rd += imm。CI 格式。
常规 C.ADDI 使用 CI 格式,将非零的 6 位符号扩展立即数加到非零 rd 并写回 rd;它展开为 addi rd, rd, imm。rd 非零而 imm=0 的编码是 HINT。rd=x0、imm=0 是 C.NOP;C.NOP 的 imm 非零编码也是 HINT。
按实际 CR 或 CI 16 位编码解码,并分清普通指令、HINT 与共享编码。
动画直接展示 C 扩展的 16 位字段,而不是把它伪装成 32 位标量指令。
这与 addi rd, rd, imm 的计算过程相同;差别只在于 C.ADDI 使用 16 位 CI 编码和 6 位立即数。
0x156D = 0001010101101101x10 = 0x00000007
动画只展示官方定义的解码、寄存器读取、算术和架构状态,不表示实现的流水线、缓存、预测或时序。
C.ADDI 用 16 位 CI 编码实现 rd 自身加一个 6 位有符号立即数;常规指令形式排除 rd=x0 和 imm=0。
结合 «c.addi x10, 5 # x10 += 5» 等实际代码理解该场景。
结合 «c.addi x10, 5 # x10 += 5» 等实际代码理解该场景。
CI 格式把 imm[5] 和 imm[4:0] 组成 6 位有符号立即数,因此可表示 -32 到 31;常规 C.ADDI 不使用 0。