C.SLLI 的 shamt=0 是非法指令吗?
不是;在标准 RV32C/RV64C 编码范围内,它是 HINT,不改变寄存器或内存,但仍推进 PC 和适用性能计数器。
C.SLLI 使用 CI 格式,将 rd 的值逻辑左移 shamt 位后写回 rd;它展开为 slli rd, rd, shamt[5:0]。shamt=0 或 rd=x0 的码点是 HINT。RV32C 中 shamt[5] 必须为 0;shamt[5]=1 的码点指定给自定义扩展。
普通移位只保留低 XLEN 位。RV32C 的 shamt[5]=1 属自定义空间;HINT 不写回普通移位结果。
尚未提交;寄存器、内存与 PC 保持初始状态。
教学步骤展示 ISA 可见效果,不表示特定 CPU 的流水线、缓存或时序。
C.SLLI 是 16 位 CI 逻辑左移:它原地更新 rd,shamt=0 或 rd=x0 不是普通 C.SLLI 执行,而是 HINT。
结合 «c.slli x10, 2 # RV32C: x10=3 -> x10=12» 等实际代码理解该场景。
不是;在标准 RV32C/RV64C 编码范围内,它是 HINT,不改变寄存器或内存,但仍推进 PC 和适用性能计数器。