git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH v2 4/6] bswap.h: Always overwrite ntohl/ ntohll macros

From
Junio C Hamano <gitster@pobox.com>
Date
Jun 12, 2025, 20:16 UTC
Message-ID
<xmqqmsacd8cc.fsf@gitster.g>
In-Reply-To
<aEob-FXAvc2Wqmlr@fruit.crustytoothpaste.net>
"brian m. carlson" <sandals@crustytoothpaste.net> writes:
Show 13 quoted lines
> On 2025-06-11 at 22:14:40, Sebastian Andrzej Siewior wrote:
>> The ntohl and htonl macros are redefined because the provided macros were
>> not always optimal. Sometimes it was a function call, sometimes it was a
>> macro which did the shifting. Using the 'bswap' opcode on x86 provides
>> probably better performance than performing the shifting.
>
> I believe that the peephole optimizer will almost always optimize them
> to the bswap or equivalent opcode, much like it recognizes how to
> generate rotate opcodes from two shifts and an or, so they should
> actually be equivalent.
>
> GCC and clang both emit simple bswap instructions with `-O2`, which is
> the optimization level we use: https://godbolt.org/z/1r8P1Pqo7.

Good observation. In short, we do not have to redefine these in terms of bswap32/64 for performance as the compilers should do a reasonable job.

The updated organization to separate the two concerns in this file, namely, (1) figure out the best way to write bswap32/64, and (2) override (or supply on platforms that do not offer) host-network byte order helpers, does clean things up a lot, so I still like to see it, though.

Previous: brian m. carlsonNext: Junio C Hamano
Message 17 of 20 in “bswap.h: Rework ntohl handling”
  1. 0/6 bswap.h: Rework ntohl handlingSebastian Andrzej Siewior, Jun 11, 2025
  2. 2/6 bswap.h: Add support for __BYTE_ORDER__Sebastian Andrzej Siewior, Jun 11, 2025
  3. brian m. carlsonJun 12, 2025
  4. Collin FunkJun 12, 2025
  5. Junio C HamanoJun 12, 2025
  6. 1/6 Revert "bswap.h: add support for built-in bswap functions"Sebastian Andrzej Siewior, Jun 11, 2025
  7. Junio C HamanoJun 12, 2025
  8. 3/6 bswap.h: Define GIT_LITTLE_ENDIAN on msvc as little endianSebastian Andrzej Siewior, Jun 11, 2025
  9. Junio C HamanoJun 12, 2025
  10. 5/6 bswap.h: Remove optimized x86 version of bswap32/64Sebastian Andrzej Siewior, Jun 11, 2025
  11. Kristoffer HaugsbakkJun 26, 2025
  12. Sebastian Andrzej SiewiorJul 15, 2025
  13. 6/6 bswap.h: Provide a built-in based version of bswap32/64 if possibleSebastian Andrzej Siewior, Jun 11, 2025
  14. 5/6 bswap: Remove optimized x86 version of bswap32/64Sebastian Andrzej Siewior, Jun 11, 2025
  15. 4/6 bswap.h: Always overwrite ntohl/ ntohll macrosSebastian Andrzej Siewior, Jun 11, 2025
  16. brian m. carlsonJun 12, 2025
  17. Junio C HamanoJun 12, 2025
  18. Junio C HamanoJun 12, 2025
  19. Junio C HamanoJul 7, 2025
  20. Sebastian Andrzej SiewiorJul 9, 2025

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.