aarch64-softfloat: forbid enabling the neon target feature
This commit is contained in:
@@ -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: &[] }
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user