rlibc_ext/
lib.rs

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_double, c_float, c_ulonglong, c_longlong};
13
14#[cfg(any(dos, docsrs))]
15#[unsafe(no_mangle)]
16pub extern "C" fn _chkstk() { }
17
18#[cfg(any(dos, docsrs))]
19#[unsafe(no_mangle)]
20#[used]
21pub static mut _fltused: c_int = 0;
22
23#[cfg(any(dos, docsrs))]
24#[allow(clippy::missing_safety_doc)]
25#[unsafe(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#[unsafe(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#[unsafe(no_mangle)]
46pub extern "C" fn fmaf(x: c_float, y: c_float, z: c_float) -> c_float {
47    (x * y) + z
48}
49
50#[cfg(any(dos, docsrs))]
51#[allow(clippy::missing_safety_doc)]
52#[unsafe(no_mangle)]
53pub extern "C" fn fma(x: c_double, y: c_double, z: c_double) -> c_double {
54    (x * y) + z
55}
56
57#[cfg(any(dos, docsrs))]
58#[allow(clippy::missing_safety_doc)]
59#[unsafe(no_mangle)]
60pub unsafe extern "C" fn _aulldiv(a: c_ulonglong, b: c_ulonglong) -> c_ulonglong {
61    a / b
62}
63
64#[cfg(any(dos, docsrs))]
65#[allow(clippy::missing_safety_doc)]
66#[unsafe(no_mangle)]
67pub unsafe extern "C" fn _aullrem(a: c_ulonglong, b: c_ulonglong) -> c_ulonglong {
68    a % b
69}
70
71#[cfg(any(dos, docsrs))]
72#[allow(clippy::missing_safety_doc)]
73#[unsafe(no_mangle)]
74pub unsafe extern "C" fn _alldiv(a: c_longlong, b: c_longlong) -> c_longlong {
75    a / b
76}
77
78#[cfg(any(dos, docsrs))]
79#[allow(clippy::missing_safety_doc)]
80#[unsafe(no_mangle)]
81pub unsafe extern "C" fn _allrem(a: c_longlong, b: c_longlong) -> c_longlong {
82    a % b
83}
84
85#[cfg(any(dos, docsrs))]
86#[allow(clippy::missing_safety_doc)]
87#[unsafe(no_mangle)]
88pub unsafe extern "C" fn __atomic_load(src: *const usize, _model: c_int) -> usize {
89    asm!("cli");
90    let dest = *src;
91    asm!("sti", "nop");
92    dest
93}
94
95#[cfg(any(dos, docsrs))]
96#[allow(clippy::missing_safety_doc)]
97#[unsafe(no_mangle)]
98pub unsafe extern "C" fn __atomic_store(dest: *mut usize, src: usize, _model: c_int) {
99    asm!("cli");
100    *dest = src;
101    asm!("sti", "nop");
102}
103
104#[cfg(any(dos, docsrs))]
105#[allow(clippy::missing_safety_doc)]
106#[unsafe(no_mangle)]
107pub unsafe extern "C" fn __atomic_load_1(src: *const u8, _model: c_int) -> u8 {
108    asm!("cli");
109    let dest = *src;
110    asm!("sti", "nop");
111    dest
112}
113
114#[cfg(any(dos, docsrs))]
115#[allow(clippy::missing_safety_doc)]
116#[unsafe(no_mangle)]
117pub unsafe extern "C" fn __atomic_store_1(dest: *mut u8, src: u8, _model: c_int) {
118    asm!("cli");
119    *dest = src;
120    asm!("sti", "nop");
121}
122
123#[cfg(any(dos, docsrs))]
124#[allow(clippy::missing_safety_doc)]
125#[unsafe(no_mangle)]
126pub unsafe extern "C" fn __atomic_load_2(src: *const u16, _model: c_int) -> u16 {
127    asm!("cli");
128    let dest = *src;
129    asm!("sti", "nop");
130    dest
131}
132
133#[cfg(any(dos, docsrs))]
134#[allow(clippy::missing_safety_doc)]
135#[unsafe(no_mangle)]
136pub unsafe extern "C" fn __atomic_store_2(dest: *mut u16, src: u16, _model: c_int) {
137    asm!("cli");
138    *dest = src;
139    asm!("sti", "nop");
140}
141
142#[cfg(any(dos, docsrs))]
143#[allow(clippy::missing_safety_doc)]
144#[unsafe(no_mangle)]
145pub unsafe extern "C" fn __atomic_load_4(src: *const u32, _model: c_int) -> u32 {
146    asm!("cli");
147    let dest = *src;
148    asm!("sti", "nop");
149    dest
150}
151
152#[cfg(any(dos, docsrs))]
153#[allow(clippy::missing_safety_doc)]
154#[unsafe(no_mangle)]
155pub unsafe extern "C" fn __atomic_store_4(dest: *mut u32, src: u32, _model: c_int) {
156    asm!("cli");
157    *dest = src;
158    asm!("sti", "nop");
159}
160
161#[cfg(any(dos, docsrs))]
162#[allow(clippy::missing_safety_doc)]
163#[unsafe(no_mangle)]
164pub unsafe extern "C" fn __atomic_load_8(src: *const u64, _model: c_int) -> u64 {
165    asm!("cli");
166    let dest = *src;
167    asm!("sti", "nop");
168    dest
169}
170
171#[cfg(any(dos, docsrs))]
172#[allow(clippy::missing_safety_doc)]
173#[unsafe(no_mangle)]
174pub unsafe extern "C" fn __atomic_store_8(dest: *mut u64, src: u64, _model: c_int) {
175    asm!("cli");
176    *dest = src;
177    asm!("sti", "nop");
178}