1#![deny(warnings)]
2
3#![no_std]
4
5#[cfg(pc_atomics)]
6mod atomics {
7 use core::arch::asm;
8 use core::ffi::c_int;
9
10 #[no_mangle]
11 unsafe extern "C" fn __atomic_load(src: *const usize, _model: c_int) -> usize {
12 asm!("cli");
13 let dest = *src;
14 asm!("sti", "nop");
15 dest
16 }
17
18 #[no_mangle]
19 unsafe extern "C" fn __atomic_store(dest: *mut usize, src: usize, _model: c_int) {
20 asm!("cli");
21 *dest = src;
22 asm!("sti", "nop");
23 }
24
25 #[no_mangle]
26 unsafe extern "C" fn __atomic_load_1(src: *const u8, _model: c_int) -> u8 {
27 asm!("cli");
28 let dest = *src;
29 asm!("sti", "nop");
30 dest
31 }
32
33 #[no_mangle]
34 unsafe extern "C" fn __atomic_store_1(dest: *mut u8, src: u8, _model: c_int) {
35 asm!("cli");
36 *dest = src;
37 asm!("sti", "nop");
38 }
39
40 #[no_mangle]
41 unsafe extern "C" fn __atomic_load_2(src: *const u16, _model: c_int) -> u16 {
42 asm!("cli");
43 let dest = *src;
44 asm!("sti", "nop");
45 dest
46 }
47
48 #[no_mangle]
49 unsafe extern "C" fn __atomic_store_2(dest: *mut u16, src: u16, _model: c_int) {
50 asm!("cli");
51 *dest = src;
52 asm!("sti", "nop");
53 }
54
55 #[no_mangle]
56 unsafe extern "C" fn __atomic_load_4(src: *const u32, _model: c_int) -> u32 {
57 asm!("cli");
58 let dest = *src;
59 asm!("sti", "nop");
60 dest
61 }
62
63 #[no_mangle]
64 unsafe extern "C" fn __atomic_store_4(dest: *mut u32, src: u32, _model: c_int) {
65 asm!("cli");
66 *dest = src;
67 asm!("sti", "nop");
68 }
69
70 #[no_mangle]
71 unsafe extern "C" fn __atomic_load_8(src: *const u64, _model: c_int) -> u64 {
72 asm!("cli");
73 let dest = *src;
74 asm!("sti", "nop");
75 dest
76 }
77
78 #[no_mangle]
79 unsafe extern "C" fn __atomic_store_8(dest: *mut u64, src: u64, _model: c_int) {
80 asm!("cli");
81 *dest = src;
82 asm!("sti", "nop");
83 }
84}