This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
[PATCH 1/2 v4] libc-internal.h: add ALIGN helper macros
- From: Mike Frysinger <vapier at gentoo dot org>
- To: libc-alpha at sourceware dot org
- Date: Sat, 1 Jun 2013 03:07:23 -0400
- Subject: [PATCH 1/2 v4] libc-internal.h: add ALIGN helper macros
- References: <1369327649-906-1-git-send-email-vapier at gentoo dot org>
Rather than open coding the masks, add helper macros to do the magic.
This makes code easier to read.
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
2013-05-23 Mike Frysinger <vapier@gentoo.org>
* include/libc-internal.h (ALIGN_DOWN): New helper macro.
(ALIGN_UP): Likewise.
(PTR_ALIGN_DOWN): Likewise.
(PTR_ALIGN_UP): Likewise.
---
include/libc-internal.h | 18 ++++++++++++++++++
1 file changed, 18 insertions(+)
diff --git a/include/libc-internal.h b/include/libc-internal.h
index 0c0fa02..fbe2bd9 100644
--- a/include/libc-internal.h
+++ b/include/libc-internal.h
@@ -50,4 +50,22 @@ extern void __init_misc (int, char **, char **);
/* Cast an integer or a pointer VAL to integer with proper type. */
# define cast_to_integer(val) ((__integer_if_pointer_type (val)) (val))
+/* Align a value by rounding down to closest size.
+ e.g. Using size of 4096, we get this behavior:
+ {4095, 4096, 4097} = {0, 4096, 4096}. */
+#define ALIGN_DOWN(base, size) ((base) & ~((size) - 1))
+
+/* Align a value by rounding up to closest size.
+ e.g. Using size of 4096, we get this behavior:
+ {4095, 4096, 4097} = {4096, 4096, 8192}. */
+#define ALIGN_UP(base, size) ALIGN_DOWN((base) + (size) - 1, (size))
+
+/* Same as ALIGN_DOWN(), but automatically casts when base is a pointer. */
+#define PTR_ALIGN_DOWN(base, size) \
+ (void *) ALIGN_DOWN ((uintptr_t) (base), (size))
+
+/* Same as ALIGN_UP(), but automatically casts when base is a pointer. */
+#define PTR_ALIGN_UP(base, size) \
+ (void *) ALIGN_UP ((uintptr_t) (base), (size))
+
#endif /* _LIBC_INTERNAL */
--
1.8.2.1