diff options
| author | Ralf Jung <post@ralfj.de> | 2025-01-06 16:16:10 +0100 |
|---|---|---|
| committer | Ralf Jung <post@ralfj.de> | 2025-05-22 12:19:25 +0200 |
| commit | 30c87defe686ca5043e86ad9d795976ce42ca3ff (patch) | |
| tree | 382a7ca6a36202694f54401378e66833d5f67c93 /compiler/rustc_target/src | |
| parent | 2cd37831b0706c9f2d6e7e20eb556dc7548bf732 (diff) | |
| download | rust-30c87defe686ca5043e86ad9d795976ce42ca3ff.tar.gz rust-30c87defe686ca5043e86ad9d795976ce42ca3ff.zip | |
aarch64-softfloat: forbid enabling the neon target feature
Diffstat (limited to 'compiler/rustc_target/src')
| -rw-r--r-- | compiler/rustc_target/src/target_features.rs | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/compiler/rustc_target/src/target_features.rs b/compiler/rustc_target/src/target_features.rs index 99b04ac2720..576c9bd6b57 100644 --- a/compiler/rustc_target/src/target_features.rs +++ b/compiler/rustc_target/src/target_features.rs @@ -980,14 +980,16 @@ impl Target { // the use of soft-float, so all we can do here is some crude hacks. match &*self.abi { "softfloat" => { - // This is not fully correct, LLVM actually doesn't let us enforce the softfloat - // ABI properly... see <https://github.com/rust-lang/rust/issues/134375>. - // FIXME: should we forbid "neon" here? But that would be a breaking change. - NOTHING + // LLVM will use float registers when `fp-armv8` is available, e.g. for + // calls to built-ins. The only way to ensure a consistent softfloat ABI + // on aarch64 is to never enable `fp-armv8`, so we enforce that. + // In Rust we tie `neon` and `fp-armv8` together, therefore `neon` is the + // feature we have to mark as incompatible. + FeatureConstraints { required: &[], incompatible: &["neon"] } } _ => { // Everything else is assumed to use a hardfloat ABI. neon and fp-armv8 must be enabled. - // These are Rust feature names and we use "neon" to control both of them. + // `FeatureConstraints` uses Rust feature names, hence only "neon" shows up. FeatureConstraints { required: &["neon"], incompatible: &[] } } } |
