From 7a3444bf1f17f909188ed0dccf210a7301a2717d Mon Sep 17 00:00:00 2001 From: David CARLIER Date: Wed, 10 Mar 2021 09:04:01 -0800 Subject: [PATCH] Mac M1 crc32 intrinsics ARM64 check support proposal (#7893) Summary: Pull Request resolved: https://github.com/facebook/rocksdb/pull/7893 Reviewed By: ajkr Differential Revision: D26050966 Pulled By: jay-zhuang fbshipit-source-id: 9df2bb65d82defd7fad49d5369979b03e22d39c2 --- util/crc32c_arm64.cc | 14 ++++++++++++++ 1 file changed, 14 insertions(+) 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