shamt=0 时发生什么?
这八个 C.SRAI 编码是指定给 custom use 的 HINT,不是普通的算术右移;HINT 除推进 PC 和适用性能计数器外不修改架构状态。
CB 格式:对 rd' 做算术右移并写回 rd'。
扩展条件:RV32/RV64 的 C/Zca;普通移位量RV32为1–31、RV64为1–63。零移位编码是HINT。
C.SRAI 使用 CB 格式,rd' 仅表示 x8-x15;它将 rd' 算术右移 shamt 位并写回,展开为 srai rd', rd', shamt。RV32C 中 shamt[5] 必须为 0;shamt=0 的八个编码是指定给 custom use 的 HINT,而不是普通 C.SRAI。
只展示官方定义的 16 位字段、操作数、条件和架构状态;不模拟流水线、缓存或时序。
RV32/RV64 C/Zca
C.SRAI 将 rd' 作为同一读写寄存器;算术右移用原始符号位填充空出的高位。
RV32 C/Zca,x8=0xffffff80(-128):c.srai x8, 2 写x8=0xffffffe0(-32),高位复制原符号位。
这八个 C.SRAI 编码是指定给 custom use 的 HINT,不是普通的算术右移;HINT 除推进 PC 和适用性能计数器外不修改架构状态。
RV32C 要求 shamt[5]=0,shamt[5]=1 的编码指定给 custom extensions;RV64C 使用完整的 6 位 shamt 字段。