summaryrefslogtreecommitdiff
path: root/include/alignment.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/alignment.h')
-rw-r--r--include/alignment.h33
1 files changed, 33 insertions, 0 deletions
diff --git a/include/alignment.h b/include/alignment.h
new file mode 100644
index 0000000..9fb3b57
--- /dev/null
+++ b/include/alignment.h
@@ -0,0 +1,33 @@
+#ifndef ALIGNMENT_H
+#define ALIGNMENT_H
+
+#include "attributes.h"
+
+#define ALIGN4(val) (((val) + 3) & ~3)
+#define ALIGN8(val) (((val) + 7) & ~7)
+#define ALIGN16(val) (((val) + 0xF) & ~0xF)
+#define ALIGN32(val) (((val) + 0x1F) & ~0x1F)
+#define ALIGN64(val) (((val) + 0x3F) & ~0x3F)
+#define ALIGN128(val) (((val) + 0x7F) & ~0x7F)
+#define ALIGN256(val) (((val) + 0xFF) & ~0xFF)
+
+
+#ifndef ALIGNED8
+#define ALIGNED8 __attribute__ ((aligned (8)))
+#endif
+
+#ifndef ALIGNOF
+#ifdef __sgi /* IDO compiler */
+#define ALIGNOF(x) __builtin_alignof(x)
+#elif (__STDC_VERSION__ >= 201112L) /* C11 */
+#define ALIGNOF(x) _Alignof(x)
+#else /* __GNUC__ */
+#define ALIGNOF(x) __alignof__(x)
+#endif
+#endif
+
+#define ALIGN_MASK(n) (~((n) - 1))
+
+#define ALIGNOF_MASK(x) ALIGN_MASK(ALIGNOF(x))
+
+#endif