[PATCH] Cygwin: _endian.h: Add AArch64 implementations for `ntohl` and `ntohs`

Jon Turney jon.turney@dronecode.org.uk
Wed Jan 7 12:56:01 GMT 2026


On 07/01/2026 11:17, Corinna Vinschen wrote:
> Hi Thirumalai,
> 
> On Jan  5 12:40, Thirumalai Nagalingam wrote:
>> Hello Everyone,
>>
>> This patch adds AArch64-specific inline asm implementations of __ntohl()
>> and __ntohs() in `winsup/cygwin/include/machine/_endian.h`.
>>
>> For AArch64 targets, the patch uses the REV and REV16 instructions
>> to perform byte swapping, with explicit zero-extension for 16-bit
>> values to ensure correct register semantics.
>>
>> Comments and reviews are welcome.
>>
>> Thanks & regards
>> Thirumalai Nagalingam <thirumalai.nagalingam@multicorewareinc.com<mailto:thirumalai.nagalingam@multicorewareinc.com>>
>>
>> In-lined patch:
>>
>> diff --git a/winsup/cygwin/include/machine/_endian.h b/winsup/cygwin/include/machine/_endian.h
>> index dbd4429b8..129cba66b 100644
>> --- a/winsup/cygwin/include/machine/_endian.h
>> +++ b/winsup/cygwin/include/machine/_endian.h
>> @@ -26,16 +26,26 @@ _ELIDABLE_INLINE __uint16_t __ntohs(__uint16_t);
>>   _ELIDABLE_INLINE __uint32_t
>>   __ntohl(__uint32_t _x)
>>   {
>> +#if defined(__x86_64__)
>>          __asm__("bswap %0" : "=r" (_x) : "0" (_x));
>> +#elif defined(__aarch64__)
>> +       __asm__("rev %w0, %w0" : "=r" (_x) : "0" (_x));
>> +#endif

For a bit of future proofing, maybe this should end with

#else
#error unknown architecture

rather than ploughing on to silently return the unmodified x?

(That's probably an observation which applies generally to aarch64 
patches :))


Also, to be hypercorrect (that is, I do not expect anyone to do anything 
about this): since big-endian ARM is a thing (although not for Windows) 
is there a more tightly scoped define we might use here?



More information about the Cygwin-patches mailing list