aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Henderson <rth@redhat.com>2004-08-30 14:34:37 -0700
committerRichard Henderson <rth@gcc.gnu.org>2004-08-30 14:34:37 -0700
commit625be2863598fcaa489d1372ee825aff85ea7cec (patch)
tree02cd41f693c2602a26a17ae6a8a57ac30f5141fa
parent00fd31d1d22defb8305d8ef113d9b0afb1a5a847 (diff)
Makefile.am (gfor_helper_src): Split selected_kind.f90.
* Makefile.am (gfor_helper_src): Split selected_kind.f90. (gfor_built_src): Add selected_int_kind.inc selected_real_kind.inc. (selected_int_kind.inc selected_real_kind.inc): New rules. * Makefile.in: Regenerate. * mk-sik-inc.sh, mk-srk-inc.sh: New files. * intrinsics/selected_int_kind.f90: Split from selected_kind.f90, include table of detected kinds. * intrinsics/selected_real_kind.f90: Similarly. From-SVN: r86801
-rw-r--r--libgfortran/ChangeLog11
-rw-r--r--libgfortran/Makefile.am12
-rw-r--r--libgfortran/Makefile.in39
-rw-r--r--libgfortran/intrinsics/selected_int_kind.f9043
-rw-r--r--libgfortran/intrinsics/selected_real_kind.f90 (renamed from libgfortran/intrinsics/selected_kind.f90)35
-rwxr-xr-xlibgfortran/mk-sik-inc.sh32
-rwxr-xr-xlibgfortran/mk-srk-inc.sh32
7 files changed, 159 insertions, 45 deletions
diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog
index 097e356f3a5..48b652fc17b 100644
--- a/libgfortran/ChangeLog
+++ b/libgfortran/ChangeLog
@@ -1,3 +1,14 @@
+2004-08-30 Richard Henderson <rth@redhat.com>
+
+ * Makefile.am (gfor_helper_src): Split selected_kind.f90.
+ (gfor_built_src): Add selected_int_kind.inc selected_real_kind.inc.
+ (selected_int_kind.inc selected_real_kind.inc): New rules.
+ * Makefile.in: Regenerate.
+ * mk-sik-inc.sh, mk-srk-inc.sh: New files.
+ * intrinsics/selected_int_kind.f90: Split from selected_kind.f90,
+ include table of detected kinds.
+ * intrinsics/selected_real_kind.f90: Similarly.
+
2004-08-29 Steven G. Kargl <kargls@comcast.net>
Paul Brook <paul@codesourcery.com>
diff --git a/libgfortran/Makefile.am b/libgfortran/Makefile.am
index f07f1b554c7..91d70b8129c 100644
--- a/libgfortran/Makefile.am
+++ b/libgfortran/Makefile.am
@@ -59,7 +59,8 @@ intrinsics/rand.c \
intrinsics/random.c \
intrinsics/reshape_generic.c \
intrinsics/reshape_packed.c \
-intrinsics/selected_kind.f90 \
+intrinsics/selected_int_kind.f90 \
+intrinsics/selected_real_kind.f90 \
intrinsics/system_clock.c \
intrinsics/transpose_generic.c \
intrinsics/unpack_generic.c \
@@ -264,7 +265,8 @@ gfor_built_src= $(i_all_c) $(i_any_c) $(i_count_c) $(i_maxloc0_c) \
$(i_matmul_c) $(i_matmull_c) $(i_transpose_c) $(i_shape_c) $(i_eoshift1_c) \
$(i_eoshift3_c) $(i_cshift1_c) $(i_reshape_c) $(in_pack_c) $(in_unpack_c) \
$(i_exponent_c) $(i_fraction_c) $(i_nearest_c) $(i_set_exponent_c) \
- $(i_pow_c)
+ $(i_pow_c) \
+ selected_int_kind.inc selected_real_kind.inc
# We only use these if libm doesn't contain complex math functions.
@@ -383,6 +385,12 @@ I_M4_DEPS=m4/iparm.m4
I_M4_DEPS0=$(I_M4_DEPS) m4/iforeach.m4
I_M4_DEPS1=$(I_M4_DEPS) m4/ifunction.m4
+selected_int_kind.inc: $(srcdir)/mk-sik-inc.sh
+ $(SHELL) $(srcdir)/mk-sik-inc.sh '$(F77COMPILE)' > $@
+
+selected_real_kind.inc: $(srcdir)/mk-srk-inc.sh
+ $(SHELL) $(srcdir)/mk-srk-inc.sh '$(F77COMPILE)' > $@
+
## A 'normal' build shouldn't need to regenerate these
## so we only include them in maintainer mode
diff --git a/libgfortran/Makefile.in b/libgfortran/Makefile.in
index e83388dc3ab..ded21b61c7c 100644
--- a/libgfortran/Makefile.in
+++ b/libgfortran/Makefile.in
@@ -123,9 +123,9 @@ am__objects_33 = associated.lo abort.lo args.lo bessel.lo \
env.lo erf.lo eoshift0.lo eoshift2.lo etime.lo getXid.lo \
ishftc.lo pack_generic.lo size.lo spread_generic.lo \
string_intrinsics.lo rand.lo random.lo reshape_generic.lo \
- reshape_packed.lo selected_kind.lo system_clock.lo \
- transpose_generic.lo unpack_generic.lo in_pack_generic.lo \
- in_unpack_generic.lo normalize.lo
+ reshape_packed.lo selected_int_kind.lo selected_real_kind.lo \
+ system_clock.lo transpose_generic.lo unpack_generic.lo \
+ in_pack_generic.lo in_unpack_generic.lo normalize.lo
am__objects_34 =
am__objects_35 = _abs_c4.lo _abs_c8.lo _abs_i4.lo _abs_i8.lo \
_abs_r4.lo _abs_r8.lo _exp_r4.lo _exp_r8.lo _exp_c4.lo \
@@ -331,7 +331,8 @@ intrinsics/rand.c \
intrinsics/random.c \
intrinsics/reshape_generic.c \
intrinsics/reshape_packed.c \
-intrinsics/selected_kind.f90 \
+intrinsics/selected_int_kind.f90 \
+intrinsics/selected_real_kind.f90 \
intrinsics/system_clock.c \
intrinsics/transpose_generic.c \
intrinsics/unpack_generic.c \
@@ -536,7 +537,8 @@ gfor_built_src = $(i_all_c) $(i_any_c) $(i_count_c) $(i_maxloc0_c) \
$(i_matmul_c) $(i_matmull_c) $(i_transpose_c) $(i_shape_c) $(i_eoshift1_c) \
$(i_eoshift3_c) $(i_cshift1_c) $(i_reshape_c) $(in_pack_c) $(in_unpack_c) \
$(i_exponent_c) $(i_fraction_c) $(i_nearest_c) $(i_set_exponent_c) \
- $(i_pow_c)
+ $(i_pow_c) \
+ selected_int_kind.inc selected_real_kind.inc
# We only use these if libm doesn't contain complex math functions.
@@ -2291,14 +2293,23 @@ hyp_c8.lo: generated/hyp_c8.c
.f90.lo:
$(LTF77COMPILE) -c -o $@ $<
-selected_kind.o: intrinsics/selected_kind.f90
- $(F77) $(AM_FFLAGS) $(FFLAGS) -c -o selected_kind.o `test -f 'intrinsics/selected_kind.f90' || echo '$(srcdir)/'`intrinsics/selected_kind.f90
+selected_int_kind.o: intrinsics/selected_int_kind.f90
+ $(F77) $(AM_FFLAGS) $(FFLAGS) -c -o selected_int_kind.o `test -f 'intrinsics/selected_int_kind.f90' || echo '$(srcdir)/'`intrinsics/selected_int_kind.f90
-selected_kind.obj: intrinsics/selected_kind.f90
- $(F77) $(AM_FFLAGS) $(FFLAGS) -c -o selected_kind.obj `if test -f 'intrinsics/selected_kind.f90'; then $(CYGPATH_W) 'intrinsics/selected_kind.f90'; else $(CYGPATH_W) '$(srcdir)/intrinsics/selected_kind.f90'; fi`
+selected_int_kind.obj: intrinsics/selected_int_kind.f90
+ $(F77) $(AM_FFLAGS) $(FFLAGS) -c -o selected_int_kind.obj `if test -f 'intrinsics/selected_int_kind.f90'; then $(CYGPATH_W) 'intrinsics/selected_int_kind.f90'; else $(CYGPATH_W) '$(srcdir)/intrinsics/selected_int_kind.f90'; fi`
-selected_kind.lo: intrinsics/selected_kind.f90
- $(LIBTOOL) --mode=compile $(F77) $(AM_FFLAGS) $(FFLAGS) -c -o selected_kind.lo `test -f 'intrinsics/selected_kind.f90' || echo '$(srcdir)/'`intrinsics/selected_kind.f90
+selected_int_kind.lo: intrinsics/selected_int_kind.f90
+ $(LIBTOOL) --mode=compile $(F77) $(AM_FFLAGS) $(FFLAGS) -c -o selected_int_kind.lo `test -f 'intrinsics/selected_int_kind.f90' || echo '$(srcdir)/'`intrinsics/selected_int_kind.f90
+
+selected_real_kind.o: intrinsics/selected_real_kind.f90
+ $(F77) $(AM_FFLAGS) $(FFLAGS) -c -o selected_real_kind.o `test -f 'intrinsics/selected_real_kind.f90' || echo '$(srcdir)/'`intrinsics/selected_real_kind.f90
+
+selected_real_kind.obj: intrinsics/selected_real_kind.f90
+ $(F77) $(AM_FFLAGS) $(FFLAGS) -c -o selected_real_kind.obj `if test -f 'intrinsics/selected_real_kind.f90'; then $(CYGPATH_W) 'intrinsics/selected_real_kind.f90'; else $(CYGPATH_W) '$(srcdir)/intrinsics/selected_real_kind.f90'; fi`
+
+selected_real_kind.lo: intrinsics/selected_real_kind.f90
+ $(LIBTOOL) --mode=compile $(F77) $(AM_FFLAGS) $(FFLAGS) -c -o selected_real_kind.lo `test -f 'intrinsics/selected_real_kind.f90' || echo '$(srcdir)/'`intrinsics/selected_real_kind.f90
_abs_c4.o: generated/_abs_c4.f90
$(F77) $(AM_FFLAGS) $(FFLAGS) -c -o _abs_c4.o `test -f 'generated/_abs_c4.f90' || echo '$(srcdir)/'`generated/_abs_c4.f90
@@ -3170,6 +3181,12 @@ uninstall-am: uninstall-info-am uninstall-toolexeclibLTLIBRARIES
uninstall-toolexeclibLTLIBRARIES
+selected_int_kind.inc: $(srcdir)/mk-sik-inc.sh
+ $(SHELL) $(srcdir)/mk-sik-inc.sh '$(F77COMPILE)' > $@
+
+selected_real_kind.inc: $(srcdir)/mk-srk-inc.sh
+ $(SHELL) $(srcdir)/mk-srk-inc.sh '$(F77COMPILE)' > $@
+
@MAINTAINER_MODE_TRUE@$(i_all_c): m4/all.m4 $(I_M4_DEPS1)
@MAINTAINER_MODE_TRUE@ m4 -Dfile=$@ -I$(srcdir)/m4 all.m4 > $@
diff --git a/libgfortran/intrinsics/selected_int_kind.f90 b/libgfortran/intrinsics/selected_int_kind.f90
new file mode 100644
index 00000000000..8d9a6bedc6b
--- /dev/null
+++ b/libgfortran/intrinsics/selected_int_kind.f90
@@ -0,0 +1,43 @@
+! Copyright 2003, 2004 Free Software Foundation, Inc.
+! Contributed by Kejia Zhao <kejia_zh@yahoo.com.cn>
+!
+!This file is part of the GNU Fortran 95 runtime library (libgfor).
+!
+!GNU libgfor 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.
+!
+!GNU libgfor 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 libgfor; see the file COPYING. If not,
+!write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+!Boston, MA 02111-1307, USA.
+!
+
+function selected_int_kind (r)
+ implicit none
+ integer, intent (in) :: r
+ integer :: selected_int_kind
+ integer :: i
+ ! Integer kind_range table
+ type :: int_info
+ integer :: kind
+ integer :: range
+ end type int_info
+
+ include "selected_int_kind.inc"
+
+ do i = 1, c
+ if (r <= int_infos (i) % range) then
+ selected_int_kind = int_infos (i) % kind
+ return
+ end if
+ end do
+ selected_int_kind = -1
+ return
+end function
diff --git a/libgfortran/intrinsics/selected_kind.f90 b/libgfortran/intrinsics/selected_real_kind.f90
index 62d11c7f596..df2881717cd 100644
--- a/libgfortran/intrinsics/selected_kind.f90
+++ b/libgfortran/intrinsics/selected_real_kind.f90
@@ -1,4 +1,4 @@
-! Copyright 2003 Free Software Foundation, Inc.
+! Copyright 2003, 2004 Free Software Foundation, Inc.
! Contributed by Kejia Zhao <kejia_zh@yahoo.com.cn>
!
!This file is part of the GNU Fortran 95 runtime library (libgfor).
@@ -19,33 +19,6 @@
!Boston, MA 02111-1307, USA.
!
-function selected_int_kind (r)
- implicit none
- integer, intent (in) :: r
- integer :: selected_int_kind
- integer :: i
- ! Integer kind_range table
- integer, parameter :: c = 4
- type :: int_info
- integer :: kind
- integer :: range
- end type int_info
- type (int_info), parameter :: int_infos (c) = &
- (/int_info (1, range (0_1)), &
- int_info (2, range (0_2)), &
- int_info (4, range (0_4)), &
- int_info (8, range (0_8))/)
-
- do i = 1, c
- if (r <= int_infos (i) % range) then
- selected_int_kind = int_infos (i) % kind
- return
- end if
- end do
- selected_int_kind = -1
- return
-end function
-
function selected_real_kind (p, r)
implicit none
integer, optional, intent (in) :: p, r
@@ -53,15 +26,13 @@ function selected_real_kind (p, r)
integer :: i, p2, r2
logical :: found_p, found_r
! Real kind_precision_range table
- integer, parameter :: c = 2
type :: real_info
integer :: kind
integer :: precision
integer :: range
end type real_info
- type (real_info) :: real_infos (c) = &
- (/real_info (4, precision (0.0_4), range (0.0_4)), &
- real_info (8, precision (0.0_8), range (0.0_8))/)
+
+ include "selected_real_kind.inc"
selected_real_kind = 0
p2 = 0
diff --git a/libgfortran/mk-sik-inc.sh b/libgfortran/mk-sik-inc.sh
new file mode 100755
index 00000000000..536eda70c88
--- /dev/null
+++ b/libgfortran/mk-sik-inc.sh
@@ -0,0 +1,32 @@
+#!/bin/sh
+
+compile="$1"
+kinds=""
+possible_kinds="1 2 4 8 16"
+c=0
+
+for k in $possible_kinds; do
+ echo " integer (kind=$k) :: x" > tmp$$.f90
+ echo " end" >> tmp$$.f90
+ if $compile -c tmp$$.f90 > /dev/null 2>&1; then
+ kinds="$kinds $k"
+ c=`expr $c + 1`
+ fi
+ rm -f tmp$$.*
+done
+
+echo " integer, parameter :: c = $c"
+echo " type (int_info), parameter :: int_infos(c) = (/ &"
+
+i=0
+for k in $kinds; do
+ echo -n " int_info ($k, range(0_$k))"
+ i=`expr $i + 1`
+ if [ $i -lt $c ]; then
+ echo ", &"
+ else
+ echo " /)"
+ fi
+done
+
+exit 0
diff --git a/libgfortran/mk-srk-inc.sh b/libgfortran/mk-srk-inc.sh
new file mode 100755
index 00000000000..47046985b00
--- /dev/null
+++ b/libgfortran/mk-srk-inc.sh
@@ -0,0 +1,32 @@
+#!/bin/sh
+
+compile="$1"
+kinds=""
+possible_kinds="4 8 10 16"
+c=0
+
+for k in $possible_kinds; do
+ echo " real (kind=$k) :: x" > tmp$$.f90
+ echo " end" >> tmp$$.f90
+ if $compile -c tmp$$.f90 > /dev/null 2>&1; then
+ kinds="$kinds $k"
+ c=`expr $c + 1`
+ fi
+ rm -f tmp$$.*
+done
+
+echo " integer, parameter :: c = $c"
+echo " type (real_info), parameter :: real_infos(c) = (/ &"
+
+i=0
+for k in $kinds; do
+ echo -n " real_info ($k, precision(0.0_$k), range(0.0_$k))"
+ i=`expr $i + 1`
+ if [ $i -lt $c ]; then
+ echo ", &"
+ else
+ echo " /)"
+ fi
+done
+
+exit 0