From db946c5b39b0b041b06598e9bf16462bab5fa6dc Mon Sep 17 00:00:00 2001 From: zhuky <932394344@qq.com> Date: Mon, 19 Feb 2024 17:37:11 +0800 Subject: [PATCH 1/7] fix: remove `stdsimd` feature; add `stdarch_x86_avx512` Closes #61 --- benches/bench_f16_ignore_nan.rs | 2 -- benches/bench_f16_return_nan.rs | 2 -- benches/bench_f32_ignore_nan.rs | 2 -- benches/bench_f32_return_nan.rs | 2 -- benches/bench_f64_ignore_nan.rs | 2 -- benches/bench_f64_return_nan.rs | 2 -- benches/bench_i16.rs | 2 -- benches/bench_i32.rs | 2 -- benches/bench_i64.rs | 2 -- benches/bench_i8.rs | 2 -- benches/bench_u16.rs | 2 -- benches/bench_u32.rs | 2 -- benches/bench_u64.rs | 2 -- benches/bench_u8.rs | 2 -- src/lib.rs | 4 ++-- 15 files changed, 2 insertions(+), 30 deletions(-) diff --git a/benches/bench_f16_ignore_nan.rs b/benches/bench_f16_ignore_nan.rs index ff344cf..94a266b 100644 --- a/benches/bench_f16_ignore_nan.rs +++ b/benches/bench_f16_ignore_nan.rs @@ -1,5 +1,3 @@ -#![feature(stdsimd)] - use argminmax::ArgMinMax; use codspeed_criterion_compat::*; use dev_utils::{config, utils}; diff --git a/benches/bench_f16_return_nan.rs b/benches/bench_f16_return_nan.rs index 7ed8b09..d855abb 100644 --- a/benches/bench_f16_return_nan.rs +++ b/benches/bench_f16_return_nan.rs @@ -1,5 +1,3 @@ -#![feature(stdsimd)] - use argminmax::NaNArgMinMax; use codspeed_criterion_compat::*; use dev_utils::{config, utils}; diff --git a/benches/bench_f32_ignore_nan.rs b/benches/bench_f32_ignore_nan.rs index 80887e8..eb4fe68 100644 --- a/benches/bench_f32_ignore_nan.rs +++ b/benches/bench_f32_ignore_nan.rs @@ -1,5 +1,3 @@ -#![feature(stdsimd)] - use argminmax::ArgMinMax; use codspeed_criterion_compat::*; use dev_utils::{config, utils}; diff --git a/benches/bench_f32_return_nan.rs b/benches/bench_f32_return_nan.rs index 85e79f3..84301be 100644 --- a/benches/bench_f32_return_nan.rs +++ b/benches/bench_f32_return_nan.rs @@ -1,5 +1,3 @@ -#![feature(stdsimd)] - use argminmax::NaNArgMinMax; use codspeed_criterion_compat::*; use dev_utils::{config, utils}; diff --git a/benches/bench_f64_ignore_nan.rs b/benches/bench_f64_ignore_nan.rs index b8f41ab..7c2c481 100644 --- a/benches/bench_f64_ignore_nan.rs +++ b/benches/bench_f64_ignore_nan.rs @@ -1,5 +1,3 @@ -#![feature(stdsimd)] - use argminmax::ArgMinMax; use codspeed_criterion_compat::*; use dev_utils::{config, utils}; diff --git a/benches/bench_f64_return_nan.rs b/benches/bench_f64_return_nan.rs index 9c55a2f..c27ebf0 100644 --- a/benches/bench_f64_return_nan.rs +++ b/benches/bench_f64_return_nan.rs @@ -1,5 +1,3 @@ -#![feature(stdsimd)] - use argminmax::NaNArgMinMax; use codspeed_criterion_compat::*; use dev_utils::{config, utils}; diff --git a/benches/bench_i16.rs b/benches/bench_i16.rs index 0d44681..c5e9324 100644 --- a/benches/bench_i16.rs +++ b/benches/bench_i16.rs @@ -1,5 +1,3 @@ -#![feature(stdsimd)] - use argminmax::ArgMinMax; use codspeed_criterion_compat::*; use dev_utils::{config, utils}; diff --git a/benches/bench_i32.rs b/benches/bench_i32.rs index a003e4a..470dce5 100644 --- a/benches/bench_i32.rs +++ b/benches/bench_i32.rs @@ -1,5 +1,3 @@ -#![feature(stdsimd)] - use argminmax::ArgMinMax; use codspeed_criterion_compat::*; use dev_utils::{config, utils}; diff --git a/benches/bench_i64.rs b/benches/bench_i64.rs index 0b45ffa..a50a9aa 100644 --- a/benches/bench_i64.rs +++ b/benches/bench_i64.rs @@ -1,5 +1,3 @@ -#![feature(stdsimd)] - use argminmax::ArgMinMax; use codspeed_criterion_compat::*; use dev_utils::{config, utils}; diff --git a/benches/bench_i8.rs b/benches/bench_i8.rs index 5d24c1c..c99fd10 100644 --- a/benches/bench_i8.rs +++ b/benches/bench_i8.rs @@ -1,5 +1,3 @@ -#![feature(stdsimd)] - use argminmax::ArgMinMax; use codspeed_criterion_compat::*; use dev_utils::{config, utils}; diff --git a/benches/bench_u16.rs b/benches/bench_u16.rs index f9d59e3..ed829b8 100644 --- a/benches/bench_u16.rs +++ b/benches/bench_u16.rs @@ -1,5 +1,3 @@ -#![feature(stdsimd)] - use argminmax::ArgMinMax; use codspeed_criterion_compat::*; use dev_utils::{config, utils}; diff --git a/benches/bench_u32.rs b/benches/bench_u32.rs index 283bd1c..38634c2 100644 --- a/benches/bench_u32.rs +++ b/benches/bench_u32.rs @@ -1,5 +1,3 @@ -#![feature(stdsimd)] - use argminmax::ArgMinMax; use codspeed_criterion_compat::*; use dev_utils::{config, utils}; diff --git a/benches/bench_u64.rs b/benches/bench_u64.rs index 71e678d..7a5a3b4 100644 --- a/benches/bench_u64.rs +++ b/benches/bench_u64.rs @@ -1,5 +1,3 @@ -#![feature(stdsimd)] - use argminmax::ArgMinMax; use codspeed_criterion_compat::*; use dev_utils::{config, utils}; diff --git a/benches/bench_u8.rs b/benches/bench_u8.rs index 8c42f51..f6bd283 100644 --- a/benches/bench_u8.rs +++ b/benches/bench_u8.rs @@ -1,5 +1,3 @@ -#![feature(stdsimd)] - use argminmax::ArgMinMax; use codspeed_criterion_compat::*; use dev_utils::{config, utils}; diff --git a/src/lib.rs b/src/lib.rs index f567d18..42e766a 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -69,10 +69,10 @@ //! // enable SIMD nightly features when on nightly_simd enabled -#![cfg_attr(feature = "nightly_simd", feature(stdsimd))] #![cfg_attr(feature = "nightly_simd", feature(avx512_target_feature))] #![cfg_attr(feature = "nightly_simd", feature(arm_target_feature))] - +// enable stdarch_x86_avx512 feature +#![feature(stdarch_x86_avx512)] // It is necessary to import this at the root of the crate // See: https://github.com/la10736/rstest/tree/master/rstest_reuse#use-rstest_resuse-at-the-top-of-your-crate #[cfg(test)] From 63878103d526731638a0ee8f63fcc5bf2be2c9e0 Mon Sep 17 00:00:00 2001 From: zhuky <932394344@qq.com> Date: Tue, 20 Feb 2024 14:43:42 +0800 Subject: [PATCH 2/7] fix: split the stdsimd feature --- src/lib.rs | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 42e766a..b219763 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -69,10 +69,23 @@ //! // enable SIMD nightly features when on nightly_simd enabled +#![cfg_attr( + all( + feature = "nightly_simd", + any(target_arch = "x86_64", target_arch = "x86") + ), + feature(stdarch_x86_avx512) +)] +#![cfg_attr( + all(feature = "nightly_simd", target_arch = "arm"), + feature(stdarch_arm_neon_intrinsics) +)] +#![cfg_attr( + all(feature = "nightly_simd", target_arch = "arm"), + feature(stdarch_arm_feature_detection) +)] #![cfg_attr(feature = "nightly_simd", feature(avx512_target_feature))] #![cfg_attr(feature = "nightly_simd", feature(arm_target_feature))] -// enable stdarch_x86_avx512 feature -#![feature(stdarch_x86_avx512)] // It is necessary to import this at the root of the crate // See: https://github.com/la10736/rstest/tree/master/rstest_reuse#use-rstest_resuse-at-the-top-of-your-crate #[cfg(test)] From 43b514b0b47b1d361303a949fe3e912e24c19d05 Mon Sep 17 00:00:00 2001 From: jvdd Date: Wed, 21 Feb 2024 13:14:00 +0100 Subject: [PATCH 3/7] use cfg_version to allow backwards compatible SIMD features --- src/lib.rs | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index b219763..d7a8f9d 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -68,24 +68,31 @@ //!``` //! -// enable SIMD nightly features when on nightly_simd enabled +#![feature(cfg_version)] +// Enable SIMD nightly features when on nightly_simd enabled +// ------- version 1.78 and above #![cfg_attr( all( feature = "nightly_simd", + version("1.78"), any(target_arch = "x86_64", target_arch = "x86") ), feature(stdarch_x86_avx512) )] #![cfg_attr( - all(feature = "nightly_simd", target_arch = "arm"), + all(feature = "nightly_simd", version("1.78"), target_arch = "arm"), feature(stdarch_arm_neon_intrinsics) )] #![cfg_attr( - all(feature = "nightly_simd", target_arch = "arm"), + all(feature = "nightly_simd", version("1.78"), target_arch = "arm"), feature(stdarch_arm_feature_detection) )] +// ------- version 1.77 and below +#![cfg_attr(all(feature = "nightly_simd", not(version("1.78"))), feature(stdsimd))] +// ------- any version #![cfg_attr(feature = "nightly_simd", feature(avx512_target_feature))] #![cfg_attr(feature = "nightly_simd", feature(arm_target_feature))] + // It is necessary to import this at the root of the crate // See: https://github.com/la10736/rstest/tree/master/rstest_reuse#use-rstest_resuse-at-the-top-of-your-crate #[cfg(test)] From fbef847f0fba04644896f5bba21c0c362aa549b1 Mon Sep 17 00:00:00 2001 From: jvdd Date: Wed, 21 Feb 2024 13:22:24 +0100 Subject: [PATCH 4/7] :see_no_evil: check for nightly feature before enabling cfg_version --- src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib.rs b/src/lib.rs index d7a8f9d..486ef4f 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -68,8 +68,8 @@ //!``` //! -#![feature(cfg_version)] // Enable SIMD nightly features when on nightly_simd enabled +#![cfg_attr(feature = "nightly_simd", feature(cfg_version))] // ------- version 1.78 and above #![cfg_attr( all( From 23cd95cae84a47c7e5f86075ab58ef5d02effa65 Mon Sep 17 00:00:00 2001 From: jvdd Date: Wed, 21 Feb 2024 14:01:26 +0100 Subject: [PATCH 5/7] :broom: --- src/lib.rs | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 486ef4f..4147c54 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -74,21 +74,23 @@ #![cfg_attr( all( feature = "nightly_simd", - version("1.78"), any(target_arch = "x86_64", target_arch = "x86") ), - feature(stdarch_x86_avx512) + cfg_attr(version("1.78"), feature(stdarch_x86_avx2)) )] #![cfg_attr( - all(feature = "nightly_simd", version("1.78"), target_arch = "arm"), - feature(stdarch_arm_neon_intrinsics) + all(feature = "nightly_simd", target_arch = "arm"), + cfg_attr(version("1.78"), feature(stdarch_arm_neon_intrinsics)) // TODO: Aarch64 is stable now - check if this is under nightly_simd https://github.com/rust-lang/rust/issues/111800 )] #![cfg_attr( - all(feature = "nightly_simd", version("1.78"), target_arch = "arm"), - feature(stdarch_arm_feature_detection) + all(feature = "nightly_simd", target_arch = "arm"), + cfg_attr(version("1.78"), feature(stdarch_arm_feature_detection)) )] // ------- version 1.77 and below -#![cfg_attr(all(feature = "nightly_simd", not(version("1.78"))), feature(stdsimd))] +#![cfg_attr( + feature = "nightly_simd", + cfg_attr(not(version("1.78")), feature(stdsimd)) +)] // ------- any version #![cfg_attr(feature = "nightly_simd", feature(avx512_target_feature))] #![cfg_attr(feature = "nightly_simd", feature(arm_target_feature))] From 75755b97877126da80ce3b3a9b33d9fd361c8bcd Mon Sep 17 00:00:00 2001 From: jvdd Date: Wed, 21 Feb 2024 14:04:01 +0100 Subject: [PATCH 6/7] :clown: --- src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib.rs b/src/lib.rs index 4147c54..59662d6 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -76,7 +76,7 @@ feature = "nightly_simd", any(target_arch = "x86_64", target_arch = "x86") ), - cfg_attr(version("1.78"), feature(stdarch_x86_avx2)) + cfg_attr(version("1.78"), feature(stdarch_x86_avx512)) )] #![cfg_attr( all(feature = "nightly_simd", target_arch = "arm"), From ae954998fb705e80df184748e580c73b3a71be7a Mon Sep 17 00:00:00 2001 From: jvdd Date: Wed, 21 Feb 2024 14:07:42 +0100 Subject: [PATCH 7/7] bundle arm features together --- src/lib.rs | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 59662d6..4d81a60 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -78,13 +78,14 @@ ), cfg_attr(version("1.78"), feature(stdarch_x86_avx512)) )] +// TODO: Aarch64 is stable now - check if this is under nightly_simd https://github.com/rust-lang/rust/issues/111800 #![cfg_attr( all(feature = "nightly_simd", target_arch = "arm"), - cfg_attr(version("1.78"), feature(stdarch_arm_neon_intrinsics)) // TODO: Aarch64 is stable now - check if this is under nightly_simd https://github.com/rust-lang/rust/issues/111800 -)] -#![cfg_attr( - all(feature = "nightly_simd", target_arch = "arm"), - cfg_attr(version("1.78"), feature(stdarch_arm_feature_detection)) + cfg_attr( + version("1.78"), + feature(stdarch_arm_neon_intrinsics), + feature(stdarch_arm_feature_detection) + ) )] // ------- version 1.77 and below #![cfg_attr(