From de7f56ff35bef4581dbf664ec79bf89ff5d2b354 Mon Sep 17 00:00:00 2001 From: James Barford-Evans Date: Mon, 24 Feb 2025 14:50:21 +0000 Subject: [PATCH] Add aarch64_unstable_target_feature and relax instruction assertion --- .../crates/core_arch/src/aarch64/neon/generated.rs | 12 ++++++------ library/stdarch/crates/core_arch/src/lib.rs | 3 ++- library/stdarch/crates/intrinsic-test/src/main.rs | 3 ++- .../stdarch-gen-arm/spec/neon/aarch64.spec.yml | 4 ++-- 4 files changed, 12 insertions(+), 10 deletions(-) diff --git a/library/stdarch/crates/core_arch/src/aarch64/neon/generated.rs b/library/stdarch/crates/core_arch/src/aarch64/neon/generated.rs index 90bf9512df8f..bf0865707138 100644 --- a/library/stdarch/crates/core_arch/src/aarch64/neon/generated.rs +++ b/library/stdarch/crates/core_arch/src/aarch64/neon/generated.rs @@ -827,7 +827,7 @@ pub fn vaddvq_u64(a: uint64x2_t) -> u64 { #[doc = " * Neon instrinsic unsafe"] #[inline] #[target_feature(enable = "neon,faminmax")] -#[cfg_attr(test, assert_instr(famax))] +#[cfg_attr(test, assert_instr(nop))] #[stable(feature = "neon_intrinsics", since = "1.59.0")] pub unsafe fn vamax_f32(a: float32x2_t, b: float32x2_t) -> float32x2_t { unsafe extern "unadjusted" { @@ -845,7 +845,7 @@ pub unsafe fn vamax_f32(a: float32x2_t, b: float32x2_t) -> float32x2_t { #[doc = " * Neon instrinsic unsafe"] #[inline] #[target_feature(enable = "neon,faminmax")] -#[cfg_attr(test, assert_instr(famax))] +#[cfg_attr(test, assert_instr(nop))] #[stable(feature = "neon_intrinsics", since = "1.59.0")] pub unsafe fn vamaxq_f32(a: float32x4_t, b: float32x4_t) -> float32x4_t { unsafe extern "unadjusted" { @@ -863,7 +863,7 @@ pub unsafe fn vamaxq_f32(a: float32x4_t, b: float32x4_t) -> float32x4_t { #[doc = " * Neon instrinsic unsafe"] #[inline] #[target_feature(enable = "neon,faminmax")] -#[cfg_attr(test, assert_instr(famax))] +#[cfg_attr(test, assert_instr(nop))] #[stable(feature = "neon_intrinsics", since = "1.59.0")] pub unsafe fn vamaxq_f64(a: float64x2_t, b: float64x2_t) -> float64x2_t { unsafe extern "unadjusted" { @@ -881,7 +881,7 @@ pub unsafe fn vamaxq_f64(a: float64x2_t, b: float64x2_t) -> float64x2_t { #[doc = " * Neon instrinsic unsafe"] #[inline] #[target_feature(enable = "neon,faminmax")] -#[cfg_attr(test, assert_instr(famin))] +#[cfg_attr(test, assert_instr(nop))] #[stable(feature = "neon_intrinsics", since = "1.59.0")] pub unsafe fn vamin_f32(a: float32x2_t, b: float32x2_t) -> float32x2_t { unsafe extern "unadjusted" { @@ -899,7 +899,7 @@ pub unsafe fn vamin_f32(a: float32x2_t, b: float32x2_t) -> float32x2_t { #[doc = " * Neon instrinsic unsafe"] #[inline] #[target_feature(enable = "neon,faminmax")] -#[cfg_attr(test, assert_instr(famin))] +#[cfg_attr(test, assert_instr(nop))] #[stable(feature = "neon_intrinsics", since = "1.59.0")] pub unsafe fn vaminq_f32(a: float32x4_t, b: float32x4_t) -> float32x4_t { unsafe extern "unadjusted" { @@ -917,7 +917,7 @@ pub unsafe fn vaminq_f32(a: float32x4_t, b: float32x4_t) -> float32x4_t { #[doc = " * Neon instrinsic unsafe"] #[inline] #[target_feature(enable = "neon,faminmax")] -#[cfg_attr(test, assert_instr(famin))] +#[cfg_attr(test, assert_instr(nop))] #[stable(feature = "neon_intrinsics", since = "1.59.0")] pub unsafe fn vaminq_f64(a: float64x2_t, b: float64x2_t) -> float64x2_t { unsafe extern "unadjusted" { diff --git a/library/stdarch/crates/core_arch/src/lib.rs b/library/stdarch/crates/core_arch/src/lib.rs index 827026f5aa7a..16e52d2d9dae 100644 --- a/library/stdarch/crates/core_arch/src/lib.rs +++ b/library/stdarch/crates/core_arch/src/lib.rs @@ -37,7 +37,8 @@ sha512_sm_x86, x86_amx_intrinsics, f16, - keylocker_x86 + keylocker_x86, + aarch64_unstable_target_feature )] #![cfg_attr(test, feature(test, abi_vectorcall, stdarch_internal))] #![deny(clippy::missing_inline_in_public_items)] diff --git a/library/stdarch/crates/intrinsic-test/src/main.rs b/library/stdarch/crates/intrinsic-test/src/main.rs index a64e264d8b1b..36c53b3c3e0a 100644 --- a/library/stdarch/crates/intrinsic-test/src/main.rs +++ b/library/stdarch/crates/intrinsic-test/src/main.rs @@ -240,7 +240,8 @@ fn compile_c( let arch_flags = if target.contains("v7") { "-march=armv8.6-a+crypto+crc+dotprod+fp16" } else { - "-march=armv8.6-a+crypto+sha3+crc+dotprod+fp16" + "-march=armv8.6-a+crypto+sha3+crc+dotprod+fp16+faminmax" + } else { }; let intrinsic_name = &intrinsic.name; diff --git a/library/stdarch/crates/stdarch-gen-arm/spec/neon/aarch64.spec.yml b/library/stdarch/crates/stdarch-gen-arm/spec/neon/aarch64.spec.yml index 5f02b1e5be8d..a078aa0bc09b 100644 --- a/library/stdarch/crates/stdarch-gen-arm/spec/neon/aarch64.spec.yml +++ b/library/stdarch/crates/stdarch-gen-arm/spec/neon/aarch64.spec.yml @@ -13980,7 +13980,7 @@ intrinsics: return_type: "{neon_type}" attr: - FnCall: [target_feature, ['enable = "neon,faminmax"']] - - FnCall: [cfg_attr, [test, {FnCall: [assert_instr, [famax]]}]] + - FnCall: [cfg_attr, [test, {FnCall: [assert_instr, [nop]]}]] - FnCall: [stable, ['feature = "neon_intrinsics"', 'since = "1.59.0"']] safety: unsafe: [neon] @@ -14001,7 +14001,7 @@ intrinsics: return_type: "{neon_type}" attr: - FnCall: [target_feature, ['enable = "neon,faminmax"']] - - FnCall: [cfg_attr, [test, {FnCall: [assert_instr, [famin]]}]] + - FnCall: [cfg_attr, [test, {FnCall: [assert_instr, [nop]]}]] - FnCall: [stable, ['feature = "neon_intrinsics"', 'since = "1.59.0"']] safety: unsafe: [neon]