dcbi
Data Cache Block Invalidate - 7C 00 03 AC
dcbi
Instruction Syntax
Mnemonic | Format | Flags |
dcbi | rA,rB | - |
Instruction Encoding
0
1
1
1
1
1
0
0
0
0
0
A
A
A
A
A
B
B
B
B
B
0
1
1
1
0
1
0
1
1
0
0
Field | Bits | Description |
Primary Opcode | 0-5 | 011111 (0x1F) |
Reserved | 6-10 | 00000 |
rA | 11-15 | Register A (base address) |
rB | 16-20 | Register B (index) |
Reserved | 21 | 0 |
XO | 22-30 | 111010110 (470) |
Reserved | 31 | 0 |
Operation
if rA = 0 then EA ← (rB) else EA ← (rA) + (rB)
Invalidate cache block containing EA
The data cache block invalidate instruction marks the cache block containing the effective address as invalid without writing any modified data to memory. If the cache block contains modified data, that data is lost.
Note: This instruction is used when it is known that the cache contents are no longer valid or when the memory will be updated by another mechanism.
Affected Registers
None - This instruction does not affect any registers.
For more information on cache management see Section 3.2, "Cache Management Instructions," in the PowerPC Microprocessor Family: The Programming Environments manual.
Examples
Basic Cache Block Invalidate
# Invalidate a specific cache block lis r3, data_buffer@ha # Load high part of buffer address addi r3, r3, data_buffer@l # Complete buffer address dcbi 0, r3 # Invalidate cache block
Invalidate Multiple Cache Blocks
# Invalidate entire buffer from cache lis r3, stale_buffer@ha addi r3, r3, stale_buffer@l li r4, 0 # Start offset li r5, 1024 # Buffer size li r6, 32 # Cache line size invalidate_loop: dcbi r3, r4 # Invalidate cache block add r4, r4, r6 # Next cache line cmpw r4, r5 # Check if done blt invalidate_loop # Continue if more blocks
Memory-Mapped I/O Cache Invalidation
# Invalidate cache for memory-mapped I/O region lis r3, mmio_base@ha addi r3, r3, mmio_base@l li r4, 0 li r5, 256 # Size of MMIO region mmio_invalidate_loop: dcbi r3, r4 # Invalidate cache block addi r4, r4, 32 # Next cache line (32-byte lines) cmpwi r4, r5 # Check bounds blt mmio_invalidate_loop # Continue until done
Preparing for DMA Operation
# Invalidate cache before DMA read operation # (when DMA will overwrite the entire buffer) lis r3, dma_buffer@ha addi r3, r3, dma_buffer@l dcbi 0, r3 # Invalidate first cache line dcbi 32, r3 # Invalidate second cache line # Continue for entire DMA buffer size