Don't use __ARMEL__/__ARMEB__ in aarch64 assembly
authorDavid Benjamin <davidben@google.com>
Wed, 29 Dec 2021 18:05:12 +0000 (13:05 -0500)
committerBernd Edlinger <bernd.edlinger@hotmail.de>
Sun, 9 Jan 2022 06:40:44 +0000 (07:40 +0100)
commit40c24d74deaad8a0ad7566a68ea5ea757bc3ccef
treedf9e880922ee92a3fee3e4ab8ca4fcac95409d65
parentc30bc4e2093f47a37736944da548653bc08d774d
Don't use __ARMEL__/__ARMEB__ in aarch64 assembly

GCC's __ARMEL__ and __ARMEB__ defines denote little- and big-endian arm,
respectively. They are not defined on aarch64, which instead use
__AARCH64EL__ and __AARCH64EB__.

However, OpenSSL's assembly originally used the 32-bit defines on both
platforms and even define __ARMEL__ and __ARMEB__ in arm_arch.h. This is
less portable and can even interfere with other headers, which use
__ARMEL__ to detect little-endian arm.

Over time, the aarch64 assembly has switched to the correct defines,
such as in 32bbb62ea634239e7cb91d6450ba23517082bab6. This commit
finishes the job: poly1305-armv8.pl needed a fix and the dual-arch
armx.pl files get one more transform to convert from 32-bit to 64-bit.

(There is an even more official endianness detector, __ARM_BIG_ENDIAN in
the Arm C Language Extensions. But I've stuck with the GCC ones here as
that would be a larger change.)

Reviewed-by: Matt Caswell <matt@openssl.org>
Reviewed-by: Tomas Mraz <tomas@openssl.org>
Reviewed-by: Paul Dale <pauli@openssl.org>
Reviewed-by: Bernd Edlinger <bernd.edlinger@hotmail.de>
(Merged from https://github.com/openssl/openssl/pull/17373)
crypto/aes/asm/aesv8-armx.pl
crypto/arm_arch.h
crypto/modes/asm/ghashv8-armx.pl
crypto/poly1305/asm/poly1305-armv8.pl