1 #------------------------------------------------------------------------------ 2 #* 3 #* Copyright (c) 2009 - 2012, Intel Corporation. All rights reserved.<BR> 4 #* This program and the accompanying materials 5 #* are licensed and made available under the terms and conditions of the BSD License 6 #* which accompanies this distribution. The full text of the license may be found at 7 #* http://opensource.org/licenses/bsd-license.php 8 #* 9 #* THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, 10 #* WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 11 #* 12 #* 13 #------------------------------------------------------------------------------ 14 15 # 16 # Initializes floating point units for requirement of UEFI specification. 17 # 18 # This function initializes floating-point control word to 0x037F (all exceptions 19 # masked,double-extended-precision, round-to-nearest) and multimedia-extensions control word 20 # (if supported) to 0x1F80 (all exceptions masked, round-to-nearest, flush to zero 21 # for masked underflow). 22 # 23 ASM_GLOBAL ASM_PFX(InitializeFloatingPointUnits) 24 ASM_PFX(InitializeFloatingPointUnits): 25 26 # 27 # Initialize floating point units 28 # 29 finit 30 31 # 32 # Float control word initial value: 33 # all exceptions masked, double-precision, round-to-nearest 34 # 35 pushq $0x037F 36 lea (%rsp), %rax 37 fldcw (%rax) 38 popq %rax 39 40 # 41 # Set OSFXSR bit 9 in CR4 42 # 43 movq %cr4, %rax 44 or $0x200, %rax 45 movq %rax, %cr4 46 47 # 48 # Multimedia-extensions control word: 49 # all exceptions masked, round-to-nearest, flush to zero for masked underflow 50 # 51 pushq $0x01F80 52 lea (%rsp), %rax 53 ldmxcsr (%rax) 54 popq %rax 55 56 ret 57 58