about summary refs log tree commit diff
path: root/library/stdarch/crates/std_detect/src/detect/macros.rs
diff options
context:
space:
mode:
authorAdam Gemmell <adam.gemmell@arm.com>2022-07-02 00:55:03 +0100
committerGitHub <noreply@github.com>2022-07-02 00:55:03 +0100
commitba9ca43154f20224229d652ad9970798c018d09b (patch)
treea1343a44481bfa1d3a7edcdc2bc20e26030f8ec1 /library/stdarch/crates/std_detect/src/detect/macros.rs
parentb186197c7c696313e8d046097662dd3f6eb95040 (diff)
downloadrust-ba9ca43154f20224229d652ad9970798c018d09b.tar.gz
rust-ba9ca43154f20224229d652ad9970798c018d09b.zip
Allow mapping a runtime feature to a set of target_features (#1311)
Diffstat (limited to 'library/stdarch/crates/std_detect/src/detect/macros.rs')
-rw-r--r--library/stdarch/crates/std_detect/src/detect/macros.rs18
1 files changed, 15 insertions, 3 deletions
diff --git a/library/stdarch/crates/std_detect/src/detect/macros.rs b/library/stdarch/crates/std_detect/src/detect/macros.rs
index 3783d499cad..213e63ec550 100644
--- a/library/stdarch/crates/std_detect/src/detect/macros.rs
+++ b/library/stdarch/crates/std_detect/src/detect/macros.rs
@@ -1,3 +1,14 @@
+#[macro_export]
+macro_rules! detect_feature {
+    ($feature:tt, $feature_lit:tt) => {
+        $crate::detect_feature!($feature, $feature_lit : $feature_lit)
+    };
+    ($feature:tt, $feature_lit:tt : $($target_feature_lit:tt),*) => {
+        $(cfg!(target_feature = $target_feature_lit) ||)*
+            $crate::detect::__is_feature_detected::$feature()
+    };
+}
+
 #[allow(unused)]
 macro_rules! features {
     (
@@ -7,7 +18,9 @@ macro_rules! features {
       @MACRO_ATTRS: $(#[$macro_attrs:meta])*
       $(@BIND_FEATURE_NAME: $bind_feature:tt; $feature_impl:tt; )*
       $(@NO_RUNTIME_DETECTION: $nort_feature:tt; )*
-      $(@FEATURE: #[$stability_attr:meta] $feature:ident: $feature_lit:tt; $(#[$feature_comment:meta])*)*
+      $(@FEATURE: #[$stability_attr:meta] $feature:ident: $feature_lit:tt;
+          $(implied by target_features: [$($target_feature_lit:tt),*];)?
+          $(#[$feature_comment:meta])*)*
     ) => {
         #[macro_export]
         $(#[$macro_attrs])*
@@ -17,8 +30,7 @@ macro_rules! features {
         macro_rules! $macro_name {
             $(
                 ($feature_lit) => {
-                    cfg!(target_feature = $feature_lit) ||
-                        $crate::detect::__is_feature_detected::$feature()
+                    $crate::detect_feature!($feature, $feature_lit $(: $($target_feature_lit),*)?)
                 };
             )*
             $(