From 972a1f4c2d01bf3a052596825005ee5fb474809f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakub=20Ber=C3=A1nek?= Date: Tue, 6 Oct 2026 13:00:08 +0200 Subject: [PATCH 1/5] Run the generator from source root To avoid picking up unrelated Cargo `config.toml` file. --- crates/stdarch-gen-loongarch/src/main.rs | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/crates/stdarch-gen-loongarch/src/main.rs b/crates/stdarch-gen-loongarch/src/main.rs index 1fed0b96f9..511bc5b7cd 100644 --- a/crates/stdarch-gen-loongarch/src/main.rs +++ b/crates/stdarch-gen-loongarch/src/main.rs @@ -151,8 +151,8 @@ fn gen_spec(in_file: String, ext_name: &str) -> io::Result<()> { Ok(()) } -fn gen_bind(in_file: &str, ext_name: &str, out_path: &Path) -> io::Result<()> { - let f = File::open(in_file).unwrap_or_else(|_| panic!("Failed to open {in_file}")); +fn gen_bind(path: &Path, filename: &str, ext_name: &str, out_path: &Path) -> io::Result<()> { + let f = File::open(path).unwrap_or_else(|_| panic!("Failed to open {path:?}")); let f = BufReader::new(f); let target: TargetFeature = TargetFeature::new(ext_name); @@ -167,15 +167,15 @@ fn gen_bind(in_file: &str, ext_name: &str, out_path: &Path) -> io::Result<()> { out.push_str(&format!( r#"// This code is automatically generated. DO NOT MODIFY. // -// Instead, modify `{in_file}` and run the following command to re-generate this file: +// Instead, modify `crates/stdarch-gen-loongarch/{filename}` and run the following command to re-generate this file: // // ``` -// OUT_DIR=`pwd`/crates/core_arch cargo run -p stdarch-gen-loongarch -- {in_file} +// OUT_DIR=`pwd`/crates/core_arch cargo run -p stdarch-gen-loongarch -- crates/stdarch-gen-loongarch/{filename} // ``` use crate::mem::transmute; use super::super::*; -"# +"#, )); out.push_str( @@ -1631,10 +1631,11 @@ pub fn main() -> Result<(), String> { let arguments = &args.arguments; if arguments.len() == 1 && (arguments[0] == "lsx" || arguments[0] == "lasx") { let extension = arguments[0].as_str(); - let spec_rel = format!("crates/stdarch-gen-loongarch/{extension}.spec"); + let filename = format!("{extension}.spec"); + let path = crate_dir.join(&filename); let committed = core_arch_src.join("loongarch64").join(extension); run_generator(&ctx, &committed, mode, |out_dir| { - gen_bind(&spec_rel, extension, out_dir) + gen_bind(&path, &filename, extension, out_dir) }) .map_err(|e| e.to_string())?; } else { @@ -1660,7 +1661,7 @@ pub fn main() -> Result<(), String> { .join("src") .join("loongarch64") .join(ext_name); - gen_bind(&in_file, ext_name, &out_path).map_err(|e| e.to_string())?; + gen_bind(Path::new(&in_file), &in_file_name, ext_name, &out_path).map_err(|e| e.to_string())?; } Ok(()) } From 97220751e36af909ae4ace748cf5913fdfbd65ca Mon Sep 17 00:00:00 2001 From: Yilin Chen <1479826151@qq.com> Date: Wed, 7 Oct 2026 14:51:24 +0800 Subject: [PATCH 2/5] remove redundant unsafe --- crates/core_arch/src/arm_shared/hints.rs | 42 +++++++++++++++++------- 1 file changed, 30 insertions(+), 12 deletions(-) diff --git a/crates/core_arch/src/arm_shared/hints.rs b/crates/core_arch/src/arm_shared/hints.rs index ce64e8341e..a531a0a632 100644 --- a/crates/core_arch/src/arm_shared/hints.rs +++ b/crates/core_arch/src/arm_shared/hints.rs @@ -17,8 +17,11 @@ ))] #[inline(always)] #[unstable(feature = "stdarch_arm_hints", issue = "117218")] -pub unsafe fn __wfi() { - hint(HINT_WFI); +pub fn __wfi() { + // SAFETY: The right HINT_WFI constant is passed to the llvm intrinsic。 + unsafe { + hint(HINT_WFI); + } } /// Generates a WFE (wait for event) hint instruction, or nothing. @@ -36,8 +39,11 @@ pub unsafe fn __wfi() { ))] #[inline(always)] #[unstable(feature = "stdarch_arm_hints", issue = "117218")] -pub unsafe fn __wfe() { - hint(HINT_WFE); +pub fn __wfe() { + // SAFETY: The right HINT_WFE constant is passed to the llvm intrinsic。 + unsafe { + hint(HINT_WFE); + } } /// Generates a SEV (send a global event) hint instruction. @@ -54,8 +60,11 @@ pub unsafe fn __wfe() { ))] #[inline(always)] #[unstable(feature = "stdarch_arm_hints", issue = "117218")] -pub unsafe fn __sev() { - hint(HINT_SEV); +pub fn __sev() { + // SAFETY: The right HINT_SEV constant is passed to the llvm intrinsic。 + unsafe { + hint(HINT_SEV); + } } /// Generates a send a local event hint instruction. @@ -72,8 +81,11 @@ pub unsafe fn __sev() { ))] #[inline(always)] #[unstable(feature = "stdarch_arm_hints", issue = "117218")] -pub unsafe fn __sevl() { - hint(HINT_SEVL); +pub fn __sevl() { + // SAFETY: The right HINT_SEVL constant is passed to the llvm intrinsic。 + unsafe { + hint(HINT_SEVL); + } } /// Generates a YIELD hint instruction. @@ -94,8 +106,11 @@ pub unsafe fn __sevl() { ))] #[inline(always)] #[unstable(feature = "stdarch_arm_hints", issue = "117218")] -pub unsafe fn __yield() { - hint(HINT_YIELD); +pub fn __yield() { + // SAFETY: The right HINT_YIELD constant is passed to the llvm intrinsic。 + unsafe { + hint(HINT_YIELD); + } } /// Generates an unspecified no-op instruction. @@ -106,8 +121,11 @@ pub unsafe fn __yield() { /// will increase execution time. #[inline(always)] #[unstable(feature = "stdarch_arm_hints", issue = "117218")] -pub unsafe fn __nop() { - crate::arch::asm!("nop", options(nomem, nostack, preserves_flags)); +pub fn __nop() { + // SAFETY: `nop` performs no operation. + unsafe { + crate::arch::asm!("nop", options(nomem, nostack, preserves_flags)); + } } unsafe extern "llvm-intrinsic" { From 316c32ae85f3958ccc53d5b34f48a4b16f239376 Mon Sep 17 00:00:00 2001 From: Folkert de Vries Date: Fri, 14 Aug 2026 20:02:11 +0200 Subject: [PATCH 3/5] add `core::arch::powerpc::ppcf128` --- crates/core_arch/src/lib.rs | 3 ++- crates/core_arch/src/powerpc/mod.rs | 41 +++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+), 1 deletion(-) diff --git a/crates/core_arch/src/lib.rs b/crates/core_arch/src/lib.rs index 2b7fb15913..0c5daffaf0 100644 --- a/crates/core_arch/src/lib.rs +++ b/crates/core_arch/src/lib.rs @@ -39,7 +39,8 @@ maybe_uninit_as_bytes, movrs_target_feature, clflushopt_target_feature, - min_adt_const_params + min_adt_const_params, + lang_items, )] #![cfg_attr( test, diff --git a/crates/core_arch/src/powerpc/mod.rs b/crates/core_arch/src/powerpc/mod.rs index 9bb1bf2243..e98a738e65 100644 --- a/crates/core_arch/src/powerpc/mod.rs +++ b/crates/core_arch/src/powerpc/mod.rs @@ -2,6 +2,47 @@ pub(crate) mod macros; +/// The IBM extended-precision (double-double) floating-point type. +// FIXME(ppcf128) improve the docs. +#[lang = "ppcf128"] +#[doc(alias = "__ibm128")] +#[doc(alias = "doubledouble")] +#[doc(alias = "f64f64")] +#[unstable(feature = "powerpc_ppcf128", issue = "163323")] +#[allow(non_camel_case_types)] +#[doc(cfg(any(target_arch = "powerpc", target_arch = "powerpc64")))] +#[derive(Clone, Copy)] +pub struct ppcf128(u128); + +#[unstable(feature = "powerpc_ppcf128", issue = "163323")] +impl crate::fmt::Debug for ppcf128 { + fn fmt(&self, f: &mut crate::fmt::Formatter<'_>) -> crate::fmt::Result { + let (hi, lo) = self.to_components(); + write!(f, "ppcf128({hi:?}, {lo:?})") + } +} + +impl ppcf128 { + /// Returns the memory representation of this floating point number as a byte array in + /// native byte order. + #[unstable(feature = "powerpc_ppcf128", issue = "163323")] + #[inline] + pub const fn to_ne_bytes(self) -> [u8; 16] { + // SAFETY: every bit pattern of a `ppcf128` is a valid `[u8; 16]`. + unsafe { crate::mem::transmute::(self) } + } + + /// Returns the large and small component of this floating point number. + #[unstable(feature = "powerpc_ppcf128", issue = "163323")] + #[rustc_const_unstable(feature = "powerpc_ppcf128", issue = "163323")] + #[inline] + pub const fn to_components(self) -> (f64, f64) { + // SAFETY: every bit pattern of a `ppcf128` is a valid `[f64; 2]`. + let [large, small] = unsafe { crate::mem::transmute::(self) }; + (large, small) + } +} + mod altivec; #[unstable(feature = "stdarch_powerpc", issue = "111145")] pub use self::altivec::*; From 8a3641e7ed23c35a2b2b467c711a99736a56f37d Mon Sep 17 00:00:00 2001 From: The rustc-josh-sync Cronjob Bot Date: Mon, 12 Oct 2026 04:22:11 +0000 Subject: [PATCH 4/5] Prepare for merging from rust-lang/rust This updates the rust-version file to 03cbd412d98691c83227b65eddadb7b01db4a190. --- rust-version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rust-version b/rust-version index 271b3a644c..c99a43a763 100644 --- a/rust-version +++ b/rust-version @@ -1 +1 @@ -260f1acad9d7f70b5b56a636a9dc5a7f76150417 +03cbd412d98691c83227b65eddadb7b01db4a190 From adb69721bad9e20a7d74081e5787e494abe926c2 Mon Sep 17 00:00:00 2001 From: The rustc-josh-sync Cronjob Bot Date: Mon, 12 Oct 2026 04:22:17 +0000 Subject: [PATCH 5/5] Run `cargo fmt` --- crates/core_arch/src/lib.rs | 2 +- crates/stdarch-gen-loongarch/src/main.rs | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/crates/core_arch/src/lib.rs b/crates/core_arch/src/lib.rs index 0c5daffaf0..48c92f02b2 100644 --- a/crates/core_arch/src/lib.rs +++ b/crates/core_arch/src/lib.rs @@ -40,7 +40,7 @@ movrs_target_feature, clflushopt_target_feature, min_adt_const_params, - lang_items, + lang_items )] #![cfg_attr( test, diff --git a/crates/stdarch-gen-loongarch/src/main.rs b/crates/stdarch-gen-loongarch/src/main.rs index 511bc5b7cd..de3c74a291 100644 --- a/crates/stdarch-gen-loongarch/src/main.rs +++ b/crates/stdarch-gen-loongarch/src/main.rs @@ -1661,7 +1661,8 @@ pub fn main() -> Result<(), String> { .join("src") .join("loongarch64") .join(ext_name); - gen_bind(Path::new(&in_file), &in_file_name, ext_name, &out_path).map_err(|e| e.to_string())?; + gen_bind(Path::new(&in_file), &in_file_name, ext_name, &out_path) + .map_err(|e| e.to_string())?; } Ok(()) }