X-Git-Url: https://git.distorted.org.uk/~mdw/catacomb/blobdiff_plain/f013a4f2faa9d42d153daded532767f6685c38c0..e492db887af6561dd33aa18e3887efaeb219fd16:/base/dispatch.c diff --git a/base/dispatch.c b/base/dispatch.c index 875c1260..908a4e31 100644 --- a/base/dispatch.c +++ b/base/dispatch.c @@ -72,8 +72,8 @@ static __inline__ unsigned setflags(unsigned f) { unsigned ff; __asm__ ("pushf; pushl %1; popf; pushf; popl %0; popf" - : "=g" (ff) - : "g" (f)); + : "=r" (ff) + : "r" (f)); return (ff); } # else @@ -83,8 +83,8 @@ static __inline__ unsigned long long setflags(unsigned long f) { unsigned long ff; __asm__ ("pushf; pushq %1; popf; pushf; popq %0; popf" - : "=g" (ff) - : "g" (f)); + : "=r" (ff) + : "r" (f)); return (ff); } # endif @@ -229,6 +229,16 @@ 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) +#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 +274,20 @@ 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 +#if CPUFAM_ARM64 +# define WANTAUX(_) \ + WANT_AT_HWCAP(_) +# define CAPMAP(_) \ + _(ARM_AES, "arm:aes") #endif /* Build the bitmask for `hwcaps' from the `CAPMAP' list. */ @@ -380,6 +398,12 @@ 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 +#if CPUFAM_ARM64 + if (probed.hwcap & HWCAP_AES) hw |= HF_ARM_AES; #endif /* Store the bitmask of features we probed for everyone to see. */