Is CBO.ZERO equivalent to a fence?
No. CMO/prefetch has cache-block semantics and is not a general memory-ordering substitute.
cache-block zero (Zicboz).
CBO.ZERO is a Zicboz cache-block zero instruction that performs stores of zero to all bytes corresponding to the cache block containing the address in rs1. rs1 need not be aligned to the cache-block size; an implementation may update bytes in any order, granularity, and atomicity, and whole-block atomicity is not guaranteed. 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.
Shows the official CMO/prefetch encoding, offset(base) operands, effective-address-to-cache-block selection, and ISA-visible effects.
CBO.ZERO 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 animation shows only architectural semantics from the RISC-V CMO extension: the effective address selects a cache block, execution can be environment-controlled, and prefetch is an ignorable HINT; it does not model concrete cache state, cache-line size, bus transactions, timing, or performance.
CBO.ZERO is a CMO cache-block operation; it locates a cache block by effective address but is not an ordinary load/store.
Understand this scenario with real code like «cbo.zero 0(a1)».
Understand this scenario with real code like «cbo.zero 0(a1)».
Understand this scenario with real code like «cbo.zero 0(a1)».
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.