~mdw
/
catacomb
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Add support machinery for ARM hosts.
[catacomb]
/
base
/
dispatch.c
diff --git
a/base/dispatch.c
b/base/dispatch.c
index
10ae404
..
1b0ab2b
100644
(file)
--- a/
base/dispatch.c
+++ b/
base/dispatch.c
@@
-224,6
+224,10
@@
struct auxentry { unsigned long type; union auxval value; };
* that the necessary entry types are defined. This is primarily ordered by
* entry type to minimize duplication.
*/
* that the necessary entry types are defined. This is primarily ordered by
* entry type to minimize duplication.
*/
+#if defined(AT_HWCAP) && CPUFAM_ARMEL
+# define WANT_ANY 1
+# define WANT_AT_HWCAP(_) _(AT_HWCAP, u, hwcap)
+#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.
@@
-255,6
+259,15
@@
static unsigned hwcaps = 0;
* intends to satisfy from the auxiliary vector. Each entry contains a
* feature name suffix, and the token name (for `check_env').
*/
* intends to satisfy from the auxiliary vector. Each entry contains a
* feature name suffix, and the token name (for `check_env').
*/
+#if CPUFAM_ARMEL
+# define WANTAUX(_) \
+ WANT_AT_HWCAP(_)
+# define CAPMAP(_) \
+ _(ARM_VFP, "arm:vfp") \
+ _(ARM_NEON, "arm:neon") \
+ _(ARM_V4, "arm:v4") \
+ _(ARM_D32, "arm:d32")
+#endif
/* Build the bitmask for `hwcaps' from the `CAPMAP' list. */
enum {
/* Build the bitmask for `hwcaps' from the `CAPMAP' list. */
enum {
@@
-358,6
+371,12
@@
static void probe_hwcaps(void)
/* Each CPU family now has to pick through what was found and stashed in
* `probed', and set the appropriate flag bits in `hw'.
*/
/* Each CPU family now has to pick through what was found and stashed in
* `probed', and set the appropriate flag bits in `hw'.
*/
+#if CPUFAM_ARMEL
+ if (probed.hwcap & HWCAP_VFPv3) hw |= HF_ARM_VFP;
+ 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;
+#endif
/* Store the bitmask of features we probed for everyone to see. */
DISPATCH_STORE(hwcaps, hw);
/* Store the bitmask of features we probed for everyone to see. */
DISPATCH_STORE(hwcaps, hw);