about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorFolkert de Vries <folkert@folkertdev.nl>2025-08-19 21:12:53 +0200
committerFolkert de Vries <folkert@folkertdev.nl>2025-08-19 21:17:49 +0200
commit51df7aabbe3140ccca1f63617d7cfdb883509239 (patch)
tree7fe8037dbe292e1776ffe01e0a55996765225558 /src
parent16ad385579cebb6f7d53367c552661b6b51a4a02 (diff)
downloadrust-51df7aabbe3140ccca1f63617d7cfdb883509239.tar.gz
rust-51df7aabbe3140ccca1f63617d7cfdb883509239.zip
add a fallback implementation for the `prefetch_*` intrinsics
The fallback is to just ignore the arguments. That is a valid implementation because this intrinsic is just a hint.

I also added `miri::intrinsic_fallback_is_spec` annotation, so that miri now supports these operations. A prefetch intrinsic call is valid on any pointer.
Diffstat (limited to 'src')
-rw-r--r--src/tools/miri/tests/pass/prefetch.rs23
1 files changed, 23 insertions, 0 deletions
diff --git a/src/tools/miri/tests/pass/prefetch.rs b/src/tools/miri/tests/pass/prefetch.rs
new file mode 100644
index 00000000000..09352695989
--- /dev/null
+++ b/src/tools/miri/tests/pass/prefetch.rs
@@ -0,0 +1,23 @@
+#![feature(core_intrinsics)]
+
+fn main() {
+    static X: [u8; 8] = [0; 8];
+
+    unsafe {
+        ::std::intrinsics::prefetch_read_data(::std::ptr::null::<u8>(), 1);
+        ::std::intrinsics::prefetch_read_data(::std::ptr::dangling::<u8>(), 2);
+        ::std::intrinsics::prefetch_read_data(X.as_ptr(), 3);
+
+        ::std::intrinsics::prefetch_write_data(::std::ptr::null::<u8>(), 1);
+        ::std::intrinsics::prefetch_write_data(::std::ptr::dangling::<u8>(), 2);
+        ::std::intrinsics::prefetch_write_data(X.as_ptr(), 3);
+
+        ::std::intrinsics::prefetch_read_instruction(::std::ptr::null::<u8>(), 1);
+        ::std::intrinsics::prefetch_read_instruction(::std::ptr::dangling::<u8>(), 2);
+        ::std::intrinsics::prefetch_read_instruction(X.as_ptr(), 3);
+
+        ::std::intrinsics::prefetch_write_instruction(::std::ptr::null::<u8>(), 1);
+        ::std::intrinsics::prefetch_write_instruction(::std::ptr::dangling::<u8>(), 2);
+        ::std::intrinsics::prefetch_write_instruction(X.as_ptr(), 3);
+    }
+}