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
|
LIBRARIES=libc
|
||||||
|
|
||||||
libc_FILES=" \
|
libc_FILES=" \
|
||||||
|
_cpuid.s \
|
||||||
alloca.s \
|
alloca.s \
|
||||||
get_bp.s \
|
get_bp.s \
|
||||||
getprocessor.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