From: Paolo Bonzini <pbonzini@redhat.com>
To: Peter Maydell <peter.maydell@linaro.org>, qemu-devel@nongnu.org
Cc: Kevin Wolf <kwolf@redhat.com>,
Keith Busch <keith.busch@intel.com>,
patches@linaro.org, qemu-block@nongnu.org,
"Michael S. Tsirkin" <mst@redhat.com>
Subject: Re: [Qemu-devel] [PATCH v2 6/6] Make pow2ceil() and pow2floor() inline
Date: Sat, 15 Aug 2015 01:42:44 +0200 [thread overview]
Message-ID: <55CE7CF4.4020706@redhat.com> (raw)
In-Reply-To: <1437741192-20955-7-git-send-email-peter.maydell@linaro.org>
On 24/07/2015 14:33, Peter Maydell wrote:
> Since the pow2floor() function is now used in a hot code path,
> make it inline; for consistency, provide pow2ceil() as an inline
> function too.
>
> Because these functions use ctz64() we have to put the inline
> versions into host-utils.h, so they have access to ctz64(),
> and move the inline is_power_of_2() along with them.
>
> We then need to include host-utils.h from qemu-common.h so that
> the files which use these functions via qemu-common.h still have
> access to them.
>
> Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
> ---
> include/qemu-common.h | 16 +---------------
> include/qemu/host-utils.h | 33 +++++++++++++++++++++++++++++++++
> util/cutils.c | 23 -----------------------
> 3 files changed, 34 insertions(+), 38 deletions(-)
>
> diff --git a/include/qemu-common.h b/include/qemu-common.h
> index bc6f8f8..3d4279c 100644
> --- a/include/qemu-common.h
> +++ b/include/qemu-common.h
> @@ -43,6 +43,7 @@
> #include <signal.h>
> #include "glib-compat.h"
> #include "qemu/option.h"
> +#include "qemu/host-utils.h"
>
> #ifdef _WIN32
> #include "sysemu/os-win32.h"
> @@ -405,21 +406,6 @@ static inline uint64_t muldiv64(uint64_t a, uint32_t b, uint32_t c)
> /* Round number up to multiple */
> #define QEMU_ALIGN_UP(n, m) QEMU_ALIGN_DOWN((n) + (m) - 1, (m))
>
> -static inline bool is_power_of_2(uint64_t value)
> -{
> - if (!value) {
> - return 0;
> - }
> -
> - return !(value & (value - 1));
> -}
> -
> -/* round down to the nearest power of 2*/
> -int64_t pow2floor(int64_t value);
> -
> -/* round up to the nearest power of 2 (0 if overflow) */
> -uint64_t pow2ceil(uint64_t value);
> -
> #include "qemu/module.h"
>
> /*
> diff --git a/include/qemu/host-utils.h b/include/qemu/host-utils.h
> index d4f21c9..9ed5cdd 100644
> --- a/include/qemu/host-utils.h
> +++ b/include/qemu/host-utils.h
> @@ -27,6 +27,7 @@
>
> #include "qemu/compiler.h" /* QEMU_GNUC_PREREQ */
> #include <limits.h>
> +#include <stdbool.h>
>
> #ifdef CONFIG_INT128
> static inline void mulu64(uint64_t *plow, uint64_t *phigh,
> @@ -379,4 +380,36 @@ static inline int ctpop64(uint64_t val)
> # error Unknown sizeof long
> #endif
>
> +static inline bool is_power_of_2(uint64_t value)
> +{
> + if (!value) {
> + return 0;
> + }
> +
> + return !(value & (value - 1));
> +}
> +
> +/* round down to the nearest power of 2*/
> +static inline int64_t pow2floor(int64_t value)
> +{
> + if (!is_power_of_2(value)) {
> + value = 0x8000000000000000ULL >> clz64(value);
> + }
> + return value;
> +}
> +
> +/* round up to the nearest power of 2 (0 if overflow) */
> +static inline uint64_t pow2ceil(uint64_t value)
> +{
> + uint8_t nlz = clz64(value);
> +
> + if (is_power_of_2(value)) {
> + return value;
> + }
> + if (!nlz) {
> + return 0;
> + }
> + return 1ULL << (64 - nlz);
> +}
> +
> #endif
> diff --git a/util/cutils.c b/util/cutils.c
> index 43aafde..9234452 100644
> --- a/util/cutils.c
> +++ b/util/cutils.c
> @@ -469,29 +469,6 @@ int qemu_parse_fd(const char *param)
> return fd;
> }
>
> -/* round down to the nearest power of 2*/
> -int64_t pow2floor(int64_t value)
> -{
> - if (!is_power_of_2(value)) {
> - value = 0x8000000000000000ULL >> clz64(value);
> - }
> - return value;
> -}
> -
> -/* round up to the nearest power of 2 (0 if overflow) */
> -uint64_t pow2ceil(uint64_t value)
> -{
> - uint8_t nlz = clz64(value);
> -
> - if (is_power_of_2(value)) {
> - return value;
> - }
> - if (!nlz) {
> - return 0;
> - }
> - return 1ULL << (64 - nlz);
> -}
> -
> /*
> * Implementation of ULEB128 (http://en.wikipedia.org/wiki/LEB128)
> * Input is limited to 14-bit numbers
>
Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
next prev parent reply other threads:[~2015-08-14 23:42 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-07-24 12:33 [Qemu-devel] [PATCH v2 0/6] replace qemu_fls() with pow2ceil()/pow2floor() Peter Maydell
2015-07-24 12:33 ` [Qemu-devel] [PATCH v2 1/6] hw/pci: Use pow2ceil() rather than hand-calculation Peter Maydell
2015-08-12 7:35 ` Michael S. Tsirkin
2015-07-24 12:33 ` [Qemu-devel] [PATCH v2 2/6] hw/virtio/virtio-pci: " Peter Maydell
2015-08-12 7:36 ` Michael S. Tsirkin
2015-07-24 12:33 ` [Qemu-devel] [PATCH v2 3/6] hw/block/nvme.c: " Peter Maydell
2015-08-14 23:41 ` Paolo Bonzini
2015-07-24 12:33 ` [Qemu-devel] [PATCH v2 4/6] exec.c: Use pow2floor() " Peter Maydell
2015-08-14 23:41 ` Paolo Bonzini
2015-07-24 12:33 ` [Qemu-devel] [PATCH v2 5/6] Remove unused qemu_fls function Peter Maydell
2015-08-14 23:41 ` Paolo Bonzini
2015-07-24 12:33 ` [Qemu-devel] [PATCH v2 6/6] Make pow2ceil() and pow2floor() inline Peter Maydell
2015-08-14 23:42 ` Paolo Bonzini [this message]
2015-08-14 10:11 ` [Qemu-devel] [PATCH v2 0/6] replace qemu_fls() with pow2ceil()/pow2floor() Peter Maydell
2015-09-07 11:04 ` Peter Maydell
2015-09-07 12:34 ` Paolo Bonzini
2015-09-07 15:07 ` Peter Maydell
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=55CE7CF4.4020706@redhat.com \
--to=pbonzini@redhat.com \
--cc=keith.busch@intel.com \
--cc=kwolf@redhat.com \
--cc=mst@redhat.com \
--cc=patches@linaro.org \
--cc=peter.maydell@linaro.org \
--cc=qemu-block@nongnu.org \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).