OSDN Git Service

PR libfortran/22436
authorfxcoudert <fxcoudert@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 30 Jul 2005 20:45:02 +0000 (20:45 +0000)
committerfxcoudert <fxcoudert@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 30 Jul 2005 20:45:02 +0000 (20:45 +0000)
* io/write.c (write_real): Add default formats for real(10) and
real(16).

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@102590 138bc75d-0d04-0410-961f-82ee72b054a4

libgfortran/ChangeLog
libgfortran/io/write.c

index 84bcc48..55bbfa2 100644 (file)
@@ -1,3 +1,9 @@
+2005-07-30  Francois-Xavier Coudert  <coudert@clipper.ens.fr>
+
+       PR libfortran/22436
+       * io/write.c (write_real): Add default formats for real(10) and
+       real(16).
+
 2005-07-30 Paul Thomas  <pault@gcc.gnu.org>
 
        PR fortran/22570 and related issues.
index a702de1..6ccf02e 100644 (file)
@@ -1292,7 +1292,8 @@ write_character (const char *source, int length)
 
 
 /* Output a real number with default format.
-   This is 1PG14.7E2 for REAL(4) and 1PG23.15E3 for REAL(8).  */
+   This is 1PG14.7E2 for REAL(4), 1PG23.15E3 for REAL(8),
+   1PG24.15E4 for REAL(10) and 1PG40.31E4 for REAL(16).  */
 
 static void
 write_real (const char *source, int length)
@@ -1301,17 +1302,31 @@ write_real (const char *source, int length)
   int org_scale = g.scale_factor;
   f.format = FMT_G;
   g.scale_factor = 1;
-  if (length < 8)
+  switch (length)
     {
+    case 4:
       f.u.real.w = 14;
       f.u.real.d = 7;
       f.u.real.e = 2;
-    }
-  else
-    {
+      break;
+    case 8:
       f.u.real.w = 23;
       f.u.real.d = 15;
       f.u.real.e = 3;
+      break;
+    case 10:
+      f.u.real.w = 24;
+      f.u.real.d = 15;
+      f.u.real.e = 4;
+      break;
+    case 16:
+      f.u.real.w = 40;
+      f.u.real.d = 31;
+      f.u.real.e = 4;
+      break;
+    default:
+      internal_error ("bad real kind");
+      break;
     }
   write_float (&f, source , length);
   g.scale_factor = org_scale;