You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

54 lines
1.5 KiB

/*
* Copyright 2002-2019 Intel Corporation.
*
* This software is provided to you as Sample Source Code as defined in the accompanying
* End User License Agreement for the Intel(R) Software Development Products ("Agreement")
* section 1.L.
*
* This software and the related documents are provided as is, with no express or implied
* warranties, other than those that are expressly stated in the License.
*/
#ifdef TARGET_MAC
.global _SupportsAvx512f
_SupportsAvx512f:
#else
.type SupportsAvx512f, @function
.global SupportsAvx512f
SupportsAvx512f:
#endif
push %rbp
mov %rsp, %rbp
push %rbx
push %rcx
push %rdx
mov $1, %rax
cpuid
andq $0x18000000, %rcx
cmpq $0x18000000, %rcx # check both OSXSAVE and AVX feature flags
jne NotSupported
# processor supports AVX instructions and XGETBV is enabled by OS
mov $0, %rcx # specify 0 for XFEATURE_ENABLED_MASK register
# 0xd0010f is xgetbv - result in EDX:EAX
.byte 0xf, 0x1, 0xd0
andq $0xe6, %rax
cmpq $0xe6, %rax # check OS has enabled both XMM, YMM, ZMM and OPMASK state support
jne NotSupported
mov $7, %rax
mov $0, %rcx # specify 0 for XFEATURE_ENABLED_MASK register
cpuid
andq $0x10000, %rbx
cmpq $0x10000, %rbx
jne NotSupported # no AVX512f
mov $1, %rax
done:
pop %rdx
pop %rcx
pop %rbx
leave
ret
NotSupported:
mov $0, %rax
jmp done