Skip to content

Commit 1998ec1

Browse files
committed
langref: document @prefetch() builtin
1 parent 8e3a877 commit 1998ec1

File tree

1 file changed

+44
-0
lines changed

1 file changed

+44
-0
lines changed

doc/langref.html.in

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8674,6 +8674,50 @@ test "@wasmMemoryGrow" {
86748674
{#see_also|@ctz|@clz#}
86758675
{#header_close#}
86768676

8677+
{#header_open|@prefetch#}
8678+
<pre>{#syntax#}@prefetch(ptr: anytype, comptime options: std.builtin.PrefetchOptions){#endsyntax#}</pre>
8679+
<p>
8680+
This builtin tells the compiler to emit a prefetch instruction if supported by the
8681+
target CPU. If the target CPU does not support the requested prefetch instruction,
8682+
this builtin is a noop. This function has no effect on the behavior of the program,
8683+
only on the performance characteristics.
8684+
</p>
8685+
<p>
8686+
The {#syntax#}ptr{#endsyntax#} argument may be any pointer type and determines the memory
8687+
address to prefetch. This function does not dereference the pointer, it is perfectly legal
8688+
to pass a pointer to invalid memory to this function and no illegal behavior will result.
8689+
</p>
8690+
<p>
8691+
The {#syntax#}options{#endsyntax#} argument is the following struct:
8692+
</p>
8693+
{#code_begin|syntax|builtin#}
8694+
/// This data structure is used by the Zig language code generation and
8695+
/// therefore must be kept in sync with the compiler implementation.
8696+
pub const PrefetchOptions = struct {
8697+
/// Whether the prefetch should prepare for a read or a write.
8698+
rw: Rw = .read,
8699+
/// 0 means no temporal locality. That is, the data can be immediately
8700+
/// dropped from the cache after it is accessed.
8701+
///
8702+
/// 3 means high temporal locality. That is, the data should be kept in
8703+
/// the cache as it is likely to be accessed again soon.
8704+
locality: u2 = 3,
8705+
/// The cache that the prefetch should be preformed on.
8706+
cache: Cache = .data,
8707+
8708+
pub const Rw = enum {
8709+
read,
8710+
write,
8711+
};
8712+
8713+
pub const Cache = enum {
8714+
instruction,
8715+
data,
8716+
};
8717+
};
8718+
{#code_end#}
8719+
{#header_close#}
8720+
86778721
{#header_open|@ptrCast#}
86788722
<pre>{#syntax#}@ptrCast(comptime DestType: type, value: anytype) DestType{#endsyntax#}</pre>
86798723
<p>

0 commit comments

Comments
 (0)