14#ifndef LZMA_CRC32_ARM64_H
15#define LZMA_CRC32_ARM64_H
25#if defined(CRC32_GENERIC) && defined(CRC32_ARCH_OPTIMIZED)
26# if defined(HAVE_GETAUXVAL) || defined(HAVE_ELF_AUX_INFO)
29# include <processthreadsapi.h>
30# elif defined(__APPLE__) && defined(HAVE_SYSCTLBYNAME)
31# include <sys/sysctl.h>
39#if (defined(__GNUC__) || defined(__clang__)) && !defined(__EDG__)
40# define crc_attr_target __attribute__((__target__("+crc")))
42# define crc_attr_target
48crc32_arch_optimized(
const uint8_t *
buf,
size_t size, uint32_t crc)
57 crc = __crc32b(crc, *
buf);
67 crc = __crc32d(crc, aligned_read64le(
buf));
71 crc = __crc32b(crc, *
buf);
77#if defined(CRC32_GENERIC) && defined(CRC32_ARCH_OPTIMIZED)
79is_arch_extension_supported(
void)
81#if defined(HAVE_GETAUXVAL)
82 return (getauxval(AT_HWCAP) & HWCAP_CRC32) != 0;
84#elif defined(HAVE_ELF_AUX_INFO)
85 unsigned long feature_flags;
87 if (elf_aux_info(AT_HWCAP, &feature_flags,
sizeof(feature_flags)) != 0)
90 return (feature_flags & HWCAP_CRC32) != 0;
93 return IsProcessorFeaturePresent(
94 PF_ARM_V8_CRC32_INSTRUCTIONS_AVAILABLE);
96#elif defined(__APPLE__) && defined(HAVE_SYSCTLBYNAME)
98 size_t size =
sizeof(has_crc32);
104 if (sysctlbyname(
"hw.optional.armv8_crc32", &has_crc32,
117# error Runtime detection method unavailable.
#define crc_attr_target
Definition crc32_arm64.h:42
char buf[N_BUF]
Definition spewG.c:36
size_t uintptr_t
Definition fuzzer.c:71
#define NULL
Definition getopt1.c:37
#define my_min(x, y)
Definition sysdefs.h:185
static uint32_t const uint8_t uint32_t uint32_t limit
Definition memcmplen.h:45