#![feature(no_core, intrinsics, lang_items)] #![feature(adt_const_params)] #![crate_type = "rlib"] #![no_core] pub enum AtomicOrdering { // These values must match the compiler's `AtomicOrdering` defined in // `rustc_middle/src/ty/consts/int.rs`! Relaxed = 0, Release = 1, Acquire = 2, AcqRel = 3, SeqCst = 4, } #[rustc_intrinsic] unsafe fn atomic_xadd(dst: *mut T, src: U) -> T; #[lang = "pointee_sized"] pub trait PointeeSized {} #[lang = "meta_sized"] pub trait MetaSized: PointeeSized {} #[lang = "sized"] pub trait Sized: MetaSized {} #[lang = "copy"] trait Copy {} #[lang = "freeze"] trait Freeze {} #[lang = "const_param_ty"] pub trait ConstParamTy {} impl Copy for *mut T {} impl ConstParamTy for AtomicOrdering {} #[cfg(target_has_atomic = "8")] #[unsafe(no_mangle)] // let's make sure we actually generate a symbol to check pub unsafe fn atomic_u8(x: *mut u8) { atomic_xadd::<_, _, { AtomicOrdering::SeqCst }>(x, 1u8); } #[cfg(target_has_atomic = "8")] #[unsafe(no_mangle)] pub unsafe fn atomic_i8(x: *mut i8) { atomic_xadd::<_, _, { AtomicOrdering::SeqCst }>(x, 1i8); } #[cfg(target_has_atomic = "16")] #[unsafe(no_mangle)] pub unsafe fn atomic_u16(x: *mut u16) { atomic_xadd::<_, _, { AtomicOrdering::SeqCst }>(x, 1u16); } #[cfg(target_has_atomic = "16")] #[unsafe(no_mangle)] pub unsafe fn atomic_i16(x: *mut i16) { atomic_xadd::<_, _, { AtomicOrdering::SeqCst }>(x, 1i16); } #[cfg(target_has_atomic = "32")] #[unsafe(no_mangle)] pub unsafe fn atomic_u32(x: *mut u32) { atomic_xadd::<_, _, { AtomicOrdering::SeqCst }>(x, 1u32); } #[cfg(target_has_atomic = "32")] #[unsafe(no_mangle)] pub unsafe fn atomic_i32(x: *mut i32) { atomic_xadd::<_, _, { AtomicOrdering::SeqCst }>(x, 1i32); } #[cfg(target_has_atomic = "64")] #[unsafe(no_mangle)] pub unsafe fn atomic_u64(x: *mut u64) { atomic_xadd::<_, _, { AtomicOrdering::SeqCst }>(x, 1u64); } #[cfg(target_has_atomic = "64")] #[unsafe(no_mangle)] pub unsafe fn atomic_i64(x: *mut i64) { atomic_xadd::<_, _, { AtomicOrdering::SeqCst }>(x, 1i64); } #[cfg(target_has_atomic = "128")] #[unsafe(no_mangle)] pub unsafe fn atomic_u128(x: *mut u128) { atomic_xadd::<_, _, { AtomicOrdering::SeqCst }>(x, 1u128); } #[cfg(target_has_atomic = "128")] #[unsafe(no_mangle)] pub unsafe fn atomic_i128(x: *mut i128) { atomic_xadd::<_, _, { AtomicOrdering::SeqCst }>(x, 1i128); } #[cfg(target_has_atomic = "ptr")] #[unsafe(no_mangle)] pub unsafe fn atomic_usize(x: *mut usize) { atomic_xadd::<_, _, { AtomicOrdering::SeqCst }>(x, 1usize); } #[cfg(target_has_atomic = "ptr")] #[unsafe(no_mangle)] pub unsafe fn atomic_isize(x: *mut isize) { atomic_xadd::<_, _, { AtomicOrdering::SeqCst }>(x, 1isize); }