1#![deny(warnings)]
2
3#![no_std]
4
5extern crate rlibc;
6
7pub use rlibc::*;
8
9#[cfg(any(dos, docsrs))]
10use core::arch::asm;
11#[cfg(any(dos, docsrs))]
12use core::ffi::{c_int, c_char, c_float, c_ulonglong, c_longlong};
13
14#[cfg(any(dos, docsrs))]
15#[no_mangle]
16pub extern "C" fn _chkstk() { }
17
18#[cfg(any(dos, docsrs))]
19#[no_mangle]
20#[used]
21pub static mut _fltused: c_int = 0;
22
23#[cfg(any(dos, docsrs))]
24#[allow(clippy::missing_safety_doc)]
25#[no_mangle]
26pub unsafe extern "C" fn strlen(s: *const c_char) -> usize {
27 let mut n = s;
28 while *n != 0 {
29 n = n.offset(1);
30 }
31 n.offset_from(s) as usize
32}
33
34#[cfg(any(dos, docsrs))]
35#[allow(clippy::missing_safety_doc)]
36#[no_mangle]
37pub extern "C" fn fminf(x: c_float, y: c_float) -> c_float {
38 if x.is_nan() { return y; }
39 if y.is_nan() { return x; }
40 if x < y { x } else { y }
41}
42
43#[cfg(any(dos, docsrs))]
44#[allow(clippy::missing_safety_doc)]
45#[no_mangle]
46pub unsafe extern "C" fn _aulldiv(a: c_ulonglong, b: c_ulonglong) -> c_ulonglong {
47 a / b
48}
49
50#[cfg(any(dos, docsrs))]
51#[allow(clippy::missing_safety_doc)]
52#[no_mangle]
53pub unsafe extern "C" fn _aullrem(a: c_ulonglong, b: c_ulonglong) -> c_ulonglong {
54 a % b
55}
56
57#[cfg(any(dos, docsrs))]
58#[allow(clippy::missing_safety_doc)]
59#[no_mangle]
60pub unsafe extern "C" fn _alldiv(a: c_longlong, b: c_longlong) -> c_longlong {
61 a / b
62}
63
64#[cfg(any(dos, docsrs))]
65#[allow(clippy::missing_safety_doc)]
66#[no_mangle]
67pub unsafe extern "C" fn _allrem(a: c_longlong, b: c_longlong) -> c_longlong {
68 a % b
69}
70
71#[cfg(any(dos, docsrs))]
72#[allow(clippy::missing_safety_doc)]
73#[no_mangle]
74pub unsafe extern "C" fn __atomic_load(src: *const usize, _model: c_int) -> usize {
75 asm!("cli");
76 let dest = *src;
77 asm!("sti", "nop");
78 dest
79}
80
81#[cfg(any(dos, docsrs))]
82#[allow(clippy::missing_safety_doc)]
83#[no_mangle]
84pub unsafe extern "C" fn __atomic_store(dest: *mut usize, src: usize, _model: c_int) {
85 asm!("cli");
86 *dest = src;
87 asm!("sti", "nop");
88}
89
90#[cfg(any(dos, docsrs))]
91#[allow(clippy::missing_safety_doc)]
92#[no_mangle]
93pub unsafe extern "C" fn __atomic_load_1(src: *const u8, _model: c_int) -> u8 {
94 asm!("cli");
95 let dest = *src;
96 asm!("sti", "nop");
97 dest
98}
99
100#[cfg(any(dos, docsrs))]
101#[allow(clippy::missing_safety_doc)]
102#[no_mangle]
103pub unsafe extern "C" fn __atomic_store_1(dest: *mut u8, src: u8, _model: c_int) {
104 asm!("cli");
105 *dest = src;
106 asm!("sti", "nop");
107}
108
109#[cfg(any(dos, docsrs))]
110#[allow(clippy::missing_safety_doc)]
111#[no_mangle]
112pub unsafe extern "C" fn __atomic_load_2(src: *const u16, _model: c_int) -> u16 {
113 asm!("cli");
114 let dest = *src;
115 asm!("sti", "nop");
116 dest
117}
118
119#[cfg(any(dos, docsrs))]
120#[allow(clippy::missing_safety_doc)]
121#[no_mangle]
122pub unsafe extern "C" fn __atomic_store_2(dest: *mut u16, src: u16, _model: c_int) {
123 asm!("cli");
124 *dest = src;
125 asm!("sti", "nop");
126}
127
128#[cfg(any(dos, docsrs))]
129#[allow(clippy::missing_safety_doc)]
130#[no_mangle]
131pub unsafe extern "C" fn __atomic_load_4(src: *const u32, _model: c_int) -> u32 {
132 asm!("cli");
133 let dest = *src;
134 asm!("sti", "nop");
135 dest
136}
137
138#[cfg(any(dos, docsrs))]
139#[allow(clippy::missing_safety_doc)]
140#[no_mangle]
141pub unsafe extern "C" fn __atomic_store_4(dest: *mut u32, src: u32, _model: c_int) {
142 asm!("cli");
143 *dest = src;
144 asm!("sti", "nop");
145}
146
147#[cfg(any(dos, docsrs))]
148#[allow(clippy::missing_safety_doc)]
149#[no_mangle]
150pub unsafe extern "C" fn __atomic_load_8(src: *const u64, _model: c_int) -> u64 {
151 asm!("cli");
152 let dest = *src;
153 asm!("sti", "nop");
154 dest
155}
156
157#[cfg(any(dos, docsrs))]
158#[allow(clippy::missing_safety_doc)]
159#[no_mangle]
160pub unsafe extern "C" fn __atomic_store_8(dest: *mut u64, src: u64, _model: c_int) {
161 asm!("cli");
162 *dest = src;
163 asm!("sti", "nop");
164}