Is shamt=0 in C.SLLI an illegal instruction?
No. Within standard RV32C/RV64C encodings it is a HINT: registers and memory stay unchanged, while PC and applicable performance counters advance.
Logical left shift of rd. CI format.
C.SLLI uses CI format to logically shift the value in rd left by shamt and write it back to rd; it expands to slli rd, rd, shamt[5:0]. Code points with shamt=0 or rd=x0 are HINTs. In RV32C, shamt[5] must be zero; shamt[5]=1 code points are designated for custom extensions.
Ordinary shifts retain the low XLEN bits. RV32C shamt[5]=1 belongs to custom space; HINTs do not commit an ordinary shift result.
Not committed; registers, memory and PC retain their initial state.
Teaching stages show ISA-visible effects, not a CPU pipeline, cache, or timing model.
C.SLLI is a 16-bit CI logical left shift that updates rd in place; shamt=0 or rd=x0 is a HINT rather than ordinary C.SLLI execution.
Understand this scenario with real code like «c.slli x10, 2 # RV32C: x10=3 -> x10=12».
No. Within standard RV32C/RV64C encodings it is a HINT: registers and memory stay unchanged, while PC and applicable performance counters advance.