about summary refs log tree commit diff
path: root/sysdeps/x86/isa-level.h
diff options
context:
space:
mode:
authorH.J. Lu <hjl.tools@gmail.com>2022-06-27 12:52:58 -0700
committerH.J. Lu <hjl.tools@gmail.com>2022-06-27 12:52:58 -0700
commitf56c497d2b640577f0a8a41f04d4f2c25a8800bd (patch)
treecadb265ead9a4e1f9f9784bfa18076b4553fe884 /sysdeps/x86/isa-level.h
parent4fc321dc58b29217e322526b49549930d0807179 (diff)
downloadglibc-f56c497d2b640577f0a8a41f04d4f2c25a8800bd.tar.gz
glibc-f56c497d2b640577f0a8a41f04d4f2c25a8800bd.tar.xz
glibc-f56c497d2b640577f0a8a41f04d4f2c25a8800bd.zip
x86: Move CPU_FEATURE{S}_{USABLE|ARCH}_P to isa-level.h
Move X86_ISA_CPU_FEATURE_USABLE_P and X86_ISA_CPU_FEATURES_ARCH_P to
where MINIMUM_X86_ISA_LEVEL and XXX_X86_ISA_LEVEL are defined.
Diffstat (limited to 'sysdeps/x86/isa-level.h')
-rw-r--r--sysdeps/x86/isa-level.h24
1 files changed, 24 insertions, 0 deletions
diff --git a/sysdeps/x86/isa-level.h b/sysdeps/x86/isa-level.h
index 075e7c6ee1..c6156e7f7a 100644
--- a/sysdeps/x86/isa-level.h
+++ b/sysdeps/x86/isa-level.h
@@ -87,6 +87,30 @@
    when ISA level < 3.  */
 #define Prefer_No_VZEROUPPER_X86_ISA_LEVEL 3
 
+/* Both X86_ISA_CPU_FEATURE_USABLE_P and X86_ISA_CPU_FEATURES_ARCH_P
+   macros are wrappers for the respective CPU_FEATURE{S}_{USABLE|ARCH}_P
+   runtime checks.  They differ in two ways.
+
+    1.  The USABLE_P version is evaluated to true when the feature
+        is enabled.
+
+    2.  The ARCH_P version has a third argument `not`.  The `not`
+        argument can either be `!` or empty.  If the feature is
+        enabled above an ISA level, the third argument should be empty
+        and the expression is evaluated to true when the feature is
+        enabled.  If the feature is disabled above an ISA level, the
+        third argument should be `!` and the expression is evaluated
+        to true when the feature is disabled.
+ */
+
+#define X86_ISA_CPU_FEATURE_USABLE_P(ptr, name)                        \
+  (((name##_X86_ISA_LEVEL) <= MINIMUM_X86_ISA_LEVEL)                   \
+   || CPU_FEATURE_USABLE_P (ptr, name))
+
+#define X86_ISA_CPU_FEATURES_ARCH_P(ptr, name, not)                    \
+  (((name##_X86_ISA_LEVEL) <= MINIMUM_X86_ISA_LEVEL)                   \
+   || not CPU_FEATURES_ARCH_P (ptr, name))
+
 #define ISA_SHOULD_BUILD(isa_build_level)                              \
   (MINIMUM_X86_ISA_LEVEL <= (isa_build_level) && IS_IN (libc))         \
    || defined ISA_DEFAULT_IMPL