Back to index

glibc  2.9
Functions
feholdexcpt.c File Reference
#include <fenv.h>
#include <unistd.h>
#include <ldsodefs.h>
#include <dl-procinfo.h>

Go to the source code of this file.

Functions

int feholdexcept (fenv_t *envp)

Function Documentation

int feholdexcept ( fenv_t envp)

Definition at line 28 of file feholdexcpt.c.

{
  fenv_t temp;

  /* Store the environment.  */
  __asm__ ("fnstenv %0" : "=m" (temp));
  *envp = temp;

  /* Now set all exceptions to non-stop.  */
  temp.__control_word |= 0x3f;

  /* And clear all exceptions.  */
  temp.__status_word &= ~0x3f;

  __asm__ ("fldenv %0" : : "m" (temp));

  /* If the CPU supports SSE we set the MXCSR as well.  */
  if ((GLRO(dl_hwcap) & HWCAP_I386_XMM) != 0)
    {
      unsigned int xwork;

      /* Get the current control word.  */
      __asm__ ("stmxcsr %0" : "=m" (*&xwork));

      /* Set all exceptions to non-stop and clear them.  */
      xwork = (xwork | 0x1f80) & ~0x3f;

      __asm__ ("ldmxcsr %0" : : "m" (*&xwork));
    }

  return 0;
}

Here is the call graph for this function: