Stabilise aarch64_target_feature
This commit is contained in:
parent
39961390ad
commit
5a5621791f
8 changed files with 64 additions and 58 deletions
|
@ -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)),
|
||||||
|
|
|
@ -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),
|
||||||
|
|
|
@ -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),
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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,
|
||||||
};
|
};
|
||||||
|
|
|
@ -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)]
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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]
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue