authorgravatar for mail@isaacfreund.comIsaac Freund <mail@isaacfreund.com> 2021-12-10 23:06:08+01:00
committergravatar for mail@isaacfreund.comIsaac Freund <mail@isaacfreund.com> 2021-12-11 00:29:31+01:00
log516945d7d9b4d8b969d037076799d4ed29cecdda
treed2aa342a53aef95f88456a63fa7874f3c51ba3b8
parent7bb6393b593dcf4c8b929fc6b04b576e55f34607
signaturelock-open Commit is signed but in an unrecognized format.

langref: document @prefetch() builtin


1 files changed, 44 insertions(+), 0 deletions(-)

doc/langref.html.in+44
...@@ -8674,6 +8674,50 @@ test "@wasmMemoryGrow" {...@@ -8674,6 +8674,50 @@ test "@wasmMemoryGrow" {
8674 {#see_also|@ctz|@clz#}8674 {#see_also|@ctz|@clz#}
8675 {#header_close#}8675 {#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.
8696pub 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
8677 {#header_open|@ptrCast#}8721 {#header_open|@ptrCast#}
8678 <pre>{#syntax#}@ptrCast(comptime DestType: type, value: anytype) DestType{#endsyntax#}</pre>8722 <pre>{#syntax#}@ptrCast(comptime DestType: type, value: anytype) DestType{#endsyntax#}</pre>
8679 <p>8723 <p>