From 8e36adc08eebb526d180b8477f1840c5bd549d83 Mon Sep 17 00:00:00 2001 From: Stefan Liebler Date: Mon, 17 Oct 2016 10:37:11 +0200 Subject: 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. --- ChangeLog | 4 +++ sysdeps/s390/fpu/fix-fp-int-compare-invalid.h | 36 +++++++++++++++++++++++++++ 2 files changed, 40 insertions(+) create mode 100644 sysdeps/s390/fpu/fix-fp-int-compare-invalid.h diff --git a/ChangeLog b/ChangeLog index 06a7338..3c328b2 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2016-10-17 Stefan Liebler + + * sysdeps/s390/fpu/fix-fp-int-compare-invalid.h: New file. + 2016-09-22 John David Anglin * 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 + . */ + +#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: + . + There exists an equivalent gcc bugzilla for Intel: + . + 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 */ -- cgit v1.1