| /* Check if the OS supports executing AVX512F instructions. */ |
| |
| #define XCR_XFEATURE_ENABLED_MASK 0x0 |
| |
| #define XSTATE_FP 0x1 |
| #define XSTATE_SSE 0x2 |
| #define XSTATE_YMM 0x4 |
| #define XSTATE_OPMASK 0x20 |
| #define XSTATE_ZMM 0x40 |
| #define XSTATE_HI_ZMM 0x80 |
| |
| static int |
| avx512f_os_support (void) |
| { |
| unsigned int eax, edx; |
| unsigned int ecx = XCR_XFEATURE_ENABLED_MASK; |
| unsigned int mask = XSTATE_SSE | XSTATE_YMM | XSTATE_OPMASK |
| | XSTATE_ZMM | XSTATE_HI_ZMM; |
| |
| __asm__ ("xgetbv" : "=a" (eax), "=d" (edx) : "c" (ecx)); |
| |
| return ((eax & mask) == mask); |
| } |