This is the mail archive of the glibc-cvs@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

GNU C Library master sources branch master updated. glibc-2.24-177-g87ab10d


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU C Library master sources".

The branch, master has been updated
       via  87ab10d6524fe4faabd7eb3eac5868165ecfb323 (commit)
      from  d942e95cd7e493efbbff58b78e63013c79e634cd (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
http://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=87ab10d6524fe4faabd7eb3eac5868165ecfb323

commit 87ab10d6524fe4faabd7eb3eac5868165ecfb323
Author: James Greenhalgh <james.greenhalgh@arm.com>
Date:   Wed Sep 21 21:02:54 2016 +0000

    [soft-fp] Add support for various half-precision conversion routines.
    
    This patch adds conversion routines required for _Float16 support in
    AArch64.
    
    These are one-step conversions to and from TImode and TFmode. We need
    these on AArch64 regardless of presence of the ARMv8.2-A 16-bit
    floating-point extensions.
    
    In the patch, soft-fp/half.h is derived from soft-fp/single.h .  The
    conversion routines are derivatives of their respective SFmode
    variants.
    
    	* soft-fp/extendhftf2.c: New.
    	* soft-fp/fixhfti.c: Likewise.
    	* soft-fp/fixunshfti.c: Likewise.
    	* soft-fp/floattihf.c: Likewise.
    	* soft-fp/floatuntihf.c: Likewise.
    	* soft-fp/half.h: Likewise.
    	* soft-fp/trunctfhf2.c: Likewise.

diff --git a/ChangeLog b/ChangeLog
index 00162c3..e928977 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+2016-09-21  James Greenhalgh  <james.greenhalgh@arm.com>
+
+	* soft-fp/extendhftf2.c: New.
+	* soft-fp/fixhfti.c: Likewise.
+	* soft-fp/fixunshfti.c: Likewise.
+	* soft-fp/floattihf.c: Likewise.
+	* soft-fp/floatuntihf.c: Likewise.
+	* soft-fp/half.h: Likewise.
+	* soft-fp/trunctfhf2.c: Likewise.
+
 2016-09-21  Joseph Myers  <joseph@codesourcery.com>
 
 	* math/math.h [__GLIBC_USE (IEC_60559_BFP_EXT)] (issubnormal): New
diff --git a/soft-fp/extendhftf2.c b/soft-fp/extendhftf2.c
new file mode 100644
index 0000000..6ff6438
--- /dev/null
+++ b/soft-fp/extendhftf2.c
@@ -0,0 +1,53 @@
+/* Software floating-point emulation.
+   Return an IEEE half converted to IEEE quad
+   Copyright (C) 1997-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.
+
+   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/>.  */
+
+#define FP_NO_EXACT_UNDERFLOW
+#include "soft-fp.h"
+#include "half.h"
+#include "quad.h"
+
+TFtype
+__extendhftf2 (HFtype a)
+{
+  FP_DECL_EX;
+  FP_DECL_H (A);
+  FP_DECL_Q (R);
+  TFtype r;
+
+  FP_INIT_EXCEPTIONS;
+  FP_UNPACK_RAW_H (A, a);
+#if (2 * _FP_W_TYPE_SIZE) < _FP_FRACBITS_Q
+  FP_EXTEND (Q, H, 4, 1, R, A);
+#else
+  FP_EXTEND (Q, H, 2, 1, R, A);
+#endif
+  FP_PACK_RAW_Q (r, R);
+  FP_HANDLE_EXCEPTIONS;
+
+  return r;
+}
diff --git a/soft-fp/fixhfti.c b/soft-fp/fixhfti.c
new file mode 100644
index 0000000..3610f4c
--- /dev/null
+++ b/soft-fp/fixhfti.c
@@ -0,0 +1,45 @@
+/* Software floating-point emulation.
+   Convert IEEE half to 128bit signed integer
+   Copyright (C) 2007-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.
+
+   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/>.  */
+
+#include "soft-fp.h"
+#include "half.h"
+
+TItype
+__fixhfti (HFtype a)
+{
+  FP_DECL_EX;
+  FP_DECL_H (A);
+  UTItype r;
+
+  FP_INIT_EXCEPTIONS;
+  FP_UNPACK_RAW_H (A, a);
+  FP_TO_INT_H (r, A, TI_BITS, 1);
+  FP_HANDLE_EXCEPTIONS;
+
+  return r;
+}
diff --git a/soft-fp/fixunshfti.c b/soft-fp/fixunshfti.c
new file mode 100644
index 0000000..30edbfe
--- /dev/null
+++ b/soft-fp/fixunshfti.c
@@ -0,0 +1,45 @@
+/* Software floating-point emulation.
+   Convert IEEE half to 128bit unsigned integer
+   Copyright (C) 2007-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.
+
+   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/>.  */
+
+#include "soft-fp.h"
+#include "half.h"
+
+UTItype
+__fixunshfti (HFtype a)
+{
+  FP_DECL_EX;
+  FP_DECL_H (A);
+  UTItype r;
+
+  FP_INIT_EXCEPTIONS;
+  FP_UNPACK_RAW_H (A, a);
+  FP_TO_INT_H (r, A, TI_BITS, 0);
+  FP_HANDLE_EXCEPTIONS;
+
+  return r;
+}
diff --git a/soft-fp/floattihf.c b/soft-fp/floattihf.c
new file mode 100644
index 0000000..74ac83a
--- /dev/null
+++ b/soft-fp/floattihf.c
@@ -0,0 +1,45 @@
+/* Software floating-point emulation.
+   Convert a 128bit signed integer to IEEE half
+   Copyright (C) 2007-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.
+
+   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/>.  */
+
+#include "soft-fp.h"
+#include "half.h"
+
+HFtype
+__floattihf (TItype i)
+{
+  FP_DECL_EX;
+  FP_DECL_H (A);
+  HFtype a;
+
+  FP_INIT_ROUNDMODE;
+  FP_FROM_INT_H (A, i, TI_BITS, UTItype);
+  FP_PACK_RAW_H (a, A);
+  FP_HANDLE_EXCEPTIONS;
+
+  return a;
+}
diff --git a/soft-fp/floatuntihf.c b/soft-fp/floatuntihf.c
new file mode 100644
index 0000000..90e77c2
--- /dev/null
+++ b/soft-fp/floatuntihf.c
@@ -0,0 +1,45 @@
+/* Software floating-point emulation.
+   Convert a 128bit unsigned integer to IEEE half.
+   Copyright (C) 2007-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.
+
+   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/>.  */
+
+#include "soft-fp.h"
+#include "half.h"
+
+HFtype
+__floatuntihf (UTItype i)
+{
+  FP_DECL_EX;
+  FP_DECL_H (A);
+  HFtype a;
+
+  FP_INIT_ROUNDMODE;
+  FP_FROM_INT_H (A, i, TI_BITS, UTItype);
+  FP_PACK_RAW_H (a, A);
+  FP_HANDLE_EXCEPTIONS;
+
+  return a;
+}
diff --git a/soft-fp/half.h b/soft-fp/half.h
new file mode 100644
index 0000000..ba75297
--- /dev/null
+++ b/soft-fp/half.h
@@ -0,0 +1,170 @@
+/* Software floating-point emulation.
+   Definitions for IEEE Half Precision.
+   Copyright (C) 1997-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.
+
+   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/>.  */
+
+#ifndef SOFT_FP_HALF_H
+#define SOFT_FP_HALF_H	1
+
+#if _FP_W_TYPE_SIZE < 32
+# error "Here's a nickel kid.  Go buy yourself a real computer."
+#endif
+
+#define _FP_FRACTBITS_H		(_FP_W_TYPE_SIZE)
+
+#define _FP_FRACTBITS_DW_H	(_FP_W_TYPE_SIZE)
+
+#define _FP_FRACBITS_H		11
+#define _FP_FRACXBITS_H		(_FP_FRACTBITS_H - _FP_FRACBITS_H)
+#define _FP_WFRACBITS_H		(_FP_WORKBITS + _FP_FRACBITS_H)
+#define _FP_WFRACXBITS_H	(_FP_FRACTBITS_H - _FP_WFRACBITS_H)
+#define _FP_EXPBITS_H		5
+#define _FP_EXPBIAS_H		15
+#define _FP_EXPMAX_H		31
+
+#define _FP_QNANBIT_H		((_FP_W_TYPE) 1 << (_FP_FRACBITS_H-2))
+#define _FP_QNANBIT_SH_H	((_FP_W_TYPE) 1 << (_FP_FRACBITS_H-2+_FP_WORKBITS))
+#define _FP_IMPLBIT_H		((_FP_W_TYPE) 1 << (_FP_FRACBITS_H-1))
+#define _FP_IMPLBIT_SH_H	((_FP_W_TYPE) 1 << (_FP_FRACBITS_H-1+_FP_WORKBITS))
+#define _FP_OVERFLOW_H		((_FP_W_TYPE) 1 << (_FP_WFRACBITS_H))
+
+#define _FP_WFRACBITS_DW_H	(2 * _FP_WFRACBITS_H)
+#define _FP_WFRACXBITS_DW_H	(_FP_FRACTBITS_DW_H - _FP_WFRACBITS_DW_H)
+#define _FP_HIGHBIT_DW_H	\
+  ((_FP_W_TYPE) 1 << (_FP_WFRACBITS_DW_H - 1) % _FP_W_TYPE_SIZE)
+
+/* The implementation of _FP_MUL_MEAT_H and _FP_DIV_MEAT_H should be
+   chosen by the target machine.  */
+
+typedef float HFtype __attribute__ ((mode (HF)));
+
+union _FP_UNION_H
+{
+  HFtype flt;
+  struct _FP_STRUCT_LAYOUT
+  {
+#if __BYTE_ORDER == __BIG_ENDIAN
+    unsigned sign : 1;
+    unsigned exp  : _FP_EXPBITS_H;
+    unsigned frac : _FP_FRACBITS_H - (_FP_IMPLBIT_H != 0);
+#else
+    unsigned frac : _FP_FRACBITS_H - (_FP_IMPLBIT_H != 0);
+    unsigned exp  : _FP_EXPBITS_H;
+    unsigned sign : 1;
+#endif
+  } bits __attribute__ ((packed));
+};
+
+#define FP_DECL_H(X)		_FP_DECL (1, X)
+#define FP_UNPACK_RAW_H(X, val)	_FP_UNPACK_RAW_1 (H, X, (val))
+#define FP_UNPACK_RAW_HP(X, val)	_FP_UNPACK_RAW_1_P (H, X, (val))
+#define FP_PACK_RAW_H(val, X)	_FP_PACK_RAW_1 (H, (val), X)
+#define FP_PACK_RAW_HP(val, X)			\
+  do						\
+    {						\
+      if (!FP_INHIBIT_RESULTS)			\
+	_FP_PACK_RAW_1_P (H, (val), X);		\
+    }						\
+  while (0)
+
+#define FP_UNPACK_H(X, val)			\
+  do						\
+    {						\
+      _FP_UNPACK_RAW_1 (H, X, (val));		\
+      _FP_UNPACK_CANONICAL (H, 1, X);		\
+    }						\
+  while (0)
+
+#define FP_UNPACK_HP(X, val)			\
+  do						\
+    {						\
+      _FP_UNPACK_RAW_1_P (H, X, (val));		\
+      _FP_UNPACK_CANONICAL (H, 1, X);		\
+    }						\
+  while (0)
+
+#define FP_UNPACK_SEMIRAW_H(X, val)		\
+  do						\
+    {						\
+      _FP_UNPACK_RAW_1 (H, X, (val));		\
+      _FP_UNPACK_SEMIRAW (H, 1, X);		\
+    }						\
+  while (0)
+
+#define FP_UNPACK_SEMIRAW_HP(X, val)		\
+  do						\
+    {						\
+      _FP_UNPACK_RAW_1_P (H, X, (val));		\
+      _FP_UNPACK_SEMIRAW (H, 1, X);		\
+    }						\
+  while (0)
+
+#define FP_PACK_H(val, X)			\
+  do						\
+    {						\
+      _FP_PACK_CANONICAL (H, 1, X);		\
+      _FP_PACK_RAW_1 (H, (val), X);		\
+    }						\
+  while (0)
+
+#define FP_PACK_HP(val, X)			\
+  do						\
+    {						\
+      _FP_PACK_CANONICAL (H, 1, X);		\
+      if (!FP_INHIBIT_RESULTS)			\
+	_FP_PACK_RAW_1_P (H, (val), X);		\
+    }						\
+  while (0)
+
+#define FP_PACK_SEMIRAW_H(val, X)		\
+  do						\
+    {						\
+      _FP_PACK_SEMIRAW (H, 1, X);		\
+      _FP_PACK_RAW_1 (H, (val), X);		\
+    }						\
+  while (0)
+
+#define FP_PACK_SEMIRAW_HP(val, X)		\
+  do						\
+    {						\
+      _FP_PACK_SEMIRAW (H, 1, X);		\
+      if (!FP_INHIBIT_RESULTS)			\
+	_FP_PACK_RAW_1_P (H, (val), X);		\
+    }						\
+  while (0)
+
+#define FP_TO_INT_H(r, X, rsz, rsg)	_FP_TO_INT (H, 1, (r), X, (rsz), (rsg))
+#define FP_TO_INT_ROUND_H(r, X, rsz, rsg)	\
+  _FP_TO_INT_ROUND (H, 1, (r), X, (rsz), (rsg))
+#define FP_FROM_INT_H(X, r, rs, rt)	_FP_FROM_INT (H, 1, X, (r), (rs), rt)
+
+/* HFmode arithmetic is not implemented.  */
+
+#define _FP_FRAC_HIGH_H(X)	_FP_FRAC_HIGH_1 (X)
+#define _FP_FRAC_HIGH_RAW_H(X)	_FP_FRAC_HIGH_1 (X)
+#define _FP_FRAC_HIGH_DW_H(X)	_FP_FRAC_HIGH_1 (X)
+
+#endif /* !SOFT_FP_HALF_H */
diff --git a/soft-fp/trunctfhf2.c b/soft-fp/trunctfhf2.c
new file mode 100644
index 0000000..0500b14
--- /dev/null
+++ b/soft-fp/trunctfhf2.c
@@ -0,0 +1,52 @@
+/* Software floating-point emulation.
+   Truncate IEEE quad into IEEE half.
+   Copyright (C) 1997-2015 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.
+
+   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/>.  */
+
+#include "soft-fp.h"
+#include "half.h"
+#include "quad.h"
+
+HFtype
+__trunctfhf2 (TFtype a)
+{
+  FP_DECL_EX;
+  FP_DECL_Q (A);
+  FP_DECL_H (R);
+  HFtype r;
+
+  FP_INIT_ROUNDMODE;
+  FP_UNPACK_SEMIRAW_Q (A, a);
+#if (2 * _FP_W_TYPE_SIZE) < _FP_FRACBITS_Q
+  FP_TRUNC (H, Q, 1, 4, R, A);
+#else
+  FP_TRUNC (H, Q, 1, 2, R, A);
+#endif
+  FP_PACK_SEMIRAW_H (r, R);
+  FP_HANDLE_EXCEPTIONS;
+
+  return r;
+}

-----------------------------------------------------------------------

Summary of changes:
 ChangeLog             |   10 +++
 soft-fp/extendhftf2.c |   53 +++++++++++++++
 soft-fp/fixhfti.c     |   45 +++++++++++++
 soft-fp/fixunshfti.c  |   45 +++++++++++++
 soft-fp/floattihf.c   |   45 +++++++++++++
 soft-fp/floatuntihf.c |   45 +++++++++++++
 soft-fp/half.h        |  170 +++++++++++++++++++++++++++++++++++++++++++++++++
 soft-fp/trunctfhf2.c  |   52 +++++++++++++++
 8 files changed, 465 insertions(+), 0 deletions(-)
 create mode 100644 soft-fp/extendhftf2.c
 create mode 100644 soft-fp/fixhfti.c
 create mode 100644 soft-fp/fixunshfti.c
 create mode 100644 soft-fp/floattihf.c
 create mode 100644 soft-fp/floatuntihf.c
 create mode 100644 soft-fp/half.h
 create mode 100644 soft-fp/trunctfhf2.c


hooks/post-receive
-- 
GNU C Library master sources


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]