summaryrefslogtreecommitdiffstats
path: root/libgfortran/io/size_from_kind.c
diff options
context:
space:
mode:
authorjb <jb@138bc75d-0d04-0410-961f-82ee72b054a4>2005-11-06 18:28:22 +0000
committerjb <jb@138bc75d-0d04-0410-961f-82ee72b054a4>2005-11-06 18:28:22 +0000
commit4ea6d60e5b2260cab7fabf17957c70e371d18d6a (patch)
tree17962a230cf33b157872f3928504a867b0e6b656 /libgfortran/io/size_from_kind.c
parent166b8fc0d57b9521d11e41fd17e802ccfea925e2 (diff)
downloadppe42-gcc-4ea6d60e5b2260cab7fabf17957c70e371d18d6a.tar.gz
ppe42-gcc-4ea6d60e5b2260cab7fabf17957c70e371d18d6a.zip
gfortran ChangeLog
2005-11-06 Janne Blomqvist <jb@gcc.gnu.org> PR fortran/24174 PR fortran/24305 * fortran/trans-io.c (gfc_build_io_library_fndecls): Add kind argument to transfer_array. (transfer_array_desc): Add kind argument. testsuite ChangeLog: 2005-11-06 Janne Blomqvist <jb@gcc.gnu.org> PR fortran/24174 PR fortran/24305 * testsuite/gfortran.dg/large_real_kind_form_io_1.f90: New file. libgfortran Changelog: 2005-11-06 Janne Blomqvist <jb@gcc.gnu.org> PR fortran/24174 PR fortran/24305 * io/io.h: Add argument to prototypes, add prototypes for size_from_*_kind functions. * io/list_read.c (read_complex): Add size argument, use it. (list_formatted_read): Add size argument, cleanup. (list_formatted_read_scalar): Add size argument. (nml_read_obj): Fix for padding. * io/transfer.c: Add argument to transfer function pointer. (unformatted_read): Add size argument. (unformatted_write): Likewise. (formatted_transfer_scalar): Fix for padding with complex(10). (formatted_transfer): Add size argument, cleanup. (transfer_integer): Add size argument to transfer call. (transfer_real): Likewise. (transfer_logical): Likewise. (transfer_character): Likewise. (transfer_complex): Likewise. (transfer_array): New kind argument, use it. (data_transfer_init): Add size argument to formatted_transfer call. (iolength_transfer): Add size argument, cleanup. * io/write.c (write_complex): Add size argument, fix for padding with complex(10). (list_formatted_write): Add size argument, cleanup. (list_formatted_write_scalar): Add size argument, use it. (nml_write_obj): Fix for size vs. kind issue. * io/size_from_kind.c: New file. * Makefile.am: Add io/size_from_kind.c. * configure: Regenerate. * Makefile.in: Regenerate. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@106563 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libgfortran/io/size_from_kind.c')
-rw-r--r--libgfortran/io/size_from_kind.c88
1 files changed, 88 insertions, 0 deletions
diff --git a/libgfortran/io/size_from_kind.c b/libgfortran/io/size_from_kind.c
new file mode 100644
index 00000000000..c4a55dceb54
--- /dev/null
+++ b/libgfortran/io/size_from_kind.c
@@ -0,0 +1,88 @@
+/* Copyright (C) 2005 Free Software Foundation, Inc.
+ Contributed by Janne Blomqvist
+
+This file is part of the GNU Fortran runtime library (libgfortran).
+
+Libgfortran is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+In addition to the permissions in the GNU 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 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.)
+
+Libgfortran 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 General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Libgfortran; see the file COPYING. If not, write to
+the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+Boston, MA 02110-1301, USA. */
+
+
+/* This file contains utility functions for determining the size of a
+ variable given its kind. */
+
+#include "io.h"
+
+size_t
+size_from_real_kind (int kind)
+{
+ switch (kind)
+ {
+#ifdef HAVE_GFC_REAL_4
+ case 4:
+ return sizeof (GFC_REAL_4);
+#endif
+#ifdef HAVE_GFC_REAL_8
+ case 8:
+ return sizeof (GFC_REAL_8);
+#endif
+#ifdef HAVE_GFC_REAL_10
+ case 10:
+ return sizeof (GFC_REAL_10);
+#endif
+#ifdef HAVE_GFC_REAL_16
+ case 16:
+ return sizeof (GFC_REAL_16);
+#endif
+ default:
+ return kind;
+ }
+}
+
+
+size_t
+size_from_complex_kind (int kind)
+{
+ switch (kind)
+ {
+#ifdef HAVE_GFC_COMPLEX_4
+ case 4:
+ return sizeof (GFC_COMPLEX_4);
+#endif
+#ifdef HAVE_GFC_COMPLEX_8
+ case 8:
+ return sizeof (GFC_COMPLEX_8);
+#endif
+#ifdef HAVE_GFC_COMPLEX_10
+ case 10:
+ return sizeof (GFC_COMPLEX_10);
+#endif
+#ifdef HAVE_GFC_COMPLEX_16
+ case 16:
+ return sizeof (GFC_COMPLEX_16);
+#endif
+ default:
+ return 2 * kind;
+ }
+}
+
OpenPOWER on IntegriCloud