Is CBO.INVAL equivalent to a fence?
No. CMO/prefetch has cache-block semantics and is not a general memory-ordering substitute.
cache-block invalidate (Zicbom).
base selects integer x0–x31; x0 gives address 0. Any explicit offset must be 0 and may be omitted; no destination register is written.
32-bit MISC-MEM: operation=000000000000, rs1=base, funct3=010, rd=00000, opcode=0001111.
RV32/RV64 Zicbom; CBIE and privilege/virtualization state control execution. Illegal, virtual, or store-class access/page/guest-page faults are possible. CMOs have no address-misaligned exception.
Invalidate deallocates copies; CSRs may require flush, and implementations may also substitute flush. Translation selects a physical cache block; the environment supplies its size. Management operations obey store PPO plus ordering before subsequent overlapping-address loads; FENCE classifies them as W/O.
CBO.INVAL is a Zicbom cache-block management instruction that performs an invalidate operation on the cache block containing the address in rs1; depending on CSR programming, lower-privilege execution may trap or perform a flush instead. rs1 need not be aligned to the cache-block size; on faults, the faulting virtual address is the value in rs1. The cache-block size is discovered from the execution environment and is not fixed at 64 bytes; the offset may be omitted, and if present must be 0. An implementation may also perform flush when the CSRs select invalidate.
Shows the official CMO/prefetch encoding, offset(base) operands, effective-address-to-cache-block selection, and ISA-visible effects.
CBO.INVAL uses a 32-bit encoding; the animation starts by splitting the official fields.
The example cache-block size is 64 bytes only to show how the address selects a block; the real size is discovered from the execution environment and is not fixed at 64 bytes. This demonstration assumes identical virtual and physical addresses for the selected block; base x0 gives address 0.
This animation shows only architectural semantics from the RISC-V CMO extension: the effective address is translated before a cache block is selected, CBO execution can be environment-controlled, and prefetch is an ignorable HINT; it does not model concrete cache state, physical mappings, cache-line size, bus transactions, timing, or performance.
CBO.INVAL is a CMO cache-block operation; it locates a cache block by effective address but is not an ordinary load/store.
cbo.inval 0(a1). Initialize the example source and enable the required extensions and state. Assume permitted access, identical virtual/physical addresses, and 64-byte cache blocks.
No. CMO/prefetch has cache-block semantics and is not a general memory-ordering substitute.
CBO instructions do not require rs1 to be aligned to cache-block size.