1//===-- HasAVX.s ---------------------------------------*- x86 Assembly -*-===//
2//
3//                     The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
10#if defined (__i386__) || defined (__x86_64__)
11
12.globl _HasAVX
13
14_HasAVX:
15#if defined (__x86_64__)
16    pushq %rbp
17    movq %rsp, %rbp
18    pushq %rbx
19#else
20    pushl %ebp
21    movl %esp, %ebp
22    pushl %ebx
23#endif
24    mov $1, %eax
25    cpuid                                                                       // clobbers ebx
26    and $0x018000000, %ecx
27    cmp $0x018000000, %ecx
28    jne not_supported
29    mov $0, %ecx
30.byte 0x0f, 0x01, 0xd0    // xgetbv, for those assemblers that don't know it
31    and $0x06, %eax
32    cmp $0x06, %eax
33    jne not_supported
34    mov $1, %eax
35    jmp done
36not_supported:
37    mov $0, %eax
38done:
39#if defined (__x86_64__)
40    popq %rbx
41    movq %rbp, %rsp
42    popq %rbp
43#else
44    popl %ebx
45    movl %ebp, %esp
46    popl %ebp
47#endif
48    ret                                                                         // return
49
50#endif