summaryrefslogtreecommitdiffstats
path: root/vendor/compiler_builtins/src
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-30 03:59:35 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-30 03:59:35 +0000
commitd1b2d29528b7794b41e66fc2136e395a02f8529b (patch)
treea4a17504b260206dec3cf55b2dca82929a348ac2 /vendor/compiler_builtins/src
parentReleasing progress-linux version 1.72.1+dfsg1-1~progress7.99u1. (diff)
downloadrustc-d1b2d29528b7794b41e66fc2136e395a02f8529b.tar.xz
rustc-d1b2d29528b7794b41e66fc2136e395a02f8529b.zip
Merging upstream version 1.73.0+dfsg1.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'vendor/compiler_builtins/src')
-rw-r--r--vendor/compiler_builtins/src/aarch64.rs22
-rw-r--r--vendor/compiler_builtins/src/arm.rs6
-rw-r--r--vendor/compiler_builtins/src/float/add.rs4
-rw-r--r--vendor/compiler_builtins/src/float/cmp.rs4
-rw-r--r--vendor/compiler_builtins/src/float/div.rs4
-rw-r--r--vendor/compiler_builtins/src/float/extend.rs4
-rw-r--r--vendor/compiler_builtins/src/float/mul.rs4
-rw-r--r--vendor/compiler_builtins/src/float/pow.rs4
-rw-r--r--vendor/compiler_builtins/src/float/sub.rs6
-rw-r--r--vendor/compiler_builtins/src/float/trunc.rs4
-rw-r--r--vendor/compiler_builtins/src/int/addsub.rs2
-rw-r--r--vendor/compiler_builtins/src/int/mul.rs2
-rw-r--r--vendor/compiler_builtins/src/int/sdiv.rs2
-rw-r--r--vendor/compiler_builtins/src/int/shift.rs2
-rw-r--r--vendor/compiler_builtins/src/int/specialized_div_rem/binary_long.rs4
-rw-r--r--vendor/compiler_builtins/src/int/specialized_div_rem/mod.rs8
-rw-r--r--vendor/compiler_builtins/src/int/udiv.rs4
-rw-r--r--vendor/compiler_builtins/src/lib.rs7
-rw-r--r--vendor/compiler_builtins/src/macros.rs8
-rw-r--r--vendor/compiler_builtins/src/math.rs4
-rw-r--r--vendor/compiler_builtins/src/x86_64.rs9
21 files changed, 73 insertions, 41 deletions
diff --git a/vendor/compiler_builtins/src/aarch64.rs b/vendor/compiler_builtins/src/aarch64.rs
new file mode 100644
index 000000000..e5747d525
--- /dev/null
+++ b/vendor/compiler_builtins/src/aarch64.rs
@@ -0,0 +1,22 @@
+#![allow(unused_imports)]
+
+use core::intrinsics;
+
+intrinsics! {
+ #[naked]
+ #[cfg(all(target_os = "uefi", not(feature = "no-asm")))]
+ pub unsafe extern "C" fn __chkstk() {
+ core::arch::asm!(
+ ".p2align 2",
+ "lsl x16, x15, #4",
+ "mov x17, sp",
+ "1:",
+ "sub x17, x17, 4096",
+ "subs x16, x16, 4096",
+ "ldr xzr, [x17]",
+ "b.gt 1b",
+ "ret",
+ options(noreturn)
+ );
+ }
+}
diff --git a/vendor/compiler_builtins/src/arm.rs b/vendor/compiler_builtins/src/arm.rs
index a062a54e0..cc67642e1 100644
--- a/vendor/compiler_builtins/src/arm.rs
+++ b/vendor/compiler_builtins/src/arm.rs
@@ -91,7 +91,7 @@ intrinsics! {
#[weak]
#[cfg(not(target_os = "ios"))]
pub unsafe extern "aapcs" fn __aeabi_memcpy(dest: *mut u8, src: *const u8, n: usize) {
- ::mem::memcpy(dest, src, n);
+ crate::mem::memcpy(dest, src, n);
}
#[weak]
@@ -121,7 +121,7 @@ intrinsics! {
#[weak]
#[cfg(not(target_os = "ios"))]
pub unsafe extern "aapcs" fn __aeabi_memmove(dest: *mut u8, src: *const u8, n: usize) {
- ::mem::memmove(dest, src, n);
+ crate::mem::memmove(dest, src, n);
}
#[weak]
@@ -140,7 +140,7 @@ intrinsics! {
#[cfg(not(target_os = "ios"))]
pub unsafe extern "aapcs" fn __aeabi_memset(dest: *mut u8, n: usize, c: i32) {
// Note the different argument order
- ::mem::memset(dest, c, n);
+ crate::mem::memset(dest, c, n);
}
#[weak]
diff --git a/vendor/compiler_builtins/src/float/add.rs b/vendor/compiler_builtins/src/float/add.rs
index 67f6c2c14..804f4b510 100644
--- a/vendor/compiler_builtins/src/float/add.rs
+++ b/vendor/compiler_builtins/src/float/add.rs
@@ -1,5 +1,5 @@
-use float::Float;
-use int::{CastInto, Int};
+use crate::float::Float;
+use crate::int::{CastInto, Int};
/// Returns `a + b`
fn add<F: Float>(a: F, b: F) -> F
diff --git a/vendor/compiler_builtins/src/float/cmp.rs b/vendor/compiler_builtins/src/float/cmp.rs
index 1bd7aa284..1c8917af8 100644
--- a/vendor/compiler_builtins/src/float/cmp.rs
+++ b/vendor/compiler_builtins/src/float/cmp.rs
@@ -1,7 +1,7 @@
#![allow(unreachable_code)]
-use float::Float;
-use int::Int;
+use crate::float::Float;
+use crate::int::Int;
#[derive(Clone, Copy)]
enum Result {
diff --git a/vendor/compiler_builtins/src/float/div.rs b/vendor/compiler_builtins/src/float/div.rs
index c0aae34fb..8c4cf55b8 100644
--- a/vendor/compiler_builtins/src/float/div.rs
+++ b/vendor/compiler_builtins/src/float/div.rs
@@ -2,8 +2,8 @@
// `return`s makes it clear where function exit points are
#![allow(clippy::needless_return)]
-use float::Float;
-use int::{CastInto, DInt, HInt, Int};
+use crate::float::Float;
+use crate::int::{CastInto, DInt, HInt, Int};
fn div32<F: Float>(a: F, b: F) -> F
where
diff --git a/vendor/compiler_builtins/src/float/extend.rs b/vendor/compiler_builtins/src/float/extend.rs
index 39633773b..cffc57510 100644
--- a/vendor/compiler_builtins/src/float/extend.rs
+++ b/vendor/compiler_builtins/src/float/extend.rs
@@ -1,5 +1,5 @@
-use float::Float;
-use int::{CastInto, Int};
+use crate::float::Float;
+use crate::int::{CastInto, Int};
/// Generic conversion from a narrower to a wider IEEE-754 floating-point type
fn extend<F: Float, R: Float>(a: F) -> R
diff --git a/vendor/compiler_builtins/src/float/mul.rs b/vendor/compiler_builtins/src/float/mul.rs
index c89f22756..1b8c61203 100644
--- a/vendor/compiler_builtins/src/float/mul.rs
+++ b/vendor/compiler_builtins/src/float/mul.rs
@@ -1,5 +1,5 @@
-use float::Float;
-use int::{CastInto, DInt, HInt, Int};
+use crate::float::Float;
+use crate::int::{CastInto, DInt, HInt, Int};
fn mul<F: Float>(a: F, b: F) -> F
where
diff --git a/vendor/compiler_builtins/src/float/pow.rs b/vendor/compiler_builtins/src/float/pow.rs
index a75340c30..0232ef405 100644
--- a/vendor/compiler_builtins/src/float/pow.rs
+++ b/vendor/compiler_builtins/src/float/pow.rs
@@ -1,5 +1,5 @@
-use float::Float;
-use int::Int;
+use crate::float::Float;
+use crate::int::Int;
/// Returns `a` raised to the power `b`
fn pow<F: Float>(a: F, b: i32) -> F {
diff --git a/vendor/compiler_builtins/src/float/sub.rs b/vendor/compiler_builtins/src/float/sub.rs
index 8d300e9d2..0ea071b3c 100644
--- a/vendor/compiler_builtins/src/float/sub.rs
+++ b/vendor/compiler_builtins/src/float/sub.rs
@@ -1,6 +1,6 @@
-use float::add::__adddf3;
-use float::add::__addsf3;
-use float::Float;
+use crate::float::add::__adddf3;
+use crate::float::add::__addsf3;
+use crate::float::Float;
intrinsics! {
#[arm_aeabi_alias = __aeabi_fsub]
diff --git a/vendor/compiler_builtins/src/float/trunc.rs b/vendor/compiler_builtins/src/float/trunc.rs
index d73713084..9bc4d6e57 100644
--- a/vendor/compiler_builtins/src/float/trunc.rs
+++ b/vendor/compiler_builtins/src/float/trunc.rs
@@ -1,5 +1,5 @@
-use float::Float;
-use int::{CastInto, Int};
+use crate::float::Float;
+use crate::int::{CastInto, Int};
fn trunc<F: Float, R: Float>(a: F) -> R
where
diff --git a/vendor/compiler_builtins/src/int/addsub.rs b/vendor/compiler_builtins/src/int/addsub.rs
index f4841e90f..f31eff4bd 100644
--- a/vendor/compiler_builtins/src/int/addsub.rs
+++ b/vendor/compiler_builtins/src/int/addsub.rs
@@ -1,4 +1,4 @@
-use int::{DInt, Int};
+use crate::int::{DInt, Int};
trait UAddSub: DInt {
fn uadd(self, other: Self) -> Self {
diff --git a/vendor/compiler_builtins/src/int/mul.rs b/vendor/compiler_builtins/src/int/mul.rs
index 07ce061c9..2538e2f41 100644
--- a/vendor/compiler_builtins/src/int/mul.rs
+++ b/vendor/compiler_builtins/src/int/mul.rs
@@ -1,4 +1,4 @@
-use int::{DInt, HInt, Int};
+use crate::int::{DInt, HInt, Int};
trait Mul: DInt
where
diff --git a/vendor/compiler_builtins/src/int/sdiv.rs b/vendor/compiler_builtins/src/int/sdiv.rs
index f1822f0f8..9d316c76e 100644
--- a/vendor/compiler_builtins/src/int/sdiv.rs
+++ b/vendor/compiler_builtins/src/int/sdiv.rs
@@ -1,4 +1,4 @@
-use int::udiv::*;
+use crate::int::udiv::*;
macro_rules! sdivmod {
(
diff --git a/vendor/compiler_builtins/src/int/shift.rs b/vendor/compiler_builtins/src/int/shift.rs
index c90cf1de3..dbd040187 100644
--- a/vendor/compiler_builtins/src/int/shift.rs
+++ b/vendor/compiler_builtins/src/int/shift.rs
@@ -1,4 +1,4 @@
-use int::{DInt, HInt, Int};
+use crate::int::{DInt, HInt, Int};
trait Ashl: DInt {
/// Returns `a << b`, requires `b < Self::BITS`
diff --git a/vendor/compiler_builtins/src/int/specialized_div_rem/binary_long.rs b/vendor/compiler_builtins/src/int/specialized_div_rem/binary_long.rs
index 0d7822882..2c61a45e0 100644
--- a/vendor/compiler_builtins/src/int/specialized_div_rem/binary_long.rs
+++ b/vendor/compiler_builtins/src/int/specialized_div_rem/binary_long.rs
@@ -13,9 +13,13 @@ macro_rules! impl_binary_long {
$n:tt, // the number of bits in a $iX or $uX
$uX:ident, // unsigned integer type for the inputs and outputs of `$fn`
$iX:ident // signed integer type with same bitwidth as `$uX`
+ $(, $fun_attr:meta)* // attributes for the function
) => {
/// Computes the quotient and remainder of `duo` divided by `div` and returns them as a
/// tuple.
+ $(
+ #[$fun_attr]
+ )*
pub fn $fn(duo: $uX, div: $uX) -> ($uX, $uX) {
let mut duo = duo;
// handle edge cases before calling `$normalization_shift`
diff --git a/vendor/compiler_builtins/src/int/specialized_div_rem/mod.rs b/vendor/compiler_builtins/src/int/specialized_div_rem/mod.rs
index 77034eb54..760f5f5b7 100644
--- a/vendor/compiler_builtins/src/int/specialized_div_rem/mod.rs
+++ b/vendor/compiler_builtins/src/int/specialized_div_rem/mod.rs
@@ -95,8 +95,9 @@ const USE_LZ: bool = {
// LZD or LZCNT on SPARC only exists for the VIS 3 extension and later.
cfg!(target_feature = "vis3")
} else if cfg!(any(target_arch = "riscv32", target_arch = "riscv64")) {
- // The `B` extension on RISC-V determines if a CLZ assembly instruction exists
- cfg!(target_feature = "b")
+ // The 'Zbb' Basic Bit-Manipulation extension on RISC-V
+ // determines if a CLZ assembly instruction exists
+ cfg!(target_feature = "zbb")
} else {
// All other common targets Rust supports should have CLZ instructions
true
@@ -305,5 +306,6 @@ impl_binary_long!(
u32_normalization_shift,
32,
u32,
- i32
+ i32,
+ allow(dead_code)
);
diff --git a/vendor/compiler_builtins/src/int/udiv.rs b/vendor/compiler_builtins/src/int/udiv.rs
index fb09f87d8..c891eede4 100644
--- a/vendor/compiler_builtins/src/int/udiv.rs
+++ b/vendor/compiler_builtins/src/int/udiv.rs
@@ -1,8 +1,8 @@
#[cfg(not(feature = "public-test-deps"))]
-pub(crate) use int::specialized_div_rem::*;
+pub(crate) use crate::int::specialized_div_rem::*;
#[cfg(feature = "public-test-deps")]
-pub use int::specialized_div_rem::*;
+pub use crate::int::specialized_div_rem::*;
intrinsics! {
#[maybe_use_optimized_c_shim]
diff --git a/vendor/compiler_builtins/src/lib.rs b/vendor/compiler_builtins/src/lib.rs
index a6b61bdf5..d1195a4a8 100644
--- a/vendor/compiler_builtins/src/lib.rs
+++ b/vendor/compiler_builtins/src/lib.rs
@@ -14,6 +14,7 @@
#![no_builtins]
#![no_std]
#![allow(unused_features)]
+#![allow(internal_features)]
// We use `u128` in a whole bunch of places which we currently agree with the
// compiler on ABIs and such, so we should be "good enough" for now and changes
// to the `u128` ABI will be reflected here.
@@ -50,7 +51,8 @@ pub mod int;
all(target_arch = "xtensa", target_os = "none"),
all(target_arch = "mips", target_os = "none"),
target_os = "xous",
- all(target_vendor = "fortanix", target_env = "sgx")
+ all(target_vendor = "fortanix", target_env = "sgx"),
+ target_os = "windows"
))]
pub mod math;
pub mod mem;
@@ -58,6 +60,9 @@ pub mod mem;
#[cfg(target_arch = "arm")]
pub mod arm;
+#[cfg(target_arch = "aarch64")]
+pub mod aarch64;
+
#[cfg(all(target_arch = "aarch64", target_os = "linux", not(feature = "no-asm"),))]
pub mod aarch64_linux;
diff --git a/vendor/compiler_builtins/src/macros.rs b/vendor/compiler_builtins/src/macros.rs
index b11114f12..d2b5734d5 100644
--- a/vendor/compiler_builtins/src/macros.rs
+++ b/vendor/compiler_builtins/src/macros.rs
@@ -321,10 +321,10 @@ macro_rules! intrinsics {
#[cfg_attr(not(feature = "mangled-names"), no_mangle)]
#[cfg_attr(feature = "weak-intrinsics", linkage = "weak")]
pub extern $abi fn $name( $($argname: $ty),* )
- -> ::macros::win64_128bit_abi_hack::U64x2
+ -> $crate::macros::win64_128bit_abi_hack::U64x2
{
let e: $($ret)? = super::$name($($argname),*);
- ::macros::win64_128bit_abi_hack::U64x2::from(e)
+ $crate::macros::win64_128bit_abi_hack::U64x2::from(e)
}
}
@@ -540,7 +540,7 @@ pub mod win64_128bit_abi_hack {
impl From<i128> for U64x2 {
fn from(i: i128) -> U64x2 {
- use int::DInt;
+ use crate::int::DInt;
let j = i as u128;
U64x2(j.lo(), j.hi())
}
@@ -548,7 +548,7 @@ pub mod win64_128bit_abi_hack {
impl From<u128> for U64x2 {
fn from(i: u128) -> U64x2 {
- use int::DInt;
+ use crate::int::DInt;
U64x2(i.lo(), i.hi())
}
}
diff --git a/vendor/compiler_builtins/src/math.rs b/vendor/compiler_builtins/src/math.rs
index b4e5fc113..f8f9d225b 100644
--- a/vendor/compiler_builtins/src/math.rs
+++ b/vendor/compiler_builtins/src/math.rs
@@ -2,6 +2,7 @@
#[path = "../libm/src/math/mod.rs"]
mod libm;
+#[allow(unused_macros)]
macro_rules! no_mangle {
($(fn $fun:ident($($iid:ident : $ity:ty),+) -> $oty:ty;)+) => {
intrinsics! {
@@ -95,7 +96,8 @@ no_mangle! {
target_os = "xous",
all(target_arch = "x86_64", target_os = "uefi"),
all(target_arch = "xtensa", target_os = "none"),
- all(target_vendor = "fortanix", target_env = "sgx")
+ all(target_vendor = "fortanix", target_env = "sgx"),
+ target_os = "windows"
))]
intrinsics! {
pub extern "C" fn lgamma_r(x: f64, s: &mut i32) -> f64 {
diff --git a/vendor/compiler_builtins/src/x86_64.rs b/vendor/compiler_builtins/src/x86_64.rs
index 393eeddd8..7ad941158 100644
--- a/vendor/compiler_builtins/src/x86_64.rs
+++ b/vendor/compiler_builtins/src/x86_64.rs
@@ -11,8 +11,7 @@ use core::intrinsics;
intrinsics! {
#[naked]
#[cfg(all(
- windows,
- target_env = "gnu",
+ any(all(windows, target_env = "gnu"), target_os = "uefi"),
not(feature = "no-asm")
))]
pub unsafe extern "C" fn ___chkstk_ms() {
@@ -40,8 +39,7 @@ intrinsics! {
#[naked]
#[cfg(all(
- windows,
- target_env = "gnu",
+ any(all(windows, target_env = "gnu"), target_os = "uefi"),
not(feature = "no-asm")
))]
pub unsafe extern "C" fn __alloca() {
@@ -54,8 +52,7 @@ intrinsics! {
#[naked]
#[cfg(all(
- windows,
- target_env = "gnu",
+ any(all(windows, target_env = "gnu"), target_os = "uefi"),
not(feature = "no-asm")
))]
pub unsafe extern "C" fn ___chkstk() {