C CPUID interface.

This commit is contained in:
Ben Gras 2009-05-14 15:55:28 +00:00
parent db4faccbf9
commit 143422fa0a
2 changed files with 45 additions and 0 deletions

View file

@ -5,6 +5,7 @@ CFLAGS="-O -D_MINIX -D_POSIX_SOURCE"
LIBRARIES=libc
libc_FILES=" \
_cpuid.s \
alloca.s \
get_bp.s \
getprocessor.s \

44
lib/i386/misc/_cpuid.s Executable file
View file

@ -0,0 +1,44 @@
! _cpuid() - interface to cpuid instruction
.sect .text; .sect .rom; .sect .data; .sect .bss
.sect .text
! int _cpuid(u32_t eax, u32_t *eax, u32_t *ebx, u32_t *ecx, u32_t *edx);
! 0 for OK, nonzero for unsupported
.define __cpuid
__cpuid:
push ebp
mov ebp, esp
! save work registers
push eax
push ebx
push ecx
push edx
! set eax parameter to cpuid and execute cpuid
mov eax, 24(esp)
.data1 0x0F, 0xA2 ! CPUID
! store results in pointer arguments
mov ebp, 28(esp)
mov (ebp), eax
mov ebp, 32(esp)
mov (ebp), ebx
mov ebp, 36(esp)
mov (ebp), ecx
mov ebp, 40(esp)
mov (ebp), edx
! restore registers
pop edx
pop ecx
pop ebx
pop eax
pop ebp
ret