diff options
Diffstat (limited to 'tools/debugserver/source/MacOSX/HasAVX.s')
-rw-r--r-- | tools/debugserver/source/MacOSX/HasAVX.s | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/tools/debugserver/source/MacOSX/HasAVX.s b/tools/debugserver/source/MacOSX/HasAVX.s new file mode 100644 index 0000000000000..b66ccf14dbeed --- /dev/null +++ b/tools/debugserver/source/MacOSX/HasAVX.s @@ -0,0 +1,50 @@ +//===-- HasAVX.s ---------------------------------------*- x86 Assembly -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +#if defined (__i386__) || defined (__x86_64__) + +.globl _HasAVX + +_HasAVX: +#if defined (__x86_64__) + pushq %rbp + movq %rsp, %rbp + pushq %rbx +#else + pushl %ebp + movl %esp, %ebp + pushl %ebx +#endif + mov $1, %eax + cpuid // clobbers ebx + and $0x018000000, %ecx + cmp $0x018000000, %ecx + jne not_supported + mov $0, %ecx +.byte 0x0f, 0x01, 0xd0 // xgetbv, for those assemblers that don't know it + and $0x06, %eax + cmp $0x06, %eax + jne not_supported + mov $1, %eax + jmp done +not_supported: + mov $0, %eax +done: +#if defined (__x86_64__) + popq %rbx + movq %rbp, %rsp + popq %rbp +#else + popl %ebx + movl %ebp, %esp + popl %ebp +#endif + ret // return + +#endif |