[Patch 15/17 libgcc ARM] Add double to half conversions.
authorJames Greenhalgh <james.greenhalgh@arm.com>
Wed, 23 Nov 2016 17:31:25 +0000 (17:31 +0000)
committerJames Greenhalgh <jgreenhalgh@gcc.gnu.org>
Wed, 23 Nov 2016 17:31:25 +0000 (17:31 +0000)
libgcc/

* config/arm/fp16.c (binary64): New.
(__gnu_d2h_internal): New.
(__gnu_d2h_ieee): New.
(__gnu_d2h_alternative): New.

Co-Authored-By: Matthew Wahab <matthew.wahab@arm.com>
From-SVN: r242782

libgcc/ChangeLog
libgcc/config/arm/fp16.c

index 0f6283467c29b5cebb33cd586dd02fb2b7ed5f0a..44a7491bb034466766e17bd58e559dc6eff593fb 100644 (file)
@@ -1,3 +1,11 @@
+2016-11-23  James Greenhalgh  <james.greenhalgh@arm.com>
+           Matthew Wahab  <matthew.wahab@arm.com>
+
+       * config/arm/fp16.c (binary64): New.
+       (__gnu_d2h_internal): New.
+       (__gnu_d2h_ieee): New.
+       (__gnu_d2h_alternative): New.
+
 2016-11-23  James Greenhalgh  <james.greenhalgh@arm.com>
            Matthew Wahab  <matthew.wahab@arm.com>
 
index 76f73275b00204000e7a5fdb3c3c86e7aa2d0968..5828ec34d83bbeb6d9acc0629bc37bf383376120 100644 (file)
@@ -43,6 +43,15 @@ binary32 =
   23    /* significand.  */
 };
 
+static const struct format
+binary64 =
+{
+  64,    /* size.  */
+  1023,  /* bias.  */
+  11,    /* exponent.  */
+  52     /* significand.  */
+};
+
 static inline unsigned short
 __gnu_float2h_internal (const struct format* fmt,
                        unsigned long long a, int ieee)
@@ -150,6 +159,12 @@ __gnu_f2h_internal (unsigned int a, int ieee)
   return __gnu_float2h_internal (&binary32, (unsigned long long) a, ieee);
 }
 
+static inline unsigned short
+__gnu_d2h_internal (unsigned long long a, int ieee)
+{
+  return __gnu_float2h_internal (&binary64, a, ieee);
+}
+
 unsigned int
 __gnu_h2f_internal(unsigned short a, int ieee)
 {
@@ -198,3 +213,15 @@ __gnu_h2f_alternative(unsigned short a)
 {
   return __gnu_h2f_internal(a, 0);
 }
+
+unsigned short
+__gnu_d2h_ieee (unsigned long long a)
+{
+  return __gnu_d2h_internal (a, 1);
+}
+
+unsigned short
+__gnu_d2h_alternative (unsigned long long x)
+{
+  return __gnu_d2h_internal (x, 0);
+}