X-Git-Url: https://git.proxmox.com/?p=mirror_edk2.git;a=blobdiff_plain;f=UefiCpuPkg%2FLibrary%2FBaseUefiCpuLib%2FX64%2FInitializeFpu.S;h=64750afb8554c5494569b796b8bc673cf0a782a1;hp=3d1556daa2d5116a8361a61e4ca1e98357d2b112;hb=01a1c0fc9e60dfd6b26bd6d9aa9c3a6242bbb608;hpb=989322c384b180520803654acb69f53de83e45d6 diff --git a/UefiCpuPkg/Library/BaseUefiCpuLib/X64/InitializeFpu.S b/UefiCpuPkg/Library/BaseUefiCpuLib/X64/InitializeFpu.S index 3d1556daa2..64750afb85 100644 --- a/UefiCpuPkg/Library/BaseUefiCpuLib/X64/InitializeFpu.S +++ b/UefiCpuPkg/Library/BaseUefiCpuLib/X64/InitializeFpu.S @@ -1,7 +1,7 @@ #------------------------------------------------------------------------------ #* -#* Copyright 2009, Intel Corporation -#* All rights reserved. This program and the accompanying materials +#* Copyright (c) 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 #* http://opensource.org/licenses/bsd-license.php @@ -12,43 +12,46 @@ #* #------------------------------------------------------------------------------ - -# -# 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 # movq %cr4, %rax - or $200, %rax + or $0x200, %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