Skip to content

Commit 7c61142

Browse files
committed
Make N1 cpucap a subset of that of V1 and V2 so that N1 Keccka-4x code path can be tested on V1 or V2.
1 parent 93f9f73 commit 7c61142

2 files changed

Lines changed: 8 additions & 1 deletion

File tree

crypto/fipsmodule/cpucap/cpu_aarch64_linux.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,9 +89,13 @@ void OPENSSL_cpuid_setup(void) {
8989
}
9090
if (MIDR_IS_CPU_MODEL(OPENSSL_arm_midr, ARM_CPU_IMP_ARM, ARM_CPU_PART_V1)) {
9191
OPENSSL_armcap_P |= ARMV8_NEOVERSE_V1;
92+
// CPU capabilities of N1 are a subset of CPU capabilities of V1
93+
OPENSSL_armcap_P |= ARMV8_NEOVERSE_N1;
9294
}
9395
if (MIDR_IS_CPU_MODEL(OPENSSL_arm_midr, ARM_CPU_IMP_ARM, ARM_CPU_PART_V2)) {
9496
OPENSSL_armcap_P |= ARMV8_NEOVERSE_V2;
97+
// CPU capabilities of N1 are a subset of CPU capabilities of V1
98+
OPENSSL_armcap_P |= ARMV8_NEOVERSE_N1;
9599
}
96100
}
97101

crypto/fipsmodule/cpucap/internal.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -259,7 +259,10 @@ OPENSSL_INLINE int CRYPTO_is_ARMv8_RNDR_capable(void) {
259259
}
260260

261261
OPENSSL_INLINE int CRYPTO_is_Neoverse_N1(void) {
262-
return (OPENSSL_armcap_P & ARMV8_NEOVERSE_N1) != 0;
262+
// It is Neoverse N1 if only ARMV8_NEOVERSE_N1 = 1 and
263+
// ARMV8_NEOVERSE_<V1|V2> = 0.
264+
return ((OPENSSL_armcap_P & ARMV8_NEOVERSE_N1) != 0 &&
265+
(OPENSSL_armcap_P & (ARMV8_NEOVERSE_V1 | ARMV8_NEOVERSE_V2)) == 0);
263266
}
264267

265268
OPENSSL_INLINE int CRYPTO_is_Neoverse_V1(void) {

0 commit comments

Comments
 (0)