Apply the AES-GCM unroll8 optimization patch to Neoverse N2
authorXiaokangQian <xiaokang.qian@arm.com>
Wed, 18 May 2022 02:27:55 +0000 (02:27 +0000)
committerPauli <pauli@openssl.org>
Mon, 23 May 2022 01:05:51 +0000 (11:05 +1000)
The loop unrolling and use of EOR3 can improve N2 performance
by up to 32%

Signed-off-by: XiaokangQian <xiaokang.qian@arm.com>
Reviewed-by: Tomas Mraz <tomas@openssl.org>
Reviewed-by: Paul Dale <pauli@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/18350)

crypto/arm_arch.h
crypto/armcap.c

index 0f23e8dc493cbeb7424c107c14d6e65b044f6132..5d8788877f7f1f49713c167370ab779258d63f10 100644 (file)
@@ -101,6 +101,7 @@ extern unsigned int OPENSSL_armv8_rsa_neonized;
 # define ARM_CPU_PART_CORTEX_A72   0xD08
 # define ARM_CPU_PART_N1           0xD0C
 # define ARM_CPU_PART_V1           0xD40
+# define ARM_CPU_PART_N2           0xD49
 
 # define MIDR_PARTNUM_SHIFT       4
 # define MIDR_PARTNUM_MASK        (0xfff << MIDR_PARTNUM_SHIFT)
index bcd6b4052b1395bb912d1136ff7479419e321200..7e6cd8fe907515607236cbada48a1d559dfa094a 100644 (file)
@@ -375,7 +375,8 @@ void OPENSSL_cpuid_setup(void)
         (OPENSSL_armcap_P & ARMV7_NEON)) {
             OPENSSL_armv8_rsa_neonized = 1;
     }
-    if ((MIDR_IS_CPU_MODEL(OPENSSL_arm_midr, ARM_CPU_IMP_ARM, ARM_CPU_PART_V1)) &&
+    if ((MIDR_IS_CPU_MODEL(OPENSSL_arm_midr, ARM_CPU_IMP_ARM, ARM_CPU_PART_V1) ||
+         MIDR_IS_CPU_MODEL(OPENSSL_arm_midr, ARM_CPU_IMP_ARM, ARM_CPU_PART_N2)) &&
         (OPENSSL_armcap_P & ARMV8_SHA3))
         OPENSSL_armcap_P |= ARMV8_UNROLL8_EOR3;
 # endif