9544cd653d
OpenOCD has to often align values or check for alignment. Use a dedicated set of macros instead of reinventing the wheel each time. Change-Id: Ia58711608aae0801deeaccb5f33148f2073b0bbd Signed-off-by: Antonio Borneo <borneo.antonio@gmail.com> Reviewed-on: http://openocd.zylin.com/6374 Tested-by: jenkins Reviewed-by: Tarek BOCHKATI <tarek.bouchkati@gmail.com>
31 lines
915 B
C
31 lines
915 B
C
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
|
|
|
/*
|
|
* The content of this file is mainly copied/inspired from Linux kernel
|
|
* code in include/linux/align.h and include/uapi/linux/const.h
|
|
*
|
|
* Macro name 'ALIGN' conflicts with macOS/BSD file param.h
|
|
*/
|
|
|
|
#ifndef OPENOCD_HELPER_ALIGN_H
|
|
#define OPENOCD_HELPER_ALIGN_H
|
|
|
|
#define ALIGN_MASK(x, mask) \
|
|
({ \
|
|
typeof(mask) _mask = (mask); \
|
|
((x) + _mask) & ~_mask; \
|
|
})
|
|
|
|
/* @a is a power of 2 value */
|
|
#define ALIGN_UP(x, a) ALIGN_MASK(x, (typeof(x))(a) - 1)
|
|
#define ALIGN_DOWN(x, a) ((x) & ~((typeof(x))(a) - 1))
|
|
#define IS_ALIGNED(x, a) (((x) & ((typeof(x))(a) - 1)) == 0)
|
|
|
|
#define IS_PWR_OF_2(x) \
|
|
({ \
|
|
typeof(x) _x = (x); \
|
|
_x == 0 || (_x & (_x - 1)) == 0; \
|
|
})
|
|
|
|
#endif /* OPENOCD_HELPER_ALIGN_H */
|