11#ifndef ZSTD_COMMON_CPU_H
12#define ZSTD_COMMON_CPU_H
39#if defined(_MSC_VER) && (defined(_M_X64) || defined(_M_IX86))
55#elif defined(__i386__) && defined(__PIC__) && !defined(__clang__) && defined(__GNUC__)
74 :
"=a"(f1a),
"=c"(
f1c),
"=d"(f1d)
81 "movl %%ebx, %%eax\n\t"
83 :
"=a"(f7b),
"=c"(f7c)
87#elif defined(__x86_64__) || defined(_M_X64) || defined(__i386__)
89 __asm__(
"cpuid" :
"=a"(
n) :
"a"(0) :
"ebx",
"ecx",
"edx");
92 __asm__(
"cpuid" :
"=a"(f1a),
"=c"(
f1c),
"=d"(f1d) :
"a"(1) :
"ebx");
97 :
"=a"(f7a),
"=b"(f7b),
"=c"(f7c)
112#define X(name, r, bit) \
113 MEM_STATIC int ZSTD_cpuid_##name(ZSTD_cpuid_t const cpuid) { \
114 return ((cpuid.r) & (1U << bit)) != 0; \
118#define C(name, bit) X(name, f1c, bit)
149#define D(name, bit) X(name, f1d, bit)
182#define B(name, bit) X(name, f7b, bit)
208#define C(name, bit) X(name, f7c, bit)
MEM_STATIC ZSTD_cpuid_t ZSTD_cpuid(void)
PPC_QUAL void __cpuid(int CPUInfo[], const int InfoType)
__INTRIN_INLINE void __cpuidex(int CPUInfo[4], int InfoType, int ECXValue)
double __cdecl fma(double, double, double)
__asm__(".p2align 4, 0x90\n" ".seh_proc __seh2_global_filter_func\n" "__seh2_global_filter_func:\n" "\tpush %rbp\n" "\t.seh_pushreg %rbp\n" "\tsub $32, %rsp\n" "\t.seh_stackalloc 32\n" "\t.seh_endprologue\n" "\tmov %rdx, %rbp\n" "\tjmp *%rax\n" "__seh2_global_filter_func_exit:\n" "\t.p2align 4\n" "\tadd $32, %rsp\n" "\tpop %rbp\n" "\tret\n" "\t.seh_endproc")