]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
Get VG_(has_cpuid) and VG_(cpuid) working on amd64.
authorTom Hughes <tom@compton.nu>
Sat, 2 Apr 2005 17:01:07 +0000 (17:01 +0000)
committerTom Hughes <tom@compton.nu>
Sat, 2 Apr 2005 17:01:07 +0000 (17:01 +0000)
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@3504

coregrind/amd64/cpuid.S

index 3b3829844d58e949ef85c0250be3ceab0aeb1bf3..7dc52777d14acaf28fed80e13129933361457cfd 100644 (file)
   The GNU General Public License is contained in the file COPYING.
 */
 
-#if 0
-
 #include "core_asm.h"
 
+/*
+    Bool VG_(has_cpuid)(void)
+ */
+.globl VG_(has_cpuid)
+VG_(has_cpuid):
+        movq    $1, %rax
+        ret
+
 /*
     int VG_(cpuid)(UInt eax,
                    UInt *eax_ret, UInt *ebx_ret, UInt *ecx_ret, UInt *edx_ret)
  */
 .globl VG_(cpuid)
 VG_(cpuid):
-    ud2
+        pushq   %rbp
+        movq    %rsp, %rbp
+        pushq   %rbx
+        movl    %edi, %eax
+        movq    %rdx, %rdi
+        movq    %rcx, %r9
+        /*
+           eax_ret now in %rsi
+           ebx_ret now in %rdi
+           ecx_ret now in %r9
+           edx_ret now in %r8
+         */
+        cpuid
+        testq   %rsi, %rsi
+        jz      1f
+        movl    %eax, (%rsi)
+1:
+        testq   %rdi, %rdi
+        jz      2f
+        movl    %ebx, (%rdi)
+2:
+        testq   %r9, %r9
+        jz      3f
+        movl    %ecx, (%r9)
+3:
+        testq   %r8, %r8
+        jz      4f
+        movl    %edx, (%r8)
+4:
+        popq    %rbx
+        movq    %rbp, %rsp
+        popq    %rbp
+        ret
         
 /* Let the linker know we don't need an executable stack */
 .section .note.GNU-stack,"",@progbits
 
-#endif /* 0 */
-
 ##--------------------------------------------------------------------##
 ##--- end                                                         ---##
 ##--------------------------------------------------------------------##