rlibc_ext/
lib.rs

1#![deny(warnings)]
2
3#![no_std]
4
5extern crate rlibc;
6
7pub use rlibc::*;
8
9#[cfg(any(target_os="dos", docsrs))]
10use core::arch::asm;
11#[cfg(any(target_os="dos", docsrs))]
12use core::ffi::{c_int, c_char, c_float, c_ulonglong, c_longlong};
13
14#[cfg(any(target_os="dos", docsrs))]
15#[no_mangle]
16pub extern "C" fn _chkstk() { }
17
18#[cfg(any(target_os="dos", docsrs))]
19#[no_mangle]
20#[used]
21pub static mut _fltused: c_int = 0;
22
23#[cfg(any(target_os="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(target_os="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(target_os="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(target_os="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(target_os="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(target_os="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(target_os="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(target_os="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(target_os="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(target_os="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(target_os="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(target_os="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(target_os="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(target_os="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(target_os="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(target_os="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}