summaryrefslogtreecommitdiff
path: root/tools/debugserver/source/MacOSX/HasAVX.s
diff options
context:
space:
mode:
Diffstat (limited to 'tools/debugserver/source/MacOSX/HasAVX.s')
-rw-r--r--tools/debugserver/source/MacOSX/HasAVX.s50
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