aboutsummaryrefslogtreecommitdiff
path: root/libgcc/config/rs6000
diff options
context:
space:
mode:
authorMichael Meissner <Michael Meissner meissner@linux.ibm.com>2020-05-05 13:46:28 -0400
committerMichael Meissner <Michael Meissner meissner@linux.ibm.com>2020-05-05 14:03:30 -0400
commit3338afa4a3416f5d9a77c8d888f4a46052af186a (patch)
treec2ac23dc6417f2344d3c381cba45d9182ce1c1c0 /libgcc/config/rs6000
parent03831dcc98977531001706792d9bdfc2cf9cca99 (diff)
downloadgcc-3338afa4a3416f5d9a77c8d888f4a46052af186a.zip
gcc-3338afa4a3416f5d9a77c8d888f4a46052af186a.tar.gz
gcc-3338afa4a3416f5d9a77c8d888f4a46052af186a.tar.bz2
Patch ieee128-lib-patch010b
Diffstat (limited to 'libgcc/config/rs6000')
-rw-r--r--libgcc/config/rs6000/float128-decimal.c78
-rw-r--r--libgcc/config/rs6000/float128-decimal.ver7
-rw-r--r--libgcc/config/rs6000/t-float128-decimal7
3 files changed, 92 insertions, 0 deletions
diff --git a/libgcc/config/rs6000/float128-decimal.c b/libgcc/config/rs6000/float128-decimal.c
index e69de29..31af26b 100644
--- a/libgcc/config/rs6000/float128-decimal.c
+++ b/libgcc/config/rs6000/float128-decimal.c
@@ -0,0 +1,78 @@
+/* Provide missing conversions between IEEE 128-bit floating point and Decimal
+ floating point for PowerPC.
+
+ Copyright (C) 2020 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Michael Meissner (meissner@linux.ibm.com)
+
+ 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.
+
+ In addition to the permissions in the GNU Lesser General Public
+ License, the Free Software Foundation gives you unlimited
+ permission to link the compiled version of this file into
+ combinations with other programs, and to distribute those
+ combinations without any restriction coming from the use of this
+ file. (The Lesser General Public License restrictions do apply in
+ other respects; for example, they cover modification of the file,
+ and distribution when not linked into a combine executable.)
+
+ 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/>. */
+
+extern __float128 __dpd_trunctdkf (_Decimal128);
+extern __float128 __dpd_truncddkf (_Decimal64);
+extern __float128 __dpd_truncsdkf (_Decimal64);
+extern _Decimal128 __dpd_extendkftd (__float128);
+extern _Decimal64 __dpd_trunckfdd (__float128);
+extern _Decimal32 __dpd_trunckfsd (__float128);
+
+__float128
+__dpd_trunctdkf (_Decimal128 x)
+{
+ __ibm128 ibm = (__ibm128) x;
+ return (__float128) ibm;
+}
+
+__float128
+__dpd_truncddkf (_Decimal64 x)
+{
+ __ibm128 ibm = (__ibm128) x;
+ return (__float128) ibm;
+}
+
+__float128
+__dpd_truncsdkf (_Decimal64 x)
+{
+ __ibm128 ibm = (__ibm128) x;
+ return (__float128) ibm;
+}
+
+_Decimal128
+__dpd_extendkftd (__float128 x)
+{
+ __ibm128 ibm = (__ibm128) x;
+ return (_Decimal128) ibm;
+}
+
+_Decimal64
+__dpd_trunckfdd (__float128 x)
+{
+ __ibm128 ibm = (__ibm128) x;
+ return (_Decimal64) ibm;
+}
+
+_Decimal32
+__dpd_trunckfsd (__float128 x)
+{
+ __ibm128 ibm = (__ibm128) x;
+ return (_Decimal32) ibm;
+}
diff --git a/libgcc/config/rs6000/float128-decimal.ver b/libgcc/config/rs6000/float128-decimal.ver
index e69de29..08c15e2 100644
--- a/libgcc/config/rs6000/float128-decimal.ver
+++ b/libgcc/config/rs6000/float128-decimal.ver
@@ -0,0 +1,7 @@
+GCC_10.0.0 {
+ # float128 <-> decimal conversions
+ __dpd_extendkftd
+ __dpd_trunckfdd
+ __dpd_trunckfsd
+ __dpd_trunctdkf
+}
diff --git a/libgcc/config/rs6000/t-float128-decimal b/libgcc/config/rs6000/t-float128-decimal
index e69de29..2854c51 100644
--- a/libgcc/config/rs6000/t-float128-decimal
+++ b/libgcc/config/rs6000/t-float128-decimal
@@ -0,0 +1,7 @@
+# Add support for doing conversions between IEEE 128-bit floating point and
+# Decimal types if glibc does not provide the necessary functions.
+
+LIB2ADD += $(srcdir)/config/rs6000/float128-decimal.c
+SHLIB_MAPFILES += $(srcdir)/config/rs6000/float128-decimal.ver
+
+float128-decimal$(objext) : INTERNAL_CFLAGS += -mno-gnu-attribute