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

+3
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

+1-1
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

+1-1
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

+1-1
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

+1-1
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

+1-1
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

+1-1
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

+1-1
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

+1-1
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

+1-1
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_hermit.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ pub fn target() -> Target {
1313
arch: "aarch64".into(),
1414
data_layout: "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128-Fn32".into(),
1515
options: TargetOptions {
16-
features: "+v8a,+strict-align,+neon,+fp-armv8".into(),
16+
features: "+v8a,+strict-align,+neon,+fp-armv8,+fpmr".into(),
1717
max_atomic_width: Some(128),
1818
stack_probes: StackProbeType::Inline,
1919
..base::hermit::opts()

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ pub fn target() -> Target {
55
base.add_pre_link_args(LinkerFlavor::Unix(Cc::Yes), &["-std=c99"]);
66
base.max_atomic_width = Some(128);
77
base.supported_sanitizers = SanitizerSet::ADDRESS | SanitizerSet::CFI;
8-
base.features = "+v8a".into();
8+
base.features = "+v8a,+fpmr".into();
99

1010
Target {
1111
// LLVM does not currently have a separate illumos target,

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

+1-1
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,+outline-atomics".into(),
16+
features: "+v8a,+outline-atomics,+fpmr".into(),
1717
mcount: "\u{1}_mcount".into(),
1818
max_atomic_width: Some(128),
1919
stack_probes: StackProbeType::Inline,

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ pub fn target() -> Target {
1414
arch: "aarch64".into(),
1515
options: TargetOptions {
1616
abi: "ilp32".into(),
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_unknown_linux_musl.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ pub fn target() -> Target {
44
let mut base = base::linux_musl::opts();
55
base.max_atomic_width = Some(128);
66
base.supports_xray = true;
7-
base.features = "+v8a".into();
7+
base.features = "+v8a,+fpmr".into();
88
base.stack_probes = StackProbeType::Inline;
99
base.supported_sanitizers = SanitizerSet::ADDRESS
1010
| SanitizerSet::CFI

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

+1-1
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: "+reserve-x18".into(),
21+
features: "+reserve-x18,+fpmr".into(),
2222
mcount: "\u{1}_mcount".into(),
2323
stack_probes: StackProbeType::Inline,
2424
supported_sanitizers: SanitizerSet::ADDRESS

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

+1-1
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
mcount: "__mcount".into(),
1818
max_atomic_width: Some(128),
1919
stack_probes: StackProbeType::Inline,

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ pub fn target() -> Target {
2020
LinkerFlavor::Gnu(Cc::No, Lld::No),
2121
&["--fix-cortex-a53-843419"],
2222
),
23-
features: "+v8a,+strict-align,+neon,+fp-armv8".into(),
23+
features: "+v8a,+strict-align,+neon,+fp-armv8,+fpmr".into(),
2424
supported_sanitizers: SanitizerSet::KCFI | SanitizerSet::KERNELADDRESS,
2525
relocation_model: RelocModel::Static,
2626
disable_redzone: true,

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ pub fn target() -> Target {
1515
abi: "softfloat".into(),
1616
linker_flavor: LinkerFlavor::Gnu(Cc::No, Lld::Yes),
1717
linker: Some("rust-lld".into()),
18-
features: "+v8a,+strict-align,-neon,-fp-armv8".into(),
18+
features: "+v8a,+strict-align,-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_unknown_nto_qnx710.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ pub fn target() -> Target {
2222
data_layout: "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128-Fn32".into(),
2323
arch: "aarch64".into(),
2424
options: TargetOptions {
25-
features: "+v8a".into(),
25+
features: "+v8a,+fpmr".into(),
2626
max_atomic_width: Some(128),
2727
pre_link_args: TargetOptions::link_args(
2828
LinkerFlavor::Gnu(Cc::Yes, Lld::No),

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

+1-1
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
..base::openbsd::opts()

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ pub fn target() -> Target {
44
let mut base = base::redox::opts();
55
base.max_atomic_width = Some(128);
66
base.stack_probes = StackProbeType::Inline;
7-
base.features = "+v8a".into();
7+
base.features = "+v8a,+fpmr".into();
88

99
Target {
1010
llvm_target: "aarch64-unknown-redox".into(),

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ use crate::spec::{base, StackProbeType, Target};
22

33
pub fn target() -> Target {
44
let mut base = base::teeos::opts();
5-
base.features = "+strict-align,+neon,+fp-armv8".into();
5+
base.features = "+strict-align,+neon,+fp-armv8,+fpmr".into();
66
base.max_atomic_width = Some(128);
77
base.stack_probes = StackProbeType::Inline;
88

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ pub fn target() -> Target {
88

99
base.max_atomic_width = Some(128);
1010
base.add_pre_link_args(LinkerFlavor::Msvc(Lld::No), &["/machine:arm64"]);
11-
base.features = "+v8a".into();
11+
base.features = "+v8a,+fpmr".into();
1212

1313
Target {
1414
llvm_target: "aarch64-unknown-windows".into(),

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

+1-1
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_uwp_msvc::opts();
55
base.max_atomic_width = Some(128);
6-
base.features = "+v8a".into();
6+
base.features = "+v8a,+fpmr".into();
77

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

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

+1-1
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
..base::vxworks::opts()

compiler/rustc_target/src/target_features.rs

-2
Original file line numberDiff line numberDiff line change
@@ -133,8 +133,6 @@ const AARCH64_ALLOWED_FEATURES: &[(&str, Stability)] = &[
133133
("fp8dot4", Unstable(sym::aarch64_unstable_target_feature)),
134134
// FEAT_FP8FMA
135135
("fp8fma", Unstable(sym::aarch64_unstable_target_feature)),
136-
// FEAT_FPMR
137-
("fpmr", Unstable(sym::aarch64_unstable_target_feature)),
138136
// FEAT_FRINTTS
139137
("frintts", Stable),
140138
// FEAT_HBC

0 commit comments

Comments
 (0)