about summary refs log tree commit diff
diff options
context:
space:
mode:
authorAurelia Molzer <5550310+197g@users.noreply.github.com>2025-07-24 14:41:07 +0200
committerAurelia Molzer <5550310+197g@users.noreply.github.com>2025-07-24 14:52:26 +0200
commitbe947d4d2ba7acc99010c5e41f5bb5e517bcfee1 (patch)
tree37324dc6fa26214bf67e7430fbf77cc65e8c4412
parent0231fa9adfdc4c03d122087a4400a8199b97a369 (diff)
downloadrust-be947d4d2ba7acc99010c5e41f5bb5e517bcfee1.tar.gz
rust-be947d4d2ba7acc99010c5e41f5bb5e517bcfee1.zip
Add non-temporal note for maskmoveu_si128
Like any other non-temporal instructions this has additional safety requirements
due to the mismatch with the Rust memory model. It is vital to know when using
this instruction.
-rw-r--r--library/stdarch/crates/core_arch/src/x86/sse2.rs11
1 files changed, 10 insertions, 1 deletions
diff --git a/library/stdarch/crates/core_arch/src/x86/sse2.rs b/library/stdarch/crates/core_arch/src/x86/sse2.rs
index 3dabcde18ce..1eaa89663b2 100644
--- a/library/stdarch/crates/core_arch/src/x86/sse2.rs
+++ b/library/stdarch/crates/core_arch/src/x86/sse2.rs
@@ -1272,7 +1272,7 @@ pub unsafe fn _mm_loadu_si128(mem_addr: *const __m128i) -> __m128i {
 }
 
 /// Conditionally store 8-bit integer elements from `a` into memory using
-/// `mask`.
+/// `mask` flagged as non-temporal (unlikely to be used again soon).
 ///
 /// Elements are not stored when the highest bit is not set in the
 /// corresponding element.
@@ -1281,6 +1281,15 @@ pub unsafe fn _mm_loadu_si128(mem_addr: *const __m128i) -> __m128i {
 /// to be aligned on any particular boundary.
 ///
 /// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_maskmoveu_si128)
+///
+/// # Safety of non-temporal stores
+///
+/// After using this intrinsic, but before any other access to the memory that this intrinsic
+/// mutates, a call to [`_mm_sfence`] must be performed by the thread that used the intrinsic. In
+/// particular, functions that call this intrinsic should generally call `_mm_sfence` before they
+/// return.
+///
+/// See [`_mm_sfence`] for details.
 #[inline]
 #[target_feature(enable = "sse2")]
 #[cfg_attr(test, assert_instr(maskmovdqu))]