diff options
author | geekboy15a <geekboy15a@6f19259b-4bc3-4df7-8a09-765794883524> | 2010-01-08 21:29:30 +0000 |
---|---|---|
committer | geekboy15a <geekboy15a@6f19259b-4bc3-4df7-8a09-765794883524> | 2010-01-08 21:29:30 +0000 |
commit | 3d49c108a0cf42fe0b1a1d9db8fba35754e261ad (patch) | |
tree | 17765eb37e0c66ceeab6843dada93786f63a8381 | |
parent | bbd8fad2b88c9c71ff45d21eece19069422ba69a (diff) | |
download | edk2-3d49c108a0cf42fe0b1a1d9db8fba35754e261ad.tar.gz edk2-3d49c108a0cf42fe0b1a1d9db8fba35754e261ad.tar.bz2 edk2-3d49c108a0cf42fe0b1a1d9db8fba35754e261ad.zip |
Removed use of pre-initialized global data in this file as it was causing problems with UNIXGCC tool chain.
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@9699 6f19259b-4bc3-4df7-8a09-765794883524
-rw-r--r-- | UefiCpuPkg/Library/BaseUefiCpuLib/X64/InitializeFpu.S | 53 |
1 files changed, 28 insertions, 25 deletions
diff --git a/UefiCpuPkg/Library/BaseUefiCpuLib/X64/InitializeFpu.S b/UefiCpuPkg/Library/BaseUefiCpuLib/X64/InitializeFpu.S index 3d1556daa2..bf8d1c13e4 100644 --- a/UefiCpuPkg/Library/BaseUefiCpuLib/X64/InitializeFpu.S +++ b/UefiCpuPkg/Library/BaseUefiCpuLib/X64/InitializeFpu.S @@ -1,6 +1,6 @@ #------------------------------------------------------------------------------ #* -#* Copyright 2009, Intel Corporation +#* Copyright 2009 - 2010, Intel Corporation #* All rights reserved. This program and the accompanying materials #* are licensed and made available under the terms and conditions of the BSD License #* which accompanies this distribution. The full text of the license may be found at @@ -12,34 +12,30 @@ #* #------------------------------------------------------------------------------ - -#
-# Float control word initial value:
-# all exceptions masked, double-precision, round-to-nearest
-#
-ASM_PFX(mFpuControlWord): .word 0x027F
-#
-# Multimedia-extensions control word:
-# all exceptions masked, round-to-nearest, flush to zero for masked underflow
-#
-ASM_PFX(mMmxControlWord): .long 0x01F80
- # -# Initializes floating point units for requirement of UEFI specification.
-#
-# This function initializes floating-point control word to 0x027F (all exceptions
-# masked,double-precision, round-to-nearest) and multimedia-extensions control word
-# (if supported) to 0x1F80 (all exceptions masked, round-to-nearest, flush to zero
+# Initializes floating point units for requirement of UEFI specification. +# +# This function initializes floating-point control word to 0x027F (all exceptions +# masked,double-precision, round-to-nearest) and multimedia-extensions control word +# (if supported) to 0x1F80 (all exceptions masked, round-to-nearest, flush to zero # for masked underflow). # ASM_GLOBAL ASM_PFX(InitializeFloatingPointUnits) ASM_PFX(InitializeFloatingPointUnits): - #
- # Initialize floating point units
- #
- finit
- fldcw ASM_PFX(mFpuControlWord)
+ # + # Initialize floating point units + # + finit + + # + # Float control word initial value: + # all exceptions masked, double-precision, round-to-nearest + # + pushq $0x027F + lea (%rsp), %rax + fldcw (%rax) + popq %rax # # Set OSFXSR bit 9 in CR4 @@ -47,8 +43,15 @@ ASM_PFX(InitializeFloatingPointUnits): movq %cr4, %rax or $200, %rax movq %rax, %cr4 - - ldmxcsr ASM_PFX(mMmxControlWord) + + # + # Multimedia-extensions control word: + # all exceptions masked, round-to-nearest, flush to zero for masked underflow + # + pushq $0x01F80 + lea (%rsp), %rax + ldmxcsr (%rax) + popq %rax ret |