summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorTavian Barnes <tavianator@tavianator.com>2024-04-19 15:44:36 -0400
committerTavian Barnes <tavianator@tavianator.com>2024-04-19 15:50:45 -0400
commit75311e2f9aabd1e4775176e9adff5cd5f1fe42aa (patch)
tree11bc6596c2a06e1a5460b1e1628a0380398e0718 /src
parent0d8bf80364a23d9b90ab6c034625b60e4c566c61 (diff)
downloadbfs-75311e2f9aabd1e4775176e9adff5cd5f1fe42aa.tar.xz
config: Check for max_align_t
Diffstat (limited to 'src')
-rw-r--r--src/prelude.h19
1 files changed, 15 insertions, 4 deletions
diff --git a/src/prelude.h b/src/prelude.h
index a23b167..390666b 100644
--- a/src/prelude.h
+++ b/src/prelude.h
@@ -182,14 +182,25 @@ extern const char bfs_version[];
#endif
/**
+ * Polyfill max_align_t if we don't already have it.
+ */
+#if !BFS_HAS_MAX_ALIGN_T
+typedef union {
+# ifdef __BIGGEST_ALIGNMENT__
+ alignas(__BIGGEST_ALIGNMENT__) char c;
+# else
+ long double ld;
+ long long ll;
+ void *ptr;
+# endif
+} max_align_t;
+#endif
+
+/**
* Alignment specifier that avoids false sharing.
*/
#define cache_align alignas(FALSE_SHARING_SIZE)
-#if __COSMOPOLITAN__
-typedef long double max_align_t;
-#endif
-
// Wrappers for attributes
/**