Are CSR instructions memory atomics?
No. Atomic here means the CSR read-modify-write is one instruction, not an AMO to memory.
Read CSR into rd, then atomically clear bits in the CSR where the 5-bit immediate has 1s
CSRRCI uses opcode 1110011 (0x73), funct3 111. The rs1 field selects the source register, the 12-bit immediate provides the second operand, and rd selects the destination.
CSRRCI is the immediate variant of CSRRC: reads the current CSR value (zero-extended to XLEN bits) into rd, then uses the 5-bit unsigned immediate (uimm[4:0]) as a bit mask to clear the corresponding bits to 0. If uimm=0, the instruction writes nothing to the CSR and causes no write side effects, enabling safe read-only access. Only CSR bits 0–4 can be affected. Commonly used to atomically clear interrupt pending bits or disable low-order control flags. The assembler pseudo-instruction CSRCI(csr, uimm) is encoded as CSRRCI x0, csr, uimm (clear bits, discard old value).
CSRRCI is a Zicsr atomic CSR read-modify-write instruction. CSR addresses are 12 bits, and whether read/write side effects occur depends on rd and on rs1 or uimm being x0/0.
Understand this scenario with real code like «csrrci x5, mip, 4 # x5 = old mip; clear bit 2 in mip».
Understand this scenario with real code like «csrrci x5, mip, 4 # x5 = old mip; clear bit 2 in mip».
No. Atomic here means the CSR read-modify-write is one instruction, not an AMO to memory.
For CSRRW it suppresses the CSR read and read side effects; CSRRS/CSRRC still read the CSR.