summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortobi <tobi@138bc75d-0d04-0410-961f-82ee72b054a4>2004-10-04 20:49:39 +0000
committertobi <tobi@138bc75d-0d04-0410-961f-82ee72b054a4>2004-10-04 20:49:39 +0000
commitca5301bf5dd9d70218cff006bf36161b3bbf57c0 (patch)
tree9811180d0efc726048a113005d15b0b59e736fae
parenta965f64afc2f9cd327c7bfb61c3d6dda8b7acd20 (diff)
downloadgcc-ca5301bf5dd9d70218cff006bf36161b3bbf57c0.tar.gz
PR fortran/17631
fortran/ * intrinsic.c (add_sym_5): Remove. (add_subroutines): Add resolution function for MVBITS. * intrinsic.h (gfc_resolve_mvbits): Declare resolution function for MVBITS * iresolve.c (gfc_resolve_mvbits): New function. (gfc_resolve_random_number): Remove empty line at end of function. libgfortran/ * Makefile.am (gfor_helper_src): Add intrinsics/mvbits.h. * intrinsics/mvbits.h: New file. testsuite/ * gfortran.fortran-torture/execute/intrinsic_mvbits.f90: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@88527 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/fortran/ChangeLog8
-rw-r--r--gcc/fortran/intrinsic.c40
-rw-r--r--gcc/fortran/intrinsic.h1
-rw-r--r--gcc/fortran/iresolve.c14
-rw-r--r--gcc/testsuite/ChangeLog3
-rw-r--r--gcc/testsuite/gfortran.fortran-torture/execute/intrinsic_mvbits.f9010
-rw-r--r--libgfortran/ChangeLog5
-rw-r--r--libgfortran/Makefile.am1
-rw-r--r--libgfortran/Makefile.in35
9 files changed, 68 insertions, 49 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index 204e8eb5c31..c0b6d151a32 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -4,6 +4,14 @@
* iresolve.c (gfc_resolve_pack): Choose function depending if mask
is scalar.
+ PR fortran/17631
+ * intrinsic.c (add_sym_5): Remove.
+ (add_subroutines): Add resolution function for MVBITS.
+ * intrinsic.h (gfc_resolve_mvbits): Declare resolution function for
+ MVBITS
+ * iresolve.c (gfc_resolve_mvbits): New function.
+ (gfc_resolve_random_number): Remove empty line at end of function.
+
2004-10-04 Erik Schnetter <schnetter@aei.mpg.de>
* scanner.c (preprocessor_line): Accept preprocessor lines without
diff --git a/gcc/fortran/intrinsic.c b/gcc/fortran/intrinsic.c
index 949f399dda6..2875321ec9a 100644
--- a/gcc/fortran/intrinsic.c
+++ b/gcc/fortran/intrinsic.c
@@ -600,35 +600,6 @@ static void add_sym_4s (const char *name, int elemental, int actual_ok,
}
-static void add_sym_5 (const char *name, int elemental, int actual_ok, bt type,
- int kind,
- try (*check)(gfc_expr *,gfc_expr *,gfc_expr *,gfc_expr *,gfc_expr *),
- gfc_expr *(*simplify)(gfc_expr *,gfc_expr *,gfc_expr *,gfc_expr *,gfc_expr *),
- void (*resolve)(gfc_expr *,gfc_expr *,gfc_expr *,gfc_expr *,gfc_expr *,gfc_expr *),
- const char* a1, bt type1, int kind1, int optional1,
- const char* a2, bt type2, int kind2, int optional2,
- const char* a3, bt type3, int kind3, int optional3,
- const char* a4, bt type4, int kind4, int optional4,
- const char* a5, bt type5, int kind5, int optional5
- ) {
- gfc_check_f cf;
- gfc_simplify_f sf;
- gfc_resolve_f rf;
-
- cf.f5 = check;
- sf.f5 = simplify;
- rf.f5 = resolve;
-
- add_sym (name, elemental, actual_ok, type, kind, cf, sf, rf,
- a1, type1, kind1, optional1,
- a2, type2, kind2, optional2,
- a3, type3, kind3, optional3,
- a4, type4, kind4, optional4,
- a5, type5, kind5, optional5,
- (void*)0);
-}
-
-
static void add_sym_5s
(
const char *name, int elemental, int actual_ok, bt type, int kind,
@@ -1960,12 +1931,11 @@ add_subroutines (void)
trim_name, BT_LOGICAL, dl, 1);
- /* This needs changing to add_sym_5s if it gets a resolution function. */
- add_sym_5 ("mvbits", 1, 1, BT_UNKNOWN, 0,
- gfc_check_mvbits, gfc_simplify_mvbits, NULL,
- f, BT_INTEGER, di, 0, fp, BT_INTEGER, di, 0,
- ln, BT_INTEGER, di, 0, t, BT_INTEGER, di, 0,
- tp, BT_INTEGER, di, 0);
+ add_sym_5s ("mvbits", 1, 1, BT_UNKNOWN, 0,
+ gfc_check_mvbits, gfc_simplify_mvbits, gfc_resolve_mvbits,
+ f, BT_INTEGER, di, 0, fp, BT_INTEGER, di, 0,
+ ln, BT_INTEGER, di, 0, t, BT_INTEGER, di, 0,
+ tp, BT_INTEGER, di, 0);
add_sym_1s ("random_number", 0, 1, BT_UNKNOWN, 0,
gfc_check_random_number, NULL, gfc_resolve_random_number,
diff --git a/gcc/fortran/intrinsic.h b/gcc/fortran/intrinsic.h
index 839f750791b..ec68828df12 100644
--- a/gcc/fortran/intrinsic.h
+++ b/gcc/fortran/intrinsic.h
@@ -323,6 +323,7 @@ void gfc_resolve_verify (gfc_expr *, gfc_expr *, gfc_expr *, gfc_expr *);
/* Intrinsic subroutine resolution. */
void gfc_resolve_cpu_time (gfc_code *);
+void gfc_resolve_mvbits (gfc_code *);
void gfc_resolve_system_clock(gfc_code *);
void gfc_resolve_random_number (gfc_code *);
void gfc_resolve_getarg (gfc_code *);
diff --git a/gcc/fortran/iresolve.c b/gcc/fortran/iresolve.c
index 36597fa6d84..9ae912ef73c 100644
--- a/gcc/fortran/iresolve.c
+++ b/gcc/fortran/iresolve.c
@@ -1462,6 +1462,19 @@ gfc_resolve_cpu_time (gfc_code * c ATTRIBUTE_UNUSED)
void
+gfc_resolve_mvbits (gfc_code * c)
+{
+ const char *name;
+ int kind;
+
+ kind = c->ext.actual->expr->ts.kind;
+ name = gfc_get_string (PREFIX("mvbits_i%d"), kind);
+
+ c->resolved_sym = gfc_get_intrinsic_sub_symbol (name);
+}
+
+
+void
gfc_resolve_random_number (gfc_code * c ATTRIBUTE_UNUSED)
{
const char *name;
@@ -1474,7 +1487,6 @@ gfc_resolve_random_number (gfc_code * c ATTRIBUTE_UNUSED)
name = gfc_get_string (PREFIX("arandom_r%d"), kind);
c->resolved_sym = gfc_get_intrinsic_sub_symbol (name);
-
}
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 0587e7fa07a..6bb5309db71 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -3,6 +3,9 @@
PR fortran/17283
* gfortran.fortran-torture/execute/intrinsic_pack.f90: Add more tests.
+ PR fortran/17631
+ * gfortran.fortran-torture/execute/intrinsic_mvbits.f90: New test.
+
2004-10-04 Chao-ying Fu <fu@mips.com>
* gcc.dg/vect/pr16105.c: Enable for mipsisa64*-*-*.
diff --git a/gcc/testsuite/gfortran.fortran-torture/execute/intrinsic_mvbits.f90 b/gcc/testsuite/gfortran.fortran-torture/execute/intrinsic_mvbits.f90
new file mode 100644
index 00000000000..8aaaf09dd26
--- /dev/null
+++ b/gcc/testsuite/gfortran.fortran-torture/execute/intrinsic_mvbits.f90
@@ -0,0 +1,10 @@
+! Test the MVBITS intrinsic subroutine
+INTEGER*4 :: from, to, result
+
+DATA from / z'0003FFFC' /
+DATA to / z'77760000' /
+DATA result / z'7777FFFE' /
+
+CALL mvbits(from, 2, 16, to, 1)
+if (to /= result) CALL abort()
+end
diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog
index 0c2b3818bc6..8b9d6a7ef41 100644
--- a/libgfortran/ChangeLog
+++ b/libgfortran/ChangeLog
@@ -7,6 +7,11 @@
* runtime/memory.c (internal_malloc, internal_malloc64): Allow
allocating zero memory.
+ PR fortran/17631
+ * Makefile.am (gfor_helper_src): Add intrinsics/mvbits.h.
+ * Makefile.in: Regenerate.
+ * intrinsics/mvbits.h: New file.
+
2004-10-04 Paul Brook <paul@codesourcery.com>
Bud Davis <bdavis9659@comcast.net>
diff --git a/libgfortran/Makefile.am b/libgfortran/Makefile.am
index 060166ade6a..d34a3dd6e66 100644
--- a/libgfortran/Makefile.am
+++ b/libgfortran/Makefile.am
@@ -52,6 +52,7 @@ intrinsics/etime.c \
intrinsics/getcwd.c \
intrinsics/getXid.c \
intrinsics/ishftc.c \
+intrinsics/mvbits.c \
intrinsics/pack_generic.c \
intrinsics/size.c \
intrinsics/spread_generic.c \
diff --git a/libgfortran/Makefile.in b/libgfortran/Makefile.in
index fb06ca5d4a5..219baa69b49 100644
--- a/libgfortran/Makefile.in
+++ b/libgfortran/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.8.5 from Makefile.am.
+# Makefile.in generated by automake 1.8.3 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -121,11 +121,12 @@ am__objects_32 = backspace.lo close.lo endfile.lo format.lo inquire.lo \
am__objects_33 = associated.lo abort.lo args.lo bessel.lo \
c99_functions.lo cpu_time.lo cshift0.lo date_and_time.lo \
env.lo erf.lo eoshift0.lo eoshift2.lo etime.lo getcwd.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_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
+ getXid.lo ishftc.lo mvbits.lo pack_generic.lo size.lo \
+ spread_generic.lo string_intrinsics.lo rand.lo random.lo \
+ reshape_generic.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 \
@@ -324,6 +325,7 @@ intrinsics/etime.c \
intrinsics/getcwd.c \
intrinsics/getXid.c \
intrinsics/ishftc.c \
+intrinsics/mvbits.c \
intrinsics/pack_generic.c \
intrinsics/size.c \
intrinsics/spread_generic.c \
@@ -740,7 +742,7 @@ clean-toolexeclibLTLIBRARIES:
-test -z "$(toolexeclib_LTLIBRARIES)" || rm -f $(toolexeclib_LTLIBRARIES)
@list='$(toolexeclib_LTLIBRARIES)'; for p in $$list; do \
dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
- test "$$dir" != "$$p" || dir=.; \
+ test "$$dir" = "$$p" && dir=.; \
echo "rm -f \"$${dir}/so_locations\""; \
rm -f "$${dir}/so_locations"; \
done
@@ -2114,6 +2116,15 @@ ishftc.obj: intrinsics/ishftc.c
ishftc.lo: intrinsics/ishftc.c
$(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ishftc.lo `test -f 'intrinsics/ishftc.c' || echo '$(srcdir)/'`intrinsics/ishftc.c
+mvbits.o: intrinsics/mvbits.c
+ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mvbits.o `test -f 'intrinsics/mvbits.c' || echo '$(srcdir)/'`intrinsics/mvbits.c
+
+mvbits.obj: intrinsics/mvbits.c
+ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mvbits.obj `if test -f 'intrinsics/mvbits.c'; then $(CYGPATH_W) 'intrinsics/mvbits.c'; else $(CYGPATH_W) '$(srcdir)/intrinsics/mvbits.c'; fi`
+
+mvbits.lo: intrinsics/mvbits.c
+ $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mvbits.lo `test -f 'intrinsics/mvbits.c' || echo '$(srcdir)/'`intrinsics/mvbits.c
+
pack_generic.o: intrinsics/pack_generic.c
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o pack_generic.o `test -f 'intrinsics/pack_generic.c' || echo '$(srcdir)/'`intrinsics/pack_generic.c
@@ -2932,11 +2943,9 @@ TAGS: $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
done | \
$(AWK) ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
- if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
- test -n "$$unique" || unique=$$empty_fix; \
- $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
- $$tags $$unique; \
- fi
+ test -z "$(ETAGS_ARGS)$$tags$$unique" \
+ || $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$tags $$unique
ctags: CTAGS
CTAGS: $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
@@ -3032,7 +3041,7 @@ distcheck: dist
*.tar.Z*) \
uncompress -c $(distdir).tar.Z | $(AMTAR) xf - ;;\
*.shar.gz*) \
- GZIP=$(GZIP_ENV) gunzip -c $(distdir).shar.gz | unshar ;;\
+ GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | unshar ;;\
*.zip*) \
unzip $(distdir).zip ;;\
esac