diff options
author | Rob Clark <robdclark@chromium.org> | 2020-03-30 15:52:30 -0700 |
---|---|---|
committer | Marge Bot <eric+marge@anholt.net> | 2020-03-31 18:46:04 +0000 |
commit | ae7da1a01706835120bd59ea069e49cf325feaa3 (patch) | |
tree | 3e8bc5dda4f112db6170a51ba45652712d012352 /src/util | |
parent | 7a53e67816ed9baf7d825ed60ee59f0c05f9df48 (diff) |
util: move ALIGN/ROUND_DOWN_TO to u_math.h
These are less mesa specific than the rest of macros.h, and would be
nice to use outside of mesa. Prep for next patch.
Signed-off-by: Rob Clark <robdclark@chromium.org>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4381>
Diffstat (limited to 'src/util')
-rw-r--r-- | src/util/u_math.h | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/src/util/u_math.h b/src/util/u_math.h index 4f2658e2897..a672486f02f 100644 --- a/src/util/u_math.h +++ b/src/util/u_math.h @@ -660,6 +660,52 @@ util_memcpy_cpu_to_le32(void * restrict dest, const void * restrict src, size_t /** + * Align a value up to an alignment value + * + * If \c value is not already aligned to the requested alignment value, it + * will be rounded up. + * + * \param value Value to be rounded + * \param alignment Alignment value to be used. This must be a power of two. + * + * \sa ROUND_DOWN_TO() + */ +static inline uintptr_t +ALIGN(uintptr_t value, int32_t alignment) +{ + assert(util_is_power_of_two_nonzero(alignment)); + return (((value) + (alignment) - 1) & ~((alignment) - 1)); +} + +/** + * Like ALIGN(), but works with a non-power-of-two alignment. + */ +static inline uintptr_t +ALIGN_NPOT(uintptr_t value, int32_t alignment) +{ + assert(alignment > 0); + return (value + alignment - 1) / alignment * alignment; +} + +/** + * Align a value down to an alignment value + * + * If \c value is not already aligned to the requested alignment value, it + * will be rounded down. + * + * \param value Value to be rounded + * \param alignment Alignment value to be used. This must be a power of two. + * + * \sa ALIGN() + */ +static inline uintptr_t +ROUND_DOWN_TO(uintptr_t value, int32_t alignment) +{ + assert(util_is_power_of_two_nonzero(alignment)); + return ((value) & ~(alignment - 1)); +} + +/** * Align a value, only works pot alignemnts. */ static inline int |