Linux Audio

Check our new training course

Loading...
v6.2
 1// SPDX-License-Identifier: GPL-2.0
 2
 3//! Our own `compiler_builtins`.
 4//!
 5//! Rust provides [`compiler_builtins`] as a port of LLVM's [`compiler-rt`].
 6//! Since we do not need the vast majority of them, we avoid the dependency
 7//! by providing this file.
 8//!
 9//! At the moment, some builtins are required that should not be. For instance,
10//! [`core`] has 128-bit integers functionality which we should not be compiling
11//! in. We will work with upstream [`core`] to provide feature flags to disable
12//! the parts we do not need. For the moment, we define them to [`panic!`] at
13//! runtime for simplicity to catch mistakes, instead of performing surgery
14//! on `core.o`.
15//!
16//! In any case, all these symbols are weakened to ensure we do not override
17//! those that may be provided by the rest of the kernel.
18//!
19//! [`compiler_builtins`]: https://github.com/rust-lang/compiler-builtins
20//! [`compiler-rt`]: https://compiler-rt.llvm.org/
21
 
22#![feature(compiler_builtins)]
23#![compiler_builtins]
24#![no_builtins]
25#![no_std]
26
27macro_rules! define_panicking_intrinsics(
28    ($reason: tt, { $($ident: ident, )* }) => {
29        $(
30            #[doc(hidden)]
31            #[no_mangle]
32            pub extern "C" fn $ident() {
33                panic!($reason);
34            }
35        )*
36    }
37);
38
39define_panicking_intrinsics!("`f32` should not be used", {
 
40    __eqsf2,
41    __gesf2,
42    __lesf2,
 
 
43    __nesf2,
44    __unordsf2,
45});
46
47define_panicking_intrinsics!("`f64` should not be used", {
 
 
 
 
48    __unorddf2,
49});
50
51define_panicking_intrinsics!("`i128` should not be used", {
52    __ashrti3,
53    __muloti4,
54    __multi3,
55});
56
57define_panicking_intrinsics!("`u128` should not be used", {
58    __ashlti3,
59    __lshrti3,
60    __udivmodti4,
61    __udivti3,
62    __umodti3,
63});
v6.9.4
 1// SPDX-License-Identifier: GPL-2.0
 2
 3//! Our own `compiler_builtins`.
 4//!
 5//! Rust provides [`compiler_builtins`] as a port of LLVM's [`compiler-rt`].
 6//! Since we do not need the vast majority of them, we avoid the dependency
 7//! by providing this file.
 8//!
 9//! At the moment, some builtins are required that should not be. For instance,
10//! [`core`] has 128-bit integers functionality which we should not be compiling
11//! in. We will work with upstream [`core`] to provide feature flags to disable
12//! the parts we do not need. For the moment, we define them to [`panic!`] at
13//! runtime for simplicity to catch mistakes, instead of performing surgery
14//! on `core.o`.
15//!
16//! In any case, all these symbols are weakened to ensure we do not override
17//! those that may be provided by the rest of the kernel.
18//!
19//! [`compiler_builtins`]: https://github.com/rust-lang/compiler-builtins
20//! [`compiler-rt`]: https://compiler-rt.llvm.org/
21
22#![allow(internal_features)]
23#![feature(compiler_builtins)]
24#![compiler_builtins]
25#![no_builtins]
26#![no_std]
27
28macro_rules! define_panicking_intrinsics(
29    ($reason: tt, { $($ident: ident, )* }) => {
30        $(
31            #[doc(hidden)]
32            #[export_name = concat!("__rust", stringify!($ident))]
33            pub extern "C" fn $ident() {
34                panic!($reason);
35            }
36        )*
37    }
38);
39
40define_panicking_intrinsics!("`f32` should not be used", {
41    __addsf3,
42    __eqsf2,
43    __gesf2,
44    __lesf2,
45    __ltsf2,
46    __mulsf3,
47    __nesf2,
48    __unordsf2,
49});
50
51define_panicking_intrinsics!("`f64` should not be used", {
52    __adddf3,
53    __ledf2,
54    __ltdf2,
55    __muldf3,
56    __unorddf2,
57});
58
59define_panicking_intrinsics!("`i128` should not be used", {
60    __ashrti3,
61    __muloti4,
62    __multi3,
63});
64
65define_panicking_intrinsics!("`u128` should not be used", {
66    __ashlti3,
67    __lshrti3,
68    __udivmodti4,
69    __udivti3,
70    __umodti3,
71});
72
73// NOTE: if you are adding a new intrinsic here, you should also add it to
74// `redirect-intrinsics` in `rust/Makefile`.