cbo.clean

Cleans an entire cache block globally throughout the system. Exactly what happens is coherence protocol-dependent, but in general it is expected that after this operation(): * The cache block will be in the clean (not dirty) state in any coherent cache holding a valid copy of the line. * The data will be cleaned to a point such that an incoherent load can observe the cleaned data. `cbo.clean` is ordered by `FENCE` instructions but not `FENCE.I` or `SFENCE.VMA`. <%- if CACHE_BLOCK_SIZE.bit_length > [PMP_GRANULARITY, PMA_GRANULARITY].min -%> Both PMP and PMA access control must be the same for all bytes in the block; otherwise, `cbo.clean` has UNSPECIFIED behavior. <%- end -%> Clean operations are treated as stores for page and access permissions. If permission checks fail, one of the following exceptions will occur: <%- if ext?(:H) -%> * `Store/AMO Guest-Page Fault` if virtual memory translation fails during G-stage translation. <%- end -%> * `Store/AMO Page Fault` if virtual memory translation fails <% if ext?(:H) %>when V=0 or during VS-stage translation<% end %> * `Store/AMO Access Fault` if a PMP or PMA access check fails <%- if CACHE_BLOCK_SIZE.bit_length <= [PMP_GRANULARITY, PMA_GRANULARITY].min -%> Because cache blocks are naturally aligned and always fit in a single PMP or PMA regions, the PMP and PMA access checks only need to check a single address in the line. <%- end -%> CBO operations never raise a misaligned address fault.

Synopsis

cbo.clean (xs1)

Encoding

Type:

01415192031010000000001111xs1000000000001
funct7: 0000000
funct3: 010
opcode: 0001111

RISC-V Instruction Encoder/Decoder

open cbo.clean in rvcodecjs

Availability