Back to index

glibc  2.9
Functions
fesetenv.c File Reference
#include <fenv_libc.h>
#include <bp-sym.h>
#include <shlib-compat.h>

Go to the source code of this file.

Functions

int __fesetenv (const fenv_t *envp)

Function Documentation

int __fesetenv ( const fenv_t envp)

Definition at line 24 of file fesetenv.c.

{
  fenv_union_t old, new;

  /* get the currently set exceptions.  */
  new.fenv = *envp;
  old.fenv = fegetenv_register ();
  
  /* If the old env has no eabled exceptions and the new env has any enabled
     exceptions, then unmask SIGFPE in the MSR FE0/FE1 bits.  This will put
     the hardware into "precise mode" and may cause the FPU to run slower on
     some hardware.  */
  if ((old.l[1] & 0x000000F8) == 0 && (new.l[1] & 0x000000F8) != 0)
    (void)__fe_nomask_env ();
  
  /* If the old env had any eabled exceptions and the new env has no enabled
     exceptions, then mask SIGFPE in the MSR FE0/FE1 bits.  This may allow the
     FPU to run faster because it always takes the default action and can not 
     generate SIGFPE. */
  if ((old.l[1] & 0x000000F8) != 0 && (new.l[1] & 0x000000F8) == 0)
    (void)__fe_mask_env ();
    
  fesetenv_register (*envp);

  /* Success.  */
  return 0;
}

Here is the call graph for this function: