diff --git a/util/crc32c_arm64.cc b/util/crc32c_arm64.cc index e04e38c0c..a799fb605 100644 --- a/util/crc32c_arm64.cc +++ b/util/crc32c_arm64.cc @@ -19,6 +19,9 @@ #ifndef HWCAP_PMULL #define HWCAP_PMULL (1 << 4) #endif +#if defined(__APPLE__) +#include +#endif #ifdef HAVE_ARM64_CRYPTO /* unfolding to compute 8 * 3 = 24 bytes parallelly */ @@ -43,6 +46,7 @@ extern bool pmull_runtime_flag; uint32_t crc32c_runtime_check(void) { +#if !defined(__APPLE__) uint64_t auxv = 0; #if defined(ROCKSDB_AUXV_GETAUXVAL_PRESENT) auxv = getauxval(AT_HWCAP); @@ -50,9 +54,16 @@ uint32_t crc32c_runtime_check(void) { elf_aux_info(AT_HWCAP, &auxv, sizeof(auxv)); #endif return (auxv & HWCAP_CRC32) != 0; +#else + int r; + size_t l = sizeof(r); + if (sysctlbyname("hw.optional.armv8_crc32", &r, &l, NULL, 0) == -1) return 0; + return r == 1; +#endif } bool crc32c_pmull_runtime_check(void) { +#if !defined(__APPLE__) uint64_t auxv = 0; #if defined(ROCKSDB_AUXV_GETAUXVAL_PRESENT) auxv = getauxval(AT_HWCAP); @@ -60,6 +71,9 @@ bool crc32c_pmull_runtime_check(void) { elf_aux_info(AT_HWCAP, &auxv, sizeof(auxv)); #endif return (auxv & HWCAP_PMULL) != 0; +#else + return true; +#endif } #ifdef ROCKSDB_UBSAN_RUN