/* * The CPUID instruction is always supported on the amd64. */ .globl cpuid cpuid: pushq %rbx pushq %rcx pushq %rdx movq %rdi, %rax movq %rsi, %rcx pushq %r15 movq %rdx, %r15 cpuid /* Argument in %rax */ // Plan 9 just moves them as a,b,c,d. Weird. movl %eax, 0(%r15) movl %ebx, 4(%r15) movl %ecx, 8(%r15) movl %edx, 12(%r15) popq %r15 popq %rdx popq %rcx pop %rbx ret /* * Basic timing loop to determine CPU frequency. * The AAM instruction is not available in 64-bit mode. */ .globl aamloop aamloop: pushq %rcx movq %rdi, %rcx aaml1: xorq %rax, %rax /* close enough */ loop aaml1 popq %rcx ret