1
Fork 0

Stabilise aarch64_target_feature

This commit is contained in:
Adam Gemmell 2022-02-10 16:43:45 +00:00
parent 39961390ad
commit 5a5621791f
8 changed files with 64 additions and 58 deletions

View file

@ -44,105 +44,108 @@ const ARM_ALLOWED_FEATURES: &[(&str, Option<Symbol>)] = &[
const AARCH64_ALLOWED_FEATURES: &[(&str, Option<Symbol>)] = &[ const AARCH64_ALLOWED_FEATURES: &[(&str, Option<Symbol>)] = &[
// FEAT_AdvSimd // FEAT_AdvSimd
("neon", Some(sym::aarch64_target_feature)), ("neon", None),
// FEAT_FP // FEAT_FP
("fp", Some(sym::aarch64_target_feature)), ("fp", None),
// FEAT_FP16 // FEAT_FP16
("fp16", Some(sym::aarch64_target_feature)), ("fp16", None),
// FEAT_SVE // FEAT_SVE
("sve", Some(sym::aarch64_target_feature)), ("sve", None),
// FEAT_CRC // FEAT_CRC
("crc", Some(sym::aarch64_target_feature)), ("crc", None),
// FEAT_RAS // FEAT_RAS
("ras", Some(sym::aarch64_target_feature)), ("ras", None),
// FEAT_LSE // FEAT_LSE
("lse", Some(sym::aarch64_target_feature)), ("lse", None),
// FEAT_RDM // FEAT_RDM
("rdm", Some(sym::aarch64_target_feature)), ("rdm", None),
// FEAT_RCPC // FEAT_RCPC
("rcpc", Some(sym::aarch64_target_feature)), ("rcpc", None),
// FEAT_RCPC2 // FEAT_RCPC2
("rcpc2", Some(sym::aarch64_target_feature)), ("rcpc2", None),
// FEAT_DotProd // FEAT_DotProd
("dotprod", Some(sym::aarch64_target_feature)), ("dotprod", None),
// FEAT_TME // FEAT_TME
("tme", Some(sym::aarch64_target_feature)), ("tme", None),
// FEAT_FHM // FEAT_FHM
("fhm", Some(sym::aarch64_target_feature)), ("fhm", None),
// FEAT_DIT // FEAT_DIT
("dit", Some(sym::aarch64_target_feature)), ("dit", None),
// FEAT_FLAGM // FEAT_FLAGM
("flagm", Some(sym::aarch64_target_feature)), ("flagm", None),
// FEAT_SSBS // FEAT_SSBS
("ssbs", Some(sym::aarch64_target_feature)), ("ssbs", None),
// FEAT_SB // FEAT_SB
("sb", Some(sym::aarch64_target_feature)), ("sb", None),
// FEAT_PAUTH (address authentication) // FEAT_PAUTH (address authentication)
("paca", Some(sym::aarch64_target_feature)), ("paca", None),
// FEAT_PAUTH (generic authentication) // FEAT_PAUTH (generic authentication)
("pacg", Some(sym::aarch64_target_feature)), ("pacg", None),
// FEAT_DPB // FEAT_DPB
("dpb", Some(sym::aarch64_target_feature)), ("dpb", None),
// FEAT_DPB2 // FEAT_DPB2
("dpb2", Some(sym::aarch64_target_feature)), ("dpb2", None),
// FEAT_SVE2 // FEAT_SVE2
("sve2", Some(sym::aarch64_target_feature)), ("sve2", None),
// FEAT_SVE2_AES // FEAT_SVE2_AES
("sve2-aes", Some(sym::aarch64_target_feature)), ("sve2-aes", None),
// FEAT_SVE2_SM4 // FEAT_SVE2_SM4
("sve2-sm4", Some(sym::aarch64_target_feature)), ("sve2-sm4", None),
// FEAT_SVE2_SHA3 // FEAT_SVE2_SHA3
("sve2-sha3", Some(sym::aarch64_target_feature)), ("sve2-sha3", None),
// FEAT_SVE2_BitPerm // FEAT_SVE2_BitPerm
("sve2-bitperm", Some(sym::aarch64_target_feature)), ("sve2-bitperm", None),
// FEAT_FRINTTS // FEAT_FRINTTS
("frintts", Some(sym::aarch64_target_feature)), ("frintts", None),
// FEAT_I8MM // FEAT_I8MM
("i8mm", Some(sym::aarch64_target_feature)), ("i8mm", None),
// FEAT_F32MM // FEAT_F32MM
("f32mm", Some(sym::aarch64_target_feature)), ("f32mm", None),
// FEAT_F64MM // FEAT_F64MM
("f64mm", Some(sym::aarch64_target_feature)), ("f64mm", None),
// FEAT_BF16 // FEAT_BF16
("bf16", Some(sym::aarch64_target_feature)), ("bf16", None),
// FEAT_RAND // FEAT_RAND
("rand", Some(sym::aarch64_target_feature)), ("rand", None),
// FEAT_BTI // FEAT_BTI
("bti", Some(sym::aarch64_target_feature)), ("bti", None),
// FEAT_MTE // FEAT_MTE
("mte", Some(sym::aarch64_target_feature)), ("mte", None),
// FEAT_JSCVT // FEAT_JSCVT
("jsconv", Some(sym::aarch64_target_feature)), ("jsconv", None),
// FEAT_FCMA // FEAT_FCMA
("fcma", Some(sym::aarch64_target_feature)), ("fcma", None),
// FEAT_AES // FEAT_AES
("aes", Some(sym::aarch64_target_feature)), ("aes", None),
// FEAT_SHA1 & FEAT_SHA256 // FEAT_SHA1 & FEAT_SHA256
("sha2", Some(sym::aarch64_target_feature)), ("sha2", None),
// FEAT_SHA512 & FEAT_SHA3 // FEAT_SHA512 & FEAT_SHA3
("sha3", Some(sym::aarch64_target_feature)), ("sha3", None),
// FEAT_SM3 & FEAT_SM4 // FEAT_SM3 & FEAT_SM4
("sm4", Some(sym::aarch64_target_feature)), ("sm4", None),
// FEAT_PAN // FEAT_PAN
("pan", Some(sym::aarch64_target_feature)), ("pan", None),
// FEAT_LOR // FEAT_LOR
("lor", Some(sym::aarch64_target_feature)), ("lor", None),
// FEAT_VHE // FEAT_VHE
("vh", Some(sym::aarch64_target_feature)), ("vh", None),
// FEAT_PMUv3 // FEAT_PMUv3
("pmuv3", Some(sym::aarch64_target_feature)), ("pmuv3", None),
// FEAT_SPE // FEAT_SPE
("spe", Some(sym::aarch64_target_feature)), ("spe", None),
("v8.1a", Some(sym::aarch64_target_feature)), ("v8.1a", Some(sym::aarch64_ver_target_feature)),
("v8.2a", Some(sym::aarch64_target_feature)), ("v8.2a", Some(sym::aarch64_ver_target_feature)),
("v8.3a", Some(sym::aarch64_target_feature)), ("v8.3a", Some(sym::aarch64_ver_target_feature)),
("v8.4a", Some(sym::aarch64_target_feature)), ("v8.4a", Some(sym::aarch64_ver_target_feature)),
("v8.5a", Some(sym::aarch64_target_feature)), ("v8.5a", Some(sym::aarch64_ver_target_feature)),
("v8.6a", Some(sym::aarch64_target_feature)), ("v8.6a", Some(sym::aarch64_ver_target_feature)),
("v8.7a", Some(sym::aarch64_target_feature)), ("v8.7a", Some(sym::aarch64_ver_target_feature)),
]; ];
const AARCH64_TIED_FEATURES: &[&[&str]] = &[&["paca", "pacg"]]; const AARCH64_TIED_FEATURES: &[&[&str]] = &[
&["fp", "neon"], // Silicon always has both, so avoid needless complications
&["paca", "pacg"], // Together these represent `pauth` in LLVM
];
const X86_ALLOWED_FEATURES: &[(&str, Option<Symbol>)] = &[ const X86_ALLOWED_FEATURES: &[(&str, Option<Symbol>)] = &[
("adx", Some(sym::adx_target_feature)), ("adx", Some(sym::adx_target_feature)),

View file

@ -46,6 +46,8 @@ declare_features! (
// feature-group-start: accepted features // feature-group-start: accepted features
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
/// Allows `#[target_feature(...)]` on aarch64 platforms
(accepted, aarch64_target_feature, "1.61.0", Some(44839), None),
/// Allows the sysV64 ABI to be specified on all platforms /// Allows the sysV64 ABI to be specified on all platforms
/// instead of just the platforms on which it is the C ABI. /// instead of just the platforms on which it is the C ABI.
(accepted, abi_sysv64, "1.24.0", Some(36167), None), (accepted, abi_sysv64, "1.24.0", Some(36167), None),

View file

@ -241,7 +241,7 @@ declare_features! (
// FIXME: Document these and merge with the list below. // FIXME: Document these and merge with the list below.
// Unstable `#[target_feature]` directives. // Unstable `#[target_feature]` directives.
(active, aarch64_target_feature, "1.27.0", Some(44839), None), (active, aarch64_ver_target_feature, "1.27.0", Some(44839), None),
(active, adx_target_feature, "1.32.0", Some(44839), None), (active, adx_target_feature, "1.32.0", Some(44839), None),
(active, arm_target_feature, "1.27.0", Some(44839), None), (active, arm_target_feature, "1.27.0", Some(44839), None),
(active, avx512_target_feature, "1.27.0", Some(44839), None), (active, avx512_target_feature, "1.27.0", Some(44839), None),

View file

@ -278,6 +278,7 @@ symbols! {
_task_context, _task_context,
a32, a32,
aarch64_target_feature, aarch64_target_feature,
aarch64_ver_target_feature,
abi, abi,
abi_amdgpu_kernel, abi_amdgpu_kernel,
abi_avr_interrupt, abi_avr_interrupt,

View file

@ -2680,7 +2680,6 @@ fn from_target_feature(
// Only allow features whose feature gates have been enabled. // Only allow features whose feature gates have been enabled.
let allowed = match feature_gate.as_ref().copied() { let allowed = match feature_gate.as_ref().copied() {
Some(sym::arm_target_feature) => rust_features.arm_target_feature, Some(sym::arm_target_feature) => rust_features.arm_target_feature,
Some(sym::aarch64_target_feature) => rust_features.aarch64_target_feature,
Some(sym::hexagon_target_feature) => rust_features.hexagon_target_feature, Some(sym::hexagon_target_feature) => rust_features.hexagon_target_feature,
Some(sym::powerpc_target_feature) => rust_features.powerpc_target_feature, Some(sym::powerpc_target_feature) => rust_features.powerpc_target_feature,
Some(sym::mips_target_feature) => rust_features.mips_target_feature, Some(sym::mips_target_feature) => rust_features.mips_target_feature,
@ -2696,6 +2695,7 @@ fn from_target_feature(
Some(sym::f16c_target_feature) => rust_features.f16c_target_feature, Some(sym::f16c_target_feature) => rust_features.f16c_target_feature,
Some(sym::ermsb_target_feature) => rust_features.ermsb_target_feature, Some(sym::ermsb_target_feature) => rust_features.ermsb_target_feature,
Some(sym::bpf_target_feature) => rust_features.bpf_target_feature, Some(sym::bpf_target_feature) => rust_features.bpf_target_feature,
Some(sym::aarch64_ver_target_feature) => rust_features.aarch64_ver_target_feature,
Some(name) => bug!("unknown target feature gate {}", name), Some(name) => bug!("unknown target feature gate {}", name),
None => true, None => true,
}; };

View file

@ -206,7 +206,7 @@
#![feature(asm_const)] #![feature(asm_const)]
// //
// Target features: // Target features:
#![feature(aarch64_target_feature)] #![cfg_attr(bootstrap, feature(aarch64_target_feature))]
#![feature(adx_target_feature)] #![feature(adx_target_feature)]
#![feature(arm_target_feature)] #![feature(arm_target_feature)]
#![feature(avx512_target_feature)] #![feature(avx512_target_feature)]

View file

@ -16,7 +16,6 @@
// gate-test-avx512_target_feature // gate-test-avx512_target_feature
// gate-test-tbm_target_feature // gate-test-tbm_target_feature
// gate-test-arm_target_feature // gate-test-arm_target_feature
// gate-test-aarch64_target_feature
// gate-test-hexagon_target_feature // gate-test-hexagon_target_feature
// gate-test-mips_target_feature // gate-test-mips_target_feature
// gate-test-wasm_target_feature // gate-test-wasm_target_feature
@ -28,6 +27,7 @@
// gate-test-riscv_target_feature // gate-test-riscv_target_feature
// gate-test-ermsb_target_feature // gate-test-ermsb_target_feature
// gate-test-bpf_target_feature // gate-test-bpf_target_feature
// gate-test-aarch64_ver_target_feature
#[target_feature(enable = "avx512bw")] #[target_feature(enable = "avx512bw")]
//~^ ERROR: currently unstable //~^ ERROR: currently unstable

View file

@ -1,7 +1,7 @@
// build-fail // build-fail
// compile-flags: --crate-type=rlib --target=aarch64-unknown-linux-gnu // compile-flags: --crate-type=rlib --target=aarch64-unknown-linux-gnu
// needs-llvm-components: aarch64 // needs-llvm-components: aarch64
#![feature(aarch64_target_feature, target_feature_11)] #![cfg_attr(bootstrap, feature(aarch64_target_feature))]
#![feature(no_core, lang_items)] #![feature(no_core, lang_items)]
#![no_core] #![no_core]