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}