diff options
author | Antonio Borneo <borneo.antonio@gmail.com> | 2021-05-13 19:07:50 +0200 |
---|---|---|
committer | Antonio Borneo <borneo.antonio@gmail.com> | 2021-08-14 13:29:43 +0100 |
commit | 9544cd653df120266582f69bddc77d32541caae7 (patch) | |
tree | 885bf8cf99e3d9760f1c44fe902ae8213ff4cf97 /src/helper/align.h | |
parent | 41efc6c419cf5c63a1f555dc5b7634a2e18d9c04 (diff) | |
download | riscv-openocd-9544cd653df120266582f69bddc77d32541caae7.zip riscv-openocd-9544cd653df120266582f69bddc77d32541caae7.tar.gz riscv-openocd-9544cd653df120266582f69bddc77d32541caae7.tar.bz2 |
helper: add align.h
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>
Diffstat (limited to 'src/helper/align.h')
-rw-r--r-- | src/helper/align.h | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/src/helper/align.h b/src/helper/align.h new file mode 100644 index 0000000..935a6a3 --- /dev/null +++ b/src/helper/align.h @@ -0,0 +1,30 @@ +/* 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 */ |