]> git.proxmox.com Git - rustc.git/blame - compiler/rustc_codegen_cranelift/src/compiler_builtins.rs
New upstream version 1.70.0+dfsg1
[rustc.git] / compiler / rustc_codegen_cranelift / src / compiler_builtins.rs
CommitLineData
9ffffee4
FG
1#[cfg(all(unix, feature = "jit"))]
2use std::ffi::c_int;
3#[cfg(feature = "jit")]
4use std::ffi::c_void;
5
6// FIXME replace with core::ffi::c_size_t once stablized
7#[allow(non_camel_case_types)]
8#[cfg(feature = "jit")]
9type size_t = usize;
10
5e7ed085 11macro_rules! builtin_functions {
9ffffee4
FG
12 (
13 $register:ident;
14 $(
15 $(#[$attr:meta])?
16 fn $name:ident($($arg_name:ident: $arg_ty:ty),*) -> $ret_ty:ty;
17 )*
18 ) => {
5e7ed085
FG
19 #[cfg(feature = "jit")]
20 #[allow(improper_ctypes)]
21 extern "C" {
9ffffee4
FG
22 $(
23 $(#[$attr])?
24 fn $name($($arg_name: $arg_ty),*) -> $ret_ty;
25 )*
5e7ed085 26 }
cdc7bbd5 27
5e7ed085
FG
28 #[cfg(feature = "jit")]
29 pub(crate) fn $register(builder: &mut cranelift_jit::JITBuilder) {
9ffffee4 30 for (name, val) in [$($(#[$attr])? (stringify!($name), $name as *const u8)),*] {
5e7ed085
FG
31 builder.symbol(name, val);
32 }
cdc7bbd5 33 }
5e7ed085 34 };
cdc7bbd5
XL
35}
36
37builtin_functions! {
38 register_functions_for_jit;
39
40 // integers
41 fn __multi3(a: i128, b: i128) -> i128;
353b0b11 42 fn __muloti4(n: i128, d: i128, oflow: &mut i32) -> i128;
cdc7bbd5
XL
43 fn __udivti3(n: u128, d: u128) -> u128;
44 fn __divti3(n: i128, d: i128) -> i128;
45 fn __umodti3(n: u128, d: u128) -> u128;
46 fn __modti3(n: i128, d: i128) -> i128;
47 fn __rust_u128_addo(a: u128, b: u128) -> (u128, bool);
48 fn __rust_i128_addo(a: i128, b: i128) -> (i128, bool);
49 fn __rust_u128_subo(a: u128, b: u128) -> (u128, bool);
50 fn __rust_i128_subo(a: i128, b: i128) -> (i128, bool);
51 fn __rust_u128_mulo(a: u128, b: u128) -> (u128, bool);
52 fn __rust_i128_mulo(a: i128, b: i128) -> (i128, bool);
53
54 // floats
55 fn __floattisf(i: i128) -> f32;
56 fn __floattidf(i: i128) -> f64;
57 fn __floatuntisf(i: u128) -> f32;
58 fn __floatuntidf(i: u128) -> f64;
59 fn __fixsfti(f: f32) -> i128;
60 fn __fixdfti(f: f64) -> i128;
61 fn __fixunssfti(f: f32) -> u128;
62 fn __fixunsdfti(f: f64) -> u128;
9ffffee4
FG
63
64 // allocator
65 // NOTE: These need to be mentioned here despite not being part of compiler_builtins because
66 // newer glibc resolve dlsym("malloc") to libc.so despite the override in the rustc binary to
67 // use jemalloc. Libraries opened with dlopen still get the jemalloc version, causing multiple
68 // allocators to be mixed, resulting in a crash.
69 fn calloc(nobj: size_t, size: size_t) -> *mut c_void;
70 #[cfg(unix)]
71 fn posix_memalign(memptr: *mut *mut c_void, align: size_t, size: size_t) -> c_int;
72 fn malloc(size: size_t) -> *mut c_void;
73 fn realloc(p: *mut c_void, size: size_t) -> *mut c_void;
74 fn free(p: *mut c_void) -> ();
75
cdc7bbd5 76}