This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
[RFC v4 20/24] RISC-V: Fix llrint and llround missing exceptions on RV32
- From: Alistair Francis <alistair dot francis at wdc dot com>
- To: libc-alpha at sourceware dot org
- Cc: arnd at arndb dot de, adhemerval dot zanella at linaro dot org, fweimer at redhat dot com, palmer at sifive dot com, macro at wdc dot com, zongbox at gmail dot com, alistair dot francis at wdc dot com, alistair23 at gmail dot com
- Date: Fri, 9 Aug 2019 18:00:40 -0700
- Subject: [RFC v4 20/24] RISC-V: Fix llrint and llround missing exceptions on RV32
- Ironport-sdr: 4l6hsaPtcO0dfCiac1QXLQAfZ6FNj1HRtxlOUD4k5tcv5MQ3wZR/pc25a0jlhPxOCL8cp9A3mM udGrE7XyffZzhelkxfnXlk6wTfLKShjsA29CNU8KWe0bdRC5G+xMVgxtvk8+1mdkC+WA/319Nl LqdDlvLDLSqEBlmof+Ak2NBhydFLH1fGZrwwq95h3aTAo6Ry4OwTK+n8RhMjgfQtuQJCoQHrpY B9Kg/ncqXUi5QKKWWovbZY/5aA2rpU20Dm9aamdY5nksAa+QThKwOgKTozK8fKp5RVMvT0/NOW Dtw=
- Ironport-sdr: gDtFgMpvWkkKSidrysGTc5DNz5vH3/iGFGTwhMX6TajdnXexVfuWoxVhcT8BObOtmO6lNaTdYD HYg5rj6tKq0ugNGWM4tDM0Ds9oIOFIBUXeQi0xw7pDwdkLbP+txb5c/eAGJVDAs48dULLnFkRh HsGyVnCDRmrzs9sUVOcf/TqW6LqyS9+IW6PPrnoEVg6EZhw/QXjDzmwo4fgIzjglKxT2xqHdoz UcRwAi3SCe+Xq9a8+/KAHQ6BJdR3RAOhplCVZizk4ndnzfaqAMXKWA6qVNKvR4iQ57BQDJPC5O q9he4wTFzXLEtxl40gcv6E4y
- Ironport-sdr: MCyExqR7P9ScymbiLGiO25dTyHX/oggmcY/2LKZU9tm1AsYOW0SztBiif2rLKzPjmlBamAlUv7 Jh6VpLtryDAJjCuPH+u9xedxTfuz65WcADh9ubcppE3Eg9fK70Pr410MNQ9m8RsakQzL5jzYwA wPglgl2KWMpBXANa4fYSQCM2yBJViDfrHLbfpE8PvD+LllteN66B06ERaCPJO1/zpLcmOVu6x6 XZCL7ChPgvNl6Zqdh0oK8wtwZ/iN9IhzRoEuwnG/3poWGL8elj6s4Rof7hHlkgP1cdY7DHXiYQ nl0=
- References: <cover.1565398513.git.alistair.francis@wdc.com>
From: Zong Li <zongbox@gmail.com>
Similar to the recent fix for MIPS, ARM and S/390, RV32 is missing
correct exception on overflow from llrint and llround functions because
cast from floating-point types to long long do not result in correct
exceptions on overflow.
2018-11-29 Zong Li <zong@andestech.com>
* sysdeps/riscv/rv32/fix-fp-int-convert-overflow.h: New file.
---
ChangeLog | 10 +++++
.../riscv/rv32/fix-fp-int-convert-overflow.h | 38 +++++++++++++++++++
2 files changed, 48 insertions(+)
create mode 100644 sysdeps/riscv/rv32/fix-fp-int-convert-overflow.h
diff --git a/ChangeLog b/ChangeLog
index a0399acdcbc..3316d22efaf 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1491,6 +1491,16 @@
* sysdeps/unix/sysv/linux/riscv/configure.ac: Likewise.
* sysdeps/unix/sysv/linux/riscv/shlib-versions: Likewise.
* sysdeps/riscv/preconfigure: Likewise.
+ * sysdeps/riscv/rv32/Implies-after: New file.
+ * sysdeps/riscv/rv32/rvd/Implies: Likewise.
+ * sysdeps/riscv/rv32/rvf/Implies: Likewise.
+ * sysdeps/unix/sysv/linux/riscv/rv32/Implies: Likewise.
+ * sysdeps/unix/sysv/linux/riscv/Makefile: Support rv32.
+ * sysdeps/unix/sysv/linux/riscv/configure: Likewise.
+ * sysdeps/unix/sysv/linux/riscv/configure.ac: Likewise.
+ * sysdeps/unix/sysv/linux/riscv/shlib-versions: Likewise.
+ * sysdeps/riscv/preconfigure: Likewise.
+ * sysdeps/riscv/rv32/fix-fp-int-convert-overflow.h: New file.
2019-06-20 Dmitry V. Levin <ldv@altlinux.org>
Florian Weimer <fweimer@redhat.com>
diff --git a/sysdeps/riscv/rv32/fix-fp-int-convert-overflow.h b/sysdeps/riscv/rv32/fix-fp-int-convert-overflow.h
new file mode 100644
index 00000000000..42155048382
--- /dev/null
+++ b/sysdeps/riscv/rv32/fix-fp-int-convert-overflow.h
@@ -0,0 +1,38 @@
+/* Fix for conversion of floating point to integer overflow. ARM version.
+ Copyright (C) 2015-2018 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_CONVERT_OVERFLOW_H
+#define FIX_FP_INT_CONVERT_OVERFLOW_H 1
+
+/* The generic libgcc2.c conversions from floating point
+ to long long may not raise the correct exceptions on overflow (and
+ may raise spurious "inexact" exceptions even in non-overflow cases,
+ see <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=59412>). */
+#define FIX_FLT_LONG_CONVERT_OVERFLOW 0
+#define FIX_FLT_LLONG_CONVERT_OVERFLOW 1
+
+#define FIX_DBL_LONG_CONVERT_OVERFLOW 0
+#define FIX_DBL_LLONG_CONVERT_OVERFLOW 1
+
+#define FIX_LDBL_LONG_CONVERT_OVERFLOW 0
+#define FIX_LDBL_LLONG_CONVERT_OVERFLOW 0
+
+#define FIX_FLT128_LONG_CONVERT_OVERFLOW 0
+#define FIX_FLT128_LLONG_CONVERT_OVERFLOW 0
+
+#endif /* fix-fp-int-convert-overflow.h */
--
2.22.0