C CPUID interface.
This commit is contained in:
parent
db4faccbf9
commit
143422fa0a
2 changed files with 45 additions and 0 deletions
|
@ -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
44
lib/i386/misc/_cpuid.s
Executable 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
|
Loading…
Reference in a new issue