From: Thomas Monjalon <thomas@monjalon.net>
To: Adrien Mazarguil <adrien.mazarguil@6wind.com>
Cc: dev@dpdk.org
Subject: Re: [PATCH 1/2] eal: add static endianness conversion macros
Date: Wed, 07 Jun 2017 16:16:58 +0200 [thread overview]
Message-ID: <44029570.D8ug5AmCbY@xps> (raw)
In-Reply-To: <840342851720fc237214aeb30d38565615293b58.1495101988.git.adrien.mazarguil@6wind.com>
Hi, some comments below:
18/05/2017 12:14, Adrien Mazarguil:
> These macros resolve to constant expressions that allow developers to
> perform endianness conversion on static/const objects, even outside of
> function scope as they do not translate to function calls.
>
> This is most useful for static initializers and constant values (whenever
> it has to be performed at compilation time). Run-time endianness conversion
> of variable values should keep using rte_*_to_*() calls for best
> performance.
>
> Signed-off-by: Adrien Mazarguil <adrien.mazarguil@6wind.com>
[...]
> +#define RTE_STATIC_BSWAP64(v) \
> + ((((uint64_t)(v) & UINT64_C(0x00000000000000ff)) << 56) | \
> + (((uint64_t)(v) & UINT64_C(0x000000000000ff00)) << 40) | \
> + (((uint64_t)(v) & UINT64_C(0x0000000000ff0000)) << 24) | \
> + (((uint64_t)(v) & UINT64_C(0x00000000ff000000)) << 8) | \
> + (((uint64_t)(v) & UINT64_C(0x000000ff00000000)) >> 8) | \
> + (((uint64_t)(v) & UINT64_C(0x0000ff0000000000)) >> 24) | \
> + (((uint64_t)(v) & UINT64_C(0x00ff000000000000)) >> 40) | \
> + (((uint64_t)(v) & UINT64_C(0xff00000000000000)) >> 56))
Minor nit: you could align lines by inserting a space before 8.
> +#if RTE_BYTE_ORDER == RTE_BIG_ENDIAN
> +#define RTE_BE16(v) (uint16_t)(v)
> +#define RTE_BE32(v) (uint32_t)(v)
> +#define RTE_BE64(v) (uint64_t)(v)
> +#define RTE_LE16(v) RTE_STATIC_BSWAP16(v)
> +#define RTE_LE32(v) RTE_STATIC_BSWAP32(v)
> +#define RTE_LE64(v) RTE_STATIC_BSWAP64(v)
> +#elif RTE_BYTE_ORDER == RTE_LITTLE_ENDIAN
> +#define RTE_BE16(v) RTE_STATIC_BSWAP16(v)
> +#define RTE_BE32(v) RTE_STATIC_BSWAP32(v)
> +#define RTE_BE64(v) RTE_STATIC_BSWAP64(v)
> +#define RTE_LE16(v) (uint16_t)(v)
> +#define RTE_LE32(v) (uint32_t)(v)
> +#define RTE_LE64(v) (uint64_t)(v)
This naming is confusing.
Let's take RTE_BE16() as example, it does not say wether the input value
is big endian or the output value will be big endian.
I think we should mimic the wording of run-time conversions:
RTE_BE_TO_CPU_16()
Any other ideas?
next prev parent reply other threads:[~2017-06-07 14:16 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-05-18 10:14 [PATCH 1/2] eal: add static endianness conversion macros Adrien Mazarguil
2017-05-18 10:14 ` [PATCH 2/2] ethdev: tidy up endianness handling in flow API Adrien Mazarguil
2017-06-07 14:16 ` Thomas Monjalon [this message]
2017-06-08 9:14 ` [PATCH 1/2] eal: add static endianness conversion macros Adrien Mazarguil
2017-06-08 16:35 ` Thomas Monjalon
2017-06-15 15:48 ` [PATCH v2 1/3] eal: introduce big and little endian types Adrien Mazarguil
2017-06-16 14:12 ` Thomas Monjalon
2017-06-15 15:48 ` [PATCH v2 2/3] eal: add static endianness conversion macros Adrien Mazarguil
2017-06-15 15:48 ` [PATCH v2 3/3] ethdev: tidy up endianness handling in flow API Adrien Mazarguil
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=44029570.D8ug5AmCbY@xps \
--to=thomas@monjalon.net \
--cc=adrien.mazarguil@6wind.com \
--cc=dev@dpdk.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.