diff options
author | hjl <hjl@138bc75d-0d04-0410-961f-82ee72b054a4> | 2012-11-23 23:37:45 +0000 |
---|---|---|
committer | hjl <hjl@138bc75d-0d04-0410-961f-82ee72b054a4> | 2012-11-23 23:37:45 +0000 |
commit | f481f40f1aae896481ecfc4788e5a8c5848a8455 (patch) | |
tree | 513e4ebc49cfd3129251fff0255c85ab5b4fc9bc /libquadmath | |
parent | 3f0410e9b1ae54162faa5ce35bb5d3fd7f716eb9 (diff) | |
download | gcc-f481f40f1aae896481ecfc4788e5a8c5848a8455.tar.gz |
Add the missing file
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@193771 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libquadmath')
-rw-r--r-- | libquadmath/quadmath-rounding-mode.h | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/libquadmath/quadmath-rounding-mode.h b/libquadmath/quadmath-rounding-mode.h new file mode 100644 index 00000000000..9d06fa7be57 --- /dev/null +++ b/libquadmath/quadmath-rounding-mode.h @@ -0,0 +1,74 @@ +/* GCC Quad-Precision Math Library + Copyright (C) 2012 Free Software Foundation, Inc. + +This file is part of the libquadmath library. +Libquadmath is free software; you can redistribute it and/or +modify it under the terms of the GNU Library General Public +License as published by the Free Software Foundation; either +version 2 of the License, or (at your option) any later version. + +Libquadmath is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Library General Public License for more details. + +You should have received a copy of the GNU Library General Public +License along with libquadmath; see the file COPYING.LIB. If +not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, +Boston, MA 02110-1301, USA. */ + + +#ifndef QUADMATH_ROUNDING_MODE_H +#define QUADMATH_ROUNDING_MODE_H + +#include <stdbool.h> + + +#if defined(HAVE_FENV_H) +# include <fenv.h> +#endif /* HAVE_FENV_H */ + +static inline int +get_rounding_mode (void) +{ +#if defined(HAVE_FENV_H) && (defined(FE_DOWNWARD) || defined(FE_TONEAREST) \ + || defined(FE_TOWARDZERO) || defined(FE_UPWARD)) + return fegetround (void); +#else + return 0; +#endif +} + +static inline bool +round_away (bool negative, bool last_digit_odd, bool half_bit, bool more_bits, + int mode) +{ + switch (mode) + { +#ifdef FE_DOWNWARD + case FE_DOWNWARD: + return negative && (half_bit || more_bits); +#endif + +#ifdef FE_DOWNWARD + case FE_TONEAREST: + return half_bit && (last_digit_odd || more_bits); +#endif + +#ifdef FE_TOWARDZERO + case FE_TOWARDZERO: + return false; +#endif + + +#ifdef FE_UPWARD + case FE_UPWARD: + return !negative && (half_bit || more_bits); +#endif + + default: + return false; + } +} + +#endif /* QUADMATH_ROUNDING_MODE_H */ |