From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:36524) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YPs4S-0007Na-1Y for qemu-devel@nongnu.org; Mon, 23 Feb 2015 07:25:09 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1YPs4N-0008QF-SI for qemu-devel@nongnu.org; Mon, 23 Feb 2015 07:25:07 -0500 Received: from e23smtp08.au.ibm.com ([202.81.31.141]:33377) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YPs4N-0008Kv-2z for qemu-devel@nongnu.org; Mon, 23 Feb 2015 07:25:03 -0500 Received: from /spool/local by e23smtp08.au.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Mon, 23 Feb 2015 22:24:59 +1000 Received: from d23relay06.au.ibm.com (d23relay06.au.ibm.com [9.185.63.219]) by d23dlp02.au.ibm.com (Postfix) with ESMTP id 0A0642BB0040 for ; Mon, 23 Feb 2015 23:24:57 +1100 (EST) Received: from d23av01.au.ibm.com (d23av01.au.ibm.com [9.190.234.96]) by d23relay06.au.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id t1NCOlBu33357874 for ; Mon, 23 Feb 2015 23:24:56 +1100 Received: from d23av01.au.ibm.com (localhost [127.0.0.1]) by d23av01.au.ibm.com (8.14.4/8.14.4/NCO v10.0 AVout) with ESMTP id t1NCOMGJ030086 for ; Mon, 23 Feb 2015 23:24:22 +1100 From: Alexey Kardashevskiy Date: Mon, 23 Feb 2015 23:23:57 +1100 Message-Id: <1424694237-22786-1-git-send-email-aik@ozlabs.ru> Subject: [Qemu-devel] [PATCH v2] utils: Add pow2ceil() List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: Alexey Kardashevskiy , Peter Maydell This adds a helper to get closest bigger power-of-two value. Signed-off-by: Alexey Kardashevskiy --- Changes: v2: * s/up_pow_of_two/pow2ceil/ --- include/qemu-common.h | 2 ++ util/cutils.c | 9 +++++++++ 2 files changed, 11 insertions(+) diff --git a/include/qemu-common.h b/include/qemu-common.h index 644b46d..ae29748 100644 --- a/include/qemu-common.h +++ b/include/qemu-common.h @@ -417,6 +417,8 @@ static inline bool is_power_of_2(uint64_t value) /* round down to the nearest power of 2*/ int64_t pow2floor(int64_t value); +/* round up to the nearest power of 2*/ +int64_t pow2ceil(int64_t value); #include "qemu/module.h" diff --git a/util/cutils.c b/util/cutils.c index dbe7412..ecaa440 100644 --- a/util/cutils.c +++ b/util/cutils.c @@ -483,6 +483,15 @@ int64_t pow2floor(int64_t value) return value; } +/* round up to the nearest power of 2*/ +int64_t pow2ceil(int64_t value) +{ + if (!is_power_of_2(value)) { + value = 0x8000000000000000ULL >> (clz64(value) - 1); + } + return value; +} + /* * Implementation of ULEB128 (http://en.wikipedia.org/wiki/LEB128) * Input is limited to 14-bit numbers -- 2.0.0