Add support for fancy AArch64 assembler code.
[catacomb] / base / dispatch.c
index 50c9438..908a4e3 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_HWCAP) && CPUFAM_ARM64
+#  define WANT_ANY 1
+#  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)
@@ -278,6 +283,12 @@ static unsigned hwcaps = 0;
        _(ARM_D32, "arm:d32")                                           \
        _(ARM_AES, "arm:aes")
 #endif
+#if CPUFAM_ARM64
+#  define WANTAUX(_)                                                   \
+       WANT_AT_HWCAP(_)
+#  define CAPMAP(_)                                                    \
+       _(ARM_AES, "arm:aes")
+#endif
 
 /* Build the bitmask for `hwcaps' from the `CAPMAP' list. */
 enum {
@@ -391,6 +402,9 @@ static void probe_hwcaps(void)
   if (probed.hwcap2 & HWCAP2_AES) hw |= HF_ARM_AES;
 #  endif
 #endif
+#if CPUFAM_ARM64
+  if (probed.hwcap & HWCAP_AES) hw |= HF_ARM_AES;
+#endif
 
   /* Store the bitmask of features we probed for everyone to see. */
   DISPATCH_STORE(hwcaps, hw);