hc
2023-02-13 e440ec23c5a540cdd3f7464e8779219be6fd3d95
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
From 38e497b3d9e0bff3da7a1a5d4c0760661ded4b6f Mon Sep 17 00:00:00 2001
From: Giulio Benetti <giulio.benetti@benettiengineering.com>
Date: Wed, 1 Apr 2020 09:39:45 -0700
Subject: [PATCH] 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>
 
--HG--
extra : rebase_source : c6e3d22ef43ac5012af69214499616f868f4c5b2
 
Signed-off-by: Giulio Benetti <giulio.benetti@benettiengineering.com>
---
 nss/coreconf/config.gypi  |  1 +
 nss/coreconf/config.mk    |  5 +++++
 nss/lib/freebl/Makefile   |  4 ++++
 nss/lib/freebl/freebl.gyp | 14 ++++++++++++--
 nss/lib/freebl/gcm.c      |  3 ++-
 5 files changed, 24 insertions(+), 3 deletions(-)
 
diff --git a/nss/coreconf/config.gypi b/nss/coreconf/config.gypi
index 2a730398b..f67dd7f13 100644
--- a/nss/coreconf/config.gypi
+++ b/nss/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/nss/coreconf/config.mk b/nss/coreconf/config.mk
index 4eda497a2..b751ead5d 100644
--- a/nss/coreconf/config.mk
+++ b/nss/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/nss/lib/freebl/Makefile b/nss/lib/freebl/Makefile
index 32da68301..a03c0d108 100644
--- a/nss/lib/freebl/Makefile
+++ b/nss/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/nss/lib/freebl/freebl.gyp b/nss/lib/freebl/freebl.gyp
index 8f3ddd978..5975b76cd 100644
--- a/nss/lib/freebl/freebl.gyp
+++ b/nss/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/nss/lib/freebl/gcm.c b/nss/lib/freebl/gcm.c
index e5742b9b8..5065197ef 100644
--- a/nss/lib/freebl/gcm.c
+++ b/nss/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
-- 
2.20.1