}
// Align functions, from http://stackoverflow.com/questions/4840410/how-to-align-a-pointer-in-c
-#define ALIGN_UP(n, align) ((static_cast<int64_t>(n) + static_cast<int64_t>(align) - 1) & -static_cast<int64_t>(align))
-#define ALIGN_DOWN(n, align) (static_cast<int64_t>(n) & -static_cast<int64_t>(align))
+#define ALIGN_UP(n, align) (((int64_t)(n) + (int64_t)(align) - 1) & -(int64_t)(align))
+#define ALIGN_DOWN(n, align) ((int64_t)(n) & -(int64_t)(align))
constexpr unsigned PAGE_SIZE = 0x1000;
constexpr unsigned HUGE_PAGE_SIZE = 1U << 21;