What happens if the related CFI feature is inactive for C.SSPUSH?
Assuming Zcmop is present, xSSE=0 retains the corresponding C.MOP behavior: no shadow-stack access, ssp update, or register write.
With xSSE=1, C.SSPUSH pushes the fixed x1 value onto the shadow stack.
C.SSPUSH x1 (Zicfiss, depending on Zcmop) uses the C.MOP.1 encoding and, when xSSE=1, is equivalent to SSPUSH x1: it stores x1 at ssp - XLEN/8; only after that store succeeds does ssp decrement by XLEN/8 and commit. When Zicfiss is not active it follows the C.MOP.1 Zcmop behavior.
Shows only official encodings, conditions, and architectural results; it does not imply a microarchitecture.
This compressed encoding has no variable explicit register: C.SSPUSH fixes x1; C.SSPOPCHK fixes x5.
Assumes Zicfiss, Zcmop and their dependencies. xSSE is the effective enable for the current privilege mode. Only aligned ssp is modeled; RV64 assumes UXLEN/SXLEN are always 64.
C.SSPUSH is the fixed-x1 Zicfiss shadow-stack push; ssp decrements only when xSSE=1 and the store succeeds.
Understand this scenario with real code like «c.sspush x1 # push ra onto shadow stack».
Understand this scenario with real code like «c.sspush x1 # push ra onto shadow stack».
Assuming Zcmop is present, xSSE=0 retains the corresponding C.MOP behavior: no shadow-stack access, ssp update, or register write.
With xSSE=1, x1 is stored at ssp−XLEN/8; ssp decrements by XLEN/8 only after a successful store. A store fault prevents that update.