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# 23ASM_GLOBAL ASM_PFX(InitializeFloatingPointUnits) 24ASM_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