The ARM macros define the version to 8 if __aarch64__ is defined.
But I believe this is not correct: ARMv8 can run in aarch32 mode, where only __arm__ and not __aarch64__ is defined (and conversely, AArch64 mode does not define __arm__).
The correct thing I believe would be to use __ARM_ARCH which expands to e.g. 7 in ARMv7, 8 in ARMv8 etc for the version, and use the existence of __arm__ / __aarch64__ to distinguish between 32 & 64.
see repro: https://gcc.godbolt.org/z/xqqYWEaz6
ideally I would argue that AArch64 ought to be treated as an entirely different architecture, like PPC / PPC64
The ARM macros define the version to 8 if
__aarch64__is defined.But I believe this is not correct: ARMv8 can run in aarch32 mode, where only
__arm__and not__aarch64__is defined (and conversely, AArch64 mode does not define__arm__).The correct thing I believe would be to use
__ARM_ARCHwhich expands to e.g. 7 in ARMv7, 8 in ARMv8 etc for the version, and use the existence of__arm__/__aarch64__to distinguish between 32 & 64.see repro: https://gcc.godbolt.org/z/xqqYWEaz6
ideally I would argue that AArch64 ought to be treated as an entirely different architecture, like PPC / PPC64