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 | |
parent | 7cfde840694cda82da29385e812060f99bcb367c (diff) | |
download | glibc-8e36adc08eebb526d180b8477f1840c5bd549d83.zip glibc-8e36adc08eebb526d180b8477f1840c5bd549d83.tar.gz glibc-8e36adc08eebb526d180b8477f1840c5bd549d83.tar.bz2 |
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.
-rw-r--r-- | ChangeLog | 4 | ||||
-rw-r--r-- | sysdeps/s390/fpu/fix-fp-int-compare-invalid.h | 36 |
2 files changed, 40 insertions, 0 deletions
@@ -1,3 +1,7 @@ +2016-10-17 Stefan Liebler <stli@linux.vnet.ibm.com> + + * sysdeps/s390/fpu/fix-fp-int-compare-invalid.h: New file. + 2016-09-22 John David Anglin <dave.anglin@bell.net> * sysdeps/unix/sysv/linux/hppa/atomic-machine.h: Don't include 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 0000000..c4c119f --- /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 */ |