diff options
author | Stefan Liebler <stli@linux.vnet.ibm.com> | 2016-10-17 10:37:11 +0200 |
---|---|---|
committer | Stefan Liebler <stli@linux.vnet.ibm.com> | 2016-10-17 10:37:11 +0200 |
commit | 8e36adc08eebb526d180b8477f1840c5bd549d83 (patch) | |
tree | e2d739946a3084f849c5b340c24b70c55a6de344 /sysdeps | |
parent | 7cfde840694cda82da29385e812060f99bcb367c (diff) | |
download | glibc-8e36adc08eebb526d180b8477f1840c5bd549d83.tar.gz glibc-8e36adc08eebb526d180b8477f1840c5bd549d83.tar.xz glibc-8e36adc08eebb526d180b8477f1840c5bd549d83.zip |
S390: Fix fp comparison not raising FE_INVALID.
As gcc is using unordered comparison instructions which do not raise invalid exception if any operand is quiet NAN, FIX_COMPARE_INVALID is defined to 1. Thus iseqsig is calling feraiseexcept as workaround.
Diffstat (limited to 'sysdeps')
-rw-r--r-- | sysdeps/s390/fpu/fix-fp-int-compare-invalid.h | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/sysdeps/s390/fpu/fix-fp-int-compare-invalid.h b/sysdeps/s390/fpu/fix-fp-int-compare-invalid.h new file mode 100644 index 0000000000..c4c119f25a --- /dev/null +++ b/sysdeps/s390/fpu/fix-fp-int-compare-invalid.h @@ -0,0 +1,36 @@ +/* Fix for missing "invalid" exceptions from floating-point + comparisons. s390 version. + Copyright (C) 2016 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ + +#ifndef FIX_FP_INT_COMPARE_INVALID_H +#define FIX_FP_INT_COMPARE_INVALID_H 1 + +/* GCC uses unordered comparison instructions like cebr (Short BFP COMPARE) + when it should use ordered comparison instructions like kebr + (Short BFP COMPARE AND SIGNAL) in order to raise invalid exceptions if + any operand is quiet (or signaling) NAN. See gcc bugzilla: + <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=77918>. + There exists an equivalent gcc bugzilla for Intel: + <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=52451>. + Once the s390 gcc bug is fixed, the definition of FIX_COMPARE_INVALID + should have a __GNUC_PREREQ conditional added so that e.g. the workaround + to call feraiseexcept (FE_INVALID) in math/s_iseqsig_template.c can be + avoided. */ +#define FIX_COMPARE_INVALID 1 + +#endif /* fix-fp-int-compare-invalid.h */ |