From: Andy Polyakov <appro@openssl.org>
Date: Mon, 12 Mar 2018 09:46:23 +0000 (+0100)
Subject: ec/curve25519.c: resolve regression with Android NDK's arm64 gcc.
X-Git-Tag: OpenSSL_1_1_1-pre3~109
X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=b3e02d06ba802aaa137b5f5000b02c504b72cdcb;p=oweals%2Fopenssl.git

ec/curve25519.c: resolve regression with Android NDK's arm64 gcc.

Unlike "upstream", Android NDK's arm64 gcc [but not clang] performs
64x64=128-bit multiplications with library calls, which appears to
have devastating impact on performance. [The condition is reduced to
__ANDROID__ [&& !__clang__], because x86_64 has corresponding
assembly module.]

Reviewed-by: Rich Salz <rsalz@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/5589)
---

diff --git a/crypto/ec/curve25519.c b/crypto/ec/curve25519.c
index 45525f4742..0f18ff7c7d 100644
--- a/crypto/ec/curve25519.c
+++ b/crypto/ec/curve25519.c
@@ -13,7 +13,8 @@
 
 #if defined(X25519_ASM) \
     || ( (defined(__SIZEOF_INT128__) && __SIZEOF_INT128__ == 16) \
-         && !defined(__sparc__) )
+         && !defined(__sparc__) \
+         && !(defined(__ANDROID__) && !defined(__clang__)) )
 /*
  * Base 2^51 implementation.
  */