/3rd_party/llvm/include/llvm/Support/FEnv.h
https://code.google.com/p/softart/ · C++ Header · 56 lines · 31 code · 8 blank · 17 comment · 9 complexity · ab6012971bfb57318602157c216efaca MD5 · raw file
- //===- llvm/Support/FEnv.h - Host floating-point exceptions ------*- C++ -*-===//
- //
- // The LLVM Compiler Infrastructure
- //
- // This file is distributed under the University of Illinois Open Source
- // License. See LICENSE.TXT for details.
- //
- //===----------------------------------------------------------------------===//
- //
- // This file provides an operating system independent interface to
- // floating-point exception interfaces.
- //
- //===----------------------------------------------------------------------===//
- #ifndef LLVM_SUPPORT_FENV_H
- #define LLVM_SUPPORT_FENV_H
- #include "llvm/Config/config.h"
- #include <cerrno>
- #ifdef HAVE_FENV_H
- #include <fenv.h>
- #endif
- // FIXME: Clang's #include handling apparently doesn't work for libstdc++'s
- // fenv.h; see PR6907 for details.
- #if defined(__clang__) && defined(_GLIBCXX_FENV_H)
- #undef HAVE_FENV_H
- #endif
- namespace llvm {
- namespace sys {
- /// llvm_fenv_clearexcept - Clear the floating-point exception state.
- static inline void llvm_fenv_clearexcept() {
- #if defined(HAVE_FENV_H) && HAVE_DECL_FE_ALL_EXCEPT
- feclearexcept(FE_ALL_EXCEPT);
- #endif
- errno = 0;
- }
- /// llvm_fenv_testexcept - Test if a floating-point exception was raised.
- static inline bool llvm_fenv_testexcept() {
- int errno_val = errno;
- if (errno_val == ERANGE || errno_val == EDOM)
- return true;
- #if defined(HAVE_FENV_H) && HAVE_DECL_FE_ALL_EXCEPT && HAVE_DECL_FE_INEXACT
- if (fetestexcept(FE_ALL_EXCEPT & ~FE_INEXACT))
- return true;
- #endif
- return false;
- }
- } // End sys namespace
- } // End llvm namespace
- #endif