123456789101112131415161718192021222324252627282930313233343536373839 |
- /*
- * 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
|