Adding aarch64 CPU feature detection for FreeBSD (#1210)

* Added FreeBSD cpu feature detection to common/common.c

* Updated common/common.c to use __FreeBSD__ instead of __FREEBSD__

* added FreeBSD support to SIKE's CmakeLists.txt

* Added FreeBSD cpu feature detection to common/common.c

* Updated common/common.c to use __FreeBSD__ instead of __FREEBSD__

* added FreeBSD support to SIKE's CmakeLists.txt

* Added in comment to common.c to keep consistent with other platforms

* Added FreeBSD cpu feature detection to common/common.c

* Updated common/common.c to use __FreeBSD__ instead of __FREEBSD__

* added FreeBSD support to SIKE's CmakeLists.txt

* Added in comment to common.c to keep consistent with other platforms

* Updated documentation to say FreeBSD is support on aarch64

* Updated docs to indicated that SIKE is supported on FreeBSD on aarch64
This commit is contained in:
Jason Goertzen 2022-06-07 18:28:23 -06:00 committed by GitHub
parent b5484ce92e
commit 38d3014dc2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 53 additions and 17 deletions

View File

@ -38,7 +38,7 @@
| [Primary Source](#primary-source) | optimized | All | All | None | True | True | False |
| [Primary Source](#primary-source) | additional\_amd64\_bmi2 | x86\_64 | Linux,Darwin | BMI2 | True | True | False |
| [Primary Source](#primary-source) | additional\_amd64\_adx | x86\_64 | Linux,Darwin | BMI2,ADX | True | True | False |
| [Primary Source](#primary-source) | additional\_arm64 | arm64v8 | Linux,Darwin | None | True | True | False |
| [Primary Source](#primary-source) | additional\_arm64 | arm64v8 | Linux,Darwin,FreeBSD | None | True | True | False |
Are implementations chosen based on runtime CPU feature detection? **No**.
@ -51,7 +51,7 @@ Are implementations chosen based on runtime CPU feature detection? **No**.
| [Primary Source](#primary-source) | optimized | All | All | None | True | True | False |
| [Primary Source](#primary-source) | additional\_amd64\_bmi2 | x86\_64 | Linux,Darwin | BMI2 | True | True | False |
| [Primary Source](#primary-source) | additional\_amd64\_adx | x86\_64 | Linux,Darwin | BMI2,ADX | True | True | False |
| [Primary Source](#primary-source) | additional\_arm64 | arm64v8 | Linux,Darwin | None | True | True | False |
| [Primary Source](#primary-source) | additional\_arm64 | arm64v8 | Linux,Darwin,FreeBSD | None | True | True | False |
Are implementations chosen based on runtime CPU feature detection? **No**.
@ -63,7 +63,7 @@ Are implementations chosen based on runtime CPU feature detection? **No**.
| [Primary Source](#primary-source) | additional\_amd64 | x86\_64 | Linux,Darwin | None | True | True | False |
| [Primary Source](#primary-source) | additional\_amd64\_bmi2 | x86\_64 | Linux,Darwin | BMI2 | True | True | False |
| [Primary Source](#primary-source) | additional\_amd64\_adx | x86\_64 | Linux,Darwin | BMI2,ADX | True | True | False |
| [Primary Source](#primary-source) | additional\_arm64 | arm64v8 | Linux,Darwin | None | True | True | False |
| [Primary Source](#primary-source) | additional\_arm64 | arm64v8 | Linux,Darwin,FreeBSD | None | True | True | False |
Are implementations chosen based on runtime CPU feature detection? **No**.
@ -75,7 +75,7 @@ Are implementations chosen based on runtime CPU feature detection? **No**.
| [Primary Source](#primary-source) | additional\_amd64 | x86\_64 | Linux,Darwin | None | True | True | False |
| [Primary Source](#primary-source) | additional\_amd64\_bmi2 | x86\_64 | Linux,Darwin | BMI2 | True | True | False |
| [Primary Source](#primary-source) | additional\_amd64\_adx | x86\_64 | Linux,Darwin | BMI2,ADX | True | True | False |
| [Primary Source](#primary-source) | additional\_arm64 | arm64v8 | Linux,Darwin | None | True | True | False |
| [Primary Source](#primary-source) | additional\_arm64 | arm64v8 | Linux,Darwin,FreeBSD | None | True | True | False |
Are implementations chosen based on runtime CPU feature detection? **No**.
@ -86,7 +86,7 @@ Are implementations chosen based on runtime CPU feature detection? **No**.
| [Primary Source](#primary-source) | optimized | All | All | None | True | True | False |
| [Primary Source](#primary-source) | additional\_amd64\_bmi2 | x86\_64 | Linux,Darwin | BMI2 | True | True | False |
| [Primary Source](#primary-source) | additional\_amd64\_adx | x86\_64 | Linux,Darwin | BMI2,ADX | True | True | False |
| [Primary Source](#primary-source) | additional\_arm64 | arm64v8 | Linux,Darwin | None | True | True | False |
| [Primary Source](#primary-source) | additional\_arm64 | arm64v8 | Linux,Darwin,FreeBSD | None | True | True | False |
Are implementations chosen based on runtime CPU feature detection? **No**.
@ -97,7 +97,7 @@ Are implementations chosen based on runtime CPU feature detection? **No**.
| [Primary Source](#primary-source) | optimized | All | All | None | True | True | False |
| [Primary Source](#primary-source) | additional\_amd64\_bmi2 | x86\_64 | Linux,Darwin | BMI2 | True | True | False |
| [Primary Source](#primary-source) | additional\_amd64\_adx | x86\_64 | Linux,Darwin | BMI2,ADX | True | True | False |
| [Primary Source](#primary-source) | additional\_arm64 | arm64v8 | Linux,Darwin | None | True | True | False |
| [Primary Source](#primary-source) | additional\_arm64 | arm64v8 | Linux,Darwin,FreeBSD | None | True | True | False |
Are implementations chosen based on runtime CPU feature detection? **No**.
@ -109,7 +109,7 @@ Are implementations chosen based on runtime CPU feature detection? **No**.
| [Primary Source](#primary-source) | additional\_amd64 | x86\_64 | Linux,Darwin | None | True | True | False |
| [Primary Source](#primary-source) | additional\_amd64\_bmi2 | x86\_64 | Linux,Darwin | BMI2 | True | True | False |
| [Primary Source](#primary-source) | additional\_amd64\_adx | x86\_64 | Linux,Darwin | BMI2,ADX | True | True | False |
| [Primary Source](#primary-source) | additional\_arm64 | arm64v8 | Linux,Darwin | None | True | True | False |
| [Primary Source](#primary-source) | additional\_arm64 | arm64v8 | Linux,Darwin,FreeBSD | None | True | True | False |
Are implementations chosen based on runtime CPU feature detection? **No**.
@ -121,7 +121,7 @@ Are implementations chosen based on runtime CPU feature detection? **No**.
| [Primary Source](#primary-source) | additional\_amd64 | x86\_64 | Linux,Darwin | None | True | True | False |
| [Primary Source](#primary-source) | additional\_amd64\_bmi2 | x86\_64 | Linux,Darwin | BMI2 | True | True | False |
| [Primary Source](#primary-source) | additional\_amd64\_adx | x86\_64 | Linux,Darwin | BMI2,ADX | True | True | False |
| [Primary Source](#primary-source) | additional\_arm64 | arm64v8 | Linux,Darwin | None | True | True | False |
| [Primary Source](#primary-source) | additional\_arm64 | arm64v8 | Linux,Darwin,FreeBSD | None | True | True | False |
Are implementations chosen based on runtime CPU feature detection? **No**.
@ -132,7 +132,7 @@ Are implementations chosen based on runtime CPU feature detection? **No**.
| [Primary Source](#primary-source) | optimized | All | All | None | True | True | False |
| [Primary Source](#primary-source) | additional\_amd64\_bmi2 | x86\_64 | Linux,Darwin | BMI2 | True | True | False |
| [Primary Source](#primary-source) | additional\_amd64\_adx | x86\_64 | Linux,Darwin | BMI2,ADX | True | True | False |
| [Primary Source](#primary-source) | additional\_arm64 | arm64v8 | Linux,Darwin | None | True | True | False |
| [Primary Source](#primary-source) | additional\_arm64 | arm64v8 | Linux,Darwin,FreeBSD | None | True | True | False |
Are implementations chosen based on runtime CPU feature detection? **No**.
@ -143,7 +143,7 @@ Are implementations chosen based on runtime CPU feature detection? **No**.
| [Primary Source](#primary-source) | optimized | All | All | None | True | True | False |
| [Primary Source](#primary-source) | additional\_amd64\_bmi2 | x86\_64 | Linux,Darwin | BMI2 | True | True | False |
| [Primary Source](#primary-source) | additional\_amd64\_adx | x86\_64 | Linux,Darwin | BMI2,ADX | True | True | False |
| [Primary Source](#primary-source) | additional\_arm64 | arm64v8 | Linux,Darwin | None | True | True | False |
| [Primary Source](#primary-source) | additional\_arm64 | arm64v8 | Linux,Darwin,FreeBSD | None | True | True | False |
Are implementations chosen based on runtime CPU feature detection? **No**.
@ -155,7 +155,7 @@ Are implementations chosen based on runtime CPU feature detection? **No**.
| [Primary Source](#primary-source) | additional\_amd64 | x86\_64 | Linux,Darwin | None | True | True | False |
| [Primary Source](#primary-source) | additional\_amd64\_bmi2 | x86\_64 | Linux,Darwin | BMI2 | True | True | False |
| [Primary Source](#primary-source) | additional\_amd64\_adx | x86\_64 | Linux,Darwin | BMI2,ADX | True | True | False |
| [Primary Source](#primary-source) | additional\_arm64 | arm64v8 | Linux,Darwin | None | True | True | False |
| [Primary Source](#primary-source) | additional\_arm64 | arm64v8 | Linux,Darwin,FreeBSD | None | True | True | False |
Are implementations chosen based on runtime CPU feature detection? **No**.
@ -167,7 +167,7 @@ Are implementations chosen based on runtime CPU feature detection? **No**.
| [Primary Source](#primary-source) | additional\_amd64 | x86\_64 | Linux,Darwin | None | True | True | False |
| [Primary Source](#primary-source) | additional\_amd64\_bmi2 | x86\_64 | Linux,Darwin | BMI2 | True | True | False |
| [Primary Source](#primary-source) | additional\_amd64\_adx | x86\_64 | Linux,Darwin | BMI2,ADX | True | True | False |
| [Primary Source](#primary-source) | additional\_arm64 | arm64v8 | Linux,Darwin | None | True | True | False |
| [Primary Source](#primary-source) | additional\_arm64 | arm64v8 | Linux,Darwin,FreeBSD | None | True | True | False |
Are implementations chosen based on runtime CPU feature detection? **No**.
@ -178,7 +178,7 @@ Are implementations chosen based on runtime CPU feature detection? **No**.
| [Primary Source](#primary-source) | optimized | All | All | None | True | True | False |
| [Primary Source](#primary-source) | additional\_amd64\_bmi2 | x86\_64 | Linux,Darwin | BMI2 | True | True | False |
| [Primary Source](#primary-source) | additional\_amd64\_adx | x86\_64 | Linux,Darwin | BMI2,ADX | True | True | False |
| [Primary Source](#primary-source) | additional\_arm64 | arm64v8 | Linux,Darwin | None | True | True | False |
| [Primary Source](#primary-source) | additional\_arm64 | arm64v8 | Linux,Darwin,FreeBSD | None | True | True | False |
Are implementations chosen based on runtime CPU feature detection? **No**.
@ -189,7 +189,7 @@ Are implementations chosen based on runtime CPU feature detection? **No**.
| [Primary Source](#primary-source) | optimized | All | All | None | True | True | False |
| [Primary Source](#primary-source) | additional\_amd64\_bmi2 | x86\_64 | Linux,Darwin | BMI2 | True | True | False |
| [Primary Source](#primary-source) | additional\_amd64\_adx | x86\_64 | Linux,Darwin | BMI2,ADX | True | True | False |
| [Primary Source](#primary-source) | additional\_arm64 | arm64v8 | Linux,Darwin | None | True | True | False |
| [Primary Source](#primary-source) | additional\_arm64 | arm64v8 | Linux,Darwin,FreeBSD | None | True | True | False |
Are implementations chosen based on runtime CPU feature detection? **No**.
@ -201,7 +201,7 @@ Are implementations chosen based on runtime CPU feature detection? **No**.
| [Primary Source](#primary-source) | additional\_amd64 | x86\_64 | Linux,Darwin | None | True | True | False |
| [Primary Source](#primary-source) | additional\_amd64\_bmi2 | x86\_64 | Linux,Darwin | BMI2 | True | True | False |
| [Primary Source](#primary-source) | additional\_amd64\_adx | x86\_64 | Linux,Darwin | BMI2,ADX | True | True | False |
| [Primary Source](#primary-source) | additional\_arm64 | arm64v8 | Linux,Darwin | None | True | True | False |
| [Primary Source](#primary-source) | additional\_arm64 | arm64v8 | Linux,Darwin,FreeBSD | None | True | True | False |
Are implementations chosen based on runtime CPU feature detection? **No**.
@ -213,7 +213,7 @@ Are implementations chosen based on runtime CPU feature detection? **No**.
| [Primary Source](#primary-source) | additional\_amd64 | x86\_64 | Linux,Darwin | None | True | True | False |
| [Primary Source](#primary-source) | additional\_amd64\_bmi2 | x86\_64 | Linux,Darwin | BMI2 | True | True | False |
| [Primary Source](#primary-source) | additional\_amd64\_adx | x86\_64 | Linux,Darwin | BMI2,ADX | True | True | False |
| [Primary Source](#primary-source) | additional\_arm64 | arm64v8 | Linux,Darwin | None | True | True | False |
| [Primary Source](#primary-source) | additional\_arm64 | arm64v8 | Linux,Darwin,FreeBSD | None | True | True | False |
Are implementations chosen based on runtime CPU feature detection? **No**.

View File

@ -77,6 +77,7 @@ parameter-sets:
operating_systems:
- Linux
- Darwin
- FreeBSD
common-crypto:
- SHA3: liboqs
no-secret-dependent-branching-claimed: true
@ -135,6 +136,7 @@ parameter-sets:
operating_systems:
- Linux
- Darwin
- FreeBSD
common-crypto:
- SHA3: liboqs
no-secret-dependent-branching-claimed: true
@ -205,6 +207,7 @@ parameter-sets:
operating_systems:
- Linux
- Darwin
- FreeBSD
common-crypto:
- SHA3: liboqs
no-secret-dependent-branching-claimed: true
@ -275,6 +278,7 @@ parameter-sets:
operating_systems:
- Linux
- Darwin
- FreeBSD
common-crypto:
- SHA3: liboqs
no-secret-dependent-branching-claimed: true
@ -333,6 +337,7 @@ parameter-sets:
operating_systems:
- Linux
- Darwin
- FreeBSD
common-crypto:
- SHA3: liboqs
no-secret-dependent-branching-claimed: true
@ -391,6 +396,7 @@ parameter-sets:
operating_systems:
- Linux
- Darwin
- FreeBSD
common-crypto:
- SHA3: liboqs
no-secret-dependent-branching-claimed: true
@ -461,6 +467,7 @@ parameter-sets:
operating_systems:
- Linux
- Darwin
- FreeBSD
common-crypto:
- SHA3: liboqs
no-secret-dependent-branching-claimed: true
@ -531,6 +538,7 @@ parameter-sets:
operating_systems:
- Linux
- Darwin
- FreeBSD
common-crypto:
- SHA3: liboqs
no-secret-dependent-branching-claimed: true
@ -589,6 +597,7 @@ parameter-sets:
operating_systems:
- Linux
- Darwin
- FreeBSD
common-crypto:
- SHA3: liboqs
no-secret-dependent-branching-claimed: true
@ -647,6 +656,7 @@ parameter-sets:
operating_systems:
- Linux
- Darwin
- FreeBSD
common-crypto:
- SHA3: liboqs
no-secret-dependent-branching-claimed: true
@ -717,6 +727,7 @@ parameter-sets:
operating_systems:
- Linux
- Darwin
- FreeBSD
common-crypto:
- SHA3: liboqs
no-secret-dependent-branching-claimed: true
@ -787,6 +798,7 @@ parameter-sets:
operating_systems:
- Linux
- Darwin
- FreeBSD
common-crypto:
- SHA3: liboqs
no-secret-dependent-branching-claimed: true
@ -845,6 +857,7 @@ parameter-sets:
operating_systems:
- Linux
- Darwin
- FreeBSD
common-crypto:
- SHA3: liboqs
no-secret-dependent-branching-claimed: true
@ -903,6 +916,7 @@ parameter-sets:
operating_systems:
- Linux
- Darwin
- FreeBSD
common-crypto:
- SHA3: liboqs
no-secret-dependent-branching-claimed: true
@ -973,6 +987,7 @@ parameter-sets:
operating_systems:
- Linux
- Darwin
- FreeBSD
common-crypto:
- SHA3: liboqs
no-secret-dependent-branching-claimed: true
@ -1043,6 +1058,7 @@ parameter-sets:
operating_systems:
- Linux
- Darwin
- FreeBSD
common-crypto:
- SHA3: liboqs
no-secret-dependent-branching-claimed: true

View File

@ -91,6 +91,26 @@ static void set_available_cpu_extensions(void) {
cpu_ext_data[OQS_CPU_EXT_ARM_NEON] = macos_feature_detection("hw.optional.neon");
cpu_ext_data[OQS_CPU_EXT_INIT] = 1;
}
#elif defined(__FreeBSD__) || defined(__FreeBSD)
#include <stdint.h>
#include <machine/armreg.h>
static void set_available_cpu_extensions(void) {
/* mark that this function has been called */
cpu_ext_data[OQS_CPU_EXT_INIT] = 1;
uint64_t isar0 = READ_SPECIALREG(id_aa64isar0_el1);
if (ID_AA64ISAR0_AES_VAL(isar0) >= ID_AA64ISAR0_AES_BASE) {
cpu_ext_data[OQS_CPU_EXT_ARM_AES] = 1;
}
if (ID_AA64ISAR0_SHA2_VAL(isar0) >= ID_AA64ISAR0_SHA2_BASE) {
cpu_ext_data[OQS_CPU_EXT_ARM_SHA2] = 1;
}
if (ID_AA64ISAR0_SHA3_VAL(isar0) >= ID_AA64ISAR0_SHA3_BASE) {
cpu_ext_data[OQS_CPU_EXT_ARM_SHA3] = 1;
}
if (ID_AA64ISAR0_AdvSIMD_VAL(isar0) >= ID_AA64ISAR0_AdvSIMD_BASE) {
cpu_ext_data[OQS_CPU_EXT_ARM_NEON] = 1;
}
}
#else
#include <sys/auxv.h>
#include <asm/hwcap.h>

View File

@ -74,7 +74,7 @@ if(
endif()
endif()
elseif(ARCH_ARM64v8)
if(CMAKE_HOST_SYSTEM_NAME STREQUAL "Linux" OR CMAKE_HOST_SYSTEM_NAME STREQUAL "Darwin")
if(CMAKE_HOST_SYSTEM_NAME STREQUAL "Linux" OR CMAKE_HOST_SYSTEM_NAME STREQUAL "Darwin" OR CMAKE_HOST_SYSTEM_NAME STREQUAL "FreeBSD")
if(OQS_ENABLE_KEM_sike_p434 OR OQS_ENABLE_KEM_sidh_p434 OR OQS_ENABLE_KEM_sike_p434_compressed OR OQS_ENABLE_KEM_sidh_p434_compressed)
set(SRCS ${SRCS} external/P434/ARM64/fp_arm64_asm.S)
endif()