|
From: <sv...@va...> - 2005-04-02 17:01:12
|
Author: tom
Date: 2005-04-02 18:01:07 +0100 (Sat, 02 Apr 2005)
New Revision: 3504
Modified:
trunk/coregrind/amd64/cpuid.S
Log:
Get VG_(has_cpuid) and VG_(cpuid) working on amd64.
Modified: trunk/coregrind/amd64/cpuid.S
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/coregrind/amd64/cpuid.S 2005-04-02 15:53:01 UTC (rev 3503)
+++ trunk/coregrind/amd64/cpuid.S 2005-04-02 17:01:07 UTC (rev 3504)
@@ -28,23 +28,59 @@
The GNU General Public License is contained in the file COPYING.
*/
=20
-#if 0
-
#include "core_asm.h"
=20
/*
+ 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 *ed=
x_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
=20
/* Let the linker know we don't need an executable stack */
.section .note.GNU-stack,"",@progbits
=20
-#endif /* 0 */
-
##--------------------------------------------------------------------##
##--- end ---##
##--------------------------------------------------------------------##
|