diff options
author | joseph <joseph@7b3dc134-2b1b-0410-93df-9e9f96275f8d> | 2013-07-02 00:11:45 +0000 |
---|---|---|
committer | joseph <joseph@7b3dc134-2b1b-0410-93df-9e9f96275f8d> | 2013-07-02 00:11:45 +0000 |
commit | 94ba134cf6431dad0aaece271a16761bc793d490 (patch) | |
tree | b2b77be695fb5add3d132101bf25f2be915f3139 /libc/include/libc-internal.h | |
parent | f42fd2771adb82cb5f34ba9e80a607975111da48 (diff) |
Merge changes between r23363 and r23421 from /fsf/trunk.
git-svn-id: svn://svn.eglibc.org/trunk@23422 7b3dc134-2b1b-0410-93df-9e9f96275f8d
Diffstat (limited to 'libc/include/libc-internal.h')
-rw-r--r-- | libc/include/libc-internal.h | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/libc/include/libc-internal.h b/libc/include/libc-internal.h index 0c0fa024a..78f82da58 100644 --- a/libc/include/libc-internal.h +++ b/libc/include/libc-internal.h @@ -50,4 +50,24 @@ 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) & -((__typeof__ (base)) (size))) + +/* 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}. + + Note: The size argument has side effects (expanded multiple times). */ +#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) \ + ((__typeof__ (base)) ALIGN_DOWN ((uintptr_t) (base), (size))) + +/* Same as ALIGN_UP(), but automatically casts when base is a pointer. */ +#define PTR_ALIGN_UP(base, size) \ + ((__typeof__ (base)) ALIGN_UP ((uintptr_t) (base), (size))) + #endif /* _LIBC_INTERNAL */ |