configure.ac, symm/rijndael*: Use ARMv8 AES instructions where available.
[catacomb] / base / dispatch.c
index 875c126..b70d44b 100644 (file)
@@ -229,6 +229,11 @@ struct auxentry { unsigned long type; union auxval value; };
 #  define WANT_AT_HWCAP(_) _(AT_HWCAP, u, hwcap)
 #endif
 
+#if defined(AT_HWCAP2) && CPUFAM_ARMEL
+#  define WANT_ANY 1
+#  define WANT_AT_HWCAP2(_) _(AT_HWCAP2, u, hwcap2)
+#endif
+
 /* If we couldn't find any interesting entries then we can switch all of this
  * machinery off.  Also do that if we have no means for atomic updates.
  */
@@ -264,12 +269,14 @@ static unsigned hwcaps = 0;
  */
 #if CPUFAM_ARMEL
 #  define WANTAUX(_)                                                   \
-       WANT_AT_HWCAP(_)
+       WANT_AT_HWCAP(_)                                                \
+       WANT_AT_HWCAP2(_)
 #  define CAPMAP(_)                                                    \
        _(ARM_VFP, "arm:vfp")                                           \
        _(ARM_NEON, "arm:neon")                                         \
        _(ARM_V4, "arm:v4")                                             \
-       _(ARM_D32, "arm:d32")
+       _(ARM_D32, "arm:d32")                                           \
+       _(ARM_AES, "arm:aes")
 #endif
 
 /* Build the bitmask for `hwcaps' from the `CAPMAP' list. */
@@ -380,6 +387,9 @@ static void probe_hwcaps(void)
   if (probed.hwcap & HWCAP_NEON) hw |= HF_ARM_NEON;
   if (probed.hwcap & HWCAP_VFPD32) hw |= HF_ARM_D32;
   if (probed.hwcap & HWCAP_VFPv4) hw |= HF_ARM_V4;
+#  ifdef HWCAP2_AES
+  if (probed.hwcap2 & HWCAP2_AES) hw |= HF_ARM_AES;
+#  endif
 #endif
 
   /* Store the bitmask of features we probed for everyone to see. */