Moving align macros into vm utils header.
authorGan Shun <ganshun@gmail.com>
Wed, 6 Sep 2017 22:15:06 +0000 (15:15 -0700)
committerBarret Rhoden <brho@cs.berkeley.edu>
Thu, 7 Sep 2017 14:27:36 +0000 (10:27 -0400)
It's about time we had some helper macros to align stuff, and we can't
put them in ros/common.h so this at least allows the vmms to use this
where there won't likely be conflicts with other programs.

Signed-off-by: Gan Shun <ganshun@gmail.com>
Change-Id: Id1e21df482a5f661d4b0b4f899a98e8dc6d91a6f
Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
kern/include/common.h
user/vmm/include/vmm/util.h
user/vmm/memory.c

index cf467a4..920da6a 100644 (file)
 #define __ALIGN_MASK(x, mask) (((uintptr_t)(x) + (mask)) & ~(mask))
 /* Aligns x up to the alignment, e.g. 2^6. */
 #define ALIGN(x, a) ((typeof(x)) __ALIGN_MASK(x, (a) - 1))
+/* Aligns x down to the mask, e.g. (2^6 - 1)
+ * (round down if any mask bits are set)*/
+#define __ALIGN_MASK_DOWN(x, mask) ((uintptr_t)(x) & ~(mask))
+/* Aligns x down to the alignment, e.g. 2^6. */
+#define ALIGN_DOWN(x, a) ((typeof(x)) __ALIGN_MASK_DOWN(x, (a) - 1))
 /* Will return false for 0.  Debatable, based on what you want. */
 #define IS_PWR2(x) ((x) && !((x) & (x - 1)))
 
index da49a31..ccd1f8a 100644 (file)
@@ -6,4 +6,18 @@
 
 #pragma once
 
+/* Test for alignment, e.g. 2^6 */
+#define ALIGNED(p, a)  (!(((uintptr_t)(p)) & ((a)-1)))
+/* Aligns x up to the mask, e.g. (2^6 - 1) (round up if any mask bits are set)*/
+#define __ALIGN_MASK(x, mask) (((uintptr_t)(x) + (mask)) & ~(mask))
+/* Aligns x up to the alignment, e.g. 2^6. */
+#define ALIGN(x, a) ((typeof(x)) __ALIGN_MASK(x, (a) - 1))
+/* Aligns x down to the mask, e.g. (2^6 - 1)
+ * (round down if any mask bits are set)*/
+#define __ALIGN_MASK_DOWN(x, mask) ((uintptr_t)(x) & ~(mask))
+/* Aligns x down to the alignment, e.g. 2^6. */
+#define ALIGN_DOWN(x, a) ((typeof(x)) __ALIGN_MASK_DOWN(x, (a) - 1))
+/* Will return false for 0.  Debatable, based on what you want. */
+#define IS_PWR2(x) ((x) && !((x) & (x - 1)))
+
 ssize_t cat(char *file, void *where, size_t size);
index 97e1375..f52cd14 100644 (file)
@@ -10,8 +10,8 @@
 #include <vmm/linux_bootparam.h>
 #include <vmm/vmm.h>
 #include <err.h>
+#include <vmm/util.h>
 
-#define ALIGNED(p, a)  (!(((uintptr_t)(p)) & ((a)-1)))
 
 static char *entrynames[] = {
        [E820_RAM] "E820_RAM",