Re: [PATCH] compat/bswap.h: detect ARM64 when using MSVC

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 2020-11-10 at 13:58:21, Johannes Schindelin wrote:

> The biggest question now is: are we certain that `_M_ARM64` implies
> little-endian?

For Windows?  Yes.  I'm almost certain Windows has only supported
little-endian architectures, possibly with the exception of gaming
consoles.

> I remember that ARM (the 32-bit variety, that is) has support for
> switching endianness on the fly. Happily, MSVC talks specifically about
> _not_ supporting that:
> https://docs.microsoft.com/en-us/cpp/build/overview-of-arm-abi-conventions
> 
> Likewise, it says the same about ARM64 (mentioning that it would be much
> harder to switch endianness there to begin with):
> https://docs.microsoft.com/en-us/cpp/build/arm64-windows-abi-conventions
> 
> So does that make us confident that we can just add that `_M_ARM64` part?
> Yes. Does it make me confident that we can just drop all of the
> architecture-dependent conditions? No, it does not. There _were_ versions
> of MSVC that could compile code for PowerPC, for example, which _is_
> big-endian.

PowerPC can actually be either.  Most 64-bit PowerPC machines these days
are run as little endian, and Windows has always run it in little-endian
mode.  Macs ran it in big-endian mode.

> > As far as I know, Windows has always run on little-endian hardware.
> 
> I think that depends on your point of view... IIRC an early version of
> Windows NT (or was it still VMS Plus?) ran on DEC Alpha, which I seem to
> _vaguely_ remember was big-endian.

Alpha appears to have supported both, but as far as I know, both Windows
and Linux used it in little-endian mode.

> > [0] Wikipedia does not specify the endiannesses supported by the MIPS
> > edition.
> 
> I have another vague memory about MIPS (a wonderful SGI machine I had the
> pleasure of banging my head against, for lack of Python support and Git
> requiring Python back then) being big-endian, too.

Another architecture that supports both endiannesses.  Debian supports
both, but I believe Windows only supported the little-endian version.  I
have a small MIPS board that uses the little endian port for Debian.

> Short version: while I managed to convince myself that _currently_ there
> are no big-endian platforms that we can support via MSVC, I would like to
> stay within the boundaries of caution and _not_ drop those `defined(_M_*)`
> parts.

While I'm confident in my statements, you're the relevant subsystem
maintainer here, so I'm happy to defer to your judgment.  I think Junio
can just pick up the earlier patch version and we should be good to go,
since that patch seemed to meet everyone's needs.
-- 
brian m. carlson (he/him or they/them)
Houston, Texas, US

Attachment: signature.asc
Description: PGP signature


[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux