]> git.gag.com Git - fw/openocd/commitdiff
helper: add align.h
authorAntonio Borneo <borneo.antonio@gmail.com>
Thu, 13 May 2021 17:07:50 +0000 (19:07 +0200)
committerAntonio Borneo <borneo.antonio@gmail.com>
Sat, 14 Aug 2021 12:29:43 +0000 (13:29 +0100)
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>
src/helper/Makefile.am
src/helper/align.h [new file with mode: 0644]

index bedc9f707e608ad1c6d16c4d0768ddc75650cfa1..42cee80d3a9453f6aa418dbd6c005a2f727704d5 100644 (file)
@@ -15,6 +15,7 @@ noinst_LTLIBRARIES += %D%/libhelper.la
        %D%/util.c \
        %D%/jep106.c \
        %D%/jim-nvp.c \
+       %D%/align.h \
        %D%/binarybuffer.h \
        %D%/bits.h \
        %D%/configuration.h \
diff --git a/src/helper/align.h b/src/helper/align.h
new file mode 100644 (file)
index 0000000..935a6a3
--- /dev/null
@@ -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 */