#include "crc32c.h"
+#include "../os/os.h"
+
+bool crc32c_arm64_available = false;
+
+#ifdef ARCH_HAVE_CRC_CRYPTO
#define CRC32C3X8(ITR) \
crc1 = __crc32cd(crc1, *((const uint64_t *)data + 42*1 + (ITR)));\
CRC32C3X8((ITR)*7+6) \
} while(0)
-#ifndef HWCAP_CRC32
-#define HWCAP_CRC32 (1 << 7)
-#endif /* HWCAP_CRC32 */
-
-int crc32c_arm64_available = 0;
-
-#ifdef ARCH_HAVE_ARM64_CRC_CRYPTO
-
-#include <sys/auxv.h>
#include <arm_acle.h>
#include <arm_neon.h>
-static int crc32c_probed;
+static bool crc32c_probed;
/*
* Function to calculate reflected crc with PMULL Instruction
data += sizeof(uint64_t);
}
- if(!(len += 1024))
+ if (!(len += 1024))
return crc;
while ((len -= sizeof(uint64_t)) >= 0) {
void crc32c_arm64_probe(void)
{
- unsigned long hwcap;
if (!crc32c_probed) {
- hwcap = getauxval(AT_HWCAP);
- if (hwcap & HWCAP_CRC32) {
- crc32c_arm64_available = 1;
- }
- crc32c_probed = 1;
+ crc32c_arm64_available = os_cpu_has(CPU_ARM64_CRC32C);
+ crc32c_probed = true;
}
}
-#endif /* ARCH_HAVE_ARM64_CRC_CRYPTO */
+#endif /* ARCH_HAVE_CRC_CRYPTO */