Back to index

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

Go to the source code of this file.

Functions

void __setfpucw (fpu_control_t set)

Function Documentation

void __setfpucw ( fpu_control_t  set)

Definition at line 28 of file setfpucw.c.

{
  fpu_control_t cw;

  /* Fetch the current control word.  */
  __asm__ ("fnstcw %0" : "=m" (*&cw));

  /* Preserve the reserved bits, and set the rest as the user
     specified (or the default, if the user gave zero).  */
  cw &= _FPU_RESERVED;
  cw |= set & ~_FPU_RESERVED;

  __asm__ ("fldcw %0" : : "m" (*&cw));

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

      /* Get the current MXCSR.  */
      __asm__ ("stmxcsr %0" : "=m" (*&xnew_exc));

      xnew_exc &= ~((0xc00 << 3) | (FE_ALL_EXCEPT << 7));
      xnew_exc |= ((set & 0xc00) << 3) | ((set & FE_ALL_EXCEPT) << 7);

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

Here is the call graph for this function: