blob: 131c7dc158fb9fcd2f4021cfc9e4a3b2b2c6b5eb (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
--- crc.cpp.orig 2025-02-12 14:05:26 UTC
+++ crc.cpp
@@ -42,12 +42,18 @@ void InitCRC32(uint *CRCTab)
}
#ifdef USE_NEON_CRC32
- #ifdef _APPLE
+ #if defined(_APPLE)
// getauxval isn't available in OS X
uint Value=0;
size_t Size=sizeof(Value);
int RetCode=sysctlbyname("hw.optional.armv8_crc32",&Value,&Size,NULL,0);
CRC_Neon=RetCode==0 && Value!=0;
+ #elif defined(__FreeBSD__)
+ // getauxval isn't available on FreeBSD
+ uint64 Reg=READ_SPECIALREG(id_aa64isar0_el1);
+ if (ID_AA64ISAR0_CRC32_VAL(Reg) == ID_AA64ISAR0_CRC32_BASE) {
+ CRC_Neon=true;
+ }
#else
CRC_Neon=(getauxval(AT_HWCAP) & HWCAP_CRC32)!=0;
#endif
|