All of lore.kernel.org
 help / color / mirror / Atom feed
From: Richard Henderson <richard.henderson@linaro.org>
To: "Philippe Mathieu-Daudé" <philmd@redhat.com>, qemu-devel@nongnu.org
Cc: Peter Maydell <peter.maydell@linaro.org>,
	Stefan Hajnoczi <stefanha@gmail.com>
Subject: Re: [PATCH 4/4] qemu/bswap: Let cpu_to_endian() functions handle constant expressions
Date: Thu, 17 Sep 2020 14:29:51 -0700	[thread overview]
Message-ID: <96c305c2-886b-3d83-82ad-83c49c60ee26@linaro.org> (raw)
In-Reply-To: <20200917163106.49351-5-philmd@redhat.com>

On 9/17/20 9:31 AM, Philippe Mathieu-Daudé wrote:
> cpu_to_endian() and endian_to_cpu() can be extended to handle
> constant expressions. That way the programmer doesn't need to
> remember the const_X() API exists.
> 
> Suggested-by: Stefan Hajnoczi <stefanha@gmail.com>
> Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
> ---
>  include/qemu/bswap.h | 8 ++++++--
>  1 file changed, 6 insertions(+), 2 deletions(-)
> 
> diff --git a/include/qemu/bswap.h b/include/qemu/bswap.h
> index de256cea3ab..8827e4760b9 100644
> --- a/include/qemu/bswap.h
> +++ b/include/qemu/bswap.h
> @@ -191,12 +191,16 @@ static inline void bswap64s(uint64_t *s)
>  #define CPU_CONVERT(endian, size, type)\
>  static inline type endian ## size ## _to_cpu(type v)\
>  {\
> -    return glue(endian, _bswap)(v, size);\
> +    return __builtin_constant_p(v) ?\
> +           const_ ## endian ## size(v) :\
> +           glue(endian, _bswap)(v, size);\
>  }\
>  \
>  static inline type cpu_to_ ## endian ## size(type v)\
>  {\
> -    return glue(endian, _bswap)(v, size);\
> +    return __builtin_constant_p(v) ?\
> +           const_ ## endian ## size(v) :\
> +           glue(endian, _bswap)(v, size);\
>  }\
>  \
>  static inline void endian ## size ## _to_cpus(type *p)\
> 

How does this actually affect code generation?

If it does, then that's a mistake in our definition of bswap{16,32,64}(), which
should have been able to fold constants just fine.

Looking at all of that CONFIG_MACHINE_BSWAP_H stuff, I think we should just
ditch it all in favour of __builin_bswap*.  The final piece, __builtin_bswap16,
came in at ac868f29d7e8 in gcc-4.8.


r~


      reply	other threads:[~2020-09-17 21:33 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-09-17 16:31 [PATCH 0/4] qemu/bswap: Let cpu_to_endian() functions handle constant expressions Philippe Mathieu-Daudé
2020-09-17 16:31 ` [PATCH 1/4] qemu/bswap: Move const_le() definitions around Philippe Mathieu-Daudé
2020-09-17 16:31 ` [PATCH 2/4] qemu/bswap: add const_be16() and const_be32() Philippe Mathieu-Daudé
2020-09-17 16:31 ` [PATCH 3/4] qemu/bswap: Add const_le64() and const_be64() Philippe Mathieu-Daudé
2020-09-17 21:19   ` Richard Henderson
2020-09-17 16:31 ` [PATCH 4/4] qemu/bswap: Let cpu_to_endian() functions handle constant expressions Philippe Mathieu-Daudé
2020-09-17 21:29   ` Richard Henderson [this message]

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=96c305c2-886b-3d83-82ad-83c49c60ee26@linaro.org \
    --to=richard.henderson@linaro.org \
    --cc=peter.maydell@linaro.org \
    --cc=philmd@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=stefanha@gmail.com \
    /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.