~mdw
/
catacomb
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Add support for fancy AArch64 assembler code.
[catacomb]
/
base
/
dispatch.c
diff --git
a/base/dispatch.c
b/base/dispatch.c
index
875c126
..
908a4e3
100644
(file)
--- 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"
{
unsigned ff;
__asm__ ("pushf; pushl %1; popf; pushf; popl %0; popf"
- : "=
g
" (ff)
- : "
g
" (f));
+ : "=
r
" (ff)
+ : "
r
" (f));
return (ff);
}
# else
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"
{
unsigned long ff;
__asm__ ("pushf; pushq %1; popf; pushf; popq %0; popf"
- : "=
g
" (ff)
- : "
g
" (f));
+ : "=
r
" (ff)
+ : "
r
" (f));
return (ff);
}
# endif
return (ff);
}
# endif
@@
-229,6
+229,16
@@
struct auxentry { unsigned long type; union auxval value; };
# define WANT_AT_HWCAP(_) _(AT_HWCAP, u, hwcap)
#endif
# 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.
*/
/* 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(_) \
*/
#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") \
# 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. */
#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;
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. */
#endif
/* Store the bitmask of features we probed for everyone to see. */