DIWBUI.P — Data Cache Empty

Instruction Word

Slot
Inst
6
3
6
2
6
1
6
0
5
9
5
8
5
7
5
6
5
5
5
4
5
3
5
2
5
1
5
0
4
9
4
8
4
7
4
6
4
5
4
4
4
3
4
2
4
1
4
0
3
9
3
8
3
7
3
6
3
5
3
4
3
3
3
2
3
1
3
0
2
9
2
8
2
7
2
6
2
5
2
4
2
3
2
2
2
1
2
0
1
9
1
8
1
7
1
6
1
5
1
4
1
3
1
2
1
1
1
0
9876543210
Format x24 - 24 bit(s) 0
DIWBUI.P 000011110111 10000010
s 3210

Assembler Syntax

DIWBUI.P as

C Syntax

#include <xtensa/tie/xt_datacache.h>

extern void XT_DIWBUI_P(const int * s /*inout*/);

Description

(please consult the Xtensa ® Instruction Set Architecture Reference Manual for any cross references and additional information)

DIWBUI.P uses the virtual address to choose a line in the data cache, unlocks that line, forces that line to be written back to memory if it is dirty, invalidates the line, and increments the address register as by the size of a data cache line. The method for mapping the virtual address to a data cache location is implementation-specific. For set-associative caches, only one line out of one way of the cache is written back and invalidated. Some Xtensa ISA implementations do not support write-back caches.

This instruction is useful for the fastest clearing of the data cache, including locked lines, without destruction of data. It may be used before shutting down all or part of the cache.

DIWBUI.P forms a virtual address simply by using the contents of address register as. The virtual address chooses a cache line without translation and without raising the associated exceptions.

Because the organization of caches is implementation-specific, the operation section below specifies only a call to the implementation's dindexwritebackinval function.

DIWBUI.P is a privileged instruction.

Operation

if CRING != 0 then
	Exception (PrivilegedCause)
else
	vAddr ← AR[s]
	dindexunlockwritebackinval(vAddr)
	AR[s] ← AR[s] + DataCacheLineBytes
endif

Exceptions

EveryInstR Group (see EveryInstR Group:)GenExcep(PrivilegedCause) if Exception OptionMemoryErrorException if Memory ECC/Parity Option

Implementation Pipeline

In Out
ars Estage ars Estage

Protos that use DIWBUI.P

proto DIWBUI.P { inout const int32 * s }{}{
DIWBUI.P s;
}