Skip to content

Commit 8142c49

Browse files
committed
rustc_target: Remove fpmr target feature
FEAT_FPMR has been removed from upstream LLVM as of LLVM 19. Remove the feature from the target features list and explicitly enable it in target specs.
1 parent b829f3c commit 8142c49

27 files changed

+28
-27
lines changed

compiler/rustc_codegen_llvm/src/llvm_util.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -306,6 +306,9 @@ pub fn to_llvm_features<'a>(sess: &Session, s: &'a str) -> Option<LLVMFeature<'a
306306
("x86", s) if get_version().0 >= 18 && s.starts_with("avx512") => {
307307
Some(LLVMFeature::with_dependency(s, TargetFeatureFoldStrength::EnableOnly("evex512")))
308308
}
309+
// FPMR is no longer a Rust target feature but instead is enabled by default through target specs
310+
// It only exists as a feature in LLVM 18, cannot be passed down for any other version
311+
("aarch64", "fpmr") if get_version().0 != 18 => None,
309312
(_, s) => Some(LLVMFeature::new(s)),
310313
}
311314
}

compiler/rustc_target/src/spec/targets/aarch64_be_unknown_linux_gnu.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ pub fn target() -> Target {
1414
data_layout: "E-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128-Fn32".into(),
1515
arch: "aarch64".into(),
1616
options: TargetOptions {
17-
features: "+v8a,+outline-atomics".into(),
17+
features: "+v8a,+outline-atomics,+fpmr".into(),
1818
max_atomic_width: Some(128),
1919
stack_probes: StackProbeType::Inline,
2020
mcount: "\u{1}_mcount".into(),

compiler/rustc_target/src/spec/targets/aarch64_be_unknown_linux_gnu_ilp32.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ pub fn target() -> Target {
1818
arch: "aarch64".into(),
1919
options: TargetOptions {
2020
abi: "ilp32".into(),
21-
features: "+v8a,+outline-atomics".into(),
21+
features: "+v8a,+outline-atomics,+fpmr".into(),
2222
stack_probes: StackProbeType::Inline,
2323
mcount: "\u{1}_mcount".into(),
2424
endian: Endian::Big,

compiler/rustc_target/src/spec/targets/aarch64_kmc_solid_asp3.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ pub fn target() -> Target {
1515
arch: "aarch64".into(),
1616
options: TargetOptions {
1717
linker: Some("aarch64-kmc-elf-gcc".into()),
18-
features: "+v8a,+neon,+fp-armv8".into(),
18+
features: "+v8a,+neon,+fp-armv8,+fpmr".into(),
1919
relocation_model: RelocModel::Static,
2020
disable_redzone: true,
2121
max_atomic_width: Some(128),

compiler/rustc_target/src/spec/targets/aarch64_linux_android.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ pub fn target() -> Target {
1919
max_atomic_width: Some(128),
2020
// As documented in https://developer.android.com/ndk/guides/cpu-features.html
2121
// the neon (ASIMD) and FP must exist on all android aarch64 targets.
22-
features: "+v8a,+neon,+fp-armv8".into(),
22+
features: "+v8a,+neon,+fp-armv8,+fpmr".into(),
2323
stack_probes: StackProbeType::Inline,
2424
supported_sanitizers: SanitizerSet::CFI
2525
| SanitizerSet::HWADDRESS

compiler/rustc_target/src/spec/targets/aarch64_nintendo_switch_freestanding.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ pub fn target() -> Target {
1818
data_layout: "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128-Fn32".into(),
1919
arch: "aarch64".into(),
2020
options: TargetOptions {
21-
features: "+v8a".into(),
21+
features: "+v8a,+fpmr".into(),
2222
linker_flavor: LinkerFlavor::Gnu(Cc::No, Lld::Yes),
2323
linker: Some("rust-lld".into()),
2424
link_script: Some(LINKER_SCRIPT.into()),

compiler/rustc_target/src/spec/targets/aarch64_pc_windows_gnullvm.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ use crate::spec::{base, Target};
33
pub fn target() -> Target {
44
let mut base = base::windows_gnullvm::opts();
55
base.max_atomic_width = Some(128);
6-
base.features = "+v8a,+neon,+fp-armv8".into();
6+
base.features = "+v8a,+neon,+fp-armv8,+fpmr".into();
77
base.linker = Some("aarch64-w64-mingw32-clang".into());
88

99
Target {

compiler/rustc_target/src/spec/targets/aarch64_pc_windows_msvc.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ use crate::spec::{base, Target};
33
pub fn target() -> Target {
44
let mut base = base::windows_msvc::opts();
55
base.max_atomic_width = Some(128);
6-
base.features = "+v8a,+neon,+fp-armv8".into();
6+
base.features = "+v8a,+neon,+fp-armv8,+fpmr".into();
77

88
Target {
99
llvm_target: "aarch64-pc-windows-msvc".into(),

compiler/rustc_target/src/spec/targets/aarch64_unknown_freebsd.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ pub fn target() -> Target {
1313
data_layout: "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128-Fn32".into(),
1414
arch: "aarch64".into(),
1515
options: TargetOptions {
16-
features: "+v8a".into(),
16+
features: "+v8a,+fpmr".into(),
1717
max_atomic_width: Some(128),
1818
stack_probes: StackProbeType::Inline,
1919
supported_sanitizers: SanitizerSet::ADDRESS

compiler/rustc_target/src/spec/targets/aarch64_unknown_fuchsia.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ pub fn target() -> Target {
1313
data_layout: "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128-Fn32".into(),
1414
arch: "aarch64".into(),
1515
options: TargetOptions {
16-
features: "+v8a".into(),
16+
features: "+v8a,+fpmr".into(),
1717
max_atomic_width: Some(128),
1818
stack_probes: StackProbeType::Inline,
1919
supported_sanitizers: SanitizerSet::ADDRESS

0 commit comments

Comments
 (0)