3 #![feature(core_intrinsics)]
5 use std::intrinsics::*;
9 let mut x: Box<u8> = Box::new(0);
10 let mut y: Box<u8> = Box::new(0);
13 assert_eq!(volatile_load(&*x), 0);
15 assert_eq!(volatile_load(&*x), 1);
17 // test volatile store
18 volatile_store(&mut *x, 2);
21 // test volatile copy memory
22 volatile_copy_memory(&mut *y, &*x, 1);
25 // test volatile copy non-overlapping memory
27 volatile_copy_nonoverlapping_memory(&mut *y, &*x, 1);
30 // test volatile set memory
31 volatile_set_memory(&mut *x, 4, 1);
34 // test unaligned volatile load
35 let arr: [u8; 3] = [1, 2, 3];
36 let ptr = arr[1..].as_ptr() as *const u16;
37 assert_eq!(unaligned_volatile_load(ptr), u16::from_ne_bytes([arr[1], arr[2]]));
39 // test unaligned volatile store
40 let ptr = arr[1..].as_ptr() as *mut u16;
41 unaligned_volatile_store(ptr, 0);
42 assert_eq!(arr, [1, 0, 0]);