Rollup merge of #52391 - Amanieu:volatile_unaligned, r=alexcrichton
Add unaligned volatile intrinsics Surprisingly enough, it turns out that unaligned volatile loads are actually useful for certain (very niche) types of lock-free code. I included unaligned volatile stores for completeness, but I currently do not know of any use cases for them. These are only exposed as intrinsics for now. If they turn out to be useful in practice, we can work towards stabilizing them. r? @alexcrichton
This commit is contained in:
commit
06ba69d043
6 changed files with 44 additions and 8 deletions
|
|
@ -10,17 +10,24 @@
|
|||
|
||||
#![feature(core_intrinsics, volatile)]
|
||||
|
||||
use std::intrinsics::{volatile_load, volatile_store};
|
||||
use std::intrinsics::{
|
||||
unaligned_volatile_load, unaligned_volatile_store, volatile_load, volatile_store,
|
||||
};
|
||||
use std::ptr::{read_volatile, write_volatile};
|
||||
|
||||
pub fn main() {
|
||||
unsafe {
|
||||
let mut i : isize = 1;
|
||||
let mut i: isize = 1;
|
||||
volatile_store(&mut i, 2);
|
||||
assert_eq!(volatile_load(&i), 2);
|
||||
}
|
||||
unsafe {
|
||||
let mut i : isize = 1;
|
||||
let mut i: isize = 1;
|
||||
unaligned_volatile_store(&mut i, 2);
|
||||
assert_eq!(unaligned_volatile_load(&i), 2);
|
||||
}
|
||||
unsafe {
|
||||
let mut i: isize = 1;
|
||||
write_volatile(&mut i, 2);
|
||||
assert_eq!(read_volatile(&i), 2);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue