Is it always equivalent to a same-named 32-bit instruction?
Not always. Some C/Zc instructions compress common 32-bit operations, while others have dedicated stack-frame or table-jump semantics.
Restore registers, a0=0, deallocate frame, and ret
CM.POPRETZ (Zcmp) pops registers in {reg_list}, sets a0 to zero, adjusts sp, then ret. Used for function epilogues returning zero. Differs from POPRET by explicitly zeroing a0. Reuses c.fsdsp encoding. Part of Zcmp, depends on Zca.
CM.POPRETZ is the 16-bit encoding form for compressed pop, zero a0, and return; its semantics and encodable register/immediate ranges must be read from the official Zc extension rules.
Understand this scenario with real code like «cm.popretz {ra, s0-s5}, 64 # pop, a0=0, sp+=64, ret».
Understand this scenario with real code like «cm.popretz {ra, s0-s5}, 64 # pop, a0=0, sp+=64, ret».
Understand this scenario with real code like «cm.popretz {ra, s0-s5}, 64 # pop, a0=0, sp+=64, ret».
Not always. Some C/Zc instructions compress common 32-bit operations, while others have dedicated stack-frame or table-jump semantics.
Many 16-bit encodings can represent only a compressed register subset or fixed registers such as sp, ra, a0/a1.