From e686aee5f9be293bc828df7756e468e9e10f084d Mon Sep 17 00:00:00 2001 From: Martin Stein Date: Tue, 5 Aug 2014 21:19:59 +0200 Subject: [PATCH] hw: provide 'bool aligned' function in util.h ref #474 --- repos/base-hw/src/core/include/util.h | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/repos/base-hw/src/core/include/util.h b/repos/base-hw/src/core/include/util.h index 6f7af050fd..4166b3bf0c 100644 --- a/repos/base-hw/src/core/include/util.h +++ b/repos/base-hw/src/core/include/util.h @@ -67,10 +67,23 @@ namespace Genode /** - * Round down to a specific alignment + * Return an address rounded down to a specific alignment + * + * \param addr original address + * \param alignm_log2 log2 of the required alignment */ - inline addr_t trunc(addr_t const addr, unsigned const alignm_log2) - { return addr & ~((1 << alignm_log2) - 1); } + inline addr_t trunc(addr_t const addr, addr_t const alignm_log2) { + return (addr >> alignm_log2) << alignm_log2; } + + + /** + * Return wether a pointer fullfills an alignment + * + * \param p pointer + * \param alignm_log2 log2 of the required alignment + */ + inline bool aligned(void * const p, addr_t const alignm_log2) { + return (addr_t)p == trunc((addr_t)p, alignm_log2); } /**