All of lore.kernel.org
 help / color / mirror / Atom feed
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>

  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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.