From: Tom Hughes Date: Sat, 2 Apr 2005 17:01:07 +0000 (+0000) Subject: Get VG_(has_cpuid) and VG_(cpuid) working on amd64. X-Git-Tag: svn/VALGRIND_3_0_0~814 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=488b74dad3721136edb9a8b20bce662a737bbed7;p=thirdparty%2Fvalgrind.git Get VG_(has_cpuid) and VG_(cpuid) working on amd64. git-svn-id: svn://svn.valgrind.org/valgrind/trunk@3504 --- diff --git a/coregrind/amd64/cpuid.S b/coregrind/amd64/cpuid.S index 3b3829844d..7dc52777d1 100644 --- a/coregrind/amd64/cpuid.S +++ b/coregrind/amd64/cpuid.S @@ -28,23 +28,59 @@ 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 ---## ##--------------------------------------------------------------------##