BaseUefiCpuLib: Preserve EBX register in InitializeFloatingPointUnits

The EBX register should be preserved for the IA32 C calling convention.
The use of the CPUID instruction was modifying the EBX register, so
we push and pop EBX.

git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@9573 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
jljusten 2009-12-16 23:29:20 +00:00
parent 0913fadc1a
commit d6d8e8925f
2 changed files with 49 additions and 40 deletions

View File

@ -35,6 +35,9 @@ ASM_PFX(mMmxControlWord): .long 0x01F80
# #
ASM_GLOBAL ASM_PFX(InitializeFloatingPointUnits) ASM_GLOBAL ASM_PFX(InitializeFloatingPointUnits)
ASM_PFX(InitializeFloatingPointUnits): ASM_PFX(InitializeFloatingPointUnits):
pushl %ebx
# #
# Initialize floating point units # Initialize floating point units
# #
@ -64,6 +67,8 @@ ASM_PFX(InitializeFloatingPointUnits):
ldmxcsr ASM_PFX(mMmxControlWord) ldmxcsr ASM_PFX(mMmxControlWord)
Done: Done:
popl %ebx
ret ret
#END #END

View File

@ -39,6 +39,9 @@ mMmxControlWord DD 01F80h
; for masked underflow). ; for masked underflow).
; ;
InitializeFloatingPointUnits PROC PUBLIC InitializeFloatingPointUnits PROC PUBLIC
push ebx
; ;
; Initialize floating point units ; Initialize floating point units
; ;
@ -67,6 +70,7 @@ InitializeFloatingPointUnits PROC PUBLIC
; ;
ldmxcsr mMmxControlWord ldmxcsr mMmxControlWord
Done: Done:
pop ebx
ret ret