summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGiulio Benetti <giulio.benetti@benettiengineering.com>2020-04-01 09:39:45 -0700
committerGiulio Benetti <giulio.benetti@benettiengineering.com>2020-04-01 09:39:45 -0700
commit32a3380f169bc3ee2218d97e9929cd3286d96334 (patch)
treea139ccf0976cd3813161eaff01d850ade9066245
parent1266f8598f86e92454e0281d7a6fbaaa64a95b98 (diff)
downloadnss-hg-32a3380f169bc3ee2218d97e9929cd3286d96334.tar.gz
Bug 1620799 - Introduce NSS_DISABLE_ARM32_NEON r=jcj
Only some Arm32 supports neon, so let's introduce NSS_DISABLE_ARM32_NEON to allow disabling Neon acceleration when building for Arm32. Signed-off-by: Giulio Benetti <giulio.benetti@benettiengineering.com>
-rw-r--r--coreconf/config.gypi1
-rw-r--r--coreconf/config.mk5
-rw-r--r--lib/freebl/Makefile4
-rw-r--r--lib/freebl/freebl.gyp14
-rw-r--r--lib/freebl/gcm.c3
5 files changed, 24 insertions, 3 deletions
diff --git a/coreconf/config.gypi b/coreconf/config.gypi
index 2a730398b..f67dd7f13 100644
--- a/coreconf/config.gypi
+++ b/coreconf/config.gypi
@@ -103,6 +103,7 @@
'disable_libpkix%': 1,
'disable_werror%': 0,
'disable_altivec%': 0,
+ 'disable_arm32_neon%': 0,
'mozilla_client%': 0,
'comm_client%': 0,
'moz_fold_libs%': 0,
diff --git a/coreconf/config.mk b/coreconf/config.mk
index 4eda497a2..b751ead5d 100644
--- a/coreconf/config.mk
+++ b/coreconf/config.mk
@@ -200,6 +200,11 @@ DEFINES += -DPKIX_OBJECT_LEAK_TEST
endif
endif
+# Avoid building with Neon acceleration on Arm32
+ifdef NSS_DISABLE_ARM32_NEON
+DEFINES += -DNSS_DISABLE_ARM32_NEON
+endif
+
# Avoid building with PowerPC's Altivec acceleration
ifdef NSS_DISABLE_ALTIVEC
DEFINES += -DNSS_DISABLE_ALTIVEC
diff --git a/lib/freebl/Makefile b/lib/freebl/Makefile
index 32da68301..a03c0d108 100644
--- a/lib/freebl/Makefile
+++ b/lib/freebl/Makefile
@@ -124,7 +124,9 @@ ifeq ($(CPU_ARCH),aarch64)
EXTRA_SRCS += aes-armv8.c gcm-aarch64.c
endif
ifeq ($(CPU_ARCH),arm)
+ifndef NSS_DISABLE_ARM32_NEON
EXTRA_SRCS += gcm-arm32-neon.c
+endif
ifdef CC_IS_CLANG
DEFINES += -DUSE_HW_AES
EXTRA_SRCS += aes-armv8.c
@@ -778,8 +780,10 @@ ifeq ($(CPU_ARCH),arm)
# Confusingly, __SOFTFP__ is the name of the define for the softfloat ABI, not for the softfp ABI.
USES_SOFTFLOAT_ABI := $(shell $(CC) -o - -E -dM - $(CFLAGS) < /dev/null | grep __SOFTFP__ > /dev/null && echo 1)
$(OBJDIR)/$(PROG_PREFIX)aes-armv8$(OBJ_SUFFIX): CFLAGS += -march=armv8-a -mfpu=crypto-neon-fp-armv8$(if $(USES_SOFTFLOAT_ABI), -mfloat-abi=softfp)
+ifndef NSS_DISABLE_ARM32_NEON
$(OBJDIR)/$(PROG_PREFIX)gcm-arm32-neon$(OBJ_SUFFIX): CFLAGS += -march=armv7 -mfpu=neon$(if $(USES_SOFTFLOAT_ABI), -mfloat-abi=softfp)
endif
+endif
ifeq ($(CPU_ARCH),aarch64)
$(OBJDIR)/$(PROG_PREFIX)aes-armv8$(OBJ_SUFFIX): CFLAGS += -march=armv8-a+crypto
$(OBJDIR)/$(PROG_PREFIX)gcm-aarch64$(OBJ_SUFFIX): CFLAGS += -march=armv8-a+crypto
diff --git a/lib/freebl/freebl.gyp b/lib/freebl/freebl.gyp
index 8f3ddd978..5975b76cd 100644
--- a/lib/freebl/freebl.gyp
+++ b/lib/freebl/freebl.gyp
@@ -337,11 +337,16 @@
'armv8_c_lib'
],
}],
- [ 'target_arch=="arm"', {
+ [ 'disable_arm32_neon==0 and target_arch=="arm"', {
'dependencies': [
'gcm-aes-arm32-neon_c_lib',
],
}],
+ [ 'disable_arm32_neon==1 and target_arch=="arm"', {
+ 'defines!': [
+ 'NSS_DISABLE_ARM32_NEON',
+ ],
+ }],
[ 'target_arch=="arm64" or target_arch=="aarch64"', {
'dependencies': [
'gcm-aes-aarch64_c_lib',
@@ -399,11 +404,16 @@
'armv8_c_lib',
],
}],
- [ 'target_arch=="arm"', {
+ [ 'disable_arm32_neon==0 and target_arch=="arm"', {
'dependencies': [
'gcm-aes-arm32-neon_c_lib',
],
}],
+ [ 'disable_arm32_neon==1 and target_arch=="arm"', {
+ 'defines!': [
+ 'NSS_DISABLE_ARM32_NEON',
+ ],
+ }],
[ 'target_arch=="arm64" or target_arch=="aarch64"', {
'dependencies': [
'gcm-aes-aarch64_c_lib',
diff --git a/lib/freebl/gcm.c b/lib/freebl/gcm.c
index e5742b9b8..5065197ef 100644
--- a/lib/freebl/gcm.c
+++ b/lib/freebl/gcm.c
@@ -22,7 +22,8 @@
#if defined(__aarch64__) && defined(IS_LITTLE_ENDIAN) && \
(defined(__clang__) || defined(__GNUC__) && __GNUC__ > 6)
#define USE_ARM_GCM
-#elif defined(__arm__) && defined(IS_LITTLE_ENDIAN)
+#elif defined(__arm__) && defined(IS_LITTLE_ENDIAN) && \
+ !defined(NSS_DISABLE_ARM32_NEON)
/* We don't test on big endian platform, so disable this on big endian. */
#define USE_ARM_GCM
#endif