Something went wrong. Try again.
(I'm so sorry!) Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108// SPDX-License-Identifier: GPL-2.0
//! Our own `compiler_builtins`.//!//! Rust provides [`compiler_builtins`] as a port of LLVM's [`compiler-rt`].//! Since we do not need the vast majority of them, we avoid the dependency//! by providing this file.//!//! At the moment, some builtins are required that should not be. For instance,//! [`core`] has 128-bit integers functionality which we should not be compiling//! in. We will work with upstream [`core`] to provide feature flags to disable//! the parts we do not need. For the moment, we define them to [`panic!`] at//! runtime for simplicity to catch mistakes, instead of performing surgery//! on `core.o`.//!//! In any case, all these symbols are weakened to ensure we do not override//! those that may be provided by the rest of the kernel.//!//! [`compiler_builtins`]: https://github.com/rust-lang/compiler-builtins//! [`compiler-rt`]: https://compiler-rt.llvm.org/
#![allow(internal_features)]#![feature(compiler_builtins)]#![compiler_builtins]#![no_builtins]#![no_std]
macro_rules! define_panicking_intrinsics( ($reason: tt, { $($ident: ident, )* }) => { $( #[doc(hidden)] #[export_name = concat!("__rust", stringify!($ident))] pub extern "C" fn $ident() { panic!($reason); } )* });
define_panicking_intrinsics!("`f32` should not be used", { __addsf3, __eqsf2, __extendsfdf2, __gesf2, __lesf2, __ltsf2, __mulsf3, __nesf2, __truncdfsf2, __unordsf2,});
define_panicking_intrinsics!("`f64` should not be used", { __adddf3, __eqdf2, __ledf2, __ltdf2, __muldf3, __unorddf2,});
define_panicking_intrinsics!("`i128` should not be used", { __ashrti3, __muloti4, __multi3,});
define_panicking_intrinsics!("`u128` should not be used", { __ashlti3, __lshrti3, __udivmodti4, __udivti3, __umodti3,});
#[cfg(target_arch = "arm")]define_panicking_intrinsics!("`f32` should not be used", { __aeabi_fadd, __aeabi_fmul, __aeabi_fcmpeq, __aeabi_fcmple, __aeabi_fcmplt, __aeabi_fcmpun,});
#[cfg(target_arch = "arm")]define_panicking_intrinsics!("`f64` should not be used", { __aeabi_dadd, __aeabi_dmul, __aeabi_dcmple, __aeabi_dcmplt, __aeabi_dcmpun,});
#[cfg(target_arch = "arm")]define_panicking_intrinsics!("`u64` division/modulo should not be used", { __aeabi_uldivmod,});
#[cfg(target_arch = "powerpc")]define_panicking_intrinsics!("`u64` division/modulo should not be used", { __udivdi3, __umoddi3,});
// NOTE: if you are adding a new intrinsic here, you should also add it to// `redirect-intrinsics` in `rust/Makefile`.