aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author(no author) <(no author)@138bc75d-0d04-0410-961f-82ee72b054a4>1998-03-21 23:49:35 +0000
committer(no author) <(no author)@138bc75d-0d04-0410-961f-82ee72b054a4>1998-03-21 23:49:35 +0000
commit0f4919d98b1d3fe97700b42eb3dbf132b4a29988 (patch)
tree8be08b57c643442dd87776e038d20d4d022ae611
parent2f88043a16e8dd2dc30a72d9093a13f652e7536c (diff)
This commit was manufactured by cvs2svn to create tagbefore-g77-0_5_22-merge
'before-g77-0_5_22-merge'. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/tags/before-g77-0_5_22-merge@18746 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/f/ChangeLog174
-rw-r--r--gcc/f/ChangeLog.egcs290
-rw-r--r--gcc/f/INSTALL19
-rw-r--r--gcc/f/Make-lang.in328
-rw-r--r--gcc/f/Makefile.in18
-rw-r--r--gcc/f/bad.def4
-rw-r--r--gcc/f/com-rt.def8
-rw-r--r--gcc/f/com.c504
-rw-r--r--gcc/f/com.h1
-rw-r--r--gcc/f/config-lang.in101
-rw-r--r--gcc/f/expr.c213
-rw-r--r--gcc/f/fini.c2
-rw-r--r--gcc/f/g77.c1557
-rw-r--r--gcc/f/g77.info751
-rw-r--r--gcc/f/g77.info-11073
-rw-r--r--gcc/f/g77.info-101462
-rw-r--r--gcc/f/g77.info-111608
-rw-r--r--gcc/f/g77.info-121443
-rw-r--r--gcc/f/g77.info-131144
-rw-r--r--gcc/f/g77.info-141145
-rw-r--r--gcc/f/g77.info-151175
-rw-r--r--gcc/f/g77.info-161210
-rw-r--r--gcc/f/g77.info-17968
-rw-r--r--gcc/f/g77.info-181125
-rw-r--r--gcc/f/g77.info-19296
-rw-r--r--gcc/f/g77.info-2968
-rw-r--r--gcc/f/g77.info-202122
-rw-r--r--gcc/f/g77.info-3397
-rw-r--r--gcc/f/g77.info-41117
-rw-r--r--gcc/f/g77.info-51305
-rw-r--r--gcc/f/g77.info-61131
-rw-r--r--gcc/f/g77.info-71869
-rw-r--r--gcc/f/g77.info-82055
-rw-r--r--gcc/f/g77.info-91844
-rw-r--r--gcc/f/g77.texi173
-rw-r--r--gcc/f/g77install.texi (renamed from gcc/f/install.texi)62
-rw-r--r--gcc/f/g77spec.c269
-rw-r--r--gcc/f/gbe/2.7.2.2.diff11296
-rw-r--r--gcc/f/gbe/2.7.2.3.diff13492
-rw-r--r--gcc/f/gbe/README45
-rw-r--r--gcc/f/install0.texi2
-rw-r--r--gcc/f/intdoc.c18
-rw-r--r--gcc/f/intdoc.h2370
-rw-r--r--gcc/f/intdoc.in97
-rw-r--r--gcc/f/intdoc.texi107
-rw-r--r--gcc/f/intrin.c86
-rw-r--r--gcc/f/intrin.def18
-rw-r--r--gcc/f/lang-options.h10
-rw-r--r--gcc/f/lang-specs.h28
-rw-r--r--gcc/f/lex.c2
-rw-r--r--gcc/f/malloc.c2
-rw-r--r--gcc/f/news.texi81
-rw-r--r--gcc/f/parse.c7
-rw-r--r--gcc/f/proj.c6
-rw-r--r--gcc/f/proj.h25
-rw-r--r--gcc/f/runtime/ChangeLog756
-rw-r--r--gcc/f/runtime/Makefile.in253
-rw-r--r--gcc/f/runtime/README46
-rw-r--r--gcc/f/runtime/TODO17
-rw-r--r--gcc/f/runtime/changes.netlib2841
-rwxr-xr-xgcc/f/runtime/configure2051
-rw-r--r--gcc/f/runtime/configure.in375
-rw-r--r--gcc/f/runtime/disclaimer.netlib15
-rw-r--r--gcc/f/runtime/f2c.h.in227
-rw-r--r--gcc/f/runtime/f2cext.c562
-rw-r--r--gcc/f/runtime/libF77/F77_aloc.c32
-rw-r--r--gcc/f/runtime/libF77/Makefile.in95
-rw-r--r--gcc/f/runtime/libF77/Notice23
-rw-r--r--gcc/f/runtime/libF77/README.netlib108
-rw-r--r--gcc/f/runtime/libF77/Version.c65
-rw-r--r--gcc/f/runtime/libF77/abort_.c18
-rw-r--r--gcc/f/runtime/libF77/c_abs.c14
-rw-r--r--gcc/f/runtime/libF77/c_cos.c21
-rw-r--r--gcc/f/runtime/libF77/c_div.c40
-rw-r--r--gcc/f/runtime/libF77/c_exp.c23
-rw-r--r--gcc/f/runtime/libF77/c_log.c21
-rw-r--r--gcc/f/runtime/libF77/c_sin.c21
-rw-r--r--gcc/f/runtime/libF77/c_sqrt.c38
-rw-r--r--gcc/f/runtime/libF77/cabs.c27
-rw-r--r--gcc/f/runtime/libF77/d_abs.c12
-rw-r--r--gcc/f/runtime/libF77/d_acos.c13
-rw-r--r--gcc/f/runtime/libF77/d_asin.c13
-rw-r--r--gcc/f/runtime/libF77/d_atan.c13
-rw-r--r--gcc/f/runtime/libF77/d_atn2.c13
-rw-r--r--gcc/f/runtime/libF77/d_cnjg.c17
-rw-r--r--gcc/f/runtime/libF77/d_cos.c13
-rw-r--r--gcc/f/runtime/libF77/d_cosh.c13
-rw-r--r--gcc/f/runtime/libF77/d_dim.c10
-rw-r--r--gcc/f/runtime/libF77/d_exp.c13
-rw-r--r--gcc/f/runtime/libF77/d_imag.c10
-rw-r--r--gcc/f/runtime/libF77/d_int.c13
-rw-r--r--gcc/f/runtime/libF77/d_lg10.c15
-rw-r--r--gcc/f/runtime/libF77/d_log.c13
-rw-r--r--gcc/f/runtime/libF77/d_mod.c40
-rw-r--r--gcc/f/runtime/libF77/d_nint.c14
-rw-r--r--gcc/f/runtime/libF77/d_prod.c10
-rw-r--r--gcc/f/runtime/libF77/d_sign.c12
-rw-r--r--gcc/f/runtime/libF77/d_sin.c13
-rw-r--r--gcc/f/runtime/libF77/d_sinh.c13
-rw-r--r--gcc/f/runtime/libF77/d_sqrt.c13
-rw-r--r--gcc/f/runtime/libF77/d_tan.c13
-rw-r--r--gcc/f/runtime/libF77/d_tanh.c13
-rw-r--r--gcc/f/runtime/libF77/derf_.c12
-rw-r--r--gcc/f/runtime/libF77/derfc_.c14
-rw-r--r--gcc/f/runtime/libF77/dtime_.c45
-rw-r--r--gcc/f/runtime/libF77/ef1asc_.c21
-rw-r--r--gcc/f/runtime/libF77/ef1cmc_.c14
-rw-r--r--gcc/f/runtime/libF77/erf_.c12
-rw-r--r--gcc/f/runtime/libF77/erfc_.c12
-rw-r--r--gcc/f/runtime/libF77/etime_.c38
-rw-r--r--gcc/f/runtime/libF77/exit_.c37
-rw-r--r--gcc/f/runtime/libF77/f2ch.add162
-rw-r--r--gcc/f/runtime/libF77/getarg_.c28
-rw-r--r--gcc/f/runtime/libF77/getenv_.c51
-rw-r--r--gcc/f/runtime/libF77/h_abs.c12
-rw-r--r--gcc/f/runtime/libF77/h_dim.c10
-rw-r--r--gcc/f/runtime/libF77/h_dnnt.c14
-rw-r--r--gcc/f/runtime/libF77/h_indx.c26
-rw-r--r--gcc/f/runtime/libF77/h_len.c10
-rw-r--r--gcc/f/runtime/libF77/h_mod.c10
-rw-r--r--gcc/f/runtime/libF77/h_nint.c14
-rw-r--r--gcc/f/runtime/libF77/h_sign.c12
-rw-r--r--gcc/f/runtime/libF77/hl_ge.c12
-rw-r--r--gcc/f/runtime/libF77/hl_gt.c12
-rw-r--r--gcc/f/runtime/libF77/hl_le.c12
-rw-r--r--gcc/f/runtime/libF77/hl_lt.c12
-rw-r--r--gcc/f/runtime/libF77/i_abs.c12
-rw-r--r--gcc/f/runtime/libF77/i_dim.c10
-rw-r--r--gcc/f/runtime/libF77/i_dnnt.c14
-rw-r--r--gcc/f/runtime/libF77/i_indx.c26
-rw-r--r--gcc/f/runtime/libF77/i_len.c10
-rw-r--r--gcc/f/runtime/libF77/i_mod.c10
-rw-r--r--gcc/f/runtime/libF77/i_nint.c14
-rw-r--r--gcc/f/runtime/libF77/i_sign.c12
-rw-r--r--gcc/f/runtime/libF77/iargc_.c11
-rw-r--r--gcc/f/runtime/libF77/l_ge.c12
-rw-r--r--gcc/f/runtime/libF77/l_gt.c12
-rw-r--r--gcc/f/runtime/libF77/l_le.c12
-rw-r--r--gcc/f/runtime/libF77/l_lt.c12
-rw-r--r--gcc/f/runtime/libF77/lbitbits.c62
-rw-r--r--gcc/f/runtime/libF77/lbitshft.c11
-rw-r--r--gcc/f/runtime/libF77/main.c135
-rw-r--r--gcc/f/runtime/libF77/makefile.netlib103
-rw-r--r--gcc/f/runtime/libF77/pow_ci.c20
-rw-r--r--gcc/f/runtime/libF77/pow_dd.c13
-rw-r--r--gcc/f/runtime/libF77/pow_di.c35
-rw-r--r--gcc/f/runtime/libF77/pow_hh.c33
-rw-r--r--gcc/f/runtime/libF77/pow_ii.c33
-rw-r--r--gcc/f/runtime/libF77/pow_qq.c33
-rw-r--r--gcc/f/runtime/libF77/pow_ri.c35
-rw-r--r--gcc/f/runtime/libF77/pow_zi.c61
-rw-r--r--gcc/f/runtime/libF77/pow_zz.c23
-rw-r--r--gcc/f/runtime/libF77/qbitbits.c66
-rw-r--r--gcc/f/runtime/libF77/qbitshft.c11
-rw-r--r--gcc/f/runtime/libF77/r_abs.c12
-rw-r--r--gcc/f/runtime/libF77/r_acos.c13
-rw-r--r--gcc/f/runtime/libF77/r_asin.c13
-rw-r--r--gcc/f/runtime/libF77/r_atan.c13
-rw-r--r--gcc/f/runtime/libF77/r_atn2.c13
-rw-r--r--gcc/f/runtime/libF77/r_cnjg.c16
-rw-r--r--gcc/f/runtime/libF77/r_cos.c13
-rw-r--r--gcc/f/runtime/libF77/r_cosh.c13
-rw-r--r--gcc/f/runtime/libF77/r_dim.c10
-rw-r--r--gcc/f/runtime/libF77/r_exp.c13
-rw-r--r--gcc/f/runtime/libF77/r_imag.c10
-rw-r--r--gcc/f/runtime/libF77/r_int.c13
-rw-r--r--gcc/f/runtime/libF77/r_lg10.c15
-rw-r--r--gcc/f/runtime/libF77/r_log.c13
-rw-r--r--gcc/f/runtime/libF77/r_mod.c40
-rw-r--r--gcc/f/runtime/libF77/r_nint.c14
-rw-r--r--gcc/f/runtime/libF77/r_sign.c12
-rw-r--r--gcc/f/runtime/libF77/r_sin.c13
-rw-r--r--gcc/f/runtime/libF77/r_sinh.c13
-rw-r--r--gcc/f/runtime/libF77/r_sqrt.c13
-rw-r--r--gcc/f/runtime/libF77/r_tan.c13
-rw-r--r--gcc/f/runtime/libF77/r_tanh.c13
-rw-r--r--gcc/f/runtime/libF77/s_cat.c75
-rw-r--r--gcc/f/runtime/libF77/s_cmp.c44
-rw-r--r--gcc/f/runtime/libF77/s_copy.c51
-rw-r--r--gcc/f/runtime/libF77/s_paus.c88
-rw-r--r--gcc/f/runtime/libF77/s_rnge.c26
-rw-r--r--gcc/f/runtime/libF77/s_stop.c37
-rw-r--r--gcc/f/runtime/libF77/sig_die.c45
-rw-r--r--gcc/f/runtime/libF77/signal1.h5
-rw-r--r--gcc/f/runtime/libF77/signal1.h025
-rw-r--r--gcc/f/runtime/libF77/signal_.c14
-rw-r--r--gcc/f/runtime/libF77/system_.c36
-rw-r--r--gcc/f/runtime/libF77/z_abs.c12
-rw-r--r--gcc/f/runtime/libF77/z_cos.c19
-rw-r--r--gcc/f/runtime/libF77/z_div.c39
-rw-r--r--gcc/f/runtime/libF77/z_exp.c21
-rw-r--r--gcc/f/runtime/libF77/z_log.c20
-rw-r--r--gcc/f/runtime/libF77/z_sin.c19
-rw-r--r--gcc/f/runtime/libF77/z_sqrt.c33
-rw-r--r--gcc/f/runtime/libI77/Makefile.in129
-rw-r--r--gcc/f/runtime/libI77/Notice23
-rw-r--r--gcc/f/runtime/libI77/README.netlib225
-rw-r--r--gcc/f/runtime/libI77/Version.c276
-rw-r--r--gcc/f/runtime/libI77/backspace.c101
-rw-r--r--gcc/f/runtime/libI77/close.c99
-rw-r--r--gcc/f/runtime/libI77/dfe.c156
-rw-r--r--gcc/f/runtime/libI77/dolio.c20
-rw-r--r--gcc/f/runtime/libI77/due.c73
-rw-r--r--gcc/f/runtime/libI77/endfile.c195
-rw-r--r--gcc/f/runtime/libI77/err.c298
-rw-r--r--gcc/f/runtime/libI77/f2ch.add162
-rw-r--r--gcc/f/runtime/libI77/fio.h102
-rw-r--r--gcc/f/runtime/libI77/fmt.c516
-rw-r--r--gcc/f/runtime/libI77/fmt.h99
-rw-r--r--gcc/f/runtime/libI77/fmtlib.c45
-rw-r--r--gcc/f/runtime/libI77/fp.h28
-rw-r--r--gcc/f/runtime/libI77/ftell_.c46
-rw-r--r--gcc/f/runtime/libI77/iio.c148
-rw-r--r--gcc/f/runtime/libI77/ilnw.c82
-rw-r--r--gcc/f/runtime/libI77/inquire.c108
-rw-r--r--gcc/f/runtime/libI77/lio.h74
-rw-r--r--gcc/f/runtime/libI77/lread.c684
-rw-r--r--gcc/f/runtime/libI77/lwrite.c310
-rw-r--r--gcc/f/runtime/libI77/makefile.netlib104
-rw-r--r--gcc/f/runtime/libI77/open.c245
-rw-r--r--gcc/f/runtime/libI77/rawio.h45
-rw-r--r--gcc/f/runtime/libI77/rdfmt.c476
-rw-r--r--gcc/f/runtime/libI77/rewind.c26
-rw-r--r--gcc/f/runtime/libI77/rsfe.c80
-rw-r--r--gcc/f/runtime/libI77/rsli.c105
-rw-r--r--gcc/f/runtime/libI77/rsne.c607
-rw-r--r--gcc/f/runtime/libI77/sfe.c44
-rw-r--r--gcc/f/runtime/libI77/sue.c87
-rw-r--r--gcc/f/runtime/libI77/typesize.c12
-rw-r--r--gcc/f/runtime/libI77/uio.c69
-rw-r--r--gcc/f/runtime/libI77/util.c51
-rw-r--r--gcc/f/runtime/libI77/wref.c276
-rw-r--r--gcc/f/runtime/libI77/wrtfmt.c385
-rw-r--r--gcc/f/runtime/libI77/wsfe.c85
-rw-r--r--gcc/f/runtime/libI77/wsle.c41
-rw-r--r--gcc/f/runtime/libI77/wsne.c26
-rw-r--r--gcc/f/runtime/libI77/xwsne.c72
-rw-r--r--gcc/f/runtime/libU77/COPYING.LIB481
-rw-r--r--gcc/f/runtime/libU77/Makefile.in155
-rw-r--r--gcc/f/runtime/libU77/PROJECTS10
-rw-r--r--gcc/f/runtime/libU77/README40
-rw-r--r--gcc/f/runtime/libU77/Version.c12
-rw-r--r--gcc/f/runtime/libU77/access_.c80
-rw-r--r--gcc/f/runtime/libU77/acconfig.h2
-rw-r--r--gcc/f/runtime/libU77/alarm_.c59
-rw-r--r--gcc/f/runtime/libU77/bes.c46
-rw-r--r--gcc/f/runtime/libU77/chdir_.c57
-rw-r--r--gcc/f/runtime/libU77/chmod_.c79
-rw-r--r--gcc/f/runtime/libU77/config.h.in73
-rwxr-xr-xgcc/f/runtime/libU77/configure1758
-rw-r--r--gcc/f/runtime/libU77/configure.in111
-rw-r--r--gcc/f/runtime/libU77/ctime_.c57
-rw-r--r--gcc/f/runtime/libU77/date_.c39
-rw-r--r--gcc/f/runtime/libU77/dbes.c46
-rw-r--r--gcc/f/runtime/libU77/dtime_.c82
-rw-r--r--gcc/f/runtime/libU77/etime_.c78
-rw-r--r--gcc/f/runtime/libU77/fdate_.c53
-rw-r--r--gcc/f/runtime/libU77/fgetc_.c70
-rw-r--r--gcc/f/runtime/libU77/flush1_.c46
-rw-r--r--gcc/f/runtime/libU77/fnum_.c38
-rw-r--r--gcc/f/runtime/libU77/fputc_.c65
-rw-r--r--gcc/f/runtime/libU77/fstat_.c71
-rw-r--r--gcc/f/runtime/libU77/gerror_.c49
-rw-r--r--gcc/f/runtime/libU77/getcwd_.c99
-rw-r--r--gcc/f/runtime/libU77/getgid_.c35
-rw-r--r--gcc/f/runtime/libU77/getlog_.c62
-rw-r--r--gcc/f/runtime/libU77/getpid_.c35
-rw-r--r--gcc/f/runtime/libU77/getuid_.c35
-rw-r--r--gcc/f/runtime/libU77/gmtime_.c54
-rw-r--r--gcc/f/runtime/libU77/hostnm_.c49
-rw-r--r--gcc/f/runtime/libU77/idate_.c57
-rw-r--r--gcc/f/runtime/libU77/ierrno_.c32
-rw-r--r--gcc/f/runtime/libU77/irand_.c57
-rw-r--r--gcc/f/runtime/libU77/isatty_.c44
-rw-r--r--gcc/f/runtime/libU77/itime_.c51
-rw-r--r--gcc/f/runtime/libU77/kill_.c37
-rw-r--r--gcc/f/runtime/libU77/link_.c58
-rw-r--r--gcc/f/runtime/libU77/lnblnk_.c35
-rw-r--r--gcc/f/runtime/libU77/lstat_.c87
-rw-r--r--gcc/f/runtime/libU77/ltime_.c54
-rw-r--r--gcc/f/runtime/libU77/mclock_.c47
-rw-r--r--gcc/f/runtime/libU77/perror_.c48
-rw-r--r--gcc/f/runtime/libU77/rand_.c54
-rw-r--r--gcc/f/runtime/libU77/rename_.c53
-rw-r--r--gcc/f/runtime/libU77/secnds_.c51
-rw-r--r--gcc/f/runtime/libU77/second_.c26
-rw-r--r--gcc/f/runtime/libU77/sleep_.c37
-rw-r--r--gcc/f/runtime/libU77/srand_.c37
-rw-r--r--gcc/f/runtime/libU77/stat_.c79
-rw-r--r--gcc/f/runtime/libU77/symlnk_.c62
-rw-r--r--gcc/f/runtime/libU77/system_clock_.c64
-rw-r--r--gcc/f/runtime/libU77/time_.c46
-rw-r--r--gcc/f/runtime/libU77/ttynam_.c57
-rw-r--r--gcc/f/runtime/libU77/u77-test.f178
-rw-r--r--gcc/f/runtime/libU77/umask_.c34
-rw-r--r--gcc/f/runtime/libU77/unlink_.c55
-rw-r--r--gcc/f/runtime/libU77/vxtidate_.c55
-rw-r--r--gcc/f/runtime/libU77/vxttime_.c54
-rw-r--r--gcc/f/runtime/permission.netlib23
-rw-r--r--gcc/f/runtime/readme.netlib590
-rw-r--r--gcc/f/src.c50
-rw-r--r--gcc/f/sta.c8
-rw-r--r--gcc/f/sta.h1
-rw-r--r--gcc/f/stb.c44
-rw-r--r--gcc/f/stc.c22
-rw-r--r--gcc/f/std.c444
-rw-r--r--gcc/f/ste.c46
-rw-r--r--gcc/f/sts.c28
-rw-r--r--gcc/f/stu.c4
-rw-r--r--gcc/f/symbol.c10
-rw-r--r--gcc/f/target.c131
-rw-r--r--gcc/f/top.c4
-rw-r--r--gcc/f/version.c (renamed from gcc/f/zzz.c)32
-rw-r--r--gcc/f/version.h (renamed from gcc/f/zzz.h)14
314 files changed, 2351 insertions, 79507 deletions
diff --git a/gcc/f/ChangeLog b/gcc/f/ChangeLog
index a50466e9169..7e1d12d3327 100644
--- a/gcc/f/ChangeLog
+++ b/gcc/f/ChangeLog
@@ -1,3 +1,177 @@
+Fri Feb 20 12:45:53 1998 Craig Burley <burley@gnu.org>
+
+ * expr.c (ffeexpr_token_arguments_): Make sure
+ outer exprstack isn't null.
+
+Fri Feb 20 10:11:20 1998 Craig Burley <burley@gnu.org>
+
+ * Make-lang.in (f77.install-info): Fix typo in script.
+
+ * Make-lang.in (f77.install-info): Don't install, and
+ don't uninstall existing, Info files if f/g77.info
+ doesn't exit. (This is a somewhat modified version
+ of an egcs patch on 1998-01-07 12:05:51 by Bruno Haible
+ <bruno@linuix.mathematik.uni-karlsruhe.de>.)
+
+Sun Jan 11 02:14:47 1998 Craig Burley <burley@gnu.org>
+
+ Fix 970626-2.f by not doing most back-end processing
+ when current_function_decl is an ERROR_MARK, and by
+ making that the case when its type would be an ERROR_MARK:
+ * com.c (ffecom_start_progunit_, finish_function,
+ lang_printable_name, start_function,
+ ffecom_finish_symbol_transform_): Test for ERROR_MARK.
+ * std.c (ffestd_stmt_pass_): Don't do any downstream
+ processing if ERROR_MARK.
+
+ Support FORMAT(I<1+2>) (constant variable-FORMAT
+ expressions):
+ * bad.def (FFEBAD_FORMAT_VARIABLE): New diagnostic.
+ * std.c (ffestd_R1001rtexpr_): New function.
+ (ffestd_R1001dump_, ffestd_R1001dump_1005_1_,
+ ffestd_R1001dump_1005_2_, ffestd_R1001dump_1005_3_,
+ ffestd_R1001dump_1005_4_, ffestd_R1001dump_1005_5_,
+ ffestd_R1001dump_1010_2_, ffestd_R1001dump_1010_3_,
+ ffestd_R1001dump_1010_4_, ffestd_R1001dump_1010_5_):
+ Use new function instead of ffestd_R1001error_.
+
+ * stb.c (ffestb_R10014_, ffestb_R10016_, ffestb_R10018_,
+ ffestb_R100110_): Restructure `for' loop for style.
+
+Fri Jan 9 19:09:07 1998 Craig Burley <burley@gnu.org>
+
+ * intrin.c (ffeintrin_check_): No longer ignore explicit
+ omitted trailing args.
+
+Tue Dec 23 14:58:04 1997 Craig Burley <burley@gnu.org>
+
+ Improve run-time diagnostic for "PRINT '(I1', 42":
+ * com.c (ffecom_char_args_x_): Renamed from ffecom_char_args_,
+ which is now a macro (to avoid lots of changes to other code)
+ with new arg, ffecom_char_args_with_null_ being another new
+ macro to call same function with different value for new arg.
+ This function now appends a null byte to opCONTER expression
+ if the new arg is TRUE.
+ (ffecom_arg_ptr_to_expr): Support NULL length pointer.
+ * ste.c (ffeste_io_cilist_):
+ (ffeste_io_icilist_): Pass NULL length ptr for
+ FORMAT expression, so null byte gets appended where
+ feasible.
+ * target.c (ffetarget_character1):
+ (ffetarget_concatenate_character1):
+ (ffetarget_substr_character1):
+ (ffetarget_convert_character1_character1):
+ (ffetarget_convert_character1_hollerith):
+ (ffetarget_convert_character1_integer4):
+ (ffetarget_convert_character1_logical4):
+ (ffetarget_convert_character1_typeless):
+ (ffetarget_hollerith): Append extra phantom null byte as
+ part of FFETARGET-NULL-BYTE kludge.
+
+ * intrin.c (ffeintrin_fulfill_generic): Don't generate
+ FFEBAD_INTRINSIC_TYPE for CHARACTER*(*) intrinsic.
+
+ * com.c (ffecom_gfrt_basictype):
+ (ffecom_gfrt_kindtype):
+ (ffecom_make_gfrt_):
+ (FFECOM_rttypeVOIDSTAR_): New return type `void *', for
+ the SIGNAL intrinsic.
+ * com-rt.def (FFECOM_rttypeSIGNAL): Now returns `void *'.
+ * intdoc.c: Replace `p' kind specifier with `7'.
+ * intrin.c (ffeintrin_check_, ffeintrin_init_0): Replace
+ `p' kind specifier with `7'.
+ * intrin.def (FFEINTRIN_impLOC, FFEINTRIN_impSIGNAL_func,
+ FFEINTRIN_impSIGNAL_subr): Replace `p' specifier with `7'.
+ Also, SIGNAL now returns a `void *' status, not `int'.
+
+Mon Dec 22 12:41:07 1997 Craig Burley <burley@gnu.org>
+
+ * intrin.c (ffeintrin_init_0): Remove duplicate
+ check for `!'.
+
+Sun Dec 14 02:49:58 1997 Craig Burley <burley@gnu.org>
+
+ * intrin.c (ffeintrin_init_0): Fix up indentation a bit.
+ Fix bug that prevented checking of arguments other
+ than the first.
+
+ * intdoc.c: Fix up indentation a bit.
+
+Mon Dec 1 19:12:36 1997 Craig Burley <burley@gnu.org>
+
+ * intrin.c (ffeintrin_check_): Fix up indentation a bit more.
+
+Mon Dec 1 16:21:08 1997 Craig Burley <burley@gnu.org>
+
+ * com.c (ffecom_arglist_expr_): Crash if non-supplied
+ optional arg isn't passed as an address.
+ Pass null pointer explicitly, instead of via ffecom routine.
+ If incoming argstring is NULL, substitute pointer to "0".
+ Recognize '0' as ending the usual arg stuff, just like '\0'.
+
+Sun Nov 30 22:22:22 1997 Craig Burley <burley@gnu.org>
+
+ * intrin.def: Fix up spacing a bit.
+
+ * intdoc.c: Minor fix-ups.
+
+ * intrin.c (ffeintrin_check_): Fix up indentation a bit.
+
+1997-11-17 Dave Love <d.love@dl.ac.uk>
+
+ * com.c (ffecom_arglist_expr_): Pass null pointers for optional
+ args which aren't supplied.
+
+Sun Oct 26 02:36:21 1997 Craig Burley <burley@gnu.ai.mit.edu>
+
+ * com.c (lang_print_error_function): Fix to more
+ reliably notice when the diagnosed region changes.
+
+Sat Oct 25 23:43:36 1997 Craig Burley <burley@gnu.ai.mit.edu>
+
+ Fix 950327-0.f:
+ * sta.c, sta.h (ffesta_outpooldisp): New function.
+ * std.c (ffestd_stmt_pass_): Don't kill NULL pool.
+ (ffestd_R842): If pool already preserved, save NULL
+ for pool, because it should be killed only once.
+
+ * malloc.c [MALLOC_DEBUG]: Put initializer for `name'
+ component in braces, to avoid compiler warning.
+
+Fri Oct 10 13:00:48 1997 Craig Burley <burley@gnu.ai.mit.edu>
+
+ * ste.c (ffeste_begin_iterdo_): Fix loop setup so iteration
+ variable is modified only after the #iterations is calculated;
+ otherwise if the iteration variable is aliased to any of the
+ operands in the start, end, or increment expressions, the
+ wrong #iterations might be calculated.
+
+ * com.c (ffecom_save_tree): Fix indentation.
+
+Mon Sep 29 16:18:21 1997 Craig Burley <burley@gnu.ai.mit.edu>
+
+ * stu.c (ffestu_list_exec_transition_,
+ ffestu_dummies_transition_): Specify `bool' type for
+ `in_progress' variables.
+
+ * com.h (assemble_string): Declare this routine (instead
+ of #include'ing "output.h" from gcc) to eliminate warnings
+ from lex.c.
+
+Fri Sep 19 01:12:27 1997 Craig Burley <burley@gnu.ai.mit.edu>
+
+ * expr.c (ffeexpr_reduced_eqop2_):
+ (ffeexpr_reduced_relop2_): Minor fixes to diagnostic code.
+
+ * fini.c (main): Change return type to `int'.
+
+Wed Sep 17 10:47:08 1997 Craig Burley <burley@gnu.ai.mit.edu>
+
+ * com-rt.def (FFECOM_gfrtDSIGN, FFECOM_gfrtISIGN,
+ FFECOM_gfrtSIGN): Add second argument.
+
+ * expr.c (ffeexpr_cb_comma_c_): Trivial fixes.
+
Tue Sep 9 01:59:35 1997 Craig Burley <burley@gnu.ai.mit.edu>
* Version 0.5.21 released.
diff --git a/gcc/f/ChangeLog.egcs b/gcc/f/ChangeLog.egcs
new file mode 100644
index 00000000000..f39a6f7fef9
--- /dev/null
+++ b/gcc/f/ChangeLog.egcs
@@ -0,0 +1,290 @@
+Sun Mar 22 00:50:42 1998 Nick Clifton <nickc@cygnus.com>
+ Geoff Noer <noer@cygnus.com>
+
+ * Makefile.in: Various fixes for building cygwin32 native toolchains.
+ * Make-lang.in: Likewise.
+
+Thu Mar 12 09:39:40 1998 Manfred Hollstein <manfred@s-direktnet.de>
+
+ * lang-specs.h: Properly put brackets around array elements in initializer.
+
+Wed Mar 4 17:38:21 1998 Jeffrey A Law (law@cygnus.com)
+
+ * Make-lang.in: Remove more references to libf77.
+
+Tue Mar 3 10:52:35 1998 Manfred Hollstein <manfred@s-direktnet.de>
+
+ * g77.texi: Use @url for citing URLs.
+
+Fri Feb 13 00:14:56 1998 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+
+ * com.c (type_for_mode): Add explicit braces to avoid ambiguous `else'.
+
+ * expr.c (ffeexpr_type_combine): Likewise.
+ (ffeexpr_reduce_): Likewise.
+ (ffeexpr_declare_parenthesized_): Likewise.
+
+ * src.c (ffesrc_strcmp_1ns2i): Likewise.
+ (ffesrc_strcmp_2c): Likewise.
+ (ffesrc_strncmp_2c): Likewise.
+
+ * stb.c (ffestb_halt1_): Likewise.
+ (ffestb_R90910_): Likewise.
+ (ffestb_R9109_): Likewise.
+
+ * stc.c (ffestc_R544_equiv_): Likewise.
+
+ * std.c (ffestd_subr_copy_easy_): Likewise.
+ (ffestd_R1001dump_): Likewise.
+ (ffestd_R1001dump_1005_1_): Likewise.
+ (ffestd_R1001dump_1005_2_): Likewise.
+ (ffestd_R1001dump_1005_3_): Likewise.
+ (ffestd_R1001dump_1005_4_): Likewise.
+ (ffestd_R1001dump_1005_5_): Likewise.
+ (ffestd_R1001dump_1010_2_): Likewise.
+
+ * ste.c (ffeste_R840): Likewise.
+
+ * sts.c (ffests_puttext): Likewise.
+
+ * symbol.c (ffesymbol_check_token_): Likewise.
+
+ * target.c (ffetarget_real1): Likewise.
+ (ffetarget_real2): Likewise.
+
+Wed Feb 11 01:44:48 1998 Richard Henderson (rth@cygnus.com)
+
+ * com.c (ffecom_ptr_to_expr) [FFEBLD_opARRAYREF]: Do upper - lower
+ in the native type, so as to properly handle negative indices.
+
+Fri Jan 9 19:09:07 1998 Craig Burley <burley@gnu.org>
+
+ Fix -fpedantic combined with `F()' invocation,
+ also -fugly-comma combined with `IARGC()' invocation:
+ * bad.def (FFEBAD_NULL_ARGUMENT_W): New diagnostic.
+ * expr.c (ffeexpr_finished_): Don't reject null expressions
+ in the argument-expression context -- let outer context
+ handle that.
+ (ffeexpr_token_arguments_): Warn about null expressions
+ here if -fpedantic (as appropriate).
+ Obey -fugly-comma for only external-procedure invocations.
+
+Tue Feb 3 20:13:05 1998 Richard Henderson <rth@cygnus.com>
+
+ * config-lang.in: Remove references to runtime/.
+
+Sun Feb 1 12:43:49 1998 J"orn Rennecke <amylaar@cygnus.co.uk>
+
+ * com.c (ffecom_tree_canonize_ptr_): Place bitsizetype typed expr
+ as first agument in MULT_EXPR.
+ Use bitsize_int (0L, 0L) as zero for bitsizes.
+ (ffecom_tree_canonize_ref_):
+ Use bitsize_int (0L, 0L) as zero for bitsizes.
+ (ffecom_init_0): Use set_sizetype.
+
+Sun Feb 1 02:26:58 1998 Richard Henderson <rth@cygnus.com>
+
+ * runtime directory -- moved into "libfc2" in the toplevel
+ directory.
+ * Make-lang.in: Remove all runtime related stuff.
+
+Sun Jan 25 12:32:15 1998 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+
+ * Make-lang.in (f77.stage1): Depend on stage1-start so parallel
+ make works better.
+ * (f77.stage2): Likewise for stage2-start.
+ * (f77.stage3): Likewise for stage3-start.
+ * (f77.stage4): Likewise for stage4-start.
+
+Sat Jan 17 21:28:08 1998 Pieter Nagel <pnagel@epiuse.co.za>
+
+ * Makefile.in (FLAGS_TO_PASS): Pass down gcc_include_dir and
+ local_prefix to sub-make invocations.
+
+Tue Jan 13 22:07:54 1998 Jeffrey A Law (law@cygnus.com)
+
+ * lang-options.h: Add missing options.
+
+Fri Dec 19 00:12:01 1997 Richard Henderson <rth@cygnus.com>
+
+ * com.c (ffecom_sym_transform_): Assumed arrays have no upper bound.
+
+Mon Dec 15 17:35:35 1997 Richard Henderson <rth@cygnus.com>
+
+ * com.c (ffecom_type_vardesc_): Vardesc.dims is a `ftnlen*'.
+
+Tue Dec 2 09:57:16 1997 Jeffrey A Law (law@cygnus.com)
+
+ * Make-lang.in (f77.clean): Remove g77.c.
+
+Tue Nov 25 15:33:28 1997 Jeffrey A Law (law@cygnus.com)
+
+ * Make-lang.in (f77.all.build): Add $(exeext) to binary files.
+ (f77.all.cross, f77.start.encap): Simliarly.
+
+Fri Nov 21 09:35:20 1997 Fred Fish <fnf@cygnus.com>
+
+ * Make-lang.in (stmp-f2c.h): Move inclusion of F77_FLAGS_TO_PASS
+ to before override of CC so that the override works.
+
+Thu Nov 20 00:58:14 1997 H.J. Lu (hjl@gnu.ai.mit.edu)
+
+ * Make-lang.in (f77.install-info): Depend on f77.info.
+
+1997-11-14 Dave Love <d.love@dl.ac.uk>
+
+ * intrin.def: Supply gfrt for CPU_TIME. Generalize arg types of
+ INT2, INT8, per doc.
+
+Sun Nov 2 19:49:51 1997 Richard Henderson <rth@cygnus.com>
+
+ * com.c (ffecom_expr_): Only use TREE_TYPE argument for simple
+ arithmetic; convert types as necessary; recurse with target tree type.
+
+Wed Oct 22 11:37:41 1997 Richard Henderson <rth@cygnus.com>
+
+ * com.c (ffecom_expr_): Take an new arg TREE_TYPE that if non-null
+ specifies the type in which to do the calculation. Change all callers.
+ [FFEBLD_opARRAYREF]: Force the index expr to use sizetype.
+
+Thu Oct 16 02:04:08 1997 Paul Koning <pkoning@xedia.com>
+
+ * Make-lang.in (stmp-f2c.h): Don't configure the runtime
+ directory if LANGUAGES does not include f77.
+
+Mon Oct 13 12:12:41 1997 Richard Henderson <rth@cygnus.com>
+
+ * Make-lang.in (g77*): Copied from cp/Make-lang.in g++*.
+ * g77spec.c: New file, mostly copied from g++spec.c
+ * g77.c: Removed.
+
+Mon Oct 6 14:15:03 1997 Jeffrey A Law (law@cygnus.com)
+
+ * Make-lang.in (f77.mostlyclean): Clean up stuff in the
+ object tree too.
+ (f77.clean, f77.distclean, f77.maintainer-clean): Likewise.
+
+Wed Oct 1 01:45:36 1997 Philippe De Muyter <phdm@info.ucl.ac.be>
+
+ * g77.c (pexecute, main): Use unlink, not remove.
+
+Mon Sep 29 10:37:07 1997 Jeffrey A Law (law@cygnus.com)
+
+ * intdoc.c (main): Remove unused attribute for main's arguments.
+
+Sun Sep 28 01:47:17 1997 Jeffrey A Law (law@cygnus.com)
+
+ * Make-lang.in (G77_FLAGS_TO_PASS): Pass down RANLIB, RANLIB_TEST
+ and AR instead of the _FOR_TARGET versions.
+
+Tue Sep 23 00:39:57 1997 Alexandre Oliva <oliva@dcc.unicamp.br>
+
+ * Make-lang.in: install.texi was renamed to g77install.texi
+ * install0.texi: Likewise.
+
+Thu Sep 18 17:31:38 1997 Jeffrey A Law (law@cygnus.com)
+
+ * proj.h (FFEPROJ_BSEARCH): Delete all references.
+ (FFEPROJ_STRTOUL): Likewise.
+ * proj.c (bsearch): Compile this if no bsearch is provided by the
+ host system.
+ (strtoul): Similarly.
+
+ * g77install.texi: Renamed from install.texi
+ * g77.texi: Corresponding changes.
+
+ * fini.c (main): Return type is int.
+
+ * com.c (lang_printable_name): Use verbosity argument.
+
+Thu Sep 18 16:08:40 1997 Jeffrey A Law (law@cygnus.com)
+
+ * Make-lang.in: Fix merge problems.
+
+Sun Sep 14 21:01:23 1997 Jeffrey A Law (law@cygnus.com)
+
+ * Make-lang.in: Various changes to build info files
+ in the object tree rather than the source tree.
+
+ * proj.h: Include ctype.h.
+
+Sun Sep 14 12:35:20 1997 Fred Fish (fnf@ninemoons.com)
+
+ * proj.h (isascii): Provide a default definition if none is available.
+
+Thu Sep 11 19:26:10 1997 Dave Love <d.love@dl.ac.uk>
+
+ * config-lang.in: Remove the messages about possible build problems.
+
+Wed Sep 10 16:39:47 1997 Jim Wilson <wilson@cygnus.com>
+
+ * Make-lang.in (LN, LN_S): New macros, use where appropriate.
+
+Tue Sep 9 13:20:40 1997 Jim Wilson <wilson@cygnus.com>
+
+ * g77.c (pexecute, doit): Add checks for __CYGWIN32__.
+
+Wed Aug 27 20:32:03 1997 Jeffrey A Law (law@cygnus.com)
+
+ * top.c (ffe_decode_option): Turn on flag_move_all_moveables
+ and flag_reduce_all_givs.
+
+Mon Aug 25 23:24:32 1997 H.J. Lu (hjl@gnu.ai.mit.edu)
+
+ * Make-lang.in ($(srcdir)/f/runtime/configure,
+ $(srcdir)/f/runtime/libU77/configure, f77.mostlyclean,
+ f77.clean, f77.distclean, f77.maintainer-clean, f77.realclean):
+ Handle absolute pathname of $(srcdir).
+ (stmp-f2c.h): New.
+ (include/f2c.h, f/runtime/Makefile, f/runtime/libF77/Makefile,
+ f/runtime/libI77/Makefile, f/runtime/libU77/Makefile): Only
+ depend on stmp-f2c.h.
+ (f77.maintainer-clean): Don't make itself.
+
+Sun Aug 24 17:00:27 1997 Jim Wilson <wilson@cygnus.com>
+
+ * Make-lang.in (f77.install-info): Don't cd into srcdir. Add srcdir
+ to filenames. Use sed to extract base filename for install.
+
+Thu Aug 21 13:15:29 1997 Jim Wilson <wilson@cygnus.com>
+
+ * Make-lang.in (f77): Delete f77-runtime.
+ (f77.all.build, f77.all.cross, f77.rest.encap): Add f77-runtime.
+
+Wed Aug 20 16:36:59 1997 Jim Wilson <wilson@cygnus.com>
+
+ * intdoc.texi: Readd generated file.
+
+Mon Aug 18 09:01:54 1997 Jeffrey A Law (law@cygnus.com)
+
+ * Makefile.in (F77_SRCS): Re-alphabetize.
+ * Make-lang.in (F77_OBJS): Likewise.
+
+Sun Aug 17 08:35:11 1997 Jeffrey A Law (law@cygnus.com)
+
+ * INSTALL: Rebuilt.
+ * install.texi: Remove "Object File Differences" section. Remove
+ all references to zzz.o failing comparison tests.
+ * version.c, version.h: Renamed from zzz.c and zzz.h. Remove
+ date and time stamps so a 3 stage build reports no differences.
+ * Make-lang.in: Corresponding changes.
+ * Makefile.in: Likewise.
+ * g77.c, parse.c: Likewise.
+
+ * intdoc.texi: Remove generated file from distribution.
+
+Tue Aug 12 10:23:02 1997 Jeffrey A Law (law@cygnus.com)
+
+ * config-lang.in: Don't demand the backend patch.
+ * com.c (lang_printable_name): Second argument is now an int. Don't
+ store into the value of the second argument.
+ * top.c (ffe_decode_option): Temporarily disable setting
+ of "Toon" loop options until we figure out how to address
+ them.
+
+Mon Aug 11 23:18:35 1997 Jeffrey A Law (law@cygnus.com)
+
+ * g77-0.5.21-19970811 Imported.
+ This file describes changes to the front end necessary to make
+ it work with egcs.
+
diff --git a/gcc/f/INSTALL b/gcc/f/INSTALL
index d8a1dd89799..31730a1363f 100644
--- a/gcc/f/INSTALL
+++ b/gcc/f/INSTALL
@@ -3,6 +3,9 @@ compiler. Copyright (C) 1995, 1996 Free Software Foundation, Inc. You
may copy, distribute, and modify it freely as long as you preserve this
copyright notice and permission notice.
+Note most of this information is out of date and superceded by the EGCS
+install procedures. It is provided for historical reference only.
+
Installing GNU Fortran
**********************
@@ -289,18 +292,6 @@ their systems had a complete, working one. Unfortunately, this meant
inconveniencing users of systems not having `strtoul()', but they're
using obsolete (and generally unsupported) systems anyway.
-Object File Differences
-.......................
-
- A comparison of object files after building Stage 3 during a
-bootstrap build will result in `gcc/f/zzz.o' being flagged as different
-from the Stage 2 version. That is because it contains a string with an
-expansion of the `__TIME__' macro, which expands to the current time of
-day. It is nothing to worry about, since `gcc/f/zzz.c' doesn't contain
-any actual code. It does allow you to override its use of `__DATE__'
-and `__TIME__' by defining macros for the compilation--see the source
-code for details.
-
Cleanup Kills Stage Directories
...............................
@@ -1462,7 +1453,7 @@ ensure that `bison' is not invoked by `make' during the build, type
these commands:
sh# cd gcc
- sh# touch bi-parser.c bi-parser.h c-parse.c c-parse.h cexp.c
+ sh# touch c-parse.c c-parse.h cexp.c
sh# touch cp/parse.c cp/parse.h objc-parse.c
sh#
@@ -1606,7 +1597,7 @@ general) are broken, at least for their system.
until you're sure your distribution is widely used and has been well
tested. This especially goes for those of you making any changes to
the `g77' sources to port `g77', e.g. to OS/2.
-<fortran@gnu.ai.mit.edu> has received a fair number of bug reports that
+<fortran@gnu.org> has received a fair number of bug reports that
turned out to be problems with other peoples' ports and distributions,
about which nothing could be done for the user. Once you are quite
certain a bug report does not involve your efforts, you can forward it
diff --git a/gcc/f/Make-lang.in b/gcc/f/Make-lang.in
index 46714c84a80..2c2faadc3f0 100644
--- a/gcc/f/Make-lang.in
+++ b/gcc/f/Make-lang.in
@@ -45,7 +45,7 @@
F77_FLAGS_TO_PASS = \
CROSS="$(CROSS)" \
AR_FLAGS="$(AR_FLAGS)" \
- AR_FOR_TARGET="$(AR_FOR_TARGET)" \
+ AR="$(AR)" \
BISON="$(BISON)" \
BISONFLAGS="$(BISONFLAGS)" \
CC="$(CC)" \
@@ -56,8 +56,8 @@ F77_FLAGS_TO_PASS = \
LEXFLAGS="$(LEXFLAGS)" \
MAKEINFO="$(MAKEINFO)" \
MAKEINFOFLAGS="$(MAKEINFOFLAGS)" \
- RANLIB_FOR_TARGET="$(RANLIB_FOR_TARGET)" \
- RANLIB_TEST_FOR_TARGET="$(RANLIB_TEST_FOR_TARGET)" \
+ RANLIB="$(RANLIB)" \
+ RANLIB_TEST="$(RANLIB_TEST)" \
SHELL="$(SHELL)" \
exec_prefix="$(exec_prefix)" \
prefix="$(prefix)" \
@@ -75,17 +75,6 @@ F77_FLAGS_TO_PASS = \
# you can just change it here if you like.
F77_INSTALL_FLAG = [ -f f77-install-ok -o -f $(srcdir)/f77-install-ok ]
-# This flag is similar to F77_INSTALL_FLAG, but controls whether
-# to install (ovewrite) f2c-related items on this system. Currently
-# these are `include/f2c.h' and `lib/libf2c.a', though at some point
-# `bin/f2c' itself might be added to the g77 distribution.
-F2C_INSTALL_FLAG = [ -f f2c-install-ok -o -f $(srcdir)/f2c-install-ok ]
-
-# This flag controls whether it is safe to install gcc's libf2c.a
-# even when there's already a lib/libf2c.a installed (which, unless
-# F2C_INSTALL_FLAG is set, will be left alone).
-F2CLIBOK = [ -f f2c-exists-ok -o -f $(srcdir)/f2c-exists-ok ]
-
# Actual names to use when installing a native compiler.
F77_INSTALL_NAME = `t='$(program_transform_name)'; echo f77 | sed $$t`
G77_INSTALL_NAME = `t='$(program_transform_name)'; echo g77 | sed $$t`
@@ -98,34 +87,42 @@ G77_CROSS_NAME = `t='$(program_transform_cross_name)'; echo g77 | sed $$t`
# Note that it would be nice to move the dependency on g77
# into the F77 rule, but that needs a little bit of work
# to do the right thing within all.cross.
-F77 f77: f771 f77-runtime
+F77 f77: f771$(exeext)
# Tell GNU make to ignore these if they exist.
-.PHONY: F77 f77 f77-runtime f77-runtime-unsafe f77.all.build f77.all.cross \
- f77.start.encap f77.rest.encap f77.info f77.dvi maybe-f2c \
- f77.install-normal install-libf77 install-f2c-all install-f2c-header \
- install-f2c-lib f77.install-common f77.install-info f77.install-man \
- f77.uninstall f77.mostlyclean f77.clean f77.distclean f77.extraclean \
+.PHONY: F77 f77 f77.all.build f77.all.cross \
+ f77.start.encap f77.rest.encap f77.info f77.dvi \
+ f77.install-normal \
+ f77.install-common f77.install-info f77.install-man \
+ f77.uninstall f77.mostlyclean f77.clean f77.distclean \
f77.maintainer-clean f77.realclean f77.stage1 f77.stage2 f77.stage3 \
f77.stage4 f77.distdir f77.rebuilt
-# Create the compiler driver for g77 (only if `f77' is in LANGUAGES).
-g77: $(srcdir)/f/g77.c $(srcdir)/f/zzz.c $(CONFIG_H) $(LIBDEPS)
- case '$(LANGUAGES)' in \
- *f77*) \
- $(CC) $(ALL_CFLAGS) $(INCLUDES) $(LDFLAGS) \
- -o $@ $(srcdir)/f/g77.c $(srcdir)/f/zzz.c $(LIBS) ;; \
- esac
-
-# Create a version of the g77 driver which calls the cross-compiler
-# (only if `f77' is in LANGUAGES).
-g77-cross: $(srcdir)/f/g77.c $(srcdir)/f/zzz.c version.o $(LIBDEPS)
- case '$(LANGUAGES)' in \
- *f77*) \
- $(CC) $(ALL_CFLAGS) $(INCLUDES) $(LDFLAGS) \
- -DGCC_NAME=\"$(GCC_CROSS_NAME)\" \
- -o $@ $(srcdir)/f/g77.c $(srcdir)/f/zzz.c $(LIBS) ;; \
- esac
+g77.c: $(srcdir)/gcc.c
+ -rm -f $@
+ $(LN_S) $(srcdir)/gcc.c $@
+
+g77spec.o: $(srcdir)/f/g77spec.c
+ $(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $(srcdir)/f/g77spec.c
+
+# N.B.: This is a copy of the gcc.o rule, with -DLANG_SPECIFIC_DRIVER added.
+# It'd be nice if we could find an easier way to do this---rather than have
+# to track changes to the toplevel gcc Makefile as well.
+# We depend on g77.c last, to make it obvious where it came from.
+g77.o: $(CONFIG_H) multilib.h config.status $(lang_specs_files) g77.c
+ $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
+ $(DRIVER_DEFINES) \
+ -DLANG_SPECIFIC_DRIVER -c g77.c
+
+# Create the compiler driver for g77.
+g77$(exeext): g77.o g77spec.o version.o choose-temp.o pexecute.o prefix.o $(LIBDEPS) $(EXTRA_GCC_OBJS)
+ $(CC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ g77.o g77spec.o prefix.o version.o \
+ choose-temp.o pexecute.o $(EXTRA_GCC_OBJS) $(LIBS)
+
+# Create a version of the g77 driver which calls the cross-compiler.
+g77-cross$(exeext): g77$(exeext)
+ -rm -f g77-cross$(exeext)
+ cp g77$(exeext) g77-cross$(exeext)
F77_SRCS = \
$(srcdir)/f/assert.j \
@@ -226,106 +223,38 @@ F77_SRCS = \
$(srcdir)/f/tree.j \
$(srcdir)/f/type.c \
$(srcdir)/f/type.h \
+ $(srcdir)/f/version.c \
+ $(srcdir)/f/version.h \
$(srcdir)/f/where.c \
- $(srcdir)/f/where.h \
- $(srcdir)/f/zzz.c \
- $(srcdir)/f/zzz.h
+ $(srcdir)/f/where.h
-f771: $(P) $(F77_SRCS) $(LIBDEPS) stamp-objlist f/Makefile
- $(MAKE) -f f/Makefile $(FLAGS_TO_PASS) VPATH=$(srcdir) srcdir=$(srcdir) f771
+f771:$(exeext) $(P) $(F77_SRCS) $(LIBDEPS) stamp-objlist f/Makefile
+ $(MAKE) -f f/Makefile $(FLAGS_TO_PASS) VPATH=$(srcdir) srcdir=$(srcdir) f771$(exeext)
f/Makefile: $(srcdir)/f/Makefile.in $(srcdir)/configure
$(SHELL) config.status
-# Note that the runtime is built in the top-level directory rather
-# than in f/runtime a la the Cygnus CHILL example; then xgcc -B./ will
-# find it. Use an absolute name for GCC_FOR_TARGET (so we don't have
-# to keep stage? links around everywhere) unless this value has been
-# overridden from the default "./xgcc -B./", hence the case statement.
-# We depend on GCC_PASSES through f/runtime/Makefile.
-stmp-headers = stmp-headers # to be overrideable in unsafe version
-# Depend on stmp-headers, not stmp-int-hdrs, since libF77 needs float.h.
-f77-runtime: f/runtime/Makefile include/f2c.h $(stmp-headers) \
- f/runtime/libF77/Makefile f/runtime/libI77/Makefile f/runtime/libU77/Makefile
- case "$(LANGUAGES)" in \
- *f77*) top=`pwd`; \
- cd f/runtime && $(MAKE) \
- GCC_FOR_TARGET="`case '$(GCC_FOR_TARGET)' in \
- './xgcc -B./') echo $${top}/xgcc -B$${top}/;; \
- *) echo '$(GCC_FOR_TARGET)';; esac`" \
- GCC_FLAGS="$(GCC_FLAGS)" $(F77_FLAGS_TO_PASS) \
- all ;; \
- esac
-
-# This one doesn't depend on cc1 etc. but f2c.h may not be found,
-# in particular, at present...
-f77-runtime-unsafe:
- $(MAKE) stmp-headers= GCC_PARTS= f77-runtime
-
-# The configuration of the runtime system relies on an autoconf-type
-# configure, not a Cygnus-type one. It needs to be run *after* the
-# appropriate (cross-)compiler has been built, thus depend on GCC_PARTS.
-# NB, sh uses the *first* value of $a from `a=fred a=joe prog'.
-include/f2c.h \
-f/runtime/Makefile \
-f/runtime/libF77/Makefile \
-f/runtime/libI77/Makefile \
-f/runtime/libU77/Makefile: \
- $(srcdir)/f/runtime/f2c.h.in \
- $(srcdir)/f/com.h $(srcdir)/f/proj.h \
- $(srcdir)/f/runtime/Makefile.in \
- $(srcdir)/f/runtime/libF77/Makefile.in \
- $(srcdir)/f/runtime/libI77/Makefile.in \
- $(srcdir)/f/runtime/libU77/Makefile.in \
- $(srcdir)/f/runtime/configure \
- $(srcdir)/f/runtime/libU77/configure \
- $(GCC_PARTS)
-# The make "stage?" in compiler spec. is fully qualified as above
- top=`pwd`; \
- src=`cd $(srcdir); pwd`; \
- cd f/runtime; \
- CC="`case '$(GCC_FOR_TARGET)' in \
- './xgcc -B./') echo $${top}/xgcc -B$${top}/;; \
- *) echo '$(GCC_FOR_TARGET)';; esac`" \
- $(F77_FLAGS_TO_PASS) CONFIG_SITE=/dev/null $(SHELL) \
- $${src}/f/runtime/configure --srcdir=$${src}/f/runtime
- top=`pwd`; \
- src=`cd $(srcdir); pwd`; \
- cd f/runtime/libU77; \
- CC="`case '$(GCC_FOR_TARGET)' in \
- './xgcc -B./') echo $${top}/xgcc -B$${top}/;; \
- *) echo '$(GCC_FOR_TARGET)';; esac`" \
- $(F77_FLAGS_TO_PASS) CONFIG_SITE=/dev/null $(SHELL) \
- $${src}/f/runtime/libU77/configure --srcdir=$${src}/f/runtime/libU77
-
-#For now, omit f2c stuff. -- burley
-#f2c: stmp-headers f/f2c/Makefile
-# cd f/f2c; $(MAKE) all
-#
-#f/f2c/Makefile: $(srcdir)/f/f2c/Makefile.in $(GCC_PARTS) \
-# $(srcdir)/config/$(xmake_file) $(srcdir)/config/$(tmake_file)
-# top=`pwd`; cd f/f2c; \
-# $${top}/f/f2c/configure --srcdir=$${top}/f/f2c
#
# Build hooks:
-# I'm not sure there's a way of getting f2c into here conditionally on
-# the --enable-f2c flag detected by config-lang.in so kluge it with the
-# maybe-f2c target by looking at STAGESTUFF.
-f77.all.build: g77 maybe-f2c
-f77.all.cross: g77-cross maybe-f2c
-f77.start.encap: g77 maybe-f2c
+f77.all.build: g77$(exeext)
+f77.all.cross: g77-cross$(exeext)
+f77.start.encap: g77$(exeext)
f77.rest.encap:
-f77.info: $(srcdir)/f/g77.info
-f77.dvi: $(srcdir)/f/g77.dvi
+f77.info: f/g77.info
+f77.dvi: f/g77.dvi
# g77 documentation.
-$(srcdir)/f/g77.info: f/g77.texi f/bugs.texi f/install.texi f/news.texi f/intdoc.texi
- cd $(srcdir)/f; $(MAKEINFO) g77.texi
+f/g77.info: $(srcdir)/f/g77.texi $(srcdir)/f/bugs.texi \
+ $(srcdir)/f/g77install.texi $(srcdir)/f/news.texi \
+ $(srcdir)/f/intdoc.texi
+ $(MAKEINFO) -I$(srcdir)/f $(srcdir)/f/g77.texi -o f/g77.info
-$(srcdir)/f/g77.dvi: f/g77.texi f/bugs.texi f/install.texi f/news.texi f/intdoc.texi
- cd $(srcdir)/f; $(TEXI2DVI) g77.texi
+f/g77.dvi: $(srcdir)/f/g77.texi $(srcdir)/f/bugs.texi \
+ $(srcdir)/f/g77install.texi $(srcdir)/f/news.texi \
+ $(srcdir)/f/intdoc.texi
+ $(TEXI2DVI) -I$(srcdir)/f $(srcdir)/f/g77.texi -o f/g77.dvi
# This dance is all about producing accurate documentation for g77's
# intrinsics with minimum fuss. f/ansify appends "\n\" to C strings
@@ -359,7 +288,7 @@ $(srcdir)/f/BUGS: f/bugs0.texi f/bugs.texi
cd $(srcdir)/f; $(MAKEINFO) -D BUGSONLY --no-header --no-split \
--no-validate bugs0.texi -o BUGS
-$(srcdir)/f/INSTALL: f/install0.texi f/install.texi
+$(srcdir)/f/INSTALL: f/install0.texi f/g77install.texi
cd $(srcdir)/f; $(MAKEINFO) -D INSTALLONLY --no-header --no-split \
--no-validate install0.texi -o INSTALL
@@ -367,69 +296,14 @@ $(srcdir)/f/NEWS: f/news0.texi f/news.texi
cd $(srcdir)/f; $(MAKEINFO) -D NEWSONLY --no-header --no-split \
--no-validate news0.texi -o NEWS
-$(srcdir)/f/runtime/configure: $(srcdir)/f/runtime/configure.in
- cd $(srcdir)/f/runtime && $(MAKE) srcdir=. -f Makefile.in rebuilt
-$(srcdir)/f/runtime/libU77/configure: $(srcdir)/f/runtime/libU77/configure.in
- cd $(srcdir)/f/runtime && $(MAKE) srcdir=. -f Makefile.in rebuilt
-
f77.rebuilt: $(srcdir)/f/g77.info $(srcdir)/f/BUGS $(srcdir)/f/INSTALL \
- $(srcdir)/f/NEWS $(srcdir)/f/runtime/configure \
- $(srcdir)/f/runtime/libU77/configure
+ $(srcdir)/f/NEWS
-maybe-f2c:
-#For now, omit f2c stuff. -- burley
-# case "$(STAGESTUFF)" in *f2c*) $(MAKE) f2c;; esac
#
# Install hooks:
# f771 is installed elsewhere as part of $(COMPILERS).
-f77.install-normal: install-libf77 install-f2c-all
-
-# Install the F77 run time library.
-install-libf77: f77-runtime
-# Check for the presence of other versions of the library and includes.
-# Test libf2c.* in case of a shared version, for instance.
- @if test -z "$(F2CLIBOK)" && \
- test -z "$(F2C_INSTALL_FLAG)" && \
- test "`echo $(libdir)/libf2c.*`" != "$(libdir)/libf2c.*"; then \
- echo ; \
- echo 'You already have a version of libf2c installed as' $(libdir)/libf2c.*; \
- echo 'To use g77 this must be consistent with the one that will be built.'; \
- echo 'You should probably delete it and/or install ./libf2c.a in its place.'; \
- echo 'Resume the "make install" after removing the existing library or'; \
- echo 'define the make variable F2CLIBOK to avoid this test.'; \
- echo 'Check also for' $(includedir)/f2c.h 'per INSTALL instructions.'; \
- echo '(Note that a quick and easy way to resume "make -k install" is to'; \
- echo 'use "make install-libf77".)'; \
- exit 1; else true; fi
- if [ -f libf2c.a ] ; then \
- $(INSTALL_DATA) libf2c.a $(libsubdir)/libf2c.a; \
- if $(RANLIB_TEST) ; then \
- (cd $(libsubdir); $(RANLIB) libf2c.a); else true; fi; \
- chmod a-x $(libsubdir)/libf2c.a; \
- else true; fi
- if [ -f include/f2c.h ] ; then \
- $(INSTALL_DATA) include/f2c.h $(libsubdir)/include/f2c.h; \
- else true; fi
-
-# Install the f2c-related stuff in the directories
-# where f2c and vanilla ld might look for them.
-
-install-f2c-all: install-f2c-header install-f2c-lib
-
-install-f2c-header:
- -if test -n "$(F2C_INSTALL_FLAG)" && test -f include/f2c.h; then \
- $(INSTALL_DATA) include/f2c.h $(includedir)/f2c.h; \
- chmod a+r $(includedir)/f2c.h; \
- else true; fi
-
-install-f2c-lib:
- -if test -n "$(F2C_INSTALL_FLAG)" && test -f libf2c.a; then \
- $(INSTALL_DATA) libf2c.a $(libdir)/libf2c.a; \
- if $(RANLIB_TEST) ; then \
- (cd $(libdir); $(RANLIB) libf2c.a); else true; fi; \
- chmod a-x $(libdir)/libf2c.a; \
- else true; fi
+f77.install-normal:
# Install the driver program as $(target)-g77
# and also as either g77 (if native) or $(tooldir)/bin/g77.
@@ -441,9 +315,7 @@ f77.install-common:
chmod a+x $(bindir)/$(G77_CROSS_NAME)$(exeext); \
if $(F77_INSTALL_FLAG) ; then \
rm -f $(bindir)/$(F77_CROSS_NAME)$(exeext); \
- ln $(bindir)/$(G77_CROSS_NAME)$(exeext) $(bindir)/$(F77_CROSS_NAME)$(exeext) \
- > /dev/null 2>&1 \
- || cp $(bindir)/$(G77_CROSS_NAME)$(exeext) $(bindir)/$(F77_CROSS_NAME)$(exeext) ; \
+ $(LN) $(bindir)/$(G77_CROSS_NAME)$(exeext) $(bindir)/$(F77_CROSS_NAME)$(exeext); \
fi ; \
else \
rm -f $(bindir)/$(G77_INSTALL_NAME)$(exeext); \
@@ -451,18 +323,22 @@ f77.install-common:
chmod a+x $(bindir)/$(G77_INSTALL_NAME)$(exeext); \
if $(F77_INSTALL_FLAG) ; then \
rm -f $(bindir)/$(F77_INSTALL_NAME)$(exeext); \
- ln $(bindir)/$(G77_INSTALL_NAME)$(exeext) $(bindir)/$(F77_INSTALL_NAME)$(exeext) \
- > /dev/null 2>&1 \
- || cp $(bindir)/$(G77_INSTALL_NAME)$(exeext) $(bindir)/$(F77_INSTALL_NAME)$(exeext) ; \
+ $(LN) $(bindir)/$(G77_INSTALL_NAME)$(exeext) $(bindir)/$(F77_INSTALL_NAME)$(exeext); \
fi ; \
fi ; \
else true; fi
-f77.install-info:
- -rm -f $(infodir)/g77.info*
- cd $(srcdir)/f; for f in g77.info*; \
- do $(INSTALL_DATA) $$f $(infodir)/$$f; done
- -chmod a-x $(infodir)/g77.info*
+# $(INSTALL_DATA) might be a relative pathname, so we can't cd into srcdir
+# to do the install. The sed rule was copied from stmp-int-hdrs.
+f77.install-info: f77.info
+ if [ -f f/g77.info ] ; then \
+ rm -f $(infodir)/g77.info*; \
+ for f in f/g77.info*; do \
+ realfile=`echo $$f | sed -e 's|.*/\([^/]*\)$$|\1|'`; \
+ $(INSTALL_DATA) $$f $(infodir)/$$realfile; \
+ done; \
+ chmod a-x $(infodir)/g77.info*; \
+ fi
f77.install-man: $(srcdir)/f/g77.1
-if [ -f f771$(exeext) ] ; then \
@@ -472,9 +348,7 @@ f77.install-man: $(srcdir)/f/g77.1
chmod a-x $(mandir)/$(G77_CROSS_NAME)$(manext); \
if $(F77_INSTALL_FLAG) ; then \
rm -f $(mandir)/$(F77_CROSS_NAME)$(manext); \
- ln $(mandir)/$(G77_CROSS_NAME)$(manext) $(mandir)/$(F77_CROSS_NAME)$(manext) \
- > /dev/null 2>&1 \
- || cp $(mandir)/$(F77_CROSS_NAME)$(manext) $(mandir)/$(F77_CROSS_NAME)$(manext) ; \
+ $(LN) $(mandir)/$(G77_CROSS_NAME)$(manext) $(mandir)/$(F77_CROSS_NAME)$(manext); \
fi ;\
else \
rm -f $(mandir)/$(G77_INSTALL_NAME)$(manext); \
@@ -482,9 +356,7 @@ f77.install-man: $(srcdir)/f/g77.1
chmod a-x $(mandir)/$(G77_INSTALL_NAME)$(manext); \
if $(F77_INSTALL_FLAG) ; then \
rm -f $(mandir)/$(F77_INSTALL_NAME)$(manext); \
- ln $(mandir)/$(G77_INSTALL_NAME)$(manext) $(mandir)/$(F77_INSTALL_NAME)$(manext) \
- > /dev/null 2>&1 \
- || cp $(mandir)/$(F77_INSTALL_NAME)$(manext) $(mandir)/$(F77_INSTALL_NAME)$(manext) ; \
+ $(LN) $(mandir)/$(G77_INSTALL_NAME)$(manext) $(mandir)/$(F77_INSTALL_NAME)$(manext); \
fi ;\
fi; \
else true; fi
@@ -501,11 +373,6 @@ f77.uninstall:
-rm -rf $(mandir)/$(G77_INSTALL_NAME)$(manext)
-rm -rf $(mandir)/$(G77_CROSS_NAME)$(manext)
-rm -rf $(infodir)/g77.info*
- -rm -rf $(libsubdir)/libf2c.a
- -if $(F2C_INSTALL_FLAG) ; then \
- rm -rf include/f2c.h ; \
- rm -rf $(libdir)/libf2c.a ; \
- fi
#
# Clean hooks:
# A lot of the ancillary files are deleted by the main makefile.
@@ -514,68 +381,27 @@ f77.uninstall:
f77.mostlyclean:
-rm -f f/*$(objext)
-rm -f f/fini f/f771 f/stamp-str f/str-*.h f/str-*.j f/intdoc f/ansify f/intdoc.h0
- -cd f/runtime; $(MAKE) -f ../../$(srcdir)/f/runtime/Makefile.in mostlyclean
f77.clean:
- -cd f/runtime; $(MAKE) -f ../../$(srcdir)/f/runtime/Makefile.in clean
+ -rm -f g77.c
f77.distclean:
- -cd f/runtime; $(MAKE) -f ../../$(srcdir)/f/runtime/Makefile.in distclean
-rm -f f/Makefile
-# like gcc's extraclean, which does clean f/ for us, but not f/gbe,
-# f/runtime, f/runtime/libF77, f/runtime/libI77, and f/runtime/libU77,
-# so do those.
-f77.extraclean: f77.distclean
- -rm -f f/*/=* f/*/"#"* f/*/*~*
- -rm -f f/*/patch* f/*/*.orig f/*/*.rej
- -rm -f f/*/*.dvi f/*/*.oaux f/*/*.d f/*/*.[zZ] f/*/*.gz
- -rm -f f/*/*.tar f/*/*.xtar f/*/*diff f/*/*.diff.* f/*/*.tar.* f/*/*.xtar.* f/*/*diffs
- -rm -f f/*/*lose f/*/*.s f/*/*.s[0-9] f/*/*.i
- -rm -f f/*/*/=* f/*/*/"#"* f/*/*/*~*
- -rm -f f/*/*/patch* f/*/*/*.orig f/*/*/*.rej
- -rm -f f/*/*/*.dvi f/*/*/*.oaux f/*/*/*.d f/*/*/*.[zZ] f/*/*/*.gz
- -rm -f f/*/*/*.tar f/*/*/*.xtar f/*/*/*diff f/*/*/*.diff.* f/*/*/*.tar.* f/*/*/*.xtar.* f/*/*/*diffs
- -rm -f f/*/*/*lose f/*/*/*.s f/*/*/*.s[0-9] f/*/*/*.i
# realclean is the pre-2.7.0 name for maintainer-clean
f77.maintainer-clean f77.realclean: f77.distclean
- -cd f/runtime; $(MAKE) -f ../../$(srcdir)/f/runtime/Makefile.in maintainer-clean
- -$(MAKE) f77.maintainer-clean
-rm -f f/g77.info* f/g77.*aux f/TAGS f/BUGS f/INSTALL f/NEWS f/intdoc.texi
#
# Stage hooks:
# The main makefile has already created stage?/f.
G77STAGESTUFF = f/*$(objext) f/fini f/stamp-str f/str-*.h f/str-*.j
-RUNTIMESTAGESTUFF = f/runtime/config.cache f/runtime/config.log \
- f/runtime/config.status f/runtime/Makefile f/runtime/stamp-lib
-LIBF77STAGESTUFF = f/runtime/libF77/*$(objext) f/runtime/libF77/Makefile
-LIBI77STAGESTUFF = f/runtime/libI77/*$(objext) f/runtime/libI77/Makefile
-LIBU77STAGESTUFF = f/runtime/libU77/*$(objext) f/runtime/libU77/Makefile \
- f/runtime/libU77/config.cache f/runtime/libU77/config.log \
- f/runtime/libU77/config.status
-
-f77.stage1:
+
+f77.stage1: stage1-start
-mv $(G77STAGESTUFF) stage1/f
- -mv $(RUNTIMESTAGESTUFF) stage1/f/runtime
- -mv $(LIBF77STAGESTUFF) stage1/f/runtime/libF77
- -mv $(LIBI77STAGESTUFF) stage1/f/runtime/libI77
- -mv $(LIBU77STAGESTUFF) stage1/f/runtime/libU77
-f77.stage2:
+f77.stage2: stage2-start
-mv $(G77STAGESTUFF) stage2/f
- -mv $(RUNTIMESTAGESTUFF) stage2/f/runtime
- -mv $(LIBF77STAGESTUFF) stage2/f/runtime/libF77
- -mv $(LIBI77STAGESTUFF) stage2/f/runtime/libI77
- -mv $(LIBU77STAGESTUFF) stage2/f/runtime/libU77
-f77.stage3:
+f77.stage3: stage3-start
-mv $(G77STAGESTUFF) stage3/f
- -mv $(RUNTIMESTAGESTUFF) stage3/f/runtime
- -mv $(LIBF77STAGESTUFF) stage3/f/runtime/libF77
- -mv $(LIBI77STAGESTUFF) stage3/f/runtime/libI77
- -mv $(LIBU77STAGESTUFF) stage3/f/runtime/libU77
-f77.stage4:
+f77.stage4: stage4-start
-mv $(G77STAGESTUFF) stage4/f
- -mv $(RUNTIMESTAGESTUFF) stage4/f/runtime
- -mv $(LIBF77STAGESTUFF) stage4/f/runtime/libF77
- -mv $(LIBI77STAGESTUFF) stage4/f/runtime/libI77
- -mv $(LIBU77STAGESTUFF) stage4/f/runtime/libU77
#
# Maintenance hooks:
@@ -585,5 +411,5 @@ f77.distdir: f77.rebuilt
mkdir tmp/f
cd f; \
for file in *[0-9a-zA-Z+]; do \
- ln $$file ../tmp/f >/dev/null 2>&1 || cp $$file ../tmp/f; \
+ ($LN) $$file ../tmp/f
done
diff --git a/gcc/f/Makefile.in b/gcc/f/Makefile.in
index dd14447df4e..4d502cb72bd 100644
--- a/gcc/f/Makefile.in
+++ b/gcc/f/Makefile.in
@@ -139,7 +139,7 @@ all: all.indirect
#
# Now figure out from those variables how to compile and link.
-all.indirect: f/Makefile f771
+all.indirect: f/Makefile f771$(exeext)
# IN_GCC tells obstack.h that we are using gcc's <stddef.h> file.
INTERNAL_CFLAGS = $(CROSS) -DIN_GCC
@@ -196,6 +196,8 @@ FLAGS_TO_PASS = \
"SHELL=$(SHELL)" \
"exec_prefix=$(exec_prefix)" \
"prefix=$(prefix)" \
+ "local_prefix=$(local_prefix)" \
+ "gxx_include_dir=$(gxx_include_dir)" \
"tooldir=$(tooldir)" \
"bindir=$(bindir)" \
"libsubdir=$(libsubdir)"
@@ -244,16 +246,16 @@ F77_OBJS = \
f/target.o \
f/top.o \
f/type.o \
- f/where.o \
- f/zzz.o
+ f/version.o \
+ f/where.o
# Language-independent object files.
OBJS = `cat stamp-objlist | sed -e "s: : :g" -e "s: : f/:g"`
OBJDEPS = stamp-objlist
-compiler: f771
+compiler: f771$(exeext)
# This is now meant to be built in the top level directory, not `f':
-f771: $(P) f/Makefile $(F77_OBJS) $(OBJDEPS) $(LIBDEPS)
+f771$(exeext): $(P) f/Makefile $(F77_OBJS) $(OBJDEPS) $(LIBDEPS)
rm -f f771$(exeext)
$(CC) $(ALL_CFLAGS) $(LDFLAGS) $(F771_LDFLAGS) -o $@ \
$(F77_OBJS) $(OBJS) $(LIBS)
@@ -266,7 +268,7 @@ f/Makefile:
Makefile: $(srcdir)/f/Makefile.in $(srcdir)/configure
-native: f771
+native: f771$(exeext)
#
# Compiling object files from source files.
@@ -377,7 +379,7 @@ f/parse.o: f/parse.c f/proj.h $(ASSERT_H) f/top.h f/malloc.h f/where.h $(GLIMITS
f/com.h f/com-rt.def $(TREE_H) f/bld.h f/bld-op.def f/bit.h f/info.h \
f/info-b.def f/info-k.def f/info-w.def f/target.h f/bad.h f/bad.def f/lex.h \
f/type.h f/intrin.h f/intrin.def f/lab.h f/symbol.h f/symbol.def f/equiv.h \
- f/storag.h f/global.h f/name.h f/zzz.h $(FLAGS_H)
+ f/storag.h f/global.h f/name.h f/version.h $(FLAGS_H)
f/proj.o: f/proj.c f/proj.h $(ASSERT_H) $(GLIMITS_H)
f/src.o: f/src.c f/proj.h $(ASSERT_H) f/src.h f/bad.h f/bad.def f/where.h \
$(GLIMITS_H) f/top.h f/malloc.h
@@ -470,7 +472,7 @@ f/top.o: f/top.c f/proj.h $(ASSERT_H) f/top.h f/malloc.h f/where.h $(GLIMITS_H)
f/type.o: f/type.c f/proj.h $(ASSERT_H) f/type.h f/malloc.h
f/where.o: f/where.c f/proj.h $(ASSERT_H) f/where.h $(GLIMITS_H) f/top.h f/malloc.h \
f/lex.h
-f/zzz.o: f/zzz.c f/proj.h $(ASSERT_H) f/zzz.h
+f/version.o: f/version.c f/proj.h $(ASSERT_H) f/version.h
# The rest of this list (Fortran 77 language-specific files) is hand-generated.
diff --git a/gcc/f/bad.def b/gcc/f/bad.def
index 507bfed55b0..9a3cf5a323d 100644
--- a/gcc/f/bad.def
+++ b/gcc/f/bad.def
@@ -539,6 +539,8 @@ FFEBAD_MSGS2 (FFEBAD_TOO_MANY_DIMS, FATAL,
"Too many dimensions at %0")
FFEBAD_MSGS1 (FFEBAD_NULL_ARGUMENT, FATAL,
"Null argument at %0 for statement function reference at %1")
+FFEBAD_MSGS1 (FFEBAD_NULL_ARGUMENT_W, WARN,
+"Null argument at %0 for procedure invocation at %1")
FFEBAD_MSGS1 (FFEBAD_TOO_FEW_ARGUMENTS, FATAL,
"%A too few arguments (starting with dummy argument `%B') as of %0 for statement function reference at %1")
FFEBAD_MSGS1 (FFEBAD_TOO_MANY_ARGUMENTS, FATAL,
@@ -547,6 +549,8 @@ FFEBAD_MSGS1 (FFEBAD_ARRAY_AS_SFARG, FATAL,
"Array supplied at %1 for dummy argument `%A' in statement function reference at %0")
FFEBAD_MSGS1 (FFEBAD_FORMAT_UNSUPPORTED, FATAL,
"Unsupported FORMAT specifier at %0")
+FFEBAD_MSGS1 (FFEBAD_FORMAT_VARIABLE, FATAL,
+"Variable-expression FORMAT specifier at %0 -- unsupported")
FFEBAD_MSGS2 (FFEBAD_OPEN_UNSUPPORTED, WARN,
"Unsupported OPEN control item at %0 -- ACTION=, ASSOCIATEVARIABLE=, BLOCKSIZE=, BUFFERCOUNT=, CARRIAGECONTROL=, DEFAULTFILE=, DELIM=, DISPOSE=, EXTENDSIZE=, INITIALSIZE=, KEY=, MAXREC=, NOSPANBLOCKS, ORGANIZATION=, PAD=, POSITION=, READONLY=, RECORDTYPE=, SHARED=, and USEROPEN= are not supported",
"Unsupported OPEN control item at %0")
diff --git a/gcc/f/com-rt.def b/gcc/f/com-rt.def
index 1c1be602cad..f124379c9cf 100644
--- a/gcc/f/com-rt.def
+++ b/gcc/f/com-rt.def
@@ -162,7 +162,7 @@ DEFGFRT (FFECOM_gfrtDLOG10, "d_lg10", FFECOM_rttypeDOUBLE_, "&d", FALSE, FALSE)
DEFGFRT (FFECOM_gfrtDMOD, "d_mod", FFECOM_rttypeDOUBLE_, "&d", FALSE, FALSE)
DEFGFRT (FFECOM_gfrtDNINT, "d_nint", FFECOM_rttypeDOUBLE_, "&d", FALSE, FALSE)
DEFGFRT (FFECOM_gfrtDPROD, "d_prod", FFECOM_rttypeDOUBLE_, "&d", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtDSIGN, "d_sign", FFECOM_rttypeDOUBLE_, "&d", FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtDSIGN, "d_sign", FFECOM_rttypeDOUBLE_, "&d&d", FALSE, FALSE)
DEFGFRT (FFECOM_gfrtDSIN, "d_sin", FFECOM_rttypeDOUBLE_, "&d", FALSE, FALSE)
DEFGFRT (FFECOM_gfrtDSINH, "d_sinh", FFECOM_rttypeDOUBLE_, "&d", FALSE, FALSE)
DEFGFRT (FFECOM_gfrtDSQRT, "d_sqrt", FFECOM_rttypeDOUBLE_, "&d", FALSE, FALSE)
@@ -203,7 +203,7 @@ DEFGFRT (FFECOM_gfrtIDNINT, "i_dnnt", FFECOM_rttypeINTEGER_, "&i", FALSE, FALSE)
DEFGFRT (FFECOM_gfrtIERRNO, "G77_ierrno_0", FFECOM_rttypeINTEGER_, 0, FALSE, FALSE)
DEFGFRT (FFECOM_gfrtINDEX, "i_indx", FFECOM_rttypeINTEGER_, "&a&a", FALSE, FALSE)
DEFGFRT (FFECOM_gfrtIRAND, "G77_irand_0", FFECOM_rttypeINTEGER_, "&i", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtISIGN, "i_sign", FFECOM_rttypeINTEGER_, "&i", FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtISIGN, "i_sign", FFECOM_rttypeINTEGER_, "&i&i", FALSE, FALSE)
DEFGFRT (FFECOM_gfrtISATTY, "G77_isatty_0", FFECOM_rttypeINTEGER_, "&i", FALSE, FALSE)
DEFGFRT (FFECOM_gfrtITIME, "G77_itime_0", FFECOM_rttypeVOID_, "&i", FALSE, FALSE)
DEFGFRT (FFECOM_gfrtKILL, "G77_kill_0", FFECOM_rttypeINTEGER_, "&i&i", FALSE, FALSE)
@@ -224,8 +224,8 @@ DEFGFRT (FFECOM_gfrtRAND, "G77_rand_0", FFECOM_rttypeREAL_F2C_, "&i", FALSE, FAL
DEFGFRT (FFECOM_gfrtRENAME, "G77_rename_0", FFECOM_rttypeINTEGER_, "&a&a", FALSE, FALSE)
DEFGFRT (FFECOM_gfrtSECNDS, "G77_secnds_0", FFECOM_rttypeREAL_F2C_, "&f", FALSE, FALSE)
DEFGFRT (FFECOM_gfrtSECOND, "G77_second_0", FFECOM_rttypeREAL_F2C_, 0, FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtSIGN, "r_sign", FFECOM_rttypeREAL_F2C_, "&f", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtL_SIGNAL, "G77_signal_0", FFECOM_rttypeFTNINT_, "&i0", FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtSIGN, "r_sign", FFECOM_rttypeREAL_F2C_, "&f&f", FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtL_SIGNAL, "G77_signal_0", FFECOM_rttypeVOIDSTAR_, "&i0", FALSE, FALSE)
DEFGFRT (FFECOM_gfrtSIN, "r_sin", FFECOM_rttypeREAL_F2C_, "&f", FALSE, FALSE)
DEFGFRT (FFECOM_gfrtSINH, "r_sinh", FFECOM_rttypeREAL_F2C_, "&f", FALSE, FALSE)
DEFGFRT (FFECOM_gfrtSLEEP, "G77_sleep_0", FFECOM_rttypeVOID_, "&i", FALSE, FALSE)
diff --git a/gcc/f/com.c b/gcc/f/com.c
index 0ba57ffd34f..acaadb9a490 100644
--- a/gcc/f/com.c
+++ b/gcc/f/com.c
@@ -345,6 +345,7 @@ tree ffecom_f2c_ptr_to_ftnint_type_node;
typedef enum
{
FFECOM_rttypeVOID_,
+ FFECOM_rttypeVOIDSTAR_, /* C's `void *' type. */
FFECOM_rttypeFTNINT_, /* f2c's `ftnint' type. */
FFECOM_rttypeINTEGER_, /* f2c's `integer' type. */
FFECOM_rttypeLONGINT_, /* f2c's `longint' type. */
@@ -419,8 +420,8 @@ static tree ffecom_call_binop_ (tree fn, ffeinfoKindtype kt,
tree dest_tree, ffebld dest,
bool *dest_used, tree callee_commons,
bool scalar_args);
-static void ffecom_char_args_ (tree *xitem, tree *length,
- ffebld expr);
+static void ffecom_char_args_x_ (tree *xitem, tree *length,
+ ffebld expr, bool with_null);
static tree ffecom_check_size_overflow_ (ffesymbol s, tree type, bool dummy);
static tree ffecom_char_enhance_arg_ (tree *xtype, ffesymbol s);
static ffecomConcatList_
@@ -433,7 +434,7 @@ static ffecomConcatList_ ffecom_concat_list_new_ (ffebld expr,
static void ffecom_debug_kludge_ (tree aggr, char *aggr_type, ffesymbol member,
tree member_type, ffetargetOffset offset);
static void ffecom_do_entry_ (ffesymbol fn, int entrynum);
-static tree ffecom_expr_ (ffebld expr, tree dest_tree,
+static tree ffecom_expr_ (ffebld expr, tree type_tree, tree dest_tree,
ffebld dest, bool *dest_used,
bool assignp);
static tree ffecom_expr_intrinsic_ (ffebld expr, tree dest_tree,
@@ -506,7 +507,7 @@ static tree builtin_function (char *name, tree type,
static int duplicate_decls (tree newdecl, tree olddecl);
static void finish_decl (tree decl, tree init, bool is_top_level);
static void finish_function (int nested);
-static char *lang_printable_name (tree decl, char **kind);
+static char *lang_printable_name (tree decl, int v);
static tree lookup_name_current_level (tree name);
static struct binding_level *make_binding_level (void);
static void pop_f_function_context (void);
@@ -652,6 +653,9 @@ static char *ffecom_gfrt_argstring_[FFECOM_gfrt]
#define ffecom_start_compstmt_ bison_rule_pushlevel_
#define ffecom_end_compstmt_ bison_rule_compstmt_
+#define ffecom_char_args_(i,l,e) ffecom_char_args_x_((i),(l),(e),FALSE)
+#define ffecom_char_args_with_null_(i,l,e) ffecom_char_args_x_((i),(l),(e),TRUE)
+
/* For each binding contour we allocate a binding_level structure
* which records the names defined in that contour.
* Contours include:
@@ -1092,6 +1096,10 @@ ffecom_arglist_expr_ (char *c, ffebld expr)
tree item;
bool ptr = FALSE;
tree wanted = NULL_TREE;
+ static char zed[] = "0";
+
+ if (c == NULL)
+ c = &zed[0];
while (expr != NULL)
{
@@ -1184,6 +1192,39 @@ ffecom_arglist_expr_ (char *c, ffebld expr)
}
}
+ /* We've run out of args in the call; if the implementation expects
+ more, supply null pointers for them, which the implementation can
+ check to see if an arg was omitted. */
+
+ while (*c != '\0' && *c != '0')
+ {
+ if (*c == '&')
+ ++c;
+ else
+ assert ("missing arg to run-time routine!" == NULL);
+
+ switch (*(c++))
+ {
+ case '\0':
+ case 'a':
+ case 'c':
+ case 'd':
+ case 'e':
+ case 'f':
+ case 'i':
+ case 'j':
+ break;
+
+ default:
+ assert ("bad arg string code" == NULL);
+ break;
+ }
+ *plist
+ = build_tree_list (NULL_TREE,
+ null_pointer_node);
+ plist = &TREE_CHAIN (*plist);
+ }
+
*plist = trail;
return list;
@@ -1608,36 +1649,46 @@ ffecom_call_binop_ (tree fn, ffeinfoKindtype kt, bool is_f2c_complex,
}
#endif
-/* ffecom_char_args_ -- Return ptr/length args for char subexpression
+/* ffecom_char_args_x_ -- Return ptr/length args for char subexpression
tree ptr_arg;
tree length_arg;
ffebld expr;
- ffecom_char_args_(&ptr_arg,&length_arg,expr);
+ bool with_null;
+ ffecom_char_args_x_(&ptr_arg,&length_arg,expr,with_null);
Handles CHARACTER-type CONTER, SYMTER, SUBSTR, ARRAYREF, and FUNCREF
subexpressions by constructing the appropriate trees for the ptr-to-
character-text and length-of-character-text arguments in a calling
- sequence. */
+ sequence.
+
+ Note that if with_null is TRUE, and the expression is an opCONTER,
+ a null byte is appended to the string. */
#if FFECOM_targetCURRENT == FFECOM_targetGCC
static void
-ffecom_char_args_ (tree *xitem, tree *length, ffebld expr)
+ffecom_char_args_x_ (tree *xitem, tree *length, ffebld expr, bool with_null)
{
tree item;
tree high;
ffetargetCharacter1 val;
+ ffetargetCharacterSize newlen;
switch (ffebld_op (expr))
{
case FFEBLD_opCONTER:
val = ffebld_constant_character1 (ffebld_conter (expr));
- *length = build_int_2 (ffetarget_length_character1 (val), 0);
+ newlen = ffetarget_length_character1 (val);
+ if (with_null)
+ {
+ if (newlen != 0)
+ ++newlen; /* begin FFETARGET-NULL-KLUDGE. */
+ }
+ *length = build_int_2 (newlen, 0);
TREE_TYPE (*length) = ffecom_f2c_ftnlen_type_node;
- high = build_int_2 (ffetarget_length_character1 (val),
- 0);
+ high = build_int_2 (newlen, 0);
TREE_TYPE (high) = ffecom_f2c_ftnlen_type_node;
- item = build_string (ffetarget_length_character1 (val),
+ item = build_string (newlen, /* end FFETARGET-NULL-KLUDGE. */
ffetarget_text_character1 (val));
TREE_TYPE (item)
= build_type_variant
@@ -2666,11 +2717,15 @@ ffecom_do_entry_ (ffesymbol fn, int entrynum)
Recursive descent on expr while making corresponding tree nodes and
attaching type info and such. If destination supplied and compatible
with temporary that would be made in certain cases, temporary isn't
- made, destination used instead, and dest_used flag set TRUE. */
+ made, destination used instead, and dest_used flag set TRUE.
+
+ If TREE_TYPE is non-null, it overrides the type that the expression
+ would normally be computed in. This is most useful for array indices
+ which should be done in sizetype for efficiency. */
#if FFECOM_targetCURRENT == FFECOM_targetGCC
static tree
-ffecom_expr_ (ffebld expr, tree dest_tree,
+ffecom_expr_ (ffebld expr, tree tree_type_x, tree dest_tree,
ffebld dest, bool *dest_used,
bool assignp)
{
@@ -2680,8 +2735,9 @@ ffecom_expr_ (ffebld expr, tree dest_tree,
ffeinfoBasictype bt;
ffeinfoKindtype kt;
tree t;
- tree tree_type;
tree dt; /* decl_tree for an ffesymbol. */
+ tree tree_type;
+ tree left, right;
ffesymbol s;
enum tree_code code;
@@ -2692,11 +2748,11 @@ ffecom_expr_ (ffebld expr, tree dest_tree,
bt = ffeinfo_basictype (ffebld_info (expr));
kt = ffeinfo_kindtype (ffebld_info (expr));
+ tree_type = ffecom_tree_type[bt][kt];
switch (ffebld_op (expr))
{
case FFEBLD_opACCTER:
- tree_type = ffecom_tree_type[bt][kt];
{
ffebitCount i;
ffebit bits = ffebld_accter_bits (expr);
@@ -2760,7 +2816,6 @@ ffecom_expr_ (ffebld expr, tree dest_tree,
return list;
case FFEBLD_opARRTER:
- tree_type = ffecom_tree_type[bt][kt];
{
ffetargetOffset i;
@@ -2796,7 +2851,6 @@ ffecom_expr_ (ffebld expr, tree dest_tree,
return list;
case FFEBLD_opCONTER:
- tree_type = ffecom_tree_type[bt][kt];
item
= ffecom_constantunion (&ffebld_constant_union (ffebld_conter (expr)),
bt, kt, tree_type);
@@ -2930,54 +2984,87 @@ ffecom_expr_ (ffebld expr, tree dest_tree,
t = ffecom_2 (ARRAY_REF,
TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (t))),
t,
- ffecom_expr (dims[--i]));
+ ffecom_expr_ (dims[--i], sizetype, NULL, NULL,
+ NULL, FALSE));
#endif
return t;
}
case FFEBLD_opUPLUS:
- tree_type = ffecom_tree_type[bt][kt];
- return ffecom_1 (NOP_EXPR, tree_type, ffecom_expr (ffebld_left (expr)));
+ left = ffecom_expr_ (ffebld_left (expr), tree_type_x, NULL, NULL,
+ NULL, FALSE);
+ return ffecom_1 (NOP_EXPR, tree_type, left);
case FFEBLD_opPAREN: /* ~~~Make sure Fortran rules respected here */
- tree_type = ffecom_tree_type[bt][kt];
- return ffecom_1 (NOP_EXPR, tree_type, ffecom_expr (ffebld_left (expr)));
+ left = ffecom_expr_ (ffebld_left (expr), tree_type_x, NULL, NULL,
+ NULL, FALSE);
+ return ffecom_1 (NOP_EXPR, tree_type, left);
case FFEBLD_opUMINUS:
- tree_type = ffecom_tree_type[bt][kt];
- return ffecom_1 (NEGATE_EXPR, tree_type,
- ffecom_expr (ffebld_left (expr)));
+ left = ffecom_expr_ (ffebld_left (expr), tree_type_x, NULL, NULL,
+ NULL, FALSE);
+ if (tree_type_x)
+ {
+ tree_type = tree_type_x;
+ left = convert (tree_type, left);
+ }
+ return ffecom_1 (NEGATE_EXPR, tree_type, left);
case FFEBLD_opADD:
- tree_type = ffecom_tree_type[bt][kt];
- return ffecom_2 (PLUS_EXPR, tree_type,
- ffecom_expr (ffebld_left (expr)),
- ffecom_expr (ffebld_right (expr)));
- break;
+ left = ffecom_expr_ (ffebld_left (expr), tree_type_x, NULL, NULL,
+ NULL, FALSE);
+ right = ffecom_expr_ (ffebld_right (expr), tree_type_x, NULL, NULL,
+ NULL, FALSE);
+ if (tree_type_x)
+ {
+ tree_type = tree_type_x;
+ left = convert (tree_type, left);
+ right = convert (tree_type, right);
+ }
+ return ffecom_2 (PLUS_EXPR, tree_type, left, right);
case FFEBLD_opSUBTRACT:
- tree_type = ffecom_tree_type[bt][kt];
- return ffecom_2 (MINUS_EXPR, tree_type,
- ffecom_expr (ffebld_left (expr)),
- ffecom_expr (ffebld_right (expr)));
+ left = ffecom_expr_ (ffebld_left (expr), tree_type_x, NULL, NULL,
+ NULL, FALSE);
+ right = ffecom_expr_ (ffebld_right (expr), tree_type_x, NULL, NULL,
+ NULL, FALSE);
+ if (tree_type_x)
+ {
+ tree_type = tree_type_x;
+ left = convert (tree_type, left);
+ right = convert (tree_type, right);
+ }
+ return ffecom_2 (MINUS_EXPR, tree_type, left, right);
case FFEBLD_opMULTIPLY:
- tree_type = ffecom_tree_type[bt][kt];
- return ffecom_2 (MULT_EXPR, tree_type,
- ffecom_expr (ffebld_left (expr)),
- ffecom_expr (ffebld_right (expr)));
+ left = ffecom_expr_ (ffebld_left (expr), tree_type_x, NULL, NULL,
+ NULL, FALSE);
+ right = ffecom_expr_ (ffebld_right (expr), tree_type_x, NULL, NULL,
+ NULL, FALSE);
+ if (tree_type_x)
+ {
+ tree_type = tree_type_x;
+ left = convert (tree_type, left);
+ right = convert (tree_type, right);
+ }
+ return ffecom_2 (MULT_EXPR, tree_type, left, right);
case FFEBLD_opDIVIDE:
- tree_type = ffecom_tree_type[bt][kt];
- return
- ffecom_tree_divide_ (tree_type,
- ffecom_expr (ffebld_left (expr)),
- ffecom_expr (ffebld_right (expr)),
- dest_tree, dest, dest_used);
+ left = ffecom_expr_ (ffebld_left (expr), tree_type_x, NULL, NULL,
+ NULL, FALSE);
+ right = ffecom_expr_ (ffebld_right (expr), tree_type_x, NULL, NULL,
+ NULL, FALSE);
+ if (tree_type_x)
+ {
+ tree_type = tree_type_x;
+ left = convert (tree_type, left);
+ right = convert (tree_type, right);
+ }
+ return ffecom_tree_divide_ (tree_type, left, right,
+ dest_tree, dest, dest_used);
case FFEBLD_opPOWER:
- tree_type = ffecom_tree_type[bt][kt];
{
ffebld left = ffebld_left (expr);
ffebld right = ffebld_right (expr);
@@ -3093,12 +3180,10 @@ ffecom_expr_ (ffebld expr, tree dest_tree,
}
case FFEBLD_opNOT:
- tree_type = ffecom_tree_type[bt][kt];
switch (bt)
{
case FFEINFO_basictypeLOGICAL:
- item
- = ffecom_truth_value_invert (ffecom_expr (ffebld_left (expr)));
+ item = ffecom_truth_value_invert (ffecom_expr (ffebld_left (expr)));
return convert (tree_type, item);
case FFEINFO_basictypeINTEGER:
@@ -3118,7 +3203,6 @@ ffecom_expr_ (ffebld expr, tree dest_tree,
!= FFEINFO_basictypeCHARACTER);
/* Fall through. */
case FFEBLD_opSUBRREF:
- tree_type = ffecom_tree_type[bt][kt];
if (ffeinfo_where (ffebld_info (ffebld_left (expr)))
== FFEINFO_whereINTRINSIC)
{ /* Invocation of an intrinsic. */
@@ -3161,7 +3245,6 @@ ffecom_expr_ (ffebld expr, tree dest_tree,
return item;
case FFEBLD_opAND:
- tree_type = ffecom_tree_type[bt][kt];
switch (bt)
{
case FFEINFO_basictypeLOGICAL:
@@ -3185,7 +3268,6 @@ ffecom_expr_ (ffebld expr, tree dest_tree,
break;
case FFEBLD_opOR:
- tree_type = ffecom_tree_type[bt][kt];
switch (bt)
{
case FFEINFO_basictypeLOGICAL:
@@ -3210,7 +3292,6 @@ ffecom_expr_ (ffebld expr, tree dest_tree,
case FFEBLD_opXOR:
case FFEBLD_opNEQV:
- tree_type = ffecom_tree_type[bt][kt];
switch (bt)
{
case FFEINFO_basictypeLOGICAL:
@@ -3234,7 +3315,6 @@ ffecom_expr_ (ffebld expr, tree dest_tree,
break;
case FFEBLD_opEQV:
- tree_type = ffecom_tree_type[bt][kt];
switch (bt)
{
case FFEINFO_basictypeLOGICAL:
@@ -3263,7 +3343,6 @@ ffecom_expr_ (ffebld expr, tree dest_tree,
if (ffebld_op (ffebld_left (expr)) == FFEBLD_opANY)
return error_mark_node;
- tree_type = ffecom_tree_type[bt][kt];
switch (bt)
{
case FFEINFO_basictypeLOGICAL:
@@ -3328,8 +3407,6 @@ ffecom_expr_ (ffebld expr, tree dest_tree,
code = GE_EXPR;
relational: /* :::::::::::::::::::: */
-
- tree_type = ffecom_tree_type[bt][kt];
switch (ffeinfo_basictype (ffebld_info (ffebld_left (expr))))
{
case FFEINFO_basictypeLOGICAL:
@@ -3471,7 +3548,6 @@ ffecom_expr_ (ffebld expr, tree dest_tree,
break;
case FFEBLD_opPERCENT_LOC:
- tree_type = ffecom_tree_type[bt][kt];
item = ffecom_arg_ptr_to_expr (ffebld_left (expr), &list);
return convert (tree_type, item);
@@ -6583,7 +6659,7 @@ ffecom_finish_global_ (ffeglobal global)
static ffesymbol
ffecom_finish_symbol_transform_ (ffesymbol s)
{
- if (s == NULL)
+ if ((s == NULL) || (TREE_CODE (current_function_decl) == ERROR_MARK))
return s;
/* It's easy to know to transform an untransformed symbol, to make sure
@@ -7423,6 +7499,10 @@ ffecom_make_gfrt_ (ffecomGfrt ix)
ttype = void_type_node;
break;
+ case FFECOM_rttypeVOIDSTAR_:
+ ttype = TREE_TYPE (null_pointer_node); /* `void *'. */
+ break;
+
case FFECOM_rttypeFTNINT_:
ttype = ffecom_f2c_ftnint_type_node;
break;
@@ -7868,7 +7948,8 @@ ffecom_start_progunit_ ()
resume_momentary (yes);
- store_parm_decls (main_program ? 1 : 0);
+ if (TREE_CODE (current_function_decl) != ERROR_MARK)
+ store_parm_decls (main_program ? 1 : 0);
ffecom_start_compstmt_ ();
@@ -8235,13 +8316,17 @@ ffecom_sym_transform_ (ffesymbol s)
assert (ffebld_right (dim) != NULL);
if ((ffebld_op (ffebld_right (dim)) == FFEBLD_opSTAR)
|| ffecom_doing_entry_)
- /* Used to just do high=low. But for ffecom_tree_
- canonize_ref_, it probably is important to correctly
- assess the size. E.g. given COMPLEX C(*),CFUNC and
- C(2)=CFUNC(C), overlap can happen, while it can't
- for, say, C(1)=CFUNC(C(2)). */
- high = convert (TREE_TYPE (low),
- TYPE_MAX_VALUE (TREE_TYPE (low)));
+ {
+ /* Used to just do high=low. But for ffecom_tree_
+ canonize_ref_, it probably is important to correctly
+ assess the size. E.g. given COMPLEX C(*),CFUNC and
+ C(2)=CFUNC(C), overlap can happen, while it can't
+ for, say, C(1)=CFUNC(C(2)). */
+ /* Even more recently used to set to INT_MAX, but that
+ broke when some overflow checking went into the back
+ end. Now we just leave the upper bound unspecified. */
+ high = NULL;
+ }
else
high = ffecom_expr (ffebld_right (dim));
@@ -8381,7 +8466,7 @@ ffecom_sym_transform_ (ffesymbol s)
if (!adjustable
&& ((TREE_CODE (low) != INTEGER_CST)
- || (TREE_CODE (high) != INTEGER_CST)))
+ || (high && TREE_CODE (high) != INTEGER_CST)))
adjustable = TRUE;
#if 0 /* Old approach -- see below. */
@@ -8391,7 +8476,7 @@ ffecom_sym_transform_ (ffesymbol s)
low,
ffecom_integer_zero_node);
- if (TREE_CODE (high) != INTEGER_CST)
+ if (high && TREE_CODE (high) != INTEGER_CST)
high = ffecom_3 (COND_EXPR, integer_type_node,
ffecom_adjarray_passed_ (s),
high,
@@ -8407,7 +8492,7 @@ ffecom_sym_transform_ (ffesymbol s)
/* ~~~similarly, this fixes dumb0.f. The C front end
does this, which is why dumb0.c would work. */
- if (TREE_CODE (high) != INTEGER_CST)
+ if (high && TREE_CODE (high) != INTEGER_CST)
high = variable_size (high);
type
@@ -9429,8 +9514,8 @@ ffecom_tree_canonize_ptr_ (tree *decl, tree *offset,
/* Convert offset (presumably in bytes) into canonical units
(presumably bits). */
*offset = size_binop (MULT_EXPR,
- *offset,
- TYPE_SIZE (TREE_TYPE (TREE_TYPE (t))));
+ TYPE_SIZE (TREE_TYPE (TREE_TYPE (t))),
+ *offset);
break;
}
/* Not a COMMON reference, so an unrecognized pattern. */
@@ -9439,7 +9524,7 @@ ffecom_tree_canonize_ptr_ (tree *decl, tree *offset,
case PARM_DECL:
*decl = t;
- *offset = size_zero_node;
+ *offset = bitsize_int (0L, 0L);
break;
case ADDR_EXPR:
@@ -9447,7 +9532,7 @@ ffecom_tree_canonize_ptr_ (tree *decl, tree *offset,
{
/* A reference to COMMON. */
*decl = TREE_OPERAND (t, 0);
- *offset = size_zero_node;
+ *offset = bitsize_int (0L, 0L);
break;
}
/* Fall through. */
@@ -9568,7 +9653,7 @@ ffecom_tree_canonize_ref_ (tree *decl, tree *offset,
case VAR_DECL:
case PARM_DECL:
*decl = t;
- *offset = size_zero_node;
+ *offset = bitsize_int (0L, 0L);
*size = TYPE_SIZE (TREE_TYPE (t));
return;
@@ -9896,7 +9981,7 @@ ffecom_type_vardesc_ ()
addrfield = ffecom_decl_field (type, namefield, "addr",
string_type_node);
dimsfield = ffecom_decl_field (type, addrfield, "dims",
- ffecom_f2c_ftnlen_type_node);
+ ffecom_f2c_ptr_to_ftnlen_type_node);
typefield = ffecom_decl_field (type, dimsfield, "type",
integer_type_node);
@@ -10747,7 +10832,19 @@ ffecom_arg_expr (ffebld expr, tree *length)
returns and sets the length return value to NULL_TREE. Otherwise
generates code to evaluate the character expression, returns the proper
pointer to the result, AND sets the length return value to a tree that
- specifies the length of the result. */
+ specifies the length of the result.
+
+ If the length argument is NULL, this is a slightly special
+ case of building a FORMAT expression, that is, an expression that
+ will be used at run time without regard to length. For the current
+ implementation, which uses the libf2c library, this means it is nice
+ to append a null byte to the end of the expression, where feasible,
+ to make sure any diagnostic about the FORMAT string terminates at
+ some useful point.
+
+ For now, treat %REF(char-expr) as the same as char-expr with a NULL
+ length argument. This might even be seen as a feature, if a null
+ byte can always be appended. */
#if FFECOM_targetCURRENT == FFECOM_targetGCC
tree
@@ -10757,7 +10854,8 @@ ffecom_arg_ptr_to_expr (ffebld expr, tree *length)
tree ign_length;
ffecomConcatList_ catlist;
- *length = NULL_TREE;
+ if (length != NULL)
+ *length = NULL_TREE;
if (expr == NULL)
return integer_zero_node;
@@ -10779,8 +10877,11 @@ ffecom_arg_ptr_to_expr (ffebld expr, tree *length)
case FFEBLD_opPERCENT_REF:
if (ffeinfo_basictype (ffebld_info (expr)) != FFEINFO_basictypeCHARACTER)
return ffecom_ptr_to_expr (ffebld_left (expr));
- ign_length = NULL_TREE;
- length = &ign_length;
+ if (length != NULL)
+ {
+ ign_length = NULL_TREE;
+ length = &ign_length;
+ }
expr = ffebld_left (expr);
break;
@@ -10806,7 +10907,8 @@ ffecom_arg_ptr_to_expr (ffebld expr, tree *length)
}
#ifdef PASS_HOLLERITH_BY_DESCRIPTOR
- if (ffeinfo_basictype (ffebld_info (expr)) == FFEINFO_basictypeHOLLERITH)
+ if ((ffeinfo_basictype (ffebld_info (expr)) == FFEINFO_basictypeHOLLERITH)
+ && (length != NULL))
{ /* Pass Hollerith by descriptor. */
ffetargetHollerith h;
@@ -10829,14 +10931,21 @@ ffecom_arg_ptr_to_expr (ffebld expr, tree *length)
switch (ffecom_concat_list_count_ (catlist))
{
case 0: /* Shouldn't happen, but in case it does... */
- *length = ffecom_f2c_ftnlen_zero_node;
- TREE_TYPE (*length) = ffecom_f2c_ftnlen_type_node;
+ if (length != NULL)
+ {
+ *length = ffecom_f2c_ftnlen_zero_node;
+ TREE_TYPE (*length) = ffecom_f2c_ftnlen_type_node;
+ }
ffecom_concat_list_kill_ (catlist);
return null_pointer_node;
case 1: /* The (fairly) easy case. */
- ffecom_char_args_ (&item, length,
- ffecom_concat_list_expr_ (catlist, 0));
+ if (length == NULL)
+ ffecom_char_args_with_null_ (&item, &ign_length,
+ ffecom_concat_list_expr_ (catlist, 0));
+ else
+ ffecom_char_args_ (&item, length,
+ ffecom_concat_list_expr_ (catlist, 0));
ffecom_concat_list_kill_ (catlist);
assert (item != NULL_TREE);
return item;
@@ -10872,8 +10981,13 @@ ffecom_arg_ptr_to_expr (ffebld expr, tree *length)
for (i = 0; i < count; ++i)
{
- ffecom_char_args_ (&citem, &clength,
- ffecom_concat_list_expr_ (catlist, i));
+ if ((i == count)
+ && (length == NULL))
+ ffecom_char_args_with_null_ (&citem, &clength,
+ ffecom_concat_list_expr_ (catlist, i));
+ else
+ ffecom_char_args_ (&citem, &clength,
+ ffecom_concat_list_expr_ (catlist, i));
if ((citem == error_mark_node)
|| (clength == error_mark_node))
{
@@ -10892,10 +11006,11 @@ ffecom_arg_ptr_to_expr (ffebld expr, tree *length)
citem),
items);
clength = ffecom_save_tree (clength);
- known_length
- = ffecom_2 (PLUS_EXPR, ffecom_f2c_ftnlen_type_node,
- known_length,
- clength);
+ if (length != NULL)
+ known_length
+ = ffecom_2 (PLUS_EXPR, ffecom_f2c_ftnlen_type_node,
+ known_length,
+ clength);
lengths
= ffecom_2 (COMPOUND_EXPR, TREE_TYPE (lengths),
ffecom_modify (void_type_node,
@@ -10944,7 +11059,8 @@ ffecom_arg_ptr_to_expr (ffebld expr, tree *length)
item,
temporary);
- *length = known_length;
+ if (length != NULL)
+ *length = known_length;
}
ffecom_concat_list_kill_ (catlist);
@@ -11436,7 +11552,7 @@ ffecom_expand_let_stmt (ffebld dest, ffebld source)
if ((TREE_CODE (dest_tree) != VAR_DECL)
|| TREE_ADDRESSABLE (dest_tree))
- source_tree = ffecom_expr_ (source, dest_tree, dest,
+ source_tree = ffecom_expr_ (source, NULL_TREE, dest_tree, dest,
&dest_used, FALSE);
else
{
@@ -11478,7 +11594,7 @@ ffecom_expand_let_stmt (ffebld dest, ffebld source)
tree
ffecom_expr (ffebld expr)
{
- return ffecom_expr_ (expr, NULL_TREE, NULL, NULL,
+ return ffecom_expr_ (expr, NULL_TREE, NULL_TREE, NULL, NULL,
FALSE);
}
@@ -11489,7 +11605,7 @@ ffecom_expr (ffebld expr)
tree
ffecom_expr_assign (ffebld expr)
{
- return ffecom_expr_ (expr, NULL_TREE, NULL, NULL,
+ return ffecom_expr_ (expr, NULL_TREE, NULL_TREE, NULL, NULL,
TRUE);
}
@@ -11500,7 +11616,7 @@ ffecom_expr_assign (ffebld expr)
tree
ffecom_expr_assign_w (ffebld expr)
{
- return ffecom_expr_ (expr, NULL_TREE, NULL, NULL,
+ return ffecom_expr_ (expr, NULL_TREE, NULL_TREE, NULL, NULL,
TRUE);
}
@@ -11603,6 +11719,7 @@ ffecom_gfrt_basictype (ffecomGfrt gfrt)
switch (ffecom_gfrt_type_[gfrt])
{
case FFECOM_rttypeVOID_:
+ case FFECOM_rttypeVOIDSTAR_:
return FFEINFO_basictypeNONE;
case FFECOM_rttypeFTNINT_:
@@ -11649,6 +11766,7 @@ ffecom_gfrt_kindtype (ffecomGfrt gfrt)
switch (ffecom_gfrt_type_[gfrt])
{
case FFECOM_rttypeVOID_:
+ case FFECOM_rttypeVOIDSTAR_:
return FFEINFO_kindtypeNONE;
case FFECOM_rttypeFTNINT_:
@@ -11780,16 +11898,8 @@ ffecom_init_0 ()
pushdecl (build_decl (TYPE_DECL, get_identifier ("long long unsigned int"),
long_long_unsigned_type_node));
- sizetype
- = TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (get_identifier (SIZE_TYPE)));
-
- TREE_TYPE (TYPE_SIZE (integer_type_node)) = sizetype;
- TREE_TYPE (TYPE_SIZE (char_type_node)) = sizetype;
- TREE_TYPE (TYPE_SIZE (unsigned_type_node)) = sizetype;
- TREE_TYPE (TYPE_SIZE (long_unsigned_type_node)) = sizetype;
- TREE_TYPE (TYPE_SIZE (long_integer_type_node)) = sizetype;
- TREE_TYPE (TYPE_SIZE (long_long_integer_type_node)) = sizetype;
- TREE_TYPE (TYPE_SIZE (long_long_unsigned_type_node)) = sizetype;
+ set_sizetype
+ (TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (get_identifier (SIZE_TYPE))));
error_mark_node = make_node (ERROR_MARK);
TREE_TYPE (error_mark_node) = error_mark_node;
@@ -13005,15 +13115,19 @@ ffecom_ptr_to_expr (ffebld expr)
i >= 0;
--i, array = TYPE_MAIN_VARIANT (TREE_TYPE (array)))
{
+ /* The initial subtraction should happen in the original type so
+ that (possible) negative values are handled appropriately. */
item
= ffecom_2 (PLUS_EXPR,
build_pointer_type (TREE_TYPE (array)),
item,
size_binop (MULT_EXPR,
size_in_bytes (TREE_TYPE (array)),
- size_binop (MINUS_EXPR,
- ffecom_expr (dims[i]),
- TYPE_MIN_VALUE (TYPE_DOMAIN (array)))));
+ convert (sizetype,
+ fold (build (MINUS_EXPR,
+ TREE_TYPE (TYPE_MIN_VALUE (TYPE_DOMAIN (array))),
+ ffecom_expr (dims[i]),
+ TYPE_MIN_VALUE (TYPE_DOMAIN (array)))))));
}
}
return item;
@@ -13268,7 +13382,8 @@ ffecom_return_expr (ffebld expr)
/* Do save_expr only if tree is not error_mark_node. */
#if FFECOM_targetCURRENT == FFECOM_targetGCC
-tree ffecom_save_tree (tree t)
+tree
+ffecom_save_tree (tree t)
{
return save_expr (t);
}
@@ -14092,31 +14207,38 @@ finish_function (int nested)
register tree fndecl = current_function_decl;
assert (fndecl != NULL_TREE);
- if (nested)
- assert (DECL_CONTEXT (fndecl) != NULL_TREE);
- else
- assert (DECL_CONTEXT (fndecl) == NULL_TREE);
+ if (TREE_CODE (fndecl) != ERROR_MARK)
+ {
+ if (nested)
+ assert (DECL_CONTEXT (fndecl) != NULL_TREE);
+ else
+ assert (DECL_CONTEXT (fndecl) == NULL_TREE);
+ }
/* TREE_READONLY (fndecl) = 1;
This caused &foo to be of type ptr-to-const-function
which then got a warning when stored in a ptr-to-function variable. */
poplevel (1, 0, 1);
- BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
- /* Must mark the RESULT_DECL as being in this function. */
+ if (TREE_CODE (fndecl) != ERROR_MARK)
+ {
+ BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
- DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
+ /* Must mark the RESULT_DECL as being in this function. */
- /* Obey `register' declarations if `setjmp' is called in this fn. */
- /* Generate rtl for function exit. */
- expand_function_end (input_filename, lineno, 0);
+ DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
- /* So we can tell if jump_optimize sets it to 1. */
- can_reach_end = 0;
+ /* Obey `register' declarations if `setjmp' is called in this fn. */
+ /* Generate rtl for function exit. */
+ expand_function_end (input_filename, lineno, 0);
- /* Run the optimizers and output the assembler code for this function. */
- rest_of_compilation (fndecl);
+ /* So we can tell if jump_optimize sets it to 1. */
+ can_reach_end = 0;
+
+ /* Run the optimizers and output the assembler code for this function. */
+ rest_of_compilation (fndecl);
+ }
/* Free all the tree nodes making up this function. */
/* Switch back to allocating nodes permanently until we start another
@@ -14124,7 +14246,7 @@ finish_function (int nested)
if (!nested)
permanent_allocation (1);
- if (DECL_SAVED_INSNS (fndecl) == 0 && !nested)
+ if (DECL_SAVED_INSNS (fndecl) == 0 && !nested && (TREE_CODE (fndecl) != ERROR_MARK))
{
/* Stop pointing to the local nodes about to be freed. */
/* But DECL_INITIAL must remain nonzero so we know this was an actual
@@ -14154,10 +14276,18 @@ finish_function (int nested)
nested function and all). */
static char *
-lang_printable_name (tree decl, char **kind)
+lang_printable_name (tree decl, int v)
{
- *kind = "program unit";
- return IDENTIFIER_POINTER (DECL_NAME (decl));
+ /* Just to keep GCC quiet about the unused variable.
+ In theory, differing values of V should produce different
+ output. */
+ switch (v)
+ {
+ default:
+ if (TREE_CODE (decl) == ERROR_MARK)
+ return "erroneous code";
+ return IDENTIFIER_POINTER (DECL_NAME (decl));
+ }
}
/* g77's function to print out name of current function that caused
@@ -14168,48 +14298,56 @@ void
lang_print_error_function (file)
char *file;
{
+ static ffeglobal last_g = NULL;
static ffesymbol last_s = NULL;
+ ffeglobal g;
ffesymbol s;
char *kind;
- if (ffecom_primary_entry_ == NULL)
+ if ((ffecom_primary_entry_ == NULL)
+ || (ffesymbol_global (ffecom_primary_entry_) == NULL))
{
+ g = NULL;
s = NULL;
kind = NULL;
}
- else if (ffecom_nested_entry_ == NULL)
+ else
{
- s = ffecom_primary_entry_;
- switch (ffesymbol_kind (s))
+ g = ffesymbol_global (ffecom_primary_entry_);
+ if (ffecom_nested_entry_ == NULL)
{
- case FFEINFO_kindFUNCTION:
- kind = "function";
- break;
+ s = ffecom_primary_entry_;
+ switch (ffesymbol_kind (s))
+ {
+ case FFEINFO_kindFUNCTION:
+ kind = "function";
+ break;
- case FFEINFO_kindSUBROUTINE:
- kind = "subroutine";
- break;
+ case FFEINFO_kindSUBROUTINE:
+ kind = "subroutine";
+ break;
- case FFEINFO_kindPROGRAM:
- kind = "program";
- break;
+ case FFEINFO_kindPROGRAM:
+ kind = "program";
+ break;
- case FFEINFO_kindBLOCKDATA:
- kind = "block-data";
- break;
+ case FFEINFO_kindBLOCKDATA:
+ kind = "block-data";
+ break;
- default:
- kind = ffeinfo_kind_message (ffesymbol_kind (s));
- break;
+ default:
+ kind = ffeinfo_kind_message (ffesymbol_kind (s));
+ break;
+ }
+ }
+ else
+ {
+ s = ffecom_nested_entry_;
+ kind = "statement function";
}
- }
- else
- {
- s = ffecom_nested_entry_;
- kind = "statement function";
}
- if (last_s != s)
+ if ((last_g != g) || (last_s != s))
{
if (file)
fprintf (stderr, "%s: ", file);
@@ -14223,6 +14361,7 @@ lang_print_error_function (file)
fprintf (stderr, "In %s `%s':\n", kind, name);
}
+ last_g = g;
last_s = s;
}
}
@@ -14495,42 +14634,51 @@ start_function (tree name, tree type, int nested, int public)
assert (current_function_decl == NULL_TREE);
}
- decl1 = build_decl (FUNCTION_DECL,
- name,
- type);
- TREE_PUBLIC (decl1) = public ? 1 : 0;
- if (nested)
- DECL_INLINE (decl1) = 1;
- TREE_STATIC (decl1) = 1;
- DECL_EXTERNAL (decl1) = 0;
+ if (TREE_CODE (type) == ERROR_MARK)
+ decl1 = current_function_decl = error_mark_node;
+ else
+ {
+ decl1 = build_decl (FUNCTION_DECL,
+ name,
+ type);
+ TREE_PUBLIC (decl1) = public ? 1 : 0;
+ if (nested)
+ DECL_INLINE (decl1) = 1;
+ TREE_STATIC (decl1) = 1;
+ DECL_EXTERNAL (decl1) = 0;
- announce_function (decl1);
+ announce_function (decl1);
- /* Make the init_value nonzero so pushdecl knows this is not tentative.
- error_mark_node is replaced below (in poplevel) with the BLOCK. */
- DECL_INITIAL (decl1) = error_mark_node;
+ /* Make the init_value nonzero so pushdecl knows this is not tentative.
+ error_mark_node is replaced below (in poplevel) with the BLOCK. */
+ DECL_INITIAL (decl1) = error_mark_node;
- /* Record the decl so that the function name is defined. If we already have
- a decl for this name, and it is a FUNCTION_DECL, use the old decl. */
+ /* Record the decl so that the function name is defined. If we already have
+ a decl for this name, and it is a FUNCTION_DECL, use the old decl. */
+
+ current_function_decl = pushdecl (decl1);
+ }
- current_function_decl = pushdecl (decl1);
if (!nested)
ffecom_outer_function_decl_ = current_function_decl;
pushlevel (0);
- make_function_rtl (current_function_decl);
+ if (TREE_CODE (current_function_decl) != ERROR_MARK)
+ {
+ make_function_rtl (current_function_decl);
- restype = TREE_TYPE (TREE_TYPE (current_function_decl));
- DECL_RESULT (current_function_decl)
- = build_decl (RESULT_DECL, NULL_TREE, restype);
+ restype = TREE_TYPE (TREE_TYPE (current_function_decl));
+ DECL_RESULT (current_function_decl)
+ = build_decl (RESULT_DECL, NULL_TREE, restype);
+ }
if (!nested)
/* Allocate further tree nodes temporarily during compilation of this
function only. */
temporary_allocation ();
- if (!nested)
+ if (!nested && (TREE_CODE (current_function_decl) != ERROR_MARK))
TREE_ADDRESSABLE (current_function_decl) = 1;
immediate_size_expand = old_immediate_size_expand;
@@ -15445,10 +15593,12 @@ type_for_mode (mode, unsignedp)
{
if (((t = ffecom_tree_type[i][j]) != NULL_TREE)
&& (mode == TYPE_MODE (t)))
- if ((i == FFEINFO_basictypeINTEGER) && unsignedp)
- return ffecom_tree_type[FFEINFO_basictypeHOLLERITH][j];
- else
- return t;
+ {
+ if ((i == FFEINFO_basictypeINTEGER) && unsignedp)
+ return ffecom_tree_type[FFEINFO_basictypeHOLLERITH][j];
+ else
+ return t;
+ }
}
return 0;
diff --git a/gcc/f/com.h b/gcc/f/com.h
index 477e0860f40..946e8a5d006 100644
--- a/gcc/f/com.h
+++ b/gcc/f/com.h
@@ -348,6 +348,7 @@ extern int flag_pedantic_errors;
void emit_nop (void);
void announce_function (tree decl);
extern FILE *asm_out_file;
+void assemble_string (char *, int);
void assemble_variable (tree decl, int top_level, int at_end,
int dont_output_data);
void assemble_zeros (int size);
diff --git a/gcc/f/config-lang.in b/gcc/f/config-lang.in
index 3aba976fa04..d28619fd7e3 100644
--- a/gcc/f/config-lang.in
+++ b/gcc/f/config-lang.in
@@ -26,105 +26,42 @@
# stagestuff - files to add to $(STAGESTUFF)
# diff_excludes - files to ignore when building diffs between two versions.
-if grep DECL_STATIC_CONSTRUCTOR $srcdir/tree.h >/dev/null; then
- if grep flag_move_all_movables $srcdir/toplev.c >/dev/null; then true
- else
- echo "You haven't applied the patches to the GCC 2.7.x distribution in"
- echo "$srcdir as described in g77/README.g77 and gcc/f/gbe/README."
- echo ""
- exit 1
- fi
-else
- if grep put_pending_sizes $srcdir/stor-layout.c >/dev/null; then true
- else
- echo "You haven't applied the patches to the GCC 2.6.x distribution in"
- echo "$srcdir as described in g77/README.g77 and gcc/f/gbe/README."
- echo ""
- exit 1
- fi
-fi
+#if grep DECL_STATIC_CONSTRUCTOR $srcdir/tree.h >/dev/null; then
+# if grep flag_move_all_movables $srcdir/toplev.c >/dev/null; then true
+# else
+# echo "You haven't applied the patches to the GCC 2.7.x distribution in"
+# echo "$srcdir as described in g77/README.g77 and gcc/f/gbe/README."
+# echo ""
+# exit 1
+# fi
+#else
+# if grep put_pending_sizes $srcdir/stor-layout.c >/dev/null; then true
+# else
+# echo "You haven't applied the patches to the GCC 2.6.x distribution in"
+# echo "$srcdir as described in g77/README.g77 and gcc/f/gbe/README."
+# echo ""
+# exit 1
+# fi
+#fi
language="f77"
compilers="f771\$(exeext)"
-case "$arguments" in
-# *--enable-f2c* | *-enable-f2c*)
-# echo "f77: enabling f2c."
-# stagestuff="g77 g77-cross f771 libf2c.a f2c fc" ;;
-# stagestuff="g77 g77-cross f771 libf2c.a f2c" ;;
-*)
- stagestuff="g77\$(exeext) g77-cross\$(exeext) f771\$(exeext) libf2c.a" ;;
-esac
+stagestuff="g77\$(exeext) g77-cross\$(exeext) f771\$(exeext)"
diff_excludes="-x \"f/g77.info*\""
-# Create the runtime library directory tree if necessary.
test -d f || mkdir f
-test -d f/runtime || mkdir f/runtime
-test -d f/runtime/libF77 || mkdir f/runtime/libF77
-test -d f/runtime/libI77 || mkdir f/runtime/libI77
-test -d f/runtime/libU77 || mkdir f/runtime/libU77
-
-# Need to make top-level stageN directory trees, else if needed
-# later by gcc/Makefile, it'll make only the first levels and
-# the language subdirectory levels, not the runtime stuff.
for stageN in stage1 stage2 stage3 stage4
do
test -d $stageN || mkdir $stageN
test -d $stageN/f || mkdir $stageN/f
- test -d $stageN/f/runtime || mkdir $stageN/f/runtime
- test -d $stageN/f/runtime/libF77 || mkdir $stageN/f/runtime/libF77
- test -d $stageN/f/runtime/libI77 || mkdir $stageN/f/runtime/libI77
- test -d $stageN/f/runtime/libU77 || mkdir $stageN/f/runtime/libU77
done
# Make links into top-level stageN from target trees.
for stageN in stage1 stage2 stage3 stage4 include
do
- $remove -f f/$stageN f/runtime/$stageN f/runtime/libF77/$stageN \
- f/runtime/libI77/$stageN f/runtime/libU77/$stageN
+ $remove -f f/$stageN
(cd f; $symbolic_link ../$stageN . 2>/dev/null)
- (cd f/runtime; $symbolic_link ../$stageN . 2>/dev/null)
- (cd f/runtime/libF77; $symbolic_link ../$stageN . 2>/dev/null)
- (cd f/runtime/libI77; $symbolic_link ../$stageN . 2>/dev/null)
- (cd f/runtime/libU77; $symbolic_link ../$stageN . 2>/dev/null)
done
-
-case "$srcdir" in
-.) ;;
-*) echo
- echo "Building f77 outside the source directory is likely to not work"
- echo "unless you are using GNU make or a compatible VPATH mechanism."
- echo ;;
-esac
-
-case "$host" in
-hppa*-*-hpux10)
- echo
- echo "The GCC \`fixincludes' step (which involves running a sed script)"
- echo "typically fails on HP-UX 10 because of a bug in the vendor's"
- echo "implementation of sed. Currently the only known workaround is to"
- echo "install GNU sed before building gcc. The file sed-2.05.bin.hpux10"
- echo "in mirrors of the GNU distribution is a suitable precompiled"
- echo "binary."
- echo ;;
-rs6000-ibm-aix4.1*)
- echo
- echo "G77 has been observed to not build on (at least) the configuration"
- echo "rs6000-ibm-aix4.1.4.0 with the native linker -- it crashes. There"
- echo "may be an IBM bug fix for this (we don't know) but the build should"
- echo "work if you add \`-mminimal-toc' to the compilation flags, i.e. add"
- echo "something like \`BOOT_CFLAGS=\"-O2 -mminimal-toc -g\"' to the \`make"
- echo "bootstrap' command line. Probably building with the GNU linker (from"
- echo "the binutils package) installed and configuring \`--with-gnu-ld' will work."
- echo ;;
-mips-sgi-irix6*)
- echo
- echo Consult
- echo "<URL:http://reality.sgi.com/knobi/gcc-2.7.2.x-on-irix-6.2-6.3>"
- echo "regarding building under IRIX-6.2/6.3/6.4. Note that you *must*"
- echo "have the SGI IDO bought and installed (sigh)."
- echo ;;
-*) ;;
-esac
diff --git a/gcc/f/expr.c b/gcc/f/expr.c
index 057293b0eef..8dbab2f3099 100644
--- a/gcc/f/expr.c
+++ b/gcc/f/expr.c
@@ -7504,15 +7504,17 @@ static ffelexHandler
ffeexpr_cb_comma_c_ (ffelexToken ft, ffebld expr, ffelexToken t)
{
ffeexprExpr_ e;
- ffeinfoBasictype lty = ffeinfo_basictype (ffebld_info (ffeexpr_stack_->expr));
- ffeinfoBasictype rty = ffeinfo_basictype (ffebld_info (expr));
+ ffeinfoBasictype lty = (ffeexpr_stack_->expr == NULL)
+ ? FFEINFO_basictypeNONE : ffeinfo_basictype (ffebld_info (ffeexpr_stack_->expr));
+ ffeinfoBasictype rty = (expr == NULL)
+ ? FFEINFO_basictypeNONE : ffeinfo_basictype (ffebld_info (expr));
ffeinfoKindtype lkt;
ffeinfoKindtype rkt;
ffeinfoKindtype nkt;
bool ok = TRUE;
ffebld orig;
- if ((expr == NULL)
+ if ((ffeexpr_stack_->expr == NULL)
|| (ffebld_op (ffeexpr_stack_->expr) != FFEBLD_opCONTER)
|| (((orig = ffebld_conter_orig (ffeexpr_stack_->expr)) != NULL)
&& (((ffebld_op (orig) != FFEBLD_opUMINUS)
@@ -8759,10 +8761,12 @@ ffeexpr_type_combine (ffeinfoBasictype *xnbt, ffeinfoKindtype *xnkt,
else
{ /* The normal stuff. */
if (nbt == lbt)
- if (nbt == rbt)
- nkt = ffeinfo_kindtype_max (nbt, lkt, rkt);
- else
- nkt = lkt;
+ {
+ if (nbt == rbt)
+ nkt = ffeinfo_kindtype_max (nbt, lkt, rkt);
+ else
+ nkt = lkt;
+ }
else if (nbt == rbt)
nkt = rkt;
else
@@ -10020,26 +10024,30 @@ ffeexpr_reduce_ ()
&& (left_operand->previous->type != FFEEXPR_exprtypeOPERAND_)
&& (left_operand->previous->u.operator.op
== FFEEXPR_operatorSUBTRACT_))
- if (left_operand->previous->type == FFEEXPR_exprtypeUNARY_)
- ffetarget_integer_bad_magical_precedence (left_operand->token,
- left_operand->previous->token,
- operator->token);
- else
- ffetarget_integer_bad_magical_precedence_binary
- (left_operand->token,
- left_operand->previous->token,
- operator->token);
+ {
+ if (left_operand->previous->type == FFEEXPR_exprtypeUNARY_)
+ ffetarget_integer_bad_magical_precedence (left_operand->token,
+ left_operand->previous->token,
+ operator->token);
+ else
+ ffetarget_integer_bad_magical_precedence_binary
+ (left_operand->token,
+ left_operand->previous->token,
+ operator->token);
+ }
else
ffetarget_integer_bad_magical (left_operand->token);
}
if ((ffebld_op (expr) == FFEBLD_opCONTER)
&& (ffebld_conter_orig (expr) == NULL)
&& ffebld_constant_is_magical (constnode = ffebld_conter (expr)))
- if (submag)
- ffetarget_integer_bad_magical_binary (operand->token,
- operator->token);
- else
- ffetarget_integer_bad_magical (operand->token);
+ {
+ if (submag)
+ ffetarget_integer_bad_magical_binary (operand->token,
+ operator->token);
+ else
+ ffetarget_integer_bad_magical (operand->token);
+ }
ffeexpr_stack_->exprstack = left_operand->previous; /* Pops binary-op
operands off stack. */
ffeexpr_expr_kill_ (left_operand);
@@ -10589,7 +10597,7 @@ ffeexpr_reduced_eqop2_ (ffebld reduced, ffeexprExpr_ l, ffeexprExpr_ op,
&& (lbt != FFEINFO_basictypeCOMPLEX) && (lbt != FFEINFO_basictypeCHARACTER))
{
if ((rbt != FFEINFO_basictypeINTEGER) && (rbt != FFEINFO_basictypeREAL)
- && (rbt != FFEINFO_basictypeCOMPLEX) && (lbt != FFEINFO_basictypeCHARACTER))
+ && (rbt != FFEINFO_basictypeCOMPLEX) && (rbt != FFEINFO_basictypeCHARACTER))
{
if ((lbt != FFEINFO_basictypeANY) && (rbt != FFEINFO_basictypeANY)
&& ffebad_start (FFEBAD_EQOP_ARGS_TYPE))
@@ -11206,7 +11214,7 @@ ffeexpr_reduced_relop2_ (ffebld reduced, ffeexprExpr_ l, ffeexprExpr_ op,
&& (lbt != FFEINFO_basictypeCHARACTER))
{
if ((rbt != FFEINFO_basictypeINTEGER) && (rbt != FFEINFO_basictypeREAL)
- && (lbt != FFEINFO_basictypeCHARACTER))
+ && (rbt != FFEINFO_basictypeCHARACTER))
{
if ((lbt != FFEINFO_basictypeANY) && (rbt != FFEINFO_basictypeANY)
&& ffebad_start (FFEBAD_RELOP_ARGS_TYPE))
@@ -12255,8 +12263,7 @@ again: /* :::::::::::::::::::: */
default:
break;
}
- error = ((expr == NULL) && ffe_is_pedantic ())
- || ((expr != NULL) && (ffeinfo_rank (info) != 0));
+ error = (expr != NULL) && (ffeinfo_rank (info) != 0);
break;
case FFEEXPR_contextACTUALARG_:
@@ -17900,13 +17907,15 @@ ffeexpr_declare_parenthesized_ (ffelexToken t, bool maybe_intrin,
case FFEINFO_kindENTITY:
if (ffesymbol_rank (s) == 0)
- if (ffesymbol_basictype (s) == FFEINFO_basictypeCHARACTER)
- *paren_type = FFEEXPR_parentypeSUBSTRING_;
- else
- {
- bad = TRUE;
- *paren_type = FFEEXPR_parentypeANY_;
- }
+ {
+ if (ffesymbol_basictype (s) == FFEINFO_basictypeCHARACTER)
+ *paren_type = FFEEXPR_parentypeSUBSTRING_;
+ else
+ {
+ bad = TRUE;
+ *paren_type = FFEEXPR_parentypeANY_;
+ }
+ }
else
*paren_type = FFEEXPR_parentypeARRAY_;
break;
@@ -18027,15 +18036,17 @@ ffeexpr_declare_parenthesized_ (ffelexToken t, bool maybe_intrin,
case FFEINFO_kindENTITY:
if (ffesymbol_rank (s) == 0)
- if (ffeexpr_stack_->context == FFEEXPR_contextEQUIVALENCE)
- *paren_type = FFEEXPR_parentypeEQUIVALENCE_;
- else if (ffesymbol_basictype (s) == FFEINFO_basictypeCHARACTER)
- *paren_type = FFEEXPR_parentypeSUBSTRING_;
- else
- {
- bad = TRUE;
- *paren_type = FFEEXPR_parentypeANY_;
- }
+ {
+ if (ffeexpr_stack_->context == FFEEXPR_contextEQUIVALENCE)
+ *paren_type = FFEEXPR_parentypeEQUIVALENCE_;
+ else if (ffesymbol_basictype (s) == FFEINFO_basictypeCHARACTER)
+ *paren_type = FFEEXPR_parentypeSUBSTRING_;
+ else
+ {
+ bad = TRUE;
+ *paren_type = FFEEXPR_parentypeANY_;
+ }
+ }
else
*paren_type = FFEEXPR_parentypeARRAY_;
break;
@@ -18303,80 +18314,95 @@ ffeexpr_token_arguments_ (ffelexToken ft, ffebld expr, ffelexToken t)
procedure = ffeexpr_stack_->exprstack;
info = ffebld_info (procedure->u.operand);
- if (ffeinfo_where (info) == FFEINFO_whereCONSTANT)
- { /* Statement function (or subroutine, if
- there was such a thing). */
- if ((expr == NULL)
- && ((ffe_is_pedantic ()
- && (ffeexpr_stack_->expr != NULL))
- || (ffelex_token_type (t) == FFELEX_typeCOMMA)))
+ /* Is there an expression to add? If the expression is nil,
+ it might still be an argument. It is if:
+
+ - The current token is comma, or
+
+ - The -fugly-comma flag was specified *and* the procedure
+ being invoked is external.
+
+ Otherwise, if neither of the above is the case, just
+ ignore this (nil) expression. */
+
+ if ((expr != NULL)
+ || (ffelex_token_type (t) == FFELEX_typeCOMMA)
+ || (ffe_is_ugly_comma ()
+ && (ffeinfo_where (info) == FFEINFO_whereGLOBAL)))
+ {
+ /* This expression, even if nil, is apparently intended as an argument. */
+
+ /* Internal procedure (CONTAINS, or statement function)? */
+
+ if (ffeinfo_where (info) == FFEINFO_whereCONSTANT)
{
- if (ffebad_start (FFEBAD_NULL_ARGUMENT))
+ if ((expr == NULL)
+ && ffebad_start (FFEBAD_NULL_ARGUMENT))
{
ffebad_here (0, ffelex_token_where_line (ffeexpr_stack_->tokens[0]),
- ffelex_token_where_column (ffeexpr_stack_->tokens[0]));
+ ffelex_token_where_column (ffeexpr_stack_->tokens[0]));
ffebad_here (1, ffelex_token_where_line (t),
ffelex_token_where_column (t));
ffebad_finish ();
}
- if (ffeexpr_stack_->next_dummy != NULL)
- { /* Don't bother if we're going to complain
- later! */
- expr = ffebld_new_conter
- (ffebld_constant_new_integerdefault_val (0));
- ffebld_set_info (expr, ffeinfo_new_any ());
- }
- }
- if (expr == NULL)
- ;
- else
- {
- if (ffeexpr_stack_->next_dummy == NULL)
- { /* Report later which was the first extra
- argument. */
- if (ffeexpr_stack_->tokens[1] == NULL)
- {
- ffeexpr_stack_->tokens[1] = ffelex_token_use (ft);
- ffeexpr_stack_->num_args = 0;
- }
- ++ffeexpr_stack_->num_args; /* Count # of extra
- arguments. */
- }
+ if (expr == NULL)
+ ;
else
{
- if (ffeinfo_rank (ffebld_info (expr)) != 0)
+ if (ffeexpr_stack_->next_dummy == NULL)
+ { /* Report later which was the first extra argument. */
+ if (ffeexpr_stack_->tokens[1] == NULL)
+ {
+ ffeexpr_stack_->tokens[1] = ffelex_token_use (ft);
+ ffeexpr_stack_->num_args = 0;
+ }
+ ++ffeexpr_stack_->num_args; /* Count # of extra arguments. */
+ }
+ else
{
- if (ffebad_start (FFEBAD_ARRAY_AS_SFARG))
+ if ((ffeinfo_rank (ffebld_info (expr)) != 0)
+ && ffebad_start (FFEBAD_ARRAY_AS_SFARG))
{
ffebad_here (0,
- ffelex_token_where_line (ffeexpr_stack_->tokens[0]),
- ffelex_token_where_column (ffeexpr_stack_->tokens[0]));
+ ffelex_token_where_line (ffeexpr_stack_->tokens[0]),
+ ffelex_token_where_column (ffeexpr_stack_->tokens[0]));
ffebad_here (1, ffelex_token_where_line (ft),
ffelex_token_where_column (ft));
ffebad_string (ffesymbol_text (ffesymbol_sfdummyparent
- (ffebld_symter (ffebld_head
- (ffeexpr_stack_->next_dummy)))));
+ (ffebld_symter (ffebld_head
+ (ffeexpr_stack_->next_dummy)))));
ffebad_finish ();
}
+ else
+ {
+ expr = ffeexpr_convert_expr (expr, ft,
+ ffebld_head (ffeexpr_stack_->next_dummy),
+ ffeexpr_stack_->tokens[0],
+ FFEEXPR_contextLET);
+ ffebld_append_item (&ffeexpr_stack_->bottom, expr);
+ }
+ --ffeexpr_stack_->num_args; /* Count down # of args. */
+ ffeexpr_stack_->next_dummy
+ = ffebld_trail (ffeexpr_stack_->next_dummy);
}
- else
- {
- expr = ffeexpr_convert_expr (expr, ft,
- ffebld_head (ffeexpr_stack_->next_dummy),
- ffeexpr_stack_->tokens[0],
- FFEEXPR_contextLET);
- ffebld_append_item (&ffeexpr_stack_->bottom, expr);
- }
- --ffeexpr_stack_->num_args; /* Count down # of args. */
- ffeexpr_stack_->next_dummy
- = ffebld_trail (ffeexpr_stack_->next_dummy);
}
}
+ else
+ {
+ if ((expr == NULL)
+ && ffe_is_pedantic ()
+ && ffebad_start (FFEBAD_NULL_ARGUMENT_W))
+ {
+ ffebad_here (0, ffelex_token_where_line (ffeexpr_stack_->tokens[0]),
+ ffelex_token_where_column (ffeexpr_stack_->tokens[0]));
+ ffebad_here (1, ffelex_token_where_line (t),
+ ffelex_token_where_column (t));
+ ffebad_finish ();
+ }
+ ffebld_append_item (&ffeexpr_stack_->bottom, expr);
+ }
}
- else if ((expr != NULL) || ffe_is_ugly_comma ()
- || (ffelex_token_type (t) == FFELEX_typeCOMMA))
- ffebld_append_item (&ffeexpr_stack_->bottom, expr);
switch (ffelex_token_type (t))
{
@@ -18514,6 +18540,7 @@ ffeexpr_token_arguments_ (ffelexToken ft, ffebld expr, ffelexToken t)
only if next token isn't the close-paren for REAL(me). */
if ((ffeexpr_stack_->previous != NULL)
+ && (ffeexpr_stack_->previous->exprstack != NULL)
&& (ffeexpr_stack_->previous->exprstack->type == FFEEXPR_exprtypeOPERAND_)
&& ((reduced = ffeexpr_stack_->previous->exprstack->u.operand) != NULL)
&& (ffebld_op (reduced) == FFEBLD_opSYMTER)
diff --git a/gcc/f/fini.c b/gcc/f/fini.c
index 6e324b64602..fdf577b91a2 100644
--- a/gcc/f/fini.c
+++ b/gcc/f/fini.c
@@ -228,7 +228,7 @@ static char *spaces[]
void testname (bool nested, int indent, name first, name last);
void testnames (bool nested, int indent, int len, name first, name last);
-void
+int
main (int argc, char **argv)
{
char buf[MAXNAMELEN];
diff --git a/gcc/f/g77.c b/gcc/f/g77.c
deleted file mode 100644
index 0d6f07fae30..00000000000
--- a/gcc/f/g77.c
+++ /dev/null
@@ -1,1557 +0,0 @@
-/* G77 preliminary semantic processing for the compiler driver.
- Copyright (C) 1993-1997 Free Software Foundation, Inc.
- Contributed by Brendan Kehoe (brendan@cygnus.com), with significant
- modifications for GNU Fortran by James Craig Burley (burley@gnu.ai.mit.edu).
-
-This file is part of GNU Fortran.
-
-GNU Fortran 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.
-
-GNU Fortran 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 GNU Fortran; see the file COPYING. If not, write to
-the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
-02111-1307, USA. */
-
-/* This program is a wrapper to the main `gcc' driver. The generic
- goal of this program is to be basically identical to gcc (in that
- it faithfully passes all of the original arguments to gcc) but,
- unless explicitly overridden by the user in certain ways, ensure
- that the needs of the language supported by this wrapper are met.
-
- For GNU Fortran (g77), we do the following to the argument list
- before passing it to `gcc':
-
- 1. Put `-xf77', `-xf77-cpp-input' or `-xratfor' before each list
- of foo.f, foo.F or foo.r source files and put `-xnone' after
- that list, if necessary. This shouldn't normally be necessary,
- but it is done in case gcc.c normally treats .f/.F files as,
- say, to be compiled by f2c.
-
- 2. Make sure `-lf2c -lm' is at the end of the list.
-
- 3. Make sure each time `-lf2c' or `-lm' is seen, it forms
- part of the series `-lf2c -lm'.
-
- #1 is not done if `-xfoo' is in effect (where foo is not "none").
- #2 and #3 are not done if `-nostdlib' or any option that disables
- the linking phase is present, or if `-xfoo' is in effect. Note that
- -v by itself disables linking.
-
- This program was originally made out of gcc/cp/g++.c, but the
- way it builds the new argument list was rewritten so it is much
- easier to maintain, improve the way it decides to add or not add
- extra arguments, etc. And several improvements were made in the
- handling of arguments, primarily to make it more consistent with
- `gcc' itself. */
-
-#ifndef LANGUAGE_F77
-#define LANGUAGE_F77 1 /* Assume f77 language wanted. */
-#endif
-
-#if LANGUAGE_F77 != 1
-#include <stdio.h>
-
-int
-main (argc, argv)
- int argc;
- char **argv;
-{
- fprintf (stderr, "\
-g77: `f77' language not included in list of languages\n\
- built with this installation of gcc.\n");
- exit (1);
-}
-
-#else /* LANGUAGE_F77 == 1 */
-#include "config.j"
-#include "zzz.h"
-#include <sys/types.h>
-#include <errno.h>
-
-#ifndef _WIN32
-#include <sys/file.h> /* May get R_OK, etc. on some systems. */
-#else
-#include <process.h>
-#endif
-
-#ifdef __STDC__
-#include <stdarg.h>
-#else
-#include <varargs.h>
-#endif
-#include <stdio.h>
-
-/* Include multi-lib information. */
-#include "multilib.h"
-
-#ifndef R_OK
-#define R_OK 4
-#define W_OK 2
-#define X_OK 1
-#endif
-
-#ifndef WIFSIGNALED
-#define WIFSIGNALED(S) (((S) & 0xff) != 0 && ((S) & 0xff) != 0x7f)
-#endif
-#ifndef WTERMSIG
-#define WTERMSIG(S) ((S) & 0x7f)
-#endif
-#ifndef WIFEXITED
-#define WIFEXITED(S) (((S) & 0xff) == 0)
-#endif
-#ifndef WEXITSTATUS
-#define WEXITSTATUS(S) (((S) & 0xff00) >> 8)
-#endif
-
-/* Defined to the name of the compiler; if using a cross compiler, the
- Makefile should compile this file with the proper name
- (e.g., "i386-aout-gcc"). */
-#ifndef GCC_NAME
-#define GCC_NAME "gcc"
-#endif
-
-/* On MSDOS, write temp files in current dir
- because there's no place else we can expect to use. */
-#ifdef __MSDOS__
-#ifndef P_tmpdir
-#define P_tmpdir "."
-#endif
-#ifndef R_OK
-#define R_OK 4
-#define W_OK 2
-#define X_OK 1
-#endif
-#endif
-
-/* Add prototype support. */
-#ifndef PROTO
-#if defined (USE_PROTOTYPES) ? USE_PROTOTYPES : defined (__STDC__)
-#define PROTO(ARGS) ARGS
-#else
-#define PROTO(ARGS) ()
-#endif
-#endif
-
-#ifndef VPROTO
-#ifdef __STDC__
-#define PVPROTO(ARGS) ARGS
-#define VPROTO(ARGS) ARGS
-#define VA_START(va_list,var) va_start(va_list,var)
-#else
-#define PVPROTO(ARGS) ()
-#define VPROTO(ARGS) (va_alist) va_dcl
-#define VA_START(va_list,var) va_start(va_list)
-#endif
-#endif
-
-/* Define a generic NULL if one hasn't already been defined. */
-
-#ifndef NULL
-#define NULL 0
-#endif
-
-/* Define O_RDONLY if the system hasn't defined it for us. */
-#ifndef O_RDONLY
-#define O_RDONLY 0
-#endif
-
-#ifndef GENERIC_PTR
-#if defined (USE_PROTOTYPES) ? USE_PROTOTYPES : defined (__STDC__)
-#define GENERIC_PTR void *
-#else
-#define GENERIC_PTR char *
-#endif
-#endif
-
-#ifndef NULL_PTR
-#define NULL_PTR ((GENERIC_PTR)0)
-#endif
-
-#ifdef USG
-#define vfork fork
-#endif /* USG */
-
-/* On MSDOS, write temp files in current dir
- because there's no place else we can expect to use. */
-#ifdef __MSDOS__
-#ifndef P_tmpdir
-#define P_tmpdir "."
-#endif
-#endif
-
-/* By default there is no special suffix for executables. */
-#ifndef EXECUTABLE_SUFFIX
-#define EXECUTABLE_SUFFIX ""
-#endif
-
-/* By default, colon separates directories in a path. */
-#ifndef PATH_SEPARATOR
-#define PATH_SEPARATOR ':'
-#endif
-
-#ifndef DIR_SEPARATOR
-#define DIR_SEPARATOR '/'
-#endif
-
-static char dir_separator_str[] = {DIR_SEPARATOR, 0};
-
-extern char *getenv ();
-
-#ifndef errno
-extern int errno;
-#endif
-
-extern int sys_nerr;
-#ifndef HAVE_STRERROR
-#if defined(bsd4_4)
-extern const char *const sys_errlist[];
-#else
-extern char *sys_errlist[];
-#endif
-#else
-extern char *strerror();
-#endif
-
-/* Name with which this program was invoked. */
-static char *programname;
-
-/* argc, argv from main(). */
-static int xargc;
-static char **xargv;
-
-/* The new argument list will be contained in these, though if identical
- to the original list, these will be == xargc, xargv. */
-static int newargc;
-static char **newargv;
-
-/* Options this driver needs to recognize, not just know how to
- skip over. */
-typedef enum
-{
- OPTION_b, /* Aka --prefix. */
- OPTION_B, /* Aka --target. */
- OPTION_c, /* Aka --compile. */
- OPTION_driver, /* Wrapper-specific option. */
- OPTION_E, /* Aka --preprocess. */
- OPTION_for_linker, /* Aka `-Xlinker' and `-Wl,'. */
- OPTION_help, /* --help. */
- OPTION_i, /* -imacros, -include, -include-*. */
- OPTION_l,
- OPTION_L, /* Aka --library-directory. */
- OPTION_M, /* Aka --dependencies. */
- OPTION_MM, /* Aka --user-dependencies. */
- OPTION_nostdlib, /* Aka --no-standard-libraries, or
- -nodefaultlibs. */
- OPTION_o, /* Aka --output. */
- OPTION_P, /* Aka --print-*-name. */
- OPTION_S, /* Aka --assemble. */
- OPTION_syntax_only, /* -fsyntax-only. */
- OPTION_v, /* Aka --verbose. */
- OPTION_version, /* --version. */
- OPTION_V, /* Aka --use-version. */
- OPTION_x, /* Aka --language. */
- OPTION_ /* Unrecognized or unimportant. */
-} Option;
-
-/* THE FOLLOWING COMES STRAIGHT FROM prerelease gcc-2.8.0/gcc.c: */
-
-/* This defines which switch letters take arguments. */
-
-#define DEFAULT_SWITCH_TAKES_ARG(CHAR) \
- ((CHAR) == 'D' || (CHAR) == 'U' || (CHAR) == 'o' \
- || (CHAR) == 'e' || (CHAR) == 'T' || (CHAR) == 'u' \
- || (CHAR) == 'I' || (CHAR) == 'm' || (CHAR) == 'x' \
- || (CHAR) == 'L' || (CHAR) == 'A')
-
-#ifndef SWITCH_TAKES_ARG
-#define SWITCH_TAKES_ARG(CHAR) DEFAULT_SWITCH_TAKES_ARG(CHAR)
-#endif
-
-/* This defines which multi-letter switches take arguments. */
-
-#define DEFAULT_WORD_SWITCH_TAKES_ARG(STR) \
- (!strcmp (STR, "Tdata") || !strcmp (STR, "Ttext") \
- || !strcmp (STR, "Tbss") || !strcmp (STR, "include") \
- || !strcmp (STR, "imacros") || !strcmp (STR, "aux-info") \
- || !strcmp (STR, "idirafter") || !strcmp (STR, "iprefix") \
- || !strcmp (STR, "iwithprefix") || !strcmp (STR, "iwithprefixbefore") \
- || !strcmp (STR, "isystem"))
-
-#ifndef WORD_SWITCH_TAKES_ARG
-#define WORD_SWITCH_TAKES_ARG(STR) DEFAULT_WORD_SWITCH_TAKES_ARG (STR)
-#endif
-
-/* This is the common prefix we use to make temp file names.
- It is chosen once for each run of this program.
- It is substituted into a spec by %g.
- Thus, all temp file names contain this prefix.
- In practice, all temp file names start with this prefix.
-
- This prefix comes from the envvar TMPDIR if it is defined;
- otherwise, from the P_tmpdir macro if that is defined;
- otherwise, in /usr/tmp or /tmp. */
-
-static char *temp_filename;
-static char *temp_filename_f; /* Same with ".f" appended. */
-
-/* Length of the prefix. */
-
-static int temp_filename_length;
-
-/* The number of errors that have occurred; the link phase will not be
- run if this is non-zero. */
-static int error_count = 0;
-
-/* Number of commands that exited with a signal. */
-
-static int signal_count = 0;
-
-/* END OF STUFF FROM gcc-2.7.0/gcc.c. */
-
-char *
-my_strerror(e)
- int e;
-{
-
-#ifdef HAVE_STRERROR
- return strerror(e);
-
-#else
-
- static char buffer[30];
- if (!e)
- return "";
-
- if (e > 0 && e < sys_nerr)
- return sys_errlist[e];
-
- sprintf (buffer, "Unknown error %d", e);
- return buffer;
-#endif
-}
-
-#ifdef HAVE_VPRINTF
-/* Output an error message and exit */
-
-static void
-fatal VPROTO((char *format, ...))
-{
-#ifndef __STDC__
- char *format;
-#endif
- va_list ap;
-
- VA_START (ap, format);
-
-#ifndef __STDC__
- format = va_arg (ap, char*);
-#endif
-
- fprintf (stderr, "%s: ", programname);
- vfprintf (stderr, format, ap);
- va_end (ap);
- fprintf (stderr, "\n");
-#if 0
- /* XXX Not needed for g77 driver. */
- delete_temp_files ();
-#endif
- exit (1);
-}
-
-static void
-error VPROTO((char *format, ...))
-{
-#ifndef __STDC__
- char *format;
-#endif
- va_list ap;
-
- VA_START (ap, format);
-
-#ifndef __STDC__
- format = va_arg (ap, char*);
-#endif
-
- fprintf (stderr, "%s: ", programname);
- vfprintf (stderr, format, ap);
- va_end (ap);
-
- fprintf (stderr, "\n");
-}
-
-#else /* not HAVE_VPRINTF */
-
-static void
-error (msg, arg1, arg2)
- char *msg, *arg1, *arg2;
-{
- fprintf (stderr, "%s: ", programname);
- fprintf (stderr, msg, arg1, arg2);
- fprintf (stderr, "\n");
-}
-
-static void
-fatal (msg, arg1, arg2)
- char *msg, *arg1, *arg2;
-{
- error (msg, arg1, arg2);
-#if 0
- /* XXX Not needed for g77 driver. */
- delete_temp_files ();
-#endif
- exit (1);
-}
-
-#endif /* not HAVE_VPRINTF */
-
-/* More 'friendly' abort that prints the line and file.
- config.h can #define abort fancy_abort if you like that sort of thing. */
-
-void
-fancy_abort ()
-{
- fatal ("Internal g77 abort.");
-}
-
-char *
-xmalloc (size)
- unsigned size;
-{
- register char *value = (char *) malloc (size);
- if (value == 0)
- fatal ("virtual memory exhausted");
- return value;
-}
-
-static char *
-concat (s1, s2)
- char *s1, *s2;
-{
- int len1 = strlen (s1);
- int len2 = strlen (s2);
- char *result = xmalloc (len1 + len2 + 1);
-
- strcpy (result, s1);
- strcpy (result + len1, s2);
- *(result + len1 + len2) = 0;
-
- return result;
-}
-
-static char *
-concat3 (s1, s2, s3)
- char *s1, *s2, *s3;
-{
- return concat (concat (s1, s2), s3);
-}
-
-static char *
-concat4 (s1, s2, s3, s4)
- char *s1, *s2, *s3, *s4;
-{
- return concat (concat (s1, s2), concat (s3, s4));
-}
-
-static char *
-concat6 (s1, s2, s3, s4, s5, s6)
- char *s1, *s2, *s3, *s4, *s5, *s6;
-{
- return concat3 (concat (s1, s2), concat (s3, s4), concat (s5, s6));
-}
-
-static void
-pfatal_with_name (name)
- char *name;
-{
- char *s;
-
- if (errno < sys_nerr)
- s = concat ("%s: ", my_strerror (errno));
- else
- s = "cannot open `%s'";
- fatal (s, name);
-}
-
-static void
-perror_exec (name)
- char *name;
-{
- char *s;
-
- if (errno < sys_nerr)
- s = concat ("installation problem, cannot exec `%s': ",
- my_strerror (errno));
- else
- s = "installation problem, cannot exec `%s'";
- error (s, name);
-}
-
-/* Compute a string to use as the base of all temporary file names.
- It is substituted for %g. */
-
-static char *
-choose_temp_base_try (try, base)
- char *try;
- char *base;
-{
- char *rv;
- if (base)
- rv = base;
- else if (try == (char *)0)
- rv = 0;
- else if (access (try, R_OK | W_OK) != 0)
- rv = 0;
- else
- rv = try;
- return rv;
-}
-
-static void
-choose_temp_base ()
-{
- char *base = 0;
- int len;
-
- base = choose_temp_base_try (getenv ("TMPDIR"), base);
- base = choose_temp_base_try (getenv ("TMP"), base);
- base = choose_temp_base_try (getenv ("TEMP"), base);
-
-#ifdef P_tmpdir
- base = choose_temp_base_try (P_tmpdir, base);
-#endif
-
- base = choose_temp_base_try (concat4 (dir_separator_str, "usr",
- dir_separator_str, "tmp"),
- base);
- base = choose_temp_base_try (concat (dir_separator_str, "tmp"), base);
-
- /* If all else fails, use the current directory! */
- if (base == (char *)0)
- base = concat (".", dir_separator_str);
-
- len = strlen (base);
- temp_filename = xmalloc (len + strlen (concat (dir_separator_str,
- "gfXXXXXX")) + 1);
- strcpy (temp_filename, base);
- if (len > 0 && temp_filename[len-1] != '/'
- && temp_filename[len-1] != DIR_SEPARATOR)
- temp_filename[len++] = DIR_SEPARATOR;
- strcpy (temp_filename + len, "gfXXXXXX");
-
- mktemp (temp_filename);
- temp_filename_length = strlen (temp_filename);
- if (temp_filename_length == 0)
- abort ();
-
- temp_filename_f = xmalloc (temp_filename_length + 2);
- strcpy (temp_filename_f, temp_filename);
- temp_filename_f[temp_filename_length] = '.';
- temp_filename_f[temp_filename_length + 1] = 'f';
- temp_filename_f[temp_filename_length + 2] = '\0';
-}
-
-/* This structure describes one mapping. */
-struct option_map
-{
- /* The long option's name. */
- char *name;
- /* The equivalent short option. */
- char *equivalent;
- /* Argument info. A string of flag chars; NULL equals no options.
- a => argument required.
- o => argument optional.
- j => join argument to equivalent, making one word.
- * => require other text after NAME as an argument. */
- char *arg_info;
-};
-
-/* This is the table of mappings. Mappings are tried sequentially
- for each option encountered; the first one that matches, wins. */
-
-struct option_map option_map[] =
- {
- {"--all-warnings", "-Wall", 0},
- {"--ansi", "-ansi", 0},
- {"--assemble", "-S", 0},
- {"--assert", "-A", "a"},
- {"--comments", "-C", 0},
- {"--compile", "-c", 0},
- {"--debug", "-g", "oj"},
- {"--define-macro", "-D", "a"},
- {"--dependencies", "-M", 0},
- {"--driver", "", 0}, /* Wrapper-specific. */
- {"--dump", "-d", "a"},
- {"--dumpbase", "-dumpbase", "a"},
- {"--entry", "-e", 0},
- {"--extra-warnings", "-W", 0},
- {"--for-assembler", "-Wa", "a"},
- {"--for-linker", "-Xlinker", "a"},
- {"--force-link", "-u", "a"},
- {"--imacros", "-imacros", "a"},
- {"--include", "-include", "a"},
- {"--include-barrier", "-I-", 0},
- {"--include-directory", "-I", "a"},
- {"--include-directory-after", "-idirafter", "a"},
- {"--include-prefix", "-iprefix", "a"},
- {"--include-with-prefix", "-iwithprefix", "a"},
- {"--include-with-prefix-before", "-iwithprefixbefore", "a"},
- {"--include-with-prefix-after", "-iwithprefix", "a"},
- {"--language", "-x", "a"},
- {"--library-directory", "-L", "a"},
- {"--machine", "-m", "aj"},
- {"--machine-", "-m", "*j"},
- {"--no-line-commands", "-P", 0},
- {"--no-precompiled-includes", "-noprecomp", 0},
- {"--no-standard-includes", "-nostdinc", 0},
- {"--no-standard-libraries", "-nostdlib", 0},
- {"--no-warnings", "-w", 0},
- {"--optimize", "-O", "oj"},
- {"--output", "-o", "a"},
- {"--pedantic", "-pedantic", 0},
- {"--pedantic-errors", "-pedantic-errors", 0},
- {"--pipe", "-pipe", 0},
- {"--prefix", "-B", "a"},
- {"--preprocess", "-E", 0},
- {"--print-file-name", "-print-file-name=", "aj"},
- {"--print-libgcc-file-name", "-print-libgcc-file-name", 0},
- {"--print-missing-file-dependencies", "-MG", 0},
- {"--print-multi-lib", "-print-multi-lib", 0},
- {"--print-multi-directory", "-print-multi-directory", 0},
- {"--print-prog-name", "-print-prog-name=", "aj"},
- {"--profile", "-p", 0},
- {"--profile-blocks", "-a", 0},
- {"--quiet", "-q", 0},
- {"--save-temps", "-save-temps", 0},
- {"--shared", "-shared", 0},
- {"--silent", "-q", 0},
- {"--static", "-static", 0},
- {"--symbolic", "-symbolic", 0},
- {"--target", "-b", "a"},
- {"--trace-includes", "-H", 0},
- {"--traditional", "-traditional", 0},
- {"--traditional-cpp", "-traditional-cpp", 0},
- {"--trigraphs", "-trigraphs", 0},
- {"--undefine-macro", "-U", "a"},
- {"--use-version", "-V", "a"},
- {"--user-dependencies", "-MM", 0},
- {"--verbose", "-v", 0},
- {"--version", "-dumpversion", 0},
- {"--warn-", "-W", "*j"},
- {"--write-dependencies", "-MD", 0},
- {"--write-user-dependencies", "-MMD", 0},
- {"--", "-f", "*j"}
- };
-
-/* Compares --options that take one arg. */
-
-static int
-opteq (xskip, xarg, opt, name)
- int *xskip;
- char **xarg;
- char *opt;
- char *name;
-{
- int optlen;
- int namelen;
- int complen;
- int i;
- int cmp = strcmp (opt, name);
- int skip = 1;
- char *arg = NULL;
-
- if (cmp == 0)
- {
- /* Easy, a straight match. */
- *xskip = skip;
- *xarg = arg;
- return cmp;
- }
-
- optlen = strlen (opt);
-
- for (i = 0; i < sizeof (option_map) / sizeof (option_map[0]); ++i)
- {
- char *arginfo;
- int j;
-
- arginfo = option_map[i].arg_info;
- if (arginfo == NULL)
- arginfo = "";
-
- namelen = strlen (option_map[i].name);
- complen = optlen > namelen ? namelen : optlen;
-
- if (strncmp (opt, option_map[i].name, complen) == 0)
- {
- if (optlen < namelen)
- {
- for (j = i + 1;
- j < sizeof (option_map) / sizeof (option_map[0]);
- ++j)
- if ((strlen (option_map[j].name) >= optlen)
- && (strncmp (opt, option_map[j].name, optlen) == 0))
- fatal ("Ambiguous abbreviation `%s'", opt);
- }
-
- if (optlen > namelen)
- {
- if (opt[namelen] == '=')
- {
- skip = 0;
- arg = opt + namelen + 1;
- }
- else if (index (arginfo, '*') != 0)
- ;
- else
- continue;
- }
- else if (index (arginfo, '*') != 0)
- fatal ("Incomplete `%s' option", option_map[i].name);
-
- if (strcmp (name, option_map[i].name) != 0)
- return 1; /* Not what is being looked for. */
-
- *xskip = skip;
- *xarg = arg;
- return 0;
- }
- }
-
- return 1;
-}
-
-/* Assumes text[0] == '-'. Returns number of argv items that belong to
- (and follow) this one, an option id for options important to the
- caller, and a pointer to the first char of the arg, if embedded (else
- returns NULL, meaning no arg or it's the next argv). */
-
-static void
-lookup_option (xopt, xskip, xarg, text)
- Option *xopt;
- int *xskip;
- char **xarg;
- char *text;
-{
- Option opt = OPTION_;
- int skip;
- char *arg = NULL;
-
- if ((skip = SWITCH_TAKES_ARG (text[1])) > (text[2] != '\0'))
- skip -= (text[2] != '\0'); /* Usually one of "DUoeTuImLA". */
-
- if (text[1] == 'B')
- opt = OPTION_B, skip = (text[2] == '\0'), arg = text + 2;
- else if (text[1] == 'b')
- opt = OPTION_b, skip = (text[2] == '\0'), arg = text + 2;
- else if ((text[1] == 'c') && (text[2] == '\0'))
- opt = OPTION_c, skip = 0;
- else if ((text[1] == 'E') && (text[2] == '\0'))
- opt = OPTION_E, skip = 0;
- else if (text[1] == 'i')
- opt = OPTION_i, skip = 0;
- else if (text[1] == 'l')
- opt = OPTION_l;
- else if (text[1] == 'L')
- opt = OPTION_L, skip = (text[2] == '\0'), arg = text + 2;
- else if (text[1] == 'o')
- opt = OPTION_o;
- else if ((text[1] == 'S') && (text[2] == '\0'))
- opt = OPTION_S, skip = 0;
- else if (text[1] == 'V')
- opt = OPTION_V, skip = (text[2] == '\0');
- else if ((text[1] == 'v') && (text[2] == '\0'))
- opt = OPTION_v, skip = 0;
- else if ((text[1] == 'W') && (text[2] == 'l') && (text[3] == ','))
- opt = OPTION_for_linker, skip = 0;
- else if (text[1] == 'x')
- opt = OPTION_x, skip = (text[2] == '\0'), arg = text + 2;
- else
- {
- if ((skip = WORD_SWITCH_TAKES_ARG (text + 1)) != 0)
- /* Usually one of "Tdata", "Ttext", "Tbss", "include",
- "imacros", "aux-info", "idirafter", "iprefix",
- "iwithprefix", "iwithprefixbefore", "isystem". */
- ;
-
- if (strcmp (text, "--assemble") == 0)
- opt = OPTION_S;
- else if (strcmp (text, "--compile") == 0)
- opt = OPTION_c;
- else if (opteq (&skip, &arg, text, "--driver") == 0)
- opt = OPTION_driver;
- else if (strcmp (text, "--help") == 0)
- opt = OPTION_help;
- else if ((opteq (&skip, &arg, text, "--imacros") == 0)
- || (opteq (&skip, &arg, text, "--include") == 0)
- || (opteq (&skip, &arg, text, "--include-directory-after") == 0)
- || (opteq (&skip, &arg, text, "--include-prefix") == 0)
- || (opteq (&skip, &arg, text, "--include-with-prefix") == 0)
- || (opteq (&skip, &arg, text, "--include-with-prefix-before") == 0)
- || (opteq (&skip, &arg, text, "--include-with-prefix-after") == 0))
- opt = OPTION_i;
- else if (opteq (&skip, &arg, text, "--language") == 0)
- opt = OPTION_x;
- else if (opteq (&skip, &arg, text, "--library-directory") == 0)
- opt = OPTION_L;
- else if ((strcmp (text, "-M") == 0)
- || (strcmp (text, "--dependencies") == 0))
- opt = OPTION_M;
- else if ((strcmp (text, "-MM") == 0)
- || (strcmp (text, "--user-dependencies") == 0))
- opt = OPTION_MM;
- else if (strcmp (text, "--output") == 0)
- opt = OPTION_o;
- else if (opteq (&skip, &arg, text, "--prefix") == 0)
- opt = OPTION_B;
- else if (strcmp (text, "--preprocess") == 0)
- opt = OPTION_E;
- else if ((opteq (&skip, &arg, text, "--print-file-name") == 0)
- || (strcmp (text, "--print-libgcc-file-name") == 0)
- || (strcmp (text, "--print-multi-lib") == 0)
- || (strcmp (text, "--print-multi-directory") == 0)
- || (opteq (&skip, &arg, text, "--print-prog-name") == 0))
- opt = OPTION_P;
- else if ((strcmp (text, "-nostdlib") == 0)
- || (strcmp (text, "--no-standard-libraries") == 0)
- || (strcmp (text, "-nodefaultlibs") == 0))
- opt = OPTION_nostdlib;
- else if (strcmp (text, "-fsyntax-only") == 0)
- opt = OPTION_syntax_only;
- else if (opteq (&skip, &arg, text, "--use-version") == 0)
- opt = OPTION_V;
- else if (strcmp (text, "--verbose") == 0)
- opt = OPTION_v;
- else if (strcmp (text, "--version") == 0)
- opt = OPTION_version;
- else if (strcmp (text, "-Xlinker") == 0)
- skip = 1;
- else if ((opteq (&skip, &arg, text, "--assert") == 0)
- || (opteq (&skip, &arg, text, "--define-macro") == 0)
- || (opteq (&skip, &arg, text, "--dump") == 0)
- || (opteq (&skip, &arg, text, "--dumpbase") == 0)
- || (opteq (&skip, &arg, text, "--for-assembler") == 0)
- || (opteq (&skip, &arg, text, "--for-linker") == 0)
- || (opteq (&skip, &arg, text, "--force-link") == 0)
- || (opteq (&skip, &arg, text, "--machine") == 0)
- || (opteq (&skip, &arg, text, "--target") == 0)
- || (opteq (&skip, &arg, text, "--undefine-macro") == 0))
- ;
- else
- skip = 0;
- }
-
- if (xopt != NULL)
- *xopt = opt;
- if (xskip != NULL)
- *xskip = skip;
- if (xarg != NULL)
- {
- if ((arg != NULL)
- && (arg[0] == '\0'))
- *xarg = NULL;
- else
- *xarg = arg;
- }
-}
-
-static void
-append_arg (arg)
- char *arg;
-{
- static int newargsize;
-
-#if 0
- fprintf (stderr, "`%s'\n", arg);
-#endif
-
- if ((newargv == xargv)
- && (arg == xargv[newargc]))
- {
- ++newargc;
- return; /* Nothing new here. */
- }
-
- if (newargv == xargv)
- { /* Make new arglist. */
- int i;
-
- newargsize = (xargc << 2) + 20;
- newargv = (char **) malloc (newargsize * sizeof (char *));
-
- /* Copy what has been done so far. */
- for (i = 0; i < newargc; ++i)
- newargv[i] = xargv[i];
- }
-
- if (newargc == newargsize)
- fatal ("overflowed output arg list for `%s'", arg);
- newargv[newargc++] = arg;
-}
-
-extern int execv (), execvp ();
-
-/* If a stage of compilation returns an exit status >= 1,
- compilation of that file ceases. */
-
-#define MIN_FATAL_STATUS 1
-
-/* stdin file number. */
-#define STDIN_FILE_NO 0
-
-/* stdout file number. */
-#define STDOUT_FILE_NO 1
-
-/* value of `pipe': port index for reading. */
-#define READ_PORT 0
-
-/* value of `pipe': port index for writing. */
-#define WRITE_PORT 1
-
-/* Pipe waiting from last process, to be used as input for the next one.
- Value is STDIN_FILE_NO if no pipe is waiting
- (i.e. the next command is the first of a group). */
-
-static int last_pipe_input;
-
-/* Fork one piped subcommand. FUNC is the system call to use
- (either execv or execvp). ARGV is the arg vector to use.
- NOT_LAST is nonzero if this is not the last subcommand
- (i.e. its output should be piped to the next one.) */
-
-#ifdef __MSDOS__
-
-#include <process.h>
-static int
-pexecute (search_flag, program, argv, not_last)
- int search_flag;
- char *program;
- char *argv[];
- int not_last;
-{
-#ifdef __GO32__
- int i = (search_flag ? spawnv : spawnvp) (1, program, argv);
-#else
- char *scmd, *rf;
- FILE *argfile;
- int i, el = search_flag ? 0 : 4;
-
- scmd = (char *)malloc (strlen (program) + strlen (temp_filename) + 6 + el);
- rf = scmd + strlen(program) + 2 + el;
- sprintf (scmd, "%s%s @%s.gp", program,
- (search_flag ? "" : ".exe"), temp_filename);
- argfile = fopen (rf, "w");
- if (argfile == 0)
- pfatal_with_name (rf);
-
- for (i=1; argv[i]; i++)
- {
- char *cp;
- for (cp = argv[i]; *cp; cp++)
- {
- if (*cp == '"' || *cp == '\'' || *cp == '\\' || isspace (*cp))
- fputc ('\\', argfile);
- fputc (*cp, argfile);
- }
- fputc ('\n', argfile);
- }
- fclose (argfile);
-
- i = system (scmd);
-
- remove (rf);
-#endif
-
- if (i == -1)
- {
- perror_exec (program);
- return MIN_FATAL_STATUS << 8;
- }
- return i << 8;
-}
-
-#endif
-
-#if !defined(__MSDOS__) && !defined(OS2) && !defined(_WIN32)
-
-static int
-pexecute (search_flag, program, argv, not_last)
- int search_flag;
- char *program;
- char *argv[];
- int not_last;
-{
- int (*func)() = (search_flag ? execv : execvp);
- int pid;
- int pdes[2];
- int input_desc = last_pipe_input;
- int output_desc = STDOUT_FILE_NO;
- int retries, sleep_interval;
-
- /* If this isn't the last process, make a pipe for its output,
- and record it as waiting to be the input to the next process. */
-
- if (not_last)
- {
- if (pipe (pdes) < 0)
- pfatal_with_name ("pipe");
- output_desc = pdes[WRITE_PORT];
- last_pipe_input = pdes[READ_PORT];
- }
- else
- last_pipe_input = STDIN_FILE_NO;
-
- /* Fork a subprocess; wait and retry if it fails. */
- sleep_interval = 1;
- for (retries = 0; retries < 4; retries++)
- {
- pid = vfork ();
- if (pid >= 0)
- break;
- sleep (sleep_interval);
- sleep_interval *= 2;
- }
-
- switch (pid)
- {
- case -1:
-#ifdef vfork
- pfatal_with_name ("fork");
-#else
- pfatal_with_name ("vfork");
-#endif
- /* NOTREACHED */
- return 0;
-
- case 0: /* child */
- /* Move the input and output pipes into place, if nec. */
- if (input_desc != STDIN_FILE_NO)
- {
- close (STDIN_FILE_NO);
- dup (input_desc);
- close (input_desc);
- }
- if (output_desc != STDOUT_FILE_NO)
- {
- close (STDOUT_FILE_NO);
- dup (output_desc);
- close (output_desc);
- }
-
- /* Close the parent's descs that aren't wanted here. */
- if (last_pipe_input != STDIN_FILE_NO)
- close (last_pipe_input);
-
- /* Exec the program. */
- (*func) (program, argv);
- perror_exec (program);
- exit (-1);
- /* NOTREACHED */
- return 0;
-
- default:
- /* In the parent, after forking.
- Close the descriptors that we made for this child. */
- if (input_desc != STDIN_FILE_NO)
- close (input_desc);
- if (output_desc != STDOUT_FILE_NO)
- close (output_desc);
-
- /* Return child's process number. */
- return pid;
- }
-}
-
-#endif /* not __MSDOS__ and not OS2 and not _WIN32 */
-
-#if defined(OS2)
-
-static int
-pexecute (search_flag, program, argv, not_last)
- int search_flag;
- char *program;
- char *argv[];
- int not_last;
-{
- return (search_flag ? spawnv : spawnvp) (1, program, argv);
-}
-#endif /* OS2 */
-
-#if defined(_WIN32)
-
-static int
-pexecute (search_flag, program, argv, not_last)
- int search_flag;
- char *program;
- char *argv[];
- int not_last;
-{
- return (search_flag ? __spawnv : __spawnvp) (1, program, argv);
-}
-#endif /* _WIN32 */
-
-static int
-doit (char *program, char **argv)
-{
- int pid;
- int status;
- int ret_code = 0;
-
- pid = pexecute (0, program, argv, 0);
-
-#ifdef __MSDOS__
- status = pid;
-#else
-#ifdef _WIN32
- pid = cwait (&status, pid, WAIT_CHILD);
-#else
- pid = wait (&status);
-#endif
-#endif
- if (pid < 0)
- abort ();
-
- if (status != 0)
- {
- if (WIFSIGNALED (status))
- {
- fatal ("Internal compiler error: program %s got fatal signal %d",
- program, WTERMSIG (status));
- signal_count++;
- ret_code = -1;
- }
- else if (WIFEXITED (status)
- && WEXITSTATUS (status) >= MIN_FATAL_STATUS)
- ret_code = -1;
- }
-
- return ret_code;
-}
-
-int
-main (argc, argv)
- int argc;
- char **argv;
-{
- register int i = 0;
- register char *p;
- int verbose = 0;
- Option opt;
- int skip;
- char *arg;
- int n_infiles = 0;
- int n_outfiles = 0;
-
- /* This will be NULL if we encounter a situation where we should not
- link in libf2c. */
- char *library = "-lf2c";
-
- /* This will become 0 if anything other than -v and kin (like -V)
- is seen, meaning the user is trying to accomplish something.
- If it remains nonzero, and the user wants version info, add stuff to
- the command line to make gcc invoke all the appropriate phases
- to get all the version info. */
- int add_version_magic = 1;
-
- /* The name of the compiler we will want to run---by default, it
- will be the definition of `GCC_NAME', e.g., `gcc'. */
- char *gcc = GCC_NAME;
-
- /* 0 => -xnone in effect on input/output
- 1 => -xfoo in effect on input/output
- 2 => -xnone in effect on input, -xf77 on output
- 3 => -xnone in effect on input, -xf77-cpp-input on output.
- 4 => -xnone in effect on input, -xratfor on output. */
- int saw_speclang = 0;
-
- /* 0 => initial/reset state
- 1 => last arg was -l<library>
- 2 => last two args were -l<library> -lm. */
- int saw_library = 0;
-
- /* Initialize for append_arg(). */
- xargc = argc;
- newargv = xargv = argv;
- newargc = 0;
-
- append_arg (argv[0]);
-
- p = argv[0] + strlen (argv[0]);
- while (p != argv[0] && p[-1] != '/')
- --p;
- programname = p;
-
- if (argc == 1)
- fatal ("No input files specified.\n");
-
-#ifndef __MSDOS__
- /* We do a little magic to find out where the main gcc executable
- is. If they ran us as /usr/local/bin/g77, then we will look
- for /usr/local/bin/gcc; similarly, if they just ran us as `g77',
- we'll just look for `gcc'. */
- if (p != argv[0])
- {
- *--p = '\0';
- gcc = (char *) malloc ((strlen (argv[0]) + 1 + strlen (GCC_NAME) + 1)
- * sizeof (char));
- sprintf (gcc, "%s/%s", argv[0], GCC_NAME);
- }
-#endif
-
- /* First pass through arglist.
-
- If -nostdlib or a "turn-off-linking" option is anywhere in the
- command line, don't do any library-option processing (except
- relating to -x). Also, if -v is specified, but no other options
- that do anything special (allowing -V version, etc.), remember
- to add special stuff to make gcc command actually invoke all
- the different phases of the compilation process so all the version
- numbers can be seen.
-
- Also, here is where all problems with missing arguments to options
- are caught. If this loop is exited normally, it means all options
- have the appropriate number of arguments as far as the rest of this
- program is concerned. */
-
- for (i = 1; i < argc; ++i)
- {
- if ((argv[i][0] == '+') && (argv[i][1] == 'e'))
- {
- add_version_magic = 0;
- continue;
- }
- else if ((argv[i][0] != '-') || (argv[i][1] == 0))
- {
- ++n_infiles;
- add_version_magic = 0;
- continue;
- }
-
- lookup_option (&opt, &skip, NULL, argv[i]);
-
- switch (opt)
- {
- case OPTION_nostdlib:
- case OPTION_c:
- case OPTION_S:
- case OPTION_syntax_only:
- case OPTION_E:
- case OPTION_M:
- case OPTION_MM:
- /* These options disable linking entirely or linking of the
- standard libraries. */
- library = NULL;
- add_version_magic = 0;
- break;
-
- case OPTION_for_linker:
- case OPTION_l:
- ++n_infiles;
- add_version_magic = 0;
- break;
-
- case OPTION_o:
- ++n_outfiles;
- add_version_magic = 0;
- break;
-
- case OPTION_v:
- if (!verbose)
- fprintf (stderr, "g77 version %s\n", ffezzz_version_string);
- verbose = 1;
- break;
-
- case OPTION_b:
- case OPTION_B:
- case OPTION_L:
- case OPTION_driver:
- case OPTION_i:
- case OPTION_V:
- /* These options are useful in conjunction with -v to get
- appropriate version info. */
- break;
-
- case OPTION_version:
- printf ("\
-GNU Fortran %s\n\
-Copyright (C) 1997 Free Software Foundation, Inc.\n\
-For more version information on components of the GNU Fortran\n\
-compilation system, especially useful when reporting bugs,\n\
-type the command `g77 --verbose'.\n\
-\n\
-GNU Fortran comes with NO WARRANTY, to the extent permitted by law.\n\
-You may redistribute copies of GNU Fortran\n\
-under the terms of the GNU General Public License.\n\
-For more information about these matters, see the file named COPYING\n\
-or type the command `info -f g77 Copying'.\n\
-", ffezzz_version_string);
- exit (0);
- break;
-
- case OPTION_help:
- printf ("\
-Usage: g77 [OPTION]... FORTRAN-SOURCE...\n\
-\n\
-Compile and link Fortran source code to produce an executable program,\n\
-which by default is named `a.out', and can be invoked with the UNIX\n\
-command `./a.out'.\n\
-\n\
-Options:\n\
---debug include debugging information in executable.\n\
---driver=COMMAND specify preprocessor/compiler/linker driver\n\
- to use instead of the default `gcc'.\n\
---help display this help and exit.\n\
---optimize[=LEVEL] take extra time and memory to make generated\n\
- executable run faster. LEVEL is 0 for no\n\
- optimization, 1 for normal optimization, and\n\
- increases through 3 for more optimization.\n\
---output=PROGRAM name the executable PROGRAM instead of a.out;\n\
- invoke with the command `./PROGRAM'.\n\
---version display version information and exit.\n\
-\n\
-Many other options exist to tailor the compilation process, specify\n\
-the dialect of the Fortran source code, specify details of the\n\
-code-generation methodology, and so on.\n\
-\n\
-For more information on g77 and gcc, type the commands `info -f g77'\n\
-and `info -f gcc' to read the Info documentation on these commands.\n\
-\n\
-Report bugs to fortran@gnu.ai.mit.edu.\n");
- exit (0);
- break;
-
- default:
- add_version_magic = 0;
- break;
- }
-
- /* This is the one place we check for missing arguments in the
- program. */
-
- if (i + skip < argc)
- i += skip;
- else
- fatal ("argument to `%s' missing\n", argv[i]);
- }
-
- if ((n_outfiles != 0) && (n_infiles == 0))
- fatal ("No input files; unwilling to write output files");
-
- /* Second pass through arglist, transforming arguments as appropriate. */
-
- for (i = 1; i < argc; ++i)
- {
- if (argv[i][0] == '\0')
- append_arg (argv[i]); /* Interesting. Just append as is. */
-
- else if ((argv[i][0] == '-') && (argv[i][1] != 'l'))
- {
- /* Not a filename or library. */
-
- if (saw_library == 1) /* -l<library>. */
- append_arg ("-lm");
- saw_library = 0;
-
- lookup_option (&opt, &skip, &arg, argv[i]);
-
- if (argv[i][1] == '\0')
- append_arg (argv[i]); /* "-" == Standard input. */
-
- else if (opt == OPTION_x)
- {
- /* Track input language. */
- char *lang;
-
- if (arg == NULL)
- lang = argv[i+1];
- else
- lang = arg;
-
- saw_speclang = (strcmp (lang, "none") != 0);
- }
- else if (opt == OPTION_driver)
- {
- if (arg == NULL)
- gcc = argv[i+1];
- else
- gcc = arg;
- i += skip;
- continue; /* Don't append args to new list. */
- }
- append_arg (argv[i]);
- for (; skip != 0; --skip)
- append_arg (argv[++i]);
- }
- else
- { /* A filename/library, not an option. */
- int len;
- int want_speclang;
-
- /* Here, always append the arg _after_ other stuff, possibly. */
-
- if (saw_speclang == 1)
- saw_library = 0; /* -xfoo currently active. */
- /* Put -xf77 and -xnone around list of filenames ending in
- .F or .f, but don't include other filenames or libraries
- in that list. */
- else if ((argv[i][0] != '-') /* Not a library. */
- && (len = strlen (argv[i])) > 2
- && ((argv[i][len - 1] == 'F')
- || (argv[i][len - 1] == 'f')
- || (argv[i][len - 1] == 'r'))
- && argv[i][len - 2] == '.')
- { /* filename.f or filename.F. or filename.r */
- if (saw_library == 1) /* -l<library>. */
- append_arg ("-lm");
- saw_library = 0;
- switch (argv[i][len - 1])
- {
- case 'f':
- want_speclang = 2;
- break;
- case 'F':
- want_speclang = 3;
- break;
- case 'r':
- want_speclang = 4;
- break;
- default:
- break;
- }
- if (saw_speclang != want_speclang)
- {
- switch (want_speclang)
- {
- case 2:
- append_arg ("-xf77");
- break;
- case 3:
- append_arg ("-xf77-cpp-input");
- break;
- case 4:
- append_arg ("-xratfor");
- break;
- default:
- break;
- }
- saw_speclang = want_speclang;
- }
- }
- else
- { /* -lfoo or "alien" filename. */
- if (saw_speclang)
- append_arg ("-xnone");
- saw_speclang = 0;
-
- if (strcmp (argv[i], "-lm") == 0
- || strcmp (argv[i], "-lmath") == 0)
- {
- if (saw_library == 1)
- saw_library = 2; /* -l<library> -lm. */
- else if (library)
- {
- append_arg (library);
- saw_library = 2; /* -l<library> -lm. */
- }
- }
- else if ((library != NULL)
- && (strcmp (argv[i], library) == 0))
- saw_library = 1; /* -l<library>. */
- else
- { /* "Alien" library or filename. */
- if (saw_library == 1)
- append_arg ("-lm");
- saw_library = 0;
- }
- }
- append_arg (argv[i]);
- }
- }
-
- /* Add -lf2c -lm as necessary. */
-
- if (!add_version_magic && library)
- { /* Doing a link and no -nostdlib. */
- if (saw_speclang)
- append_arg ("-xnone");
- switch (saw_library)
- {
- case 0:
- append_arg (library);
- case 1:
- append_arg ("-lm");
- default:
- break;
- }
- }
- else if (add_version_magic && verbose)
- {
- FILE *fsrc;
-
- choose_temp_base ();
-
- append_arg ("-fnull-version");
- append_arg ("-o");
- append_arg (temp_filename);
- append_arg ("-xf77-cpp-input");
- append_arg (temp_filename_f);
- append_arg ("-xnone");
- if (library)
- {
- append_arg (library);
- append_arg ("-lm");
- }
-
- fsrc = fopen (temp_filename_f, "w");
- if (fsrc == 0)
- pfatal_with_name (fsrc);
- fputs (" call g77__fvers;call g77__ivers;call g77__uvers;end\n", fsrc);
- fclose (fsrc);
- }
-
- append_arg (NULL);
- --newargc; /* Don't count null arg at end. */
-
- newargv[0] = gcc; /* This is safe even if newargv == xargv. */
-
- if (verbose)
- {
-#if 0
- if (newargv == xargv)
- fprintf (stderr, "[Original:]");
-#endif
-
- for (i = 0; i < newargc; i++)
- fprintf (stderr, " %s", newargv[i]);
- fprintf (stderr, "\n");
- }
-
- if (doit (gcc, newargv) < 0)
- ++error_count;
- else if (add_version_magic && verbose)
- {
- char *outargv[2];
-
- outargv[0] = temp_filename;
- outargv[1] = 0;
-
- if (doit (temp_filename, outargv) < 0)
- ++error_count;
-
- remove (temp_filename);
- remove (temp_filename_f);
- }
-
- exit (error_count > 0 ? (signal_count ? 2 : 1) : 0);
- /* NOTREACHED */
- return 0;
-}
-
-#endif /* LANGUAGE_F77 == 1 */
diff --git a/gcc/f/g77.info b/gcc/f/g77.info
deleted file mode 100644
index b396df3c015..00000000000
--- a/gcc/f/g77.info
+++ /dev/null
@@ -1,751 +0,0 @@
-This is Info file g77.info, produced by Makeinfo version 1.68 from the
-input file g77.texi.
-
- This file explains how to use the GNU Fortran system.
-
- Published by the Free Software Foundation 59 Temple Place - Suite 330
-Boston, MA 02111-1307 USA
-
- Copyright (C) 1995-1997 Free Software Foundation, Inc.
-
- Permission is granted to make and distribute verbatim copies of this
-manual provided the copyright notice and this permission notice are
-preserved on all copies.
-
- Permission is granted to copy and distribute modified versions of
-this manual under the conditions for verbatim copying, provided also
-that the sections entitled "GNU General Public License," "Funding for
-Free Software," and "Protect Your Freedom--Fight `Look And Feel'" are
-included exactly as in the original, and provided that the entire
-resulting derived work is distributed under the terms of a permission
-notice identical to this one.
-
- Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that the sections entitled "GNU General Public
-License," "Funding for Free Software," and "Protect Your Freedom--Fight
-`Look And Feel'", and this permission notice, may be included in
-translations approved by the Free Software Foundation instead of in the
-original English.
-
- Contributed by James Craig Burley (<burley@gnu.ai.mit.edu>).
-Inspired by a first pass at translating `g77-0.5.16/f/DOC' that was
-contributed to Craig by David Ronis (<ronis@onsager.chem.mcgill.ca>).
-
-INFO-DIR-SECTION Fortran Programming
-START-INFO-DIR-ENTRY
-* g77: (g77). The GNU Fortran compilation system.
-END-INFO-DIR-ENTRY
-
-
-Indirect:
-g77.info-1: 1697
-g77.info-2: 51504
-g77.info-3: 86652
-g77.info-4: 102421
-g77.info-5: 148200
-g77.info-6: 198176
-g77.info-7: 240263
-g77.info-8: 290181
-g77.info-9: 339800
-g77.info-10: 389391
-g77.info-11: 437993
-g77.info-12: 487886
-g77.info-13: 537704
-g77.info-14: 586061
-g77.info-15: 635100
-g77.info-16: 684261
-g77.info-17: 734128
-g77.info-18: 773211
-g77.info-19: 822559
-g77.info-20: 833284
-
-Tag Table:
-(Indirect)
-Node: Top1697
-Node: Copying3654
-Node: Contributors22836
-Node: Funding25868
-Node: Funding GNU Fortran28371
-Node: Look and Feel31054
-Node: Getting Started31556
-Node: What is GNU Fortran?33874
-Node: G77 and GCC43439
-Node: Invoking G7744790
-Node: Option Summary46941
-Node: Overall Options51504
-Node: Shorthand Options57592
-Node: Fortran Dialect Options60070
-Node: Warning Options70755
-Node: Debugging Options79641
-Node: Optimize Options80714
-Node: Preprocessor Options84159
-Node: Directory Options85340
-Node: Code Gen Options86652
-Node: Environment Variables101963
-Node: News102421
-Node: Changes148200
-Node: Language162250
-Node: Direction of Language Development164190
-Node: Standard Support170429
-Node: No Passing External Assumed-length171150
-Node: No Passing Dummy Assumed-length171627
-Node: No Pathological Implied-DO172142
-Node: No Useless Implied-DO172829
-Node: Conformance173560
-Node: Notation Used175583
-Node: Terms and Concepts179788
-Node: Syntactic Items180300
-Node: Statements Comments Lines180982
-Node: Scope of Names and Labels182847
-Node: Characters Lines Sequence183277
-Node: Character Set183858
-Node: Lines184859
-Node: Continuation Line187335
-Node: Statements188290
-Node: Statement Labels189246
-Node: Order189938
-Node: INCLUDE190823
-Node: Data Types and Constants193566
-Node: Types197087
-Node: Double Notation198176
-Node: Star Notation199248
-Node: Kind Notation202193
-Node: Constants210613
-Node: Integer Type211925
-Node: Character Type212523
-Node: Expressions213287
-Node: %LOC()213703
-Node: Specification Statements216404
-Node: NAMELIST216861
-Node: DOUBLE COMPLEX217143
-Node: Control Statements217397
-Node: DO WHILE217889
-Node: END DO218115
-Node: Construct Names219122
-Node: CYCLE and EXIT219862
-Node: Functions and Subroutines222626
-Node: %VAL()223272
-Node: %REF()224636
-Node: %DESCR()226464
-Node: Generics and Specifics228597
-Node: REAL() and AIMAG() of Complex235792
-Node: CMPLX() of DOUBLE PRECISION237625
-Node: MIL-STD 1753239351
-Node: f77/f2c Intrinsics239693
-Node: Table of Intrinsic Functions240263
-Node: Abort Intrinsic256970
-Node: Abs Intrinsic257234
-Node: Access Intrinsic258102
-Node: AChar Intrinsic258938
-Node: ACos Intrinsic259460
-Node: AdjustL Intrinsic259921
-Node: AdjustR Intrinsic260246
-Node: AImag Intrinsic260572
-Node: AInt Intrinsic261377
-Node: Alarm Intrinsic262005
-Node: All Intrinsic262841
-Node: Allocated Intrinsic263153
-Node: ALog Intrinsic263482
-Node: ALog10 Intrinsic263872
-Node: AMax0 Intrinsic264270
-Node: AMax1 Intrinsic264755
-Node: AMin0 Intrinsic265208
-Node: AMin1 Intrinsic265692
-Node: AMod Intrinsic266144
-Node: And Intrinsic266570
-Node: ANInt Intrinsic267076
-Node: Any Intrinsic267840
-Node: ASin Intrinsic268147
-Node: Associated Intrinsic268605
-Node: ATan Intrinsic268939
-Node: ATan2 Intrinsic269405
-Node: BesJ0 Intrinsic269956
-Node: BesJ1 Intrinsic270417
-Node: BesJN Intrinsic270878
-Node: BesY0 Intrinsic271377
-Node: BesY1 Intrinsic271839
-Node: BesYN Intrinsic272301
-Node: Bit_Size Intrinsic272804
-Node: BTest Intrinsic273463
-Node: CAbs Intrinsic274183
-Node: CCos Intrinsic274570
-Node: Ceiling Intrinsic274962
-Node: CExp Intrinsic275284
-Node: Char Intrinsic275676
-Node: ChDir Intrinsic (subroutine)276930
-Node: ChMod Intrinsic (subroutine)277739
-Node: CLog Intrinsic279008
-Node: Cmplx Intrinsic279412
-Node: Complex Intrinsic280213
-Node: Conjg Intrinsic281659
-Node: Cos Intrinsic282083
-Node: CosH Intrinsic282546
-Node: Count Intrinsic282921
-Node: Cpu_Time Intrinsic283239
-Node: CShift Intrinsic283702
-Node: CSin Intrinsic284024
-Node: CSqRt Intrinsic284416
-Node: CTime Intrinsic (subroutine)284826
-Node: CTime Intrinsic (function)285581
-Node: DAbs Intrinsic286215
-Node: DACos Intrinsic286611
-Node: DASin Intrinsic287002
-Node: DATan Intrinsic287394
-Node: DATan2 Intrinsic287787
-Node: Date_and_Time Intrinsic288242
-Node: DbesJ0 Intrinsic288592
-Node: DbesJ1 Intrinsic288985
-Node: DbesJN Intrinsic289371
-Node: DbesY0 Intrinsic289795
-Node: DbesY1 Intrinsic290181
-Node: DbesYN Intrinsic290567
-Node: Dble Intrinsic290989
-Node: DCos Intrinsic291695
-Node: DCosH Intrinsic292079
-Node: DDiM Intrinsic292469
-Node: DErF Intrinsic292901
-Node: DErFC Intrinsic293270
-Node: DExp Intrinsic293645
-Node: Digits Intrinsic294031
-Node: DiM Intrinsic294348
-Node: DInt Intrinsic294847
-Node: DLog Intrinsic295231
-Node: DLog10 Intrinsic295616
-Node: DMax1 Intrinsic296014
-Node: DMin1 Intrinsic296468
-Node: DMod Intrinsic296920
-Node: DNInt Intrinsic297348
-Node: Dot_Product Intrinsic297747
-Node: DProd Intrinsic298087
-Node: DSign Intrinsic298469
-Node: DSin Intrinsic298908
-Node: DSinH Intrinsic299293
-Node: DSqRt Intrinsic299684
-Node: DTan Intrinsic300075
-Node: DTanH Intrinsic300460
-Node: Dtime Intrinsic (subroutine)300864
-Node: EOShift Intrinsic301799
-Node: Epsilon Intrinsic302138
-Node: ErF Intrinsic302462
-Node: ErFC Intrinsic302868
-Node: ETime Intrinsic (subroutine)303426
-Node: ETime Intrinsic (function)304253
-Node: Exit Intrinsic304957
-Node: Exp Intrinsic305434
-Node: Exponent Intrinsic305896
-Node: Fdate Intrinsic (subroutine)306235
-Node: Fdate Intrinsic (function)306923
-Node: FGet Intrinsic (subroutine)307473
-Node: FGetC Intrinsic (subroutine)308310
-Node: Float Intrinsic309187
-Node: Floor Intrinsic309587
-Node: Flush Intrinsic309903
-Node: FNum Intrinsic310482
-Node: FPut Intrinsic (subroutine)310930
-Node: FPutC Intrinsic (subroutine)311727
-Node: Fraction Intrinsic312574
-Node: FSeek Intrinsic312915
-Node: FStat Intrinsic (subroutine)313640
-Node: FStat Intrinsic (function)315109
-Node: FTell Intrinsic (subroutine)316343
-Node: FTell Intrinsic (function)317016
-Node: GError Intrinsic317533
-Node: GetArg Intrinsic317907
-Node: GetCWD Intrinsic (subroutine)318543
-Node: GetCWD Intrinsic (function)319399
-Node: GetEnv Intrinsic320019
-Node: GetGId Intrinsic320606
-Node: GetLog Intrinsic320912
-Node: GetPId Intrinsic321236
-Node: GetUId Intrinsic321544
-Node: GMTime Intrinsic321849
-Node: HostNm Intrinsic (subroutine)322857
-Node: HostNm Intrinsic (function)323729
-Node: Huge Intrinsic324354
-Node: IAbs Intrinsic324677
-Node: IAChar Intrinsic325068
-Node: IAnd Intrinsic325608
-Node: IArgC Intrinsic326096
-Node: IBClr Intrinsic326472
-Node: IBits Intrinsic326982
-Node: IBSet Intrinsic327696
-Node: IChar Intrinsic328197
-Node: IDate Intrinsic (UNIX)329416
-Node: IDiM Intrinsic329997
-Node: IDInt Intrinsic330446
-Node: IDNInt Intrinsic330839
-Node: IEOr Intrinsic331238
-Node: IErrNo Intrinsic331736
-Node: IFix Intrinsic332063
-Node: Imag Intrinsic332451
-Node: ImagPart Intrinsic333456
-Node: Index Intrinsic334482
-Node: Int Intrinsic335035
-Node: Int2 Intrinsic335750
-Node: Int8 Intrinsic336438
-Node: IOr Intrinsic337126
-Node: IRand Intrinsic337606
-Node: IsaTty Intrinsic338526
-Node: IShft Intrinsic338950
-Node: IShftC Intrinsic339800
-Node: ISign Intrinsic340728
-Node: ITime Intrinsic341178
-Node: Kill Intrinsic (subroutine)341580
-Node: Kind Intrinsic342417
-Node: LBound Intrinsic342742
-Node: Len Intrinsic343059
-Node: Len_Trim Intrinsic343695
-Node: LGe Intrinsic344107
-Node: LGt Intrinsic345520
-Node: Link Intrinsic (subroutine)346426
-Node: LLe Intrinsic347391
-Node: LLt Intrinsic348297
-Node: LnBlnk Intrinsic349192
-Node: Loc Intrinsic349595
-Node: Log Intrinsic350026
-Node: Log10 Intrinsic350606
-Node: Logical Intrinsic351179
-Node: Long Intrinsic351502
-Node: LShift Intrinsic352026
-Node: LStat Intrinsic (subroutine)353062
-Node: LStat Intrinsic (function)354818
-Node: LTime Intrinsic356325
-Node: MatMul Intrinsic357329
-Node: Max Intrinsic357647
-Node: Max0 Intrinsic358198
-Node: Max1 Intrinsic358649
-Node: MaxExponent Intrinsic359133
-Node: MaxLoc Intrinsic359473
-Node: MaxVal Intrinsic359800
-Node: MClock Intrinsic360122
-Node: MClock8 Intrinsic360849
-Node: Merge Intrinsic361567
-Node: Min Intrinsic361883
-Node: Min0 Intrinsic362434
-Node: Min1 Intrinsic362885
-Node: MinExponent Intrinsic363369
-Node: MinLoc Intrinsic363709
-Node: MinVal Intrinsic364036
-Node: Mod Intrinsic364355
-Node: Modulo Intrinsic364878
-Node: MvBits Intrinsic365197
-Node: Nearest Intrinsic366063
-Node: NInt Intrinsic366387
-Node: Not Intrinsic367225
-Node: Or Intrinsic367620
-Node: Pack Intrinsic368118
-Node: PError Intrinsic368428
-Node: Precision Intrinsic368882
-Node: Present Intrinsic369217
-Node: Product Intrinsic369547
-Node: Radix Intrinsic369873
-Node: Rand Intrinsic370190
-Node: Random_Number Intrinsic371077
-Node: Random_Seed Intrinsic371430
-Node: Range Intrinsic371778
-Node: Real Intrinsic372099
-Node: RealPart Intrinsic373105
-Node: Rename Intrinsic (subroutine)374138
-Node: Repeat Intrinsic375110
-Node: Reshape Intrinsic375446
-Node: RRSpacing Intrinsic375775
-Node: RShift Intrinsic376110
-Node: Scale Intrinsic377108
-Node: Scan Intrinsic377424
-Node: Second Intrinsic (function)377748
-Node: Second Intrinsic (subroutine)378288
-Node: Selected_Int_Kind Intrinsic378934
-Node: Selected_Real_Kind Intrinsic379325
-Node: Set_Exponent Intrinsic379712
-Node: Shape Intrinsic380069
-Node: Short Intrinsic380392
-Node: Sign Intrinsic381088
-Node: Signal Intrinsic (subroutine)381688
-Node: Sin Intrinsic382987
-Node: SinH Intrinsic383462
-Node: Sleep Intrinsic383835
-Node: Sngl Intrinsic384177
-Node: Spacing Intrinsic384566
-Node: Spread Intrinsic384890
-Node: SqRt Intrinsic385211
-Node: SRand Intrinsic385815
-Node: Stat Intrinsic (subroutine)386192
-Node: Stat Intrinsic (function)387751
-Node: Sum Intrinsic389059
-Node: SymLnk Intrinsic (subroutine)389391
-Node: System Intrinsic (subroutine)390423
-Node: System_Clock Intrinsic391362
-Node: Tan Intrinsic392130
-Node: TanH Intrinsic392590
-Node: Time Intrinsic (UNIX)392972
-Node: Time8 Intrinsic393786
-Node: Tiny Intrinsic394499
-Node: Transfer Intrinsic394814
-Node: Transpose Intrinsic395145
-Node: Trim Intrinsic395479
-Node: TtyNam Intrinsic (subroutine)395809
-Node: TtyNam Intrinsic (function)396508
-Node: UBound Intrinsic397077
-Node: UMask Intrinsic (subroutine)397422
-Node: Unlink Intrinsic (subroutine)398119
-Node: Unpack Intrinsic399017
-Node: Verify Intrinsic399352
-Node: XOr Intrinsic399671
-Node: ZAbs Intrinsic400187
-Node: ZCos Intrinsic400556
-Node: ZExp Intrinsic400929
-Node: ZLog Intrinsic401302
-Node: ZSin Intrinsic401675
-Node: ZSqRt Intrinsic402049
-Node: Scope and Classes of Names402406
-Node: Underscores in Symbol Names402876
-Node: Other Dialects403123
-Node: Source Form404282
-Node: Carriage Returns405633
-Node: Tabs405962
-Node: Short Lines407671
-Node: Long Lines408645
-Node: Ampersands409256
-Node: Trailing Comment409510
-Node: Debug Line410286
-Node: Dollar Signs410955
-Node: Case Sensitivity411241
-Node: VXT Fortran419857
-Node: Double Quote Meaning421040
-Node: Exclamation Point421968
-Node: Fortran 90423011
-Node: Pedantic Compilation424063
-Node: Distensions428027
-Node: Ugly Implicit Argument Conversion429558
-Node: Ugly Assumed-Size Arrays430172
-Node: Ugly Complex Part Extraction431893
-Node: Ugly Null Arguments433515
-Node: Ugly Conversion of Initializers435120
-Node: Ugly Integer Conversions436885
-Node: Ugly Assigned Labels437993
-Node: Compiler439924
-Node: Compiler Limits440530
-Node: Compiler Types441413
-Node: Compiler Constants446112
-Node: Compiler Intrinsics446971
-Node: Intrinsic Groups447898
-Node: Other Intrinsics451339
-Node: ACosD Intrinsic458937
-Node: AIMax0 Intrinsic459218
-Node: AIMin0 Intrinsic459527
-Node: AJMax0 Intrinsic459837
-Node: AJMin0 Intrinsic460147
-Node: ASinD Intrinsic460456
-Node: ATan2D Intrinsic460762
-Node: ATanD Intrinsic461070
-Node: BITest Intrinsic461376
-Node: BJTest Intrinsic461685
-Node: CDAbs Intrinsic461994
-Node: CDCos Intrinsic462367
-Node: CDExp Intrinsic462742
-Node: CDLog Intrinsic463117
-Node: CDSin Intrinsic463492
-Node: CDSqRt Intrinsic463868
-Node: ChDir Intrinsic (function)464261
-Node: ChMod Intrinsic (function)464895
-Node: CosD Intrinsic466007
-Node: DACosD Intrinsic466319
-Node: DASinD Intrinsic466627
-Node: DATan2D Intrinsic466938
-Node: DATanD Intrinsic467252
-Node: Date Intrinsic467561
-Node: DbleQ Intrinsic468190
-Node: DCmplx Intrinsic468494
-Node: DConjg Intrinsic470125
-Node: DCosD Intrinsic470510
-Node: DFloat Intrinsic470816
-Node: DFlotI Intrinsic471188
-Node: DFlotJ Intrinsic471498
-Node: DImag Intrinsic471807
-Node: DReal Intrinsic472184
-Node: DSinD Intrinsic473331
-Node: DTanD Intrinsic473635
-Node: Dtime Intrinsic (function)473950
-Node: FGet Intrinsic (function)474844
-Node: FGetC Intrinsic (function)475617
-Node: FloatI Intrinsic476433
-Node: FloatJ Intrinsic476753
-Node: FPut Intrinsic (function)477072
-Node: FPutC Intrinsic (function)477808
-Node: IDate Intrinsic (VXT)478601
-Node: IIAbs Intrinsic479320
-Node: IIAnd Intrinsic479630
-Node: IIBClr Intrinsic479935
-Node: IIBits Intrinsic480244
-Node: IIBSet Intrinsic480554
-Node: IIDiM Intrinsic480863
-Node: IIDInt Intrinsic481169
-Node: IIDNnt Intrinsic481478
-Node: IIEOr Intrinsic481787
-Node: IIFix Intrinsic482092
-Node: IInt Intrinsic482395
-Node: IIOr Intrinsic482694
-Node: IIQint Intrinsic482994
-Node: IIQNnt Intrinsic483302
-Node: IIShftC Intrinsic483613
-Node: IISign Intrinsic483927
-Node: IMax0 Intrinsic484237
-Node: IMax1 Intrinsic484542
-Node: IMin0 Intrinsic484846
-Node: IMin1 Intrinsic485150
-Node: IMod Intrinsic485453
-Node: INInt Intrinsic485753
-Node: INot Intrinsic486055
-Node: IZExt Intrinsic486355
-Node: JIAbs Intrinsic486658
-Node: JIAnd Intrinsic486962
-Node: JIBClr Intrinsic487267
-Node: JIBits Intrinsic487576
-Node: JIBSet Intrinsic487886
-Node: JIDiM Intrinsic488195
-Node: JIDInt Intrinsic488501
-Node: JIDNnt Intrinsic488810
-Node: JIEOr Intrinsic489119
-Node: JIFix Intrinsic489424
-Node: JInt Intrinsic489727
-Node: JIOr Intrinsic490026
-Node: JIQint Intrinsic490326
-Node: JIQNnt Intrinsic490634
-Node: JIShft Intrinsic490944
-Node: JIShftC Intrinsic491255
-Node: JISign Intrinsic491569
-Node: JMax0 Intrinsic491879
-Node: JMax1 Intrinsic492184
-Node: JMin0 Intrinsic492488
-Node: JMin1 Intrinsic492792
-Node: JMod Intrinsic493095
-Node: JNInt Intrinsic493395
-Node: JNot Intrinsic493697
-Node: JZExt Intrinsic493997
-Node: Kill Intrinsic (function)494310
-Node: Link Intrinsic (function)494992
-Node: QAbs Intrinsic495804
-Node: QACos Intrinsic496114
-Node: QACosD Intrinsic496418
-Node: QASin Intrinsic496726
-Node: QASinD Intrinsic497032
-Node: QATan Intrinsic497340
-Node: QATan2 Intrinsic497646
-Node: QATan2D Intrinsic497956
-Node: QATanD Intrinsic498270
-Node: QCos Intrinsic498579
-Node: QCosD Intrinsic498880
-Node: QCosH Intrinsic499183
-Node: QDiM Intrinsic499486
-Node: QExp Intrinsic499785
-Node: QExt Intrinsic500083
-Node: QExtD Intrinsic500382
-Node: QFloat Intrinsic500686
-Node: QInt Intrinsic500993
-Node: QLog Intrinsic501293
-Node: QLog10 Intrinsic501593
-Node: QMax1 Intrinsic501900
-Node: QMin1 Intrinsic502205
-Node: QMod Intrinsic502508
-Node: QNInt Intrinsic502808
-Node: QSin Intrinsic503110
-Node: QSinD Intrinsic503410
-Node: QSinH Intrinsic503713
-Node: QSqRt Intrinsic504017
-Node: QTan Intrinsic504320
-Node: QTanD Intrinsic504620
-Node: QTanH Intrinsic504923
-Node: Rename Intrinsic (function)505239
-Node: Secnds Intrinsic506044
-Node: Signal Intrinsic (function)506419
-Node: SinD Intrinsic507530
-Node: SnglQ Intrinsic507842
-Node: SymLnk Intrinsic (function)508157
-Node: System Intrinsic (function)509025
-Node: TanD Intrinsic510352
-Node: Time Intrinsic (VXT)510669
-Node: UMask Intrinsic (function)511200
-Node: Unlink Intrinsic (function)511808
-Node: ZExt Intrinsic512537
-Node: Other Compilers512825
-Node: Dropping f2c Compatibility515205
-Node: Compilers Other Than f2c518031
-Node: Other Languages519830
-Node: Interoperating with C and C++520082
-Node: C Interfacing Tools521115
-Node: C Access to Type Information522043
-Node: f2c Skeletons and Prototypes522730
-Node: C++ Considerations524428
-Node: Startup Code525083
-Node: Installation525994
-Node: Prerequisites527150
-Node: Problems Installing535614
-Node: General Problems536240
-Node: GNU C Required537003
-Node: Patching GNU CC Necessary537704
-Node: Building GNU CC Necessary538554
-Node: Missing strtoul538900
-Node: Object File Differences540314
-Node: Cleanup Kills Stage Directories541011
-Node: Missing gperf?541431
-Node: Cross-compiler Problems542819
-Node: Settings545024
-Node: Larger File Unit Numbers546102
-Node: Always Flush Output547685
-Node: Maximum Stackable Size549545
-Node: Floating-point Bit Patterns550401
-Node: Large Initialization551142
-Node: Alpha Problems Fixed552731
-Node: Quick Start553618
-Node: Complete Installation564031
-Node: Unpacking564611
-Node: Merging Distributions567700
-Node: Installing f77573149
-Node: Installing f2c574494
-Node: Patching GNU Fortran577419
-Node: Where to Install578937
-Node: Configuring gcc582282
-Node: Building gcc584054
-Node: Bootstrap Build586061
-Node: Straight Build587807
-Node: Pre-installation Checks589196
-Node: Installation of Binaries592622
-Node: Updating Documentation593983
-Node: Missing bison?594837
-Node: Missing makeinfo?596183
-Node: Distributing Binaries596708
-Node: Debugging and Interfacing602653
-Node: Main Program Unit605337
-Node: Procedures607834
-Node: Functions610495
-Node: Names612113
-Node: Common Blocks615254
-Node: Local Equivalence Areas617287
-Node: Complex Variables619974
-Node: Arrays621304
-Node: Adjustable Arrays624638
-Node: Alternate Entry Points627497
-Node: Alternate Returns634199
-Node: Assigned Statement Labels635100
-Node: Run-time Library Errors636945
-Node: Collected Fortran Wisdom638897
-Node: Advantages Over f2c640333
-Node: Language Extensions641242
-Node: Compiler Options641749
-Node: Compiler Speed642201
-Node: Program Speed642911
-Node: Ease of Debugging644496
-Node: Character and Hollerith Constants646926
-Node: Block Data and Libraries647720
-Node: Loops651044
-Node: Working Programs656260
-Node: Not My Type656940
-Node: Variables Assumed To Be Zero658871
-Node: Variables Assumed To Be Saved659925
-Node: Unwanted Variables661295
-Node: Unused Arguments662175
-Node: Surprising Interpretations of Code662638
-Node: Aliasing Assumed To Work663484
-Node: Output Assumed To Flush669400
-Node: Large File Unit Numbers670806
-Node: Overly Convenient Options672088
-Node: Faster Programs675698
-Node: Aligned Data676144
-Node: Prefer Automatic Uninitialized Variables679988
-Node: Avoid f2c Compatibility681354
-Node: Use Submodel Options681822
-Node: Trouble682645
-Node: But-bugs684261
-Node: Signal 11 and Friends686035
-Node: Cannot Link Fortran Programs688114
-Node: Large Common Blocks689397
-Node: Debugger Problems689823
-Node: NeXTStep Problems690345
-Node: Stack Overflow692167
-Node: Nothing Happens694180
-Node: Strange Behavior at Run Time695794
-Node: Floating-point Errors698087
-Node: Actual Bugs702664
-Node: Missing Features713415
-Node: Better Source Model715132
-Node: Fortran 90 Support716901
-Node: Intrinsics in PARAMETER Statements718002
-Node: SELECT CASE on CHARACTER Type718888
-Node: RECURSIVE Keyword719186
-Node: Increasing Precision/Range719613
-Node: Popular Non-standard Types721150
-Node: Full Support for Compiler Types721567
-Node: Array Bounds Expressions722239
-Node: POINTER Statements722686
-Node: Sensible Non-standard Constructs723569
-Node: FLUSH Statement725894
-Node: Expressions in FORMAT Statements726280
-Node: Explicit Assembler Code727459
-Node: Q Edit Descriptor727748
-Node: Old-style PARAMETER Statements728252
-Node: TYPE and ACCEPT I/O Statements728986
-Node: STRUCTURE UNION RECORD MAP729552
-Node: OPEN CLOSE and INQUIRE Keywords730038
-Node: ENCODE and DECODE730470
-Node: Suppressing Space Padding731571
-Node: Fortran Preprocessor732797
-Node: Bit Operations on Floating-point Data733370
-Node: POSIX Standard733884
-Node: Floating-point Exception Handling734128
-Node: Nonportable Conversions735170
-Node: Large Automatic Arrays735706
-Node: Support for Threads736113
-Node: Gracefully Handle Sensible Bad Code736538
-Node: Non-standard Conversions737293
-Node: Non-standard Intrinsics737636
-Node: Modifying DO Variable738052
-Node: Better Pedantic Compilation738728
-Node: Warn About Implicit Conversions739356
-Node: Invalid Use of Hollerith Constant739943
-Node: Dummy Array Without Dimensioning Dummy740486
-Node: Invalid FORMAT Specifiers741399
-Node: Ambiguous Dialects741800
-Node: Unused Labels742211
-Node: Informational Messages742433
-Node: Uninitialized Variables at Run Time742836
-Node: Bounds Checking at Run Time743443
-Node: Labels Visible to Debugger743891
-Node: Disappointments744297
-Node: Mangling of Names744935
-Node: Multiple Definitions of External Names745785
-Node: Limitation on Implicit Declarations747148
-Node: Non-bugs747432
-Node: Backslash in Constants748557
-Node: Initializing Before Specifying753446
-Node: Context-Sensitive Intrinsicness754588
-Node: Context-Sensitive Constants756484
-Node: Equivalence Versus Equality759441
-Node: Order of Side Effects761951
-Node: Warnings and Errors763679
-Node: Open Questions765363
-Node: Bugs766511
-Node: Bug Criteria768016
-Node: Bug Lists772439
-Node: Bug Reporting773211
-Node: Sending Patches786658
-Node: Service792142
-Node: Adding Options792610
-Node: Projects796659
-Node: Efficiency797504
-Node: Better Optimization800401
-Node: Simplify Porting803771
-Node: More Extensions805526
-Node: Machine Model808727
-Node: Internals Documentation810013
-Node: Internals Improvements810327
-Node: Better Diagnostics813871
-Node: Diagnostics814788
-Node: CMPAMBIG816085
-Node: EXPIMP822559
-Node: INTGLOB823795
-Node: LEX826039
-Node: GLOBALS831431
-Node: Index833284
-
-End Tag Table
diff --git a/gcc/f/g77.info-1 b/gcc/f/g77.info-1
deleted file mode 100644
index 87ee3cc70f9..00000000000
--- a/gcc/f/g77.info-1
+++ /dev/null
@@ -1,1073 +0,0 @@
-This is Info file g77.info, produced by Makeinfo version 1.68 from the
-input file g77.texi.
-
- This file explains how to use the GNU Fortran system.
-
- Published by the Free Software Foundation 59 Temple Place - Suite 330
-Boston, MA 02111-1307 USA
-
- Copyright (C) 1995-1997 Free Software Foundation, Inc.
-
- Permission is granted to make and distribute verbatim copies of this
-manual provided the copyright notice and this permission notice are
-preserved on all copies.
-
- Permission is granted to copy and distribute modified versions of
-this manual under the conditions for verbatim copying, provided also
-that the sections entitled "GNU General Public License," "Funding for
-Free Software," and "Protect Your Freedom--Fight `Look And Feel'" are
-included exactly as in the original, and provided that the entire
-resulting derived work is distributed under the terms of a permission
-notice identical to this one.
-
- Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that the sections entitled "GNU General Public
-License," "Funding for Free Software," and "Protect Your Freedom--Fight
-`Look And Feel'", and this permission notice, may be included in
-translations approved by the Free Software Foundation instead of in the
-original English.
-
- Contributed by James Craig Burley (<burley@gnu.ai.mit.edu>).
-Inspired by a first pass at translating `g77-0.5.16/f/DOC' that was
-contributed to Craig by David Ronis (<ronis@onsager.chem.mcgill.ca>).
-
-INFO-DIR-SECTION Fortran Programming
-START-INFO-DIR-ENTRY
-* g77: (g77). The GNU Fortran compilation system.
-END-INFO-DIR-ENTRY
-
-
-File: g77.info, Node: Top, Next: Copying, Up: (DIR)
-
-Introduction
-************
-
- This manual documents how to run, install and port the GNU Fortran
-compiler, as well as its new features and incompatibilities, and how to
-report bugs. It corresponds to GNU Fortran version 0.5.21.
-
-* Menu:
-
-* Copying:: GNU General Public License says
- how you can copy and share GNU Fortran.
-* Contributors:: People who have contributed to GNU Fortran.
-* Funding:: How to help assure continued work for free software.
-* Funding GNU Fortran:: How to help assure continued work on GNU Fortran.
-* Look and Feel:: Protect your freedom--fight "look and feel".
-
-* Getting Started:: Finding your way around this manual.
-* What is GNU Fortran?:: How `g77' fits into the universe.
-* G77 and GCC:: You can compile Fortran, C, or other programs.
-* Invoking G77:: Command options supported by `g77'.
-* News:: News about recent releases of `g77'.
-* Changes:: User-visible changes to recent releases of `g77'.
-* Language:: The GNU Fortran language.
-* Compiler:: The GNU Fortran compiler.
-* Other Dialects:: Dialects of Fortran supported by `g77'.
-* Other Compilers:: Fortran compilers other than `g77'.
-* Other Languages:: Languages other than Fortran.
-* Installation:: How to configure, compile and install GNU Fortran.
-* Debugging and Interfacing:: How `g77' generates code.
-* Collected Fortran Wisdom:: How to avoid Trouble.
-* Trouble:: If you have trouble with GNU Fortran.
-* Open Questions:: Things we'd like to know.
-* Bugs:: How, why, and where to report bugs.
-* Service:: How to find suppliers of support for GNU Fortran.
-
-* Adding Options:: Guidance on teaching `g77' about new options.
-* Projects:: Projects for `g77' internals hackers.
-
-* M: Diagnostics. Diagnostics produced by `g77'.
-
-* Index:: Index of concepts and symbol names.
-
-
-File: g77.info, Node: Copying, Next: Contributors, Prev: Top, Up: Top
-
-GNU GENERAL PUBLIC LICENSE
-**************************
-
- Version 2, June 1991
-
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.
- 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
-
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-Preamble
-========
-
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-License is intended to guarantee your freedom to share and change free
-software--to make sure the software is free for all its users. This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it. (Some other Free Software Foundation software is covered by
-the GNU Library General Public License instead.) You can apply it to
-your programs, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it in
-new free programs; and that you know you can do these things.
-
- To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
-
- For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have. You must make sure that they, too, receive or can get the
-source code. And you must show them these terms so they know their
-rights.
-
- We protect your rights with two steps: (1) copyright the software,
-and (2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software.
-
- Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software. If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations.
-
- Finally, any free program is threatened constantly by software
-patents. We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary. To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
-
- The precise terms and conditions for copying, distribution and
-modification follow.
-
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. This License applies to any program or other work which contains a
- notice placed by the copyright holder saying it may be distributed
- under the terms of this General Public License. The "Program",
- below, refers to any such program or work, and a "work based on
- the Program" means either the Program or any derivative work under
- copyright law: that is to say, a work containing the Program or a
- portion of it, either verbatim or with modifications and/or
- translated into another language. (Hereinafter, translation is
- included without limitation in the term "modification".) Each
- licensee is addressed as "you".
-
- Activities other than copying, distribution and modification are
- not covered by this License; they are outside its scope. The act
- of running the Program is not restricted, and the output from the
- Program is covered only if its contents constitute a work based on
- the Program (independent of having been made by running the
- Program). Whether that is true depends on what the Program does.
-
- 1. You may copy and distribute verbatim copies of the Program's
- source code as you receive it, in any medium, provided that you
- conspicuously and appropriately publish on each copy an appropriate
- copyright notice and disclaimer of warranty; keep intact all the
- notices that refer to this License and to the absence of any
- warranty; and give any other recipients of the Program a copy of
- this License along with the Program.
-
- You may charge a fee for the physical act of transferring a copy,
- and you may at your option offer warranty protection in exchange
- for a fee.
-
- 2. You may modify your copy or copies of the Program or any portion
- of it, thus forming a work based on the Program, and copy and
- distribute such modifications or work under the terms of Section 1
- above, provided that you also meet all of these conditions:
-
- a. You must cause the modified files to carry prominent notices
- stating that you changed the files and the date of any change.
-
- b. You must cause any work that you distribute or publish, that
- in whole or in part contains or is derived from the Program
- or any part thereof, to be licensed as a whole at no charge
- to all third parties under the terms of this License.
-
- c. If the modified program normally reads commands interactively
- when run, you must cause it, when started running for such
- interactive use in the most ordinary way, to print or display
- an announcement including an appropriate copyright notice and
- a notice that there is no warranty (or else, saying that you
- provide a warranty) and that users may redistribute the
- program under these conditions, and telling the user how to
- view a copy of this License. (Exception: if the Program
- itself is interactive but does not normally print such an
- announcement, your work based on the Program is not required
- to print an announcement.)
-
- These requirements apply to the modified work as a whole. If
- identifiable sections of that work are not derived from the
- Program, and can be reasonably considered independent and separate
- works in themselves, then this License, and its terms, do not
- apply to those sections when you distribute them as separate
- works. But when you distribute the same sections as part of a
- whole which is a work based on the Program, the distribution of
- the whole must be on the terms of this License, whose permissions
- for other licensees extend to the entire whole, and thus to each
- and every part regardless of who wrote it.
-
- Thus, it is not the intent of this section to claim rights or
- contest your rights to work written entirely by you; rather, the
- intent is to exercise the right to control the distribution of
- derivative or collective works based on the Program.
-
- In addition, mere aggregation of another work not based on the
- Program with the Program (or with a work based on the Program) on
- a volume of a storage or distribution medium does not bring the
- other work under the scope of this License.
-
- 3. You may copy and distribute the Program (or a work based on it,
- under Section 2) in object code or executable form under the terms
- of Sections 1 and 2 above provided that you also do one of the
- following:
-
- a. Accompany it with the complete corresponding machine-readable
- source code, which must be distributed under the terms of
- Sections 1 and 2 above on a medium customarily used for
- software interchange; or,
-
- b. Accompany it with a written offer, valid for at least three
- years, to give any third party, for a charge no more than your
- cost of physically performing source distribution, a complete
- machine-readable copy of the corresponding source code, to be
- distributed under the terms of Sections 1 and 2 above on a
- medium customarily used for software interchange; or,
-
- c. Accompany it with the information you received as to the offer
- to distribute corresponding source code. (This alternative is
- allowed only for noncommercial distribution and only if you
- received the program in object code or executable form with
- such an offer, in accord with Subsection b above.)
-
- The source code for a work means the preferred form of the work for
- making modifications to it. For an executable work, complete
- source code means all the source code for all modules it contains,
- plus any associated interface definition files, plus the scripts
- used to control compilation and installation of the executable.
- However, as a special exception, the source code distributed need
- not include anything that is normally distributed (in either
- source or binary form) with the major components (compiler,
- kernel, and so on) of the operating system on which the executable
- runs, unless that component itself accompanies the executable.
-
- If distribution of executable or object code is made by offering
- access to copy from a designated place, then offering equivalent
- access to copy the source code from the same place counts as
- distribution of the source code, even though third parties are not
- compelled to copy the source along with the object code.
-
- 4. You may not copy, modify, sublicense, or distribute the Program
- except as expressly provided under this License. Any attempt
- otherwise to copy, modify, sublicense or distribute the Program is
- void, and will automatically terminate your rights under this
- License. However, parties who have received copies, or rights,
- from you under this License will not have their licenses
- terminated so long as such parties remain in full compliance.
-
- 5. You are not required to accept this License, since you have not
- signed it. However, nothing else grants you permission to modify
- or distribute the Program or its derivative works. These actions
- are prohibited by law if you do not accept this License.
- Therefore, by modifying or distributing the Program (or any work
- based on the Program), you indicate your acceptance of this
- License to do so, and all its terms and conditions for copying,
- distributing or modifying the Program or works based on it.
-
- 6. Each time you redistribute the Program (or any work based on the
- Program), the recipient automatically receives a license from the
- original licensor to copy, distribute or modify the Program
- subject to these terms and conditions. You may not impose any
- further restrictions on the recipients' exercise of the rights
- granted herein. You are not responsible for enforcing compliance
- by third parties to this License.
-
- 7. If, as a consequence of a court judgment or allegation of patent
- infringement or for any other reason (not limited to patent
- issues), conditions are imposed on you (whether by court order,
- agreement or otherwise) that contradict the conditions of this
- License, they do not excuse you from the conditions of this
- License. If you cannot distribute so as to satisfy simultaneously
- your obligations under this License and any other pertinent
- obligations, then as a consequence you may not distribute the
- Program at all. For example, if a patent license would not permit
- royalty-free redistribution of the Program by all those who
- receive copies directly or indirectly through you, then the only
- way you could satisfy both it and this License would be to refrain
- entirely from distribution of the Program.
-
- If any portion of this section is held invalid or unenforceable
- under any particular circumstance, the balance of the section is
- intended to apply and the section as a whole is intended to apply
- in other circumstances.
-
- It is not the purpose of this section to induce you to infringe any
- patents or other property right claims or to contest validity of
- any such claims; this section has the sole purpose of protecting
- the integrity of the free software distribution system, which is
- implemented by public license practices. Many people have made
- generous contributions to the wide range of software distributed
- through that system in reliance on consistent application of that
- system; it is up to the author/donor to decide if he or she is
- willing to distribute software through any other system and a
- licensee cannot impose that choice.
-
- This section is intended to make thoroughly clear what is believed
- to be a consequence of the rest of this License.
-
- 8. If the distribution and/or use of the Program is restricted in
- certain countries either by patents or by copyrighted interfaces,
- the original copyright holder who places the Program under this
- License may add an explicit geographical distribution limitation
- excluding those countries, so that distribution is permitted only
- in or among countries not thus excluded. In such case, this
- License incorporates the limitation as if written in the body of
- this License.
-
- 9. The Free Software Foundation may publish revised and/or new
- versions of the General Public License from time to time. Such
- new versions will be similar in spirit to the present version, but
- may differ in detail to address new problems or concerns.
-
- Each version is given a distinguishing version number. If the
- Program specifies a version number of this License which applies
- to it and "any later version", you have the option of following
- the terms and conditions either of that version or of any later
- version published by the Free Software Foundation. If the Program
- does not specify a version number of this License, you may choose
- any version ever published by the Free Software Foundation.
-
- 10. If you wish to incorporate parts of the Program into other free
- programs whose distribution conditions are different, write to the
- author to ask for permission. For software which is copyrighted
- by the Free Software Foundation, write to the Free Software
- Foundation; we sometimes make exceptions for this. Our decision
- will be guided by the two goals of preserving the free status of
- all derivatives of our free software and of promoting the sharing
- and reuse of software generally.
-
- NO WARRANTY
-
- 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO
- WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE
- LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
- HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT
- WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT
- NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
- FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE
- QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
- PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY
- SERVICING, REPAIR OR CORRECTION.
-
- 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
- WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY
- MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE
- LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL,
- INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR
- INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
- DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU
- OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY
- OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN
- ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-
- END OF TERMS AND CONDITIONS
-
-How to Apply These Terms to Your New Programs
-=============================================
-
- If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these
-terms.
-
- To do so, attach the following notices to the program. It is safest
-to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
- ONE LINE TO GIVE THE PROGRAM'S NAME AND A BRIEF IDEA OF WHAT IT DOES.
- Copyright (C) 19YY NAME OF AUTHOR
-
- This program 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 of the License, or
- (at your option) any later version.
-
- This program 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 this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
- Also add information on how to contact you by electronic and paper
-mail.
-
- If the program is interactive, make it output a short notice like
-this when it starts in an interactive mode:
-
- Gnomovision version 69, Copyright (C) 19YY NAME OF AUTHOR
- Gnomovision comes with ABSOLUTELY NO WARRANTY; for details
- type `show w'.
- This is free software, and you are welcome to redistribute it
- under certain conditions; type `show c' for details.
-
- The hypothetical commands `show w' and `show c' should show the
-appropriate parts of the General Public License. Of course, the
-commands you use may be called something other than `show w' and `show
-c'; they could even be mouse-clicks or menu items--whatever suits your
-program.
-
- You should also get your employer (if you work as a programmer) or
-your school, if any, to sign a "copyright disclaimer" for the program,
-if necessary. Here is a sample; alter the names:
-
- Yoyodyne, Inc., hereby disclaims all copyright interest in the program
- `Gnomovision' (which makes passes at compilers) written by James Hacker.
-
- SIGNATURE OF TY COON, 1 April 1989
- Ty Coon, President of Vice
-
- This General Public License does not permit incorporating your
-program into proprietary programs. If your program is a subroutine
-library, you may consider it more useful to permit linking proprietary
-applications with the library. If this is what you want to do, use the
-GNU Library General Public License instead of this License.
-
-
-File: g77.info, Node: Contributors, Next: Funding, Prev: Copying, Up: Top
-
-Contributors to GNU Fortran
-***************************
-
- In addition to James Craig Burley, who wrote the front end, many
-people have helped create and improve GNU Fortran.
-
- * The packaging and compiler portions of GNU Fortran are based
- largely on the GNU CC compiler. *Note Contributors to GNU CC:
- (gcc)Contributors, for more information.
-
- * The run-time library used by GNU Fortran is a repackaged version
- of the `libf2c' library (combined from the `libF77' and `libI77'
- libraries) provided as part of `f2c', available for free from
- `netlib' sites on the Internet.
-
- * Cygnus Support and The Free Software Foundation contributed
- significant money and/or equipment to Craig's efforts.
-
- * The following individuals served as alpha testers prior to `g77''s
- public release. This work consisted of testing, researching,
- sometimes debugging, and occasionally providing small amounts of
- code and fixes for `g77', plus offering plenty of helpful advice
- to Craig:
-
- Jonathan Corbet
-
- Dr. Mark Fernyhough
-
- Takafumi Hayashi (The University of
- AIzu)--<takafumi@u-aizu.ac.jp>
-
- Kate Hedstrom
-
- Michel Kern (INRIA and Rice
- University)--<Michel.Kern@inria.fr>
-
- Dr. A. O. V. Le Blanc
-
- Dave Love
-
- Rick Lutowski
-
- Toon Moene
-
- Rick Niles
-
- Derk Reefman
-
- Wayne K. Schroll
-
- Bill Thorson
-
- Pedro A. M. Vazquez
-
- Ian Watson
-
- * Scott Snyder (<snyder@d0sgif.fnal.gov>) provided the patch to add
- rudimentary support for `INTEGER*1', `INTEGER*2', and `LOGICAL*1'.
- This inspired Craig to add further support, even though the
- resulting support would still be incomplete, because version 0.6
- is still a ways off.
-
- * David Ronis (<ronis@onsager.chem.mcgill.ca>) inspired and
- encouraged Craig to rewrite the documentation in texinfo format by
- contributing a first pass at a translation of the old
- `g77-0.5.16/f/DOC' file.
-
- * Toon Moene (<toon@moene.indiv.nluug.nl>) performed some analysis
- of generated code as part of an overall project to improve `g77'
- code generation to at least be as good as `f2c' used in
- conjunction with `gcc'. So far, this has resulted in the three,
- somewhat experimental, options added by `g77' to the `gcc'
- compiler and its back end.
-
- * John Carr (<jfc@mit.edu>) wrote the alias analysis improvements.
-
- * Thanks to Mary Cortani and the staff at Craftwork Solutions
- (<support@craftwork.com>) for all of their support.
-
- * Many other individuals have helped debug, test, and improve `g77'
- over the past several years, and undoubtedly more people will be
- doing so in the future. If you have done so, and would like to
- see your name listed in the above list, please ask! The default
- is that people wish to remain anonymous.
-
-
-File: g77.info, Node: Funding, Next: Funding GNU Fortran, Prev: Contributors, Up: Top
-
-Funding Free Software
-*********************
-
- If you want to have more free software a few years from now, it makes
-sense for you to help encourage people to contribute funds for its
-development. The most effective approach known is to encourage
-commercial redistributors to donate.
-
- Users of free software systems can boost the pace of development by
-encouraging for-a-fee distributors to donate part of their selling price
-to free software developers--the Free Software Foundation, and others.
-
- The way to convince distributors to do this is to demand it and
-expect it from them. So when you compare distributors, judge them
-partly by how much they give to free software development. Show
-distributors they must compete to be the one who gives the most.
-
- To make this approach work, you must insist on numbers that you can
-compare, such as, "We will donate ten dollars to the Frobnitz project
-for each disk sold." Don't be satisfied with a vague promise, such as
-"A portion of the profits are donated," since it doesn't give a basis
-for comparison.
-
- Even a precise fraction "of the profits from this disk" is not very
-meaningful, since creative accounting and unrelated business decisions
-can greatly alter what fraction of the sales price counts as profit.
-If the price you pay is $50, ten percent of the profit is probably less
-than a dollar; it might be a few cents, or nothing at all.
-
- Some redistributors do development work themselves. This is useful
-too; but to keep everyone honest, you need to inquire how much they do,
-and what kind. Some kinds of development make much more long-term
-difference than others. For example, maintaining a separate version of
-a program contributes very little; maintaining the standard version of a
-program for the whole community contributes much. Easy new ports
-contribute little, since someone else would surely do them; difficult
-ports such as adding a new CPU to the GNU C compiler contribute more;
-major new features or packages contribute the most.
-
- By establishing the idea that supporting further development is "the
-proper thing to do" when distributing free software for a fee, we can
-assure a steady flow of resources into making more free software.
-
- Copyright (C) 1994 Free Software Foundation, Inc.
- Verbatim copying and redistribution of this section is permitted
- without royalty; alteration is not permitted.
-
-
-File: g77.info, Node: Funding GNU Fortran, Next: Look and Feel, Prev: Funding, Up: Top
-
-Funding GNU Fortran
-*******************
-
- Work on GNU Fortran is still being done mostly by its author, James
-Craig Burley (<burley@gnu.ai.mit.edu>), who is a volunteer for, not an
-employee of, the Free Software Foundation (FSF). As with other GNU
-software, funding is important because it can pay for needed equipment,
-personnel, and so on.
-
- The FSF provides information on the best way to fund ongoing
-development of GNU software (such as GNU Fortran) in documents such as
-the "GNUS Bulletin". Email <gnu@prep.ai.mit.edu> for information on
-funding the FSF.
-
- To fund specific GNU Fortran work in particular, the FSF might
-provide a means for that, but the FSF does not provide direct funding
-to the author of GNU Fortran to continue his work. The FSF has
-employee salary restrictions that can be incompatible with the
-financial needs of some volunteers, who therefore choose to remain
-volunteers and thus be able to be free to do contract work and
-otherwise make their own schedules for doing GNU work.
-
- Still, funding the FSF at least indirectly benefits work on specific
-projects like GNU Fortran because it ensures the continuing operation
-of the FSF offices, their workstations, their network connections, and
-so on, which are invaluable to volunteers. (Similarly, hiring Cygnus
-Support can help a project like GNU Fortran--Cygnus has been a
-long-time donor of equipment usage to the author of GNU Fortran, and
-this too has been invaluable--*Note Contributors::.)
-
- Currently, the only way to directly fund the author of GNU Fortran
-in his work on that project is to hire him for the work you want him to
-do, or donate money to him. Several people have done this already,
-with the result that he has not needed to immediately find contract
-work on a few occasions. If more people did this, he would be able to
-plan on not doing contract work for many months and could thus devote
-that time to work on projects (such as the planned changes for 0.6)
-that require longer timeframes to complete. For the latest information
-on the status of the author, do `finger -l burley@gate.gnu.ai.mit.edu'
-on a UNIX system (or any system with a command like UNIX `finger').
-
- Another important way to support work on GNU Fortran is to volunteer
-to help out. Work is needed on documentation, testing, porting to
-various machines, and in some cases, coding (although major changes
-planned for version 0.6 make it difficult to add manpower to this area).
-Email <fortran@gnu.ai.mit.edu> to volunteer for this work.
-
- *Note Funding Free Software: Funding, for more information.
-
-
-File: g77.info, Node: Look and Feel, Next: Getting Started, Prev: Funding GNU Fortran, Up: Top
-
-Protect Your Freedom--Fight "Look And Feel"
-*******************************************
-
- To preserve the ability to write free software, including
-replacements for proprietary software, authors must be free to
-replicate the user interface to which users of existing software have
-become accustomed.
-
- *Note Protect Your Freedom--Fight "Look And Feel": (gcc)Look and
-Feel, for more information.
-
-
-File: g77.info, Node: Getting Started, Next: What is GNU Fortran?, Prev: Look and Feel, Up: Top
-
-Getting Started
-***************
-
- If you don't need help getting started reading the portions of this
-manual that are most important to you, you should skip this portion of
-the manual.
-
- If you are new to compilers, especially Fortran compilers, or new to
-how compilers are structured under UNIX and UNIX-like systems, you'll
-want to see *Note What is GNU Fortran?::.
-
- If you are new to GNU compilers, or have used only one GNU compiler
-in the past and not had to delve into how it lets you manage various
-versions and configurations of `gcc', you should see *Note G77 and
-GCC::.
-
- Everyone except experienced `g77' users should see *Note Invoking
-G77::.
-
- If you're acquainted with previous versions of `g77', you should see
-*Note News::. Further, if you've actually used previous versions of
-`g77', especially if you've written or modified Fortran code to be
-compiled by previous versions of `g77', you should see *Note Changes::.
-
- If you intend to write or otherwise compile code that is not already
-strictly conforming ANSI FORTRAN 77--and this is probably everyone--you
-should see *Note Language::.
-
- If you don't already have `g77' installed on your system, you must
-see *Note Installation::.
-
- If you run into trouble getting Fortran code to compile, link, run,
-or work properly, you might find answers if you see *Note Debugging and
-Interfacing::, see *Note Collected Fortran Wisdom::, and see *Note
-Trouble::. You might also find that the problems you are encountering
-are bugs in `g77'--see *Note Bugs::, for information on reporting them,
-after reading the other material.
-
- If you need further help with `g77', or with freely redistributable
-software in general, see *Note Service::.
-
- If you would like to help the `g77' project, see *Note Funding GNU
-Fortran::, for information on helping financially, and see *Note
-Projects::, for information on helping in other ways.
-
- If you're generally curious about the future of `g77', see *Note
-Projects::. If you're curious about its past, see *Note Contributors::,
-and see *Note Funding GNU Fortran::.
-
- To see a few of the questions maintainers of `g77' have, and that
-you might be able to answer, see *Note Open Questions::.
-
-
-File: g77.info, Node: What is GNU Fortran?, Next: G77 and GCC, Prev: Getting Started, Up: Top
-
-What is GNU Fortran?
-********************
-
- GNU Fortran, or `g77', is designed initially as a free replacement
-for, or alternative to, the UNIX `f77' command. (Similarly, `gcc' is
-designed as a replacement for the UNIX `cc' command.)
-
- `g77' also is designed to fit in well with the other fine GNU
-compilers and tools.
-
- Sometimes these design goals conflict--in such cases, resolution
-often is made in favor of fitting in well with Project GNU. These
-cases are usually identified in the appropriate sections of this manual.
-
- As compilers, `g77', `gcc', and `f77' share the following
-characteristics:
-
- * They read a user's program, stored in a file and containing
- instructions written in the appropriate language (Fortran, C, and
- so on). This file contains "source code".
-
- * They translate the user's program into instructions a computer can
- carry out more quickly than it takes to translate the instructions
- in the first place. These instructions are called "machine
- code"--code designed to be efficiently translated and processed by
- a machine such as a computer. Humans usually aren't as good
- writing machine code as they are at writing Fortran or C, because
- it is easy to make tiny mistakes writing machine code. When
- writing Fortran or C, it is easy to make big mistakes.
-
- * They provide information in the generated machine code that can
- make it easier to find bugs in the program (using a debugging
- tool, called a "debugger", such as `gdb').
-
- * They locate and gather machine code already generated to perform
- actions requested by statements in the user's program. This
- machine code is organized into "libraries" and is located and
- gathered during the "link" phase of the compilation process.
- (Linking often is thought of as a separate step, because it can be
- directly invoked via the `ld' command. However, the `g77' and
- `gcc' commands, as with most compiler commands, automatically
- perform the linking step by calling on `ld' directly, unless asked
- to not do so by the user.)
-
- * They attempt to diagnose cases where the user's program contains
- incorrect usages of the language. The "diagnostics" produced by
- the compiler indicate the problem and the location in the user's
- source file where the problem was first noticed. The user can use
- this information to locate and fix the problem. (Sometimes an
- incorrect usage of the language leads to a situation where the
- compiler can no longer make any sense of what follows--while a
- human might be able to--and thus ends up complaining about many
- "problems" it encounters that, in fact, stem from just one
- problem, usually the first one reported.)
-
- * They attempt to diagnose cases where the user's program contains a
- correct usage of the language, but instructs the computer to do
- something questionable. These diagnostics often are in the form
- of "warnings", instead of the "errors" that indicate incorrect
- usage of the language.
-
- How these actions are performed is generally under the control of
-the user. Using command-line options, the user can specify how
-persnickety the compiler is to be regarding the program (whether to
-diagnose questionable usage of the language), how much time to spend
-making the generated machine code run faster, and so on.
-
- `g77' consists of several components:
-
- * A modified version of the `gcc' command, which also might be
- installed as the system's `cc' command. (In many cases, `cc'
- refers to the system's "native" C compiler, which might be a
- non-GNU compiler, or an older version of `gcc' considered more
- stable or that is used to build the operating system kernel.)
-
- * The `g77' command itself, which also might be installed as the
- system's `f77' command.
-
- * The `libf2c' run-time library. This library contains the machine
- code needed to support capabilities of the Fortran language that
- are not directly provided by the machine code generated by the
- `g77' compilation phase.
-
- * The compiler itself, internally named `f771'.
-
- Note that `f771' does not generate machine code directly--it
- generates "assembly code" that is a more readable form of machine
- code, leaving the conversion to actual machine code to an
- "assembler", usually named `as'.
-
- `gcc' is often thought of as "the C compiler" only, but it does more
-than that. Based on command-line options and the names given for files
-on the command line, `gcc' determines which actions to perform,
-including preprocessing, compiling (in a variety of possible
-languages), assembling, and linking.
-
- For example, the command `gcc foo.c' "drives" the file `foo.c'
-through the preprocessor `cpp', then the C compiler (internally named
-`cc1'), then the assembler (usually `as'), then the linker (`ld'),
-producing an executable program named `a.out' (on UNIX systems).
-
- As another example, the command `gcc foo.cc' would do much the same
-as `gcc foo.c', but instead of using the C compiler named `cc1', `gcc'
-would use the C++ compiler (named `cc1plus').
-
- In a GNU Fortran installation, `gcc' recognizes Fortran source files
-by name just like it does C and C++ source files. It knows to use the
-Fortran compiler named `f771', instead of `cc1' or `cc1plus', to
-compile Fortran files.
-
- Non-Fortran-related operation of `gcc' is generally unaffected by
-installing the GNU Fortran version of `gcc'. However, without the
-installed version of `gcc' being the GNU Fortran version, `gcc' will
-not be able to compile and link Fortran programs--and since `g77' uses
-`gcc' to do most of the actual work, neither will `g77'!
-
- The `g77' command is essentially just a front-end for the `gcc'
-command. Fortran users will normally use `g77' instead of `gcc',
-because `g77' knows how to specify the libraries needed to link with
-Fortran programs (`libf2c' and `lm'). `g77' can still compile and link
-programs and source files written in other languages, just like `gcc'.
-
- The command `g77 -v' is a quick way to display lots of version
-information for the various programs used to compile a typical
-preprocessed Fortran source file--this produces much more output than
-`gcc -v' currently does. (If it produces an error message near the end
-of the output--diagnostics from the linker, usually `ld'--you might
-have an out-of-date `libf2c' that improperly handles complex
-arithmetic.) In the output of this command, the line beginning `GNU
-Fortran Front End' identifies the version number of GNU Fortran;
-immediately preceding that line is a line identifying the version of
-`gcc' with which that version of `g77' was built.
-
- The `libf2c' library is distributed with GNU Fortran for the
-convenience of its users, but is not part of GNU Fortran. It contains
-the procedures needed by Fortran programs while they are running.
-
- For example, while code generated by `g77' is likely to do
-additions, subtractions, and multiplications "in line"--in the actual
-compiled code--it is not likely to do trigonometric functions this way.
-
- Instead, operations like trigonometric functions are compiled by the
-`f771' compiler (invoked by `g77' when compiling Fortran code) into
-machine code that, when run, calls on functions in `libf2c', so
-`libf2c' must be linked with almost every useful program having any
-component compiled by GNU Fortran. (As mentioned above, the `g77'
-command takes care of all this for you.)
-
- The `f771' program represents most of what is unique to GNU Fortran.
-While much of the `libf2c' component is really part of `f2c', a free
-Fortran-to-C converter distributed by Bellcore (AT&T), plus `libU77',
-provided by Dave Love, and the `g77' command is just a small front-end
-to `gcc', `f771' is a combination of two rather large chunks of code.
-
- One chunk is the so-called "GNU Back End", or GBE, which knows how
-to generate fast code for a wide variety of processors. The same GBE
-is used by the C, C++, and Fortran compiler programs `cc1', `cc1plus',
-and `f771', plus others. Often the GBE is referred to as the "gcc back
-end" or even just "gcc"--in this manual, the term GBE is used whenever
-the distinction is important.
-
- The other chunk of `f771' is the majority of what is unique about
-GNU Fortran--the code that knows how to interpret Fortran programs to
-determine what they are intending to do, and then communicate that
-knowledge to the GBE for actual compilation of those programs. This
-chunk is called the "Fortran Front End" (FFE). The `cc1' and `cc1plus'
-programs have their own front ends, for the C and C++ languages,
-respectively. These fronts ends are responsible for diagnosing
-incorrect usage of their respective languages by the programs the
-process, and are responsible for most of the warnings about
-questionable constructs as well. (The GBE handles producing some
-warnings, like those concerning possible references to undefined
-variables.)
-
- Because so much is shared among the compilers for various languages,
-much of the behavior and many of the user-selectable options for these
-compilers are similar. For example, diagnostics (error messages and
-warnings) are similar in appearance; command-line options like `-Wall'
-have generally similar effects; and the quality of generated code (in
-terms of speed and size) is roughly similar (since that work is done by
-the shared GBE).
-
-
-File: g77.info, Node: G77 and GCC, Next: Invoking G77, Prev: What is GNU Fortran?, Up: Top
-
-Compile Fortran, C, or Other Programs
-*************************************
-
- A GNU Fortran installation includes a modified version of the `gcc'
-command.
-
- In a non-Fortran installation, `gcc' recognizes C, C++, and
-Objective-C source files.
-
- In a GNU Fortran installation, `gcc' also recognizes Fortran source
-files and accepts Fortran-specific command-line options, plus some
-command-line options that are designed to cater to Fortran users but
-apply to other languages as well.
-
- *Note Compile C; C++; or Objective-C: (gcc)G++ and GCC, for
-information on the way different languages are handled by the GNU CC
-compiler (`gcc').
-
- Also provided as part of GNU Fortran is the `g77' command. The
-`g77' command is designed to make compiling and linking Fortran
-programs somewhat easier than when using the `gcc' command for these
-tasks. It does this by analyzing the command line somewhat and
-changing it appropriately before submitting it to the `gcc' command.
-
- Use the `-v' option with `g77' to see what is going on--the first
-line of output is the invocation of the `gcc' command. Use
-`--driver=true' to disable actual invocation of `gcc' (this works
-because `true' is the name of a UNIX command that simply returns
-success status).
-
-
-File: g77.info, Node: Invoking G77, Next: News, Prev: G77 and GCC, Up: Top
-
-GNU Fortran Command Options
-***************************
-
- The `g77' command supports all the options supported by the `gcc'
-command. *Note GNU CC Command Options: (gcc)Invoking GCC, for
-information on the non-Fortran-specific aspects of the `gcc' command
-(and, therefore, the `g77' command).
-
- The `g77' command supports one option not supported by the `gcc'
-command:
-
-`--driver=COMMAND'
- Specifies that COMMAND, rather than `gcc', is to be invoked by
- `g77' to do its job. For example, within the `gcc' build
- directory after building GNU Fortran (but without having to
- install it), `./g77 --driver=./xgcc foo.f -B./'.
-
- All other options are supported both by `g77' and by `gcc' as
-modified (and reinstalled) by the `g77' distribution. In some cases,
-options have positive and negative forms; the negative form of `-ffoo'
-would be `-fno-foo'. This manual documents only one of these two
-forms, whichever one is not the default.
-
-* Menu:
-
-* Option Summary:: Brief list of all `g77' options,
- without explanations.
-* Overall Options:: Controlling the kind of output:
- an executable, object files, assembler files,
- or preprocessed source.
-* Shorthand Options:: Options that are shorthand for other options.
-* Fortran Dialect Options:: Controlling the variant of Fortran language
- compiled.
-* Warning Options:: How picky should the compiler be?
-* Debugging Options:: Symbol tables, measurements, and debugging dumps.
-* Optimize Options:: How much optimization?
-* Preprocessor Options:: Controlling header files and macro definitions.
- Also, getting dependency information for Make.
-* Directory Options:: Where to find header files and libraries.
- Where to find the compiler executable files.
-* Code Gen Options:: Specifying conventions for function calls, data layout
- and register usage.
-* Environment Variables:: Env vars that affect GNU Fortran.
-
-
-File: g77.info, Node: Option Summary, Next: Overall Options, Up: Invoking G77
-
-Option Summary
-==============
-
- Here is a summary of all the options specific to GNU Fortran, grouped
-by type. Explanations are in the following sections.
-
-*Overall Options*
- *Note Options Controlling the Kind of Output: Overall Options.
- --driver -fversion -fset-g77-defaults -fno-silent
-
-*Shorthand Options*
- *Note Shorthand Options::.
- -ff66 -fno-f66 -ff77 -fno-f77 -fugly -fno-ugly
-
-*Fortran Language Options*
- *Note Options Controlling Fortran Dialect: Fortran Dialect Options.
- -ffree-form -fno-fixed-form -ff90
- -fvxt -fdollar-ok -fno-backslash
- -fno-ugly-args -fno-ugly-assign -fno-ugly-assumed
- -fugly-comma -fugly-complex -fugly-init -fugly-logint
- -fonetrip -ftypeless-boz
- -fintrin-case-initcap -fintrin-case-upper
- -fintrin-case-lower -fintrin-case-any
- -fmatch-case-initcap -fmatch-case-upper
- -fmatch-case-lower -fmatch-case-any
- -fsource-case-upper -fsource-case-lower -fsource-case-preserve
- -fsymbol-case-initcap -fsymbol-case-upper
- -fsymbol-case-lower -fsymbol-case-any
- -fcase-strict-upper -fcase-strict-lower
- -fcase-initcap -fcase-upper -fcase-lower -fcase-preserve
- -ff2c-intrinsics-delete -ff2c-intrinsics-hide
- -ff2c-intrinsics-disable -ff2c-intrinsics-enable
- -ff90-intrinsics-delete -ff90-intrinsics-hide
- -ff90-intrinsics-disable -ff90-intrinsics-enable
- -fgnu-intrinsics-delete -fgnu-intrinsics-hide
- -fgnu-intrinsics-disable -fgnu-intrinsics-enable
- -fmil-intrinsics-delete -fmil-intrinsics-hide
- -fmil-intrinsics-disable -fmil-intrinsics-enable
- -funix-intrinsics-delete -funix-intrinsics-hide
- -funix-intrinsics-disable -funix-intrinsics-enable
- -fvxt-intrinsics-delete -fvxt-intrinsics-hide
- -fvxt-intrinsics-disable -fvxt-intrinsics-enable
- -ffixed-line-length-N -ffixed-line-length-none
-
-*Warning Options*
- *Note Options to Request or Suppress Warnings: Warning Options.
- -fsyntax-only -pedantic -pedantic-errors -fpedantic
- -w -Wno-globals -Wimplicit -Wunused -Wuninitialized
- -Wall -Wsurprising
- -Werror -W
-
-*Debugging Options*
- *Note Options for Debugging Your Program or GCC: Debugging Options.
- -g
-
-*Optimization Options*
- *Note Options that Control Optimization: Optimize Options.
- -malign-double
- -ffloat-store -fforce-mem -fforce-addr -fno-inline
- -ffast-math -fstrength-reduce -frerun-cse-after-loop
- -fexpensive-optimizations -fdelayed-branch
- -fschedule-insns -fschedule-insn2 -fcaller-saves
- -funroll-loops -funroll-all-loops
- -fno-move-all-movables -fno-reduce-all-givs
- -fno-rerun-loop-opt
-
-*Directory Options*
- *Note Options for Directory Search: Directory Options.
- -IDIR -I-
-
-*Code Generation Options*
- *Note Options for Code Generation Conventions: Code Gen Options.
- -fno-automatic -finit-local-zero -fno-f2c
- -ff2c-library -fno-underscoring -fno-ident
- -fpcc-struct-return -freg-struct-return
- -fshort-double -fno-common -fpack-struct
- -fzeros -fno-second-underscore
- -fdebug-kludge -fno-emulate-complex
- -falias-check -fargument-alias
- -fargument-noalias -fno-argument-noalias-global
- -fno-globals
-
-* Menu:
-
-* Overall Options:: Controlling the kind of output:
- an executable, object files, assembler files,
- or preprocessed source.
-* Shorthand Options:: Options that are shorthand for other options.
-* Fortran Dialect Options:: Controlling the variant of Fortran language
- compiled.
-* Warning Options:: How picky should the compiler be?
-* Debugging Options:: Symbol tables, measurements, and debugging dumps.
-* Optimize Options:: How much optimization?
-* Preprocessor Options:: Controlling header files and macro definitions.
- Also, getting dependency information for Make.
-* Directory Options:: Where to find header files and libraries.
- Where to find the compiler executable files.
-* Code Gen Options:: Specifying conventions for function calls, data layout
- and register usage.
-
diff --git a/gcc/f/g77.info-10 b/gcc/f/g77.info-10
deleted file mode 100644
index 90f79f1fb1d..00000000000
--- a/gcc/f/g77.info-10
+++ /dev/null
@@ -1,1462 +0,0 @@
-This is Info file g77.info, produced by Makeinfo version 1.68 from the
-input file g77.texi.
-
- This file explains how to use the GNU Fortran system.
-
- Published by the Free Software Foundation 59 Temple Place - Suite 330
-Boston, MA 02111-1307 USA
-
- Copyright (C) 1995-1997 Free Software Foundation, Inc.
-
- Permission is granted to make and distribute verbatim copies of this
-manual provided the copyright notice and this permission notice are
-preserved on all copies.
-
- Permission is granted to copy and distribute modified versions of
-this manual under the conditions for verbatim copying, provided also
-that the sections entitled "GNU General Public License," "Funding for
-Free Software," and "Protect Your Freedom--Fight `Look And Feel'" are
-included exactly as in the original, and provided that the entire
-resulting derived work is distributed under the terms of a permission
-notice identical to this one.
-
- Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that the sections entitled "GNU General Public
-License," "Funding for Free Software," and "Protect Your Freedom--Fight
-`Look And Feel'", and this permission notice, may be included in
-translations approved by the Free Software Foundation instead of in the
-original English.
-
- Contributed by James Craig Burley (<burley@gnu.ai.mit.edu>).
-Inspired by a first pass at translating `g77-0.5.16/f/DOC' that was
-contributed to Craig by David Ronis (<ronis@onsager.chem.mcgill.ca>).
-
-INFO-DIR-SECTION Fortran Programming
-START-INFO-DIR-ENTRY
-* g77: (g77). The GNU Fortran compilation system.
-END-INFO-DIR-ENTRY
-
-
-File: g77.info, Node: SymLnk Intrinsic (subroutine), Next: System Intrinsic (subroutine), Prev: Sum Intrinsic, Up: Table of Intrinsic Functions
-
-SymLnk Intrinsic (subroutine)
-.............................
-
- CALL SymLnk(PATH1, PATH2, STATUS)
-
-PATH1: `CHARACTER'; scalar; INTENT(IN).
-
-PATH2: `CHARACTER'; scalar; INTENT(IN).
-
-STATUS: `INTEGER(KIND=1)'; OPTIONAL; scalar; INTENT(OUT).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Makes a symbolic link from file PATH1 to PATH2. A null character
-(`CHAR(0)') marks the end of the names in PATH1 and PATH2--otherwise,
-trailing blanks in PATH1 and PATH2 are ignored. If the STATUS argument
-is supplied, it contains 0 on success or a non-zero error code upon
-return (`ENOSYS' if the system does not provide `symlink(2)').
-
- Some non-GNU implementations of Fortran provide this intrinsic as
-only a function, not as a subroutine, or do not support the (optional)
-STATUS argument.
-
- For information on other intrinsics with the same name: *Note SymLnk
-Intrinsic (function)::.
-
-
-File: g77.info, Node: System Intrinsic (subroutine), Next: System_Clock Intrinsic, Prev: SymLnk Intrinsic (subroutine), Up: Table of Intrinsic Functions
-
-System Intrinsic (subroutine)
-.............................
-
- CALL System(COMMAND, STATUS)
-
-COMMAND: `CHARACTER'; scalar; INTENT(IN).
-
-STATUS: `INTEGER(KIND=1)'; OPTIONAL; scalar; INTENT(OUT).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Passes the command COMMAND to a shell (see `system(3)'). If
-argument STATUS is present, it contains the value returned by
-`system(3)', presumably 0 if the shell command succeeded. Note that
-which shell is used to invoke the command is system-dependent and
-environment-dependent.
-
- Some non-GNU implementations of Fortran provide this intrinsic as
-only a function, not as a subroutine, or do not support the (optional)
-STATUS argument.
-
- For information on other intrinsics with the same name: *Note System
-Intrinsic (function)::.
-
-
-File: g77.info, Node: System_Clock Intrinsic, Next: Tan Intrinsic, Prev: System Intrinsic (subroutine), Up: Table of Intrinsic Functions
-
-System_Clock Intrinsic
-......................
-
- CALL System_Clock(COUNT, RATE, MAX)
-
-COUNT: `INTEGER(KIND=1)'; scalar; INTENT(OUT).
-
-RATE: `INTEGER(KIND=1)'; scalar; INTENT(OUT).
-
-MAX: `INTEGER(KIND=1)'; scalar; INTENT(OUT).
-
-Intrinsic groups: `f90'.
-
-Description:
-
- Returns in COUNT the current value of the system clock; this is the
-value returned by the UNIX function `times(2)' in this implementation,
-but isn't in general. RATE is the number of clock ticks per second and
-MAX is the maximum value this can take, which isn't very useful in this
-implementation since it's just the maximum C `unsigned int' value.
-
-
-File: g77.info, Node: Tan Intrinsic, Next: TanH Intrinsic, Prev: System_Clock Intrinsic, Up: Table of Intrinsic Functions
-
-Tan Intrinsic
-.............
-
- Tan(X)
-
-Tan: `REAL' function, the `KIND=' value of the type being that of
-argument X.
-
-X: `REAL'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Returns the tangent of X, an angle measured in radians.
-
- *Note ATan Intrinsic::, for the inverse of this function.
-
-
-File: g77.info, Node: TanH Intrinsic, Next: Time Intrinsic (UNIX), Prev: Tan Intrinsic, Up: Table of Intrinsic Functions
-
-TanH Intrinsic
-..............
-
- TanH(X)
-
-TanH: `REAL' function, the `KIND=' value of the type being that of
-argument X.
-
-X: `REAL'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Returns the hyperbolic tangent of X.
-
-
-File: g77.info, Node: Time Intrinsic (UNIX), Next: Time8 Intrinsic, Prev: TanH Intrinsic, Up: Table of Intrinsic Functions
-
-Time Intrinsic (UNIX)
-.....................
-
- Time()
-
-Time: `INTEGER(KIND=1)' function.
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Returns the current time encoded as an integer (in the manner of the
-UNIX function `time(3)'). This value is suitable for passing to
-`CTIME', `GMTIME', and `LTIME'.
-
- This intrinsic is not fully portable, such as to systems with 32-bit
-`INTEGER' types but supporting times wider than 32 bits. *Note Time8
-Intrinsic::, for information on a similar intrinsic that might be
-portable to more GNU Fortran implementations, though to fewer Fortran
-compilers.
-
- For information on other intrinsics with the same name: *Note Time
-Intrinsic (VXT)::.
-
-
-File: g77.info, Node: Time8 Intrinsic, Next: Tiny Intrinsic, Prev: Time Intrinsic (UNIX), Up: Table of Intrinsic Functions
-
-Time8 Intrinsic
-...............
-
- Time8()
-
-Time8: `INTEGER(KIND=2)' function.
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Returns the current time encoded as a long integer (in the manner of
-the UNIX function `time(3)'). This value is suitable for passing to
-`CTIME', `GMTIME', and `LTIME'.
-
- No Fortran implementations other than GNU Fortran are known to
-support this intrinsic at the time of this writing. *Note Time
-Intrinsic (UNIX)::, for information on a similar intrinsic that might
-be portable to more Fortran compilers, though to fewer GNU Fortran
-implementations.
-
-
-File: g77.info, Node: Tiny Intrinsic, Next: Transfer Intrinsic, Prev: Time8 Intrinsic, Up: Table of Intrinsic Functions
-
-Tiny Intrinsic
-..............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL Tiny' to use this name for an
-external procedure.
-
-
-File: g77.info, Node: Transfer Intrinsic, Next: Transpose Intrinsic, Prev: Tiny Intrinsic, Up: Table of Intrinsic Functions
-
-Transfer Intrinsic
-..................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL Transfer' to use this name for
-an external procedure.
-
-
-File: g77.info, Node: Transpose Intrinsic, Next: Trim Intrinsic, Prev: Transfer Intrinsic, Up: Table of Intrinsic Functions
-
-Transpose Intrinsic
-...................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL Transpose' to use this name
-for an external procedure.
-
-
-File: g77.info, Node: Trim Intrinsic, Next: TtyNam Intrinsic (subroutine), Prev: Transpose Intrinsic, Up: Table of Intrinsic Functions
-
-Trim Intrinsic
-..............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL Trim' to use this name for an
-external procedure.
-
-
-File: g77.info, Node: TtyNam Intrinsic (subroutine), Next: TtyNam Intrinsic (function), Prev: Trim Intrinsic, Up: Table of Intrinsic Functions
-
-TtyNam Intrinsic (subroutine)
-.............................
-
- CALL TtyNam(NAME, UNIT)
-
-NAME: `CHARACTER'; scalar; INTENT(OUT).
-
-UNIT: `INTEGER'; scalar; INTENT(IN).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Sets NAME to the name of the terminal device open on logical unit
-UNIT or a blank string if UNIT is not connected to a terminal.
-
- Some non-GNU implementations of Fortran provide this intrinsic as
-only a function, not as a subroutine.
-
- For information on other intrinsics with the same name: *Note TtyNam
-Intrinsic (function)::.
-
-
-File: g77.info, Node: TtyNam Intrinsic (function), Next: UBound Intrinsic, Prev: TtyNam Intrinsic (subroutine), Up: Table of Intrinsic Functions
-
-TtyNam Intrinsic (function)
-...........................
-
- TtyNam(UNIT)
-
-TtyNam: `CHARACTER*(*)' function.
-
-UNIT: `INTEGER'; scalar; INTENT(IN).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Returns the name of the terminal device open on logical unit UNIT or
-a blank string if UNIT is not connected to a terminal.
-
- For information on other intrinsics with the same name: *Note TtyNam
-Intrinsic (subroutine)::.
-
-
-File: g77.info, Node: UBound Intrinsic, Next: UMask Intrinsic (subroutine), Prev: TtyNam Intrinsic (function), Up: Table of Intrinsic Functions
-
-UBound Intrinsic
-................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL UBound' to use this name for an
-external procedure.
-
-
-File: g77.info, Node: UMask Intrinsic (subroutine), Next: Unlink Intrinsic (subroutine), Prev: UBound Intrinsic, Up: Table of Intrinsic Functions
-
-UMask Intrinsic (subroutine)
-............................
-
- CALL UMask(MASK, OLD)
-
-MASK: `INTEGER'; scalar; INTENT(IN).
-
-OLD: `INTEGER(KIND=1)'; OPTIONAL; scalar; INTENT(OUT).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Sets the file creation mask to MASK and returns the old value in
-argument OLD if it is supplied. See `umask(2)'.
-
- Some non-GNU implementations of Fortran provide this intrinsic as
-only a function, not as a subroutine.
-
- For information on other intrinsics with the same name: *Note UMask
-Intrinsic (function)::.
-
-
-File: g77.info, Node: Unlink Intrinsic (subroutine), Next: Unpack Intrinsic, Prev: UMask Intrinsic (subroutine), Up: Table of Intrinsic Functions
-
-Unlink Intrinsic (subroutine)
-.............................
-
- CALL Unlink(FILE, STATUS)
-
-FILE: `CHARACTER'; scalar; INTENT(IN).
-
-STATUS: `INTEGER(KIND=1)'; OPTIONAL; scalar; INTENT(OUT).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Unlink the file FILE. A null character (`CHAR(0)') marks the end of
-the name in FILE--otherwise, trailing blanks in FILE are ignored. If
-the STATUS argument is supplied, it contains 0 on success or a non-zero
-error code upon return. See `unlink(2)'.
-
- Some non-GNU implementations of Fortran provide this intrinsic as
-only a function, not as a subroutine, or do not support the (optional)
-STATUS argument.
-
- For information on other intrinsics with the same name: *Note Unlink
-Intrinsic (function)::.
-
-
-File: g77.info, Node: Unpack Intrinsic, Next: Verify Intrinsic, Prev: Unlink Intrinsic (subroutine), Up: Table of Intrinsic Functions
-
-Unpack Intrinsic
-................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL Unpack' to use this name for an
-external procedure.
-
-
-File: g77.info, Node: Verify Intrinsic, Next: XOr Intrinsic, Prev: Unpack Intrinsic, Up: Table of Intrinsic Functions
-
-Verify Intrinsic
-................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL Verify' to use this name for an
-external procedure.
-
-
-File: g77.info, Node: XOr Intrinsic, Next: ZAbs Intrinsic, Prev: Verify Intrinsic, Up: Table of Intrinsic Functions
-
-XOr Intrinsic
-.............
-
- XOr(I, J)
-
-XOr: `INTEGER' or `LOGICAL' function, the exact type being the result
-of cross-promoting the types of all the arguments.
-
-I: `INTEGER' or `LOGICAL'; scalar; INTENT(IN).
-
-J: `INTEGER' or `LOGICAL'; scalar; INTENT(IN).
-
-Intrinsic groups: `f2c'.
-
-Description:
-
- Returns value resulting from boolean exclusive-OR of pair of bits in
-each of I and J.
-
-
-File: g77.info, Node: ZAbs Intrinsic, Next: ZCos Intrinsic, Prev: XOr Intrinsic, Up: Table of Intrinsic Functions
-
-ZAbs Intrinsic
-..............
-
- ZAbs(A)
-
-ZAbs: `REAL(KIND=2)' function.
-
-A: `COMPLEX(KIND=2)'; scalar; INTENT(IN).
-
-Intrinsic groups: `f2c'.
-
-Description:
-
- Archaic form of `ABS()' that is specific to one type for A. *Note
-Abs Intrinsic::.
-
-
-File: g77.info, Node: ZCos Intrinsic, Next: ZExp Intrinsic, Prev: ZAbs Intrinsic, Up: Table of Intrinsic Functions
-
-ZCos Intrinsic
-..............
-
- ZCos(X)
-
-ZCos: `COMPLEX(KIND=2)' function.
-
-X: `COMPLEX(KIND=2)'; scalar; INTENT(IN).
-
-Intrinsic groups: `f2c'.
-
-Description:
-
- Archaic form of `COS()' that is specific to one type for X. *Note
-Cos Intrinsic::.
-
-
-File: g77.info, Node: ZExp Intrinsic, Next: ZLog Intrinsic, Prev: ZCos Intrinsic, Up: Table of Intrinsic Functions
-
-ZExp Intrinsic
-..............
-
- ZExp(X)
-
-ZExp: `COMPLEX(KIND=2)' function.
-
-X: `COMPLEX(KIND=2)'; scalar; INTENT(IN).
-
-Intrinsic groups: `f2c'.
-
-Description:
-
- Archaic form of `EXP()' that is specific to one type for X. *Note
-Exp Intrinsic::.
-
-
-File: g77.info, Node: ZLog Intrinsic, Next: ZSin Intrinsic, Prev: ZExp Intrinsic, Up: Table of Intrinsic Functions
-
-ZLog Intrinsic
-..............
-
- ZLog(X)
-
-ZLog: `COMPLEX(KIND=2)' function.
-
-X: `COMPLEX(KIND=2)'; scalar; INTENT(IN).
-
-Intrinsic groups: `f2c'.
-
-Description:
-
- Archaic form of `LOG()' that is specific to one type for X. *Note
-Log Intrinsic::.
-
-
-File: g77.info, Node: ZSin Intrinsic, Next: ZSqRt Intrinsic, Prev: ZLog Intrinsic, Up: Table of Intrinsic Functions
-
-ZSin Intrinsic
-..............
-
- ZSin(X)
-
-ZSin: `COMPLEX(KIND=2)' function.
-
-X: `COMPLEX(KIND=2)'; scalar; INTENT(IN).
-
-Intrinsic groups: `f2c'.
-
-Description:
-
- Archaic form of `SIN()' that is specific to one type for X. *Note
-Sin Intrinsic::.
-
-
-File: g77.info, Node: ZSqRt Intrinsic, Prev: ZSin Intrinsic, Up: Table of Intrinsic Functions
-
-ZSqRt Intrinsic
-...............
-
- ZSqRt(X)
-
-ZSqRt: `COMPLEX(KIND=2)' function.
-
-X: `COMPLEX(KIND=2)'; scalar; INTENT(IN).
-
-Intrinsic groups: `f2c'.
-
-Description:
-
- Archaic form of `SQRT()' that is specific to one type for X. *Note
-SqRt Intrinsic::.
-
-
-File: g77.info, Node: Scope and Classes of Names, Prev: Functions and Subroutines, Up: Language
-
-Scope and Classes of Symbolic Names
-===================================
-
- (The following information augments or overrides the information in
-Chapter 18 of ANSI X3.9-1978 FORTRAN 77 in specifying the GNU Fortran
-language. Chapter 18 of that document otherwise serves as the basis
-for the relevant aspects of GNU Fortran.)
-
-* Menu:
-
-* Underscores in Symbol Names::
-
-
-File: g77.info, Node: Underscores in Symbol Names, Up: Scope and Classes of Names
-
-Underscores in Symbol Names
----------------------------
-
- Underscores (`_') are accepted in symbol names after the first
-character (which must be a letter).
-
-
-File: g77.info, Node: Other Dialects, Next: Other Compilers, Prev: Compiler, Up: Top
-
-Other Dialects
-**************
-
- GNU Fortran supports a variety of features that are not considered
-part of the GNU Fortran language itself, but are representative of
-various dialects of Fortran that `g77' supports in whole or in part.
-
- Any of the features listed below might be disallowed by `g77' unless
-some command-line option is specified. Currently, some of the features
-are accepted using the default invocation of `g77', but that might
-change in the future.
-
- *Note: This portion of the documentation definitely needs a lot of
-work!*
-
-* Menu:
-
-* Source Form:: Details of fixed-form and free-form source.
-* Trailing Comment:: Use of `/*' to start a comment.
-* Debug Line:: Use of `D' in column 1.
-* Dollar Signs:: Use of `$' in symbolic names.
-* Case Sensitivity:: Uppercase and lowercase in source files.
-* VXT Fortran:: ...versus the GNU Fortran language.
-* Fortran 90:: ...versus the GNU Fortran language.
-* Pedantic Compilation:: Enforcing the standard.
-* Distensions:: Misfeatures supported by GNU Fortran.
-
-
-File: g77.info, Node: Source Form, Next: Trailing Comment, Up: Other Dialects
-
-Source Form
-===========
-
- GNU Fortran accepts programs written in either fixed form or free
-form.
-
- Fixed form corresponds to ANSI FORTRAN 77 (plus popular extensions,
-such as allowing tabs) and Fortran 90's fixed form.
-
- Free form corresponds to Fortran 90's free form (though possibly not
-entirely up-to-date, and without complaining about some things that for
-which Fortran 90 requires diagnostics, such as the spaces in the
-constant in `R = 3 . 1').
-
- The way a Fortran compiler views source files depends entirely on the
-implementation choices made for the compiler, since those choices are
-explicitly left to the implementation by the published Fortran
-standards. GNU Fortran currently tries to be somewhat like a few
-popular compilers (`f2c', Digital ("DEC") Fortran, and so on), though a
-cleaner default definition along with more flexibility offered by
-command-line options is likely to be offered in version 0.6.
-
- This section describes how `g77' interprets source lines.
-
-* Menu:
-
-* Carriage Returns:: Carriage returns ignored.
-* Tabs:: Tabs converted to spaces.
-* Short Lines:: Short lines padded with spaces (fixed-form only).
-* Long Lines:: Long lines truncated.
-* Ampersands:: Special Continuation Lines.
-
-
-File: g77.info, Node: Carriage Returns, Next: Tabs, Up: Source Form
-
-Carriage Returns
-----------------
-
- Carriage returns (`\r') in source lines are ignored. This is
-somewhat different from `f2c', which seems to treat them as spaces
-outside character/Hollerith constants, and encodes them as `\r' inside
-such constants.
-
-
-File: g77.info, Node: Tabs, Next: Short Lines, Prev: Carriage Returns, Up: Source Form
-
-Tabs
-----
-
- A source line with a <TAB> character anywhere in it is treated as
-entirely significant--however long it is--instead of ending in column
-72 (for fixed-form source) or 132 (for free-form source). This also is
-different from `f2c', which encodes tabs as `\t' (the ASCII <TAB>
-character) inside character and Hollerith constants, but nevertheless
-seems to treat the column position as if it had been affected by the
-canonical tab positioning.
-
- `g77' effectively translates tabs to the appropriate number of
-spaces (a la the default for the UNIX `expand' command) before doing
-any other processing, other than (currently) noting whether a tab was
-found on a line and using this information to decide how to interpret
-the length of the line and continued constants.
-
- Note that this default behavior probably will change for version 0.6,
-when it will presumably be available via a command-line option. The
-default as of version 0.6 is planned to be a "pure visual" model, where
-tabs are immediately converted to spaces and otherwise have no effect,
-so the way a typical user sees source lines produces a consistent
-result no matter how the spacing in those source lines is actually
-implemented via tabs, spaces, and trailing tabs/spaces before newline.
-Command-line options are likely to be added to specify whether all or
-just-tabbed lines are to be extended to 132 or full input-line length,
-and perhaps even an option will be added to specify the truncated-line
-behavior to which some Digital compilers default (and which affects the
-way continued character/Hollerith constants are interpreted).
-
-
-File: g77.info, Node: Short Lines, Next: Long Lines, Prev: Tabs, Up: Source Form
-
-Short Lines
------------
-
- Source lines shorter than the applicable fixed-form length are
-treated as if they were padded with spaces to that length. (None of
-this is relevant to source files written in free form.)
-
- This affects only continued character and Hollerith constants, and
-is a different interpretation than provided by some other popular
-compilers (although a bit more consistent with the traditional
-punched-card basis of Fortran and the way the Fortran standard
-expressed fixed source form).
-
- `g77' might someday offer an option to warn about cases where
-differences might be seen as a result of this treatment, and perhaps an
-option to specify the alternate behavior as well.
-
- Note that this padding cannot apply to lines that are effectively of
-infinite length--such lines are specified using command-line options
-like `-ffixed-line-length-none', for example.
-
-
-File: g77.info, Node: Long Lines, Next: Ampersands, Prev: Short Lines, Up: Source Form
-
-Long Lines
-----------
-
- Source lines longer than the applicable length are truncated to that
-length. Currently, `g77' does not warn if the truncated characters are
-not spaces, to accommodate existing code written for systems that
-treated truncated text as commentary (especially in columns 73 through
-80).
-
- *Note Options Controlling Fortran Dialect: Fortran Dialect Options,
-for information on the `-ffixed-line-length-N' option, which can be
-used to set the line length applicable to fixed-form source files.
-
-
-File: g77.info, Node: Ampersands, Prev: Long Lines, Up: Source Form
-
-Ampersand Continuation Line
----------------------------
-
- A `&' in column 1 of fixed-form source denotes an arbitrary-length
-continuation line, imitating the behavior of `f2c'.
-
-
-File: g77.info, Node: Trailing Comment, Next: Debug Line, Prev: Source Form, Up: Other Dialects
-
-Trailing Comment
-================
-
- `g77' supports use of `/*' to start a trailing comment. In the GNU
-Fortran language, `!' is used for this purpose.
-
- `/*' is not in the GNU Fortran language because the use of `/*' in a
-program might suggest to some readers that a block, not trailing,
-comment is started (and thus ended by `*/', not end of line), since
-that is the meaning of `/*' in C.
-
- Also, such readers might think they can use `//' to start a trailing
-comment as an alternative to `/*', but `//' already denotes
-concatenation, and such a "comment" might actually result in a program
-that compiles without error (though it would likely behave incorrectly).
-
-
-File: g77.info, Node: Debug Line, Next: Dollar Signs, Prev: Trailing Comment, Up: Other Dialects
-
-Debug Line
-==========
-
- Use of `D' or `d' as the first character (column 1) of a source line
-denotes a debug line.
-
- In turn, a debug line is treated as either a comment line or a
-normal line, depending on whether debug lines are enabled.
-
- When treated as a comment line, a line beginning with `D' or `d' is
-treated as if it the first character was `C' or `c', respectively.
-When treated as a normal line, such a line is treated as if the first
-character was <SPC> (space).
-
- (Currently, `g77' provides no means for treating debug lines as
-normal lines.)
-
-
-File: g77.info, Node: Dollar Signs, Next: Case Sensitivity, Prev: Debug Line, Up: Other Dialects
-
-Dollar Signs in Symbol Names
-============================
-
- Dollar signs (`$') are allowed in symbol names (after the first
-character) when the `-fdollar-ok' option is specified.
-
-
-File: g77.info, Node: Case Sensitivity, Next: VXT Fortran, Prev: Dollar Signs, Up: Other Dialects
-
-Case Sensitivity
-================
-
- GNU Fortran offers the programmer way too much flexibility in
-deciding how source files are to be treated vis-a-vis uppercase and
-lowercase characters. There are 66 useful settings that affect case
-sensitivity, plus 10 settings that are nearly useless, with the
-remaining 116 settings being either redundant or useless.
-
- None of these settings have any effect on the contents of comments
-(the text after a `c' or `C' in Column 1, for example) or of character
-or Hollerith constants. Note that things like the `E' in the statement
-`CALL FOO(3.2E10)' and the `TO' in `ASSIGN 10 TO LAB' are considered
-built-in keywords, and so are affected by these settings.
-
- Low-level switches are identified in this section as follows:
-
- A Source Case Conversion:
-
- 0 Preserve (see Note 1)
-
- 1 Convert to Upper Case
-
- 2 Convert to Lower Case
-
- B Built-in Keyword Matching:
-
- 0 Match Any Case (per-character basis)
-
- 1 Match Upper Case Only
-
- 2 Match Lower Case Only
-
- 3 Match InitialCaps Only (see tables for spellings)
-
- C Built-in Intrinsic Matching:
-
- 0 Match Any Case (per-character basis)
-
- 1 Match Upper Case Only
-
- 2 Match Lower Case Only
-
- 3 Match InitialCaps Only (see tables for spellings)
-
- D User-defined Symbol Possibilities (warnings only):
-
- 0 Allow Any Case (per-character basis)
-
- 1 Allow Upper Case Only
-
- 2 Allow Lower Case Only
-
- 3 Allow InitialCaps Only (see Note 2)
-
- Note 1: `g77' eventually will support `NAMELIST' in a manner that is
-consistent with these source switches--in the sense that input will be
-expected to meet the same requirements as source code in terms of
-matching symbol names and keywords (for the exponent letters).
-
- Currently, however, `NAMELIST' is supported by `libf2c', which
-uppercases `NAMELIST' input and symbol names for matching. This means
-not only that `NAMELIST' output currently shows symbol (and keyword)
-names in uppercase even if lower-case source conversion (option A2) is
-selected, but that `NAMELIST' cannot be adequately supported when
-source case preservation (option A0) is selected.
-
- If A0 is selected, a warning message will be output for each
-`NAMELIST' statement to this effect. The behavior of the program is
-undefined at run time if two or more symbol names appear in a given
-`NAMELIST' such that the names are identical when converted to upper
-case (e.g. `NAMELIST /X/ VAR, Var, var'). For complete and total
-elegance, perhaps there should be a warning when option A2 is selected,
-since the output of NAMELIST is currently in uppercase but will someday
-be lowercase (when a `libg77' is written), but that seems to be
-overkill for a product in beta test.
-
- Note 2: Rules for InitialCaps names are:
-
- - Must be a single uppercase letter, *or*
-
- - Must start with an uppercase letter and contain at least one
- lowercase letter.
-
- So `A', `Ab', `ABc', `AbC', and `Abc' are valid InitialCaps names,
-but `AB', `A2', and `ABC' are not. Note that most, but not all,
-built-in names meet these requirements--the exceptions are some of the
-two-letter format specifiers, such as `BN' and `BZ'.
-
- Here are the names of the corresponding command-line options:
-
- A0: -fsource-case-preserve
- A1: -fsource-case-upper
- A2: -fsource-case-lower
-
- B0: -fmatch-case-any
- B1: -fmatch-case-upper
- B2: -fmatch-case-lower
- B3: -fmatch-case-initcap
-
- C0: -fintrin-case-any
- C1: -fintrin-case-upper
- C2: -fintrin-case-lower
- C3: -fintrin-case-initcap
-
- D0: -fsymbol-case-any
- D1: -fsymbol-case-upper
- D2: -fsymbol-case-lower
- D3: -fsymbol-case-initcap
-
- Useful combinations of the above settings, along with abbreviated
-option names that set some of these combinations all at once:
-
- 1: A0-- B0--- C0--- D0--- -fcase-preserve
- 2: A0-- B0--- C0--- D-1--
- 3: A0-- B0--- C0--- D--2-
- 4: A0-- B0--- C0--- D---3
- 5: A0-- B0--- C-1-- D0---
- 6: A0-- B0--- C-1-- D-1--
- 7: A0-- B0--- C-1-- D--2-
- 8: A0-- B0--- C-1-- D---3
- 9: A0-- B0--- C--2- D0---
- 10: A0-- B0--- C--2- D-1--
- 11: A0-- B0--- C--2- D--2-
- 12: A0-- B0--- C--2- D---3
- 13: A0-- B0--- C---3 D0---
- 14: A0-- B0--- C---3 D-1--
- 15: A0-- B0--- C---3 D--2-
- 16: A0-- B0--- C---3 D---3
- 17: A0-- B-1-- C0--- D0---
- 18: A0-- B-1-- C0--- D-1--
- 19: A0-- B-1-- C0--- D--2-
- 20: A0-- B-1-- C0--- D---3
- 21: A0-- B-1-- C-1-- D0---
- 22: A0-- B-1-- C-1-- D-1-- -fcase-strict-upper
- 23: A0-- B-1-- C-1-- D--2-
- 24: A0-- B-1-- C-1-- D---3
- 25: A0-- B-1-- C--2- D0---
- 26: A0-- B-1-- C--2- D-1--
- 27: A0-- B-1-- C--2- D--2-
- 28: A0-- B-1-- C--2- D---3
- 29: A0-- B-1-- C---3 D0---
- 30: A0-- B-1-- C---3 D-1--
- 31: A0-- B-1-- C---3 D--2-
- 32: A0-- B-1-- C---3 D---3
- 33: A0-- B--2- C0--- D0---
- 34: A0-- B--2- C0--- D-1--
- 35: A0-- B--2- C0--- D--2-
- 36: A0-- B--2- C0--- D---3
- 37: A0-- B--2- C-1-- D0---
- 38: A0-- B--2- C-1-- D-1--
- 39: A0-- B--2- C-1-- D--2-
- 40: A0-- B--2- C-1-- D---3
- 41: A0-- B--2- C--2- D0---
- 42: A0-- B--2- C--2- D-1--
- 43: A0-- B--2- C--2- D--2- -fcase-strict-lower
- 44: A0-- B--2- C--2- D---3
- 45: A0-- B--2- C---3 D0---
- 46: A0-- B--2- C---3 D-1--
- 47: A0-- B--2- C---3 D--2-
- 48: A0-- B--2- C---3 D---3
- 49: A0-- B---3 C0--- D0---
- 50: A0-- B---3 C0--- D-1--
- 51: A0-- B---3 C0--- D--2-
- 52: A0-- B---3 C0--- D---3
- 53: A0-- B---3 C-1-- D0---
- 54: A0-- B---3 C-1-- D-1--
- 55: A0-- B---3 C-1-- D--2-
- 56: A0-- B---3 C-1-- D---3
- 57: A0-- B---3 C--2- D0---
- 58: A0-- B---3 C--2- D-1--
- 59: A0-- B---3 C--2- D--2-
- 60: A0-- B---3 C--2- D---3
- 61: A0-- B---3 C---3 D0---
- 62: A0-- B---3 C---3 D-1--
- 63: A0-- B---3 C---3 D--2-
- 64: A0-- B---3 C---3 D---3 -fcase-initcap
- 65: A-1- B01-- C01-- D01-- -fcase-upper
- 66: A--2 B0-2- C0-2- D0-2- -fcase-lower
-
- Number 22 is the "strict" ANSI FORTRAN 77 model wherein all input
-(except comments, character constants, and Hollerith strings) must be
-entered in uppercase. Use `-fcase-strict-upper' to specify this
-combination.
-
- Number 43 is like Number 22 except all input must be lowercase. Use
-`-fcase-strict-lower' to specify this combination.
-
- Number 65 is the "classic" ANSI FORTRAN 77 model as implemented on
-many non-UNIX machines whereby all the source is translated to
-uppercase. Use `-fcase-upper' to specify this combination.
-
- Number 66 is the "canonical" UNIX model whereby all the source is
-translated to lowercase. Use `-fcase-lower' to specify this
-combination.
-
- There are a few nearly useless combinations:
-
- 67: A-1- B01-- C01-- D--2-
- 68: A-1- B01-- C01-- D---3
- 69: A-1- B01-- C--23 D01--
- 70: A-1- B01-- C--23 D--2-
- 71: A-1- B01-- C--23 D---3
- 72: A--2 B01-- C0-2- D-1--
- 73: A--2 B01-- C0-2- D---3
- 74: A--2 B01-- C-1-3 D0-2-
- 75: A--2 B01-- C-1-3 D-1--
- 76: A--2 B01-- C-1-3 D---3
-
- The above allow some programs to be compiled but with restrictions
-that make most useful programs impossible: Numbers 67 and 72 warn about
-*any* user-defined symbol names (such as `SUBROUTINE FOO'); Numbers 68
-and 73 warn about any user-defined symbol names longer than one
-character that don't have at least one non-alphabetic character after
-the first; Numbers 69 and 74 disallow any references to intrinsics; and
-Numbers 70, 71, 75, and 76 are combinations of the restrictions in
-67+69, 68+69, 72+74, and 73+74, respectively.
-
- All redundant combinations are shown in the above tables anyplace
-where more than one setting is shown for a low-level switch. For
-example, `B0-2-' means either setting 0 or 2 is valid for switch B.
-The "proper" setting in such a case is the one that copies the setting
-of switch A--any other setting might slightly reduce the speed of the
-compiler, though possibly to an unmeasurable extent.
-
- All remaining combinations are useless in that they prevent
-successful compilation of non-null source files (source files with
-something other than comments).
-
-
-File: g77.info, Node: VXT Fortran, Next: Fortran 90, Prev: Case Sensitivity, Up: Other Dialects
-
-VXT Fortran
-===========
-
- `g77' supports certain constructs that have different meanings in
-VXT Fortran than they do in the GNU Fortran language.
-
- Generally, this manual uses the invented term VXT Fortran to refer
-VAX FORTRAN (circa v4). That compiler offered many popular features,
-though not necessarily those that are specific to the VAX processor
-architecture, the VMS operating system, or Digital Equipment
-Corporation's Fortran product line. (VAX and VMS probably are
-trademarks of Digital Equipment Corporation.)
-
- An extension offered by a Digital Fortran product that also is
-offered by several other Fortran products for different kinds of
-systems is probably going to be considered for inclusion in `g77'
-someday, and is considered a VXT Fortran feature.
-
- The `-fvxt' option generally specifies that, where the meaning of a
-construct is ambiguous (means one thing in GNU Fortran and another in
-VXT Fortran), the VXT Fortran meaning is to be assumed.
-
-* Menu:
-
-* Double Quote Meaning:: `"2000' as octal constant.
-* Exclamation Point:: `!' in column 6.
-
-
-File: g77.info, Node: Double Quote Meaning, Next: Exclamation Point, Up: VXT Fortran
-
-Meaning of Double Quote
------------------------
-
- `g77' treats double-quote (`"') as beginning an octal constant of
-`INTEGER(KIND=1)' type when the `-fvxt' option is specified. The form
-of this octal constant is
-
- "OCTAL-DIGITS
-
-where OCTAL-DIGITS is a nonempty string of characters in the set
-`01234567'.
-
- For example, the `-fvxt' option permits this:
-
- PRINT *, "20
- END
-
-The above program would print the value `16'.
-
- *Note Integer Type::, for information on the preferred construct for
-integer constants specified using GNU Fortran's octal notation.
-
- (In the GNU Fortran language, the double-quote character (`"')
-delimits a character constant just as does apostrophe (`''). There is
-no way to allow both constructs in the general case, since statements
-like `PRINT *,"2000 !comment?"' would be ambiguous.)
-
-
-File: g77.info, Node: Exclamation Point, Prev: Double Quote Meaning, Up: VXT Fortran
-
-Meaning of Exclamation Point in Column 6
-----------------------------------------
-
- `g77' treats an exclamation point (`!') in column 6 of a fixed-form
-source file as a continuation character rather than as the beginning of
-a comment (as it does in any other column) when the `-fvxt' option is
-specified.
-
- The following program, when run, prints a message indicating whether
-it is interpreted according to GNU Fortran (and Fortran 90) rules or
-VXT Fortran rules:
-
- C234567 (This line begins in column 1.)
- I = 0
- !1
- IF (I.EQ.0) PRINT *, ' I am a VXT Fortran program'
- IF (I.EQ.1) PRINT *, ' I am a Fortran 90 program'
- IF (I.LT.0 .OR. I.GT.1) PRINT *, ' I am a HAL 9000 computer'
- END
-
- (In the GNU Fortran and Fortran 90 languages, exclamation point is a
-valid character and, unlike space (<SPC>) or zero (`0'), marks a line
-as a continuation line when it appears in column 6.)
-
-
-File: g77.info, Node: Fortran 90, Next: Pedantic Compilation, Prev: VXT Fortran, Up: Other Dialects
-
-Fortran 90
-==========
-
- The GNU Fortran language includes a number of features that are part
-of Fortran 90, even when the `-ff90' option is not specified. The
-features enabled by `-ff90' are intended to be those that, when `-ff90'
-is not specified, would have another meaning to `g77'--usually meaning
-something invalid in the GNU Fortran language.
-
- So, the purpose of `-ff90' is not to specify whether `g77' is to
-gratuitously reject Fortran 90 constructs. The `-pedantic' option
-specified with `-fno-f90' is intended to do that, although its
-implementation is certainly incomplete at this point.
-
- When `-ff90' is specified:
-
- * The type of `REAL(EXPR)' and `AIMAG(EXPR)', where EXPR is
- `COMPLEX' type, is the same type as the real part of EXPR.
-
- For example, assuming `Z' is type `COMPLEX(KIND=2)', `REAL(Z)'
- would return a value of type `REAL(KIND=2)', not of type
- `REAL(KIND=1)', since `-ff90' is specified.
-
-
-File: g77.info, Node: Pedantic Compilation, Next: Distensions, Prev: Fortran 90, Up: Other Dialects
-
-Pedantic Compilation
-====================
-
- The `-fpedantic' command-line option specifies that `g77' is to warn
-about code that is not standard-conforming. This is useful for finding
-some extensions `g77' accepts that other compilers might not accept.
-(Note that the `-pedantic' and `-pedantic-errors' options always imply
-`-fpedantic'.)
-
- With `-fno-f90' in force, ANSI FORTRAN 77 is used as the standard
-for conforming code. With `-ff90' in force, Fortran 90 is used.
-
- The constructs for which `g77' issues diagnostics when `-fpedantic'
-and `-fno-f90' are in force are:
-
- * Automatic arrays, as in
-
- SUBROUTINE X(N)
- REAL A(N)
- ...
-
- where `A' is not listed in any `ENTRY' statement, and thus is not
- a dummy argument.
-
- * The commas in `READ (5), I' and `WRITE (10), J'.
-
- These commas are disallowed by FORTRAN 77, but, while strictly
- superfluous, are syntactically elegant, especially given that
- commas are required in statements such as `READ 99, I' and `PRINT
- *, J'. Many compilers permit the superfluous commas for this
- reason.
-
- * `DOUBLE COMPLEX', either explicitly or implicitly.
-
- An explicit use of this type is via a `DOUBLE COMPLEX' or
- `IMPLICIT DOUBLE COMPLEX' statement, for examples.
-
- An example of an implicit use is the expression `C*D', where `C'
- is `COMPLEX(KIND=1)' and `D' is `DOUBLE PRECISION'. This
- expression is prohibited by ANSI FORTRAN 77 because the rules of
- promotion would suggest that it produce a `DOUBLE COMPLEX'
- result--a type not provided for by that standard.
-
- * Automatic conversion of numeric expressions to `INTEGER(KIND=1)'
- in contexts such as:
-
- - Array-reference indexes.
-
- - Alternate-return values.
-
- - Computed `GOTO'.
-
- - `FORMAT' run-time expressions (not yet supported).
-
- - Dimension lists in specification statements.
-
- - Numbers for I/O statements (such as `READ (UNIT=3.2), I')
-
- - Sizes of `CHARACTER' entities in specification statements.
-
- - Kind types in specification entities (a Fortran 90 feature).
-
- - Initial, terminal, and incrementation parameters for
- implied-`DO' constructs in `DATA' statements.
-
- * Automatic conversion of `LOGICAL' expressions to `INTEGER' in
- contexts such as arithmetic `IF' (where `COMPLEX' expressions are
- disallowed anyway).
-
- * Zero-size array dimensions, as in:
-
- INTEGER I(10,20,4:2)
-
- * Zero-length `CHARACTER' entities, as in:
-
- PRINT *, ''
-
- * Substring operators applied to character constants and named
- constants, as in:
-
- PRINT *, 'hello'(3:5)
-
- * Null arguments passed to statement function, as in:
-
- PRINT *, FOO(,3)
-
- * Disagreement among program units regarding whether a given `COMMON'
- area is `SAVE'd (for targets where program units in a single source
- file are "glued" together as they typically are for UNIX
- development environments).
-
- * Disagreement among program units regarding the size of a named
- `COMMON' block.
-
- * Specification statements following first `DATA' statement.
-
- (In the GNU Fortran language, `DATA I/1/' may be followed by
- `INTEGER J', but not `INTEGER I'. The `-fpedantic' option
- disallows both of these.)
-
- * Semicolon as statement separator, as in:
-
- CALL FOO; CALL BAR
-
- * Use of `&' in column 1 of fixed-form source (to indicate
- continuation).
-
- * Use of `CHARACTER' constants to initialize numeric entities, and
- vice versa.
-
- * Expressions having two arithmetic operators in a row, such as
- `X*-Y'.
-
- If `-fpedantic' is specified along with `-ff90', the following
-constructs result in diagnostics:
-
- * Use of semicolon as a statement separator on a line that has an
- `INCLUDE' directive.
-
-
-File: g77.info, Node: Distensions, Prev: Pedantic Compilation, Up: Other Dialects
-
-Distensions
-===========
-
- The `-fugly-*' command-line options determine whether certain
-features supported by VAX FORTRAN and other such compilers, but
-considered too ugly to be in code that can be changed to use safer
-and/or more portable constructs, are accepted. These are humorously
-referred to as "distensions", extensions that just plain look ugly in
-the harsh light of day.
-
- *Note:* The `-fugly' option, which currently serves as shorthand to
-enable all of the distensions below, is likely to be removed in a
-future version of `g77'. That's because it's likely new distensions
-will be added that conflict with existing ones in terms of assigning
-meaning to a given chunk of code. (Also, it's pretty clear that users
-should not use `-fugly' as shorthand when the next release of `g77'
-might add a distension to that that causes their existing code, when
-recompiled, to behave differently--perhaps even fail to compile or run
-correctly.)
-
-* Menu:
-
-* Ugly Implicit Argument Conversion:: Disabled via `-fno-ugly-args'.
-* Ugly Assumed-Size Arrays:: Enabled via `-fugly-assumed'.
-* Ugly Null Arguments:: Enabled via `-fugly-comma'.
-* Ugly Complex Part Extraction:: Enabled via `-fugly-complex'.
-* Ugly Conversion of Initializers:: Disabled via `-fno-ugly-init'.
-* Ugly Integer Conversions:: Enabled via `-fugly-logint'.
-* Ugly Assigned Labels:: Enabled via `-fugly-assign'.
-
-
-File: g77.info, Node: Ugly Implicit Argument Conversion, Next: Ugly Assumed-Size Arrays, Up: Distensions
-
-Implicit Argument Conversion
-----------------------------
-
- The `-fno-ugly-args' option disables passing typeless and Hollerith
-constants as actual arguments in procedure invocations. For example:
-
- CALL FOO(4HABCD)
- CALL BAR('123'O)
-
-These constructs can be too easily used to create non-portable code,
-but are not considered as "ugly" as others. Further, they are widely
-used in existing Fortran source code in ways that often are quite
-portable. Therefore, they are enabled by default.
-
-
-File: g77.info, Node: Ugly Assumed-Size Arrays, Next: Ugly Null Arguments, Prev: Ugly Implicit Argument Conversion, Up: Distensions
-
-Ugly Assumed-Size Arrays
-------------------------
-
- The `-fugly-assumed' option enables the treatment of any array with
-a final dimension specified as `1' as an assumed-size array, as if `*'
-had been specified instead.
-
- For example, `DIMENSION X(1)' is treated as if it had read
-`DIMENSION X(*)' if `X' is listed as a dummy argument in a preceding
-`SUBROUTINE', `FUNCTION', or `ENTRY' statement in the same program unit.
-
- Use an explicit lower bound to avoid this interpretation. For
-example, `DIMENSION X(1:1)' is never treated as if it had read
-`DIMENSION X(*)' or `DIMENSION X(1:*)'. Nor is `DIMENSION X(2-1)'
-affected by this option, since that kind of expression is unlikely to
-have been intended to designate an assumed-size array.
-
- This option is used to prevent warnings being issued about apparent
-out-of-bounds reference such as `X(2) = 99'.
-
- It also prevents the array from being used in contexts that disallow
-assumed-size arrays, such as `PRINT *,X'. In such cases, a diagnostic
-is generated and the source file is not compiled.
-
- The construct affected by this option is used only in old code that
-pre-exists the widespread acceptance of adjustable and assumed-size
-arrays in the Fortran community.
-
- *Note:* This option does not affect how `DIMENSION X(1)' is treated
-if `X' is listed as a dummy argument only *after* the `DIMENSION'
-statement (presumably in an `ENTRY' statement). For example,
-`-fugly-assumed' has no effect on the following program unit:
-
- SUBROUTINE X
- REAL A(1)
- RETURN
- ENTRY Y(A)
- PRINT *, A
- END
-
-
-File: g77.info, Node: Ugly Complex Part Extraction, Next: Ugly Conversion of Initializers, Prev: Ugly Null Arguments, Up: Distensions
-
-Ugly Complex Part Extraction
-----------------------------
-
- The `-fugly-complex' option enables use of the `REAL()' and `AIMAG()'
-intrinsics with arguments that are `COMPLEX' types other than
-`COMPLEX(KIND=1)'.
-
- With `-ff90' in effect, these intrinsics return the unconverted real
-and imaginary parts (respectively) of their argument.
-
- With `-fno-f90' in effect, these intrinsics convert the real and
-imaginary parts to `REAL(KIND=1)', and return the result of that
-conversion.
-
- Due to this ambiguity, the GNU Fortran language defines these
-constructs as invalid, except in the specific case where they are
-entirely and solely passed as an argument to an invocation of the
-`REAL()' intrinsic. For example,
-
- REAL(REAL(Z))
-
-is permitted even when `Z' is `COMPLEX(KIND=2)' and `-fno-ugly-complex'
-is in effect, because the meaning is clear.
-
- `g77' enforces this restriction, unless `-fugly-complex' is
-specified, in which case the appropriate interpretation is chosen and
-no diagnostic is issued.
-
- *Note CMPAMBIG::, for information on how to cope with existing code
-with unclear expectations of `REAL()' and `AIMAG()' with
-`COMPLEX(KIND=2)' arguments.
-
- *Note RealPart Intrinsic::, for information on the `REALPART()'
-intrinsic, used to extract the real part of a complex expression
-without conversion. *Note ImagPart Intrinsic::, for information on the
-`IMAGPART()' intrinsic, used to extract the imaginary part of a complex
-expression without conversion.
-
-
-File: g77.info, Node: Ugly Null Arguments, Next: Ugly Complex Part Extraction, Prev: Ugly Assumed-Size Arrays, Up: Distensions
-
-Ugly Null Arguments
--------------------
-
- The `-fugly-comma' option enables use of a single trailing comma to
-mean "pass an extra trailing null argument" in a list of actual
-arguments to a procedure other than a statement function, and use of an
-empty list of arguments to mean "pass a single null argument".
-
- (Null arguments often are used in some procedure-calling schemes to
-indicate omitted arguments.)
-
- For example, `CALL FOO(,)' means "pass two null arguments", rather
-than "pass one null argument". Also, `CALL BAR()' means "pass one null
-argument".
-
- This construct is considered "ugly" because it does not provide an
-elegant way to pass a single null argument that is syntactically
-distinct from passing no arguments. That is, this construct changes
-the meaning of code that makes no use of the construct.
-
- So, with `-fugly-comma' in force, `CALL FOO()' and `I = JFUNC()'
-pass a single null argument, instead of passing no arguments as
-required by the Fortran 77 and 90 standards.
-
- *Note:* Many systems gracefully allow the case where a procedure
-call passes one extra argument that the called procedure does not
-expect.
-
- So, in practice, there might be no difference in the behavior of a
-program that does `CALL FOO()' or `I = JFUNC()' and is compiled with
-`-fugly-comma' in force as compared to its behavior when compiled with
-the default, `-fno-ugly-comma', in force, assuming `FOO' and `JFUNC' do
-not expect any arguments to be passed.
-
-
-File: g77.info, Node: Ugly Conversion of Initializers, Next: Ugly Integer Conversions, Prev: Ugly Complex Part Extraction, Up: Distensions
-
-Ugly Conversion of Initializers
--------------------------------
-
- The constructs disabled by `-fno-ugly-init' are:
-
- * Use of Hollerith and typeless constants in contexts where they set
- initial (compile-time) values for variables, arrays, and named
- constants--that is, `DATA' and `PARAMETER' statements, plus
- type-declaration statements specifying initial values.
-
- Here are some sample initializations that are disabled by the
- `-fno-ugly-init' option:
-
- PARAMETER (VAL='9A304FFE'X)
- REAL*8 STRING/8HOUTPUT00/
- DATA VAR/4HABCD/
-
- * In the same contexts as above, use of character constants to
- initialize numeric items and vice versa (one constant per item).
-
- Here are more sample initializations that are disabled by the
- `-fno-ugly-init' option:
-
- INTEGER IA
- CHARACTER BELL
- PARAMETER (IA = 'A')
- PARAMETER (BELL = 7)
-
- * Use of Hollerith and typeless constants on the right-hand side of
- assignment statements to numeric types, and in other contexts
- (such as passing arguments in invocations of intrinsic procedures
- and statement functions) that are treated as assignments to known
- types (the dummy arguments, in these cases).
-
- Here are sample statements that are disabled by the
- `-fno-ugly-init' option:
-
- IVAR = 4HABCD
- PRINT *, IMAX0(2HAB, 2HBA)
-
- The above constructs, when used, can tend to result in non-portable
-code. But, they are widely used in existing Fortran code in ways that
-often are quite portable. Therefore, they are enabled by default.
-
-
-File: g77.info, Node: Ugly Integer Conversions, Next: Ugly Assigned Labels, Prev: Ugly Conversion of Initializers, Up: Distensions
-
-Ugly Integer Conversions
-------------------------
-
- The constructs enabled via `-fugly-logint' are:
-
- * Automatic conversion between `INTEGER' and `LOGICAL' as dictated by
- context (typically implies nonportable dependencies on how a
- particular implementation encodes `.TRUE.' and `.FALSE.').
-
- * Use of a `LOGICAL' variable in `ASSIGN' and assigned-`GOTO'
- statements.
-
- The above constructs are disabled by default because use of them
-tends to lead to non-portable code. Even existing Fortran code that
-uses that often turns out to be non-portable, if not outright buggy.
-
- Some of this is due to differences among implementations as far as
-how `.TRUE.' and `.FALSE.' are encoded as `INTEGER' values--Fortran
-code that assumes a particular coding is likely to use one of the above
-constructs, and is also likely to not work correctly on implementations
-using different encodings.
-
- *Note Equivalence Versus Equality::, for more information.
-
diff --git a/gcc/f/g77.info-11 b/gcc/f/g77.info-11
deleted file mode 100644
index b2176a2d92d..00000000000
--- a/gcc/f/g77.info-11
+++ /dev/null
@@ -1,1608 +0,0 @@
-This is Info file g77.info, produced by Makeinfo version 1.68 from the
-input file g77.texi.
-
- This file explains how to use the GNU Fortran system.
-
- Published by the Free Software Foundation 59 Temple Place - Suite 330
-Boston, MA 02111-1307 USA
-
- Copyright (C) 1995-1997 Free Software Foundation, Inc.
-
- Permission is granted to make and distribute verbatim copies of this
-manual provided the copyright notice and this permission notice are
-preserved on all copies.
-
- Permission is granted to copy and distribute modified versions of
-this manual under the conditions for verbatim copying, provided also
-that the sections entitled "GNU General Public License," "Funding for
-Free Software," and "Protect Your Freedom--Fight `Look And Feel'" are
-included exactly as in the original, and provided that the entire
-resulting derived work is distributed under the terms of a permission
-notice identical to this one.
-
- Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that the sections entitled "GNU General Public
-License," "Funding for Free Software," and "Protect Your Freedom--Fight
-`Look And Feel'", and this permission notice, may be included in
-translations approved by the Free Software Foundation instead of in the
-original English.
-
- Contributed by James Craig Burley (<burley@gnu.ai.mit.edu>).
-Inspired by a first pass at translating `g77-0.5.16/f/DOC' that was
-contributed to Craig by David Ronis (<ronis@onsager.chem.mcgill.ca>).
-
-INFO-DIR-SECTION Fortran Programming
-START-INFO-DIR-ENTRY
-* g77: (g77). The GNU Fortran compilation system.
-END-INFO-DIR-ENTRY
-
-
-File: g77.info, Node: Ugly Assigned Labels, Prev: Ugly Integer Conversions, Up: Distensions
-
-Ugly Assigned Labels
---------------------
-
- The `-fugly-assign' option forces `g77' to use the same storage for
-assigned labels as it would for a normal assignment to the same
-variable.
-
- For example, consider the following code fragment:
-
- I = 3
- ASSIGN 10 TO I
-
-Normally, for portability and improved diagnostics, `g77' reserves
-distinct storage for a "sibling" of `I', used only for `ASSIGN'
-statements to that variable (along with the corresponding
-assigned-`GOTO' and assigned-`FORMAT'-I/O statements that reference the
-variable).
-
- However, some code (that violates the ANSI FORTRAN 77 standard)
-attempts to copy assigned labels among variables involved with `ASSIGN'
-statements, as in:
-
- ASSIGN 10 TO I
- ISTATE(5) = I
- ...
- J = ISTATE(ICUR)
- GOTO J
-
-Such code doesn't work under `g77' unless `-fugly-assign' is specified
-on the command-line, ensuring that the value of `I' referenced in the
-second line is whatever value `g77' uses to designate statement label
-`10', so the value may be copied into the `ISTATE' array, later
-retrieved into a variable of the appropriate type (`J'), and used as
-the target of an assigned-`GOTO' statement.
-
- *Note:* To avoid subtle program bugs, when `-fugly-assign' is
-specified, `g77' requires the type of variables specified in
-assigned-label contexts *must* be the same type returned by `%LOC()'.
-On many systems, this type is effectively the same as
-`INTEGER(KIND=1)', while, on others, it is effectively the same as
-`INTEGER(KIND=2)'.
-
- Do *not* depend on `g77' actually writing valid pointers to these
-variables, however. While `g77' currently chooses that implementation,
-it might be changed in the future.
-
- *Note Assigned Statement Labels (ASSIGN and GOTO): Assigned
-Statement Labels, for implementation details on assigned-statement
-labels.
-
-
-File: g77.info, Node: Compiler, Next: Other Dialects, Prev: Language, Up: Top
-
-The GNU Fortran Compiler
-************************
-
- The GNU Fortran compiler, `g77', supports programs written in the
-GNU Fortran language and in some other dialects of Fortran.
-
- Some aspects of how `g77' works are universal regardless of dialect,
-and yet are not properly part of the GNU Fortran language itself.
-These are described below.
-
- *Note: This portion of the documentation definitely needs a lot of
-work!*
-
-* Menu:
-
-* Compiler Limits::
-* Compiler Types::
-* Compiler Constants::
-* Compiler Intrinsics::
-
-
-File: g77.info, Node: Compiler Limits, Next: Compiler Types, Up: Compiler
-
-Compiler Limits
-===============
-
- `g77', as with GNU tools in general, imposes few arbitrary
-restrictions on lengths of identifiers, number of continuation lines,
-number of external symbols in a program, and so on.
-
- For example, some other Fortran compiler have an option (such as
-`-NlX') to increase the limit on the number of continuation lines.
-Also, some Fortran compilation systems have an option (such as `-NxX')
-to increase the limit on the number of external symbols.
-
- `g77', `gcc', and GNU `ld' (the GNU linker) have no equivalent
-options, since they do not impose arbitrary limits in these areas.
-
- `g77' does currently limit the number of dimensions in an array to
-the same degree as do the Fortran standards--seven (7). This
-restriction might well be lifted in a future version.
-
-
-File: g77.info, Node: Compiler Types, Next: Compiler Constants, Prev: Compiler Limits, Up: Compiler
-
-Compiler Types
-==============
-
- Fortran implementations have a fair amount of freedom given them by
-the standard as far as how much storage space is used and how much
-precision and range is offered by the various types such as
-`LOGICAL(KIND=1)', `INTEGER(KIND=1)', `REAL(KIND=1)', `REAL(KIND=2)',
-`COMPLEX(KIND=1)', and `CHARACTER'. Further, many compilers offer
-so-called `*N' notation, but the interpretation of N varies across
-compilers and target architectures.
-
- The standard requires that `LOGICAL(KIND=1)', `INTEGER(KIND=1)', and
-`REAL(KIND=1)' occupy the same amount of storage space, and that
-`COMPLEX(KIND=1)' and `REAL(KIND=2)' take twice as much storage space
-as `REAL(KIND=1)'. Further, it requires that `COMPLEX(KIND=1)'
-entities be ordered such that when a `COMPLEX(KIND=1)' variable is
-storage-associated (such as via `EQUIVALENCE') with a two-element
-`REAL(KIND=1)' array named `R', `R(1)' corresponds to the real element
-and `R(2)' to the imaginary element of the `COMPLEX(KIND=1)' variable.
-
- (Few requirements as to precision or ranges of any of these are
-placed on the implementation, nor is the relationship of storage sizes
-of these types to the `CHARACTER' type specified, by the standard.)
-
- `g77' follows the above requirements, warning when compiling a
-program requires placement of items in memory that contradict the
-requirements of the target architecture. (For example, a program can
-require placement of a `REAL(KIND=2)' on a boundary that is not an even
-multiple of its size, but still an even multiple of the size of a
-`REAL(KIND=1)' variable. On some target architectures, using the
-canonical mapping of Fortran types to underlying architectural types,
-such placement is prohibited by the machine definition or the
-Application Binary Interface (ABI) in force for the configuration
-defined for building `gcc' and `g77'. `g77' warns about such
-situations when it encounters them.)
-
- `g77' follows consistent rules for configuring the mapping between
-Fortran types, including the `*N' notation, and the underlying
-architectural types as accessed by a similarly-configured applicable
-version of the `gcc' compiler. These rules offer a widely portable,
-consistent Fortran/C environment, although they might well conflict
-with the expectations of users of Fortran compilers designed and
-written for particular architectures.
-
- These rules are based on the configuration that is in force for the
-version of `gcc' built in the same release as `g77' (and which was
-therefore used to build both the `g77' compiler components and the
-`libf2c' run-time library):
-
-`REAL(KIND=1)'
- Same as `float' type.
-
-`REAL(KIND=2)'
- Same as whatever floating-point type that is twice the size of a
- `float'--usually, this is a `double'.
-
-`INTEGER(KIND=1)'
- Same as an integral type that is occupies the same amount of
- memory storage as `float'--usually, this is either an `int' or a
- `long int'.
-
-`LOGICAL(KIND=1)'
- Same `gcc' type as `INTEGER(KIND=1)'.
-
-`INTEGER(KIND=2)'
- Twice the size, and usually nearly twice the range, as
- `INTEGER(KIND=1)'--usually, this is either a `long int' or a `long
- long int'.
-
-`LOGICAL(KIND=2)'
- Same `gcc' type as `INTEGER(KIND=2)'.
-
-`INTEGER(KIND=3)'
- Same `gcc' type as signed `char'.
-
-`LOGICAL(KIND=3)'
- Same `gcc' type as `INTEGER(KIND=3)'.
-
-`INTEGER(KIND=6)'
- Twice the size, and usually nearly twice the range, as
- `INTEGER(KIND=3)'--usually, this is a `short'.
-
-`LOGICAL(KIND=6)'
- Same `gcc' type as `INTEGER(KIND=6)'.
-
-`COMPLEX(KIND=1)'
- Two `REAL(KIND=1)' scalars (one for the real part followed by one
- for the imaginary part).
-
-`COMPLEX(KIND=2)'
- Two `REAL(KIND=2)' scalars.
-
-`NUMERIC-TYPE*N'
- (Where NUMERIC-TYPE is any type other than `CHARACTER'.) Same as
- whatever `gcc' type occupies N times the storage space of a `gcc'
- `char' item.
-
-`DOUBLE PRECISION'
- Same as `REAL(KIND=2)'.
-
-`DOUBLE COMPLEX'
- Same as `COMPLEX(KIND=2)'.
-
- Note that the above are proposed correspondences and might change in
-future versions of `g77'--avoid writing code depending on them.
-
- Other types supported by `g77' are derived from gcc types such as
-`char', `short', `int', `long int', `long long int', `long double', and
-so on. That is, whatever types `gcc' already supports, `g77' supports
-now or probably will support in a future version. The rules for the
-`NUMERIC-TYPE*N' notation apply to these types, and new values for
-`NUMERIC-TYPE(KIND=N)' will be assigned in a way that encourages
-clarity, consistency, and portability.
-
-
-File: g77.info, Node: Compiler Constants, Next: Compiler Intrinsics, Prev: Compiler Types, Up: Compiler
-
-Compiler Constants
-==================
-
- `g77' strictly assigns types to *all* constants not documented as
-"typeless" (typeless constants including `'1'Z', for example). Many
-other Fortran compilers attempt to assign types to typed constants
-based on their context. This results in hard-to-find bugs, nonportable
-code, and is not in the spirit (though it strictly follows the letter)
-of the 77 and 90 standards.
-
- `g77' might offer, in a future release, explicit constructs by which
-a wider variety of typeless constants may be specified, and/or
-user-requested warnings indicating places where `g77' might differ from
-how other compilers assign types to constants.
-
- *Note Context-Sensitive Constants::, for more information on this
-issue.
-
-
-File: g77.info, Node: Compiler Intrinsics, Prev: Compiler Constants, Up: Compiler
-
-Compiler Intrinsics
-===================
-
- `g77' offers an ever-widening set of intrinsics. Currently these
-all are procedures (functions and subroutines).
-
- Some of these intrinsics are unimplemented, but their names reserved
-to reduce future problems with existing code as they are implemented.
-Others are implemented as part of the GNU Fortran language, while yet
-others are provided for compatibility with other dialects of Fortran
-but are not part of the GNU Fortran language.
-
- To manage these distinctions, `g77' provides intrinsic *groups*, a
-facility that is simply an extension of the intrinsic groups provided
-by the GNU Fortran language.
-
-* Menu:
-
-* Intrinsic Groups:: How intrinsics are grouped for easy management.
-* Other Intrinsics:: Intrinsics other than those in the GNU
- Fortran language.
-
-
-File: g77.info, Node: Intrinsic Groups, Next: Other Intrinsics, Up: Compiler Intrinsics
-
-Intrinsic Groups
-----------------
-
- A given specific intrinsic belongs in one or more groups. Each
-group is deleted, disabled, hidden, or enabled by default or a
-command-line option. The meaning of each term follows.
-
-Deleted
- No intrinsics are recognized as belonging to that group.
-
-Disabled
- Intrinsics are recognized as belonging to the group, but
- references to them (other than via the `INTRINSIC' statement) are
- disallowed through that group.
-
-Hidden
- Intrinsics in that group are recognized and enabled (if
- implemented) *only* if the first mention of the actual name of an
- intrinsic in a program unit is in an `INTRINSIC' statement.
-
-Enabled
- Intrinsics in that group are recognized and enabled (if
- implemented).
-
- The distinction between deleting and disabling a group is illustrated
-by the following example. Assume intrinsic `FOO' belongs only to group
-`FGR'. If group `FGR' is deleted, the following program unit will
-successfully compile, because `FOO()' will be seen as a reference to an
-external function named `FOO':
-
- PRINT *, FOO()
- END
-
-If group `FGR' is disabled, compiling the above program will produce
-diagnostics, either because the `FOO' intrinsic is improperly invoked
-or, if properly invoked, it is not enabled. To change the above
-program so it references an external function `FOO' instead of the
-disabled `FOO' intrinsic, add the following line to the top:
-
- EXTERNAL FOO
-
-So, deleting a group tells `g77' to pretend as though the intrinsics in
-that group do not exist at all, whereas disabling it tells `g77' to
-recognize them as (disabled) intrinsics in intrinsic-like contexts.
-
- Hiding a group is like enabling it, but the intrinsic must be first
-named in an `INTRINSIC' statement to be considered a reference to the
-intrinsic rather than to an external procedure. This might be the
-"safest" way to treat a new group of intrinsics when compiling old
-code, because it allows the old code to be generally written as if
-those new intrinsics never existed, but to be changed to use them by
-inserting `INTRINSIC' statements in the appropriate places. However,
-it should be the goal of development to use `EXTERNAL' for all names of
-external procedures that might be intrinsic names.
-
- If an intrinsic is in more than one group, it is enabled if any of
-its containing groups are enabled; if not so enabled, it is hidden if
-any of its containing groups are hidden; if not so hidden, it is
-disabled if any of its containing groups are disabled; if not so
-disabled, it is deleted. This extra complication is necessary because
-some intrinsics, such as `IBITS', belong to more than one group, and
-hence should be enabled if any of the groups to which they belong are
-enabled, and so on.
-
- The groups are:
-
-`badu77'
- UNIX intrinsics having inappropriate forms (usually functions that
- have intended side effects).
-
-`gnu'
- Intrinsics the GNU Fortran language supports that are extensions to
- the Fortran standards (77 and 90).
-
-`f2c'
- Intrinsics supported by AT&T's `f2c' converter and/or `libf2c'.
-
-`f90'
- Fortran 90 intrinsics.
-
-`mil'
- MIL-STD 1753 intrinsics (`MVBITS', `IAND', `BTEST', and so on).
-
-`unix'
- UNIX intrinsics (`IARGC', `EXIT', `ERF', and so on).
-
-`vxt'
- VAX/VMS FORTRAN (current as of v4) intrinsics.
-
-
-File: g77.info, Node: Other Intrinsics, Prev: Intrinsic Groups, Up: Compiler Intrinsics
-
-Other Intrinsics
-----------------
-
- `g77' supports intrinsics other than those in the GNU Fortran
-language proper. This set of intrinsics is described below.
-
- (Note that the empty lines appearing in the menu below are not
-intentional--they result from a bug in the `makeinfo' program.)
-
-* Menu:
-
-
-* ACosD Intrinsic:: (Reserved for future use.)
-
-* AIMax0 Intrinsic:: (Reserved for future use.)
-* AIMin0 Intrinsic:: (Reserved for future use.)
-
-* AJMax0 Intrinsic:: (Reserved for future use.)
-* AJMin0 Intrinsic:: (Reserved for future use.)
-
-* ASinD Intrinsic:: (Reserved for future use.)
-
-* ATan2D Intrinsic:: (Reserved for future use.)
-* ATanD Intrinsic:: (Reserved for future use.)
-
-* BITest Intrinsic:: (Reserved for future use.)
-
-* BJTest Intrinsic:: (Reserved for future use.)
-
-* CDAbs Intrinsic:: Absolute value (archaic).
-* CDCos Intrinsic:: Cosine (archaic).
-* CDExp Intrinsic:: Exponential (archaic).
-* CDLog Intrinsic:: Natural logarithm (archaic).
-* CDSin Intrinsic:: Sine (archaic).
-* CDSqRt Intrinsic:: Square root (archaic).
-
-* ChDir Intrinsic (function):: Change directory.
-
-* ChMod Intrinsic (function):: Change file modes.
-
-* CosD Intrinsic:: (Reserved for future use.)
-
-* DACosD Intrinsic:: (Reserved for future use.)
-
-* DASinD Intrinsic:: (Reserved for future use.)
-
-* DATan2D Intrinsic:: (Reserved for future use.)
-* DATanD Intrinsic:: (Reserved for future use.)
-* Date Intrinsic:: Get current date as dd-Mon-yy.
-
-* DbleQ Intrinsic:: (Reserved for future use.)
-
-* DCmplx Intrinsic:: Construct `COMPLEX(KIND=2)' value.
-* DConjg Intrinsic:: Complex conjugate (archaic).
-
-* DCosD Intrinsic:: (Reserved for future use.)
-
-* DFloat Intrinsic:: Conversion (archaic).
-
-* DFlotI Intrinsic:: (Reserved for future use.)
-* DFlotJ Intrinsic:: (Reserved for future use.)
-
-* DImag Intrinsic:: Convert/extract imaginary part of complex (archaic).
-
-* DReal Intrinsic:: Convert value to type `REAL(KIND=2)'.
-
-* DSinD Intrinsic:: (Reserved for future use.)
-
-* DTanD Intrinsic:: (Reserved for future use.)
-
-* Dtime Intrinsic (function):: Get elapsed time since last time.
-
-* FGet Intrinsic (function):: Read a character from unit 5 stream-wise.
-
-* FGetC Intrinsic (function):: Read a character stream-wise.
-
-* FloatI Intrinsic:: (Reserved for future use.)
-* FloatJ Intrinsic:: (Reserved for future use.)
-
-* FPut Intrinsic (function):: Write a character to unit 6 stream-wise.
-
-* FPutC Intrinsic (function):: Write a character stream-wise.
-
-* IDate Intrinsic (VXT):: Get local time info (VAX/VMS).
-
-* IIAbs Intrinsic:: (Reserved for future use.)
-* IIAnd Intrinsic:: (Reserved for future use.)
-* IIBClr Intrinsic:: (Reserved for future use.)
-* IIBits Intrinsic:: (Reserved for future use.)
-* IIBSet Intrinsic:: (Reserved for future use.)
-* IIDiM Intrinsic:: (Reserved for future use.)
-* IIDInt Intrinsic:: (Reserved for future use.)
-* IIDNnt Intrinsic:: (Reserved for future use.)
-* IIEOr Intrinsic:: (Reserved for future use.)
-* IIFix Intrinsic:: (Reserved for future use.)
-* IInt Intrinsic:: (Reserved for future use.)
-* IIOr Intrinsic:: (Reserved for future use.)
-* IIQint Intrinsic:: (Reserved for future use.)
-* IIQNnt Intrinsic:: (Reserved for future use.)
-* IIShftC Intrinsic:: (Reserved for future use.)
-* IISign Intrinsic:: (Reserved for future use.)
-
-* IMax0 Intrinsic:: (Reserved for future use.)
-* IMax1 Intrinsic:: (Reserved for future use.)
-* IMin0 Intrinsic:: (Reserved for future use.)
-* IMin1 Intrinsic:: (Reserved for future use.)
-* IMod Intrinsic:: (Reserved for future use.)
-
-* INInt Intrinsic:: (Reserved for future use.)
-* INot Intrinsic:: (Reserved for future use.)
-
-* IZExt Intrinsic:: (Reserved for future use.)
-* JIAbs Intrinsic:: (Reserved for future use.)
-* JIAnd Intrinsic:: (Reserved for future use.)
-* JIBClr Intrinsic:: (Reserved for future use.)
-* JIBits Intrinsic:: (Reserved for future use.)
-* JIBSet Intrinsic:: (Reserved for future use.)
-* JIDiM Intrinsic:: (Reserved for future use.)
-* JIDInt Intrinsic:: (Reserved for future use.)
-* JIDNnt Intrinsic:: (Reserved for future use.)
-* JIEOr Intrinsic:: (Reserved for future use.)
-* JIFix Intrinsic:: (Reserved for future use.)
-* JInt Intrinsic:: (Reserved for future use.)
-* JIOr Intrinsic:: (Reserved for future use.)
-* JIQint Intrinsic:: (Reserved for future use.)
-* JIQNnt Intrinsic:: (Reserved for future use.)
-* JIShft Intrinsic:: (Reserved for future use.)
-* JIShftC Intrinsic:: (Reserved for future use.)
-* JISign Intrinsic:: (Reserved for future use.)
-* JMax0 Intrinsic:: (Reserved for future use.)
-* JMax1 Intrinsic:: (Reserved for future use.)
-* JMin0 Intrinsic:: (Reserved for future use.)
-* JMin1 Intrinsic:: (Reserved for future use.)
-* JMod Intrinsic:: (Reserved for future use.)
-* JNInt Intrinsic:: (Reserved for future use.)
-* JNot Intrinsic:: (Reserved for future use.)
-* JZExt Intrinsic:: (Reserved for future use.)
-
-* Kill Intrinsic (function):: Signal a process.
-
-* Link Intrinsic (function):: Make hard link in file system.
-
-* QAbs Intrinsic:: (Reserved for future use.)
-* QACos Intrinsic:: (Reserved for future use.)
-* QACosD Intrinsic:: (Reserved for future use.)
-* QASin Intrinsic:: (Reserved for future use.)
-* QASinD Intrinsic:: (Reserved for future use.)
-* QATan Intrinsic:: (Reserved for future use.)
-* QATan2 Intrinsic:: (Reserved for future use.)
-* QATan2D Intrinsic:: (Reserved for future use.)
-* QATanD Intrinsic:: (Reserved for future use.)
-* QCos Intrinsic:: (Reserved for future use.)
-* QCosD Intrinsic:: (Reserved for future use.)
-* QCosH Intrinsic:: (Reserved for future use.)
-* QDiM Intrinsic:: (Reserved for future use.)
-* QExp Intrinsic:: (Reserved for future use.)
-* QExt Intrinsic:: (Reserved for future use.)
-* QExtD Intrinsic:: (Reserved for future use.)
-* QFloat Intrinsic:: (Reserved for future use.)
-* QInt Intrinsic:: (Reserved for future use.)
-* QLog Intrinsic:: (Reserved for future use.)
-* QLog10 Intrinsic:: (Reserved for future use.)
-* QMax1 Intrinsic:: (Reserved for future use.)
-* QMin1 Intrinsic:: (Reserved for future use.)
-* QMod Intrinsic:: (Reserved for future use.)
-* QNInt Intrinsic:: (Reserved for future use.)
-* QSin Intrinsic:: (Reserved for future use.)
-* QSinD Intrinsic:: (Reserved for future use.)
-* QSinH Intrinsic:: (Reserved for future use.)
-* QSqRt Intrinsic:: (Reserved for future use.)
-* QTan Intrinsic:: (Reserved for future use.)
-* QTanD Intrinsic:: (Reserved for future use.)
-* QTanH Intrinsic:: (Reserved for future use.)
-
-* Rename Intrinsic (function):: Rename file.
-
-* Secnds Intrinsic:: Get local time offset since midnight.
-
-* Signal Intrinsic (function):: Muck with signal handling.
-
-* SinD Intrinsic:: (Reserved for future use.)
-
-* SnglQ Intrinsic:: (Reserved for future use.)
-
-* SymLnk Intrinsic (function):: Make symbolic link in file system.
-
-* System Intrinsic (function):: Invoke shell (system) command.
-
-* TanD Intrinsic:: (Reserved for future use.)
-
-* Time Intrinsic (VXT):: Get the time as a character value.
-
-* UMask Intrinsic (function):: Set file creation permissions mask.
-
-* Unlink Intrinsic (function):: Unlink file.
-
-* ZExt Intrinsic:: (Reserved for future use.)
-
-
-File: g77.info, Node: ACosD Intrinsic, Next: AIMax0 Intrinsic, Up: Other Intrinsics
-
-ACosD Intrinsic
-...............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL ACosD' to use this name for an
-external procedure.
-
-
-File: g77.info, Node: AIMax0 Intrinsic, Next: AIMin0 Intrinsic, Prev: ACosD Intrinsic, Up: Other Intrinsics
-
-AIMax0 Intrinsic
-................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL AIMax0' to use this name for an
-external procedure.
-
-
-File: g77.info, Node: AIMin0 Intrinsic, Next: AJMax0 Intrinsic, Prev: AIMax0 Intrinsic, Up: Other Intrinsics
-
-AIMin0 Intrinsic
-................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL AIMin0' to use this name for an
-external procedure.
-
-
-File: g77.info, Node: AJMax0 Intrinsic, Next: AJMin0 Intrinsic, Prev: AIMin0 Intrinsic, Up: Other Intrinsics
-
-AJMax0 Intrinsic
-................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL AJMax0' to use this name for an
-external procedure.
-
-
-File: g77.info, Node: AJMin0 Intrinsic, Next: ASinD Intrinsic, Prev: AJMax0 Intrinsic, Up: Other Intrinsics
-
-AJMin0 Intrinsic
-................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL AJMin0' to use this name for an
-external procedure.
-
-
-File: g77.info, Node: ASinD Intrinsic, Next: ATan2D Intrinsic, Prev: AJMin0 Intrinsic, Up: Other Intrinsics
-
-ASinD Intrinsic
-...............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL ASinD' to use this name for an
-external procedure.
-
-
-File: g77.info, Node: ATan2D Intrinsic, Next: ATanD Intrinsic, Prev: ASinD Intrinsic, Up: Other Intrinsics
-
-ATan2D Intrinsic
-................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL ATan2D' to use this name for an
-external procedure.
-
-
-File: g77.info, Node: ATanD Intrinsic, Next: BITest Intrinsic, Prev: ATan2D Intrinsic, Up: Other Intrinsics
-
-ATanD Intrinsic
-...............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL ATanD' to use this name for an
-external procedure.
-
-
-File: g77.info, Node: BITest Intrinsic, Next: BJTest Intrinsic, Prev: ATanD Intrinsic, Up: Other Intrinsics
-
-BITest Intrinsic
-................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL BITest' to use this name for an
-external procedure.
-
-
-File: g77.info, Node: BJTest Intrinsic, Next: CDAbs Intrinsic, Prev: BITest Intrinsic, Up: Other Intrinsics
-
-BJTest Intrinsic
-................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL BJTest' to use this name for an
-external procedure.
-
-
-File: g77.info, Node: CDAbs Intrinsic, Next: CDCos Intrinsic, Prev: BJTest Intrinsic, Up: Other Intrinsics
-
-CDAbs Intrinsic
-...............
-
- CDAbs(A)
-
-CDAbs: `REAL(KIND=2)' function.
-
-A: `COMPLEX(KIND=2)'; scalar; INTENT(IN).
-
-Intrinsic groups: `f2c', `vxt'.
-
-Description:
-
- Archaic form of `ABS()' that is specific to one type for A. *Note
-Abs Intrinsic::.
-
-
-File: g77.info, Node: CDCos Intrinsic, Next: CDExp Intrinsic, Prev: CDAbs Intrinsic, Up: Other Intrinsics
-
-CDCos Intrinsic
-...............
-
- CDCos(X)
-
-CDCos: `COMPLEX(KIND=2)' function.
-
-X: `COMPLEX(KIND=2)'; scalar; INTENT(IN).
-
-Intrinsic groups: `f2c', `vxt'.
-
-Description:
-
- Archaic form of `COS()' that is specific to one type for X. *Note
-Cos Intrinsic::.
-
-
-File: g77.info, Node: CDExp Intrinsic, Next: CDLog Intrinsic, Prev: CDCos Intrinsic, Up: Other Intrinsics
-
-CDExp Intrinsic
-...............
-
- CDExp(X)
-
-CDExp: `COMPLEX(KIND=2)' function.
-
-X: `COMPLEX(KIND=2)'; scalar; INTENT(IN).
-
-Intrinsic groups: `f2c', `vxt'.
-
-Description:
-
- Archaic form of `EXP()' that is specific to one type for X. *Note
-Exp Intrinsic::.
-
-
-File: g77.info, Node: CDLog Intrinsic, Next: CDSin Intrinsic, Prev: CDExp Intrinsic, Up: Other Intrinsics
-
-CDLog Intrinsic
-...............
-
- CDLog(X)
-
-CDLog: `COMPLEX(KIND=2)' function.
-
-X: `COMPLEX(KIND=2)'; scalar; INTENT(IN).
-
-Intrinsic groups: `f2c', `vxt'.
-
-Description:
-
- Archaic form of `LOG()' that is specific to one type for X. *Note
-Log Intrinsic::.
-
-
-File: g77.info, Node: CDSin Intrinsic, Next: CDSqRt Intrinsic, Prev: CDLog Intrinsic, Up: Other Intrinsics
-
-CDSin Intrinsic
-...............
-
- CDSin(X)
-
-CDSin: `COMPLEX(KIND=2)' function.
-
-X: `COMPLEX(KIND=2)'; scalar; INTENT(IN).
-
-Intrinsic groups: `f2c', `vxt'.
-
-Description:
-
- Archaic form of `SIN()' that is specific to one type for X. *Note
-Sin Intrinsic::.
-
-
-File: g77.info, Node: CDSqRt Intrinsic, Next: ChDir Intrinsic (function), Prev: CDSin Intrinsic, Up: Other Intrinsics
-
-CDSqRt Intrinsic
-................
-
- CDSqRt(X)
-
-CDSqRt: `COMPLEX(KIND=2)' function.
-
-X: `COMPLEX(KIND=2)'; scalar; INTENT(IN).
-
-Intrinsic groups: `f2c', `vxt'.
-
-Description:
-
- Archaic form of `SQRT()' that is specific to one type for X. *Note
-SqRt Intrinsic::.
-
-
-File: g77.info, Node: ChDir Intrinsic (function), Next: ChMod Intrinsic (function), Prev: CDSqRt Intrinsic, Up: Other Intrinsics
-
-ChDir Intrinsic (function)
-..........................
-
- ChDir(DIR)
-
-ChDir: `INTEGER(KIND=1)' function.
-
-DIR: `CHARACTER'; scalar; INTENT(IN).
-
-Intrinsic groups: `badu77'.
-
-Description:
-
- Sets the current working directory to be DIR. Returns 0 on success
-or a non-zero error code. See `chdir(3)'.
-
- Due to the side effects performed by this intrinsic, the function
-form is not recommended.
-
- For information on other intrinsics with the same name: *Note ChDir
-Intrinsic (subroutine)::.
-
-
-File: g77.info, Node: ChMod Intrinsic (function), Next: CosD Intrinsic, Prev: ChDir Intrinsic (function), Up: Other Intrinsics
-
-ChMod Intrinsic (function)
-..........................
-
- ChMod(NAME, MODE)
-
-ChMod: `INTEGER(KIND=1)' function.
-
-NAME: `CHARACTER'; scalar; INTENT(IN).
-
-MODE: `CHARACTER'; scalar; INTENT(IN).
-
-Intrinsic groups: `badu77'.
-
-Description:
-
- Changes the access mode of file NAME according to the specification
-MODE, which is given in the format of `chmod(1)'. A null character
-(`CHAR(0)') marks the end of the name in NAME--otherwise, trailing
-blanks in NAME are ignored. Currently, NAME must not contain the
-single quote character.
-
- Returns 0 on success or a non-zero error code otherwise.
-
- Note that this currently works by actually invoking `/bin/chmod' (or
-the `chmod' found when the library was configured) and so may fail in
-some circumstances and will, anyway, be slow.
-
- Due to the side effects performed by this intrinsic, the function
-form is not recommended.
-
- For information on other intrinsics with the same name: *Note ChMod
-Intrinsic (subroutine)::.
-
-
-File: g77.info, Node: CosD Intrinsic, Next: DACosD Intrinsic, Prev: ChMod Intrinsic (function), Up: Other Intrinsics
-
-CosD Intrinsic
-..............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL CosD' to use this name for an
-external procedure.
-
-
-File: g77.info, Node: DACosD Intrinsic, Next: DASinD Intrinsic, Prev: CosD Intrinsic, Up: Other Intrinsics
-
-DACosD Intrinsic
-................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL DACosD' to use this name for an
-external procedure.
-
-
-File: g77.info, Node: DASinD Intrinsic, Next: DATan2D Intrinsic, Prev: DACosD Intrinsic, Up: Other Intrinsics
-
-DASinD Intrinsic
-................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL DASinD' to use this name for an
-external procedure.
-
-
-File: g77.info, Node: DATan2D Intrinsic, Next: DATanD Intrinsic, Prev: DASinD Intrinsic, Up: Other Intrinsics
-
-DATan2D Intrinsic
-.................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL DATan2D' to use this name for
-an external procedure.
-
-
-File: g77.info, Node: DATanD Intrinsic, Next: Date Intrinsic, Prev: DATan2D Intrinsic, Up: Other Intrinsics
-
-DATanD Intrinsic
-................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL DATanD' to use this name for an
-external procedure.
-
-
-File: g77.info, Node: Date Intrinsic, Next: DbleQ Intrinsic, Prev: DATanD Intrinsic, Up: Other Intrinsics
-
-Date Intrinsic
-..............
-
- CALL Date(DATE)
-
-DATE: `CHARACTER'; scalar; INTENT(OUT).
-
-Intrinsic groups: `vxt'.
-
-Description:
-
- Returns DATE in the form `DD-MMM-YY', representing the numeric day
-of the month DD, a three-character abbreviation of the month name MMM
-and the last two digits of the year YY, e.g. `25-Nov-96'.
-
- This intrinsic is not recommended, due to the year 2000 approaching.
-*Note CTime Intrinsic (subroutine)::, for information on obtaining more
-digits for the current (or any) date.
-
-
-File: g77.info, Node: DbleQ Intrinsic, Next: DCmplx Intrinsic, Prev: Date Intrinsic, Up: Other Intrinsics
-
-DbleQ Intrinsic
-...............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL DbleQ' to use this name for an
-external procedure.
-
-
-File: g77.info, Node: DCmplx Intrinsic, Next: DConjg Intrinsic, Prev: DbleQ Intrinsic, Up: Other Intrinsics
-
-DCmplx Intrinsic
-................
-
- DCmplx(X, Y)
-
-DCmplx: `COMPLEX(KIND=2)' function.
-
-X: `INTEGER', `REAL', or `COMPLEX'; scalar; INTENT(IN).
-
-Y: `INTEGER' or `REAL'; OPTIONAL (must be omitted if X is `COMPLEX');
-scalar; INTENT(IN).
-
-Intrinsic groups: `f2c', `vxt'.
-
-Description:
-
- If X is not type `COMPLEX', constructs a value of type
-`COMPLEX(KIND=2)' from the real and imaginary values specified by X and
-Y, respectively. If Y is omitted, `0D0' is assumed.
-
- If X is type `COMPLEX', converts it to type `COMPLEX(KIND=2)'.
-
- Although this intrinsic is not standard Fortran, it is a popular
-extension offered by many compilers that support `DOUBLE COMPLEX',
-since it offers the easiest way to convert to `DOUBLE COMPLEX' without
-using Fortran 90 features (such as the `KIND=' argument to the
-`CMPLX()' intrinsic).
-
- (`CMPLX(0D0, 0D0)' returns a single-precision `COMPLEX' result, as
-required by standard FORTRAN 77. That's why so many compilers provide
-`DCMPLX()', since `DCMPLX(0D0, 0D0)' returns a `DOUBLE COMPLEX' result.
-Still, `DCMPLX()' converts even `REAL*16' arguments to their `REAL*8'
-equivalents in most dialects of Fortran, so neither it nor `CMPLX()'
-allow easy construction of arbitrary-precision values without
-potentially forcing a conversion involving extending or reducing
-precision. GNU Fortran provides such an intrinsic, called `COMPLEX()'.)
-
- *Note Complex Intrinsic::, for information on easily constructing a
-`COMPLEX' value of arbitrary precision from `REAL' arguments.
-
-
-File: g77.info, Node: DConjg Intrinsic, Next: DCosD Intrinsic, Prev: DCmplx Intrinsic, Up: Other Intrinsics
-
-DConjg Intrinsic
-................
-
- DConjg(Z)
-
-DConjg: `COMPLEX(KIND=2)' function.
-
-Z: `COMPLEX(KIND=2)'; scalar; INTENT(IN).
-
-Intrinsic groups: `f2c', `vxt'.
-
-Description:
-
- Archaic form of `CONJG()' that is specific to one type for Z. *Note
-Conjg Intrinsic::.
-
-
-File: g77.info, Node: DCosD Intrinsic, Next: DFloat Intrinsic, Prev: DConjg Intrinsic, Up: Other Intrinsics
-
-DCosD Intrinsic
-...............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL DCosD' to use this name for an
-external procedure.
-
-
-File: g77.info, Node: DFloat Intrinsic, Next: DFlotI Intrinsic, Prev: DCosD Intrinsic, Up: Other Intrinsics
-
-DFloat Intrinsic
-................
-
- DFloat(A)
-
-DFloat: `REAL(KIND=2)' function.
-
-A: `INTEGER'; scalar; INTENT(IN).
-
-Intrinsic groups: `f2c', `vxt'.
-
-Description:
-
- Archaic form of `REAL()' that is specific to one type for A. *Note
-Real Intrinsic::.
-
-
-File: g77.info, Node: DFlotI Intrinsic, Next: DFlotJ Intrinsic, Prev: DFloat Intrinsic, Up: Other Intrinsics
-
-DFlotI Intrinsic
-................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL DFlotI' to use this name for an
-external procedure.
-
-
-File: g77.info, Node: DFlotJ Intrinsic, Next: DImag Intrinsic, Prev: DFlotI Intrinsic, Up: Other Intrinsics
-
-DFlotJ Intrinsic
-................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL DFlotJ' to use this name for an
-external procedure.
-
-
-File: g77.info, Node: DImag Intrinsic, Next: DReal Intrinsic, Prev: DFlotJ Intrinsic, Up: Other Intrinsics
-
-DImag Intrinsic
-...............
-
- DImag(Z)
-
-DImag: `REAL(KIND=2)' function.
-
-Z: `COMPLEX(KIND=2)'; scalar; INTENT(IN).
-
-Intrinsic groups: `f2c', `vxt'.
-
-Description:
-
- Archaic form of `AIMAG()' that is specific to one type for Z. *Note
-AImag Intrinsic::.
-
-
-File: g77.info, Node: DReal Intrinsic, Next: DSinD Intrinsic, Prev: DImag Intrinsic, Up: Other Intrinsics
-
-DReal Intrinsic
-...............
-
- DReal(A)
-
-DReal: `REAL(KIND=2)' function.
-
-A: `INTEGER', `REAL', or `COMPLEX'; scalar; INTENT(IN).
-
-Intrinsic groups: `vxt'.
-
-Description:
-
- Converts A to `REAL(KIND=2)'.
-
- If A is type `COMPLEX', its real part is converted (if necessary) to
-`REAL(KIND=2)', and its imaginary part is disregarded.
-
- Although this intrinsic is not standard Fortran, it is a popular
-extension offered by many compilers that support `DOUBLE COMPLEX',
-since it offers the easiest way to extract the real part of a `DOUBLE
-COMPLEX' value without using the Fortran 90 `REAL()' intrinsic in a way
-that produces a return value inconsistent with the way many FORTRAN 77
-compilers handle `REAL()' of a `DOUBLE COMPLEX' value.
-
- *Note RealPart Intrinsic::, for information on a GNU Fortran
-intrinsic that avoids these areas of confusion.
-
- *Note Dble Intrinsic::, for information on the standard FORTRAN 77
-replacement for `DREAL()'.
-
- *Note REAL() and AIMAG() of Complex::, for more information on this
-issue.
-
-
-File: g77.info, Node: DSinD Intrinsic, Next: DTanD Intrinsic, Prev: DReal Intrinsic, Up: Other Intrinsics
-
-DSinD Intrinsic
-...............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL DSinD' to use this name for an
-external procedure.
-
-
-File: g77.info, Node: DTanD Intrinsic, Next: Dtime Intrinsic (function), Prev: DSinD Intrinsic, Up: Other Intrinsics
-
-DTanD Intrinsic
-...............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL DTanD' to use this name for an
-external procedure.
-
-
-File: g77.info, Node: Dtime Intrinsic (function), Next: FGet Intrinsic (function), Prev: DTanD Intrinsic, Up: Other Intrinsics
-
-Dtime Intrinsic (function)
-..........................
-
- Dtime(TARRAY)
-
-Dtime: `REAL(KIND=1)' function.
-
-TARRAY: `REAL(KIND=1)'; DIMENSION(2); INTENT(OUT).
-
-Intrinsic groups: `badu77'.
-
-Description:
-
- Initially, return the number of seconds of runtime since the start
-of the process's execution as the function value, and the user and
-system components of this in `TARRAY(1)' and `TARRAY(2)' respectively.
-The functions' value is equal to `TARRAY(1) + TARRAY(2)'.
-
- Subsequent invocations of `DTIME()' return values accumulated since
-the previous invocation.
-
- Due to the side effects performed by this intrinsic, the function
-form is not recommended.
-
- For information on other intrinsics with the same name: *Note Dtime
-Intrinsic (subroutine)::.
-
-
-File: g77.info, Node: FGet Intrinsic (function), Next: FGetC Intrinsic (function), Prev: Dtime Intrinsic (function), Up: Other Intrinsics
-
-FGet Intrinsic (function)
-.........................
-
- FGet(C)
-
-FGet: `INTEGER(KIND=1)' function.
-
-C: `CHARACTER'; scalar; INTENT(OUT).
-
-Intrinsic groups: `badu77'.
-
-Description:
-
- Reads a single character into C in stream mode from unit 5
-(by-passing normal formatted input) using `getc(3)'. Returns 0 on
-success, -1 on end-of-file, and the error code from `ferror(3)'
-otherwise.
-
- Stream I/O should not be mixed with normal record-oriented
-(formatted or unformatted) I/O on the same unit; the results are
-unpredictable.
-
- For information on other intrinsics with the same name: *Note FGet
-Intrinsic (subroutine)::.
-
-
-File: g77.info, Node: FGetC Intrinsic (function), Next: FloatI Intrinsic, Prev: FGet Intrinsic (function), Up: Other Intrinsics
-
-FGetC Intrinsic (function)
-..........................
-
- FGetC(UNIT, C)
-
-FGetC: `INTEGER(KIND=1)' function.
-
-UNIT: `INTEGER'; scalar; INTENT(IN).
-
-C: `CHARACTER'; scalar; INTENT(OUT).
-
-Intrinsic groups: `badu77'.
-
-Description:
-
- Reads a single character into C in stream mode from unit UNIT
-(by-passing normal formatted output) using `getc(3)'. Returns 0 on
-success, -1 on end-of-file, and the error code from `ferror(3)'
-otherwise.
-
- Stream I/O should not be mixed with normal record-oriented
-(formatted or unformatted) I/O on the same unit; the results are
-unpredictable.
-
- For information on other intrinsics with the same name: *Note FGetC
-Intrinsic (subroutine)::.
-
-
-File: g77.info, Node: FloatI Intrinsic, Next: FloatJ Intrinsic, Prev: FGetC Intrinsic (function), Up: Other Intrinsics
-
-FloatI Intrinsic
-................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL FloatI' to use this name for an
-external procedure.
-
-
-File: g77.info, Node: FloatJ Intrinsic, Next: FPut Intrinsic (function), Prev: FloatI Intrinsic, Up: Other Intrinsics
-
-FloatJ Intrinsic
-................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL FloatJ' to use this name for an
-external procedure.
-
-
-File: g77.info, Node: FPut Intrinsic (function), Next: FPutC Intrinsic (function), Prev: FloatJ Intrinsic, Up: Other Intrinsics
-
-FPut Intrinsic (function)
-.........................
-
- FPut(C)
-
-FPut: `INTEGER(KIND=1)' function.
-
-C: `CHARACTER'; scalar; INTENT(IN).
-
-Intrinsic groups: `badu77'.
-
-Description:
-
- Writes the single character C in stream mode to unit 6 (by-passing
-normal formatted output) using `getc(3)'. Returns 0 on success, the
-error code from `ferror(3)' otherwise.
-
- Stream I/O should not be mixed with normal record-oriented
-(formatted or unformatted) I/O on the same unit; the results are
-unpredictable.
-
- For information on other intrinsics with the same name: *Note FPut
-Intrinsic (subroutine)::.
-
-
-File: g77.info, Node: FPutC Intrinsic (function), Next: IDate Intrinsic (VXT), Prev: FPut Intrinsic (function), Up: Other Intrinsics
-
-FPutC Intrinsic (function)
-..........................
-
- FPutC(UNIT, C)
-
-FPutC: `INTEGER(KIND=1)' function.
-
-UNIT: `INTEGER'; scalar; INTENT(IN).
-
-C: `CHARACTER'; scalar; INTENT(IN).
-
-Intrinsic groups: `badu77'.
-
-Description:
-
- Writes the single character C in stream mode to unit UNIT
-(by-passing normal formatted output) using `putc(3)'. Returns 0 on
-success, the error code from `ferror(3)' otherwise.
-
- Stream I/O should not be mixed with normal record-oriented
-(formatted or unformatted) I/O on the same unit; the results are
-unpredictable.
-
- For information on other intrinsics with the same name: *Note FPutC
-Intrinsic (subroutine)::.
-
-
-File: g77.info, Node: IDate Intrinsic (VXT), Next: IIAbs Intrinsic, Prev: FPutC Intrinsic (function), Up: Other Intrinsics
-
-IDate Intrinsic (VXT)
-.....................
-
- CALL IDate(M, D, Y)
-
-M: `INTEGER(KIND=1)'; scalar; INTENT(OUT).
-
-D: `INTEGER(KIND=1)'; scalar; INTENT(OUT).
-
-Y: `INTEGER(KIND=1)'; scalar; INTENT(OUT).
-
-Intrinsic groups: `vxt'.
-
-Description:
-
- Returns the numerical values of the current local time. The month
-(in the range 1-12) is returned in M, the day (in the range 1-7) in D,
-and the year in Y (in the range 0-99).
-
- This intrinsic is not recommended, due to the year 2000 approaching.
-
- For information on other intrinsics with the same name: *Note IDate
-Intrinsic (UNIX)::.
-
-
-File: g77.info, Node: IIAbs Intrinsic, Next: IIAnd Intrinsic, Prev: IDate Intrinsic (VXT), Up: Other Intrinsics
-
-IIAbs Intrinsic
-...............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL IIAbs' to use this name for an
-external procedure.
-
-
-File: g77.info, Node: IIAnd Intrinsic, Next: IIBClr Intrinsic, Prev: IIAbs Intrinsic, Up: Other Intrinsics
-
-IIAnd Intrinsic
-...............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL IIAnd' to use this name for an
-external procedure.
-
-
-File: g77.info, Node: IIBClr Intrinsic, Next: IIBits Intrinsic, Prev: IIAnd Intrinsic, Up: Other Intrinsics
-
-IIBClr Intrinsic
-................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL IIBClr' to use this name for an
-external procedure.
-
-
-File: g77.info, Node: IIBits Intrinsic, Next: IIBSet Intrinsic, Prev: IIBClr Intrinsic, Up: Other Intrinsics
-
-IIBits Intrinsic
-................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL IIBits' to use this name for an
-external procedure.
-
-
-File: g77.info, Node: IIBSet Intrinsic, Next: IIDiM Intrinsic, Prev: IIBits Intrinsic, Up: Other Intrinsics
-
-IIBSet Intrinsic
-................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL IIBSet' to use this name for an
-external procedure.
-
-
-File: g77.info, Node: IIDiM Intrinsic, Next: IIDInt Intrinsic, Prev: IIBSet Intrinsic, Up: Other Intrinsics
-
-IIDiM Intrinsic
-...............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL IIDiM' to use this name for an
-external procedure.
-
-
-File: g77.info, Node: IIDInt Intrinsic, Next: IIDNnt Intrinsic, Prev: IIDiM Intrinsic, Up: Other Intrinsics
-
-IIDInt Intrinsic
-................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL IIDInt' to use this name for an
-external procedure.
-
-
-File: g77.info, Node: IIDNnt Intrinsic, Next: IIEOr Intrinsic, Prev: IIDInt Intrinsic, Up: Other Intrinsics
-
-IIDNnt Intrinsic
-................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL IIDNnt' to use this name for an
-external procedure.
-
-
-File: g77.info, Node: IIEOr Intrinsic, Next: IIFix Intrinsic, Prev: IIDNnt Intrinsic, Up: Other Intrinsics
-
-IIEOr Intrinsic
-...............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL IIEOr' to use this name for an
-external procedure.
-
-
-File: g77.info, Node: IIFix Intrinsic, Next: IInt Intrinsic, Prev: IIEOr Intrinsic, Up: Other Intrinsics
-
-IIFix Intrinsic
-...............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL IIFix' to use this name for an
-external procedure.
-
-
-File: g77.info, Node: IInt Intrinsic, Next: IIOr Intrinsic, Prev: IIFix Intrinsic, Up: Other Intrinsics
-
-IInt Intrinsic
-..............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL IInt' to use this name for an
-external procedure.
-
-
-File: g77.info, Node: IIOr Intrinsic, Next: IIQint Intrinsic, Prev: IInt Intrinsic, Up: Other Intrinsics
-
-IIOr Intrinsic
-..............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL IIOr' to use this name for an
-external procedure.
-
-
-File: g77.info, Node: IIQint Intrinsic, Next: IIQNnt Intrinsic, Prev: IIOr Intrinsic, Up: Other Intrinsics
-
-IIQint Intrinsic
-................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL IIQint' to use this name for an
-external procedure.
-
-
-File: g77.info, Node: IIQNnt Intrinsic, Next: IIShftC Intrinsic, Prev: IIQint Intrinsic, Up: Other Intrinsics
-
-IIQNnt Intrinsic
-................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL IIQNnt' to use this name for an
-external procedure.
-
-
-File: g77.info, Node: IIShftC Intrinsic, Next: IISign Intrinsic, Prev: IIQNnt Intrinsic, Up: Other Intrinsics
-
-IIShftC Intrinsic
-.................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL IIShftC' to use this name for
-an external procedure.
-
-
-File: g77.info, Node: IISign Intrinsic, Next: IMax0 Intrinsic, Prev: IIShftC Intrinsic, Up: Other Intrinsics
-
-IISign Intrinsic
-................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL IISign' to use this name for an
-external procedure.
-
-
-File: g77.info, Node: IMax0 Intrinsic, Next: IMax1 Intrinsic, Prev: IISign Intrinsic, Up: Other Intrinsics
-
-IMax0 Intrinsic
-...............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL IMax0' to use this name for an
-external procedure.
-
-
-File: g77.info, Node: IMax1 Intrinsic, Next: IMin0 Intrinsic, Prev: IMax0 Intrinsic, Up: Other Intrinsics
-
-IMax1 Intrinsic
-...............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL IMax1' to use this name for an
-external procedure.
-
-
-File: g77.info, Node: IMin0 Intrinsic, Next: IMin1 Intrinsic, Prev: IMax1 Intrinsic, Up: Other Intrinsics
-
-IMin0 Intrinsic
-...............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL IMin0' to use this name for an
-external procedure.
-
-
-File: g77.info, Node: IMin1 Intrinsic, Next: IMod Intrinsic, Prev: IMin0 Intrinsic, Up: Other Intrinsics
-
-IMin1 Intrinsic
-...............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL IMin1' to use this name for an
-external procedure.
-
-
-File: g77.info, Node: IMod Intrinsic, Next: INInt Intrinsic, Prev: IMin1 Intrinsic, Up: Other Intrinsics
-
-IMod Intrinsic
-..............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL IMod' to use this name for an
-external procedure.
-
-
-File: g77.info, Node: INInt Intrinsic, Next: INot Intrinsic, Prev: IMod Intrinsic, Up: Other Intrinsics
-
-INInt Intrinsic
-...............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL INInt' to use this name for an
-external procedure.
-
-
-File: g77.info, Node: INot Intrinsic, Next: IZExt Intrinsic, Prev: INInt Intrinsic, Up: Other Intrinsics
-
-INot Intrinsic
-..............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL INot' to use this name for an
-external procedure.
-
-
-File: g77.info, Node: IZExt Intrinsic, Next: JIAbs Intrinsic, Prev: INot Intrinsic, Up: Other Intrinsics
-
-IZExt Intrinsic
-...............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL IZExt' to use this name for an
-external procedure.
-
-
-File: g77.info, Node: JIAbs Intrinsic, Next: JIAnd Intrinsic, Prev: IZExt Intrinsic, Up: Other Intrinsics
-
-JIAbs Intrinsic
-...............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL JIAbs' to use this name for an
-external procedure.
-
-
-File: g77.info, Node: JIAnd Intrinsic, Next: JIBClr Intrinsic, Prev: JIAbs Intrinsic, Up: Other Intrinsics
-
-JIAnd Intrinsic
-...............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL JIAnd' to use this name for an
-external procedure.
-
-
-File: g77.info, Node: JIBClr Intrinsic, Next: JIBits Intrinsic, Prev: JIAnd Intrinsic, Up: Other Intrinsics
-
-JIBClr Intrinsic
-................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL JIBClr' to use this name for an
-external procedure.
-
-
-File: g77.info, Node: JIBits Intrinsic, Next: JIBSet Intrinsic, Prev: JIBClr Intrinsic, Up: Other Intrinsics
-
-JIBits Intrinsic
-................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL JIBits' to use this name for an
-external procedure.
-
diff --git a/gcc/f/g77.info-12 b/gcc/f/g77.info-12
deleted file mode 100644
index 3bf2594382b..00000000000
--- a/gcc/f/g77.info-12
+++ /dev/null
@@ -1,1443 +0,0 @@
-This is Info file g77.info, produced by Makeinfo version 1.68 from the
-input file g77.texi.
-
- This file explains how to use the GNU Fortran system.
-
- Published by the Free Software Foundation 59 Temple Place - Suite 330
-Boston, MA 02111-1307 USA
-
- Copyright (C) 1995-1997 Free Software Foundation, Inc.
-
- Permission is granted to make and distribute verbatim copies of this
-manual provided the copyright notice and this permission notice are
-preserved on all copies.
-
- Permission is granted to copy and distribute modified versions of
-this manual under the conditions for verbatim copying, provided also
-that the sections entitled "GNU General Public License," "Funding for
-Free Software," and "Protect Your Freedom--Fight `Look And Feel'" are
-included exactly as in the original, and provided that the entire
-resulting derived work is distributed under the terms of a permission
-notice identical to this one.
-
- Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that the sections entitled "GNU General Public
-License," "Funding for Free Software," and "Protect Your Freedom--Fight
-`Look And Feel'", and this permission notice, may be included in
-translations approved by the Free Software Foundation instead of in the
-original English.
-
- Contributed by James Craig Burley (<burley@gnu.ai.mit.edu>).
-Inspired by a first pass at translating `g77-0.5.16/f/DOC' that was
-contributed to Craig by David Ronis (<ronis@onsager.chem.mcgill.ca>).
-
-INFO-DIR-SECTION Fortran Programming
-START-INFO-DIR-ENTRY
-* g77: (g77). The GNU Fortran compilation system.
-END-INFO-DIR-ENTRY
-
-
-File: g77.info, Node: JIBSet Intrinsic, Next: JIDiM Intrinsic, Prev: JIBits Intrinsic, Up: Other Intrinsics
-
-JIBSet Intrinsic
-................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL JIBSet' to use this name for an
-external procedure.
-
-
-File: g77.info, Node: JIDiM Intrinsic, Next: JIDInt Intrinsic, Prev: JIBSet Intrinsic, Up: Other Intrinsics
-
-JIDiM Intrinsic
-...............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL JIDiM' to use this name for an
-external procedure.
-
-
-File: g77.info, Node: JIDInt Intrinsic, Next: JIDNnt Intrinsic, Prev: JIDiM Intrinsic, Up: Other Intrinsics
-
-JIDInt Intrinsic
-................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL JIDInt' to use this name for an
-external procedure.
-
-
-File: g77.info, Node: JIDNnt Intrinsic, Next: JIEOr Intrinsic, Prev: JIDInt Intrinsic, Up: Other Intrinsics
-
-JIDNnt Intrinsic
-................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL JIDNnt' to use this name for an
-external procedure.
-
-
-File: g77.info, Node: JIEOr Intrinsic, Next: JIFix Intrinsic, Prev: JIDNnt Intrinsic, Up: Other Intrinsics
-
-JIEOr Intrinsic
-...............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL JIEOr' to use this name for an
-external procedure.
-
-
-File: g77.info, Node: JIFix Intrinsic, Next: JInt Intrinsic, Prev: JIEOr Intrinsic, Up: Other Intrinsics
-
-JIFix Intrinsic
-...............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL JIFix' to use this name for an
-external procedure.
-
-
-File: g77.info, Node: JInt Intrinsic, Next: JIOr Intrinsic, Prev: JIFix Intrinsic, Up: Other Intrinsics
-
-JInt Intrinsic
-..............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL JInt' to use this name for an
-external procedure.
-
-
-File: g77.info, Node: JIOr Intrinsic, Next: JIQint Intrinsic, Prev: JInt Intrinsic, Up: Other Intrinsics
-
-JIOr Intrinsic
-..............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL JIOr' to use this name for an
-external procedure.
-
-
-File: g77.info, Node: JIQint Intrinsic, Next: JIQNnt Intrinsic, Prev: JIOr Intrinsic, Up: Other Intrinsics
-
-JIQint Intrinsic
-................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL JIQint' to use this name for an
-external procedure.
-
-
-File: g77.info, Node: JIQNnt Intrinsic, Next: JIShft Intrinsic, Prev: JIQint Intrinsic, Up: Other Intrinsics
-
-JIQNnt Intrinsic
-................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL JIQNnt' to use this name for an
-external procedure.
-
-
-File: g77.info, Node: JIShft Intrinsic, Next: JIShftC Intrinsic, Prev: JIQNnt Intrinsic, Up: Other Intrinsics
-
-JIShft Intrinsic
-................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL JIShft' to use this name for an
-external procedure.
-
-
-File: g77.info, Node: JIShftC Intrinsic, Next: JISign Intrinsic, Prev: JIShft Intrinsic, Up: Other Intrinsics
-
-JIShftC Intrinsic
-.................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL JIShftC' to use this name for
-an external procedure.
-
-
-File: g77.info, Node: JISign Intrinsic, Next: JMax0 Intrinsic, Prev: JIShftC Intrinsic, Up: Other Intrinsics
-
-JISign Intrinsic
-................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL JISign' to use this name for an
-external procedure.
-
-
-File: g77.info, Node: JMax0 Intrinsic, Next: JMax1 Intrinsic, Prev: JISign Intrinsic, Up: Other Intrinsics
-
-JMax0 Intrinsic
-...............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL JMax0' to use this name for an
-external procedure.
-
-
-File: g77.info, Node: JMax1 Intrinsic, Next: JMin0 Intrinsic, Prev: JMax0 Intrinsic, Up: Other Intrinsics
-
-JMax1 Intrinsic
-...............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL JMax1' to use this name for an
-external procedure.
-
-
-File: g77.info, Node: JMin0 Intrinsic, Next: JMin1 Intrinsic, Prev: JMax1 Intrinsic, Up: Other Intrinsics
-
-JMin0 Intrinsic
-...............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL JMin0' to use this name for an
-external procedure.
-
-
-File: g77.info, Node: JMin1 Intrinsic, Next: JMod Intrinsic, Prev: JMin0 Intrinsic, Up: Other Intrinsics
-
-JMin1 Intrinsic
-...............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL JMin1' to use this name for an
-external procedure.
-
-
-File: g77.info, Node: JMod Intrinsic, Next: JNInt Intrinsic, Prev: JMin1 Intrinsic, Up: Other Intrinsics
-
-JMod Intrinsic
-..............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL JMod' to use this name for an
-external procedure.
-
-
-File: g77.info, Node: JNInt Intrinsic, Next: JNot Intrinsic, Prev: JMod Intrinsic, Up: Other Intrinsics
-
-JNInt Intrinsic
-...............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL JNInt' to use this name for an
-external procedure.
-
-
-File: g77.info, Node: JNot Intrinsic, Next: JZExt Intrinsic, Prev: JNInt Intrinsic, Up: Other Intrinsics
-
-JNot Intrinsic
-..............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL JNot' to use this name for an
-external procedure.
-
-
-File: g77.info, Node: JZExt Intrinsic, Next: Kill Intrinsic (function), Prev: JNot Intrinsic, Up: Other Intrinsics
-
-JZExt Intrinsic
-...............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL JZExt' to use this name for an
-external procedure.
-
-
-File: g77.info, Node: Kill Intrinsic (function), Next: Link Intrinsic (function), Prev: JZExt Intrinsic, Up: Other Intrinsics
-
-Kill Intrinsic (function)
-.........................
-
- Kill(PID, SIGNAL)
-
-Kill: `INTEGER(KIND=1)' function.
-
-PID: `INTEGER'; scalar; INTENT(IN).
-
-SIGNAL: `INTEGER'; scalar; INTENT(IN).
-
-Intrinsic groups: `badu77'.
-
-Description:
-
- Sends the signal specified by SIGNAL to the process PID. Returns 0
-on success or a non-zero error code. See `kill(2)'.
-
- Due to the side effects performed by this intrinsic, the function
-form is not recommended.
-
- For information on other intrinsics with the same name: *Note Kill
-Intrinsic (subroutine)::.
-
-
-File: g77.info, Node: Link Intrinsic (function), Next: QAbs Intrinsic, Prev: Kill Intrinsic (function), Up: Other Intrinsics
-
-Link Intrinsic (function)
-.........................
-
- Link(PATH1, PATH2)
-
-Link: `INTEGER(KIND=1)' function.
-
-PATH1: `CHARACTER'; scalar; INTENT(IN).
-
-PATH2: `CHARACTER'; scalar; INTENT(IN).
-
-Intrinsic groups: `badu77'.
-
-Description:
-
- Makes a (hard) link from file PATH1 to PATH2. A null character
-(`CHAR(0)') marks the end of the names in PATH1 and PATH2--otherwise,
-trailing blanks in PATH1 and PATH2 are ignored. Returns 0 on success
-or a non-zero error code. See `link(2)'.
-
- Due to the side effects performed by this intrinsic, the function
-form is not recommended.
-
- For information on other intrinsics with the same name: *Note Link
-Intrinsic (subroutine)::.
-
-
-File: g77.info, Node: QAbs Intrinsic, Next: QACos Intrinsic, Prev: Link Intrinsic (function), Up: Other Intrinsics
-
-QAbs Intrinsic
-..............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL QAbs' to use this name for an
-external procedure.
-
-
-File: g77.info, Node: QACos Intrinsic, Next: QACosD Intrinsic, Prev: QAbs Intrinsic, Up: Other Intrinsics
-
-QACos Intrinsic
-...............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL QACos' to use this name for an
-external procedure.
-
-
-File: g77.info, Node: QACosD Intrinsic, Next: QASin Intrinsic, Prev: QACos Intrinsic, Up: Other Intrinsics
-
-QACosD Intrinsic
-................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL QACosD' to use this name for an
-external procedure.
-
-
-File: g77.info, Node: QASin Intrinsic, Next: QASinD Intrinsic, Prev: QACosD Intrinsic, Up: Other Intrinsics
-
-QASin Intrinsic
-...............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL QASin' to use this name for an
-external procedure.
-
-
-File: g77.info, Node: QASinD Intrinsic, Next: QATan Intrinsic, Prev: QASin Intrinsic, Up: Other Intrinsics
-
-QASinD Intrinsic
-................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL QASinD' to use this name for an
-external procedure.
-
-
-File: g77.info, Node: QATan Intrinsic, Next: QATan2 Intrinsic, Prev: QASinD Intrinsic, Up: Other Intrinsics
-
-QATan Intrinsic
-...............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL QATan' to use this name for an
-external procedure.
-
-
-File: g77.info, Node: QATan2 Intrinsic, Next: QATan2D Intrinsic, Prev: QATan Intrinsic, Up: Other Intrinsics
-
-QATan2 Intrinsic
-................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL QATan2' to use this name for an
-external procedure.
-
-
-File: g77.info, Node: QATan2D Intrinsic, Next: QATanD Intrinsic, Prev: QATan2 Intrinsic, Up: Other Intrinsics
-
-QATan2D Intrinsic
-.................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL QATan2D' to use this name for
-an external procedure.
-
-
-File: g77.info, Node: QATanD Intrinsic, Next: QCos Intrinsic, Prev: QATan2D Intrinsic, Up: Other Intrinsics
-
-QATanD Intrinsic
-................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL QATanD' to use this name for an
-external procedure.
-
-
-File: g77.info, Node: QCos Intrinsic, Next: QCosD Intrinsic, Prev: QATanD Intrinsic, Up: Other Intrinsics
-
-QCos Intrinsic
-..............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL QCos' to use this name for an
-external procedure.
-
-
-File: g77.info, Node: QCosD Intrinsic, Next: QCosH Intrinsic, Prev: QCos Intrinsic, Up: Other Intrinsics
-
-QCosD Intrinsic
-...............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL QCosD' to use this name for an
-external procedure.
-
-
-File: g77.info, Node: QCosH Intrinsic, Next: QDiM Intrinsic, Prev: QCosD Intrinsic, Up: Other Intrinsics
-
-QCosH Intrinsic
-...............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL QCosH' to use this name for an
-external procedure.
-
-
-File: g77.info, Node: QDiM Intrinsic, Next: QExp Intrinsic, Prev: QCosH Intrinsic, Up: Other Intrinsics
-
-QDiM Intrinsic
-..............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL QDiM' to use this name for an
-external procedure.
-
-
-File: g77.info, Node: QExp Intrinsic, Next: QExt Intrinsic, Prev: QDiM Intrinsic, Up: Other Intrinsics
-
-QExp Intrinsic
-..............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL QExp' to use this name for an
-external procedure.
-
-
-File: g77.info, Node: QExt Intrinsic, Next: QExtD Intrinsic, Prev: QExp Intrinsic, Up: Other Intrinsics
-
-QExt Intrinsic
-..............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL QExt' to use this name for an
-external procedure.
-
-
-File: g77.info, Node: QExtD Intrinsic, Next: QFloat Intrinsic, Prev: QExt Intrinsic, Up: Other Intrinsics
-
-QExtD Intrinsic
-...............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL QExtD' to use this name for an
-external procedure.
-
-
-File: g77.info, Node: QFloat Intrinsic, Next: QInt Intrinsic, Prev: QExtD Intrinsic, Up: Other Intrinsics
-
-QFloat Intrinsic
-................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL QFloat' to use this name for an
-external procedure.
-
-
-File: g77.info, Node: QInt Intrinsic, Next: QLog Intrinsic, Prev: QFloat Intrinsic, Up: Other Intrinsics
-
-QInt Intrinsic
-..............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL QInt' to use this name for an
-external procedure.
-
-
-File: g77.info, Node: QLog Intrinsic, Next: QLog10 Intrinsic, Prev: QInt Intrinsic, Up: Other Intrinsics
-
-QLog Intrinsic
-..............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL QLog' to use this name for an
-external procedure.
-
-
-File: g77.info, Node: QLog10 Intrinsic, Next: QMax1 Intrinsic, Prev: QLog Intrinsic, Up: Other Intrinsics
-
-QLog10 Intrinsic
-................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL QLog10' to use this name for an
-external procedure.
-
-
-File: g77.info, Node: QMax1 Intrinsic, Next: QMin1 Intrinsic, Prev: QLog10 Intrinsic, Up: Other Intrinsics
-
-QMax1 Intrinsic
-...............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL QMax1' to use this name for an
-external procedure.
-
-
-File: g77.info, Node: QMin1 Intrinsic, Next: QMod Intrinsic, Prev: QMax1 Intrinsic, Up: Other Intrinsics
-
-QMin1 Intrinsic
-...............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL QMin1' to use this name for an
-external procedure.
-
-
-File: g77.info, Node: QMod Intrinsic, Next: QNInt Intrinsic, Prev: QMin1 Intrinsic, Up: Other Intrinsics
-
-QMod Intrinsic
-..............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL QMod' to use this name for an
-external procedure.
-
-
-File: g77.info, Node: QNInt Intrinsic, Next: QSin Intrinsic, Prev: QMod Intrinsic, Up: Other Intrinsics
-
-QNInt Intrinsic
-...............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL QNInt' to use this name for an
-external procedure.
-
-
-File: g77.info, Node: QSin Intrinsic, Next: QSinD Intrinsic, Prev: QNInt Intrinsic, Up: Other Intrinsics
-
-QSin Intrinsic
-..............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL QSin' to use this name for an
-external procedure.
-
-
-File: g77.info, Node: QSinD Intrinsic, Next: QSinH Intrinsic, Prev: QSin Intrinsic, Up: Other Intrinsics
-
-QSinD Intrinsic
-...............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL QSinD' to use this name for an
-external procedure.
-
-
-File: g77.info, Node: QSinH Intrinsic, Next: QSqRt Intrinsic, Prev: QSinD Intrinsic, Up: Other Intrinsics
-
-QSinH Intrinsic
-...............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL QSinH' to use this name for an
-external procedure.
-
-
-File: g77.info, Node: QSqRt Intrinsic, Next: QTan Intrinsic, Prev: QSinH Intrinsic, Up: Other Intrinsics
-
-QSqRt Intrinsic
-...............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL QSqRt' to use this name for an
-external procedure.
-
-
-File: g77.info, Node: QTan Intrinsic, Next: QTanD Intrinsic, Prev: QSqRt Intrinsic, Up: Other Intrinsics
-
-QTan Intrinsic
-..............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL QTan' to use this name for an
-external procedure.
-
-
-File: g77.info, Node: QTanD Intrinsic, Next: QTanH Intrinsic, Prev: QTan Intrinsic, Up: Other Intrinsics
-
-QTanD Intrinsic
-...............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL QTanD' to use this name for an
-external procedure.
-
-
-File: g77.info, Node: QTanH Intrinsic, Next: Rename Intrinsic (function), Prev: QTanD Intrinsic, Up: Other Intrinsics
-
-QTanH Intrinsic
-...............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL QTanH' to use this name for an
-external procedure.
-
-
-File: g77.info, Node: Rename Intrinsic (function), Next: Secnds Intrinsic, Prev: QTanH Intrinsic, Up: Other Intrinsics
-
-Rename Intrinsic (function)
-...........................
-
- Rename(PATH1, PATH2)
-
-Rename: `INTEGER(KIND=1)' function.
-
-PATH1: `CHARACTER'; scalar; INTENT(IN).
-
-PATH2: `CHARACTER'; scalar; INTENT(IN).
-
-Intrinsic groups: `badu77'.
-
-Description:
-
- Renames the file PATH1 to PATH2. A null character (`CHAR(0)') marks
-the end of the names in PATH1 and PATH2--otherwise, trailing blanks in
-PATH1 and PATH2 are ignored. See `rename(2)'. Returns 0 on success or
-a non-zero error code.
-
- Due to the side effects performed by this intrinsic, the function
-form is not recommended.
-
- For information on other intrinsics with the same name: *Note Rename
-Intrinsic (subroutine)::.
-
-
-File: g77.info, Node: Secnds Intrinsic, Next: Signal Intrinsic (function), Prev: Rename Intrinsic (function), Up: Other Intrinsics
-
-Secnds Intrinsic
-................
-
- Secnds(T)
-
-Secnds: `REAL(KIND=1)' function.
-
-T: `REAL(KIND=1)'; scalar; INTENT(IN).
-
-Intrinsic groups: `vxt'.
-
-Description:
-
- Returns the local time in seconds since midnight minus the value T.
-
-
-File: g77.info, Node: Signal Intrinsic (function), Next: SinD Intrinsic, Prev: Secnds Intrinsic, Up: Other Intrinsics
-
-Signal Intrinsic (function)
-...........................
-
- Signal(NUMBER, HANDLER)
-
-Signal: `INTEGER(KIND=1)' function.
-
-NUMBER: `INTEGER'; scalar; INTENT(IN).
-
-HANDLER: Signal handler (`INTEGER FUNCTION' or `SUBROUTINE') or
-dummy/global `INTEGER(KIND=1)' scalar.
-
-Intrinsic groups: `badu77'.
-
-Description:
-
- If HANDLER is a an `EXTERNAL' routine, arranges for it to be invoked
-with a single integer argument (of system-dependent length) when signal
-NUMBER occurs. If NUMBER is an integer, it can be used to turn off
-handling of signal HANDLER or revert to its default action. See
-`signal(2)'.
-
- Note that HANDLER will be called using C conventions, so its value in
-Fortran terms is obtained by applying `%LOC()' (or LOC()) to it.
-
- The value returned by `signal(2)' is returned.
-
- Due to the side effects performed by this intrinsic, the function
-form is not recommended.
-
- For information on other intrinsics with the same name: *Note Signal
-Intrinsic (subroutine)::.
-
-
-File: g77.info, Node: SinD Intrinsic, Next: SnglQ Intrinsic, Prev: Signal Intrinsic (function), Up: Other Intrinsics
-
-SinD Intrinsic
-..............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL SinD' to use this name for an
-external procedure.
-
-
-File: g77.info, Node: SnglQ Intrinsic, Next: SymLnk Intrinsic (function), Prev: SinD Intrinsic, Up: Other Intrinsics
-
-SnglQ Intrinsic
-...............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL SnglQ' to use this name for an
-external procedure.
-
-
-File: g77.info, Node: SymLnk Intrinsic (function), Next: System Intrinsic (function), Prev: SnglQ Intrinsic, Up: Other Intrinsics
-
-SymLnk Intrinsic (function)
-...........................
-
- SymLnk(PATH1, PATH2)
-
-SymLnk: `INTEGER(KIND=1)' function.
-
-PATH1: `CHARACTER'; scalar; INTENT(IN).
-
-PATH2: `CHARACTER'; scalar; INTENT(IN).
-
-Intrinsic groups: `badu77'.
-
-Description:
-
- Makes a symbolic link from file PATH1 to PATH2. A null character
-(`CHAR(0)') marks the end of the names in PATH1 and PATH2--otherwise,
-trailing blanks in PATH1 and PATH2 are ignored. Returns 0 on success
-or a non-zero error code (`ENOSYS' if the system does not provide
-`symlink(2)').
-
- Due to the side effects performed by this intrinsic, the function
-form is not recommended.
-
- For information on other intrinsics with the same name: *Note SymLnk
-Intrinsic (subroutine)::.
-
-
-File: g77.info, Node: System Intrinsic (function), Next: TanD Intrinsic, Prev: SymLnk Intrinsic (function), Up: Other Intrinsics
-
-System Intrinsic (function)
-...........................
-
- System(COMMAND)
-
-System: `INTEGER(KIND=1)' function.
-
-COMMAND: `CHARACTER'; scalar; INTENT(IN).
-
-Intrinsic groups: `badu77'.
-
-Description:
-
- Passes the command COMMAND to a shell (see `system(3)'). Returns
-the value returned by `system(3)', presumably 0 if the shell command
-succeeded. Note that which shell is used to invoke the command is
-system-dependent and environment-dependent.
-
- Due to the side effects performed by this intrinsic, the function
-form is not recommended. However, the function form can be valid in
-cases where the actual side effects performed by the call are
-unimportant to the application.
-
- For example, on a UNIX system, `SAME = SYSTEM('cmp a b')' does not
-perform any side effects likely to be important to the program, so the
-programmer would not care if the actual system call (and invocation of
-`cmp') was optimized away in a situation where the return value could
-be determined otherwise, or was not actually needed (`SAME' not
-actually referenced after the sample assignment statement).
-
- For information on other intrinsics with the same name: *Note System
-Intrinsic (subroutine)::.
-
-
-File: g77.info, Node: TanD Intrinsic, Next: Time Intrinsic (VXT), Prev: System Intrinsic (function), Up: Other Intrinsics
-
-TanD Intrinsic
-..............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL TanD' to use this name for an
-external procedure.
-
-
-File: g77.info, Node: Time Intrinsic (VXT), Next: UMask Intrinsic (function), Prev: TanD Intrinsic, Up: Other Intrinsics
-
-Time Intrinsic (VXT)
-....................
-
- CALL Time(TIME)
-
-TIME: `CHARACTER*8'; scalar; INTENT(OUT).
-
-Intrinsic groups: `vxt'.
-
-Description:
-
- Returns in TIME a character representation of the current time as
-obtained from `ctime(3)'.
-
- *Note Fdate Intrinsic (subroutine):: for an equivalent routine.
-
- For information on other intrinsics with the same name: *Note Time
-Intrinsic (UNIX)::.
-
-
-File: g77.info, Node: UMask Intrinsic (function), Next: Unlink Intrinsic (function), Prev: Time Intrinsic (VXT), Up: Other Intrinsics
-
-UMask Intrinsic (function)
-..........................
-
- UMask(MASK)
-
-UMask: `INTEGER(KIND=1)' function.
-
-MASK: `INTEGER'; scalar; INTENT(IN).
-
-Intrinsic groups: `badu77'.
-
-Description:
-
- Sets the file creation mask to MASK and returns the old value. See
-`umask(2)'.
-
- Due to the side effects performed by this intrinsic, the function
-form is not recommended.
-
- For information on other intrinsics with the same name: *Note UMask
-Intrinsic (subroutine)::.
-
-
-File: g77.info, Node: Unlink Intrinsic (function), Next: ZExt Intrinsic, Prev: UMask Intrinsic (function), Up: Other Intrinsics
-
-Unlink Intrinsic (function)
-...........................
-
- Unlink(FILE)
-
-Unlink: `INTEGER(KIND=1)' function.
-
-FILE: `CHARACTER'; scalar; INTENT(IN).
-
-Intrinsic groups: `badu77'.
-
-Description:
-
- Unlink the file FILE. A null character (`CHAR(0)') marks the end of
-the name in FILE--otherwise, trailing blanks in FILE are ignored.
-Returns 0 on success or a non-zero error code. See `unlink(2)'.
-
- Due to the side effects performed by this intrinsic, the function
-form is not recommended.
-
- For information on other intrinsics with the same name: *Note Unlink
-Intrinsic (subroutine)::.
-
-
-File: g77.info, Node: ZExt Intrinsic, Prev: Unlink Intrinsic (function), Up: Other Intrinsics
-
-ZExt Intrinsic
-..............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL ZExt' to use this name for an
-external procedure.
-
-
-File: g77.info, Node: Other Compilers, Next: Other Languages, Prev: Other Dialects, Up: Top
-
-Other Compilers
-***************
-
- An individual Fortran source file can be compiled to an object
-(`*.o') file instead of to the final program executable. This allows
-several portions of a program to be compiled at different times and
-linked together whenever a new version of the program is needed.
-However, it introduces the issue of "object compatibility" across the
-various object files (and libraries, or `*.a' files) that are linked
-together to produce any particular executable file.
-
- Object compatibility is an issue when combining, in one program,
-Fortran code compiled by more than one compiler (or more than one
-configuration of a compiler). If the compilers disagree on how to
-transform the names of procedures, there will normally be errors when
-linking such programs. Worse, if the compilers agree on naming, but
-disagree on issues like how to pass parameters, return arguments, and
-lay out `COMMON' areas, the earliest detected errors might be the
-incorrect results produced by the program (and that assumes these
-errors are detected, which is not always the case).
-
- Normally, `g77' generates code that is object-compatible with code
-generated by a version of `f2c' configured (with, for example, `f2c.h'
-definitions) to be generally compatible with `g77' as built by `gcc'.
-(Normally, `f2c' will, by default, conform to the appropriate
-configuration, but it is possible that older or perhaps even newer
-versions of `f2c', or versions having certain configuration changes to
-`f2c' internals, will produce object files that are incompatible with
-`g77'.)
-
- For example, a Fortran string subroutine argument will become two
-arguments on the C side: a `char *' and an `int' length.
-
- Much of this compatibility results from the fact that `g77' uses the
-same run-time library, `libf2c', used by `f2c'.
-
- Other compilers might or might not generate code that is
-object-compatible with `libf2c' and current `g77', and some might offer
-such compatibility only when explicitly selected via a command-line
-option to the compiler.
-
- *Note: This portion of the documentation definitely needs a lot of
-work!*
-
-* Menu:
-
-* Dropping f2c Compatibility:: When speed is more important.
-* Compilers Other Than f2c:: Interoperation with code from other compilers.
-
-
-File: g77.info, Node: Dropping f2c Compatibility, Next: Compilers Other Than f2c, Up: Other Compilers
-
-Dropping `f2c' Compatibility
-============================
-
- Specifying `-fno-f2c' allows `g77' to generate, in some cases,
-faster code, by not needing to allow to the possibility of linking with
-code compiled by `f2c'.
-
- For example, this affects how `REAL(KIND=1)', `COMPLEX(KIND=1)', and
-`COMPLEX(KIND=2)' functions are called. With `-fno-f2c', they are
-compiled as returning the appropriate `gcc' type (`float', `__complex__
-float', `__complex__ double', in many configurations).
-
- With `-ff2c' in force, they are compiled differently (with perhaps
-slower run-time performance) to accommodate the restrictions inherent
-in `f2c''s use of K&R C as an intermediate language--`REAL(KIND=1)'
-functions return C's `double' type, while `COMPLEX' functions return
-`void' and use an extra argument pointing to a place for the functions
-to return their values.
-
- It is possible that, in some cases, leaving `-ff2c' in force might
-produce faster code than using `-fno-f2c'. Feel free to experiment,
-but remember to experiment with changing the way *entire programs and
-their Fortran libraries are compiled* at a time, since this sort of
-experimentation affects the interface of code generated for a Fortran
-source file--that is, it affects object compatibility.
-
- Note that `f2c' compatibility is a fairly static target to achieve,
-though not necessarily perfectly so, since, like `g77', it is still
-being improved. However, specifying `-fno-f2c' causes `g77' to
-generate code that will probably be incompatible with code generated by
-future versions of `g77' when the same option is in force. You should
-make sure you are always able to recompile complete programs from
-source code when upgrading to new versions of `g77' or `f2c',
-especially when using options such as `-fno-f2c'.
-
- Therefore, if you are using `g77' to compile libraries and other
-object files for possible future use and you don't want to require
-recompilation for future use with subsequent versions of `g77', you
-might want to stick with `f2c' compatibility for now, and carefully
-watch for any announcements about changes to the `f2c'/`libf2c'
-interface that might affect existing programs (thus requiring
-recompilation).
-
- It is probable that a future version of `g77' will not, by default,
-generate object files compatible with `f2c', and that version probably
-would no longer use `libf2c'. If you expect to depend on this
-compatibility in the long term, use the options `-ff2c -ff2c-library'
-when compiling all of the applicable code. This should cause future
-versions of `g77' either to produce compatible code (at the expense of
-the availability of some features and performance), or at the very
-least, to produce diagnostics.
-
-
-File: g77.info, Node: Compilers Other Than f2c, Prev: Dropping f2c Compatibility, Up: Other Compilers
-
-Compilers Other Than `f2c'
-==========================
-
- On systems with Fortran compilers other than `f2c' and `g77', code
-compiled by `g77' is not expected to work well with code compiled by
-the native compiler. (This is true for `f2c'-compiled objects as
-well.) Libraries compiled with the native compiler probably will have
-to be recompiled with `g77' to be used with `g77'-compiled code.
-
- Reasons for such incompatibilities include:
-
- * There might be differences in the way names of Fortran procedures
- are translated for use in the system's object-file format. For
- example, the statement `CALL FOO' might be compiled by `g77' to
- call a procedure the linker `ld' sees given the name `_foo_',
- while the apparently corresponding statement `SUBROUTINE FOO'
- might be compiled by the native compiler to define the
- linker-visible name `_foo', or `_FOO_', and so on.
-
- * There might be subtle type mismatches which cause subroutine
- arguments and function return values to get corrupted.
-
- This is why simply getting `g77' to transform procedure names the
- same way a native compiler does is not usually a good idea--unless
- some effort has been made to ensure that, aside from the way the
- two compilers transform procedure names, everything else about the
- way they generate code for procedure interfaces is identical.
-
- * Native compilers use libraries of private I/O routines which will
- not be available at link time unless you have the native
- compiler--and you would have to explicitly ask for them.
-
- For example, on the Sun you would have to add `-L/usr/lang/SCx.x
- -lF77 -lV77' to the link command.
-
-
-File: g77.info, Node: Other Languages, Next: Installation, Prev: Other Compilers, Up: Top
-
-Other Languages
-***************
-
- *Note: This portion of the documentation definitely needs a lot of
-work!*
-
-* Menu:
-
-* Interoperating with C and C++::
-
-
-File: g77.info, Node: Interoperating with C and C++, Up: Other Languages
-
-Tools and advice for interoperating with C and C++
-==================================================
-
- The following discussion assumes that you are running `g77' in `f2c'
-compatibility mode, i.e. not using `-fno-f2c'. It provides some advice
-about quick and simple techniques for linking Fortran and C (or C++),
-the most common requirement. For the full story consult the
-description of code generation. *Note Debugging and Interfacing::.
-
- When linking Fortran and C, it's usually best to use `g77' to do the
-linking so that the correct libraries are included (including the maths
-one). If you're linking with C++ you will want to add `-lstdc++',
-`-lg++' or whatever. If you need to use another driver program (or
-`ld' directly), you can find out what linkage options `g77' passes by
-running `g77 -v'.
-
-* Menu:
-
-* C Interfacing Tools::
-* C Access to Type Information::
-* f2c Skeletons and Prototypes::
-* C++ Considerations::
-* Startup Code::
-
-
-File: g77.info, Node: C Interfacing Tools, Next: C Access to Type Information, Up: Interoperating with C and C++
-
-C Interfacing Tools
--------------------
-
- Even if you don't actually use it as a compiler, `f2c' from
-`ftp://ftp.netlib.org/f2c/src', can be a useful tool when you're
-interfacing (linking) Fortran and C. *Note Generating Skeletons and
-Prototypes with `f2c': f2c Skeletons and Prototypes.
-
- To use `f2c' for this purpose you only need retrieve and build the
-`src' directory from the distribution, consult the `README'
-instructions there for machine-specifics, and install the `f2c' program
-on your path.
-
- Something else that might be useful is `cfortran.h' from
-`ftp://zebra/desy.de/cfortran'. This is a fairly general tool which
-can be used to generate interfaces for calling in both directions
-between Fortran and C. It can be used in `f2c' mode with
-`g77'--consult its documentation for details.
-
-
-File: g77.info, Node: C Access to Type Information, Next: f2c Skeletons and Prototypes, Prev: C Interfacing Tools, Up: Interoperating with C and C++
-
-Accessing Type Information in C
--------------------------------
-
- Generally, C code written to link with `g77' code--calling and/or
-being called from Fortran--should `#include <f2c.h>' to define the C
-versions of the Fortran types. Don't assume Fortran `INTEGER' types
-correspond to C `int's, for instance; instead, declare them as
-`integer', a type defined by `f2c.h'. `f2c.h' is installed where `gcc'
-will find it by default, assuming you use a copy of `gcc' compatible
-with `g77', probably built at the same time as `g77'.
-
-
-File: g77.info, Node: f2c Skeletons and Prototypes, Next: C++ Considerations, Prev: C Access to Type Information, Up: Interoperating with C and C++
-
-Generating Skeletons and Prototypes with `f2c'
-----------------------------------------------
-
- A simple and foolproof way to write `g77'-callable C routines--e.g.
-to interface with an existing library--is to write a file (named, for
-example, `fred.f') of dummy Fortran skeletons comprising just the
-declaration of the routine(s) and dummy arguments plus `END' statements.
-Then run `f2c' on file `fred.f' to produce `fred.c' into which you can
-edit useful code, confident the calling sequence is correct, at least.
-(There are some errors otherwise commonly made in generating C
-interfaces with f2c conventions, such as not using `doublereal' as the
-return type of a `REAL' `FUNCTION'.)
-
- `f2c' also can help with calling Fortran from C, using its `-P'
-option to generate C prototypes appropriate for calling the Fortran.(1)
-If the Fortran code containing any routines to be called from C is in
-file `joe.f', use the command `f2c -P joe.f' to generate the file
-`joe.P' containing prototype information. `#include' this in the C
-which has to call the Fortran routines to make sure you get it right.
-
- *Note Arrays (DIMENSION: Arrays, for information on the differences
-between the way Fortran (including compilers like `g77') and C handle
-arrays.
-
- ---------- Footnotes ----------
-
- (1) The files generated like this can also be used for inter-unit
-consistency checking of dummy and actual arguments, although the
-`ftnchek' tool from `ftp://ftp.netlib.org/fortran' or
-`ftp://ftp.dsm.fordham.edu' is probably better for this purpose.
-
-
-File: g77.info, Node: C++ Considerations, Next: Startup Code, Prev: f2c Skeletons and Prototypes, Up: Interoperating with C and C++
-
-C++ Considerations
-------------------
-
- `f2c' can be used to generate suitable code for compilation with a
-C++ system using the `-C++' option. The important thing about linking
-`g77'-compiled code with C++ is that the prototypes for the `g77'
-routines must specify C linkage to avoid name mangling. So, use an
-`extern "C"' declaration. `f2c''s `-C++' option will take care of this
-when generating skeletons or prototype files as above, and also avoid
-clashes with C++ reserved words in addition to those in C.
-
-
-File: g77.info, Node: Startup Code, Prev: C++ Considerations, Up: Interoperating with C and C++
-
-Startup Code
-------------
-
- Unlike with some runtime systems, it shouldn't be necessary (unless
-there are bugs) to use a Fortran main program to ensure the
-runtime--specifically the i/o system--is initialized. However, to use
-the `g77' intrinsics `GETARG()' and `IARGC()' the `main()' routine from
-the `libf2c' library must be used, either explicitly or implicitly by
-using a Fortran main program. This `main()' program calls `MAIN__()'
-(where the names are C-type `extern' names, i.e. not mangled). You
-need to provide this nullary procedure as the entry point for your C
-code if using `libf2c''s `main'. In some cases it might be necessary to
-provide a dummy version of this to avoid linkers complaining about
-failure to resolve `MAIN__()' if linking against `libf2c' and not using
-`main()' from it.
-
-
-File: g77.info, Node: Installation, Next: Debugging and Interfacing, Prev: Other Languages, Up: Top
-
-Installing GNU Fortran
-**********************
-
- The following information describes how to install `g77'.
-
- The information in this file generally pertains to dealing with
-*source* distributions of `g77' and `gcc'. It is possible that some of
-this information will be applicable to some *binary* distributions of
-these products--however, since these distributions are not made by the
-maintainers of `g77', responsibility for binary distributions rests with
-whoever built and first distributed them.
-
- Nevertheless, efforts to make `g77' easier to both build and install
-from source and package up as a binary distribution are ongoing.
-
-* Menu:
-
-* Prerequisites:: Make sure your system is ready for `g77'.
-* Problems Installing:: Known trouble areas.
-* Settings:: Changing `g77' internals before building.
-* Quick Start:: The easier procedure for non-experts.
-* Complete Installation:: For experts, or those who want to be: the details.
-* Distributing Binaries:: If you plan on distributing your `g77'.
-
-
-File: g77.info, Node: Prerequisites, Next: Problems Installing, Up: Installation
-
-Prerequisites
-=============
-
- The procedures described to unpack, configure, build, and install
-`g77' assume your system has certain programs already installed.
-
- The following prerequisites should be met by your system before you
-follow the `g77' installation instructions:
-
-`gzip'
- To unpack the `gcc' and `g77' distributions, you'll need the
- `gunzip' utility in the `gzip' distribution. Most UNIX systems
- already have `gzip' installed. If yours doesn't, you can get it
- from the FSF.
-
- Note that you'll need `tar' and other utilities as well, but all
- UNIX systems have these. There are GNU versions of all these
- available--in fact, a complete GNU UNIX system can be put together
- on most systems, if desired.
-
- The version of GNU `gzip' used to package this release is 1.24.
- (The version of GNU `tar' used to package this release is 1.11.2.)
-
-`gcc-2.7.2.3.tar.gz'
- You need to have this, or some other applicable, version of `gcc'
- on your system. The version should be an exact copy of a
- distribution from the FSF. Its size is approximately 7.1MB.
-
- If you've already unpacked `gcc-2.7.2.3.tar.gz' into a directory
- (named `gcc-2.7.2.3') called the "source tree" for `gcc', you can
- delete the distribution itself, but you'll need to remember to
- skip any instructions to unpack this distribution.
-
- Without an applicable `gcc' source tree, you cannot build `g77'.
- You can obtain an FSF distribution of `gcc' from the FSF.
-
-`g77-0.5.21.tar.gz'
- You probably have already unpacked this package, or you are
- reading an advance copy of these installation instructions, which
- are contained in this distribution. The size of this package is
- approximately 1.5MB.
-
- You can obtain an FSF distribution of `g77' from the FSF, the same
- way you obtained `gcc'.
-
-Enough disk space
- The amount of disk space needed to unpack, build, install, and use
- `g77' depends on the type of system you're using, how you build
- `g77', and how much of it you install (primarily, which languages
- you install).
-
- The sizes shown below assume all languages distributed in
- `gcc-2.7.2.3', plus `g77', will be built and installed. These
- sizes are indicative of GNU/Linux systems on Intel x86 running
- COFF and on Digital Alpha (AXP) systems running ELF. These should
- be fairly representative of 32-bit and 64-bit systems,
- respectively.
-
- Note that all sizes are approximate and subject to change without
- notice! They are based on preliminary releases of g77 made shortly
- before the public beta release.
-
- -- `gcc' and `g77' distributions occupy 8.6MB packed, 35MB
- unpacked. These consist of the source code and documentation,
- plus some derived files (mostly documentation), for `gcc' and
- `g77'. Any deviations from these numbers for different kinds
- of systems are likely to be very minor.
-
- -- A "bootstrap" build requires an additional 67.3MB for a
- total of 102MB on an ix86, and an additional 98MB for a total
- of 165MB on an Alpha.
-
- -- Removing `gcc/stage1' after the build recovers 10.7MB for a
- total of 91MB on an ix86, and recovers ??MB for a total of
- ??MB on an Alpha.
-
- After doing this, the integrity of the build can still be
- verified via `make compare', and the `gcc' compiler modified
- and used to build itself for testing fairly quickly, using
- the copy of the compiler kept in `gcc/stage2'.
-
- -- Removing `gcc/stage2' after the build further recovers
- 27.3MB for a total of 64.3MB, and recovers ??MB for a total
- of ??MB on an Alpha.
-
- After doing this, the compiler can still be installed,
- especially if GNU `make' is used to avoid gratuitous rebuilds
- (or, the installation can be done by hand).
-
- -- Installing `gcc' and `g77' copies 14.9MB onto the `--prefix'
- disk for a total of 79.2MB on an ix86, and copies ??MB onto
- the `--prefix' disk for a total of ??MB on an Alpha.
-
- After installation, if no further modifications and builds of
- `gcc' or `g77' are planned, the source and build directory may be
- removed, leaving the total impact on a system's disk storage as
- that of the amount copied during installation.
-
- Systems with the appropriate version of `gcc' installed don't
- require the complete bootstrap build. Doing a "straight build"
- requires about as much space as does a bootstrap build followed by
- removing both the `gcc/stage1' and `gcc/stage2' directories.
-
- Installing `gcc' and `g77' over existing versions might require
- less *new* disk space, but note that, unlike many products, `gcc'
- installs itself in a way that avoids overwriting other installed
- versions of itself, so that other versions may easily be invoked
- (via `gcc -V VERSION').
-
- So, the amount of space saved as a result of having an existing
- version of `gcc' and `g77' already installed is not
- much--typically only the command drivers (`gcc', `g77', `g++', and
- so on, which are small) and the documentation is overwritten by
- the new installation. The rest of the new installation is done
- without replacing existing installed versions (assuming they have
- different version numbers).
-
-`patch'
- Although you can do everything `patch' does yourself, by hand,
- without much trouble, having `patch' installed makes installation
- of new versions of GNU utilities such as `g77' so much easier that
- it is worth getting. You can obtain `patch' the same way you
- obtained `gcc' and `g77'.
-
- In any case, you can apply patches by hand--patch files are
- designed for humans to read them.
-
- The version of GNU `patch' used to develop this release is 2.4.
-
-`make'
- Your system must have `make', and you will probably save yourself
- a lot of trouble if it is GNU `make' (sometimes referred to as
- `gmake').
-
- The version of GNU `make' used to develop this release is 3.73.
-
-`cc'
- Your system must have a working C compiler.
-
- *Note Installing GNU CC: (gcc)Installation, for more information
- on prerequisites for installing `gcc'.
-
-`bison'
- If you do not have `bison' installed, you can usually work around
- any need for it, since `g77' itself does not use it, and `gcc'
- normally includes all files generated by running it in its
- distribution. You can obtain `bison' the same way you obtained
- `gcc' and `g77'.
-
- The version of GNU `bison' used to develop this release is 1.25.
-
- *Note Missing bison?::, for information on how to work around not
- having `bison'.
-
-`makeinfo'
- If you are missing `makeinfo', you can usually work around any
- need for it. You can obtain `makeinfo' the same way you obtained
- `gcc' and `g77'.
-
- The version of GNU `makeinfo' used to develop this release is
- 1.68, from GNU `texinfo' version 3.11.
-
- *Note Missing makeinfo?::, for information on getting around the
- lack of `makeinfo'.
-
-`sed'
- All UNIX systems have `sed', but some have a broken version that
- cannot handle configuring, building, or installing `gcc' or `g77'.
-
- The version of GNU `sed' used to develop this release is 2.05.
- (Note that GNU `sed' version 3.0 was withdrawn by the FSF--if you
- happen to have this version installed, replace it with version
- 2.05 immediately. See a GNU distribution site for further
- explanation.)
-
-`root' access or equivalent
- To perform the complete installation procedures on a system, you
- need to have `root' access to that system, or equivalent access to
- the `--prefix' directory tree specified on the `configure' command
- line.
-
- Portions of the procedure (such as configuring and building `g77')
- can be performed by any user with enough disk space and virtual
- memory.
-
- However, these instructions are oriented towards less-experienced
- users who want to install `g77' on their own personal systems.
-
- System administrators with more experience will want to determine
- for themselves how they want to modify the procedures described
- below to suit the needs of their installation.
-
-
-File: g77.info, Node: Problems Installing, Next: Settings, Prev: Prerequisites, Up: Installation
-
-Problems Installing
-===================
-
- This is a list of problems (and some apparent problems which don't
-really mean anything is wrong) that show up when configuring, building,
-installing, or porting GNU Fortran.
-
- *Note Installation Problems: (gcc)Installation Problems, for more
-information on installation problems that can afflict either `gcc' or
-`g77'.
-
-* Menu:
-
-* General Problems:: Problems afflicting most or all systems.
-* Cross-compiler Problems:: Problems afflicting cross-compilation setups.
-
-
-File: g77.info, Node: General Problems, Next: Cross-compiler Problems, Up: Problems Installing
-
-General Problems
-----------------
-
- These problems can occur on most or all systems.
-
-* Menu:
-
-* GNU C Required:: Why even ANSI C is not enough.
-* Patching GNU CC Necessary:: Why `gcc' must be patched first.
-* Building GNU CC Necessary:: Why you can't build *just* Fortran.
-* Missing strtoul:: If linking `f771' fails due to an
- unresolved reference to `strtoul'.
-* Object File Differences:: It's okay that `make compare' will
- flag `f/zzz.o'.
-* Cleanup Kills Stage Directories:: A minor nit for `g77' developers.
-* Missing gperf?:: When building requires `gperf'.
-
-
-File: g77.info, Node: GNU C Required, Next: Patching GNU CC Necessary, Up: General Problems
-
-GNU C Required
-..............
-
- Compiling `g77' requires GNU C, not just ANSI C. Fixing this
-wouldn't be very hard (just tedious), but the code using GNU extensions
-to the C language is expected to be rewritten for 0.6 anyway, so there
-are no plans for an interim fix.
-
- This requirement does not mean you must already have `gcc' installed
-to build `g77'. As long as you have a working C compiler, you can use a
-bootstrap build to automate the process of first building `gcc' using
-the working C compiler you have, then building `g77' and rebuilding
-`gcc' using that just-built `gcc', and so on.
-
diff --git a/gcc/f/g77.info-13 b/gcc/f/g77.info-13
deleted file mode 100644
index 81479b1aa0e..00000000000
--- a/gcc/f/g77.info-13
+++ /dev/null
@@ -1,1144 +0,0 @@
-This is Info file g77.info, produced by Makeinfo version 1.68 from the
-input file g77.texi.
-
- This file explains how to use the GNU Fortran system.
-
- Published by the Free Software Foundation 59 Temple Place - Suite 330
-Boston, MA 02111-1307 USA
-
- Copyright (C) 1995-1997 Free Software Foundation, Inc.
-
- Permission is granted to make and distribute verbatim copies of this
-manual provided the copyright notice and this permission notice are
-preserved on all copies.
-
- Permission is granted to copy and distribute modified versions of
-this manual under the conditions for verbatim copying, provided also
-that the sections entitled "GNU General Public License," "Funding for
-Free Software," and "Protect Your Freedom--Fight `Look And Feel'" are
-included exactly as in the original, and provided that the entire
-resulting derived work is distributed under the terms of a permission
-notice identical to this one.
-
- Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that the sections entitled "GNU General Public
-License," "Funding for Free Software," and "Protect Your Freedom--Fight
-`Look And Feel'", and this permission notice, may be included in
-translations approved by the Free Software Foundation instead of in the
-original English.
-
- Contributed by James Craig Burley (<burley@gnu.ai.mit.edu>).
-Inspired by a first pass at translating `g77-0.5.16/f/DOC' that was
-contributed to Craig by David Ronis (<ronis@onsager.chem.mcgill.ca>).
-
-INFO-DIR-SECTION Fortran Programming
-START-INFO-DIR-ENTRY
-* g77: (g77). The GNU Fortran compilation system.
-END-INFO-DIR-ENTRY
-
-
-File: g77.info, Node: Patching GNU CC Necessary, Next: Building GNU CC Necessary, Prev: GNU C Required, Up: General Problems
-
-Patching GNU CC Necessary
-.........................
-
- `g77' currently requires application of a patch file to the gcc
-compiler tree. The necessary patches should be folded in to the
-mainline gcc distribution.
-
- Some combinations of versions of `g77' and `gcc' might actually
-*require* no patches, but the patch files will be provided anyway as
-long as there are more changes expected in subsequent releases. These
-patch files might contain unnecessary, but possibly helpful, patches.
-As a result, it is possible this issue might never be resolved, except
-by eliminating the need for the person configuring `g77' to apply a
-patch by hand, by going to a more automated approach (such as
-configure-time patching).
-
-
-File: g77.info, Node: Building GNU CC Necessary, Next: Missing strtoul, Prev: Patching GNU CC Necessary, Up: General Problems
-
-Building GNU CC Necessary
-.........................
-
- It should be possible to build the runtime without building `cc1'
-and other non-Fortran items, but, for now, an easy way to do that is
-not yet established.
-
-
-File: g77.info, Node: Missing strtoul, Next: Object File Differences, Prev: Building GNU CC Necessary, Up: General Problems
-
-Missing strtoul
-...............
-
- On SunOS4 systems, linking the `f771' program produces an error
-message concerning an undefined symbol named `_strtoul'.
-
- This is not a `g77' bug. *Note Patching GNU Fortran::, for
-information on a workaround provided by `g77'.
-
- The proper fix is either to upgrade your system to one that provides
-a complete ANSI C environment, or improve `gcc' so that it provides one
-for all the languages and configurations it supports.
-
- *Note:* In earlier versions of `g77', an automated workaround for
-this problem was attempted. It worked for systems without `_strtoul',
-substituting the incomplete-yet-sufficient version supplied with `g77'
-for those systems. However, the automated workaround failed
-mysteriously for systems that appeared to have conforming ANSI C
-environments, and it was decided that, lacking resources to more fully
-investigate the problem, it was better to not punish users of those
-systems either by requiring them to work around the problem by hand or
-by always substituting an incomplete `strtoul()' implementation when
-their systems had a complete, working one. Unfortunately, this meant
-inconveniencing users of systems not having `strtoul()', but they're
-using obsolete (and generally unsupported) systems anyway.
-
-
-File: g77.info, Node: Object File Differences, Next: Cleanup Kills Stage Directories, Prev: Missing strtoul, Up: General Problems
-
-Object File Differences
-.......................
-
- A comparison of object files after building Stage 3 during a
-bootstrap build will result in `gcc/f/zzz.o' being flagged as different
-from the Stage 2 version. That is because it contains a string with an
-expansion of the `__TIME__' macro, which expands to the current time of
-day. It is nothing to worry about, since `gcc/f/zzz.c' doesn't contain
-any actual code. It does allow you to override its use of `__DATE__'
-and `__TIME__' by defining macros for the compilation--see the source
-code for details.
-
-
-File: g77.info, Node: Cleanup Kills Stage Directories, Next: Missing gperf?, Prev: Object File Differences, Up: General Problems
-
-Cleanup Kills Stage Directories
-...............................
-
- It'd be helpful if `g77''s `Makefile.in' or `Make-lang.in' would
-create the various `stageN' directories and their subdirectories, so
-developers and expert installers wouldn't have to reconfigure after
-cleaning up.
-
-
-File: g77.info, Node: Missing gperf?, Prev: Cleanup Kills Stage Directories, Up: General Problems
-
-Missing `gperf'?
-................
-
- If a build aborts trying to invoke `gperf', that strongly suggests
-an improper method was used to create the `gcc' source directory, such
-as the UNIX `cp -r' command instead of `cp -pr', since this problem
-very likely indicates that the date-time-modified information on the
-`gcc' source files is incorrect.
-
- The proper solution is to recreate the `gcc' source directory from a
-`gcc' distribution known to be provided by the FSF.
-
- It is possible you might be able to temporarily work around the
-problem, however, by trying these commands:
-
- sh# cd gcc
- sh# touch c-gperf.h
- sh#
-
- These commands update the date-time-modified information for the
-file produced by the invocation of `gperf' in the current versions of
-`gcc', so that `make' no longer believes it needs to update it. This
-file should already exist in a `gcc' distribution, but mistakes made
-when copying the `gcc' directory can leave the modification information
-set such that the `gperf' input files look more "recent" than the
-corresponding output files.
-
- If the above does not work, definitely start from scratch and avoid
-copying the `gcc' using any method that does not reliably preserve
-date-time-modified information, such as the UNIX `cp -r' command.
-
-
-File: g77.info, Node: Cross-compiler Problems, Prev: General Problems, Up: Problems Installing
-
-Cross-compiler Problems
------------------------
-
- `g77' has been in alpha testing since September of 1992, and in
-public beta testing since February of 1995. Alpha testing was done by
-a small number of people worldwide on a fairly wide variety of
-machines, involving self-compilation in most or all cases. Beta
-testing has been done primarily via self-compilation, but in more and
-more cases, cross-compilation (and "criss-cross compilation", where a
-version of a compiler is built on one machine to run on a second and
-generate code that runs on a third) has been tried and has succeeded,
-to varying extents.
-
- Generally, `g77' can be ported to any configuration to which `gcc',
-`f2c', and `libf2c' can be ported and made to work together, aside from
-the known problems described in this manual. If you want to port `g77'
-to a particular configuration, you should first make sure `gcc' and
-`libf2c' can be ported to that configuration before focusing on `g77',
-because `g77' is so dependent on them.
-
- Even for cases where `gcc' and `libf2c' work, you might run into
-problems with cross-compilation on certain machines, for several
-reasons.
-
- * There is one known bug (a design bug to be fixed in 0.6) that
- prevents configuration of `g77' as a cross-compiler in some cases,
- though there are assumptions made during configuration that
- probably make doing non-self-hosting builds a hassle, requiring
- manual intervention.
-
- * `gcc' might still have some trouble being configured for certain
- combinations of machines. For example, it might not know how to
- handle floating-point constants.
-
- * Improvements to the way `libf2c' is built could make building
- `g77' as a cross-compiler easier--for example, passing and using
- `$(LD)' and `$(AR)' in the appropriate ways.
-
- * There are still some challenges putting together the right
- run-time libraries (needed by `libf2c') for a target system,
- depending on the systems involved in the configuration. (This is
- a general problem with cross-compilation, and with `gcc' in
- particular.)
-
-
-File: g77.info, Node: Settings, Next: Quick Start, Prev: Problems Installing, Up: Installation
-
-Changing Settings Before Building
-=================================
-
- Here are some internal `g77' settings that can be changed by editing
-source files in `gcc/f/' before building.
-
- This information, and perhaps even these settings, represent
-stop-gap solutions to problems people doing various ports of `g77' have
-encountered. As such, none of the following information is expected to
-be pertinent in future versions of `g77'.
-
-* Menu:
-
-* Larger File Unit Numbers:: Raising `MXUNIT'.
-* Always Flush Output:: Synchronizing write errors.
-* Maximum Stackable Size:: Large arrays forced off the stack.
-* Floating-point Bit Patterns:: Possible programs building `g77'
- as a cross-compiler.
-* Large Initialization:: Large arrays with `DATA'
- initialization.
-* Alpha Problems Fixed:: Problems with 64-bit systems like
- Alphas now fixed?
-
-
-File: g77.info, Node: Larger File Unit Numbers, Next: Always Flush Output, Up: Settings
-
-Larger File Unit Numbers
-------------------------
-
- As distributed, whether as part of `f2c' or `g77', `libf2c' accepts
-file unit numbers only in the range 0 through 99. For example, a
-statement such as `WRITE (UNIT=100)' causes a run-time crash in
-`libf2c', because the unit number, 100, is out of range.
-
- If you know that Fortran programs at your installation require the
-use of unit numbers higher than 99, you can change the value of the
-`MXUNIT' macro, which represents the maximum unit number, to an
-appropriately higher value.
-
- To do this, edit the file `f/runtime/libI77/fio.h' in your `g77'
-source tree, changing the following line:
-
- #define MXUNIT 100
-
- Change the line so that the value of `MXUNIT' is defined to be at
-least one *greater* than the maximum unit number used by the Fortran
-programs on your system.
-
- (For example, a program that does `WRITE (UNIT=255)' would require
-`MXUNIT' set to at least 256 to avoid crashing.)
-
- Then build or rebuild `g77' as appropriate.
-
- *Note:* Changing this macro has *no* effect on other limits your
-system might place on the number of files open at the same time. That
-is, the macro might allow a program to do `WRITE (UNIT=100)', but the
-library and operating system underlying `libf2c' might disallow it if
-many other files have already been opened (via `OPEN' or implicitly via
-`READ', `WRITE', and so on). Information on how to increase these
-other limits should be found in your system's documentation.
-
-
-File: g77.info, Node: Always Flush Output, Next: Maximum Stackable Size, Prev: Larger File Unit Numbers, Up: Settings
-
-Always Flush Output
--------------------
-
- Some Fortran programs require output (writes) to be flushed to the
-operating system (under UNIX, via the `fflush()' library call) so that
-errors, such as disk full, are immediately flagged via the relevant
-`ERR=' and `IOSTAT=' mechanism, instead of such errors being flagged
-later as subsequent writes occur, forcing the previously written data
-to disk, or when the file is closed.
-
- Essentially, the difference can be viewed as synchronous error
-reporting (immediate flagging of errors during writes) versus
-asynchronous, or, more precisely, buffered error reporting (detection
-of errors might be delayed).
-
- `libf2c' supports flagging write errors immediately when it is built
-with the `ALWAYS_FLUSH' macro defined. This results in a `libf2c' that
-runs slower, sometimes quite a bit slower, under certain
-circumstances--for example, accessing files via the networked file
-system NFS--but the effect can be more reliable, robust file I/O.
-
- If you know that Fortran programs requiring this level of precision
-of error reporting are to be compiled using the version of `g77' you
-are building, you might wish to modify the `g77' source tree so that
-the version of `libf2c' is built with the `ALWAYS_FLUSH' macro defined,
-enabling this behavior.
-
- To do this, find this line in `f/runtime/configure.in' in your `g77'
-source tree:
-
- dnl AC_DEFINE(ALWAYS_FLUSH)
-
- Remove the leading `dnl ', so the line begins with `AC_DEFINE(', and
-run `autoconf' in that file's directory. (Or, if you don't have
-`autoconf', you can modify `f2c.h.in' in the same directory to include
-the line `#define ALWAYS_FLUSH' after `#define F2C_INCLUDE'.)
-
- Then build or rebuild `g77' as appropriate.
-
-
-File: g77.info, Node: Maximum Stackable Size, Next: Floating-point Bit Patterns, Prev: Always Flush Output, Up: Settings
-
-Maximum Stackable Size
-----------------------
-
- `g77', on most machines, puts many variables and arrays on the stack
-where possible, and can be configured (by changing
-`FFECOM_sizeMAXSTACKITEM' in `gcc/f/com.c') to force smaller-sized
-entities into static storage (saving on stack space) or permit
-larger-sized entities to be put on the stack (which can improve
-run-time performance, as it presents more opportunities for the GBE to
-optimize the generated code).
-
- *Note:* Putting more variables and arrays on the stack might cause
-problems due to system-dependent limits on stack size. Also, the value
-of `FFECOM_sizeMAXSTACKITEM' has no effect on automatic variables and
-arrays. *Note But-bugs::, for more information.
-
-
-File: g77.info, Node: Floating-point Bit Patterns, Next: Large Initialization, Prev: Maximum Stackable Size, Up: Settings
-
-Floating-point Bit Patterns
----------------------------
-
- The `g77' build will crash if an attempt is made to build it as a
-cross-compiler for a target when `g77' cannot reliably determine the
-bit pattern of floating-point constants for the target. Planned
-improvements for g77-0.6 will give it the capabilities it needs to not
-have to crash the build but rather generate correct code for the target.
-(Currently, `g77' would generate bad code under such circumstances if
-it didn't crash during the build, e.g. when compiling a source file
-that does something like `EQUIVALENCE (I,R)' and `DATA R/9.43578/'.)
-
-
-File: g77.info, Node: Large Initialization, Next: Alpha Problems Fixed, Prev: Floating-point Bit Patterns, Up: Settings
-
-Initialization of Large Aggregate Areas
----------------------------------------
-
- A warning message is issued when `g77' sees code that provides
-initial values (e.g. via `DATA') to an aggregate area (`COMMON' or
-`EQUIVALENCE', or even a large enough array or `CHARACTER' variable)
-that is large enough to increase `g77''s compile time by roughly a
-factor of 10.
-
- This size currently is quite small, since `g77' currently has a
-known bug requiring too much memory and time to handle such cases. In
-`gcc/f/data.c', the macro `FFEDATA_sizeTOO_BIG_INIT_' is defined to the
-minimum size for the warning to appear. The size is specified in
-storage units, which can be bytes, words, or whatever, on a
-case-by-case basis.
-
- After changing this macro definition, you must (of course) rebuild
-and reinstall `g77' for the change to take effect.
-
- Note that, as of version 0.5.18, improvements have reduced the scope
-of the problem for *sparse* initialization of large arrays, especially
-those with large, contiguous uninitialized areas. However, the warning
-is issued at a point prior to when `g77' knows whether the
-initialization is sparse, and delaying the warning could mean it is
-produced too late to be helpful.
-
- Therefore, the macro definition should not be adjusted to reflect
-sparse cases. Instead, adjust it to generate the warning when densely
-initialized arrays begin to cause responses noticeably slower than
-linear performance would suggest.
-
-
-File: g77.info, Node: Alpha Problems Fixed, Prev: Large Initialization, Up: Settings
-
-Alpha Problems Fixed
---------------------
-
- `g77' used to warn when it was used to compile Fortran code for a
-target configuration that is not basically a 32-bit machine (such as an
-Alpha, which is a 64-bit machine, especially if it has a 64-bit
-operating system running on it). That was because `g77' was known to
-not work properly on such configurations.
-
- As of version 0.5.20, `g77' is believed to work well enough on such
-systems. So, the warning is no longer needed or provided.
-
- However, support for 64-bit systems, especially in areas such as
-cross-compilation and handling of intrinsics, is still incomplete. The
-symptoms are believed to be compile-time diagnostics rather than the
-generation of bad code. It is hoped that version 0.6 will completely
-support 64-bit systems.
-
-
-File: g77.info, Node: Quick Start, Next: Complete Installation, Prev: Settings, Up: Installation
-
-Quick Start
-===========
-
- This procedure configures, builds, and installs `g77' "out of the
-box" and works on most UNIX systems. Each command is identified by a
-unique number, used in the explanatory text that follows. For the most
-part, the output of each command is not shown, though indications of
-the types of responses are given in a few cases.
-
- To perform this procedure, the installer must be logged in as user
-`root'. Much of it can be done while not logged in as `root', and
-users experienced with UNIX administration should be able to modify the
-procedure properly to do so.
-
- Following traditional UNIX conventions, it is assumed that the
-source trees for `g77' and `gcc' will be placed in `/usr/src'. It also
-is assumed that the source distributions themselves already reside in
-`/usr/FSF', a naming convention used by the author of `g77' on his own
-system:
-
- /usr/FSF/gcc-2.7.2.3.tar.gz
- /usr/FSF/g77-0.5.21.tar.gz
-
- Users of the following systems should not blindly follow these
-quick-start instructions, because of problems their systems have coping
-with straightforward installation of `g77':
-
- * SunOS4
-
- Instead, see *Note Complete Installation::, for detailed information
-on how to configure, build, and install `g77' for your particular
-system. Also, see *Note Known Causes of Trouble with GNU Fortran:
-Trouble, for information on bugs and other problems known to afflict the
-installation process, and how to report newly discovered ones.
-
- If your system is *not* on the above list, and *is* a UNIX system or
-one of its variants, you should be able to follow the instructions
-below. If you vary *any* of the steps below, you might run into
-trouble, including possibly breaking existing programs for other users
-of your system. Before doing so, it is wise to review the explanations
-of some of the steps. These explanations follow this list of steps.
-
- sh[ 1]# cd /usr/src
-
- sh[ 2]# gunzip -c < /usr/FSF/gcc-2.7.2.3.tar.gz | tar xf -
- [Might say "Broken pipe"...that is normal on some systems.]
-
- sh[ 3]# gunzip -c < /usr/FSF/g77-0.5.21.tar.gz | tar xf -
- ["Broken pipe" again possible.]
-
- sh[ 4]# ln -s gcc-2.7.2.3 gcc
-
- sh[ 5]# ln -s g77-0.5.21 g77
-
- sh[ 6]# mv -i g77/* gcc
- [No questions should be asked by mv here; or, you made a mistake.]
-
- sh[ 7]# patch -p1 -V t -d gcc < gcc/f/gbe/2.7.2.3.diff
- [Unless patch complains about rejected patches, this step worked.]
-
- sh[ 8]# cd gcc
- sh[ 9]# touch f77-install-ok
- [Do not do the above if your system already has an f77
- command, unless you've checked that overwriting it
- is okay.]
-
- sh[10]# touch f2c-install-ok
- [Do not do the above if your system already has an f2c
- command, unless you've checked that overwriting it
- is okay. Else, touch f2c-exists-ok.]
-
- sh[11]# ./configure --prefix=/usr
- [Do not do the above if gcc is not installed in /usr/bin.
- You might need a different --prefix=..., as
- described below.]
-
- sh[12]# make bootstrap
- [This takes a long time, and is where most problems occur.]
-
- sh[13]# make compare
- [This verifies that the compiler is `sane'. Only
- the file `f/zzz.o' (aka `tmp-foo1' and `tmp-foo2')
- should be in the list of object files this command
- prints as having different contents. If other files
- are printed, you have likely found a g77 bug.]
-
- sh[14]# rm -fr stage1
-
- sh[15]# make -k install
- [The actual installation.]
-
- sh[16]# g77 -v
- [Verify that g77 is installed, obtain version info.]
-
- sh[17]#
-
- *Note Updating Your Info Directory: Updating Documentation, for
-information on how to update your system's top-level `info' directory
-to contain a reference to this manual, so that users of `g77' can
-easily find documentation instead of having to ask you for it.
-
- Elaborations of many of the above steps follows:
-
-Step 1: `cd /usr/src'
- You can build `g77' pretty much anyplace. By convention, this
- manual assumes `/usr/src'. It might be helpful if other users on
- your system knew where to look for the source code for the
- installed version of `g77' and `gcc' in any case.
-
-Step 3: `gunzip -d < /usr/FSF/g77-0.5.21.tar.gz | tar xf -'
- It is not always necessary to obtain the latest version of `g77'
- as a complete `.tar.gz' file if you have a complete, earlier
- distribution of `g77'. If appropriate, you can unpack that earlier
- version of `g77', and then apply the appropriate patches to
- achieve the same result--a source tree containing version 0.5.21
- of `g77'.
-
-Step 4: `ln -s gcc-2.7.2.3 gcc'
-
-Step 5: `ln -s g77-0.5.21 g77'
- These commands mainly help reduce typing, and help reduce visual
- clutter in examples in this manual showing what to type to install
- `g77'.
-
- *Note Unpacking::, for information on using distributions of `g77'
- made by organizations other than the FSF.
-
-Step 6: `mv -i g77/* gcc'
- After doing this, you can, if you like, type `rm g77' and `rmdir
- g77-0.5.21' to remove the empty directory and the symbol link to
- it. But, it might be helpful to leave them around as quick
- reminders of which version(s) of `g77' are installed on your
- system.
-
- *Note Unpacking::, for information on the contents of the `g77'
- directory (as merged into the `gcc' directory).
-
-Step 7: `patch -p1 ...'
- This can produce a wide variety of printed output, from `Hmm, I
- can't seem to find a patch in there anywhere...' to long lists of
- messages indicated that patches are being found, applied
- successfully, and so on.
-
- If messages about "fuzz", "offset", or especially "reject files"
- are printed, it might mean you applied the wrong patch file. If
- you believe this is the case, it is best to restart the sequence
- after deleting (or at least renaming to unused names) the
- top-level directories for `g77' and `gcc' and their symbolic links.
-
- After this command finishes, the `gcc' directory might have old
- versions of several files as saved by `patch'. To remove these,
- after `cd gcc', type `rm -i *.~*~'.
-
- *Note Merging Distributions::, for more information.
-
-Step 9: `touch f77-install-ok'
- Don't do this if you don't want to overwrite an existing version
- of `f77' (such as a native compiler, or a script that invokes
- `f2c'). Otherwise, installation will overwrite the `f77' command
- and the `f77' man pages with copies of the corresponding `g77'
- material.
-
- *Note Installing `f77': Installing f77, for more information.
-
-Step 10: `touch f2c-install-ok'
- Don't do this if you don't want to overwrite an existing
- installation of `libf2c' (though, chances are, you do). Instead,
- `touch f2c-exists-ok' to allow the installation to continue
- without any error messages about `/usr/lib/libf2c.a' already
- existing.
-
- *Note Installing `f2c': Installing f2c, for more information.
-
-Step 11: `./configure --prefix=/usr'
- This is where you specify that the `g77' executable is to be
- installed in `/usr/bin/', the `libf2c.a' library is to be
- installed in `/usr/lib/', and so on.
-
- You should ensure that any existing installation of the `gcc'
- executable is in `/usr/bin/'. Otherwise, installing `g77' so that
- it does not fully replace the existing installation of `gcc' is
- likely to result in the inability to compile Fortran programs.
-
- *Note Where in the World Does Fortran (and GNU CC) Go?: Where to
- Install, for more information on determining where to install
- `g77'. *Note Configuring gcc::, for more information on the
- configuration process triggered by invoking the `./configure'
- script.
-
-Step 12: `make bootstrap'
- *Note Installing GNU CC: (gcc)Installation, for information on the
- kinds of diagnostics you should expect during this procedure.
-
- *Note Building gcc::, for complete `g77'-specific information on
- this step.
-
-Step 13: `make compare'
- *Note Where to Port Bugs: Bug Lists, for information on where to
- report that you observed more than `f/zzz.o' having different
- contents during this phase.
-
- *Note How to Report Bugs: Bug Reporting, for information on *how*
- to report bugs like this.
-
-Step 14: `rm -fr stage1'
- You don't need to do this, but it frees up disk space.
-
-Step 15: `make -k install'
- If this doesn't seem to work, try:
-
- make -k install install-libf77 install-f2c-all
-
- *Note Installation of Binaries::, for more information.
-
- *Note Updating Your Info Directory: Updating Documentation, for
- information on entering this manual into your system's list of
- texinfo manuals.
-
-Step 16: `g77 -v'
- If this command prints approximately 25 lines of output, including
- the GNU Fortran Front End version number (which should be the same
- as the version number for the version of `g77' you just built and
- installed) and the version numbers for the three parts of the
- `libf2c' library (`libF77', `libI77', `libU77'), and those version
- numbers are all in agreement, then there is a high likelihood that
- the installation has been successfully completed.
-
- You might consider doing further testing. For example, log in as
- a non-privileged user, then create a small Fortran program, such
- as:
-
- PROGRAM SMTEST
- DO 10 I=1, 10
- PRINT *, 'Hello World #', I
- 10 CONTINUE
- END
-
- Compile, link, and run the above program, and, assuming you named
- the source file `smtest.f', the session should look like this:
-
- sh# g77 -o smtest smtest.f
- sh# ./smtest
- Hello World # 1
- Hello World # 2
- Hello World # 3
- Hello World # 4
- Hello World # 5
- Hello World # 6
- Hello World # 7
- Hello World # 8
- Hello World # 9
- Hello World # 10
- sh#
-
- After proper installation, you don't need to keep your gcc and g77
- source and build directories around anymore. Removing them can
- free up a lot of disk space.
-
-
-File: g77.info, Node: Complete Installation, Next: Distributing Binaries, Prev: Quick Start, Up: Installation
-
-Complete Installation
-=====================
-
- Here is the complete `g77'-specific information on how to configure,
-build, and install `g77'.
-
-* Menu:
-
-* Unpacking::
-* Merging Distributions::
-* f77: Installing f77.
-* f2c: Installing f2c.
-* Patching GNU Fortran::
-* Where to Install::
-* Configuring gcc::
-* Building gcc::
-* Pre-installation Checks::
-* Installation of Binaries::
-* Updating Documentation::
-* bison: Missing bison?.
-* makeinfo: Missing makeinfo?.
-
-
-File: g77.info, Node: Unpacking, Next: Merging Distributions, Up: Complete Installation
-
-Unpacking
----------
-
- The `gcc' source distribution is a stand-alone distribution. It is
-designed to be unpacked (producing the `gcc' source tree) and built as
-is, assuming certain prerequisites are met (including the availability
-of compatible UNIX programs such as `make', `cc', and so on).
-
- However, before building `gcc', you will want to unpack and merge
-the `g77' distribution in with it, so that you build a Fortran-capable
-version of `gcc', which includes the `g77' command, the necessary
-run-time libraries, and this manual.
-
- Unlike `gcc', the `g77' source distribution is *not* a stand-alone
-distribution. It is designed to be unpacked and, afterwards,
-immediately merged into an applicable `gcc' source tree. That is, the
-`g77' distribution *augments* a `gcc' distribution--without `gcc',
-generally only the documentation is immediately usable.
-
- A sequence of commands typically used to unpack `gcc' and `g77' is:
-
- sh# cd /usr/src
- sh# gunzip -c /usr/FSF/gcc-2.7.2.3.tar.gz | tar xf -
- sh# gunzip -c /usr/FSF/g77-0.5.21.tar.gz | tar xf -
- sh# ln -s gcc-2.7.2.3 gcc
- sh# ln -s g77-0.5.21 g77
- sh# mv -i g77/* gcc
-
- *Notes:* The commands beginning with `gunzip...' might print `Broken
-pipe...' as they complete. That is nothing to worry about, unless you
-actually *hear* a pipe breaking. The `ln' commands are helpful in
-reducing typing and clutter in installation examples in this manual.
-Hereafter, the top level of `gcc' source tree is referred to as `gcc',
-and the top level of just the `g77' source tree (prior to issuing the
-`mv' command, above) is referred to as `g77'.
-
- There are three top-level names in a `g77' distribution:
-
- g77/COPYING.g77
- g77/README.g77
- g77/f
-
- All three entries should be moved (or copied) into a `gcc' source
-tree (typically named after its version number and as it appears in the
-FSF distributions--e.g. `gcc-2.7.2.3').
-
- `g77/f' is the subdirectory containing all of the code,
-documentation, and other information that is specific to `g77'. The
-other two files exist to provide information on `g77' to someone
-encountering a `gcc' source tree with `g77' already present, who has
-not yet read these installation instructions and thus needs help
-understanding that the source tree they are looking at does not come
-from a single FSF distribution. They also help people encountering an
-unmerged `g77' source tree for the first time.
-
- *Note:* Please use *only* `gcc' and `g77' source trees as
-distributed by the FSF. Use of modified versions, such as the
-Pentium-specific-optimization port of `gcc', is likely to result in
-problems that appear to be in the `g77' code but, in fact, are not. Do
-not use such modified versions unless you understand all the
-differences between them and the versions the FSF distributes--in which
-case you should be able to modify the `g77' (or `gcc') source trees
-appropriately so `g77' and `gcc' can coexist as they do in the stock
-FSF distributions.
-
-
-File: g77.info, Node: Merging Distributions, Next: Installing f77, Prev: Unpacking, Up: Complete Installation
-
-Merging Distributions
----------------------
-
- After merging the `g77' source tree into the `gcc' source tree, the
-final merge step is done by applying the pertinent patches the `g77'
-distribution provides for the `gcc' source tree.
-
- Read the file `gcc/f/gbe/README', and apply the appropriate patch
-file for the version of the GNU CC compiler you have, if that exists.
-If the directory exists but the appropriate file does not exist, you
-are using either an old, unsupported version, or a release one that is
-newer than the newest `gcc' version supported by the version of `g77'
-you have.
-
- As of version 0.5.18, `g77' modifies the version number of `gcc' via
-the pertinent patches. This is done because the resulting version of
-`gcc' is deemed sufficiently different from the vanilla distribution to
-make it worthwhile to present, to the user, information signaling the
-fact that there are some differences.
-
- GNU version numbers make it easy to figure out whether a particular
-version of a distribution is newer or older than some other version of
-that distribution. The format is, generally, MAJOR.MINOR.PATCH, with
-each field being a decimal number. (You can safely ignore leading
-zeros; for example, 1.5.3 is the same as 1.5.03.) The MAJOR field only
-increases with time. The other two fields are reset to 0 when the
-field to their left is incremented; otherwise, they, too, only increase
-with time. So, version 2.6.2 is newer than version 2.5.8, and version
-3.0 is newer than both. (Trailing `.0' fields often are omitted in
-announcements and in names for distributions and the directories they
-create.)
-
- If your version of `gcc' is older than the oldest version supported
-by `g77' (as casually determined by listing the contents of
-`gcc/f/gbe/'), you should obtain a newer, supported version of `gcc'.
-(You could instead obtain an older version of `g77', or try and get
-your `g77' to work with the old `gcc', but neither approach is
-recommended, and you shouldn't bother reporting any bugs you find if you
-take either approach, because they're probably already fixed in the
-newer versions you're not using.)
-
- If your version of `gcc' is newer than the newest version supported
-by `g77', it is possible that your `g77' will work with it anyway. If
-the version number for `gcc' differs only in the PATCH field, you might
-as well try applying the `g77' patch that is for the newest version of
-`gcc' having the same MAJOR and MINOR fields, as this is likely to work.
-
- So, for example, if a particular version of `g77' has support for
-`gcc' versions 2.7.0 and 2.7.1, it is likely that `gcc-2.7.2' would
-work well with `g77' by using the `2.7.1.diff' patch file provided with
-`g77' (aside from some offsets reported by `patch', which usually are
-harmless).
-
- However, `gcc-2.8.0' would almost certainly not work with that
-version of `g77' no matter which patch file was used, so a new version
-of `g77' would be needed (and you should wait for it rather than
-bothering the maintainers--*note User-Visible Changes: Changes.).
-
- This complexity is the result of `gcc' and `g77' being separate
-distributions. By keeping them separate, each product is able to be
-independently improved and distributed to its user base more frequently.
-
- However, `g77' often requires changes to contemporary versions of
-`gcc'. Also, the GBE interface defined by `gcc' typically undergoes
-some incompatible changes at least every time the MINOR field of the
-version number is incremented, and such changes require corresponding
-changes to the `g77' front end (FFE).
-
- It is hoped that the GBE interface, and the `gcc' and `g77' products
-in general, will stabilize sufficiently for the need for hand-patching
-to disappear.
-
- Invoking `patch' as described in `gcc/f/gbe/README' can produce a
-wide variety of printed output, from `Hmm, I can't seem to find a patch
-in there anywhere...' to long lists of messages indicated that patches
-are being found, applied successfully, and so on.
-
- If messages about "fuzz", "offset", or especially "reject files" are
-printed, it might mean you applied the wrong patch file. If you
-believe this is the case, it is best to restart the sequence after
-deleting (or at least renaming to unused names) the top-level
-directories for `g77' and `gcc' and their symbolic links. That is
-because `patch' might have partially patched some `gcc' source files,
-so reapplying the correct patch file might result in the correct
-patches being applied incorrectly (due to the way `patch' necessarily
-works).
-
- After `patch' finishes, the `gcc' directory might have old versions
-of several files as saved by `patch'. To remove these, after `cd gcc',
-type `rm -i *.~*~'.
-
- *Note:* `g77''s configuration file `gcc/f/config-lang.in' ensures
-that the source code for the version of `gcc' being configured has at
-least one indication of being patched as required specifically by `g77'.
-This configuration-time checking should catch failure to apply the
-correct patch and, if so caught, should abort the configuration with an
-explanation. *Please* do not try to disable the check, otherwise `g77'
-might well appear to build and install correctly, and even appear to
-compile correctly, but could easily produce broken code.
-
- `diff -rcp2N' is used to create the patch files in `gcc/f/gbe/'.
-
-
-File: g77.info, Node: Installing f77, Next: Installing f2c, Prev: Merging Distributions, Up: Complete Installation
-
-Installing `f77'
-----------------
-
- You should decide whether you want installation of `g77' to also
-install an `f77' command. On systems with a native `f77', this is not
-normally desired, so `g77' does not do this by default.
-
- If you want `f77' installed, create the file `f77-install-ok' (e.g.
-via the UNIX command `touch f77-install-ok') in the source or build
-top-level directory (the same directory in which the `g77' `f'
-directory resides, not the `f' directory itself), or edit
-`gcc/f/Make-lang.in' and change the definition of the
-`F77_INSTALL_FLAG' macro appropriately.
-
- Usually, this means that, after typing `cd gcc', you would type
-`touch f77-install-ok'.
-
- When you enable installation of `f77', either a link to or a direct
-copy of the `g77' command is made. Similarly, `f77.1' is installed as
-a man page.
-
- (The `uninstall' target in the `gcc/Makefile' also tests this macro
-and file, when invoked, to determine whether to delete the installed
-copies of `f77' and `f77.1'.)
-
- *Note:* No attempt is yet made to install a program (like a shell
-script) that provides compatibility with any other `f77' programs.
-Only the most rudimentary invocations of `f77' will work the same way
-with `g77'.
-
-
-File: g77.info, Node: Installing f2c, Next: Patching GNU Fortran, Prev: Installing f77, Up: Complete Installation
-
-Installing `f2c'
-----------------
-
- Currently, `g77' does not include `f2c' itself in its distribution.
-However, it does include a modified version of the `libf2c'. This
-version is normally compatible with `f2c', but has been modified to
-meet the needs of `g77' in ways that might possibly be incompatible
-with some versions or configurations of `f2c'.
-
- Decide how installation of `g77' should affect any existing
-installation of `f2c' on your system.
-
- If you do not have `f2c' on your system (e.g. no `/usr/bin/f2c', no
-`/usr/include/f2c.h', and no `/usr/lib/libf2c.a', `/usr/lib/libF77.a',
-or `/usr/lib/libI77.a'), you don't need to be concerned with this item.
-
- If you do have `f2c' on your system, you need to decide how users of
-`f2c' will be affected by your installing `g77'. Since `g77' is
-currently designed to be object-code-compatible with `f2c' (with very
-few, clear exceptions), users of `f2c' might want to combine
-`f2c'-compiled object files with `g77'-compiled object files in a
-single executable.
-
- To do this, users of `f2c' should use the same copies of `f2c.h' and
-`libf2c.a' that `g77' uses (and that get built as part of `g77').
-
- If you do nothing here, the `g77' installation process will not
-overwrite the `include/f2c.h' and `lib/libf2c.a' files with its own
-versions, and in fact will not even install `libf2c.a' for use with the
-newly installed versions of `gcc' and `g77' if it sees that
-`lib/libf2c.a' exists--instead, it will print an explanatory message
-and skip this part of the installation.
-
- To install `g77''s versions of `f2c.h' and `libf2c.a' in the
-appropriate places, create the file `f2c-install-ok' (e.g. via the UNIX
-command `touch f2c-install-ok') in the source or build top-level
-directory (the same directory in which the `g77' `f' directory resides,
-not the `f' directory itself), or edit `gcc/f/Make-lang.in' and change
-the definition of the `F2C_INSTALL_FLAG' macro appropriately.
-
- Usually, this means that, after typing `cd gcc', you would type
-`touch f2c-install-ok'.
-
- Make sure that when you enable the overwriting of `f2c.h' and
-`libf2c.a' as used by `f2c', you have a recent and properly configured
-version of `bin/f2c' so that it generates code that is compatible with
-`g77'.
-
- If you don't want installation of `g77' to overwrite `f2c''s existing
-installation, but you do want `g77' installation to proceed with
-installation of its own versions of `f2c.h' and `libf2c.a' in places
-where `g77' will pick them up (even when linking `f2c'-compiled object
-files--which might lead to incompatibilities), create the file
-`f2c-exists-ok' (e.g. via the UNIX command `touch f2c-exists-ok') in
-the source or build top-level directory, or edit `gcc/f/Make-lang.in'
-and change the definition of the `F2CLIBOK' macro appropriately.
-
-
-File: g77.info, Node: Patching GNU Fortran, Next: Where to Install, Prev: Installing f2c, Up: Complete Installation
-
-Patching GNU Fortran
---------------------
-
- If you're using a SunOS4 system, you'll need to make the following
-change to `gcc/f/proj.h': edit the line reading
-
- #define FFEPROJ_STRTOUL 1 ...
-
-by replacing the `1' with `0'. Or, you can avoid editing the source by
-adding
- CFLAGS='-DFFEPROJ_STRTOUL=0 -g -O'
- to the command line for `make' when you invoke it. (`-g' is the
-default for `CFLAGS'.)
-
- This causes a minimal version of `strtoul()' provided as part of the
-`g77' distribution to be compiled and linked into whatever `g77'
-programs need it, since some systems (like SunOS4 with only the bundled
-compiler and its runtime) do not provide this function in their system
-libraries.
-
- Similarly, a minimal version of `bsearch()' is available and can be
-enabled by editing a line similar to the one for `strtoul()' above in
-`gcc/f/proj.h', if your system libraries lack `bsearch()'. The method
-of overriding `X_CFLAGS' may also be used.
-
- These are not problems with `g77', which requires an ANSI C
-environment. You should upgrade your system to one that provides a
-full ANSI C environment, or encourage the maintainers of `gcc' to
-provide one to all `gcc'-based compilers in future `gcc' distributions.
-
- *Note Problems Installing::, for more information on why `strtoul()'
-comes up missing and on approaches to dealing with this problem that
-have already been tried.
-
-
-File: g77.info, Node: Where to Install, Next: Configuring gcc, Prev: Patching GNU Fortran, Up: Complete Installation
-
-Where in the World Does Fortran (and GNU CC) Go?
-------------------------------------------------
-
- Before configuring, you should make sure you know where you want the
-`g77' and `gcc' binaries to be installed after they're built, because
-this information is given to the configuration tool and used during the
-build itself.
-
- A `g77' installation necessarily requires installation of a
-`g77'-aware version of `gcc', so that the `gcc' command recognizes
-Fortran source files and knows how to compile them.
-
- For this to work, the version of `gcc' that you will be building as
-part of `g77' *must* be installed as the "active" version of `gcc' on
-the system.
-
- Sometimes people make the mistake of installing `gcc' as
-`/usr/local/bin/gcc', leaving an older, non-Fortran-aware version in
-`/usr/bin/gcc'. (Or, the opposite happens.) This can result in `g77'
-being unable to compile Fortran source files, because when it calls on
-`gcc' to do the actual compilation, `gcc' complains that it does not
-recognize the language, or the file name suffix.
-
- So, determine whether `gcc' already is installed on your system,
-and, if so, *where* it is installed, and prepare to configure the new
-version of `gcc' you'll be building so that it installs over the
-existing version of `gcc'.
-
- You might want to back up your existing copy of `bin/gcc', and the
-entire `lib/' directory, before you perform the actual installation (as
-described in this manual).
-
- Existing `gcc' installations typically are found in `/usr' or
-`/usr/local'. If you aren't certain where the currently installed
-version of `gcc' and its related programs reside, look at the output of
-this command:
-
- gcc -v -o /tmp/delete-me -xc /dev/null -xnone
-
- All sorts of interesting information on the locations of various
-`gcc'-related programs and data files should be visible in the output
-of the above command. (The output also is likely to include a
-diagnostic from the linker, since there's no `main_()' function.)
-However, you do have to sift through it yourself; `gcc' currently
-provides no easy way to ask it where it is installed and where it looks
-for the various programs and data files it calls on to do its work.
-
- Just *building* `g77' should not overwrite any installed
-programs--but, usually, after you build `g77', you will want to install
-it, so backing up anything it might overwrite is a good idea. (This is
-true for any package, not just `g77', though in this case it is
-intentional that `g77' overwrites `gcc' if it is already installed--it
-is unusual that the installation process for one distribution
-intentionally overwrites a program or file installed by another
-distribution.)
-
- Another reason to back up the existing version first, or make sure
-you can restore it easily, is that it might be an older version on
-which other users have come to depend for certain behaviors. However,
-even the new version of `gcc' you install will offer users the ability
-to specify an older version of the actual compilation programs if
-desired, and these older versions need not include any `g77' components.
-*Note Specifying Target Machine and Compiler Version: (gcc)Target
-Options, for information on the `-V' option of `gcc'.
-
-
-File: g77.info, Node: Configuring gcc, Next: Building gcc, Prev: Where to Install, Up: Complete Installation
-
-Configuring GNU CC
-------------------
-
- `g77' is configured automatically when you configure `gcc'. There
-are two parts of `g77' that are configured in two different
-ways--`g77', which "camps on" to the `gcc' configuration mechanism, and
-`libf2c', which uses a variation of the GNU `autoconf' configuration
-system.
-
- Generally, you shouldn't have to be concerned with either `g77' or
-`libf2c' configuration, unless you're configuring `g77' as a
-cross-compiler. In this case, the `libf2c' configuration, and possibly
-the `g77' and `gcc' configurations as well, might need special
-attention. (This also might be the case if you're porting `gcc' to a
-whole new system--even if it is just a new operating system on an
-existing, supported CPU.)
-
- To configure the system, see *Note Installing GNU CC:
-(gcc)Installation, following the instructions for running `./configure'.
-Pay special attention to the `--prefix=' option, which you almost
-certainly will need to specify.
-
- (Note that `gcc' installation information is provided as a straight
-text file in `gcc/INSTALL'.)
-
- The information printed by the invocation of `./configure' should
-show that the `f' directory (the Fortran language) has been configured.
-If it does not, there is a problem.
-
- *Note:* Configuring with the `--srcdir' argument is known to work
-with GNU `make', but it is not known to work with other variants of
-`make'. Irix5.2 and SunOS4.1 versions of `make' definitely won't work
-outside the source directory at present. `g77''s portion of the
-`configure' script issues a warning message about this when you
-configure for building binaries outside the source directory.
-
-
-File: g77.info, Node: Building gcc, Next: Pre-installation Checks, Prev: Configuring gcc, Up: Complete Installation
-
-Building GNU CC
----------------
-
- Building `g77' requires building enough of `gcc' that these
-instructions assume you're going to build all of `gcc', including
-`g++', `protoize', and so on. You can save a little time and disk
-space by changes the `LANGUAGES' macro definition in `gcc/Makefile.in'
-or `gcc/Makefile', but if you do that, you're on your own. One change
-is almost *certainly* going to cause failures: removing `c' or `f77'
-from the definition of the `LANGUAGES' macro.
-
- After configuring `gcc', which configures `g77' and `libf2c'
-automatically, you're ready to start the actual build by invoking
-`make'.
-
- *Note:* You *must* have run `./configure' before you run `make',
-even if you're using an already existing `gcc' development directory,
-because `./configure' does the work to recognize that you've added
-`g77' to the configuration.
-
- There are two general approaches to building GNU CC from scratch:
-
-"bootstrap"
- This method uses minimal native system facilities to build a
- barebones, unoptimized `gcc', that is then used to compile
- ("bootstrap") the entire system.
-
-"straight"
- This method assumes a more complete native system exists, and uses
- that just once to build the entire system.
-
- On all systems without a recent version of `gcc' already installed,
-the bootstrap method must be used. In particular, `g77' uses
-extensions to the C language offered, apparently, only by `gcc'.
-
- On most systems with a recent version of `gcc' already installed,
-the straight method can be used. This is an advantage, because it
-takes less CPU time and disk space for the build. However, it does
-require that the system have fairly recent versions of many GNU
-programs and other programs, which are not enumerated here.
-
-* Menu:
-
-* Bootstrap Build:: For all systems.
-* Straight Build:: For systems with a recent version of `gcc'.
-
diff --git a/gcc/f/g77.info-14 b/gcc/f/g77.info-14
deleted file mode 100644
index 457710ff475..00000000000
--- a/gcc/f/g77.info-14
+++ /dev/null
@@ -1,1145 +0,0 @@
-This is Info file g77.info, produced by Makeinfo version 1.68 from the
-input file g77.texi.
-
- This file explains how to use the GNU Fortran system.
-
- Published by the Free Software Foundation 59 Temple Place - Suite 330
-Boston, MA 02111-1307 USA
-
- Copyright (C) 1995-1997 Free Software Foundation, Inc.
-
- Permission is granted to make and distribute verbatim copies of this
-manual provided the copyright notice and this permission notice are
-preserved on all copies.
-
- Permission is granted to copy and distribute modified versions of
-this manual under the conditions for verbatim copying, provided also
-that the sections entitled "GNU General Public License," "Funding for
-Free Software," and "Protect Your Freedom--Fight `Look And Feel'" are
-included exactly as in the original, and provided that the entire
-resulting derived work is distributed under the terms of a permission
-notice identical to this one.
-
- Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that the sections entitled "GNU General Public
-License," "Funding for Free Software," and "Protect Your Freedom--Fight
-`Look And Feel'", and this permission notice, may be included in
-translations approved by the Free Software Foundation instead of in the
-original English.
-
- Contributed by James Craig Burley (<burley@gnu.ai.mit.edu>).
-Inspired by a first pass at translating `g77-0.5.16/f/DOC' that was
-contributed to Craig by David Ronis (<ronis@onsager.chem.mcgill.ca>).
-
-INFO-DIR-SECTION Fortran Programming
-START-INFO-DIR-ENTRY
-* g77: (g77). The GNU Fortran compilation system.
-END-INFO-DIR-ENTRY
-
-
-File: g77.info, Node: Bootstrap Build, Next: Straight Build, Up: Building gcc
-
-Bootstrap Build
-...............
-
- A complete bootstrap build is done by issuing a command beginning
-with `make bootstrap ...', as described in *Note Installing GNU CC:
-(gcc)Installation. This is the most reliable form of build, but it
-does require the most disk space and CPU time, since the complete system
-is built twice (in Stages 2 and 3), after an initial build (during
-Stage 1) of a minimal `gcc' compiler using the native compiler and
-libraries.
-
- You might have to, or want to, control the way a bootstrap build is
-done by entering the `make' commands to build each stage one at a time,
-as described in the `gcc' manual. For example, to save time or disk
-space, you might want to not bother doing the Stage 3 build, in which
-case you are assuming that the `gcc' compiler you have built is
-basically sound (because you are giving up the opportunity to compare a
-large number of object files to ensure they're identical).
-
- To save some disk space during installation, after Stage 2 is built,
-you can type `rm -fr stage1' to remove the binaries built during Stage
-1.
-
- *Note:* *Note Object File Differences::, for information on expected
-differences in object files produced during Stage 2 and Stage 3 of a
-bootstrap build. These differences will be encountered as a result of
-using the `make compare' or similar command sequence recommended by the
-GNU CC installation documentation.
-
- Also, *Note Installing GNU CC: (gcc)Installation, for important
-information on building `gcc' that is not described in this `g77'
-manual. For example, explanations of diagnostic messages and whether
-they're expected, or indicate trouble, are found there.
-
-
-File: g77.info, Node: Straight Build, Prev: Bootstrap Build, Up: Building gcc
-
-Straight Build
-..............
-
- If you have a recent version of `gcc' already installed on your
-system, and if you're reasonably certain it produces code that is
-object-compatible with the version of `gcc' you want to build as part
-of building `g77', you can save time and disk space by doing a straight
-build.
-
- To build just the C and Fortran compilers and the necessary run-time
-libraries, issue the following command:
-
- make -k CC=gcc LANGUAGES=f77 all g77
-
- (The `g77' target is necessary because the `gcc' build procedures
-apparently do not automatically build command drivers for languages in
-subdirectories. It's the `all' target that triggers building
-everything except, apparently, the `g77' command itself.)
-
- If you run into problems using this method, you have two options:
-
- * Abandon this approach and do a bootstrap build.
-
- * Try to make this approach work by diagnosing the problems you're
- running into and retrying.
-
- Especially if you do the latter, you might consider submitting any
-solutions as bug/fix reports. *Note Known Causes of Trouble with GNU
-Fortran: Trouble.
-
- However, understand that many problems preventing a straight build
-from working are not `g77' problems, and, in such cases, are not likely
-to be addressed in future versions of `g77'.
-
-
-File: g77.info, Node: Pre-installation Checks, Next: Installation of Binaries, Prev: Building gcc, Up: Complete Installation
-
-Pre-installation Checks
------------------------
-
- Before installing the system, which includes installing `gcc', you
-might want to do some minimum checking to ensure that some basic things
-work.
-
- Here are some commands you can try, and output typically printed by
-them when they work:
-
- sh# cd /usr/src/gcc
- sh# ./g77 --driver=./xgcc -B./ -v
- g77 version 0.5.21
- ./xgcc -B./ -v -fnull-version -o /tmp/gfa18047 ...
- Reading specs from ./specs
- gcc version 2.7.2.3.f.1
- ./cpp -lang-c -v -isystem ./include -undef ...
- GNU CPP version 2.7.2.3.f.1 (Linux/Alpha)
- #include "..." search starts here:
- #include <...> search starts here:
- ./include
- /usr/local/include
- /usr/alpha-unknown-linux/include
- /usr/lib/gcc-lib/alpha-unknown-linux/2.7.2.3.f.1/include
- /usr/include
- End of search list.
- ./f771 /tmp/cca18048.i -fset-g77-defaults -quiet -dumpbase ...
- GNU F77 version 2.7.2.3.f.1 (Linux/Alpha) compiled ...
- GNU Fortran Front End version 0.5.21 compiled: ...
- as -nocpp -o /tmp/cca180481.o /tmp/cca18048.s
- ld -G 8 -O1 -o /tmp/gfa18047 /usr/lib/crt0.o -L. ...
- __G77_LIBF77_VERSION__: 0.5.21
- @(#)LIBF77 VERSION 19970404
- __G77_LIBI77_VERSION__: 0.5.21
- @(#) LIBI77 VERSION pjw,dmg-mods 19970816
- __G77_LIBU77_VERSION__: 0.5.21
- @(#) LIBU77 VERSION 19970609
- sh# ./xgcc -B./ -v -o /tmp/delete-me -xc /dev/null -xnone
- Reading specs from ./specs
- gcc version 2.7.2.3.f.1
- ./cpp -lang-c -v -isystem ./include -undef ...
- GNU CPP version 2.7.2.3.f.1 (Linux/Alpha)
- #include "..." search starts here:
- #include <...> search starts here:
- ./include
- /usr/local/include
- /usr/alpha-unknown-linux/include
- /usr/lib/gcc-lib/alpha-unknown-linux/2.7.2.3.f.1/include
- /usr/include
- End of search list.
- ./cc1 /tmp/cca18063.i -quiet -dumpbase null.c -version ...
- GNU C version 2.7.2.3.f.1 (Linux/Alpha) compiled ...
- as -nocpp -o /tmp/cca180631.o /tmp/cca18063.s
- ld -G 8 -O1 -o /tmp/delete-me /usr/lib/crt0.o -L. ...
- /usr/lib/crt0.o: In function `__start':
- crt0.S:110: undefined reference to `main'
- /usr/lib/crt0.o(.lita+0x28): undefined reference to `main'
- sh#
-
- (Note that long lines have been truncated, and `...' used to
-indicate such truncations.)
-
- The above two commands test whether `g77' and `gcc', respectively,
-are able to compile empty (null) source files, whether invocation of
-the C preprocessor works, whether libraries can be linked, and so on.
-
- If the output you get from either of the above two commands is
-noticeably different, especially if it is shorter or longer in ways
-that do not look consistent with the above sample output, you probably
-should not install `gcc' and `g77' until you have investigated further.
-
- For example, you could try compiling actual applications and seeing
-how that works. (You might want to do that anyway, even if the above
-tests work.)
-
- To compile using the not-yet-installed versions of `gcc' and `g77',
-use the following commands to invoke them.
-
- To invoke `g77', type:
-
- /usr/src/gcc/g77 --driver=/usr/src/gcc/xgcc -B/usr/src/gcc/ ...
-
- To invoke `gcc', type:
-
- /usr/src/gcc/xgcc -B/usr/src/gcc/ ...
-
-
-File: g77.info, Node: Installation of Binaries, Next: Updating Documentation, Prev: Pre-installation Checks, Up: Complete Installation
-
-Installation of Binaries
-------------------------
-
- After configuring, building, and testing `g77' and `gcc', when you
-are ready to install them on your system, type:
-
- make -k CC=gcc LANGUAGES=f77 install
-
- As described in *Note Installing GNU CC: (gcc)Installation, the
-values for the `CC' and `LANGUAGES' macros should be the same as those
-you supplied for the build itself.
-
- So, the details of the above command might vary if you used a
-bootstrap build (where you might be able to omit both definitions, or
-might have to supply the same definitions you used when building the
-final stage) or if you deviated from the instructions for a straight
-build.
-
- If the above command does not install `libf2c.a' as expected, try
-this:
-
- make -k ... install install-libf77 install-f2c-all
-
- We don't know why some non-GNU versions of `make' sometimes require
-this alternate command, but they do. (Remember to supply the
-appropriate definitions for `CC' and `LANGUAGES' where you see `...' in
-the above command.)
-
- Note that using the `-k' option tells `make' to continue after some
-installation problems, like not having `makeinfo' installed on your
-system. It might not be necessary for your system.
-
-
-File: g77.info, Node: Updating Documentation, Next: Missing bison?, Prev: Installation of Binaries, Up: Complete Installation
-
-Updating Your Info Directory
-----------------------------
-
- As part of installing `g77', you should make sure users of `info'
-can easily access this manual on-line. Do this by making sure a line
-such as the following exists in `/usr/info/dir', or in whatever file is
-the top-level file in the `info' directory on your system (perhaps
-`/usr/local/info/dir':
-
- * g77: (g77). The GNU Fortran programming language.
-
- If the menu in `dir' is organized into sections, `g77' probably
-belongs in a section with a name such as one of the following:
-
- * Fortran Programming
-
- * Writing Programs
-
- * Programming Languages
-
- * Languages Other Than C
-
- * Scientific/Engineering Tools
-
- * GNU Compilers
-
-
-File: g77.info, Node: Missing bison?, Next: Missing makeinfo?, Prev: Updating Documentation, Up: Complete Installation
-
-Missing `bison'?
-----------------
-
- If you cannot install `bison', make sure you have started with a
-*fresh* distribution of `gcc', do *not* do `make maintainer-clean' (in
-other versions of `gcc', this was called `make realclean'), and, to
-ensure that `bison' is not invoked by `make' during the build, type
-these commands:
-
- sh# cd gcc
- sh# touch bi-parser.c bi-parser.h c-parse.c c-parse.h cexp.c
- sh# touch cp/parse.c cp/parse.h objc-parse.c
- sh#
-
- These commands update the date-time-modified information for all the
-files produced by the various invocations of `bison' in the current
-versions of `gcc', so that `make' no longer believes it needs to update
-them. All of these files should already exist in a `gcc' distribution,
-but the application of patches to upgrade to a newer version can leave
-the modification information set such that the `bison' input files look
-more "recent" than the corresponding output files.
-
- *Note:* New versions of `gcc' might change the set of files it
-generates by invoking `bison'--if you cannot figure out for yourself
-how to handle such a situation, try an older version of `gcc' until you
-find someone who can (or until you obtain and install `bison').
-
-
-File: g77.info, Node: Missing makeinfo?, Prev: Missing bison?, Up: Complete Installation
-
-Missing `makeinfo'?
--------------------
-
- If you cannot install `makeinfo', either use the `-k' option when
-invoking make to specify any of the `install' or related targets, or
-specify `MAKEINFO=echo' on the `make' command line.
-
- If you fail to do one of these things, some files, like `libf2c.a',
-might not be installed, because the failed attempt by `make' to invoke
-`makeinfo' causes it to cancel any further processing.
-
-
-File: g77.info, Node: Distributing Binaries, Prev: Complete Installation, Up: Installation
-
-Distributing Binaries
-=====================
-
- If you are building `g77' for distribution to others in binary form,
-first make sure you are aware of your legal responsibilities (read the
-file `gcc/COPYING' thoroughly).
-
- Then, consider your target audience and decide where `g77' should be
-installed.
-
- For systems like GNU/Linux that have no native Fortran compiler (or
-where `g77' could be considered the native compiler for Fortran and
-`gcc' for C, etc.), you should definitely configure `g77' for
-installation in `/usr/bin' instead of `/usr/local/bin'. Specify the
-`--prefix=/usr' option when running `./configure'. You might also want
-to set up the distribution so the `f77' command is a link to
-`g77'--just make an empty file named `f77-install-ok' in the source or
-build directory (the one in which the `f' directory resides, not the
-`f' directory itself) when you specify one of the `install' or
-`uninstall' targets in a `make' command.
-
- For a system that might already have `f2c' installed, you definitely
-will want to make another empty file (in the same directory) named
-either `f2c-exists-ok' or `f2c-install-ok'. Use the former if you
-don't want your distribution to overwrite `f2c'-related files in
-existing systems; use the latter if you want to improve the likelihood
-that users will be able to use both `f2c' and `g77' to compile code for
-a single program without encountering link-time or run-time
-incompatibilities.
-
- (Make sure you clearly document, in the "advertising" for your
-distribution, how installation of your distribution will affect
-existing installations of `gcc', `f2c', `f77', `libf2c.a', and so on.
-Similarly, you should clearly document any requirements you assume are
-met by users of your distribution.)
-
- For other systems with native `f77' (and `cc') compilers, configure
-`g77' as you (or most of your audience) would configure `gcc' for their
-installations. Typically this is for installation in `/usr/local', and
-would not include a copy of `g77' named `f77', so users could still use
-the native `f77'.
-
- In any case, for `g77' to work properly, you *must* ensure that the
-binaries you distribute include:
-
-`bin/g77'
- This is the command most users use to compile Fortran.
-
-`bin/gcc'
- This is the command all users use to compile Fortran, either
- directly or indirectly via the `g77' command. The `bin/gcc'
- executable file must have been built from a `gcc' source tree into
- which a `g77' source tree was merged and configured, or it will
- not know how to compile Fortran programs.
-
-`bin/f77'
- In installations with no non-GNU native Fortran compiler, this is
- the same as `bin/g77'. Otherwise, it should be omitted from the
- distribution, so the one on already on a particular system does
- not get overwritten.
-
-`info/g77.info*'
- This is the documentation for `g77'. If it is not included, users
- will have trouble understanding diagnostics messages and other
- such things, and will send you a lot of email asking questions.
-
- Please edit this documentation (by editing `gcc/f/*.texi' and
- doing `make doc' from the `/usr/src/gcc' directory) to reflect any
- changes you've made to `g77', or at least to encourage users of
- your binary distribution to report bugs to you first.
-
- Also, whether you distribute binaries or install `g77' on your own
- system, it might be helpful for everyone to add a line listing
- this manual by name and topic to the top-level `info' node in
- `/usr/info/dir'. That way, users can find `g77' documentation more
- easily. *Note Updating Your Info Directory: Updating
- Documentation.
-
-`man/man1/g77.1'
- This is the short man page for `g77'. It is out of date, but you
- might as well include it for people who really like man pages.
-
-`man/man1/f77.1'
- In installations where `f77' is the same as `g77', this is the
- same as `man/man1/g77.1'. Otherwise, it should be omitted from
- the distribution, so the one already on a particular system does
- not get overwritten.
-
-`lib/gcc-lib/.../f771'
- This is the actual Fortran compiler.
-
-`lib/gcc-lib/.../libf2c.a'
- This is the run-time library for `g77'-compiled programs.
-
- Whether you want to include the slightly updated (and possibly
-improved) versions of `cc1', `cc1plus', and whatever other binaries get
-rebuilt with the changes the GNU Fortran distribution makes to the GNU
-back end, is up to you. These changes are highly unlikely to break any
-compilers, and it is possible they'll fix back-end bugs that can be
-demonstrated using front ends other than GNU Fortran's.
-
- Please assure users that unless they have a specific need for their
-existing, older versions of `gcc' command, they are unlikely to
-experience any problems by overwriting it with your version--though
-they could certainly protect themselves by making backup copies first!
-Otherwise, users might try and install your binaries in a "safe" place,
-find they cannot compile Fortran programs with your distribution
-(because, perhaps, they're picking up their old version of the `gcc'
-command, which does not recognize Fortran programs), and assume that
-your binaries (or, more generally, GNU Fortran distributions in
-general) are broken, at least for their system.
-
- Finally, *please* ask for bug reports to go to you first, at least
-until you're sure your distribution is widely used and has been well
-tested. This especially goes for those of you making any changes to
-the `g77' sources to port `g77', e.g. to OS/2.
-<fortran@gnu.ai.mit.edu> has received a fair number of bug reports that
-turned out to be problems with other peoples' ports and distributions,
-about which nothing could be done for the user. Once you are quite
-certain a bug report does not involve your efforts, you can forward it
-to us.
-
-
-File: g77.info, Node: Debugging and Interfacing, Next: Collected Fortran Wisdom, Prev: Installation, Up: Top
-
-Debugging and Interfacing
-*************************
-
- GNU Fortran currently generates code that is object-compatible with
-the `f2c' converter. Also, it avoids limitations in the current GBE,
-such as the inability to generate a procedure with multiple entry
-points, by generating code that is structured differently (in terms of
-procedure names, scopes, arguments, and so on) than might be expected.
-
- As a result, writing code in other languages that calls on, is
-called by, or shares in-memory data with `g77'-compiled code generally
-requires some understanding of the way `g77' compiles code for various
-constructs.
-
- Similarly, using a debugger to debug `g77'-compiled code, even if
-that debugger supports native Fortran debugging, generally requires
-this sort of information.
-
- This section describes some of the basic information on how `g77'
-compiles code for constructs involving interfaces to other languages
-and to debuggers.
-
- *Caution:* Much or all of this information pertains to only the
-current release of `g77', sometimes even to using certain compiler
-options with `g77' (such as `-fno-f2c'). Do not write code that
-depends on this information without clearly marking said code as
-nonportable and subject to review for every new release of `g77'. This
-information is provided primarily to make debugging of code generated
-by this particular release of `g77' easier for the user, and partly to
-make writing (generally nonportable) interface code easier. Both of
-these activities require tracking changes in new version of `g77' as
-they are installed, because new versions can change the behaviors
-described in this section.
-
-* Menu:
-
-* Main Program Unit:: How `g77' compiles a main program unit.
-* Procedures:: How `g77' constructs parameter lists
- for procedures.
-* Functions:: Functions returning floating-point or character data.
-* Names:: Naming of user-defined variables, procedures, etc.
-* Common Blocks:: Accessing common variables while debugging.
-* Local Equivalence Areas:: Accessing `EQUIVALENCE' while debugging.
-* Complex Variables:: How `g77' performs complex arithmetic.
-* Arrays:: Dealing with (possibly multi-dimensional) arrays.
-* Adjustable Arrays:: Special consideration for adjustable arrays.
-* Alternate Entry Points:: How `g77' implements alternate `ENTRY'.
-* Alternate Returns:: How `g77' handles alternate returns.
-* Assigned Statement Labels:: How `g77' handles `ASSIGN'.
-* Run-time Library Errors:: Meanings of some `IOSTAT=' values.
-
-
-File: g77.info, Node: Main Program Unit, Next: Procedures, Up: Debugging and Interfacing
-
-Main Program Unit (PROGRAM)
-===========================
-
- When `g77' compiles a main program unit, it gives it the public
-procedure name `MAIN__'. The `libf2c' library has the actual `main()'
-procedure as is typical of C-based environments, and it is this
-procedure that performs some initial start-up activity and then calls
-`MAIN__'.
-
- Generally, `g77' and `libf2c' are designed so that you need not
-include a main program unit written in Fortran in your program--it can
-be written in C or some other language. Especially for I/O handling,
-this is the case, although `g77' version 0.5.16 includes a bug fix for
-`libf2c' that solved a problem with using the `OPEN' statement as the
-first Fortran I/O activity in a program without a Fortran main program
-unit.
-
- However, if you don't intend to use `g77' (or `f2c') to compile your
-main program unit--that is, if you intend to compile a `main()'
-procedure using some other language--you should carefully examine the
-code for `main()' in `libf2c', found in the source file
-`gcc/f/runtime/libF77/main.c', to see what kinds of things might need
-to be done by your `main()' in order to provide the Fortran environment
-your Fortran code is expecting.
-
- For example, `libf2c''s `main()' sets up the information used by the
-`IARGC' and `GETARG' intrinsics. Bypassing `libf2c''s `main()' without
-providing a substitute for this activity would mean that invoking
-`IARGC' and `GETARG' would produce undefined results.
-
- When debugging, one implication of the fact that `main()', which is
-the place where the debugged program "starts" from the debugger's point
-of view, is in `libf2c' is that you won't be starting your Fortran
-program at a point you recognize as your Fortran code.
-
- The standard way to get around this problem is to set a break point
-(a one-time, or temporary, break point will do) at the entrance to
-`MAIN__', and then run the program. A convenient way to do so is to
-add the `gdb' command
-
- tbreak MAIN__
-
-to the file `.gdbinit' in the directory in which you're debugging
-(using `gdb').
-
- After doing this, the debugger will see the current execution point
-of the program as at the beginning of the main program unit of your
-program.
-
- Of course, if you really want to set a break point at some other
-place in your program and just start the program running, without first
-breaking at `MAIN__', that should work fine.
-
-
-File: g77.info, Node: Procedures, Next: Functions, Prev: Main Program Unit, Up: Debugging and Interfacing
-
-Procedures (SUBROUTINE and FUNCTION)
-====================================
-
- Currently, `g77' passes arguments via reference--specifically, by
-passing a pointer to the location in memory of a variable, array, array
-element, a temporary location that holds the result of evaluating an
-expression, or a temporary or permanent location that holds the value
-of a constant.
-
- Procedures that accept `CHARACTER' arguments are implemented by
-`g77' so that each `CHARACTER' argument has two actual arguments.
-
- The first argument occupies the expected position in the argument
-list and has the user-specified name. This argument is a pointer to an
-array of characters, passed by the caller.
-
- The second argument is appended to the end of the user-specified
-calling sequence and is named `__g77_length_X', where X is the
-user-specified name. This argument is of the C type `ftnlen' (see
-`gcc/f/runtime/f2c.h.in' for information on that type) and is the
-number of characters the caller has allocated in the array pointed to
-by the first argument.
-
- A procedure will ignore the length argument if `X' is not declared
-`CHARACTER*(*)', because for other declarations, it knows the length.
-Not all callers necessarily "know" this, however, which is why they all
-pass the extra argument.
-
- The contents of the `CHARACTER' argument are specified by the
-address passed in the first argument (named after it). The procedure
-can read or write these contents as appropriate.
-
- When more than one `CHARACTER' argument is present in the argument
-list, the length arguments are appended in the order the original
-arguments appear. So `CALL FOO('HI','THERE')' is implemented in C as
-`foo("hi","there",2,5);', ignoring the fact that `g77' does not provide
-the trailing null bytes on the constant strings (`f2c' does provide
-them, but they are unnecessary in a Fortran environment, and you should
-not expect them to be there).
-
- Note that the above information applies to `CHARACTER' variables and
-arrays *only*. It does *not* apply to external `CHARACTER' functions
-or to intrinsic `CHARACTER' functions. That is, no second length
-argument is passed to `FOO' in this case:
-
- CHARACTER X
- EXTERNAL X
- CALL FOO(X)
-
-Nor does `FOO' expect such an argument in this case:
-
- SUBROUTINE FOO(X)
- CHARACTER X
- EXTERNAL X
-
- Because of this implementation detail, if a program has a bug such
-that there is disagreement as to whether an argument is a procedure,
-and the type of the argument is `CHARACTER', subtle symptoms might
-appear.
-
-
-File: g77.info, Node: Functions, Next: Names, Prev: Procedures, Up: Debugging and Interfacing
-
-Functions (FUNCTION and RETURN)
-===============================
-
- `g77' handles in a special way functions that return the following
-types:
-
- * `CHARACTER'
-
- * `COMPLEX'
-
- * `REAL(KIND=1)'
-
- For `CHARACTER', `g77' implements a subroutine (a C function
-returning `void') with two arguments prepended: `__g77_result', which
-the caller passes as a pointer to a `char' array expected to hold the
-return value, and `__g77_length', which the caller passes as an
-`ftnlen' value specifying the length of the return value as declared in
-the calling program. For `CHARACTER*(*)', the called function uses
-`__g77_length' to determine the size of the array that `__g77_result'
-points to; otherwise, it ignores that argument.
-
- For `COMPLEX', when `-ff2c' is in force, `g77' implements a
-subroutine with one argument prepended: `__g77_result', which the
-caller passes as a pointer to a variable of the type of the function.
-The called function writes the return value into this variable instead
-of returning it as a function value. When `-fno-f2c' is in force,
-`g77' implements a `COMPLEX' function as `gcc''s `__complex__ float' or
-`__complex__ double' function (or an emulation thereof, when
-`-femulate-complex' is in effect), returning the result of the function
-in the same way as `gcc' would.
-
- For `REAL(KIND=1)', when `-ff2c' is in force, `g77' implements a
-function that actually returns `REAL(KIND=2)' (typically C's `double'
-type). When `-fno-f2c' is in force, `REAL(KIND=1)' functions return
-`float'.
-
-
-File: g77.info, Node: Names, Next: Common Blocks, Prev: Functions, Up: Debugging and Interfacing
-
-Names
-=====
-
- Fortran permits each implementation to decide how to represent names
-as far as how they're seen in other contexts, such as debuggers and
-when interfacing to other languages, and especially as far as how
-casing is handled.
-
- External names--names of entities that are public, or "accessible",
-to all modules in a program--normally have an underscore (`_') appended
-by `g77', to generate code that is compatible with f2c. External names
-include names of Fortran things like common blocks, external procedures
-(subroutines and functions, but not including statement functions,
-which are internal procedures), and entry point names.
-
- However, use of the `-fno-underscoring' option disables this kind of
-transformation of external names (though inhibiting the transformation
-certainly improves the chances of colliding with incompatible externals
-written in other languages--but that might be intentional.
-
- When `-funderscoring' is in force, any name (external or local) that
-already has at least one underscore in it is implemented by `g77' by
-appending two underscores. (This second underscore can be disabled via
-the `-fno-second-underscore' option.) External names are changed this
-way for `f2c' compatibility. Local names are changed this way to avoid
-collisions with external names that are different in the source
-code--`f2c' does the same thing, but there's no compatibility issue
-there except for user expectations while debugging.
-
- For example:
-
- Max_Cost = 0
-
-Here, a user would, in the debugger, refer to this variable using the
-name `max_cost__' (or `MAX_COST__' or `Max_Cost__', as described below).
-(We hope to improve `g77' in this regard in the future--don't write
-scripts depending on this behavior! Also, consider experimenting with
-the `-fno-underscoring' option to try out debugging without having to
-massage names by hand like this.)
-
- `g77' provides a number of command-line options that allow the user
-to control how case mapping is handled for source files. The default
-is the traditional UNIX model for Fortran compilers--names are mapped
-to lower case. Other command-line options can be specified to map
-names to upper case, or to leave them exactly as written in the source
-file.
-
- For example:
-
- Foo = 9.436
-
-Here, it is normally the case that the variable assigned will be named
-`foo'. This would be the name to enter when using a debugger to access
-the variable.
-
- However, depending on the command-line options specified, the name
-implemented by `g77' might instead be `FOO' or even `Foo', thus
-affecting how debugging is done.
-
- Also:
-
- Call Foo
-
-This would normally call a procedure that, if it were in a separate C
-program, be defined starting with the line:
-
- void foo_()
-
-However, `g77' command-line options could be used to change the casing
-of names, resulting in the name `FOO_' or `Foo_' being given to the
-procedure instead of `foo_', and the `-fno-underscoring' option could
-be used to inhibit the appending of the underscore to the name.
-
-
-File: g77.info, Node: Common Blocks, Next: Local Equivalence Areas, Prev: Names, Up: Debugging and Interfacing
-
-Common Blocks (COMMON)
-======================
-
- `g77' names and lays out `COMMON' areas the same way f2c does, for
-compatibility with f2c.
-
- Currently, `g77' does not emit "true" debugging information for
-members of a `COMMON' area, due to an apparent bug in the GBE.
-
- (As of Version 0.5.19, `g77' emits debugging information for such
-members in the form of a constant string specifying the base name of
-the aggregate area and the offset of the member in bytes from the start
-of the area. Use the `-fdebug-kludge' option to enable this behavior.
-In `gdb', use `set language c' before printing the value of the member,
-then `set language fortran' to restore the default language, since
-`gdb' doesn't provide a way to print a readable version of a character
-string in Fortran language mode.
-
- This kludge will be removed in a future version of `g77' that, in
-conjunction with a contemporary version of `gdb', properly supports
-Fortran-language debugging, including access to members of `COMMON'
-areas.)
-
- *Note Options for Code Generation Conventions: Code Gen Options, for
-information on the `-fdebug-kludge' option.
-
- Moreover, `g77' currently implements a `COMMON' area such that its
-type is an array of the C `char' data type.
-
- So, when debugging, you must know the offset into a `COMMON' area
-for a particular item in that area, and you have to take into account
-the appropriate multiplier for the respective sizes of the types (as
-declared in your code) for the items preceding the item in question as
-compared to the size of the `char' type.
-
- For example, using default implicit typing, the statement
-
- COMMON I(15), R(20), T
-
-results in a public 144-byte `char' array named `_BLNK__' with `I'
-placed at `_BLNK__[0]', `R' at `_BLNK__[60]', and `T' at `_BLNK__[140]'.
-(This is assuming that the target machine for the compilation has
-4-byte `INTEGER(KIND=1)' and `REAL(KIND=1)' types.)
-
-
-File: g77.info, Node: Local Equivalence Areas, Next: Complex Variables, Prev: Common Blocks, Up: Debugging and Interfacing
-
-Local Equivalence Areas (EQUIVALENCE)
-=====================================
-
- `g77' treats storage-associated areas involving a `COMMON' block as
-explained in the section on common blocks.
-
- A local `EQUIVALENCE' area is a collection of variables and arrays
-connected to each other in any way via `EQUIVALENCE', none of which are
-listed in a `COMMON' statement.
-
- Currently, `g77' does not emit "true" debugging information for
-members in a local `EQUIVALENCE' area, due to an apparent bug in the
-GBE.
-
- (As of Version 0.5.19, `g77' does emit debugging information for such
-members in the form of a constant string specifying the base name of
-the aggregate area and the offset of the member in bytes from the start
-of the area. Use the `-fdebug-kludge' option to enable this behavior.
-In `gdb', use `set language c' before printing the value of the member,
-then `set language fortran' to restore the default language, since
-`gdb' doesn't provide a way to print a readable version of a character
-string in Fortran language mode.
-
- This kludge will be removed in a future version of `g77' that, in
-conjunction with a contemporary version of `gdb', properly supports
-Fortran-language debugging, including access to members of
-`EQUIVALENCE' areas.)
-
- *Note Options for Code Generation Conventions: Code Gen Options, for
-information on the `-fdebug-kludge' option.
-
- Moreover, `g77' implements a local `EQUIVALENCE' area such that its
-type is an array of the C `char' data type.
-
- The name `g77' gives this array of `char' type is `__g77_equiv_X',
-where X is the name of the item that is placed at the beginning (offset
-0) of this array. If more than one such item is placed at the
-beginning, X is the name that sorts to the top in an alphabetical sort
-of the list of such items.
-
- When debugging, you must therefore access members of `EQUIVALENCE'
-areas by specifying the appropriate `__g77_equiv_X' array section with
-the appropriate offset. See the explanation of debugging `COMMON'
-blocks for info applicable to debugging local `EQUIVALENCE' areas.
-
- (*Note:* `g77' version 0.5.18 and earlier chose the name for X using
-a different method when more than one name was in the list of names of
-entities placed at the beginning of the array. Though the
-documentation specified that the first name listed in the `EQUIVALENCE'
-statements was chosen for X, `g77' in fact chose the name using a
-method that was so complicated, it seemed easier to change it to an
-alphabetical sort than to describe the previous method in the
-documentation.)
-
-
-File: g77.info, Node: Complex Variables, Next: Arrays, Prev: Local Equivalence Areas, Up: Debugging and Interfacing
-
-Complex Variables (COMPLEX)
-===========================
-
- As of 0.5.20, `g77' defaults to handling `COMPLEX' types (and
-related intrinsics, constants, functions, and so on) in a manner that
-makes direct debugging involving these types in Fortran language mode
-difficult.
-
- Essentially, `g77' implements these types using an internal
-construct similar to C's `struct', at least as seen by the `gcc' back
-end.
-
- Currently, the back end, when outputting debugging info with the
-compiled code for the assembler to digest, does not detect these
-`struct' types as being substitutes for Fortran complex. As a result,
-the Fortran language modes of debuggers such as `gdb' see these types
-as C `struct' types, which they might or might not support.
-
- Until this is fixed, switch to C language mode to work with entities
-of `COMPLEX' type and then switch back to Fortran language mode
-afterward. (In `gdb', this is accomplished via `set lang c' and either
-`set lang fortran' or `set lang auto'.)
-
- *Note:* Compiling with the `-fno-emulate-complex' option avoids the
-debugging problem, but is known to cause other problems like compiler
-crashes and generation of incorrect code, so it is not recommended.
-
-
-File: g77.info, Node: Arrays, Next: Adjustable Arrays, Prev: Complex Variables, Up: Debugging and Interfacing
-
-Arrays (DIMENSION)
-==================
-
- Fortran uses "column-major ordering" in its arrays. This differs
-from other languages, such as C, which use "row-major ordering". The
-difference is that, with Fortran, array elements adjacent to each other
-in memory differ in the *first* subscript instead of the last;
-`A(5,10,20)' immediately follows `A(4,10,20)', whereas with row-major
-ordering it would follow `A(5,10,19)'.
-
- This consideration affects not only interfacing with and debugging
-Fortran code, it can greatly affect how code is designed and written,
-especially when code speed and size is a concern.
-
- Fortran also differs from C, a popular language for interfacing and
-to support directly in debuggers, in the way arrays are treated. In C,
-arrays are single-dimensional and have interesting relationships to
-pointers, neither of which is true for Fortran. As a result, dealing
-with Fortran arrays from within an environment limited to C concepts
-can be challenging.
-
- For example, accessing the array element `A(5,10,20)' is easy enough
-in Fortran (use `A(5,10,20)'), but in C some difficult machinations are
-needed. First, C would treat the A array as a single-dimension array.
-Second, C does not understand low bounds for arrays as does Fortran.
-Third, C assumes a low bound of zero (0), while Fortran defaults to a
-low bound of one (1) and can supports an arbitrary low bound.
-Therefore, calculations must be done to determine what the C equivalent
-of `A(5,10,20)' would be, and these calculations require knowing the
-dimensions of `A'.
-
- For `DIMENSION A(2:11,21,0:29)', the calculation of the offset of
-`A(5,10,20)' would be:
-
- (5-2)
- + (10-1)*(11-2+1)
- + (20-0)*(11-2+1)*(21-1+1)
- = 4293
-
-So the C equivalent in this case would be `a[4293]'.
-
- When using a debugger directly on Fortran code, the C equivalent
-might not work, because some debuggers cannot understand the notion of
-low bounds other than zero. However, unlike `f2c', `g77' does inform
-the GBE that a multi-dimensional array (like `A' in the above example)
-is really multi-dimensional, rather than a single-dimensional array, so
-at least the dimensionality of the array is preserved.
-
- Debuggers that understand Fortran should have no trouble with
-non-zero low bounds, but for non-Fortran debuggers, especially C
-debuggers, the above example might have a C equivalent of `a[4305]'.
-This calculation is arrived at by eliminating the subtraction of the
-lower bound in the first parenthesized expression on each line--that
-is, for `(5-2)' substitute `(5)', for `(10-1)' substitute `(10)', and
-for `(20-0)' substitute `(20)'. Actually, the implication of this can
-be that the expression `*(&a[2][1][0] + 4293)' works fine, but that
-`a[20][10][5]' produces the equivalent of `*(&a[0][0][0] + 4305)'
-because of the missing lower bounds.
-
- Come to think of it, perhaps the behavior is due to the debugger
-internally compensating for the lower bounds by offsetting the base
-address of `a', leaving `&a' set lower, in this case, than
-`&a[2][1][0]' (the address of its first element as identified by
-subscripts equal to the corresponding lower bounds).
-
- You know, maybe nobody really needs to use arrays.
-
-
-File: g77.info, Node: Adjustable Arrays, Next: Alternate Entry Points, Prev: Arrays, Up: Debugging and Interfacing
-
-Adjustable Arrays (DIMENSION)
-=============================
-
- Adjustable and automatic arrays in Fortran require the implementation
-(in this case, the `g77' compiler) to "memorize" the expressions that
-dimension the arrays each time the procedure is invoked. This is so
-that subsequent changes to variables used in those expressions, made
-during execution of the procedure, do not have any effect on the
-dimensions of those arrays.
-
- For example:
-
- REAL ARRAY(5)
- DATA ARRAY/5*2/
- CALL X(ARRAY, 5)
- END
- SUBROUTINE X(A, N)
- DIMENSION A(N)
- N = 20
- PRINT *, N, A
- END
-
-Here, the implementation should, when running the program, print
-something like:
-
- 20 2. 2. 2. 2. 2.
-
-Note that this shows that while the value of `N' was successfully
-changed, the size of the `A' array remained at 5 elements.
-
- To support this, `g77' generates code that executes before any user
-code (and before the internally generated computed `GOTO' to handle
-alternate entry points, as described below) that evaluates each
-(nonconstant) expression in the list of subscripts for an array, and
-saves the result of each such evaluation to be used when determining
-the size of the array (instead of re-evaluating the expressions).
-
- So, in the above example, when `X' is first invoked, code is
-executed that copies the value of `N' to a temporary. And that same
-temporary serves as the actual high bound for the single dimension of
-the `A' array (the low bound being the constant 1). Since the user
-program cannot (legitimately) change the value of the temporary during
-execution of the procedure, the size of the array remains constant
-during each invocation.
-
- For alternate entry points, the code `g77' generates takes into
-account the possibility that a dummy adjustable array is not actually
-passed to the actual entry point being invoked at that time. In that
-case, the public procedure implementing the entry point passes to the
-master private procedure implementing all the code for the entry points
-a `NULL' pointer where a pointer to that adjustable array would be
-expected. The `g77'-generated code doesn't attempt to evaluate any of
-the expressions in the subscripts for an array if the pointer to that
-array is `NULL' at run time in such cases. (Don't depend on this
-particular implementation by writing code that purposely passes `NULL'
-pointers where the callee expects adjustable arrays, even if you know
-the callee won't reference the arrays--nor should you pass `NULL'
-pointers for any dummy arguments used in calculating the bounds of such
-arrays or leave undefined any values used for that purpose in
-COMMON--because the way `g77' implements these things might change in
-the future!)
-
-
-File: g77.info, Node: Alternate Entry Points, Next: Alternate Returns, Prev: Adjustable Arrays, Up: Debugging and Interfacing
-
-Alternate Entry Points (ENTRY)
-==============================
-
- The GBE does not understand the general concept of alternate entry
-points as Fortran provides via the ENTRY statement. `g77' gets around
-this by using an approach to compiling procedures having at least one
-`ENTRY' statement that is almost identical to the approach used by
-`f2c'. (An alternate approach could be used that would probably
-generate faster, but larger, code that would also be a bit easier to
-debug.)
-
- Information on how `g77' implements `ENTRY' is provided for those
-trying to debug such code. The choice of implementation seems unlikely
-to affect code (compiled in other languages) that interfaces to such
-code.
-
- `g77' compiles exactly one public procedure for the primary entry
-point of a procedure plus each `ENTRY' point it specifies, as usual.
-That is, in terms of the public interface, there is no difference
-between
-
- SUBROUTINE X
- END
- SUBROUTINE Y
- END
-
-and:
-
- SUBROUTINE X
- ENTRY Y
- END
-
- The difference between the above two cases lies in the code compiled
-for the `X' and `Y' procedures themselves, plus the fact that, for the
-second case, an extra internal procedure is compiled.
-
- For every Fortran procedure with at least one `ENTRY' statement,
-`g77' compiles an extra procedure named `__g77_masterfun_X', where X is
-the name of the primary entry point (which, in the above case, using
-the standard compiler options, would be `x_' in C).
-
- This extra procedure is compiled as a private procedure--that is, a
-procedure not accessible by name to separately compiled modules. It
-contains all the code in the program unit, including the code for the
-primary entry point plus for every entry point. (The code for each
-public procedure is quite short, and explained later.)
-
- The extra procedure has some other interesting characteristics.
-
- The argument list for this procedure is invented by `g77'. It
-contains a single integer argument named `__g77_which_entrypoint',
-passed by value (as in Fortran's `%VAL()' intrinsic), specifying the
-entry point index--0 for the primary entry point, 1 for the first entry
-point (the first `ENTRY' statement encountered), 2 for the second entry
-point, and so on.
-
- It also contains, for functions returning `CHARACTER' and (when
-`-ff2c' is in effect) `COMPLEX' functions, and for functions returning
-different types among the `ENTRY' statements (e.g. `REAL FUNCTION R()'
-containing `ENTRY I()'), an argument named `__g77_result' that is
-expected at run time to contain a pointer to where to store the result
-of the entry point. For `CHARACTER' functions, this storage area is an
-array of the appropriate number of characters; for `COMPLEX' functions,
-it is the appropriate area for the return type; for
-multiple-return-type functions, it is a union of all the supported
-return types (which cannot include `CHARACTER', since combining
-`CHARACTER' and non-`CHARACTER' return types via `ENTRY' in a single
-function is not supported by `g77').
-
- For `CHARACTER' functions, the `__g77_result' argument is followed
-by yet another argument named `__g77_length' that, at run time,
-specifies the caller's expected length of the returned value. Note
-that only `CHARACTER*(*)' functions and entry points actually make use
-of this argument, even though it is always passed by all callers of
-public `CHARACTER' functions (since the caller does not generally know
-whether such a function is `CHARACTER*(*)' or whether there are any
-other callers that don't have that information).
-
- The rest of the argument list is the union of all the arguments
-specified for all the entry points (in their usual forms, e.g.
-`CHARACTER' arguments have extra length arguments, all appended at the
-end of this list). This is considered the "master list" of arguments.
-
- The code for this procedure has, before the code for the first
-executable statement, code much like that for the following Fortran
-statement:
-
- GOTO (100000,100001,100002), __g77_which_entrypoint
- 100000 ...code for primary entry point...
- 100001 ...code immediately following first ENTRY statement...
- 100002 ...code immediately following second ENTRY statement...
-
-(Note that invalid Fortran statement labels and variable names are used
-in the above example to highlight the fact that it represents code
-generated by the `g77' internals, not code to be written by the user.)
-
- It is this code that, when the procedure is called, picks which
-entry point to start executing.
-
- Getting back to the public procedures (`x' and `Y' in the original
-example), those procedures are fairly simple. Their interfaces are
-just like they would be if they were self-contained procedures (without
-`ENTRY'), of course, since that is what the callers expect. Their code
-consists of simply calling the private procedure, described above, with
-the appropriate extra arguments (the entry point index, and perhaps a
-pointer to a multiple-type- return variable, local to the public
-procedure, that contains all the supported returnable non-character
-types). For arguments that are not listed for a given entry point that
-are listed for other entry points, and therefore that are in the
-"master list" for the private procedure, null pointers (in C, the
-`NULL' macro) are passed. Also, for entry points that are part of a
-multiple-type- returning function, code is compiled after the call of
-the private procedure to extract from the multi-type union the
-appropriate result, depending on the type of the entry point in
-question, returning that result to the original caller.
-
- When debugging a procedure containing alternate entry points, you
-can either set a break point on the public procedure itself (e.g. a
-break point on `X' or `Y') or on the private procedure that contains
-most of the pertinent code (e.g. `__g77_masterfun_X'). If you do the
-former, you should use the debugger's command to "step into" the called
-procedure to get to the actual code; with the latter approach, the
-break point leaves you right at the actual code, skipping over the
-public entry point and its call to the private procedure (unless you
-have set a break point there as well, of course).
-
- Further, the list of dummy arguments that is visible when the
-private procedure is active is going to be the expanded version of the
-list for whichever particular entry point is active, as explained
-above, and the way in which return values are handled might well be
-different from how they would be handled for an equivalent single-entry
-function.
-
-
-File: g77.info, Node: Alternate Returns, Next: Assigned Statement Labels, Prev: Alternate Entry Points, Up: Debugging and Interfacing
-
-Alternate Returns (SUBROUTINE and RETURN)
-=========================================
-
- Subroutines with alternate returns (e.g. `SUBROUTINE X(*)' and `CALL
-X(*50)') are implemented by `g77' as functions returning the C `int'
-type. The actual alternate-return arguments are omitted from the
-calling sequence. Instead, the caller uses the return value to do a
-rough equivalent of the Fortran computed-`GOTO' statement, as in `GOTO
-(50), X()' in the example above (where `X' is quietly declared as an
-`INTEGER(KIND=1)' function), and the callee just returns whatever
-integer is specified in the `RETURN' statement for the subroutine For
-example, `RETURN 1' is implemented as `X = 1' followed by `RETURN' in
-C, and `RETURN' by itself is `X = 0' and `RETURN').
-
diff --git a/gcc/f/g77.info-15 b/gcc/f/g77.info-15
deleted file mode 100644
index ee5d1a40d21..00000000000
--- a/gcc/f/g77.info-15
+++ /dev/null
@@ -1,1175 +0,0 @@
-This is Info file g77.info, produced by Makeinfo version 1.68 from the
-input file g77.texi.
-
- This file explains how to use the GNU Fortran system.
-
- Published by the Free Software Foundation 59 Temple Place - Suite 330
-Boston, MA 02111-1307 USA
-
- Copyright (C) 1995-1997 Free Software Foundation, Inc.
-
- Permission is granted to make and distribute verbatim copies of this
-manual provided the copyright notice and this permission notice are
-preserved on all copies.
-
- Permission is granted to copy and distribute modified versions of
-this manual under the conditions for verbatim copying, provided also
-that the sections entitled "GNU General Public License," "Funding for
-Free Software," and "Protect Your Freedom--Fight `Look And Feel'" are
-included exactly as in the original, and provided that the entire
-resulting derived work is distributed under the terms of a permission
-notice identical to this one.
-
- Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that the sections entitled "GNU General Public
-License," "Funding for Free Software," and "Protect Your Freedom--Fight
-`Look And Feel'", and this permission notice, may be included in
-translations approved by the Free Software Foundation instead of in the
-original English.
-
- Contributed by James Craig Burley (<burley@gnu.ai.mit.edu>).
-Inspired by a first pass at translating `g77-0.5.16/f/DOC' that was
-contributed to Craig by David Ronis (<ronis@onsager.chem.mcgill.ca>).
-
-INFO-DIR-SECTION Fortran Programming
-START-INFO-DIR-ENTRY
-* g77: (g77). The GNU Fortran compilation system.
-END-INFO-DIR-ENTRY
-
-
-File: g77.info, Node: Assigned Statement Labels, Next: Run-time Library Errors, Prev: Alternate Returns, Up: Debugging and Interfacing
-
-Assigned Statement Labels (ASSIGN and GOTO)
-===========================================
-
- For portability to machines where a pointer (such as to a label,
-which is how `g77' implements `ASSIGN' and its relatives, the
-assigned-`GOTO' and assigned-`FORMAT'-I/O statements) is wider
-(bitwise) than an `INTEGER(KIND=1)', `g77' uses a different memory
-location to hold the `ASSIGN'ed value of a variable than it does the
-numerical value in that variable, unless the variable is wide enough
-(can hold enough bits).
-
- In particular, while `g77' implements
-
- I = 10
-
-as, in C notation, `i = 10;', it implements
-
- ASSIGN 10 TO I
-
-as, in GNU's extended C notation (for the label syntax),
-`__g77_ASSIGN_I = &&L10;' (where `L10' is just a massaging of the
-Fortran label `10' to make the syntax C-like; `g77' doesn't actually
-generate the name `L10' or any other name like that, since debuggers
-cannot access labels anyway).
-
- While this currently means that an `ASSIGN' statement does not
-overwrite the numeric contents of its target variable, *do not* write
-any code depending on this feature. `g77' has already changed this
-implementation across versions and might do so in the future. This
-information is provided only to make debugging Fortran programs
-compiled with the current version of `g77' somewhat easier. If there's
-no debugger-visible variable named `__g77_ASSIGN_I' in a program unit
-that does `ASSIGN 10 TO I', that probably means `g77' has decided it
-can store the pointer to the label directly into `I' itself.
-
- *Note Ugly Assigned Labels::, for information on a command-line
-option to force `g77' to use the same storage for both normal and
-assigned-label uses of a variable.
-
-
-File: g77.info, Node: Run-time Library Errors, Prev: Assigned Statement Labels, Up: Debugging and Interfacing
-
-Run-time Library Errors
-=======================
-
- The `libf2c' library currently has the following table to relate
-error code numbers, returned in `IOSTAT=' variables, to messages. This
-information should, in future versions of this document, be expanded
-upon to include detailed descriptions of each message.
-
- In line with good coding practices, any of the numbers in the list
-below should *not* be directly written into Fortran code you write.
-Instead, make a separate `INCLUDE' file that defines `PARAMETER' names
-for them, and use those in your code, so you can more easily change the
-actual numbers in the future.
-
- The information below is culled from the definition of `F_err' in
-`f/runtime/libI77/err.c' in the `g77' source tree.
-
- 100: "error in format"
- 101: "illegal unit number"
- 102: "formatted io not allowed"
- 103: "unformatted io not allowed"
- 104: "direct io not allowed"
- 105: "sequential io not allowed"
- 106: "can't backspace file"
- 107: "null file name"
- 108: "can't stat file"
- 109: "unit not connected"
- 110: "off end of record"
- 111: "truncation failed in endfile"
- 112: "incomprehensible list input"
- 113: "out of free space"
- 114: "unit not connected"
- 115: "read unexpected character"
- 116: "bad logical input field"
- 117: "bad variable type"
- 118: "bad namelist name"
- 119: "variable not in namelist"
- 120: "no end record"
- 121: "variable count incorrect"
- 122: "subscript for scalar variable"
- 123: "invalid array section"
- 124: "substring out of bounds"
- 125: "subscript out of bounds"
- 126: "can't read file"
- 127: "can't write file"
- 128: "'new' file exists"
- 129: "can't append to file"
- 130: "non-positive record number"
- 131: "I/O started while already doing I/O"
-
-
-File: g77.info, Node: Collected Fortran Wisdom, Next: Trouble, Prev: Debugging and Interfacing, Up: Top
-
-Collected Fortran Wisdom
-************************
-
- Most users of `g77' can be divided into two camps:
-
- * Those writing new Fortran code to be compiled by `g77'.
-
- * Those using `g77' to compile existing, "legacy" code.
-
- Users writing new code generally understand most of the necessary
-aspects of Fortran to write "mainstream" code, but often need help
-deciding how to handle problems, such as the construction of libraries
-containing `BLOCK DATA'.
-
- Users dealing with "legacy" code sometimes don't have much
-experience with Fortran, but believe that the code they're compiling
-already works when compiled by other compilers (and might not
-understand why, as is sometimes the case, it doesn't work when compiled
-by `g77').
-
- The following information is designed to help users do a better job
-coping with existing, "legacy" Fortran code, and with writing new code
-as well.
-
-* Menu:
-
-* Advantages Over f2c:: If `f2c' is so great, why `g77'?
-* Block Data and Libraries:: How `g77' solves a common problem.
-* Loops:: Fortran `DO' loops surprise many people.
-* Working Programs:: Getting programs to work should be done first.
-* Overly Convenient Options:: Temptations to avoid, habits to not form.
-* Faster Programs:: Everybody wants these, but at what cost?
-
-
-File: g77.info, Node: Advantages Over f2c, Next: Block Data and Libraries, Up: Collected Fortran Wisdom
-
-Advantages Over f2c
-===================
-
- Without `f2c', `g77' would have taken much longer to do and probably
-not been as good for quite a while. Sometimes people who notice how
-much `g77' depends on, and documents encouragement to use, `f2c' ask
-why `g77' was created if `f2c' already existed.
-
- This section gives some basic answers to these questions, though it
-is not intended to be comprehensive.
-
-* Menu:
-
-* Language Extensions:: Features used by Fortran code.
-* Compiler Options:: Features helpful during development.
-* Compiler Speed:: Speed of the compilation process.
-* Program Speed:: Speed of the generated, optimized code.
-* Ease of Debugging:: Debugging ease-of-use at the source level.
-* Character and Hollerith Constants:: A byte saved is a byte earned.
-
-
-File: g77.info, Node: Language Extensions, Next: Compiler Options, Up: Advantages Over f2c
-
-Language Extensions
--------------------
-
- `g77' offers several extensions to the Fortran language that `f2c'
-doesn't.
-
- However, `f2c' offers a few that `g77' doesn't, like fairly complete
-support for `INTEGER*2'. It is expected that `g77' will offer some or
-all of these missing features at some time in the future. (Version
-0.5.18 of `g77' offers some rudimentary support for some of these
-features.)
-
-
-File: g77.info, Node: Compiler Options, Next: Compiler Speed, Prev: Language Extensions, Up: Advantages Over f2c
-
-Compiler Options
-----------------
-
- `g77' offers a whole bunch of compiler options that `f2c' doesn't.
-
- However, `f2c' offers a few that `g77' doesn't, like an option to
-generate code to check array subscripts at run time. It is expected
-that `g77' will offer some or all of these missing options at some time
-in the future.
-
-
-File: g77.info, Node: Compiler Speed, Next: Program Speed, Prev: Compiler Options, Up: Advantages Over f2c
-
-Compiler Speed
---------------
-
- Saving the steps of writing and then rereading C code is a big reason
-why `g77' should be able to compile code much faster than using `f2c'
-in conjunction with the equivalent invocation of `gcc'.
-
- However, due to `g77''s youth, lots of self-checking is still being
-performed. As a result, this improvement is as yet unrealized (though
-the potential seems to be there for quite a big speedup in the future).
-It is possible that, as of version 0.5.18, `g77' is noticeably faster
-compiling many Fortran source files than using `f2c' in conjunction
-with `gcc'.
-
-
-File: g77.info, Node: Program Speed, Next: Ease of Debugging, Prev: Compiler Speed, Up: Advantages Over f2c
-
-Program Speed
--------------
-
- `g77' has the potential to better optimize code than `f2c', even
-when `gcc' is used to compile the output of `f2c', because `f2c' must
-necessarily translate Fortran into a somewhat lower-level language (C)
-that cannot preserve all the information that is potentially useful for
-optimization, while `g77' can gather, preserve, and transmit that
-information directly to the GBE.
-
- For example, `g77' implements `ASSIGN' and assigned `GOTO' using
-direct assignment of pointers to labels and direct jumps to labels,
-whereas `f2c' maps the assigned labels to integer values and then uses
-a C `switch' statement to encode the assigned `GOTO' statements.
-
- However, as is typical, theory and reality don't quite match, at
-least not in all cases, so it is still the case that `f2c' plus `gcc'
-can generate code that is faster than `g77'.
-
- Version 0.5.18 of `g77' offered default settings and options, via
-patches to the `gcc' back end, that allow for better program speed,
-though some of these improvements also affected the performance of
-programs translated by `f2c' and then compiled by `g77''s version of
-`gcc'.
-
- Version 0.5.20 of `g77' offers further performance improvements, at
-least one of which (alias analysis) is not generally applicable to
-`f2c' (though `f2c' could presumably be changed to also take advantage
-of this new capability of the `gcc' back end, assuming this is made
-available in an upcoming release of `gcc').
-
-
-File: g77.info, Node: Ease of Debugging, Next: Character and Hollerith Constants, Prev: Program Speed, Up: Advantages Over f2c
-
-Ease of Debugging
------------------
-
- Because `g77' compiles directly to assembler code like `gcc',
-instead of translating to an intermediate language (C) as does `f2c',
-support for debugging can be better for `g77' than `f2c'.
-
- However, although `g77' might be somewhat more "native" in terms of
-debugging support than `f2c' plus `gcc', there still are a lot of
-things "not quite right". Many of the important ones should be
-resolved in the near future.
-
- For example, `g77' doesn't have to worry about reserved names like
-`f2c' does. Given `FOR = WHILE', `f2c' must necessarily translate this
-to something *other* than `for = while;', because C reserves those
-words.
-
- However, `g77' does still uses things like an extra level of
-indirection for `ENTRY'-laden procedures--in this case, because the
-back end doesn't yet support multiple entry points.
-
- Another example is that, given
-
- COMMON A, B
- EQUIVALENCE (B, C)
-
-the `g77' user should be able to access the variables directly, by name,
-without having to traverse C-like structures and unions, while `f2c' is
-unlikely to ever offer this ability (due to limitations in the C
-language).
-
- However, due to apparent bugs in the back end, `g77' currently
-doesn't take advantage of this facility at all--it doesn't emit any
-debugging information for `COMMON' and `EQUIVALENCE' areas, other than
-information on the array of `char' it creates (and, in the case of
-local `EQUIVALENCE', names) for each such area.
-
- Yet another example is arrays. `g77' represents them to the debugger
-using the same "dimensionality" as in the source code, while `f2c' must
-necessarily convert them all to one-dimensional arrays to fit into the
-confines of the C language. However, the level of support offered by
-debuggers for interactive Fortran-style access to arrays as compiled by
-`g77' can vary widely. In some cases, it can actually be an advantage
-that `f2c' converts everything to widely supported C semantics.
-
- In fairness, `g77' could do many of the things `f2c' does to get
-things working at least as well as `f2c'--for now, the developers
-prefer making `g77' work the way they think it is supposed to, and
-finding help improving the other products (the back end of `gcc';
-`gdb'; and so on) to get things working properly.
-
-
-File: g77.info, Node: Character and Hollerith Constants, Prev: Ease of Debugging, Up: Advantages Over f2c
-
-Character and Hollerith Constants
----------------------------------
-
- To avoid the extensive hassle that would be needed to avoid this,
-`f2c' uses C character constants to encode character and Hollerith
-constants. That means a constant like `'HELLO'' is translated to
-`"hello"' in C, which further means that an extra null byte is present
-at the end of the constant. This null byte is superfluous.
-
- `g77' does not generate such null bytes. This represents significant
-savings of resources, such as on systems where `/dev/null' or
-`/dev/zero' represent bottlenecks in the systems' performance, because
-`g77' simply asks for fewer zeros from the operating system than `f2c'.
-
-
-File: g77.info, Node: Block Data and Libraries, Next: Loops, Prev: Advantages Over f2c, Up: Collected Fortran Wisdom
-
-Block Data and Libraries
-========================
-
- To ensure that block data program units are linked, especially a
-concern when they are put into libraries, give each one a name (as in
-`BLOCK DATA FOO') and make sure there is an `EXTERNAL FOO' statement in
-every program unit that uses any common block initialized by the
-corresponding `BLOCK DATA'. `g77' currently compiles a `BLOCK DATA' as
-if it were a `SUBROUTINE', that is, it generates an actual procedure
-having the appropriate name. The procedure does nothing but return
-immediately if it happens to be called. For `EXTERNAL FOO', where
-`FOO' is not otherwise referenced in the same program unit, `g77'
-assumes there exists a `BLOCK DATA FOO' in the program and ensures that
-by generating a reference to it so the linker will make sure it is
-present. (Specifically, `g77' outputs in the data section a static
-pointer to the external name `FOO'.)
-
- The implementation `g77' currently uses to make this work is one of
-the few things not compatible with `f2c' as currently shipped. `f2c'
-currently does nothing with `EXTERNAL FOO' except issue a warning that
-`FOO' is not otherwise referenced, and for `BLOCK DATA FOO', f2c
-doesn't generate a dummy procedure with the name `FOO'. The upshot is
-that you shouldn't mix `f2c' and `g77' in this particular case. If you
-use f2c to compile `BLOCK DATA FOO', then any `g77'-compiled program
-unit that says `EXTERNAL FOO' will result in an unresolved reference
-when linked. If you do the opposite, then `FOO' might not be linked in
-under various circumstances (such as when `FOO' is in a library, or
-you're using a "clever" linker--so clever, it produces a broken program
-with little or no warning by omitting initializations of global data
-because they are contained in unreferenced procedures).
-
- The changes you make to your code to make `g77' handle this
-situation, however, appear to be a widely portable way to handle it.
-That is, many systems permit it (as they should, since the FORTRAN 77
-standard permits `EXTERNAL FOO' when `FOO' is a block data program
-unit), and of the ones that might not link `BLOCK DATA FOO' under some
-circumstances, most of them appear to do so once `EXTERNAL FOO' is
-present in the appropriate program units.
-
- Here is the recommended approach to modifying a program containing a
-program unit such as the following:
-
- BLOCK DATA FOO
- COMMON /VARS/ X, Y, Z
- DATA X, Y, Z / 3., 4., 5. /
- END
-
-If the above program unit might be placed in a library module, then
-ensure that every program unit in every program that references that
-particular `COMMON' area uses the `EXTERNAL' statement to force the
-area to be initialized.
-
- For example, change a program unit that starts with
-
- INTEGER FUNCTION CURX()
- COMMON /VARS/ X, Y, Z
- CURX = X
- END
-
-so that it uses the `EXTERNAL' statement, as in:
-
- INTEGER FUNCTION CURX()
- COMMON /VARS/ X, Y, Z
- EXTERNAL FOO
- CURX = X
- END
-
-That way, `CURX' is compiled by `g77' (and many other compilers) so
-that the linker knows it must include `FOO', the `BLOCK DATA' program
-unit that sets the initial values for the variables in `VAR', in the
-executable program.
-
-
-File: g77.info, Node: Loops, Next: Working Programs, Prev: Block Data and Libraries, Up: Collected Fortran Wisdom
-
-Loops
-=====
-
- The meaning of a `DO' loop in Fortran is precisely specified in the
-Fortran standard...and is quite different from what many programmers
-might expect.
-
- In particular, Fortran `DO' loops are implemented as if the number
-of trips through the loop is calculated *before* the loop is entered.
-
- The number of trips for a loop is calculated from the START, END,
-and INCREMENT values specified in a statement such as:
-
- DO ITER = START, END, INCREMENT
-
-The trip count is evaluated using a fairly simple formula based on the
-three values following the `=' in the statement, and it is that trip
-count that is effectively decremented during each iteration of the loop.
-If, at the beginning of an iteration of the loop, the trip count is
-zero or negative, the loop terminates. The per-loop-iteration
-modifications to ITER are not related to determining whether to
-terminate the loop.
-
- There are two important things to remember about the trip count:
-
- * It can be *negative*, in which case it is treated as if it was
- zero--meaning the loop is not executed at all.
-
- * The type used to *calculate* the trip count is the same type as
- ITER, but the final calculation, and thus the type of the trip
- count itself, always is `INTEGER(KIND=1)'.
-
- These two items mean that there are loops that cannot be written in
-straightforward fashion using the Fortran `DO'.
-
- For example, on a system with the canonical 32-bit two's-complement
-implementation of `INTEGER(KIND=1)', the following loop will not work:
-
- DO I = -2000000000, 2000000000
-
-Although the START and END values are well within the range of
-`INTEGER(KIND=1)', the *trip count* is not. The expected trip count is
-40000000001, which is outside the range of `INTEGER(KIND=1)' on many
-systems.
-
- Instead, the above loop should be constructed this way:
-
- I = -2000000000
- DO
- IF (I .GT. 2000000000) EXIT
- ...
- I = I + 1
- END DO
-
-The simple `DO' construct and the `EXIT' statement (used to leave the
-innermost loop) are F90 features that `g77' supports.
-
- Some Fortran compilers have buggy implementations of `DO', in that
-they don't follow the standard. They implement `DO' as a
-straightforward translation to what, in C, would be a `for' statement.
-Instead of creating a temporary variable to hold the trip count as
-calculated at run time, these compilers use the iteration variable ITER
-to control whether the loop continues at each iteration.
-
- The bug in such an implementation shows up when the trip count is
-within the range of the type of ITER, but the magnitude of `ABS(END) +
-ABS(INCR)' exceeds that range. For example:
-
- DO I = 2147483600, 2147483647
-
-A loop started by the above statement will work as implemented by
-`g77', but the use, by some compilers, of a more C-like implementation
-akin to
-
- for (i = 2147483600; i <= 2147483647; ++i)
-
-produces a loop that does not terminate, because `i' can never be
-greater than 2147483647, since incrementing it beyond that value
-overflows `i', setting it to -2147483648. This is a large, negative
-number that still is less than 2147483647.
-
- Another example of unexpected behavior of `DO' involves using a
-nonintegral iteration variable ITER, that is, a `REAL' variable.
-Consider the following program:
-
- DATA BEGIN, END, STEP /.1, .31, .007/
- DO 10 R = BEGIN, END, STEP
- IF (R .GT. END) PRINT *, R, ' .GT. ', END, '!!'
- PRINT *,R
- 10 CONTINUE
- PRINT *,'LAST = ',R
- IF (R .LE. END) PRINT *, R, ' .LE. ', END, '!!'
- END
-
-A C-like view of `DO' would hold that the two "exclamatory" `PRINT'
-statements are never executed. However, this is the output of running
-the above program as compiled by `g77' on a GNU/Linux ix86 system:
-
- .100000001
- .107000001
- .114
- .120999999
- ...
- .289000005
- .296000004
- .303000003
- LAST = .310000002
- .310000002 .LE. .310000002!!
-
- Note that one of the two checks in the program turned up an apparent
-violation of the programmer's expectation--yet, the loop is correctly
-implemented by `g77', in that it has 30 iterations. This trip count of
-30 is correct when evaluated using the floating-point representations
-for the BEGIN, END, and INCR values (.1, .31, .007) on GNU/Linux ix86
-are used. On other systems, an apparently more accurate trip count of
-31 might result, but, nevertheless, `g77' is faithfully following the
-Fortran standard, and the result is not what the author of the sample
-program above apparently expected. (Such other systems might, for
-different values in the `DATA' statement, violate the other
-programmer's expectation, for example.)
-
- Due to this combination of imprecise representation of
-floating-point values and the often-misunderstood interpretation of
-`DO' by standard-conforming compilers such as `g77', use of `DO' loops
-with `REAL' iteration variables is not recommended. Such use can be
-caught by specifying `-Wsurprising'. *Note Warning Options::, for more
-information on this option.
-
-
-File: g77.info, Node: Working Programs, Next: Overly Convenient Options, Prev: Loops, Up: Collected Fortran Wisdom
-
-Working Programs
-================
-
- Getting Fortran programs to work in the first place can be quite a
-challenge--even when the programs already work on other systems, or
-when using other compilers.
-
- `g77' offers some facilities that might be useful for tracking down
-bugs in such programs.
-
-* Menu:
-
-* Not My Type::
-* Variables Assumed To Be Zero::
-* Variables Assumed To Be Saved::
-* Unwanted Variables::
-* Unused Arguments::
-* Surprising Interpretations of Code::
-* Aliasing Assumed To Work::
-* Output Assumed To Flush::
-* Large File Unit Numbers::
-
-
-File: g77.info, Node: Not My Type, Next: Variables Assumed To Be Zero, Up: Working Programs
-
-Not My Type
------------
-
- A fruitful source of bugs in Fortran source code is use, or mis-use,
-of Fortran's implicit-typing feature, whereby the type of a variable,
-array, or function is determined by the first character of its name.
-
- Simple cases of this include statements like `LOGX=9.227', without a
-statement such as `REAL LOGX'. In this case, `LOGX' is implicitly
-given `INTEGER(KIND=1)' type, with the result of the assignment being
-that it is given the value `9'.
-
- More involved cases include a function that is defined starting with
-a statement like `DOUBLE PRECISION FUNCTION IPS(...)'. Any caller of
-this function that does not also declare `IPS' as type `DOUBLE
-PRECISION' (or, in GNU Fortran, `REAL(KIND=2)') is likely to assume it
-returns `INTEGER', or some other type, leading to invalid results or
-even program crashes.
-
- The `-Wimplicit' option might catch failures to properly specify the
-types of variables, arrays, and functions in the code.
-
- However, in code that makes heavy use of Fortran's implicit-typing
-facility, this option might produce so many warnings about cases that
-are working, it would be hard to find the one or two that represent
-bugs. This is why so many experienced Fortran programmers strongly
-recommend widespread use of the `IMPLICIT NONE' statement, despite it
-not being standard FORTRAN 77, to completely turn off implicit typing.
-(`g77' supports `IMPLICIT NONE', as do almost all FORTRAN 77 compilers.)
-
- Note that `-Wimplicit' catches only implicit typing of *names*. It
-does not catch implicit typing of expressions such as `X**(2/3)'. Such
-expressions can be buggy as well--in fact, `X**(2/3)' is equivalent to
-`X**0', due to the way Fortran expressions are given types and then
-evaluated. (In this particular case, the programmer probably wanted
-`X**(2./3.)'.)
-
-
-File: g77.info, Node: Variables Assumed To Be Zero, Next: Variables Assumed To Be Saved, Prev: Not My Type, Up: Working Programs
-
-Variables Assumed To Be Zero
-----------------------------
-
- Many Fortran programs were developed on systems that provided
-automatic initialization of all, or some, variables and arrays to zero.
-As a result, many of these programs depend, sometimes inadvertently, on
-this behavior, though to do so violates the Fortran standards.
-
- You can ask `g77' for this behavior by specifying the
-`-finit-local-zero' option when compiling Fortran code. (You might
-want to specify `-fno-automatic' as well, to avoid code-size inflation
-for non-optimized compilations.)
-
- Note that a program that works better when compiled with the
-`-finit-local-zero' option is almost certainly depending on a
-particular system's, or compiler's, tendency to initialize some
-variables to zero. It might be worthwhile finding such cases and
-fixing them, using techniques such as compiling with the `-O
--Wuninitialized' options using `g77'.
-
-
-File: g77.info, Node: Variables Assumed To Be Saved, Next: Unwanted Variables, Prev: Variables Assumed To Be Zero, Up: Working Programs
-
-Variables Assumed To Be Saved
------------------------------
-
- Many Fortran programs were developed on systems that saved the
-values of all, or some, variables and arrays across procedure calls.
-As a result, many of these programs depend, sometimes inadvertently, on
-being able to assign a value to a variable, perform a `RETURN' to a
-calling procedure, and, upon subsequent invocation, reference the
-previously assigned variable to obtain the value.
-
- They expect this despite not using the `SAVE' statement to specify
-that the value in a variable is expected to survive procedure returns
-and calls. Depending on variables and arrays to retain values across
-procedure calls without using `SAVE' to require it violates the Fortran
-standards.
-
- You can ask `g77' to assume `SAVE' is specified for all relevant
-(local) variables and arrays by using the `-fno-automatic' option.
-
- Note that a program that works better when compiled with the
-`-fno-automatic' option is almost certainly depending on not having to
-use the `SAVE' statement as required by the Fortran standard. It might
-be worthwhile finding such cases and fixing them, using techniques such
-as compiling with the `-O -Wuninitialized' options using `g77'.
-
-
-File: g77.info, Node: Unwanted Variables, Next: Unused Arguments, Prev: Variables Assumed To Be Saved, Up: Working Programs
-
-Unwanted Variables
-------------------
-
- The `-Wunused' option can find bugs involving implicit typing,
-sometimes more easily than using `-Wimplicit' in code that makes heavy
-use of implicit typing. An unused variable or array might indicate
-that the spelling for its declaration is different from that of its
-intended uses.
-
- Other than cases involving typos, unused variables rarely indicate
-actual bugs in a program. However, investigating such cases thoroughly
-has, on occasion, led to the discovery of code that had not been
-completely written--where the programmer wrote declarations as needed
-for the whole algorithm, wrote some or even most of the code for that
-algorithm, then got distracted and forgot that the job was not complete.
-
-
-File: g77.info, Node: Unused Arguments, Next: Surprising Interpretations of Code, Prev: Unwanted Variables, Up: Working Programs
-
-Unused Arguments
-----------------
-
- As with unused variables, It is possible that unused arguments to a
-procedure might indicate a bug. Compile with `-W -Wunused' option to
-catch cases of unused arguments.
-
- Note that `-W' also enables warnings regarding overflow of
-floating-point constants under certain circumstances.
-
-
-File: g77.info, Node: Surprising Interpretations of Code, Next: Aliasing Assumed To Work, Prev: Unused Arguments, Up: Working Programs
-
-Surprising Interpretations of Code
-----------------------------------
-
- The `-Wsuprising' option can help find bugs involving expression
-evaluation or in the way `DO' loops with non-integral iteration
-variables are handled. Cases found by this option might indicate a
-difference of interpretation between the author of the code involved,
-and a standard-conforming compiler such as `g77'. Such a difference
-might produce actual bugs.
-
- In any case, changing the code to explicitly do what the programmer
-might have expected it to do, so `g77' and other compilers are more
-likely to follow the programmer's expectations, might be worthwhile,
-especially if such changes make the program work better.
-
-
-File: g77.info, Node: Aliasing Assumed To Work, Next: Output Assumed To Flush, Prev: Surprising Interpretations of Code, Up: Working Programs
-
-Aliasing Assumed To Work
-------------------------
-
- The `-falias-check', `-fargument-alias', `-fargument-noalias', and
-`-fno-argument-noalias-global' options, introduced in version 0.5.20 and
-`g77''s version 2.7.2.2.f.2 of `gcc', control the assumptions regarding
-aliasing (overlapping) of writes and reads to main memory (core) made
-by the `gcc' back end.
-
- They are effective only when compiling with `-O' (specifying any
-level other than `-O0') or with `-falias-check'.
-
- The default for Fortran code is `-fargument-noalias-global'. (The
-default for C code and code written in other C-based languages is
-`-fargument-alias'. These defaults apply regardless of whether you use
-`g77' or `gcc' to compile your code.)
-
- Note that, on some systems, compiling with `-fforce-addr' in effect
-can produce more optimal code when the default aliasing options are in
-effect (and when optimization is enabled).
-
- If your program is not working when compiled with optimization, it
-is possible it is violating the Fortran standards (77 and 90) by
-relying on the ability to "safely" modify variables and arrays that are
-aliased, via procedure calls, to other variables and arrays, without
-using `EQUIVALENCE' to explicitly set up this kind of aliasing.
-
- (The FORTRAN 77 standard's prohibition of this sort of overlap,
-generally referred to therein as "storage assocation", appears in
-Sections 15.9.3.6. This prohibition allows implementations, such as
-`g77', to, for example, implement the passing of procedures and even
-values in `COMMON' via copy operations into local, perhaps more
-efficiently accessed temporaries at entry to a procedure, and, where
-appropriate, via copy operations back out to their original locations
-in memory at exit from that procedure, without having to take into
-consideration the order in which the local copies are updated by the
-code, among other things.)
-
- To test this hypothesis, try compiling your program with the
-`-fargument-alias' option, which causes the compiler to revert to
-assumptions essentially the same as made by versions of `g77' prior to
-0.5.20.
-
- If the program works using this option, that strongly suggests that
-the bug is in your program. Finding and fixing the bug(s) should
-result in a program that is more standard-conforming and that can be
-compiled by `g77' in a way that results in a faster executable.
-
- (You might want to try compiling with `-fargument-noalias', a kind
-of half-way point, to see if the problem is limited to aliasing between
-dummy arguments and `COMMON' variables--this option assumes that such
-aliasing is not done, while still allowing aliasing among dummy
-arguments.)
-
- An example of aliasing that is invalid according to the standards is
-shown in the following program, which might *not* produce the expected
-results when executed:
-
- I = 1
- CALL FOO(I, I)
- PRINT *, I
- END
-
- SUBROUTINE FOO(J, K)
- J = J + K
- K = J * K
- PRINT *, J, K
- END
-
- The above program attempts to use the temporary aliasing of the `J'
-and `K' arguments in `FOO' to effect a pathological behavior--the
-simultaneous changing of the values of *both* `J' and `K' when either
-one of them is written.
-
- The programmer likely expects the program to print these values:
-
- 2 4
- 4
-
- However, since the program is not standard-conforming, an
-implementation's behavior when running it is undefined, because
-subroutine `FOO' modifies at least one of the arguments, and they are
-aliased with each other. (Even if one of the assignment statements was
-deleted, the program would still violate these rules. This kind of
-on-the-fly aliasing is permitted by the standard only when none of the
-aliased items are defined, or written, while the aliasing is in effect.)
-
- As a practical example, an optimizing compiler might schedule the `J
-=' part of the second line of `FOO' *after* the reading of `J' and `K'
-for the `J * K' expression, resulting in the following output:
-
- 2 2
- 2
-
- Essentially, compilers are promised (by the standard and, therefore,
-by programmers who write code they claim to be standard-conforming)
-that if they cannot detect aliasing via static analysis of a single
-program unit's `EQUIVALENCE' and `COMMON' statements, no such aliasing
-exists. In such cases, compilers are free to assume that an assignment
-to one variable will not change the value of another variable, allowing
-it to avoid generating code to re-read the value of the other variable,
-to re-schedule reads and writes, and so on, to produce a faster
-executable.
-
- The same promise holds true for arrays (as seen by the called
-procedure)--an element of one dummy array cannot be aliased with, or
-overlap, any element of another dummy array or be in a `COMMON' area
-known to the procedure.
-
- (These restrictions apply only when the procedure defines, or writes
-to, one of the aliased variables or arrays.)
-
- Unfortunately, there is no way to find *all* possible cases of
-violations of the prohibitions against aliasing in Fortran code.
-Static analysis is certainly imperfect, as is run-time analysis, since
-neither can catch all violations. (Static analysis can catch all
-likely violations, and some that might never actually happen, while
-run-time analysis can catch only those violations that actually happen
-during a particular run. Neither approach can cope with programs
-mixing Fortran code with routines written in other languages, however.)
-
- Currently, `g77' provides neither static nor run-time facilities to
-detect any cases of this problem, although other products might.
-Run-time facilities are more likely to be offered by future versions of
-`g77', though patches improving `g77' so that it provides either form
-of detection are welcome.
-
-
-File: g77.info, Node: Output Assumed To Flush, Next: Large File Unit Numbers, Prev: Aliasing Assumed To Work, Up: Working Programs
-
-Output Assumed To Flush
------------------------
-
- For several versions prior to 0.5.20, `g77' configured its version
-of the `libf2c' run-time library so that one of its configuration
-macros, `ALWAYS_FLUSH', was defined.
-
- This was done as a result of a belief that many programs expected
-output to be flushed to the operating system (under UNIX, via the
-`fflush()' library call) with the result that errors, such as disk
-full, would be immediately flagged via the relevant `ERR=' and
-`IOSTAT=' mechanism.
-
- Because of the adverse effects this approach had on the performance
-of many programs, `g77' no longer configures `libf2c' to always flush
-output.
-
- If your program depends on this behavior, either insert the
-appropriate `CALL FLUSH' statements, or modify the sources to the
-`libf2c', rebuild and reinstall `g77', and relink your programs with
-the modified library.
-
- (Ideally, `libf2c' would offer the choice at run-time, so that a
-compile-time option to `g77' or `f2c' could result in generating the
-appropriate calls to flushing or non-flushing library routines.)
-
- *Note Always Flush Output::, for information on how to modify the
-`g77' source tree so that a version of `libf2c' can be built and
-installed with the `ALWAYS_FLUSH' macro defined.
-
-
-File: g77.info, Node: Large File Unit Numbers, Prev: Output Assumed To Flush, Up: Working Programs
-
-Large File Unit Numbers
------------------------
-
- If your program crashes at run time with a message including the
-text `illegal unit number', that probably is a message from the
-run-time library, `libf2c', used, and distributed with, `g77'.
-
- The message means that your program has attempted to use a file unit
-number that is out of the range accepted by `libf2c'. Normally, this
-range is 0 through 99, and the high end of the range is controlled by a
-`libf2c' source-file macro named `MXUNIT'.
-
- If you can easily change your program to use unit numbers in the
-range 0 through 99, you should do so.
-
- Otherwise, see *Note Larger File Unit Numbers::, for information on
-how to change `MXUNIT' in `libf2c' so you can build and install a new
-version of `libf2c' that supports the larger unit numbers you need.
-
- *Note:* While `libf2c' places a limit on the range of Fortran
-file-unit numbers, the underlying library and operating system might
-impose different kinds of limits. For example, some systems limit the
-number of files simultaneously open by a running program. Information
-on how to increase these limits should be found in your system's
-documentation.
-
-
-File: g77.info, Node: Overly Convenient Options, Next: Faster Programs, Prev: Working Programs, Up: Collected Fortran Wisdom
-
-Overly Convenient Command-line Options
-======================================
-
- These options should be used only as a quick-and-dirty way to
-determine how well your program will run under different compilation
-models without having to change the source. Some are more problematic
-than others, depending on how portable and maintainable you want the
-program to be (and, of course, whether you are allowed to change it at
-all is crucial).
-
- You should not continue to use these command-line options to compile
-a given program, but rather should make changes to the source code:
-
-`-finit-local-zero'
- (This option specifies that any uninitialized local variables and
- arrays have default initialization to binary zeros.)
-
- Many other compilers do this automatically, which means lots of
- Fortran code developed with those compilers depends on it.
-
- It is safer (and probably would produce a faster program) to find
- the variables and arrays that need such initialization and provide
- it explicitly via `DATA', so that `-finit-local-zero' is not
- needed.
-
- Consider using `-Wuninitialized' (which requires `-O') to find
- likely candidates, but do not specify `-finit-local-zero' or
- `-fno-automatic', or this technique won't work.
-
-`-fno-automatic'
- (This option specifies that all local variables and arrays are to
- be treated as if they were named in `SAVE' statements.)
-
- Many other compilers do this automatically, which means lots of
- Fortran code developed with those compilers depends on it.
-
- The effect of this is that all non-automatic variables and arrays
- are made static, that is, not placed on the stack or in heap
- storage. This might cause a buggy program to appear to work
- better. If so, rather than relying on this command-line option
- (and hoping all compilers provide the equivalent one), add `SAVE'
- statements to some or all program unit sources, as appropriate.
- Consider using `-Wuninitialized' (which requires `-O') to find
- likely candidates, but do not specify `-finit-local-zero' or
- `-fno-automatic', or this technique won't work.
-
- The default is `-fautomatic', which tells `g77' to try and put
- variables and arrays on the stack (or in fast registers) where
- possible and reasonable. This tends to make programs faster.
-
- *Note:* Automatic variables and arrays are not affected by this
- option. These are variables and arrays that are *necessarily*
- automatic, either due to explicit statements, or due to the way
- they are declared. Examples include local variables and arrays
- not given the `SAVE' attribute in procedures declared `RECURSIVE',
- and local arrays declared with non-constant bounds (automatic
- arrays). Currently, `g77' supports only automatic arrays, not
- `RECURSIVE' procedures or other means of explicitly specifying
- that variables or arrays are automatic.
-
-`-fugly'
- Fix the source code so that `-fno-ugly' will work. Note that, for
- many programs, it is difficult to practically avoid using the
- features enabled via `-fugly-init', and these features pose the
- lowest risk of writing nonportable code, among the various "ugly"
- features.
-
-`-fGROUP-intrinsics-hide'
- Change the source code to use `EXTERNAL' for any external procedure
- that might be the name of an intrinsic. It is easy to find these
- using `-fGROUP-intrinsics-disable'.
-
-
-File: g77.info, Node: Faster Programs, Prev: Overly Convenient Options, Up: Collected Fortran Wisdom
-
-Faster Programs
-===============
-
- Aside from the usual `gcc' options, such as `-O', `-ffast-math', and
-so on, consider trying some of the following approaches to speed up
-your program (once you get it working).
-
-* Menu:
-
-* Aligned Data::
-* Prefer Automatic Uninitialized Variables::
-* Avoid f2c Compatibility::
-* Use Submodel Options::
-
-
-File: g77.info, Node: Aligned Data, Next: Prefer Automatic Uninitialized Variables, Up: Faster Programs
-
-Aligned Data
-------------
-
- On some systems, such as those with Pentium Pro CPUs, programs that
-make heavy use of `REAL(KIND=2)' (`DOUBLE PRECISION') might run much
-slower than possible due to the compiler not aligning these 64-bit
-values to 64-bit boundaries in memory. (The effect also is present,
-though to a lesser extent, on the 586 (Pentium) architecture.)
-
- The Intel x86 architecture generally ensures that these programs will
-work on all its implementations, but particular implementations (such
-as Pentium Pro) perform better with more strict alignment. (Such
-behavior isn't unique to the Intel x86 architecture.) Other
-architectures might *demand* 64-bit alignment of 64-bit data.
-
- There are a variety of approaches to use to address this problem:
-
- * Order your `COMMON' and `EQUIVALENCE' areas such that the
- variables and arrays with the widest alignment guidelines come
- first.
-
- For example, on most systems, this would mean placing
- `COMPLEX(KIND=2)', `REAL(KIND=2)', and `INTEGER(KIND=2)' entities
- first, followed by `REAL(KIND=1)', `INTEGER(KIND=1)', and
- `LOGICAL(KIND=1)' entities, then `INTEGER(KIND=6)' entities, and
- finally `CHARACTER' and `INTEGER(KIND=3)' entities.
-
- The reason to use such placement is it makes it more likely that
- your data will be aligned properly, without requiring you to do
- detailed analysis of each aggregate (`COMMON' and `EQUIVALENCE')
- area.
-
- Specifically, on systems where the above guidelines are
- appropriate, placing `CHARACTER' entities before `REAL(KIND=2)'
- entities can work just as well, but only if the number of bytes
- occupied by the `CHARACTER' entities is divisible by the
- recommended alignment for `REAL(KIND=2)'.
-
- By ordering the placement of entities in aggregate areas according
- to the simple guidelines above, you avoid having to carefully
- count the number of bytes occupied by each entity to determine
- whether the actual alignment of each subsequent entity meets the
- alignment guidelines for the type of that entity.
-
- If you don't ensure correct alignment of `COMMON' elements, the
- compiler may be forced by some systems to violate the Fortran
- semantics by adding padding to get `DOUBLE PRECISION' data
- properly aligned. If the unfortunate practice is employed of
- overlaying different types of data in the `COMMON' block, the
- different variants of this block may become misaligned with
- respect to each other. Even if your platform doesn't require
- strict alignment, `COMMON' should be laid out as above for
- portability. (Unfortunately the FORTRAN 77 standard didn't
- anticipate this possible requirement, which is
- compiler-independent on a given platform.)
-
- * Use the (x86-specific) `-malign-double' option when compiling
- programs for the Pentium and Pentium Pro architectures (called 586
- and 686 in the `gcc' configuration subsystem). The warning about
- this in the `gcc' manual isn't generally relevant to Fortran, but
- using it will force `COMMON' to be padded if necessary to align
- `DOUBLE PRECISION' data.
-
- * Ensure that `crt0.o' or `crt1.o' on your system guarantees a 64-bit
- aligned stack for `main()'. The recent one from GNU (`glibc2')
- will do this on x86 systems, but we don't know of any other x86
- setups where it will be right. Read your system's documentation
- to determine if it is appropriate to upgrade to a more recent
- version to obtain the optimal alignment.
-
- Progress is being made on making this work "out of the box" on
-future versions of `g77', `gcc', and some of the relevant operating
-systems (such as GNU/Linux).
-
-
-File: g77.info, Node: Prefer Automatic Uninitialized Variables, Next: Avoid f2c Compatibility, Prev: Aligned Data, Up: Faster Programs
-
-Prefer Automatic Uninitialized Variables
-----------------------------------------
-
- If you're using `-fno-automatic' already, you probably should change
-your code to allow compilation with `-fautomatic' (the default), to
-allow the program to run faster.
-
- Similarly, you should be able to use `-fno-init-local-zero' (the
-default) instead of `-finit-local-zero'. This is because it is rare
-that every variable affected by these options in a given program
-actually needs to be so affected.
-
- For example, `-fno-automatic', which effectively `SAVE's every local
-non-automatic variable and array, affects even things like `DO'
-iteration variables, which rarely need to be `SAVE'd, and this often
-reduces run-time performances. Similarly, `-fno-init-local-zero'
-forces such variables to be initialized to zero--when `SAVE'd (such as
-when `-fno-automatic'), this by itself generally affects only startup
-time for a program, but when not `SAVE'd, it can slow down the
-procedure every time it is called.
-
- *Note Overly Convenient Command-Line Options: Overly Convenient
-Options, for information on the `-fno-automatic' and
-`-finit-local-zero' options and how to convert their use into selective
-changes in your own code.
-
-
-File: g77.info, Node: Avoid f2c Compatibility, Next: Use Submodel Options, Prev: Prefer Automatic Uninitialized Variables, Up: Faster Programs
-
-Avoid f2c Compatibility
------------------------
-
- If you aren't linking with any code compiled using `f2c', try using
-the `-fno-f2c' option when compiling *all* the code in your program.
-(Note that `libf2c' is *not* an example of code that is compiled using
-`f2c'--it is compiled by a C compiler, typically `gcc'.)
-
-
-File: g77.info, Node: Use Submodel Options, Prev: Avoid f2c Compatibility, Up: Faster Programs
-
-Use Submodel Options
---------------------
-
- Using an appropriate `-m' option to generate specific code for your
-CPU may be worthwhile, though it may mean the executable won't run on
-other versions of the CPU that don't support the same instruction set.
-*Note Hardware Models and Configurations: (gcc)Submodel Options.
-
- For recent CPUs that don't have explicit support in the released
-version of `gcc', it may still be possible to get improvements. For
-instance, the flags recommended for 586/686 (Pentium(Pro)) chips for
-building the Linux kernel are:
-
- -m486 -malign-loops=2 -malign-jumps=2 -malign-functions=2
- -fomit-frame-pointer
-
-`-fomit-frame-pointer' will, however, inhibit debugging on x86 systems.
-
-
-File: g77.info, Node: Trouble, Next: Open Questions, Prev: Collected Fortran Wisdom, Up: Top
-
-Known Causes of Trouble with GNU Fortran
-****************************************
-
- This section describes known problems that affect users of GNU
-Fortran. Most of these are not GNU Fortran bugs per se--if they were,
-we would fix them. But the result for a user might be like the result
-of a bug.
-
- Some of these problems are due to bugs in other software, some are
-missing features that are too much work to add, and some are places
-where people's opinions differ as to what is best.
-
- Information on bugs that show up when configuring, porting, building,
-or installing `g77' is not provided here. *Note Problems Installing::.
-
- To find out about major bugs discovered in the current release and
-possible workarounds for them, retrieve
-`ftp://alpha.gnu.ai.mit.edu/g77.plan'.
-
- (Note that some of this portion of the manual is lifted directly
-from the `gcc' manual, with minor modifications to tailor it to users
-of `g77'. Anytime a bug seems to have more to do with the `gcc'
-portion of `g77', *Note Known Causes of Trouble with GNU CC:
-(gcc)Trouble.)
-
-* Menu:
-
-* But-bugs:: Bugs really in other programs or elsewhere.
-* Actual Bugs:: Bugs and misfeatures we will fix later.
-* Missing Features:: Features we already know we want to add later.
-* Disappointments:: Regrettable things we can't change.
-* Non-bugs:: Things we think are right, but some others disagree.
-* Warnings and Errors:: Which problems in your code get warnings,
- and which get errors.
-
diff --git a/gcc/f/g77.info-16 b/gcc/f/g77.info-16
deleted file mode 100644
index e81f43ab8e7..00000000000
--- a/gcc/f/g77.info-16
+++ /dev/null
@@ -1,1210 +0,0 @@
-This is Info file g77.info, produced by Makeinfo version 1.68 from the
-input file g77.texi.
-
- This file explains how to use the GNU Fortran system.
-
- Published by the Free Software Foundation 59 Temple Place - Suite 330
-Boston, MA 02111-1307 USA
-
- Copyright (C) 1995-1997 Free Software Foundation, Inc.
-
- Permission is granted to make and distribute verbatim copies of this
-manual provided the copyright notice and this permission notice are
-preserved on all copies.
-
- Permission is granted to copy and distribute modified versions of
-this manual under the conditions for verbatim copying, provided also
-that the sections entitled "GNU General Public License," "Funding for
-Free Software," and "Protect Your Freedom--Fight `Look And Feel'" are
-included exactly as in the original, and provided that the entire
-resulting derived work is distributed under the terms of a permission
-notice identical to this one.
-
- Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that the sections entitled "GNU General Public
-License," "Funding for Free Software," and "Protect Your Freedom--Fight
-`Look And Feel'", and this permission notice, may be included in
-translations approved by the Free Software Foundation instead of in the
-original English.
-
- Contributed by James Craig Burley (<burley@gnu.ai.mit.edu>).
-Inspired by a first pass at translating `g77-0.5.16/f/DOC' that was
-contributed to Craig by David Ronis (<ronis@onsager.chem.mcgill.ca>).
-
-INFO-DIR-SECTION Fortran Programming
-START-INFO-DIR-ENTRY
-* g77: (g77). The GNU Fortran compilation system.
-END-INFO-DIR-ENTRY
-
-
-File: g77.info, Node: But-bugs, Next: Actual Bugs, Up: Trouble
-
-Bugs Not In GNU Fortran
-=======================
-
- These are bugs to which the maintainers often have to reply, "but
-that isn't a bug in `g77'...". Some of these already are fixed in new
-versions of other software; some still need to be fixed; some are
-problems with how `g77' is installed or is being used; some are the
-result of bad hardware that causes software to misbehave in sometimes
-bizarre ways; some just cannot be addressed at this time until more is
-known about the problem.
-
- Please don't re-report these bugs to the `g77' maintainers--if you
-must remind someone how important it is to you that the problem be
-fixed, talk to the people responsible for the other products identified
-below, but preferably only after you've tried the latest versions of
-those products. The `g77' maintainers have their hands full working on
-just fixing and improving `g77', without serving as a clearinghouse for
-all bugs that happen to affect `g77' users.
-
- *Note Collected Fortran Wisdom::, for information on behavior of
-Fortran programs, and the programs that compile them, that might be
-*thought* to indicate bugs.
-
-* Menu:
-
-* Signal 11 and Friends:: Strange behavior by any software.
-* Cannot Link Fortran Programs:: Unresolved references.
-* Large Common Blocks:: Problems on older GNU/Linux systems.
-* Debugger Problems:: When the debugger crashes.
-* NeXTStep Problems:: Misbehaving executables.
-* Stack Overflow:: More misbehaving executables.
-* Nothing Happens:: Less behaving executables.
-* Strange Behavior at Run Time:: Executables misbehaving due to
- bugs in your program.
-* Floating-point Errors:: The results look wrong, but....
-
-
-File: g77.info, Node: Signal 11 and Friends, Next: Cannot Link Fortran Programs, Up: But-bugs
-
-Signal 11 and Friends
----------------------
-
- A whole variety of strange behaviors can occur when the software, or
-the way you are using the software, stresses the hardware in a way that
-triggers hardware bugs. This might seem hard to believe, but it
-happens frequently enough that there exist documents explaining in
-detail what the various causes of the problems are, what typical
-symptoms look like, and so on.
-
- Generally these problems are referred to in this document as "signal
-11" crashes, because the Linux kernel, running on the most popular
-hardware (the Intel x86 line), often stresses the hardware more than
-other popular operating systems. When hardware problems do occur under
-GNU/Linux on x86 systems, these often manifest themselves as "signal 11"
-problems, as illustrated by the following diagnostic:
-
- sh# g77 myprog.f
- gcc: Internal compiler error: program f771 got fatal signal 11
- sh#
-
- It is *very* important to remember that the above message is *not*
-the only one that indicates a hardware problem, nor does it always
-indicate a hardware problem.
-
- In particular, on systems other than those running the Linux kernel,
-the message might appear somewhat or very different, as it will if the
-error manifests itself while running a program other than the `g77'
-compiler. For example, it will appear somewhat different when running
-your program, when running Emacs, and so on.
-
- How to cope with such problems is well beyond the scope of this
-manual.
-
- However, users of Linux-based systems (such as GNU/Linux) should
-review `http://www.bitwizard.nl/sig11', a source of detailed
-information on diagnosing hardware problems, by recognizing their
-common symptoms.
-
- Users of other operating systems and hardware might find this
-reference useful as well. If you know of similar material for another
-hardware/software combination, please let us know so we can consider
-including a reference to it in future versions of this manual.
-
-
-File: g77.info, Node: Cannot Link Fortran Programs, Next: Large Common Blocks, Prev: Signal 11 and Friends, Up: But-bugs
-
-Cannot Link Fortran Programs
-----------------------------
-
- On some systems, perhaps just those with out-of-date (shared?)
-libraries, unresolved-reference errors happen when linking
-`g77'-compiled programs (which should be done using `g77').
-
- If this happens to you, try appending `-lc' to the command you use
-to link the program, e.g. `g77 foo.f -lc'. `g77' already specifies
-`-lf2c -lm' when it calls the linker, but it cannot also specify `-lc'
-because not all systems have a file named `libc.a'.
-
- It is unclear at this point whether there are legitimately installed
-systems where `-lf2c -lm' is insufficient to resolve code produced by
-`g77'.
-
- If your program doesn't link due to unresolved references to names
-like `_main', make sure you're using the `g77' command to do the link,
-since this command ensures that the necessary libraries are loaded by
-specifying `-lf2c -lm' when it invokes the `gcc' command to do the
-actual link. (Use the `-v' option to discover more about what actually
-happens when you use the `g77' and `gcc' commands.)
-
- Also, try specifying `-lc' as the last item on the `g77' command
-line, in case that helps.
-
-
-File: g77.info, Node: Large Common Blocks, Next: Debugger Problems, Prev: Cannot Link Fortran Programs, Up: But-bugs
-
-Large Common Blocks
--------------------
-
- On some older GNU/Linux systems, programs with common blocks larger
-than 16MB cannot be linked without some kind of error message being
-produced.
-
- This is a bug in older versions of `ld', fixed in more recent
-versions of `binutils', such as version 2.6.
-
-
-File: g77.info, Node: Debugger Problems, Next: NeXTStep Problems, Prev: Large Common Blocks, Up: But-bugs
-
-Debugger Problems
------------------
-
- There are some known problems when using `gdb' on code compiled by
-`g77'. Inadequate investigation as of the release of 0.5.16 results in
-not knowing which products are the culprit, but `gdb-4.14' definitely
-crashes when, for example, an attempt is made to print the contents of
-a `COMPLEX(KIND=2)' dummy array, on at least some GNU/Linux machines,
-plus some others.
-
-
-File: g77.info, Node: NeXTStep Problems, Next: Stack Overflow, Prev: Debugger Problems, Up: But-bugs
-
-NeXTStep Problems
------------------
-
- Developers of Fortran code on NeXTStep (all architectures) have to
-watch out for the following problem when writing programs with large,
-statically allocated (i.e. non-stack based) data structures (common
-blocks, saved arrays).
-
- Due to the way the native loader (`/bin/ld') lays out data
-structures in virtual memory, it is very easy to create an executable
-wherein the `__DATA' segment overlaps (has addresses in common) with
-the `UNIX STACK' segment.
-
- This leads to all sorts of trouble, from the executable simply not
-executing, to bus errors. The NeXTStep command line tool `ebadexec'
-points to the problem as follows:
-
- % /bin/ebadexec a.out
- /bin/ebadexec: __LINKEDIT segment (truncated address = 0x3de000
- rounded size = 0x2a000) of executable file: a.out overlaps with UNIX
- STACK segment (truncated address = 0x400000 rounded size =
- 0x3c00000) of executable file: a.out
-
- (In the above case, it is the `__LINKEDIT' segment that overlaps the
-stack segment.)
-
- This can be cured by assigning the `__DATA' segment (virtual)
-addresses beyond the stack segment. A conservative estimate for this
-is from address 6000000 (hexadecimal) onwards--this has always worked
-for me [Toon Moene]:
-
- % g77 -segaddr __DATA 6000000 test.f
- % ebadexec a.out
- ebadexec: file: a.out appears to be executable
- %
-
- Browsing through `gcc/f/Makefile.in', you will find that the `f771'
-program itself also has to be linked with these flags--it has large
-statically allocated data structures. (Version 0.5.18 reduces this
-somewhat, but probably not enough.)
-
- (The above item was contributed by Toon Moene
-(<toon@moene.indiv.nluug.nl>).)
-
-
-File: g77.info, Node: Stack Overflow, Next: Nothing Happens, Prev: NeXTStep Problems, Up: But-bugs
-
-Stack Overflow
---------------
-
- `g77' code might fail at runtime (probably with a "segmentation
-violation") due to overflowing the stack. This happens most often on
-systems with an environment that provides substantially more heap space
-(for use when arbitrarily allocating and freeing memory) than stack
-space.
-
- Often this can be cured by increasing or removing your shell's limit
-on stack usage, typically using `limit stacksize' (in `csh' and
-derivatives) or `ulimit -s' (in `sh' and derivatives).
-
- Increasing the allowed stack size might, however, require changing
-some operating system or system configuration parameters.
-
- You might be able to work around the problem by compiling with the
-`-fno-automatic' option to reduce stack usage, probably at the expense
-of speed.
-
- *Note Maximum Stackable Size::, for information on patching `g77' to
-use different criteria for placing local non-automatic variables and
-arrays on the stack.
-
- However, if your program uses large automatic arrays (for example,
-has declarations like `REAL A(N)' where `A' is a local array and `N' is
-a dummy or `COMMON' variable that can have a large value), neither use
-of `-fno-automatic', nor changing the cut-off point for `g77' for using
-the stack, will solve the problem by changing the placement of these
-large arrays, as they are *necessarily* automatic.
-
- `g77' currently provides no means to specify that automatic arrays
-are to be allocated on the heap instead of the stack. So, other than
-increasing the stack size, your best bet is to change your source code
-to avoid large automatic arrays. Methods for doing this currently are
-outside the scope of this document.
-
- (*Note:* If your system puts stack and heap space in the same memory
-area, such that they are effectively combined, then a stack overflow
-probably indicates a program that is either simply too large for the
-system, or buggy.)
-
-
-File: g77.info, Node: Nothing Happens, Next: Strange Behavior at Run Time, Prev: Stack Overflow, Up: But-bugs
-
-Nothing Happens
----------------
-
- It is occasionally reported that a "simple" program, such as a
-"Hello, World!" program, does nothing when it is run, even though the
-compiler reported no errors, despite the program containing nothing
-other than a simple `PRINT' statement.
-
- This most often happens because the program has been compiled and
-linked on a UNIX system and named `test', though other names can lead
-to similarly unexpected run-time behavior on various systems.
-
- Essentially this problem boils down to giving your program a name
-that is already known to the shell you are using to identify some other
-program, which the shell continues to execute instead of your program
-when you invoke it via, for example:
-
- sh# test
- sh#
-
- Under UNIX and many other system, a simple command name invokes a
-searching mechanism that might well not choose the program located in
-the current working directory if there is another alternative (such as
-the `test' command commonly installed on UNIX systems).
-
- The reliable way to invoke a program you just linked in the current
-directory under UNIX is to specify it using an explicit pathname, as in:
-
- sh# ./test
- Hello, World!
- sh#
-
- Users who encounter this problem should take the time to read up on
-how their shell searches for commands, how to set their search path,
-and so on. The relevant UNIX commands to learn about include `man',
-`info' (on GNU systems), `setenv' (or `set' and `env'), `which', and
-`find'.
-
-
-File: g77.info, Node: Strange Behavior at Run Time, Next: Floating-point Errors, Prev: Nothing Happens, Up: But-bugs
-
-Strange Behavior at Run Time
-----------------------------
-
- `g77' code might fail at runtime with "segmentation violation", "bus
-error", or even something as subtle as a procedure call overwriting a
-variable or array element that it is not supposed to touch.
-
- These can be symptoms of a wide variety of actual bugs that occurred
-earlier during the program's run, but manifested themselves as
-*visible* problems some time later.
-
- Overflowing the bounds of an array--usually by writing beyond the
-end of it--is one of two kinds of bug that often occurs in Fortran code.
-
- The other kind of bug is a mismatch between the actual arguments
-passed to a procedure and the dummy arguments as declared by that
-procedure.
-
- Both of these kinds of bugs, and some others as well, can be
-difficult to track down, because the bug can change its behavior, or
-even appear to not occur, when using a debugger.
-
- That is, these bugs can be quite sensitive to data, including data
-representing the placement of other data in memory (that is, pointers,
-such as the placement of stack frames in memory).
-
- Plans call for improving `g77' so that it can offer the ability to
-catch and report some of these problems at compile, link, or run time,
-such as by generating code to detect references to beyond the bounds of
-an array, or checking for agreement between calling and called
-procedures.
-
- In the meantime, finding and fixing the programming bugs that lead
-to these behaviors is, ultimately, the user's responsibility, as
-difficult as that task can sometimes be.
-
- One runtime problem that has been observed might have a simple
-solution. If a formatted `WRITE' produces an endless stream of spaces,
-check that your program is linked against the correct version of the C
-library. The configuration process takes care to account for your
-system's normal `libc' not being ANSI-standard, which will otherwise
-cause this behaviour. If your system's default library is
-ANSI-standard and you subsequently link against a non-ANSI one, there
-might be problems such as this one.
-
- Specifically, on Solaris2 systems, avoid picking up the `BSD'
-library from `/usr/ucblib'.
-
-
-File: g77.info, Node: Floating-point Errors, Prev: Strange Behavior at Run Time, Up: But-bugs
-
-Floating-point Errors
----------------------
-
- Some programs appear to produce inconsistent floating-point results
-compiled by `g77' versus by other compilers.
-
- Often the reason for this behavior is the fact that floating-point
-values are represented on almost all Fortran systems by
-*approximations*, and these approximations are inexact even for
-apparently simple values like 0.1, 0.2, 0.3, 0.4, 0.6, 0.7, 0.8, 0.9,
-1.1, and so on. Most Fortran systems, including all current ports of
-`g77', use binary arithmetic to represent these approximations.
-
- Therefore, the exact value of any floating-point approximation as
-manipulated by `g77'-compiled code is representable by adding some
-combination of the values 1.0, 0.5, 0.25, 0.125, and so on (just keep
-dividing by two) through the precision of the fraction (typically
-around 23 bits for `REAL(KIND=1)', 52 for `REAL(KIND=2)'), then
-multiplying the sum by a integral power of two (in Fortran, by `2**N')
-that typically is between -127 and +128 for `REAL(KIND=1)' and -1023
-and +1024 for `REAL(KIND=2)', then multiplying by -1 if the number is
-negative.
-
- So, a value like 0.2 is exactly represented in decimal--since it is
-a fraction, `2/10', with a denomenator that is compatible with the base
-of the number system (base 10). However, `2/10' cannot be represented
-by any finite number of sums of any of 1.0, 0.5, 0.25, and so on, so
-0.2 cannot be exactly represented in binary notation.
-
- (On the other hand, decimal notation can represent any binary number
-in a finite number of digits. Decimal notation cannot do so with
-ternary, or base-3, notation, which would represent floating-point
-numbers as sums of any of `1/1', `1/3', `1/9', and so on. After all,
-no finite number of decimal digits can exactly represent `1/3'.
-Fortunately, few systems use ternary notation.)
-
- Moreover, differences in the way run-time I/O libraries convert
-between these approximations and the decimal representation often used
-by programmers and the programs they write can result in apparent
-differences between results that do not actually exist, or exist to
-such a small degree that they usually are not worth worrying about.
-
- For example, consider the following program:
-
- PRINT *, 0.2
- END
-
- When compiled by `g77', the above program might output `0.20000003',
-while another compiler might produce a executable that outputs `0.2'.
-
- This particular difference is due to the fact that, currently,
-conversion of floating-point values by the `libf2c' library, used by
-`g77', handles only double-precision values.
-
- Since `0.2' in the program is a single-precision value, it is
-converted to double precision (still in binary notation) before being
-converted back to decimal. The conversion to binary appends _binary_
-zero digits to the original value--which, again, is an inexact
-approximation of 0.2--resulting in an approximation that is much less
-exact than is connoted by the use of double precision.
-
- (The appending of binary zero digits has essentially the same effect
-as taking a particular decimal approximation of `1/3', such as
-`0.3333333', and appending decimal zeros to it, producing
-`0.33333330000000000'. Treating the resulting decimal approximation as
-if it really had 18 or so digits of valid precision would make it seem
-a very poor approximation of `1/3'.)
-
- As a result of converting the single-precision approximation to
-double precision by appending binary zeros, the conversion of the
-resulting double-precision value to decimal produces what looks like an
-incorrect result, when in fact the result is *inexact*, and is probably
-no less inaccurate or imprecise an approximation of 0.2 than is
-produced by other compilers that happen to output the converted value
-as "exactly" `0.2'. (Some compilers behave in a way that can make them
-appear to retain more accuracy across a conversion of a single-precision
-constant to double precision. *Note Context-Sensitive Constants::, to
-see why this practice is illusory and even dangerous.)
-
- Note that a more exact approximation of the constant is computed
-when the program is changed to specify a double-precision constant:
-
- PRINT *, 0.2D0
- END
-
- Future versions of `g77' and/or `libf2c' might convert
-single-precision values directly to decimal, instead of converting them
-to double precision first. This would tend to result in output that is
-more consistent with that produced by some other Fortran
-implementations.
-
-
-File: g77.info, Node: Actual Bugs, Next: Missing Features, Prev: But-bugs, Up: Trouble
-
-Actual Bugs We Haven't Fixed Yet
-================================
-
- This section identifies bugs that `g77' *users* might run into.
-This includes bugs that are actually in the `gcc' back end (GBE) or in
-`libf2c', because those sets of code are at least somewhat under the
-control of (and necessarily intertwined with) `g77', so it isn't worth
-separating them out.
-
- For information on bugs that might afflict people who configure,
-port, build, and install `g77', *Note Problems Installing::.
-
- * `g77''s version of `gcc', and probably `g77' itself, cannot be
- reliably used with the `-O2' option (or higher) on Digital
- Semiconductor Alpha AXP machines. The problem is most immediately
- noticed in differences discovered by `make compare' following a
- bootstrap build using `-O2'. It also manifests itself as a
- failure to compile `DATA' statements such as `DATA R/7./'
- correctly; in this case, `R' might be initialized to `4.0'.
-
- Until this bug is fixed, use only `-O1' or no optimization.
-
- * A code-generation bug afflicts Intel x86 targets when `-O2' is
- specified compiling, for example, an old version of the `DNRM2'
- routine. The x87 coprocessor stack is being somewhat mismanaged
- in cases where assigned `GOTO' and `ASSIGN' are involved.
-
- Version 0.5.21 of `g77' contains an initial effort to fix the
- problem, but this effort is incomplete, and a more complete fix is
- planned for the next release.
-
- * Work is needed on the `SIGNAL()' intrinsic to ensure that pointers
- and integers are properly handled on all targets, including 64-bit
- machines.
-
- * When using `-fugly-comma', `g77' assumes an extra `%VAL(0)'
- argument is to be passed to intrinsics taking no arguments, such
- as `IARGC()', which in turn reject such a call. Although this has
- been worked around for 0.5.18 due to changes in the handling of
- intrinsics, `g77' needs to do the ugly-argument-appending trick
- only for external-function invocation, as this would probably be
- more consistent with compilers that default to using that trick.
-
- * Something about `g77''s straightforward handling of label
- references and definitions sometimes prevents the GBE from
- unrolling loops. Until this is solved, try inserting or removing
- `CONTINUE' statements as the terminal statement, using the `END DO'
- form instead, and so on. (Probably improved, but not wholly
- fixed, in 0.5.21.)
-
- * The `g77' command itself should more faithfully process options
- the way the `gcc' command does. For example, `gcc' accepts
- abbreviated forms of long options, `g77' generally doesn't.
-
- * Some confusion in diagnostics concerning failing `INCLUDE'
- statements from within `INCLUDE''d or `#include''d files.
-
- * `g77' assumes that `INTEGER(KIND=1)' constants range from `-2**31'
- to `2**31-1' (the range for two's-complement 32-bit values),
- instead of determining their range from the actual range of the
- type for the configuration (and, someday, for the constant).
-
- Further, it generally doesn't implement the handling of constants
- very well in that it makes assumptions about the configuration
- that it no longer makes regarding variables (types).
-
- Included with this item is the fact that `g77' doesn't recognize
- that, on IEEE-754/854-compliant systems, `0./0.' should produce a
- NaN and no warning instead of the value `0.' and a warning. This
- is to be fixed in version 0.6, when `g77' will use the `gcc' back
- end's constant-handling mechanisms to replace its own.
-
- * `g77' uses way too much memory and CPU time to process large
- aggregate areas having any initialized elements.
-
- For example, `REAL A(1000000)' followed by `DATA A(1)/1/' takes up
- way too much time and space, including the size of the generated
- assembler file. This is to be mitigated somewhat in version 0.6.
-
- Version 0.5.18 improves cases like this--specifically, cases of
- *sparse* initialization that leave large, contiguous areas
- uninitialized--significantly. However, even with the
- improvements, these cases still require too much memory and CPU
- time.
-
- (Version 0.5.18 also improves cases where the initial values are
- zero to a much greater degree, so if the above example ends with
- `DATA A(1)/0/', the compile-time performance will be about as good
- as it will ever get, aside from unrelated improvements to the
- compiler.)
-
- Note that `g77' does display a warning message to notify the user
- before the compiler appears to hang. *Note Initialization of
- Large Aggregate Areas: Large Initialization, for information on
- how to change the point at which `g77' decides to issue this
- warning.
-
- * `g77' doesn't emit variable and array members of common blocks for
- use with a debugger (the `-g' command-line option). The code is
- present to do this, but doesn't work with at least one debug
- format--perhaps it works with others. And it turns out there's a
- similar bug for local equivalence areas, so that has been disabled
- as well.
-
- As of Version 0.5.19, a temporary kludge solution is provided
- whereby some rudimentary information on a member is written as a
- string that is the member's value as a character string.
-
- *Note Options for Code Generation Conventions: Code Gen Options,
- for information on the `-fdebug-kludge' option.
-
- * When debugging, after starting up the debugger but before being
- able to see the source code for the main program unit, the user
- must currently set a breakpoint at `MAIN__' (or `MAIN___' or
- `MAIN_' if `MAIN__' doesn't exist) and run the program until it
- hits the breakpoint. At that point, the main program unit is
- activated and about to execute its first executable statement, but
- that's the state in which the debugger should start up, as is the
- case for languages like C.
-
- * Debugging `g77'-compiled code using debuggers other than `gdb' is
- likely not to work.
-
- Getting `g77' and `gdb' to work together is a known
- problem--getting `g77' to work properly with other debuggers, for
- which source code often is unavailable to `g77' developers, seems
- like a much larger, unknown problem, and is a lower priority than
- making `g77' and `gdb' work together properly.
-
- On the other hand, information about problems other debuggers have
- with `g77' output might make it easier to properly fix `g77', and
- perhaps even improve `gdb', so it is definitely welcome. Such
- information might even lead to all relevant products working
- together properly sooner.
-
- * `g77' currently inserts needless padding for things like `COMMON
- A,IPAD' where `A' is `CHARACTER*1' and `IPAD' is `INTEGER(KIND=1)'
- on machines like x86, because the back end insists that `IPAD' be
- aligned to a 4-byte boundary, but the processor has no such
- requirement (though it's good for performance).
-
- It is possible that this is not a real bug, and could be considered
- a performance feature, but it might be important to provide the
- ability to Fortran code to specify minimum padding for aggregate
- areas such as common blocks--and, certainly, there is the
- potential, with the current setup, for interface differences in
- the way such areas are laid out between `g77' and other compilers.
-
- * Some crashes occur when compiling under Solaris on x86 machines.
-
- Nothing has been heard about any such problems for some time, so
- this is considering a closed item as of 0.5.20. Please submit any
- bug reports pertinent to `g77''s support for Solaris/x86 systems.
-
- * RS/6000 support is not complete as of the gcc 2.6.3 back end. The
- 2.7.0 back end appears to fix this problem, or at least mitigate
- it significantly, but there is at least one known problem that is
- likely to be a code-generation bug in `gcc-2.7.0' plus
- `g77-0.5.16'. This problem shows up only when compiling the
- Fortran program with `-O'.
-
- Nothing has been heard about any RS/6000 problems for some time,
- so this is considering a closed item as of 0.5.20. Please submit
- any bug reports pertinent to `g77''s support for RS/6000 systems.
-
- * SGI support is known to be a bit buggy. The known problem shows
- up only when compiling the Fortran program with `-O'.
-
- It is possible these problems have all been fixed in 0.5.20 by
- emulating complex arithmetic in the front end. Please submit any
- bug reports pertinent to `g77''s support for SGI systems.
-
- * `g77' doesn't work perfectly on 64-bit configurations such as the
- Alpha. This problem is expected to be largely resolved as of
- version 0.5.20, and further addressed by 0.5.21. Version 0.6
- should solve most or all related problems (such as 64-bit machines
- other than Digital Semiconductor ("DEC") Alphas).
-
- One known bug that causes a compile-time crash occurs when
- compiling code such as the following with optimization:
-
- SUBROUTINE CRASH (TEMP)
- INTEGER*2 HALF(2)
- REAL TEMP
- HALF(1) = NINT (TEMP)
- END
-
- It is expected that a future version of `g77' will have a fix for
- this problem, almost certainly by the time `g77' supports the
- forthcoming version 2.8.0 of `gcc'.
-
- * Maintainers of gcc report that the back end definitely has "broken"
- support for `COMPLEX' types. Based on their input, it seems many
- of the problems affect only the more-general facilities for gcc's
- `__complex__' type, such as `__complex__ int' (where the real and
- imaginary parts are integers) that GNU Fortran does not use.
-
- Version 0.5.20 of `g77' works around this problem by not using the
- back end's support for `COMPLEX'. The new option
- `-fno-emulate-complex' avoids the work-around, reverting to using
- the same "broken" mechanism as that used by versions of `g77'
- prior to 0.5.20.
-
- * There seem to be some problems with passing constants, and perhaps
- general expressions (other than simple variables/arrays), to
- procedures when compiling on some systems (such as i386) with
- `-fPIC', as in when compiling for ELF targets. The symptom is
- that the assembler complains about invalid opcodes. More
- investigation is needed, but the problem is almost certainly in
- the gcc back end, and it apparently occurs only when compiling
- sufficiently complicated functions *without* the `-O' option.
-
-
-File: g77.info, Node: Missing Features, Next: Disappointments, Prev: Actual Bugs, Up: Trouble
-
-Missing Features
-================
-
- This section lists features we know are missing from `g77', and
-which we want to add someday. (There is no priority implied in the
-ordering below.)
-
-* Menu:
-
-GNU Fortran language:
-* Better Source Model::
-* Fortran 90 Support::
-* Intrinsics in PARAMETER Statements::
-* SELECT CASE on CHARACTER Type::
-* RECURSIVE Keyword::
-* Popular Non-standard Types::
-* Full Support for Compiler Types::
-* Array Bounds Expressions::
-* POINTER Statements::
-* Sensible Non-standard Constructs::
-* FLUSH Statement::
-* Expressions in FORMAT Statements::
-* Explicit Assembler Code::
-* Q Edit Descriptor::
-
-GNU Fortran dialects:
-* Old-style PARAMETER Statements::
-* TYPE and ACCEPT I/O Statements::
-* STRUCTURE UNION RECORD MAP::
-* OPEN CLOSE and INQUIRE Keywords::
-* ENCODE and DECODE::
-* Suppressing Space Padding::
-* Fortran Preprocessor::
-* Bit Operations on Floating-point Data::
-
-New facilities:
-* POSIX Standard::
-* Floating-point Exception Handling::
-* Nonportable Conversions::
-* Large Automatic Arrays::
-* Support for Threads::
-* Increasing Precision/Range::
-
-Better diagnostics:
-* Gracefully Handle Sensible Bad Code::
-* Non-standard Conversions::
-* Non-standard Intrinsics::
-* Modifying DO Variable::
-* Better Pedantic Compilation::
-* Warn About Implicit Conversions::
-* Invalid Use of Hollerith Constant::
-* Dummy Array Without Dimensioning Dummy::
-* Invalid FORMAT Specifiers::
-* Ambiguous Dialects::
-* Unused Labels::
-* Informational Messages::
-
-Run-time facilities:
-* Uninitialized Variables at Run Time::
-* Bounds Checking at Run Time::
-
-Debugging:
-* Labels Visible to Debugger::
-
-
-File: g77.info, Node: Better Source Model, Next: Fortran 90 Support, Up: Missing Features
-
-Better Source Model
--------------------
-
- `g77' needs to provide, as the default source-line model, a "pure
-visual" mode, where the interpretation of a source program in this mode
-can be accurately determined by a user looking at a traditionally
-displayed rendition of the program (assuming the user knows whether the
-program is fixed or free form).
-
- The design should assume the user cannot tell tabs from spaces and
-cannot see trailing spaces on lines, but has canonical tab stops and,
-for fixed-form source, has the ability to always know exactly where
-column 72 is (since the Fortran standard itself requires this for
-fixed-form source).
-
- This would change the default treatment of fixed-form source to not
-treat lines with tabs as if they were infinitely long--instead, they
-would end at column 72 just as if the tabs were replaced by spaces in
-the canonical way.
-
- As part of this, provide common alternate models (Digital, `f2c',
-and so on) via command-line options. This includes allowing
-arbitrarily long lines for free-form source as well as fixed-form
-source and providing various limits and diagnostics as appropriate.
-
- Also, `g77' should offer, perhaps even default to, warnings when
-characters beyond the last valid column are anything other than spaces.
-This would mean code with "sequence numbers" in columns 73 through 80
-would be rejected, and there's a lot of that kind of code around, but
-one of the most frequent bugs encountered by new users is accidentally
-writing fixed-form source code into and beyond column 73. So, maybe
-the users of old code would be able to more easily handle having to
-specify, say, a `-Wno-col73to80' option.
-
-
-File: g77.info, Node: Fortran 90 Support, Next: Intrinsics in PARAMETER Statements, Prev: Better Source Model, Up: Missing Features
-
-Fortran 90 Support
-------------------
-
- `g77' does not support many of the features that distinguish Fortran
-90 (and, now, Fortran 95) from ANSI FORTRAN 77.
-
- Some Fortran 90 features are supported, because they make sense to
-offer even to die-hard users of F77. For example, many of them codify
-various ways F77 has been extended to meet users' needs during its
-tenure, so `g77' might as well offer them as the primary way to meet
-those same needs, even if it offers compatibility with one or more of
-the ways those needs were met by other F77 compilers in the industry.
-
- Still, many important F90 features are not supported, because no
-attempt has been made to research each and every feature and assess its
-viability in `g77'. In the meantime, users who need those features must
-use Fortran 90 compilers anyway, and the best approach to adding some
-F90 features to GNU Fortran might well be to fund a comprehensive
-project to create GNU Fortran 95.
-
-
-File: g77.info, Node: Intrinsics in PARAMETER Statements, Next: SELECT CASE on CHARACTER Type, Prev: Fortran 90 Support, Up: Missing Features
-
-Intrinsics in `PARAMETER' Statements
-------------------------------------
-
- `g77' doesn't allow intrinsics in `PARAMETER' statements. This
-feature is considered to be absolutely vital, even though it is not
-standard-conforming, and is scheduled for version 0.6.
-
- Related to this, `g77' doesn't allow non-integral exponentiation in
-`PARAMETER' statements, such as `PARAMETER (R=2**.25)'. It is unlikely
-`g77' will ever support this feature, as doing it properly requires
-complete emulation of a target computer's floating-point facilities when
-building `g77' as a cross-compiler. But, if the `gcc' back end is
-enhanced to provide such a facility, `g77' will likely use that facility
-in implementing this feature soon afterwards.
-
-
-File: g77.info, Node: SELECT CASE on CHARACTER Type, Next: RECURSIVE Keyword, Prev: Intrinsics in PARAMETER Statements, Up: Missing Features
-
-`SELECT CASE' on `CHARACTER' Type
----------------------------------
-
- Character-type selector/cases for `SELECT CASE' currently are not
-supported.
-
-
-File: g77.info, Node: RECURSIVE Keyword, Next: Popular Non-standard Types, Prev: SELECT CASE on CHARACTER Type, Up: Missing Features
-
-`RECURSIVE' Keyword
--------------------
-
- `g77' doesn't support the `RECURSIVE' keyword that F90 compilers do.
-Nor does it provide any means for compiling procedures designed to do
-recursion.
-
- All recursive code can be rewritten to not use recursion, but the
-result is not pretty.
-
-
-File: g77.info, Node: Increasing Precision/Range, Next: Gracefully Handle Sensible Bad Code, Prev: Support for Threads, Up: Missing Features
-
-Increasing Precision/Range
---------------------------
-
- Some compilers, such as `f2c', have an option (`-r8' or similar)
-that provides automatic treatment of `REAL' entities such that they
-have twice the storage size, and a corresponding increase in the range
-and precision, of what would normally be the `REAL(KIND=1)' (default
-`REAL') type. (This affects `COMPLEX' the same way.)
-
- They also typically offer another option (`-i8') to increase
-`INTEGER' entities so they are twice as large (with roughly twice as
-much range).
-
- (There are potential pitfalls in using these options.)
-
- `g77' does not yet offer any option that performs these kinds of
-transformations. Part of the problem is the lack of detailed
-specifications regarding exactly how these options affect the
-interpretation of constants, intrinsics, and so on.
-
- Until `g77' addresses this need, programmers could improve the
-portability of their code by modifying it to not require compile-time
-options to produce correct results. Some free tools are available
-which may help, specifically in Toolpack (which one would expect to be
-sound) and the `fortran' section of the Netlib repository.
-
- Use of preprocessors can provide a fairly portable means to work
-around the lack of widely portable methods in the Fortran language
-itself (though increasing acceptance of Fortran 90 would alleviate this
-problem).
-
-
-File: g77.info, Node: Popular Non-standard Types, Next: Full Support for Compiler Types, Prev: RECURSIVE Keyword, Up: Missing Features
-
-Popular Non-standard Types
---------------------------
-
- `g77' doesn't fully support `INTEGER*2', `LOGICAL*1', and similar.
-Version 0.6 will provide full support for this very popular set of
-features. In the meantime, version 0.5.18 provides rudimentary support
-for them.
-
-
-File: g77.info, Node: Full Support for Compiler Types, Next: Array Bounds Expressions, Prev: Popular Non-standard Types, Up: Missing Features
-
-Full Support for Compiler Types
--------------------------------
-
- `g77' doesn't support `INTEGER', `REAL', and `COMPLEX' equivalents
-for *all* applicable back-end-supported types (`char', `short int',
-`int', `long int', `long long int', and `long double'). This means
-providing intrinsic support, and maybe constant support (using F90
-syntax) as well, and, for most machines will result in automatic
-support of `INTEGER*1', `INTEGER*2', `INTEGER*8', maybe even `REAL*16',
-and so on. This is scheduled for version 0.6.
-
-
-File: g77.info, Node: Array Bounds Expressions, Next: POINTER Statements, Prev: Full Support for Compiler Types, Up: Missing Features
-
-Array Bounds Expressions
-------------------------
-
- `g77' doesn't support more general expressions to dimension arrays,
-such as array element references, function references, etc.
-
- For example, `g77' currently does not accept the following:
-
- SUBROUTINE X(M, N)
- INTEGER N(10), M(N(2), N(1))
-
-
-File: g77.info, Node: POINTER Statements, Next: Sensible Non-standard Constructs, Prev: Array Bounds Expressions, Up: Missing Features
-
-POINTER Statements
-------------------
-
- `g77' doesn't support pointers or allocatable objects (other than
-automatic arrays). This set of features is probably considered just
-behind intrinsics in `PARAMETER' statements on the list of large,
-important things to add to `g77'.
-
- In the meantime, consider using the `INTEGER(KIND=7)' declaration to
-specify that a variable must be able to hold a pointer. This construct
-is not portable to other non-GNU compilers, but it is portable to all
-machines GNU Fortran supports when `g77' is used.
-
- *Note Functions and Subroutines::, for information on `%VAL()',
-`%REF()', and `%DESCR()' constructs, which are useful for passing
-pointers to procedures written in languages other than Fortran.
-
-
-File: g77.info, Node: Sensible Non-standard Constructs, Next: FLUSH Statement, Prev: POINTER Statements, Up: Missing Features
-
-Sensible Non-standard Constructs
---------------------------------
-
- `g77' rejects things other compilers accept, like `INTRINSIC
-SQRT,SQRT'. As time permits in the future, some of these things that
-are easy for humans to read and write and unlikely to be intended to
-mean something else will be accepted by `g77' (though `-fpedantic'
-should trigger warnings about such non-standard constructs).
-
- Until `g77' no longer gratuitously rejects sensible code, you might
-as well fix your code to be more standard-conforming and portable.
-
- The kind of case that is important to except from the recommendation
-to change your code is one where following good coding rules would
-force you to write non-standard code that nevertheless has a clear
-meaning.
-
- For example, when writing an `INCLUDE' file that defines a common
-block, it might be appropriate to include a `SAVE' statement for the
-common block (such as `SAVE /CBLOCK/'), so that variables defined in
-the common block retain their values even when all procedures declaring
-the common block become inactive (return to their callers).
-
- However, putting `SAVE' statements in an `INCLUDE' file would
-prevent otherwise standard-conforming code from also specifying the
-`SAVE' statement, by itself, to indicate that all local variables and
-arrays are to have the `SAVE' attribute.
-
- For this reason, `g77' already has been changed to allow this
-combination, because although the general problem of gratuitously
-rejecting unambiguous and "safe" constructs still exists in `g77', this
-particular construct was deemed useful enough that it was worth fixing
-`g77' for just this case.
-
- So, while there is no need to change your code to avoid using this
-particular construct, there might be other, equally appropriate but
-non-standard constructs, that you shouldn't have to stop using just
-because `g77' (or any other compiler) gratuitously rejects it.
-
- Until the general problem is solved, if you have any such construct
-you believe is worthwhile using (e.g. not just an arbitrary, redundant
-specification of an attribute), please submit a bug report with an
-explanation, so we can consider fixing `g77' just for cases like yours.
-
-
-File: g77.info, Node: FLUSH Statement, Next: Expressions in FORMAT Statements, Prev: Sensible Non-standard Constructs, Up: Missing Features
-
-`FLUSH' Statement
------------------
-
- `g77' could perhaps use a `FLUSH' statement that does what `CALL
-FLUSH' does, but that supports `*' as the unit designator (same unit as
-for `PRINT') and accepts `ERR=' and/or `IOSTAT=' specifiers.
-
-
-File: g77.info, Node: Expressions in FORMAT Statements, Next: Explicit Assembler Code, Prev: FLUSH Statement, Up: Missing Features
-
-Expressions in `FORMAT' Statements
-----------------------------------
-
- `g77' doesn't support `FORMAT(I<J>)' and the like. Supporting this
-requires a significant redesign or replacement of `libf2c'.
-
- However, a future version of `g77' might support this construct when
-the expression is constant. For example:
-
- PARAMETER (IWIDTH = 12)
- 10 FORMAT (I<IWIDTH>)
-
- In the meantime, at least for output (`PRINT' and `WRITE'), Fortran
-code making use of this feature can be rewritten to avoid it by
-constructing the `FORMAT' string in a `CHARACTER' variable or array,
-then using that variable or array in place of the `FORMAT' statement
-label to do the original `PRINT' or `WRITE'.
-
- Many uses of this feature on input can be rewritten this way as
-well, but not all can. For example, this can be rewritten:
-
- READ 20, I
- 20 FORMAT (I<J>)
-
- However, this cannot, in general, be rewritten, especially when
-`ERR=' and `END=' constructs are employed:
-
- READ 30, J, I
- 30 FORMAT (I<J>)
-
-
-File: g77.info, Node: Explicit Assembler Code, Next: Q Edit Descriptor, Prev: Expressions in FORMAT Statements, Up: Missing Features
-
-Explicit Assembler Code
------------------------
-
- `g77' needs to provide some way, a la `gcc', for `g77' code to
-specify explicit assembler code.
-
-
-File: g77.info, Node: Q Edit Descriptor, Next: Old-style PARAMETER Statements, Prev: Explicit Assembler Code, Up: Missing Features
-
-Q Edit Descriptor
------------------
-
- The `Q' edit descriptor in `FORMAT's isn't supported. (This is
-meant to get the number of characters remaining in an input record.)
-Supporting this requires a significant redesign or replacement of
-`libf2c'.
-
- A workaround might be using internal I/O or the stream-based
-intrinsics. *Note FGetC Intrinsic (subroutine)::.
-
-
-File: g77.info, Node: Old-style PARAMETER Statements, Next: TYPE and ACCEPT I/O Statements, Prev: Q Edit Descriptor, Up: Missing Features
-
-Old-style PARAMETER Statements
-------------------------------
-
- `g77' doesn't accept `PARAMETER I=1'. Supporting this obsolete form
-of the `PARAMETER' statement would not be particularly hard, as most of
-the parsing code is already in place and working.
-
- Until time/money is spent implementing it, you might as well fix
-your code to use the standard form, `PARAMETER (I=1)' (possibly needing
-`INTEGER I' preceding the `PARAMETER' statement as well, otherwise, in
-the obsolete form of `PARAMETER', the type of the variable is set from
-the type of the constant being assigned to it).
-
-
-File: g77.info, Node: TYPE and ACCEPT I/O Statements, Next: STRUCTURE UNION RECORD MAP, Prev: Old-style PARAMETER Statements, Up: Missing Features
-
-`TYPE' and `ACCEPT' I/O Statements
-----------------------------------
-
- `g77' doesn't support the I/O statements `TYPE' and `ACCEPT'. These
-are common extensions that should be easy to support, but also are
-fairly easy to work around in user code.
-
- Generally, any `TYPE fmt,list' I/O statement can be replaced by
-`PRINT fmt,list'. And, any `ACCEPT fmt,list' statement can be replaced
-by `READ fmt,list'.
-
-
-File: g77.info, Node: STRUCTURE UNION RECORD MAP, Next: OPEN CLOSE and INQUIRE Keywords, Prev: TYPE and ACCEPT I/O Statements, Up: Missing Features
-
-`STRUCTURE', `UNION', `RECORD', `MAP'
--------------------------------------
-
- `g77' doesn't support `STRUCTURE', `UNION', `RECORD', `MAP'. This
-set of extensions is quite a bit lower on the list of large, important
-things to add to `g77', partly because it requires a great deal of work
-either upgrading or replacing `libf2c'.
-
-
-File: g77.info, Node: OPEN CLOSE and INQUIRE Keywords, Next: ENCODE and DECODE, Prev: STRUCTURE UNION RECORD MAP, Up: Missing Features
-
-`OPEN', `CLOSE', and `INQUIRE' Keywords
----------------------------------------
-
- `g77' doesn't have support for keywords such as `DISP='DELETE'' in
-the `OPEN', `CLOSE', and `INQUIRE' statements. These extensions are
-easy to add to `g77' itself, but require much more work on `libf2c'.
-
-
-File: g77.info, Node: ENCODE and DECODE, Next: Suppressing Space Padding, Prev: OPEN CLOSE and INQUIRE Keywords, Up: Missing Features
-
-`ENCODE' and `DECODE'
----------------------
-
- `g77' doesn't support `ENCODE' or `DECODE'.
-
- These statements are best replaced by READ and WRITE statements
-involving internal files (CHARACTER variables and arrays).
-
- For example, replace a code fragment like
-
- INTEGER*1 LINE(80)
- ...
- DECODE (80, 9000, LINE) A, B, C
- ...
- 9000 FORMAT (1X, 3(F10.5))
-
-with:
-
- CHARACTER*80 LINE
- ...
- READ (UNIT=LINE, FMT=9000) A, B, C
- ...
- 9000 FORMAT (1X, 3(F10.5))
-
- Similarly, replace a code fragment like
-
- INTEGER*1 LINE(80)
- ...
- ENCODE (80, 9000, LINE) A, B, C
- ...
- 9000 FORMAT (1X, 'OUTPUT IS ', 3(F10.5))
-
-with:
-
- CHARACTER*80 LINE
- ...
- WRITE (UNIT=LINE, FMT=9000) A, B, C
- ...
- 9000 FORMAT (1X, 'OUTPUT IS ', 3(F10.5))
-
- It is entirely possible that `ENCODE' and `DECODE' will be supported
-by a future version of `g77'.
-
-
-File: g77.info, Node: Suppressing Space Padding, Next: Fortran Preprocessor, Prev: ENCODE and DECODE, Up: Missing Features
-
-Suppressing Space Padding of Source Lines
------------------------------------------
-
- `g77' should offer VXT-Fortran-style suppression of virtual spaces
-at the end of a source line if an appropriate command-line option is
-specified.
-
- This affects cases where a character constant is continued onto the
-next line in a fixed-form source file, as in the following example:
-
- 10 PRINT *,'HOW MANY
- 1 SPACES?'
-
-`g77', and many other compilers, virtually extend the continued line
-through column 72 with spaces that become part of the character
-constant, but Digital Fortran normally didn't, leaving only one space
-between `MANY' and `SPACES?' in the output of the above statement.
-
- Fairly recently, at least one version of Digital Fortran was
-enhanced to provide the other behavior when a command-line option is
-specified, apparently due to demand from readers of the USENET group
-`comp.lang.fortran' to offer conformance to this widespread practice in
-the industry. `g77' should return the favor by offering conformance to
-Digital's approach to handling the above example.
-
-
-File: g77.info, Node: Fortran Preprocessor, Next: Bit Operations on Floating-point Data, Prev: Suppressing Space Padding, Up: Missing Features
-
-Fortran Preprocessor
---------------------
-
- `g77' should offer a preprocessor designed specifically for Fortran
-to replace `cpp -traditional'. There are several out there worth
-evaluating, at least.
-
- Such a preprocessor would recognize Hollerith constants, properly
-parse comments and character constants, and so on. It might also
-recognize, process, and thus preprocess files included via the
-`INCLUDE' directive.
-
-
-File: g77.info, Node: Bit Operations on Floating-point Data, Next: POSIX Standard, Prev: Fortran Preprocessor, Up: Missing Features
-
-Bit Operations on Floating-point Data
--------------------------------------
-
- `g77' does not allow `REAL' and other non-integral types for
-arguments to intrinsics like `AND', `OR', and `SHIFT'.
-
- For example, this program is rejected by `g77', because the
-intrinsic `IAND' does not accept `REAL' arguments:
-
- DATA A/7.54/, B/9.112/
- PRINT *, IAND(A, B)
- END
-
-
-File: g77.info, Node: POSIX Standard, Next: Floating-point Exception Handling, Prev: Bit Operations on Floating-point Data, Up: Missing Features
-
-`POSIX' Standard
-----------------
-
- `g77' should support the POSIX standard for Fortran.
-
diff --git a/gcc/f/g77.info-17 b/gcc/f/g77.info-17
deleted file mode 100644
index b514a9a52f3..00000000000
--- a/gcc/f/g77.info-17
+++ /dev/null
@@ -1,968 +0,0 @@
-This is Info file g77.info, produced by Makeinfo version 1.68 from the
-input file g77.texi.
-
- This file explains how to use the GNU Fortran system.
-
- Published by the Free Software Foundation 59 Temple Place - Suite 330
-Boston, MA 02111-1307 USA
-
- Copyright (C) 1995-1997 Free Software Foundation, Inc.
-
- Permission is granted to make and distribute verbatim copies of this
-manual provided the copyright notice and this permission notice are
-preserved on all copies.
-
- Permission is granted to copy and distribute modified versions of
-this manual under the conditions for verbatim copying, provided also
-that the sections entitled "GNU General Public License," "Funding for
-Free Software," and "Protect Your Freedom--Fight `Look And Feel'" are
-included exactly as in the original, and provided that the entire
-resulting derived work is distributed under the terms of a permission
-notice identical to this one.
-
- Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that the sections entitled "GNU General Public
-License," "Funding for Free Software," and "Protect Your Freedom--Fight
-`Look And Feel'", and this permission notice, may be included in
-translations approved by the Free Software Foundation instead of in the
-original English.
-
- Contributed by James Craig Burley (<burley@gnu.ai.mit.edu>).
-Inspired by a first pass at translating `g77-0.5.16/f/DOC' that was
-contributed to Craig by David Ronis (<ronis@onsager.chem.mcgill.ca>).
-
-INFO-DIR-SECTION Fortran Programming
-START-INFO-DIR-ENTRY
-* g77: (g77). The GNU Fortran compilation system.
-END-INFO-DIR-ENTRY
-
-
-File: g77.info, Node: Floating-point Exception Handling, Next: Nonportable Conversions, Prev: POSIX Standard, Up: Missing Features
-
-Floating-point Exception Handling
----------------------------------
-
- The `gcc' backend and, consequently, `g77', currently provides no
-control over whether or not floating-point exceptions are trapped or
-ignored. (Ignoring them typically results in NaN values being
-propagated in systems that conform to IEEE 754.) The behaviour is
-inherited from the system-dependent startup code.
-
- Most systems provide some C-callable mechanism to change this; this
-can be invoked at startup using `gcc''s `constructor' attribute. For
-example, just compiling and linking the following C code with your
-program will turn on exception trapping for the "common" exceptions on
-an x86-based GNU system:
-
- #include <fpu_control.h>
- void __attribute__ ((constructor))
- trapfpe () {
- (void) __setfpucw (_FPU_DEFAULT &
- ~(_FPU_MASK_IM | _FPU_MASK_ZM | _FPU_MASK_OM));
- }
-
-
-File: g77.info, Node: Nonportable Conversions, Next: Large Automatic Arrays, Prev: Floating-point Exception Handling, Up: Missing Features
-
-Nonportable Conversions
------------------------
-
- `g77' doesn't accept some particularly nonportable, silent data-type
-conversions such as `LOGICAL' to `REAL' (as in `A=.FALSE.', where `A'
-is type `REAL'), that other compilers might quietly accept.
-
- Some of these conversions are accepted by `g77' when the `-fugly'
-option is specified. Perhaps it should accept more or all of them.
-
-
-File: g77.info, Node: Large Automatic Arrays, Next: Support for Threads, Prev: Nonportable Conversions, Up: Missing Features
-
-Large Automatic Arrays
-----------------------
-
- Currently, automatic arrays always are allocated on the stack. For
-situations where the stack cannot be made large enough, `g77' should
-offer a compiler option that specifies allocation of automatic arrays
-in heap storage.
-
-
-File: g77.info, Node: Support for Threads, Next: Increasing Precision/Range, Prev: Large Automatic Arrays, Up: Missing Features
-
-Support for Threads
--------------------
-
- Neither the code produced by `g77' nor the `libf2c' library are
-thread-safe, nor does `g77' have support for parallel processing (other
-than the instruction-level parallelism available on some processors).
-A package such as PVM might help here.
-
-
-File: g77.info, Node: Gracefully Handle Sensible Bad Code, Next: Non-standard Conversions, Prev: Increasing Precision/Range, Up: Missing Features
-
-Gracefully Handle Sensible Bad Code
------------------------------------
-
- `g77' generally should continue processing for warnings and
-recoverable (user) errors whenever possible--that is, it shouldn't
-gratuitously make bad or useless code.
-
- For example:
-
- INTRINSIC ZABS
- CALL FOO(ZABS)
- END
-
-When compiling the above with `-ff2c-intrinsics-disable', `g77' should
-indeed complain about passing `ZABS', but it still should compile,
-instead of rejecting the entire `CALL' statement. (Some of this is
-related to improving the compiler internals to improve how statements
-are analyzed.)
-
-
-File: g77.info, Node: Non-standard Conversions, Next: Non-standard Intrinsics, Prev: Gracefully Handle Sensible Bad Code, Up: Missing Features
-
-Non-standard Conversions
-------------------------
-
- `-Wconversion' and related should flag places where non-standard
-conversions are found. Perhaps much of this would be part of `-Wugly*'.
-
-
-File: g77.info, Node: Non-standard Intrinsics, Next: Modifying DO Variable, Prev: Non-standard Conversions, Up: Missing Features
-
-Non-standard Intrinsics
------------------------
-
- `g77' needs a new option, like `-Wintrinsics', to warn about use of
-non-standard intrinsics without explicit `INTRINSIC' statements for
-them. This would help find code that might fail silently when ported
-to another compiler.
-
-
-File: g77.info, Node: Modifying DO Variable, Next: Better Pedantic Compilation, Prev: Non-standard Intrinsics, Up: Missing Features
-
-Modifying `DO' Variable
------------------------
-
- `g77' should warn about modifying `DO' variables via `EQUIVALENCE'.
-(The internal information gathered to produce this warning might also
-be useful in setting the internal "doiter" flag for a variable or even
-array reference within a loop, since that might produce faster code
-someday.)
-
- For example, this code is invalid, so `g77' should warn about the
-invalid assignment to `NOTHER':
-
- EQUIVALENCE (I, NOTHER)
- DO I = 1, 100
- IF (I.EQ. 10) NOTHER = 20
- END DO
-
-
-File: g77.info, Node: Better Pedantic Compilation, Next: Warn About Implicit Conversions, Prev: Modifying DO Variable, Up: Missing Features
-
-Better Pedantic Compilation
----------------------------
-
- `g77' needs to support `-fpedantic' more thoroughly, and use it only
-to generate warnings instead of rejecting constructs outright. Have it
-warn: if a variable that dimensions an array is not a dummy or placed
-explicitly in `COMMON' (F77 does not allow it to be placed in `COMMON'
-via `EQUIVALENCE'); if specification statements follow
-statement-function-definition statements; about all sorts of syntactic
-extensions.
-
-
-File: g77.info, Node: Warn About Implicit Conversions, Next: Invalid Use of Hollerith Constant, Prev: Better Pedantic Compilation, Up: Missing Features
-
-Warn About Implicit Conversions
--------------------------------
-
- `g77' needs a `-Wpromotions' option to warn if source code appears
-to expect automatic, silent, and somewhat dangerous compiler-assisted
-conversion of `REAL(KIND=1)' constants to `REAL(KIND=2)' based on
-context.
-
- For example, it would warn about cases like this:
-
- DOUBLE PRECISION FOO
- PARAMETER (TZPHI = 9.435784839284958)
- FOO = TZPHI * 3D0
-
-
-File: g77.info, Node: Invalid Use of Hollerith Constant, Next: Dummy Array Without Dimensioning Dummy, Prev: Warn About Implicit Conversions, Up: Missing Features
-
-Invalid Use of Hollerith Constant
----------------------------------
-
- `g77' should disallow statements like `RETURN 2HAB', which are
-invalid in both source forms (unlike `RETURN (2HAB)', which probably
-still makes no sense but at least can be reliably parsed). Fixed-form
-processing rejects it, but not free-form, except in a way that is a bit
-difficult to understand.
-
-
-File: g77.info, Node: Dummy Array Without Dimensioning Dummy, Next: Invalid FORMAT Specifiers, Prev: Invalid Use of Hollerith Constant, Up: Missing Features
-
-Dummy Array Without Dimensioning Dummy
---------------------------------------
-
- `g77' should complain when a list of dummy arguments containing an
-adjustable dummy array does not also contain every variable listed in
-the dimension list of the adjustable array.
-
- Currently, `g77' does complain about a variable that dimensions an
-array but doesn't appear in any dummy list or `COMMON' area, but this
-needs to be extended to catch cases where it doesn't appear in every
-dummy list that also lists any arrays it dimensions.
-
- For example, `g77' should warn about the entry point `ALT' below,
-since it includes `ARRAY' but not `ISIZE' in its list of arguments:
-
- SUBROUTINE PRIMARY(ARRAY, ISIZE)
- REAL ARRAY(ISIZE)
- ENTRY ALT(ARRAY)
-
-
-File: g77.info, Node: Invalid FORMAT Specifiers, Next: Ambiguous Dialects, Prev: Dummy Array Without Dimensioning Dummy, Up: Missing Features
-
-Invalid FORMAT Specifiers
--------------------------
-
- `g77' should check `FORMAT' specifiers for validity as it does
-`FORMAT' statements.
-
- For example, a diagnostic would be produced for:
-
- PRINT 'HI THERE!' !User meant PRINT *, 'HI THERE!'
-
-
-File: g77.info, Node: Ambiguous Dialects, Next: Unused Labels, Prev: Invalid FORMAT Specifiers, Up: Missing Features
-
-Ambiguous Dialects
-------------------
-
- `g77' needs a set of options such as `-Wugly*', `-Wautomatic',
-`-Wvxt', `-Wf90', and so on. These would warn about places in the
-user's source where ambiguities are found, helpful in resolving
-ambiguities in the program's dialect or dialects.
-
-
-File: g77.info, Node: Unused Labels, Next: Informational Messages, Prev: Ambiguous Dialects, Up: Missing Features
-
-Unused Labels
--------------
-
- `g77' should warn about unused labels when `-Wunused' is in effect.
-
-
-File: g77.info, Node: Informational Messages, Next: Uninitialized Variables at Run Time, Prev: Unused Labels, Up: Missing Features
-
-Informational Messages
-----------------------
-
- `g77' needs an option to suppress information messages (notes).
-`-w' does this but also suppresses warnings. The default should be to
-suppress info messages.
-
- Perhaps info messages should simply be eliminated.
-
-
-File: g77.info, Node: Uninitialized Variables at Run Time, Next: Bounds Checking at Run Time, Prev: Informational Messages, Up: Missing Features
-
-Uninitialized Variables at Run Time
------------------------------------
-
- `g77' needs an option to initialize everything (not otherwise
-explicitly initialized) to "weird" (machine-dependent) values, e.g.
-NaNs, bad (non-`NULL') pointers, and largest-magnitude integers, would
-help track down references to some kinds of uninitialized variables at
-run time.
-
- Note that use of the options `-O -Wuninitialized' can catch many
-such bugs at compile time.
-
-
-File: g77.info, Node: Bounds Checking at Run Time, Next: Labels Visible to Debugger, Prev: Uninitialized Variables at Run Time, Up: Missing Features
-
-Bounds Checking at Run Time
----------------------------
-
- `g77' should offer run-time bounds-checking of array/subscript
-references in a fashion similar to `f2c'.
-
- Note that `g77' already warns about references to out-of-bounds
-elements of arrays when it detects these at compile time.
-
-
-File: g77.info, Node: Labels Visible to Debugger, Prev: Bounds Checking at Run Time, Up: Missing Features
-
-Labels Visible to Debugger
---------------------------
-
- `g77' should output debugging information for statements labels, for
-use by debuggers that know how to support them. Same with weirder
-things like construct names. It is not yet known if any debug formats
-or debuggers support these.
-
-
-File: g77.info, Node: Disappointments, Next: Non-bugs, Prev: Missing Features, Up: Trouble
-
-Disappointments and Misunderstandings
-=====================================
-
- These problems are perhaps regrettable, but we don't know any
-practical way around them for now.
-
-* Menu:
-
-* Mangling of Names:: `SUBROUTINE FOO' is given
- external name `foo_'.
-* Multiple Definitions of External Names:: No doing both `COMMON /FOO/'
- and `SUBROUTINE FOO'.
-* Limitation on Implicit Declarations:: No `IMPLICIT CHARACTER*(*)'.
-
-
-File: g77.info, Node: Mangling of Names, Next: Multiple Definitions of External Names, Up: Disappointments
-
-Mangling of Names in Source Code
---------------------------------
-
- The current external-interface design, which includes naming of
-external procedures, COMMON blocks, and the library interface, has
-various usability problems, including things like adding underscores
-where not really necessary (and preventing easier inter-language
-operability) and yet not providing complete namespace freedom for user
-C code linked with Fortran apps (due to the naming of functions in the
-library, among other things).
-
- Project GNU should at least get all this "right" for systems it
-fully controls, such as the Hurd, and provide defaults and options for
-compatibility with existing systems and interoperability with popular
-existing compilers.
-
-
-File: g77.info, Node: Multiple Definitions of External Names, Next: Limitation on Implicit Declarations, Prev: Mangling of Names, Up: Disappointments
-
-Multiple Definitions of External Names
---------------------------------------
-
- `g77' doesn't allow a common block and an external procedure or
-`BLOCK DATA' to have the same name. Some systems allow this, but `g77'
-does not, to be compatible with `f2c'.
-
- `g77' could special-case the way it handles `BLOCK DATA', since it
-is not compatible with `f2c' in this particular area (necessarily,
-since `g77' offers an important feature here), but it is likely that
-such special-casing would be very annoying to people with programs that
-use `EXTERNAL FOO', with no other mention of `FOO' in the same program
-unit, to refer to external procedures, since the result would be that
-`g77' would treat these references as requests to force-load BLOCK DATA
-program units.
-
- In that case, if `g77' modified names of `BLOCK DATA' so they could
-have the same names as `COMMON', users would find that their programs
-wouldn't link because the `FOO' procedure didn't have its name
-translated the same way.
-
- (Strictly speaking, `g77' could emit a
-null-but-externally-satisfying definition of `FOO' with its name
-transformed as if it had been a `BLOCK DATA', but that probably invites
-more trouble than it's worth.)
-
-
-File: g77.info, Node: Limitation on Implicit Declarations, Prev: Multiple Definitions of External Names, Up: Disappointments
-
-Limitation on Implicit Declarations
------------------------------------
-
- `g77' disallows `IMPLICIT CHARACTER*(*)'. This is not
-standard-conforming.
-
-
-File: g77.info, Node: Non-bugs, Next: Warnings and Errors, Prev: Disappointments, Up: Trouble
-
-Certain Changes We Don't Want to Make
-=====================================
-
- This section lists changes that people frequently request, but which
-we do not make because we think GNU Fortran is better without them.
-
-* Menu:
-
-* Backslash in Constants:: Why `'\\'' is a constant that
- is one, not two, characters long.
-* Initializing Before Specifying:: Why `DATA VAR/1/' can't precede
- `COMMON VAR'.
-* Context-Sensitive Intrinsicness:: Why `CALL SQRT' won't work.
-* Context-Sensitive Constants:: Why `9.435784839284958' is a
- single-precision constant,
- and might be interpreted as
- `9.435785' or similar.
-* Equivalence Versus Equality:: Why `.TRUE. .EQ. .TRUE.' won't work.
-* Order of Side Effects:: Why `J = IFUNC() - IFUNC()' might
- not behave as expected.
-
-
-File: g77.info, Node: Backslash in Constants, Next: Initializing Before Specifying, Up: Non-bugs
-
-Backslash in Constants
-----------------------
-
- In the opinion of many experienced Fortran users, `-fno-backslash'
-should be the default, not `-fbackslash', as currently set by `g77'.
-
- First of all, you can always specify `-fno-backslash' to turn off
-this processing.
-
- Despite not being within the spirit (though apparently within the
-letter) of the ANSI FORTRAN 77 standard, `g77' defaults to
-`-fbackslash' because that is what most UNIX `f77' commands default to,
-and apparently lots of code depends on this feature.
-
- This is a particularly troubling issue. The use of a C construct in
-the midst of Fortran code is bad enough, worse when it makes existing
-Fortran programs stop working (as happens when programs written for
-non-UNIX systems are ported to UNIX systems with compilers that provide
-the `-fbackslash' feature as the default--sometimes with no option to
-turn it off).
-
- The author of GNU Fortran wished, for reasons of linguistic purity,
-to make `-fno-backslash' the default for GNU Fortran and thus require
-users of UNIX `f77' and `f2c' to specify `-fbackslash' to get the UNIX
-behavior.
-
- However, the realization that `g77' is intended as a replacement for
-*UNIX* `f77', caused the author to choose to make `g77' as compatible
-with `f77' as feasible, which meant making `-fbackslash' the default.
-
- The primary focus on compatibility is at the source-code level, and
-the question became "What will users expect a replacement for `f77' to
-do, by default?" Although at least one UNIX `f77' does not provide
-`-fbackslash' as a default, it appears that the majority of them do,
-which suggests that the majority of code that is compiled by UNIX `f77'
-compilers expects `-fbackslash' to be the default.
-
- It is probably the case that more code exists that would *not* work
-with `-fbackslash' in force than code that requires it be in force.
-
- However, most of *that* code is not being compiled with `f77', and
-when it is, new build procedures (shell scripts, makefiles, and so on)
-must be set up anyway so that they work under UNIX. That makes a much
-more natural and safe opportunity for non-UNIX users to adapt their
-build procedures for `g77''s default of `-fbackslash' than would exist
-for the majority of UNIX `f77' users who would have to modify existing,
-working build procedures to explicitly specify `-fbackslash' if that was
-not the default.
-
- One suggestion has been to configure the default for `-fbackslash'
-(and perhaps other options as well) based on the configuration of `g77'.
-
- This is technically quite straightforward, but will be avoided even
-in cases where not configuring defaults to be dependent on a particular
-configuration greatly inconveniences some users of legacy code.
-
- Many users appreciate the GNU compilers because they provide an
-environment that is uniform across machines. These users would be
-inconvenienced if the compiler treated things like the format of the
-source code differently on certain machines.
-
- Occasionally users write programs intended only for a particular
-machine type. On these occasions, the users would benefit if the GNU
-Fortran compiler were to support by default the same dialect as the
-other compilers on that machine. But such applications are rare. And
-users writing a program to run on more than one type of machine cannot
-possibly benefit from this kind of compatibility. (This is consistent
-with the design goals for `gcc'. To change them for `g77', you must
-first change them for `gcc'. Do not ask the maintainers of `g77' to do
-this for you, or to disassociate `g77' from the widely understood, if
-not widely agreed-upon, goals for GNU compilers in general.)
-
- This is why GNU Fortran does and will treat backslashes in the same
-fashion on all types of machines (by default). *Note Direction of
-Language Development::, for more information on this overall philosophy
-guiding the development of the GNU Fortran language.
-
- Of course, users strongly concerned about portability should indicate
-explicitly in their build procedures which options are expected by
-their source code, or write source code that has as few such
-expectations as possible.
-
- For example, avoid writing code that depends on backslash (`\')
-being interpreted either way in particular, such as by starting a
-program unit with:
-
- CHARACTER BACKSL
- PARAMETER (BACKSL = '\\')
-
-Then, use concatenation of `BACKSL' anyplace a backslash is desired.
-In this way, users can write programs which have the same meaning in
-many Fortran dialects.
-
- (However, this technique does not work for Hollerith constants--which
-is just as well, since the only generally portable uses for Hollerith
-constants are in places where character constants can and should be
-used instead, for readability.)
-
-
-File: g77.info, Node: Initializing Before Specifying, Next: Context-Sensitive Intrinsicness, Prev: Backslash in Constants, Up: Non-bugs
-
-Initializing Before Specifying
-------------------------------
-
- `g77' does not allow `DATA VAR/1/' to appear in the source code
-before `COMMON VAR', `DIMENSION VAR(10)', `INTEGER VAR', and so on. In
-general, `g77' requires initialization of a variable or array to be
-specified *after* all other specifications of attributes (type, size,
-placement, and so on) of that variable or array are specified (though
-*confirmation* of data type is permitted).
-
- It is *possible* `g77' will someday allow all of this, even though
-it is not allowed by the FORTRAN 77 standard.
-
- Then again, maybe it is better to have `g77' always require
-placement of `DATA' so that it can possibly immediately write constants
-to the output file, thus saving time and space.
-
- That is, `DATA A/1000000*1/' should perhaps always be immediately
-writable to canonical assembler, unless it's already known to be in a
-`COMMON' area following as-yet-uninitialized stuff, and to do this it
-cannot be followed by `COMMON A'.
-
-
-File: g77.info, Node: Context-Sensitive Intrinsicness, Next: Context-Sensitive Constants, Prev: Initializing Before Specifying, Up: Non-bugs
-
-Context-Sensitive Intrinsicness
--------------------------------
-
- `g77' treats procedure references to *possible* intrinsic names as
-always enabling their intrinsic nature, regardless of whether the
-*form* of the reference is valid for that intrinsic.
-
- For example, `CALL SQRT' is interpreted by `g77' as an invalid
-reference to the `SQRT' intrinsic function, because the reference is a
-subroutine invocation.
-
- First, `g77' recognizes the statement `CALL SQRT' as a reference to
-a *procedure* named `SQRT', not to a *variable* with that name (as it
-would for a statement such as `V = SQRT').
-
- Next, `g77' establishes that, in the program unit being compiled,
-`SQRT' is an intrinsic--not a subroutine that happens to have the same
-name as an intrinsic (as would be the case if, for example, `EXTERNAL
-SQRT' was present).
-
- Finally, `g77' recognizes that the *form* of the reference is
-invalid for that particular intrinsic. That is, it recognizes that it
-is invalid for an intrinsic *function*, such as `SQRT', to be invoked as
-a *subroutine*.
-
- At that point, `g77' issues a diagnostic.
-
- Some users claim that it is "obvious" that `CALL SQRT' references an
-external subroutine of their own, not an intrinsic function.
-
- However, `g77' knows about intrinsic subroutines, not just
-functions, and is able to support both having the same names, for
-example.
-
- As a result of this, `g77' rejects calls to intrinsics that are not
-subroutines, and function invocations of intrinsics that are not
-functions, just as it (and most compilers) rejects invocations of
-intrinsics with the wrong number (or types) of arguments.
-
- So, use the `EXTERNAL SQRT' statement in a program unit that calls a
-user-written subroutine named `SQRT'.
-
-
-File: g77.info, Node: Context-Sensitive Constants, Next: Equivalence Versus Equality, Prev: Context-Sensitive Intrinsicness, Up: Non-bugs
-
-Context-Sensitive Constants
----------------------------
-
- `g77' does not use context to determine the types of constants or
-named constants (`PARAMETER'), except for (non-standard) typeless
-constants such as `'123'O'.
-
- For example, consider the following statement:
-
- PRINT *, 9.435784839284958 * 2D0
-
-`g77' will interpret the (truncated) constant `9.435784839284958' as a
-`REAL(KIND=1)', not `REAL(KIND=2)', constant, because the suffix `D0'
-is not specified.
-
- As a result, the output of the above statement when compiled by
-`g77' will appear to have "less precision" than when compiled by other
-compilers.
-
- In these and other cases, some compilers detect the fact that a
-single-precision constant is used in a double-precision context and
-therefore interpret the single-precision constant as if it was
-*explicitly* specified as a double-precision constant. (This has the
-effect of appending *decimal*, not *binary*, zeros to the fractional
-part of the number--producing different computational results.)
-
- The reason this misfeature is dangerous is that a slight, apparently
-innocuous change to the source code can change the computational
-results. Consider:
-
- REAL ALMOST, CLOSE
- DOUBLE PRECISION FIVE
- PARAMETER (ALMOST = 5.000000000001)
- FIVE = 5
- CLOSE = 5.000000000001
- PRINT *, 5.000000000001 - FIVE
- PRINT *, ALMOST - FIVE
- PRINT *, CLOSE - FIVE
- END
-
-Running the above program should result in the same value being printed
-three times. With `g77' as the compiler, it does.
-
- However, compiled by many other compilers, running the above program
-would print two or three distinct values, because in two or three of
-the statements, the constant `5.000000000001', which on most systems is
-exactly equal to `5.' when interpreted as a single-precision constant,
-is instead interpreted as a double-precision constant, preserving the
-represented precision. However, this "clever" promotion of type does
-not extend to variables or, in some compilers, to named constants.
-
- Since programmers often are encouraged to replace manifest constants
-or permanently-assigned variables with named constants (`PARAMETER' in
-Fortran), and might need to replace some constants with variables
-having the same values for pertinent portions of code, it is important
-that compilers treat code so modified in the same way so that the
-results of such programs are the same. `g77' helps in this regard by
-treating constants just the same as variables in terms of determining
-their types in a context-independent way.
-
- Still, there is a lot of existing Fortran code that has been written
-to depend on the way other compilers freely interpret constants' types
-based on context, so anything `g77' can do to help flag cases of this
-in such code could be very helpful.
-
-
-File: g77.info, Node: Equivalence Versus Equality, Next: Order of Side Effects, Prev: Context-Sensitive Constants, Up: Non-bugs
-
-Equivalence Versus Equality
----------------------------
-
- Use of `.EQ.' and `.NE.' on `LOGICAL' operands is not supported,
-except via `-fugly', which is not recommended except for legacy code
-(where the behavior expected by the *code* is assumed).
-
- Legacy code should be changed, as resources permit, to use `.EQV.'
-and `.NEQV.' instead, as these are permitted by the various Fortran
-standards.
-
- New code should never be written expecting `.EQ.' or `.NE.' to work
-if either of its operands is `LOGICAL'.
-
- The problem with supporting this "feature" is that there is unlikely
-to be consensus on how it works, as illustrated by the following sample
-program:
-
- LOGICAL L,M,N
- DATA L,M,N /3*.FALSE./
- IF (L.AND.M.EQ.N) PRINT *,'L.AND.M.EQ.N'
- END
-
- The issue raised by the above sample program is: what is the
-precedence of `.EQ.' (and `.NE.') when applied to `LOGICAL' operands?
-
- Some programmers will argue that it is the same as the precedence
-for `.EQ.' when applied to numeric (such as `INTEGER') operands. By
-this interpretation, the subexpression `M.EQ.N' must be evaluated first
-in the above program, resulting in a program that, when run, does not
-execute the `PRINT' statement.
-
- Other programmers will argue that the precedence is the same as the
-precedence for `.EQV.', which is restricted by the standards to
-`LOGICAL' operands. By this interpretation, the subexpression
-`L.AND.M' must be evaluated first, resulting in a program that *does*
-execute the `PRINT' statement.
-
- Assigning arbitrary semantic interpretations to syntactic expressions
-that might legitimately have more than one "obvious" interpretation is
-generally unwise.
-
- The creators of the various Fortran standards have done a good job
-in this case, requiring a distinct set of operators (which have their
-own distinct precedence) to compare `LOGICAL' operands. This
-requirement results in expression syntax with more certain precedence
-(without requiring substantial context), making it easier for
-programmers to read existing code. `g77' will avoid muddying up
-elements of the Fortran language that were well-designed in the first
-place.
-
- (Ask C programmers about the precedence of expressions such as `(a)
-& (b)' and `(a) - (b)'--they cannot even tell you, without knowing more
-context, whether the `&' and `-' operators are infix (binary) or unary!)
-
-
-File: g77.info, Node: Order of Side Effects, Prev: Equivalence Versus Equality, Up: Non-bugs
-
-Order of Side Effects
----------------------
-
- `g77' does not necessarily produce code that, when run, performs
-side effects (such as those performed by function invocations) in the
-same order as in some other compiler--or even in the same order as
-another version, port, or invocation (using different command-line
-options) of `g77'.
-
- It is never safe to depend on the order of evaluation of side
-effects. For example, an expression like this may very well behave
-differently from one compiler to another:
-
- J = IFUNC() - IFUNC()
-
-There is no guarantee that `IFUNC' will be evaluated in any particular
-order. Either invocation might happen first. If `IFUNC' returns 5 the
-first time it is invoked, and returns 12 the second time, `J' might end
-up with the value `7', or it might end up with `-7'.
-
- Generally, in Fortran, procedures with side-effects intended to be
-visible to the caller are best designed as *subroutines*, not functions.
-Examples of such side-effects include:
-
- * The generation of random numbers that are intended to influence
- return values.
-
- * Performing I/O (other than internal I/O to local variables).
-
- * Updating information in common blocks.
-
- An example of a side-effect that is not intended to be visible to
-the caller is a function that maintains a cache of recently calculated
-results, intended solely to speed repeated invocations of the function
-with identical arguments. Such a function can be safely used in
-expressions, because if the compiler optimizes away one or more calls
-to the function, operation of the program is unaffected (aside from
-being speeded up).
-
-
-File: g77.info, Node: Warnings and Errors, Prev: Non-bugs, Up: Trouble
-
-Warning Messages and Error Messages
-===================================
-
- The GNU compiler can produce two kinds of diagnostics: errors and
-warnings. Each kind has a different purpose:
-
- *Errors* report problems that make it impossible to compile your
- program. GNU Fortran reports errors with the source file name,
- line number, and column within the line where the problem is
- apparent.
-
- *Warnings* report other unusual conditions in your code that
- *might* indicate a problem, although compilation can (and does)
- proceed. Warning messages also report the source file name, line
- number, and column information, but include the text `warning:' to
- distinguish them from error messages.
-
- Warnings might indicate danger points where you should check to make
-sure that your program really does what you intend; or the use of
-obsolete features; or the use of nonstandard features of GNU Fortran.
-Many warnings are issued only if you ask for them, with one of the `-W'
-options (for instance, `-Wall' requests a variety of useful warnings).
-
- *Note:* Currently, the text of the line and a pointer to the column
-is printed in most `g77' diagnostics. Probably, as of version 0.6,
-`g77' will no longer print the text of the source line, instead printing
-the column number following the file name and line number in a form
-that GNU Emacs recognizes. This change is expected to speed up and
-reduce the memory usage of the `g77' compiler.
-
- *Note Options to Request or Suppress Warnings: Warning Options, for
-more detail on these and related command-line options.
-
-
-File: g77.info, Node: Open Questions, Next: Bugs, Prev: Trouble, Up: Top
-
-Open Questions
-**************
-
- Please consider offering useful answers to these questions!
-
- * How do system administrators and users manage multiple incompatible
- Fortran compilers on their systems? How can `g77' contribute to
- this, or at least avoiding intefering with it?
-
- Currently, `g77' provides rudimentary ways to choose whether to
- overwrite portions of other Fortran compilation systems (such as
- the `f77' command and the `libf2c' library). Is this sufficient?
- What happens when users choose not to overwrite these--does `g77'
- work properly in all such installations, picking up its own
- versions, or does it pick up the existing "alien" versions it
- didn't overwrite with its own, possibly leading to subtle bugs?
-
- * `LOC()' and other intrinsics are probably somewhat misclassified.
- Is the a need for more precise classification of intrinsics, and
- if so, what are the appropriate groupings? Is there a need to
- individually enable/disable/delete/hide intrinsics from the
- command line?
-
-
-File: g77.info, Node: Bugs, Next: Service, Prev: Open Questions, Up: Top
-
-Reporting Bugs
-**************
-
- Your bug reports play an essential role in making GNU Fortran
-reliable.
-
- When you encounter a problem, the first thing to do is to see if it
-is already known. *Note Trouble::. If it isn't known, then you should
-report the problem.
-
- Reporting a bug might help you by bringing a solution to your
-problem, or it might not. (If it does not, look in the service
-directory; see *Note Service::.) In any case, the principal function
-of a bug report is to help the entire community by making the next
-version of GNU Fortran work better. Bug reports are your contribution
-to the maintenance of GNU Fortran.
-
- Since the maintainers are very overloaded, we cannot respond to every
-bug report. However, if the bug has not been fixed, we are likely to
-send you a patch and ask you to tell us whether it works.
-
- In order for a bug report to serve its purpose, you must include the
-information that makes for fixing the bug.
-
-* Menu:
-
-* Criteria: Bug Criteria. Have you really found a bug?
-* Where: Bug Lists. Where to send your bug report.
-* Reporting: Bug Reporting. How to report a bug effectively.
-* Patches: Sending Patches. How to send a patch for GNU Fortran.
-
- *Note Known Causes of Trouble with GNU Fortran: Trouble, for
-information on problems we already know about.
-
- *Note How To Get Help with GNU Fortran: Service, for information on
-where to ask for help.
-
-
-File: g77.info, Node: Bug Criteria, Next: Bug Lists, Up: Bugs
-
-Have You Found a Bug?
-=====================
-
- If you are not sure whether you have found a bug, here are some
-guidelines:
-
- * If the compiler gets a fatal signal, for any input whatever, that
- is a compiler bug. Reliable compilers never crash--they just
- remain obsolete.
-
- * If the compiler produces invalid assembly code, for any input
- whatever, that is a compiler bug, unless the compiler reports
- errors (not just warnings) which would ordinarily prevent the
- assembler from being run.
-
- * If the compiler produces valid assembly code that does not
- correctly execute the input source code, that is a compiler bug.
-
- However, you must double-check to make sure, because you might
- have run into an incompatibility between GNU Fortran and
- traditional Fortran. These incompatibilities might be considered
- bugs, but they are inescapable consequences of valuable features.
-
- Or you might have a program whose behavior is undefined, which
- happened by chance to give the desired results with another
- Fortran compiler. It is best to check the relevant Fortran
- standard thoroughly if it is possible that the program indeed does
- something undefined.
-
- After you have localized the error to a single source line, it
- should be easy to check for these things. If your program is
- correct and well defined, you have found a compiler bug.
-
- It might help if, in your submission, you identified the specific
- language in the relevant Fortran standard that specifies the
- desired behavior, if it isn't likely to be obvious and agreed-upon
- by all Fortran users.
-
- * If the compiler produces an error message for valid input, that is
- a compiler bug.
-
- * If the compiler does not produce an error message for invalid
- input, that is a compiler bug. However, you should note that your
- idea of "invalid input" might be someone else's idea of "an
- extension" or "support for traditional practice".
-
- * If you are an experienced user of Fortran compilers, your
- suggestions for improvement of GNU Fortran are welcome in any case.
-
- Many, perhaps most, bug reports against `g77' turn out to be bugs in
-the user's code. While we find such bug reports educational, they
-sometimes take a considerable amount of time to track down or at least
-respond to--time we could be spending making `g77', not some user's
-code, better.
-
- Some steps you can take to verify that the bug is not certainly in
-the code you're compiling with `g77':
-
- * Compile your code using the `g77' options `-W -Wall -O'. These
- options enable many useful warning; the `-O' option enables flow
- analysis that enables the uninitialized-variable warning.
-
- If you investigate the warnings and find evidence of possible bugs
- in your code, fix them first and retry `g77'.
-
- * Compile your code using the `g77' options `-finit-local-zero',
- `-fno-automatic', `-ffloat-store', and various combinations
- thereof.
-
- If your code works with any of these combinations, that is not
- proof that the bug isn't in `g77'--a `g77' bug exposed by your
- code might simply be avoided, or have a different, more subtle
- effect, when different options are used--but it can be a strong
- indicator that your code is making unawarranted assumptions about
- the Fortran dialect and/or underlying machine it is being compiled
- and run on.
-
- *Note Overly Convenient Command-Line Options: Overly Convenient
- Options, for information on the `-fno-automatic' and
- `-finit-local-zero' options and how to convert their use into
- selective changes in your own code.
-
- * Validate your code with `ftnchek' or a similar code-checking tool.
- `ftncheck' can be found at `ftp://ftp.netlib.org/fortran' or
- `ftp://ftp.dsm.fordham.edu'.
-
- * Try your code out using other Fortran compilers, such as `f2c'.
- If it does not work on at least one other compiler (assuming the
- compiler supports the features the code needs), that is a strong
- indicator of a bug in the code.
-
- However, even if your code works on many compilers *except* `g77',
- that does *not* mean the bug is in `g77'. It might mean the bug
- is in your code, and that `g77' simply exposes it more readily
- than other compilers.
-
-
-File: g77.info, Node: Bug Lists, Next: Bug Reporting, Prev: Bug Criteria, Up: Bugs
-
-Where to Report Bugs
-====================
-
- Send bug reports for GNU Fortran to <fortran@gnu.ai.mit.edu>.
-
- Often people think of posting bug reports to a newsgroup instead of
-mailing them. This sometimes appears to work, but it has one problem
-which can be crucial: a newsgroup posting does not contain a mail path
-back to the sender. Thus, if maintainers need more information, they
-might be unable to reach you. For this reason, you should always send
-bug reports by mail to the proper mailing list.
-
- As a last resort, send bug reports on paper to:
-
- GNU Compiler Bugs
- Free Software Foundation
- 59 Temple Place - Suite 330
- Boston, MA 02111-1307, USA
-
diff --git a/gcc/f/g77.info-18 b/gcc/f/g77.info-18
deleted file mode 100644
index 34be0ea71a4..00000000000
--- a/gcc/f/g77.info-18
+++ /dev/null
@@ -1,1125 +0,0 @@
-This is Info file g77.info, produced by Makeinfo version 1.68 from the
-input file g77.texi.
-
- This file explains how to use the GNU Fortran system.
-
- Published by the Free Software Foundation 59 Temple Place - Suite 330
-Boston, MA 02111-1307 USA
-
- Copyright (C) 1995-1997 Free Software Foundation, Inc.
-
- Permission is granted to make and distribute verbatim copies of this
-manual provided the copyright notice and this permission notice are
-preserved on all copies.
-
- Permission is granted to copy and distribute modified versions of
-this manual under the conditions for verbatim copying, provided also
-that the sections entitled "GNU General Public License," "Funding for
-Free Software," and "Protect Your Freedom--Fight `Look And Feel'" are
-included exactly as in the original, and provided that the entire
-resulting derived work is distributed under the terms of a permission
-notice identical to this one.
-
- Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that the sections entitled "GNU General Public
-License," "Funding for Free Software," and "Protect Your Freedom--Fight
-`Look And Feel'", and this permission notice, may be included in
-translations approved by the Free Software Foundation instead of in the
-original English.
-
- Contributed by James Craig Burley (<burley@gnu.ai.mit.edu>).
-Inspired by a first pass at translating `g77-0.5.16/f/DOC' that was
-contributed to Craig by David Ronis (<ronis@onsager.chem.mcgill.ca>).
-
-INFO-DIR-SECTION Fortran Programming
-START-INFO-DIR-ENTRY
-* g77: (g77). The GNU Fortran compilation system.
-END-INFO-DIR-ENTRY
-
-
-File: g77.info, Node: Bug Reporting, Next: Sending Patches, Prev: Bug Lists, Up: Bugs
-
-How to Report Bugs
-==================
-
- The fundamental principle of reporting bugs usefully is this:
-*report all the facts*. If you are not sure whether to state a fact or
-leave it out, state it!
-
- Often people omit facts because they think they know what causes the
-problem and they conclude that some details don't matter. Thus, you
-might assume that the name of the variable you use in an example does
-not matter. Well, probably it doesn't, but one cannot be sure.
-Perhaps the bug is a stray memory reference which happens to fetch from
-the location where that name is stored in memory; perhaps, if the name
-were different, the contents of that location would fool the compiler
-into doing the right thing despite the bug. Play it safe and give a
-specific, complete example. That is the easiest thing for you to do,
-and the most helpful.
-
- Keep in mind that the purpose of a bug report is to enable someone to
-fix the bug if it is not known. It isn't very important what happens if
-the bug is already known. Therefore, always write your bug reports on
-the assumption that the bug is not known.
-
- Sometimes people give a few sketchy facts and ask, "Does this ring a
-bell?" This cannot help us fix a bug, so it is rarely helpful. We
-respond by asking for enough details to enable us to investigate. You
-might as well expedite matters by sending them to begin with.
-(Besides, there are enough bells ringing around here as it is.)
-
- Try to make your bug report self-contained. If we have to ask you
-for more information, it is best if you include all the previous
-information in your response, as well as the information that was
-missing.
-
- Please report each bug in a separate message. This makes it easier
-for us to track which bugs have been fixed and to forward your bugs
-reports to the appropriate maintainer.
-
- Do not compress and encode any part of your bug report using programs
-such as `uuencode'. If you do so it will slow down the processing of
-your bug. If you must submit multiple large files, use `shar', which
-allows us to read your message without having to run any decompression
-programs.
-
- (As a special exception for GNU Fortran bug-reporting, at least for
-now, if you are sending more than a few lines of code, if your
-program's source file format contains "interesting" things like
-trailing spaces or strange characters, or if you need to include binary
-data files, it is acceptable to put all the files together in a `tar'
-archive, and, whether you need to do that, it is acceptable to then
-compress the single file (`tar' archive or source file) using `gzip'
-and encode it via `uuencode'. Do not use any MIME stuff--the current
-maintainer can't decode this. Using `compress' instead of `gzip' is
-acceptable, assuming you have licensed the use of the patented
-algorithm in `compress' from Unisys.)
-
- To enable someone to investigate the bug, you should include all
-these things:
-
- * The version of GNU Fortran. You can get this by running `g77'
- with the `-v' option. (Ignore any error messages that might be
- displayed when the linker is run.)
-
- Without this, we won't know whether there is any point in looking
- for the bug in the current version of GNU Fortran.
-
- * A complete input file that will reproduce the bug. If the bug is
- in the compiler proper (`f771') and you are using the C
- preprocessor, run your source file through the C preprocessor by
- doing `g77 -E SOURCEFILE > OUTFILE', then include the contents of
- OUTFILE in the bug report. (When you do this, use the same `-I',
- `-D' or `-U' options that you used in actual compilation.)
-
- A single statement is not enough of an example. In order to
- compile it, it must be embedded in a complete file of compiler
- input; and the bug might depend on the details of how this is done.
-
- Without a real example one can compile, all anyone can do about
- your bug report is wish you luck. It would be futile to try to
- guess how to provoke the bug. For example, bugs in register
- allocation and reloading frequently depend on every little detail
- of the function they happen in.
-
- * Note that you should include with your bug report any files
- included by the source file (via the `#include' or `INCLUDE'
- directive) that you send, and any files they include, and so on.
-
- It is not necessary to replace the `#include' and `INCLUDE'
- directives with the actual files in the version of the source file
- that you send, but it might make submitting the bug report easier
- in the end. However, be sure to *reproduce* the bug using the
- *exact* version of the source material you submit, to avoid
- wild-goose chases.
-
- * The command arguments you gave GNU Fortran to compile that example
- and observe the bug. For example, did you use `-O'? To guarantee
- you won't omit something important, list all the options.
-
- If we were to try to guess the arguments, we would probably guess
- wrong and then we would not encounter the bug.
-
- * The type of machine you are using, and the operating system name
- and version number. (Much of this information is printed by `g77
- -v'--if you include that, send along any additional info you have
- that you don't see clearly represented in that output.)
-
- * The operands you gave to the `configure' command when you installed
- the compiler.
-
- * A complete list of any modifications you have made to the compiler
- source. (We don't promise to investigate the bug unless it
- happens in an unmodified compiler. But if you've made
- modifications and don't tell us, then you are sending us on a
- wild-goose chase.)
-
- Be precise about these changes. A description in English is not
- enough--send a context diff for them.
-
- Adding files of your own (such as a machine description for a
- machine we don't support) is a modification of the compiler source.
-
- * Details of any other deviations from the standard procedure for
- installing GNU Fortran.
-
- * A description of what behavior you observe that you believe is
- incorrect. For example, "The compiler gets a fatal signal," or,
- "The assembler instruction at line 208 in the output is incorrect."
-
- Of course, if the bug is that the compiler gets a fatal signal,
- then one can't miss it. But if the bug is incorrect output, the
- maintainer might not notice unless it is glaringly wrong. None of
- us has time to study all the assembler code from a 50-line Fortran
- program just on the chance that one instruction might be wrong.
- We need *you* to do this part!
-
- Even if the problem you experience is a fatal signal, you should
- still say so explicitly. Suppose something strange is going on,
- such as, your copy of the compiler is out of synch, or you have
- encountered a bug in the C library on your system. (This has
- happened!) Your copy might crash and the copy here would not. If
- you said to expect a crash, then when the compiler here fails to
- crash, we would know that the bug was not happening. If you don't
- say to expect a crash, then we would not know whether the bug was
- happening. We would not be able to draw any conclusion from our
- observations.
-
- If the problem is a diagnostic when building GNU Fortran with some
- other compiler, say whether it is a warning or an error.
-
- Often the observed symptom is incorrect output when your program
- is run. Sad to say, this is not enough information unless the
- program is short and simple. None of us has time to study a large
- program to figure out how it would work if compiled correctly,
- much less which line of it was compiled wrong. So you will have
- to do that. Tell us which source line it is, and what incorrect
- result happens when that line is executed. A person who
- understands the program can find this as easily as finding a bug
- in the program itself.
-
- * If you send examples of assembler code output from GNU Fortran,
- please use `-g' when you make them. The debugging information
- includes source line numbers which are essential for correlating
- the output with the input.
-
- * If you wish to mention something in the GNU Fortran source, refer
- to it by context, not by line number.
-
- The line numbers in the development sources don't match those in
- your sources. Your line numbers would convey no convenient
- information to the maintainers.
-
- * Additional information from a debugger might enable someone to
- find a problem on a machine which he does not have available.
- However, you need to think when you collect this information if
- you want it to have any chance of being useful.
-
- For example, many people send just a backtrace, but that is never
- useful by itself. A simple backtrace with arguments conveys little
- about GNU Fortran because the compiler is largely data-driven; the
- same functions are called over and over for different RTL insns,
- doing different things depending on the details of the insn.
-
- Most of the arguments listed in the backtrace are useless because
- they are pointers to RTL list structure. The numeric values of the
- pointers, which the debugger prints in the backtrace, have no
- significance whatever; all that matters is the contents of the
- objects they point to (and most of the contents are other such
- pointers).
-
- In addition, most compiler passes consist of one or more loops that
- scan the RTL insn sequence. The most vital piece of information
- about such a loop--which insn it has reached--is usually in a
- local variable, not in an argument.
-
- What you need to provide in addition to a backtrace are the values
- of the local variables for several stack frames up. When a local
- variable or an argument is an RTX, first print its value and then
- use the GDB command `pr' to print the RTL expression that it points
- to. (If GDB doesn't run on your machine, use your debugger to call
- the function `debug_rtx' with the RTX as an argument.) In
- general, whenever a variable is a pointer, its value is no use
- without the data it points to.
-
- Here are some things that are not necessary:
-
- * A description of the envelope of the bug.
-
- Often people who encounter a bug spend a lot of time investigating
- which changes to the input file will make the bug go away and which
- changes will not affect it.
-
- This is often time consuming and not very useful, because the way
- we will find the bug is by running a single example under the
- debugger with breakpoints, not by pure deduction from a series of
- examples. You might as well save your time for something else.
-
- Of course, if you can find a simpler example to report *instead* of
- the original one, that is a convenience. Errors in the output
- will be easier to spot, running under the debugger will take less
- time, etc. Most GNU Fortran bugs involve just one function, so
- the most straightforward way to simplify an example is to delete
- all the function definitions except the one where the bug occurs.
- Those earlier in the file may be replaced by external declarations
- if the crucial function depends on them. (Exception: inline
- functions might affect compilation of functions defined later in
- the file.)
-
- However, simplification is not vital; if you don't want to do this,
- report the bug anyway and send the entire test case you used.
-
- * In particular, some people insert conditionals `#ifdef BUG' around
- a statement which, if removed, makes the bug not happen. These
- are just clutter; we won't pay any attention to them anyway.
- Besides, you should send us preprocessor output, and that can't
- have conditionals.
-
- * A patch for the bug.
-
- A patch for the bug is useful if it is a good one. But don't omit
- the necessary information, such as the test case, on the
- assumption that a patch is all we need. We might see problems
- with your patch and decide to fix the problem another way, or we
- might not understand it at all.
-
- Sometimes with a program as complicated as GNU Fortran it is very
- hard to construct an example that will make the program follow a
- certain path through the code. If you don't send the example, we
- won't be able to construct one, so we won't be able to verify that
- the bug is fixed.
-
- And if we can't understand what bug you are trying to fix, or why
- your patch should be an improvement, we won't install it. A test
- case will help us to understand.
-
- *Note Sending Patches::, for guidelines on how to make it easy for
- us to understand and install your patches.
-
- * A guess about what the bug is or what it depends on.
-
- Such guesses are usually wrong. Even the maintainer can't guess
- right about such things without first using the debugger to find
- the facts.
-
- * A core dump file.
-
- We have no way of examining a core dump for your type of machine
- unless we have an identical system--and if we do have one, we
- should be able to reproduce the crash ourselves.
-
-
-File: g77.info, Node: Sending Patches, Prev: Bug Reporting, Up: Bugs
-
-Sending Patches for GNU Fortran
-===============================
-
- If you would like to write bug fixes or improvements for the GNU
-Fortran compiler, that is very helpful. Send suggested fixes to the
-bug report mailing list, <fortran@gnu.ai.mit.edu>.
-
- Please follow these guidelines so we can study your patches
-efficiently. If you don't follow these guidelines, your information
-might still be useful, but using it will take extra work. Maintaining
-GNU Fortran is a lot of work in the best of circumstances, and we can't
-keep up unless you do your best to help.
-
- * Send an explanation with your changes of what problem they fix or
- what improvement they bring about. For a bug fix, just include a
- copy of the bug report, and explain why the change fixes the bug.
-
- (Referring to a bug report is not as good as including it, because
- then we will have to look it up, and we have probably already
- deleted it if we've already fixed the bug.)
-
- * Always include a proper bug report for the problem you think you
- have fixed. We need to convince ourselves that the change is
- right before installing it. Even if it is right, we might have
- trouble judging it if we don't have a way to reproduce the problem.
-
- * Include all the comments that are appropriate to help people
- reading the source in the future understand why this change was
- needed.
-
- * Don't mix together changes made for different reasons. Send them
- *individually*.
-
- If you make two changes for separate reasons, then we might not
- want to install them both. We might want to install just one. If
- you send them all jumbled together in a single set of diffs, we
- have to do extra work to disentangle them--to figure out which
- parts of the change serve which purpose. If we don't have time
- for this, we might have to ignore your changes entirely.
-
- If you send each change as soon as you have written it, with its
- own explanation, then the two changes never get tangled up, and we
- can consider each one properly without any extra work to
- disentangle them.
-
- Ideally, each change you send should be impossible to subdivide
- into parts that we might want to consider separately, because each
- of its parts gets its motivation from the other parts.
-
- * Send each change as soon as that change is finished. Sometimes
- people think they are helping us by accumulating many changes to
- send them all together. As explained above, this is absolutely
- the worst thing you could do.
-
- Since you should send each change separately, you might as well
- send it right away. That gives us the option of installing it
- immediately if it is important.
-
- * Use `diff -c' to make your diffs. Diffs without context are hard
- for us to install reliably. More than that, they make it hard for
- us to study the diffs to decide whether we want to install them.
- Unidiff format is better than contextless diffs, but not as easy
- to read as `-c' format.
-
- If you have GNU `diff', use `diff -cp', which shows the name of the
- function that each change occurs in. (The maintainer of GNU
- Fortran currently uses `diff -rcp2N'.)
-
- * Write the change log entries for your changes. We get lots of
- changes, and we don't have time to do all the change log writing
- ourselves.
-
- Read the `ChangeLog' file to see what sorts of information to put
- in, and to learn the style that we use. The purpose of the change
- log is to show people where to find what was changed. So you need
- to be specific about what functions you changed; in large
- functions, it's often helpful to indicate where within the
- function the change was.
-
- On the other hand, once you have shown people where to find the
- change, you need not explain its purpose. Thus, if you add a new
- function, all you need to say about it is that it is new. If you
- feel that the purpose needs explaining, it probably does--but the
- explanation will be much more useful if you put it in comments in
- the code.
-
- If you would like your name to appear in the header line for who
- made the change, send us the header line.
-
- * When you write the fix, keep in mind that we can't install a
- change that would break other systems.
-
- People often suggest fixing a problem by changing
- machine-independent files such as `toplev.c' to do something
- special that a particular system needs. Sometimes it is totally
- obvious that such changes would break GNU Fortran for almost all
- users. We can't possibly make a change like that. At best it
- might tell us how to write another patch that would solve the
- problem acceptably.
-
- Sometimes people send fixes that *might* be an improvement in
- general--but it is hard to be sure of this. It's hard to install
- such changes because we have to study them very carefully. Of
- course, a good explanation of the reasoning by which you concluded
- the change was correct can help convince us.
-
- The safest changes are changes to the configuration files for a
- particular machine. These are safe because they can't create new
- bugs on other machines.
-
- Please help us keep up with the workload by designing the patch in
- a form that is good to install.
-
-
-File: g77.info, Node: Service, Next: Adding Options, Prev: Bugs, Up: Top
-
-How To Get Help with GNU Fortran
-********************************
-
- If you need help installing, using or changing GNU Fortran, there
-are two ways to find it:
-
- * Look in the service directory for someone who might help you for a
- fee. The service directory is found in the file named `SERVICE'
- in the GNU CC distribution.
-
- * Send a message to <fortran@gnu.ai.mit.edu>.
-
-
-File: g77.info, Node: Adding Options, Next: Projects, Prev: Service, Up: Top
-
-Adding Options
-**************
-
- To add a new command-line option to `g77', first decide what kind of
-option you wish to add. Search the `g77' and `gcc' documentation for
-one or more options that is most closely like the one you want to add
-(in terms of what kind of effect it has, and so on) to help clarify its
-nature.
-
- * *Fortran options* are options that apply only when compiling
- Fortran programs. They are accepted by `g77' and `gcc', but they
- apply only when compiling Fortran programs.
-
- * *Compiler options* are options that apply when compiling most any
- kind of program.
-
- *Fortran options* are listed in the file `gcc/f/lang-options.h',
-which is used during the build of `gcc' to build a list of all options
-that are accepted by at least one language's compiler. This list goes
-into the `lang_options' array in `gcc/toplev.c', which uses this array
-to determine whether a particular option should be offered to the
-linked-in front end for processing by calling `lang_option_decode',
-which, for `g77', is in `gcc/f/com.c' and just calls
-`ffe_decode_option'.
-
- If the linked-in front end "rejects" a particular option passed to
-it, `toplev.c' just ignores the option, because *some* language's
-compiler is willing to accept it.
-
- This allows commands like `gcc -fno-asm foo.c bar.f' to work, even
-though Fortran compilation does not currently support the `-fno-asm'
-option; even though the `f771' version of `lang_decode_option' rejects
-`-fno-asm', `toplev.c' doesn't produce a diagnostic because some other
-language (C) does accept it.
-
- This also means that commands like `g77 -fno-asm foo.f' yield no
-diagnostics, despite the fact that no phase of the command was able to
-recognize and process `-fno-asm'--perhaps a warning about this would be
-helpful if it were possible.
-
- Code that processes Fortran options is found in `gcc/f/top.c',
-function `ffe_decode_option'. This code needs to check positive and
-negative forms of each option.
-
- The defaults for Fortran options are set in their global
-definitions, also found in `gcc/f/top.c'. Many of these defaults are
-actually macros defined in `gcc/f/target.h', since they might be
-machine-specific. However, since, in practice, GNU compilers should
-behave the same way on all configurations (especially when it comes to
-language constructs), the practice of setting defaults in `target.h' is
-likely to be deprecated and, ultimately, stopped in future versions of
-`g77'.
-
- Accessor macros for Fortran options, used by code in the `g77' FFE,
-are defined in `gcc/f/top.h'.
-
- *Compiler options* are listed in `gcc/toplev.c' in the array
-`f_options'. An option not listed in `lang_options' is looked up in
-`f_options' and handled from there.
-
- The defaults for compiler options are set in the global definitions
-for the corresponding variables, some of which are in `gcc/toplev.c'.
-
- You can set different defaults for *Fortran-oriented* or
-*Fortran-reticent* compiler options by changing the way `f771' handles
-the `-fset-g77-defaults' option, which is always provided as the first
-option when called by `g77' or `gcc'.
-
- This code is in `ffe_decode_options' in `gcc/f/top.c'. Have it
-change just the variables that you want to default to a different
-setting for Fortran compiles compared to compiles of other languages.
-
- The `-fset-g77-defaults' option is passed to `f771' automatically
-because of the specification information kept in `gcc/f/lang-specs.h'.
-This file tells the `gcc' command how to recognize, in this case,
-Fortran source files (those to be preprocessed, and those that are
-not), and further, how to invoke the appropriate programs (including
-`f771') to process those source files.
-
- It is in `gcc/f/lang-specs.h' that `-fset-g77-defaults',
-`-fversion', and other options are passed, as appropriate, even when
-the user has not explicitly specified them. Other "internal" options
-such as `-quiet' also are passed via this mechanism.
-
-
-File: g77.info, Node: Projects, Next: Diagnostics, Prev: Adding Options, Up: Top
-
-Projects
-********
-
- If you want to contribute to `g77' by doing research, design,
-specification, documentation, coding, or testing, the following
-information should give you some ideas.
-
-* Menu:
-
-* Efficiency:: Make `g77' itself compile code faster.
-* Better Optimization:: Teach `g77' to generate faster code.
-* Simplify Porting:: Make `g77' easier to configure, build,
- and install.
-* More Extensions:: Features many users won't know to ask for.
-* Machine Model:: `g77' should better leverage `gcc'.
-* Internals Documentation:: Make maintenance easier.
-* Internals Improvements:: Make internals more robust.
-* Better Diagnostics:: Make using `g77' on new code easier.
-
-
-File: g77.info, Node: Efficiency, Next: Better Optimization, Up: Projects
-
-Improve Efficiency
-==================
-
- Don't bother doing any performance analysis until most of the
-following items are taken care of, because there's no question they
-represent serious space/time problems, although some of them show up
-only given certain kinds of (popular) input.
-
- * Improve `malloc' package and its uses to specify more info about
- memory pools and, where feasible, use obstacks to implement them.
-
- * Skip over uninitialized portions of aggregate areas (arrays,
- `COMMON' areas, `EQUIVALENCE' areas) so zeros need not be output.
- This would reduce memory usage for large initialized aggregate
- areas, even ones with only one initialized element.
-
- As of version 0.5.18, a portion of this item has already been
- accomplished.
-
- * Prescan the statement (in `sta.c') so that the nature of the
- statement is determined as much as possible by looking entirely at
- its form, and not looking at any context (previous statements,
- including types of symbols). This would allow ripping out of the
- statement-confirmation, symbol retraction/confirmation, and
- diagnostic inhibition mechanisms. Plus, it would result in
- much-improved diagnostics. For example, `CALL
- some-intrinsic(...)', where the intrinsic is not a subroutine
- intrinsic, would result actual error instead of the
- unimplemented-statement catch-all.
-
- * Throughout `g77', don't pass line/column pairs where a simple
- `ffewhere' type, which points to the error as much as is desired
- by the configuration, will do, and don't pass `ffelexToken' types
- where a simple `ffewhere' type will do. Then, allow new default
- configuration of `ffewhere' such that the source line text is not
- preserved, and leave it to things like Emacs' next-error function
- to point to them (now that `next-error' supports column, or,
- perhaps, character-offset, numbers). The change in calling
- sequences should improve performance somewhat, as should not
- having to save source lines. (Whether this whole item will
- improve performance is questionable, but it should improve
- maintainability.)
-
- * Handle `DATA (A(I),I=1,1000000)/1000000*2/' more efficiently,
- especially as regards the assembly output. Some of this might
- require improving the back end, but lots of improvement in
- space/time required in `g77' itself can be fairly easily obtained
- without touching the back end. Maybe type-conversion, where
- necessary, can be speeded up as well in cases like the one shown
- (converting the `2' into `2.').
-
- * If analysis shows it to be worthwhile, optimize `lex.c'.
-
- * Consider redesigning `lex.c' to not need any feedback during
- tokenization, by keeping track of enough parse state on its own.
-
-
-File: g77.info, Node: Better Optimization, Next: Simplify Porting, Prev: Efficiency, Up: Projects
-
-Better Optimization
-===================
-
- Much of this work should be put off until after `g77' has all the
-features necessary for its widespread acceptance as a useful F77
-compiler. However, perhaps this work can be done in parallel during
-the feature-adding work.
-
- * Do the equivalent of the trick of putting `extern inline' in front
- of every function definition in `libf2c' and #include'ing the
- resulting file in `f2c'+`gcc'--that is, inline all
- run-time-library functions that are at all worth inlining. (Some
- of this has already been done, such as for integral
- exponentiation.)
-
- * When doing `CHAR_VAR = CHAR_FUNC(...)', and it's clear that types
- line up and `CHAR_VAR' is addressable or not a `VAR_DECL', make
- `CHAR_VAR', not a temporary, be the receiver for `CHAR_FUNC'.
- (This is now done for `COMPLEX' variables.)
-
- * Design and implement Fortran-specific optimizations that don't
- really belong in the back end, or where the front end needs to
- give the back end more info than it currently does.
-
- * Design and implement a new run-time library interface, with the
- code going into `libgcc' so no special linking is required to link
- Fortran programs using standard language features. This library
- would speed up lots of things, from I/O (using precompiled formats,
- doing just one, or, at most, very few, calls for arrays or array
- sections, and so on) to general computing (array/section
- implementations of various intrinsics, implementation of commonly
- performed loops that aren't likely to be optimally compiled
- otherwise, etc.).
-
- Among the important things the library would do are:
-
- * Be a one-stop-shop-type library, hence shareable and usable
- by all, in that what are now library-build-time options in
- `libf2c' would be moved at least to the `g77' compile phase,
- if not to finer grains (such as choosing how list-directed
- I/O formatting is done by default at `OPEN' time, for
- preconnected units via options or even statements in the main
- program unit, maybe even on a per-I/O basis with appropriate
- pragma-like devices).
-
- * Probably requiring the new library design, change interface to
- normally have `COMPLEX' functions return their values in the way
- `gcc' would if they were declared `__complex__ float', rather than
- using the mechanism currently used by `CHARACTER' functions
- (whereby the functions are compiled as returning void and their
- first arg is a pointer to where to store the result). (Don't
- append underscores to external names for `COMPLEX' functions in
- some cases once `g77' uses `gcc' rather than `f2c' calling
- conventions.)
-
- * Do something useful with `doiter' references where possible. For
- example, `CALL FOO(I)' cannot modify `I' if within a `DO' loop
- that uses `I' as the iteration variable, and the back end might
- find that info useful in determining whether it needs to read `I'
- back into a register after the call. (It normally has to do that,
- unless it knows `FOO' never modifies its passed-by-reference
- argument, which is rarely the case for Fortran-77 code.)
-
-
-File: g77.info, Node: Simplify Porting, Next: More Extensions, Prev: Better Optimization, Up: Projects
-
-Simplify Porting
-================
-
- Making `g77' easier to configure, port, build, and install, either
-as a single-system compiler or as a cross-compiler, would be very
-useful.
-
- * A new library (replacing `libf2c') should improve portability as
- well as produce more optimal code. Further, `g77' and the new
- library should conspire to simplify naming of externals, such as
- by removing unnecessarily added underscores, and to
- reduce/eliminate the possibility of naming conflicts, while making
- debugger more straightforward.
-
- Also, it should make multi-language applications more feasible,
- such as by providing Fortran intrinsics that get Fortran unit
- numbers given C `FILE *' descriptors.
-
- * Possibly related to a new library, `g77' should produce the
- equivalent of a `gcc' `main(argc, argv)' function when it compiles
- a main program unit, instead of compiling something that must be
- called by a library implementation of `main()'.
-
- This would do many useful things such as provide more flexibility
- in terms of setting up exception handling, not requiring
- programmers to start their debugging sessions with `breakpoint
- MAIN__' followed by `run', and so on.
-
- * The GBE needs to understand the difference between alignment
- requirements and desires. For example, on Intel x86 machines,
- `g77' currently imposes overly strict alignment requirements, due
- to the back end, but it would be useful for Fortran and C
- programmers to be able to override these *recommendations* as long
- as they don't violate the actual processor *requirements*.
-
-
-File: g77.info, Node: More Extensions, Next: Machine Model, Prev: Simplify Porting, Up: Projects
-
-More Extensions
-===============
-
- These extensions are not the sort of things users ask for "by name",
-but they might improve the usability of `g77', and Fortran in general,
-in the long run. Some of these items really pertain to improving `g77'
-internals so that some popular extensions can be more easily supported.
-
- * Look through all the documentation on the GNU Fortran language,
- dialects, compiler, missing features, bugs, and so on. Many
- mentions of incomplete or missing features are sprinkled
- throughout. It is not worth repeating them here.
-
- * Support arbitrary operands for concatenation, even in contexts
- where run-time allocation is required.
-
- * Consider adding a `NUMERIC' type to designate typeless numeric
- constants, named and unnamed. The idea is to provide a
- forward-looking, effective replacement for things like the
- old-style `PARAMETER' statement when people really need
- typelessness in a maintainable, portable, clearly documented way.
- Maybe `TYPELESS' would include `CHARACTER', `POINTER', and
- whatever else might come along. (This is not really a call for
- polymorphism per se, just an ability to express limited, syntactic
- polymorphism.)
-
- * Support `OPEN(...,KEY=(...),...)'.
-
- * Support arbitrary file unit numbers, instead of limiting them to 0
- through `MXUNIT-1'. (This is a `libf2c' issue.)
-
- * `OPEN(NOSPANBLOCKS,...)' is treated as
- `OPEN(UNIT=NOSPANBLOCKS,...)', so a later `UNIT=' in the first
- example is invalid. Make sure this is what users of this feature
- would expect.
-
- * Currently `g77' disallows `READ(1'10)' since it is an obnoxious
- syntax, but supporting it might be pretty easy if needed. More
- details are needed, such as whether general expressions separated
- by an apostrophe are supported, or maybe the record number can be
- a general expression, and so on.
-
- * Support `STRUCTURE', `UNION', `MAP', and `RECORD' fully.
- Currently there is no support at all for `%FILL' in `STRUCTURE'
- and related syntax, whereas the rest of the stuff has at least
- some parsing support. This requires either major changes to
- `libf2c' or its replacement.
-
- * F90 and `g77' probably disagree about label scoping relative to
- `INTERFACE' and `END INTERFACE', and their contained procedure
- interface bodies (blocks?).
-
- * `ENTRY' doesn't support F90 `RESULT()' yet, since that was added
- after S8.112.
-
- * Empty-statement handling (10 ;;CONTINUE;;) probably isn't
- consistent with the final form of the standard (it was vague at
- S8.112).
-
- * It seems to be an "open" question whether a file, immediately
- after being `OPEN'ed,is positioned at the beginning, the end, or
- wherever--it might be nice to offer an option of opening to
- "undefined" status, requiring an explicit absolute-positioning
- operation to be performed before any other (besides `CLOSE') to
- assist in making applications port to systems (some IBM?) that
- `OPEN' to the end of a file or some such thing.
-
-
-File: g77.info, Node: Machine Model, Next: Internals Documentation, Prev: More Extensions, Up: Projects
-
-Machine Model
-=============
-
- This items pertain to generalizing `g77''s view of the machine model
-to more fully accept whatever the GBE provides it via its configuration.
-
- * Switch to using `REAL_VALUE_TYPE' to represent floating-point
- constants exclusively so the target float format need not be
- required. This means changing the way `g77' handles
- initialization of aggregate areas having more than one type, such
- as `REAL' and `INTEGER', because currently it initializes them as
- if they were arrays of `char' and uses the bit patterns of the
- constants of the various types in them to determine what to stuff
- in elements of the arrays.
-
- * Rely more and more on back-end info and capabilities, especially
- in the area of constants (where having the `g77' front-end's IL
- just store the appropriate tree nodes containing constants might
- be best).
-
- * Suite of C and Fortran programs that a user/administrator can run
- on a machine to help determine the configuration for `g77' before
- building and help determine if the compiler works (especially with
- whatever libraries are installed) after building.
-
-
-File: g77.info, Node: Internals Documentation, Next: Internals Improvements, Prev: Machine Model, Up: Projects
-
-Internals Documentation
-=======================
-
- Better info on how `g77' works and how to port it is needed. Much
-of this should be done only after the redesign planned for 0.6 is
-complete.
-
-
-File: g77.info, Node: Internals Improvements, Next: Better Diagnostics, Prev: Internals Documentation, Up: Projects
-
-Internals Improvements
-======================
-
- Some more items that would make `g77' more reliable and easier to
-maintain:
-
- * Generally make expression handling focus more on critical syntax
- stuff, leaving semantics to callers. For example, anything a
- caller can check, semantically, let it do so, rather than having
- `expr.c' do it. (Exceptions might include things like diagnosing
- `FOO(I--K:)=BAR' where `FOO' is a `PARAMETER'--if it seems
- important to preserve the left-to-right-in-source order of
- production of diagnostics.)
-
- * Come up with better naming conventions for `-D' to establish
- requirements to achieve desired implementation dialect via
- `proj.h'.
-
- * Clean up used tokens and `ffewhere's in `ffeglobal_terminate_1'.
-
- * Replace `sta.c' `outpooldisp' mechanism with `malloc_pool_use'.
-
- * Check for `opANY' in more places in `com.c', `std.c', and `ste.c',
- and get rid of the `opCONVERT(opANY)' kludge (after determining if
- there is indeed no real need for it).
-
- * Utility to read and check `bad.def' messages and their references
- in the code, to make sure calls are consistent with message
- templates.
-
- * Search and fix `&ffe...' and similar so that `ffe...ptr...' macros
- are available instead (a good argument for wishing this could have
- written all this stuff in C++, perhaps). On the other hand, it's
- questionable whether this sort of improvement is really necessary,
- given the availability of tools such as Emacs and Perl, which make
- finding any address-taking of structure members easy enough?
-
- * Some modules truly export the member names of their structures
- (and the structures themselves), maybe fix this, and fix other
- modules that just appear to as well (by appending `_', though it'd
- be ugly and probably not worth the time).
-
- * Implement C macros `RETURNS(value)' and `SETS(something,value)' in
- `proj.h' and use them throughout `g77' source code (especially in
- the definitions of access macros in `.h' files) so they can be
- tailored to catch code writing into a `RETURNS()' or reading from
- a `SETS()'.
-
- * Decorate throughout with `const' and other such stuff.
-
- * All F90 notational derivations in the source code are still based
- on the S8.112 version of the draft standard. Probably should
- update to the official standard, or put documentation of the rules
- as used in the code...uh...in the code.
-
- * Some `ffebld_new' calls (those outside of `ffeexpr.c' or inside
- but invoked via paths not involving `ffeexpr_lhs' or
- `ffeexpr_rhs') might be creating things in improper pools, leading
- to such things staying around too long or (doubtful, but possible
- and dangerous) not long enough.
-
- * Some `ffebld_list_new' (or whatever) calls might not be matched by
- `ffebld_list_bottom' (or whatever) calls, which might someday
- matter. (It definitely is not a problem just yet.)
-
- * Probably not doing clean things when we fail to `EQUIVALENCE'
- something due to alignment/mismatch or other problems--they end up
- without `ffestorag' objects, so maybe the backend (and other parts
- of the front end) can notice that and handle like an `opANY' (do
- what it wants, just don't complain or crash). Most of this seems
- to have been addressed by now, but a code review wouldn't hurt.
-
-
-File: g77.info, Node: Better Diagnostics, Prev: Internals Improvements, Up: Projects
-
-Better Diagnostics
-==================
-
- These are things users might not ask about, or that need to be
-looked into, before worrying about. Also here are items that involve
-reducing unnecessary diagnostic clutter.
-
- * When `FUNCTION' and `ENTRY' point types disagree (`CHARACTER'
- lengths, type classes, and so on), `ANY'-ize the offending `ENTRY'
- point and any *new* dummies it specifies.
-
- * Speed up and improve error handling for data when repeat-count is
- specified. For example, don't output 20 unnecessary messages
- after the first necessary one for:
-
- INTEGER X(20)
- CONTINUE
- DATA (X(I), J= 1, 20) /20*5/
- END
-
- (The `CONTINUE' statement ensures the `DATA' statement is
- processed in the context of executable, not specification,
- statements.)
-
-
-File: g77.info, Node: Diagnostics, Next: Index, Prev: Projects, Up: Top
-
-Diagnostics
-***********
-
- Some diagnostics produced by `g77' require sufficient explanation
-that the explanations are given below, and the diagnostics themselves
-identify the appropriate explanation.
-
- Identification uses the GNU Info format--specifically, the `info'
-command that displays the explanation is given in within square
-brackets in the diagnostic. For example:
-
- foo.f:5: Invalid statement [info -f g77 M FOOEY]
-
- More details about the above diagnostic is found in the `g77' Info
-documentation, menu item `M', submenu item `FOOEY', which is displayed
-by typing the UNIX command `info -f g77 M FOOEY'.
-
- Other Info readers, such as EMACS, may be just as easily used to
-display the pertinent node. In the above example, `g77' is the Info
-document name, `M' is the top-level menu item to select, and, in that
-node (named `Diagnostics', the name of this chapter, which is the very
-text you're reading now), `FOOEY' is the menu item to select.
-
-* Menu:
-
-* CMPAMBIG:: Ambiguous use of intrinsic.
-* EXPIMP:: Intrinsic used explicitly and implicitly.
-* INTGLOB:: Intrinsic also used as name of global.
-* LEX:: Various lexer messages
-* GLOBALS:: Disagreements about globals.
-
-
-File: g77.info, Node: CMPAMBIG, Next: EXPIMP, Up: Diagnostics
-
-`CMPAMBIG'
-==========
-
- Ambiguous use of intrinsic INTRINSIC ...
-
- The type of the argument to the invocation of the INTRINSIC
-intrinsic is a `COMPLEX' type other than `COMPLEX(KIND=1)'. Typically,
-it is `COMPLEX(KIND=2)', also known as `DOUBLE COMPLEX'.
-
- The interpretation of this invocation depends on the particular
-dialect of Fortran for which the code was written. Some dialects
-convert the real part of the argument to `REAL(KIND=1)', thus losing
-precision; other dialects, and Fortran 90, do no such conversion.
-
- So, GNU Fortran rejects such invocations except under certain
-circumstances, to avoid making an incorrect assumption that results in
-generating the wrong code.
-
- To determine the dialect of the program unit, perhaps even whether
-that particular invocation is properly coded, determine how the result
-of the intrinsic is used.
-
- The result of INTRINSIC is expected (by the original programmer) to
-be `REAL(KIND=1)' (the non-Fortran-90 interpretation) if:
-
- * It is passed as an argument to a procedure that explicitly or
- implicitly declares that argument `REAL(KIND=1)'.
-
- For example, a procedure with no `DOUBLE PRECISION' or `IMPLICIT
- DOUBLE PRECISION' statement specifying the dummy argument
- corresponding to an actual argument of `REAL(Z)', where `Z' is
- declared `DOUBLE COMPLEX', strongly suggests that the programmer
- expected `REAL(Z)' to return `REAL(KIND=1)' instead of
- `REAL(KIND=2)'.
-
- * It is used in a context that would otherwise not include any
- `REAL(KIND=2)' but where treating the INTRINSIC invocation as
- `REAL(KIND=2)' would result in unnecessary promotions and
- (typically) more expensive operations on the wider type.
-
- For example:
-
- DOUBLE COMPLEX Z
- ...
- R(1) = T * REAL(Z)
-
- The above example suggests the programmer expected the real part
- of `Z' to be converted to `REAL(KIND=1)' before being multiplied
- by `T' (presumed, along with `R' above, to be type `REAL(KIND=1)').
-
- Otherwise, the conversion would have to be delayed until after the
- multiplication, requiring not only an extra conversion (of `T' to
- `REAL(KIND=2)'), but a (typically) more expensive multiplication
- (a double-precision multiplication instead of a single-precision
- one).
-
- The result of INTRINSIC is expected (by the original programmer) to
-be `REAL(KIND=2)' (the Fortran 90 interpretation) if:
-
- * It is passed as an argument to a procedure that explicitly or
- implicitly declares that argument `REAL(KIND=2)'.
-
- For example, a procedure specifying a `DOUBLE PRECISION' dummy
- argument corresponding to an actual argument of `REAL(Z)', where
- `Z' is declared `DOUBLE COMPLEX', strongly suggests that the
- programmer expected `REAL(Z)' to return `REAL(KIND=2)' instead of
- `REAL(KIND=1)'.
-
- * It is used in an expression context that includes other
- `REAL(KIND=2)' operands, or is assigned to a `REAL(KIND=2)'
- variable or array element.
-
- For example:
-
- DOUBLE COMPLEX Z
- DOUBLE PRECISION R, T
- ...
- R(1) = T * REAL(Z)
-
- The above example suggests the programmer expected the real part
- of `Z' to *not* be converted to `REAL(KIND=1)' by the `REAL()'
- intrinsic.
-
- Otherwise, the conversion would have to be immediately followed by
- a conversion back to `REAL(KIND=2)', losing the original, full
- precision of the real part of `Z', before being multiplied by `T'.
-
- Once you have determined whether a particular invocation of INTRINSIC
-expects the Fortran 90 interpretation, you can:
-
- * Change it to `DBLE(EXPR)' (if INTRINSIC is `REAL') or
- `DIMAG(EXPR)' (if INTRINSIC is `AIMAG') if it expected the Fortran
- 90 interpretation.
-
- This assumes EXPR is `COMPLEX(KIND=2)'--if it is some other type,
- such as `COMPLEX*32', you should use the appropriate intrinsic,
- such as the one to convert to `REAL*16' (perhaps `DBLEQ()' in
- place of `DBLE()', and `QIMAG()' in place of `DIMAG()').
-
- * Change it to `REAL(INTRINSIC(EXPR))', otherwise. This converts to
- `REAL(KIND=1)' in all working Fortran compilers.
-
- If you don't want to change the code, and you are certain that all
-ambiguous invocations of INTRINSIC in the source file have the same
-expectation regarding interpretation, you can:
-
- * Compile with the `g77' option `-ff90', to enable the Fortran 90
- interpretation.
-
- * Compile with the `g77' options `-fno-f90 -fugly-complex', to
- enable the non-Fortran-90 interpretations.
-
- *Note REAL() and AIMAG() of Complex::, for more information on this
-issue.
-
- Note: If the above suggestions don't produce enough evidence as to
-whether a particular program expects the Fortran 90 interpretation of
-this ambiguous invocation of INTRINSIC, there is one more thing you can
-try.
-
- If you have access to most or all the compilers used on the program
-to create successfully tested and deployed executables, read the
-documentation for, and *also* test out, each compiler to determine how
-it treats the INTRINSIC intrinsic in this case. (If all the compilers
-don't agree on an interpretation, there might be lurking bugs in the
-deployed versions of the program.)
-
- The following sample program might help:
-
- PROGRAM JCB003
- C
- C Written by James Craig Burley 1997-02-23.
- C Contact via Internet email: burley@gnu.ai.mit.edu
- C
- C Determine how compilers handle non-standard REAL
- C and AIMAG on DOUBLE COMPLEX operands.
- C
- DOUBLE COMPLEX Z
- REAL R
- Z = (3.3D0, 4.4D0)
- R = Z
- CALL DUMDUM(Z, R)
- R = REAL(Z) - R
- IF (R .NE. 0.) PRINT *, 'REAL() is Fortran 90'
- IF (R .EQ. 0.) PRINT *, 'REAL() is not Fortran 90'
- R = 4.4D0
- CALL DUMDUM(Z, R)
- R = AIMAG(Z) - R
- IF (R .NE. 0.) PRINT *, 'AIMAG() is Fortran 90'
- IF (R .EQ. 0.) PRINT *, 'AIMAG() is not Fortran 90'
- END
- C
- C Just to make sure compiler doesn't use naive flow
- C analysis to optimize away careful work above,
- C which might invalidate results....
- C
- SUBROUTINE DUMDUM(Z, R)
- DOUBLE COMPLEX Z
- REAL R
- END
-
- If the above program prints contradictory results on a particular
-compiler, run away!
-
diff --git a/gcc/f/g77.info-19 b/gcc/f/g77.info-19
deleted file mode 100644
index a75f2f2d988..00000000000
--- a/gcc/f/g77.info-19
+++ /dev/null
@@ -1,296 +0,0 @@
-This is Info file g77.info, produced by Makeinfo version 1.68 from the
-input file g77.texi.
-
- This file explains how to use the GNU Fortran system.
-
- Published by the Free Software Foundation 59 Temple Place - Suite 330
-Boston, MA 02111-1307 USA
-
- Copyright (C) 1995-1997 Free Software Foundation, Inc.
-
- Permission is granted to make and distribute verbatim copies of this
-manual provided the copyright notice and this permission notice are
-preserved on all copies.
-
- Permission is granted to copy and distribute modified versions of
-this manual under the conditions for verbatim copying, provided also
-that the sections entitled "GNU General Public License," "Funding for
-Free Software," and "Protect Your Freedom--Fight `Look And Feel'" are
-included exactly as in the original, and provided that the entire
-resulting derived work is distributed under the terms of a permission
-notice identical to this one.
-
- Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that the sections entitled "GNU General Public
-License," "Funding for Free Software," and "Protect Your Freedom--Fight
-`Look And Feel'", and this permission notice, may be included in
-translations approved by the Free Software Foundation instead of in the
-original English.
-
- Contributed by James Craig Burley (<burley@gnu.ai.mit.edu>).
-Inspired by a first pass at translating `g77-0.5.16/f/DOC' that was
-contributed to Craig by David Ronis (<ronis@onsager.chem.mcgill.ca>).
-
-INFO-DIR-SECTION Fortran Programming
-START-INFO-DIR-ENTRY
-* g77: (g77). The GNU Fortran compilation system.
-END-INFO-DIR-ENTRY
-
-
-File: g77.info, Node: EXPIMP, Next: INTGLOB, Prev: CMPAMBIG, Up: Diagnostics
-
-`EXPIMP'
-========
-
- Intrinsic INTRINSIC referenced ...
-
- The INTRINSIC is explicitly declared in one program unit in the
-source file and implicitly used as an intrinsic in another program unit
-in the same source file.
-
- This diagnostic is designed to catch cases where a program might
-depend on using the name INTRINSIC as an intrinsic in one program unit
-and as a global name (such as the name of a subroutine or function) in
-another, but `g77' recognizes the name as an intrinsic in both cases.
-
- After verifying that the program unit making implicit use of the
-intrinsic is indeed written expecting the intrinsic, add an `INTRINSIC
-INTRINSIC' statement to that program unit to prevent this warning.
-
- This and related warnings are disabled by using the `-Wno-globals'
-option when compiling.
-
- Note that this warning is not issued for standard intrinsics.
-Standard intrinsics include those described in the FORTRAN 77 standard
-and, if `-ff90' is specified, those described in the Fortran 90
-standard. Such intrinsics are not as likely to be confused with user
-procedures as intrinsics provided as extensions to the standard by
-`g77'.
-
-
-File: g77.info, Node: INTGLOB, Next: LEX, Prev: EXPIMP, Up: Diagnostics
-
-`INTGLOB'
-=========
-
- Same name `INTRINSIC' given ...
-
- The name INTRINSIC is used for a global entity (a common block or a
-program unit) in one program unit and implicitly used as an intrinsic
-in another program unit.
-
- This diagnostic is designed to catch cases where a program intends
-to use a name entirely as a global name, but `g77' recognizes the name
-as an intrinsic in the program unit that references the name, a
-situation that would likely produce incorrect code.
-
- For example:
-
- INTEGER FUNCTION TIME()
- ...
- END
- ...
- PROGRAM SAMP
- INTEGER TIME
- PRINT *, 'Time is ', TIME()
- END
-
- The above example defines a program unit named `TIME', but the
-reference to `TIME' in the main program unit `SAMP' is normally treated
-by `g77' as a reference to the intrinsic `TIME()' (unless a
-command-line option that prevents such treatment has been specified).
-
- As a result, the program `SAMP' will *not* invoke the `TIME'
-function in the same source file.
-
- Since `g77' recognizes `libU77' procedures as intrinsics, and since
-some existing code uses the same names for its own procedures as used
-by some `libU77' procedures, this situation is expected to arise often
-enough to make this sort of warning worth issuing.
-
- After verifying that the program unit making implicit use of the
-intrinsic is indeed written expecting the intrinsic, add an `INTRINSIC
-INTRINSIC' statement to that program unit to prevent this warning.
-
- Or, if you believe the program unit is designed to invoke the
-program-defined procedure instead of the intrinsic (as recognized by
-`g77'), add an `EXTERNAL INTRINSIC' statement to the program unit that
-references the name to prevent this warning.
-
- This and related warnings are disabled by using the `-Wno-globals'
-option when compiling.
-
- Note that this warning is not issued for standard intrinsics.
-Standard intrinsics include those described in the FORTRAN 77 standard
-and, if `-ff90' is specified, those described in the Fortran 90
-standard. Such intrinsics are not as likely to be confused with user
-procedures as intrinsics provided as extensions to the standard by
-`g77'.
-
-
-File: g77.info, Node: LEX, Next: GLOBALS, Prev: INTGLOB, Up: Diagnostics
-
-`LEX'
-=====
-
- Unrecognized character ...
- Invalid first character ...
- Line too long ...
- Non-numeric character ...
- Continuation indicator ...
- Label at ... invalid with continuation line indicator ...
- Character constant ...
- Continuation line ...
- Statement at ... begins with invalid token
-
- Although the diagnostics identify specific problems, they can be
-produced when general problems such as the following occur:
-
- * The source file contains something other than Fortran code.
-
- If the code in the file does not look like many of the examples
- elsewhere in this document, it might not be Fortran code. (Note
- that Fortran code often is written in lower case letters, while
- the examples in this document use upper case letters, for
- stylistic reasons.)
-
- For example, if the file contains lots of strange-looking
- characters, it might be APL source code; if it contains lots of
- parentheses, it might be Lisp source code; if it contains lots of
- bugs, it might be C++ source code.
-
- * The source file contains free-form Fortran code, but `-ffree-form'
- was not specified on the command line to compile it.
-
- Free form is a newer form for Fortran code. The older, classic
- form is called fixed form.
-
- Fixed-form code is visually fairly distinctive, because numerical
- labels and comments are all that appear in the first five columns
- of a line, the sixth column is reserved to denote continuation
- lines, and actual statements start at or beyond column 7. Spaces
- generally are not significant, so if you see statements such as
- `REALX,Y' and `DO10I=1,100', you are looking at fixed-form code.
- Comment lines are indicated by the letter `C' or the symbol `*' in
- column 1. (Some code uses `!' or `/*' to begin in-line comments,
- which many compilers support.)
-
- Free-form code is distinguished from fixed-form source primarily
- by the fact that statements may start anywhere. (If lots of
- statements start in columns 1 through 6, that's a strong indicator
- of free-form source.) Consecutive keywords must be separated by
- spaces, so `REALX,Y' is not valid, while `REAL X,Y' is. There are
- no comment lines per se, but `!' starts a comment anywhere in a
- line (other than within a character or hollerith constant).
-
- *Note Source Form::, for more information.
-
- * The source file is in fixed form and has been edited without
- sensitivity to the column requirements.
-
- Statements in fixed-form code must be entirely contained within
- columns 7 through 72 on a given line. Starting them "early" is
- more likely to result in diagnostics than finishing them "late",
- though both kinds of errors are often caught at compile time.
-
- For example, if the following code fragment is edited by following
- the commented instructions literally, the result, shown afterward,
- would produce a diagnostic when compiled:
-
- C On XYZZY systems, remove "C" on next line:
- C CALL XYZZY_RESET
-
- The result of editing the above line might be:
-
- C On XYZZY systems, remove "C" on next line:
- CALL XYZZY_RESET
-
- However, that leaves the first `C' in the `CALL' statement in
- column 6, making it a comment line, which is not really what the
- author intended, and which is likely to result in one of the
- above-listed diagnostics.
-
- *Replacing* the `C' in column 1 with a space is the proper change
- to make, to ensure the `CALL' keyword starts in or after column 7.
-
- Another common mistake like this is to forget that fixed-form
- source lines are significant through only column 72, and that,
- normally, any text beyond column 72 is ignored or is diagnosed at
- compile time.
-
- *Note Source Form::, for more information.
-
- * The source file requires preprocessing, and the preprocessing is
- not being specified at compile time.
-
- A source file containing lines beginning with `#define',
- `#include', `#if', and so on is likely one that requires
- preprocessing.
-
- If the file's suffix is `.f' or `.for', the file will normally be
- compiled *without* preprocessing by `g77'.
-
- Change the file's suffix from `.f' to `.F' (or, on systems with
- case-insensitive file names, to `.fpp') or from `.for' to `.fpp'.
- `g77' compiles files with such names *with* preprocessing.
-
- Or, learn how to use `gcc''s `-x' option to specify the language
- `f77-cpp-input' for Fortran files that require preprocessing.
- *Note gcc: (Using and Porting GNU CC)Overall Options.
-
- * The source file is preprocessed, and the results of preprocessing
- result in syntactic errors that are not necessarily obvious to
- someone examining the source file itself.
-
- Examples of errors resulting from preprocessor macro expansion
- include exceeding the line-length limit, improperly starting,
- terminating, or incorporating the apostrophe or double-quote in a
- character constant, improperly forming a hollerith constant, and
- so on.
-
- *Note Options Controlling the Kind of Output: Overall Options, for
- suggestions about how to use, and not use, preprocessing for
- Fortran code.
-
-
-File: g77.info, Node: GLOBALS, Prev: LEX, Up: Diagnostics
-
-`GLOBALS'
-=========
-
- Global name NAME defined at ... already defined...
- Global name NAME at ... has different type...
- Too many arguments passed to NAME at ...
- Too few arguments passed to NAME at ...
- Argument #N of NAME is ...
-
- These messages all identify disagreements about the global procedure
-named NAME among different program units (usually including NAME
-itself).
-
- These disagreements, if not diagnosed, could result in a compiler
-crash if the compiler attempted to inline a reference to NAME within a
-calling program unit that disagreed with the NAME program unit
-regarding whether the procedure is a subroutine or function, the type
-of the return value of the procedure (if it is a function), the number
-of arguments the procedure accepts, or the type of each argument.
-
- Such disagreements *should* be fixed in the Fortran code itself.
-However, if that is not immediately practical, and the code has been
-working for some time, it is possible it will work when compiled by
-`g77' with the `-fno-globals' option.
-
- The `-fno-globals' option disables these diagnostics, and also
-disables all inlining of references to global procedures to avoid
-compiler crashes. The diagnostics are actually produced, but as
-warnings, unless the `-Wno-globals' option also is specified.
-
- After using `-fno-globals' to work around these problems, it is wise
-to stop using that option and address them by fixing the Fortran code,
-because such problems, while they might not actually result in bugs on
-some systems, indicate that the code is not as portable as it could be.
-In particular, the code might appear to work on a particular system,
-but have bugs that affect the reliability of the data without
-exhibiting any other outward manifestations of the bugs.
-
diff --git a/gcc/f/g77.info-2 b/gcc/f/g77.info-2
deleted file mode 100644
index 191b4c8d0e8..00000000000
--- a/gcc/f/g77.info-2
+++ /dev/null
@@ -1,968 +0,0 @@
-This is Info file g77.info, produced by Makeinfo version 1.68 from the
-input file g77.texi.
-
- This file explains how to use the GNU Fortran system.
-
- Published by the Free Software Foundation 59 Temple Place - Suite 330
-Boston, MA 02111-1307 USA
-
- Copyright (C) 1995-1997 Free Software Foundation, Inc.
-
- Permission is granted to make and distribute verbatim copies of this
-manual provided the copyright notice and this permission notice are
-preserved on all copies.
-
- Permission is granted to copy and distribute modified versions of
-this manual under the conditions for verbatim copying, provided also
-that the sections entitled "GNU General Public License," "Funding for
-Free Software," and "Protect Your Freedom--Fight `Look And Feel'" are
-included exactly as in the original, and provided that the entire
-resulting derived work is distributed under the terms of a permission
-notice identical to this one.
-
- Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that the sections entitled "GNU General Public
-License," "Funding for Free Software," and "Protect Your Freedom--Fight
-`Look And Feel'", and this permission notice, may be included in
-translations approved by the Free Software Foundation instead of in the
-original English.
-
- Contributed by James Craig Burley (<burley@gnu.ai.mit.edu>).
-Inspired by a first pass at translating `g77-0.5.16/f/DOC' that was
-contributed to Craig by David Ronis (<ronis@onsager.chem.mcgill.ca>).
-
-INFO-DIR-SECTION Fortran Programming
-START-INFO-DIR-ENTRY
-* g77: (g77). The GNU Fortran compilation system.
-END-INFO-DIR-ENTRY
-
-
-File: g77.info, Node: Overall Options, Next: Shorthand Options, Prev: Option Summary, Up: Invoking G77
-
-Options Controlling the Kind of Output
-======================================
-
- Compilation can involve as many as four stages: preprocessing, code
-generation (often what is really meant by the term "compilation"),
-assembly, and linking, always in that order. The first three stages
-apply to an individual source file, and end by producing an object
-file; linking combines all the object files (those newly compiled, and
-those specified as input) into an executable file.
-
- For any given input file, the file name suffix determines what kind
-of program is contained in the file--that is, the language in which the
-program is written is generally indicated by the suffix. Suffixes
-specific to GNU Fortran are listed below. *Note gcc: (Using and
-Porting GNU CC)Overall Options, for information on suffixes recognized
-by GNU CC.
-
-`FILE.f'
-
-`FILE.for'
- Fortran source code that should not be preprocessed.
-
- Such source code cannot contain any preprocessor directives, such
- as `#include', `#define', `#if', and so on.
-
-`FILE.F'
-
-`FILE.fpp'
- Fortran source code that must be preprocessed (by the C
- preprocessor `cpp', which is part of GNU CC).
-
- Note that preprocessing is not extended to the contents of files
- included by the `INCLUDE' directive--the `#include' preprocessor
- directive must be used instead.
-
-`FILE.r'
- Ratfor source code, which must be preprocessed by the `ratfor'
- command, which is available separately (as it is not yet part of
- the GNU Fortran distribution).
-
- UNIX users typically use the `FILE.f' and `FILE.F' nomenclature.
-Users of other operating systems, especially those that cannot
-distinguish upper-case letters from lower-case letters in their file
-names, typically use the `FILE.for' and `FILE.fpp' nomenclature.
-
- Use of the preprocessor `cpp' allows use of C-like constructs such
-as `#define' and `#include', but can lead to unexpected, even mistaken,
-results due to Fortran's source file format. It is recommended that
-use of the C preprocessor be limited to `#include' and, in conjunction
-with `#define', only `#if' and related directives, thus avoiding
-in-line macro expansion entirely. This recommendation applies
-especially when using the traditional fixed source form. With free
-source form, fewer unexpected transformations are likely to happen, but
-use of constructs such as Hollerith and character constants can
-nevertheless present problems, especially when these are continued
-across multiple source lines. These problems result, primarily, from
-differences between the way such constants are interpreted by the C
-preprocessor and by a Fortran compiler.
-
- Another example of a problem that results from using the C
-preprocessor is that a Fortran comment line that happens to contain any
-characters "interesting" to the C preprocessor, such as a backslash at
-the end of the line, is not recognized by the preprocessor as a comment
-line, so instead of being passed through "raw", the line is edited
-according to the rules for the preprocessor. For example, the
-backslash at the end of the line is removed, along with the subsequent
-newline, resulting in the next line being effectively commented
-out--unfortunate if that line is a non-comment line of important code!
-
- *Note:* The `-traditional' and `-undef' flags are supplied to `cpp'
-by default, to avoid unpleasant surprises. *Note Options Controlling
-the Preprocessor: (gcc)Preprocessor Options. This means that ANSI C
-preprocessor features (such as the `#' operator) aren't available, and
-only variables in the C reserved namespace (generally, names with a
-leading underscore) are liable to substitution by C predefines. Thus,
-if you want to do system-specific tests, use, for example, `#ifdef
-__linux__' rather than `#ifdef linux'. Use the `-v' option to see
-exactly how the preprocessor is invoked.
-
- The following options that affect overall processing are recognized
-by the `g77' and `gcc' commands in a GNU Fortran installation:
-
-`--driver=COMMAND'
- This works when invoking only the `g77' command, not when invoking
- the `gcc' command. *Note GNU Fortran Command Options: Invoking
- G77, for information on this option.
-
-`-fversion'
- Ensure that the `g77'-specific version of the compiler phase is
- reported, if run. (This is supplied automatically when `-v' or
- `--verbose' is specified as a command-line option for `g77' or
- `gcc' and when the resulting commands compile Fortran source
- files.)
-
-`-fset-g77-defaults'
- Set up whatever `gcc' options are to apply to Fortran
- compilations, and avoid running internal consistency checks that
- might take some time.
-
- As of version 0.5.20, this is equivalent to `-fmove-all-movables
- -freduce-all-givs -frerun-loop-opt -fargument-noalias-global'.
-
- This option is supplied automatically when compiling Fortran code
- via the `g77' or `gcc' command. The description of this option is
- provided so that users seeing it in the output of, say, `g77 -v'
- understand why it is there.
-
- Also, developers who run `f771' directly might want to specify it
- by hand to get the same defaults as they would running `f771' via
- `g77' or `gcc'. However, such developers should, after linking a
- new `f771' executable, invoke it without this option once, e.g.
- via `./f771 -quiet < /dev/null', to ensure that they have not
- introduced any internal inconsistencies (such as in the table of
- intrinsics) before proceeding--`g77' will crash with a diagnostic
- if it detects an inconsistency.
-
-`-fno-silent'
- Print (to `stderr') the names of the program units as they are
- compiled, in a form similar to that used by popular UNIX `f77'
- implementations and `f2c'.
-
- *Note Options Controlling the Kind of Output: (gcc)Overall Options,
-for information on more options that control the overall operation of
-the `gcc' command (and, by extension, the `g77' command).
-
-
-File: g77.info, Node: Shorthand Options, Next: Fortran Dialect Options, Prev: Overall Options, Up: Invoking G77
-
-Shorthand Options
-=================
-
- The following options serve as "shorthand" for other options
-accepted by the compiler:
-
-`-fugly'
- Specify that certain "ugly" constructs are to be quietly accepted.
- Same as:
-
- -fugly-args -fugly-assign -fugly-assumed
- -fugly-comma -fugly-complex -fugly-init
- -fugly-logint
-
- These constructs are considered inappropriate to use in new or
- well-maintained portable Fortran code, but widely used in old code.
- *Note Distensions::, for more information.
-
- *Note:* The `-fugly' option is likely to be removed in a future
- version. Implicitly enabling all the `-fugly-*' options is
- unlikely to be feasible, or sensible, in the future, so users
- should learn to specify only those `-fugly-*' options they really
- need for a particular source file.
-
-`-fno-ugly'
- Specify that all "ugly" constructs are to be noisily rejected.
- Same as:
-
- -fno-ugly-args -fno-ugly-assign -fno-ugly-assumed
- -fno-ugly-comma -fno-ugly-complex -fno-ugly-init
- -fno-ugly-logint
-
- *Note Distensions::, for more information.
-
-`-ff66'
- Specify that the program is written in idiomatic FORTRAN 66. Same
- as `-fonetrip -fugly-assumed'.
-
- The `-fno-f66' option is the inverse of `-ff66'. As such, it is
- the same as `-fno-onetrip -fno-ugly-assumed'.
-
- The meaning of this option is likely to be refined as future
- versions of `g77' provide more compatibility with other existing
- and obsolete Fortran implementations.
-
-`-ff77'
- Specify that the program is written in idiomatic UNIX FORTRAN 77
- and/or the dialect accepted by the `f2c' product. Same as
- `-fbackslash -fno-typeless-boz'.
-
- The meaning of this option is likely to be refined as future
- versions of `g77' provide more compatibility with other existing
- and obsolete Fortran implementations.
-
-`-fno-f77'
- The `-fno-f77' option is *not* the inverse of `-ff77'. It
- specifies that the program is not written in idiomatic UNIX
- FORTRAN 77 or `f2c', but in a more widely portable dialect.
- `-fno-f77' is the same as `-fno-backslash'.
-
- The meaning of this option is likely to be refined as future
- versions of `g77' provide more compatibility with other existing
- and obsolete Fortran implementations.
-
-
-File: g77.info, Node: Fortran Dialect Options, Next: Warning Options, Prev: Shorthand Options, Up: Invoking G77
-
-Options Controlling Fortran Dialect
-===================================
-
- The following options control the dialect of Fortran that the
-compiler accepts:
-
-`-ffree-form'
-
-`-fno-fixed-form'
- Specify that the source file is written in free form (introduced
- in Fortran 90) instead of the more-traditional fixed form.
-
-`-ff90'
- Allow certain Fortran-90 constructs.
-
- This option controls whether certain Fortran 90 constructs are
- recognized. (Other Fortran 90 constructs might or might not be
- recognized depending on other options such as `-fvxt',
- `-ff90-intrinsics-enable', and the current level of support for
- Fortran 90.)
-
- *Note Fortran 90::, for more information.
-
-`-fvxt'
- Specify the treatment of certain constructs that have different
- meanings depending on whether the code is written in GNU Fortran
- (based on FORTRAN 77 and akin to Fortran 90) or VXT Fortran (more
- like VAX FORTRAN).
-
- The default is `-fno-vxt'. `-fvxt' specifies that the VXT Fortran
- interpretations for those constructs are to be chosen.
-
- *Note VXT Fortran::, for more information.
-
-`-fdollar-ok'
- Allow `$' as a valid character in a symbol name.
-
-`-fno-backslash'
- Specify that `\' is not to be specially interpreted in character
- and Hollerith constants a la C and many UNIX Fortran compilers.
-
- For example, with `-fbackslash' in effect, `A\nB' specifies three
- characters, with the second one being newline. With
- `-fno-backslash', it specifies four characters, `A', `\', `n', and
- `B'.
-
- Note that `g77' implements a fairly general form of backslash
- processing that is incompatible with the narrower forms supported
- by some other compilers. For example, `'A\003B'' is a
- three-character string in `g77', whereas other compilers that
- support backslash might not support the three-octal-digit form,
- and thus treat that string as longer than three characters.
-
- *Note Backslash in Constants::, for information on why
- `-fbackslash' is the default instead of `-fno-backslash'.
-
-`-fno-ugly-args'
- Disallow passing Hollerith and typeless constants as actual
- arguments (for example, `CALL FOO(4HABCD)').
-
- *Note Ugly Implicit Argument Conversion::, for more information.
-
-`-fugly-assign'
- Use the same storage for a given variable regardless of whether it
- is used to hold an assigned-statement label (as in `ASSIGN 10 TO
- I') or used to hold numeric data (as in `I = 3').
-
- *Note Ugly Assigned Labels::, for more information.
-
-`-fugly-assumed'
- Assume any dummy array with a final dimension specified as `1' is
- really an assumed-size array, as if `*' had been specified for the
- final dimension instead of `1'.
-
- For example, `DIMENSION X(1)' is treated as if it had read
- `DIMENSION X(*)'.
-
- *Note Ugly Assumed-Size Arrays::, for more information.
-
-`-fugly-comma'
- Treat a trailing comma in an argument list as specification of a
- trailing null argument, and treat an empty argument list as
- specification of a single null argument.
-
- For example, `CALL FOO(,)' is treated as `CALL FOO(%VAL(0),
- %VAL(0))'. That is, *two* null arguments are specified by the
- procedure call when `-fugly-comma' is in force. And `F = FUNC()'
- is treated as `F = FUNC(%VAL(0))'.
-
- The default behavior, `-fno-ugly-comma', is to ignore a single
- trailing comma in an argument list.
-
- *Note Ugly Null Arguments::, for more information.
-
-`-fugly-complex'
- Do not complain about `REAL(EXPR)' or `AIMAG(EXPR)' when EXPR is a
- `COMPLEX' type other than `COMPLEX(KIND=1)'--usually this is used
- to permit `COMPLEX(KIND=2)' (`DOUBLE COMPLEX') operands.
-
- The `-ff90' option controls the interpretation of this construct.
-
- *Note Ugly Complex Part Extraction::, for more information.
-
-`-fno-ugly-init'
- Disallow use of Hollerith and typeless constants as initial values
- (in `PARAMETER' and `DATA' statements), and use of character
- constants to initialize numeric types and vice versa.
-
- For example, `DATA I/'F'/, CHRVAR/65/, J/4HABCD/' is disallowed by
- `-fno-ugly-init'.
-
- *Note Ugly Conversion of Initializers::, for more information.
-
-`-fugly-logint'
- Treat `INTEGER' and `LOGICAL' variables and expressions as
- potential stand-ins for each other.
-
- For example, automatic conversion between `INTEGER' and `LOGICAL'
- is enabled, for many contexts, via this option.
-
- *Note Ugly Integer Conversions::, for more information.
-
-`-fonetrip'
- Imperative executable `DO' loops are to be executed at least once
- each time they are reached.
-
- ANSI FORTRAN 77 and more recent versions of the Fortran standard
- specify that the body of an imperative `DO' loop is not executed
- if the number of iterations calculated from the parameters of the
- loop is less than 1. (For example, `DO 10 I = 1, 0'.) Such a
- loop is called a "zero-trip loop".
-
- Prior to ANSI FORTRAN 77, many compilers implemented `DO' loops
- such that the body of a loop would be executed at least once, even
- if the iteration count was zero. Fortran code written assuming
- this behavior is said to require "one-trip loops". For example,
- some code written to the FORTRAN 66 standard expects this behavior
- from its `DO' loops, although that standard did not specify this
- behavior.
-
- The `-fonetrip' option specifies that the source file(s) being
- compiled require one-trip loops.
-
- This option affects only those loops specified by the (imperative)
- `DO' statement and by implied-`DO' lists in I/O statements. Loops
- specified by implied-`DO' lists in `DATA' and specification
- (non-executable) statements are not affected.
-
-`-ftypeless-boz'
- Specifies that prefix-radix non-decimal constants, such as
- `Z'ABCD'', are typeless instead of `INTEGER(KIND=1)'.
-
- You can test for yourself whether a particular compiler treats the
- prefix form as `INTEGER(KIND=1)' or typeless by running the
- following program:
-
- EQUIVALENCE (I, R)
- R = Z'ABCD1234'
- J = Z'ABCD1234'
- IF (J .EQ. I) PRINT *, 'Prefix form is TYPELESS'
- IF (J .NE. I) PRINT *, 'Prefix form is INTEGER'
- END
-
- Reports indicate that many compilers process this form as
- `INTEGER(KIND=1)', though a few as typeless, and at least one
- based on a command-line option specifying some kind of
- compatibility.
-
-`-fintrin-case-initcap'
-
-`-fintrin-case-upper'
-
-`-fintrin-case-lower'
-
-`-fintrin-case-any'
- Specify expected case for intrinsic names. `-fintrin-case-lower'
- is the default.
-
-`-fmatch-case-initcap'
-
-`-fmatch-case-upper'
-
-`-fmatch-case-lower'
-
-`-fmatch-case-any'
- Specify expected case for keywords. `-fmatch-case-lower' is the
- default.
-
-`-fsource-case-upper'
-
-`-fsource-case-lower'
-
-`-fsource-case-preserve'
- Specify whether source text other than character and Hollerith
- constants is to be translated to uppercase, to lowercase, or
- preserved as is. `-fsource-case-lower' is the default.
-
-`-fsymbol-case-initcap'
-
-`-fsymbol-case-upper'
-
-`-fsymbol-case-lower'
-
-`-fsymbol-case-any'
- Specify valid cases for user-defined symbol names.
- `-fsymbol-case-any' is the default.
-
-`-fcase-strict-upper'
- Same as `-fintrin-case-upper -fmatch-case-upper
- -fsource-case-preserve -fsymbol-case-upper'. (Requires all
- pertinent source to be in uppercase.)
-
-`-fcase-strict-lower'
- Same as `-fintrin-case-lower -fmatch-case-lower
- -fsource-case-preserve -fsymbol-case-lower'. (Requires all
- pertinent source to be in lowercase.)
-
-`-fcase-initcap'
- Same as `-fintrin-case-initcap -fmatch-case-initcap
- -fsource-case-preserve -fsymbol-case-initcap'. (Requires all
- pertinent source to be in initial capitals, as in `Print
- *,SqRt(Value)'.)
-
-`-fcase-upper'
- Same as `-fintrin-case-any -fmatch-case-any -fsource-case-upper
- -fsymbol-case-any'. (Maps all pertinent source to uppercase.)
-
-`-fcase-lower'
- Same as `-fintrin-case-any -fmatch-case-any -fsource-case-lower
- -fsymbol-case-any'. (Maps all pertinent source to lowercase.)
-
-`-fcase-preserve'
- Same as `-fintrin-case-any -fmatch-case-any -fsource-case-preserve
- -fsymbol-case-any'. (Preserves all case in user-defined symbols,
- while allowing any-case matching of intrinsics and keywords. For
- example, `call Foo(i,I)' would pass two *different* variables
- named `i' and `I' to a procedure named `Foo'.)
-
-`-ff2c-intrinsics-delete'
-
-`-ff2c-intrinsics-hide'
-
-`-ff2c-intrinsics-disable'
-
-`-ff2c-intrinsics-enable'
- Specify status of f2c-specific intrinsics.
- `-ff2c-intrinsics-enable' is the default.
-
-`-ff90-intrinsics-delete'
-
-`-ff90-intrinsics-hide'
-
-`-ff90-intrinsics-disable'
-
-`-ff90-intrinsics-enable'
- Specify status of F90-specific intrinsics.
- `-ff90-intrinsics-enable' is the default.
-
-`-fgnu-intrinsics-delete'
-
-`-fgnu-intrinsics-hide'
-
-`-fgnu-intrinsics-disable'
-
-`-fgnu-intrinsics-enable'
- Specify status of Digital's COMPLEX-related intrinsics.
- `-fgnu-intrinsics-enable' is the default.
-
-`-fmil-intrinsics-delete'
-
-`-fmil-intrinsics-hide'
-
-`-fmil-intrinsics-disable'
-
-`-fmil-intrinsics-enable'
- Specify status of MIL-STD-1753-specific intrinsics.
- `-fmil-intrinsics-enable' is the default.
-
-`-funix-intrinsics-delete'
-
-`-funix-intrinsics-hide'
-
-`-funix-intrinsics-disable'
-
-`-funix-intrinsics-enable'
- Specify status of UNIX intrinsics. `-funix-intrinsics-enable' is
- the default.
-
-`-fvxt-intrinsics-delete'
-
-`-fvxt-intrinsics-hide'
-
-`-fvxt-intrinsics-disable'
-
-`-fvxt-intrinsics-enable'
- Specify status of VXT intrinsics. `-fvxt-intrinsics-enable' is
- the default.
-
-`-ffixed-line-length-N'
- Set column after which characters are ignored in typical fixed-form
- lines in the source file, and through which spaces are assumed (as
- if padded to that length) after the ends of short fixed-form lines.
-
- Popular values for N include 72 (the standard and the default), 80
- (card image), and 132 (corresponds to "extended-source" options in
- some popular compilers). N may be `none', meaning that the entire
- line is meaningful and that continued character constants never
- have implicit spaces appended to them to fill out the line.
- `-ffixed-line-length-0' means the same thing as
- `-ffixed-line-length-none'.
-
- *Note Source Form::, for more information.
-
-
-File: g77.info, Node: Warning Options, Next: Debugging Options, Prev: Fortran Dialect Options, Up: Invoking G77
-
-Options to Request or Suppress Warnings
-=======================================
-
- Warnings are diagnostic messages that report constructions which are
-not inherently erroneous but which are risky or suggest there might
-have been an error.
-
- You can request many specific warnings with options beginning `-W',
-for example `-Wimplicit' to request warnings on implicit declarations.
-Each of these specific warning options also has a negative form
-beginning `-Wno-' to turn off warnings; for example, `-Wno-implicit'.
-This manual lists only one of the two forms, whichever is not the
-default.
-
- These options control the amount and kinds of warnings produced by
-GNU Fortran:
-
-`-fsyntax-only'
- Check the code for syntax errors, but don't do anything beyond
- that.
-
-`-pedantic'
- Issue warnings for uses of extensions to ANSI FORTRAN 77.
- `-pedantic' also applies to C-language constructs where they occur
- in GNU Fortran source files, such as use of `\e' in a character
- constant within a directive like `#include'.
-
- Valid ANSI FORTRAN 77 programs should compile properly with or
- without this option. However, without this option, certain GNU
- extensions and traditional Fortran features are supported as well.
- With this option, many of them are rejected.
-
- Some users try to use `-pedantic' to check programs for strict ANSI
- conformance. They soon find that it does not do quite what they
- want--it finds some non-ANSI practices, but not all. However,
- improvements to `g77' in this area are welcome.
-
-`-pedantic-errors'
- Like `-pedantic', except that errors are produced rather than
- warnings.
-
-`-fpedantic'
- Like `-pedantic', but applies only to Fortran constructs.
-
-`-w'
- Inhibit all warning messages.
-
-`-Wno-globals'
- Inhibit warnings about use of a name as both a global name (a
- subroutine, function, or block data program unit, or a common
- block) and implicitly as the name of an intrinsic in a source file.
-
- Also inhibit warnings about inconsistent invocations and/or
- definitions of global procedures (function and subroutines). Such
- inconsistencies include different numbers of arguments and
- different types of arguments.
-
-`-Wimplicit'
- Warn whenever a variable, array, or function is implicitly
- declared. Has an effect similar to using the `IMPLICIT NONE'
- statement in every program unit. (Some Fortran compilers provide
- this feature by an option named `-u' or `/WARNINGS=DECLARATIONS'.)
-
-`-Wunused'
- Warn whenever a variable is unused aside from its declaration.
-
-`-Wuninitialized'
- Warn whenever an automatic variable is used without first being
- initialized.
-
- These warnings are possible only in optimizing compilation,
- because they require data-flow information that is computed only
- when optimizing. If you don't specify `-O', you simply won't get
- these warnings.
-
- These warnings occur only for variables that are candidates for
- register allocation. Therefore, they do not occur for a variable
- whose address is taken, or whose size is other than 1, 2, 4 or 8
- bytes. Also, they do not occur for arrays, even when they are in
- registers.
-
- Note that there might be no warning about a variable that is used
- only to compute a value that itself is never used, because such
- computations may be deleted by data-flow analysis before the
- warnings are printed.
-
- These warnings are made optional because GNU Fortran is not smart
- enough to see all the reasons why the code might be correct
- despite appearing to have an error. Here is one example of how
- this can happen:
-
- SUBROUTINE DISPAT(J)
- IF (J.EQ.1) I=1
- IF (J.EQ.2) I=4
- IF (J.EQ.3) I=5
- CALL FOO(I)
- END
-
- If the value of `J' is always 1, 2 or 3, then `I' is always
- initialized, but GNU Fortran doesn't know this. Here is another
- common case:
-
- SUBROUTINE MAYBE(FLAG)
- LOGICAL FLAG
- IF (FLAG) VALUE = 9.4
- ...
- IF (FLAG) PRINT *, VALUE
- END
-
- This has no bug because `VALUE' is used only if it is set.
-
-`-Wall'
- The `-Wunused' and `-Wuninitialized' options combined. These are
- all the options which pertain to usage that we recommend avoiding
- and that we believe is easy to avoid. (As more warnings are added
- to `g77', some might be added to the list enabled by `-Wall'.)
-
- The remaining `-W...' options are not implied by `-Wall' because
-they warn about constructions that we consider reasonable to use, on
-occasion, in clean programs.
-
-`-Wsurprising'
- Warn about "suspicious" constructs that are interpreted by the
- compiler in a way that might well be surprising to someone reading
- the code. These differences can result in subtle,
- compiler-dependent (even machine-dependent) behavioral differences.
- The constructs warned about include:
-
- * Expressions having two arithmetic operators in a row, such as
- `X*-Y'. Such a construct is nonstandard, and can produce
- unexpected results in more complicated situations such as
- `X**-Y*Z'. `g77', along with many other compilers, interprets
- this example differently than many programmers, and a few
- other compilers. Specifically, `g77' interprets `X**-Y*Z' as
- `(X**(-Y))*Z', while others might think it should be
- interpreted as `X**(-(Y*Z))'.
-
- A revealing example is the constant expression `2**-2*1.',
- which `g77' evaluates to .25, while others might evaluate it
- to 0., the difference resulting from the way precedence
- affects type promotion.
-
- (The `-fpedantic' option also warns about expressions having
- two arithmetic operators in a row.)
-
- * Expressions with a unary minus followed by an operand and then
- a binary operator other than plus or minus. For example,
- `-2**2' produces a warning, because the precedence is
- `-(2**2)', yielding -4, not `(-2)**2', which yields 4, and
- which might represent what a programmer expects.
-
- An example of an expression producing different results in a
- surprising way is `-I*S', where I holds the value
- `-2147483648' and S holds `0.5'. On many systems, negating I
- results in the same value, not a positive number, because it
- is already the lower bound of what an `INTEGER(KIND=1)'
- variable can hold. So, the expression evaluates to a
- positive number, while the "expected" interpretation,
- `(-I)*S', would evaluate to a negative number.
-
- Even cases such as `-I*J' produce warnings, even though, in
- most configurations and situations, there is no computational
- difference between the results of the two
- interpretations--the purpose of this warning is to warn about
- differing interpretations and encourage a better style of
- coding, not to identify only those places where bugs might
- exist in the user's code.
-
- * `DO' loops with `DO' variables that are not of integral
- type--that is, using `REAL' variables as loop control
- variables. Although such loops can be written to work in the
- "obvious" way, the way `g77' is required by the Fortran
- standard to interpret such code is likely to be quite
- different from the way many programmers expect. (This is
- true of all `DO' loops, but the differences are pronounced
- for non-integral loop control variables.)
-
- *Note Loops::, for more information.
-
-`-Werror'
- Make all warnings into errors.
-
-`-W'
- Turns on "extra warnings" and, if optimization is specified via
- `-O', the `-Wuninitialized' option. (This might change in future
- versions of `g77'.)
-
- "Extra warnings" are issued for:
-
- * Unused parameters to a procedure (when `-Wunused' also is
- specified).
-
- * Overflows involving floating-point constants (not available
- for certain configurations).
-
- *Note Options to Request or Suppress Warnings: (gcc)Warning Options,
-for information on more options offered by the GBE shared by `g77',
-`gcc', and other GNU compilers.
-
- Some of these have no effect when compiling programs written in
-Fortran:
-
-`-Wcomment'
-
-`-Wformat'
-
-`-Wparentheses'
-
-`-Wswitch'
-
-`-Wtraditional'
-
-`-Wshadow'
-
-`-Wid-clash-LEN'
-
-`-Wlarger-than-LEN'
-
-`-Wconversion'
-
-`-Waggregate-return'
-
-`-Wredundant-decls'
- These options all could have some relevant meaning for GNU Fortran
- programs, but are not yet supported.
-
-
-File: g77.info, Node: Debugging Options, Next: Optimize Options, Prev: Warning Options, Up: Invoking G77
-
-Options for Debugging Your Program or GNU Fortran
-=================================================
-
- GNU Fortran has various special options that are used for debugging
-either your program or `g77'.
-
-`-g'
- Produce debugging information in the operating system's native
- format (stabs, COFF, XCOFF, or DWARF). GDB can work with this
- debugging information.
-
- Support for this option in Fortran programs is incomplete. In
- particular, names of variables and arrays in common blocks or that
- are storage-associated via `EQUIVALENCE' are unavailable to the
- debugger.
-
- However, version 0.5.19 of `g77' does provide this information in
- a rudimentary way, as controlled by the `-fdebug-kludge' option.
-
- *Note Options for Code Generation Conventions: Code Gen Options,
- for more information.
-
- *Note Options for Debugging Your Program or GNU CC: (gcc)Debugging
-Options, for more information on debugging options.
-
-
-File: g77.info, Node: Optimize Options, Next: Preprocessor Options, Prev: Debugging Options, Up: Invoking G77
-
-Options That Control Optimization
-=================================
-
- Most Fortran users will want to use no optimization when developing
-and testing programs, and use `-O' or `-O2' when compiling programs for
-late-cycle testing and for production use.
-
- The following flags have particular applicability when compiling
-Fortran programs:
-
-`-malign-double'
- (Intel 386 architecture only.)
-
- Noticeably improves performance of `g77' programs making heavy use
- of `REAL(KIND=2)' (`DOUBLE PRECISION') data on some systems. In
- particular, systems using Pentium, Pentium Pro, 586, and 686
- implementations of the i386 architecture execute programs faster
- when `REAL(KIND=2)' (`DOUBLE PRECISION') data are aligned on
- 64-bit boundaries in memory.
-
- This option can, at least, make benchmark results more consistent
- across various system configurations, versions of the program, and
- data sets.
-
- *Note:* The warning in the `gcc' documentation about this option
- does not apply, generally speaking, to Fortran code compiled by
- `g77'.
-
- *Also note:* `g77' fixes a `gcc' backend bug to allow
- `-malign-double' to work generally, not just with
- statically-allocated data.
-
- *Also also note:* The negative form of `-malign-double' is
- `-mno-align-double', not `-benign-double'.
-
-`-ffloat-store'
- Might help a Fortran program that depends on exact IEEE conformance
- on some machines, but might slow down a program that doesn't.
-
-`-fforce-mem'
-
-`-fforce-addr'
- Might improve optimization of loops.
-
-`-fno-inline'
- Don't compile statement functions inline. Might reduce the size
- of a program unit--which might be at expense of some speed (though
- it should compile faster). Note that if you are not optimizing,
- no functions can be expanded inline.
-
-`-ffast-math'
- Might allow some programs designed to not be too dependent on IEEE
- behavior for floating-point to run faster, or die trying.
-
-`-fstrength-reduce'
- Might make some loops run faster.
-
-`-frerun-cse-after-loop'
-
-`-fexpensive-optimizations'
-
-`-fdelayed-branch'
-
-`-fschedule-insns'
-
-`-fschedule-insns2'
-
-`-fcaller-saves'
- Might improve performance on some code.
-
-`-funroll-loops'
- Definitely improves performance on some code.
-
-`-funroll-all-loops'
- Definitely improves performance on some code.
-
-`-fno-move-all-movables'
-
-`-fno-reduce-all-givs'
-
-`-fno-rerun-loop-opt'
- Each of these might improve performance on some code.
-
- Analysis of Fortran code optimization and the resulting
- optimizations triggered by the above options were contributed by
- Toon Moene (<toon@moene.indiv.nluug.nl>).
-
- These three options are intended to be removed someday, once they
- have helped determine the efficacy of various approaches to
- improving the performance of Fortran code.
-
- Please let us know how use of these options affects the
- performance of your production code. We're particularly
- interested in code that runs faster when these options are
- *disabled*, and in non-Fortran code that benefits when they are
- *enabled* via the above `gcc' command-line options.
-
- *Note Options That Control Optimization: (gcc)Optimize Options, for
-more information on options to optimize the generated machine code.
-
-
-File: g77.info, Node: Preprocessor Options, Next: Directory Options, Prev: Optimize Options, Up: Invoking G77
-
-Options Controlling the Preprocessor
-====================================
-
- These options control the C preprocessor, which is run on each C
-source file before actual compilation.
-
- *Note Options Controlling the Preprocessor: (gcc)Preprocessor
-Options, for information on C preprocessor options.
-
- Some of these options also affect how `g77' processes the `INCLUDE'
-directive. Since this directive is processed even when preprocessing
-is not requested, it is not described in this section. *Note Options
-for Directory Search: Directory Options, for information on how `g77'
-processes the `INCLUDE' directive.
-
- However, the `INCLUDE' directive does not apply preprocessing to the
-contents of the included file itself.
-
- Therefore, any file that contains preprocessor directives (such as
-`#include', `#define', and `#if') must be included via the `#include'
-directive, not via the `INCLUDE' directive. Therefore, any file
-containing preprocessor directives, if included, is necessarily
-included by a file that itself contains preprocessor directives.
-
-
-File: g77.info, Node: Directory Options, Next: Code Gen Options, Prev: Preprocessor Options, Up: Invoking G77
-
-Options for Directory Search
-============================
-
- These options affect how the `cpp' preprocessor searches for files
-specified via the `#include' directive. Therefore, when compiling
-Fortran programs, they are meaningful when the preproecssor is used.
-
- Some of these options also affect how `g77' searches for files
-specified via the `INCLUDE' directive, although files included by that
-directive are not, themselves, preprocessed. These options are:
-
-`-I-'
-
-`-IDIR'
- These affect interpretation of the `INCLUDE' directive (as well as
- of the `#include' directive of the `cpp' preprocessor).
-
- Note that `-IDIR' must be specified *without* any spaces between
- `-I' and the directory name--that is, `-Ifoo/bar' is valid, but
- `-I foo/bar' is rejected by the `g77' compiler (though the
- preprocessor supports the latter form). Also note that the
- general behavior of `-I' and `INCLUDE' is pretty much the same as
- of `-I' with `#include' in the `cpp' preprocessor, with regard to
- looking for `header.gcc' files and other such things.
-
- *Note Options for Directory Search: (gcc)Directory Options, for
- information on the `-I' option.
-
diff --git a/gcc/f/g77.info-20 b/gcc/f/g77.info-20
deleted file mode 100644
index f824bd51f9b..00000000000
--- a/gcc/f/g77.info-20
+++ /dev/null
@@ -1,2122 +0,0 @@
-This is Info file g77.info, produced by Makeinfo version 1.68 from the
-input file g77.texi.
-
- This file explains how to use the GNU Fortran system.
-
- Published by the Free Software Foundation 59 Temple Place - Suite 330
-Boston, MA 02111-1307 USA
-
- Copyright (C) 1995-1997 Free Software Foundation, Inc.
-
- Permission is granted to make and distribute verbatim copies of this
-manual provided the copyright notice and this permission notice are
-preserved on all copies.
-
- Permission is granted to copy and distribute modified versions of
-this manual under the conditions for verbatim copying, provided also
-that the sections entitled "GNU General Public License," "Funding for
-Free Software," and "Protect Your Freedom--Fight `Look And Feel'" are
-included exactly as in the original, and provided that the entire
-resulting derived work is distributed under the terms of a permission
-notice identical to this one.
-
- Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that the sections entitled "GNU General Public
-License," "Funding for Free Software," and "Protect Your Freedom--Fight
-`Look And Feel'", and this permission notice, may be included in
-translations approved by the Free Software Foundation instead of in the
-original English.
-
- Contributed by James Craig Burley (<burley@gnu.ai.mit.edu>).
-Inspired by a first pass at translating `g77-0.5.16/f/DOC' that was
-contributed to Craig by David Ronis (<ronis@onsager.chem.mcgill.ca>).
-
-INFO-DIR-SECTION Fortran Programming
-START-INFO-DIR-ENTRY
-* g77: (g77). The GNU Fortran compilation system.
-END-INFO-DIR-ENTRY
-
-
-File: g77.info, Node: Index, Prev: Diagnostics, Up: Top
-
-Index
-*****
-
-* Menu:
-
-* #define: Overall Options.
-* #if: Overall Options.
-* #include: Overall Options.
-* #include directive: Bug Reporting.
-* $: Dollar Signs.
-* %DESCR() construct: %DESCR().
-* %LOC() construct: %LOC().
-* %REF() construct: %REF().
-* %VAL() construct: %VAL().
-* *N notation <1>: Compiler Types.
-* *N notation: Star Notation.
-* --driver option <1>: Invoking G77.
-* --driver option: G77 and GCC.
-* -falias-check option <1>: Aliasing Assumed To Work.
-* -falias-check option: Code Gen Options.
-* -fargument-alias option <1>: Aliasing Assumed To Work.
-* -fargument-alias option: Code Gen Options.
-* -fargument-noalias option <1>: Aliasing Assumed To Work.
-* -fargument-noalias option: Code Gen Options.
-* -fcaller-saves option: Optimize Options.
-* -fcase-initcap option: Fortran Dialect Options.
-* -fcase-lower option: Fortran Dialect Options.
-* -fcase-preserve option: Fortran Dialect Options.
-* -fcase-strict-lower option: Fortran Dialect Options.
-* -fcase-strict-upper option: Fortran Dialect Options.
-* -fcase-upper option: Fortran Dialect Options.
-* -fdebug-kludge option: Code Gen Options.
-* -fdelayed-branch option: Optimize Options.
-* -fdollar-ok option: Fortran Dialect Options.
-* -fexpensive-optimizations option: Optimize Options.
-* -ff2c-intrinsics-delete option: Fortran Dialect Options.
-* -ff2c-intrinsics-disable option: Fortran Dialect Options.
-* -ff2c-intrinsics-enable option: Fortran Dialect Options.
-* -ff2c-intrinsics-hide option: Fortran Dialect Options.
-* -ff2c-library option: Code Gen Options.
-* -ff66 option: Shorthand Options.
-* -ff77 option: Shorthand Options.
-* -ff90 option: Fortran Dialect Options.
-* -ff90-intrinsics-delete option: Fortran Dialect Options.
-* -ff90-intrinsics-disable option: Fortran Dialect Options.
-* -ff90-intrinsics-enable option: Fortran Dialect Options.
-* -ff90-intrinsics-hide option: Fortran Dialect Options.
-* -ffast-math option: Optimize Options.
-* -ffixed-line-length-N option: Fortran Dialect Options.
-* -ffloat-store option: Optimize Options.
-* -fforce-addr option: Optimize Options.
-* -fforce-mem option: Optimize Options.
-* -ffree-form option: Fortran Dialect Options.
-* -fgnu-intrinsics-delete option: Fortran Dialect Options.
-* -fgnu-intrinsics-disable option: Fortran Dialect Options.
-* -fgnu-intrinsics-enable option: Fortran Dialect Options.
-* -fgnu-intrinsics-hide option: Fortran Dialect Options.
-* -fGROUP-intrinsics-hide option: Overly Convenient Options.
-* -finit-local-zero option <1>: Overly Convenient Options.
-* -finit-local-zero option: Code Gen Options.
-* -fintrin-case-any option: Fortran Dialect Options.
-* -fintrin-case-initcap option: Fortran Dialect Options.
-* -fintrin-case-lower option: Fortran Dialect Options.
-* -fintrin-case-upper option: Fortran Dialect Options.
-* -fmatch-case-any option: Fortran Dialect Options.
-* -fmatch-case-initcap option: Fortran Dialect Options.
-* -fmatch-case-lower option: Fortran Dialect Options.
-* -fmatch-case-upper option: Fortran Dialect Options.
-* -fmil-intrinsics-delete option: Fortran Dialect Options.
-* -fmil-intrinsics-disable option: Fortran Dialect Options.
-* -fmil-intrinsics-enable option: Fortran Dialect Options.
-* -fmil-intrinsics-hide option: Fortran Dialect Options.
-* -fno-argument-noalias-global option <1>: Aliasing Assumed To Work.
-* -fno-argument-noalias-global option: Code Gen Options.
-* -fno-automatic option <1>: Overly Convenient Options.
-* -fno-automatic option: Code Gen Options.
-* -fno-backslash option: Fortran Dialect Options.
-* -fno-common option: Code Gen Options.
-* -fno-emulate-complex option: Code Gen Options.
-* -fno-f2c option <1>: Avoid f2c Compatibility.
-* -fno-f2c option: Code Gen Options.
-* -fno-f77 option: Shorthand Options.
-* -fno-fixed-form option: Fortran Dialect Options.
-* -fno-globals option: Code Gen Options.
-* -fno-ident option: Code Gen Options.
-* -fno-inline option: Optimize Options.
-* -fno-move-all-movables option: Optimize Options.
-* -fno-reduce-all-givs option: Optimize Options.
-* -fno-rerun-loop-opt option: Optimize Options.
-* -fno-second-underscore: f2c Skeletons and Prototypes.
-* -fno-second-underscore option <1>: Names.
-* -fno-second-underscore option: Code Gen Options.
-* -fno-silent option: Overall Options.
-* -fno-ugly option: Shorthand Options.
-* -fno-ugly-args option: Fortran Dialect Options.
-* -fno-ugly-init option: Fortran Dialect Options.
-* -fno-underscoring option <1>: Names.
-* -fno-underscoring option: Code Gen Options.
-* -fonetrip option: Fortran Dialect Options.
-* -fpack-struct option: Code Gen Options.
-* -fpcc-struct-return option: Code Gen Options.
-* -fpedantic option: Warning Options.
-* -fPIC option: Actual Bugs.
-* -freg-struct-return option: Code Gen Options.
-* -frerun-cse-after-loop option: Optimize Options.
-* -fschedule-insns option: Optimize Options.
-* -fschedule-insns2 option: Optimize Options.
-* -fset-g77-defaults option: Overall Options.
-* -fshort-double option: Code Gen Options.
-* -fsource-case-lower option: Fortran Dialect Options.
-* -fsource-case-preserve option: Fortran Dialect Options.
-* -fsource-case-upper option: Fortran Dialect Options.
-* -fstrength-reduce option: Optimize Options.
-* -fsymbol-case-any option: Fortran Dialect Options.
-* -fsymbol-case-initcap option: Fortran Dialect Options.
-* -fsymbol-case-lower option: Fortran Dialect Options.
-* -fsymbol-case-upper option: Fortran Dialect Options.
-* -fsyntax-only option: Warning Options.
-* -ftypeless-boz option: Fortran Dialect Options.
-* -fugly option <1>: Overly Convenient Options.
-* -fugly option: Shorthand Options.
-* -fugly-assign option: Fortran Dialect Options.
-* -fugly-assumed option: Fortran Dialect Options.
-* -fugly-comma option <1>: Actual Bugs.
-* -fugly-comma option: Fortran Dialect Options.
-* -fugly-complex option: Fortran Dialect Options.
-* -fugly-logint option: Fortran Dialect Options.
-* -funix-intrinsics-delete option: Fortran Dialect Options.
-* -funix-intrinsics-disable option: Fortran Dialect Options.
-* -funix-intrinsics-enable option: Fortran Dialect Options.
-* -funix-intrinsics-hide option: Fortran Dialect Options.
-* -funroll-all-loops option: Optimize Options.
-* -funroll-loops option: Optimize Options.
-* -fversion option: Overall Options.
-* -fvxt option: Fortran Dialect Options.
-* -fvxt-intrinsics-delete option: Fortran Dialect Options.
-* -fvxt-intrinsics-disable option: Fortran Dialect Options.
-* -fvxt-intrinsics-enable option: Fortran Dialect Options.
-* -fvxt-intrinsics-hide option: Fortran Dialect Options.
-* -fzeros option: Code Gen Options.
-* -g option: Debugging Options.
-* -I- option: Directory Options.
-* -i8: Increasing Precision/Range.
-* -Idir option: Directory Options.
-* -malign-double option <1>: Aligned Data.
-* -malign-double option: Optimize Options.
-* -Nl option: Compiler Limits.
-* -Nx option: Compiler Limits.
-* -O2: Actual Bugs.
-* -pedantic option: Warning Options.
-* -pedantic-errors option: Warning Options.
-* -r8: Increasing Precision/Range.
-* -u option: Warning Options.
-* -v option: G77 and GCC.
-* -W option: Warning Options.
-* -w option: Warning Options.
-* -Waggregate-return option: Warning Options.
-* -Wall option: Warning Options.
-* -Wcomment option: Warning Options.
-* -Wconversion option: Warning Options.
-* -Werror option: Warning Options.
-* -Wformat option: Warning Options.
-* -Wid-clash-LEN option: Warning Options.
-* -Wimplicit option: Warning Options.
-* -Wlarger-than-LEN option: Warning Options.
-* -Wno-globals option: Warning Options.
-* -Wparentheses option: Warning Options.
-* -Wredundant-decls option: Warning Options.
-* -Wshadow option: Warning Options.
-* -Wsurprising option: Warning Options.
-* -Wswitch option: Warning Options.
-* -Wtraditional option: Warning Options.
-* -Wuninitialized option: Warning Options.
-* -Wunused option: Warning Options.
-* .EQV., with integer operands: Equivalence Versus Equality.
-* .F filename suffix: Overall Options.
-* .fpp filename suffix: Overall Options.
-* .gdbinit: Main Program Unit.
-* .r filename suffix: Overall Options.
-* /WARNINGS=DECLARATIONS switch: Warning Options.
-* 586/686 CPUs: Use Submodel Options.
-* 64-bit systems: Alpha Problems Fixed.
-* _strtoul: Missing strtoul.
-* `infinite spaces' printed: Strange Behavior at Run Time.
-* Abort intrinsic: Abort Intrinsic.
-* Abs intrinsic: Abs Intrinsic.
-* ACCEPT statement: TYPE and ACCEPT I/O Statements.
-* Access intrinsic: Access Intrinsic.
-* AChar intrinsic: AChar Intrinsic.
-* ACos intrinsic: ACos Intrinsic.
-* ACosD intrinsic: ACosD Intrinsic.
-* adding options: Adding Options.
-* adjustable arrays: Adjustable Arrays.
-* AdjustL intrinsic: AdjustL Intrinsic.
-* AdjustR intrinsic: AdjustR Intrinsic.
-* aggregate initialization: Large Initialization.
-* AImag intrinsic: AImag Intrinsic.
-* AIMAG intrinsic: REAL() and AIMAG() of Complex.
-* AIMax0 intrinsic: AIMax0 Intrinsic.
-* AIMin0 intrinsic: AIMin0 Intrinsic.
-* AInt intrinsic: AInt Intrinsic.
-* AJMax0 intrinsic: AJMax0 Intrinsic.
-* AJMin0 intrinsic: AJMin0 Intrinsic.
-* Alarm intrinsic: Alarm Intrinsic.
-* aliasing: Aliasing Assumed To Work.
-* aligned data: Aligned Data.
-* aligned stack: Aligned Data.
-* All intrinsic: All Intrinsic.
-* all warnings: Warning Options.
-* Allocated intrinsic: Allocated Intrinsic.
-* ALog intrinsic: ALog Intrinsic.
-* ALog10 intrinsic: ALog10 Intrinsic.
-* Alpha: Actual Bugs.
-* Alpha, support <1>: Actual Bugs.
-* Alpha, support: Alpha Problems Fixed.
-* alternate entry points: Alternate Entry Points.
-* alternate returns: Alternate Returns.
-* ALWAYS_FLUSH <1>: Output Assumed To Flush.
-* ALWAYS_FLUSH: Always Flush Output.
-* AMax0 intrinsic: AMax0 Intrinsic.
-* AMax1 intrinsic: AMax1 Intrinsic.
-* AMin0 intrinsic: AMin0 Intrinsic.
-* AMin1 intrinsic: AMin1 Intrinsic.
-* AMod intrinsic: AMod Intrinsic.
-* ampersand continuation line: Ampersands.
-* AND intrinsic: Bit Operations on Floating-point Data.
-* And intrinsic: And Intrinsic.
-* ANInt intrinsic: ANInt Intrinsic.
-* ANSI FORTRAN 77 standard: Language.
-* ANSI FORTRAN 77 support: Standard Support.
-* anti-aliasing: Aliasing Assumed To Work.
-* Any intrinsic: Any Intrinsic.
-* arguments, null: Ugly Null Arguments.
-* arguments, omitting: Ugly Null Arguments.
-* arguments, unused <1>: Unused Arguments.
-* arguments, unused: Warning Options.
-* array bounds, adjustable: Array Bounds Expressions.
-* array elements, in adjustable array bounds: Array Bounds Expressions.
-* array ordering: Arrays.
-* arrays: Arrays.
-* arrays, adjustable: Adjustable Arrays.
-* arrays, assumed-size: Ugly Assumed-Size Arrays.
-* arrays, automatic <1>: Large Automatic Arrays.
-* arrays, automatic <2>: Stack Overflow.
-* arrays, automatic <3>: Overly Convenient Options.
-* arrays, automatic: Adjustable Arrays.
-* arrays, dimensioning: Adjustable Arrays.
-* as command: What is GNU Fortran?.
-* ASin intrinsic: ASin Intrinsic.
-* ASinD intrinsic: ASinD Intrinsic.
-* assembler: What is GNU Fortran?.
-* assembly code: What is GNU Fortran?.
-* assembly code, invalid: Bug Criteria.
-* ASSIGN statement <1>: Assigned Statement Labels.
-* ASSIGN statement: Ugly Assigned Labels.
-* assigned labels: Ugly Assigned Labels.
-* assigned statement labels: Assigned Statement Labels.
-* Associated intrinsic: Associated Intrinsic.
-* association, storage: Aliasing Assumed To Work.
-* assumed-size arrays: Ugly Assumed-Size Arrays.
-* ATan intrinsic: ATan Intrinsic.
-* ATan2 intrinsic: ATan2 Intrinsic.
-* ATan2D intrinsic: ATan2D Intrinsic.
-* ATanD intrinsic: ATanD Intrinsic.
-* automatic arrays <1>: Large Automatic Arrays.
-* automatic arrays <2>: Stack Overflow.
-* automatic arrays <3>: Overly Convenient Options.
-* automatic arrays: Adjustable Arrays.
-* back end, gcc: What is GNU Fortran?.
-* backslash <1>: Backslash in Constants.
-* backslash: Fortran Dialect Options.
-* backtrace for bug reports: Bug Reporting.
-* basic concepts: What is GNU Fortran?.
-* beginners: Getting Started.
-* BesJ0 intrinsic: BesJ0 Intrinsic.
-* BesJ1 intrinsic: BesJ1 Intrinsic.
-* BesJN intrinsic: BesJN Intrinsic.
-* BesY0 intrinsic: BesY0 Intrinsic.
-* BesY1 intrinsic: BesY1 Intrinsic.
-* BesYN intrinsic: BesYN Intrinsic.
-* binaries, distributing: Distributing Binaries.
-* bison: Missing bison?.
-* bit patterns: Floating-point Bit Patterns.
-* Bit_Size intrinsic: Bit_Size Intrinsic.
-* BITest intrinsic: BITest Intrinsic.
-* BJTest intrinsic: BJTest Intrinsic.
-* blanks (spaces) <1>: Lines.
-* blanks (spaces): Character Set.
-* block data: Multiple Definitions of External Names.
-* block data and libraries: Block Data and Libraries.
-* BLOCK DATA statement <1>: Multiple Definitions of External Names.
-* BLOCK DATA statement: Block Data and Libraries.
-* bootstrap build: Bootstrap Build.
-* BTest intrinsic: BTest Intrinsic.
-* bug criteria: Bug Criteria.
-* bug report mailing lists: Bug Lists.
-* bugs: Bugs.
-* bugs, finding: What is GNU Fortran?.
-* bugs, known: Trouble.
-* build, bootstrap: Bootstrap Build.
-* build, straight: Straight Build.
-* building g77: Building gcc.
-* building gcc <1>: Building gcc.
-* building gcc: Building GNU CC Necessary.
-* bus error <1>: Strange Behavior at Run Time.
-* bus error: NeXTStep Problems.
-* but-bugs: But-bugs.
-* C library: Strange Behavior at Run Time.
-* C preprocessor: Overall Options.
-* C routines calling Fortran: Debugging and Interfacing.
-* C++: C++ Considerations.
-* C++, linking with: Interoperating with C and C++.
-* C, linking with: Interoperating with C and C++.
-* CAbs intrinsic: CAbs Intrinsic.
-* calling C routines: Debugging and Interfacing.
-* card image: Fortran Dialect Options.
-* carriage returns: Carriage Returns.
-* case sensitivity: Case Sensitivity.
-* cc1 program: What is GNU Fortran?.
-* cc1plus program: What is GNU Fortran?.
-* CCos intrinsic: CCos Intrinsic.
-* CDAbs intrinsic: CDAbs Intrinsic.
-* CDCos intrinsic: CDCos Intrinsic.
-* CDExp intrinsic: CDExp Intrinsic.
-* CDLog intrinsic: CDLog Intrinsic.
-* CDSin intrinsic: CDSin Intrinsic.
-* CDSqRt intrinsic: CDSqRt Intrinsic.
-* Ceiling intrinsic: Ceiling Intrinsic.
-* CExp intrinsic: CExp Intrinsic.
-* cfortran.h: C Interfacing Tools.
-* changes, user-visible: Changes.
-* Char intrinsic: Char Intrinsic.
-* character constants <1>: Character and Hollerith Constants.
-* character constants <2>: Ugly Conversion of Initializers.
-* character constants <3>: Double Quote Meaning.
-* character constants: Fortran Dialect Options.
-* character set: Fortran Dialect Options.
-* CHARACTER*(*): More Extensions.
-* CHARACTER, null: Character Type.
-* characters: Character Set.
-* characters, comment: Exclamation Point.
-* characters, continuation: Exclamation Point.
-* ChDir intrinsic <1>: ChDir Intrinsic (function).
-* ChDir intrinsic: ChDir Intrinsic (subroutine).
-* ChMod intrinsic <1>: ChMod Intrinsic (function).
-* ChMod intrinsic: ChMod Intrinsic (subroutine).
-* CLog intrinsic: CLog Intrinsic.
-* CLOSE statement: OPEN CLOSE and INQUIRE Keywords.
-* Cmplx intrinsic: Cmplx Intrinsic.
-* CMPLX intrinsic: CMPLX() of DOUBLE PRECISION.
-* code generation conventions: Code Gen Options.
-* code generation, improving: Better Optimization.
-* code generator: What is GNU Fortran?.
-* code, assembly: What is GNU Fortran?.
-* code, displaying main source: Actual Bugs.
-* code, distributing: Distributing Binaries.
-* code, in-line: What is GNU Fortran?.
-* code, legacy: Collected Fortran Wisdom.
-* code, machine: What is GNU Fortran?.
-* code, modifying <1>: Unpacking.
-* code, modifying: Overall Options.
-* code, source <1>: Unpacking.
-* code, source <2>: Case Sensitivity.
-* code, source <3>: Source Form.
-* code, source <4>: Lines.
-* code, source: What is GNU Fortran?.
-* code, stack variables: Maximum Stackable Size.
-* code, user: Cannot Link Fortran Programs.
-* code, writing: Collected Fortran Wisdom.
-* column-major ordering: Arrays.
-* columns 73 through 80: Better Source Model.
-* command options: Invoking G77.
-* commands, as: What is GNU Fortran?.
-* commands, f77: Installing f77.
-* commands, g77 <1>: G77 and GCC.
-* commands, g77: What is GNU Fortran?.
-* commands, gcc <1>: G77 and GCC.
-* commands, gcc: What is GNU Fortran?.
-* commands, gdb: What is GNU Fortran?.
-* commands, ld: What is GNU Fortran?.
-* commas, trailing: Ugly Null Arguments.
-* comment character: Exclamation Point.
-* comments, trailing: Statements Comments Lines.
-* common blocks <1>: Mangling of Names.
-* common blocks <2>: Actual Bugs.
-* common blocks <3>: Common Blocks.
-* common blocks: Debugging Options.
-* common blocks, large: Large Common Blocks.
-* COMMON statement <1>: Multiple Definitions of External Names.
-* COMMON statement: Common Blocks.
-* COMMON, layout: Aligned Data.
-* comparing logical expressions: Equivalence Versus Equality.
-* compatibility, f2c <1>: Avoid f2c Compatibility.
-* compatibility, f2c <2>: Block Data and Libraries.
-* compatibility, f2c <3>: Code Gen Options.
-* compatibility, f2c <4>: Shorthand Options.
-* compatibility, f2c: Overall Options.
-* compatibility, f77: Shorthand Options.
-* compatibility, FORTRAN 66 <1>: Fortran Dialect Options.
-* compatibility, FORTRAN 66: Shorthand Options.
-* compatibility, FORTRAN 77: Standard Support.
-* compatibility, Fortran 90: Fortran 90.
-* compilation status: Overall Options.
-* compilation, in-line: Optimize Options.
-* compilation, pedantic: Pedantic Compilation.
-* compiler bugs, reporting: Bug Reporting.
-* compiler limits: Compiler Limits.
-* compiler memory usage: Actual Bugs.
-* compiler speed: Actual Bugs.
-* compilers: What is GNU Fortran?.
-* compiling programs: G77 and GCC.
-* Complex intrinsic: Complex Intrinsic.
-* COMPLEX intrinsics: Fortran Dialect Options.
-* COMPLEX statement: Complex Variables.
-* COMPLEX support: Actual Bugs.
-* complex values: Ugly Complex Part Extraction.
-* complex variables: Complex Variables.
-* COMPLEX(KIND=1) type: Compiler Types.
-* COMPLEX(KIND=2) type: Compiler Types.
-* components of g77: What is GNU Fortran?.
-* concatenation: More Extensions.
-* concepts, basic: What is GNU Fortran?.
-* conformance, IEEE: Optimize Options.
-* Conjg intrinsic: Conjg Intrinsic.
-* constants <1>: Compiler Constants.
-* constants: Constants.
-* constants, character <1>: Character and Hollerith Constants.
-* constants, character <2>: Ugly Conversion of Initializers.
-* constants, character: Double Quote Meaning.
-* constants, context-sensitive: Context-Sensitive Constants.
-* constants, Hollerith <1>: Character and Hollerith Constants.
-* constants, Hollerith <2>: Ugly Conversion of Initializers.
-* constants, Hollerith: Ugly Implicit Argument Conversion.
-* constants, integer: Actual Bugs.
-* constants, octal: Double Quote Meaning.
-* constants, prefix-radix: Fortran Dialect Options.
-* constants, types: Fortran Dialect Options.
-* construct names: Construct Names.
-* context-sensitive constants: Context-Sensitive Constants.
-* context-sensitive intrinsics: Context-Sensitive Intrinsicness.
-* continuation character: Exclamation Point.
-* continuation line, ampersand: Ampersands.
-* continuation lines, number of: Continuation Line.
-* contributors: Contributors.
-* conversions, nonportable: Nonportable Conversions.
-* core dump: Bug Criteria.
-* Cos intrinsic: Cos Intrinsic.
-* CosD intrinsic: CosD Intrinsic.
-* CosH intrinsic: CosH Intrinsic.
-* Count intrinsic: Count Intrinsic.
-* cpp preprocessor: Overall Options.
-* cpp program <1>: Bug Reporting.
-* cpp program <2>: Preprocessor Options.
-* cpp program <3>: Overall Options.
-* cpp program: What is GNU Fortran?.
-* Cpu_Time intrinsic: Cpu_Time Intrinsic.
-* Cray pointers: POINTER Statements.
-* creating patch files: Merging Distributions.
-* credits: Contributors.
-* cross-compiler, building: Floating-point Bit Patterns.
-* cross-compiler, problems: Cross-compiler Problems.
-* CShift intrinsic: CShift Intrinsic.
-* CSin intrinsic: CSin Intrinsic.
-* CSqRt intrinsic: CSqRt Intrinsic.
-* CTime intrinsic <1>: CTime Intrinsic (function).
-* CTime intrinsic: CTime Intrinsic (subroutine).
-* DAbs intrinsic: DAbs Intrinsic.
-* DACos intrinsic: DACos Intrinsic.
-* DACosD intrinsic: DACosD Intrinsic.
-* DASin intrinsic: DASin Intrinsic.
-* DASinD intrinsic: DASinD Intrinsic.
-* DATA statement <1>: Actual Bugs.
-* DATA statement: Code Gen Options.
-* data types: Compiler Types.
-* data, aligned: Aligned Data.
-* data, overwritten: Strange Behavior at Run Time.
-* DATan intrinsic: DATan Intrinsic.
-* DATan2 intrinsic: DATan2 Intrinsic.
-* DATan2D intrinsic: DATan2D Intrinsic.
-* DATanD intrinsic: DATanD Intrinsic.
-* Date intrinsic: Date Intrinsic.
-* Date_and_Time intrinsic: Date_and_Time Intrinsic.
-* DbesJ0 intrinsic: DbesJ0 Intrinsic.
-* DbesJ1 intrinsic: DbesJ1 Intrinsic.
-* DbesJN intrinsic: DbesJN Intrinsic.
-* DbesY0 intrinsic: DbesY0 Intrinsic.
-* DbesY1 intrinsic: DbesY1 Intrinsic.
-* DbesYN intrinsic: DbesYN Intrinsic.
-* Dble intrinsic: Dble Intrinsic.
-* DbleQ intrinsic: DbleQ Intrinsic.
-* DCmplx intrinsic: DCmplx Intrinsic.
-* DConjg intrinsic: DConjg Intrinsic.
-* DCos intrinsic: DCos Intrinsic.
-* DCosD intrinsic: DCosD Intrinsic.
-* DCosH intrinsic: DCosH Intrinsic.
-* DDiM intrinsic: DDiM Intrinsic.
-* debug line: Debug Line.
-* debug_rtx: Bug Reporting.
-* debugger <1>: Actual Bugs.
-* debugger: What is GNU Fortran?.
-* debugging <1>: Actual Bugs.
-* debugging <2>: Names.
-* debugging <3>: Main Program Unit.
-* debugging: Debugging and Interfacing.
-* debugging information options: Debugging Options.
-* debugging main source code: Actual Bugs.
-* DECODE statement: ENCODE and DECODE.
-* deleted intrinsics: Intrinsic Groups.
-* DErF intrinsic: DErF Intrinsic.
-* DErFC intrinsic: DErFC Intrinsic.
-* DExp intrinsic: DExp Intrinsic.
-* DFloat intrinsic: DFloat Intrinsic.
-* DFlotI intrinsic: DFlotI Intrinsic.
-* DFlotJ intrinsic: DFlotJ Intrinsic.
-* diagnostics: Diagnostics.
-* diagnostics, incorrect: What is GNU Fortran?.
-* dialect options: Fortran Dialect Options.
-* differences between object files: Object File Differences.
-* Digital Fortran features: Fortran Dialect Options.
-* Digits intrinsic: Digits Intrinsic.
-* DiM intrinsic: DiM Intrinsic.
-* DImag intrinsic: DImag Intrinsic.
-* DIMENSION statement <1>: Array Bounds Expressions.
-* DIMENSION statement <2>: Adjustable Arrays.
-* DIMENSION statement: Arrays.
-* DIMENSION X(1): Ugly Assumed-Size Arrays.
-* dimensioning arrays: Adjustable Arrays.
-* DInt intrinsic: DInt Intrinsic.
-* direction of language development: Direction of Language Development.
-* directive, #include: Bug Reporting.
-* directive, INCLUDE <1>: Bug Reporting.
-* directive, INCLUDE <2>: Directory Options.
-* directive, INCLUDE: Preprocessor Options.
-* directory options: Directory Options.
-* directory search paths for inclusion: Directory Options.
-* directory, updating info: Updating Documentation.
-* disabled intrinsics: Intrinsic Groups.
-* disk full <1>: Output Assumed To Flush.
-* disk full: Always Flush Output.
-* displaying main source code: Actual Bugs.
-* disposition of files: OPEN CLOSE and INQUIRE Keywords.
-* distensions: Distensions.
-* distributions, unpacking: Unpacking.
-* distributions, why separate: Merging Distributions.
-* DLog intrinsic: DLog Intrinsic.
-* DLog10 intrinsic: DLog10 Intrinsic.
-* DMax1 intrinsic: DMax1 Intrinsic.
-* DMin1 intrinsic: DMin1 Intrinsic.
-* DMod intrinsic: DMod Intrinsic.
-* DNInt intrinsic: DNInt Intrinsic.
-* DNRM2: Actual Bugs.
-* DO loops, one-trip: Fortran Dialect Options.
-* DO statement <1>: Loops.
-* DO statement: Warning Options.
-* DO WHILE: DO WHILE.
-* documentation: Updating Documentation.
-* dollar sign <1>: Dollar Signs.
-* dollar sign: Fortran Dialect Options.
-* Dot_Product intrinsic: Dot_Product Intrinsic.
-* DOUBLE COMPLEX: DOUBLE COMPLEX.
-* DOUBLE COMPLEX type: Compiler Types.
-* DOUBLE PRECISION type: Compiler Types.
-* double quotes: Double Quote Meaning.
-* DProd intrinsic: DProd Intrinsic.
-* DReal intrinsic: DReal Intrinsic.
-* driver, gcc command as: What is GNU Fortran?.
-* DSign intrinsic: DSign Intrinsic.
-* DSin intrinsic: DSin Intrinsic.
-* DSinD intrinsic: DSinD Intrinsic.
-* DSinH intrinsic: DSinH Intrinsic.
-* DSqRt intrinsic: DSqRt Intrinsic.
-* DTan intrinsic: DTan Intrinsic.
-* DTanD intrinsic: DTanD Intrinsic.
-* DTanH intrinsic: DTanH Intrinsic.
-* Dtime intrinsic <1>: Dtime Intrinsic (function).
-* Dtime intrinsic: Dtime Intrinsic (subroutine).
-* dummies, unused: Warning Options.
-* effecting IMPLICIT NONE: Warning Options.
-* efficiency: Efficiency.
-* ELF support: Actual Bugs.
-* empty CHARACTER strings: Character Type.
-* enabled intrinsics: Intrinsic Groups.
-* ENCODE statement: ENCODE and DECODE.
-* END DO: END DO.
-* entry points: Alternate Entry Points.
-* ENTRY statement: Alternate Entry Points.
-* environment variables: Environment Variables.
-* EOShift intrinsic: EOShift Intrinsic.
-* Epsilon intrinsic: Epsilon Intrinsic.
-* equivalence areas <1>: Actual Bugs.
-* equivalence areas <2>: Local Equivalence Areas.
-* equivalence areas: Debugging Options.
-* EQUIVALENCE statement: Local Equivalence Areas.
-* ErF intrinsic: ErF Intrinsic.
-* ErFC intrinsic: ErFC Intrinsic.
-* error messages <1>: Warnings and Errors.
-* error messages: Run-time Library Errors.
-* error messages, incorrect: What is GNU Fortran?.
-* error values: Run-time Library Errors.
-* errors, linker: Large Common Blocks.
-* ETime intrinsic <1>: ETime Intrinsic (function).
-* ETime intrinsic: ETime Intrinsic (subroutine).
-* exceptions, floating point: Floating-point Exception Handling.
-* exclamation points: Exclamation Point.
-* executable file: What is GNU Fortran?.
-* Exit intrinsic: Exit Intrinsic.
-* Exp intrinsic: Exp Intrinsic.
-* Exponent intrinsic: Exponent Intrinsic.
-* extended-source option: Fortran Dialect Options.
-* extensions, file name: Overall Options.
-* extensions, more: More Extensions.
-* extensions, VXT: VXT Fortran.
-* external names: Mangling of Names.
-* extra warnings: Warning Options.
-* f2c: Increasing Precision/Range.
-* f2c compatibility <1>: Avoid f2c Compatibility.
-* f2c compatibility <2>: Block Data and Libraries.
-* f2c compatibility <3>: Debugging and Interfacing.
-* f2c compatibility <4>: Code Gen Options.
-* f2c compatibility <5>: Shorthand Options.
-* f2c compatibility: Overall Options.
-* f2c intrinsics: Fortran Dialect Options.
-* F2C_INSTALL_FLAG: Installing f2c.
-* F2CLIBOK: Installing f2c.
-* f77 command: Installing f77.
-* f77 compatibility: Shorthand Options.
-* f77 support: Backslash in Constants.
-* f771 program: What is GNU Fortran?.
-* f771, linking error for: Missing strtoul.
-* F77_INSTALL_FLAG: Installing f77.
-* fatal signal: Bug Criteria.
-* Fdate intrinsic <1>: Fdate Intrinsic (function).
-* Fdate intrinsic: Fdate Intrinsic (subroutine).
-* features, language: Direction of Language Development.
-* features, ugly <1>: Distensions.
-* features, ugly: Shorthand Options.
-* FFE: What is GNU Fortran?.
-* FFECOM_sizeMAXSTACKITEM: Maximum Stackable Size.
-* fflush() <1>: Output Assumed To Flush.
-* fflush(): Always Flush Output.
-* FGet intrinsic <1>: FGet Intrinsic (function).
-* FGet intrinsic: FGet Intrinsic (subroutine).
-* FGetC intrinsic <1>: FGetC Intrinsic (function).
-* FGetC intrinsic: FGetC Intrinsic (subroutine).
-* file format not recognized: What is GNU Fortran?.
-* file name extension: Overall Options.
-* file name suffix: Overall Options.
-* file type: Overall Options.
-* file, source: What is GNU Fortran?.
-* files, executable: What is GNU Fortran?.
-* files, source <1>: Source Form.
-* files, source: Lines.
-* fixed form <1>: Source Form.
-* fixed form <2>: Lines.
-* fixed form: Fortran Dialect Options.
-* fixed-form line length: Fortran Dialect Options.
-* Float intrinsic: Float Intrinsic.
-* FloatI intrinsic: FloatI Intrinsic.
-* floating point exceptions: Floating-point Exception Handling.
-* floating-point bit patterns: Floating-point Bit Patterns.
-* floating-point errors: Floating-point Errors.
-* FloatJ intrinsic: FloatJ Intrinsic.
-* Floor intrinsic: Floor Intrinsic.
-* Flush intrinsic: Flush Intrinsic.
-* flushing output <1>: Output Assumed To Flush.
-* flushing output: Always Flush Output.
-* FNum intrinsic: FNum Intrinsic.
-* FORMAT statement <1>: Q Edit Descriptor.
-* FORMAT statement: Expressions in FORMAT Statements.
-* FORTRAN 66 <1>: Fortran Dialect Options.
-* FORTRAN 66: Shorthand Options.
-* FORTRAN 77 compatibility: Standard Support.
-* Fortran 90 compatibility: Fortran 90.
-* Fortran 90 features: Fortran Dialect Options.
-* Fortran 90 intrinsics: Fortran Dialect Options.
-* Fortran 90 support: Fortran 90 Support.
-* Fortran preprocessor: Overall Options.
-* FPE handling: Floating-point Exception Handling.
-* FPut intrinsic <1>: FPut Intrinsic (function).
-* FPut intrinsic: FPut Intrinsic (subroutine).
-* FPutC intrinsic <1>: FPutC Intrinsic (function).
-* FPutC intrinsic: FPutC Intrinsic (subroutine).
-* Fraction intrinsic: Fraction Intrinsic.
-* free form <1>: Source Form.
-* free form <2>: Lines.
-* free form: Fortran Dialect Options.
-* front end, g77: What is GNU Fortran?.
-* FSeek intrinsic: FSeek Intrinsic.
-* FSF, funding the: Funding GNU Fortran.
-* FStat intrinsic <1>: FStat Intrinsic (function).
-* FStat intrinsic: FStat Intrinsic (subroutine).
-* FTell intrinsic <1>: FTell Intrinsic (function).
-* FTell intrinsic: FTell Intrinsic (subroutine).
-* function references, in adjustable array bounds: Array Bounds Expressions.
-* FUNCTION statement <1>: Functions.
-* FUNCTION statement: Procedures.
-* functions: Functions.
-* functions, mistyped: Not My Type.
-* funding improvements: Funding GNU Fortran.
-* funding the FSF: Funding GNU Fortran.
-* g77 command <1>: G77 and GCC.
-* g77 command: What is GNU Fortran?.
-* g77 front end: What is GNU Fortran?.
-* g77 options, --driver <1>: Invoking G77.
-* g77 options, --driver: G77 and GCC.
-* g77 options, -v: G77 and GCC.
-* g77 version number: Merging Distributions.
-* g77, components of: What is GNU Fortran?.
-* g77, installation of: Installation of Binaries.
-* GBE <1>: Patching GNU CC Necessary.
-* GBE: What is GNU Fortran?.
-* gcc back end: What is GNU Fortran?.
-* gcc command <1>: G77 and GCC.
-* gcc command: What is GNU Fortran?.
-* gcc command as driver: What is GNU Fortran?.
-* gcc not recognizing Fortran source: What is GNU Fortran?.
-* gcc version numbering: Merging Distributions.
-* gcc versions supported by g77: Merging Distributions.
-* gcc will not compile Fortran programs: Where to Install.
-* gcc, building: Building GNU CC Necessary.
-* gcc, installation of: Installation of Binaries.
-* gdb command: What is GNU Fortran?.
-* gdb support: Debugger Problems.
-* generic intrinsics: Generics and Specifics.
-* GError intrinsic: GError Intrinsic.
-* GetArg intrinsic: GetArg Intrinsic.
-* GETARG() intrinsic: Main Program Unit.
-* GetCWD intrinsic <1>: GetCWD Intrinsic (function).
-* GetCWD intrinsic: GetCWD Intrinsic (subroutine).
-* GetEnv intrinsic: GetEnv Intrinsic.
-* GetGId intrinsic: GetGId Intrinsic.
-* GetLog intrinsic: GetLog Intrinsic.
-* GetPId intrinsic: GetPId Intrinsic.
-* getting started: Getting Started.
-* GetUId intrinsic: GetUId Intrinsic.
-* global names, warning <1>: Code Gen Options.
-* global names, warning: Warning Options.
-* GMTime intrinsic: GMTime Intrinsic.
-* GNU Back End (GBE): What is GNU Fortran?.
-* GNU C required: GNU C Required.
-* GNU Fortran command options: Invoking G77.
-* GNU Fortran Front End (FFE): What is GNU Fortran?.
-* GNU version numbering: Merging Distributions.
-* GOTO statement: Assigned Statement Labels.
-* gperf: Missing gperf?.
-* groups of intrinsics: Intrinsic Groups.
-* hardware errors: Signal 11 and Friends.
-* hidden intrinsics: Intrinsic Groups.
-* Hollerith constants <1>: Character and Hollerith Constants.
-* Hollerith constants <2>: Ugly Conversion of Initializers.
-* Hollerith constants <3>: Ugly Implicit Argument Conversion.
-* Hollerith constants: Fortran Dialect Options.
-* HostNm intrinsic <1>: HostNm Intrinsic (function).
-* HostNm intrinsic: HostNm Intrinsic (subroutine).
-* Huge intrinsic: Huge Intrinsic.
-* I/O, errors: Run-time Library Errors.
-* I/O, flushing <1>: Output Assumed To Flush.
-* I/O, flushing: Always Flush Output.
-* IAbs intrinsic: IAbs Intrinsic.
-* IAChar intrinsic: IAChar Intrinsic.
-* IAnd intrinsic: IAnd Intrinsic.
-* IArgC intrinsic: IArgC Intrinsic.
-* IARGC() intrinsic: Main Program Unit.
-* IBClr intrinsic: IBClr Intrinsic.
-* IBits intrinsic: IBits Intrinsic.
-* IBSet intrinsic: IBSet Intrinsic.
-* IChar intrinsic: IChar Intrinsic.
-* IDate intrinsic <1>: IDate Intrinsic (VXT).
-* IDate intrinsic: IDate Intrinsic (UNIX).
-* IDiM intrinsic: IDiM Intrinsic.
-* IDInt intrinsic: IDInt Intrinsic.
-* IDNInt intrinsic: IDNInt Intrinsic.
-* IEEE conformance: Optimize Options.
-* IEOr intrinsic: IEOr Intrinsic.
-* IErrNo intrinsic: IErrNo Intrinsic.
-* IFix intrinsic: IFix Intrinsic.
-* IIAbs intrinsic: IIAbs Intrinsic.
-* IIAnd intrinsic: IIAnd Intrinsic.
-* IIBClr intrinsic: IIBClr Intrinsic.
-* IIBits intrinsic: IIBits Intrinsic.
-* IIBSet intrinsic: IIBSet Intrinsic.
-* IIDiM intrinsic: IIDiM Intrinsic.
-* IIDInt intrinsic: IIDInt Intrinsic.
-* IIDNnt intrinsic: IIDNnt Intrinsic.
-* IIEOr intrinsic: IIEOr Intrinsic.
-* IIFix intrinsic: IIFix Intrinsic.
-* IInt intrinsic: IInt Intrinsic.
-* IIOr intrinsic: IIOr Intrinsic.
-* IIQint intrinsic: IIQint Intrinsic.
-* IIQNnt intrinsic: IIQNnt Intrinsic.
-* IIShftC intrinsic: IIShftC Intrinsic.
-* IISign intrinsic: IISign Intrinsic.
-* illegal unit number <1>: Large File Unit Numbers.
-* illegal unit number: Larger File Unit Numbers.
-* Imag intrinsic: Imag Intrinsic.
-* imaginary part: Ugly Complex Part Extraction.
-* imaginary part of complex: Complex Variables.
-* ImagPart intrinsic: ImagPart Intrinsic.
-* IMax0 intrinsic: IMax0 Intrinsic.
-* IMax1 intrinsic: IMax1 Intrinsic.
-* IMin0 intrinsic: IMin0 Intrinsic.
-* IMin1 intrinsic: IMin1 Intrinsic.
-* IMod intrinsic: IMod Intrinsic.
-* IMPLICIT CHARACTER*(*) statement: Limitation on Implicit Declarations.
-* implicit declaration, warning: Warning Options.
-* IMPLICIT NONE, similar effect: Warning Options.
-* implicit typing: Not My Type.
-* improvements, funding: Funding GNU Fortran.
-* in-line code: What is GNU Fortran?.
-* in-line compilation: Optimize Options.
-* INCLUDE: INCLUDE.
-* INCLUDE directive <1>: Bug Reporting.
-* INCLUDE directive <2>: Directory Options.
-* INCLUDE directive: Preprocessor Options.
-* included files: Bug Reporting.
-* inclusion, directory search paths for: Directory Options.
-* inconsistent floating-point results: Floating-point Errors.
-* incorrect diagnostics: What is GNU Fortran?.
-* incorrect error messages: What is GNU Fortran?.
-* incorrect use of language: What is GNU Fortran?.
-* increasing maximum unit number <1>: Large File Unit Numbers.
-* increasing maximum unit number: Larger File Unit Numbers.
-* increasing precision: Increasing Precision/Range.
-* increasing range: Increasing Precision/Range.
-* Index intrinsic: Index Intrinsic.
-* info, updating directory: Updating Documentation.
-* INInt intrinsic: INInt Intrinsic.
-* initialization: Actual Bugs.
-* initialization of local variables: Code Gen Options.
-* initialization, runtime: Startup Code.
-* initialization, statement placement: Initializing Before Specifying.
-* INot intrinsic: INot Intrinsic.
-* INQUIRE statement: OPEN CLOSE and INQUIRE Keywords.
-* installation of binaries: Installation of Binaries.
-* installation problems: Problems Installing.
-* installation trouble: Trouble.
-* installing GNU Fortran: Installation.
-* installing, checking before: Pre-installation Checks.
-* Int intrinsic: Int Intrinsic.
-* Int2 intrinsic: Int2 Intrinsic.
-* Int8 intrinsic: Int8 Intrinsic.
-* integer constants: Actual Bugs.
-* INTEGER(KIND=1) type: Compiler Types.
-* INTEGER(KIND=2) type: Compiler Types.
-* INTEGER(KIND=3) type: Compiler Types.
-* INTEGER(KIND=6) type: Compiler Types.
-* INTEGER*2 support: Popular Non-standard Types.
-* interfacing: Debugging and Interfacing.
-* intrinsics, Abort: Abort Intrinsic.
-* intrinsics, Abs: Abs Intrinsic.
-* intrinsics, Access: Access Intrinsic.
-* intrinsics, AChar: AChar Intrinsic.
-* intrinsics, ACos: ACos Intrinsic.
-* intrinsics, ACosD: ACosD Intrinsic.
-* intrinsics, AdjustL: AdjustL Intrinsic.
-* intrinsics, AdjustR: AdjustR Intrinsic.
-* intrinsics, AImag: AImag Intrinsic.
-* intrinsics, AIMAG: REAL() and AIMAG() of Complex.
-* intrinsics, AIMax0: AIMax0 Intrinsic.
-* intrinsics, AIMin0: AIMin0 Intrinsic.
-* intrinsics, AInt: AInt Intrinsic.
-* intrinsics, AJMax0: AJMax0 Intrinsic.
-* intrinsics, AJMin0: AJMin0 Intrinsic.
-* intrinsics, Alarm: Alarm Intrinsic.
-* intrinsics, All: All Intrinsic.
-* intrinsics, Allocated: Allocated Intrinsic.
-* intrinsics, ALog: ALog Intrinsic.
-* intrinsics, ALog10: ALog10 Intrinsic.
-* intrinsics, AMax0: AMax0 Intrinsic.
-* intrinsics, AMax1: AMax1 Intrinsic.
-* intrinsics, AMin0: AMin0 Intrinsic.
-* intrinsics, AMin1: AMin1 Intrinsic.
-* intrinsics, AMod: AMod Intrinsic.
-* intrinsics, AND: Bit Operations on Floating-point Data.
-* intrinsics, And: And Intrinsic.
-* intrinsics, ANInt: ANInt Intrinsic.
-* intrinsics, Any: Any Intrinsic.
-* intrinsics, ASin: ASin Intrinsic.
-* intrinsics, ASinD: ASinD Intrinsic.
-* intrinsics, Associated: Associated Intrinsic.
-* intrinsics, ATan: ATan Intrinsic.
-* intrinsics, ATan2: ATan2 Intrinsic.
-* intrinsics, ATan2D: ATan2D Intrinsic.
-* intrinsics, ATanD: ATanD Intrinsic.
-* intrinsics, BesJ0: BesJ0 Intrinsic.
-* intrinsics, BesJ1: BesJ1 Intrinsic.
-* intrinsics, BesJN: BesJN Intrinsic.
-* intrinsics, BesY0: BesY0 Intrinsic.
-* intrinsics, BesY1: BesY1 Intrinsic.
-* intrinsics, BesYN: BesYN Intrinsic.
-* intrinsics, Bit_Size: Bit_Size Intrinsic.
-* intrinsics, BITest: BITest Intrinsic.
-* intrinsics, BJTest: BJTest Intrinsic.
-* intrinsics, BTest: BTest Intrinsic.
-* intrinsics, CAbs: CAbs Intrinsic.
-* intrinsics, CCos: CCos Intrinsic.
-* intrinsics, CDAbs: CDAbs Intrinsic.
-* intrinsics, CDCos: CDCos Intrinsic.
-* intrinsics, CDExp: CDExp Intrinsic.
-* intrinsics, CDLog: CDLog Intrinsic.
-* intrinsics, CDSin: CDSin Intrinsic.
-* intrinsics, CDSqRt: CDSqRt Intrinsic.
-* intrinsics, Ceiling: Ceiling Intrinsic.
-* intrinsics, CExp: CExp Intrinsic.
-* intrinsics, Char: Char Intrinsic.
-* intrinsics, ChDir <1>: ChDir Intrinsic (function).
-* intrinsics, ChDir: ChDir Intrinsic (subroutine).
-* intrinsics, ChMod <1>: ChMod Intrinsic (function).
-* intrinsics, ChMod: ChMod Intrinsic (subroutine).
-* intrinsics, CLog: CLog Intrinsic.
-* intrinsics, Cmplx: Cmplx Intrinsic.
-* intrinsics, CMPLX: CMPLX() of DOUBLE PRECISION.
-* intrinsics, Complex: Complex Intrinsic.
-* intrinsics, COMPLEX: Fortran Dialect Options.
-* intrinsics, Conjg: Conjg Intrinsic.
-* intrinsics, context-sensitive: Context-Sensitive Intrinsicness.
-* intrinsics, Cos: Cos Intrinsic.
-* intrinsics, CosD: CosD Intrinsic.
-* intrinsics, CosH: CosH Intrinsic.
-* intrinsics, Count: Count Intrinsic.
-* intrinsics, Cpu_Time: Cpu_Time Intrinsic.
-* intrinsics, CShift: CShift Intrinsic.
-* intrinsics, CSin: CSin Intrinsic.
-* intrinsics, CSqRt: CSqRt Intrinsic.
-* intrinsics, CTime <1>: CTime Intrinsic (function).
-* intrinsics, CTime: CTime Intrinsic (subroutine).
-* intrinsics, DAbs: DAbs Intrinsic.
-* intrinsics, DACos: DACos Intrinsic.
-* intrinsics, DACosD: DACosD Intrinsic.
-* intrinsics, DASin: DASin Intrinsic.
-* intrinsics, DASinD: DASinD Intrinsic.
-* intrinsics, DATan: DATan Intrinsic.
-* intrinsics, DATan2: DATan2 Intrinsic.
-* intrinsics, DATan2D: DATan2D Intrinsic.
-* intrinsics, DATanD: DATanD Intrinsic.
-* intrinsics, Date: Date Intrinsic.
-* intrinsics, Date_and_Time: Date_and_Time Intrinsic.
-* intrinsics, DbesJ0: DbesJ0 Intrinsic.
-* intrinsics, DbesJ1: DbesJ1 Intrinsic.
-* intrinsics, DbesJN: DbesJN Intrinsic.
-* intrinsics, DbesY0: DbesY0 Intrinsic.
-* intrinsics, DbesY1: DbesY1 Intrinsic.
-* intrinsics, DbesYN: DbesYN Intrinsic.
-* intrinsics, Dble: Dble Intrinsic.
-* intrinsics, DbleQ: DbleQ Intrinsic.
-* intrinsics, DCmplx: DCmplx Intrinsic.
-* intrinsics, DConjg: DConjg Intrinsic.
-* intrinsics, DCos: DCos Intrinsic.
-* intrinsics, DCosD: DCosD Intrinsic.
-* intrinsics, DCosH: DCosH Intrinsic.
-* intrinsics, DDiM: DDiM Intrinsic.
-* intrinsics, deleted: Intrinsic Groups.
-* intrinsics, DErF: DErF Intrinsic.
-* intrinsics, DErFC: DErFC Intrinsic.
-* intrinsics, DExp: DExp Intrinsic.
-* intrinsics, DFloat: DFloat Intrinsic.
-* intrinsics, DFlotI: DFlotI Intrinsic.
-* intrinsics, DFlotJ: DFlotJ Intrinsic.
-* intrinsics, Digits: Digits Intrinsic.
-* intrinsics, DiM: DiM Intrinsic.
-* intrinsics, DImag: DImag Intrinsic.
-* intrinsics, DInt: DInt Intrinsic.
-* intrinsics, disabled: Intrinsic Groups.
-* intrinsics, DLog: DLog Intrinsic.
-* intrinsics, DLog10: DLog10 Intrinsic.
-* intrinsics, DMax1: DMax1 Intrinsic.
-* intrinsics, DMin1: DMin1 Intrinsic.
-* intrinsics, DMod: DMod Intrinsic.
-* intrinsics, DNInt: DNInt Intrinsic.
-* intrinsics, Dot_Product: Dot_Product Intrinsic.
-* intrinsics, DProd: DProd Intrinsic.
-* intrinsics, DReal: DReal Intrinsic.
-* intrinsics, DSign: DSign Intrinsic.
-* intrinsics, DSin: DSin Intrinsic.
-* intrinsics, DSinD: DSinD Intrinsic.
-* intrinsics, DSinH: DSinH Intrinsic.
-* intrinsics, DSqRt: DSqRt Intrinsic.
-* intrinsics, DTan: DTan Intrinsic.
-* intrinsics, DTanD: DTanD Intrinsic.
-* intrinsics, DTanH: DTanH Intrinsic.
-* intrinsics, Dtime <1>: Dtime Intrinsic (function).
-* intrinsics, Dtime: Dtime Intrinsic (subroutine).
-* intrinsics, enabled: Intrinsic Groups.
-* intrinsics, EOShift: EOShift Intrinsic.
-* intrinsics, Epsilon: Epsilon Intrinsic.
-* intrinsics, ErF: ErF Intrinsic.
-* intrinsics, ErFC: ErFC Intrinsic.
-* intrinsics, ETime <1>: ETime Intrinsic (function).
-* intrinsics, ETime: ETime Intrinsic (subroutine).
-* intrinsics, Exit: Exit Intrinsic.
-* intrinsics, Exp: Exp Intrinsic.
-* intrinsics, Exponent: Exponent Intrinsic.
-* intrinsics, f2c: Fortran Dialect Options.
-* intrinsics, Fdate <1>: Fdate Intrinsic (function).
-* intrinsics, Fdate: Fdate Intrinsic (subroutine).
-* intrinsics, FGet <1>: FGet Intrinsic (function).
-* intrinsics, FGet: FGet Intrinsic (subroutine).
-* intrinsics, FGetC <1>: FGetC Intrinsic (function).
-* intrinsics, FGetC: FGetC Intrinsic (subroutine).
-* intrinsics, Float: Float Intrinsic.
-* intrinsics, FloatI: FloatI Intrinsic.
-* intrinsics, FloatJ: FloatJ Intrinsic.
-* intrinsics, Floor: Floor Intrinsic.
-* intrinsics, Flush: Flush Intrinsic.
-* intrinsics, FNum: FNum Intrinsic.
-* intrinsics, Fortran 90: Fortran Dialect Options.
-* intrinsics, FPut <1>: FPut Intrinsic (function).
-* intrinsics, FPut: FPut Intrinsic (subroutine).
-* intrinsics, FPutC <1>: FPutC Intrinsic (function).
-* intrinsics, FPutC: FPutC Intrinsic (subroutine).
-* intrinsics, Fraction: Fraction Intrinsic.
-* intrinsics, FSeek: FSeek Intrinsic.
-* intrinsics, FStat <1>: FStat Intrinsic (function).
-* intrinsics, FStat: FStat Intrinsic (subroutine).
-* intrinsics, FTell <1>: FTell Intrinsic (function).
-* intrinsics, FTell: FTell Intrinsic (subroutine).
-* intrinsics, generic: Generics and Specifics.
-* intrinsics, GError: GError Intrinsic.
-* intrinsics, GetArg: GetArg Intrinsic.
-* intrinsics, GETARG(): Main Program Unit.
-* intrinsics, GetCWD <1>: GetCWD Intrinsic (function).
-* intrinsics, GetCWD: GetCWD Intrinsic (subroutine).
-* intrinsics, GetEnv: GetEnv Intrinsic.
-* intrinsics, GetGId: GetGId Intrinsic.
-* intrinsics, GetLog: GetLog Intrinsic.
-* intrinsics, GetPId: GetPId Intrinsic.
-* intrinsics, GetUId: GetUId Intrinsic.
-* intrinsics, GMTime: GMTime Intrinsic.
-* intrinsics, groups: Intrinsic Groups.
-* intrinsics, groups of: Intrinsic Groups.
-* intrinsics, hidden: Intrinsic Groups.
-* intrinsics, HostNm <1>: HostNm Intrinsic (function).
-* intrinsics, HostNm: HostNm Intrinsic (subroutine).
-* intrinsics, Huge: Huge Intrinsic.
-* intrinsics, IAbs: IAbs Intrinsic.
-* intrinsics, IAChar: IAChar Intrinsic.
-* intrinsics, IAnd: IAnd Intrinsic.
-* intrinsics, IArgC: IArgC Intrinsic.
-* intrinsics, IARGC(): Main Program Unit.
-* intrinsics, IBClr: IBClr Intrinsic.
-* intrinsics, IBits: IBits Intrinsic.
-* intrinsics, IBSet: IBSet Intrinsic.
-* intrinsics, IChar: IChar Intrinsic.
-* intrinsics, IDate <1>: IDate Intrinsic (VXT).
-* intrinsics, IDate: IDate Intrinsic (UNIX).
-* intrinsics, IDiM: IDiM Intrinsic.
-* intrinsics, IDInt: IDInt Intrinsic.
-* intrinsics, IDNInt: IDNInt Intrinsic.
-* intrinsics, IEOr: IEOr Intrinsic.
-* intrinsics, IErrNo: IErrNo Intrinsic.
-* intrinsics, IFix: IFix Intrinsic.
-* intrinsics, IIAbs: IIAbs Intrinsic.
-* intrinsics, IIAnd: IIAnd Intrinsic.
-* intrinsics, IIBClr: IIBClr Intrinsic.
-* intrinsics, IIBits: IIBits Intrinsic.
-* intrinsics, IIBSet: IIBSet Intrinsic.
-* intrinsics, IIDiM: IIDiM Intrinsic.
-* intrinsics, IIDInt: IIDInt Intrinsic.
-* intrinsics, IIDNnt: IIDNnt Intrinsic.
-* intrinsics, IIEOr: IIEOr Intrinsic.
-* intrinsics, IIFix: IIFix Intrinsic.
-* intrinsics, IInt: IInt Intrinsic.
-* intrinsics, IIOr: IIOr Intrinsic.
-* intrinsics, IIQint: IIQint Intrinsic.
-* intrinsics, IIQNnt: IIQNnt Intrinsic.
-* intrinsics, IIShftC: IIShftC Intrinsic.
-* intrinsics, IISign: IISign Intrinsic.
-* intrinsics, Imag: Imag Intrinsic.
-* intrinsics, ImagPart: ImagPart Intrinsic.
-* intrinsics, IMax0: IMax0 Intrinsic.
-* intrinsics, IMax1: IMax1 Intrinsic.
-* intrinsics, IMin0: IMin0 Intrinsic.
-* intrinsics, IMin1: IMin1 Intrinsic.
-* intrinsics, IMod: IMod Intrinsic.
-* intrinsics, Index: Index Intrinsic.
-* intrinsics, INInt: INInt Intrinsic.
-* intrinsics, INot: INot Intrinsic.
-* intrinsics, Int: Int Intrinsic.
-* intrinsics, Int2: Int2 Intrinsic.
-* intrinsics, Int8: Int8 Intrinsic.
-* intrinsics, IOr: IOr Intrinsic.
-* intrinsics, IRand: IRand Intrinsic.
-* intrinsics, IsaTty: IsaTty Intrinsic.
-* intrinsics, IShft: IShft Intrinsic.
-* intrinsics, IShftC: IShftC Intrinsic.
-* intrinsics, ISign: ISign Intrinsic.
-* intrinsics, ITime: ITime Intrinsic.
-* intrinsics, IZExt: IZExt Intrinsic.
-* intrinsics, JIAbs: JIAbs Intrinsic.
-* intrinsics, JIAnd: JIAnd Intrinsic.
-* intrinsics, JIBClr: JIBClr Intrinsic.
-* intrinsics, JIBits: JIBits Intrinsic.
-* intrinsics, JIBSet: JIBSet Intrinsic.
-* intrinsics, JIDiM: JIDiM Intrinsic.
-* intrinsics, JIDInt: JIDInt Intrinsic.
-* intrinsics, JIDNnt: JIDNnt Intrinsic.
-* intrinsics, JIEOr: JIEOr Intrinsic.
-* intrinsics, JIFix: JIFix Intrinsic.
-* intrinsics, JInt: JInt Intrinsic.
-* intrinsics, JIOr: JIOr Intrinsic.
-* intrinsics, JIQint: JIQint Intrinsic.
-* intrinsics, JIQNnt: JIQNnt Intrinsic.
-* intrinsics, JIShft: JIShft Intrinsic.
-* intrinsics, JIShftC: JIShftC Intrinsic.
-* intrinsics, JISign: JISign Intrinsic.
-* intrinsics, JMax0: JMax0 Intrinsic.
-* intrinsics, JMax1: JMax1 Intrinsic.
-* intrinsics, JMin0: JMin0 Intrinsic.
-* intrinsics, JMin1: JMin1 Intrinsic.
-* intrinsics, JMod: JMod Intrinsic.
-* intrinsics, JNInt: JNInt Intrinsic.
-* intrinsics, JNot: JNot Intrinsic.
-* intrinsics, JZExt: JZExt Intrinsic.
-* intrinsics, Kill <1>: Kill Intrinsic (function).
-* intrinsics, Kill: Kill Intrinsic (subroutine).
-* intrinsics, Kind: Kind Intrinsic.
-* intrinsics, LBound: LBound Intrinsic.
-* intrinsics, Len: Len Intrinsic.
-* intrinsics, Len_Trim: Len_Trim Intrinsic.
-* intrinsics, LGe: LGe Intrinsic.
-* intrinsics, LGt: LGt Intrinsic.
-* intrinsics, Link <1>: Link Intrinsic (function).
-* intrinsics, Link: Link Intrinsic (subroutine).
-* intrinsics, LLe: LLe Intrinsic.
-* intrinsics, LLt: LLt Intrinsic.
-* intrinsics, LnBlnk: LnBlnk Intrinsic.
-* intrinsics, Loc: Loc Intrinsic.
-* intrinsics, Log: Log Intrinsic.
-* intrinsics, Log10: Log10 Intrinsic.
-* intrinsics, Logical: Logical Intrinsic.
-* intrinsics, Long: Long Intrinsic.
-* intrinsics, LShift: LShift Intrinsic.
-* intrinsics, LStat <1>: LStat Intrinsic (function).
-* intrinsics, LStat: LStat Intrinsic (subroutine).
-* intrinsics, LTime: LTime Intrinsic.
-* intrinsics, MatMul: MatMul Intrinsic.
-* intrinsics, Max: Max Intrinsic.
-* intrinsics, Max0: Max0 Intrinsic.
-* intrinsics, Max1: Max1 Intrinsic.
-* intrinsics, MaxExponent: MaxExponent Intrinsic.
-* intrinsics, MaxLoc: MaxLoc Intrinsic.
-* intrinsics, MaxVal: MaxVal Intrinsic.
-* intrinsics, MClock: MClock Intrinsic.
-* intrinsics, MClock8: MClock8 Intrinsic.
-* intrinsics, Merge: Merge Intrinsic.
-* intrinsics, MIL-STD 1753: Fortran Dialect Options.
-* intrinsics, Min: Min Intrinsic.
-* intrinsics, Min0: Min0 Intrinsic.
-* intrinsics, Min1: Min1 Intrinsic.
-* intrinsics, MinExponent: MinExponent Intrinsic.
-* intrinsics, MinLoc: MinLoc Intrinsic.
-* intrinsics, MinVal: MinVal Intrinsic.
-* intrinsics, Mod: Mod Intrinsic.
-* intrinsics, Modulo: Modulo Intrinsic.
-* intrinsics, MvBits: MvBits Intrinsic.
-* intrinsics, Nearest: Nearest Intrinsic.
-* intrinsics, NInt: NInt Intrinsic.
-* intrinsics, Not: Not Intrinsic.
-* intrinsics, OR: Bit Operations on Floating-point Data.
-* intrinsics, Or: Or Intrinsic.
-* intrinsics, others: Other Intrinsics.
-* intrinsics, Pack: Pack Intrinsic.
-* intrinsics, PError: PError Intrinsic.
-* intrinsics, Precision: Precision Intrinsic.
-* intrinsics, Present: Present Intrinsic.
-* intrinsics, Product: Product Intrinsic.
-* intrinsics, QAbs: QAbs Intrinsic.
-* intrinsics, QACos: QACos Intrinsic.
-* intrinsics, QACosD: QACosD Intrinsic.
-* intrinsics, QASin: QASin Intrinsic.
-* intrinsics, QASinD: QASinD Intrinsic.
-* intrinsics, QATan: QATan Intrinsic.
-* intrinsics, QATan2: QATan2 Intrinsic.
-* intrinsics, QATan2D: QATan2D Intrinsic.
-* intrinsics, QATanD: QATanD Intrinsic.
-* intrinsics, QCos: QCos Intrinsic.
-* intrinsics, QCosD: QCosD Intrinsic.
-* intrinsics, QCosH: QCosH Intrinsic.
-* intrinsics, QDiM: QDiM Intrinsic.
-* intrinsics, QExp: QExp Intrinsic.
-* intrinsics, QExt: QExt Intrinsic.
-* intrinsics, QExtD: QExtD Intrinsic.
-* intrinsics, QFloat: QFloat Intrinsic.
-* intrinsics, QInt: QInt Intrinsic.
-* intrinsics, QLog: QLog Intrinsic.
-* intrinsics, QLog10: QLog10 Intrinsic.
-* intrinsics, QMax1: QMax1 Intrinsic.
-* intrinsics, QMin1: QMin1 Intrinsic.
-* intrinsics, QMod: QMod Intrinsic.
-* intrinsics, QNInt: QNInt Intrinsic.
-* intrinsics, QSin: QSin Intrinsic.
-* intrinsics, QSinD: QSinD Intrinsic.
-* intrinsics, QSinH: QSinH Intrinsic.
-* intrinsics, QSqRt: QSqRt Intrinsic.
-* intrinsics, QTan: QTan Intrinsic.
-* intrinsics, QTanD: QTanD Intrinsic.
-* intrinsics, QTanH: QTanH Intrinsic.
-* intrinsics, Radix: Radix Intrinsic.
-* intrinsics, Rand: Rand Intrinsic.
-* intrinsics, Random_Number: Random_Number Intrinsic.
-* intrinsics, Random_Seed: Random_Seed Intrinsic.
-* intrinsics, Range: Range Intrinsic.
-* intrinsics, Real: Real Intrinsic.
-* intrinsics, REAL: REAL() and AIMAG() of Complex.
-* intrinsics, RealPart: RealPart Intrinsic.
-* intrinsics, Rename <1>: Rename Intrinsic (function).
-* intrinsics, Rename: Rename Intrinsic (subroutine).
-* intrinsics, Repeat: Repeat Intrinsic.
-* intrinsics, Reshape: Reshape Intrinsic.
-* intrinsics, RRSpacing: RRSpacing Intrinsic.
-* intrinsics, RShift: RShift Intrinsic.
-* intrinsics, Scale: Scale Intrinsic.
-* intrinsics, Scan: Scan Intrinsic.
-* intrinsics, Secnds: Secnds Intrinsic.
-* intrinsics, Second <1>: Second Intrinsic (subroutine).
-* intrinsics, Second: Second Intrinsic (function).
-* intrinsics, Selected_Int_Kind: Selected_Int_Kind Intrinsic.
-* intrinsics, Selected_Real_Kind: Selected_Real_Kind Intrinsic.
-* intrinsics, Set_Exponent: Set_Exponent Intrinsic.
-* intrinsics, Shape: Shape Intrinsic.
-* intrinsics, SHIFT: Bit Operations on Floating-point Data.
-* intrinsics, Short: Short Intrinsic.
-* intrinsics, Sign: Sign Intrinsic.
-* intrinsics, Signal <1>: Signal Intrinsic (function).
-* intrinsics, Signal: Signal Intrinsic (subroutine).
-* intrinsics, SIGNAL(): Actual Bugs.
-* intrinsics, Sin: Sin Intrinsic.
-* intrinsics, SinD: SinD Intrinsic.
-* intrinsics, SinH: SinH Intrinsic.
-* intrinsics, Sleep: Sleep Intrinsic.
-* intrinsics, Sngl: Sngl Intrinsic.
-* intrinsics, SnglQ: SnglQ Intrinsic.
-* intrinsics, Spacing: Spacing Intrinsic.
-* intrinsics, Spread: Spread Intrinsic.
-* intrinsics, SqRt: SqRt Intrinsic.
-* intrinsics, SRand: SRand Intrinsic.
-* intrinsics, Stat <1>: Stat Intrinsic (function).
-* intrinsics, Stat: Stat Intrinsic (subroutine).
-* intrinsics, Sum: Sum Intrinsic.
-* intrinsics, SymLnk <1>: SymLnk Intrinsic (function).
-* intrinsics, SymLnk: SymLnk Intrinsic (subroutine).
-* intrinsics, System <1>: System Intrinsic (function).
-* intrinsics, System: System Intrinsic (subroutine).
-* intrinsics, System_Clock: System_Clock Intrinsic.
-* intrinsics, table of: Table of Intrinsic Functions.
-* intrinsics, Tan: Tan Intrinsic.
-* intrinsics, TanD: TanD Intrinsic.
-* intrinsics, TanH: TanH Intrinsic.
-* intrinsics, Time <1>: Time Intrinsic (VXT).
-* intrinsics, Time: Time Intrinsic (UNIX).
-* intrinsics, Time8: Time8 Intrinsic.
-* intrinsics, Tiny: Tiny Intrinsic.
-* intrinsics, Transfer: Transfer Intrinsic.
-* intrinsics, Transpose: Transpose Intrinsic.
-* intrinsics, Trim: Trim Intrinsic.
-* intrinsics, TtyNam <1>: TtyNam Intrinsic (function).
-* intrinsics, TtyNam: TtyNam Intrinsic (subroutine).
-* intrinsics, UBound: UBound Intrinsic.
-* intrinsics, UMask <1>: UMask Intrinsic (function).
-* intrinsics, UMask: UMask Intrinsic (subroutine).
-* intrinsics, UNIX: Fortran Dialect Options.
-* intrinsics, Unlink <1>: Unlink Intrinsic (function).
-* intrinsics, Unlink: Unlink Intrinsic (subroutine).
-* intrinsics, Unpack: Unpack Intrinsic.
-* intrinsics, Verify: Verify Intrinsic.
-* intrinsics, VXT: Fortran Dialect Options.
-* intrinsics, XOr: XOr Intrinsic.
-* intrinsics, ZAbs: ZAbs Intrinsic.
-* intrinsics, ZCos: ZCos Intrinsic.
-* intrinsics, ZExp: ZExp Intrinsic.
-* intrinsics, ZExt: ZExt Intrinsic.
-* intrinsics, ZLog: ZLog Intrinsic.
-* intrinsics, ZSin: ZSin Intrinsic.
-* intrinsics, ZSqRt: ZSqRt Intrinsic.
-* Introduction: Top.
-* invalid assembly code: Bug Criteria.
-* invalid input: Bug Criteria.
-* IOr intrinsic: IOr Intrinsic.
-* IOSTAT=: Run-time Library Errors.
-* IRand intrinsic: IRand Intrinsic.
-* IsaTty intrinsic: IsaTty Intrinsic.
-* IShft intrinsic: IShft Intrinsic.
-* IShftC intrinsic: IShftC Intrinsic.
-* ISign intrinsic: ISign Intrinsic.
-* ITime intrinsic: ITime Intrinsic.
-* ix86: Actual Bugs.
-* IZExt intrinsic: IZExt Intrinsic.
-* JCB002 program: Generics and Specifics.
-* JCB003 program: CMPAMBIG.
-* JIAbs intrinsic: JIAbs Intrinsic.
-* JIAnd intrinsic: JIAnd Intrinsic.
-* JIBClr intrinsic: JIBClr Intrinsic.
-* JIBits intrinsic: JIBits Intrinsic.
-* JIBSet intrinsic: JIBSet Intrinsic.
-* JIDiM intrinsic: JIDiM Intrinsic.
-* JIDInt intrinsic: JIDInt Intrinsic.
-* JIDNnt intrinsic: JIDNnt Intrinsic.
-* JIEOr intrinsic: JIEOr Intrinsic.
-* JIFix intrinsic: JIFix Intrinsic.
-* JInt intrinsic: JInt Intrinsic.
-* JIOr intrinsic: JIOr Intrinsic.
-* JIQint intrinsic: JIQint Intrinsic.
-* JIQNnt intrinsic: JIQNnt Intrinsic.
-* JIShft intrinsic: JIShft Intrinsic.
-* JIShftC intrinsic: JIShftC Intrinsic.
-* JISign intrinsic: JISign Intrinsic.
-* JMax0 intrinsic: JMax0 Intrinsic.
-* JMax1 intrinsic: JMax1 Intrinsic.
-* JMin0 intrinsic: JMin0 Intrinsic.
-* JMin1 intrinsic: JMin1 Intrinsic.
-* JMod intrinsic: JMod Intrinsic.
-* JNInt intrinsic: JNInt Intrinsic.
-* JNot intrinsic: JNot Intrinsic.
-* JZExt intrinsic: JZExt Intrinsic.
-* keywords, RECURSIVE: RECURSIVE Keyword.
-* Kill intrinsic <1>: Kill Intrinsic (function).
-* Kill intrinsic: Kill Intrinsic (subroutine).
-* Kind intrinsic: Kind Intrinsic.
-* KIND= notation: Kind Notation.
-* known causes of trouble: Trouble.
-* lack of recursion: RECURSIVE Keyword.
-* language dialect options: Fortran Dialect Options.
-* language f77 not recognized: Where to Install.
-* language features: Direction of Language Development.
-* language, incorrect use of: What is GNU Fortran?.
-* LANGUAGES: Building gcc.
-* large aggregate areas: Actual Bugs.
-* large common blocks: Large Common Blocks.
-* large initialization: Large Initialization.
-* layout of common blocks: Aligned Data.
-* LBound intrinsic: LBound Intrinsic.
-* ld can't find _main: Cannot Link Fortran Programs.
-* ld can't find _strtoul: Missing strtoul.
-* ld can't find strange names: Cannot Link Fortran Programs.
-* ld command: What is GNU Fortran?.
-* ld error for f771: Missing strtoul.
-* ld error for user code: Cannot Link Fortran Programs.
-* ld errors: Large Common Blocks.
-* legacy code: Collected Fortran Wisdom.
-* Len intrinsic: Len Intrinsic.
-* Len_Trim intrinsic: Len_Trim Intrinsic.
-* length of source lines: Fortran Dialect Options.
-* letters, lowercase: Case Sensitivity.
-* letters, uppercase: Case Sensitivity.
-* LGe intrinsic: LGe Intrinsic.
-* LGt intrinsic: LGt Intrinsic.
-* libc, non-ANSI or non-default: Strange Behavior at Run Time.
-* libf2c library: What is GNU Fortran?.
-* libraries: What is GNU Fortran?.
-* libraries, containing BLOCK DATA: Block Data and Libraries.
-* libraries, libf2c: What is GNU Fortran?.
-* limits on continuation lines: Continuation Line.
-* limits, compiler: Compiler Limits.
-* line length: Fortran Dialect Options.
-* lines: Lines.
-* lines, continuation: Continuation Line.
-* lines, long: Long Lines.
-* lines, short: Short Lines.
-* Link intrinsic <1>: Link Intrinsic (function).
-* Link intrinsic: Link Intrinsic (subroutine).
-* linker errors: Large Common Blocks.
-* linking: What is GNU Fortran?.
-* linking against non-standard library: Strange Behavior at Run Time.
-* linking error for f771: Missing strtoul.
-* linking error for user code: Cannot Link Fortran Programs.
-* linking with C: Interoperating with C and C++.
-* LLe intrinsic: LLe Intrinsic.
-* LLt intrinsic: LLt Intrinsic.
-* LnBlnk intrinsic: LnBlnk Intrinsic.
-* Loc intrinsic: Loc Intrinsic.
-* local equivalence areas <1>: Actual Bugs.
-* local equivalence areas: Local Equivalence Areas.
-* Log intrinsic: Log Intrinsic.
-* Log10 intrinsic: Log10 Intrinsic.
-* logical expressions, comparing: Equivalence Versus Equality.
-* Logical intrinsic: Logical Intrinsic.
-* LOGICAL(KIND=1) type: Compiler Types.
-* LOGICAL(KIND=2) type: Compiler Types.
-* LOGICAL(KIND=3) type: Compiler Types.
-* LOGICAL(KIND=6) type: Compiler Types.
-* LOGICAL*1 support: Popular Non-standard Types.
-* Long intrinsic: Long Intrinsic.
-* long source lines: Long Lines.
-* loops, speeding up: Optimize Options.
-* loops, unrolling: Optimize Options.
-* lowercase letters: Case Sensitivity.
-* LShift intrinsic: LShift Intrinsic.
-* LStat intrinsic <1>: LStat Intrinsic (function).
-* LStat intrinsic: LStat Intrinsic (subroutine).
-* LTime intrinsic: LTime Intrinsic.
-* machine code: What is GNU Fortran?.
-* macro options: Shorthand Options.
-* main program unit, debugging: Main Program Unit.
-* main(): Main Program Unit.
-* MAIN__(): Main Program Unit.
-* make clean: Cleanup Kills Stage Directories.
-* make compare: Object File Differences.
-* makeinfo: Missing makeinfo?.
-* MAP statement: STRUCTURE UNION RECORD MAP.
-* MatMul intrinsic: MatMul Intrinsic.
-* Max intrinsic: Max Intrinsic.
-* Max0 intrinsic: Max0 Intrinsic.
-* Max1 intrinsic: Max1 Intrinsic.
-* MaxExponent intrinsic: MaxExponent Intrinsic.
-* maximum number of dimensions: Compiler Limits.
-* maximum rank: Compiler Limits.
-* maximum stackable size: Maximum Stackable Size.
-* maximum unit number <1>: Large File Unit Numbers.
-* maximum unit number: Larger File Unit Numbers.
-* MaxLoc intrinsic: MaxLoc Intrinsic.
-* MaxVal intrinsic: MaxVal Intrinsic.
-* MClock intrinsic: MClock Intrinsic.
-* MClock8 intrinsic: MClock8 Intrinsic.
-* memory usage, of compiler: Actual Bugs.
-* memory utilization: Large Initialization.
-* Merge intrinsic: Merge Intrinsic.
-* merging distributions: Merging Distributions.
-* messages, run-time: Run-time Library Errors.
-* messages, warning: Warning Options.
-* messages, warning and error: Warnings and Errors.
-* MIL-STD 1753 <1>: MIL-STD 1753.
-* MIL-STD 1753 <2>: END DO.
-* MIL-STD 1753 <3>: DO WHILE.
-* MIL-STD 1753: Fortran Dialect Options.
-* Min intrinsic: Min Intrinsic.
-* Min0 intrinsic: Min0 Intrinsic.
-* Min1 intrinsic: Min1 Intrinsic.
-* MinExponent intrinsic: MinExponent Intrinsic.
-* MinLoc intrinsic: MinLoc Intrinsic.
-* MinVal intrinsic: MinVal Intrinsic.
-* missing bison: Missing bison?.
-* missing debug features: Debugging Options.
-* missing gperf: Missing gperf?.
-* missing makeinfo: Missing makeinfo?.
-* mistakes: What is GNU Fortran?.
-* mistyped functions: Not My Type.
-* mistyped variables: Not My Type.
-* Mod intrinsic: Mod Intrinsic.
-* modifying g77 <1>: Unpacking.
-* modifying g77: Overall Options.
-* Modulo intrinsic: Modulo Intrinsic.
-* MvBits intrinsic: MvBits Intrinsic.
-* MXUNIT <1>: Large File Unit Numbers.
-* MXUNIT: Larger File Unit Numbers.
-* name space: Mangling of Names.
-* NAMELIST statement: NAMELIST.
-* naming conflicts: Multiple Definitions of External Names.
-* naming issues: Mangling of Names.
-* naming programs test: Nothing Happens.
-* NaN values: Floating-point Exception Handling.
-* native compiler: Installing f77.
-* Nearest intrinsic: Nearest Intrinsic.
-* negative forms of options: Invoking G77.
-* Netlib <1>: Increasing Precision/Range.
-* Netlib: C Interfacing Tools.
-* network file system <1>: Output Assumed To Flush.
-* network file system: Always Flush Output.
-* new users: Getting Started.
-* newbies: Getting Started.
-* NeXTStep problems: NeXTStep Problems.
-* NFS <1>: Output Assumed To Flush.
-* NFS: Always Flush Output.
-* NInt intrinsic: NInt Intrinsic.
-* nonportable conversions: Nonportable Conversions.
-* Not intrinsic: Not Intrinsic.
-* nothing happens: Nothing Happens.
-* null arguments: Ugly Null Arguments.
-* null byte, trailing: Character and Hollerith Constants.
-* null CHARACTER strings: Character Type.
-* number of continuation lines: Continuation Line.
-* number of dimensions, maximum: Compiler Limits.
-* number of trips: Loops.
-* object file, differences: Object File Differences.
-* octal constants: Double Quote Meaning.
-* omitting arguments: Ugly Null Arguments.
-* one-trip DO loops: Fortran Dialect Options.
-* OPEN statement: OPEN CLOSE and INQUIRE Keywords.
-* optimization, better: Better Optimization.
-* optimizations, Pentium <1>: Use Submodel Options.
-* optimizations, Pentium <2>: Aligned Data.
-* optimizations, Pentium: Unpacking.
-* optimize options: Optimize Options.
-* options to control warnings: Warning Options.
-* options, --driver <1>: Invoking G77.
-* options, --driver: G77 and GCC.
-* options, -falias-check <1>: Aliasing Assumed To Work.
-* options, -falias-check: Code Gen Options.
-* options, -fargument-alias <1>: Aliasing Assumed To Work.
-* options, -fargument-alias: Code Gen Options.
-* options, -fargument-noalias <1>: Aliasing Assumed To Work.
-* options, -fargument-noalias: Code Gen Options.
-* options, -fcaller-saves: Optimize Options.
-* options, -fcase-initcap: Fortran Dialect Options.
-* options, -fcase-lower: Fortran Dialect Options.
-* options, -fcase-preserve: Fortran Dialect Options.
-* options, -fcase-strict-lower: Fortran Dialect Options.
-* options, -fcase-strict-upper: Fortran Dialect Options.
-* options, -fcase-upper: Fortran Dialect Options.
-* options, -fdebug-kludge: Code Gen Options.
-* options, -fdelayed-branch: Optimize Options.
-* options, -fdollar-ok: Fortran Dialect Options.
-* options, -fexpensive-optimizations: Optimize Options.
-* options, -ff2c-intrinsics-delete: Fortran Dialect Options.
-* options, -ff2c-intrinsics-disable: Fortran Dialect Options.
-* options, -ff2c-intrinsics-enable: Fortran Dialect Options.
-* options, -ff2c-intrinsics-hide: Fortran Dialect Options.
-* options, -ff2c-library: Code Gen Options.
-* options, -ff66: Shorthand Options.
-* options, -ff77: Shorthand Options.
-* options, -ff90: Fortran Dialect Options.
-* options, -ff90-intrinsics-delete: Fortran Dialect Options.
-* options, -ff90-intrinsics-disable: Fortran Dialect Options.
-* options, -ff90-intrinsics-enable: Fortran Dialect Options.
-* options, -ff90-intrinsics-hide: Fortran Dialect Options.
-* options, -ffast-math: Optimize Options.
-* options, -ffixed-line-length-N: Fortran Dialect Options.
-* options, -ffloat-store: Optimize Options.
-* options, -fforce-addr: Optimize Options.
-* options, -fforce-mem: Optimize Options.
-* options, -ffree-form: Fortran Dialect Options.
-* options, -fgnu-intrinsics-delete: Fortran Dialect Options.
-* options, -fgnu-intrinsics-disable: Fortran Dialect Options.
-* options, -fgnu-intrinsics-enable: Fortran Dialect Options.
-* options, -fgnu-intrinsics-hide: Fortran Dialect Options.
-* options, -fGROUP-intrinsics-hide: Overly Convenient Options.
-* options, -finit-local-zero <1>: Overly Convenient Options.
-* options, -finit-local-zero: Code Gen Options.
-* options, -fintrin-case-any: Fortran Dialect Options.
-* options, -fintrin-case-initcap: Fortran Dialect Options.
-* options, -fintrin-case-lower: Fortran Dialect Options.
-* options, -fintrin-case-upper: Fortran Dialect Options.
-* options, -fmatch-case-any: Fortran Dialect Options.
-* options, -fmatch-case-initcap: Fortran Dialect Options.
-* options, -fmatch-case-lower: Fortran Dialect Options.
-* options, -fmatch-case-upper: Fortran Dialect Options.
-* options, -fmil-intrinsics-delete: Fortran Dialect Options.
-* options, -fmil-intrinsics-disable: Fortran Dialect Options.
-* options, -fmil-intrinsics-enable: Fortran Dialect Options.
-* options, -fmil-intrinsics-hide: Fortran Dialect Options.
-* options, -fno-argument-noalias-global <1>: Aliasing Assumed To Work.
-* options, -fno-argument-noalias-global: Code Gen Options.
-* options, -fno-automatic <1>: Overly Convenient Options.
-* options, -fno-automatic: Code Gen Options.
-* options, -fno-backslash: Fortran Dialect Options.
-* options, -fno-common: Code Gen Options.
-* options, -fno-emulate-complex: Code Gen Options.
-* options, -fno-f2c <1>: Avoid f2c Compatibility.
-* options, -fno-f2c: Code Gen Options.
-* options, -fno-f77: Shorthand Options.
-* options, -fno-fixed-form: Fortran Dialect Options.
-* options, -fno-globals: Code Gen Options.
-* options, -fno-ident: Code Gen Options.
-* options, -fno-inline: Optimize Options.
-* options, -fno-move-all-movables: Optimize Options.
-* options, -fno-reduce-all-givs: Optimize Options.
-* options, -fno-rerun-loop-opt: Optimize Options.
-* options, -fno-second-underscore: Code Gen Options.
-* options, -fno-silent: Overall Options.
-* options, -fno-ugly: Shorthand Options.
-* options, -fno-ugly-args: Fortran Dialect Options.
-* options, -fno-ugly-init: Fortran Dialect Options.
-* options, -fno-underscoring <1>: Names.
-* options, -fno-underscoring: Code Gen Options.
-* options, -fonetrip: Fortran Dialect Options.
-* options, -fpack-struct: Code Gen Options.
-* options, -fpcc-struct-return: Code Gen Options.
-* options, -fpedantic: Warning Options.
-* options, -fPIC: Actual Bugs.
-* options, -freg-struct-return: Code Gen Options.
-* options, -frerun-cse-after-loop: Optimize Options.
-* options, -fschedule-insns: Optimize Options.
-* options, -fschedule-insns2: Optimize Options.
-* options, -fset-g77-defaults: Overall Options.
-* options, -fshort-double: Code Gen Options.
-* options, -fsource-case-lower: Fortran Dialect Options.
-* options, -fsource-case-preserve: Fortran Dialect Options.
-* options, -fsource-case-upper: Fortran Dialect Options.
-* options, -fstrength-reduce: Optimize Options.
-* options, -fsymbol-case-any: Fortran Dialect Options.
-* options, -fsymbol-case-initcap: Fortran Dialect Options.
-* options, -fsymbol-case-lower: Fortran Dialect Options.
-* options, -fsymbol-case-upper: Fortran Dialect Options.
-* options, -fsyntax-only: Warning Options.
-* options, -ftypeless-boz: Fortran Dialect Options.
-* options, -fugly <1>: Overly Convenient Options.
-* options, -fugly: Shorthand Options.
-* options, -fugly-assign: Fortran Dialect Options.
-* options, -fugly-assumed: Fortran Dialect Options.
-* options, -fugly-comma <1>: Actual Bugs.
-* options, -fugly-comma: Fortran Dialect Options.
-* options, -fugly-complex: Fortran Dialect Options.
-* options, -fugly-logint: Fortran Dialect Options.
-* options, -funix-intrinsics-delete: Fortran Dialect Options.
-* options, -funix-intrinsics-disable: Fortran Dialect Options.
-* options, -funix-intrinsics-enable: Fortran Dialect Options.
-* options, -funix-intrinsics-hide: Fortran Dialect Options.
-* options, -funroll-all-loops: Optimize Options.
-* options, -funroll-loops: Optimize Options.
-* options, -fversion: Overall Options.
-* options, -fvxt: Fortran Dialect Options.
-* options, -fvxt-intrinsics-delete: Fortran Dialect Options.
-* options, -fvxt-intrinsics-disable: Fortran Dialect Options.
-* options, -fvxt-intrinsics-enable: Fortran Dialect Options.
-* options, -fvxt-intrinsics-hide: Fortran Dialect Options.
-* options, -fzeros: Code Gen Options.
-* options, -g: Debugging Options.
-* options, -I-: Directory Options.
-* options, -Idir: Directory Options.
-* options, -malign-double <1>: Aligned Data.
-* options, -malign-double: Optimize Options.
-* options, -Nl: Compiler Limits.
-* options, -Nx: Compiler Limits.
-* options, -pedantic: Warning Options.
-* options, -pedantic-errors: Warning Options.
-* options, -v: G77 and GCC.
-* options, -W: Warning Options.
-* options, -w: Warning Options.
-* options, -Waggregate-return: Warning Options.
-* options, -Wall: Warning Options.
-* options, -Wcomment: Warning Options.
-* options, -Wconversion: Warning Options.
-* options, -Werror: Warning Options.
-* options, -Wformat: Warning Options.
-* options, -Wid-clash-LEN: Warning Options.
-* options, -Wimplicit: Warning Options.
-* options, -Wlarger-than-LEN: Warning Options.
-* options, -Wno-globals: Warning Options.
-* options, -Wparentheses: Warning Options.
-* options, -Wredundant-decls: Warning Options.
-* options, -Wshadow: Warning Options.
-* options, -Wsurprising: Warning Options.
-* options, -Wswitch: Warning Options.
-* options, -Wtraditional: Warning Options.
-* options, -Wuninitialized: Warning Options.
-* options, -Wunused: Warning Options.
-* options, adding: Adding Options.
-* options, code generation: Code Gen Options.
-* options, debugging: Debugging Options.
-* options, dialect: Fortran Dialect Options.
-* options, directory search: Directory Options.
-* options, GNU Fortran command: Invoking G77.
-* options, macro: Shorthand Options.
-* options, negative forms: Invoking G77.
-* options, optimization: Optimize Options.
-* options, overall: Overall Options.
-* options, overly convenient: Overly Convenient Options.
-* options, preprocessor: Preprocessor Options.
-* options, shorthand: Shorthand Options.
-* OR intrinsic: Bit Operations on Floating-point Data.
-* Or intrinsic: Or Intrinsic.
-* order of evaluation, side effects: Order of Side Effects.
-* ordering, array: Arrays.
-* other intrinsics: Other Intrinsics.
-* output, flushing <1>: Output Assumed To Flush.
-* output, flushing: Always Flush Output.
-* overall options: Overall Options.
-* overflow: Warning Options.
-* overlapping arguments: Aliasing Assumed To Work.
-* overlays: Aliasing Assumed To Work.
-* overly convenient options: Overly Convenient Options.
-* overwritten data: Strange Behavior at Run Time.
-* Pack intrinsic: Pack Intrinsic.
-* packages: Unpacking.
-* padding: Actual Bugs.
-* parallel processing: Support for Threads.
-* PARAMETER statement <1>: Old-style PARAMETER Statements.
-* PARAMETER statement: Intrinsics in PARAMETER Statements.
-* parameters, unused: Warning Options.
-* patch files: Patching GNU CC Necessary.
-* patch files, creating: Merging Distributions.
-* pedantic compilation: Pedantic Compilation.
-* Pentium optimizations <1>: Use Submodel Options.
-* Pentium optimizations <2>: Aligned Data.
-* Pentium optimizations: Unpacking.
-* PError intrinsic: PError Intrinsic.
-* placing initialization statements: Initializing Before Specifying.
-* POINTER statement: POINTER Statements.
-* pointers <1>: Ugly Assigned Labels.
-* pointers: Kind Notation.
-* porting, simplify: Simplify Porting.
-* pre-installation checks: Pre-installation Checks.
-* Precision intrinsic: Precision Intrinsic.
-* precision, increasing: Increasing Precision/Range.
-* prefix-radix constants: Fortran Dialect Options.
-* preprocessor <1>: Bug Reporting.
-* preprocessor <2>: Overall Options.
-* preprocessor: What is GNU Fortran?.
-* preprocessor options: Preprocessor Options.
-* prerequisites: Prerequisites.
-* Present intrinsic: Present Intrinsic.
-* printing compilation status: Overall Options.
-* printing main source: Actual Bugs.
-* printing version information <1>: Overall Options.
-* printing version information: What is GNU Fortran?.
-* problems installing: Problems Installing.
-* procedures: Procedures.
-* Product intrinsic: Product Intrinsic.
-* PROGRAM statement: Main Program Unit.
-* programs named test: Nothing Happens.
-* programs, cc1: What is GNU Fortran?.
-* programs, cc1plus: What is GNU Fortran?.
-* programs, compiling: G77 and GCC.
-* programs, cpp <1>: Bug Reporting.
-* programs, cpp <2>: Preprocessor Options.
-* programs, cpp <3>: Overall Options.
-* programs, cpp: What is GNU Fortran?.
-* programs, f771: What is GNU Fortran?.
-* programs, ratfor: Overall Options.
-* programs, speeding up: Faster Programs.
-* projects: Projects.
-* Q edit descriptor: Q Edit Descriptor.
-* QAbs intrinsic: QAbs Intrinsic.
-* QACos intrinsic: QACos Intrinsic.
-* QACosD intrinsic: QACosD Intrinsic.
-* QASin intrinsic: QASin Intrinsic.
-* QASinD intrinsic: QASinD Intrinsic.
-* QATan intrinsic: QATan Intrinsic.
-* QATan2 intrinsic: QATan2 Intrinsic.
-* QATan2D intrinsic: QATan2D Intrinsic.
-* QATanD intrinsic: QATanD Intrinsic.
-* QCos intrinsic: QCos Intrinsic.
-* QCosD intrinsic: QCosD Intrinsic.
-* QCosH intrinsic: QCosH Intrinsic.
-* QDiM intrinsic: QDiM Intrinsic.
-* QExp intrinsic: QExp Intrinsic.
-* QExt intrinsic: QExt Intrinsic.
-* QExtD intrinsic: QExtD Intrinsic.
-* QFloat intrinsic: QFloat Intrinsic.
-* QInt intrinsic: QInt Intrinsic.
-* QLog intrinsic: QLog Intrinsic.
-* QLog10 intrinsic: QLog10 Intrinsic.
-* QMax1 intrinsic: QMax1 Intrinsic.
-* QMin1 intrinsic: QMin1 Intrinsic.
-* QMod intrinsic: QMod Intrinsic.
-* QNInt intrinsic: QNInt Intrinsic.
-* QSin intrinsic: QSin Intrinsic.
-* QSinD intrinsic: QSinD Intrinsic.
-* QSinH intrinsic: QSinH Intrinsic.
-* QSqRt intrinsic: QSqRt Intrinsic.
-* QTan intrinsic: QTan Intrinsic.
-* QTanD intrinsic: QTanD Intrinsic.
-* QTanH intrinsic: QTanH Intrinsic.
-* questionable instructions: What is GNU Fortran?.
-* quick start: Quick Start.
-* Radix intrinsic: Radix Intrinsic.
-* Rand intrinsic: Rand Intrinsic.
-* Random_Number intrinsic: Random_Number Intrinsic.
-* Random_Seed intrinsic: Random_Seed Intrinsic.
-* Range intrinsic: Range Intrinsic.
-* range, increasing: Increasing Precision/Range.
-* rank, maximum: Compiler Limits.
-* Ratfor preprocessor: Overall Options.
-* reads and writes, scheduling: Aliasing Assumed To Work.
-* Real intrinsic: Real Intrinsic.
-* REAL intrinsic: REAL() and AIMAG() of Complex.
-* real part: Ugly Complex Part Extraction.
-* REAL(KIND=1) type: Compiler Types.
-* REAL(KIND=2) type: Compiler Types.
-* REAL*16 support: Full Support for Compiler Types.
-* RealPart intrinsic: RealPart Intrinsic.
-* recent versions <1>: Changes.
-* recent versions: News.
-* RECORD statement: STRUCTURE UNION RECORD MAP.
-* recursion, lack of: RECURSIVE Keyword.
-* RECURSIVE keyword: RECURSIVE Keyword.
-* reference works: Language.
-* Rename intrinsic <1>: Rename Intrinsic (function).
-* Rename intrinsic: Rename Intrinsic (subroutine).
-* Repeat intrinsic: Repeat Intrinsic.
-* reporting bugs: Bugs.
-* reporting compilation status: Overall Options.
-* requirements, GNU C: GNU C Required.
-* Reshape intrinsic: Reshape Intrinsic.
-* results, inconsistent: Floating-point Errors.
-* RETURN statement <1>: Alternate Returns.
-* RETURN statement: Functions.
-* return type of functions: Functions.
-* rounding errors: Floating-point Errors.
-* row-major ordering: Arrays.
-* RRSpacing intrinsic: RRSpacing Intrinsic.
-* RS/6000 support: Actual Bugs.
-* RShift intrinsic: RShift Intrinsic.
-* run-time library: What is GNU Fortran?.
-* run-time options: Code Gen Options.
-* runtime initialization: Startup Code.
-* SAVE statement: Code Gen Options.
-* saved variables: Variables Assumed To Be Saved.
-* Scale intrinsic: Scale Intrinsic.
-* Scan intrinsic: Scan Intrinsic.
-* scheduling of reads and writes: Aliasing Assumed To Work.
-* scope <1>: Scope and Classes of Names.
-* scope: Scope of Names and Labels.
-* search path: Directory Options.
-* searching for included files: Directory Options.
-* Secnds intrinsic: Secnds Intrinsic.
-* Second intrinsic <1>: Second Intrinsic (subroutine).
-* Second intrinsic: Second Intrinsic (function).
-* segmentation violation <1>: Strange Behavior at Run Time.
-* segmentation violation <2>: Stack Overflow.
-* segmentation violation <3>: NeXTStep Problems.
-* segmentation violation: Maximum Stackable Size.
-* Selected_Int_Kind intrinsic: Selected_Int_Kind Intrinsic.
-* Selected_Real_Kind intrinsic: Selected_Real_Kind Intrinsic.
-* semicolons: Statements Comments Lines.
-* separate distributions: Merging Distributions.
-* sequence numbers: Better Source Model.
-* Set_Exponent intrinsic: Set_Exponent Intrinsic.
-* SGI support: Actual Bugs.
-* Shape intrinsic: Shape Intrinsic.
-* SHIFT intrinsic: Bit Operations on Floating-point Data.
-* Short intrinsic: Short Intrinsic.
-* short source lines: Short Lines.
-* shorthand options: Shorthand Options.
-* side effects, order of evaluation: Order of Side Effects.
-* Sign intrinsic: Sign Intrinsic.
-* signal 11: Signal 11 and Friends.
-* Signal intrinsic <1>: Signal Intrinsic (function).
-* Signal intrinsic: Signal Intrinsic (subroutine).
-* SIGNAL() intrinsic: Actual Bugs.
-* signature of procedures: Procedures.
-* simplify porting: Simplify Porting.
-* Sin intrinsic: Sin Intrinsic.
-* SinD intrinsic: SinD Intrinsic.
-* SinH intrinsic: SinH Intrinsic.
-* Sleep intrinsic: Sleep Intrinsic.
-* slow compiler: Large Initialization.
-* Sngl intrinsic: Sngl Intrinsic.
-* SnglQ intrinsic: SnglQ Intrinsic.
-* Solaris: Strange Behavior at Run Time.
-* source code <1>: Unpacking.
-* source code <2>: Case Sensitivity.
-* source code <3>: Source Form.
-* source code <4>: Lines.
-* source code: What is GNU Fortran?.
-* source file: What is GNU Fortran?.
-* source file form: Fortran Dialect Options.
-* source file format <1>: Case Sensitivity.
-* source file format <2>: Source Form.
-* source file format <3>: Lines.
-* source file format: Fortran Dialect Options.
-* source form <1>: Source Form.
-* source form: Lines.
-* source lines, long: Long Lines.
-* source lines, short: Short Lines.
-* source tree: Unpacking.
-* space-padding: Short Lines.
-* spaces: Short Lines.
-* spaces, endless printing of: Strange Behavior at Run Time.
-* Spacing intrinsic: Spacing Intrinsic.
-* speed, compiler: Large Initialization.
-* speed, of compiler: Actual Bugs.
-* speeding up loops: Optimize Options.
-* speeding up programs: Faster Programs.
-* Spread intrinsic: Spread Intrinsic.
-* SqRt intrinsic: SqRt Intrinsic.
-* SRand intrinsic: SRand Intrinsic.
-* stack allocation: Maximum Stackable Size.
-* stack overflow: Stack Overflow.
-* stack, 387 coprocessor: Actual Bugs.
-* stack, aligned: Aligned Data.
-* stage directories: Cleanup Kills Stage Directories.
-* standard support: Standard Support.
-* standard, ANSI FORTRAN 77: Language.
-* startup code: Startup Code.
-* Stat intrinsic <1>: Stat Intrinsic (function).
-* Stat intrinsic: Stat Intrinsic (subroutine).
-* statement labels, assigned: Assigned Statement Labels.
-* statements, ACCEPT: TYPE and ACCEPT I/O Statements.
-* statements, ASSIGN <1>: Assigned Statement Labels.
-* statements, ASSIGN: Ugly Assigned Labels.
-* statements, BLOCK DATA <1>: Multiple Definitions of External Names.
-* statements, BLOCK DATA: Block Data and Libraries.
-* statements, CLOSE: OPEN CLOSE and INQUIRE Keywords.
-* statements, COMMON <1>: Multiple Definitions of External Names.
-* statements, COMMON: Common Blocks.
-* statements, COMPLEX: Complex Variables.
-* statements, DATA <1>: Actual Bugs.
-* statements, DATA: Code Gen Options.
-* statements, DECODE: ENCODE and DECODE.
-* statements, DIMENSION <1>: Array Bounds Expressions.
-* statements, DIMENSION <2>: Adjustable Arrays.
-* statements, DIMENSION: Arrays.
-* statements, DO <1>: Loops.
-* statements, DO: Warning Options.
-* statements, ENCODE: ENCODE and DECODE.
-* statements, ENTRY: Alternate Entry Points.
-* statements, EQUIVALENCE: Local Equivalence Areas.
-* statements, FORMAT: Expressions in FORMAT Statements.
-* statements, FUNCTION <1>: Functions.
-* statements, FUNCTION: Procedures.
-* statements, GOTO: Assigned Statement Labels.
-* statements, IMPLICIT CHARACTER*(*): Limitation on Implicit Declarations.
-* statements, INQUIRE: OPEN CLOSE and INQUIRE Keywords.
-* statements, MAP: STRUCTURE UNION RECORD MAP.
-* statements, NAMELIST: NAMELIST.
-* statements, OPEN: OPEN CLOSE and INQUIRE Keywords.
-* statements, PARAMETER <1>: Old-style PARAMETER Statements.
-* statements, PARAMETER: Intrinsics in PARAMETER Statements.
-* statements, POINTER: POINTER Statements.
-* statements, PROGRAM: Main Program Unit.
-* statements, RECORD: STRUCTURE UNION RECORD MAP.
-* statements, RETURN <1>: Alternate Returns.
-* statements, RETURN: Functions.
-* statements, SAVE: Code Gen Options.
-* statements, separated by semicolon: Statements Comments Lines.
-* statements, STRUCTURE: STRUCTURE UNION RECORD MAP.
-* statements, SUBROUTINE <1>: Alternate Returns.
-* statements, SUBROUTINE: Procedures.
-* statements, TYPE: TYPE and ACCEPT I/O Statements.
-* statements, UNION: STRUCTURE UNION RECORD MAP.
-* static variables: Variables Assumed To Be Saved.
-* status, compilation: Overall Options.
-* storage association: Aliasing Assumed To Work.
-* straight build: Straight Build.
-* strings, empty: Character Type.
-* strtoul: Missing strtoul.
-* STRUCTURE statement: STRUCTURE UNION RECORD MAP.
-* structures: Actual Bugs.
-* submodels: Use Submodel Options.
-* SUBROUTINE statement <1>: Alternate Returns.
-* SUBROUTINE statement: Procedures.
-* subroutines: Alternate Returns.
-* suffixes, file name: Overall Options.
-* Sum intrinsic: Sum Intrinsic.
-* SunOS4 <1>: Quick Start.
-* SunOS4: Missing strtoul.
-* support for ANSI FORTRAN 77: Standard Support.
-* support for gcc versions: Merging Distributions.
-* support, Alpha: Actual Bugs.
-* support, COMPLEX: Actual Bugs.
-* support, ELF: Actual Bugs.
-* support, f77: Backslash in Constants.
-* support, Fortran 90: Fortran 90 Support.
-* support, gdb: Debugger Problems.
-* support, RS/6000: Actual Bugs.
-* support, SGI: Actual Bugs.
-* suppressing warnings: Warning Options.
-* symbol names <1>: Names.
-* symbol names: Fortran Dialect Options.
-* symbol names, transforming: Code Gen Options.
-* symbol names, underscores: Code Gen Options.
-* symbolic names: Scope and Classes of Names.
-* SymLnk intrinsic <1>: SymLnk Intrinsic (function).
-* SymLnk intrinsic: SymLnk Intrinsic (subroutine).
-* synchronous write errors <1>: Output Assumed To Flush.
-* synchronous write errors: Always Flush Output.
-* syntax checking: Warning Options.
-* System intrinsic <1>: System Intrinsic (function).
-* System intrinsic: System Intrinsic (subroutine).
-* System_Clock intrinsic: System_Clock Intrinsic.
-* tab characters: Tabs.
-* table of intrinsics: Table of Intrinsic Functions.
-* Tan intrinsic: Tan Intrinsic.
-* TanD intrinsic: TanD Intrinsic.
-* TanH intrinsic: TanH Intrinsic.
-* test programs: Nothing Happens.
-* texinfo: Updating Documentation.
-* textbooks: Language.
-* threads: Support for Threads.
-* Time intrinsic <1>: Time Intrinsic (VXT).
-* Time intrinsic: Time Intrinsic (UNIX).
-* Time8 intrinsic: Time8 Intrinsic.
-* Tiny intrinsic: Tiny Intrinsic.
-* Toolpack: Increasing Precision/Range.
-* trailing commas: Ugly Null Arguments.
-* trailing comments: Statements Comments Lines.
-* trailing null byte: Character and Hollerith Constants.
-* Transfer intrinsic: Transfer Intrinsic.
-* transformation of symbol names: Names.
-* transforming symbol names: Code Gen Options.
-* translation of user programs: What is GNU Fortran?.
-* Transpose intrinsic: Transpose Intrinsic.
-* Trim intrinsic: Trim Intrinsic.
-* trips, number of: Loops.
-* truncation: Long Lines.
-* TtyNam intrinsic <1>: TtyNam Intrinsic (function).
-* TtyNam intrinsic: TtyNam Intrinsic (subroutine).
-* TYPE statement: TYPE and ACCEPT I/O Statements.
-* types, COMPLEX(KIND=1): Compiler Types.
-* types, COMPLEX(KIND=2): Compiler Types.
-* types, constants <1>: Compiler Constants.
-* types, constants <2>: Constants.
-* types, constants: Fortran Dialect Options.
-* types, DOUBLE COMPLEX: Compiler Types.
-* types, DOUBLE PRECISION: Compiler Types.
-* types, file: Overall Options.
-* types, Fortran/C: C Access to Type Information.
-* types, INTEGER(KIND=1): Compiler Types.
-* types, INTEGER(KIND=2): Compiler Types.
-* types, INTEGER(KIND=3): Compiler Types.
-* types, INTEGER(KIND=6): Compiler Types.
-* types, LOGICAL(KIND=1): Compiler Types.
-* types, LOGICAL(KIND=2): Compiler Types.
-* types, LOGICAL(KIND=3): Compiler Types.
-* types, LOGICAL(KIND=6): Compiler Types.
-* types, of data: Compiler Types.
-* types, REAL(KIND=1): Compiler Types.
-* types, REAL(KIND=2): Compiler Types.
-* UBound intrinsic: UBound Intrinsic.
-* ugly features <1>: Distensions.
-* ugly features: Shorthand Options.
-* UMask intrinsic <1>: UMask Intrinsic (function).
-* UMask intrinsic: UMask Intrinsic (subroutine).
-* undefined behavior: Bug Criteria.
-* undefined function value: Bug Criteria.
-* undefined reference (_main): Cannot Link Fortran Programs.
-* undefined reference (_strtoul): Missing strtoul.
-* underscores <1>: Mangling of Names.
-* underscores <2>: Underscores in Symbol Names.
-* underscores: Code Gen Options.
-* uninitialized variables <1>: Variables Assumed To Be Zero.
-* uninitialized variables <2>: Code Gen Options.
-* uninitialized variables: Warning Options.
-* UNION statement: STRUCTURE UNION RECORD MAP.
-* unit numbers <1>: Large File Unit Numbers.
-* unit numbers: Larger File Unit Numbers.
-* UNIX f77: Shorthand Options.
-* UNIX intrinsics: Fortran Dialect Options.
-* Unlink intrinsic <1>: Unlink Intrinsic (function).
-* Unlink intrinsic: Unlink Intrinsic (subroutine).
-* Unpack intrinsic: Unpack Intrinsic.
-* unpacking distributions: Unpacking.
-* unrecognized file format: What is GNU Fortran?.
-* unresolved reference (various): Cannot Link Fortran Programs.
-* unrolling loops: Optimize Options.
-* unsupported warnings: Warning Options.
-* unused arguments <1>: Unused Arguments.
-* unused arguments: Warning Options.
-* unused dummies: Warning Options.
-* unused parameters: Warning Options.
-* unused variables: Warning Options.
-* updating info directory: Updating Documentation.
-* uppercase letters: Case Sensitivity.
-* user-visible changes: Changes.
-* variables assumed to be zero: Variables Assumed To Be Zero.
-* variables retaining values across calls: Variables Assumed To Be Saved.
-* variables, initialization of: Code Gen Options.
-* variables, mistyped: Not My Type.
-* variables, uninitialized <1>: Code Gen Options.
-* variables, uninitialized: Warning Options.
-* variables, unused: Warning Options.
-* Verify intrinsic: Verify Intrinsic.
-* version information, printing <1>: Overall Options.
-* version information, printing: What is GNU Fortran?.
-* version numbering: Merging Distributions.
-* versions of gcc: Merging Distributions.
-* versions, recent <1>: Changes.
-* versions, recent: News.
-* VXT extensions: VXT Fortran.
-* VXT features: Fortran Dialect Options.
-* VXT intrinsics: Fortran Dialect Options.
-* warning messages: Warning Options.
-* warnings: What is GNU Fortran?.
-* warnings vs errors: Warnings and Errors.
-* warnings, all: Warning Options.
-* warnings, extra: Warning Options.
-* warnings, global names <1>: Code Gen Options.
-* warnings, global names: Warning Options.
-* warnings, implicit declaration: Warning Options.
-* warnings, unsupported: Warning Options.
-* why separate distributions: Merging Distributions.
-* wisdom: Collected Fortran Wisdom.
-* writes, flushing <1>: Output Assumed To Flush.
-* writes, flushing: Always Flush Output.
-* writing code: Collected Fortran Wisdom.
-* XOr intrinsic: XOr Intrinsic.
-* ZAbs intrinsic: ZAbs Intrinsic.
-* ZCos intrinsic: ZCos Intrinsic.
-* zero byte, trailing: Character and Hollerith Constants.
-* zero-initialized variables: Variables Assumed To Be Zero.
-* zero-length CHARACTER: Character Type.
-* ZExp intrinsic: ZExp Intrinsic.
-* ZExt intrinsic: ZExt Intrinsic.
-* ZLog intrinsic: ZLog Intrinsic.
-* ZSin intrinsic: ZSin Intrinsic.
-* ZSqRt intrinsic: ZSqRt Intrinsic.
-* zzz.c: Object File Differences.
-* zzz.o: Object File Differences.
-
-
diff --git a/gcc/f/g77.info-3 b/gcc/f/g77.info-3
deleted file mode 100644
index c8b772e11c8..00000000000
--- a/gcc/f/g77.info-3
+++ /dev/null
@@ -1,397 +0,0 @@
-This is Info file g77.info, produced by Makeinfo version 1.68 from the
-input file g77.texi.
-
- This file explains how to use the GNU Fortran system.
-
- Published by the Free Software Foundation 59 Temple Place - Suite 330
-Boston, MA 02111-1307 USA
-
- Copyright (C) 1995-1997 Free Software Foundation, Inc.
-
- Permission is granted to make and distribute verbatim copies of this
-manual provided the copyright notice and this permission notice are
-preserved on all copies.
-
- Permission is granted to copy and distribute modified versions of
-this manual under the conditions for verbatim copying, provided also
-that the sections entitled "GNU General Public License," "Funding for
-Free Software," and "Protect Your Freedom--Fight `Look And Feel'" are
-included exactly as in the original, and provided that the entire
-resulting derived work is distributed under the terms of a permission
-notice identical to this one.
-
- Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that the sections entitled "GNU General Public
-License," "Funding for Free Software," and "Protect Your Freedom--Fight
-`Look And Feel'", and this permission notice, may be included in
-translations approved by the Free Software Foundation instead of in the
-original English.
-
- Contributed by James Craig Burley (<burley@gnu.ai.mit.edu>).
-Inspired by a first pass at translating `g77-0.5.16/f/DOC' that was
-contributed to Craig by David Ronis (<ronis@onsager.chem.mcgill.ca>).
-
-INFO-DIR-SECTION Fortran Programming
-START-INFO-DIR-ENTRY
-* g77: (g77). The GNU Fortran compilation system.
-END-INFO-DIR-ENTRY
-
-
-File: g77.info, Node: Code Gen Options, Next: Environment Variables, Prev: Directory Options, Up: Invoking G77
-
-Options for Code Generation Conventions
-=======================================
-
- These machine-independent options control the interface conventions
-used in code generation.
-
- Most of them have both positive and negative forms; the negative form
-of `-ffoo' would be `-fno-foo'. In the table below, only one of the
-forms is listed--the one which is not the default. You can figure out
-the other form by either removing `no-' or adding it.
-
-`-fno-automatic'
- Treat each program unit as if the `SAVE' statement was specified
- for every local variable and array referenced in it. Does not
- affect common blocks. (Some Fortran compilers provide this option
- under the name `-static'.)
-
-`-finit-local-zero'
- Specify that variables and arrays that are local to a program unit
- (not in a common block and not passed as an argument) are to be
- initialized to binary zeros.
-
- Since there is a run-time penalty for initialization of variables
- that are not given the `SAVE' attribute, it might be a good idea
- to also use `-fno-automatic' with `-finit-local-zero'.
-
-`-fno-f2c'
- Do not generate code designed to be compatible with code generated
- by `f2c'; use the GNU calling conventions instead.
-
- The `f2c' calling conventions require functions that return type
- `REAL(KIND=1)' to actually return the C type `double', and
- functions that return type `COMPLEX' to return the values via an
- extra argument in the calling sequence that points to where to
- store the return value. Under the GNU calling conventions, such
- functions simply return their results as they would in GNU
- C--`REAL(KIND=1)' functions return the C type `float', and
- `COMPLEX' functions return the GNU C type `complex' (or its
- `struct' equivalent).
-
- This does not affect the generation of code that interfaces with
- the `libf2c' library.
-
- However, because the `libf2c' library uses `f2c' calling
- conventions, `g77' rejects attempts to pass intrinsics implemented
- by routines in this library as actual arguments when `-fno-f2c' is
- used, to avoid bugs when they are actually called by code
- expecting the GNU calling conventions to work.
-
- For example, `INTRINSIC ABS;CALL FOO(ABS)' is rejected when
- `-fno-f2c' is in force. (Future versions of the `g77' run-time
- library might offer routines that provide GNU-callable versions of
- the routines that implement the `f2c'-callable intrinsics that may
- be passed as actual arguments, so that valid programs need not be
- rejected when `-fno-f2c' is used.)
-
- *Caution:* If `-fno-f2c' is used when compiling any source file
- used in a program, it must be used when compiling *all* Fortran
- source files used in that program.
-
-`-ff2c-library'
- Specify that use of `libf2c' is required. This is the default for
- the current version of `g77'.
-
- Currently it is not valid to specify `-fno-f2c-library'. This
- option is provided so users can specify it in shell scripts that
- build programs and libraries that require the `libf2c' library,
- even when being compiled by future versions of `g77' that might
- otherwise default to generating code for an incompatible library.
-
-`-fno-underscoring'
- Do not transform names of entities specified in the Fortran source
- file by appending underscores to them.
-
- With `-funderscoring' in effect, `g77' appends two underscores to
- names with underscores and one underscore to external names with
- no underscores. (`g77' also appends two underscores to internal
- names with underscores to avoid naming collisions with external
- names. The `-fno-second-underscore' option disables appending of
- the second underscore in all cases.)
-
- This is done to ensure compatibility with code produced by many
- UNIX Fortran compilers, including `f2c', which perform the same
- transformations.
-
- Use of `-fno-underscoring' is not recommended unless you are
- experimenting with issues such as integration of (GNU) Fortran into
- existing system environments (vis-a-vis existing libraries, tools,
- and so on).
-
- For example, with `-funderscoring', and assuming other defaults
- like `-fcase-lower' and that `j()' and `max_count()' are external
- functions while `my_var' and `lvar' are local variables, a
- statement like
-
- I = J() + MAX_COUNT (MY_VAR, LVAR)
-
- is implemented as something akin to:
-
- i = j_() + max_count__(&my_var__, &lvar);
-
- With `-fno-underscoring', the same statement is implemented as:
-
- i = j() + max_count(&my_var, &lvar);
-
- Use of `-fno-underscoring' allows direct specification of
- user-defined names while debugging and when interfacing
- `g77'-compiled code with other languages.
-
- Note that just because the names match does *not* mean that the
- interface implemented by `g77' for an external name matches the
- interface implemented by some other language for that same name.
- That is, getting code produced by `g77' to link to code produced
- by some other compiler using this or any other method can be only a
- small part of the overall solution--getting the code generated by
- both compilers to agree on issues other than naming can require
- significant effort, and, unlike naming disagreements, linkers
- normally cannot detect disagreements in these other areas.
-
- Also, note that with `-fno-underscoring', the lack of appended
- underscores introduces the very real possibility that a
- user-defined external name will conflict with a name in a system
- library, which could make finding unresolved-reference bugs quite
- difficult in some cases--they might occur at program run time, and
- show up only as buggy behavior at run time.
-
- In future versions of `g77', we hope to improve naming and linking
- issues so that debugging always involves using the names as they
- appear in the source, even if the names as seen by the linker are
- mangled to prevent accidental linking between procedures with
- incompatible interfaces.
-
-`-fno-second-underscore'
- Do not append a second underscore to names of entities specified
- in the Fortran source file.
-
- This option has no effect if `-fno-underscoring' is in effect.
-
- Otherwise, with this option, an external name such as `MAX_COUNT'
- is implemented as a reference to the link-time external symbol
- `max_count_', instead of `max_count__'.
-
-`-fno-ident'
- Ignore the `#ident' directive.
-
-`-fzeros'
- Treat initial values of zero as if they were any other value.
-
- As of version 0.5.18, `g77' normally treats `DATA' and other
- statements that are used to specify initial values of zero for
- variables and arrays as if no values were actually specified, in
- the sense that no diagnostics regarding multiple initializations
- are produced.
-
- This is done to speed up compiling of programs that initialize
- large arrays to zeros.
-
- Use `-fzeros' to revert to the simpler, slower behavior that can
- catch multiple initializations by keeping track of all
- initializations, zero or otherwise.
-
- *Caution:* Future versions of `g77' might disregard this option
- (and its negative form, the default) or interpret it somewhat
- differently. The interpretation changes will affect only
- non-standard programs; standard-conforming programs should not be
- affected.
-
-`-fdebug-kludge'
- Emit information on `COMMON' and `EQUIVALENCE' members that might
- help users of debuggers work around lack of proper debugging
- information on such members.
-
- As of version 0.5.19, `g77' offers this option to emit information
- on members of aggregate areas to help users while debugging. This
- information consists of establishing the type and contents of each
- such member so that, when a debugger is asked to print the
- contents, the printed information provides rudimentary debugging
- information. This information identifies the name of the
- aggregate area (either the `COMMON' block name, or the
- `g77'-assigned name for the `EQUIVALENCE' name) and the offset, in
- bytes, of the member from the beginning of the area.
-
- Using `gdb', this information is not coherently displayed in the
- Fortran language mode, so temporarily switching to the C language
- mode to display the information is suggested. Use `set language
- c' and `set language fortran' to accomplish this.
-
- For example:
-
- COMMON /X/A,B
- EQUIVALENCE (C,D)
- CHARACTER XX*50
- EQUIVALENCE (I,XX(20:20))
- END
-
- GDB is free software and you are welcome to distribute copies of it
- under certain conditions; type "show copying" to see the conditions.
- There is absolutely no warranty for GDB; type "show warranty" for details.
- GDB 4.16 (lm-gnits-dwim), Copyright 1996 Free Software Foundation, Inc...
- (gdb) b MAIN__
- Breakpoint 1 at 0t1200000201120112: file cd.f, line 5.
- (gdb) r
- Starting program: /home/user/a.out
-
- Breakpoint 1, MAIN__ () at cd.f:5
- Current language: auto; currently fortran
- (gdb) set language c
- Warning: the current language does not match this frame.
- (gdb) p a
- $2 = "At (COMMON) `x_' plus 0 bytes"
- (gdb) p b
- $3 = "At (COMMON) `x_' plus 4 bytes"
- (gdb) p c
- $4 = "At (EQUIVALENCE) `__g77_equiv_c' plus 0 bytes"
- (gdb) p d
- $5 = "At (EQUIVALENCE) `__g77_equiv_c' plus 0 bytes"
- (gdb) p i
- $6 = "At (EQUIVALENCE) `__g77_equiv_xx' plus 20 bytes"
- (gdb) p xx
- $7 = "At (EQUIVALENCE) `__g77_equiv_xx' plus 1 bytes"
- (gdb) set language fortran
- (gdb)
-
- Use `-fdebug-kludge' to generate this information, which might
- make some programs noticeably larger.
-
- *Caution:* Future versions of `g77' might disregard this option
- (and its negative form). Current plans call for this to happen
- when published versions of `g77' and `gdb' exist that provide
- proper access to debugging information on `COMMON' and
- `EQUIVALENCE' members.
-
-`-fno-emulate-complex'
- Implement `COMPLEX' arithmetic using the facilities in the `gcc'
- back end that provide direct support of `complex' arithmetic,
- instead of emulating the arithmetic.
-
- `gcc' has some known problems in its back-end support for
- `complex' arithmetic, due primarily to the support not being
- completed as of version 2.7.2.2. Other front ends for the `gcc'
- back end avoid this problem by emulating `complex' arithmetic at a
- higher level, so the back end sees arithmetic on the real and
- imaginary components. To make `g77' more portable to systems
- where `complex' support in the `gcc' back end is particularly
- troublesome, `g77' now defaults to performing the same kinds of
- emulations done by these other front ends.
-
- Use `-fno-emulate-complex' to try the `complex' support in the
- `gcc' back end, in case it works and produces faster programs. So
- far, all the known bugs seem to involve compile-time crashes,
- rather than the generation of incorrect code.
-
- Use of this option should not affect how Fortran code compiled by
- `g77' works in terms of its interfaces to other code, e.g. that
- compiled by `f2c'.
-
- *Caution:* Future versions of `g77' are likely to change the
- default for this option to `-fno-emulate-complex', and perhaps
- someday ignore both forms of this option.
-
- Also, it is possible that use of the `-fno-emulate-complex' option
- could result in incorrect code being silently produced by `g77'.
- But, this is generally true of compilers anyway, so, as usual, test
- the programs you compile before assuming they are working.
-
-`-falias-check'
-
-`-fargument-alias'
-
-`-fargument-noalias'
-
-`-fno-argument-noalias-global'
- These options specify to what degree aliasing (overlap) is
- permitted between arguments (passed as pointers) and `COMMON'
- (external, or public) storage.
-
- The default for Fortran code, as mandated by the FORTRAN 77 and
- Fortran 90 standards, is `-fargument-noalias-global'. The default
- for code written in the C language family is `-fargument-alias'.
-
- Note that, on some systems, compiling with `-fforce-addr' in
- effect can produce more optimal code when the default aliasing
- options are in effect (and when optimization is enabled).
-
- *Note Aliasing Assumed To Work::, for detailed information on the
- implications of compiling Fortran code that depends on the ability
- to alias dummy arguments.
-
-`-fno-globals'
- Disable diagnostics about inter-procedural analysis problems, such
- as disagreements about the type of a function or a procedure's
- argument, that might cause a compiler crash when attempting to
- inline a reference to a procedure within a program unit. (The
- diagnostics themselves are still produced, but as warnings, unless
- `-Wno-globals' is specified, in which case no relevant diagnostics
- are produced.)
-
- Further, this option disables such inlining, to avoid compiler
- crashes resulting from incorrect code that would otherwise be
- diagnosed.
-
- As such, this option might be quite useful when compiling
- existing, "working" code that happens to have a few bugs that do
- not generally show themselves, but `g77' exposes via a diagnostic.
-
- Use of this option therefore has the effect of instructing `g77'
- to behave more like it did up through version 0.5.19.1, when it
- paid little or no attention to disagreements between program units
- about a procedure's type and argument information, and when it
- performed no inlining of procedures (except statement functions).
-
- Without this option, `g77' defaults to performing the potentially
- inlining procedures as it started doing in version 0.5.20, but as
- of version 0.5.21, it also diagnoses disagreements that might
- cause such inlining to crash the compiler.
-
- *Note Options for Code Generation Conventions: (gcc)Code Gen
-Options, for information on more options offered by the GBE shared by
-`g77', `gcc', and other GNU compilers.
-
- Some of these do *not* work when compiling programs written in
-Fortran:
-
-`-fpcc-struct-return'
-
-`-freg-struct-return'
- You should not use these except strictly the same way as you used
- them to build the version of `libf2c' with which you will be
- linking all code compiled by `g77' with the same option.
-
-`-fshort-double'
- This probably either has no effect on Fortran programs, or makes
- them act loopy.
-
-`-fno-common'
- Do not use this when compiling Fortran programs, or there will be
- Trouble.
-
-`-fpack-struct'
- This probably will break any calls to the `libf2c' library, at the
- very least, even if it is built with the same option.
-
-
-File: g77.info, Node: Environment Variables, Prev: Code Gen Options, Up: Invoking G77
-
-Environment Variables Affecting GNU Fortran
-===========================================
-
- GNU Fortran currently does not make use of any environment variables
-to control its operation above and beyond those that affect the
-operation of `gcc'.
-
- *Note Environment Variables Affecting GNU CC: (gcc)Environment
-Variables, for information on environment variables.
-
diff --git a/gcc/f/g77.info-4 b/gcc/f/g77.info-4
deleted file mode 100644
index ca26588ccdf..00000000000
--- a/gcc/f/g77.info-4
+++ /dev/null
@@ -1,1117 +0,0 @@
-This is Info file g77.info, produced by Makeinfo version 1.68 from the
-input file g77.texi.
-
- This file explains how to use the GNU Fortran system.
-
- Published by the Free Software Foundation 59 Temple Place - Suite 330
-Boston, MA 02111-1307 USA
-
- Copyright (C) 1995-1997 Free Software Foundation, Inc.
-
- Permission is granted to make and distribute verbatim copies of this
-manual provided the copyright notice and this permission notice are
-preserved on all copies.
-
- Permission is granted to copy and distribute modified versions of
-this manual under the conditions for verbatim copying, provided also
-that the sections entitled "GNU General Public License," "Funding for
-Free Software," and "Protect Your Freedom--Fight `Look And Feel'" are
-included exactly as in the original, and provided that the entire
-resulting derived work is distributed under the terms of a permission
-notice identical to this one.
-
- Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that the sections entitled "GNU General Public
-License," "Funding for Free Software," and "Protect Your Freedom--Fight
-`Look And Feel'", and this permission notice, may be included in
-translations approved by the Free Software Foundation instead of in the
-original English.
-
- Contributed by James Craig Burley (<burley@gnu.ai.mit.edu>).
-Inspired by a first pass at translating `g77-0.5.16/f/DOC' that was
-contributed to Craig by David Ronis (<ronis@onsager.chem.mcgill.ca>).
-
-INFO-DIR-SECTION Fortran Programming
-START-INFO-DIR-ENTRY
-* g77: (g77). The GNU Fortran compilation system.
-END-INFO-DIR-ENTRY
-
-
-File: g77.info, Node: News, Next: Changes, Prev: Invoking G77, Up: Top
-
-News About GNU Fortran
-**********************
-
- Changes made to recent versions of GNU Fortran are listed below,
-with the most recent version first.
-
- The changes are generally listed with code-generation bugs first,
-followed by compiler crashes involving valid code, new features, fixes
-to existing features, new diagnostics, internal improvements, and
-miscellany. This order is not strict--for example, some items involve
-a combination of these elements.
-
-In 0.5.21:
-==========
-
- * Fix a code-generation bug introduced by 0.5.20 caused by loop
- unrolling (by specifying `-funroll-loops' or similar). This bug
- afflicted all code compiled by version 2.7.2.2.f.2 of `gcc' (C,
- C++, Fortran, and so on).
-
- * Fix a code-generation bug manifested when combining local
- `EQUIVALENCE' with a `DATA' statement that follows the first
- executable statement (or is treated as an executable-context
- statement as a result of using the `-fpedantic' option).
-
- * Fix a compiler crash that occured when an integer division by a
- constant zero is detected. Instead, when the `-W' option is
- specified, the `gcc' back end issues a warning about such a case.
- This bug afflicted all code compiled by version 2.7.2.2.f.2 of
- `gcc' (C, C++, Fortran, and so on).
-
- * Fix a compiler crash that occurred in some cases of procedure
- inlining. (Such cases became more frequent in 0.5.20.)
-
- * Fix a compiler crash resulting from using `DATA' or similar to
- initialize a `COMPLEX' variable or array to zero.
-
- * Fix compiler crashes involving use of `AND', `OR', or `XOR'
- intrinsics.
-
- * Fix compiler bug triggered when using a `COMMON' or `EQUIVALENCE'
- variable as the target of an `ASSIGN' or assigned-`GOTO' statement.
-
- * Fix compiler crashes due to using the name of a some non-standard
- intrinsics (such as `FTELL' or `FPUTC') as such and as the name of
- a procedure or common block. Such dual use of a name in a program
- is allowed by the standard.
-
- * Place automatic arrays on the stack, even if `SAVE' or the
- `-fno-automatic' option is in effect. This avoids a compiler
- crash in some cases.
-
- * The `-malign-double' option now reliably aligns `DOUBLE PRECISION'
- optimally on Pentium and Pentium Pro architectures (586 and 686 in
- `gcc').
-
- * New option `-Wno-globals' disables warnings about "suspicious" use
- of a name both as a global name and as the implicit name of an
- intrinsic, and warnings about disagreements over the number or
- natures of arguments passed to global procedures, or the natures
- of the procedures themselves.
-
- The default is to issue such warnings, which are new as of this
- version of `g77'.
-
- * New option `-fno-globals' disables diagnostics about potentially
- fatal disagreements analysis problems, such as disagreements over
- the number or natures of arguments passed to global procedures, or
- the natures of those procedures themselves.
-
- The default is to issue such diagnostics and flag the compilation
- as unsuccessful. With this option, the diagnostics are issued as
- warnings, or, if `-Wno-globals' is specified, are not issued at
- all.
-
- This option also disables inlining of global procedures, to avoid
- compiler crashes resulting from coding errors that these
- diagnostics normally would identify.
-
- * Diagnose cases where a reference to a procedure disagrees with the
- type of that procedure, or where disagreements about the number or
- nature of arguments exist. This avoids a compiler crash.
-
- * Fix parsing bug whereby `g77' rejected a second initialization
- specification immediately following the first's closing `/' without
- an intervening comma in a `DATA' statement, and the second
- specification was an implied-DO list.
-
- * Improve performance of the `gcc' back end so certain complicated
- expressions involving `COMPLEX' arithmetic (especially
- multiplication) don't appear to take forever to compile.
-
- * Fix a couple of profiling-related bugs in `gcc' back end.
-
- * Integrate GNU Ada's (GNAT's) changes to the back end, which
- consist almost entirely of bug fixes. These fixes are circa
- version 3.10p of GNAT.
-
- * Include some other `gcc' fixes that seem useful in `g77''s version
- of `gcc'. (See `gcc/ChangeLog' for details--compare it to that
- file in the vanilla `gcc-2.7.2.3.tar.gz' distribution.)
-
- * Fix `libU77' routines that accept file and other names to strip
- trailing blanks from them, for consistency with other
- implementations. Blanks may be forcibly appended to such names by
- appending a single null character (`CHAR(0)') to the significant
- trailing blanks.
-
- * Fix `CHMOD' intrinsic to work with file names that have embedded
- blanks, commas, and so on.
-
- * Fix `SIGNAL' intrinsic so it accepts an optional third `Status'
- argument.
-
- * Fix `IDATE()' intrinsic subroutine (VXT form) so it accepts
- arguments in the correct order. Documentation fixed accordingly,
- and for `GMTIME()' and `LTIME()' as well.
-
- * Make many changes to `libU77' intrinsics to support existing code
- more directly.
-
- Such changes include allowing both subroutine and function forms
- of many routines, changing `MCLOCK()' and `TIME()' to return
- `INTEGER(KIND=1)' values, introducing `MCLOCK8()' and `TIME8()' to
- return `INTEGER(KIND=2)' values, and placing functions that are
- intended to perform side effects in a new intrinsic group,
- `badu77'.
-
- * Improve `libU77' so it is more portable.
-
- * Add options `-fbadu77-intrinsics-delete',
- `-fbadu77-intrinsics-hide', and so on.
-
- * Fix crashes involving diagnosed or invalid code.
-
- * `g77' and `gcc' now do a somewhat better job detecting and
- diagnosing arrays that are too large to handle before these cause
- diagnostics during the assembler or linker phase, a compiler
- crash, or generation of incorrect code.
-
- * Make some fixes to alias analysis code.
-
- * Add support for `restrict' keyword in `gcc' front end.
-
- * Support `gcc' version 2.7.2.3 (modified by `g77' into version
- 2.7.2.3.f.1), and remove support for prior versions of `gcc'.
-
- * Incorporate GNAT's patches to the `gcc' back end into `g77''s, so
- GNAT users do not need to apply GNAT's patches to build both GNAT
- and `g77' from the same source tree.
-
- * Modify `make' rules and related code so that generation of Info
- documentation doesn't require compilation using `gcc'. Now, any
- ANSI C compiler should be adequate to produce the `g77'
- documentation (in particular, the tables of intrinsics) from
- scratch.
-
- * Add `INT2' and `INT8' intrinsics.
-
- * Add `CPU_TIME' intrinsic.
-
- * Add `ALARM' intrinsic.
-
- * `CTIME' intrinsic now accepts any `INTEGER' argument, not just
- `INTEGER(KIND=2)'.
-
- * Warn when explicit type declaration disagrees with the type of an
- intrinsic invocation.
-
- * Support `*f771' entry in `gcc' `specs' file.
-
- * Fix typo in `make' rule `g77-cross', used only for cross-compiling.
-
- * Fix `libf2c' build procedure to re-archive library if previous
- attempt to archive was interrupted.
-
- * Change `gcc' to unroll loops only during the last invocation (of
- as many as two invocations) of loop optimization.
-
- * Improve handling of `-fno-f2c' so that code that attempts to pass
- an intrinsic as an actual argument, such as `CALL FOO(ABS)', is
- rejected due to the fact that the run-time-library routine is,
- effectively, compiled with `-ff2c' in effect.
-
- * Fix `g77' driver to recognize `-fsyntax-only' as an option that
- inhibits linking, just like `-c' or `-S', and to recognize and
- properly handle the `-nostdlib', `-M', `-MM', `-nodefaultlibs',
- and `-Xlinker' options.
-
- * Upgrade to `libf2c' as of 1997-08-16.
-
- * Modify `libf2c' to consistently and clearly diagnose recursive I/O
- (at run time).
-
- * `g77' driver now prints version information (such as produced by
- `g77 -v') to `stderr' instead of `stdout'.
-
- * The `.r' suffix now designates a Ratfor source file, to be
- preprocessed via the `ratfor' command, available separately.
-
- * Fix some aspects of how `gcc' determines what kind of system is
- being configured and what kinds are supported. For example, GNU
- Linux/Alpha ELF systems now are directly supported.
-
- * Improve diagnostics.
-
- * Improve documentation and indexing.
-
- * Include all pertinent files for `libf2c' that come from
- `netlib.bell-labs.com'; give any such files that aren't quite
- accurate in `g77''s version of `libf2c' the suffix `.netlib'.
-
- * Reserve `INTEGER(KIND=0)' for future use.
-
-In 0.5.20:
-==========
-
- * The `-fno-typeless-boz' option is now the default.
-
- This option specifies that non-decimal-radix constants using the
- prefixed-radix form (such as `Z'1234'') are to be interpreted as
- `INTEGER' constants. Specify `-ftypeless-boz' to cause such
- constants to be interpreted as typeless.
-
- (Version 0.5.19 introduced `-fno-typeless-boz' and its inverse.)
-
- * Options `-ff90-intrinsics-enable' and `-fvxt-intrinsics-enable'
- now are the defaults.
-
- Some programs might use names that clash with intrinsic names
- defined (and now enabled) by these options or by the new `libU77'
- intrinsics. Users of such programs might need to compile them
- differently (using, for example, `-ff90-intrinsics-disable') or,
- better yet, insert appropriate `EXTERNAL' statements specifying
- that these names are not intended to be names of intrinsics.
-
- * The `ALWAYS_FLUSH' macro is no longer defined when building
- `libf2c', which should result in improved I/O performance,
- especially over NFS.
-
- *Note:* If you have code that depends on the behavior of `libf2c'
- when built with `ALWAYS_FLUSH' defined, you will have to modify
- `libf2c' accordingly before building it from this and future
- versions of `g77'.
-
- * Dave Love's implementation of `libU77' has been added to the
- version of `libf2c' distributed with and built as part of `g77'.
- `g77' now knows about the routines in this library as intrinsics.
-
- * New option `-fvxt' specifies that the source file is written in
- VXT Fortran, instead of GNU Fortran.
-
- * The `-fvxt-not-f90' option has been deleted, along with its
- inverse, `-ff90-not-vxt'.
-
- If you used one of these deleted options, you should re-read the
- pertinent documentation to determine which options, if any, are
- appropriate for compiling your code with this version of `g77'.
-
- * The `-fugly' option now issues a warning, as it likely will be
- removed in a future version.
-
- (Enabling all the `-fugly-*' options is unlikely to be feasible,
- or sensible, in the future, so users should learn to specify only
- those `-fugly-*' options they really need for a particular source
- file.)
-
- * The `-fugly-assumed' option, introduced in version 0.5.19, has
- been changed to better accommodate old and new code.
-
- * Make a number of fixes to the `g77' front end and the `gcc' back
- end to better support Alpha (AXP) machines. This includes
- providing at least one bug-fix to the `gcc' back end for Alphas.
-
- * Related to supporting Alpha (AXP) machines, the `LOC()' intrinsic
- and `%LOC()' construct now return values of integer type that is
- the same width (holds the same number of bits) as the pointer type
- on the machine.
-
- On most machines, this won't make a difference, whereas on Alphas,
- the type these constructs return is `INTEGER*8' instead of the
- more common `INTEGER*4'.
-
- * Emulate `COMPLEX' arithmetic in the `g77' front end, to avoid bugs
- in `complex' support in the `gcc' back end. New option
- `-fno-emulate-complex' causes `g77' to revert the 0.5.19 behavior.
-
- * Fix bug whereby `REAL A(1)', for example, caused a compiler crash
- if `-fugly-assumed' was in effect and A was a local (automatic)
- array. That case is no longer affected by the new handling of
- `-fugly-assumed'.
-
- * Fix `g77' command driver so that `g77 -o foo.f' no longer deletes
- `foo.f' before issuing other diagnostics, and so the `-x' option
- is properly handled.
-
- * Enable inlining of subroutines and functions by the `gcc' back end.
- This works as it does for `gcc' itself--program units may be
- inlined for invocations that follow them in the same program unit,
- as long as the appropriate compile-time options are specified.
-
- * Dummy arguments are no longer assumed to potentially alias
- (overlap) other dummy arguments or `COMMON' areas when any of
- these are defined (assigned to) by Fortran code.
-
- This can result in faster and/or smaller programs when compiling
- with optimization enabled, though on some systems this effect is
- observed only when `-fforce-addr' also is specified.
-
- New options `-falias-check', `-fargument-alias',
- `-fargument-noalias', and `-fno-argument-noalias-global' control
- the way `g77' handles potential aliasing.
-
- * The `CONJG()' and `DCONJG()' intrinsics now are compiled in-line.
-
- * The bug-fix for 0.5.19.1 has been re-done. The `g77' compiler has
- been changed back to assume `libf2c' has no aliasing problems in
- its implementations of the `COMPLEX' (and `DOUBLE COMPLEX')
- intrinsics. The `libf2c' has been changed to have no such
- problems.
-
- As a result, 0.5.20 is expected to offer improved performance over
- 0.5.19.1, perhaps as good as 0.5.19 in most or all cases, due to
- this change alone.
-
- *Note:* This change requires version 0.5.20 of `libf2c', at least,
- when linking code produced by any versions of `g77' other than
- 0.5.19.1. Use `g77 -v' to determine the version numbers of the
- `libF77', `libI77', and `libU77' components of the `libf2c'
- library. (If these version numbers are not printed--in
- particular, if the linker complains about unresolved references to
- names like `g77__fvers__'--that strongly suggests your
- installation has an obsolete version of `libf2c'.)
-
- * New option `-fugly-assign' specifies that the same memory
- locations are to be used to hold the values assigned by both
- statements `I = 3' and `ASSIGN 10 TO I', for example. (Normally,
- `g77' uses a separate memory location to hold assigned statement
- labels.)
-
- * `FORMAT' and `ENTRY' statements now are allowed to precede
- `IMPLICIT NONE' statements.
-
- * Produce diagnostic for unsupported `SELECT CASE' on `CHARACTER'
- type, instead of crashing, at compile time.
-
- * Fix crashes involving diagnosed or invalid code.
-
- * Change approach to building `libf2c' archive (`libf2c.a') so that
- members are added to it only when truly necessary, so the user
- that installs an already-built `g77' doesn't need to have write
- access to the build tree (whereas the user doing the build might
- not have access to install new software on the system).
-
- * Support `gcc' version 2.7.2.2 (modified by `g77' into version
- 2.7.2.2.f.2), and remove support for prior versions of `gcc'.
-
- * Upgrade to `libf2c' as of 1997-02-08, and fix up some of the build
- procedures.
-
- * Improve general build procedures for `g77', fixing minor bugs
- (such as deletion of any file named `f771' in the parent directory
- of `gcc/').
-
- * Enable full support of `INTEGER*8' available in `libf2c' and
- `f2c.h' so that `f2c' users may make full use of its features via
- the `g77' version of `f2c.h' and the `INTEGER*8' support routines
- in the `g77' version of `libf2c'.
-
- * Improve `g77' driver and `libf2c' so that `g77 -v' yields version
- information on the library.
-
- * The `SNGL' and `FLOAT' intrinsics now are specific intrinsics,
- instead of synonyms for the generic intrinsic `REAL'.
-
- * New intrinsics have been added. These are `REALPART', `IMAGPART',
- `COMPLEX', `LONG', and `SHORT'.
-
- * A new group of intrinsics, `gnu', has been added to contain the
- new `REALPART', `IMAGPART', and `COMPLEX' intrinsics. An old
- group, `dcp', has been removed.
-
- * Complain about industry-wide ambiguous references `REAL(EXPR)' and
- `AIMAG(EXPR)', where EXPR is `DOUBLE COMPLEX' (or any complex type
- other than `COMPLEX'), unless `-ff90' option specifies Fortran 90
- interpretation or new `-fugly-complex' option, in conjunction with
- `-fnot-f90', specifies `f2c' interpretation.
-
- * Make improvements to diagnostics.
-
- * Speed up compiler a bit.
-
- * Improvements to documentation and indexing, including a new
- chapter containing information on one, later more, diagnostics
- that users are directed to pull up automatically via a message in
- the diagnostic itself.
-
- (Hence the menu item `M' for the node `Diagnostics' in the
- top-level menu of the Info documentation.)
-
-In 0.5.19.1:
-============
-
- * Code-generation bugs afflicting operations on complex data have
- been fixed.
-
- These bugs occurred when assigning the result of an operation to a
- complex variable (or array element) that also served as an input
- to that operation.
-
- The operations affected by this bug were: `CONJG()', `DCONJG()',
- `CCOS()', `CDCOS()', `CLOG()', `CDLOG()', `CSIN()', `CDSIN()',
- `CSQRT()', `CDSQRT()', complex division, and raising a `DOUBLE
- COMPLEX' operand to an `INTEGER' power. (The related generic and
- `Z'-prefixed intrinsics, such as `ZSIN()', also were affected.)
-
- For example, `C = CSQRT(C)', `Z = Z/C', and `Z = Z**I' (where `C'
- is `COMPLEX' and `Z' is `DOUBLE COMPLEX') have been fixed.
-
-In 0.5.19:
-==========
-
- * Fix `FORMAT' statement parsing so negative values for specifiers
- such as `P' (e.g. `FORMAT(-1PF8.1)') are correctly processed as
- negative.
-
- * Fix `SIGNAL' intrinsic so it once again accepts a procedure as its
- second argument.
-
- * A temporary kludge option provides bare-bones information on
- `COMMON' and `EQUIVALENCE' members at debug time.
-
- * New `-fonetrip' option specifies FORTRAN-66-style one-trip `DO'
- loops.
-
- * New `-fno-silent' option causes names of program units to be
- printed as they are compiled, in a fashion similar to UNIX `f77'
- and `f2c'.
-
- * New `-fugly-assumed' option specifies that arrays dimensioned via
- `DIMENSION X(1)', for example, are to be treated as assumed-size.
-
- * New `-fno-typeless-boz' option specifies that non-decimal-radix
- constants using the prefixed-radix form (such as `Z'1234'') are to
- be interpreted as `INTEGER' constants.
-
- * New `-ff66' option is a "shorthand" option that specifies
- behaviors considered appropriate for FORTRAN 66 programs.
-
- * New `-ff77' option is a "shorthand" option that specifies
- behaviors considered appropriate for UNIX `f77' programs.
-
- * New `-fugly-comma' and `-fugly-logint' options provided to perform
- some of what `-fugly' used to do. `-fugly' and `-fno-ugly' are
- now "shorthand" options, in that they do nothing more than enable
- (or disable) other `-fugly-*' options.
-
- * Fix parsing of assignment statements involving targets that are
- substrings of elements of `CHARACTER' arrays having names such as
- `READ', `WRITE', `GOTO', and `REALFUNCTIONFOO'.
-
- * Fix crashes involving diagnosed code.
-
- * Fix handling of local `EQUIVALENCE' areas so certain cases of
- valid Fortran programs are not misdiagnosed as improperly
- extending the area backwards.
-
- * Support `gcc' version 2.7.2.1.
-
- * Upgrade to `libf2c' as of 1996-09-26, and fix up some of the build
- procedures.
-
- * Change code generation for list-directed I/O so it allows for new
- versions of `libf2c' that might return non-zero status codes for
- some operations previously assumed to always return zero.
-
- This change not only affects how `IOSTAT=' variables are set by
- list-directed I/O, it also affects whether `END=' and `ERR='
- labels are reached by these operations.
-
- * Add intrinsic support for new `FTELL' and `FSEEK' procedures in
- `libf2c'.
-
- * Modify `fseek_()' in `libf2c' to be more portable (though, in
- practice, there might be no systems where this matters) and to
- catch invalid `whence' arguments.
-
- * Some useless warnings from the `-Wunused' option have been
- eliminated.
-
- * Fix a problem building the `f771' executable on AIX systems by
- linking with the `-bbigtoc' option.
-
- * Abort configuration if `gcc' has not been patched using the patch
- file provided in the `gcc/f/gbe/' subdirectory.
-
- * Add options `--help' and `--version' to the `g77' command, to
- conform to GNU coding guidelines. Also add printing of `g77'
- version number when the `--verbose' (`-v') option is used.
-
- * Change internally generated name for local `EQUIVALENCE' areas to
- one based on the alphabetically sorted first name in the list of
- names for entities placed at the beginning of the areas.
-
- * Improvements to documentation and indexing.
-
-In 0.5.18:
-==========
-
- * Add some rudimentary support for `INTEGER*1', `INTEGER*2',
- `INTEGER*8', and their `LOGICAL' equivalents. (This support works
- on most, maybe all, `gcc' targets.)
-
- Thanks to Scott Snyder (<snyder@d0sgif.fnal.gov>) for providing
- the patch for this!
-
- Among the missing elements from the support for these features are
- full intrinsic support and constants.
-
- * Add some rudimentary support for the `BYTE' and `WORD'
- type-declaration statements. `BYTE' corresponds to `INTEGER*1',
- while `WORD' corresponds to `INTEGER*2'.
-
- Thanks to Scott Snyder (<snyder@d0sgif.fnal.gov>) for providing
- the patch for this!
-
- * The compiler code handling intrinsics has been largely rewritten
- to accommodate the new types. No new intrinsics or arguments for
- existing intrinsics have been added, so there is, at this point,
- no intrinsic to convert to `INTEGER*8', for example.
-
- * Support automatic arrays in procedures.
-
- * Reduce space/time requirements for handling large *sparsely*
- initialized aggregate arrays. This improvement applies to only a
- subset of the general problem to be addressed in 0.6.
-
- * Treat initial values of zero as if they weren't specified (in DATA
- and type-declaration statements). The initial values will be set
- to zero anyway, but the amount of compile time processing them
- will be reduced, in some cases significantly (though, again, this
- is only a subset of the general problem to be addressed in 0.6).
-
- A new option, `-fzeros', is introduced to enable the traditional
- treatment of zeros as any other value.
-
- * With `-ff90' in force, `g77' incorrectly interpreted `REAL(Z)' as
- returning a `REAL' result, instead of as a `DOUBLE PRECISION'
- result. (Here, `Z' is `DOUBLE COMPLEX'.)
-
- With `-fno-f90' in force, the interpretation remains unchanged,
- since this appears to be how at least some F77 code using the
- `DOUBLE COMPLEX' extension expected it to work.
-
- Essentially, `REAL(Z)' in F90 is the same as `DBLE(Z)', while in
- extended F77, it appears to be the same as `REAL(REAL(Z))'.
-
- * An expression involving exponentiation, where both operands were
- type `INTEGER' and the right-hand operand was negative, was
- erroneously evaluated.
-
- * Fix bugs involving `DATA' implied-`DO' constructs (these involved
- an errant diagnostic and a crash, both on good code, one involving
- subsequent statement-function definition).
-
- * Close `INCLUDE' files after processing them, so compiling source
- files with lots of `INCLUDE' statements does not result in being
- unable to open `INCLUDE' files after all the available file
- descriptors are used up.
-
- * Speed up compiling, especially of larger programs, and perhaps
- slightly reduce memory utilization while compiling (this is *not*
- the improvement planned for 0.6 involving large aggregate
- areas)--these improvements result from simply turning off some
- low-level code to do self-checking that hasn't been triggered in a
- long time.
-
- * Introduce three new options that implement optimizations in the
- `gcc' back end (GBE). These options are `-fmove-all-movables',
- `-freduce-all-givs', and `-frerun-loop-opt', which are enabled, by
- default, for Fortran compilations. These optimizations are
- intended to help toon Fortran programs.
-
- * Patch the GBE to do a better job optimizing certain kinds of
- references to array elements.
-
- * Due to patches to the GBE, the version number of `gcc' also is
- patched to make it easier to manage installations, especially
- useful if it turns out a `g77' change to the GBE has a bug.
-
- The `g77'-modified version number is the `gcc' version number with
- the string `.f.N' appended, where `f' identifies the version as
- enhanced for Fortran, and N is `1' for the first Fortran patch for
- that version of `gcc', `2' for the second, and so on.
-
- So, this introduces version 2.7.2.f.1 of `gcc'.
-
- * Make several improvements and fixes to diagnostics, including the
- removal of two that were inappropriate or inadequate.
-
- * Warning about two successive arithmetic operators, produced by
- `-Wsurprising', now produced *only* when both operators are,
- indeed, arithmetic (not relational/boolean).
-
- * `-Wsurprising' now warns about the remaining cases of using
- non-integral variables for implied-`DO' loops, instead of these
- being rejected unless `-fpedantic' or `-fugly' specified.
-
- * Allow `SAVE' of a local variable or array, even after it has been
- given an initial value via `DATA', for example.
-
- * Introduce an Info version of `g77' documentation, which supercedes
- `gcc/f/CREDITS', `gcc/f/DOC', and `gcc/f/PROJECTS'. These files
- will be removed in a future release. The files `gcc/f/BUGS',
- `gcc/f/INSTALL', and `gcc/f/NEWS' now are automatically built from
- the texinfo source when distributions are made.
-
- This effort was inspired by a first pass at translating
- `g77-0.5.16/f/DOC' that was contributed to Craig by David Ronis
- (<ronis@onsager.chem.mcgill.ca>).
-
- * New `-fno-second-underscore' option to specify that, when
- `-funderscoring' is in effect, a second underscore is not to be
- appended to Fortran names already containing an underscore.
-
- * Change the way iterative `DO' loops work to follow the F90
- standard. In particular, calculation of the iteration count is
- still done by converting the start, end, and increment parameters
- to the type of the `DO' variable, but the result of the
- calculation is always converted to the default `INTEGER' type.
-
- (This should have no effect on existing code compiled by `g77',
- but code written to assume that use of a *wider* type for the `DO'
- variable will result in an iteration count being fully calculated
- using that wider type (wider than default `INTEGER') must be
- rewritten.)
-
- * Support `gcc' version 2.7.2.
-
- * Upgrade to `libf2c' as of 1996-03-23, and fix up some of the build
- procedures.
-
- Note that the email addresses related to `f2c' have changed--the
- distribution site now is named `netlib.bell-labs.com', and the
- maintainer's new address is <dmg@bell-labs.com>.
-
-In 0.5.17:
-==========
-
- * *Fix serious bug* in `g77 -v' command that can cause removal of a
- system's `/dev/null' special file if run by user `root'.
-
- *All users* of version 0.5.16 should ensure that they have not
- removed `/dev/null' or replaced it with an ordinary file (e.g. by
- comparing the output of `ls -l /dev/null' with `ls -l /dev/zero'.
- If the output isn't basically the same, contact your system
- administrator about restoring `/dev/null' to its proper status).
-
- This bug is particularly insidious because removing `/dev/null' as
- a special file can go undetected for quite a while, aside from
- various applications and programs exhibiting sudden, strange
- behaviors.
-
- I sincerely apologize for not realizing the implications of the
- fact that when `g77 -v' runs the `ld' command with `-o /dev/null'
- that `ld' tries to *remove* the executable it is supposed to build
- (especially if it reports unresolved references, which it should
- in this case)!
-
- * Fix crash on `CHARACTER*(*) FOO' in a main or block data program
- unit.
-
- * Fix crash that can occur when diagnostics given outside of any
- program unit (such as when input file contains `@foo').
-
- * Fix crashes, infinite loops (hangs), and such involving diagnosed
- code.
-
- * Fix `ASSIGN''ed variables so they can be `SAVE''d or dummy
- arguments, and issue clearer error message in cases where target
- of `ASSIGN' or `ASSIGN'ed `GOTO'/`FORMAT' is too small (which
- should never happen).
-
- * Make `libf2c' build procedures work on more systems again by
- eliminating unnecessary invocations of `ld -r -x' and `mv'.
-
- * Fix omission of `-funix-intrinsics-...' options in list of
- permitted options to compiler.
-
- * Fix failure to always diagnose missing type declaration for
- `IMPLICIT NONE'.
-
- * Fix compile-time performance problem (which could sometimes crash
- the compiler, cause a hang, or whatever, due to a bug in the back
- end) involving exponentiation with a large `INTEGER' constant for
- the right-hand operator (e.g. `I**32767').
-
- * Fix build procedures so cross-compiling `g77' (the `fini' utility
- in particular) is properly built using the host compiler.
-
- * Add new `-Wsurprising' option to warn about constructs that are
- interpreted by the Fortran standard (and `g77') in ways that are
- surprising to many programmers.
-
- * Add `ERF()' and `ERFC()' as generic intrinsics mapping to existing
- `ERF'/`DERF' and `ERFC'/`DERFC' specific intrinsics.
-
- *Note:* You should specify `INTRINSIC ERF,ERFC' in any code where
- you might use these as generic intrinsics, to improve likelihood
- of diagnostics (instead of subtle run-time bugs) when using a
- compiler that doesn't support these as intrinsics (e.g. `f2c').
-
- * Remove from `-fno-pedantic' the diagnostic about `DO' with
- non-`INTEGER' index variable; issue that under `-Wsurprising'
- instead.
-
- * Clarify some diagnostics that say things like "ignored" when that's
- misleading.
-
- * Clarify diagnostic on use of `.EQ.'/`.NE.' on `LOGICAL' operands.
-
- * Minor improvements to code generation for various operations on
- `LOGICAL' operands.
-
- * Minor improvement to code generation for some `DO' loops on some
- machines.
-
- * Support `gcc' version 2.7.1.
-
- * Upgrade to `libf2c' as of 1995-11-15.
-
-In 0.5.16:
-==========
-
- * Fix a code-generation bug involving complicated `EQUIVALENCE'
- statements not involving `COMMON'.
-
- * Fix code-generation bugs involving invoking "gratis" library
- procedures in `libf2c' from code compiled with `-fno-f2c' by
- making these procedures known to `g77' as intrinsics (not affected
- by -fno-f2c). This is known to fix code invoking `ERF()',
- `ERFC()', `DERF()', and `DERFC()'.
-
- * Update `libf2c' to include netlib patches through 1995-08-16, and
- `#define' `WANT_LEAD_0' to 1 to make `g77'-compiled code more
- consistent with other Fortran implementations by outputting
- leading zeros in formatted and list-directed output.
-
- * Fix a code-generation bug involving adjustable dummy arrays with
- high bounds whose primaries are changed during procedure
- execution, and which might well improve code-generation
- performance for such arrays compared to `f2c' plus `gcc' (but
- apparently only when using `gcc-2.7.0' or later).
-
- * Fix a code-generation bug involving invocation of `COMPLEX' and
- `DOUBLE COMPLEX' `FUNCTION's and doing `COMPLEX' and `DOUBLE
- COMPLEX' divides, when the result of the invocation or divide is
- assigned directly to a variable that overlaps one or more of the
- arguments to the invocation or divide.
-
- * Fix crash by not generating new optimal code for `X**I' if `I' is
- nonconstant and the expression is used to dimension a dummy array,
- since the `gcc' back end does not support the necessary mechanics
- (and the `gcc' front end rejects the equivalent construct, as it
- turns out).
-
- * Fix crash on expressions like `COMPLEX**INTEGER'.
-
- * Fix crash on expressions like `(1D0,2D0)**2', i.e. raising a
- `DOUBLE COMPLEX' constant to an `INTEGER' constant power.
-
- * Fix crashes and such involving diagnosed code.
-
- * Diagnose, instead of crashing on, statement function definitions
- having duplicate dummy argument names.
-
- * Fix bug causing rejection of good code involving statement function
- definitions.
-
- * Fix bug resulting in debugger not knowing size of local equivalence
- area when any member of area has initial value (via `DATA', for
- example).
-
- * Fix installation bug that prevented installation of `g77' driver.
- Provide for easy selection of whether to install copy of `g77' as
- `f77' to replace the broken code.
-
- * Fix `gcc' driver (affects `g77' thereby) to not gratuitously
- invoke the `f771' program (e.g. when `-E' is specified).
-
- * Fix diagnostic to point to correct source line when it immediately
- follows an `INCLUDE' statement.
-
- * Support more compiler options in `gcc'/`g77' when compiling
- Fortran files. These options include `-p', `-pg', `-aux-info',
- `-P', correct setting of version-number macros for preprocessing,
- full recognition of `-O0', and automatic insertion of
- configuration-specific linker specs.
-
- * Add new intrinsics that interface to existing routines in `libf2c':
- `ABORT', `DERF', `DERFC', `ERF', `ERFC', `EXIT', `FLUSH',
- `GETARG', `GETENV', `IARGC', `SIGNAL', and `SYSTEM'. Note that
- `ABORT', `EXIT', `FLUSH', `SIGNAL', and `SYSTEM' are intrinsic
- subroutines, not functions (since they have side effects), so to
- get the return values from `SIGNAL' and `SYSTEM', append a final
- argument specifying an `INTEGER' variable or array element (e.g.
- `CALL SYSTEM('rm foo',ISTAT)').
-
- * Add new intrinsic group named `unix' to contain the new intrinsics,
- and by default enable this new group.
-
- * Move `LOC()' intrinsic out of the `vxt' group to the new `unix'
- group.
-
- * Improve `g77' so that `g77 -v' by itself (or with certain other
- options, including `-B', `-b', `-i', `-nostdlib', and `-V')
- reports lots more useful version info, and so that long-form
- options `gcc' accepts are understood by `g77' as well (even in
- truncated, unambiguous forms).
-
- * Add new `g77' option `--driver=name' to specify driver when
- default, `gcc', isn't appropriate.
-
- * Add support for `#' directives (as output by the preprocessor) in
- the compiler, and enable generation of those directives by the
- preprocessor (when compiling `.F' files) so diagnostics and
- debugging info are more useful to users of the preprocessor.
-
- * Produce better diagnostics, more like `gcc', with info such as `In
- function `foo':' and `In file included from...:'.
-
- * Support `gcc''s `-fident' and `-fno-ident' options.
-
- * When `-Wunused' in effect, don't warn about local variables used as
- statement-function dummy arguments or `DATA' implied-`DO' iteration
- variables, even though, strictly speaking, these are not uses of
- the variables themselves.
-
- * When `-W -Wunused' in effect, don't warn about unused dummy
- arguments at all, since there's no way to turn this off for
- individual cases (`g77' might someday start warning about
- these)--applies to `gcc' versions 2.7.0 and later, since earlier
- versions didn't warn about unused dummy arguments.
-
- * New option `-fno-underscoring' that inhibits transformation of
- names (by appending one or two underscores) so users may experiment
- with implications of such an environment.
-
- * Minor improvement to `gcc/f/info' module to make it easier to build
- `g77' using the native (non-`gcc') compiler on certain machines
- (but definitely not all machines nor all non-`gcc' compilers).
- Please do not report bugs showing problems compilers have with
- macros defined in `gcc/f/target.h' and used in places like
- `gcc/f/expr.c'.
-
- * Add warning to be printed for each invocation of the compiler if
- the target machine `INTEGER', `REAL', or `LOGICAL' size is not 32
- bits, since `g77' is known to not work well for such cases (to be
- fixed in Version 0.6--*note Actual Bugs We Haven't Fixed Yet:
- Actual Bugs.).
-
- * Lots of new documentation (though work is still needed to put it
- into canonical GNU format).
-
- * Build `libf2c' with `-g0', not `-g2', in effect (by default), to
- produce smaller library without lots of debugging clutter.
-
-In 0.5.15:
-==========
-
- * Fix bad code generation involving `X**I' and temporary, internal
- variables generated by `g77' and the back end (such as for `DO'
- loops).
-
- * Fix crash given `CHARACTER A;DATA A/.TRUE./'.
-
- * Replace crash with diagnostic given `CHARACTER A;DATA A/1.0/'.
-
- * Fix crash or other erratic behavior when null character constant
- (`''') is encountered.
-
- * Fix crash or other erratic behavior involving diagnosed code.
-
- * Fix code generation for external functions returning type `REAL'
- when the `-ff2c' option is in force (which it is by default) so
- that `f2c' compatibility is indeed provided.
-
- * Disallow `COMMON I(10)' if `I' has previously been specified with
- an array declarator.
-
- * New `-ffixed-line-length-N' option, where N is the maximum length
- of a typical fixed-form line, defaulting to 72 columns, such that
- characters beyond column N are ignored, or N is `none', meaning no
- characters are ignored. does not affect lines with `&' in column
- 1, which are always processed as if `-ffixed-line-length-none' was
- in effect.
-
- * No longer generate better code for some kinds of array references,
- as `gcc' back end is to be fixed to do this even better, and it
- turned out to slow down some code in some cases after all.
-
- * In `COMMON' and `EQUIVALENCE' areas with any members given initial
- values (e.g. via `DATA'), uninitialized members now always
- initialized to binary zeros (though this is not required by the
- standard, and might not be done in future versions of `g77').
- Previously, in some `COMMON'/`EQUIVALENCE' areas (essentially
- those with members of more than one type), the uninitialized
- members were initialized to spaces, to cater to `CHARACTER' types,
- but it seems no existing code expects that, while much existing
- code expects binary zeros.
-
-In 0.5.14:
-==========
-
- * Don't emit bad code when low bound of adjustable array is
- nonconstant and thus might vary as an expression at run time.
-
- * Emit correct code for calculation of number of trips in `DO' loops
- for cases where the loop should not execute at all. (This bug
- affected cases where the difference between the begin and end
- values was less than the step count, though probably not for
- floating-point cases.)
-
- * Fix crash when extra parentheses surround item in `DATA'
- implied-`DO' list.
-
- * Fix crash over minor internal inconsistencies in handling
- diagnostics, just substitute dummy strings where necessary.
-
- * Fix crash on some systems when compiling call to `MVBITS()'
- intrinsic.
-
- * Fix crash on array assignment `TYPEDDD(...)=...', where DDD is a
- string of one or more digits.
-
- * Fix crash on `DCMPLX()' with a single `INTEGER' argument.
-
- * Fix various crashes involving code with diagnosed errors.
-
- * Support `-I' option for `INCLUDE' statement, plus `gcc''s
- `header.gcc' facility for handling systems like MS-DOS.
-
- * Allow `INCLUDE' statement to be continued across multiple lines,
- even allow it to coexist with other statements on the same line.
-
- * Incorporate Bellcore fixes to `libf2c' through 1995-03-15--this
- fixes a bug involving infinite loops reading EOF with empty
- list-directed I/O list.
-
- * Remove all the `g77'-specific auto-configuration scripts, code,
- and so on, except for temporary substitutes for bsearch() and
- strtoul(), as too many configure/build problems were reported in
- these areas. People will have to fix their systems' problems
- themselves, or at least somewhere other than `g77', which expects
- a working ANSI C environment (and, for now, a GNU C compiler to
- compile `g77' itself).
-
- * Complain if initialized common redeclared as larger in subsequent
- program unit.
-
- * Warn if blank common initialized, since its size can vary and hence
- related warnings that might be helpful won't be seen.
-
- * New `-fbackslash' option, on by default, that causes `\' within
- `CHARACTER' and Hollerith constants to be interpreted a la GNU C.
- Note that this behavior is somewhat different from `f2c''s, which
- supports only a limited subset of backslash (escape) sequences.
-
- * Make `-fugly-args' the default.
-
- * New `-fugly-init' option, on by default, that allows
- typeless/Hollerith to be specified as initial values for variables
- or named constants (`PARAMETER'), and also allows
- character<->numeric conversion in those contexts--turn off via
- `-fno-ugly-init'.
-
- * New `-finit-local-zero' option to initialize local variables to
- binary zeros. This does not affect whether they are `SAVE'd, i.e.
- made automatic or static.
-
- * New `-Wimplicit' option to warn about implicitly typed variables,
- arrays, and functions. (Basically causes all program units to
- default to `IMPLICIT NONE'.)
-
- * `-Wall' now implies `-Wuninitialized' as with `gcc' (i.e. unless
- `-O' not specified, since `-Wuninitialized' requires `-O'), and
- implies `-Wunused' as well.
-
- * `-Wunused' no longer gives spurious messages for unused `EXTERNAL'
- names (since they are assumed to refer to block data program
- units, to make use of libraries more reliable).
-
- * Support `%LOC()' and `LOC()' of character arguments.
-
- * Support null (zero-length) character constants and expressions.
-
- * Support `f2c''s `IMAG()' generic intrinsic.
-
- * Support `ICHAR()', `IACHAR()', and `LEN()' of character
- expressions that are valid in assignments but not normally as
- actual arguments.
-
- * Support `f2c'-style `&' in column 1 to mean continuation line.
-
- * Allow `NAMELIST', `EXTERNAL', `INTRINSIC', and `VOLATILE' in
- `BLOCK DATA', even though these are not allowed by the standard.
-
- * Allow `RETURN' in main program unit.
-
- * Changes to Hollerith-constant support to obey Appendix C of the
- standard:
-
- - Now padded on the right with zeros, not spaces.
-
- - Hollerith "format specifications" in the form of arrays of
- non-character allowed.
-
- - Warnings issued when non-space truncation occurs when
- converting to another type.
-
- - When specified as actual argument, now passed by reference to
- `INTEGER' (padded on right with spaces if constant too small,
- otherwise fully intact if constant wider the `INTEGER' type)
- instead of by value.
-
- *Warning:* `f2c' differs on the interpretation of `CALL FOO(1HX)',
- which it treats exactly the same as `CALL FOO('X')', but which the
- standard and `g77' treat as `CALL FOO(%REF('X '))' (padded with
- as many spaces as necessary to widen to `INTEGER'), essentially.
-
- * Changes and fixes to typeless-constant support:
-
- - Now treated as a typeless double-length `INTEGER' value.
-
- - Warnings issued when overflow occurs.
-
- - Padded on the left with zeros when converting to a larger
- type.
-
- - Should be properly aligned and ordered on the target machine
- for whatever type it is turned into.
-
- - When specified as actual argument, now passed as reference to
- a default `INTEGER' constant.
-
- * `%DESCR()' of a non-`CHARACTER' expression now passes a pointer to
- the expression plus a length for the expression just as if it were
- a `CHARACTER' expression. For example, `CALL FOO(%DESCR(D))',
- where `D' is `REAL*8', is the same as `CALL FOO(D,%VAL(8)))'.
-
- * Name of multi-entrypoint master function changed to incorporate
- the name of the primary entry point instead of a decimal value, so
- the name of the master function for `SUBROUTINE X' with alternate
- entry points is now `__g77_masterfun_x'.
-
- * Remove redundant message about zero-step-count `DO' loops.
-
- * Clean up diagnostic messages, shortening many of them.
-
- * Fix typo in `g77' man page.
-
- * Clarify implications of constant-handling bugs in `f/BUGS'.
-
- * Generate better code for `**' operator with a right-hand operand of
- type `INTEGER'.
-
- * Generate better code for `SQRT()' and `DSQRT()', also when
- `-ffast-math' specified, enable better code generation for `SIN()'
- and `COS()'.
-
- * Generate better code for some kinds of array references.
-
- * Speed up lexing somewhat (this makes the compilation phase
- noticeably faster).
-
diff --git a/gcc/f/g77.info-5 b/gcc/f/g77.info-5
deleted file mode 100644
index 47ecfc37791..00000000000
--- a/gcc/f/g77.info-5
+++ /dev/null
@@ -1,1305 +0,0 @@
-This is Info file g77.info, produced by Makeinfo version 1.68 from the
-input file g77.texi.
-
- This file explains how to use the GNU Fortran system.
-
- Published by the Free Software Foundation 59 Temple Place - Suite 330
-Boston, MA 02111-1307 USA
-
- Copyright (C) 1995-1997 Free Software Foundation, Inc.
-
- Permission is granted to make and distribute verbatim copies of this
-manual provided the copyright notice and this permission notice are
-preserved on all copies.
-
- Permission is granted to copy and distribute modified versions of
-this manual under the conditions for verbatim copying, provided also
-that the sections entitled "GNU General Public License," "Funding for
-Free Software," and "Protect Your Freedom--Fight `Look And Feel'" are
-included exactly as in the original, and provided that the entire
-resulting derived work is distributed under the terms of a permission
-notice identical to this one.
-
- Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that the sections entitled "GNU General Public
-License," "Funding for Free Software," and "Protect Your Freedom--Fight
-`Look And Feel'", and this permission notice, may be included in
-translations approved by the Free Software Foundation instead of in the
-original English.
-
- Contributed by James Craig Burley (<burley@gnu.ai.mit.edu>).
-Inspired by a first pass at translating `g77-0.5.16/f/DOC' that was
-contributed to Craig by David Ronis (<ronis@onsager.chem.mcgill.ca>).
-
-INFO-DIR-SECTION Fortran Programming
-START-INFO-DIR-ENTRY
-* g77: (g77). The GNU Fortran compilation system.
-END-INFO-DIR-ENTRY
-
-
-File: g77.info, Node: Changes, Next: Language, Prev: News, Up: Top
-
-User-visible Changes
-********************
-
- This section describes changes to `g77' that are visible to the
-programmers who actually write and maintain Fortran code they compile
-with `g77'. Information on changes to installation procedures, changes
-to the documentation, and bug fixes is not provided here, unless it is
-likely to affect how users use `g77'. *Note News About GNU Fortran:
-News, for information on such changes to `g77'.
-
- To find out about existing bugs and ongoing plans for GNU Fortran,
-retrieve `ftp://alpha.gnu.ai.mit.edu/g77.plan' or, if you cannot do
-that, email <fortran@gnu.ai.mit.edu> asking for a recent copy of the
-GNU Fortran `.plan' file.
-
-In 0.5.21:
-==========
-
- * When the `-W' option is specified, `gcc', `g77', and other GNU
- compilers that incorporate the `gcc' back end as modified by
- `g77', issue a warning about integer division by constant zero.
-
- * New option `-Wno-globals' disables warnings about "suspicious" use
- of a name both as a global name and as the implicit name of an
- intrinsic, and warnings about disagreements over the number or
- natures of arguments passed to global procedures, or the natures
- of the procedures themselves.
-
- The default is to issue such warnings, which are new as of this
- version of `g77'.
-
- * New option `-fno-globals' disables diagnostics about potentially
- fatal disagreements analysis problems, such as disagreements over
- the number or natures of arguments passed to global procedures, or
- the natures of those procedures themselves.
-
- The default is to issue such diagnostics and flag the compilation
- as unsuccessful. With this option, the diagnostics are issued as
- warnings, or, if `-Wno-globals' is specified, are not issued at
- all.
-
- This option also disables inlining of global procedures, to avoid
- compiler crashes resulting from coding errors that these
- diagnostics normally would identify.
-
- * Fix `libU77' routines that accept file names to strip trailing
- spaces from them, for consistency with other implementations.
-
- * Fix `SIGNAL' intrinsic so it accepts an optional third `Status'
- argument.
-
- * Make many changes to `libU77' intrinsics to support existing code
- more directly.
-
- Such changes include allowing both subroutine and function forms
- of many routines, changing `MCLOCK()' and `TIME()' to return
- `INTEGER(KIND=1)' values, introducing `MCLOCK8()' and `TIME8()' to
- return `INTEGER(KIND=2)' values, and placing functions that are
- intended to perform side effects in a new intrinsic group,
- `badu77'.
-
- * Add options `-fbadu77-intrinsics-delete',
- `-fbadu77-intrinsics-hide', and so on.
-
- * Add `INT2' and `INT8' intrinsics.
-
- * Add `CPU_TIME' intrinsic.
-
- * `CTIME' intrinsic now accepts any `INTEGER' argument, not just
- `INTEGER(KIND=2)'.
-
-In 0.5.20:
-==========
-
- * The `-fno-typeless-boz' option is now the default.
-
- This option specifies that non-decimal-radix constants using the
- prefixed-radix form (such as `Z'1234'') are to be interpreted as
- `INTEGER(KIND=1)' constants. Specify `-ftypeless-boz' to cause
- such constants to be interpreted as typeless.
-
- (Version 0.5.19 introduced `-fno-typeless-boz' and its inverse.)
-
- *Note Options Controlling Fortran Dialect: Fortran Dialect Options,
- for information on the `-ftypeless-boz' option.
-
- * Options `-ff90-intrinsics-enable' and `-fvxt-intrinsics-enable'
- now are the defaults.
-
- Some programs might use names that clash with intrinsic names
- defined (and now enabled) by these options or by the new `libU77'
- intrinsics. Users of such programs might need to compile them
- differently (using, for example, `-ff90-intrinsics-disable') or,
- better yet, insert appropriate `EXTERNAL' statements specifying
- that these names are not intended to be names of intrinsics.
-
- * The `ALWAYS_FLUSH' macro is no longer defined when building
- `libf2c', which should result in improved I/O performance,
- especially over NFS.
-
- *Note:* If you have code that depends on the behavior of `libf2c'
- when built with `ALWAYS_FLUSH' defined, you will have to modify
- `libf2c' accordingly before building it from this and future
- versions of `g77'.
-
- *Note Output Assumed To Flush::, for more information.
-
- * Dave Love's implementation of `libU77' has been added to the
- version of `libf2c' distributed with and built by `g77'. `g77'
- now knows about the routines in this library as intrinsics.
-
- * New option `-fvxt' specifies that the source file is written in
- VXT Fortran, instead of GNU Fortran.
-
- *Note VXT Fortran::, for more information on the constructs
- recognized when the `-fvxt' option is specified.
-
- * The `-fvxt-not-f90' option has been deleted, along with its
- inverse, `-ff90-not-vxt'.
-
- If you used one of these deleted options, you should re-read the
- pertinent documentation to determine which options, if any, are
- appropriate for compiling your code with this version of `g77'.
-
- *Note Other Dialects::, for more information.
-
- * The `-fugly' option now issues a warning, as it likely will be
- removed in a future version.
-
- (Enabling all the `-fugly-*' options is unlikely to be feasible,
- or sensible, in the future, so users should learn to specify only
- those `-fugly-*' options they really need for a particular source
- file.)
-
- * The `-fugly-assumed' option, introduced in version 0.5.19, has
- been changed to better accommodate old and new code. *Note Ugly
- Assumed-Size Arrays::, for more information.
-
- * Related to supporting Alpha (AXP) machines, the `LOC()' intrinsic
- and `%LOC()' construct now return values of `INTEGER(KIND=0)' type,
- as defined by the GNU Fortran language.
-
- This type is wide enough (holds the same number of bits) as the
- character-pointer type on the machine.
-
- On most systems, this won't make a noticable difference, whereas
- on Alphas and other systems with 64-bit pointers, the
- `INTEGER(KIND=0)' type is equivalent to `INTEGER(KIND=2)' (often
- referred to as `INTEGER*8') instead of the more common
- `INTEGER(KIND=1)' (often referred to as `INTEGER*4').
-
- * Emulate `COMPLEX' arithmetic in the `g77' front end, to avoid bugs
- in `complex' support in the `gcc' back end. New option
- `-fno-emulate-complex' causes `g77' to revert the 0.5.19 behavior.
-
- * Dummy arguments are no longer assumed to potentially alias
- (overlap) other dummy arguments or `COMMON' areas when any of
- these are defined (assigned to) by Fortran code.
-
- This can result in faster and/or smaller programs when compiling
- with optimization enabled, though on some systems this effect is
- observed only when `-fforce-addr' also is specified.
-
- New options `-falias-check', `-fargument-alias',
- `-fargument-noalias', and `-fno-argument-noalias-global' control
- the way `g77' handles potential aliasing.
-
- *Note Aliasing Assumed To Work::, for detailed information on why
- the new defaults might result in some programs no longer working
- the way they did when compiled by previous versions of `g77'.
-
- * New option `-fugly-assign' specifies that the same memory
- locations are to be used to hold the values assigned by both
- statements `I = 3' and `ASSIGN 10 TO I', for example. (Normally,
- `g77' uses a separate memory location to hold assigned statement
- labels.)
-
- *Note Ugly Assigned Labels::, for more information.
-
- * `FORMAT' and `ENTRY' statements now are allowed to precede
- `IMPLICIT NONE' statements.
-
- * Enable full support of `INTEGER(KIND=2)' (often referred to as
- `INTEGER*8') available in `libf2c' and `f2c.h' so that `f2c' users
- may make full use of its features via the `g77' version of `f2c.h'
- and the `INTEGER(KIND=2)' support routines in the `g77' version of
- `libf2c'.
-
- * Improve `g77' driver and `libf2c' so that `g77 -v' yields version
- information on the library.
-
- * The `SNGL' and `FLOAT' intrinsics now are specific intrinsics,
- instead of synonyms for the generic intrinsic `REAL'.
-
- * New intrinsics have been added. These are `REALPART', `IMAGPART',
- `COMPLEX', `LONG', and `SHORT'.
-
- * A new group of intrinsics, `gnu', has been added to contain the
- new `REALPART', `IMAGPART', and `COMPLEX' intrinsics. An old
- group, `dcp', has been removed.
-
-In 0.5.19:
-==========
-
- * A temporary kludge option provides bare-bones information on
- `COMMON' and `EQUIVALENCE' members at debug time. *Note Options
- for Code Generation Conventions: Code Gen Options, for information
- on the `-fdebug-kludge' option.
-
- * New `-fonetrip' option specifies FORTRAN-66-style one-trip `DO'
- loops.
-
- * New `-fno-silent' option causes names of program units to be
- printed as they are compiled, in a fashion similar to UNIX `f77'
- and `f2c'.
-
- * New `-fugly-assumed' option specifies that arrays dimensioned via
- `DIMENSION X(1)', for example, are to be treated as assumed-size.
-
- * New `-fno-typeless-boz' option specifies that non-decimal-radix
- constants using the prefixed-radix form (such as `Z'1234'') are to
- be interpreted as `INTEGER(KIND=1)' constants.
-
- * New `-ff66' option is a "shorthand" option that specifies
- behaviors considered appropriate for FORTRAN 66 programs.
-
- * New `-ff77' option is a "shorthand" option that specifies
- behaviors considered appropriate for UNIX `f77' programs.
-
- * New `-fugly-comma' and `-fugly-logint' options provided to perform
- some of what `-fugly' used to do. `-fugly' and `-fno-ugly' are
- now "shorthand" options, in that they do nothing more than enable
- (or disable) other `-fugly-*' options.
-
- * Change code generation for list-directed I/O so it allows for new
- versions of `libf2c' that might return non-zero status codes for
- some operations previously assumed to always return zero.
-
- This change not only affects how `IOSTAT=' variables are set by
- list-directed I/O, it also affects whether `END=' and `ERR='
- labels are reached by these operations.
-
- * Add intrinsic support for new `FTELL' and `FSEEK' procedures in
- `libf2c'.
-
- * Add options `--help' and `--version' to the `g77' command, to
- conform to GNU coding guidelines. Also add printing of `g77'
- version number when the `--verbose' (`-v') option is used.
-
-In 0.5.18:
-==========
-
- * The `BYTE' and `WORD' statements now are supported, to a limited
- extent.
-
- * `INTEGER*1', `INTEGER*2', `INTEGER*8', and their `LOGICAL'
- equivalents, now are supported to a limited extent. Among the
- missing elements are complete intrinsic and constant support.
-
- * Support automatic arrays in procedures. For example, `REAL A(N)',
- where `A' is not a dummy argument, specifies that `A' is an
- automatic array. The size of `A' is calculated from the value of
- `N' each time the procedure is called, that amount of space is
- allocated, and that space is freed when the procedure returns to
- its caller.
-
- * Add `-fno-zeros' option, enabled by default, to reduce
- compile-time CPU and memory usage for code that provides initial
- zero values for variables and arrays.
-
- * Introduce three new options that apply to all compilations by
- `g77'-aware GNU compilers--`-fmove-all-movables',
- `-freduce-all-givs', and `-frerun-loop-opt'--which can improve the
- run-time performance of some programs.
-
- * Replace much of the existing documentation with a single Info
- document.
-
- * New option `-fno-second-underscore'.
-
-In 0.5.17:
-==========
-
- * The `ERF()' and `ERFC()' intrinsics now are generic intrinsics,
- mapping to `ERF'/`DERF' and `ERFC'/`DERFC', respectively. *Note:*
- Use `INTRINSIC ERF,ERFC' in any code that might reference these as
- generic intrinsics, to improve the likelihood of diagnostics
- (instead of subtle run-time bugs) when using compilers that don't
- support these as intrinsics.
-
- * New option `-Wsurprising'.
-
- * DO loops with non-`INTEGER' variables now diagnosed only when
- `-Wsurprising' specified. Previously, this was diagnosed *unless*
- `-fpedantic' or `-fugly' was specified.
-
-In 0.5.16:
-==========
-
- * `libf2c' changed to output a leading zero (0) digit for
- floating-point values output via list-directed and formatted
- output (to bring `g77' more into line with many existing Fortran
- implementations--the ANSI FORTRAN 77 standard leaves this choice
- to the implementation).
-
- * `libf2c' no longer built with debugging information intact, making
- it much smaller.
-
- * Automatic installation of the `g77' command now works.
-
- * Diagnostic messages now more informative, a la `gcc', including
- messages like `In function `foo':' and `In file included from...:'.
-
- * New group of intrinsics called `unix', including `ABORT', `DERF',
- `DERFC', `ERF', `ERFC', `EXIT', `FLUSH', `GETARG', `GETENV',
- `SIGNAL', and `SYSTEM'.
-
- * `-funix-intrinsics-{delete,hide,disable,enable}' options added.
-
- * `-fno-underscoring' option added.
-
- * `--driver' option added to the `g77' command.
-
- * Support for the `gcc' options `-fident' and `-fno-ident' added.
-
- * `g77 -v' returns much more version info, making the submission of
- better bug reports easily.
-
- * Many improvements to the `g77' command to better fulfill its role
- as a front-end to the `gcc' driver. For example, `g77' now
- recognizes `--verbose' as a verbose way of specifying `-v'.
-
- * Compiling preprocessed (`*.F' and `*.fpp') files now results in
- better diagnostics and debugging information, as the
- source-location info now is passed all the way through the
- compilation process instead of being lost.
-
-
-File: g77.info, Node: Language, Next: Compiler, Prev: Changes, Up: Top
-
-The GNU Fortran Language
-************************
-
- GNU Fortran supports a variety of extensions to, and dialects of,
-the Fortran language. Its primary base is the ANSI FORTRAN 77
-standard, currently available on the network at
-`http://kumo.swcp.com/fortran/F77_std/f77_std.html' or in
-`ftp://ftp.ast.cam.ac.uk/pub/michael/'. It offers some extensions that
-are popular among users of UNIX `f77' and `f2c' compilers, some that
-are popular among users of other compilers (such as Digital products),
-some that are popular among users of the newer Fortran 90 standard, and
-some that are introduced by GNU Fortran.
-
- (If you need a text on Fortran, a few freely available electronic
-references have pointers from `http://www.fortran.com/fortran/Books/'.)
-
- Part of what defines a particular implementation of a Fortran
-system, such as `g77', is the particular characteristics of how it
-supports types, constants, and so on. Much of this is left up to the
-implementation by the various Fortran standards and accepted practice
-in the industry.
-
- The GNU Fortran *language* is described below. Much of the material
-is organized along the same lines as the ANSI FORTRAN 77 standard
-itself.
-
- *Note Other Dialects::, for information on features `g77' supports
-that are not part of the GNU Fortran language.
-
- *Note*: This portion of the documentation definitely needs a lot of
-work!
-
-* Menu:
-
-Relationship to the ANSI FORTRAN 77 standard:
-* Direction of Language Development:: Where GNU Fortran is headed.
-* Standard Support:: Degree of support for the standard.
-
-Extensions to the ANSI FORTRAN 77 standard:
-* Conformance::
-* Notation Used::
-* Terms and Concepts::
-* Characters Lines Sequence::
-* Data Types and Constants::
-* Expressions::
-* Specification Statements::
-* Control Statements::
-* Functions and Subroutines::
-* Scope and Classes of Names::
-
-
-File: g77.info, Node: Direction of Language Development, Next: Standard Support, Up: Language
-
-Direction of Language Development
-=================================
-
- The purpose of the following description of the GNU Fortran language
-is to promote wide portability of GNU Fortran programs.
-
- GNU Fortran is an evolving language, due to the fact that `g77'
-itself is in beta test. Some current features of the language might
-later be redefined as dialects of Fortran supported by `g77' when
-better ways to express these features are added to `g77', for example.
-Such features would still be supported by `g77', but would be available
-only when one or more command-line options were used.
-
- The GNU Fortran *language* is distinct from the GNU Fortran
-*compilation system* (`g77').
-
- For example, `g77' supports various dialects of Fortran--in a sense,
-these are languages other than GNU Fortran--though its primary purpose
-is to support the GNU Fortran language, which also is described in its
-documentation and by its implementation.
-
- On the other hand, non-GNU compilers might offer support for the GNU
-Fortran language, and are encouraged to do so.
-
- Currently, the GNU Fortran language is a fairly fuzzy object. It
-represents something of a cross between what `g77' accepts when
-compiling using the prevailing defaults and what this document
-describes as being part of the language.
-
- Future versions of `g77' are expected to clarify the definition of
-the language in the documentation. Often, this will mean adding new
-features to the language, in the form of both new documentation and new
-support in `g77'. However, it might occasionally mean removing a
-feature from the language itself to "dialect" status. In such a case,
-the documentation would be adjusted to reflect the change, and `g77'
-itself would likely be changed to require one or more command-line
-options to continue supporting the feature.
-
- The development of the GNU Fortran language is intended to strike a
-balance between:
-
- * Serving as a mostly-upwards-compatible language from the de facto
- UNIX Fortran dialect as supported by `f77'.
-
- * Offering new, well-designed language features. Attributes of such
- features include not making existing code any harder to read (for
- those who might be unaware that the new features are not in use)
- and not making state-of-the-art compilers take longer to issue
- diagnostics, among others.
-
- * Supporting existing, well-written code without gratuitously
- rejecting non-standard constructs, regardless of the origin of the
- code (its dialect).
-
- * Offering default behavior and command-line options to reduce and,
- where reasonable, eliminate the need for programmers to make any
- modifications to code that already works in existing production
- environments.
-
- * Diagnosing constructs that have different meanings in different
- systems, languages, and dialects, while offering clear, less
- ambiguous ways to express each of the different meanings so
- programmers can change their code appropriately.
-
- One of the biggest practical challenges for the developers of the
-GNU Fortran language is meeting the sometimes contradictory demands of
-the above items.
-
- For example, a feature might be widely used in one popular
-environment, but the exact same code that utilizes that feature might
-not work as expected--perhaps it might mean something entirely
-different--in another popular environment.
-
- Traditionally, Fortran compilers--even portable ones--have solved
-this problem by simply offering the appropriate feature to users of the
-respective systems. This approach treats users of various Fortran
-systems and dialects as remote "islands", or camps, of programmers, and
-assume that these camps rarely come into contact with each other (or,
-especially, with each other's code).
-
- Project GNU takes a radically different approach to software and
-language design, in that it assumes that users of GNU software do not
-necessarily care what kind of underlying system they are using,
-regardless of whether they are using software (at the user-interface
-level) or writing it (for example, writing Fortran or C code).
-
- As such, GNU users rarely need consider just what kind of underlying
-hardware (or, in many cases, operating system) they are using at any
-particular time. They can use and write software designed for a
-general-purpose, widely portable, heteregenous environment--the GNU
-environment.
-
- In line with this philosophy, GNU Fortran must evolve into a product
-that is widely ported and portable not only in the sense that it can be
-successfully built, installed, and run by users, but in the larger
-sense that its users can use it in the same way, and expect largely the
-same behaviors from it, regardless of the kind of system they are using
-at any particular time.
-
- This approach constrains the solutions `g77' can use to resolve
-conflicts between various camps of Fortran users. If these two camps
-disagree about what a particular construct should mean, `g77' cannot
-simply be changed to treat that particular construct as having one
-meaning without comment (such as a warning), lest the users expecting
-it to have the other meaning are unpleasantly surprised that their code
-misbehaves when executed.
-
- The use of the ASCII backslash character in character constants is
-an excellent (and still somewhat unresolved) example of this kind of
-controversy. *Note Backslash in Constants::. Other examples are
-likely to arise in the future, as `g77' developers strive to improve
-its ability to accept an ever-wider variety of existing Fortran code
-without requiring significant modifications to said code.
-
- Development of GNU Fortran is further constrained by the desire to
-avoid requiring programmers to change their code. This is important
-because it allows programmers, administrators, and others to more
-faithfully evaluate and validate `g77' (as an overall product and as
-new versions are distributed) without having to support multiple
-versions of their programs so that they continue to work the same way
-on their existing systems (non-GNU perhaps, but possibly also earlier
-versions of `g77').
-
-
-File: g77.info, Node: Standard Support, Next: Conformance, Prev: Direction of Language Development, Up: Language
-
-ANSI FORTRAN 77 Standard Support
-================================
-
- GNU Fortran supports ANSI FORTRAN 77 with the following caveats. In
-summary, the only ANSI FORTRAN 77 features `g77' doesn't support are
-those that are probably rarely used in actual code, some of which are
-explicitly disallowed by the Fortran 90 standard.
-
-* Menu:
-
-* No Passing External Assumed-length:: CHAR*(*) CFUNC restriction.
-* No Passing Dummy Assumed-length:: CHAR*(*) CFUNC restriction.
-* No Pathological Implied-DO:: No `((..., I=...), I=...)'.
-* No Useless Implied-DO:: No `(A, I=1, 1)'.
-
-
-File: g77.info, Node: No Passing External Assumed-length, Next: No Passing Dummy Assumed-length, Up: Standard Support
-
-No Passing External Assumed-length
-----------------------------------
-
- `g77' disallows passing of an external procedure as an actual
-argument if the procedure's type is declared `CHARACTER*(*)'. For
-example:
-
- CHARACTER*(*) CFUNC
- EXTERNAL CFUNC
- CALL FOO(CFUNC)
- END
-
-It isn't clear whether the standard considers this conforming.
-
-
-File: g77.info, Node: No Passing Dummy Assumed-length, Next: No Pathological Implied-DO, Prev: No Passing External Assumed-length, Up: Standard Support
-
-No Passing Dummy Assumed-length
--------------------------------
-
- `g77' disallows passing of a dummy procedure as an actual argument
-if the procedure's type is declared `CHARACTER*(*)'.
-
- SUBROUTINE BAR(CFUNC)
- CHARACTER*(*) CFUNC
- EXTERNAL CFUNC
- CALL FOO(CFUNC)
- END
-
-It isn't clear whether the standard considers this conforming.
-
-
-File: g77.info, Node: No Pathological Implied-DO, Next: No Useless Implied-DO, Prev: No Passing Dummy Assumed-length, Up: Standard Support
-
-No Pathological Implied-DO
---------------------------
-
- The `DO' variable for an implied-`DO' construct in a `DATA'
-statement may not be used as the `DO' variable for an outer
-implied-`DO' construct. For example, this fragment is disallowed by
-`g77':
-
- DATA ((A(I, I), I= 1, 10), I= 1, 10) /.../
-
-This also is disallowed by Fortran 90, as it offers no additional
-capabilities and would have a variety of possible meanings.
-
- Note that it is *very* unlikely that any production Fortran code
-tries to use this unsupported construct.
-
-
-File: g77.info, Node: No Useless Implied-DO, Prev: No Pathological Implied-DO, Up: Standard Support
-
-No Useless Implied-DO
----------------------
-
- An array element initializer in an implied-`DO' construct in a
-`DATA' statement must contain at least one reference to the `DO'
-variables of each outer implied-`DO' construct. For example, this
-fragment is disallowed by `g77':
-
- DATA (A, I= 1, 1) /1./
-
-This also is disallowed by Fortran 90, as FORTRAN 77's more permissive
-requirements offer no additional capabilities. However, `g77' doesn't
-necessarily diagnose all cases where this requirement is not met.
-
- Note that it is *very* unlikely that any production Fortran code
-tries to use this unsupported construct.
-
-
-File: g77.info, Node: Conformance, Next: Notation Used, Prev: Standard Support, Up: Language
-
-Conformance
-===========
-
- (The following information augments or overrides the information in
-Section 1.4 of ANSI X3.9-1978 FORTRAN 77 in specifying the GNU Fortran
-language. Chapter 1 of that document otherwise serves as the basis for
-the relevant aspects of GNU Fortran.)
-
- The definition of the GNU Fortran language is akin to that of the
-ANSI FORTRAN 77 language in that it does not generally require
-conforming implementations to diagnose cases where programs do not
-conform to the language.
-
- However, `g77' as a compiler is being developed in a way that is
-intended to enable it to diagnose such cases in an easy-to-understand
-manner.
-
- A program that conforms to the GNU Fortran language should, when
-compiled, linked, and executed using a properly installed `g77' system,
-perform as described by the GNU Fortran language definition. Reasons
-for different behavior include, among others:
-
- * Use of resources (memory--heap, stack, and so on; disk space; CPU
- time; etc.) exceeds those of the system.
-
- * Range and/or precision of calculations required by the program
- exceeds that of the system.
-
- * Excessive reliance on behaviors that are system-dependent
- (non-portable Fortran code).
-
- * Bugs in the program.
-
- * Bug in `g77'.
-
- * Bugs in the system.
-
- Despite these "loopholes", the availability of a clear specification
-of the language of programs submitted to `g77', as this document is
-intended to provide, is considered an important aspect of providing a
-robust, clean, predictable Fortran implementation.
-
- The definition of the GNU Fortran language, while having no special
-legal status, can therefore be viewed as a sort of contract, or
-agreement. This agreement says, in essence, "if you write a program in
-this language, and run it in an environment (such as a `g77' system)
-that supports this language, the program should behave in a largely
-predictable way".
-
-
-File: g77.info, Node: Notation Used, Next: Terms and Concepts, Prev: Conformance, Up: Language
-
-Notation Used in This Chapter
-=============================
-
- (The following information augments or overrides the information in
-Section 1.5 of ANSI X3.9-1978 FORTRAN 77 in specifying the GNU Fortran
-language. Chapter 1 of that document otherwise serves as the basis for
-the relevant aspects of GNU Fortran.)
-
- In this chapter, "must" denotes a requirement, "may" denotes
-permission, and "must not" and "may not" denote prohibition. Terms
-such as "might", "should", and "can" generally add little or nothing in
-the way of weight to the GNU Fortran language itself, but are used to
-explain or illustrate the language.
-
- For example:
-
- ``The `FROBNITZ' statement must precede all executable
- statements in a program unit, and may not specify any dummy
- arguments. It may specify local or common variables and arrays.
- Its use should be limited to portions of the program designed to
- be non-portable and system-specific, because it might cause the
- containing program unit to behave quite differently on different
- systems.''
-
- Insofar as the GNU Fortran language is specified, the requirements
-and permissions denoted by the above sample statement are limited to
-the placement of the statement and the kinds of things it may specify.
-The rest of the statement--the content regarding non-portable portions
-of the program and the differing behavior of program units containing
-the `FROBNITZ' statement--does not pertain the GNU Fortran language
-itself. That content offers advice and warnings about the `FROBNITZ'
-statement.
-
- *Remember:* The GNU Fortran language definition specifies both what
-constitutes a valid GNU Fortran program and how, given such a program,
-a valid GNU Fortran implementation is to interpret that program.
-
- It is *not* incumbent upon a valid GNU Fortran implementation to
-behave in any particular way, any consistent way, or any predictable
-way when it is asked to interpret input that is *not* a valid GNU
-Fortran program.
-
- Such input is said to have "undefined" behavior when interpreted by
-a valid GNU Fortran implementation, though an implementation may choose
-to specify behaviors for some cases of inputs that are not valid GNU
-Fortran programs.
-
- Other notation used herein is that of the GNU texinfo format, which
-is used to generate printed hardcopy, on-line hypertext (Info), and
-on-line HTML versions, all from a single source document. This
-notation is used as follows:
-
- * Keywords defined by the GNU Fortran language are shown in
- uppercase, as in: `COMMON', `INTEGER', and `BLOCK DATA'.
-
- Note that, in practice, many Fortran programs are written in
- lowercase--uppercase is used in this manual as a means to readily
- distinguish keywords and sample Fortran-related text from the
- prose in this document.
-
- * Portions of actual sample program, input, or output text look like
- this: `Actual program text'.
-
- Generally, uppercase is used for all Fortran-specific and
- Fortran-related text, though this does not always include literal
- text within Fortran code.
-
- For example: `PRINT *, 'My name is Bob''.
-
- * A metasyntactic variable--that is, a name used in this document to
- serve as a placeholder for whatever text is used by the user or
- programmer-appears as shown in the following example:
-
- "The `INTEGER IVAR' statement specifies that IVAR is a variable or
- array of type `INTEGER'."
-
- In the above example, any valid text may be substituted for the
- metasyntactic variable IVAR to make the statement apply to a
- specific instance, as long as the same text is substituted for
- *both* occurrences of IVAR.
-
- * Ellipses ("...") are used to indicate further text that is either
- unimportant or expanded upon further, elsewhere.
-
- * Names of data types are in the style of Fortran 90, in most cases.
-
- *Note Kind Notation::, for information on the relationship between
- Fortran 90 nomenclature (such as `INTEGER(KIND=1)') and the more
- traditional, less portably concise nomenclature (such as
- `INTEGER*4').
-
-
-File: g77.info, Node: Terms and Concepts, Next: Characters Lines Sequence, Prev: Notation Used, Up: Language
-
-Fortran Terms and Concepts
-==========================
-
- (The following information augments or overrides the information in
-Chapter 2 of ANSI X3.9-1978 FORTRAN 77 in specifying the GNU Fortran
-language. Chapter 2 of that document otherwise serves as the basis for
-the relevant aspects of GNU Fortran.)
-
-* Menu:
-
-* Syntactic Items::
-* Statements Comments Lines::
-* Scope of Names and Labels::
-
-
-File: g77.info, Node: Syntactic Items, Next: Statements Comments Lines, Up: Terms and Concepts
-
-Syntactic Items
----------------
-
- (Corresponds to Section 2.2 of ANSI X3.9-1978 FORTRAN 77.)
-
- In GNU Fortran, a symbolic name is at least one character long, and
-has no arbitrary upper limit on length. However, names of entities
-requiring external linkage (such as external functions, external
-subroutines, and `COMMON' areas) might be restricted to some arbitrary
-length by the system. Such a restriction is no more constrained than
-that of one through six characters.
-
- Underscores (`_') are accepted in symbol names after the first
-character (which must be a letter).
-
-
-File: g77.info, Node: Statements Comments Lines, Next: Scope of Names and Labels, Prev: Syntactic Items, Up: Terms and Concepts
-
-Statements, Comments, and Lines
--------------------------------
-
- (Corresponds to Section 2.3 of ANSI X3.9-1978 FORTRAN 77.)
-
- Use of an exclamation point (`!') to begin a trailing comment (a
-comment that extends to the end of the same source line) is permitted
-under the following conditions:
-
- * The exclamation point does not appear in column 6. Otherwise, it
- is treated as an indicator of a continuation line.
-
- * The exclamation point appears outside a character or hollerith
- constant. Otherwise, the exclamation point is considered part of
- the constant.
-
- * The exclamation point appears to the left of any other possible
- trailing comment. That is, a trailing comment may contain
- exclamation points in their commentary text.
-
- Use of a semicolon (`;') as a statement separator is permitted under
-the following conditions:
-
- * The semicolon appears outside a character or hollerith constant.
- Otherwise, the semicolon is considered part of the constant.
-
- * The semicolon appears to the left of a trailing comment.
- Otherwise, the semicolon is considered part of that comment.
-
- * Neither a logical `IF' statement nor a non-construct `WHERE'
- statement (a Fortran 90 feature) may be followed (in the same,
- possibly continued, line) by a semicolon used as a statement
- separator.
-
- This restriction avoids the confusion that can result when reading
- a line such as:
-
- IF (VALIDP) CALL FOO; CALL BAR
-
- Some readers might think the `CALL BAR' is executed only if
- `VALIDP' is `.TRUE.', while others might assume its execution is
- unconditional.
-
- (At present, `g77' does not diagnose code that violates this
- restriction.)
-
-
-File: g77.info, Node: Scope of Names and Labels, Prev: Statements Comments Lines, Up: Terms and Concepts
-
-Scope of Symbolic Names and Statement Labels
---------------------------------------------
-
- (Corresponds to Section 2.9 of ANSI X3.9-1978 FORTRAN 77.)
-
- Included in the list of entities that have a scope of a program unit
-are construct names (a Fortran 90 feature). *Note Construct Names::,
-for more information.
-
-
-File: g77.info, Node: Characters Lines Sequence, Next: Data Types and Constants, Prev: Terms and Concepts, Up: Language
-
-Characters, Lines, and Execution Sequence
-=========================================
-
- (The following information augments or overrides the information in
-Chapter 3 of ANSI X3.9-1978 FORTRAN 77 in specifying the GNU Fortran
-language. Chapter 3 of that document otherwise serves as the basis for
-the relevant aspects of GNU Fortran.)
-
-* Menu:
-
-* Character Set::
-* Lines::
-* Continuation Line::
-* Statements::
-* Statement Labels::
-* Order::
-* INCLUDE::
-
-
-File: g77.info, Node: Character Set, Next: Lines, Up: Characters Lines Sequence
-
-GNU Fortran Character Set
--------------------------
-
- (Corresponds to Section 3.1 of ANSI X3.9-1978 FORTRAN 77.)
-
- Letters include uppercase letters (the twenty-six characters of the
-English alphabet) and lowercase letters (their lowercase equivalent).
-Generally, lowercase letters may be used in place of uppercase letters,
-though in character and hollerith constants, they are distinct.
-
- Special characters include:
-
- * Semicolon (`;')
-
- * Exclamation point (`!')
-
- * Double quote (`"')
-
- * Backslash (`\')
-
- * Question mark (`?')
-
- * Hash mark (`#')
-
- * Ampersand (`&')
-
- * Percent sign (`%')
-
- * Underscore (`_')
-
- * Open angle (`<')
-
- * Close angle (`>')
-
- * The FORTRAN 77 special characters (<SPC>, `=', `+', `-', `*', `/',
- `(', `)', `,', `.', `$', `'', and `:')
-
- Note that this document refers to <SPC> as "space", while X3.9-1978
-FORTRAN 77 refers to it as "blank".
-
-
-File: g77.info, Node: Lines, Next: Continuation Line, Prev: Character Set, Up: Characters Lines Sequence
-
-Lines
------
-
- (Corresponds to Section 3.2 of ANSI X3.9-1978 FORTRAN 77.)
-
- The way a Fortran compiler views source files depends entirely on the
-implementation choices made for the compiler, since those choices are
-explicitly left to the implementation by the published Fortran
-standards.
-
- The GNU Fortran language mandates a view applicable to UNIX-like
-text files--files that are made up of an arbitrary number of lines,
-each with an arbitrary number of characters (sometimes called
-stream-based files).
-
- This view does not apply to types of files that are specified as
-having a particular number of characters on every single line (sometimes
-referred to as record-based files).
-
- Because a "line in a program unit is a sequence of 72 characters",
-to quote X3.9-1978, the GNU Fortran language specifies that a
-stream-based text file is translated to GNU Fortran lines as follows:
-
- * A newline in the file is the character that represents the end of
- a line of text to the underlying system. For example, on
- ASCII-based systems, a newline is the <NL> character, which has
- ASCII value 12 (decimal).
-
- * Each newline in the file serves to end the line of text that
- precedes it (and that does not contain a newline).
-
- * The end-of-file marker (`EOF') also serves to end the line of text
- that precedes it (and that does not contain a newline).
-
- * Any line of text that is shorter than 72 characters is padded to
- that length with spaces (called "blanks" in the standard).
-
- * Any line of text that is longer than 72 characters is truncated to
- that length, but the truncated remainder must consist entirely of
- spaces.
-
- * Characters other than newline and the GNU Fortran character set
- are invalid.
-
- For the purposes of the remainder of this description of the GNU
-Fortran language, the translation described above has already taken
-place, unless otherwise specified.
-
- The result of the above translation is that the source file appears,
-in terms of the remainder of this description of the GNU Fortran
-language, as if it had an arbitrary number of 72-character lines, each
-character being among the GNU Fortran character set.
-
- For example, if the source file itself has two newlines in a row,
-the second newline becomes, after the above translation, a single line
-containing 72 spaces.
-
-
-File: g77.info, Node: Continuation Line, Next: Statements, Prev: Lines, Up: Characters Lines Sequence
-
-Continuation Line
------------------
-
- (Corresponds to Section 3.2.3 of ANSI X3.9-1978 FORTRAN 77.)
-
- A continuation line is any line that both
-
- * Contains a continuation character, and
-
- * Contains only spaces in columns 1 through 5
-
- A continuation character is any character of the GNU Fortran
-character set other than space (<SPC>) or zero (`0') in column 6, or a
-digit (`0' through `9') in column 7 through 72 of a line that has only
-spaces to the left of that digit.
-
- The continuation character is ignored as far as the content of the
-statement is concerned.
-
- The GNU Fortran language places no limit on the number of
-continuation lines in a statement. In practice, the limit depends on a
-variety of factors, such as available memory, statement content, and so
-on, but no GNU Fortran system may impose an arbitrary limit.
-
-
-File: g77.info, Node: Statements, Next: Statement Labels, Prev: Continuation Line, Up: Characters Lines Sequence
-
-Statements
-----------
-
- (Corresponds to Section 3.3 of ANSI X3.9-1978 FORTRAN 77.)
-
- Statements may be written using an arbitrary number of continuation
-lines.
-
- Statements may be separated using the semicolon (`;'), except that
-the logical `IF' and non-construct `WHERE' statements may not be
-separated from subsequent statements using only a semicolon as
-statement separator.
-
- The `END PROGRAM', `END SUBROUTINE', `END FUNCTION', and `END BLOCK
-DATA' statements are alternatives to the `END' statement. These
-alternatives may be written as normal statements--they are not subject
-to the restrictions of the `END' statement.
-
- However, no statement other than `END' may have an initial line that
-appears to be an `END' statement--even `END PROGRAM', for example, must
-not be written as:
-
- END
- &PROGRAM
-
-
-File: g77.info, Node: Statement Labels, Next: Order, Prev: Statements, Up: Characters Lines Sequence
-
-Statement Labels
-----------------
-
- (Corresponds to Section 3.4 of ANSI X3.9-1978 FORTRAN 77.)
-
- A statement separated from its predecessor via a semicolon may be
-labeled as follows:
-
- * The semicolon is followed by the label for the statement, which in
- turn follows the label.
-
- * The label must be no more than five digits in length.
-
- * The first digit of the label for the statement is not the first
- non-space character on a line. Otherwise, that character is
- treated as a continuation character.
-
- A statement may have only one label defined for it.
-
-
-File: g77.info, Node: Order, Next: INCLUDE, Prev: Statement Labels, Up: Characters Lines Sequence
-
-Order of Statements and Lines
------------------------------
-
- (Corresponds to Section 3.5 of ANSI X3.9-1978 FORTRAN 77.)
-
- Generally, `DATA' statements may precede executable statements.
-However, specification statements pertaining to any entities
-initialized by a `DATA' statement must precede that `DATA' statement.
-For example, after `DATA I/1/', `INTEGER I' is not permitted, but
-`INTEGER J' is permitted.
-
- The last line of a program unit may be an `END' statement, or may be:
-
- * An `END PROGRAM' statement, if the program unit is a main program.
-
- * An `END SUBROUTINE' statement, if the program unit is a subroutine.
-
- * An `END FUNCTION' statement, if the program unit is a function.
-
- * An `END BLOCK DATA' statement, if the program unit is a block data.
-
-
-File: g77.info, Node: INCLUDE, Prev: Order, Up: Characters Lines Sequence
-
-Including Source Text
----------------------
-
- Additional source text may be included in the processing of the
-source file via the `INCLUDE' directive:
-
- INCLUDE FILENAME
-
-The source text to be included is identified by FILENAME, which is a
-literal GNU Fortran character constant. The meaning and interpretation
-of FILENAME depends on the implementation, but typically is a filename.
-
- (`g77' treats it as a filename that it searches for in the current
-directory and/or directories specified via the `-I' command-line
-option.)
-
- The effect of the `INCLUDE' directive is as if the included text
-directly replaced the directive in the source file prior to
-interpretation of the program. Included text may itself use `INCLUDE'.
-The depth of nested `INCLUDE' references depends on the implementation,
-but typically is a positive integer.
-
- This virtual replacement treats the statements and `INCLUDE'
-directives in the included text as syntactically distinct from those in
-the including text.
-
- Therefore, the first non-comment line of the included text must not
-be a continuation line. The included text must therefore have, after
-the non-comment lines, either an initial line (statement), an `INCLUDE'
-directive, or nothing (the end of the included text).
-
- Similarly, the including text may end the `INCLUDE' directive with a
-semicolon or the end of the line, but it cannot follow an `INCLUDE'
-directive at the end of its line with a continuation line. Thus, the
-last statement in an included text may not be continued.
-
- Any statements between two `INCLUDE' directives on the same line are
-treated as if they appeared in between the respective included texts.
-For example:
-
- INCLUDE 'A'; PRINT *, 'B'; INCLUDE 'C'; END PROGRAM
-
-If the text included by `INCLUDE 'A'' constitutes a `PRINT *, 'A''
-statement and the text included by `INCLUDE 'C'' constitutes a `PRINT
-*, 'C'' statement, then the output of the above sample program would be
-
- A
- B
- C
-
-(with suitable allowances for how an implementation defines its
-handling of output).
-
- Included text must not include itself directly or indirectly,
-regardless of whether the FILENAME used to reference the text is the
-same.
-
- Note that `INCLUDE' is *not* a statement. As such, it is neither a
-non-executable or executable statement. However, if the text it
-includes constitutes one or more executable statements, then the
-placement of `INCLUDE' is subject to effectively the same restrictions
-as those on executable statements.
-
- An `INCLUDE' directive may be continued across multiple lines as if
-it were a statement. This permits long names to be used for FILENAME.
-
-
-File: g77.info, Node: Data Types and Constants, Next: Expressions, Prev: Characters Lines Sequence, Up: Language
-
-Data Types and Constants
-========================
-
- (The following information augments or overrides the information in
-Chapter 4 of ANSI X3.9-1978 FORTRAN 77 in specifying the GNU Fortran
-language. Chapter 4 of that document otherwise serves as the basis for
-the relevant aspects of GNU Fortran.)
-
- To more concisely express the appropriate types for entities, this
-document uses the more concise Fortran 90 nomenclature such as
-`INTEGER(KIND=1)' instead of the more traditional, but less portably
-concise, byte-size-based nomenclature such as `INTEGER*4', wherever
-reasonable.
-
- When referring to generic types--in contexts where the specific
-precision and range of a type are not important--this document uses the
-generic type names `INTEGER', `LOGICAL', `REAL', `COMPLEX', and
-`CHARACTER'.
-
- In some cases, the context requires specification of a particular
-type. This document uses the `KIND=' notation to accomplish this
-throughout, sometimes supplying the more traditional notation for
-clarification, though the traditional notation might not work the same
-way on all GNU Fortran implementations.
-
- Use of `KIND=' makes this document more concise because `g77' is
-able to define values for `KIND=' that have the same meanings on all
-systems, due to the way the Fortran 90 standard specifies these values
-are to be used.
-
- (In particular, that standard permits an implementation to
-arbitrarily assign nonnegative values. There are four distinct sets of
-assignments: one to the `CHARACTER' type; one to the `INTEGER' type;
-one to the `LOGICAL' type; and the fourth to both the `REAL' and
-`COMPLEX' types. Implementations are free to assign these values in
-any order, leave gaps in the ordering of assignments, and assign more
-than one value to a representation.)
-
- This makes `KIND=' values superior to the values used in
-non-standard statements such as `INTEGER*4', because the meanings of
-the values in those statements vary from machine to machine, compiler
-to compiler, even operating system to operating system.
-
- However, use of `KIND=' is *not* generally recommended when writing
-portable code (unless, for example, the code is going to be compiled
-only via `g77', which is a widely ported compiler). GNU Fortran does
-not yet have adequate language constructs to permit use of `KIND=' in a
-fashion that would make the code portable to Fortran 90
-implementations; and, this construct is known to *not* be accepted by
-many popular FORTRAN 77 implementations, so it cannot be used in code
-that is to be ported to those.
-
- The distinction here is that this document is able to use specific
-values for `KIND=' to concisely document the types of various
-operations and operands.
-
- A Fortran program should use the FORTRAN 77 designations for the
-appropriate GNU Fortran types--such as `INTEGER' for `INTEGER(KIND=1)',
-`REAL' for `REAL(KIND=1)', and `DOUBLE COMPLEX' for
-`COMPLEX(KIND=2)'--and, where no such designations exist, make use of
-appropriate techniques (preprocessor macros, parameters, and so on) to
-specify the types in a fashion that may be easily adjusted to suit each
-particular implementation to which the program is ported. (These types
-generally won't need to be adjusted for ports of `g77'.)
-
- Further details regarding GNU Fortran data types and constants are
-provided below.
-
-* Menu:
-
-* Types::
-* Constants::
-* Integer Type::
-* Character Type::
-
-
-File: g77.info, Node: Types, Next: Constants, Up: Data Types and Constants
-
-Data Types
-----------
-
- (Corresponds to Section 4.1 of ANSI X3.9-1978 FORTRAN 77.)
-
- GNU Fortran supports these types:
-
- 1. Integer (generic type `INTEGER')
-
- 2. Real (generic type `REAL')
-
- 3. Double precision
-
- 4. Complex (generic type `COMPLEX')
-
- 5. Logical (generic type `LOGICAL')
-
- 6. Character (generic type `CHARACTER')
-
- 7. Double Complex
-
- (The types numbered 1 through 6 above are standard FORTRAN 77 types.)
-
- The generic types shown above are referred to in this document using
-only their generic type names. Such references usually indicate that
-any specific type (kind) of that generic type is valid.
-
- For example, a context described in this document as accepting the
-`COMPLEX' type also is likely to accept the `DOUBLE COMPLEX' type.
-
- The GNU Fortran language supports three ways to specify a specific
-kind of a generic type.
-
-* Menu:
-
-* Double Notation:: As in `DOUBLE COMPLEX'.
-* Star Notation:: As in `INTEGER*4'.
-* Kind Notation:: As in `INTEGER(KIND=1)'.
-
diff --git a/gcc/f/g77.info-6 b/gcc/f/g77.info-6
deleted file mode 100644
index f77f935683e..00000000000
--- a/gcc/f/g77.info-6
+++ /dev/null
@@ -1,1131 +0,0 @@
-This is Info file g77.info, produced by Makeinfo version 1.68 from the
-input file g77.texi.
-
- This file explains how to use the GNU Fortran system.
-
- Published by the Free Software Foundation 59 Temple Place - Suite 330
-Boston, MA 02111-1307 USA
-
- Copyright (C) 1995-1997 Free Software Foundation, Inc.
-
- Permission is granted to make and distribute verbatim copies of this
-manual provided the copyright notice and this permission notice are
-preserved on all copies.
-
- Permission is granted to copy and distribute modified versions of
-this manual under the conditions for verbatim copying, provided also
-that the sections entitled "GNU General Public License," "Funding for
-Free Software," and "Protect Your Freedom--Fight `Look And Feel'" are
-included exactly as in the original, and provided that the entire
-resulting derived work is distributed under the terms of a permission
-notice identical to this one.
-
- Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that the sections entitled "GNU General Public
-License," "Funding for Free Software," and "Protect Your Freedom--Fight
-`Look And Feel'", and this permission notice, may be included in
-translations approved by the Free Software Foundation instead of in the
-original English.
-
- Contributed by James Craig Burley (<burley@gnu.ai.mit.edu>).
-Inspired by a first pass at translating `g77-0.5.16/f/DOC' that was
-contributed to Craig by David Ronis (<ronis@onsager.chem.mcgill.ca>).
-
-INFO-DIR-SECTION Fortran Programming
-START-INFO-DIR-ENTRY
-* g77: (g77). The GNU Fortran compilation system.
-END-INFO-DIR-ENTRY
-
-
-File: g77.info, Node: Double Notation, Next: Star Notation, Up: Types
-
-Double Notation
-...............
-
- The GNU Fortran language supports two uses of the keyword `DOUBLE'
-to specify a specific kind of type:
-
- * `DOUBLE PRECISION', equivalent to `REAL(KIND=2)'
-
- * `DOUBLE COMPLEX', equivalent to `COMPLEX(KIND=2)'
-
- Use one of the above forms where a type name is valid.
-
- While use of this notation is popular, it doesn't scale well in a
-language or dialect rich in intrinsic types, as is the case for the GNU
-Fortran language (especially planned future versions of it).
-
- After all, one rarely sees type names such as `DOUBLE INTEGER',
-`QUADRUPLE REAL', or `QUARTER INTEGER'. Instead, `INTEGER*8',
-`REAL*16', and `INTEGER*1' often are substituted for these,
-respectively, even though they do not always have the same meanings on
-all systems. (And, the fact that `DOUBLE REAL' does not exist as such
-is an inconsistency.)
-
- Therefore, this document uses "double notation" only on occasion for
-the benefit of those readers who are accustomed to it.
-
-
-File: g77.info, Node: Star Notation, Next: Kind Notation, Prev: Double Notation, Up: Types
-
-Star Notation
-.............
-
- The following notation specifies the storage size for a type:
-
- GENERIC-TYPE*N
-
-GENERIC-TYPE must be a generic type--one of `INTEGER', `REAL',
-`COMPLEX', `LOGICAL', or `CHARACTER'. N must be one or more digits
-comprising a decimal integer number greater than zero.
-
- Use the above form where a type name is valid.
-
- The `*N' notation specifies that the amount of storage occupied by
-variables and array elements of that type is N times the storage
-occupied by a `CHARACTER*1' variable.
-
- This notation might indicate a different degree of precision and/or
-range for such variables and array elements, and the functions that
-return values of types using this notation. It does not limit the
-precision or range of values of that type in any particular way--use
-explicit code to do that.
-
- Further, the GNU Fortran language requires no particular values for
-N to be supported by an implementation via the `*N' notation. `g77'
-supports `INTEGER*1' (as `INTEGER(KIND=3)') on all systems, for example,
-but not all implementations are required to do so, and `g77' is known
-to not support `REAL*1' on most (or all) systems.
-
- As a result, except for GENERIC-TYPE of `CHARACTER', uses of this
-notation should be limited to isolated portions of a program that are
-intended to handle system-specific tasks and are expected to be
-non-portable.
-
- (Standard FORTRAN 77 supports the `*N' notation for only
-`CHARACTER', where it signifies not only the amount of storage
-occupied, but the number of characters in entities of that type.
-However, almost all Fortran compilers have supported this notation for
-generic types, though with a variety of meanings for N.)
-
- Specifications of types using the `*N' notation always are
-interpreted as specifications of the appropriate types described in
-this document using the `KIND=N' notation, described below.
-
- While use of this notation is popular, it doesn't serve well in the
-context of a widely portable dialect of Fortran, such as the GNU
-Fortran language.
-
- For example, even on one particular machine, two or more popular
-Fortran compilers might well disagree on the size of a type declared
-`INTEGER*2' or `REAL*16'. Certainly there is known to be disagreement
-over such things among Fortran compilers on *different* systems.
-
- Further, this notation offers no elegant way to specify sizes that
-are not even multiples of the "byte size" typically designated by
-`INTEGER*1'. Use of "absurd" values (such as `INTEGER*1000') would
-certainly be possible, but would perhaps be stretching the original
-intent of this notation beyond the breaking point in terms of
-widespread readability of documentation and code making use of it.
-
- Therefore, this document uses "star notation" only on occasion for
-the benefit of those readers who are accustomed to it.
-
-
-File: g77.info, Node: Kind Notation, Prev: Star Notation, Up: Types
-
-Kind Notation
-.............
-
- The following notation specifies the kind-type selector of a type:
-
- GENERIC-TYPE(KIND=N)
-
-Use the above form where a type name is valid.
-
- GENERIC-TYPE must be a generic type--one of `INTEGER', `REAL',
-`COMPLEX', `LOGICAL', or `CHARACTER'. N must be an integer
-initialization expression that is a positive, nonzero value.
-
- Programmers are discouraged from writing these values directly into
-their code. Future versions of the GNU Fortran language will offer
-facilities that will make the writing of code portable to `g77' *and*
-Fortran 90 implementations simpler.
-
- However, writing code that ports to existing FORTRAN 77
-implementations depends on avoiding the `KIND=' construct.
-
- The `KIND=' construct is thus useful in the context of GNU Fortran
-for two reasons:
-
- * It provides a means to specify a type in a fashion that is
- portable across all GNU Fortran implementations (though not other
- FORTRAN 77 and Fortran 90 implementations).
-
- * It provides a sort of Rosetta stone for this document to use to
- concisely describe the types of various operations and operands.
-
- The values of N in the GNU Fortran language are assigned using a
-scheme that:
-
- * Attempts to maximize the ability of readers of this document to
- quickly familiarize themselves with assignments for popular types
-
- * Provides a unique value for each specific desired meaning
-
- * Provides a means to automatically assign new values so they have a
- "natural" relationship to existing values, if appropriate, or, if
- no such relationship exists, will not interfere with future values
- assigned on the basis of such relationships
-
- * Avoids using values that are similar to values used in the
- existing, popular `*N' notation, to prevent readers from expecting
- that these implied correspondences work on all GNU Fortran
- implementations
-
- The assignment system accomplishes this by assigning to each
-"fundamental meaning" of a specific type a unique prime number.
-Combinations of fundamental meanings--for example, a type that is two
-times the size of some other type--are assigned values of N that are
-the products of the values for those fundamental meanings.
-
- A prime value of N is never given more than one fundamental meaning,
-to avoid situations where some code or system cannot reasonably provide
-those meanings in the form of a single type.
-
- The values of N assigned so far are:
-
-`KIND=0'
- This value is reserved for future use.
-
- The planned future use is for this value to designate, explicitly,
- context-sensitive kind-type selection. For example, the
- expression `1D0 * 0.1_0' would be equivalent to `1D0 * 0.1D0'.
-
-`KIND=1'
- This corresponds to the default types for `REAL', `INTEGER',
- `LOGICAL', `COMPLEX', and `CHARACTER', as appropriate.
-
- These are the "default" types described in the Fortran 90 standard,
- though that standard does not assign any particular `KIND=' value
- to these types.
-
- (Typically, these are `REAL*4', `INTEGER*4', `LOGICAL*4', and
- `COMPLEX*8'.)
-
-`KIND=2'
- This corresponds to types that occupy twice as much storage as the
- default types. `REAL(KIND=2)' is `DOUBLE PRECISION' (typically
- `REAL*8'), `COMPLEX(KIND=2)' is `DOUBLE COMPLEX' (typically
- `COMPLEX*16'),
-
- These are the "double precision" types described in the Fortran 90
- standard, though that standard does not assign any particular
- `KIND=' value to these types.
-
- N of 4 thus corresponds to types that occupy four times as much
- storage as the default types, N of 8 to types that occupy eight
- times as much storage, and so on.
-
- The `INTEGER(KIND=2)' and `LOGICAL(KIND=2)' types are not
- necessarily supported by every GNU Fortran implementation.
-
-`KIND=3'
- This corresponds to types that occupy as much storage as the
- default `CHARACTER' type, which is the same effective type as
- `CHARACTER(KIND=1)' (making that type effectively the same as
- `CHARACTER(KIND=3)').
-
- (Typically, these are `INTEGER*1' and `LOGICAL*1'.)
-
- N of 6 thus corresponds to types that occupy twice as much storage
- as the N=3 types, N of 12 to types that occupy four times as much
- storage, and so on.
-
- These are not necessarily supported by every GNU Fortran
- implementation.
-
-`KIND=5'
- This corresponds to types that occupy half the storage as the
- default (N=1) types.
-
- (Typically, these are `INTEGER*2' and `LOGICAL*2'.)
-
- N of 25 thus corresponds to types that occupy one-quarter as much
- storage as the default types.
-
- These are not necessarily supported by every GNU Fortran
- implementation.
-
-`KIND=7'
- This is valid only as `INTEGER(KIND=7)' and denotes the `INTEGER'
- type that has the smallest storage size that holds a pointer on
- the system.
-
- A pointer representable by this type is capable of uniquely
- addressing a `CHARACTER*1' variable, array, array element, or
- substring.
-
- (Typically this is equivalent to `INTEGER*4' or, on 64-bit
- systems, `INTEGER*8'. In a compatible C implementation, it
- typically would be the same size and semantics of the C type `void
- *'.)
-
- Note that these are *proposed* correspondences and might change in
-future versions of `g77'--avoid writing code depending on them while
-`g77', and therefore the GNU Fortran language it defines, is in beta
-testing.
-
- Values not specified in the above list are reserved to future
-versions of the GNU Fortran language.
-
- Implementation-dependent meanings will be assigned new, unique prime
-numbers so as to not interfere with other implementation-dependent
-meanings, and offer the possibility of increasing the portability of
-code depending on such types by offering support for them in other GNU
-Fortran implementations.
-
- Other meanings that might be given unique values are:
-
- * Types that make use of only half their storage size for
- representing precision and range.
-
- For example, some compilers offer options that cause `INTEGER'
- types to occupy the amount of storage that would be needed for
- `INTEGER(KIND=2)' types, but the range remains that of
- `INTEGER(KIND=1)'.
-
- * The IEEE single floating-point type.
-
- * Types with a specific bit pattern (endianness), such as the
- little-endian form of `INTEGER(KIND=1)'. These could permit,
- conceptually, use of portable code and implementations on data
- files written by existing systems.
-
- Future *prime* numbers should be given meanings in as incremental a
-fashion as possible, to allow for flexibility and expressiveness in
-combining types.
-
- For example, instead of defining a prime number for little-endian
-IEEE doubles, one prime number might be assigned the meaning
-"little-endian", another the meaning "IEEE double", and the value of N
-for a little-endian IEEE double would thus naturally be the product of
-those two respective assigned values. (It could even be reasonable to
-have IEEE values result from the products of prime values denoting
-exponent and fraction sizes and meanings, hidden bit usage,
-availability and representations of special values such as subnormals,
-infinities, and Not-A-Numbers (NaNs), and so on.)
-
- This assignment mechanism, while not inherently required for future
-versions of the GNU Fortran language, is worth using because it could
-ease management of the "space" of supported types much easier in the
-long run.
-
- The above approach suggests a mechanism for specifying inheritance
-of intrinsic (built-in) types for an entire, widely portable product
-line. It is certainly reasonable that, unlike programmers of other
-languages offering inheritance mechanisms that employ verbose names for
-classes and subclasses, along with graphical browsers to elucidate the
-relationships, Fortran programmers would employ a mechanism that works
-by multiplying prime numbers together and finding the prime factors of
-such products.
-
- Most of the advantages for the above scheme have been explained
-above. One disadvantage is that it could lead to the defining, by the
-GNU Fortran language, of some fairly large prime numbers. This could
-lead to the GNU Fortran language being declared "munitions" by the
-United States Department of Defense.
-
-
-File: g77.info, Node: Constants, Next: Integer Type, Prev: Types, Up: Data Types and Constants
-
-Constants
----------
-
- (Corresponds to Section 4.2 of ANSI X3.9-1978 FORTRAN 77.)
-
- A "typeless constant" has one of the following forms:
-
- 'BINARY-DIGITS'B
- 'OCTAL-DIGITS'O
- 'HEXADECIMAL-DIGITS'Z
- 'HEXADECIMAL-DIGITS'X
-
-BINARY-DIGITS, OCTAL-DIGITS, and HEXADECIMAL-DIGITS are nonempty
-strings of characters in the set `01', `01234567', and
-`0123456789ABCDEFabcdef', respectively. (The value for `A' (and `a')
-is 10, for `B' and `b' is 11, and so on.)
-
- Typeless constants have values that depend on the context in which
-they are used.
-
- All other constants, called "typed constants", are
-interpreted--converted to internal form--according to their inherent
-type. Thus, context is *never* a determining factor for the type, and
-hence the interpretation, of a typed constant. (All constants in the
-ANSI FORTRAN 77 language are typed constants.)
-
- For example, `1' is always type `INTEGER(KIND=1)' in GNU Fortran
-(called default INTEGER in Fortran 90), `9.435784839284958' is always
-type `REAL(KIND=1)' (even if the additional precision specified is
-lost, and even when used in a `REAL(KIND=2)' context), `1E0' is always
-type `REAL(KIND=2)', and `1D0' is always type `REAL(KIND=2)'.
-
-
-File: g77.info, Node: Integer Type, Next: Character Type, Prev: Constants, Up: Data Types and Constants
-
-Integer Type
-------------
-
- (Corresponds to Section 4.3 of ANSI X3.9-1978 FORTRAN 77.)
-
- An integer constant also may have one of the following forms:
-
- B'BINARY-DIGITS'
- O'OCTAL-DIGITS'
- Z'HEXADECIMAL-DIGITS'
- X'HEXADECIMAL-DIGITS'
-
-BINARY-DIGITS, OCTAL-DIGITS, and HEXADECIMAL-DIGITS are nonempty
-strings of characters in the set `01', `01234567', and
-`0123456789ABCDEFabcdef', respectively. (The value for `A' (and `a')
-is 10, for `B' and `b' is 11, and so on.)
-
-
-File: g77.info, Node: Character Type, Prev: Integer Type, Up: Data Types and Constants
-
-Character Type
---------------
-
- (Corresponds to Section 4.8 of ANSI X3.9-1978 FORTRAN 77.)
-
- A character constant may be delimited by a pair of double quotes
-(`"') instead of apostrophes. In this case, an apostrophe within the
-constant represents a single apostrophe, while a double quote is
-represented in the source text of the constant by two consecutive double
-quotes with no intervening spaces.
-
- A character constant may be empty (have a length of zero).
-
- A character constant may include a substring specification, The
-value of such a constant is the value of the substring--for example,
-the value of `'hello'(3:5)' is the same as the value of `'llo''.
-
-
-File: g77.info, Node: Expressions, Next: Specification Statements, Prev: Data Types and Constants, Up: Language
-
-Expressions
-===========
-
- (The following information augments or overrides the information in
-Chapter 6 of ANSI X3.9-1978 FORTRAN 77 in specifying the GNU Fortran
-language. Chapter 6 of that document otherwise serves as the basis for
-the relevant aspects of GNU Fortran.)
-
-* Menu:
-
-* %LOC()::
-
-
-File: g77.info, Node: %LOC(), Up: Expressions
-
-The `%LOC()' Construct
-----------------------
-
- %LOC(ARG)
-
- The `%LOC()' construct is an expression that yields the value of the
-location of its argument, ARG, in memory. The size of the type of the
-expression depends on the system--typically, it is equivalent to either
-`INTEGER(KIND=1)' or `INTEGER(KIND=2)', though it is actually type
-`INTEGER(KIND=7)'.
-
- The argument to `%LOC()' must be suitable as the left-hand side of
-an assignment statement. That is, it may not be a general expression
-involving operators such as addition, subtraction, and so on, nor may
-it be a constant.
-
- Use of `%LOC()' is recommended only for code that is accessing
-facilities outside of GNU Fortran, such as operating system or
-windowing facilities. It is best to constrain such uses to isolated
-portions of a program--portions that deal specifically and exclusively
-with low-level, system-dependent facilities. Such portions might well
-provide a portable interface for use by the program as a whole, but are
-themselves not portable, and should be thoroughly tested each time they
-are rebuilt using a new compiler or version of a compiler.
-
- Do not depend on `%LOC()' returning a pointer that can be safely
-used to *define* (change) the argument. While this might work in some
-circumstances, it is hard to predict whether it will continue to work
-when a program (that works using this unsafe behavior) is recompiled
-using different command-line options or a different version of `g77'.
-
- Generally, `%LOC()' is safe when used as an argument to a procedure
-that makes use of the value of the corresponding dummy argument only
-during its activation, and only when such use is restricted to
-referencing (reading) the value of the argument to `%LOC()'.
-
- *Implementation Note:* Currently, `g77' passes arguments (those not
-passed using a construct such as `%VAL()') by reference or descriptor,
-depending on the type of the actual argument. Thus, given `INTEGER I',
-`CALL FOO(I)' would seem to mean the same thing as `CALL FOO(%LOC(I))',
-and in fact might compile to identical code.
-
- However, `CALL FOO(%LOC(I))' emphatically means "pass the address of
-`I' in memory". While `CALL FOO(I)' might use that same approach in a
-particular version of `g77', another version or compiler might choose a
-different implementation, such as copy-in/copy-out, to effect the
-desired behavior--and which will therefore not necessarily compile to
-the same code as would `CALL FOO(%LOC(I))' using the same version or
-compiler.
-
- *Note Debugging and Interfacing::, for detailed information on how
-this particular version of `g77' implements various constructs.
-
-
-File: g77.info, Node: Specification Statements, Next: Control Statements, Prev: Expressions, Up: Language
-
-Specification Statements
-========================
-
- (The following information augments or overrides the information in
-Chapter 8 of ANSI X3.9-1978 FORTRAN 77 in specifying the GNU Fortran
-language. Chapter 8 of that document otherwise serves as the basis for
-the relevant aspects of GNU Fortran.)
-
-* Menu:
-
-* NAMELIST::
-* DOUBLE COMPLEX::
-
-
-File: g77.info, Node: NAMELIST, Next: DOUBLE COMPLEX, Up: Specification Statements
-
-`NAMELIST' Statement
---------------------
-
- The `NAMELIST' statement, and related I/O constructs, are supported
-by the GNU Fortran language in essentially the same way as they are by
-`f2c'.
-
-
-File: g77.info, Node: DOUBLE COMPLEX, Prev: NAMELIST, Up: Specification Statements
-
-`DOUBLE COMPLEX' Statement
---------------------------
-
- `DOUBLE COMPLEX' is a type-statement (and type) that specifies the
-type `COMPLEX(KIND=2)' in GNU Fortran.
-
-
-File: g77.info, Node: Control Statements, Next: Functions and Subroutines, Prev: Specification Statements, Up: Language
-
-Control Statements
-==================
-
- (The following information augments or overrides the information in
-Chapter 11 of ANSI X3.9-1978 FORTRAN 77 in specifying the GNU Fortran
-language. Chapter 11 of that document otherwise serves as the basis
-for the relevant aspects of GNU Fortran.)
-
-* Menu:
-
-* DO WHILE::
-* END DO::
-* Construct Names::
-* CYCLE and EXIT::
-
-
-File: g77.info, Node: DO WHILE, Next: END DO, Up: Control Statements
-
-DO WHILE
---------
-
- The `DO WHILE' statement, a feature of both the MIL-STD 1753 and
-Fortran 90 standards, is provided by the GNU Fortran language.
-
-
-File: g77.info, Node: END DO, Next: Construct Names, Prev: DO WHILE, Up: Control Statements
-
-END DO
-------
-
- The `END DO' statement is provided by the GNU Fortran language.
-
- This statement is used in one of two ways:
-
- * The Fortran 90 meaning, in which it specifies the termination
- point of a single `DO' loop started with a `DO' statement that
- specifies no termination label.
-
- * The MIL-STD 1753 meaning, in which it specifies the termination
- point of one or more `DO' loops, all of which start with a `DO'
- statement that specify the label defined for the `END DO'
- statement.
-
- This kind of `END DO' statement is merely a synonym for
- `CONTINUE', except it is permitted only when the statement is
- labeled and a target of one or more labeled `DO' loops.
-
- It is expected that this use of `END DO' will be removed from the
- GNU Fortran language in the future, though it is likely that it
- will long be supported by `g77' as a dialect form.
-
-
-File: g77.info, Node: Construct Names, Next: CYCLE and EXIT, Prev: END DO, Up: Control Statements
-
-Construct Names
----------------
-
- The GNU Fortran language supports construct names as defined by the
-Fortran 90 standard. These names are local to the program unit and are
-defined as follows:
-
- CONSTRUCT-NAME: BLOCK-STATEMENT
-
-Here, CONSTRUCT-NAME is the construct name itself; its definition is
-connoted by the single colon (`:'); and BLOCK-STATEMENT is an `IF',
-`DO', or `SELECT CASE' statement that begins a block.
-
- A block that is given a construct name must also specify the same
-construct name in its termination statement:
-
- END BLOCK CONSTRUCT-NAME
-
-Here, BLOCK must be `IF', `DO', or `SELECT', as appropriate.
-
-
-File: g77.info, Node: CYCLE and EXIT, Prev: Construct Names, Up: Control Statements
-
-The `CYCLE' and `EXIT' Statements
----------------------------------
-
- The `CYCLE' and `EXIT' statements specify that the remaining
-statements in the current iteration of a particular active (enclosing)
-`DO' loop are to be skipped.
-
- `CYCLE' specifies that these statements are skipped, but the `END
-DO' statement that marks the end of the `DO' loop be executed--that is,
-the next iteration, if any, is to be started. If the statement marking
-the end of the `DO' loop is not `END DO'--in other words, if the loop
-is not a block `DO'--the `CYCLE' statement does not execute that
-statement, but does start the next iteration (if any).
-
- `EXIT' specifies that the loop specified by the `DO' construct is
-terminated.
-
- The `DO' loop affected by `CYCLE' and `EXIT' is the innermost
-enclosing `DO' loop when the following forms are used:
-
- CYCLE
- EXIT
-
- Otherwise, the following forms specify the construct name of the
-pertinent `DO' loop:
-
- CYCLE CONSTRUCT-NAME
- EXIT CONSTRUCT-NAME
-
- `CYCLE' and `EXIT' can be viewed as glorified `GO TO' statements.
-However, they cannot be easily thought of as `GO TO' statements in
-obscure cases involving FORTRAN 77 loops. For example:
-
- DO 10 I = 1, 5
- DO 10 J = 1, 5
- IF (J .EQ. 5) EXIT
- DO 10 K = 1, 5
- IF (K .EQ. 3) CYCLE
- 10 PRINT *, 'I=', I, ' J=', J, ' K=', K
- 20 CONTINUE
-
-In particular, neither the `EXIT' nor `CYCLE' statements above are
-equivalent to a `GO TO' statement to either label `10' or `20'.
-
- To understand the effect of `CYCLE' and `EXIT' in the above
-fragment, it is helpful to first translate it to its equivalent using
-only block `DO' loops:
-
- DO I = 1, 5
- DO J = 1, 5
- IF (J .EQ. 5) EXIT
- DO K = 1, 5
- IF (K .EQ. 3) CYCLE
- 10 PRINT *, 'I=', I, ' J=', J, ' K=', K
- END DO
- END DO
- END DO
- 20 CONTINUE
-
- Adding new labels allows translation of `CYCLE' and `EXIT' to `GO
-TO' so they may be more easily understood by programmers accustomed to
-FORTRAN coding:
-
- DO I = 1, 5
- DO J = 1, 5
- IF (J .EQ. 5) GOTO 18
- DO K = 1, 5
- IF (K .EQ. 3) GO TO 12
- 10 PRINT *, 'I=', I, ' J=', J, ' K=', K
- 12 END DO
- END DO
- 18 END DO
- 20 CONTINUE
-
-Thus, the `CYCLE' statement in the innermost loop skips over the
-`PRINT' statement as it begins the next iteration of the loop, while
-the `EXIT' statement in the middle loop ends that loop but *not* the
-outermost loop.
-
-
-File: g77.info, Node: Functions and Subroutines, Next: Scope and Classes of Names, Prev: Control Statements, Up: Language
-
-Functions and Subroutines
-=========================
-
- (The following information augments or overrides the information in
-Chapter 15 of ANSI X3.9-1978 FORTRAN 77 in specifying the GNU Fortran
-language. Chapter 15 of that document otherwise serves as the basis
-for the relevant aspects of GNU Fortran.)
-
-* Menu:
-
-* %VAL()::
-* %REF()::
-* %DESCR()::
-* Generics and Specifics::
-* REAL() and AIMAG() of Complex::
-* CMPLX() of DOUBLE PRECISION::
-* MIL-STD 1753::
-* f77/f2c Intrinsics::
-* Table of Intrinsic Functions::
-
-
-File: g77.info, Node: %VAL(), Next: %REF(), Up: Functions and Subroutines
-
-The `%VAL()' Construct
-----------------------
-
- %VAL(ARG)
-
- The `%VAL()' construct specifies that an argument, ARG, is to be
-passed by value, instead of by reference or descriptor.
-
- `%VAL()' is restricted to actual arguments in invocations of
-external procedures.
-
- Use of `%VAL()' is recommended only for code that is accessing
-facilities outside of GNU Fortran, such as operating system or
-windowing facilities. It is best to constrain such uses to isolated
-portions of a program--portions the deal specifically and exclusively
-with low-level, system-dependent facilities. Such portions might well
-provide a portable interface for use by the program as a whole, but are
-themselves not portable, and should be thoroughly tested each time they
-are rebuilt using a new compiler or version of a compiler.
-
- *Implementation Note:* Currently, `g77' passes all arguments either
-by reference or by descriptor.
-
- Thus, use of `%VAL()' tends to be restricted to cases where the
-called procedure is written in a language other than Fortran that
-supports call-by-value semantics. (C is an example of such a language.)
-
- *Note Procedures (SUBROUTINE and FUNCTION): Procedures, for detailed
-information on how this particular version of `g77' passes arguments to
-procedures.
-
-
-File: g77.info, Node: %REF(), Next: %DESCR(), Prev: %VAL(), Up: Functions and Subroutines
-
-The `%REF()' Construct
-----------------------
-
- %REF(ARG)
-
- The `%REF()' construct specifies that an argument, ARG, is to be
-passed by reference, instead of by value or descriptor.
-
- `%REF()' is restricted to actual arguments in invocations of
-external procedures.
-
- Use of `%REF()' is recommended only for code that is accessing
-facilities outside of GNU Fortran, such as operating system or
-windowing facilities. It is best to constrain such uses to isolated
-portions of a program--portions the deal specifically and exclusively
-with low-level, system-dependent facilities. Such portions might well
-provide a portable interface for use by the program as a whole, but are
-themselves not portable, and should be thoroughly tested each time they
-are rebuilt using a new compiler or version of a compiler.
-
- Do not depend on `%REF()' supplying a pointer to the procedure being
-invoked. While that is a likely implementation choice, other
-implementation choices are available that preserve Fortran
-pass-by-reference semantics without passing a pointer to the argument,
-ARG. (For example, a copy-in/copy-out implementation.)
-
- *Implementation Note:* Currently, `g77' passes all arguments (other
-than variables and arrays of type `CHARACTER') by reference. Future
-versions of, or dialects supported by, `g77' might not pass `CHARACTER'
-functions by reference.
-
- Thus, use of `%REF()' tends to be restricted to cases where ARG is
-type `CHARACTER' but the called procedure accesses it via a means other
-than the method used for Fortran `CHARACTER' arguments.
-
- *Note Procedures (SUBROUTINE and FUNCTION): Procedures, for detailed
-information on how this particular version of `g77' passes arguments to
-procedures.
-
-
-File: g77.info, Node: %DESCR(), Next: Generics and Specifics, Prev: %REF(), Up: Functions and Subroutines
-
-The `%DESCR()' Construct
-------------------------
-
- %DESCR(ARG)
-
- The `%DESCR()' construct specifies that an argument, ARG, is to be
-passed by descriptor, instead of by value or reference.
-
- `%DESCR()' is restricted to actual arguments in invocations of
-external procedures.
-
- Use of `%DESCR()' is recommended only for code that is accessing
-facilities outside of GNU Fortran, such as operating system or
-windowing facilities. It is best to constrain such uses to isolated
-portions of a program--portions the deal specifically and exclusively
-with low-level, system-dependent facilities. Such portions might well
-provide a portable interface for use by the program as a whole, but are
-themselves not portable, and should be thoroughly tested each time they
-are rebuilt using a new compiler or version of a compiler.
-
- Do not depend on `%DESCR()' supplying a pointer and/or a length
-passed by value to the procedure being invoked. While that is a likely
-implementation choice, other implementation choices are available that
-preserve the pass-by-reference semantics without passing a pointer to
-the argument, ARG. (For example, a copy-in/copy-out implementation.)
-And, future versions of `g77' might change the way descriptors are
-implemented, such as passing a single argument pointing to a record
-containing the pointer/length information instead of passing that same
-information via two arguments as it currently does.
-
- *Implementation Note:* Currently, `g77' passes all variables and
-arrays of type `CHARACTER' by descriptor. Future versions of, or
-dialects supported by, `g77' might pass `CHARACTER' functions by
-descriptor as well.
-
- Thus, use of `%DESCR()' tends to be restricted to cases where ARG is
-not type `CHARACTER' but the called procedure accesses it via a means
-similar to the method used for Fortran `CHARACTER' arguments.
-
- *Note Procedures (SUBROUTINE and FUNCTION): Procedures, for detailed
-information on how this particular version of `g77' passes arguments to
-procedures.
-
-
-File: g77.info, Node: Generics and Specifics, Next: REAL() and AIMAG() of Complex, Prev: %DESCR(), Up: Functions and Subroutines
-
-Generics and Specifics
-----------------------
-
- The ANSI FORTRAN 77 language defines generic and specific intrinsics.
-In short, the distinctions are:
-
- * *Specific* intrinsics have specific types for their arguments and
- a specific return type.
-
- * *Generic* intrinsics are treated, on a case-by-case basis in the
- program's source code, as one of several possible specific
- intrinsics.
-
- Typically, a generic intrinsic has a return type that is
- determined by the type of one or more of its arguments.
-
- The GNU Fortran language generalizes these concepts somewhat,
-especially by providing intrinsic subroutines and generic intrinsics
-that are treated as either a specific intrinsic subroutine or a
-specific intrinsic function (e.g. `SECOND').
-
- However, GNU Fortran avoids generalizing this concept to the point
-where existing code would be accepted as meaning something possibly
-different than what was intended.
-
- For example, `ABS' is a generic intrinsic, so all working code
-written using `ABS' of an `INTEGER' argument expects an `INTEGER'
-return value. Similarly, all such code expects that `ABS' of an
-`INTEGER*2' argument returns an `INTEGER*2' return value.
-
- Yet, `IABS' is a *specific* intrinsic that accepts only an
-`INTEGER(KIND=1)' argument. Code that passes something other than an
-`INTEGER(KIND=1)' argument to `IABS' is not valid GNU Fortran code,
-because it is not clear what the author intended.
-
- For example, if `J' is `INTEGER(KIND=6)', `IABS(J)' is not defined
-by the GNU Fortran language, because the programmer might have used
-that construct to mean any of the following, subtly different, things:
-
- * Convert `J' to `INTEGER(KIND=1)' first (as if `IABS(INT(J))' had
- been written).
-
- * Convert the result of the intrinsic to `INTEGER(KIND=1)' (as if
- `INT(ABS(J))' had been written).
-
- * No conversion (as if `ABS(J)' had been written).
-
- The distinctions matter especially when types and values wider than
-`INTEGER(KIND=1)' (such as `INTEGER(KIND=2)'), or when operations
-performing more "arithmetic" than absolute-value, are involved.
-
- The following sample program is not a valid GNU Fortran program, but
-might be accepted by other compilers. If so, the output is likely to
-be revealing in terms of how a given compiler treats intrinsics (that
-normally are specific) when they are given arguments that do not
-conform to their stated requirements:
-
- PROGRAM JCB002
- C Version 1:
- C Modified 1997-05-21 (Burley) to accommodate compilers that implement
- C INT(I1-I2) as INT(I1)-INT(I2) given INTEGER*2 I1,I2.
- C
- C Version 0:
- C Written by James Craig Burley 1997-02-20.
- C Contact via Internet email: burley@gnu.ai.mit.edu
- C
- C Purpose:
- C Determine how compilers handle non-standard IDIM
- C on INTEGER*2 operands, which presumably can be
- C extrapolated into understanding how the compiler
- C generally treats specific intrinsics that are passed
- C arguments not of the correct types.
- C
- C If your compiler implements INTEGER*2 and INTEGER
- C as the same type, change all INTEGER*2 below to
- C INTEGER*1.
- C
- INTEGER*2 I0, I4
- INTEGER I1, I2, I3
- INTEGER*2 ISMALL, ILARGE
- INTEGER*2 ITOOLG, ITWO
- INTEGER*2 ITMP
- LOGICAL L2, L3, L4
- C
- C Find smallest INTEGER*2 number.
- C
- ISMALL=0
- 10 I0 = ISMALL-1
- IF ((I0 .GE. ISMALL) .OR. (I0+1 .NE. ISMALL)) GOTO 20
- ISMALL = I0
- GOTO 10
- 20 CONTINUE
- C
- C Find largest INTEGER*2 number.
- C
- ILARGE=0
- 30 I0 = ILARGE+1
- IF ((I0 .LE. ILARGE) .OR. (I0-1 .NE. ILARGE)) GOTO 40
- ILARGE = I0
- GOTO 30
- 40 CONTINUE
- C
- C Multiplying by two adds stress to the situation.
- C
- ITWO = 2
- C
- C Need a number that, added to -2, is too wide to fit in I*2.
- C
- ITOOLG = ISMALL
- C
- C Use IDIM the straightforward way.
- C
- I1 = IDIM (ILARGE, ISMALL) * ITWO + ITOOLG
- C
- C Calculate result for first interpretation.
- C
- I2 = (INT (ILARGE) - INT (ISMALL)) * ITWO + ITOOLG
- C
- C Calculate result for second interpretation.
- C
- ITMP = ILARGE - ISMALL
- I3 = (INT (ITMP)) * ITWO + ITOOLG
- C
- C Calculate result for third interpretation.
- C
- I4 = (ILARGE - ISMALL) * ITWO + ITOOLG
- C
- C Print results.
- C
- PRINT *, 'ILARGE=', ILARGE
- PRINT *, 'ITWO=', ITWO
- PRINT *, 'ITOOLG=', ITOOLG
- PRINT *, 'ISMALL=', ISMALL
- PRINT *, 'I1=', I1
- PRINT *, 'I2=', I2
- PRINT *, 'I3=', I3
- PRINT *, 'I4=', I4
- PRINT *
- L2 = (I1 .EQ. I2)
- L3 = (I1 .EQ. I3)
- L4 = (I1 .EQ. I4)
- IF (L2 .AND. .NOT.L3 .AND. .NOT.L4) THEN
- PRINT *, 'Interp 1: IDIM(I*2,I*2) => IDIM(INT(I*2),INT(I*2))'
- STOP
- END IF
- IF (L3 .AND. .NOT.L2 .AND. .NOT.L4) THEN
- PRINT *, 'Interp 2: IDIM(I*2,I*2) => INT(DIM(I*2,I*2))'
- STOP
- END IF
- IF (L4 .AND. .NOT.L2 .AND. .NOT.L3) THEN
- PRINT *, 'Interp 3: IDIM(I*2,I*2) => DIM(I*2,I*2)'
- STOP
- END IF
- PRINT *, 'Results need careful analysis.'
- END
-
- No future version of the GNU Fortran language will likely permit
-specific intrinsic invocations with wrong-typed arguments (such as
-`IDIM' in the above example), since it has been determined that
-disagreements exist among many production compilers on the
-interpretation of such invocations. These disagreements strongly
-suggest that Fortran programmers, and certainly existing Fortran
-programs, disagree about the meaning of such invocations.
-
- The first version of `JCB002' didn't accommodate some compilers'
-treatment of `INT(I1-I2)' where `I1' and `I2' are `INTEGER*2'. In such
-a case, these compilers apparently convert both operands to `INTEGER*4'
-and then do an `INTEGER*4' subtraction, instead of doing an `INTEGER*2'
-subtraction on the original values in `I1' and `I2'.
-
- However, the results of the careful analyses done on the outputs of
-programs compiled by these various compilers show that they all
-implement either `Interp 1' or `Interp 2' above.
-
- Specifically, it is believed that the new version of `JCB002' above
-will confirm that:
-
- * Digital Semiconductor ("DEC") Alpha OSF/1, HP-UX 10.0.1, AIX 3.2.5
- `f77' compilers all implement `Interp 1'.
-
- * IRIX 5.3 `f77' compiler implements `Interp 2'.
-
- * Solaris 2.5, SunOS 4.1.3, DECstation ULTRIX 4.3, and IRIX 6.1
- `f77' compilers all implement `Interp 3'.
-
- If you get different results than the above for the stated
-compilers, or have results for other compilers that might be worth
-adding to the above list, please let us know the details (compiler
-product, version, machine, results, and so on).
-
-
-File: g77.info, Node: REAL() and AIMAG() of Complex, Next: CMPLX() of DOUBLE PRECISION, Prev: Generics and Specifics, Up: Functions and Subroutines
-
-`REAL()' and `AIMAG()' of Complex
----------------------------------
-
- The GNU Fortran language disallows `REAL(EXPR)' and `AIMAG(EXPR)',
-where EXPR is any `COMPLEX' type other than `COMPLEX(KIND=1)', except
-when they are used in the following way:
-
- REAL(REAL(EXPR))
- REAL(AIMAG(EXPR))
-
-The above forms explicitly specify that the desired effect is to
-convert the real or imaginary part of EXPR, which might be some `REAL'
-type other than `REAL(KIND=1)', to type `REAL(KIND=1)', and have that
-serve as the value of the expression.
-
- The GNU Fortran language offers clearly named intrinsics to extract
-the real and imaginary parts of a complex entity without any conversion:
-
- REALPART(EXPR)
- IMAGPART(EXPR)
-
- To express the above using typical extended FORTRAN 77, use the
-following constructs (when EXPR is `COMPLEX(KIND=2)'):
-
- DBLE(EXPR)
- DIMAG(EXPR)
-
- The FORTRAN 77 language offers no way to explicitly specify the real
-and imaginary parts of a complex expression of arbitrary type,
-apparently as a result of requiring support for only one `COMPLEX' type
-(`COMPLEX(KIND=1)'). The concepts of converting an expression to type
-`REAL(KIND=1)' and of extracting the real part of a complex expression
-were thus "smooshed" by FORTRAN 77 into a single intrinsic, since they
-happened to have the exact same effect in that language (due to having
-only one `COMPLEX' type).
-
- *Note:* When `-ff90' is in effect, `g77' treats `REAL(EXPR)', where
-EXPR is of type `COMPLEX', as `REALPART(EXPR)', whereas with
-`-fugly-complex -fno-f90' in effect, it is treated as
-`REAL(REALPART(EXPR))'.
-
- *Note Ugly Complex Part Extraction::, for more information.
-
-
-File: g77.info, Node: CMPLX() of DOUBLE PRECISION, Next: MIL-STD 1753, Prev: REAL() and AIMAG() of Complex, Up: Functions and Subroutines
-
-`CMPLX()' of `DOUBLE PRECISION'
--------------------------------
-
- In accordance with Fortran 90 and at least some (perhaps all) other
-compilers, the GNU Fortran language defines `CMPLX()' as always
-returning a result that is type `COMPLEX(KIND=1)'.
-
- This means `CMPLX(D1,D2)', where `D1' and `D2' are `REAL(KIND=2)'
-(`DOUBLE PRECISION'), is treated as:
-
- CMPLX(SNGL(D1), SNGL(D2))
-
- (It was necessary for Fortran 90 to specify this behavior for
-`DOUBLE PRECISION' arguments, since that is the behavior mandated by
-FORTRAN 77.)
-
- The GNU Fortran language also provides the `DCMPLX()' intrinsic,
-which is provided by some FORTRAN 77 compilers to construct a `DOUBLE
-COMPLEX' entity from of `DOUBLE PRECISION' operands. However, this
-solution does not scale well when more `COMPLEX' types (having various
-precisions and ranges) are offered by Fortran implementations.
-
- Fortran 90 extends the `CMPLX()' intrinsic by adding an extra
-argument used to specify the desired kind of complex result. However,
-this solution is somewhat awkward to use, and `g77' currently does not
-support it.
-
- The GNU Fortran language provides a simple way to build a complex
-value out of two numbers, with the precise type of the value determined
-by the types of the two numbers (via the usual type-promotion
-mechanism):
-
- COMPLEX(REAL, IMAG)
-
- When REAL and IMAG are the same `REAL' types, `COMPLEX()' performs
-no conversion other than to put them together to form a complex result
-of the same (complex version of real) type.
-
- *Note Complex Intrinsic::, for more information.
-
-
-File: g77.info, Node: MIL-STD 1753, Next: f77/f2c Intrinsics, Prev: CMPLX() of DOUBLE PRECISION, Up: Functions and Subroutines
-
-MIL-STD 1753 Support
---------------------
-
- The GNU Fortran language includes the MIL-STD 1753 intrinsics
-`BTEST', `IAND', `IBCLR', `IBITS', `IBSET', `IEOR', `IOR', `ISHFT',
-`ISHFTC', `MVBITS', and `NOT'.
-
-
-File: g77.info, Node: f77/f2c Intrinsics, Next: Table of Intrinsic Functions, Prev: MIL-STD 1753, Up: Functions and Subroutines
-
-`f77'/`f2c' Intrinsics
-----------------------
-
- The bit-manipulation intrinsics supported by traditional `f77' and
-by `f2c' are available in the GNU Fortran language. These include
-`AND', `LSHIFT', `OR', `RSHIFT', and `XOR'.
-
- Also supported are the intrinsics `CDABS', `CDCOS', `CDEXP',
-`CDLOG', `CDSIN', `CDSQRT', `DCMPLX', `DCONJG', `DFLOAT', `DIMAG',
-`DREAL', and `IMAG', `ZABS', `ZCOS', `ZEXP', `ZLOG', `ZSIN', and
-`ZSQRT'.
-
diff --git a/gcc/f/g77.info-7 b/gcc/f/g77.info-7
deleted file mode 100644
index 574a40aed03..00000000000
--- a/gcc/f/g77.info-7
+++ /dev/null
@@ -1,1869 +0,0 @@
-This is Info file g77.info, produced by Makeinfo version 1.68 from the
-input file g77.texi.
-
- This file explains how to use the GNU Fortran system.
-
- Published by the Free Software Foundation 59 Temple Place - Suite 330
-Boston, MA 02111-1307 USA
-
- Copyright (C) 1995-1997 Free Software Foundation, Inc.
-
- Permission is granted to make and distribute verbatim copies of this
-manual provided the copyright notice and this permission notice are
-preserved on all copies.
-
- Permission is granted to copy and distribute modified versions of
-this manual under the conditions for verbatim copying, provided also
-that the sections entitled "GNU General Public License," "Funding for
-Free Software," and "Protect Your Freedom--Fight `Look And Feel'" are
-included exactly as in the original, and provided that the entire
-resulting derived work is distributed under the terms of a permission
-notice identical to this one.
-
- Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that the sections entitled "GNU General Public
-License," "Funding for Free Software," and "Protect Your Freedom--Fight
-`Look And Feel'", and this permission notice, may be included in
-translations approved by the Free Software Foundation instead of in the
-original English.
-
- Contributed by James Craig Burley (<burley@gnu.ai.mit.edu>).
-Inspired by a first pass at translating `g77-0.5.16/f/DOC' that was
-contributed to Craig by David Ronis (<ronis@onsager.chem.mcgill.ca>).
-
-INFO-DIR-SECTION Fortran Programming
-START-INFO-DIR-ENTRY
-* g77: (g77). The GNU Fortran compilation system.
-END-INFO-DIR-ENTRY
-
-
-File: g77.info, Node: Table of Intrinsic Functions, Prev: f77/f2c Intrinsics, Up: Functions and Subroutines
-
-Table of Intrinsic Functions
-----------------------------
-
- (Corresponds to Section 15.10 of ANSI X3.9-1978 FORTRAN 77.)
-
- The GNU Fortran language adds various functions, subroutines, types,
-and arguments to the set of intrinsic functions in ANSI FORTRAN 77.
-The complete set of intrinsics supported by the GNU Fortran language is
-described below.
-
- Note that a name is not treated as that of an intrinsic if it is
-specified in an `EXTERNAL' statement in the same program unit; if a
-command-line option is used to disable the groups to which the
-intrinsic belongs; or if the intrinsic is not named in an `INTRINSIC'
-statement and a command-line option is used to hide the groups to which
-the intrinsic belongs.
-
- So, it is recommended that any reference in a program unit to an
-intrinsic procedure that is not a standard FORTRAN 77 intrinsic be
-accompanied by an appropriate `INTRINSIC' statement in that program
-unit. This sort of defensive programming makes it more likely that an
-implementation will issue a diagnostic rather than generate incorrect
-code for such a reference.
-
- The terminology used below is based on that of the Fortran 90
-standard, so that the text may be more concise and accurate:
-
- * `OPTIONAL' means the argument may be omitted.
-
- * `A-1, A-2, ..., A-n' means more than one argument (generally named
- `A') may be specified.
-
- * `scalar' means the argument must not be an array (must be a
- variable or array element, or perhaps a constant if expressions
- are permitted).
-
- * `DIMENSION(4)' means the argument must be an array having 4
- elements.
-
- * `INTENT(IN)' means the argument must be an expression (such as a
- constant or a variable that is defined upon invocation of the
- intrinsic).
-
- * `INTENT(OUT)' means the argument must be definable by the
- invocation of the intrinsic (that is, must not be a constant nor
- an expression involving operators other than array reference and
- substring reference).
-
- * `INTENT(INOUT)' means the argument must be defined prior to, and
- definable by, invocation of the intrinsic (a combination of the
- requirements of `INTENT(IN)' and `INTENT(OUT)'.
-
- * *Note Kind Notation:: for explanation of `KIND'.
-
- (Note that the empty lines appearing in the menu below are not
-intentional--they result from a bug in the GNU `makeinfo' program...a
-program that, if it did not exist, would leave this document in far
-worse shape!)
-
-* Menu:
-
-
-* Abort Intrinsic:: Abort the program.
-
-* Abs Intrinsic:: Absolute value.
-
-* Access Intrinsic:: Check file accessibility.
-
-* AChar Intrinsic:: ASCII character from code.
-
-* ACos Intrinsic:: Arc cosine.
-
-* AdjustL Intrinsic:: (Reserved for future use.)
-* AdjustR Intrinsic:: (Reserved for future use.)
-
-* AImag Intrinsic:: Convert/extract imaginary part of complex.
-
-* AInt Intrinsic:: Truncate to whole number.
-
-* Alarm Intrinsic:: Execute a routine after a given delay.
-
-* All Intrinsic:: (Reserved for future use.)
-* Allocated Intrinsic:: (Reserved for future use.)
-
-* ALog Intrinsic:: Natural logarithm (archaic).
-* ALog10 Intrinsic:: Natural logarithm (archaic).
-* AMax0 Intrinsic:: Maximum value (archaic).
-* AMax1 Intrinsic:: Maximum value (archaic).
-* AMin0 Intrinsic:: Minimum value (archaic).
-* AMin1 Intrinsic:: Minimum value (archaic).
-* AMod Intrinsic:: Remainder (archaic).
-
-* And Intrinsic:: Boolean AND.
-
-* ANInt Intrinsic:: Round to nearest whole number.
-
-* Any Intrinsic:: (Reserved for future use.)
-
-* ASin Intrinsic:: Arc sine.
-
-* Associated Intrinsic:: (Reserved for future use.)
-
-* ATan Intrinsic:: Arc tangent.
-* ATan2 Intrinsic:: Arc tangent.
-
-* BesJ0 Intrinsic:: Bessel function.
-* BesJ1 Intrinsic:: Bessel function.
-* BesJN Intrinsic:: Bessel function.
-* BesY0 Intrinsic:: Bessel function.
-* BesY1 Intrinsic:: Bessel function.
-* BesYN Intrinsic:: Bessel function.
-
-* Bit_Size Intrinsic:: Number of bits in argument's type.
-
-* BTest Intrinsic:: Test bit.
-
-* CAbs Intrinsic:: Absolute value (archaic).
-* CCos Intrinsic:: Cosine (archaic).
-
-* Ceiling Intrinsic:: (Reserved for future use.)
-
-* CExp Intrinsic:: Exponential (archaic).
-* Char Intrinsic:: Character from code.
-
-* ChDir Intrinsic (subroutine):: Change directory.
-
-* ChMod Intrinsic (subroutine):: Change file modes.
-
-* CLog Intrinsic:: Natural logarithm (archaic).
-* Cmplx Intrinsic:: Construct `COMPLEX(KIND=1)' value.
-
-* Complex Intrinsic:: Build complex value from real and
- imaginary parts.
-
-* Conjg Intrinsic:: Complex conjugate.
-* Cos Intrinsic:: Cosine.
-
-* CosH Intrinsic:: Hyperbolic cosine.
-
-* Count Intrinsic:: (Reserved for future use.)
-* Cpu_Time Intrinsic:: Get current CPU time.
-* CShift Intrinsic:: (Reserved for future use.)
-
-* CSin Intrinsic:: Sine (archaic).
-* CSqRt Intrinsic:: Square root (archaic).
-
-* CTime Intrinsic (subroutine):: Convert time to Day Mon dd hh:mm:ss yyyy.
-* CTime Intrinsic (function):: Convert time to Day Mon dd hh:mm:ss yyyy.
-
-* DAbs Intrinsic:: Absolute value (archaic).
-* DACos Intrinsic:: Arc cosine (archaic).
-
-* DASin Intrinsic:: Arc sine (archaic).
-
-* DATan Intrinsic:: Arc tangent (archaic).
-* DATan2 Intrinsic:: Arc tangent (archaic).
-
-* Date_and_Time Intrinsic:: (Reserved for future use.)
-
-* DbesJ0 Intrinsic:: Bessel function (archaic).
-* DbesJ1 Intrinsic:: Bessel function (archaic).
-* DbesJN Intrinsic:: Bessel function (archaic).
-* DbesY0 Intrinsic:: Bessel function (archaic).
-* DbesY1 Intrinsic:: Bessel function (archaic).
-* DbesYN Intrinsic:: Bessel function (archaic).
-
-* Dble Intrinsic:: Convert to double precision.
-
-* DCos Intrinsic:: Cosine (archaic).
-
-* DCosH Intrinsic:: Hyperbolic cosine (archaic).
-* DDiM Intrinsic:: Difference magnitude (archaic).
-
-* DErF Intrinsic:: Error function (archaic).
-* DErFC Intrinsic:: Complementary error function (archaic).
-
-* DExp Intrinsic:: Exponential (archaic).
-
-* Digits Intrinsic:: (Reserved for future use.)
-
-* DiM Intrinsic:: Difference magnitude (non-negative subtract).
-
-* DInt Intrinsic:: Truncate to whole number (archaic).
-* DLog Intrinsic:: Natural logarithm (archaic).
-* DLog10 Intrinsic:: Natural logarithm (archaic).
-* DMax1 Intrinsic:: Maximum value (archaic).
-* DMin1 Intrinsic:: Minimum value (archaic).
-* DMod Intrinsic:: Remainder (archaic).
-* DNInt Intrinsic:: Round to nearest whole number (archaic).
-
-* Dot_Product Intrinsic:: (Reserved for future use.)
-
-* DProd Intrinsic:: Double-precision product.
-
-* DSign Intrinsic:: Apply sign to magnitude (archaic).
-* DSin Intrinsic:: Sine (archaic).
-
-* DSinH Intrinsic:: Hyperbolic sine (archaic).
-* DSqRt Intrinsic:: Square root (archaic).
-* DTan Intrinsic:: Tangent (archaic).
-
-* DTanH Intrinsic:: Hyperbolic tangent (archaic).
-
-* Dtime Intrinsic (subroutine):: Get elapsed time since last time.
-
-* EOShift Intrinsic:: (Reserved for future use.)
-* Epsilon Intrinsic:: (Reserved for future use.)
-
-* ErF Intrinsic:: Error function.
-* ErFC Intrinsic:: Complementary error function.
-* ETime Intrinsic (subroutine):: Get elapsed time for process.
-* ETime Intrinsic (function):: Get elapsed time for process.
-* Exit Intrinsic:: Terminate the program.
-
-* Exp Intrinsic:: Exponential.
-
-* Exponent Intrinsic:: (Reserved for future use.)
-
-* Fdate Intrinsic (subroutine):: Get current time as Day Mon dd hh:mm:ss yyyy.
-* Fdate Intrinsic (function):: Get current time as Day Mon dd hh:mm:ss yyyy.
-* FGet Intrinsic (subroutine):: Read a character from unit 5 stream-wise.
-
-* FGetC Intrinsic (subroutine):: Read a character stream-wise.
-
-* Float Intrinsic:: Conversion (archaic).
-
-* Floor Intrinsic:: (Reserved for future use.)
-
-* Flush Intrinsic:: Flush buffered output.
-* FNum Intrinsic:: Get file descriptor from Fortran unit number.
-* FPut Intrinsic (subroutine):: Write a character to unit 6 stream-wise.
-
-* FPutC Intrinsic (subroutine):: Write a character stream-wise.
-
-* Fraction Intrinsic:: (Reserved for future use.)
-
-* FSeek Intrinsic:: Position file (low-level).
-* FStat Intrinsic (subroutine):: Get file information.
-* FStat Intrinsic (function):: Get file information.
-* FTell Intrinsic (subroutine):: Get file position (low-level).
-* FTell Intrinsic (function):: Get file position (low-level).
-* GError Intrinsic:: Get error message for last error.
-* GetArg Intrinsic:: Obtain command-line argument.
-* GetCWD Intrinsic (subroutine):: Get current working directory.
-* GetCWD Intrinsic (function):: Get current working directory.
-* GetEnv Intrinsic:: Get environment variable.
-* GetGId Intrinsic:: Get process group id.
-* GetLog Intrinsic:: Get login name.
-* GetPId Intrinsic:: Get process id.
-* GetUId Intrinsic:: Get process user id.
-* GMTime Intrinsic:: Convert time to GMT time info.
-* HostNm Intrinsic (subroutine):: Get host name.
-* HostNm Intrinsic (function):: Get host name.
-
-* Huge Intrinsic:: (Reserved for future use.)
-
-* IAbs Intrinsic:: Absolute value (archaic).
-
-* IAChar Intrinsic:: ASCII code for character.
-
-* IAnd Intrinsic:: Boolean AND.
-
-* IArgC Intrinsic:: Obtain count of command-line arguments.
-
-* IBClr Intrinsic:: Clear a bit.
-* IBits Intrinsic:: Extract a bit subfield of a variable.
-* IBSet Intrinsic:: Set a bit.
-
-* IChar Intrinsic:: Code for character.
-
-* IDate Intrinsic (UNIX):: Get local time info.
-
-* IDiM Intrinsic:: Difference magnitude (archaic).
-* IDInt Intrinsic:: Convert to `INTEGER' value truncated
- to whole number (archaic).
-* IDNInt Intrinsic:: Convert to `INTEGER' value rounded
- to nearest whole number (archaic).
-
-* IEOr Intrinsic:: Boolean XOR.
-
-* IErrNo Intrinsic:: Get error number for last error.
-
-* IFix Intrinsic:: Conversion (archaic).
-
-* Imag Intrinsic:: Extract imaginary part of complex.
-
-* ImagPart Intrinsic:: Extract imaginary part of complex.
-
-* Index Intrinsic:: Locate a CHARACTER substring.
-
-* Int Intrinsic:: Convert to `INTEGER' value truncated
- to whole number.
-
-* Int2 Intrinsic:: Convert to `INTEGER(KIND=6)' value
- truncated to whole number.
-* Int8 Intrinsic:: Convert to `INTEGER(KIND=2)' value
- truncated to whole number.
-
-* IOr Intrinsic:: Boolean OR.
-
-* IRand Intrinsic:: Random number.
-* IsaTty Intrinsic:: Is unit connected to a terminal?
-
-* IShft Intrinsic:: Logical bit shift.
-* IShftC Intrinsic:: Circular bit shift.
-
-* ISign Intrinsic:: Apply sign to magnitude (archaic).
-
-* ITime Intrinsic:: Get local time of day.
-
-* Kill Intrinsic (subroutine):: Signal a process.
-
-* Kind Intrinsic:: (Reserved for future use.)
-* LBound Intrinsic:: (Reserved for future use.)
-
-* Len Intrinsic:: Length of character entity.
-
-* Len_Trim Intrinsic:: Get last non-blank character in string.
-
-* LGe Intrinsic:: Lexically greater than or equal.
-* LGt Intrinsic:: Lexically greater than.
-
-* Link Intrinsic (subroutine):: Make hard link in file system.
-
-* LLe Intrinsic:: Lexically less than or equal.
-* LLt Intrinsic:: Lexically less than.
-
-* LnBlnk Intrinsic:: Get last non-blank character in string.
-* Loc Intrinsic:: Address of entity in core.
-
-* Log Intrinsic:: Natural logarithm.
-* Log10 Intrinsic:: Natural logarithm.
-
-* Logical Intrinsic:: (Reserved for future use.)
-
-* Long Intrinsic:: Conversion to `INTEGER(KIND=1)' (archaic).
-
-* LShift Intrinsic:: Left-shift bits.
-
-* LStat Intrinsic (subroutine):: Get file information.
-* LStat Intrinsic (function):: Get file information.
-* LTime Intrinsic:: Convert time to local time info.
-
-* MatMul Intrinsic:: (Reserved for future use.)
-
-* Max Intrinsic:: Maximum value.
-* Max0 Intrinsic:: Maximum value (archaic).
-* Max1 Intrinsic:: Maximum value (archaic).
-
-* MaxExponent Intrinsic:: (Reserved for future use.)
-* MaxLoc Intrinsic:: (Reserved for future use.)
-* MaxVal Intrinsic:: (Reserved for future use.)
-
-* MClock Intrinsic:: Get number of clock ticks for process.
-* MClock8 Intrinsic:: Get number of clock ticks for process.
-
-* Merge Intrinsic:: (Reserved for future use.)
-
-* Min Intrinsic:: Minimum value.
-* Min0 Intrinsic:: Minimum value (archaic).
-* Min1 Intrinsic:: Minimum value (archaic).
-
-* MinExponent Intrinsic:: (Reserved for future use.)
-* MinLoc Intrinsic:: (Reserved for future use.)
-* MinVal Intrinsic:: (Reserved for future use.)
-
-* Mod Intrinsic:: Remainder.
-
-* Modulo Intrinsic:: (Reserved for future use.)
-
-* MvBits Intrinsic:: Moving a bit field.
-
-* Nearest Intrinsic:: (Reserved for future use.)
-
-* NInt Intrinsic:: Convert to `INTEGER' value rounded
- to nearest whole number.
-
-* Not Intrinsic:: Boolean NOT.
-
-* Or Intrinsic:: Boolean OR.
-
-* Pack Intrinsic:: (Reserved for future use.)
-
-* PError Intrinsic:: Print error message for last error.
-
-* Precision Intrinsic:: (Reserved for future use.)
-* Present Intrinsic:: (Reserved for future use.)
-* Product Intrinsic:: (Reserved for future use.)
-
-* Radix Intrinsic:: (Reserved for future use.)
-
-* Rand Intrinsic:: Random number.
-
-* Random_Number Intrinsic:: (Reserved for future use.)
-* Random_Seed Intrinsic:: (Reserved for future use.)
-* Range Intrinsic:: (Reserved for future use.)
-
-* Real Intrinsic:: Convert value to type `REAL(KIND=1)'.
-
-* RealPart Intrinsic:: Extract real part of complex.
-
-* Rename Intrinsic (subroutine):: Rename file.
-
-* Repeat Intrinsic:: (Reserved for future use.)
-* Reshape Intrinsic:: (Reserved for future use.)
-* RRSpacing Intrinsic:: (Reserved for future use.)
-
-* RShift Intrinsic:: Right-shift bits.
-
-* Scale Intrinsic:: (Reserved for future use.)
-* Scan Intrinsic:: (Reserved for future use.)
-
-* Second Intrinsic (function):: Get CPU time for process in seconds.
-* Second Intrinsic (subroutine):: Get CPU time for process
- in seconds.
-
-* Selected_Int_Kind Intrinsic:: (Reserved for future use.)
-* Selected_Real_Kind Intrinsic:: (Reserved for future use.)
-* Set_Exponent Intrinsic:: (Reserved for future use.)
-* Shape Intrinsic:: (Reserved for future use.)
-
-* Short Intrinsic:: Convert to `INTEGER(KIND=6)' value
- truncated to whole number.
-
-* Sign Intrinsic:: Apply sign to magnitude.
-
-* Signal Intrinsic (subroutine):: Muck with signal handling.
-
-* Sin Intrinsic:: Sine.
-
-* SinH Intrinsic:: Hyperbolic sine.
-
-* Sleep Intrinsic:: Sleep for a specified time.
-
-* Sngl Intrinsic:: Convert (archaic).
-
-* Spacing Intrinsic:: (Reserved for future use.)
-* Spread Intrinsic:: (Reserved for future use.)
-
-* SqRt Intrinsic:: Square root.
-
-* SRand Intrinsic:: Random seed.
-* Stat Intrinsic (subroutine):: Get file information.
-* Stat Intrinsic (function):: Get file information.
-
-* Sum Intrinsic:: (Reserved for future use.)
-
-* SymLnk Intrinsic (subroutine):: Make symbolic link in file system.
-
-* System Intrinsic (subroutine):: Invoke shell (system) command.
-
-* System_Clock Intrinsic:: Get current system clock value.
-
-* Tan Intrinsic:: Tangent.
-
-* TanH Intrinsic:: Hyperbolic tangent.
-
-* Time Intrinsic (UNIX):: Get current time as time value.
-
-* Time8 Intrinsic:: Get current time as time value.
-
-* Tiny Intrinsic:: (Reserved for future use.)
-* Transfer Intrinsic:: (Reserved for future use.)
-* Transpose Intrinsic:: (Reserved for future use.)
-* Trim Intrinsic:: (Reserved for future use.)
-
-* TtyNam Intrinsic (subroutine):: Get name of terminal device for unit.
-* TtyNam Intrinsic (function):: Get name of terminal device for unit.
-
-* UBound Intrinsic:: (Reserved for future use.)
-
-* UMask Intrinsic (subroutine):: Set file creation permissions mask.
-
-* Unlink Intrinsic (subroutine):: Unlink file.
-
-* Unpack Intrinsic:: (Reserved for future use.)
-* Verify Intrinsic:: (Reserved for future use.)
-
-* XOr Intrinsic:: Boolean XOR.
-* ZAbs Intrinsic:: Absolute value (archaic).
-* ZCos Intrinsic:: Cosine (archaic).
-* ZExp Intrinsic:: Exponential (archaic).
-
-* ZLog Intrinsic:: Natural logarithm (archaic).
-* ZSin Intrinsic:: Sine (archaic).
-* ZSqRt Intrinsic:: Square root (archaic).
-
-
-File: g77.info, Node: Abort Intrinsic, Next: Abs Intrinsic, Up: Table of Intrinsic Functions
-
-Abort Intrinsic
-...............
-
- CALL Abort()
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Prints a message and potentially causes a core dump via `abort(3)'.
-
-
-File: g77.info, Node: Abs Intrinsic, Next: Access Intrinsic, Prev: Abort Intrinsic, Up: Table of Intrinsic Functions
-
-Abs Intrinsic
-.............
-
- Abs(A)
-
-Abs: `INTEGER' or `REAL' function. The exact type depends on that of
-argument A--if A is `COMPLEX', this function's type is `REAL' with the
-same `KIND=' value as the type of A. Otherwise, this function's type
-is the same as that of A.
-
-A: `INTEGER', `REAL', or `COMPLEX'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Returns the absolute value of A.
-
- If A is type `COMPLEX', the absolute value is computed as:
-
- SQRT(REALPART(A)**2, IMAGPART(A)**2)
-
-Otherwise, it is computed by negating the A if it is negative, or
-returning A.
-
- *Note Sign Intrinsic::, for how to explicitly compute the positive
-or negative form of the absolute value of an expression.
-
-
-File: g77.info, Node: Access Intrinsic, Next: AChar Intrinsic, Prev: Abs Intrinsic, Up: Table of Intrinsic Functions
-
-Access Intrinsic
-................
-
- Access(NAME, MODE)
-
-Access: `INTEGER(KIND=1)' function.
-
-NAME: `CHARACTER'; scalar; INTENT(IN).
-
-MODE: `CHARACTER'; scalar; INTENT(IN).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Checks file NAME for accessibility in the mode specified by MODE and
-returns 0 if the file is accessible in that mode, otherwise an error
-code if the file is inaccessible or MODE is invalid. See `access(2)'.
-A null character (`CHAR(0)') marks the end of the name in
-NAME--otherwise, trailing blanks in NAME are ignored. MODE may be a
-concatenation of any of the following characters:
-
-`r'
- Read permission
-
-`w'
- Write permission
-
-`x'
- Execute permission
-
-`SPC'
- Existence
-
-
-File: g77.info, Node: AChar Intrinsic, Next: ACos Intrinsic, Prev: Access Intrinsic, Up: Table of Intrinsic Functions
-
-AChar Intrinsic
-...............
-
- AChar(I)
-
-AChar: `CHARACTER*1' function.
-
-I: `INTEGER'; scalar; INTENT(IN).
-
-Intrinsic groups: `f2c', `f90'.
-
-Description:
-
- Returns the ASCII character corresponding to the code specified by I.
-
- *Note IAChar Intrinsic::, for the inverse of this function.
-
- *Note Char Intrinsic::, for the function corresponding to the
-system's native character set.
-
-
-File: g77.info, Node: ACos Intrinsic, Next: AdjustL Intrinsic, Prev: AChar Intrinsic, Up: Table of Intrinsic Functions
-
-ACos Intrinsic
-..............
-
- ACos(X)
-
-ACos: `REAL' function, the `KIND=' value of the type being that of
-argument X.
-
-X: `REAL'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Returns the arc-cosine (inverse cosine) of X in radians.
-
- *Note Cos Intrinsic::, for the inverse of this function.
-
-
-File: g77.info, Node: AdjustL Intrinsic, Next: AdjustR Intrinsic, Prev: ACos Intrinsic, Up: Table of Intrinsic Functions
-
-AdjustL Intrinsic
-.................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL AdjustL' to use this name for
-an external procedure.
-
-
-File: g77.info, Node: AdjustR Intrinsic, Next: AImag Intrinsic, Prev: AdjustL Intrinsic, Up: Table of Intrinsic Functions
-
-AdjustR Intrinsic
-.................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL AdjustR' to use this name for
-an external procedure.
-
-
-File: g77.info, Node: AImag Intrinsic, Next: AInt Intrinsic, Prev: AdjustR Intrinsic, Up: Table of Intrinsic Functions
-
-AImag Intrinsic
-...............
-
- AImag(Z)
-
-AImag: `REAL' function. This intrinsic is valid when argument Z is
-`COMPLEX(KIND=1)'. When Z is any other `COMPLEX' type, this intrinsic
-is valid only when used as the argument to `REAL()', as explained below.
-
-Z: `COMPLEX'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Returns the (possibly converted) imaginary part of Z.
-
- Use of `AIMAG()' with an argument of a type other than
-`COMPLEX(KIND=1)' is restricted to the following case:
-
- REAL(AIMAG(Z))
-
-This expression converts the imaginary part of Z to `REAL(KIND=1)'.
-
- *Note REAL() and AIMAG() of Complex::, for more information.
-
-
-File: g77.info, Node: AInt Intrinsic, Next: Alarm Intrinsic, Prev: AImag Intrinsic, Up: Table of Intrinsic Functions
-
-AInt Intrinsic
-..............
-
- AInt(A)
-
-AInt: `REAL' function, the `KIND=' value of the type being that of
-argument A.
-
-A: `REAL'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Returns A with the fractional portion of its magnitude truncated and
-its sign preserved. (Also called "truncation towards zero".)
-
- *Note ANInt Intrinsic::, for how to round to nearest whole number.
-
- *Note Int Intrinsic::, for how to truncate and then convert number
-to `INTEGER'.
-
-
-File: g77.info, Node: Alarm Intrinsic, Next: All Intrinsic, Prev: AInt Intrinsic, Up: Table of Intrinsic Functions
-
-Alarm Intrinsic
-...............
-
- CALL Alarm(SECONDS, HANDLER, STATUS)
-
-SECONDS: `INTEGER'; scalar; INTENT(IN).
-
-HANDLER: Signal handler (`INTEGER FUNCTION' or `SUBROUTINE') or
-dummy/global `INTEGER(KIND=1)' scalar.
-
-STATUS: `INTEGER(KIND=1)'; OPTIONAL; scalar; INTENT(OUT).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Causes external subroutine HANDLER to be executed after a delay of
-SECONDS seconds by using `alarm(1)' to set up a signal and `signal(2)'
-to catch it. If STATUS is supplied, it will be returned with the the
-number of seconds remaining until any previously scheduled alarm was
-due to be delivered, or zero if there was no previously scheduled alarm.
-*Note Signal Intrinsic (subroutine)::.
-
-
-File: g77.info, Node: All Intrinsic, Next: Allocated Intrinsic, Prev: Alarm Intrinsic, Up: Table of Intrinsic Functions
-
-All Intrinsic
-.............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL All' to use this name for an
-external procedure.
-
-
-File: g77.info, Node: Allocated Intrinsic, Next: ALog Intrinsic, Prev: All Intrinsic, Up: Table of Intrinsic Functions
-
-Allocated Intrinsic
-...................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL Allocated' to use this name
-for an external procedure.
-
-
-File: g77.info, Node: ALog Intrinsic, Next: ALog10 Intrinsic, Prev: Allocated Intrinsic, Up: Table of Intrinsic Functions
-
-ALog Intrinsic
-..............
-
- ALog(X)
-
-ALog: `REAL(KIND=1)' function.
-
-X: `REAL(KIND=1)'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Archaic form of `LOG()' that is specific to one type for X. *Note
-Log Intrinsic::.
-
-
-File: g77.info, Node: ALog10 Intrinsic, Next: AMax0 Intrinsic, Prev: ALog Intrinsic, Up: Table of Intrinsic Functions
-
-ALog10 Intrinsic
-................
-
- ALog10(X)
-
-ALog10: `REAL(KIND=1)' function.
-
-X: `REAL(KIND=1)'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Archaic form of `LOG10()' that is specific to one type for X. *Note
-Log10 Intrinsic::.
-
-
-File: g77.info, Node: AMax0 Intrinsic, Next: AMax1 Intrinsic, Prev: ALog10 Intrinsic, Up: Table of Intrinsic Functions
-
-AMax0 Intrinsic
-...............
-
- AMax0(A-1, A-2, ..., A-n)
-
-AMax0: `REAL(KIND=1)' function.
-
-A: `INTEGER(KIND=1)'; at least two such arguments must be provided;
-scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Archaic form of `MAX()' that is specific to one type for A and a
-different return type. *Note Max Intrinsic::.
-
-
-File: g77.info, Node: AMax1 Intrinsic, Next: AMin0 Intrinsic, Prev: AMax0 Intrinsic, Up: Table of Intrinsic Functions
-
-AMax1 Intrinsic
-...............
-
- AMax1(A-1, A-2, ..., A-n)
-
-AMax1: `REAL(KIND=1)' function.
-
-A: `REAL(KIND=1)'; at least two such arguments must be provided;
-scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Archaic form of `MAX()' that is specific to one type for A. *Note
-Max Intrinsic::.
-
-
-File: g77.info, Node: AMin0 Intrinsic, Next: AMin1 Intrinsic, Prev: AMax1 Intrinsic, Up: Table of Intrinsic Functions
-
-AMin0 Intrinsic
-...............
-
- AMin0(A-1, A-2, ..., A-n)
-
-AMin0: `REAL(KIND=1)' function.
-
-A: `INTEGER(KIND=1)'; at least two such arguments must be provided;
-scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Archaic form of `MIN()' that is specific to one type for A and a
-different return type. *Note Min Intrinsic::.
-
-
-File: g77.info, Node: AMin1 Intrinsic, Next: AMod Intrinsic, Prev: AMin0 Intrinsic, Up: Table of Intrinsic Functions
-
-AMin1 Intrinsic
-...............
-
- AMin1(A-1, A-2, ..., A-n)
-
-AMin1: `REAL(KIND=1)' function.
-
-A: `REAL(KIND=1)'; at least two such arguments must be provided;
-scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Archaic form of `MIN()' that is specific to one type for A. *Note
-Min Intrinsic::.
-
-
-File: g77.info, Node: AMod Intrinsic, Next: And Intrinsic, Prev: AMin1 Intrinsic, Up: Table of Intrinsic Functions
-
-AMod Intrinsic
-..............
-
- AMod(A, P)
-
-AMod: `REAL(KIND=1)' function.
-
-A: `REAL(KIND=1)'; scalar; INTENT(IN).
-
-P: `REAL(KIND=1)'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Archaic form of `MOD()' that is specific to one type for A. *Note
-Mod Intrinsic::.
-
-
-File: g77.info, Node: And Intrinsic, Next: ANInt Intrinsic, Prev: AMod Intrinsic, Up: Table of Intrinsic Functions
-
-And Intrinsic
-.............
-
- And(I, J)
-
-And: `INTEGER' or `LOGICAL' function, the exact type being the result
-of cross-promoting the types of all the arguments.
-
-I: `INTEGER' or `LOGICAL'; scalar; INTENT(IN).
-
-J: `INTEGER' or `LOGICAL'; scalar; INTENT(IN).
-
-Intrinsic groups: `f2c'.
-
-Description:
-
- Returns value resulting from boolean AND of pair of bits in each of
-I and J.
-
-
-File: g77.info, Node: ANInt Intrinsic, Next: Any Intrinsic, Prev: And Intrinsic, Up: Table of Intrinsic Functions
-
-ANInt Intrinsic
-...............
-
- ANInt(A)
-
-ANInt: `REAL' function, the `KIND=' value of the type being that of
-argument A.
-
-A: `REAL'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Returns A with the fractional portion of its magnitude eliminated by
-rounding to the nearest whole number and with its sign preserved.
-
- A fractional portion exactly equal to `.5' is rounded to the whole
-number that is larger in magnitude. (Also called "Fortran round".)
-
- *Note AInt Intrinsic::, for how to truncate to whole number.
-
- *Note NInt Intrinsic::, for how to round and then convert number to
-`INTEGER'.
-
-
-File: g77.info, Node: Any Intrinsic, Next: ASin Intrinsic, Prev: ANInt Intrinsic, Up: Table of Intrinsic Functions
-
-Any Intrinsic
-.............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL Any' to use this name for an
-external procedure.
-
-
-File: g77.info, Node: ASin Intrinsic, Next: Associated Intrinsic, Prev: Any Intrinsic, Up: Table of Intrinsic Functions
-
-ASin Intrinsic
-..............
-
- ASin(X)
-
-ASin: `REAL' function, the `KIND=' value of the type being that of
-argument X.
-
-X: `REAL'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Returns the arc-sine (inverse sine) of X in radians.
-
- *Note Sin Intrinsic::, for the inverse of this function.
-
-
-File: g77.info, Node: Associated Intrinsic, Next: ATan Intrinsic, Prev: ASin Intrinsic, Up: Table of Intrinsic Functions
-
-Associated Intrinsic
-....................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL Associated' to use this name
-for an external procedure.
-
-
-File: g77.info, Node: ATan Intrinsic, Next: ATan2 Intrinsic, Prev: Associated Intrinsic, Up: Table of Intrinsic Functions
-
-ATan Intrinsic
-..............
-
- ATan(X)
-
-ATan: `REAL' function, the `KIND=' value of the type being that of
-argument X.
-
-X: `REAL'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Returns the arc-tangent (inverse tangent) of X in radians.
-
- *Note Tan Intrinsic::, for the inverse of this function.
-
-
-File: g77.info, Node: ATan2 Intrinsic, Next: BesJ0 Intrinsic, Prev: ATan Intrinsic, Up: Table of Intrinsic Functions
-
-ATan2 Intrinsic
-...............
-
- ATan2(Y, X)
-
-ATan2: `REAL' function, the exact type being the result of
-cross-promoting the types of all the arguments.
-
-Y: `REAL'; scalar; INTENT(IN).
-
-X: `REAL'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Returns the arc-tangent (inverse tangent) of the complex number (Y,
-X) in radians.
-
- *Note Tan Intrinsic::, for the inverse of this function.
-
-
-File: g77.info, Node: BesJ0 Intrinsic, Next: BesJ1 Intrinsic, Prev: ATan2 Intrinsic, Up: Table of Intrinsic Functions
-
-BesJ0 Intrinsic
-...............
-
- BesJ0(X)
-
-BesJ0: `REAL' function, the `KIND=' value of the type being that of
-argument X.
-
-X: `REAL'; scalar; INTENT(IN).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Calculates the Bessel function of the first kind of order 0 of X.
-See `bessel(3m)', on whose implementation the function depends.
-
-
-File: g77.info, Node: BesJ1 Intrinsic, Next: BesJN Intrinsic, Prev: BesJ0 Intrinsic, Up: Table of Intrinsic Functions
-
-BesJ1 Intrinsic
-...............
-
- BesJ1(X)
-
-BesJ1: `REAL' function, the `KIND=' value of the type being that of
-argument X.
-
-X: `REAL'; scalar; INTENT(IN).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Calculates the Bessel function of the first kind of order 1 of X.
-See `bessel(3m)', on whose implementation the function depends.
-
-
-File: g77.info, Node: BesJN Intrinsic, Next: BesY0 Intrinsic, Prev: BesJ1 Intrinsic, Up: Table of Intrinsic Functions
-
-BesJN Intrinsic
-...............
-
- BesJN(N, X)
-
-BesJN: `REAL' function, the `KIND=' value of the type being that of
-argument X.
-
-N: `INTEGER'; scalar; INTENT(IN).
-
-X: `REAL'; scalar; INTENT(IN).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Calculates the Bessel function of the first kind of order N of X.
-See `bessel(3m)', on whose implementation the function depends.
-
-
-File: g77.info, Node: BesY0 Intrinsic, Next: BesY1 Intrinsic, Prev: BesJN Intrinsic, Up: Table of Intrinsic Functions
-
-BesY0 Intrinsic
-...............
-
- BesY0(X)
-
-BesY0: `REAL' function, the `KIND=' value of the type being that of
-argument X.
-
-X: `REAL'; scalar; INTENT(IN).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Calculates the Bessel function of the second kind of order 0 of X.
-See `bessel(3m)', on whose implementation the function depends.
-
-
-File: g77.info, Node: BesY1 Intrinsic, Next: BesYN Intrinsic, Prev: BesY0 Intrinsic, Up: Table of Intrinsic Functions
-
-BesY1 Intrinsic
-...............
-
- BesY1(X)
-
-BesY1: `REAL' function, the `KIND=' value of the type being that of
-argument X.
-
-X: `REAL'; scalar; INTENT(IN).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Calculates the Bessel function of the second kind of order 1 of X.
-See `bessel(3m)', on whose implementation the function depends.
-
-
-File: g77.info, Node: BesYN Intrinsic, Next: Bit_Size Intrinsic, Prev: BesY1 Intrinsic, Up: Table of Intrinsic Functions
-
-BesYN Intrinsic
-...............
-
- BesYN(N, X)
-
-BesYN: `REAL' function, the `KIND=' value of the type being that of
-argument X.
-
-N: `INTEGER'; scalar; INTENT(IN).
-
-X: `REAL'; scalar; INTENT(IN).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Calculates the Bessel function of the second kind of order N of X.
-See `bessel(3m)', on whose implementation the function depends.
-
-
-File: g77.info, Node: Bit_Size Intrinsic, Next: BTest Intrinsic, Prev: BesYN Intrinsic, Up: Table of Intrinsic Functions
-
-Bit_Size Intrinsic
-..................
-
- Bit_Size(I)
-
-Bit_Size: `INTEGER' function, the `KIND=' value of the type being that
-of argument I.
-
-I: `INTEGER'; scalar.
-
-Intrinsic groups: `f90'.
-
-Description:
-
- Returns the number of bits (integer precision plus sign bit)
-represented by the type for I.
-
- *Note BTest Intrinsic::, for how to test the value of a bit in a
-variable or array.
-
- *Note IBSet Intrinsic::, for how to set a bit in a variable to 1.
-
- *Note IBClr Intrinsic::, for how to set a bit in a variable to 0.
-
-
-File: g77.info, Node: BTest Intrinsic, Next: CAbs Intrinsic, Prev: Bit_Size Intrinsic, Up: Table of Intrinsic Functions
-
-BTest Intrinsic
-...............
-
- BTest(I, POS)
-
-BTest: `LOGICAL(KIND=1)' function.
-
-I: `INTEGER'; scalar; INTENT(IN).
-
-POS: `INTEGER'; scalar; INTENT(IN).
-
-Intrinsic groups: `mil', `f90', `vxt'.
-
-Description:
-
- Returns `.TRUE.' if bit POS in I is 1, `.FALSE.' otherwise.
-
- (Bit 0 is the low-order (rightmost) bit, adding the value 2**0, or 1,
-to the number if set to 1; bit 1 is the next-higher-order bit, adding
-2**1, or 2; bit 2 adds 2**2, or 4; and so on.)
-
- *Note Bit_Size Intrinsic::, for how to obtain the number of bits in
-a type. The leftmost bit of I is `BIT_SIZE(I-1)'.
-
-
-File: g77.info, Node: CAbs Intrinsic, Next: CCos Intrinsic, Prev: BTest Intrinsic, Up: Table of Intrinsic Functions
-
-CAbs Intrinsic
-..............
-
- CAbs(A)
-
-CAbs: `REAL(KIND=1)' function.
-
-A: `COMPLEX(KIND=1)'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Archaic form of `ABS()' that is specific to one type for A. *Note
-Abs Intrinsic::.
-
-
-File: g77.info, Node: CCos Intrinsic, Next: Ceiling Intrinsic, Prev: CAbs Intrinsic, Up: Table of Intrinsic Functions
-
-CCos Intrinsic
-..............
-
- CCos(X)
-
-CCos: `COMPLEX(KIND=1)' function.
-
-X: `COMPLEX(KIND=1)'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Archaic form of `COS()' that is specific to one type for X. *Note
-Cos Intrinsic::.
-
-
-File: g77.info, Node: Ceiling Intrinsic, Next: CExp Intrinsic, Prev: CCos Intrinsic, Up: Table of Intrinsic Functions
-
-Ceiling Intrinsic
-.................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL Ceiling' to use this name for
-an external procedure.
-
-
-File: g77.info, Node: CExp Intrinsic, Next: Char Intrinsic, Prev: Ceiling Intrinsic, Up: Table of Intrinsic Functions
-
-CExp Intrinsic
-..............
-
- CExp(X)
-
-CExp: `COMPLEX(KIND=1)' function.
-
-X: `COMPLEX(KIND=1)'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Archaic form of `EXP()' that is specific to one type for X. *Note
-Exp Intrinsic::.
-
-
-File: g77.info, Node: Char Intrinsic, Next: ChDir Intrinsic (subroutine), Prev: CExp Intrinsic, Up: Table of Intrinsic Functions
-
-Char Intrinsic
-..............
-
- Char(I)
-
-Char: `CHARACTER*1' function.
-
-I: `INTEGER'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Returns the character corresponding to the code specified by I,
-using the system's native character set.
-
- Because the system's native character set is used, the
-correspondence between character and their codes is not necessarily the
-same between GNU Fortran implementations.
-
- Note that no intrinsic exists to convert a numerical value to a
-printable character string. For example, there is no intrinsic that,
-given an `INTEGER' or `REAL' argument with the value `154', returns the
-`CHARACTER' result `'154''.
-
- Instead, you can use internal-file I/O to do this kind of conversion.
-For example:
-
- INTEGER VALUE
- CHARACTER*10 STRING
- VALUE = 154
- WRITE (STRING, '(I10)'), VALUE
- PRINT *, STRING
- END
-
- The above program, when run, prints:
-
- 154
-
- *Note IChar Intrinsic::, for the inverse of the `CHAR' function.
-
- *Note AChar Intrinsic::, for the function corresponding to the ASCII
-character set.
-
-
-File: g77.info, Node: ChDir Intrinsic (subroutine), Next: ChMod Intrinsic (subroutine), Prev: Char Intrinsic, Up: Table of Intrinsic Functions
-
-ChDir Intrinsic (subroutine)
-............................
-
- CALL ChDir(DIR, STATUS)
-
-DIR: `CHARACTER'; scalar; INTENT(IN).
-
-STATUS: `INTEGER(KIND=1)'; OPTIONAL; scalar; INTENT(OUT).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Sets the current working directory to be DIR. If the STATUS
-argument is supplied, it contains 0 on success or a non-zero error code
-otherwise upon return. See `chdir(3)'.
-
- Some non-GNU implementations of Fortran provide this intrinsic as
-only a function, not as a subroutine, or do not support the (optional)
-STATUS argument.
-
- For information on other intrinsics with the same name: *Note ChDir
-Intrinsic (function)::.
-
-
-File: g77.info, Node: ChMod Intrinsic (subroutine), Next: CLog Intrinsic, Prev: ChDir Intrinsic (subroutine), Up: Table of Intrinsic Functions
-
-ChMod Intrinsic (subroutine)
-............................
-
- CALL ChMod(NAME, MODE, STATUS)
-
-NAME: `CHARACTER'; scalar; INTENT(IN).
-
-MODE: `CHARACTER'; scalar; INTENT(IN).
-
-STATUS: `INTEGER(KIND=1)'; OPTIONAL; scalar; INTENT(OUT).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Changes the access mode of file NAME according to the specification
-MODE, which is given in the format of `chmod(1)'. A null character
-(`CHAR(0)') marks the end of the name in NAME--otherwise, trailing
-blanks in NAME are ignored. Currently, NAME must not contain the
-single quote character.
-
- If the STATUS argument is supplied, it contains 0 on success or a
-non-zero error code upon return.
-
- Note that this currently works by actually invoking `/bin/chmod' (or
-the `chmod' found when the library was configured) and so may fail in
-some circumstances and will, anyway, be slow.
-
- Some non-GNU implementations of Fortran provide this intrinsic as
-only a function, not as a subroutine, or do not support the (optional)
-STATUS argument.
-
- For information on other intrinsics with the same name: *Note ChMod
-Intrinsic (function)::.
-
-
-File: g77.info, Node: CLog Intrinsic, Next: Cmplx Intrinsic, Prev: ChMod Intrinsic (subroutine), Up: Table of Intrinsic Functions
-
-CLog Intrinsic
-..............
-
- CLog(X)
-
-CLog: `COMPLEX(KIND=1)' function.
-
-X: `COMPLEX(KIND=1)'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Archaic form of `LOG()' that is specific to one type for X. *Note
-Log Intrinsic::.
-
-
-File: g77.info, Node: Cmplx Intrinsic, Next: Complex Intrinsic, Prev: CLog Intrinsic, Up: Table of Intrinsic Functions
-
-Cmplx Intrinsic
-...............
-
- Cmplx(X, Y)
-
-Cmplx: `COMPLEX(KIND=1)' function.
-
-X: `INTEGER', `REAL', or `COMPLEX'; scalar; INTENT(IN).
-
-Y: `INTEGER' or `REAL'; OPTIONAL (must be omitted if X is `COMPLEX');
-scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- If X is not type `COMPLEX', constructs a value of type
-`COMPLEX(KIND=1)' from the real and imaginary values specified by X and
-Y, respectively. If Y is omitted, `0.' is assumed.
-
- If X is type `COMPLEX', converts it to type `COMPLEX(KIND=1)'.
-
- *Note Complex Intrinsic::, for information on easily constructing a
-`COMPLEX' value of arbitrary precision from `REAL' arguments.
-
-
-File: g77.info, Node: Complex Intrinsic, Next: Conjg Intrinsic, Prev: Cmplx Intrinsic, Up: Table of Intrinsic Functions
-
-Complex Intrinsic
-.................
-
- Complex(REAL, IMAG)
-
-Complex: `COMPLEX' function, the exact type being the result of
-cross-promoting the types of all the arguments.
-
-REAL: `INTEGER' or `REAL'; scalar; INTENT(IN).
-
-IMAG: `INTEGER' or `REAL'; scalar; INTENT(IN).
-
-Intrinsic groups: `gnu'.
-
-Description:
-
- Returns a `COMPLEX' value that has `Real' and `Imag' as its real and
-imaginary parts, respectively.
-
- If REAL and IMAG are the same type, and that type is not `INTEGER',
-no data conversion is performed, and the type of the resulting value
-has the same kind value as the types of REAL and IMAG.
-
- If REAL and IMAG are not the same type, the usual type-promotion
-rules are applied to both, converting either or both to the appropriate
-`REAL' type. The type of the resulting value has the same kind value
-as the type to which both REAL and IMAG were converted, in this case.
-
- If REAL and IMAG are both `INTEGER', they are both converted to
-`REAL(KIND=1)', and the result of the `COMPLEX()' invocation is type
-`COMPLEX(KIND=1)'.
-
- *Note:* The way to do this in standard Fortran 90 is too hairy to
-describe here, but it is important to note that `CMPLX(D1,D2)' returns
-a `COMPLEX(KIND=1)' result even if `D1' and `D2' are type
-`REAL(KIND=2)'. Hence the availability of `COMPLEX()' in GNU Fortran.
-
-
-File: g77.info, Node: Conjg Intrinsic, Next: Cos Intrinsic, Prev: Complex Intrinsic, Up: Table of Intrinsic Functions
-
-Conjg Intrinsic
-...............
-
- Conjg(Z)
-
-Conjg: `COMPLEX' function, the `KIND=' value of the type being that of
-argument Z.
-
-Z: `COMPLEX'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Returns the complex conjugate:
-
- COMPLEX(REALPART(Z), -IMAGPART(Z))
-
-
-File: g77.info, Node: Cos Intrinsic, Next: CosH Intrinsic, Prev: Conjg Intrinsic, Up: Table of Intrinsic Functions
-
-Cos Intrinsic
-.............
-
- Cos(X)
-
-Cos: `REAL' or `COMPLEX' function, the exact type being that of
-argument X.
-
-X: `REAL' or `COMPLEX'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Returns the cosine of X, an angle measured in radians.
-
- *Note ACos Intrinsic::, for the inverse of this function.
-
-
-File: g77.info, Node: CosH Intrinsic, Next: Count Intrinsic, Prev: Cos Intrinsic, Up: Table of Intrinsic Functions
-
-CosH Intrinsic
-..............
-
- CosH(X)
-
-CosH: `REAL' function, the `KIND=' value of the type being that of
-argument X.
-
-X: `REAL'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Returns the hyperbolic cosine of X.
-
-
-File: g77.info, Node: Count Intrinsic, Next: Cpu_Time Intrinsic, Prev: CosH Intrinsic, Up: Table of Intrinsic Functions
-
-Count Intrinsic
-...............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL Count' to use this name for an
-external procedure.
-
-
-File: g77.info, Node: Cpu_Time Intrinsic, Next: CShift Intrinsic, Prev: Count Intrinsic, Up: Table of Intrinsic Functions
-
-Cpu_Time Intrinsic
-..................
-
- CALL Cpu_Time(SECONDS)
-
-SECONDS: `REAL(KIND=1)'; scalar; INTENT(OUT).
-
-Intrinsic groups: `f90'.
-
-Description:
-
- Returns in SECONDS the current value of the system time. This
-implementation of the Fortran 95 intrinsic is just an alias for
-`second' *Note Second Intrinsic (subroutine)::.
-
-
-File: g77.info, Node: CShift Intrinsic, Next: CSin Intrinsic, Prev: Cpu_Time Intrinsic, Up: Table of Intrinsic Functions
-
-CShift Intrinsic
-................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL CShift' to use this name for an
-external procedure.
-
-
-File: g77.info, Node: CSin Intrinsic, Next: CSqRt Intrinsic, Prev: CShift Intrinsic, Up: Table of Intrinsic Functions
-
-CSin Intrinsic
-..............
-
- CSin(X)
-
-CSin: `COMPLEX(KIND=1)' function.
-
-X: `COMPLEX(KIND=1)'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Archaic form of `SIN()' that is specific to one type for X. *Note
-Sin Intrinsic::.
-
-
-File: g77.info, Node: CSqRt Intrinsic, Next: CTime Intrinsic (subroutine), Prev: CSin Intrinsic, Up: Table of Intrinsic Functions
-
-CSqRt Intrinsic
-...............
-
- CSqRt(X)
-
-CSqRt: `COMPLEX(KIND=1)' function.
-
-X: `COMPLEX(KIND=1)'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Archaic form of `SQRT()' that is specific to one type for X. *Note
-SqRt Intrinsic::.
-
-
-File: g77.info, Node: CTime Intrinsic (subroutine), Next: CTime Intrinsic (function), Prev: CSqRt Intrinsic, Up: Table of Intrinsic Functions
-
-CTime Intrinsic (subroutine)
-............................
-
- CALL CTime(RESULT, STIME)
-
-RESULT: `CHARACTER'; scalar; INTENT(OUT).
-
-STIME: `INTEGER'; scalar; INTENT(IN).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Converts STIME, a system time value, such as returned by `TIME8()',
-to a string of the form `Sat Aug 19 18:13:14 1995', and returns that
-string in RESULT.
-
- *Note Time8 Intrinsic::.
-
- Some non-GNU implementations of Fortran provide this intrinsic as
-only a function, not as a subroutine.
-
- For information on other intrinsics with the same name: *Note CTime
-Intrinsic (function)::.
-
-
-File: g77.info, Node: CTime Intrinsic (function), Next: DAbs Intrinsic, Prev: CTime Intrinsic (subroutine), Up: Table of Intrinsic Functions
-
-CTime Intrinsic (function)
-..........................
-
- CTime(STIME)
-
-CTime: `CHARACTER*(*)' function.
-
-STIME: `INTEGER'; scalar; INTENT(IN).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Converts STIME, a system time value, such as returned by `TIME8()',
-to a string of the form `Sat Aug 19 18:13:14 1995', and returns that
-string as the function value.
-
- *Note Time8 Intrinsic::.
-
- For information on other intrinsics with the same name: *Note CTime
-Intrinsic (subroutine)::.
-
-
-File: g77.info, Node: DAbs Intrinsic, Next: DACos Intrinsic, Prev: CTime Intrinsic (function), Up: Table of Intrinsic Functions
-
-DAbs Intrinsic
-..............
-
- DAbs(A)
-
-DAbs: `REAL(KIND=2)' function.
-
-A: `REAL(KIND=2)'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Archaic form of `ABS()' that is specific to one type for A. *Note
-Abs Intrinsic::.
-
-
-File: g77.info, Node: DACos Intrinsic, Next: DASin Intrinsic, Prev: DAbs Intrinsic, Up: Table of Intrinsic Functions
-
-DACos Intrinsic
-...............
-
- DACos(X)
-
-DACos: `REAL(KIND=2)' function.
-
-X: `REAL(KIND=2)'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Archaic form of `ACOS()' that is specific to one type for X. *Note
-ACos Intrinsic::.
-
-
-File: g77.info, Node: DASin Intrinsic, Next: DATan Intrinsic, Prev: DACos Intrinsic, Up: Table of Intrinsic Functions
-
-DASin Intrinsic
-...............
-
- DASin(X)
-
-DASin: `REAL(KIND=2)' function.
-
-X: `REAL(KIND=2)'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Archaic form of `ASIN()' that is specific to one type for X. *Note
-ASin Intrinsic::.
-
-
-File: g77.info, Node: DATan Intrinsic, Next: DATan2 Intrinsic, Prev: DASin Intrinsic, Up: Table of Intrinsic Functions
-
-DATan Intrinsic
-...............
-
- DATan(X)
-
-DATan: `REAL(KIND=2)' function.
-
-X: `REAL(KIND=2)'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Archaic form of `ATAN()' that is specific to one type for X. *Note
-ATan Intrinsic::.
-
-
-File: g77.info, Node: DATan2 Intrinsic, Next: Date_and_Time Intrinsic, Prev: DATan Intrinsic, Up: Table of Intrinsic Functions
-
-DATan2 Intrinsic
-................
-
- DATan2(Y, X)
-
-DATan2: `REAL(KIND=2)' function.
-
-Y: `REAL(KIND=2)'; scalar; INTENT(IN).
-
-X: `REAL(KIND=2)'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Archaic form of `ATAN2()' that is specific to one type for Y and X.
-*Note ATan2 Intrinsic::.
-
-
-File: g77.info, Node: Date_and_Time Intrinsic, Next: DbesJ0 Intrinsic, Prev: DATan2 Intrinsic, Up: Table of Intrinsic Functions
-
-Date_and_Time Intrinsic
-.......................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL Date_and_Time' to use this
-name for an external procedure.
-
-
-File: g77.info, Node: DbesJ0 Intrinsic, Next: DbesJ1 Intrinsic, Prev: Date_and_Time Intrinsic, Up: Table of Intrinsic Functions
-
-DbesJ0 Intrinsic
-................
-
- DbesJ0(X)
-
-DbesJ0: `REAL(KIND=2)' function.
-
-X: `REAL(KIND=2)'; scalar; INTENT(IN).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Archaic form of `BESJ0()' that is specific to one type for X. *Note
-BesJ0 Intrinsic::.
-
-
-File: g77.info, Node: DbesJ1 Intrinsic, Next: DbesJN Intrinsic, Prev: DbesJ0 Intrinsic, Up: Table of Intrinsic Functions
-
-DbesJ1 Intrinsic
-................
-
- DbesJ1(X)
-
-DbesJ1: `REAL(KIND=2)' function.
-
-X: `REAL(KIND=2)'; scalar; INTENT(IN).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Archaic form of `BESJ1()' that is specific to one type for X. *Note
-BesJ1 Intrinsic::.
-
-
-File: g77.info, Node: DbesJN Intrinsic, Next: DbesY0 Intrinsic, Prev: DbesJ1 Intrinsic, Up: Table of Intrinsic Functions
-
-DbesJN Intrinsic
-................
-
- DbesJN(N, X)
-
-DbesJN: `REAL(KIND=2)' function.
-
-N: `INTEGER'; scalar; INTENT(IN).
-
-X: `REAL(KIND=2)'; scalar; INTENT(IN).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Archaic form of `BESJN()' that is specific to one type for X. *Note
-BesJN Intrinsic::.
-
-
-File: g77.info, Node: DbesY0 Intrinsic, Next: DbesY1 Intrinsic, Prev: DbesJN Intrinsic, Up: Table of Intrinsic Functions
-
-DbesY0 Intrinsic
-................
-
- DbesY0(X)
-
-DbesY0: `REAL(KIND=2)' function.
-
-X: `REAL(KIND=2)'; scalar; INTENT(IN).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Archaic form of `BESY0()' that is specific to one type for X. *Note
-BesY0 Intrinsic::.
-
diff --git a/gcc/f/g77.info-8 b/gcc/f/g77.info-8
deleted file mode 100644
index 34decb7f4dd..00000000000
--- a/gcc/f/g77.info-8
+++ /dev/null
@@ -1,2055 +0,0 @@
-This is Info file g77.info, produced by Makeinfo version 1.68 from the
-input file g77.texi.
-
- This file explains how to use the GNU Fortran system.
-
- Published by the Free Software Foundation 59 Temple Place - Suite 330
-Boston, MA 02111-1307 USA
-
- Copyright (C) 1995-1997 Free Software Foundation, Inc.
-
- Permission is granted to make and distribute verbatim copies of this
-manual provided the copyright notice and this permission notice are
-preserved on all copies.
-
- Permission is granted to copy and distribute modified versions of
-this manual under the conditions for verbatim copying, provided also
-that the sections entitled "GNU General Public License," "Funding for
-Free Software," and "Protect Your Freedom--Fight `Look And Feel'" are
-included exactly as in the original, and provided that the entire
-resulting derived work is distributed under the terms of a permission
-notice identical to this one.
-
- Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that the sections entitled "GNU General Public
-License," "Funding for Free Software," and "Protect Your Freedom--Fight
-`Look And Feel'", and this permission notice, may be included in
-translations approved by the Free Software Foundation instead of in the
-original English.
-
- Contributed by James Craig Burley (<burley@gnu.ai.mit.edu>).
-Inspired by a first pass at translating `g77-0.5.16/f/DOC' that was
-contributed to Craig by David Ronis (<ronis@onsager.chem.mcgill.ca>).
-
-INFO-DIR-SECTION Fortran Programming
-START-INFO-DIR-ENTRY
-* g77: (g77). The GNU Fortran compilation system.
-END-INFO-DIR-ENTRY
-
-
-File: g77.info, Node: DbesY1 Intrinsic, Next: DbesYN Intrinsic, Prev: DbesY0 Intrinsic, Up: Table of Intrinsic Functions
-
-DbesY1 Intrinsic
-................
-
- DbesY1(X)
-
-DbesY1: `REAL(KIND=2)' function.
-
-X: `REAL(KIND=2)'; scalar; INTENT(IN).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Archaic form of `BESY1()' that is specific to one type for X. *Note
-BesY1 Intrinsic::.
-
-
-File: g77.info, Node: DbesYN Intrinsic, Next: Dble Intrinsic, Prev: DbesY1 Intrinsic, Up: Table of Intrinsic Functions
-
-DbesYN Intrinsic
-................
-
- DbesYN(N, X)
-
-DbesYN: `REAL(KIND=2)' function.
-
-N: `INTEGER'; scalar; INTENT(IN).
-
-X: `REAL(KIND=2)'; scalar; INTENT(IN).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Archaic form of `BESYN()' that is specific to one type for X. *Note
-BesYN Intrinsic::.
-
-
-File: g77.info, Node: Dble Intrinsic, Next: DCos Intrinsic, Prev: DbesYN Intrinsic, Up: Table of Intrinsic Functions
-
-Dble Intrinsic
-..............
-
- Dble(A)
-
-Dble: `REAL(KIND=2)' function.
-
-A: `INTEGER', `REAL', or `COMPLEX'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Returns A converted to double precision (`REAL(KIND=2)'). If A is
-`COMPLEX', the real part of A is used for the conversion and the
-imaginary part disregarded.
-
- *Note Sngl Intrinsic::, for the function that converts to single
-precision.
-
- *Note Int Intrinsic::, for the function that converts to `INTEGER'.
-
- *Note Complex Intrinsic::, for the function that converts to
-`COMPLEX'.
-
-
-File: g77.info, Node: DCos Intrinsic, Next: DCosH Intrinsic, Prev: Dble Intrinsic, Up: Table of Intrinsic Functions
-
-DCos Intrinsic
-..............
-
- DCos(X)
-
-DCos: `REAL(KIND=2)' function.
-
-X: `REAL(KIND=2)'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Archaic form of `COS()' that is specific to one type for X. *Note
-Cos Intrinsic::.
-
-
-File: g77.info, Node: DCosH Intrinsic, Next: DDiM Intrinsic, Prev: DCos Intrinsic, Up: Table of Intrinsic Functions
-
-DCosH Intrinsic
-...............
-
- DCosH(X)
-
-DCosH: `REAL(KIND=2)' function.
-
-X: `REAL(KIND=2)'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Archaic form of `COSH()' that is specific to one type for X. *Note
-CosH Intrinsic::.
-
-
-File: g77.info, Node: DDiM Intrinsic, Next: DErF Intrinsic, Prev: DCosH Intrinsic, Up: Table of Intrinsic Functions
-
-DDiM Intrinsic
-..............
-
- DDiM(X, Y)
-
-DDiM: `REAL(KIND=2)' function.
-
-X: `REAL(KIND=2)'; scalar; INTENT(IN).
-
-Y: `REAL(KIND=2)'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Archaic form of `DIM()' that is specific to one type for X and Y.
-*Note DiM Intrinsic::.
-
-
-File: g77.info, Node: DErF Intrinsic, Next: DErFC Intrinsic, Prev: DDiM Intrinsic, Up: Table of Intrinsic Functions
-
-DErF Intrinsic
-..............
-
- DErF(X)
-
-DErF: `REAL(KIND=2)' function.
-
-X: `REAL(KIND=2)'; scalar; INTENT(IN).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Archaic form of `ERF()' that is specific to one type for X. *Note
-ErF Intrinsic::.
-
-
-File: g77.info, Node: DErFC Intrinsic, Next: DExp Intrinsic, Prev: DErF Intrinsic, Up: Table of Intrinsic Functions
-
-DErFC Intrinsic
-...............
-
- DErFC(X)
-
-DErFC: `REAL(KIND=2)' function.
-
-X: `REAL(KIND=2)'; scalar; INTENT(IN).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Archaic form of `ERFC()' that is specific to one type for X. *Note
-ErFC Intrinsic::.
-
-
-File: g77.info, Node: DExp Intrinsic, Next: Digits Intrinsic, Prev: DErFC Intrinsic, Up: Table of Intrinsic Functions
-
-DExp Intrinsic
-..............
-
- DExp(X)
-
-DExp: `REAL(KIND=2)' function.
-
-X: `REAL(KIND=2)'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Archaic form of `EXP()' that is specific to one type for X. *Note
-Exp Intrinsic::.
-
-
-File: g77.info, Node: Digits Intrinsic, Next: DiM Intrinsic, Prev: DExp Intrinsic, Up: Table of Intrinsic Functions
-
-Digits Intrinsic
-................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL Digits' to use this name for an
-external procedure.
-
-
-File: g77.info, Node: DiM Intrinsic, Next: DInt Intrinsic, Prev: Digits Intrinsic, Up: Table of Intrinsic Functions
-
-DiM Intrinsic
-.............
-
- DiM(X, Y)
-
-DiM: `INTEGER' or `REAL' function, the exact type being the result of
-cross-promoting the types of all the arguments.
-
-X: `INTEGER' or `REAL'; scalar; INTENT(IN).
-
-Y: `INTEGER' or `REAL'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Returns `X-Y' if X is greater than Y; otherwise returns zero.
-
-
-File: g77.info, Node: DInt Intrinsic, Next: DLog Intrinsic, Prev: DiM Intrinsic, Up: Table of Intrinsic Functions
-
-DInt Intrinsic
-..............
-
- DInt(A)
-
-DInt: `REAL(KIND=2)' function.
-
-A: `REAL(KIND=2)'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Archaic form of `AINT()' that is specific to one type for A. *Note
-AInt Intrinsic::.
-
-
-File: g77.info, Node: DLog Intrinsic, Next: DLog10 Intrinsic, Prev: DInt Intrinsic, Up: Table of Intrinsic Functions
-
-DLog Intrinsic
-..............
-
- DLog(X)
-
-DLog: `REAL(KIND=2)' function.
-
-X: `REAL(KIND=2)'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Archaic form of `LOG()' that is specific to one type for X. *Note
-Log Intrinsic::.
-
-
-File: g77.info, Node: DLog10 Intrinsic, Next: DMax1 Intrinsic, Prev: DLog Intrinsic, Up: Table of Intrinsic Functions
-
-DLog10 Intrinsic
-................
-
- DLog10(X)
-
-DLog10: `REAL(KIND=2)' function.
-
-X: `REAL(KIND=2)'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Archaic form of `LOG10()' that is specific to one type for X. *Note
-Log10 Intrinsic::.
-
-
-File: g77.info, Node: DMax1 Intrinsic, Next: DMin1 Intrinsic, Prev: DLog10 Intrinsic, Up: Table of Intrinsic Functions
-
-DMax1 Intrinsic
-...............
-
- DMax1(A-1, A-2, ..., A-n)
-
-DMax1: `REAL(KIND=2)' function.
-
-A: `REAL(KIND=2)'; at least two such arguments must be provided;
-scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Archaic form of `MAX()' that is specific to one type for A. *Note
-Max Intrinsic::.
-
-
-File: g77.info, Node: DMin1 Intrinsic, Next: DMod Intrinsic, Prev: DMax1 Intrinsic, Up: Table of Intrinsic Functions
-
-DMin1 Intrinsic
-...............
-
- DMin1(A-1, A-2, ..., A-n)
-
-DMin1: `REAL(KIND=2)' function.
-
-A: `REAL(KIND=2)'; at least two such arguments must be provided;
-scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Archaic form of `MIN()' that is specific to one type for A. *Note
-Min Intrinsic::.
-
-
-File: g77.info, Node: DMod Intrinsic, Next: DNInt Intrinsic, Prev: DMin1 Intrinsic, Up: Table of Intrinsic Functions
-
-DMod Intrinsic
-..............
-
- DMod(A, P)
-
-DMod: `REAL(KIND=2)' function.
-
-A: `REAL(KIND=2)'; scalar; INTENT(IN).
-
-P: `REAL(KIND=2)'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Archaic form of `MOD()' that is specific to one type for A. *Note
-Mod Intrinsic::.
-
-
-File: g77.info, Node: DNInt Intrinsic, Next: Dot_Product Intrinsic, Prev: DMod Intrinsic, Up: Table of Intrinsic Functions
-
-DNInt Intrinsic
-...............
-
- DNInt(A)
-
-DNInt: `REAL(KIND=2)' function.
-
-A: `REAL(KIND=2)'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Archaic form of `ANINT()' that is specific to one type for A. *Note
-ANInt Intrinsic::.
-
-
-File: g77.info, Node: Dot_Product Intrinsic, Next: DProd Intrinsic, Prev: DNInt Intrinsic, Up: Table of Intrinsic Functions
-
-Dot_Product Intrinsic
-.....................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL Dot_Product' to use this name
-for an external procedure.
-
-
-File: g77.info, Node: DProd Intrinsic, Next: DSign Intrinsic, Prev: Dot_Product Intrinsic, Up: Table of Intrinsic Functions
-
-DProd Intrinsic
-...............
-
- DProd(X, Y)
-
-DProd: `REAL(KIND=2)' function.
-
-X: `REAL(KIND=1)'; scalar; INTENT(IN).
-
-Y: `REAL(KIND=1)'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Returns `DBLE(X)*DBLE(Y)'.
-
-
-File: g77.info, Node: DSign Intrinsic, Next: DSin Intrinsic, Prev: DProd Intrinsic, Up: Table of Intrinsic Functions
-
-DSign Intrinsic
-...............
-
- DSign(A, B)
-
-DSign: `REAL(KIND=2)' function.
-
-A: `REAL(KIND=2)'; scalar; INTENT(IN).
-
-B: `REAL(KIND=2)'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Archaic form of `SIGN()' that is specific to one type for A and B.
-*Note Sign Intrinsic::.
-
-
-File: g77.info, Node: DSin Intrinsic, Next: DSinH Intrinsic, Prev: DSign Intrinsic, Up: Table of Intrinsic Functions
-
-DSin Intrinsic
-..............
-
- DSin(X)
-
-DSin: `REAL(KIND=2)' function.
-
-X: `REAL(KIND=2)'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Archaic form of `SIN()' that is specific to one type for X. *Note
-Sin Intrinsic::.
-
-
-File: g77.info, Node: DSinH Intrinsic, Next: DSqRt Intrinsic, Prev: DSin Intrinsic, Up: Table of Intrinsic Functions
-
-DSinH Intrinsic
-...............
-
- DSinH(X)
-
-DSinH: `REAL(KIND=2)' function.
-
-X: `REAL(KIND=2)'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Archaic form of `SINH()' that is specific to one type for X. *Note
-SinH Intrinsic::.
-
-
-File: g77.info, Node: DSqRt Intrinsic, Next: DTan Intrinsic, Prev: DSinH Intrinsic, Up: Table of Intrinsic Functions
-
-DSqRt Intrinsic
-...............
-
- DSqRt(X)
-
-DSqRt: `REAL(KIND=2)' function.
-
-X: `REAL(KIND=2)'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Archaic form of `SQRT()' that is specific to one type for X. *Note
-SqRt Intrinsic::.
-
-
-File: g77.info, Node: DTan Intrinsic, Next: DTanH Intrinsic, Prev: DSqRt Intrinsic, Up: Table of Intrinsic Functions
-
-DTan Intrinsic
-..............
-
- DTan(X)
-
-DTan: `REAL(KIND=2)' function.
-
-X: `REAL(KIND=2)'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Archaic form of `TAN()' that is specific to one type for X. *Note
-Tan Intrinsic::.
-
-
-File: g77.info, Node: DTanH Intrinsic, Next: Dtime Intrinsic (subroutine), Prev: DTan Intrinsic, Up: Table of Intrinsic Functions
-
-DTanH Intrinsic
-...............
-
- DTanH(X)
-
-DTanH: `REAL(KIND=2)' function.
-
-X: `REAL(KIND=2)'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Archaic form of `TANH()' that is specific to one type for X. *Note
-TanH Intrinsic::.
-
-
-File: g77.info, Node: Dtime Intrinsic (subroutine), Next: EOShift Intrinsic, Prev: DTanH Intrinsic, Up: Table of Intrinsic Functions
-
-Dtime Intrinsic (subroutine)
-............................
-
- CALL Dtime(RESULT, TARRAY)
-
-RESULT: `REAL(KIND=1)'; scalar; INTENT(OUT).
-
-TARRAY: `REAL(KIND=1)'; DIMENSION(2); INTENT(OUT).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Initially, return the number of seconds of runtime since the start
-of the process's execution in RESULT, and the user and system
-components of this in `TARRAY(1)' and `TARRAY(2)' respectively. The
-value of RESULT is equal to `TARRAY(1) + TARRAY(2)'.
-
- Subsequent invocations of `DTIME()' set values based on accumulations
-since the previous invocation.
-
- Some non-GNU implementations of Fortran provide this intrinsic as
-only a function, not as a subroutine.
-
- For information on other intrinsics with the same name: *Note Dtime
-Intrinsic (function)::.
-
-
-File: g77.info, Node: EOShift Intrinsic, Next: Epsilon Intrinsic, Prev: Dtime Intrinsic (subroutine), Up: Table of Intrinsic Functions
-
-EOShift Intrinsic
-.................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL EOShift' to use this name for
-an external procedure.
-
-
-File: g77.info, Node: Epsilon Intrinsic, Next: ErF Intrinsic, Prev: EOShift Intrinsic, Up: Table of Intrinsic Functions
-
-Epsilon Intrinsic
-.................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL Epsilon' to use this name for
-an external procedure.
-
-
-File: g77.info, Node: ErF Intrinsic, Next: ErFC Intrinsic, Prev: Epsilon Intrinsic, Up: Table of Intrinsic Functions
-
-ErF Intrinsic
-.............
-
- ErF(X)
-
-ErF: `REAL' function, the `KIND=' value of the type being that of
-argument X.
-
-X: `REAL'; scalar; INTENT(IN).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Returns the error function of X. See `erf(3m)', which provides the
-implementation.
-
-
-File: g77.info, Node: ErFC Intrinsic, Next: ETime Intrinsic (subroutine), Prev: ErF Intrinsic, Up: Table of Intrinsic Functions
-
-ErFC Intrinsic
-..............
-
- ErFC(X)
-
-ErFC: `REAL' function, the `KIND=' value of the type being that of
-argument X.
-
-X: `REAL'; scalar; INTENT(IN).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Returns the complementary error function of X: `ERFC(R) = 1 -
-ERF(R)' (except that the result may be more accurate than explicitly
-evaluating that formulae would give). See `erfc(3m)', which provides
-the implementation.
-
-
-File: g77.info, Node: ETime Intrinsic (subroutine), Next: ETime Intrinsic (function), Prev: ErFC Intrinsic, Up: Table of Intrinsic Functions
-
-ETime Intrinsic (subroutine)
-............................
-
- CALL ETime(RESULT, TARRAY)
-
-RESULT: `REAL(KIND=1)'; scalar; INTENT(OUT).
-
-TARRAY: `REAL(KIND=1)'; DIMENSION(2); INTENT(OUT).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Return the number of seconds of runtime since the start of the
-process's execution in RESULT, and the user and system components of
-this in `TARRAY(1)' and `TARRAY(2)' respectively. The value of RESULT
-is equal to `TARRAY(1) + TARRAY(2)'.
-
- Some non-GNU implementations of Fortran provide this intrinsic as
-only a function, not as a subroutine.
-
- For information on other intrinsics with the same name: *Note ETime
-Intrinsic (function)::.
-
-
-File: g77.info, Node: ETime Intrinsic (function), Next: Exit Intrinsic, Prev: ETime Intrinsic (subroutine), Up: Table of Intrinsic Functions
-
-ETime Intrinsic (function)
-..........................
-
- ETime(TARRAY)
-
-ETime: `REAL(KIND=1)' function.
-
-TARRAY: `REAL(KIND=1)'; DIMENSION(2); INTENT(OUT).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Return the number of seconds of runtime since the start of the
-process's execution as the function value, and the user and system
-components of this in `TARRAY(1)' and `TARRAY(2)' respectively. The
-functions' value is equal to `TARRAY(1) + TARRAY(2)'.
-
- For information on other intrinsics with the same name: *Note ETime
-Intrinsic (subroutine)::.
-
-
-File: g77.info, Node: Exit Intrinsic, Next: Exp Intrinsic, Prev: ETime Intrinsic (function), Up: Table of Intrinsic Functions
-
-Exit Intrinsic
-..............
-
- CALL Exit(STATUS)
-
-STATUS: `INTEGER'; OPTIONAL; scalar; INTENT(IN).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Exit the program with status STATUS after closing open Fortran I/O
-units and otherwise behaving as `exit(2)'. If STATUS is omitted the
-canonical `success' value will be returned to the system.
-
-
-File: g77.info, Node: Exp Intrinsic, Next: Exponent Intrinsic, Prev: Exit Intrinsic, Up: Table of Intrinsic Functions
-
-Exp Intrinsic
-.............
-
- Exp(X)
-
-Exp: `REAL' or `COMPLEX' function, the exact type being that of
-argument X.
-
-X: `REAL' or `COMPLEX'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Returns `E**X', where E is approximately 2.7182818.
-
- *Note Log Intrinsic::, for the inverse of this function.
-
-
-File: g77.info, Node: Exponent Intrinsic, Next: Fdate Intrinsic (subroutine), Prev: Exp Intrinsic, Up: Table of Intrinsic Functions
-
-Exponent Intrinsic
-..................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL Exponent' to use this name for
-an external procedure.
-
-
-File: g77.info, Node: Fdate Intrinsic (subroutine), Next: Fdate Intrinsic (function), Prev: Exponent Intrinsic, Up: Table of Intrinsic Functions
-
-Fdate Intrinsic (subroutine)
-............................
-
- CALL Fdate(DATE)
-
-DATE: `CHARACTER'; scalar; INTENT(OUT).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Returns the current date (using the same format as `CTIME()') in
-DATE.
-
- Equivalent to:
-
- CALL CTIME(DATE, TIME8())
-
- *Note CTime Intrinsic (subroutine)::.
-
- Some non-GNU implementations of Fortran provide this intrinsic as
-only a function, not as a subroutine.
-
- For information on other intrinsics with the same name: *Note Fdate
-Intrinsic (function)::.
-
-
-File: g77.info, Node: Fdate Intrinsic (function), Next: FGet Intrinsic (subroutine), Prev: Fdate Intrinsic (subroutine), Up: Table of Intrinsic Functions
-
-Fdate Intrinsic (function)
-..........................
-
- Fdate()
-
-Fdate: `CHARACTER*(*)' function.
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Returns the current date (using the same format as `CTIME()').
-
- Equivalent to:
-
- CTIME(TIME8())
-
- *Note CTime Intrinsic (function)::.
-
- For information on other intrinsics with the same name: *Note Fdate
-Intrinsic (subroutine)::.
-
-
-File: g77.info, Node: FGet Intrinsic (subroutine), Next: FGetC Intrinsic (subroutine), Prev: Fdate Intrinsic (function), Up: Table of Intrinsic Functions
-
-FGet Intrinsic (subroutine)
-...........................
-
- CALL FGet(C, STATUS)
-
-C: `CHARACTER'; scalar; INTENT(OUT).
-
-STATUS: `INTEGER(KIND=1)'; OPTIONAL; scalar; INTENT(OUT).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Reads a single character into C in stream mode from unit 5
-(by-passing normal formatted output) using `getc(3)'. Returns in
-STATUS 0 on success, -1 on end-of-file, and the error code from
-`ferror(3)' otherwise.
-
- Stream I/O should not be mixed with normal record-oriented
-(formatted or unformatted) I/O on the same unit; the results are
-unpredictable.
-
- For information on other intrinsics with the same name: *Note FGet
-Intrinsic (function)::.
-
-
-File: g77.info, Node: FGetC Intrinsic (subroutine), Next: Float Intrinsic, Prev: FGet Intrinsic (subroutine), Up: Table of Intrinsic Functions
-
-FGetC Intrinsic (subroutine)
-............................
-
- CALL FGetC(UNIT, C, STATUS)
-
-UNIT: `INTEGER'; scalar; INTENT(IN).
-
-C: `CHARACTER'; scalar; INTENT(OUT).
-
-STATUS: `INTEGER(KIND=1)'; OPTIONAL; scalar; INTENT(OUT).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Reads a single character into C in stream mode from unit UNIT
-(by-passing normal formatted output) using `getc(3)'. Returns in
-STATUS 0 on success, -1 on end-of-file, and the error code from
-`ferror(3)' otherwise.
-
- Stream I/O should not be mixed with normal record-oriented
-(formatted or unformatted) I/O on the same unit; the results are
-unpredictable.
-
- For information on other intrinsics with the same name: *Note FGetC
-Intrinsic (function)::.
-
-
-File: g77.info, Node: Float Intrinsic, Next: Floor Intrinsic, Prev: FGetC Intrinsic (subroutine), Up: Table of Intrinsic Functions
-
-Float Intrinsic
-...............
-
- Float(A)
-
-Float: `REAL(KIND=1)' function.
-
-A: `INTEGER'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Archaic form of `REAL()' that is specific to one type for A. *Note
-Real Intrinsic::.
-
-
-File: g77.info, Node: Floor Intrinsic, Next: Flush Intrinsic, Prev: Float Intrinsic, Up: Table of Intrinsic Functions
-
-Floor Intrinsic
-...............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL Floor' to use this name for an
-external procedure.
-
-
-File: g77.info, Node: Flush Intrinsic, Next: FNum Intrinsic, Prev: Floor Intrinsic, Up: Table of Intrinsic Functions
-
-Flush Intrinsic
-...............
-
- CALL Flush(UNIT)
-
-UNIT: `INTEGER'; OPTIONAL; scalar; INTENT(IN).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Flushes Fortran unit(s) currently open for output. Without the
-optional argument, all such units are flushed, otherwise just the unit
-specified by UNIT.
-
- Some non-GNU implementations of Fortran provide this intrinsic as a
-library procedure that might or might not support the (optional) UNIT
-argument.
-
-
-File: g77.info, Node: FNum Intrinsic, Next: FPut Intrinsic (subroutine), Prev: Flush Intrinsic, Up: Table of Intrinsic Functions
-
-FNum Intrinsic
-..............
-
- FNum(UNIT)
-
-FNum: `INTEGER(KIND=1)' function.
-
-UNIT: `INTEGER'; scalar; INTENT(IN).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Returns the Unix file descriptor number corresponding to the open
-Fortran I/O unit UNIT. This could be passed to an interface to C I/O
-routines.
-
-
-File: g77.info, Node: FPut Intrinsic (subroutine), Next: FPutC Intrinsic (subroutine), Prev: FNum Intrinsic, Up: Table of Intrinsic Functions
-
-FPut Intrinsic (subroutine)
-...........................
-
- CALL FPut(C, STATUS)
-
-C: `CHARACTER'; scalar; INTENT(IN).
-
-STATUS: `INTEGER(KIND=1)'; OPTIONAL; scalar; INTENT(OUT).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Writes the single character C in stream mode to unit 6 (by-passing
-normal formatted output) using `putc(3)'. Returns in STATUS 0 on
-success, the error code from `ferror(3)' otherwise.
-
- Stream I/O should not be mixed with normal record-oriented
-(formatted or unformatted) I/O on the same unit; the results are
-unpredictable.
-
- For information on other intrinsics with the same name: *Note FPut
-Intrinsic (function)::.
-
-
-File: g77.info, Node: FPutC Intrinsic (subroutine), Next: Fraction Intrinsic, Prev: FPut Intrinsic (subroutine), Up: Table of Intrinsic Functions
-
-FPutC Intrinsic (subroutine)
-............................
-
- CALL FPutC(UNIT, C, STATUS)
-
-UNIT: `INTEGER'; scalar; INTENT(IN).
-
-C: `CHARACTER'; scalar; INTENT(IN).
-
-STATUS: `INTEGER(KIND=1)'; OPTIONAL; scalar; INTENT(OUT).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Writes the single character UNIT in stream mode to unit 6
-(by-passing normal formatted output) using `putc(3)'. Returns in C 0
-on success, the error code from `ferror(3)' otherwise.
-
- Stream I/O should not be mixed with normal record-oriented
-(formatted or unformatted) I/O on the same unit; the results are
-unpredictable.
-
- For information on other intrinsics with the same name: *Note FPutC
-Intrinsic (function)::.
-
-
-File: g77.info, Node: Fraction Intrinsic, Next: FSeek Intrinsic, Prev: FPutC Intrinsic (subroutine), Up: Table of Intrinsic Functions
-
-Fraction Intrinsic
-..................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL Fraction' to use this name for
-an external procedure.
-
-
-File: g77.info, Node: FSeek Intrinsic, Next: FStat Intrinsic (subroutine), Prev: Fraction Intrinsic, Up: Table of Intrinsic Functions
-
-FSeek Intrinsic
-...............
-
- CALL FSeek(UNIT, OFFSET, WHENCE, ERRLAB)
-
-UNIT: `INTEGER'; scalar; INTENT(IN).
-
-OFFSET: `INTEGER'; scalar; INTENT(IN).
-
-WHENCE: `INTEGER'; scalar; INTENT(IN).
-
-ERRLAB: `*LABEL', where LABEL is the label of an executable statement;
-OPTIONAL.
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Attempts to move Fortran unit UNIT to the specified OFFSET: absolute
-offset if OFFSET=0; relative to the current offset if OFFSET=1;
-relative to the end of the file if OFFSET=2. It branches to label
-WHENCE if UNIT is not open or if the call otherwise fails.
-
-
-File: g77.info, Node: FStat Intrinsic (subroutine), Next: FStat Intrinsic (function), Prev: FSeek Intrinsic, Up: Table of Intrinsic Functions
-
-FStat Intrinsic (subroutine)
-............................
-
- CALL FStat(UNIT, SARRAY, STATUS)
-
-UNIT: `INTEGER'; scalar; INTENT(IN).
-
-SARRAY: `INTEGER(KIND=1)'; DIMENSION(13); INTENT(OUT).
-
-STATUS: `INTEGER(KIND=1)'; OPTIONAL; scalar; INTENT(OUT).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Obtains data about the file open on Fortran I/O unit UNIT and places
-them in the array SARRAY. The values in this array are extracted from
-the `stat' structure as returned by `fstat(2)' q.v., as follows:
-
- 1. File mode
-
- 2. Inode number
-
- 3. ID of device containing directory entry for file
-
- 4. Device id (if relevant)
-
- 5. Number of links
-
- 6. Owner's uid
-
- 7. Owner's gid
-
- 8. File size (bytes)
-
- 9. Last access time
-
- 10. Last modification time
-
- 11. Last file status change time
-
- 12. Preferred I/O block size
-
- 13. Number of blocks allocated
-
- Not all these elements are relevant on all systems. If an element
-is not relevant, it is returned as 0.
-
- If the STATUS argument is supplied, it contains 0 on success or a
-non-zero error code upon return.
-
- Some non-GNU implementations of Fortran provide this intrinsic as
-only a function, not as a subroutine, or do not support the (optional)
-STATUS argument.
-
- For information on other intrinsics with the same name: *Note FStat
-Intrinsic (function)::.
-
-
-File: g77.info, Node: FStat Intrinsic (function), Next: FTell Intrinsic (subroutine), Prev: FStat Intrinsic (subroutine), Up: Table of Intrinsic Functions
-
-FStat Intrinsic (function)
-..........................
-
- FStat(UNIT, SARRAY)
-
-FStat: `INTEGER(KIND=1)' function.
-
-UNIT: `INTEGER'; scalar; INTENT(IN).
-
-SARRAY: `INTEGER(KIND=1)'; DIMENSION(13); INTENT(OUT).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Obtains data about the file open on Fortran I/O unit UNIT and places
-them in the array SARRAY. The values in this array are extracted from
-the `stat' structure as returned by `fstat(2)' q.v., as follows:
-
- 1. File mode
-
- 2. Inode number
-
- 3. ID of device containing directory entry for file
-
- 4. Device id (if relevant)
-
- 5. Number of links
-
- 6. Owner's uid
-
- 7. Owner's gid
-
- 8. File size (bytes)
-
- 9. Last access time
-
- 10. Last modification time
-
- 11. Last file status change time
-
- 12. Preferred I/O block size
-
- 13. Number of blocks allocated
-
- Not all these elements are relevant on all systems. If an element
-is not relevant, it is returned as 0.
-
- Returns 0 on success or a non-zero error code.
-
- For information on other intrinsics with the same name: *Note FStat
-Intrinsic (subroutine)::.
-
-
-File: g77.info, Node: FTell Intrinsic (subroutine), Next: FTell Intrinsic (function), Prev: FStat Intrinsic (function), Up: Table of Intrinsic Functions
-
-FTell Intrinsic (subroutine)
-............................
-
- CALL FTell(UNIT, OFFSET)
-
-UNIT: `INTEGER'; scalar; INTENT(IN).
-
-OFFSET: `INTEGER(KIND=1)'; scalar; INTENT(OUT).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Sets OFFSET to the current offset of Fortran unit UNIT (or to -1 if
-UNIT is not open).
-
- Some non-GNU implementations of Fortran provide this intrinsic as
-only a function, not as a subroutine.
-
- For information on other intrinsics with the same name: *Note FTell
-Intrinsic (function)::.
-
-
-File: g77.info, Node: FTell Intrinsic (function), Next: GError Intrinsic, Prev: FTell Intrinsic (subroutine), Up: Table of Intrinsic Functions
-
-FTell Intrinsic (function)
-..........................
-
- FTell(UNIT)
-
-FTell: `INTEGER(KIND=1)' function.
-
-UNIT: `INTEGER'; scalar; INTENT(IN).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Returns the current offset of Fortran unit UNIT (or -1 if UNIT is
-not open).
-
- For information on other intrinsics with the same name: *Note FTell
-Intrinsic (subroutine)::.
-
-
-File: g77.info, Node: GError Intrinsic, Next: GetArg Intrinsic, Prev: FTell Intrinsic (function), Up: Table of Intrinsic Functions
-
-GError Intrinsic
-................
-
- CALL GError(MESSAGE)
-
-MESSAGE: `CHARACTER'; scalar; INTENT(OUT).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Returns the system error message corresponding to the last system
-error (C `errno').
-
-
-File: g77.info, Node: GetArg Intrinsic, Next: GetCWD Intrinsic (subroutine), Prev: GError Intrinsic, Up: Table of Intrinsic Functions
-
-GetArg Intrinsic
-................
-
- CALL GetArg(POS, VALUE)
-
-POS: `INTEGER'; scalar; INTENT(IN).
-
-VALUE: `CHARACTER'; scalar; INTENT(OUT).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Sets VALUE to the POS-th command-line argument (or to all blanks if
-there are fewer than VALUE command-line arguments); `CALL GETARG(0,
-VALUE)' sets VALUE to the name of the program (on systems that support
-this feature).
-
- *Note IArgC Intrinsic::, for information on how to get the number of
-arguments.
-
-
-File: g77.info, Node: GetCWD Intrinsic (subroutine), Next: GetCWD Intrinsic (function), Prev: GetArg Intrinsic, Up: Table of Intrinsic Functions
-
-GetCWD Intrinsic (subroutine)
-.............................
-
- CALL GetCWD(NAME, STATUS)
-
-NAME: `CHARACTER'; scalar; INTENT(OUT).
-
-STATUS: `INTEGER(KIND=1)'; OPTIONAL; scalar; INTENT(OUT).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Places the current working directory in NAME. If the STATUS
-argument is supplied, it contains 0 success or a non-zero error code
-upon return (`ENOSYS' if the system does not provide `getcwd(3)' or
-`getwd(3)').
-
- Some non-GNU implementations of Fortran provide this intrinsic as
-only a function, not as a subroutine, or do not support the (optional)
-STATUS argument.
-
- For information on other intrinsics with the same name: *Note GetCWD
-Intrinsic (function)::.
-
-
-File: g77.info, Node: GetCWD Intrinsic (function), Next: GetEnv Intrinsic, Prev: GetCWD Intrinsic (subroutine), Up: Table of Intrinsic Functions
-
-GetCWD Intrinsic (function)
-...........................
-
- GetCWD(NAME)
-
-GetCWD: `INTEGER(KIND=1)' function.
-
-NAME: `CHARACTER'; scalar; INTENT(OUT).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Places the current working directory in NAME. Returns 0 on success,
-otherwise a non-zero error code (`ENOSYS' if the system does not
-provide `getcwd(3)' or `getwd(3)').
-
- For information on other intrinsics with the same name: *Note GetCWD
-Intrinsic (subroutine)::.
-
-
-File: g77.info, Node: GetEnv Intrinsic, Next: GetGId Intrinsic, Prev: GetCWD Intrinsic (function), Up: Table of Intrinsic Functions
-
-GetEnv Intrinsic
-................
-
- CALL GetEnv(NAME, VALUE)
-
-NAME: `CHARACTER'; scalar; INTENT(IN).
-
-VALUE: `CHARACTER'; scalar; INTENT(OUT).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Sets VALUE to the value of environment variable given by the value
-of NAME (`$name' in shell terms) or to blanks if `$name' has not been
-set. A null character (`CHAR(0)') marks the end of the name in
-NAME--otherwise, trailing blanks in NAME are ignored.
-
-
-File: g77.info, Node: GetGId Intrinsic, Next: GetLog Intrinsic, Prev: GetEnv Intrinsic, Up: Table of Intrinsic Functions
-
-GetGId Intrinsic
-................
-
- GetGId()
-
-GetGId: `INTEGER(KIND=1)' function.
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Returns the group id for the current process.
-
-
-File: g77.info, Node: GetLog Intrinsic, Next: GetPId Intrinsic, Prev: GetGId Intrinsic, Up: Table of Intrinsic Functions
-
-GetLog Intrinsic
-................
-
- CALL GetLog(LOGIN)
-
-LOGIN: `CHARACTER'; scalar; INTENT(OUT).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Returns the login name for the process in LOGIN.
-
-
-File: g77.info, Node: GetPId Intrinsic, Next: GetUId Intrinsic, Prev: GetLog Intrinsic, Up: Table of Intrinsic Functions
-
-GetPId Intrinsic
-................
-
- GetPId()
-
-GetPId: `INTEGER(KIND=1)' function.
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Returns the process id for the current process.
-
-
-File: g77.info, Node: GetUId Intrinsic, Next: GMTime Intrinsic, Prev: GetPId Intrinsic, Up: Table of Intrinsic Functions
-
-GetUId Intrinsic
-................
-
- GetUId()
-
-GetUId: `INTEGER(KIND=1)' function.
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Returns the user id for the current process.
-
-
-File: g77.info, Node: GMTime Intrinsic, Next: HostNm Intrinsic (subroutine), Prev: GetUId Intrinsic, Up: Table of Intrinsic Functions
-
-GMTime Intrinsic
-................
-
- CALL GMTime(STIME, TARRAY)
-
-STIME: `INTEGER(KIND=1)'; scalar; INTENT(IN).
-
-TARRAY: `INTEGER(KIND=1)'; DIMENSION(9); INTENT(OUT).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Given a system time value STIME, fills TARRAY with values extracted
-from it appropriate to the GMT time zone using `gmtime(3)'.
-
- The array elements are as follows:
-
- 1. Seconds after the minute, range 0-59 or 0-61 to allow for leap
- seconds
-
- 2. Minutes after the hour, range 0-59
-
- 3. Hours past midnight, range 0-23
-
- 4. Day of month, range 0-31
-
- 5. Number of months since January, range 0-12
-
- 6. Years since 1900
-
- 7. Number of days since Sunday, range 0-6
-
- 8. Days since January 1
-
- 9. Daylight savings indicator: positive if daylight savings is in
- effect, zero if not, and negative if the information isn't
- available.
-
-
-File: g77.info, Node: HostNm Intrinsic (subroutine), Next: HostNm Intrinsic (function), Prev: GMTime Intrinsic, Up: Table of Intrinsic Functions
-
-HostNm Intrinsic (subroutine)
-.............................
-
- CALL HostNm(NAME, STATUS)
-
-NAME: `CHARACTER'; scalar; INTENT(OUT).
-
-STATUS: `INTEGER(KIND=1)'; OPTIONAL; scalar; INTENT(OUT).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Fills NAME with the system's host name returned by `gethostname(2)'.
-If the STATUS argument is supplied, it contains 0 on success or a
-non-zero error code upon return (`ENOSYS' if the system does not
-provide `gethostname(2)').
-
- Some non-GNU implementations of Fortran provide this intrinsic as
-only a function, not as a subroutine, or do not support the (optional)
-STATUS argument.
-
- For information on other intrinsics with the same name: *Note HostNm
-Intrinsic (function)::.
-
-
-File: g77.info, Node: HostNm Intrinsic (function), Next: Huge Intrinsic, Prev: HostNm Intrinsic (subroutine), Up: Table of Intrinsic Functions
-
-HostNm Intrinsic (function)
-...........................
-
- HostNm(NAME)
-
-HostNm: `INTEGER(KIND=1)' function.
-
-NAME: `CHARACTER'; scalar; INTENT(OUT).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Fills NAME with the system's host name returned by `gethostname(2)',
-returning 0 on success or a non-zero error code (`ENOSYS' if the system
-does not provide `gethostname(2)').
-
- For information on other intrinsics with the same name: *Note HostNm
-Intrinsic (subroutine)::.
-
-
-File: g77.info, Node: Huge Intrinsic, Next: IAbs Intrinsic, Prev: HostNm Intrinsic (function), Up: Table of Intrinsic Functions
-
-Huge Intrinsic
-..............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL Huge' to use this name for an
-external procedure.
-
-
-File: g77.info, Node: IAbs Intrinsic, Next: IAChar Intrinsic, Prev: Huge Intrinsic, Up: Table of Intrinsic Functions
-
-IAbs Intrinsic
-..............
-
- IAbs(A)
-
-IAbs: `INTEGER(KIND=1)' function.
-
-A: `INTEGER(KIND=1)'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Archaic form of `ABS()' that is specific to one type for A. *Note
-Abs Intrinsic::.
-
-
-File: g77.info, Node: IAChar Intrinsic, Next: IAnd Intrinsic, Prev: IAbs Intrinsic, Up: Table of Intrinsic Functions
-
-IAChar Intrinsic
-................
-
- IAChar(C)
-
-IAChar: `INTEGER(KIND=1)' function.
-
-C: `CHARACTER'; scalar; INTENT(IN).
-
-Intrinsic groups: `f2c', `f90'.
-
-Description:
-
- Returns the code for the ASCII character in the first character
-position of C.
-
- *Note AChar Intrinsic::, for the inverse of this function.
-
- *Note IChar Intrinsic::, for the function corresponding to the
-system's native character set.
-
-
-File: g77.info, Node: IAnd Intrinsic, Next: IArgC Intrinsic, Prev: IAChar Intrinsic, Up: Table of Intrinsic Functions
-
-IAnd Intrinsic
-..............
-
- IAnd(I, J)
-
-IAnd: `INTEGER' function, the exact type being the result of
-cross-promoting the types of all the arguments.
-
-I: `INTEGER'; scalar; INTENT(IN).
-
-J: `INTEGER'; scalar; INTENT(IN).
-
-Intrinsic groups: `mil', `f90', `vxt'.
-
-Description:
-
- Returns value resulting from boolean AND of pair of bits in each of
-I and J.
-
-
-File: g77.info, Node: IArgC Intrinsic, Next: IBClr Intrinsic, Prev: IAnd Intrinsic, Up: Table of Intrinsic Functions
-
-IArgC Intrinsic
-...............
-
- IArgC()
-
-IArgC: `INTEGER(KIND=1)' function.
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Returns the number of command-line arguments.
-
- This count does not include the specification of the program name
-itself.
-
-
-File: g77.info, Node: IBClr Intrinsic, Next: IBits Intrinsic, Prev: IArgC Intrinsic, Up: Table of Intrinsic Functions
-
-IBClr Intrinsic
-...............
-
- IBClr(I, POS)
-
-IBClr: `INTEGER' function, the `KIND=' value of the type being that of
-argument I.
-
-I: `INTEGER'; scalar; INTENT(IN).
-
-POS: `INTEGER'; scalar; INTENT(IN).
-
-Intrinsic groups: `mil', `f90', `vxt'.
-
-Description:
-
- Returns the value of I with bit POS cleared (set to zero). *Note
-BTest Intrinsic:: for information on bit positions.
-
-
-File: g77.info, Node: IBits Intrinsic, Next: IBSet Intrinsic, Prev: IBClr Intrinsic, Up: Table of Intrinsic Functions
-
-IBits Intrinsic
-...............
-
- IBits(I, POS, LEN)
-
-IBits: `INTEGER' function, the `KIND=' value of the type being that of
-argument I.
-
-I: `INTEGER'; scalar; INTENT(IN).
-
-POS: `INTEGER'; scalar; INTENT(IN).
-
-LEN: `INTEGER'; scalar; INTENT(IN).
-
-Intrinsic groups: `mil', `f90', `vxt'.
-
-Description:
-
- Extracts a subfield of length LEN from I, starting from bit position
-POS and extending left for LEN bits. The result is right-justified and
-the remaining bits are zeroed. The value of `POS+LEN' must be less
-than or equal to the value `BIT_SIZE(I)'. *Note Bit_Size Intrinsic::.
-
-
-File: g77.info, Node: IBSet Intrinsic, Next: IChar Intrinsic, Prev: IBits Intrinsic, Up: Table of Intrinsic Functions
-
-IBSet Intrinsic
-...............
-
- IBSet(I, POS)
-
-IBSet: `INTEGER' function, the `KIND=' value of the type being that of
-argument I.
-
-I: `INTEGER'; scalar; INTENT(IN).
-
-POS: `INTEGER'; scalar; INTENT(IN).
-
-Intrinsic groups: `mil', `f90', `vxt'.
-
-Description:
-
- Returns the value of I with bit POS set (to one). *Note BTest
-Intrinsic:: for information on bit positions.
-
-
-File: g77.info, Node: IChar Intrinsic, Next: IDate Intrinsic (UNIX), Prev: IBSet Intrinsic, Up: Table of Intrinsic Functions
-
-IChar Intrinsic
-...............
-
- IChar(C)
-
-IChar: `INTEGER(KIND=1)' function.
-
-C: `CHARACTER'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Returns the code for the character in the first character position
-of C.
-
- Because the system's native character set is used, the
-correspondence between character and their codes is not necessarily the
-same between GNU Fortran implementations.
-
- Note that no intrinsic exists to convert a printable character
-string to a numerical value. For example, there is no intrinsic that,
-given the `CHARACTER' value `'154'', returns an `INTEGER' or `REAL'
-value with the value `154'.
-
- Instead, you can use internal-file I/O to do this kind of conversion.
-For example:
-
- INTEGER VALUE
- CHARACTER*10 STRING
- STRING = '154'
- READ (STRING, '(I10)'), VALUE
- PRINT *, VALUE
- END
-
- The above program, when run, prints:
-
- 154
-
- *Note Char Intrinsic::, for the inverse of the `ICHAR' function.
-
- *Note IAChar Intrinsic::, for the function corresponding to the
-ASCII character set.
-
-
-File: g77.info, Node: IDate Intrinsic (UNIX), Next: IDiM Intrinsic, Prev: IChar Intrinsic, Up: Table of Intrinsic Functions
-
-IDate Intrinsic (UNIX)
-......................
-
- CALL IDate(TARRAY)
-
-TARRAY: `INTEGER(KIND=1)'; DIMENSION(3); INTENT(OUT).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Fills TARRAY with the numerical values at the current local time of
-day, month (in the range 1-12), and year in elements 1, 2, and 3,
-respectively. The year has four significant digits.
-
- For information on other intrinsics with the same name: *Note IDate
-Intrinsic (VXT)::.
-
-
-File: g77.info, Node: IDiM Intrinsic, Next: IDInt Intrinsic, Prev: IDate Intrinsic (UNIX), Up: Table of Intrinsic Functions
-
-IDiM Intrinsic
-..............
-
- IDiM(X, Y)
-
-IDiM: `INTEGER(KIND=1)' function.
-
-X: `INTEGER(KIND=1)'; scalar; INTENT(IN).
-
-Y: `INTEGER(KIND=1)'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Archaic form of `DIM()' that is specific to one type for X and Y.
-*Note DiM Intrinsic::.
-
-
-File: g77.info, Node: IDInt Intrinsic, Next: IDNInt Intrinsic, Prev: IDiM Intrinsic, Up: Table of Intrinsic Functions
-
-IDInt Intrinsic
-...............
-
- IDInt(A)
-
-IDInt: `INTEGER(KIND=1)' function.
-
-A: `REAL(KIND=2)'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Archaic form of `INT()' that is specific to one type for A. *Note
-Int Intrinsic::.
-
-
-File: g77.info, Node: IDNInt Intrinsic, Next: IEOr Intrinsic, Prev: IDInt Intrinsic, Up: Table of Intrinsic Functions
-
-IDNInt Intrinsic
-................
-
- IDNInt(A)
-
-IDNInt: `INTEGER(KIND=1)' function.
-
-A: `REAL(KIND=2)'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Archaic form of `NINT()' that is specific to one type for A. *Note
-NInt Intrinsic::.
-
-
-File: g77.info, Node: IEOr Intrinsic, Next: IErrNo Intrinsic, Prev: IDNInt Intrinsic, Up: Table of Intrinsic Functions
-
-IEOr Intrinsic
-..............
-
- IEOr(I, J)
-
-IEOr: `INTEGER' function, the exact type being the result of
-cross-promoting the types of all the arguments.
-
-I: `INTEGER'; scalar; INTENT(IN).
-
-J: `INTEGER'; scalar; INTENT(IN).
-
-Intrinsic groups: `mil', `f90', `vxt'.
-
-Description:
-
- Returns value resulting from boolean exclusive-OR of pair of bits in
-each of I and J.
-
-
-File: g77.info, Node: IErrNo Intrinsic, Next: IFix Intrinsic, Prev: IEOr Intrinsic, Up: Table of Intrinsic Functions
-
-IErrNo Intrinsic
-................
-
- IErrNo()
-
-IErrNo: `INTEGER(KIND=1)' function.
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Returns the last system error number (corresponding to the C
-`errno').
-
-
-File: g77.info, Node: IFix Intrinsic, Next: Imag Intrinsic, Prev: IErrNo Intrinsic, Up: Table of Intrinsic Functions
-
-IFix Intrinsic
-..............
-
- IFix(A)
-
-IFix: `INTEGER(KIND=1)' function.
-
-A: `REAL(KIND=1)'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Archaic form of `INT()' that is specific to one type for A. *Note
-Int Intrinsic::.
-
-
-File: g77.info, Node: Imag Intrinsic, Next: ImagPart Intrinsic, Prev: IFix Intrinsic, Up: Table of Intrinsic Functions
-
-Imag Intrinsic
-..............
-
- Imag(Z)
-
-Imag: `REAL' function, the `KIND=' value of the type being that of
-argument Z.
-
-Z: `COMPLEX'; scalar; INTENT(IN).
-
-Intrinsic groups: `f2c'.
-
-Description:
-
- The imaginary part of Z is returned, without conversion.
-
- *Note:* The way to do this in standard Fortran 90 is `AIMAG(Z)'.
-However, when, for example, Z is `DOUBLE COMPLEX', `AIMAG(Z)' means
-something different for some compilers that are not true Fortran 90
-compilers but offer some extensions standardized by Fortran 90 (such as
-the `DOUBLE COMPLEX' type, also known as `COMPLEX(KIND=2)').
-
- The advantage of `IMAG()' is that, while not necessarily more or
-less portable than `AIMAG()', it is more likely to cause a compiler
-that doesn't support it to produce a diagnostic than generate incorrect
-code.
-
- *Note REAL() and AIMAG() of Complex::, for more information.
-
-
-File: g77.info, Node: ImagPart Intrinsic, Next: Index Intrinsic, Prev: Imag Intrinsic, Up: Table of Intrinsic Functions
-
-ImagPart Intrinsic
-..................
-
- ImagPart(Z)
-
-ImagPart: `REAL' function, the `KIND=' value of the type being that of
-argument Z.
-
-Z: `COMPLEX'; scalar; INTENT(IN).
-
-Intrinsic groups: `gnu'.
-
-Description:
-
- The imaginary part of Z is returned, without conversion.
-
- *Note:* The way to do this in standard Fortran 90 is `AIMAG(Z)'.
-However, when, for example, Z is `DOUBLE COMPLEX', `AIMAG(Z)' means
-something different for some compilers that are not true Fortran 90
-compilers but offer some extensions standardized by Fortran 90 (such as
-the `DOUBLE COMPLEX' type, also known as `COMPLEX(KIND=2)').
-
- The advantage of `IMAGPART()' is that, while not necessarily more or
-less portable than `AIMAG()', it is more likely to cause a compiler
-that doesn't support it to produce a diagnostic than generate incorrect
-code.
-
- *Note REAL() and AIMAG() of Complex::, for more information.
-
-
-File: g77.info, Node: Index Intrinsic, Next: Int Intrinsic, Prev: ImagPart Intrinsic, Up: Table of Intrinsic Functions
-
-Index Intrinsic
-...............
-
- Index(STRING, SUBSTRING)
-
-Index: `INTEGER(KIND=1)' function.
-
-STRING: `CHARACTER'; scalar; INTENT(IN).
-
-SUBSTRING: `CHARACTER'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Returns the position of the start of the first occurrence of string
-SUBSTRING as a substring in STRING, counting from one. If SUBSTRING
-doesn't occur in STRING, zero is returned.
-
-
-File: g77.info, Node: Int Intrinsic, Next: Int2 Intrinsic, Prev: Index Intrinsic, Up: Table of Intrinsic Functions
-
-Int Intrinsic
-.............
-
- Int(A)
-
-Int: `INTEGER(KIND=1)' function.
-
-A: `INTEGER', `REAL', or `COMPLEX'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Returns A with the fractional portion of its magnitude truncated and
-its sign preserved, converted to type `INTEGER(KIND=1)'.
-
- If A is type `COMPLEX', its real part is truncated and converted,
-and its imaginary part is disregarded.
-
- *Note NInt Intrinsic::, for how to convert, rounded to nearest whole
-number.
-
- *Note AInt Intrinsic::, for how to truncate to whole number without
-converting.
-
-
-File: g77.info, Node: Int2 Intrinsic, Next: Int8 Intrinsic, Prev: Int Intrinsic, Up: Table of Intrinsic Functions
-
-Int2 Intrinsic
-..............
-
- Int2(A)
-
-Int2: `INTEGER(KIND=6)' function.
-
-A: `INTEGER'; scalar; INTENT(IN).
-
-Intrinsic groups: `gnu'.
-
-Description:
-
- Returns A with the fractional portion of its magnitude truncated and
-its sign preserved, converted to type `INTEGER(KIND=6)'.
-
- If A is type `COMPLEX', its real part is truncated and converted,
-and its imaginary part is disgregarded.
-
- *Note Int Intrinsic::.
-
- The precise meaning of this intrinsic might change in a future
-version of the GNU Fortran language, as more is learned about how it is
-used.
-
-
-File: g77.info, Node: Int8 Intrinsic, Next: IOr Intrinsic, Prev: Int2 Intrinsic, Up: Table of Intrinsic Functions
-
-Int8 Intrinsic
-..............
-
- Int8(A)
-
-Int8: `INTEGER(KIND=2)' function.
-
-A: `INTEGER'; scalar; INTENT(IN).
-
-Intrinsic groups: `gnu'.
-
-Description:
-
- Returns A with the fractional portion of its magnitude truncated and
-its sign preserved, converted to type `INTEGER(KIND=2)'.
-
- If A is type `COMPLEX', its real part is truncated and converted,
-and its imaginary part is disgregarded.
-
- *Note Int Intrinsic::.
-
- The precise meaning of this intrinsic might change in a future
-version of the GNU Fortran language, as more is learned about how it is
-used.
-
-
-File: g77.info, Node: IOr Intrinsic, Next: IRand Intrinsic, Prev: Int8 Intrinsic, Up: Table of Intrinsic Functions
-
-IOr Intrinsic
-.............
-
- IOr(I, J)
-
-IOr: `INTEGER' function, the exact type being the result of
-cross-promoting the types of all the arguments.
-
-I: `INTEGER'; scalar; INTENT(IN).
-
-J: `INTEGER'; scalar; INTENT(IN).
-
-Intrinsic groups: `mil', `f90', `vxt'.
-
-Description:
-
- Returns value resulting from boolean OR of pair of bits in each of I
-and J.
-
-
-File: g77.info, Node: IRand Intrinsic, Next: IsaTty Intrinsic, Prev: IOr Intrinsic, Up: Table of Intrinsic Functions
-
-IRand Intrinsic
-...............
-
- IRand(FLAG)
-
-IRand: `INTEGER(KIND=1)' function.
-
-FLAG: `INTEGER'; OPTIONAL; scalar; INTENT(IN).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Returns a uniform quasi-random number up to a system-dependent limit.
-If FLAG is 0, the next number in sequence is returned; if FLAG is 1,
-the generator is restarted by calling the UNIX function `srand(0)'; if
-FLAG has any other value, it is used as a new seed with `srand()'.
-
- *Note SRand Intrinsic::.
-
- *Note:* As typically implemented (by the routine of the same name in
-the C library), this random number generator is a very poor one, though
-the BSD and GNU libraries provide a much better implementation than the
-`traditional' one. On a different system you almost certainly want to
-use something better.
-
-
-File: g77.info, Node: IsaTty Intrinsic, Next: IShft Intrinsic, Prev: IRand Intrinsic, Up: Table of Intrinsic Functions
-
-IsaTty Intrinsic
-................
-
- IsaTty(UNIT)
-
-IsaTty: `LOGICAL(KIND=1)' function.
-
-UNIT: `INTEGER'; scalar; INTENT(IN).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Returns `.TRUE.' if and only if the Fortran I/O unit specified by
-UNIT is connected to a terminal device. See `isatty(3)'.
-
-
-File: g77.info, Node: IShft Intrinsic, Next: IShftC Intrinsic, Prev: IsaTty Intrinsic, Up: Table of Intrinsic Functions
-
-IShft Intrinsic
-...............
-
- IShft(I, SHIFT)
-
-IShft: `INTEGER' function, the `KIND=' value of the type being that of
-argument I.
-
-I: `INTEGER'; scalar; INTENT(IN).
-
-SHIFT: `INTEGER'; scalar; INTENT(IN).
-
-Intrinsic groups: `mil', `f90', `vxt'.
-
-Description:
-
- All bits representing I are shifted SHIFT places. `SHIFT.GT.0'
-indicates a left shift, `SHIFT.EQ.0' indicates no shift and
-`SHIFT.LT.0' indicates a right shift. If the absolute value of the
-shift count is greater than `BIT_SIZE(I)', the result is undefined.
-Bits shifted out from the left end or the right end, as the case may be,
-are lost. Zeros are shifted in from the opposite end.
-
- *Note IShftC Intrinsic:: for the circular-shift equivalent.
-
diff --git a/gcc/f/g77.info-9 b/gcc/f/g77.info-9
deleted file mode 100644
index bf0102c6b14..00000000000
--- a/gcc/f/g77.info-9
+++ /dev/null
@@ -1,1844 +0,0 @@
-This is Info file g77.info, produced by Makeinfo version 1.68 from the
-input file g77.texi.
-
- This file explains how to use the GNU Fortran system.
-
- Published by the Free Software Foundation 59 Temple Place - Suite 330
-Boston, MA 02111-1307 USA
-
- Copyright (C) 1995-1997 Free Software Foundation, Inc.
-
- Permission is granted to make and distribute verbatim copies of this
-manual provided the copyright notice and this permission notice are
-preserved on all copies.
-
- Permission is granted to copy and distribute modified versions of
-this manual under the conditions for verbatim copying, provided also
-that the sections entitled "GNU General Public License," "Funding for
-Free Software," and "Protect Your Freedom--Fight `Look And Feel'" are
-included exactly as in the original, and provided that the entire
-resulting derived work is distributed under the terms of a permission
-notice identical to this one.
-
- Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that the sections entitled "GNU General Public
-License," "Funding for Free Software," and "Protect Your Freedom--Fight
-`Look And Feel'", and this permission notice, may be included in
-translations approved by the Free Software Foundation instead of in the
-original English.
-
- Contributed by James Craig Burley (<burley@gnu.ai.mit.edu>).
-Inspired by a first pass at translating `g77-0.5.16/f/DOC' that was
-contributed to Craig by David Ronis (<ronis@onsager.chem.mcgill.ca>).
-
-INFO-DIR-SECTION Fortran Programming
-START-INFO-DIR-ENTRY
-* g77: (g77). The GNU Fortran compilation system.
-END-INFO-DIR-ENTRY
-
-
-File: g77.info, Node: IShftC Intrinsic, Next: ISign Intrinsic, Prev: IShft Intrinsic, Up: Table of Intrinsic Functions
-
-IShftC Intrinsic
-................
-
- IShftC(I, SHIFT, SIZE)
-
-IShftC: `INTEGER' function, the `KIND=' value of the type being that of
-argument I.
-
-I: `INTEGER'; scalar; INTENT(IN).
-
-SHIFT: `INTEGER'; scalar; INTENT(IN).
-
-SIZE: `INTEGER'; scalar; INTENT(IN).
-
-Intrinsic groups: `mil', `f90', `vxt'.
-
-Description:
-
- The rightmost SIZE bits of the argument I are shifted circularly
-SHIFT places, i.e. the bits shifted out of one end are shifted into the
-opposite end. No bits are lost. The unshifted bits of the result are
-the same as the unshifted bits of I. The absolute value of the
-argument SHIFT must be less than or equal to SIZE. The value of SIZE
-must be greater than or equal to one and less than or equal to
-`BIT_SIZE(I)'.
-
- *Note IShft Intrinsic:: for the logical shift equivalent.
-
-
-File: g77.info, Node: ISign Intrinsic, Next: ITime Intrinsic, Prev: IShftC Intrinsic, Up: Table of Intrinsic Functions
-
-ISign Intrinsic
-...............
-
- ISign(A, B)
-
-ISign: `INTEGER(KIND=1)' function.
-
-A: `INTEGER(KIND=1)'; scalar; INTENT(IN).
-
-B: `INTEGER(KIND=1)'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Archaic form of `SIGN()' that is specific to one type for A and B.
-*Note Sign Intrinsic::.
-
-
-File: g77.info, Node: ITime Intrinsic, Next: Kill Intrinsic (subroutine), Prev: ISign Intrinsic, Up: Table of Intrinsic Functions
-
-ITime Intrinsic
-...............
-
- CALL ITime(TARRAY)
-
-TARRAY: `INTEGER(KIND=1)'; DIMENSION(3); INTENT(OUT).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Returns the current local time hour, minutes, and seconds in elements
-1, 2, and 3 of TARRAY, respectively.
-
-
-File: g77.info, Node: Kill Intrinsic (subroutine), Next: Kind Intrinsic, Prev: ITime Intrinsic, Up: Table of Intrinsic Functions
-
-Kill Intrinsic (subroutine)
-...........................
-
- CALL Kill(PID, SIGNAL, STATUS)
-
-PID: `INTEGER'; scalar; INTENT(IN).
-
-SIGNAL: `INTEGER'; scalar; INTENT(IN).
-
-STATUS: `INTEGER(KIND=1)'; OPTIONAL; scalar; INTENT(OUT).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Sends the signal specified by SIGNAL to the process PID. If the
-STATUS argument is supplied, it contains 0 on success or a non-zero
-error code upon return. See `kill(2)'.
-
- Some non-GNU implementations of Fortran provide this intrinsic as
-only a function, not as a subroutine, or do not support the (optional)
-STATUS argument.
-
- For information on other intrinsics with the same name: *Note Kill
-Intrinsic (function)::.
-
-
-File: g77.info, Node: Kind Intrinsic, Next: LBound Intrinsic, Prev: Kill Intrinsic (subroutine), Up: Table of Intrinsic Functions
-
-Kind Intrinsic
-..............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL Kind' to use this name for an
-external procedure.
-
-
-File: g77.info, Node: LBound Intrinsic, Next: Len Intrinsic, Prev: Kind Intrinsic, Up: Table of Intrinsic Functions
-
-LBound Intrinsic
-................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL LBound' to use this name for an
-external procedure.
-
-
-File: g77.info, Node: Len Intrinsic, Next: Len_Trim Intrinsic, Prev: LBound Intrinsic, Up: Table of Intrinsic Functions
-
-Len Intrinsic
-.............
-
- Len(STRING)
-
-Len: `INTEGER(KIND=1)' function.
-
-STRING: `CHARACTER'; scalar.
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Returns the length of STRING.
-
- If STRING is an array, the length of an element of STRING is
-returned.
-
- Note that STRING need not be defined when this intrinsic is invoked,
-since only the length, not the content, of STRING is needed.
-
- *Note Bit_Size Intrinsic::, for the function that determines the
-size of its argument in bits.
-
-
-File: g77.info, Node: Len_Trim Intrinsic, Next: LGe Intrinsic, Prev: Len Intrinsic, Up: Table of Intrinsic Functions
-
-Len_Trim Intrinsic
-..................
-
- Len_Trim(STRING)
-
-Len_Trim: `INTEGER(KIND=1)' function.
-
-STRING: `CHARACTER'; scalar; INTENT(IN).
-
-Intrinsic groups: `f90'.
-
-Description:
-
- Returns the index of the last non-blank character in STRING.
-`LNBLNK' and `LEN_TRIM' are equivalent.
-
-
-File: g77.info, Node: LGe Intrinsic, Next: LGt Intrinsic, Prev: Len_Trim Intrinsic, Up: Table of Intrinsic Functions
-
-LGe Intrinsic
-.............
-
- LGe(STRING_A, STRING_B)
-
-LGe: `LOGICAL(KIND=1)' function.
-
-STRING_A: `CHARACTER'; scalar; INTENT(IN).
-
-STRING_B: `CHARACTER'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Returns `.TRUE.' if `STRING_A.GE.STRING_B', `.FALSE.' otherwise.
-STRING_A and STRING_B are interpreted as containing ASCII character
-codes. If either value contains a character not in the ASCII character
-set, the result is processor dependent.
-
- If the STRING_A and STRING_B are not the same length, the shorter is
-compared as if spaces were appended to it to form a value that has the
-same length as the longer.
-
- The lexical comparison intrinsics `LGe', `LGt', `LLe', and `LLt'
-differ from the corresponding intrinsic operators `.GE.', `.GT.',
-`.LE.', `.LT.'. Because the ASCII collating sequence is assumed, the
-following expressions always return `.TRUE.':
-
- LGE ('0', ' ')
- LGE ('A', '0')
- LGE ('a', 'A')
-
- The following related expressions do *not* always return `.TRUE.',
-as they are not necessarily evaluated assuming the arguments use ASCII
-encoding:
-
- '0' .GE. ' '
- 'A' .GE. '0'
- 'a' .GE. 'A'
-
- The same difference exists between `LGt' and `.GT.'; between `LLe'
-and `.LE.'; and between `LLt' and `.LT.'.
-
-
-File: g77.info, Node: LGt Intrinsic, Next: Link Intrinsic (subroutine), Prev: LGe Intrinsic, Up: Table of Intrinsic Functions
-
-LGt Intrinsic
-.............
-
- LGt(STRING_A, STRING_B)
-
-LGt: `LOGICAL(KIND=1)' function.
-
-STRING_A: `CHARACTER'; scalar; INTENT(IN).
-
-STRING_B: `CHARACTER'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Returns `.TRUE.' if `STRING_A.GT.STRING_B', `.FALSE.' otherwise.
-STRING_A and STRING_B are interpreted as containing ASCII character
-codes. If either value contains a character not in the ASCII character
-set, the result is processor dependent.
-
- If the STRING_A and STRING_B are not the same length, the shorter is
-compared as if spaces were appended to it to form a value that has the
-same length as the longer.
-
- *Note LGe Intrinsic::, for information on the distinction between
-the `LGT' intrinsic and the `.GT.' operator.
-
-
-File: g77.info, Node: Link Intrinsic (subroutine), Next: LLe Intrinsic, Prev: LGt Intrinsic, Up: Table of Intrinsic Functions
-
-Link Intrinsic (subroutine)
-...........................
-
- CALL Link(PATH1, PATH2, STATUS)
-
-PATH1: `CHARACTER'; scalar; INTENT(IN).
-
-PATH2: `CHARACTER'; scalar; INTENT(IN).
-
-STATUS: `INTEGER(KIND=1)'; OPTIONAL; scalar; INTENT(OUT).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Makes a (hard) link from file PATH1 to PATH2. A null character
-(`CHAR(0)') marks the end of the names in PATH1 and PATH2--otherwise,
-trailing blanks in PATH1 and PATH2 are ignored. If the STATUS argument
-is supplied, it contains 0 on success or a non-zero error code upon
-return. See `link(2)'.
-
- Some non-GNU implementations of Fortran provide this intrinsic as
-only a function, not as a subroutine, or do not support the (optional)
-STATUS argument.
-
- For information on other intrinsics with the same name: *Note Link
-Intrinsic (function)::.
-
-
-File: g77.info, Node: LLe Intrinsic, Next: LLt Intrinsic, Prev: Link Intrinsic (subroutine), Up: Table of Intrinsic Functions
-
-LLe Intrinsic
-.............
-
- LLe(STRING_A, STRING_B)
-
-LLe: `LOGICAL(KIND=1)' function.
-
-STRING_A: `CHARACTER'; scalar; INTENT(IN).
-
-STRING_B: `CHARACTER'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Returns `.TRUE.' if `STRING_A.LE.STRING_B', `.FALSE.' otherwise.
-STRING_A and STRING_B are interpreted as containing ASCII character
-codes. If either value contains a character not in the ASCII character
-set, the result is processor dependent.
-
- If the STRING_A and STRING_B are not the same length, the shorter is
-compared as if spaces were appended to it to form a value that has the
-same length as the longer.
-
- *Note LGe Intrinsic::, for information on the distinction between
-the `LLE' intrinsic and the `.LE.' operator.
-
-
-File: g77.info, Node: LLt Intrinsic, Next: LnBlnk Intrinsic, Prev: LLe Intrinsic, Up: Table of Intrinsic Functions
-
-LLt Intrinsic
-.............
-
- LLt(STRING_A, STRING_B)
-
-LLt: `LOGICAL(KIND=1)' function.
-
-STRING_A: `CHARACTER'; scalar; INTENT(IN).
-
-STRING_B: `CHARACTER'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Returns `.TRUE.' if `STRING_A.LT.STRING_B', `.FALSE.' otherwise.
-STRING_A and STRING_B are interpreted as containing ASCII character
-codes. If either value contains a character not in the ASCII character
-set, the result is processor dependent.
-
- If the STRING_A and STRING_B are not the same length, the shorter is
-compared as if spaces were appended to it to form a value that has the
-same length as the longer.
-
- *Note LGe Intrinsic::, for information on the distinction between
-the `LLT' intrinsic and the `.LT.' operator.
-
-
-File: g77.info, Node: LnBlnk Intrinsic, Next: Loc Intrinsic, Prev: LLt Intrinsic, Up: Table of Intrinsic Functions
-
-LnBlnk Intrinsic
-................
-
- LnBlnk(STRING)
-
-LnBlnk: `INTEGER(KIND=1)' function.
-
-STRING: `CHARACTER'; scalar; INTENT(IN).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Returns the index of the last non-blank character in STRING.
-`LNBLNK' and `LEN_TRIM' are equivalent.
-
-
-File: g77.info, Node: Loc Intrinsic, Next: Log Intrinsic, Prev: LnBlnk Intrinsic, Up: Table of Intrinsic Functions
-
-Loc Intrinsic
-.............
-
- Loc(ENTITY)
-
-Loc: `INTEGER(KIND=0)' function.
-
-ENTITY: Any type; cannot be a constant or expression.
-
-Intrinsic groups: `unix'.
-
-Description:
-
- The `LOC()' intrinsic works the same way as the `%LOC()' construct.
-*Note The `%LOC()' Construct: %LOC(), for more information.
-
-
-File: g77.info, Node: Log Intrinsic, Next: Log10 Intrinsic, Prev: Loc Intrinsic, Up: Table of Intrinsic Functions
-
-Log Intrinsic
-.............
-
- Log(X)
-
-Log: `REAL' or `COMPLEX' function, the exact type being that of
-argument X.
-
-X: `REAL' or `COMPLEX'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Returns the natural logarithm of X, which must be greater than zero
-or, if type `COMPLEX', must not be zero.
-
- *Note Exp Intrinsic::, for the inverse of this function.
-
- *Note Log10 Intrinsic::, for the base-10 logarithm function.
-
-
-File: g77.info, Node: Log10 Intrinsic, Next: Logical Intrinsic, Prev: Log Intrinsic, Up: Table of Intrinsic Functions
-
-Log10 Intrinsic
-...............
-
- Log10(X)
-
-Log10: `REAL' function, the `KIND=' value of the type being that of
-argument X.
-
-X: `REAL'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Returns the natural logarithm of X, which must be greater than zero
-or, if type `COMPLEX', must not be zero.
-
- The inverse of this function is `10. ** LOG10(X)'.
-
- *Note Log Intrinsic::, for the natural logarithm function.
-
-
-File: g77.info, Node: Logical Intrinsic, Next: Long Intrinsic, Prev: Log10 Intrinsic, Up: Table of Intrinsic Functions
-
-Logical Intrinsic
-.................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL Logical' to use this name for
-an external procedure.
-
-
-File: g77.info, Node: Long Intrinsic, Next: LShift Intrinsic, Prev: Logical Intrinsic, Up: Table of Intrinsic Functions
-
-Long Intrinsic
-..............
-
- Long(A)
-
-Long: `INTEGER(KIND=1)' function.
-
-A: `INTEGER(KIND=6)'; scalar; INTENT(IN).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Archaic form of `INT()' that is specific to one type for A. *Note
-Int Intrinsic::.
-
- The precise meaning of this intrinsic might change in a future
-version of the GNU Fortran language, as more is learned about how it is
-used.
-
-
-File: g77.info, Node: LShift Intrinsic, Next: LStat Intrinsic (subroutine), Prev: Long Intrinsic, Up: Table of Intrinsic Functions
-
-LShift Intrinsic
-................
-
- LShift(I, SHIFT)
-
-LShift: `INTEGER' function, the `KIND=' value of the type being that of
-argument I.
-
-I: `INTEGER'; scalar; INTENT(IN).
-
-SHIFT: `INTEGER'; scalar; INTENT(IN).
-
-Intrinsic groups: `f2c'.
-
-Description:
-
- Returns I shifted to the left SHIFT bits.
-
- Although similar to the expression `I*(2**SHIFT)', there are
-important differences. For example, the sign of the result is not
-necessarily the same as the sign of I.
-
- Currently this intrinsic is defined assuming the underlying
-representation of I is as a two's-complement integer. It is unclear at
-this point whether that definition will apply when a different
-representation is involved.
-
- *Note LShift Intrinsic::, for the inverse of this function.
-
- *Note IShft Intrinsic::, for information on a more widely available
-left-shifting intrinsic that is also more precisely defined.
-
-
-File: g77.info, Node: LStat Intrinsic (subroutine), Next: LStat Intrinsic (function), Prev: LShift Intrinsic, Up: Table of Intrinsic Functions
-
-LStat Intrinsic (subroutine)
-............................
-
- CALL LStat(FILE, SARRAY, STATUS)
-
-FILE: `CHARACTER'; scalar; INTENT(IN).
-
-SARRAY: `INTEGER(KIND=1)'; DIMENSION(13); INTENT(OUT).
-
-STATUS: `INTEGER(KIND=1)'; OPTIONAL; scalar; INTENT(OUT).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Obtains data about the given file FILE and places them in the array
-SARRAY. A null character (`CHAR(0)') marks the end of the name in
-FILE--otherwise, trailing blanks in FILE are ignored. If FILE is a
-symbolic link it returns data on the link itself, so the routine is
-available only on systems that support symbolic links. The values in
-this array are extracted from the `stat' structure as returned by
-`fstat(2)' q.v., as follows:
-
- 1. File mode
-
- 2. Inode number
-
- 3. ID of device containing directory entry for file
-
- 4. Device id (if relevant)
-
- 5. Number of links
-
- 6. Owner's uid
-
- 7. Owner's gid
-
- 8. File size (bytes)
-
- 9. Last access time
-
- 10. Last modification time
-
- 11. Last file status change time
-
- 12. Preferred I/O block size
-
- 13. Number of blocks allocated
-
- Not all these elements are relevant on all systems. If an element
-is not relevant, it is returned as 0.
-
- If the STATUS argument is supplied, it contains 0 on success or a
-non-zero error code upon return (`ENOSYS' if the system does not
-provide `lstat(2)').
-
- Some non-GNU implementations of Fortran provide this intrinsic as
-only a function, not as a subroutine, or do not support the (optional)
-STATUS argument.
-
- For information on other intrinsics with the same name: *Note LStat
-Intrinsic (function)::.
-
-
-File: g77.info, Node: LStat Intrinsic (function), Next: LTime Intrinsic, Prev: LStat Intrinsic (subroutine), Up: Table of Intrinsic Functions
-
-LStat Intrinsic (function)
-..........................
-
- LStat(FILE, SARRAY)
-
-LStat: `INTEGER(KIND=1)' function.
-
-FILE: `CHARACTER'; scalar; INTENT(IN).
-
-SARRAY: `INTEGER(KIND=1)'; DIMENSION(13); INTENT(OUT).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Obtains data about the given file FILE and places them in the array
-SARRAY. A null character (`CHAR(0)') marks the end of the name in
-FILE--otherwise, trailing blanks in FILE are ignored. If FILE is a
-symbolic link it returns data on the link itself, so the routine is
-available only on systems that support symbolic links. The values in
-this array are extracted from the `stat' structure as returned by
-`fstat(2)' q.v., as follows:
-
- 1. File mode
-
- 2. Inode number
-
- 3. ID of device containing directory entry for file
-
- 4. Device id (if relevant)
-
- 5. Number of links
-
- 6. Owner's uid
-
- 7. Owner's gid
-
- 8. File size (bytes)
-
- 9. Last access time
-
- 10. Last modification time
-
- 11. Last file status change time
-
- 12. Preferred I/O block size
-
- 13. Number of blocks allocated
-
- Not all these elements are relevant on all systems. If an element
-is not relevant, it is returned as 0.
-
- Returns 0 on success or a non-zero error code (`ENOSYS' if the
-system does not provide `lstat(2)').
-
- For information on other intrinsics with the same name: *Note LStat
-Intrinsic (subroutine)::.
-
-
-File: g77.info, Node: LTime Intrinsic, Next: MatMul Intrinsic, Prev: LStat Intrinsic (function), Up: Table of Intrinsic Functions
-
-LTime Intrinsic
-...............
-
- CALL LTime(STIME, TARRAY)
-
-STIME: `INTEGER(KIND=1)'; scalar; INTENT(IN).
-
-TARRAY: `INTEGER(KIND=1)'; DIMENSION(9); INTENT(OUT).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Given a system time value STIME, fills TARRAY with values extracted
-from it appropriate to the GMT time zone using `localtime(3)'.
-
- The array elements are as follows:
-
- 1. Seconds after the minute, range 0-59 or 0-61 to allow for leap
- seconds
-
- 2. Minutes after the hour, range 0-59
-
- 3. Hours past midnight, range 0-23
-
- 4. Day of month, range 0-31
-
- 5. Number of months since January, range 0-12
-
- 6. Years since 1900
-
- 7. Number of days since Sunday, range 0-6
-
- 8. Days since January 1
-
- 9. Daylight savings indicator: positive if daylight savings is in
- effect, zero if not, and negative if the information isn't
- available.
-
-
-File: g77.info, Node: MatMul Intrinsic, Next: Max Intrinsic, Prev: LTime Intrinsic, Up: Table of Intrinsic Functions
-
-MatMul Intrinsic
-................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL MatMul' to use this name for an
-external procedure.
-
-
-File: g77.info, Node: Max Intrinsic, Next: Max0 Intrinsic, Prev: MatMul Intrinsic, Up: Table of Intrinsic Functions
-
-Max Intrinsic
-.............
-
- Max(A-1, A-2, ..., A-n)
-
-Max: `INTEGER' or `REAL' function, the exact type being the result of
-cross-promoting the types of all the arguments.
-
-A: `INTEGER' or `REAL'; at least two such arguments must be provided;
-scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Returns the argument with the largest value.
-
- *Note Min Intrinsic::, for the opposite function.
-
-
-File: g77.info, Node: Max0 Intrinsic, Next: Max1 Intrinsic, Prev: Max Intrinsic, Up: Table of Intrinsic Functions
-
-Max0 Intrinsic
-..............
-
- Max0(A-1, A-2, ..., A-n)
-
-Max0: `INTEGER(KIND=1)' function.
-
-A: `INTEGER(KIND=1)'; at least two such arguments must be provided;
-scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Archaic form of `MAX()' that is specific to one type for A. *Note
-Max Intrinsic::.
-
-
-File: g77.info, Node: Max1 Intrinsic, Next: MaxExponent Intrinsic, Prev: Max0 Intrinsic, Up: Table of Intrinsic Functions
-
-Max1 Intrinsic
-..............
-
- Max1(A-1, A-2, ..., A-n)
-
-Max1: `INTEGER(KIND=1)' function.
-
-A: `REAL(KIND=1)'; at least two such arguments must be provided;
-scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Archaic form of `MAX()' that is specific to one type for A and a
-different return type. *Note Max Intrinsic::.
-
-
-File: g77.info, Node: MaxExponent Intrinsic, Next: MaxLoc Intrinsic, Prev: Max1 Intrinsic, Up: Table of Intrinsic Functions
-
-MaxExponent Intrinsic
-.....................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL MaxExponent' to use this name
-for an external procedure.
-
-
-File: g77.info, Node: MaxLoc Intrinsic, Next: MaxVal Intrinsic, Prev: MaxExponent Intrinsic, Up: Table of Intrinsic Functions
-
-MaxLoc Intrinsic
-................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL MaxLoc' to use this name for an
-external procedure.
-
-
-File: g77.info, Node: MaxVal Intrinsic, Next: MClock Intrinsic, Prev: MaxLoc Intrinsic, Up: Table of Intrinsic Functions
-
-MaxVal Intrinsic
-................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL MaxVal' to use this name for an
-external procedure.
-
-
-File: g77.info, Node: MClock Intrinsic, Next: MClock8 Intrinsic, Prev: MaxVal Intrinsic, Up: Table of Intrinsic Functions
-
-MClock Intrinsic
-................
-
- MClock()
-
-MClock: `INTEGER(KIND=1)' function.
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Returns the number of clock ticks since the start of the process.
-Supported on systems with `clock(3)' (q.v.).
-
- This intrinsic is not fully portable, such as to systems with 32-bit
-`INTEGER' types but supporting times wider than 32 bits. *Note MClock8
-Intrinsic::, for information on a similar intrinsic that might be
-portable to more GNU Fortran implementations, though to fewer Fortran
-compilers.
-
- If the system does not support `clock(3)', -1 is returned.
-
-
-File: g77.info, Node: MClock8 Intrinsic, Next: Merge Intrinsic, Prev: MClock Intrinsic, Up: Table of Intrinsic Functions
-
-MClock8 Intrinsic
-.................
-
- MClock8()
-
-MClock8: `INTEGER(KIND=2)' function.
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Returns the number of clock ticks since the start of the process.
-Supported on systems with `clock(3)' (q.v.).
-
- No Fortran implementations other than GNU Fortran are known to
-support this intrinsic at the time of this writing. *Note MClock
-Intrinsic::, for information on a similar intrinsic that might be
-portable to more Fortran compilers, though to fewer GNU Fortran
-implementations.
-
- If the system does not support `clock(3)', -1 is returned.
-
-
-File: g77.info, Node: Merge Intrinsic, Next: Min Intrinsic, Prev: MClock8 Intrinsic, Up: Table of Intrinsic Functions
-
-Merge Intrinsic
-...............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL Merge' to use this name for an
-external procedure.
-
-
-File: g77.info, Node: Min Intrinsic, Next: Min0 Intrinsic, Prev: Merge Intrinsic, Up: Table of Intrinsic Functions
-
-Min Intrinsic
-.............
-
- Min(A-1, A-2, ..., A-n)
-
-Min: `INTEGER' or `REAL' function, the exact type being the result of
-cross-promoting the types of all the arguments.
-
-A: `INTEGER' or `REAL'; at least two such arguments must be provided;
-scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Returns the argument with the smallest value.
-
- *Note Max Intrinsic::, for the opposite function.
-
-
-File: g77.info, Node: Min0 Intrinsic, Next: Min1 Intrinsic, Prev: Min Intrinsic, Up: Table of Intrinsic Functions
-
-Min0 Intrinsic
-..............
-
- Min0(A-1, A-2, ..., A-n)
-
-Min0: `INTEGER(KIND=1)' function.
-
-A: `INTEGER(KIND=1)'; at least two such arguments must be provided;
-scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Archaic form of `MIN()' that is specific to one type for A. *Note
-Min Intrinsic::.
-
-
-File: g77.info, Node: Min1 Intrinsic, Next: MinExponent Intrinsic, Prev: Min0 Intrinsic, Up: Table of Intrinsic Functions
-
-Min1 Intrinsic
-..............
-
- Min1(A-1, A-2, ..., A-n)
-
-Min1: `INTEGER(KIND=1)' function.
-
-A: `REAL(KIND=1)'; at least two such arguments must be provided;
-scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Archaic form of `MIN()' that is specific to one type for A and a
-different return type. *Note Min Intrinsic::.
-
-
-File: g77.info, Node: MinExponent Intrinsic, Next: MinLoc Intrinsic, Prev: Min1 Intrinsic, Up: Table of Intrinsic Functions
-
-MinExponent Intrinsic
-.....................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL MinExponent' to use this name
-for an external procedure.
-
-
-File: g77.info, Node: MinLoc Intrinsic, Next: MinVal Intrinsic, Prev: MinExponent Intrinsic, Up: Table of Intrinsic Functions
-
-MinLoc Intrinsic
-................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL MinLoc' to use this name for an
-external procedure.
-
-
-File: g77.info, Node: MinVal Intrinsic, Next: Mod Intrinsic, Prev: MinLoc Intrinsic, Up: Table of Intrinsic Functions
-
-MinVal Intrinsic
-................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL MinVal' to use this name for an
-external procedure.
-
-
-File: g77.info, Node: Mod Intrinsic, Next: Modulo Intrinsic, Prev: MinVal Intrinsic, Up: Table of Intrinsic Functions
-
-Mod Intrinsic
-.............
-
- Mod(A, P)
-
-Mod: `INTEGER' or `REAL' function, the exact type being the result of
-cross-promoting the types of all the arguments.
-
-A: `INTEGER' or `REAL'; scalar; INTENT(IN).
-
-P: `INTEGER' or `REAL'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Returns remainder calculated as:
-
- A - (INT(A / P) * P)
-
- P must not be zero.
-
-
-File: g77.info, Node: Modulo Intrinsic, Next: MvBits Intrinsic, Prev: Mod Intrinsic, Up: Table of Intrinsic Functions
-
-Modulo Intrinsic
-................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL Modulo' to use this name for an
-external procedure.
-
-
-File: g77.info, Node: MvBits Intrinsic, Next: Nearest Intrinsic, Prev: Modulo Intrinsic, Up: Table of Intrinsic Functions
-
-MvBits Intrinsic
-................
-
- CALL MvBits(FROM, FROMPOS, LEN, TO, TOPOS)
-
-FROM: `INTEGER'; scalar; INTENT(IN).
-
-FROMPOS: `INTEGER'; scalar; INTENT(IN).
-
-LEN: `INTEGER'; scalar; INTENT(IN).
-
-TO: `INTEGER' with same `KIND=' value as for FROM; scalar;
-INTENT(INOUT).
-
-TOPOS: `INTEGER'; scalar; INTENT(IN).
-
-Intrinsic groups: `mil', `f90', `vxt'.
-
-Description:
-
- Moves LEN bits from positions FROMPOS through `FROMPOS+LEN-1' of
-FROM to positions TOPOS through `FROMPOS+LEN-1' of TO. The portion of
-argument TO not affected by the movement of bits is unchanged.
-Arguments FROM and TO are permitted to be the same numeric storage
-unit. The values of `FROMPOS+LEN' and `TOPOS+LEN' must be less than or
-equal to `BIT_SIZE(FROM)'.
-
-
-File: g77.info, Node: Nearest Intrinsic, Next: NInt Intrinsic, Prev: MvBits Intrinsic, Up: Table of Intrinsic Functions
-
-Nearest Intrinsic
-.................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL Nearest' to use this name for
-an external procedure.
-
-
-File: g77.info, Node: NInt Intrinsic, Next: Not Intrinsic, Prev: Nearest Intrinsic, Up: Table of Intrinsic Functions
-
-NInt Intrinsic
-..............
-
- NInt(A)
-
-NInt: `INTEGER(KIND=1)' function.
-
-A: `REAL'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Returns A with the fractional portion of its magnitude eliminated by
-rounding to the nearest whole number and with its sign preserved,
-converted to type `INTEGER(KIND=1)'.
-
- If A is type `COMPLEX', its real part is rounded and converted.
-
- A fractional portion exactly equal to `.5' is rounded to the whole
-number that is larger in magnitude. (Also called "Fortran round".)
-
- *Note Int Intrinsic::, for how to convert, truncate to whole number.
-
- *Note ANInt Intrinsic::, for how to round to nearest whole number
-without converting.
-
-
-File: g77.info, Node: Not Intrinsic, Next: Or Intrinsic, Prev: NInt Intrinsic, Up: Table of Intrinsic Functions
-
-Not Intrinsic
-.............
-
- Not(I)
-
-Not: `INTEGER' function, the `KIND=' value of the type being that of
-argument I.
-
-I: `INTEGER'; scalar; INTENT(IN).
-
-Intrinsic groups: `mil', `f90', `vxt'.
-
-Description:
-
- Returns value resulting from boolean NOT of each bit in I.
-
-
-File: g77.info, Node: Or Intrinsic, Next: Pack Intrinsic, Prev: Not Intrinsic, Up: Table of Intrinsic Functions
-
-Or Intrinsic
-............
-
- Or(I, J)
-
-Or: `INTEGER' or `LOGICAL' function, the exact type being the result of
-cross-promoting the types of all the arguments.
-
-I: `INTEGER' or `LOGICAL'; scalar; INTENT(IN).
-
-J: `INTEGER' or `LOGICAL'; scalar; INTENT(IN).
-
-Intrinsic groups: `f2c'.
-
-Description:
-
- Returns value resulting from boolean OR of pair of bits in each of I
-and J.
-
-
-File: g77.info, Node: Pack Intrinsic, Next: PError Intrinsic, Prev: Or Intrinsic, Up: Table of Intrinsic Functions
-
-Pack Intrinsic
-..............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL Pack' to use this name for an
-external procedure.
-
-
-File: g77.info, Node: PError Intrinsic, Next: Precision Intrinsic, Prev: Pack Intrinsic, Up: Table of Intrinsic Functions
-
-PError Intrinsic
-................
-
- CALL PError(STRING)
-
-STRING: `CHARACTER'; scalar; INTENT(IN).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Prints (on the C `stderr' stream) a newline-terminated error message
-corresponding to the last system error. This is prefixed by STRING, a
-colon and a space. See `perror(3)'.
-
-
-File: g77.info, Node: Precision Intrinsic, Next: Present Intrinsic, Prev: PError Intrinsic, Up: Table of Intrinsic Functions
-
-Precision Intrinsic
-...................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL Precision' to use this name
-for an external procedure.
-
-
-File: g77.info, Node: Present Intrinsic, Next: Product Intrinsic, Prev: Precision Intrinsic, Up: Table of Intrinsic Functions
-
-Present Intrinsic
-.................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL Present' to use this name for
-an external procedure.
-
-
-File: g77.info, Node: Product Intrinsic, Next: Radix Intrinsic, Prev: Present Intrinsic, Up: Table of Intrinsic Functions
-
-Product Intrinsic
-.................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL Product' to use this name for
-an external procedure.
-
-
-File: g77.info, Node: Radix Intrinsic, Next: Rand Intrinsic, Prev: Product Intrinsic, Up: Table of Intrinsic Functions
-
-Radix Intrinsic
-...............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL Radix' to use this name for an
-external procedure.
-
-
-File: g77.info, Node: Rand Intrinsic, Next: Random_Number Intrinsic, Prev: Radix Intrinsic, Up: Table of Intrinsic Functions
-
-Rand Intrinsic
-..............
-
- Rand(FLAG)
-
-Rand: `REAL(KIND=1)' function.
-
-FLAG: `INTEGER'; OPTIONAL; scalar; INTENT(IN).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Returns a uniform quasi-random number between 0 and 1. If FLAG is
-0, the next number in sequence is returned; if FLAG is 1, the generator
-is restarted by calling `srand(0)'; if FLAG has any other value, it is
-used as a new seed with `srand'.
-
- *Note SRand Intrinsic::.
-
- *Note:* As typically implemented (by the routine of the same name in
-the C library), this random number generator is a very poor one, though
-the BSD and GNU libraries provide a much better implementation than the
-`traditional' one. On a different system you almost certainly want to
-use something better.
-
-
-File: g77.info, Node: Random_Number Intrinsic, Next: Random_Seed Intrinsic, Prev: Rand Intrinsic, Up: Table of Intrinsic Functions
-
-Random_Number Intrinsic
-.......................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL Random_Number' to use this
-name for an external procedure.
-
-
-File: g77.info, Node: Random_Seed Intrinsic, Next: Range Intrinsic, Prev: Random_Number Intrinsic, Up: Table of Intrinsic Functions
-
-Random_Seed Intrinsic
-.....................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL Random_Seed' to use this name
-for an external procedure.
-
-
-File: g77.info, Node: Range Intrinsic, Next: Real Intrinsic, Prev: Random_Seed Intrinsic, Up: Table of Intrinsic Functions
-
-Range Intrinsic
-...............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL Range' to use this name for an
-external procedure.
-
-
-File: g77.info, Node: Real Intrinsic, Next: RealPart Intrinsic, Prev: Range Intrinsic, Up: Table of Intrinsic Functions
-
-Real Intrinsic
-..............
-
- Real(A)
-
-Real: `REAL' function. The exact type is `REAL(KIND=1)' when argument
-A is any type other than `COMPLEX', or when it is `COMPLEX(KIND=1)'.
-When A is any `COMPLEX' type other than `COMPLEX(KIND=1)', this
-intrinsic is valid only when used as the argument to `REAL()', as
-explained below.
-
-A: `INTEGER', `REAL', or `COMPLEX'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Converts A to `REAL(KIND=1)'.
-
- Use of `REAL()' with a `COMPLEX' argument (other than
-`COMPLEX(KIND=1)') is restricted to the following case:
-
- REAL(REAL(A))
-
-This expression converts the real part of A to `REAL(KIND=1)'.
-
- *Note RealPart Intrinsic::, for information on a GNU Fortran
-intrinsic that extracts the real part of an arbitrary `COMPLEX' value.
-
- *Note REAL() and AIMAG() of Complex::, for more information.
-
-
-File: g77.info, Node: RealPart Intrinsic, Next: Rename Intrinsic (subroutine), Prev: Real Intrinsic, Up: Table of Intrinsic Functions
-
-RealPart Intrinsic
-..................
-
- RealPart(Z)
-
-RealPart: `REAL' function, the `KIND=' value of the type being that of
-argument Z.
-
-Z: `COMPLEX'; scalar; INTENT(IN).
-
-Intrinsic groups: `gnu'.
-
-Description:
-
- The real part of Z is returned, without conversion.
-
- *Note:* The way to do this in standard Fortran 90 is `REAL(Z)'.
-However, when, for example, Z is `COMPLEX(KIND=2)', `REAL(Z)' means
-something different for some compilers that are not true Fortran 90
-compilers but offer some extensions standardized by Fortran 90 (such as
-the `DOUBLE COMPLEX' type, also known as `COMPLEX(KIND=2)').
-
- The advantage of `REALPART()' is that, while not necessarily more or
-less portable than `REAL()', it is more likely to cause a compiler that
-doesn't support it to produce a diagnostic than generate incorrect code.
-
- *Note REAL() and AIMAG() of Complex::, for more information.
-
-
-File: g77.info, Node: Rename Intrinsic (subroutine), Next: Repeat Intrinsic, Prev: RealPart Intrinsic, Up: Table of Intrinsic Functions
-
-Rename Intrinsic (subroutine)
-.............................
-
- CALL Rename(PATH1, PATH2, STATUS)
-
-PATH1: `CHARACTER'; scalar; INTENT(IN).
-
-PATH2: `CHARACTER'; scalar; INTENT(IN).
-
-STATUS: `INTEGER(KIND=1)'; OPTIONAL; scalar; INTENT(OUT).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Renames the file PATH1 to PATH2. A null character (`CHAR(0)') marks
-the end of the names in PATH1 and PATH2--otherwise, trailing blanks in
-PATH1 and PATH2 are ignored. See `rename(2)'. If the STATUS argument
-is supplied, it contains 0 on success or a non-zero error code upon
-return.
-
- Some non-GNU implementations of Fortran provide this intrinsic as
-only a function, not as a subroutine, or do not support the (optional)
-STATUS argument.
-
- For information on other intrinsics with the same name: *Note Rename
-Intrinsic (function)::.
-
-
-File: g77.info, Node: Repeat Intrinsic, Next: Reshape Intrinsic, Prev: Rename Intrinsic (subroutine), Up: Table of Intrinsic Functions
-
-Repeat Intrinsic
-................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL Repeat' to use this name for an
-external procedure.
-
-
-File: g77.info, Node: Reshape Intrinsic, Next: RRSpacing Intrinsic, Prev: Repeat Intrinsic, Up: Table of Intrinsic Functions
-
-Reshape Intrinsic
-.................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL Reshape' to use this name for
-an external procedure.
-
-
-File: g77.info, Node: RRSpacing Intrinsic, Next: RShift Intrinsic, Prev: Reshape Intrinsic, Up: Table of Intrinsic Functions
-
-RRSpacing Intrinsic
-...................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL RRSpacing' to use this name
-for an external procedure.
-
-
-File: g77.info, Node: RShift Intrinsic, Next: Scale Intrinsic, Prev: RRSpacing Intrinsic, Up: Table of Intrinsic Functions
-
-RShift Intrinsic
-................
-
- RShift(I, SHIFT)
-
-RShift: `INTEGER' function, the `KIND=' value of the type being that of
-argument I.
-
-I: `INTEGER'; scalar; INTENT(IN).
-
-SHIFT: `INTEGER'; scalar; INTENT(IN).
-
-Intrinsic groups: `f2c'.
-
-Description:
-
- Returns I shifted to the right SHIFT bits.
-
- Although similar to the expression `I/(2**SHIFT)', there are
-important differences. For example, the sign of the result is
-undefined.
-
- Currently this intrinsic is defined assuming the underlying
-representation of I is as a two's-complement integer. It is unclear at
-this point whether that definition will apply when a different
-representation is involved.
-
- *Note RShift Intrinsic::, for the inverse of this function.
-
- *Note IShft Intrinsic::, for information on a more widely available
-right-shifting intrinsic that is also more precisely defined.
-
-
-File: g77.info, Node: Scale Intrinsic, Next: Scan Intrinsic, Prev: RShift Intrinsic, Up: Table of Intrinsic Functions
-
-Scale Intrinsic
-...............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL Scale' to use this name for an
-external procedure.
-
-
-File: g77.info, Node: Scan Intrinsic, Next: Second Intrinsic (function), Prev: Scale Intrinsic, Up: Table of Intrinsic Functions
-
-Scan Intrinsic
-..............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL Scan' to use this name for an
-external procedure.
-
-
-File: g77.info, Node: Second Intrinsic (function), Next: Second Intrinsic (subroutine), Prev: Scan Intrinsic, Up: Table of Intrinsic Functions
-
-Second Intrinsic (function)
-...........................
-
- Second()
-
-Second: `REAL(KIND=1)' function.
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Returns the process's runtime in seconds--the same value as the UNIX
-function `etime' returns.
-
- This routine is known from Cray Fortran.
-
- For information on other intrinsics with the same name: *Note Second
-Intrinsic (subroutine)::.
-
-
-File: g77.info, Node: Second Intrinsic (subroutine), Next: Selected_Int_Kind Intrinsic, Prev: Second Intrinsic (function), Up: Table of Intrinsic Functions
-
-Second Intrinsic (subroutine)
-.............................
-
- CALL Second(SECONDS)
-
-SECONDS: `REAL(KIND=1)'; scalar; INTENT(OUT).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Returns the process's runtime in seconds in SECONDS--the same value
-as the UNIX function `etime' returns.
-
- This routine is known from Cray Fortran. *Note Cpu_Time Intrinsic::
-for a standard equivalent.
-
- For information on other intrinsics with the same name: *Note Second
-Intrinsic (function)::.
-
-
-File: g77.info, Node: Selected_Int_Kind Intrinsic, Next: Selected_Real_Kind Intrinsic, Prev: Second Intrinsic (subroutine), Up: Table of Intrinsic Functions
-
-Selected_Int_Kind Intrinsic
-...........................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL Selected_Int_Kind' to use this
-name for an external procedure.
-
-
-File: g77.info, Node: Selected_Real_Kind Intrinsic, Next: Set_Exponent Intrinsic, Prev: Selected_Int_Kind Intrinsic, Up: Table of Intrinsic Functions
-
-Selected_Real_Kind Intrinsic
-............................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL Selected_Real_Kind' to use
-this name for an external procedure.
-
-
-File: g77.info, Node: Set_Exponent Intrinsic, Next: Shape Intrinsic, Prev: Selected_Real_Kind Intrinsic, Up: Table of Intrinsic Functions
-
-Set_Exponent Intrinsic
-......................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL Set_Exponent' to use this name
-for an external procedure.
-
-
-File: g77.info, Node: Shape Intrinsic, Next: Short Intrinsic, Prev: Set_Exponent Intrinsic, Up: Table of Intrinsic Functions
-
-Shape Intrinsic
-...............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL Shape' to use this name for an
-external procedure.
-
-
-File: g77.info, Node: Short Intrinsic, Next: Sign Intrinsic, Prev: Shape Intrinsic, Up: Table of Intrinsic Functions
-
-Short Intrinsic
-...............
-
- Short(A)
-
-Short: `INTEGER(KIND=6)' function.
-
-A: `INTEGER'; scalar; INTENT(IN).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Returns A with the fractional portion of its magnitude truncated and
-its sign preserved, converted to type `INTEGER(KIND=6)'.
-
- If A is type `COMPLEX', its real part is truncated and converted,
-and its imaginary part is disgregarded.
-
- *Note Int Intrinsic::.
-
- The precise meaning of this intrinsic might change in a future
-version of the GNU Fortran language, as more is learned about how it is
-used.
-
-
-File: g77.info, Node: Sign Intrinsic, Next: Signal Intrinsic (subroutine), Prev: Short Intrinsic, Up: Table of Intrinsic Functions
-
-Sign Intrinsic
-..............
-
- Sign(A, B)
-
-Sign: `INTEGER' or `REAL' function, the exact type being the result of
-cross-promoting the types of all the arguments.
-
-A: `INTEGER' or `REAL'; scalar; INTENT(IN).
-
-B: `INTEGER' or `REAL'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Returns `ABS(A)*S', where S is +1 if `B.GE.0', -1 otherwise.
-
- *Note Abs Intrinsic::, for the function that returns the magnitude
-of a value.
-
-
-File: g77.info, Node: Signal Intrinsic (subroutine), Next: Sin Intrinsic, Prev: Sign Intrinsic, Up: Table of Intrinsic Functions
-
-Signal Intrinsic (subroutine)
-.............................
-
- CALL Signal(NUMBER, HANDLER, STATUS)
-
-NUMBER: `INTEGER'; scalar; INTENT(IN).
-
-HANDLER: Signal handler (`INTEGER FUNCTION' or `SUBROUTINE') or
-dummy/global `INTEGER(KIND=1)' scalar.
-
-STATUS: `INTEGER(KIND=1)'; OPTIONAL; scalar; INTENT(OUT).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- If HANDLER is a an `EXTERNAL' routine, arranges for it to be invoked
-with a single integer argument (of system-dependent length) when signal
-NUMBER occurs. If NUMBER is an integer, it can be used to turn off
-handling of signal HANDLER or revert to its default action. See
-`signal(2)'.
-
- Note that HANDLER will be called using C conventions, so its value in
-Fortran terms is obtained by applying `%LOC()' (or LOC()) to it.
-
- The value returned by `signal(2)' is written to STATUS, if that
-argument is supplied. Otherwise the return value is ignored.
-
- Some non-GNU implementations of Fortran provide this intrinsic as
-only a function, not as a subroutine, or do not support the (optional)
-STATUS argument.
-
- For information on other intrinsics with the same name: *Note Signal
-Intrinsic (function)::.
-
-
-File: g77.info, Node: Sin Intrinsic, Next: SinH Intrinsic, Prev: Signal Intrinsic (subroutine), Up: Table of Intrinsic Functions
-
-Sin Intrinsic
-.............
-
- Sin(X)
-
-Sin: `REAL' or `COMPLEX' function, the exact type being that of
-argument X.
-
-X: `REAL' or `COMPLEX'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Returns the sine of X, an angle measured in radians.
-
- *Note ASin Intrinsic::, for the inverse of this function.
-
-
-File: g77.info, Node: SinH Intrinsic, Next: Sleep Intrinsic, Prev: Sin Intrinsic, Up: Table of Intrinsic Functions
-
-SinH Intrinsic
-..............
-
- SinH(X)
-
-SinH: `REAL' function, the `KIND=' value of the type being that of
-argument X.
-
-X: `REAL'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Returns the hyperbolic sine of X.
-
-
-File: g77.info, Node: Sleep Intrinsic, Next: Sngl Intrinsic, Prev: SinH Intrinsic, Up: Table of Intrinsic Functions
-
-Sleep Intrinsic
-...............
-
- CALL Sleep(SECONDS)
-
-SECONDS: `INTEGER(KIND=1)'; scalar; INTENT(IN).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Causes the process to pause for SECONDS seconds. See `sleep(2)'.
-
-
-File: g77.info, Node: Sngl Intrinsic, Next: Spacing Intrinsic, Prev: Sleep Intrinsic, Up: Table of Intrinsic Functions
-
-Sngl Intrinsic
-..............
-
- Sngl(A)
-
-Sngl: `REAL(KIND=1)' function.
-
-A: `REAL(KIND=2)'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Archaic form of `REAL()' that is specific to one type for A. *Note
-Real Intrinsic::.
-
-
-File: g77.info, Node: Spacing Intrinsic, Next: Spread Intrinsic, Prev: Sngl Intrinsic, Up: Table of Intrinsic Functions
-
-Spacing Intrinsic
-.................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL Spacing' to use this name for
-an external procedure.
-
-
-File: g77.info, Node: Spread Intrinsic, Next: SqRt Intrinsic, Prev: Spacing Intrinsic, Up: Table of Intrinsic Functions
-
-Spread Intrinsic
-................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL Spread' to use this name for an
-external procedure.
-
-
-File: g77.info, Node: SqRt Intrinsic, Next: SRand Intrinsic, Prev: Spread Intrinsic, Up: Table of Intrinsic Functions
-
-SqRt Intrinsic
-..............
-
- SqRt(X)
-
-SqRt: `REAL' or `COMPLEX' function, the exact type being that of
-argument X.
-
-X: `REAL' or `COMPLEX'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Returns the square root of X, which must not be negative.
-
- To calculate and represent the square root of a negative number,
-complex arithmetic must be used. For example, `SQRT(COMPLEX(X))'.
-
- The inverse of this function is `SQRT(X) * SQRT(X)'.
-
-
-File: g77.info, Node: SRand Intrinsic, Next: Stat Intrinsic (subroutine), Prev: SqRt Intrinsic, Up: Table of Intrinsic Functions
-
-SRand Intrinsic
-...............
-
- CALL SRand(SEED)
-
-SEED: `INTEGER'; scalar; INTENT(IN).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Reinitialises the generator with the seed in SEED. *Note IRand
-Intrinsic::. *Note Rand Intrinsic::.
-
-
-File: g77.info, Node: Stat Intrinsic (subroutine), Next: Stat Intrinsic (function), Prev: SRand Intrinsic, Up: Table of Intrinsic Functions
-
-Stat Intrinsic (subroutine)
-...........................
-
- CALL Stat(FILE, SARRAY, STATUS)
-
-FILE: `CHARACTER'; scalar; INTENT(IN).
-
-SARRAY: `INTEGER(KIND=1)'; DIMENSION(13); INTENT(OUT).
-
-STATUS: `INTEGER(KIND=1)'; OPTIONAL; scalar; INTENT(OUT).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Obtains data about the given file FILE and places them in the array
-SARRAY. A null character (`CHAR(0)') marks the end of the name in
-FILE--otherwise, trailing blanks in FILE are ignored. The values in
-this array are extracted from the `stat' structure as returned by
-`fstat(2)' q.v., as follows:
-
- 1. File mode
-
- 2. Inode number
-
- 3. ID of device containing directory entry for file
-
- 4. Device id (if relevant)
-
- 5. Number of links
-
- 6. Owner's uid
-
- 7. Owner's gid
-
- 8. File size (bytes)
-
- 9. Last access time
-
- 10. Last modification time
-
- 11. Last file status change time
-
- 12. Preferred I/O block size
-
- 13. Number of blocks allocated
-
- Not all these elements are relevant on all systems. If an element
-is not relevant, it is returned as 0.
-
- If the STATUS argument is supplied, it contains 0 on success or a
-non-zero error code upon return.
-
- Some non-GNU implementations of Fortran provide this intrinsic as
-only a function, not as a subroutine, or do not support the (optional)
-STATUS argument.
-
- For information on other intrinsics with the same name: *Note Stat
-Intrinsic (function)::.
-
-
-File: g77.info, Node: Stat Intrinsic (function), Next: Sum Intrinsic, Prev: Stat Intrinsic (subroutine), Up: Table of Intrinsic Functions
-
-Stat Intrinsic (function)
-.........................
-
- Stat(FILE, SARRAY)
-
-Stat: `INTEGER(KIND=1)' function.
-
-FILE: `CHARACTER'; scalar; INTENT(IN).
-
-SARRAY: `INTEGER(KIND=1)'; DIMENSION(13); INTENT(OUT).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Obtains data about the given file FILE and places them in the array
-SARRAY. A null character (`CHAR(0)') marks the end of the name in
-FILE--otherwise, trailing blanks in FILE are ignored. The values in
-this array are extracted from the `stat' structure as returned by
-`fstat(2)' q.v., as follows:
-
- 1. File mode
-
- 2. Inode number
-
- 3. ID of device containing directory entry for file
-
- 4. Device id (if relevant)
-
- 5. Number of links
-
- 6. Owner's uid
-
- 7. Owner's gid
-
- 8. File size (bytes)
-
- 9. Last access time
-
- 10. Last modification time
-
- 11. Last file status change time
-
- 12. Preferred I/O block size
-
- 13. Number of blocks allocated
-
- Not all these elements are relevant on all systems. If an element
-is not relevant, it is returned as 0.
-
- Returns 0 on success or a non-zero error code.
-
- For information on other intrinsics with the same name: *Note Stat
-Intrinsic (subroutine)::.
-
-
-File: g77.info, Node: Sum Intrinsic, Next: SymLnk Intrinsic (subroutine), Prev: Stat Intrinsic (function), Up: Table of Intrinsic Functions
-
-Sum Intrinsic
-.............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL Sum' to use this name for an
-external procedure.
-
diff --git a/gcc/f/g77.texi b/gcc/f/g77.texi
index d87340d85d0..eb9a7014428 100644
--- a/gcc/f/g77.texi
+++ b/gcc/f/g77.texi
@@ -91,7 +91,7 @@ translations approved by the Free Software Foundation instead of in the
original English.
@end ifinfo
-Contributed by James Craig Burley (@email{burley@@gnu.ai.mit.edu}).
+Contributed by James Craig Burley (@email{burley@@gnu.org}).
Inspired by a first pass at translating @file{g77-0.5.16/f/DOC} that
was contributed to Craig by David Ronis (@email{ronis@@onsager.chem.mcgill.ca}).
@@ -762,7 +762,7 @@ without royalty; alteration is not permitted.
@cindex improvements, funding
Work on GNU Fortran is still being done mostly by its author,
-James Craig Burley (@email{burley@@gnu.ai.mit.edu}), who is a volunteer
+James Craig Burley (@email{burley@@gnu.org}), who is a volunteer
for, not an employee of, the Free Software Foundation (FSF).
As with other GNU software, funding is important because it can pay for
needed equipment, personnel, and so on.
@@ -772,7 +772,7 @@ needed equipment, personnel, and so on.
The FSF provides information on the best way to fund ongoing
development of GNU software (such as GNU Fortran) in documents
such as the ``GNUS Bulletin''.
-Email @email{gnu@@prep.ai.mit.edu} for information on funding the FSF.
+Email @email{gnu@@gnu.org} for information on funding the FSF.
To fund specific GNU Fortran work in particular, the FSF might
provide a means for that, but the FSF does not provide direct funding
@@ -801,7 +801,7 @@ would be able to plan on not doing contract work for many months and
could thus devote that time to work on projects (such as the planned
changes for 0.6) that require longer timeframes to complete.
For the latest information on the status of the author, do
-@kbd{finger -l burley@@gate.gnu.ai.mit.edu} on a UNIX system
+@kbd{finger -l burley@@gnu.org} on a UNIX system
(or any system with a command like UNIX @code{finger}).
Another important way to support work on GNU Fortran is to volunteer
@@ -810,7 +810,7 @@ Work is needed on documentation, testing, porting
to various machines, and in some cases, coding (although major
changes planned for version 0.6 make it difficult to add manpower to this
area).
-Email @email{fortran@@gnu.ai.mit.edu} to volunteer for this work.
+Email @email{egcs@@cygnus.com} to volunteer for this work.
@xref{Funding,,Funding Free Software}, for more information.
@@ -1345,6 +1345,8 @@ by type. Explanations are in the following sections.
-fcase-initcap -fcase-upper -fcase-lower -fcase-preserve
-ff2c-intrinsics-delete -ff2c-intrinsics-hide
-ff2c-intrinsics-disable -ff2c-intrinsics-enable
+-fbadu77-intrinsics-delete -fbadu77-intrinsics-hide
+-fbadu77-intrinsics-disable -fbadu77-intrinsics-enable
-ff90-intrinsics-delete -ff90-intrinsics-hide
-ff90-intrinsics-disable -ff90-intrinsics-enable
-fgnu-intrinsics-delete -fgnu-intrinsics-hide
@@ -1827,9 +1829,11 @@ had read @samp{DIMENSION X(*)}.
@cindex -fugly-comma option
@cindex options, -fugly-comma
@item -fugly-comma
-Treat a trailing comma in an argument list as specification
-of a trailing null argument, and treat an empty argument
-list as specification of a single null argument.
+In an external-procedure invocation,
+treat a trailing comma in the argument list
+as specification of a trailing null argument,
+and treat an empty argument list
+as specification of a single null argument.
For example, @samp{CALL FOO(,)} is treated as
@samp{CALL FOO(%VAL(0), %VAL(0))}.
@@ -1839,6 +1843,8 @@ And @samp{F = FUNC()} is treated as @samp{F = FUNC(%VAL(0))}.
The default behavior, @samp{-fno-ugly-comma}, is to ignore
a single trailing comma in an argument list.
+So, by default, @samp{CALL FOO(X,)} is treated
+exactly the same as @samp{CALL FOO(X)}.
@xref{Ugly Null Arguments}, for more information.
@@ -2046,6 +2052,24 @@ while allowing any-case matching of intrinsics and keywords.
For example, @samp{call Foo(i,I)} would pass two @emph{different}
variables named @samp{i} and @samp{I} to a procedure named @samp{Foo}.)
+@cindex -fbadu77-intrinsics-delete option
+@cindex options, -fbadu77-intrinsics-delete
+@item -fbadu77-intrinsics-delete
+@cindex -fbadu77-intrinsics-hide option
+@cindex options, -fbadu77-intrinsics-hide
+@item -fbadu77-intrinsics-hide
+@cindex -fbadu77-intrinsics-disable option
+@cindex options, -fbadu77-intrinsics-disable
+@item -fbadu77-intrinsics-disable
+@cindex -fbadu77-intrinsics-enable option
+@cindex options, -fbadu77-intrinsics-enable
+@item -fbadu77-intrinsics-enable
+@cindex badu77 intrinsics
+@cindex intrinsics, badu77
+Specify status of UNIX intrinsics having inappropriate forms.
+@samp{-fbadu77-intrinsics-enable} is the default.
+@xref{Intrinsic Groups}.
+
@cindex -ff2c-intrinsics-delete option
@cindex options, -ff2c-intrinsics-delete
@item -ff2c-intrinsics-delete
@@ -2062,6 +2086,7 @@ variables named @samp{i} and @samp{I} to a procedure named @samp{Foo}.)
@cindex intrinsics, f2c
Specify status of f2c-specific intrinsics.
@samp{-ff2c-intrinsics-enable} is the default.
+@xref{Intrinsic Groups}.
@cindex -ff90-intrinsics-delete option
@cindex options, -ff90-intrinsics-delete
@@ -2079,6 +2104,7 @@ Specify status of f2c-specific intrinsics.
@cindex intrinsics, Fortran 90
Specify status of F90-specific intrinsics.
@samp{-ff90-intrinsics-enable} is the default.
+@xref{Intrinsic Groups}.
@cindex -fgnu-intrinsics-delete option
@cindex options, -fgnu-intrinsics-delete
@@ -2097,6 +2123,7 @@ Specify status of F90-specific intrinsics.
@cindex intrinsics, COMPLEX
Specify status of Digital's COMPLEX-related intrinsics.
@samp{-fgnu-intrinsics-enable} is the default.
+@xref{Intrinsic Groups}.
@cindex -fmil-intrinsics-delete option
@cindex options, -fmil-intrinsics-delete
@@ -2114,6 +2141,7 @@ Specify status of Digital's COMPLEX-related intrinsics.
@cindex intrinsics, MIL-STD 1753
Specify status of MIL-STD-1753-specific intrinsics.
@samp{-fmil-intrinsics-enable} is the default.
+@xref{Intrinsic Groups}.
@cindex -funix-intrinsics-delete option
@cindex options, -funix-intrinsics-delete
@@ -2131,6 +2159,7 @@ Specify status of MIL-STD-1753-specific intrinsics.
@cindex intrinsics, UNIX
Specify status of UNIX intrinsics.
@samp{-funix-intrinsics-enable} is the default.
+@xref{Intrinsic Groups}.
@cindex -fvxt-intrinsics-delete option
@cindex options, -fvxt-intrinsics-delete
@@ -2148,6 +2177,7 @@ Specify status of UNIX intrinsics.
@cindex intrinsics, VXT
Specify status of VXT intrinsics.
@samp{-fvxt-intrinsics-enable} is the default.
+@xref{Intrinsic Groups}.
@cindex -ffixed-line-length-@var{n} option
@cindex options, -ffixed-line-length-@var{n}
@@ -3251,9 +3281,9 @@ users use @code{g77}.
such changes to @code{g77}.
To find out about existing bugs and ongoing plans for GNU
-Fortran, retrieve @uref{ftp://alpha.gnu.ai.mit.edu/g77.plan}
+Fortran, retrieve @url{ftp://alpha.gnu.org/g77.plan}
or, if you cannot do that, email
-@email{fortran@@gnu.ai.mit.edu} asking for a recent copy of the
+@email{fortran@@gnu.org} asking for a recent copy of the
GNU Fortran @file{.plan} file.
@heading In 0.5.21:
@@ -3699,8 +3729,8 @@ way through the compilation process instead of being lost.
GNU Fortran supports a variety of extensions to, and dialects
of, the Fortran language.
Its primary base is the ANSI FORTRAN 77 standard, currently available on
-the network at @uref{http://kumo.swcp.com/fortran/F77_std/f77_std.html}
-or in @uref{ftp://ftp.ast.cam.ac.uk/pub/michael/}.
+the network at @url{http://kumo.swcp.com/fortran/F77_std/f77_std.html}
+or in @url{ftp://ftp.ast.cam.ac.uk/pub/michael/}.
It offers some extensions that are popular among users
of UNIX @code{f77} and @code{f2c} compilers, some that
are popular among users of other compilers (such as Digital
@@ -3711,7 +3741,7 @@ by GNU Fortran.
@cindex textbooks
(If you need a text on Fortran,
a few freely available electronic references have pointers from
-@uref{http://www.fortran.com/fortran/Books/}.)
+@code{http://www.fortran.com/fortran/Books/}.)
Part of what defines a particular implementation of a Fortran
system, such as @code{g77}, is the particular characteristics
@@ -5726,7 +5756,7 @@ C INT(I1-I2) as INT(I1)-INT(I2) given INTEGER*2 I1,I2.
C
C Version 0:
C Written by James Craig Burley 1997-02-20.
-C Contact via Internet email: burley@@gnu.ai.mit.edu
+C Contact via Internet email: burley@@gnu.org
C
C Purpose:
C Determine how compilers handle non-standard IDIM
@@ -7060,11 +7090,11 @@ without conversion.
@cindex null arguments
@cindex arguments, null
-The @samp{-fugly-comma} option enables
-use of a single trailing comma to mean ``pass an extra trailing null
-argument'' in a list of actual arguments to a procedure other than a
-statement function, and use of an empty list of arguments to
-mean ``pass a single null argument''.
+The @samp{-fugly-comma} option enables use of a single trailing comma
+to mean ``pass an extra trailing null argument''
+in a list of actual arguments to an external procedure,
+and use of an empty list of arguments to such a procedure
+to mean ``pass a single null argument''.
@cindex omitting arguments
@cindex arguments, omitting
@@ -7598,26 +7628,33 @@ The groups are:
@cindex intrinsics, groups of
@cindex groups of intrinsics
@table @code
+@cindex @code{badu77} intrinsics group
@item badu77
UNIX intrinsics having inappropriate forms (usually functions that
have intended side effects).
+@cindex @code{gnu} intrinsics group
@item gnu
Intrinsics the GNU Fortran language supports that are extensions to
the Fortran standards (77 and 90).
+@cindex @code{f2c} intrinsics group
@item f2c
Intrinsics supported by AT&T's @code{f2c} converter and/or @code{libf2c}.
+@cindex @code{f90} intrinsics group
@item f90
Fortran 90 intrinsics.
+@cindex @code{mil} intrinsics group
@item mil
MIL-STD 1753 intrinsics (@code{MVBITS}, @code{IAND}, @code{BTEST}, and so on).
+@cindex @code{mil} intrinsics group
@item unix
UNIX intrinsics (@code{IARGC}, @code{EXIT}, @code{ERF}, and so on).
+@cindex @code{mil} intrinsics group
@item vxt
VAX/VMS FORTRAN (current as of v4) intrinsics.
@end table
@@ -7867,7 +7904,7 @@ options @code{g77} passes by running @samp{g77 -v}.
@cindex cfortran.h
@cindex Netlib
Even if you don't actually use it as a compiler, @samp{f2c} from
-@uref{ftp://ftp.netlib.org/f2c/src}, can be a useful tool when you're
+@url{ftp://ftp.netlib.org/f2c/src}, can be a useful tool when you're
interfacing (linking) Fortran and C@.
@xref{f2c Skeletons and Prototypes,,Generating Skeletons and Prototypes with @code{f2c}}.
@@ -7877,7 +7914,7 @@ build the @file{src} directory from the distribution, consult the
@code{f2c} program on your path.
Something else that might be useful is @samp{cfortran.h} from
-@uref{ftp://zebra/desy.de/cfortran}.
+@url{ftp://zebra/desy.de/cfortran}.
This is a fairly general tool which
can be used to generate interfaces for calling in both directions
between Fortran and C@.
@@ -7921,8 +7958,8 @@ the return type of a @code{REAL} @code{FUNCTION}.)
@samp{-P} option to generate C prototypes appropriate for calling the
Fortran.@footnote{The files generated like this can also be used for
inter-unit consistency checking of dummy and actual arguments, although
-the @samp{ftnchek} tool from @uref{ftp://ftp.netlib.org/fortran}
-or @uref{ftp://ftp.dsm.fordham.edu} is
+the @samp{ftnchek} tool from @url{ftp://ftp.netlib.org/fortran}
+or @url{ftp://ftp.dsm.fordham.edu} is
probably better for this purpose.}
If the Fortran code containing any
routines to be called from C is in file @file{joe.f}, use the command
@@ -7973,7 +8010,7 @@ provide a dummy version of this to avoid linkers complaining about
failure to resolve @code{MAIN__()} if linking against @file{libf2c} and
not using @code{main()} from it.
-@include install.texi
+@include g77install.texi
@node Debugging and Interfacing
@chapter Debugging and Interfacing
@@ -10164,7 +10201,7 @@ or installing @code{g77} is not provided here.
To find out about major bugs discovered in the current release and
possible workarounds for them, retrieve
-@uref{ftp://alpha.gnu.ai.mit.edu/g77.plan}.
+@url{ftp://alpha.gnu.org/g77.plan}.
(Note that some of this portion of the manual is lifted
directly from the @code{gcc} manual, with minor modifications
@@ -10270,7 +10307,7 @@ How to cope with such problems is well beyond the scope
of this manual.
However, users of Linux-based systems (such as GNU/Linux)
-should review @uref{http://www.bitwizard.nl/sig11}, a source
+should review @code{http://www.bitwizard.nl/sig11}, a source
of detailed information on diagnosing hardware problems,
by recognizing their common symptoms.
@@ -10541,7 +10578,7 @@ In the meantime, finding and fixing the programming
bugs that lead to these behaviors is, ultimately, the user's
responsibility, as difficult as that task can sometimes be.
-@cindex `infinite spaces' printed
+@cindex ``infinite spaces'' printed
@cindex spaces, endless printing of
@cindex libc, non-ANSI or non-default
@cindex C library
@@ -11029,16 +11066,17 @@ specifiers.
Supporting this requires a significant redesign or replacement
of @code{libf2c}.
-However, a future version of @code{g77} might support
-this construct when the expression is constant. For
-example:
+However, @code{g77} does support
+this construct when the expression is constant
+(as of version 0.5.22).
+For example:
@smallexample
PARAMETER (IWIDTH = 12)
10 FORMAT (I<IWIDTH>)
@end smallexample
-In the meantime, at least for output (@code{PRINT} and
+Otherwise, at least for output (@code{PRINT} and
@code{WRITE}), Fortran code making use of this feature can
be rewritten to avoid it by constructing the @code{FORMAT}
string in a @code{CHARACTER} variable or array, then
@@ -12272,8 +12310,65 @@ their use into selective changes in your own code.
@pindex ftncheck
Validate your code with @code{ftnchek} or a similar code-checking
tool.
-@code{ftncheck} can be found at @uref{ftp://ftp.netlib.org/fortran}
-or @uref{ftp://ftp.dsm.fordham.edu}.
+@code{ftncheck} can be found at @url{ftp://ftp.netlib.org/fortran}
+or @url{ftp://ftp.dsm.fordham.edu}.
+
+@pindex make
+@cindex Makefile example
+Here are some sample @file{Makefile} rules using @code{ftnchek}
+``project'' files to do cross-file checking and @code{sfmakedepend}
+(from @url{ftp://ahab.rutgers.edu/pub/perl/sfmakedepend})
+to maintain dependencies automatically.
+These assume the use of GNU @code{make}.
+
+@smallexample
+# Dummy suffix for ftnchek targets:
+.SUFFIXES: .chek
+.PHONY: chekall
+
+# How to compile .f files (for implicit rule):
+FC = g77
+# Assume `include' directory:
+FFLAGS = -Iinclude -g -O -Wall
+
+# Flags for ftnchek:
+CHEK1 = -array=0 -include=includes -noarray
+CHEK2 = -nonovice -usage=1 -notruncation
+CHEKFLAGS = $(CHEK1) $(CHEK2)
+
+# Run ftnchek with all the .prj files except the one corresponding
+# to the target's root:
+%.chek : %.f ; \
+ ftnchek $(filter-out $*.prj,$(PRJS)) $(CHEKFLAGS) \
+ -noextern -library $<
+
+# Derive a project file from a source file:
+%.prj : %.f ; \
+ ftnchek $(CHEKFLAGS) -noextern -project -library $<
+
+# The list of objects is assumed to be in variable OBJS.
+# Sources corresponding to the objects:
+SRCS = $(OBJS:%.o=%.f)
+# ftnchek project files:
+PRJS = $(OBJS:%.o=%.prj)
+
+# Build the program
+prog: $(OBJS) ; \
+ $(FC) -o $@ $(OBJS)
+
+chekall: $(PRJS) ; \
+ ftnchek $(CHEKFLAGS) $(PRJS)
+
+prjs: $(PRJS)
+
+# For Emacs M-x find-tag:
+TAGS: $(SRCS) ; \
+ etags $(SRCS)
+
+# Rebuild dependencies:
+depend: ; \
+ sfmakedepend -I $(PLTLIBDIR) -I includes -a prj $(SRCS1)
+@end smallexample
@item
Try your code out using other Fortran compilers, such as @code{f2c}.
@@ -12290,8 +12385,8 @@ exposes it more readily than other compilers.
@node Bug Lists
@section Where to Report Bugs
@cindex bug report mailing lists
-@kindex fortran@@gnu.ai.mit.edu
-Send bug reports for GNU Fortran to @email{fortran@@gnu.ai.mit.edu}.
+@kindex egcs-bugs@@cygnus.com
+Send bug reports for GNU Fortran to @email{egcs-bugs@@cygnus.com}.
Often people think of posting bug reports to a newsgroup instead of
mailing them.
@@ -12627,7 +12722,7 @@ we should be able to reproduce the crash ourselves.
If you would like to write bug fixes or improvements for the GNU Fortran
compiler, that is very helpful.
Send suggested fixes to the bug report
-mailing list, @email{fortran@@gnu.ai.mit.edu}.
+mailing list, @email{egcs-bugs@@cygnus.com}.
Please follow these guidelines so we can study your patches efficiently.
If you don't follow these guidelines, your information might still be
@@ -12752,7 +12847,7 @@ The service directory is found in the file named @file{SERVICE} in the
GNU CC distribution.
@item
-Send a message to @email{fortran@@gnu.ai.mit.edu}.
+Send a message to @email{egcs@@cygnus.com}.
@end itemize
@end ifset
@@ -13352,7 +13447,7 @@ that the explanations are given below, and the diagnostics themselves
identify the appropriate explanation.
Identification uses the GNU Info format---specifically, the @code{info}
-command that displays the explanation is given in within square
+command that displays the explanation is given within square
brackets in the diagnostic.
For example:
@@ -13556,7 +13651,7 @@ The following sample program might help:
PROGRAM JCB003
C
C Written by James Craig Burley 1997-02-23.
-C Contact via Internet email: burley@@gnu.ai.mit.edu
+C Contact via Internet email: burley@@gnu.org
C
C Determine how compilers handle non-standard REAL
C and AIMAG on DOUBLE COMPLEX operands.
diff --git a/gcc/f/install.texi b/gcc/f/g77install.texi
index 3271eeabc82..33223fc552f 100644
--- a/gcc/f/install.texi
+++ b/gcc/f/g77install.texi
@@ -5,7 +5,10 @@
@c The text of this file appears in the file INSTALL
@c in the G77 distribution, as well as in the G77 manual.
-@c 1997-09-09
+@c 1997-12-23
+
+Note most of this information is out of date and superceded by the EGCS
+install procedures. It is provided for historical reference only.
@ifclear INSTALLONLY
@node Installation
@@ -61,10 +64,11 @@ There are GNU versions of all these available---in fact,
a complete GNU UNIX system can be put together on
most systems, if desired.
+=======
The version of GNU @code{gzip} used to package this release
-is 1.24.
+is 1.2.4.
(The version of GNU @code{tar} used to package this release
-is 1.11.2.)
+is 1.12.)
@item @file{gcc-2.7.2.3.tar.gz}
You need to have this, or some other applicable, version
@@ -198,7 +202,7 @@ In any case, you can apply patches by hand---patch files
are designed for humans to read them.
The version of GNU @code{patch} used to develop this release
-is 2.4.
+is 2.5.
@item @code{make}
Your system must have @code{make}, and you will probably save
@@ -206,7 +210,7 @@ yourself a lot of trouble if it is GNU @code{make} (sometimes
referred to as @code{gmake}).
The version of GNU @code{make} used to develop this release
-is 3.73.
+is 3.76.1.
@item @code{cc}
Your system must have a working C compiler.
@@ -296,13 +300,11 @@ either @code{gcc} or @code{g77}.
These problems can occur on most or all systems.
@menu
-* GNU C Required:: Why even ANSI C is not enough.
+* GNU C Required:: Why even ANSI C is not enough.
* Patching GNU CC Necessary:: Why @code{gcc} must be patched first.
* Building GNU CC Necessary:: Why you can't build @emph{just} Fortran.
-* Missing strtoul:: If linking @code{f771} fails due to an
+* Missing strtoul:: If linking @code{f771} fails due to an
unresolved reference to @code{strtoul}.
-* Object File Differences:: It's okay that @samp{make compare} will
- flag @file{f/zzz.o}.
* Cleanup Kills Stage Directories:: A minor nit for @code{g77} developers.
* Missing gperf?:: When building requires @code{gperf}.
@end menu
@@ -394,26 +396,6 @@ Unfortunately, this meant inconveniencing users of systems not
having @code{strtoul()}, but they're using obsolete (and generally
unsupported) systems anyway.
-@node Object File Differences
-@subsubsection Object File Differences
-@cindex zzz.o
-@cindex zzz.c
-@cindex object file, differences
-@cindex differences between object files
-@cindex make compare
-
-A comparison of object files after building Stage 3 during a
-bootstrap build will result in @file{gcc/f/zzz.o} being flagged
-as different from the Stage 2 version.
-That is because it
-contains a string with an expansion of the @code{__TIME__} macro,
-which expands to the current time of day.
-It is nothing to worry about, since
-@file{gcc/f/zzz.c} doesn't contain any actual code.
-It does allow you to override its use of @code{__DATE__} and
-@code{__TIME__} by defining macros for the compilation---see the
-source code for details.
-
@node Cleanup Kills Stage Directories
@subsubsection Cleanup Kills Stage Directories
@cindex stage directories
@@ -859,11 +841,8 @@ sh[12]# @kbd{make bootstrap}
[This takes a long time, and is where most problems occur.]
@set build-gcc 12
sh[13]# @kbd{make compare}
-[This verifies that the compiler is `sane'. Only
-the file `f/zzz.o' (aka `tmp-foo1' and `tmp-foo2')
-should be in the list of object files this command
-prints as having different contents. If other files
-are printed, you have likely found a g77 bug.]
+[This verifies that the compiler is `sane'.
+If any files are printed, you have likely found a g77 bug.]
@set compare-gcc 13
sh[14]# @kbd{rm -fr stage1}
@set rm-stage1 14
@@ -1003,8 +982,8 @@ information on this step.
@item Step @value{compare-gcc}: @kbd{make compare}
@xref{Bug Lists,,Where to Port Bugs}, for information
-on where to report that you observed more than
-@file{f/zzz.o} having different contents during this
+on where to report that you observed files
+having different contents during this
phase.
@xref{Bug Reporting,,How to Report Bugs}, for
@@ -1700,13 +1679,6 @@ To save some disk space during installation, after Stage 2
is built, you can type @samp{rm -fr stage1} to remove the
binaries built during Stage 1.
-@emph{Note:} @xref{Object File Differences}, for information on
-expected differences in object files produced during Stage 2 and
-Stage 3 of a bootstrap build.
-These differences will be encountered as a result of using
-the @samp{make compare} or similar command sequence recommended
-by the GNU CC installation documentation.
-
Also, @xref{Installation,,Installing GNU CC,gcc,Using and Porting GNU CC},
for important information on building @code{gcc} that is
not described in this @code{g77} manual.
@@ -1962,7 +1934,7 @@ type these commands:
@example
sh# @kbd{cd gcc}
-sh# @kbd{touch bi-parser.c bi-parser.h c-parse.c c-parse.h cexp.c}
+sh# @kbd{touch c-parse.c c-parse.h cexp.c}
sh# @kbd{touch cp/parse.c cp/parse.h objc-parse.c}
sh#
@end example
@@ -2137,7 +2109,7 @@ until you're sure your distribution is widely used and has been
well tested.
This especially goes for those of you making any
changes to the @code{g77} sources to port @code{g77}, e.g. to OS/2.
-@email{fortran@@gnu.ai.mit.edu} has received a fair number of bug
+@email{fortran@@gnu.org} has received a fair number of bug
reports that turned out to be problems with other peoples' ports
and distributions, about which nothing could be done for the
user.
diff --git a/gcc/f/g77spec.c b/gcc/f/g77spec.c
new file mode 100644
index 00000000000..051d5d47f17
--- /dev/null
+++ b/gcc/f/g77spec.c
@@ -0,0 +1,269 @@
+/* Specific flags and argument handling of the Fortran front-end.
+ Copyright (C) 1997 Free Software Foundation, Inc.
+
+This file is part of GNU CC.
+
+GNU CC 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.
+
+GNU CC 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 GNU CC; see the file COPYING. If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA. */
+
+#include "config.h"
+
+#include <sys/types.h>
+#include <stdio.h>
+
+#include "gansidecl.h"
+
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+
+#ifdef HAVE_STRING_H
+#include <string.h>
+#endif
+
+/* This bit is set if we saw a `-xfoo' language specification. */
+#define LANGSPEC (1<<1)
+/* This bit is set if they did `-lm' or `-lmath'. */
+#define MATHLIB (1<<2)
+/* This bit is set if they did `-lc'. */
+#define WITHLIBC (1<<3)
+
+#ifndef MATH_LIBRARY
+#define MATH_LIBRARY "-lm"
+#endif
+
+#ifndef FORTRAN_LIBRARY
+#define FORTRAN_LIBRARY "-lf2c"
+#endif
+
+extern char *xmalloc PROTO((size_t));
+
+void
+lang_specific_driver (fn, in_argc, in_argv)
+ void (*fn)();
+ int *in_argc;
+ char ***in_argv;
+{
+ int i, j;
+
+ /* If non-zero, the user gave us the `-v' flag. */
+ int saw_verbose_flag = 0;
+
+ /* This will be 0 if we encounter a situation where we should not
+ link in libstdf77. */
+ int library = 1;
+
+ /* The number of arguments being added to what's in argv, other than
+ libraries. We use this to track the number of times we've inserted
+ -xf77/-xnone. */
+ int added = 2;
+
+ /* Used to track options that take arguments, so we don't go wrapping
+ those with -xf77/-xnone. */
+ char *quote = NULL;
+
+ /* The new argument list will be contained in this. */
+ char **arglist;
+
+ /* Non-zero if we saw a `-xfoo' language specification on the
+ command line. Used to avoid adding our own -xf77 if the user
+ already gave a language for the file. */
+ int saw_speclang = 0;
+
+ /* "-lm" or "-lmath" if it appears on the command line. */
+ char *saw_math = 0;
+
+ /* "-lc" if it appears on the command line. */
+ char *saw_libc = 0;
+
+ /* An array used to flag each argument that needs a bit set for
+ LANGSPEC, MATHLIB, or WITHLIBC. */
+ int *args;
+
+ /* By default, we throw on the math library. */
+ int need_math = 1;
+
+ /* The total number of arguments with the new stuff. */
+ int argc;
+
+ /* The argument list. */
+ char **argv;
+
+ /* The total number of arguments with the new stuff. */
+ int num_args = 1;
+
+ argc = *in_argc;
+ argv = *in_argv;
+
+ args = (int *) xmalloc (argc * sizeof (int));
+ bzero ((char *) args, argc * sizeof (int));
+
+ for (i = 1; i < argc; i++)
+ {
+ /* If the previous option took an argument, we swallow it here. */
+ if (quote)
+ {
+ quote = NULL;
+ continue;
+ }
+
+ /* We don't do this anymore, since we don't get them with minus
+ signs on them. */
+ if (argv[i][0] == '\0' || argv[i][1] == '\0')
+ continue;
+
+ if (argv[i][0] == '-')
+ {
+ if (library != 0 && (strcmp (argv[i], "-nostdlib") == 0
+ || strcmp (argv[i], "-nodefaultlibs") == 0))
+ {
+ library = 0;
+ }
+ else if (strcmp (argv[i], "-lm") == 0
+ || strcmp (argv[i], "-lmath") == 0
+#ifdef ALT_LIBM
+ || strcmp (argv[i], ALT_LIBM) == 0
+#endif
+ )
+ {
+ args[i] |= MATHLIB;
+ need_math = 0;
+ }
+ else if (strcmp (argv[i], "-lc") == 0)
+ args[i] |= WITHLIBC;
+ else if (strcmp (argv[i], "-v") == 0)
+ {
+ saw_verbose_flag = 1;
+ if (argc == 2)
+ {
+ /* If they only gave us `-v', don't try to link in libf2c. */
+ library = 0;
+ }
+ }
+ else if (strncmp (argv[i], "-x", 2) == 0)
+ saw_speclang = 1;
+ else if (((argv[i][2] == '\0'
+ && (char *)strchr ("bBVDUoeTuIYmLiA", argv[i][1]) != NULL)
+ || strcmp (argv[i], "-Tdata") == 0))
+ quote = argv[i];
+ else if (library != 0 && ((argv[i][2] == '\0'
+ && (char *) strchr ("cSEM", argv[i][1]) != NULL)
+ || strcmp (argv[i], "-MM") == 0))
+ {
+ /* Don't specify libraries if we won't link, since that would
+ cause a warning. */
+ library = 0;
+ added -= 2;
+ }
+ else
+ /* Pass other options through. */
+ continue;
+ }
+ else
+ {
+ int len;
+
+ if (saw_speclang)
+ {
+ saw_speclang = 0;
+ continue;
+ }
+
+ /* If the filename ends in .c or .i, put options around it.
+ But not if a specified -x option is currently active. */
+ len = strlen (argv[i]);
+ if (len > 2
+ && (argv[i][len - 1] == 'c' || argv[i][len - 1] == 'i')
+ && argv[i][len - 2] == '.')
+ {
+ args[i] |= LANGSPEC;
+ added += 2;
+ }
+ }
+ }
+
+ if (quote)
+ (*fn) ("argument to `%s' missing\n", quote);
+
+ /* If we know we don't have to do anything, bail now. */
+ if (! added && ! library)
+ {
+ free (args);
+ return;
+ }
+
+ num_args = argc + added + need_math;
+ arglist = (char **) xmalloc (num_args * sizeof (char *));
+
+ /* NOTE: We start at 1 now, not 0. */
+ for (i = 0, j = 0; i < argc; i++, j++)
+ {
+ arglist[j] = argv[i];
+
+ /* Make sure -lf2c is before the math library, since libf2c
+ itself uses those math routines. */
+ if (!saw_math && (args[i] & MATHLIB) && library)
+ {
+ --j;
+ saw_math = argv[i];
+ }
+
+ if (!saw_libc && (args[i] & WITHLIBC) && library)
+ {
+ --j;
+ saw_libc = argv[i];
+ }
+
+ /* Wrap foo.c and foo.i files in a language specification to
+ force the gcc compiler driver to run cc1plus on them. */
+ if (args[i] & LANGSPEC)
+ {
+ int len = strlen (argv[i]);
+ switch (argv[i][len - 1])
+ {
+ case 'F':
+ arglist[j++] = "-xf77-cpp-input";
+ break;
+ case 'r':
+ /* Don't do ratfor for ".for". */
+ if (argv[i][len - 2] == '.')
+ {
+ arglist[j++] = "-xratfor";
+ break;
+ }
+ default:
+ arglist[j++] = "-xf77";
+ break;
+ }
+ arglist[j++] = argv[i];
+ arglist[j] = "-xnone";
+ }
+ }
+
+ /* Add `-lf2c' if we haven't already done so. */
+ if (library)
+ arglist[j++] = FORTRAN_LIBRARY;
+ if (saw_math)
+ arglist[j++] = saw_math;
+ else if (library)
+ arglist[j++] = MATH_LIBRARY;
+ if (saw_libc)
+ arglist[j++] = saw_libc;
+
+ arglist[j] = NULL;
+
+ *in_argc = j;
+ *in_argv = arglist;
+}
diff --git a/gcc/f/gbe/2.7.2.2.diff b/gcc/f/gbe/2.7.2.2.diff
deleted file mode 100644
index e99ba671741..00000000000
--- a/gcc/f/gbe/2.7.2.2.diff
+++ /dev/null
@@ -1,11296 +0,0 @@
-IMPORTANT: After applying this patch, you must rebuild the
-Info documentation derived from the Texinfo files in the
-gcc distribution, as this patch does not include patches
-to any derived files (due to differences in the way gcc
-version 2.7.2.2 is obtained by users). Use the following
-command sequence after applying this patch:
-
- cd gcc-2.7.2.2; make -f Makefile.in gcc.info
-
-If that fails due to `makeinfo' not being installed, obtain
-texinfo-3.11.tar.gz from a GNU distribution site, unpack,
-build, and install it, and try the above command sequence
-again.
-
-
-diff -rcp2N gcc-2.7.2.2/ChangeLog g77-new/ChangeLog
-*** gcc-2.7.2.2/ChangeLog Thu Feb 20 19:24:10 1997
---- g77-new/ChangeLog Mon Aug 11 06:48:02 1997
-***************
-*** 1,2 ****
---- 1,244 ----
-+ Sun Aug 10 18:14:24 1997 Craig Burley <burley@gnu.ai.mit.edu>
-+
-+ Integrate C front end part of patch for better alias
-+ handling from John Carr <jfc@mit.edu>:
-+ * c-decl.c (grokdeclarator): Check for RID_RESTRICT
-+ flag; diagnose certain misuses; set DECL_RESTRICT as
-+ appropriate.
-+ * c-lex.c (init_lex): Set up RID_RESTRICT pointer.
-+ Unset `restrict' as reserved word.
-+ * c-lex.h: Replace RID_NOALIAS with RID_RESTRICT.
-+ * c-parse.gperf: Add `restrict' and `__restrict'
-+ keywords.
-+ * tree.h: Add DECL_RESTRICT flag.
-+
-+ Sun Aug 10 14:50:30 1997 Jim Wilson <wilson@cygnus.com>
-+
-+ * sdbout.c (plain_type_1, case ARRAY_TYPE): Verify that TYPE_DOMAIN
-+ has integer TYPE_{MAX,MIN}_VALUE before using them.
-+
-+ Mon Jul 28 15:35:38 1997 Craig Burley <burley@gnu.ai.mit.edu>
-+
-+ * combine.c (num_sign_bit_copies): Speed up the 961126-1.c
-+ case of repeated (neg (neg (neg ...))) so c-torture runs
-+ in less time.
-+
-+ * reload.c (find_reloads_toplev, find_reloads_address):
-+ These now return whether replacement by a constant, so
-+ caller can know to do other replacements. Currently if
-+ caller doesn't want that info and such replacement would
-+ happen, we crash so as to investigate the problem and
-+ learn more about it. All callers updated.
-+ (find_reloads): If pseudo replaced by constant, always
-+ update duplicates of it.
-+
-+ Mon Jul 21 00:00:24 1997 Craig Burley <burley@gnu.ai.mit.edu>
-+
-+ * fold-const.c (size_binop): Make sure overflows
-+ are flagged properly, so as to avoid silently generating
-+ bad code for, e.g., a too-large array.
-+
-+ Sun Jul 13 22:23:14 1997 Craig Burley <burley@gnu.ai.mit.edu>
-+
-+ * stmt.c (expand_expr_stmt): Must generate code for
-+ statements within an expression (gcc's `({ ... )}')
-+ even if -fsyntax-only.
-+
-+ Mon Jun 30 17:23:07 1997 Michael Meissner <meissner@cygnus.com>
-+
-+ * gcc.c (process_command): If -save-temps and -pipe were specified
-+ together, don't do -pipe.
-+
-+ Thu Jun 26 05:40:46 1997 Craig Burley <burley@gnu.ai.mit.edu>
-+
-+ * stor-layout.c (get_best_mode): Handle negative bitpos
-+ correctly, so caller doesn't get into infinite recursion
-+ trying to cope with a spurious VOIDmode.
-+
-+ Tue Jun 24 19:46:31 1997 Craig Burley <burley@gnu.ai.mit.edu>
-+
-+ * varasm.c (assemble_variable): If low part of size
-+ doesn't fit in an int, variable is too large.
-+
-+ Sat Jun 21 12:09:00 1997 Craig Burley <burley@gnu.ai.mit.edu>
-+
-+ * toplev.c (rest_of_compilation): Also temporarily set
-+ flag_unroll_all_loops to 0 during first of two calls
-+ to loop_optimize, and clean up code a bit to make it
-+ easier to read.
-+
-+ * expr.c (safe_from_p_1, safe_from_p): Fix these to use
-+ TREE_SET_CODE instead of TREE_CODE.
-+
-+ Thu Jun 19 19:30:47 1997 Craig Burley <burley@gnu.ai.mit.edu>
-+
-+ * config/alpha/alpha.c: Don't include <stamp.h> on
-+ GNU Linux machines.
-+
-+ * config/alpha/elf.c: New file for ELF systems.
-+
-+ * config/alpha/xm-alpha.h: Don't declare alloca()
-+ if it's already a macro (probably defined in stdlib.h).
-+
-+ * config/alpha/xm-linux.h (HAVE_STRERROR): #define
-+ this, according to what various people suggest.
-+
-+ * config.guess, configure: Make some (hopefully safe)
-+ changes, based mostly on gcc-2.8.0-in-development,
-+ in the hopes that these make some systems configure
-+ "out of the box" more easily, especially Alpha systems.
-+
-+ Mon Jun 9 04:26:53 1997 Craig Burley <burley@gnu.ai.mit.edu>
-+
-+ * expr.c (safe_from_p): Don't examine a given SAVE_EXPR
-+ node more than once, to avoid combinatorial explosion
-+ in complex expressions. Fortran case that triggered
-+ this had a complicated *and* complex expression with
-+ 293 unique nodes, resulting in 28 minutes of compile
-+ time mostly spent in a single top-level safe_from_p()
-+ call due to all the redundant SAVE_EXPR traversals.
-+ This change reduced the time to around 2 seconds.
-+ (safe_from_p_1): New helper function that does almost
-+ exactly what the old safe_from_p() did.
-+
-+ Sun May 18 21:18:48 1997 Craig Burley <burley@gnu.ai.mit.edu>
-+
-+ * fold-const.c (fold): Clarify why TRUNC_DIV_EXPR
-+ and FLOOR_DIV_EXPR aren't rewritten to EXACT_DIV_EXPR,
-+ clean up related code.
-+
-+ Sat May 3 13:53:00 1997 Craig Burley <burley@gnu.ai.mit.edu>
-+
-+ * config.sub: Change all `i[345]' to `i[3456]' to
-+ support Pentium Pro (this change was already made
-+ in configure for gcc-2.7.2.2).
-+
-+ From Toon Moene <toon@moene.indiv.nluug.nl>:
-+ * toplev.c (rest_of_compilation): Unroll loops
-+ only the final time through loop optimization.
-+
-+ Sun Apr 20 10:45:35 1997 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
-+
-+ * final.c (profile_function): Only call ASM_OUTPUT_REG_{PUSH,POP}
-+ if defined.
-+
-+ Wed Apr 16 22:26:16 1997 Craig Burley <burley@gnu.ai.mit.edu>
-+
-+ * alias.c, cse.c, loop.c, rtl.c, rtl.h, sched.c:
-+ Make changes submitted by <jfc@mit.edu>.
-+
-+ Sun Apr 13 19:32:53 1997 Craig Burley <burley@gnu.ai.mit.edu>
-+
-+ * fold-const.c (fold): If extra warnings enabled,
-+ warn about integer division by zero.
-+
-+ Sun Apr 13 08:15:31 1997 Bernd Schmidt <crux@Pool.Informatik.RWTH-Aachen.DE>
-+
-+ * final.c (profile_function): Save the static chain register
-+ around the call to the profiler function.
-+
-+ Sat Apr 12 14:56:42 1997 Craig Burley <burley@gnu.ai.mit.edu>
-+
-+ * unroll.c (find_splittable_givs): Permit more cases
-+ of mult_val/add_val to agree by using rtx_equal_p
-+ to compare them instead of requiring them to be
-+ integers with the same value. Also don't bother
-+ checking if ADDRESS_COST not defined (they will be
-+ equal in that case).
-+
-+ Fri Apr 11 03:30:04 1997 Craig Burley <burley@gnu.ai.mit.edu>
-+
-+ * unroll.c (find_splittable_givs): Must create a new
-+ register if the mult_val and add_val fields don't
-+ agree.
-+
-+ Fri Apr 4 23:00:55 1997 Craig Burley <burley@gnu.ai.mit.edu>
-+
-+ * fold-const.c (fold): Don't call multiple_of_p if
-+ arg1 is constant zero, to avoid crashing; simplify
-+ code accordingly.
-+
-+ Wed Feb 26 13:09:33 1997 Michael Meissner <meissner@cygnus.com>
-+
-+ * reload.c (debug_reload): Fix format string to print
-+ reload_nocombine[r].
-+
-+ Sun Feb 23 15:26:53 1997 Craig Burley <burley@gnu.ai.mit.edu>
-+
-+ * fold-const.c (multiple_of_p): Clean up and improve.
-+ (fold): Clean up invocation of multiple_of_p.
-+
-+ Sat Feb 8 04:53:27 1997 Craig Burley <burley@gnu.ai.mit.edu>
-+
-+ From <jfc@jfc.tiac.net> Fri, 07 Feb 1997 22:02:21 -0500:
-+ * alias.c (init_alias_analysis): Reduce amount of time
-+ needed to simplify the reg_base_value array in the
-+ typical case (especially involving function inlining).
-+
-+ Fri Jan 10 17:22:17 1997 Craig Burley <burley@gnu.ai.mit.edu>
-+
-+ Minor improvements/fixes to better alias handling:
-+ * Makefile.in (alias.o): Fix typo in rule (was RLT_H).
-+ * cse.c, sched.c: Fix up some indenting.
-+ * toplev.c: Add -fargument-alias flag, so Fortran users
-+ can turn C-style aliasing on once g77 defaults to
-+ -fargument-noalias-global.
-+
-+ Integrate patch for better alias handling from
-+ John Carr <jfc@mit.edu>:
-+ * Makefile.in (OBJS, alias.o): New module and rule.
-+ * alias.c: New source module.
-+ * calls.c (expand_call): Recognize alias status of calls
-+ to malloc().
-+ * combine.c (distribute_notes): New REG_NOALIAS note.
-+ * rtl.h (REG_NOALIAS): Ditto.
-+ Many other changes for new alias.c module.
-+ * cse.c: Many changes, and much code moved into alias.c.
-+ * flags.h (flag_alias_check, flag_argument_noalias):
-+ New flags.
-+ * toplev.c: New flags and related options.
-+ * local-alloc.c (validate_equiv_mem_from_store):
-+ Caller of true_dependence changed.
-+ * loop.c (NUM_STORES): Increase to 50 from 20.
-+ (prescan_loop): "const" functions don't alter unknown addresses.
-+ (invariant_p): Caller of true_dependence changed.
-+ (record_giv): Zero new unrolled and shared flags.
-+ (emit_iv_add_mult): Record base value for register.
-+ * sched.c: Many changes, mostly moving code to alias.c.
-+ (sched_note_set): SCHED_SORT macro def form, but not function,
-+ inexplicably changed.
-+ * unroll.c: Record base values for registers, etc.
-+
-+ Fri Jan 3 04:01:00 1997 Craig Burley <burley@gnu.ai.mit.edu>
-+
-+ * loop.c (check_final_value): Handle insns with no luid's
-+ appropriately, instead of crashing on INSN_LUID macro
-+ invocations.
-+
-+ Mon Dec 23 00:49:19 1996 Craig Burley <burley@gnu.ai.mit.edu>
-+
-+ * config/alpha/alpha.md: Fix pattern that matches if_then_else
-+ involving DF target, DF comparison, SF source.
-+
-+ Fri Dec 20 15:42:52 1996 Craig Burley <burley@gnu.ai.mit.edu>
-+
-+ * fold-const.c (multiple_of_p): New function.
-+ (fold): Use new function to turn *_DIV_EXPR into EXACT_DIV_EXPR.
-+
-+ Tue Oct 22 18:32:20 1996 Jim Wilson <wilson@cygnus.com>
-+
-+ * unroll.c (unroll_loop): Always reject loops with unbalanced blocks.
-+
-+ Tue Sep 24 19:37:00 1996 Jim Wilson <wilson@cygnus.com>
-+
-+ * reload.c (push_secondary_reload): Do strip paradoxical SUBREG
-+ even if reload_class is CLASS_CANNOT_CHANGE_SIZE. Change reload_mode
-+ to mode in SECONDARY_MEMORY_NEEDED and get_secondary_mem calls.
-+
-+ Mon Aug 5 16:53:36 1996 Doug Evans <dje@fallis.cygnus.com>
-+
-+ * stor-layout.c (layout_record): Correct overflow test for 0 sized
-+ fields.
-+
- Sat Jun 29 12:33:39 1996 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
-
-*************** Tue Jun 11 20:18:03 1996 Per Bothner <b
-*** 8,11 ****
---- 250,259 ----
- * alpha.h (FIXPROTO_INIT): Define new macro.
-
-+ Sat May 18 20:17:27 1996 Jim Wilson <wilson@cygnus.com>
-+
-+ * unroll.c (copy_loop_body): When update split DEST_ADDR giv,
-+ check to make sure it was split.
-+ (find_splittable_givs): Fix reversed test of verify_addresses result.
-+
- Fri May 10 18:35:00 1996 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
-
-*************** Mon Feb 19 07:35:07 1996 Torbjorn Granl
-*** 66,69 ****
---- 314,322 ----
- * rs6000.md (not:SI with assign and compare): Fix typo.
-
-+ Tue Feb 13 17:43:46 1996 Jim Wilson <wilson@cygnus.com>
-+
-+ * integrate.c (save_constants_in_decl_trees): New function.
-+ (save_for_inline_copying, save_for_inline_nocopy): Call it.
-+
- Wed Jan 24 18:00:12 1996 Brendan Kehoe <brendan@lisa.cygnus.com>
-
-*************** Tue Jan 16 06:01:28 1996 Thomas Graiche
-*** 81,88 ****
---- 334,357 ----
- * i386/freebsd.h (ASM_WEAKEN_LABEL): Deleted; not supported.
-
-+ Mon Jan 15 07:22:59 1996 Michel Delval (mfd@ccv.fr)
-+
-+ * reload.c (find_equiv_reg): Apply single_set, not PATTERN, to WHERE.
-+
- Sun Jan 7 17:11:11 1996 David Edelsohn <edelsohn@mhpcc.edu>
-
- * collect2.c (scan_libraries): Correct Import File ID interpretation.
-
-+ Mon Jan 1 09:05:07 1996 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
-+
-+ * local-alloc.c (reg_equiv_replacement): New variable.
-+ (memref_referenced_p, case REG): Check for reg_equiv_replacement.
-+ (update_equiv_regs): reg_equiv_replacement now file-scope.
-+
-+ Fri Dec 22 17:29:42 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
-+
-+ * reload.c (find_valid_class): New function.
-+ (push_reload): Use it in cases where a SUBREG and its contents
-+ both need to be reloaded.
-+
- Thu Dec 28 22:24:53 1995 Michael Meissner <meissner@tiktok.cygnus.com>
-
-*************** Mon Dec 18 18:40:34 1995 Jim Wilson <w
-*** 99,102 ****
---- 368,376 ----
- above.
-
-+ Sun Dec 17 06:37:00 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
-+
-+ * reload.c (push_secondary_reload): Don't strip paradoxical SUBREG
-+ if reload_class is CLASS_CANNOT_CHANGE_SIZE.
-+
- Sat Dec 16 07:03:33 1995 Philippe De Muyter (phdm@info.ucl.ac.be)
-
-*************** Sat Dec 9 18:05:03 1995 Jim Wilson <w
-*** 113,116 ****
---- 387,395 ----
- * expr.c (expand_expr, case INDIRECT_REF): Correct typo in May 8
- change.
-+
-+ Fri Dec 8 19:17:30 1995 Mike Meissner <meissner@beauty.cygnus.com>
-+
-+ * rs6000/rs6000.c (input_operand): Allow any integer constant, not
-+ just integers that fit in 1 instruction.
-
- Sun Nov 26 14:47:42 1995 Richard Kenner <kenner@mole.gnu.ai.mit.edu>
-diff -rcp2N gcc-2.7.2.2/Makefile.in g77-new/Makefile.in
-*** gcc-2.7.2.2/Makefile.in Sun Nov 26 14:44:25 1995
---- g77-new/Makefile.in Sun Aug 10 18:46:06 1997
-*************** OBJS = toplev.o version.o tree.o print-t
-*** 519,523 ****
- integrate.o jump.o cse.o loop.o unroll.o flow.o stupid.o combine.o \
- regclass.o local-alloc.o global.o reload.o reload1.o caller-save.o \
-! insn-peep.o reorg.o sched.o final.o recog.o reg-stack.o \
- insn-opinit.o insn-recog.o insn-extract.o insn-output.o insn-emit.o \
- insn-attrtab.o $(out_object_file) getpwd.o convert.o $(EXTRA_OBJS)
---- 519,523 ----
- integrate.o jump.o cse.o loop.o unroll.o flow.o stupid.o combine.o \
- regclass.o local-alloc.o global.o reload.o reload1.o caller-save.o \
-! insn-peep.o reorg.o alias.o sched.o final.o recog.o reg-stack.o \
- insn-opinit.o insn-recog.o insn-extract.o insn-output.o insn-emit.o \
- insn-attrtab.o $(out_object_file) getpwd.o convert.o $(EXTRA_OBJS)
-*************** LIB2FUNCS = _muldi3 _divdi3 _moddi3 _udi
-*** 570,574 ****
- _fixxfdi _fixunsxfdi _floatdixf _fixunsxfsi \
- _fixtfdi _fixunstfdi _floatditf \
-! __gcc_bcmp _varargs _eprintf _op_new _op_vnew _new_handler _op_delete \
- _op_vdel _bb _shtab _clear_cache _trampoline __main _exit _ctors _eh \
- _pure
---- 570,575 ----
- _fixxfdi _fixunsxfdi _floatdixf _fixunsxfsi \
- _fixtfdi _fixunstfdi _floatditf \
-! __gcc_bcmp _varargs __dummy _eprintf \
-! _op_new _op_vnew _new_handler _op_delete \
- _op_vdel _bb _shtab _clear_cache _trampoline __main _exit _ctors _eh \
- _pure
-*************** expr.o : expr.c $(CONFIG_H) $(RTL_H) $(T
-*** 1179,1183 ****
- insn-flags.h insn-codes.h expr.h insn-config.h recog.h output.h \
- typeclass.h bytecode.h bc-opcode.h bc-typecd.h bc-typecd.def bc-optab.h \
-! bc-emit.h modemap.def
- calls.o : calls.c $(CONFIG_H) $(RTL_H) $(TREE_H) flags.h expr.h insn-codes.h \
- insn-flags.h
---- 1180,1184 ----
- insn-flags.h insn-codes.h expr.h insn-config.h recog.h output.h \
- typeclass.h bytecode.h bc-opcode.h bc-typecd.h bc-typecd.def bc-optab.h \
-! bc-emit.h modemap.def hard-reg-set.h
- calls.o : calls.c $(CONFIG_H) $(RTL_H) $(TREE_H) flags.h expr.h insn-codes.h \
- insn-flags.h
-*************** reorg.o : reorg.c $(CONFIG_H) $(RTL_H) c
-*** 1238,1241 ****
---- 1239,1243 ----
- basic-block.h regs.h insn-config.h insn-attr.h insn-flags.h recog.h \
- flags.h output.h
-+ alias.o : $(CONFIG_H) $(RTL_H) flags.h hard-reg-set.h regs.h
- sched.o : sched.c $(CONFIG_H) $(RTL_H) basic-block.h regs.h hard-reg-set.h \
- flags.h insn-config.h insn-attr.h
-diff -rcp2N gcc-2.7.2.2/alias.c g77-new/alias.c
-*** gcc-2.7.2.2/alias.c Wed Dec 31 19:00:00 1969
---- g77-new/alias.c Thu Jul 10 20:08:43 1997
-***************
-*** 0 ****
---- 1,996 ----
-+ /* Alias analysis for GNU C, by John Carr (jfc@mit.edu).
-+ Derived in part from sched.c */
-+ #include "config.h"
-+ #include "rtl.h"
-+ #include "expr.h"
-+ #include "regs.h"
-+ #include "hard-reg-set.h"
-+ #include "flags.h"
-+
-+ static rtx canon_rtx PROTO((rtx));
-+ static int rtx_equal_for_memref_p PROTO((rtx, rtx));
-+ static rtx find_symbolic_term PROTO((rtx));
-+ static int memrefs_conflict_p PROTO((int, rtx, int, rtx,
-+ HOST_WIDE_INT));
-+
-+ /* Set up all info needed to perform alias analysis on memory references. */
-+
-+ #define SIZE_FOR_MODE(X) (GET_MODE_SIZE (GET_MODE (X)))
-+
-+ /* reg_base_value[N] gives an address to which register N is related.
-+ If all sets after the first add or subtract to the current value
-+ or otherwise modify it so it does not point to a different top level
-+ object, reg_base_value[N] is equal to the address part of the source
-+ of the first set. The value will be a SYMBOL_REF, a LABEL_REF, or
-+ (address (reg)) to indicate that the address is derived from an
-+ argument or fixed register. */
-+ rtx *reg_base_value;
-+ unsigned int reg_base_value_size; /* size of reg_base_value array */
-+ #define REG_BASE_VALUE(X) \
-+ (REGNO (X) < reg_base_value_size ? reg_base_value[REGNO (X)] : 0)
-+
-+ /* Vector indexed by N giving the initial (unchanging) value known
-+ for pseudo-register N. */
-+ rtx *reg_known_value;
-+
-+ /* Indicates number of valid entries in reg_known_value. */
-+ static int reg_known_value_size;
-+
-+ /* Vector recording for each reg_known_value whether it is due to a
-+ REG_EQUIV note. Future passes (viz., reload) may replace the
-+ pseudo with the equivalent expression and so we account for the
-+ dependences that would be introduced if that happens. */
-+ /* ??? This is a problem only on the Convex. The REG_EQUIV notes created in
-+ assign_parms mention the arg pointer, and there are explicit insns in the
-+ RTL that modify the arg pointer. Thus we must ensure that such insns don't
-+ get scheduled across each other because that would invalidate the REG_EQUIV
-+ notes. One could argue that the REG_EQUIV notes are wrong, but solving
-+ the problem in the scheduler will likely give better code, so we do it
-+ here. */
-+ char *reg_known_equiv_p;
-+
-+ /* Inside SRC, the source of a SET, find a base address. */
-+
-+ /* When copying arguments into pseudo-registers, record the (ADDRESS)
-+ expression for the argument directly so that even if the argument
-+ register is changed later (e.g. for a function call) the original
-+ value is noted. */
-+ static int copying_arguments;
-+
-+ static rtx
-+ find_base_value (src)
-+ register rtx src;
-+ {
-+ switch (GET_CODE (src))
-+ {
-+ case SYMBOL_REF:
-+ case LABEL_REF:
-+ return src;
-+
-+ case REG:
-+ if (copying_arguments && REGNO (src) < FIRST_PSEUDO_REGISTER)
-+ return reg_base_value[REGNO (src)];
-+ return src;
-+
-+ case MEM:
-+ /* Check for an argument passed in memory. Only record in the
-+ copying-arguments block; it is too hard to track changes
-+ otherwise. */
-+ if (copying_arguments
-+ && (XEXP (src, 0) == arg_pointer_rtx
-+ || (GET_CODE (XEXP (src, 0)) == PLUS
-+ && XEXP (XEXP (src, 0), 0) == arg_pointer_rtx)))
-+ return gen_rtx (ADDRESS, VOIDmode, src);
-+ return 0;
-+
-+ case CONST:
-+ src = XEXP (src, 0);
-+ if (GET_CODE (src) != PLUS && GET_CODE (src) != MINUS)
-+ break;
-+ /* fall through */
-+ case PLUS:
-+ case MINUS:
-+ /* Guess which operand to set the register equivalent to. */
-+ /* If the first operand is a symbol or the second operand is
-+ an integer, the first operand is the base address. */
-+ if (GET_CODE (XEXP (src, 0)) == SYMBOL_REF
-+ || GET_CODE (XEXP (src, 0)) == LABEL_REF
-+ || GET_CODE (XEXP (src, 1)) == CONST_INT)
-+ return XEXP (src, 0);
-+ /* If an operand is a register marked as a pointer, it is the base. */
-+ if (GET_CODE (XEXP (src, 0)) == REG
-+ && REGNO_POINTER_FLAG (REGNO (XEXP (src, 0))))
-+ src = XEXP (src, 0);
-+ else if (GET_CODE (XEXP (src, 1)) == REG
-+ && REGNO_POINTER_FLAG (REGNO (XEXP (src, 1))))
-+ src = XEXP (src, 1);
-+ else
-+ return 0;
-+ if (copying_arguments && REGNO (src) < FIRST_PSEUDO_REGISTER)
-+ return reg_base_value[REGNO (src)];
-+ return src;
-+
-+ case AND:
-+ /* If the second operand is constant set the base
-+ address to the first operand. */
-+ if (GET_CODE (XEXP (src, 1)) == CONST_INT
-+ && GET_CODE (XEXP (src, 0)) == REG)
-+ {
-+ src = XEXP (src, 0);
-+ if (copying_arguments && REGNO (src) < FIRST_PSEUDO_REGISTER)
-+ return reg_base_value[REGNO (src)];
-+ return src;
-+ }
-+ return 0;
-+
-+ case HIGH:
-+ return XEXP (src, 0);
-+ }
-+
-+ return 0;
-+ }
-+
-+ /* Called from init_alias_analysis indirectly through note_stores. */
-+
-+ /* while scanning insns to find base values, reg_seen[N] is nonzero if
-+ register N has been set in this function. */
-+ static char *reg_seen;
-+
-+ static
-+ void record_set (dest, set)
-+ rtx dest, set;
-+ {
-+ register int regno;
-+ rtx src;
-+
-+ if (GET_CODE (dest) != REG)
-+ return;
-+
-+ regno = REGNO (dest);
-+
-+ if (set)
-+ {
-+ /* A CLOBBER wipes out any old value but does not prevent a previously
-+ unset register from acquiring a base address (i.e. reg_seen is not
-+ set). */
-+ if (GET_CODE (set) == CLOBBER)
-+ {
-+ reg_base_value[regno] = 0;
-+ return;
-+ }
-+ src = SET_SRC (set);
-+ }
-+ else
-+ {
-+ static int unique_id;
-+ if (reg_seen[regno])
-+ {
-+ reg_base_value[regno] = 0;
-+ return;
-+ }
-+ reg_seen[regno] = 1;
-+ reg_base_value[regno] = gen_rtx (ADDRESS, Pmode,
-+ GEN_INT (unique_id++));
-+ return;
-+ }
-+
-+ /* This is not the first set. If the new value is not related to the
-+ old value, forget the base value. Note that the following code is
-+ not detected:
-+ extern int x, y; int *p = &x; p += (&y-&x);
-+ ANSI C does not allow computing the difference of addresses
-+ of distinct top level objects. */
-+ if (reg_base_value[regno])
-+ switch (GET_CODE (src))
-+ {
-+ case PLUS:
-+ case MINUS:
-+ if (XEXP (src, 0) != dest && XEXP (src, 1) != dest)
-+ reg_base_value[regno] = 0;
-+ break;
-+ case AND:
-+ if (XEXP (src, 0) != dest || GET_CODE (XEXP (src, 1)) != CONST_INT)
-+ reg_base_value[regno] = 0;
-+ break;
-+ case LO_SUM:
-+ if (XEXP (src, 0) != dest)
-+ reg_base_value[regno] = 0;
-+ break;
-+ default:
-+ reg_base_value[regno] = 0;
-+ break;
-+ }
-+ /* If this is the first set of a register, record the value. */
-+ else if ((regno >= FIRST_PSEUDO_REGISTER || ! fixed_regs[regno])
-+ && ! reg_seen[regno] && reg_base_value[regno] == 0)
-+ reg_base_value[regno] = find_base_value (src);
-+
-+ reg_seen[regno] = 1;
-+ }
-+
-+ /* Called from loop optimization when a new pseudo-register is created. */
-+ void
-+ record_base_value (regno, val)
-+ int regno;
-+ rtx val;
-+ {
-+ if (!flag_alias_check || regno >= reg_base_value_size)
-+ return;
-+ if (GET_CODE (val) == REG)
-+ {
-+ if (REGNO (val) < reg_base_value_size)
-+ reg_base_value[regno] = reg_base_value[REGNO (val)];
-+ return;
-+ }
-+ reg_base_value[regno] = find_base_value (val);
-+ }
-+
-+ static rtx
-+ canon_rtx (x)
-+ rtx x;
-+ {
-+ /* Recursively look for equivalences. */
-+ if (GET_CODE (x) == REG && REGNO (x) >= FIRST_PSEUDO_REGISTER
-+ && REGNO (x) < reg_known_value_size)
-+ return reg_known_value[REGNO (x)] == x
-+ ? x : canon_rtx (reg_known_value[REGNO (x)]);
-+ else if (GET_CODE (x) == PLUS)
-+ {
-+ rtx x0 = canon_rtx (XEXP (x, 0));
-+ rtx x1 = canon_rtx (XEXP (x, 1));
-+
-+ if (x0 != XEXP (x, 0) || x1 != XEXP (x, 1))
-+ {
-+ /* We can tolerate LO_SUMs being offset here; these
-+ rtl are used for nothing other than comparisons. */
-+ if (GET_CODE (x0) == CONST_INT)
-+ return plus_constant_for_output (x1, INTVAL (x0));
-+ else if (GET_CODE (x1) == CONST_INT)
-+ return plus_constant_for_output (x0, INTVAL (x1));
-+ return gen_rtx (PLUS, GET_MODE (x), x0, x1);
-+ }
-+ }
-+ /* This gives us much better alias analysis when called from
-+ the loop optimizer. Note we want to leave the original
-+ MEM alone, but need to return the canonicalized MEM with
-+ all the flags with their original values. */
-+ else if (GET_CODE (x) == MEM)
-+ {
-+ rtx addr = canon_rtx (XEXP (x, 0));
-+ if (addr != XEXP (x, 0))
-+ {
-+ rtx new = gen_rtx (MEM, GET_MODE (x), addr);
-+ MEM_VOLATILE_P (new) = MEM_VOLATILE_P (x);
-+ RTX_UNCHANGING_P (new) = RTX_UNCHANGING_P (x);
-+ MEM_IN_STRUCT_P (new) = MEM_IN_STRUCT_P (x);
-+ x = new;
-+ }
-+ }
-+ return x;
-+ }
-+
-+ /* Return 1 if X and Y are identical-looking rtx's.
-+
-+ We use the data in reg_known_value above to see if two registers with
-+ different numbers are, in fact, equivalent. */
-+
-+ static int
-+ rtx_equal_for_memref_p (x, y)
-+ rtx x, y;
-+ {
-+ register int i;
-+ register int j;
-+ register enum rtx_code code;
-+ register char *fmt;
-+
-+ if (x == 0 && y == 0)
-+ return 1;
-+ if (x == 0 || y == 0)
-+ return 0;
-+ x = canon_rtx (x);
-+ y = canon_rtx (y);
-+
-+ if (x == y)
-+ return 1;
-+
-+ code = GET_CODE (x);
-+ /* Rtx's of different codes cannot be equal. */
-+ if (code != GET_CODE (y))
-+ return 0;
-+
-+ /* (MULT:SI x y) and (MULT:HI x y) are NOT equivalent.
-+ (REG:SI x) and (REG:HI x) are NOT equivalent. */
-+
-+ if (GET_MODE (x) != GET_MODE (y))
-+ return 0;
-+
-+ /* REG, LABEL_REF, and SYMBOL_REF can be compared nonrecursively. */
-+
-+ if (code == REG)
-+ return REGNO (x) == REGNO (y);
-+ if (code == LABEL_REF)
-+ return XEXP (x, 0) == XEXP (y, 0);
-+ if (code == SYMBOL_REF)
-+ return XSTR (x, 0) == XSTR (y, 0);
-+
-+ /* For commutative operations, the RTX match if the operand match in any
-+ order. Also handle the simple binary and unary cases without a loop. */
-+ if (code == EQ || code == NE || GET_RTX_CLASS (code) == 'c')
-+ return ((rtx_equal_for_memref_p (XEXP (x, 0), XEXP (y, 0))
-+ && rtx_equal_for_memref_p (XEXP (x, 1), XEXP (y, 1)))
-+ || (rtx_equal_for_memref_p (XEXP (x, 0), XEXP (y, 1))
-+ && rtx_equal_for_memref_p (XEXP (x, 1), XEXP (y, 0))));
-+ else if (GET_RTX_CLASS (code) == '<' || GET_RTX_CLASS (code) == '2')
-+ return (rtx_equal_for_memref_p (XEXP (x, 0), XEXP (y, 0))
-+ && rtx_equal_for_memref_p (XEXP (x, 1), XEXP (y, 1)));
-+ else if (GET_RTX_CLASS (code) == '1')
-+ return rtx_equal_for_memref_p (XEXP (x, 0), XEXP (y, 0));
-+
-+ /* Compare the elements. If any pair of corresponding elements
-+ fail to match, return 0 for the whole things. */
-+
-+ fmt = GET_RTX_FORMAT (code);
-+ for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
-+ {
-+ switch (fmt[i])
-+ {
-+ case 'w':
-+ if (XWINT (x, i) != XWINT (y, i))
-+ return 0;
-+ break;
-+
-+ case 'n':
-+ case 'i':
-+ if (XINT (x, i) != XINT (y, i))
-+ return 0;
-+ break;
-+
-+ case 'V':
-+ case 'E':
-+ /* Two vectors must have the same length. */
-+ if (XVECLEN (x, i) != XVECLEN (y, i))
-+ return 0;
-+
-+ /* And the corresponding elements must match. */
-+ for (j = 0; j < XVECLEN (x, i); j++)
-+ if (rtx_equal_for_memref_p (XVECEXP (x, i, j), XVECEXP (y, i, j)) == 0)
-+ return 0;
-+ break;
-+
-+ case 'e':
-+ if (rtx_equal_for_memref_p (XEXP (x, i), XEXP (y, i)) == 0)
-+ return 0;
-+ break;
-+
-+ case 'S':
-+ case 's':
-+ if (strcmp (XSTR (x, i), XSTR (y, i)))
-+ return 0;
-+ break;
-+
-+ case 'u':
-+ /* These are just backpointers, so they don't matter. */
-+ break;
-+
-+ case '0':
-+ break;
-+
-+ /* It is believed that rtx's at this level will never
-+ contain anything but integers and other rtx's,
-+ except for within LABEL_REFs and SYMBOL_REFs. */
-+ default:
-+ abort ();
-+ }
-+ }
-+ return 1;
-+ }
-+
-+ /* Given an rtx X, find a SYMBOL_REF or LABEL_REF within
-+ X and return it, or return 0 if none found. */
-+
-+ static rtx
-+ find_symbolic_term (x)
-+ rtx x;
-+ {
-+ register int i;
-+ register enum rtx_code code;
-+ register char *fmt;
-+
-+ code = GET_CODE (x);
-+ if (code == SYMBOL_REF || code == LABEL_REF)
-+ return x;
-+ if (GET_RTX_CLASS (code) == 'o')
-+ return 0;
-+
-+ fmt = GET_RTX_FORMAT (code);
-+ for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
-+ {
-+ rtx t;
-+
-+ if (fmt[i] == 'e')
-+ {
-+ t = find_symbolic_term (XEXP (x, i));
-+ if (t != 0)
-+ return t;
-+ }
-+ else if (fmt[i] == 'E')
-+ break;
-+ }
-+ return 0;
-+ }
-+
-+ static rtx
-+ find_base_term (x)
-+ register rtx x;
-+ {
-+ switch (GET_CODE (x))
-+ {
-+ case REG:
-+ return REG_BASE_VALUE (x);
-+
-+ case HIGH:
-+ return find_base_term (XEXP (x, 0));
-+
-+ case CONST:
-+ x = XEXP (x, 0);
-+ if (GET_CODE (x) != PLUS && GET_CODE (x) != MINUS)
-+ return 0;
-+ /* fall through */
-+ case LO_SUM:
-+ case PLUS:
-+ case MINUS:
-+ {
-+ rtx tmp = find_base_term (XEXP (x, 0));
-+ if (tmp)
-+ return tmp;
-+ return find_base_term (XEXP (x, 1));
-+ }
-+
-+ case AND:
-+ if (GET_CODE (XEXP (x, 0)) == REG && GET_CODE (XEXP (x, 1)) == CONST_INT)
-+ return REG_BASE_VALUE (XEXP (x, 0));
-+ return 0;
-+
-+ case SYMBOL_REF:
-+ case LABEL_REF:
-+ return x;
-+
-+ default:
-+ return 0;
-+ }
-+ }
-+
-+ /* Return 0 if the addresses X and Y are known to point to different
-+ objects, 1 if they might be pointers to the same object. */
-+
-+ static int
-+ base_alias_check (x, y)
-+ rtx x, y;
-+ {
-+ rtx x_base = find_base_term (x);
-+ rtx y_base = find_base_term (y);
-+
-+ /* If either base address is unknown or the base addresses are equal,
-+ nothing is known about aliasing. */
-+
-+ if (x_base == 0 || y_base == 0 || rtx_equal_p (x_base, y_base))
-+ return 1;
-+
-+ /* The base addresses of the read and write are different
-+ expressions. If they are both symbols there is no
-+ conflict. */
-+ if (GET_CODE (x_base) != ADDRESS && GET_CODE (y_base) != ADDRESS)
-+ return 0;
-+
-+ /* If one address is a stack reference there can be no alias:
-+ stack references using different base registers do not alias,
-+ a stack reference can not alias a parameter, and a stack reference
-+ can not alias a global. */
-+ if ((GET_CODE (x_base) == ADDRESS && GET_MODE (x_base) == Pmode)
-+ || (GET_CODE (y_base) == ADDRESS && GET_MODE (y_base) == Pmode))
-+ return 0;
-+
-+ if (! flag_argument_noalias)
-+ return 1;
-+
-+ if (flag_argument_noalias > 1)
-+ return 0;
-+
-+ /* Weak noalias assertion (arguments are distinct, but may match globals). */
-+ return ! (GET_MODE (x_base) == VOIDmode && GET_MODE (y_base) == VOIDmode);
-+ }
-+
-+ /* Return nonzero if X and Y (memory addresses) could reference the
-+ same location in memory. C is an offset accumulator. When
-+ C is nonzero, we are testing aliases between X and Y + C.
-+ XSIZE is the size in bytes of the X reference,
-+ similarly YSIZE is the size in bytes for Y.
-+
-+ If XSIZE or YSIZE is zero, we do not know the amount of memory being
-+ referenced (the reference was BLKmode), so make the most pessimistic
-+ assumptions.
-+
-+ We recognize the following cases of non-conflicting memory:
-+
-+ (1) addresses involving the frame pointer cannot conflict
-+ with addresses involving static variables.
-+ (2) static variables with different addresses cannot conflict.
-+
-+ Nice to notice that varying addresses cannot conflict with fp if no
-+ local variables had their addresses taken, but that's too hard now. */
-+
-+
-+ static int
-+ memrefs_conflict_p (xsize, x, ysize, y, c)
-+ register rtx x, y;
-+ int xsize, ysize;
-+ HOST_WIDE_INT c;
-+ {
-+ if (GET_CODE (x) == HIGH)
-+ x = XEXP (x, 0);
-+ else if (GET_CODE (x) == LO_SUM)
-+ x = XEXP (x, 1);
-+ else
-+ x = canon_rtx (x);
-+ if (GET_CODE (y) == HIGH)
-+ y = XEXP (y, 0);
-+ else if (GET_CODE (y) == LO_SUM)
-+ y = XEXP (y, 1);
-+ else
-+ y = canon_rtx (y);
-+
-+ if (rtx_equal_for_memref_p (x, y))
-+ {
-+ if (xsize == 0 || ysize == 0)
-+ return 1;
-+ if (c >= 0 && xsize > c)
-+ return 1;
-+ if (c < 0 && ysize+c > 0)
-+ return 1;
-+ return 0;
-+ }
-+
-+ if (y == frame_pointer_rtx || y == hard_frame_pointer_rtx
-+ || y == stack_pointer_rtx)
-+ {
-+ rtx t = y;
-+ int tsize = ysize;
-+ y = x; ysize = xsize;
-+ x = t; xsize = tsize;
-+ }
-+
-+ if (x == frame_pointer_rtx || x == hard_frame_pointer_rtx
-+ || x == stack_pointer_rtx)
-+ {
-+ rtx y1;
-+
-+ if (CONSTANT_P (y))
-+ return 0;
-+
-+ if (GET_CODE (y) == PLUS
-+ && canon_rtx (XEXP (y, 0)) == x
-+ && (y1 = canon_rtx (XEXP (y, 1)))
-+ && GET_CODE (y1) == CONST_INT)
-+ {
-+ c += INTVAL (y1);
-+ return (xsize == 0 || ysize == 0
-+ || (c >= 0 && xsize > c) || (c < 0 && ysize+c > 0));
-+ }
-+
-+ if (GET_CODE (y) == PLUS
-+ && (y1 = canon_rtx (XEXP (y, 0)))
-+ && CONSTANT_P (y1))
-+ return 0;
-+
-+ return 1;
-+ }
-+
-+ if (GET_CODE (x) == PLUS)
-+ {
-+ /* The fact that X is canonicalized means that this
-+ PLUS rtx is canonicalized. */
-+ rtx x0 = XEXP (x, 0);
-+ rtx x1 = XEXP (x, 1);
-+
-+ if (GET_CODE (y) == PLUS)
-+ {
-+ /* The fact that Y is canonicalized means that this
-+ PLUS rtx is canonicalized. */
-+ rtx y0 = XEXP (y, 0);
-+ rtx y1 = XEXP (y, 1);
-+
-+ if (rtx_equal_for_memref_p (x1, y1))
-+ return memrefs_conflict_p (xsize, x0, ysize, y0, c);
-+ if (rtx_equal_for_memref_p (x0, y0))
-+ return memrefs_conflict_p (xsize, x1, ysize, y1, c);
-+ if (GET_CODE (x1) == CONST_INT)
-+ if (GET_CODE (y1) == CONST_INT)
-+ return memrefs_conflict_p (xsize, x0, ysize, y0,
-+ c - INTVAL (x1) + INTVAL (y1));
-+ else
-+ return memrefs_conflict_p (xsize, x0, ysize, y, c - INTVAL (x1));
-+ else if (GET_CODE (y1) == CONST_INT)
-+ return memrefs_conflict_p (xsize, x, ysize, y0, c + INTVAL (y1));
-+
-+ /* Handle case where we cannot understand iteration operators,
-+ but we notice that the base addresses are distinct objects. */
-+ /* ??? Is this still necessary? */
-+ x = find_symbolic_term (x);
-+ if (x == 0)
-+ return 1;
-+ y = find_symbolic_term (y);
-+ if (y == 0)
-+ return 1;
-+ return rtx_equal_for_memref_p (x, y);
-+ }
-+ else if (GET_CODE (x1) == CONST_INT)
-+ return memrefs_conflict_p (xsize, x0, ysize, y, c - INTVAL (x1));
-+ }
-+ else if (GET_CODE (y) == PLUS)
-+ {
-+ /* The fact that Y is canonicalized means that this
-+ PLUS rtx is canonicalized. */
-+ rtx y0 = XEXP (y, 0);
-+ rtx y1 = XEXP (y, 1);
-+
-+ if (GET_CODE (y1) == CONST_INT)
-+ return memrefs_conflict_p (xsize, x, ysize, y0, c + INTVAL (y1));
-+ else
-+ return 1;
-+ }
-+
-+ if (GET_CODE (x) == GET_CODE (y))
-+ switch (GET_CODE (x))
-+ {
-+ case MULT:
-+ {
-+ /* Handle cases where we expect the second operands to be the
-+ same, and check only whether the first operand would conflict
-+ or not. */
-+ rtx x0, y0;
-+ rtx x1 = canon_rtx (XEXP (x, 1));
-+ rtx y1 = canon_rtx (XEXP (y, 1));
-+ if (! rtx_equal_for_memref_p (x1, y1))
-+ return 1;
-+ x0 = canon_rtx (XEXP (x, 0));
-+ y0 = canon_rtx (XEXP (y, 0));
-+ if (rtx_equal_for_memref_p (x0, y0))
-+ return (xsize == 0 || ysize == 0
-+ || (c >= 0 && xsize > c) || (c < 0 && ysize+c > 0));
-+
-+ /* Can't properly adjust our sizes. */
-+ if (GET_CODE (x1) != CONST_INT)
-+ return 1;
-+ xsize /= INTVAL (x1);
-+ ysize /= INTVAL (x1);
-+ c /= INTVAL (x1);
-+ return memrefs_conflict_p (xsize, x0, ysize, y0, c);
-+ }
-+ }
-+
-+ /* Treat an access through an AND (e.g. a subword access on an Alpha)
-+ as an access with indeterminate size. */
-+ if (GET_CODE (x) == AND && GET_CODE (XEXP (x, 1)) == CONST_INT)
-+ return memrefs_conflict_p (0, XEXP (x, 0), ysize, y, c);
-+ if (GET_CODE (y) == AND && GET_CODE (XEXP (y, 1)) == CONST_INT)
-+ return memrefs_conflict_p (xsize, x, 0, XEXP (y, 0), c);
-+
-+ if (CONSTANT_P (x))
-+ {
-+ if (GET_CODE (x) == CONST_INT && GET_CODE (y) == CONST_INT)
-+ {
-+ c += (INTVAL (y) - INTVAL (x));
-+ return (xsize == 0 || ysize == 0
-+ || (c >= 0 && xsize > c) || (c < 0 && ysize+c > 0));
-+ }
-+
-+ if (GET_CODE (x) == CONST)
-+ {
-+ if (GET_CODE (y) == CONST)
-+ return memrefs_conflict_p (xsize, canon_rtx (XEXP (x, 0)),
-+ ysize, canon_rtx (XEXP (y, 0)), c);
-+ else
-+ return memrefs_conflict_p (xsize, canon_rtx (XEXP (x, 0)),
-+ ysize, y, c);
-+ }
-+ if (GET_CODE (y) == CONST)
-+ return memrefs_conflict_p (xsize, x, ysize,
-+ canon_rtx (XEXP (y, 0)), c);
-+
-+ if (CONSTANT_P (y))
-+ return (rtx_equal_for_memref_p (x, y)
-+ && (xsize == 0 || ysize == 0
-+ || (c >= 0 && xsize > c) || (c < 0 && ysize+c > 0)));
-+
-+ return 1;
-+ }
-+ return 1;
-+ }
-+
-+ /* Functions to compute memory dependencies.
-+
-+ Since we process the insns in execution order, we can build tables
-+ to keep track of what registers are fixed (and not aliased), what registers
-+ are varying in known ways, and what registers are varying in unknown
-+ ways.
-+
-+ If both memory references are volatile, then there must always be a
-+ dependence between the two references, since their order can not be
-+ changed. A volatile and non-volatile reference can be interchanged
-+ though.
-+
-+ A MEM_IN_STRUCT reference at a non-QImode varying address can never
-+ conflict with a non-MEM_IN_STRUCT reference at a fixed address. We must
-+ allow QImode aliasing because the ANSI C standard allows character
-+ pointers to alias anything. We are assuming that characters are
-+ always QImode here. */
-+
-+ /* Read dependence: X is read after read in MEM takes place. There can
-+ only be a dependence here if both reads are volatile. */
-+
-+ int
-+ read_dependence (mem, x)
-+ rtx mem;
-+ rtx x;
-+ {
-+ return MEM_VOLATILE_P (x) && MEM_VOLATILE_P (mem);
-+ }
-+
-+ /* True dependence: X is read after store in MEM takes place. */
-+
-+ int
-+ true_dependence (mem, mem_mode, x, varies)
-+ rtx mem;
-+ enum machine_mode mem_mode;
-+ rtx x;
-+ int (*varies)();
-+ {
-+ rtx x_addr, mem_addr;
-+
-+ if (MEM_VOLATILE_P (x) && MEM_VOLATILE_P (mem))
-+ return 1;
-+
-+ x_addr = XEXP (x, 0);
-+ mem_addr = XEXP (mem, 0);
-+
-+ if (flag_alias_check && ! base_alias_check (x_addr, mem_addr))
-+ return 0;
-+
-+ /* If X is an unchanging read, then it can't possibly conflict with any
-+ non-unchanging store. It may conflict with an unchanging write though,
-+ because there may be a single store to this address to initialize it.
-+ Just fall through to the code below to resolve the case where we have
-+ both an unchanging read and an unchanging write. This won't handle all
-+ cases optimally, but the possible performance loss should be
-+ negligible. */
-+ if (RTX_UNCHANGING_P (x) && ! RTX_UNCHANGING_P (mem))
-+ return 0;
-+
-+ x_addr = canon_rtx (x_addr);
-+ mem_addr = canon_rtx (mem_addr);
-+ if (mem_mode == VOIDmode)
-+ mem_mode = GET_MODE (mem);
-+
-+ if (! memrefs_conflict_p (mem_mode, mem_addr, SIZE_FOR_MODE (x), x_addr, 0))
-+ return 0;
-+
-+ /* If both references are struct references, or both are not, nothing
-+ is known about aliasing.
-+
-+ If either reference is QImode or BLKmode, ANSI C permits aliasing.
-+
-+ If both addresses are constant, or both are not, nothing is known
-+ about aliasing. */
-+ if (MEM_IN_STRUCT_P (x) == MEM_IN_STRUCT_P (mem)
-+ || mem_mode == QImode || mem_mode == BLKmode
-+ || GET_MODE (x) == QImode || GET_MODE (mem) == BLKmode
-+ || varies (x_addr) == varies (mem_addr))
-+ return 1;
-+
-+ /* One memory reference is to a constant address, one is not.
-+ One is to a structure, the other is not.
-+
-+ If either memory reference is a variable structure the other is a
-+ fixed scalar and there is no aliasing. */
-+ if ((MEM_IN_STRUCT_P (mem) && varies (mem_addr))
-+ || (MEM_IN_STRUCT_P (x) && varies (x)))
-+ return 0;
-+
-+ return 1;
-+ }
-+
-+ /* Anti dependence: X is written after read in MEM takes place. */
-+
-+ int
-+ anti_dependence (mem, x)
-+ rtx mem;
-+ rtx x;
-+ {
-+ if (MEM_VOLATILE_P (x) && MEM_VOLATILE_P (mem))
-+ return 1;
-+
-+ if (flag_alias_check && ! base_alias_check (XEXP (x, 0), XEXP (mem, 0)))
-+ return 0;
-+
-+ /* If MEM is an unchanging read, then it can't possibly conflict with
-+ the store to X, because there is at most one store to MEM, and it must
-+ have occurred somewhere before MEM. */
-+ x = canon_rtx (x);
-+ mem = canon_rtx (mem);
-+ if (RTX_UNCHANGING_P (mem))
-+ return 0;
-+
-+ return (memrefs_conflict_p (SIZE_FOR_MODE (mem), XEXP (mem, 0),
-+ SIZE_FOR_MODE (x), XEXP (x, 0), 0)
-+ && ! (MEM_IN_STRUCT_P (mem) && rtx_addr_varies_p (mem)
-+ && GET_MODE (mem) != QImode
-+ && ! MEM_IN_STRUCT_P (x) && ! rtx_addr_varies_p (x))
-+ && ! (MEM_IN_STRUCT_P (x) && rtx_addr_varies_p (x)
-+ && GET_MODE (x) != QImode
-+ && ! MEM_IN_STRUCT_P (mem) && ! rtx_addr_varies_p (mem)));
-+ }
-+
-+ /* Output dependence: X is written after store in MEM takes place. */
-+
-+ int
-+ output_dependence (mem, x)
-+ register rtx mem;
-+ register rtx x;
-+ {
-+ if (MEM_VOLATILE_P (x) && MEM_VOLATILE_P (mem))
-+ return 1;
-+
-+ if (flag_alias_check && !base_alias_check (XEXP (x, 0), XEXP (mem, 0)))
-+ return 0;
-+
-+ x = canon_rtx (x);
-+ mem = canon_rtx (mem);
-+ return (memrefs_conflict_p (SIZE_FOR_MODE (mem), XEXP (mem, 0),
-+ SIZE_FOR_MODE (x), XEXP (x, 0), 0)
-+ && ! (MEM_IN_STRUCT_P (mem) && rtx_addr_varies_p (mem)
-+ && GET_MODE (mem) != QImode
-+ && ! MEM_IN_STRUCT_P (x) && ! rtx_addr_varies_p (x))
-+ && ! (MEM_IN_STRUCT_P (x) && rtx_addr_varies_p (x)
-+ && GET_MODE (x) != QImode
-+ && ! MEM_IN_STRUCT_P (mem) && ! rtx_addr_varies_p (mem)));
-+ }
-+
-+ void
-+ init_alias_analysis ()
-+ {
-+ int maxreg = max_reg_num ();
-+ int changed;
-+ register int i;
-+ register rtx insn;
-+ rtx note;
-+ rtx set;
-+
-+ reg_known_value_size = maxreg;
-+
-+ reg_known_value
-+ = (rtx *) oballoc ((maxreg - FIRST_PSEUDO_REGISTER) * sizeof (rtx))
-+ - FIRST_PSEUDO_REGISTER;
-+ reg_known_equiv_p =
-+ oballoc (maxreg - FIRST_PSEUDO_REGISTER) - FIRST_PSEUDO_REGISTER;
-+ bzero ((char *) (reg_known_value + FIRST_PSEUDO_REGISTER),
-+ (maxreg-FIRST_PSEUDO_REGISTER) * sizeof (rtx));
-+ bzero (reg_known_equiv_p + FIRST_PSEUDO_REGISTER,
-+ (maxreg - FIRST_PSEUDO_REGISTER) * sizeof (char));
-+
-+ if (flag_alias_check)
-+ {
-+ /* Overallocate reg_base_value to allow some growth during loop
-+ optimization. Loop unrolling can create a large number of
-+ registers. */
-+ reg_base_value_size = maxreg * 2;
-+ reg_base_value = (rtx *)oballoc (reg_base_value_size * sizeof (rtx));
-+ reg_seen = (char *)alloca (reg_base_value_size);
-+ bzero (reg_base_value, reg_base_value_size * sizeof (rtx));
-+ bzero (reg_seen, reg_base_value_size);
-+
-+ /* Mark all hard registers which may contain an address.
-+ The stack, frame and argument pointers may contain an address.
-+ An argument register which can hold a Pmode value may contain
-+ an address even if it is not in BASE_REGS.
-+
-+ The address expression is VOIDmode for an argument and
-+ Pmode for other registers. */
-+ #ifndef OUTGOING_REGNO
-+ #define OUTGOING_REGNO(N) N
-+ #endif
-+ for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
-+ /* Check whether this register can hold an incoming pointer
-+ argument. FUNCTION_ARG_REGNO_P tests outgoing register
-+ numbers, so translate if necessary due to register windows. */
-+ if (FUNCTION_ARG_REGNO_P (OUTGOING_REGNO (i)) && HARD_REGNO_MODE_OK (i, Pmode))
-+ reg_base_value[i] = gen_rtx (ADDRESS, VOIDmode,
-+ gen_rtx (REG, Pmode, i));
-+
-+ reg_base_value[STACK_POINTER_REGNUM]
-+ = gen_rtx (ADDRESS, Pmode, stack_pointer_rtx);
-+ reg_base_value[ARG_POINTER_REGNUM]
-+ = gen_rtx (ADDRESS, Pmode, arg_pointer_rtx);
-+ reg_base_value[FRAME_POINTER_REGNUM]
-+ = gen_rtx (ADDRESS, Pmode, frame_pointer_rtx);
-+ reg_base_value[HARD_FRAME_POINTER_REGNUM]
-+ = gen_rtx (ADDRESS, Pmode, hard_frame_pointer_rtx);
-+ }
-+
-+ copying_arguments = 1;
-+ /* Fill in the entries with known constant values. */
-+ for (insn = get_insns (); insn; insn = NEXT_INSN (insn))
-+ {
-+ if (flag_alias_check && GET_RTX_CLASS (GET_CODE (insn)) == 'i')
-+ {
-+ /* If this insn has a noalias note, process it, Otherwise,
-+ scan for sets. A simple set will have no side effects
-+ which could change the base value of any other register. */
-+ rtx noalias_note;
-+ if (GET_CODE (PATTERN (insn)) == SET
-+ && (noalias_note = find_reg_note (insn, REG_NOALIAS, NULL_RTX)))
-+ record_set (SET_DEST (PATTERN (insn)), 0);
-+ else
-+ note_stores (PATTERN (insn), record_set);
-+ }
-+ else if (GET_CODE (insn) == NOTE
-+ && NOTE_LINE_NUMBER (insn) == NOTE_INSN_FUNCTION_BEG)
-+ copying_arguments = 0;
-+
-+ if ((set = single_set (insn)) != 0
-+ && GET_CODE (SET_DEST (set)) == REG
-+ && REGNO (SET_DEST (set)) >= FIRST_PSEUDO_REGISTER
-+ && (((note = find_reg_note (insn, REG_EQUAL, 0)) != 0
-+ && reg_n_sets[REGNO (SET_DEST (set))] == 1)
-+ || (note = find_reg_note (insn, REG_EQUIV, NULL_RTX)) != 0)
-+ && GET_CODE (XEXP (note, 0)) != EXPR_LIST)
-+ {
-+ int regno = REGNO (SET_DEST (set));
-+ reg_known_value[regno] = XEXP (note, 0);
-+ reg_known_equiv_p[regno] = REG_NOTE_KIND (note) == REG_EQUIV;
-+ }
-+ }
-+
-+ /* Fill in the remaining entries. */
-+ for (i = FIRST_PSEUDO_REGISTER; i < maxreg; i++)
-+ if (reg_known_value[i] == 0)
-+ reg_known_value[i] = regno_reg_rtx[i];
-+
-+ if (! flag_alias_check)
-+ return;
-+
-+ /* Simplify the reg_base_value array so that no register refers to
-+ another register, except to special registers indirectly through
-+ ADDRESS expressions.
-+
-+ In theory this loop can take as long as O(registers^2), but unless
-+ there are very long dependency chains it will run in close to linear
-+ time. */
-+ do
-+ {
-+ changed = 0;
-+ for (i = FIRST_PSEUDO_REGISTER; i < reg_base_value_size; i++)
-+ {
-+ rtx base = reg_base_value[i];
-+ if (base && GET_CODE (base) == REG)
-+ {
-+ int base_regno = REGNO (base);
-+ if (base_regno == i) /* register set from itself */
-+ reg_base_value[i] = 0;
-+ else
-+ reg_base_value[i] = reg_base_value[base_regno];
-+ changed = 1;
-+ }
-+ }
-+ }
-+ while (changed);
-+
-+ reg_seen = 0;
-+ }
-+
-+ void
-+ end_alias_analysis ()
-+ {
-+ reg_known_value = 0;
-+ reg_base_value = 0;
-+ reg_base_value_size = 0;
-+ }
-diff -rcp2N gcc-2.7.2.2/c-decl.c g77-new/c-decl.c
-*** gcc-2.7.2.2/c-decl.c Fri Oct 27 05:44:43 1995
---- g77-new/c-decl.c Sun Aug 10 18:46:24 1997
-*************** init_decl_processing ()
-*** 3207,3210 ****
---- 3207,3223 ----
- builtin_function ("__builtin_cosl", ldouble_ftype_ldouble,
- BUILT_IN_COS, "cosl");
-+ builtin_function ("__builtin_setjmp",
-+ build_function_type (integer_type_node,
-+ tree_cons (NULL_TREE,
-+ ptr_type_node, endlink)),
-+ BUILT_IN_SETJMP, NULL_PTR);
-+ builtin_function ("__builtin_longjmp",
-+ build_function_type
-+ (void_type_node,
-+ tree_cons (NULL, ptr_type_node,
-+ tree_cons (NULL_TREE,
-+ integer_type_node,
-+ endlink))),
-+ BUILT_IN_LONGJMP, NULL_PTR);
-
- /* In an ANSI C program, it is okay to supply built-in meanings
-*************** grokdeclarator (declarator, declspecs, d
-*** 4049,4052 ****
---- 4062,4066 ----
- int volatilep;
- int inlinep;
-+ int restrictp;
- int explicit_int = 0;
- int explicit_char = 0;
-*************** grokdeclarator (declarator, declspecs, d
-*** 4342,4349 ****
---- 4356,4366 ----
- volatilep = !! (specbits & 1 << (int) RID_VOLATILE) + TYPE_VOLATILE (type);
- inlinep = !! (specbits & (1 << (int) RID_INLINE));
-+ restrictp = !! (specbits & (1 << (int) RID_RESTRICT));
- if (constp > 1)
- pedwarn ("duplicate `const'");
- if (volatilep > 1)
- pedwarn ("duplicate `volatile'");
-+ if (restrictp)
-+ error ("`restrict' used in non-parameter or non-pointer type declaration");
- if (! flag_gen_aux_info && (TYPE_READONLY (type) || TYPE_VOLATILE (type)))
- type = TYPE_MAIN_VARIANT (type);
-*************** grokdeclarator (declarator, declspecs, d
-*** 4693,4696 ****
---- 4710,4715 ----
- else if (TREE_VALUE (typemodlist) == ridpointers[(int) RID_VOLATILE])
- volatilep++;
-+ else if (TREE_VALUE (typemodlist) == ridpointers[(int) RID_RESTRICT])
-+ restrictp++;
- else if (!erred)
- {
-*************** grokdeclarator (declarator, declspecs, d
-*** 4703,4706 ****
---- 4722,4727 ----
- if (volatilep > 1)
- pedwarn ("duplicate `volatile'");
-+ if (restrictp > 1)
-+ pedwarn ("duplicate `restrict'");
- }
-
-*************** grokdeclarator (declarator, declspecs, d
-*** 4844,4847 ****
---- 4865,4875 ----
- }
-
-+ if (restrictp)
-+ {
-+ if (TREE_CODE (TREE_TYPE (decl)) != POINTER_TYPE)
-+ error ("`restrict' applied to non-pointer");
-+ DECL_RESTRICT (decl) = 1;
-+ }
-+
- DECL_ARG_TYPE_AS_WRITTEN (decl) = type_as_written;
- }
-*************** start_struct (code, name)
-*** 5365,5368 ****
---- 5393,5397 ----
- pushtag (name, ref);
- C_TYPE_BEING_DEFINED (ref) = 1;
-+ TYPE_PACKED (ref) = flag_pack_struct;
- return ref;
- }
-*************** start_enum (name)
-*** 5806,5809 ****
---- 5835,5841 ----
- enum_overflow = 0;
-
-+ if (flag_short_enums)
-+ TYPE_PACKED (enumtype) = 1;
-+
- return enumtype;
- }
-*************** finish_enum (enumtype, values, attribute
-*** 5862,5867 ****
- precision = MAX (lowprec, highprec);
-
-! if (flag_short_enums || TYPE_PACKED (enumtype)
-! || precision > TYPE_PRECISION (integer_type_node))
- /* Use the width of the narrowest normal C type which is wide enough. */
- TYPE_PRECISION (enumtype) = TYPE_PRECISION (type_for_size (precision, 1));
---- 5894,5898 ----
- precision = MAX (lowprec, highprec);
-
-! if (TYPE_PACKED (enumtype) || precision > TYPE_PRECISION (integer_type_node))
- /* Use the width of the narrowest normal C type which is wide enough. */
- TYPE_PRECISION (enumtype) = TYPE_PRECISION (type_for_size (precision, 1));
-diff -rcp2N gcc-2.7.2.2/c-gperf.h g77-new/c-gperf.h
-*** gcc-2.7.2.2/c-gperf.h Fri Mar 4 14:15:53 1994
---- g77-new/c-gperf.h Mon Aug 11 02:58:47 1997
-***************
-*** 1,15 ****
- /* C code produced by gperf version 2.5 (GNU C++ version) */
-! /* Command-line: gperf -p -j1 -i 1 -g -o -t -G -N is_reserved_word -k1,3,$ c-parse.gperf */
- struct resword { char *name; short token; enum rid rid; };
-
-! #define TOTAL_KEYWORDS 79
- #define MIN_WORD_LENGTH 2
- #define MAX_WORD_LENGTH 20
-! #define MIN_HASH_VALUE 10
-! #define MAX_HASH_VALUE 144
-! /* maximum key range = 135, duplicates = 0 */
-
- #ifdef __GNUC__
-! __inline
- #endif
- static unsigned int
---- 1,16 ----
- /* C code produced by gperf version 2.5 (GNU C++ version) */
-! /* Command-line: gperf -p -j1 -i 1 -g -o -t -G -N is_reserved_word -k1,3,$ ../g77-new/c-parse.gperf */
-! /* Command-line: gperf -p -j1 -i 1 -g -o -t -N is_reserved_word -k1,3,$ c-parse.gperf */
- struct resword { char *name; short token; enum rid rid; };
-
-! #define TOTAL_KEYWORDS 81
- #define MIN_WORD_LENGTH 2
- #define MAX_WORD_LENGTH 20
-! #define MIN_HASH_VALUE 11
-! #define MAX_HASH_VALUE 157
-! /* maximum key range = 147, duplicates = 0 */
-
- #ifdef __GNUC__
-! inline
- #endif
- static unsigned int
-*************** hash (str, len)
-*** 20,36 ****
- static unsigned char asso_values[] =
- {
-! 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
-! 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
-! 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
-! 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
-! 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
-! 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
-! 145, 145, 145, 145, 25, 145, 145, 145, 145, 145,
-! 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
-! 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
-! 145, 145, 145, 145, 145, 1, 145, 46, 8, 15,
-! 61, 6, 36, 48, 3, 5, 145, 18, 63, 25,
-! 29, 76, 1, 145, 13, 2, 1, 51, 37, 9,
-! 9, 1, 3, 145, 145, 145, 145, 145,
- };
- register int hval = len;
---- 21,37 ----
- static unsigned char asso_values[] =
- {
-! 158, 158, 158, 158, 158, 158, 158, 158, 158, 158,
-! 158, 158, 158, 158, 158, 158, 158, 158, 158, 158,
-! 158, 158, 158, 158, 158, 158, 158, 158, 158, 158,
-! 158, 158, 158, 158, 158, 158, 158, 158, 158, 158,
-! 158, 158, 158, 158, 158, 158, 158, 158, 158, 158,
-! 158, 158, 158, 158, 158, 158, 158, 158, 158, 158,
-! 158, 158, 158, 158, 2, 158, 158, 158, 158, 158,
-! 158, 158, 158, 158, 158, 158, 158, 158, 158, 158,
-! 158, 158, 158, 158, 158, 158, 158, 158, 158, 158,
-! 158, 158, 158, 158, 158, 1, 158, 18, 1, 58,
-! 56, 6, 44, 64, 13, 45, 158, 4, 26, 68,
-! 2, 74, 1, 158, 2, 13, 1, 33, 48, 5,
-! 5, 3, 12, 158, 158, 158, 158, 158,
- };
- register int hval = len;
-*************** hash (str, len)
-*** 44,47 ****
---- 45,49 ----
- case 1:
- hval += asso_values[str[0]];
-+ break;
- }
- return hval + asso_values[str[len - 1]];
-*************** hash (str, len)
-*** 50,166 ****
- static struct resword wordlist[] =
- {
-! {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",},
-! {"",},
-! {"int", TYPESPEC, RID_INT},
-! {"",}, {"",},
-! {"__typeof__", TYPEOF, NORID},
-! {"__signed__", TYPESPEC, RID_SIGNED},
-! {"__imag__", IMAGPART, NORID},
-! {"switch", SWITCH, NORID},
-! {"__inline__", SCSPEC, RID_INLINE},
-! {"else", ELSE, NORID},
-! {"__iterator__", SCSPEC, RID_ITERATOR},
-! {"__inline", SCSPEC, RID_INLINE},
-! {"__extension__", EXTENSION, NORID},
-! {"struct", STRUCT, NORID},
-! {"__real__", REALPART, NORID},
-! {"__const", TYPE_QUAL, RID_CONST},
-! {"while", WHILE, NORID},
-! {"__const__", TYPE_QUAL, RID_CONST},
-! {"case", CASE, NORID},
-! {"__complex__", TYPESPEC, RID_COMPLEX},
-! {"__iterator", SCSPEC, RID_ITERATOR},
-! {"bycopy", TYPE_QUAL, RID_BYCOPY},
-! {"",}, {"",}, {"",},
-! {"__complex", TYPESPEC, RID_COMPLEX},
-! {"",},
-! {"in", TYPE_QUAL, RID_IN},
-! {"break", BREAK, NORID},
-! {"@defs", DEFS, NORID},
-! {"",}, {"",}, {"",},
-! {"extern", SCSPEC, RID_EXTERN},
-! {"if", IF, NORID},
-! {"typeof", TYPEOF, NORID},
-! {"typedef", SCSPEC, RID_TYPEDEF},
-! {"__typeof", TYPEOF, NORID},
-! {"sizeof", SIZEOF, NORID},
-! {"",},
-! {"return", RETURN, NORID},
-! {"const", TYPE_QUAL, RID_CONST},
-! {"__volatile__", TYPE_QUAL, RID_VOLATILE},
-! {"@private", PRIVATE, NORID},
-! {"@selector", SELECTOR, NORID},
-! {"__volatile", TYPE_QUAL, RID_VOLATILE},
-! {"__asm__", ASM_KEYWORD, NORID},
-! {"",}, {"",},
-! {"continue", CONTINUE, NORID},
-! {"__alignof__", ALIGNOF, NORID},
-! {"__imag", IMAGPART, NORID},
-! {"__attribute__", ATTRIBUTE, NORID},
-! {"",}, {"",},
-! {"__attribute", ATTRIBUTE, NORID},
-! {"for", FOR, NORID},
-! {"",},
-! {"@encode", ENCODE, NORID},
-! {"id", OBJECTNAME, RID_ID},
-! {"static", SCSPEC, RID_STATIC},
-! {"@interface", INTERFACE, NORID},
-! {"",},
-! {"__signed", TYPESPEC, RID_SIGNED},
-! {"",},
-! {"__label__", LABEL, NORID},
-! {"",}, {"",},
-! {"__asm", ASM_KEYWORD, NORID},
-! {"char", TYPESPEC, RID_CHAR},
-! {"",},
-! {"inline", SCSPEC, RID_INLINE},
-! {"out", TYPE_QUAL, RID_OUT},
-! {"register", SCSPEC, RID_REGISTER},
-! {"__real", REALPART, NORID},
-! {"short", TYPESPEC, RID_SHORT},
-! {"",},
-! {"enum", ENUM, NORID},
-! {"inout", TYPE_QUAL, RID_INOUT},
-! {"",},
-! {"oneway", TYPE_QUAL, RID_ONEWAY},
-! {"union", UNION, NORID},
-! {"",},
-! {"__alignof", ALIGNOF, NORID},
-! {"",},
-! {"@implementation", IMPLEMENTATION, NORID},
-! {"",},
-! {"@class", CLASS, NORID},
-! {"",},
-! {"@public", PUBLIC, NORID},
-! {"asm", ASM_KEYWORD, NORID},
-! {"",}, {"",}, {"",}, {"",}, {"",},
-! {"default", DEFAULT, NORID},
-! {"",},
-! {"void", TYPESPEC, RID_VOID},
-! {"",},
-! {"@protected", PROTECTED, NORID},
-! {"@protocol", PROTOCOL, NORID},
-! {"",}, {"",}, {"",},
-! {"volatile", TYPE_QUAL, RID_VOLATILE},
-! {"",}, {"",},
-! {"signed", TYPESPEC, RID_SIGNED},
-! {"float", TYPESPEC, RID_FLOAT},
-! {"@end", END, NORID},
-! {"",}, {"",},
-! {"unsigned", TYPESPEC, RID_UNSIGNED},
-! {"@compatibility_alias", ALIAS, NORID},
-! {"double", TYPESPEC, RID_DOUBLE},
-! {"",}, {"",},
-! {"auto", SCSPEC, RID_AUTO},
-! {"",},
-! {"goto", GOTO, NORID},
-! {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",},
-! {"do", DO, NORID},
-! {"",}, {"",}, {"",}, {"",},
-! {"long", TYPESPEC, RID_LONG},
- };
-
- #ifdef __GNUC__
-! __inline
- #endif
- struct resword *
---- 52,167 ----
- static struct resword wordlist[] =
- {
-! {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",},
-! {"",}, {"",},
-! {"return", RETURN, NORID},
-! {"__real__", REALPART, NORID},
-! {"__typeof__", TYPEOF, NORID},
-! {"__restrict", TYPE_QUAL, RID_RESTRICT},
-! {"extern", SCSPEC, RID_EXTERN},
-! {"break", BREAK, NORID},
-! {"@encode", ENCODE, NORID},
-! {"@private", PRIVATE, NORID},
-! {"@selector", SELECTOR, NORID},
-! {"@interface", INTERFACE, NORID},
-! {"__extension__", EXTENSION, NORID},
-! {"struct", STRUCT, NORID},
-! {"",},
-! {"restrict", TYPE_QUAL, RID_RESTRICT},
-! {"__signed__", TYPESPEC, RID_SIGNED},
-! {"@defs", DEFS, NORID},
-! {"__asm__", ASM_KEYWORD, NORID},
-! {"",},
-! {"else", ELSE, NORID},
-! {"",},
-! {"__alignof__", ALIGNOF, NORID},
-! {"",},
-! {"__attribute__", ATTRIBUTE, NORID},
-! {"",},
-! {"__real", REALPART, NORID},
-! {"__attribute", ATTRIBUTE, NORID},
-! {"__label__", LABEL, NORID},
-! {"",},
-! {"@protocol", PROTOCOL, NORID},
-! {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",},
-! {"@class", CLASS, NORID},
-! {"",},
-! {"in", TYPE_QUAL, RID_IN},
-! {"int", TYPESPEC, RID_INT},
-! {"for", FOR, NORID},
-! {"typeof", TYPEOF, NORID},
-! {"typedef", SCSPEC, RID_TYPEDEF},
-! {"__typeof", TYPEOF, NORID},
-! {"__imag__", IMAGPART, NORID},
-! {"",},
-! {"__inline__", SCSPEC, RID_INLINE},
-! {"__iterator", SCSPEC, RID_ITERATOR},
-! {"__iterator__", SCSPEC, RID_ITERATOR},
-! {"__inline", SCSPEC, RID_INLINE},
-! {"while", WHILE, NORID},
-! {"__volatile__", TYPE_QUAL, RID_VOLATILE},
-! {"",},
-! {"@end", END, NORID},
-! {"__volatile", TYPE_QUAL, RID_VOLATILE},
-! {"const", TYPE_QUAL, RID_CONST},
-! {"__const", TYPE_QUAL, RID_CONST},
-! {"bycopy", TYPE_QUAL, RID_BYCOPY},
-! {"__const__", TYPE_QUAL, RID_CONST},
-! {"@protected", PROTECTED, NORID},
-! {"__complex__", TYPESPEC, RID_COMPLEX},
-! {"__alignof", ALIGNOF, NORID},
-! {"__complex", TYPESPEC, RID_COMPLEX},
-! {"continue", CONTINUE, NORID},
-! {"sizeof", SIZEOF, NORID},
-! {"register", SCSPEC, RID_REGISTER},
-! {"switch", SWITCH, NORID},
-! {"__signed", TYPESPEC, RID_SIGNED},
-! {"out", TYPE_QUAL, RID_OUT},
-! {"",},
-! {"case", CASE, NORID},
-! {"char", TYPESPEC, RID_CHAR},
-! {"inline", SCSPEC, RID_INLINE},
-! {"",},
-! {"union", UNION, NORID},
-! {"",},
-! {"@implementation", IMPLEMENTATION, NORID},
-! {"volatile", TYPE_QUAL, RID_VOLATILE},
-! {"oneway", TYPE_QUAL, RID_ONEWAY},
-! {"",},
-! {"if", IF, NORID},
-! {"__asm", ASM_KEYWORD, NORID},
-! {"short", TYPESPEC, RID_SHORT},
-! {"",},
-! {"static", SCSPEC, RID_STATIC},
-! {"long", TYPESPEC, RID_LONG},
-! {"auto", SCSPEC, RID_AUTO},
-! {"",}, {"",},
-! {"@public", PUBLIC, NORID},
-! {"double", TYPESPEC, RID_DOUBLE},
-! {"",},
-! {"id", OBJECTNAME, RID_ID},
-! {"",}, {"",}, {"",}, {"",},
-! {"default", DEFAULT, NORID},
-! {"@compatibility_alias", ALIAS, NORID},
-! {"unsigned", TYPESPEC, RID_UNSIGNED},
-! {"enum", ENUM, NORID},
-! {"",}, {"",}, {"",}, {"",},
-! {"__imag", IMAGPART, NORID},
-! {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",},
-! {"float", TYPESPEC, RID_FLOAT},
-! {"inout", TYPE_QUAL, RID_INOUT},
-! {"",}, {"",}, {"",}, {"",}, {"",}, {"",},
-! {"do", DO, NORID},
-! {"",}, {"",}, {"",}, {"",}, {"",}, {"",},
-! {"signed", TYPESPEC, RID_SIGNED},
-! {"",}, {"",}, {"",},
-! {"goto", GOTO, NORID},
-! {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",},
-! {"void", TYPESPEC, RID_VOID},
-! {"",}, {"",}, {"",},
-! {"asm", ASM_KEYWORD, NORID},
- };
-
- #ifdef __GNUC__
-! inline
- #endif
- struct resword *
-diff -rcp2N gcc-2.7.2.2/c-lex.c g77-new/c-lex.c
-*** gcc-2.7.2.2/c-lex.c Thu Jun 15 07:11:39 1995
---- g77-new/c-lex.c Sun Aug 10 18:46:49 1997
-*************** init_lex ()
-*** 173,176 ****
---- 173,177 ----
- ridpointers[(int) RID_CONST] = get_identifier ("const");
- ridpointers[(int) RID_VOLATILE] = get_identifier ("volatile");
-+ ridpointers[(int) RID_RESTRICT] = get_identifier ("restrict");
- ridpointers[(int) RID_AUTO] = get_identifier ("auto");
- ridpointers[(int) RID_STATIC] = get_identifier ("static");
-*************** init_lex ()
-*** 206,209 ****
---- 207,211 ----
- UNSET_RESERVED_WORD ("iterator");
- UNSET_RESERVED_WORD ("complex");
-+ UNSET_RESERVED_WORD ("restrict");
- }
- if (flag_no_asm)
-*************** init_lex ()
-*** 214,217 ****
---- 216,220 ----
- UNSET_RESERVED_WORD ("iterator");
- UNSET_RESERVED_WORD ("complex");
-+ UNSET_RESERVED_WORD ("restrict");
- }
- }
-*************** yylex ()
-*** 1433,1437 ****
- /* Create a node with determined type and value. */
- if (imag)
-! yylval.ttype = build_complex (convert (type, integer_zero_node),
- build_real (type, value));
- else
---- 1436,1441 ----
- /* Create a node with determined type and value. */
- if (imag)
-! yylval.ttype = build_complex (NULL_TREE,
-! convert (type, integer_zero_node),
- build_real (type, value));
- else
-*************** yylex ()
-*** 1624,1629 ****
- <= TYPE_PRECISION (integer_type_node))
- yylval.ttype
-! = build_complex (integer_zero_node,
-! convert (integer_type_node, yylval.ttype));
- else
- error ("complex integer constant is too wide for `complex int'");
---- 1628,1634 ----
- <= TYPE_PRECISION (integer_type_node))
- yylval.ttype
-! = build_complex (NULL_TREE, integer_zero_node,
-! convert (integer_type_node,
-! yylval.ttype));
- else
- error ("complex integer constant is too wide for `complex int'");
-diff -rcp2N gcc-2.7.2.2/c-lex.h g77-new/c-lex.h
-*** gcc-2.7.2.2/c-lex.h Thu Jun 15 07:12:22 1995
---- g77-new/c-lex.h Sun Aug 10 18:10:55 1997
-*************** enum rid
-*** 43,47 ****
- RID_VOLATILE,
- RID_INLINE,
-! RID_NOALIAS,
- RID_ITERATOR,
- RID_COMPLEX,
---- 43,47 ----
- RID_VOLATILE,
- RID_INLINE,
-! RID_RESTRICT,
- RID_ITERATOR,
- RID_COMPLEX,
-diff -rcp2N gcc-2.7.2.2/c-parse.gperf g77-new/c-parse.gperf
-*** gcc-2.7.2.2/c-parse.gperf Fri Apr 9 19:00:44 1993
---- g77-new/c-parse.gperf Sun Aug 10 18:10:55 1997
-*************** __label__, LABEL, NORID
-*** 36,39 ****
---- 36,40 ----
- __real, REALPART, NORID
- __real__, REALPART, NORID
-+ __restrict, TYPE_QUAL, RID_RESTRICT
- __signed, TYPESPEC, RID_SIGNED
- __signed__, TYPESPEC, RID_SIGNED
-*************** oneway, TYPE_QUAL, RID_ONEWAY
-*** 69,72 ****
---- 70,74 ----
- out, TYPE_QUAL, RID_OUT
- register, SCSPEC, RID_REGISTER
-+ restrict, TYPE_QUAL, RID_RESTRICT
- return, RETURN, NORID
- short, TYPESPEC, RID_SHORT
-diff -rcp2N gcc-2.7.2.2/c-typeck.c g77-new/c-typeck.c
-*** gcc-2.7.2.2/c-typeck.c Thu Feb 20 19:24:11 1997
---- g77-new/c-typeck.c Sun Aug 10 18:46:29 1997
-*************** pointer_int_sum (resultcode, ptrop, into
-*** 2681,2686 ****
- so the multiply won't overflow spuriously. */
-
-! if (TYPE_PRECISION (TREE_TYPE (intop)) != POINTER_SIZE)
-! intop = convert (type_for_size (POINTER_SIZE, 0), intop);
-
- /* Replace the integer argument with a suitable product by the object size.
---- 2681,2688 ----
- so the multiply won't overflow spuriously. */
-
-! if (TYPE_PRECISION (TREE_TYPE (intop)) != TYPE_PRECISION (sizetype)
-! || TREE_UNSIGNED (TREE_TYPE (intop)) != TREE_UNSIGNED (sizetype))
-! intop = convert (type_for_size (TYPE_PRECISION (sizetype),
-! TREE_UNSIGNED (sizetype)), intop);
-
- /* Replace the integer argument with a suitable product by the object size.
-diff -rcp2N gcc-2.7.2.2/calls.c g77-new/calls.c
-*** gcc-2.7.2.2/calls.c Thu Oct 26 21:53:43 1995
---- g77-new/calls.c Sun Aug 10 18:46:16 1997
-*************** expand_call (exp, target, ignore)
-*** 564,567 ****
---- 564,569 ----
- /* Nonzero if it is plausible that this is a call to alloca. */
- int may_be_alloca;
-+ /* Nonzero if this is a call to malloc or a related function. */
-+ int is_malloc;
- /* Nonzero if this is a call to setjmp or a related function. */
- int returns_twice;
-*************** expand_call (exp, target, ignore)
-*** 741,745 ****
- if (stack_arg_under_construction || i >= 0)
- {
-! rtx insn = NEXT_INSN (before_call), seq;
-
- /* Look for a call in the inline function code.
---- 743,749 ----
- if (stack_arg_under_construction || i >= 0)
- {
-! rtx first_insn
-! = before_call ? NEXT_INSN (before_call) : get_insns ();
-! rtx insn, seq;
-
- /* Look for a call in the inline function code.
-*************** expand_call (exp, target, ignore)
-*** 749,753 ****
-
- if (OUTGOING_ARGS_SIZE (DECL_SAVED_INSNS (fndecl)) == 0)
-! for (; insn; insn = NEXT_INSN (insn))
- if (GET_CODE (insn) == CALL_INSN)
- break;
---- 753,757 ----
-
- if (OUTGOING_ARGS_SIZE (DECL_SAVED_INSNS (fndecl)) == 0)
-! for (insn = first_insn; insn; insn = NEXT_INSN (insn))
- if (GET_CODE (insn) == CALL_INSN)
- break;
-*************** expand_call (exp, target, ignore)
-*** 781,785 ****
- seq = get_insns ();
- end_sequence ();
-! emit_insns_before (seq, NEXT_INSN (before_call));
- emit_stack_restore (SAVE_BLOCK, old_stack_level, NULL_RTX);
- }
---- 785,789 ----
- seq = get_insns ();
- end_sequence ();
-! emit_insns_before (seq, first_insn);
- emit_stack_restore (SAVE_BLOCK, old_stack_level, NULL_RTX);
- }
-*************** expand_call (exp, target, ignore)
-*** 852,855 ****
---- 856,860 ----
- returns_twice = 0;
- is_longjmp = 0;
-+ is_malloc = 0;
-
- if (name != 0 && IDENTIFIER_LENGTH (DECL_NAME (fndecl)) <= 15)
-*************** expand_call (exp, target, ignore)
-*** 891,894 ****
---- 896,903 ----
- && ! strcmp (tname, "longjmp"))
- is_longjmp = 1;
-+ /* Only recognize malloc when alias analysis is enabled. */
-+ else if (tname[0] == 'm' && flag_alias_check
-+ && ! strcmp(tname, "malloc"))
-+ is_malloc = 1;
- }
-
-*************** expand_call (exp, target, ignore)
-*** 1087,1090 ****
---- 1096,1100 ----
-
- store_expr (args[i].tree_value, copy, 0);
-+ is_const = 0;
-
- args[i].tree_value = build1 (ADDR_EXPR,
-*************** expand_call (exp, target, ignore)
-*** 1363,1367 ****
- /* Now we are about to start emitting insns that can be deleted
- if a libcall is deleted. */
-! if (is_const)
- start_sequence ();
-
---- 1373,1377 ----
- /* Now we are about to start emitting insns that can be deleted
- if a libcall is deleted. */
-! if (is_const || is_malloc)
- start_sequence ();
-
-*************** expand_call (exp, target, ignore)
-*** 1951,1954 ****
---- 1961,1978 ----
- end_sequence ();
- emit_insns (insns);
-+ }
-+ else if (is_malloc)
-+ {
-+ rtx temp = gen_reg_rtx (GET_MODE (valreg));
-+ rtx last, insns;
-+
-+ emit_move_insn (temp, valreg);
-+ last = get_last_insn ();
-+ REG_NOTES (last) =
-+ gen_rtx (EXPR_LIST, REG_NOALIAS, temp, REG_NOTES (last));
-+ insns = get_insns ();
-+ end_sequence ();
-+ emit_insns (insns);
-+ valreg = temp;
- }
-
-diff -rcp2N gcc-2.7.2.2/cccp.c g77-new/cccp.c
-*** gcc-2.7.2.2/cccp.c Thu Oct 26 18:07:26 1995
---- g77-new/cccp.c Sun Aug 10 18:45:53 1997
-*************** initialize_builtins (inp, outp)
-*** 9626,9629 ****
---- 9626,9630 ----
- so that it is present only when truly compiling with GNU C. */
- /* install ((U_CHAR *) "__GNUC__", -1, T_CONST, "2", -1); */
-+ install ((U_CHAR *) "__HAVE_BUILTIN_SETJMP__", -1, T_CONST, "1", -1);
-
- if (debug_output)
-diff -rcp2N gcc-2.7.2.2/combine.c g77-new/combine.c
-*** gcc-2.7.2.2/combine.c Sun Nov 26 14:32:07 1995
---- g77-new/combine.c Mon Jul 28 21:44:17 1997
-*************** num_sign_bit_copies (x, mode)
-*** 7326,7329 ****
---- 7326,7335 ----
-
- case NEG:
-+ while (GET_MODE (XEXP (x, 0)) == GET_MODE (x)
-+ && GET_CODE (XEXP (x, 0)) == NEG
-+ && GET_MODE (XEXP (XEXP (x, 0), 0)) == GET_MODE (x)
-+ && GET_CODE (XEXP (XEXP (x, 0), 0)) == NEG)
-+ x = XEXP (XEXP (x, 0), 0); /* Speed up 961126-1.c */
-+
- /* In general, this subtracts one sign bit copy. But if the value
- is known to be positive, the number of sign bit copies is the
-*************** distribute_notes (notes, from_insn, i3,
-*** 10648,10651 ****
---- 10654,10658 ----
- case REG_EQUIV:
- case REG_NONNEG:
-+ case REG_NOALIAS:
- /* These notes say something about results of an insn. We can
- only support them if they used to be on I3 in which case they
-diff -rcp2N gcc-2.7.2.2/config/alpha/alpha.c g77-new/config/alpha/alpha.c
-*** gcc-2.7.2.2/config/alpha/alpha.c Thu Feb 20 19:24:11 1997
---- g77-new/config/alpha/alpha.c Thu Jul 10 20:08:47 1997
-*************** direct_return ()
-*** 1239,1243 ****
- cross-compiler. Otherwise, use the versions in /usr/include/stamp.h. */
-
-! #if !defined(CROSS_COMPILE) && !defined(_WIN32)
- #include <stamp.h>
- #endif
---- 1239,1243 ----
- cross-compiler. Otherwise, use the versions in /usr/include/stamp.h. */
-
-! #if !defined(CROSS_COMPILE) && !defined(_WIN32) && !defined(__linux__)
- #include <stamp.h>
- #endif
-*************** output_prolog (file, size)
-*** 1370,1373 ****
---- 1370,1378 ----
-
- alpha_function_needs_gp = 0;
-+ #ifdef __linux__
-+ if(profile_flag) {
-+ alpha_function_needs_gp = 1;
-+ }
-+ #endif
- for (insn = get_insns (); insn; insn = NEXT_INSN (insn))
- if ((GET_CODE (insn) == CALL_INSN)
-diff -rcp2N gcc-2.7.2.2/config/alpha/alpha.h g77-new/config/alpha/alpha.h
-*** gcc-2.7.2.2/config/alpha/alpha.h Thu Feb 20 19:24:12 1997
---- g77-new/config/alpha/alpha.h Sun Aug 10 19:21:39 1997
-*************** extern int target_flags;
-*** 112,116 ****
---- 112,118 ----
- {"", TARGET_DEFAULT | TARGET_CPU_DEFAULT} }
-
-+ #ifndef TARGET_DEFAULT
- #define TARGET_DEFAULT 3
-+ #endif
-
- #ifndef TARGET_CPU_DEFAULT
-*************** extern int target_flags;
-*** 252,255 ****
---- 254,260 ----
- /* No data type wants to be aligned rounder than this. */
- #define BIGGEST_ALIGNMENT 64
-+
-+ /* For atomic access to objects, must have at least 32-bit alignment. */
-+ #define MINIMUM_ATOMIC_ALIGNMENT 32
-
- /* Make strings word-aligned so strcpy from constants will be faster. */
-diff -rcp2N gcc-2.7.2.2/config/alpha/alpha.md g77-new/config/alpha/alpha.md
-*** gcc-2.7.2.2/config/alpha/alpha.md Fri Oct 27 06:49:59 1995
---- g77-new/config/alpha/alpha.md Thu Jul 10 20:08:48 1997
-***************
-*** 1746,1752 ****
- (if_then_else:DF
- (match_operator 3 "signed_comparison_operator"
-! [(match_operand:DF 1 "reg_or_fp0_operand" "fG,fG")
- (match_operand:DF 2 "fp0_operand" "G,G")])
-! (float_extend:DF (match_operand:SF 4 "reg_or_fp0_operand" "fG,0"))
- (match_operand:DF 5 "reg_or_fp0_operand" "0,fG")))]
- "TARGET_FP"
---- 1746,1752 ----
- (if_then_else:DF
- (match_operator 3 "signed_comparison_operator"
-! [(match_operand:DF 4 "reg_or_fp0_operand" "fG,fG")
- (match_operand:DF 2 "fp0_operand" "G,G")])
-! (float_extend:DF (match_operand:SF 1 "reg_or_fp0_operand" "fG,0"))
- (match_operand:DF 5 "reg_or_fp0_operand" "0,fG")))]
- "TARGET_FP"
-diff -rcp2N gcc-2.7.2.2/config/alpha/elf.h g77-new/config/alpha/elf.h
-*** gcc-2.7.2.2/config/alpha/elf.h Wed Dec 31 19:00:00 1969
---- g77-new/config/alpha/elf.h Thu Jul 10 20:08:49 1997
-***************
-*** 0 ****
---- 1,522 ----
-+ /* Definitions of target machine for GNU compiler, for DEC Alpha w/ELF.
-+ Copyright (C) 1996 Free Software Foundation, Inc.
-+ Contributed by Richard Henderson (rth@tamu.edu).
-+
-+ This file is part of GNU CC.
-+
-+ GNU CC 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.
-+
-+ GNU CC 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 GNU CC; see the file COPYING. If not, write to
-+ the Free Software Foundation, 59 Temple Place - Suite 330,
-+ Boston, MA 02111-1307, USA. */
-+
-+ /* This is used on Alpha platforms that use the ELF format.
-+ Currently only Linux uses this. */
-+
-+ #include "alpha/linux.h"
-+
-+ #undef TARGET_VERSION
-+ #define TARGET_VERSION fprintf (stderr, " (Alpha Linux/ELF)");
-+
-+ #undef OBJECT_FORMAT_COFF
-+ #undef EXTENDED_COFF
-+ #define OBJECT_FORMAT_ELF
-+
-+ #define SDB_DEBUGGING_INFO
-+
-+ #undef ASM_FINAL_SPEC
-+
-+ #undef CPP_PREDEFINES
-+ #define CPP_PREDEFINES "\
-+ -D__alpha -D__alpha__ -D__linux__ -D__linux -D_LONGLONG -Dlinux -Dunix \
-+ -Asystem(linux) -Acpu(alpha) -Amachine(alpha) -D__ELF__"
-+
-+ #undef LINK_SPEC
-+ #define LINK_SPEC "-m elf64alpha -G 8 %{O*:-O3} %{!O*:-O1} \
-+ %{shared:-shared} \
-+ %{!shared: \
-+ %{!static: \
-+ %{rdynamic:-export-dynamic} \
-+ %{!dynamic-linker:-dynamic-linker /lib/ld.so.1}} \
-+ %{static:-static}}"
-+
-+ /* Output at beginning of assembler file. */
-+
-+ #undef ASM_FILE_START
-+ #define ASM_FILE_START(FILE) \
-+ { \
-+ alpha_write_verstamp (FILE); \
-+ output_file_directive (FILE, main_input_filename); \
-+ fprintf (FILE, "\t.version\t\"01.01\"\n"); \
-+ fprintf (FILE, "\t.set noat\n"); \
-+ }
-+
-+ #define ASM_OUTPUT_SOURCE_LINE(STREAM, LINE) \
-+ alpha_output_lineno (STREAM, LINE)
-+ extern void alpha_output_lineno ();
-+
-+ extern void output_file_directive ();
-+
-+ /* Attach a special .ident directive to the end of the file to identify
-+ the version of GCC which compiled this code. The format of the
-+ .ident string is patterned after the ones produced by native svr4
-+ C compilers. */
-+
-+ #define IDENT_ASM_OP ".ident"
-+
-+ #ifdef IDENTIFY_WITH_IDENT
-+ #define ASM_IDENTIFY_GCC(FILE) /* nothing */
-+ #define ASM_IDENTIFY_LANGUAGE(FILE) \
-+ fprintf(FILE, "\t%s \"GCC (%s) %s\"\n", IDENT_ASM_OP, \
-+ lang_identify(), version_string)
-+ #else
-+ #define ASM_FILE_END(FILE) \
-+ do { \
-+ fprintf ((FILE), "\t%s\t\"GCC: (GNU) %s\"\n", \
-+ IDENT_ASM_OP, version_string); \
-+ } while (0)
-+ #endif
-+
-+ /* Allow #sccs in preprocessor. */
-+
-+ #define SCCS_DIRECTIVE
-+
-+ /* Output #ident as a .ident. */
-+
-+ #define ASM_OUTPUT_IDENT(FILE, NAME) \
-+ fprintf (FILE, "\t%s\t\"%s\"\n", IDENT_ASM_OP, NAME);
-+
-+ /* This is how to allocate empty space in some section. The .zero
-+ pseudo-op is used for this on most svr4 assemblers. */
-+
-+ #define SKIP_ASM_OP ".zero"
-+
-+ #undef ASM_OUTPUT_SKIP
-+ #define ASM_OUTPUT_SKIP(FILE,SIZE) \
-+ fprintf (FILE, "\t%s\t%u\n", SKIP_ASM_OP, (SIZE))
-+
-+ /* Output the label which precedes a jumptable. Note that for all svr4
-+ systems where we actually generate jumptables (which is to say every
-+ svr4 target except i386, where we use casesi instead) we put the jump-
-+ tables into the .rodata section and since other stuff could have been
-+ put into the .rodata section prior to any given jumptable, we have to
-+ make sure that the location counter for the .rodata section gets pro-
-+ perly re-aligned prior to the actual beginning of the jump table. */
-+
-+ #define ALIGN_ASM_OP ".align"
-+
-+ #ifndef ASM_OUTPUT_BEFORE_CASE_LABEL
-+ #define ASM_OUTPUT_BEFORE_CASE_LABEL(FILE,PREFIX,NUM,TABLE) \
-+ ASM_OUTPUT_ALIGN ((FILE), 2);
-+ #endif
-+
-+ #undef ASM_OUTPUT_CASE_LABEL
-+ #define ASM_OUTPUT_CASE_LABEL(FILE,PREFIX,NUM,JUMPTABLE) \
-+ do { \
-+ ASM_OUTPUT_BEFORE_CASE_LABEL (FILE, PREFIX, NUM, JUMPTABLE) \
-+ ASM_OUTPUT_INTERNAL_LABEL (FILE, PREFIX, NUM); \
-+ } while (0)
-+
-+ /* The standard SVR4 assembler seems to require that certain builtin
-+ library routines (e.g. .udiv) be explicitly declared as .globl
-+ in each assembly file where they are referenced. */
-+
-+ #define ASM_OUTPUT_EXTERNAL_LIBCALL(FILE, FUN) \
-+ ASM_GLOBALIZE_LABEL (FILE, XSTR (FUN, 0))
-+
-+ /* This says how to output assembler code to declare an
-+ uninitialized external linkage data object. Under SVR4,
-+ the linker seems to want the alignment of data objects
-+ to depend on their types. We do exactly that here. */
-+
-+ #define COMMON_ASM_OP ".comm"
-+
-+ #undef ASM_OUTPUT_ALIGNED_COMMON
-+ #define ASM_OUTPUT_ALIGNED_COMMON(FILE, NAME, SIZE, ALIGN) \
-+ do { \
-+ fprintf ((FILE), "\t%s\t", COMMON_ASM_OP); \
-+ assemble_name ((FILE), (NAME)); \
-+ fprintf ((FILE), ",%u,%u\n", (SIZE), (ALIGN) / BITS_PER_UNIT); \
-+ } while (0)
-+
-+ /* This says how to output assembler code to declare an
-+ uninitialized internal linkage data object. Under SVR4,
-+ the linker seems to want the alignment of data objects
-+ to depend on their types. We do exactly that here. */
-+
-+ #define LOCAL_ASM_OP ".local"
-+
-+ #undef ASM_OUTPUT_ALIGNED_LOCAL
-+ #define ASM_OUTPUT_ALIGNED_LOCAL(FILE, NAME, SIZE, ALIGN) \
-+ do { \
-+ fprintf ((FILE), "\t%s\t", LOCAL_ASM_OP); \
-+ assemble_name ((FILE), (NAME)); \
-+ fprintf ((FILE), "\n"); \
-+ ASM_OUTPUT_ALIGNED_COMMON (FILE, NAME, SIZE, ALIGN); \
-+ } while (0)
-+
-+ /* This is the pseudo-op used to generate a 64-bit word of data with a
-+ specific value in some section. */
-+
-+ #define INT_ASM_OP ".quad"
-+
-+ /* This is the pseudo-op used to generate a contiguous sequence of byte
-+ values from a double-quoted string WITHOUT HAVING A TERMINATING NUL
-+ AUTOMATICALLY APPENDED. This is the same for most svr4 assemblers. */
-+
-+ #undef ASCII_DATA_ASM_OP
-+ #define ASCII_DATA_ASM_OP ".ascii"
-+
-+ /* Support const sections and the ctors and dtors sections for g++.
-+ Note that there appears to be two different ways to support const
-+ sections at the moment. You can either #define the symbol
-+ READONLY_DATA_SECTION (giving it some code which switches to the
-+ readonly data section) or else you can #define the symbols
-+ EXTRA_SECTIONS, EXTRA_SECTION_FUNCTIONS, SELECT_SECTION, and
-+ SELECT_RTX_SECTION. We do both here just to be on the safe side. */
-+
-+ #define USE_CONST_SECTION 1
-+
-+ #define CONST_SECTION_ASM_OP ".section\t.rodata"
-+
-+ /* Define the pseudo-ops used to switch to the .ctors and .dtors sections.
-+
-+ Note that we want to give these sections the SHF_WRITE attribute
-+ because these sections will actually contain data (i.e. tables of
-+ addresses of functions in the current root executable or shared library
-+ file) and, in the case of a shared library, the relocatable addresses
-+ will have to be properly resolved/relocated (and then written into) by
-+ the dynamic linker when it actually attaches the given shared library
-+ to the executing process. (Note that on SVR4, you may wish to use the
-+ `-z text' option to the ELF linker, when building a shared library, as
-+ an additional check that you are doing everything right. But if you do
-+ use the `-z text' option when building a shared library, you will get
-+ errors unless the .ctors and .dtors sections are marked as writable
-+ via the SHF_WRITE attribute.) */
-+
-+ #define CTORS_SECTION_ASM_OP ".section\t.ctors,\"aw\""
-+ #define DTORS_SECTION_ASM_OP ".section\t.dtors,\"aw\""
-+
-+ /* On svr4, we *do* have support for the .init and .fini sections, and we
-+ can put stuff in there to be executed before and after `main'. We let
-+ crtstuff.c and other files know this by defining the following symbols.
-+ The definitions say how to change sections to the .init and .fini
-+ sections. This is the same for all known svr4 assemblers. */
-+
-+ #define INIT_SECTION_ASM_OP ".section\t.init"
-+ #define FINI_SECTION_ASM_OP ".section\t.fini"
-+
-+ /* Support non-common, uninitialized data in the .bss section. */
-+
-+ #define BSS_SECTION_ASM_OP ".section\t.bss"
-+
-+ /* A default list of other sections which we might be "in" at any given
-+ time. For targets that use additional sections (e.g. .tdesc) you
-+ should override this definition in the target-specific file which
-+ includes this file. */
-+
-+ #undef EXTRA_SECTIONS
-+ #define EXTRA_SECTIONS in_const, in_ctors, in_dtors, in_bss
-+
-+ /* A default list of extra section function definitions. For targets
-+ that use additional sections (e.g. .tdesc) you should override this
-+ definition in the target-specific file which includes this file. */
-+
-+ #undef EXTRA_SECTION_FUNCTIONS
-+ #define EXTRA_SECTION_FUNCTIONS \
-+ CONST_SECTION_FUNCTION \
-+ CTORS_SECTION_FUNCTION \
-+ DTORS_SECTION_FUNCTION \
-+ BSS_SECTION_FUNCTION
-+
-+ #undef READONLY_DATA_SECTION
-+ #define READONLY_DATA_SECTION() const_section ()
-+
-+ extern void text_section ();
-+
-+ #define CONST_SECTION_FUNCTION \
-+ void \
-+ const_section () \
-+ { \
-+ if (!USE_CONST_SECTION) \
-+ text_section(); \
-+ else if (in_section != in_const) \
-+ { \
-+ fprintf (asm_out_file, "%s\n", CONST_SECTION_ASM_OP); \
-+ in_section = in_const; \
-+ } \
-+ }
-+
-+ #define CTORS_SECTION_FUNCTION \
-+ void \
-+ ctors_section () \
-+ { \
-+ if (in_section != in_ctors) \
-+ { \
-+ fprintf (asm_out_file, "%s\n", CTORS_SECTION_ASM_OP); \
-+ in_section = in_ctors; \
-+ } \
-+ }
-+
-+ #define DTORS_SECTION_FUNCTION \
-+ void \
-+ dtors_section () \
-+ { \
-+ if (in_section != in_dtors) \
-+ { \
-+ fprintf (asm_out_file, "%s\n", DTORS_SECTION_ASM_OP); \
-+ in_section = in_dtors; \
-+ } \
-+ }
-+
-+ #define BSS_SECTION_FUNCTION \
-+ void \
-+ bss_section () \
-+ { \
-+ if (in_section != in_bss) \
-+ { \
-+ fprintf (asm_out_file, "%s\n", BSS_SECTION_ASM_OP); \
-+ in_section = in_bss; \
-+ } \
-+ }
-+
-+
-+ /* Switch into a generic section.
-+ This is currently only used to support section attributes.
-+
-+ We make the section read-only and executable for a function decl,
-+ read-only for a const data decl, and writable for a non-const data decl. */
-+ #define ASM_OUTPUT_SECTION_NAME(FILE, DECL, NAME) \
-+ fprintf (FILE, ".section\t%s,\"%s\",@progbits\n", NAME, \
-+ (DECL) && TREE_CODE (DECL) == FUNCTION_DECL ? "ax" : \
-+ (DECL) && TREE_READONLY (DECL) ? "a" : "aw")
-+
-+
-+ /* A C statement (sans semicolon) to output an element in the table of
-+ global constructors. */
-+ #define ASM_OUTPUT_CONSTRUCTOR(FILE,NAME) \
-+ do { \
-+ ctors_section (); \
-+ fprintf (FILE, "\t%s\t ", INT_ASM_OP); \
-+ assemble_name (FILE, NAME); \
-+ fprintf (FILE, "\n"); \
-+ } while (0)
-+
-+ /* A C statement (sans semicolon) to output an element in the table of
-+ global destructors. */
-+ #define ASM_OUTPUT_DESTRUCTOR(FILE,NAME) \
-+ do { \
-+ dtors_section (); \
-+ fprintf (FILE, "\t%s\t ", INT_ASM_OP); \
-+ assemble_name (FILE, NAME); \
-+ fprintf (FILE, "\n"); \
-+ } while (0)
-+
-+ /* A C statement or statements to switch to the appropriate
-+ section for output of DECL. DECL is either a `VAR_DECL' node
-+ or a constant of some sort. RELOC indicates whether forming
-+ the initial value of DECL requires link-time relocations. */
-+
-+ #define SELECT_SECTION(DECL,RELOC) \
-+ { \
-+ if (TREE_CODE (DECL) == STRING_CST) \
-+ { \
-+ if (! flag_writable_strings) \
-+ const_section (); \
-+ else \
-+ data_section (); \
-+ } \
-+ else if (TREE_CODE (DECL) == VAR_DECL) \
-+ { \
-+ if ((flag_pic && RELOC) \
-+ || !TREE_READONLY (DECL) || TREE_SIDE_EFFECTS (DECL) \
-+ || !DECL_INITIAL (DECL) \
-+ || (DECL_INITIAL (DECL) != error_mark_node \
-+ && !TREE_CONSTANT (DECL_INITIAL (DECL)))) \
-+ { \
-+ if (DECL_COMMON (DECL) \
-+ && !DECL_INITIAL (DECL)) \
-+ /* || DECL_INITIAL (DECL) == error_mark_node)) */ \
-+ bss_section(); \
-+ else \
-+ data_section (); \
-+ } \
-+ else \
-+ const_section (); \
-+ } \
-+ else \
-+ const_section (); \
-+ }
-+
-+ /* A C statement or statements to switch to the appropriate
-+ section for output of RTX in mode MODE. RTX is some kind
-+ of constant in RTL. The argument MODE is redundant except
-+ in the case of a `const_int' rtx. Currently, these always
-+ go into the const section. */
-+
-+ #undef SELECT_RTX_SECTION
-+ #define SELECT_RTX_SECTION(MODE,RTX) const_section()
-+
-+ /* Define the strings used for the special svr4 .type and .size directives.
-+ These strings generally do not vary from one system running svr4 to
-+ another, but if a given system (e.g. m88k running svr) needs to use
-+ different pseudo-op names for these, they may be overridden in the
-+ file which includes this one. */
-+
-+ #define TYPE_ASM_OP ".type"
-+ #define SIZE_ASM_OP ".size"
-+
-+ /* This is how we tell the assembler that a symbol is weak. */
-+
-+ #define ASM_WEAKEN_LABEL(FILE,NAME) \
-+ do { fputs ("\t.weak\t", FILE); assemble_name (FILE, NAME); \
-+ fputc ('\n', FILE); } while (0)
-+
-+ /* This is how we tell the assembler that two symbols have the same value. */
-+
-+ #define ASM_OUTPUT_DEF(FILE,NAME1,NAME2) \
-+ do { assemble_name(FILE, NAME1); \
-+ fputs(" = ", FILE); \
-+ assemble_name(FILE, NAME2); \
-+ fputc('\n', FILE); } while (0)
-+
-+ /* The following macro defines the format used to output the second
-+ operand of the .type assembler directive. Different svr4 assemblers
-+ expect various different forms for this operand. The one given here
-+ is just a default. You may need to override it in your machine-
-+ specific tm.h file (depending upon the particulars of your assembler). */
-+
-+ #define TYPE_OPERAND_FMT "@%s"
-+
-+ /* Write the extra assembler code needed to declare a function's result.
-+ Most svr4 assemblers don't require any special declaration of the
-+ result value, but there are exceptions. */
-+
-+ #ifndef ASM_DECLARE_RESULT
-+ #define ASM_DECLARE_RESULT(FILE, RESULT)
-+ #endif
-+
-+ /* These macros generate the special .type and .size directives which
-+ are used to set the corresponding fields of the linker symbol table
-+ entries in an ELF object file under SVR4. These macros also output
-+ the starting labels for the relevant functions/objects. */
-+
-+ /* Write the extra assembler code needed to declare an object properly. */
-+
-+ #define ASM_DECLARE_OBJECT_NAME(FILE, NAME, DECL) \
-+ do { \
-+ fprintf (FILE, "\t%s\t ", TYPE_ASM_OP); \
-+ assemble_name (FILE, NAME); \
-+ putc (',', FILE); \
-+ fprintf (FILE, TYPE_OPERAND_FMT, "object"); \
-+ putc ('\n', FILE); \
-+ size_directive_output = 0; \
-+ if (!flag_inhibit_size_directive && DECL_SIZE (DECL)) \
-+ { \
-+ size_directive_output = 1; \
-+ fprintf (FILE, "\t%s\t ", SIZE_ASM_OP); \
-+ assemble_name (FILE, NAME); \
-+ fprintf (FILE, ",%d\n", int_size_in_bytes (TREE_TYPE (DECL))); \
-+ } \
-+ ASM_OUTPUT_LABEL(FILE, NAME); \
-+ } while (0)
-+
-+ /* Output the size directive for a decl in rest_of_decl_compilation
-+ in the case where we did not do so before the initializer.
-+ Once we find the error_mark_node, we know that the value of
-+ size_directive_output was set
-+ by ASM_DECLARE_OBJECT_NAME when it was run for the same decl. */
-+
-+ #define ASM_FINISH_DECLARE_OBJECT(FILE, DECL, TOP_LEVEL, AT_END) \
-+ do { \
-+ char *name = XSTR (XEXP (DECL_RTL (DECL), 0), 0); \
-+ if (!flag_inhibit_size_directive && DECL_SIZE (DECL) \
-+ && ! AT_END && TOP_LEVEL \
-+ && DECL_INITIAL (DECL) == error_mark_node \
-+ && !size_directive_output) \
-+ { \
-+ size_directive_output = 1; \
-+ fprintf (FILE, "\t%s\t ", SIZE_ASM_OP); \
-+ assemble_name (FILE, name); \
-+ fprintf (FILE, ",%d\n", int_size_in_bytes (TREE_TYPE (DECL))); \
-+ } \
-+ } while (0)
-+
-+ /* A table of bytes codes used by the ASM_OUTPUT_ASCII and
-+ ASM_OUTPUT_LIMITED_STRING macros. Each byte in the table
-+ corresponds to a particular byte value [0..255]. For any
-+ given byte value, if the value in the corresponding table
-+ position is zero, the given character can be output directly.
-+ If the table value is 1, the byte must be output as a \ooo
-+ octal escape. If the tables value is anything else, then the
-+ byte value should be output as a \ followed by the value
-+ in the table. Note that we can use standard UN*X escape
-+ sequences for many control characters, but we don't use
-+ \a to represent BEL because some svr4 assemblers (e.g. on
-+ the i386) don't know about that. Also, we don't use \v
-+ since some versions of gas, such as 2.2 did not accept it. */
-+
-+ #define ESCAPES \
-+ "\1\1\1\1\1\1\1\1btn\1fr\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\
-+ \0\0\"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\
-+ \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\\\0\0\0\
-+ \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\
-+ \1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\
-+ \1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\
-+ \1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\
-+ \1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1"
-+
-+ /* Some svr4 assemblers have a limit on the number of characters which
-+ can appear in the operand of a .string directive. If your assembler
-+ has such a limitation, you should define STRING_LIMIT to reflect that
-+ limit. Note that at least some svr4 assemblers have a limit on the
-+ actual number of bytes in the double-quoted string, and that they
-+ count each character in an escape sequence as one byte. Thus, an
-+ escape sequence like \377 would count as four bytes.
-+
-+ If your target assembler doesn't support the .string directive, you
-+ should define this to zero.
-+ */
-+
-+ #define STRING_LIMIT ((unsigned) 256)
-+
-+ #define STRING_ASM_OP ".string"
-+
-+ /*
-+ * We always use gas here, so we don't worry about ECOFF assembler problems.
-+ */
-+ #undef TARGET_GAS
-+ #define TARGET_GAS (1)
-+
-+ #undef PREFERRED_DEBUGGING_TYPE
-+ #define PREFERRED_DEBUGGING_TYPE DBX_DEBUG
-+
-+ /* Provide a STARTFILE_SPEC appropriate for Linux. Here we add
-+ the Linux magical crtbegin.o file (see crtstuff.c) which
-+ provides part of the support for getting C++ file-scope static
-+ object constructed before entering `main'. */
-+
-+ #undef STARTFILE_SPEC
-+ #define STARTFILE_SPEC \
-+ "%{!shared: \
-+ %{pg:gcrt1.o%s} %{!pg:%{p:gcrt1.o%s} %{!p:crt1.o%s}}}\
-+ crti.o%s crtbegin.o%s"
-+
-+ /* Provide a ENDFILE_SPEC appropriate for Linux. Here we tack on
-+ the Linux magical crtend.o file (see crtstuff.c) which
-+ provides part of the support for getting C++ file-scope static
-+ object constructed before entering `main', followed by a normal
-+ Linux "finalizer" file, `crtn.o'. */
-+
-+ #undef ENDFILE_SPEC
-+ #define ENDFILE_SPEC \
-+ "crtend.o%s crtn.o%s"
-diff -rcp2N gcc-2.7.2.2/config/alpha/linux.h g77-new/config/alpha/linux.h
-*** gcc-2.7.2.2/config/alpha/linux.h Wed Dec 31 19:00:00 1969
---- g77-new/config/alpha/linux.h Thu Jul 10 20:08:49 1997
-***************
-*** 0 ****
---- 1,72 ----
-+ /* Definitions of target machine for GNU compiler, for Alpha Linux,
-+ using ECOFF.
-+ Copyright (C) 1995 Free Software Foundation, Inc.
-+ Contributed by Bob Manson.
-+ Derived from work contributed by Cygnus Support,
-+ (c) 1993 Free Software Foundation.
-+
-+ This file is part of GNU CC.
-+
-+ GNU CC 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.
-+
-+ GNU CC 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 GNU CC; see the file COPYING. If not, write to
-+ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
-+
-+ #define TARGET_DEFAULT (3 | MASK_GAS)
-+
-+ #include "alpha/alpha.h"
-+
-+ #undef TARGET_VERSION
-+ #define TARGET_VERSION fprintf (stderr, " (Linux/Alpha)");
-+
-+ #undef CPP_PREDEFINES
-+ #define CPP_PREDEFINES "\
-+ -D__alpha -D__alpha__ -D__linux__ -D__linux -D_LONGLONG -Dlinux -Dunix \
-+ -Asystem(linux) -Acpu(alpha) -Amachine(alpha)"
-+
-+ /* We don't actually need any of these; the MD_ vars are ignored
-+ anyway for cross-compilers, and the other specs won't get picked up
-+ 'coz the user is supposed to do ld -r (hmm, perhaps that should be
-+ the default). In any case, setting them thus will catch some
-+ common user errors. */
-+
-+ #undef MD_EXEC_PREFIX
-+ #undef MD_STARTFILE_PREFIX
-+
-+ #undef LIB_SPEC
-+ #define LIB_SPEC "%{pg:-lgmon} %{pg:-lc_p} %{!pg:-lc}"
-+
-+ #undef LINK_SPEC
-+ #define LINK_SPEC \
-+ "-G 8 %{O*:-O3} %{!O*:-O1}"
-+
-+ #undef ASM_SPEC
-+ #define ASM_SPEC "-nocpp"
-+
-+ /* Can't do stabs */
-+ #undef SDB_DEBUGGING_INFO
-+
-+ /* Prefer dbx. */
-+ #undef PREFERRED_DEBUGGING_TYPE
-+ #define PREFERRED_DEBUGGING_TYPE DBX_DEBUG
-+
-+ #undef FUNCTION_PROFILER
-+
-+ #define FUNCTION_PROFILER(FILE, LABELNO) \
-+ do { \
-+ fputs ("\tlda $27,_mcount\n", (FILE)); \
-+ fputs ("\tjsr $26,($27),_mcount\n", (FILE)); \
-+ fputs ("\tldgp $29,0($26)\n", (FILE)); \
-+ } while (0);
-+
-+ /* Generate calls to memcpy, etc., not bcopy, etc. */
-+ #define TARGET_MEM_FUNCTIONS
-diff -rcp2N gcc-2.7.2.2/config/alpha/t-linux g77-new/config/alpha/t-linux
-*** gcc-2.7.2.2/config/alpha/t-linux Wed Dec 31 19:00:00 1969
---- g77-new/config/alpha/t-linux Thu Jul 10 20:08:49 1997
-***************
-*** 0 ****
---- 1,3 ----
-+ # Our header files are supposed to be correct, nein?
-+ FIXINCLUDES =
-+ STMP_FIXPROTO =
-diff -rcp2N gcc-2.7.2.2/config/alpha/x-linux g77-new/config/alpha/x-linux
-*** gcc-2.7.2.2/config/alpha/x-linux Wed Dec 31 19:00:00 1969
---- g77-new/config/alpha/x-linux Thu Jul 10 20:08:49 1997
-***************
-*** 0 ****
---- 1 ----
-+ CLIB=-lbfd -liberty
-diff -rcp2N gcc-2.7.2.2/config/alpha/xm-alpha.h g77-new/config/alpha/xm-alpha.h
-*** gcc-2.7.2.2/config/alpha/xm-alpha.h Thu Aug 31 17:52:27 1995
---- g77-new/config/alpha/xm-alpha.h Thu Jul 10 20:08:49 1997
-*************** Boston, MA 02111-1307, USA. */
-*** 46,51 ****
---- 46,53 ----
- #include <alloca.h>
- #else
-+ #ifndef alloca
- extern void *alloca ();
- #endif
-+ #endif
-
- /* The host compiler has problems with enum bitfields since it makes
-*************** extern void *malloc (), *realloc (), *ca
-*** 68,72 ****
---- 70,76 ----
- /* OSF/1 has vprintf. */
-
-+ #ifndef linux /* 1996/02/22 mauro@craftwork.com -- unreliable with Linux */
- #define HAVE_VPRINTF
-+ #endif
-
- /* OSF/1 has putenv. */
-diff -rcp2N gcc-2.7.2.2/config/alpha/xm-linux.h g77-new/config/alpha/xm-linux.h
-*** gcc-2.7.2.2/config/alpha/xm-linux.h Wed Dec 31 19:00:00 1969
---- g77-new/config/alpha/xm-linux.h Thu Jul 10 20:08:49 1997
-***************
-*** 0 ****
---- 1,10 ----
-+ #ifndef _XM_LINUX_H
-+ #define _XM_LINUX_H
-+
-+ #include "xm-alpha.h"
-+
-+ #define HAVE_STRERROR
-+
-+ #define DONT_DECLARE_SYS_SIGLIST
-+ #define USE_BFD
-+ #endif
-diff -rcp2N gcc-2.7.2.2/config/i386/i386.c g77-new/config/i386/i386.c
-*** gcc-2.7.2.2/config/i386/i386.c Sun Oct 22 07:13:21 1995
---- g77-new/config/i386/i386.c Sun Aug 10 18:46:09 1997
-*************** standard_80387_constant_p (x)
-*** 1290,1294 ****
- set_float_handler (handler);
- REAL_VALUE_FROM_CONST_DOUBLE (d, x);
-! is0 = REAL_VALUES_EQUAL (d, dconst0);
- is1 = REAL_VALUES_EQUAL (d, dconst1);
- set_float_handler (NULL_PTR);
---- 1290,1294 ----
- set_float_handler (handler);
- REAL_VALUE_FROM_CONST_DOUBLE (d, x);
-! is0 = REAL_VALUES_EQUAL (d, dconst0) && !REAL_VALUE_MINUS_ZERO (d);
- is1 = REAL_VALUES_EQUAL (d, dconst1);
- set_float_handler (NULL_PTR);
-diff -rcp2N gcc-2.7.2.2/config/mips/mips.c g77-new/config/mips/mips.c
-*** gcc-2.7.2.2/config/mips/mips.c Thu Feb 20 19:24:13 1997
---- g77-new/config/mips/mips.c Sun Aug 10 18:45:43 1997
-*************** expand_block_move (operands)
-*** 2360,2365 ****
-
- else if (constp && bytes <= 2*MAX_MOVE_BYTES)
-! emit_insn (gen_movstrsi_internal (gen_rtx (MEM, BLKmode, dest_reg),
-! gen_rtx (MEM, BLKmode, src_reg),
- bytes_rtx, align_rtx));
-
---- 2360,2367 ----
-
- else if (constp && bytes <= 2*MAX_MOVE_BYTES)
-! emit_insn (gen_movstrsi_internal (change_address (operands[0],
-! BLKmode, dest_reg),
-! change_address (orig_src, BLKmode,
-! src_reg),
- bytes_rtx, align_rtx));
-
-diff -rcp2N gcc-2.7.2.2/config/mips/mips.h g77-new/config/mips/mips.h
-*** gcc-2.7.2.2/config/mips/mips.h Thu Nov 9 11:23:09 1995
---- g77-new/config/mips/mips.h Sun Aug 10 18:46:44 1997
-*************** typedef struct mips_args {
-*** 2160,2170 ****
- } \
- \
-! /* Flush the instruction cache. */ \
-! /* ??? Are the modes right? Maybe they should depend on -mint64/-mlong64? */\
- /* ??? Should check the return value for errors. */ \
-! emit_library_call (gen_rtx (SYMBOL_REF, Pmode, "cacheflush"), \
- 0, VOIDmode, 3, addr, Pmode, \
- GEN_INT (TRAMPOLINE_SIZE), SImode, \
-! GEN_INT (1), SImode); \
- }
-
---- 2160,2170 ----
- } \
- \
-! /* Flush both caches. We need to flush the data cache in case \
-! the system has a write-back cache. */ \
- /* ??? Should check the return value for errors. */ \
-! emit_library_call (gen_rtx (SYMBOL_REF, Pmode, "_flush_cache"), \
- 0, VOIDmode, 3, addr, Pmode, \
- GEN_INT (TRAMPOLINE_SIZE), SImode, \
-! GEN_INT (3), TYPE_MODE (integer_type_node)); \
- }
-
-*************** typedef struct mips_args {
-*** 2388,2392 ****
- ((GET_CODE (X) != CONST_DOUBLE \
- || mips_const_double_ok (X, GET_MODE (X))) \
-! && ! (GET_CODE (X) == CONST && ABI_64BIT))
-
- /* A C compound statement that attempts to replace X with a valid
---- 2388,2393 ----
- ((GET_CODE (X) != CONST_DOUBLE \
- || mips_const_double_ok (X, GET_MODE (X))) \
-! && ! (GET_CODE (X) == CONST \
-! && (ABI_64BIT || GET_CODE (XEXP (X, 0)) == MINUS)))
-
- /* A C compound statement that attempts to replace X with a valid
-diff -rcp2N gcc-2.7.2.2/config/mips/sni-gas.h g77-new/config/mips/sni-gas.h
-*** gcc-2.7.2.2/config/mips/sni-gas.h Wed Dec 31 19:00:00 1969
---- g77-new/config/mips/sni-gas.h Sun Aug 10 18:46:33 1997
-***************
-*** 0 ****
---- 1,43 ----
-+ #include "mips/sni-svr4.h"
-+
-+ /* Enable debugging. */
-+ #define DBX_DEBUGGING_INFO
-+ #define SDB_DEBUGGING_INFO
-+ #define MIPS_DEBUGGING_INFO
-+
-+ #define DWARF_DEBUGGING_INFO
-+ #undef PREFERRED_DEBUGGING_TYPE
-+ #define PREFERRED_DEBUGGING_TYPE DWARF_DEBUG
-+
-+ /* We need to use .esize and .etype instead of .size and .type to
-+ avoid conflicting with ELF directives. These are only recognized
-+ by gas, anyhow, not the native assembler. */
-+ #undef PUT_SDB_SIZE
-+ #define PUT_SDB_SIZE(a) \
-+ do { \
-+ extern FILE *asm_out_text_file; \
-+ fprintf (asm_out_text_file, "\t.esize\t%d;", (a)); \
-+ } while (0)
-+
-+ #undef PUT_SDB_TYPE
-+ #define PUT_SDB_TYPE(a) \
-+ do { \
-+ extern FILE *asm_out_text_file; \
-+ fprintf (asm_out_text_file, "\t.etype\t0x%x;", (a)); \
-+ } while (0)
-+
-+
-+ /* This is how to equate one symbol to another symbol. The syntax used is
-+ `SYM1=SYM2'. Note that this is different from the way equates are done
-+ with most svr4 assemblers, where the syntax is `.set SYM1,SYM2'. */
-+
-+ #define ASM_OUTPUT_DEF(FILE,LABEL1,LABEL2) \
-+ do { fprintf ((FILE), "\t"); \
-+ assemble_name (FILE, LABEL1); \
-+ fprintf (FILE, " = "); \
-+ assemble_name (FILE, LABEL2); \
-+ fprintf (FILE, "\n"); \
-+ } while (0)
-+
-+
-+
-diff -rcp2N gcc-2.7.2.2/config/mips/sni-svr4.h g77-new/config/mips/sni-svr4.h
-*** gcc-2.7.2.2/config/mips/sni-svr4.h Wed Dec 31 19:00:00 1969
---- g77-new/config/mips/sni-svr4.h Sun Aug 10 18:46:33 1997
-***************
-*** 0 ****
---- 1,103 ----
-+ /* Definitions of target machine for GNU compiler. SNI SINIX version.
-+ Copyright (C) 1996 Free Software Foundation, Inc.
-+ Contributed by Marco Walther (Marco.Walther@mch.sni.de).
-+
-+ This file is part of GNU CC.
-+
-+ GNU CC 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.
-+
-+ GNU CC 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 GNU CC; see the file COPYING. If not, write to
-+ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
-+
-+ #define MIPS_SVR4
-+
-+ #define CPP_PREDEFINES "\
-+ -Dmips -Dunix -Dhost_mips -DMIPSEB -DR3000 -DSYSTYPE_SVR4 \
-+ -D_mips -D_unix -D_host_mips -D_MIPSEB -D_R3000 -D_SYSTYPE_SVR4 \
-+ -Asystem(unix) -Asystem(svr4) -Acpu(mips) -Amachine(mips)"
-+
-+ #define CPP_SPEC "\
-+ %{.cc: -D__LANGUAGE_C_PLUS_PLUS -D_LANGUAGE_C_PLUS_PLUS} \
-+ %{.cxx: -D__LANGUAGE_C_PLUS_PLUS -D_LANGUAGE_C_PLUS_PLUS} \
-+ %{.C: -D__LANGUAGE_C_PLUS_PLUS -D_LANGUAGE_C_PLUS_PLUS} \
-+ %{.m: -D__LANGUAGE_OBJECTIVE_C -D_LANGUAGE_OBJECTIVE_C} \
-+ %{.S: -D__LANGUAGE_ASSEMBLY -D_LANGUAGE_ASSEMBLY %{!ansi:-DLANGUAGE_ASSEMBLY}} \
-+ %{.s: -D__LANGUAGE_ASSEMBLY -D_LANGUAGE_ASSEMBLY %{!ansi:-DLANGUAGE_ASSEMBLY}} \
-+ %{!.S:%{!.s: -D__LANGUAGE_C -D_LANGUAGE_C %{!ansi:-DLANGUAGE_C}}} \
-+ -D__SIZE_TYPE__=unsigned\\ int -D__PTRDIFF_TYPE__=int"
-+
-+ #define LINK_SPEC "\
-+ %{G*} \
-+ %{!mgas: \
-+ %{dy} %{dn}}"
-+
-+ #define LIB_SPEC "\
-+ %{p:-lprof1} \
-+ %{!p:%{pg:-lprof1} \
-+ %{!pg:-L/usr/ccs/lib/ -lc /usr/ccs/lib/crtn.o%s}}"
-+
-+ #define STARTFILE_SPEC "\
-+ %{pg:gcrt0.o%s} \
-+ %{!pg:%{p:mcrt0.o%s} \
-+ %{!p:/usr/ccs/lib/crt1.o /usr/ccs/lib/crti.o /usr/ccs/lib/values-Xt.o%s}}"
-+
-+ /* Mips System V.4 doesn't have a getpagesize() function needed by the
-+ trampoline code, so use the POSIX sysconf function to get it.
-+ This is only done when compiling the trampoline code. */
-+
-+ #ifdef L_trampoline
-+ #include <unistd.h>
-+
-+ #define getpagesize() sysconf(_SC_PAGE_SIZE)
-+ #endif /* L_trampoline */
-+
-+ /* Use atexit for static constructors/destructors, instead of defining
-+ our own exit function. */
-+ #define HAVE_ATEXIT
-+
-+ /* Generate calls to memcpy, etc., not bcopy, etc. */
-+ #define TARGET_MEM_FUNCTIONS
-+
-+ #define OBJECT_FORMAT_ELF
-+
-+ #define TARGET_DEFAULT MASK_ABICALLS
-+ #define ABICALLS_ASM_OP ".option pic2"
-+
-+ #define MACHINE_TYPE "SNI running SINIX 5.42"
-+
-+ #define MIPS_DEFAULT_GVALUE 0
-+
-+ #define NM_FLAGS "-p"
-+
-+ /* wir haben ein Problem, wenn in einem Assembler-File keine .text-section
-+ erzeugt wird. Dann landen diese Pseudo-Labels in irgendeiner anderen
-+ section, z.B. .reginfo. Das macht den ld sehr ungluecklich. */
-+
-+ #define ASM_IDENTIFY_GCC(mw_stream) \
-+ fprintf(mw_stream, "\t.ident \"gcc2_compiled.\"\n");
-+
-+ #define ASM_IDENTIFY_LANGUAGE(STREAM)
-+
-+ #define ASM_LONG ".word\t"
-+ #define ASM_GLOBAL ".rdata\n\t\t.globl\t"
-+
-+ #include "mips/mips.h"
-+
-+ /* We do not want to run mips-tfile! */
-+ #undef ASM_FINAL_SPEC
-+
-+ #undef OBJECT_FORMAT_COFF
-+
-+ /* We don't support debugging info for now. */
-+ #undef DBX_DEBUGGING_INFO
-+ #undef SDB_DEBUGGING_INFO
-+ #undef MIPS_DEBUGGING_INFO
-diff -rcp2N gcc-2.7.2.2/config/mips/x-sni-svr4 g77-new/config/mips/x-sni-svr4
-*** gcc-2.7.2.2/config/mips/x-sni-svr4 Wed Dec 31 19:00:00 1969
---- g77-new/config/mips/x-sni-svr4 Sun Aug 10 18:46:33 1997
-***************
-*** 0 ****
---- 1,18 ----
-+ # Define CC and OLDCC as the same, so that the tests:
-+ # if [ x"$(OLDCC)" = x"$(CC)" ] ...
-+ #
-+ # will succeed (if OLDCC != CC, it is assumed that GCC is
-+ # being used in secondary stage builds).
-+ # -Olimit is so the user can use -O2. Down with fixed
-+ # size tables!
-+
-+ CC = $(OLDCC)
-+ OPT =
-+ OLDCC = cc -Olimit 3000 $(OPT)
-+
-+ X_CFLAGS = -DNO_SYS_SIGLIST
-+
-+ # Show we need to use the C version of ALLOCA
-+ # The SVR3 configurations have it, but the SVR4 configurations don't.
-+ # For now, just try using it for all SVR* configurations.
-+ ALLOCA = alloca.o
-diff -rcp2N gcc-2.7.2.2/config/msdos/configur.bat g77-new/config/msdos/configur.bat
-*** gcc-2.7.2.2/config/msdos/configur.bat Mon Aug 28 05:55:47 1995
---- g77-new/config/msdos/configur.bat Sun Aug 10 19:08:05 1997
-*************** sed -f config/msdos/top.sed Makefile.in
-*** 18,21 ****
---- 18,27 ----
- set LANG=
-
-+ if not exist ada\make-lang.in goto no_ada
-+ sed -f config/msdos/top.sed ada\make-lang.in >> Makefile
-+ sed -f config/msdos/top.sed ada\makefile.in > ada\Makefile
-+ set LANG=%LANG% ada.&
-+ :no_ada
-+
- if not exist cp\make-lang.in goto no_cp
- sed -f config/msdos/top.sed cp\make-lang.in >> Makefile
-diff -rcp2N gcc-2.7.2.2/config/pa/pa.c g77-new/config/pa/pa.c
-*** gcc-2.7.2.2/config/pa/pa.c Sun Oct 22 07:45:20 1995
---- g77-new/config/pa/pa.c Sun Aug 10 18:45:44 1997
-*************** output_move_double (operands)
-*** 1344,1369 ****
- do them in the other order.
-
-! RMS says "This happens only for registers;
-! such overlap can't happen in memory unless the user explicitly
-! sets it up, and that is an undefined circumstance."
-!
-! but it happens on the HP-PA when loading parameter registers,
-! so I am going to define that circumstance, and make it work
-! as expected. */
-
-! if (optype0 == REGOP && (optype1 == MEMOP || optype1 == OFFSOP)
-! && reg_overlap_mentioned_p (operands[0], XEXP (operands[1], 0)))
- {
-- /* XXX THIS PROBABLY DOESN'T WORK. */
- /* Do the late half first. */
- if (addreg1)
- output_asm_insn ("ldo 4(%0),%0", &addreg1);
- output_asm_insn (singlemove_string (latehalf), latehalf);
- if (addreg1)
- output_asm_insn ("ldo -4(%0),%0", &addreg1);
-- /* Then clobber. */
- return singlemove_string (operands);
- }
-
- if (optype0 == REGOP && optype1 == REGOP
- && REGNO (operands[0]) == REGNO (operands[1]) + 1)
---- 1344,1377 ----
- do them in the other order.
-
-! This can happen in two cases:
-
-! mem -> register where the first half of the destination register
-! is the same register used in the memory's address. Reload
-! can create such insns.
-!
-! mem in this case will be either register indirect or register
-! indirect plus a valid offset.
-!
-! register -> register move where REGNO(dst) == REGNO(src + 1)
-! someone (Tim/Tege?) claimed this can happen for parameter loads.
-!
-! Handle mem -> register case first. */
-! if (optype0 == REGOP
-! && (optype1 == MEMOP || optype1 == OFFSOP)
-! && refers_to_regno_p (REGNO (operands[0]), REGNO (operands[0]) + 1,
-! operands[1], 0))
- {
- /* Do the late half first. */
- if (addreg1)
- output_asm_insn ("ldo 4(%0),%0", &addreg1);
- output_asm_insn (singlemove_string (latehalf), latehalf);
-+
-+ /* Then clobber. */
- if (addreg1)
- output_asm_insn ("ldo -4(%0),%0", &addreg1);
- return singlemove_string (operands);
- }
-
-+ /* Now handle register -> register case. */
- if (optype0 == REGOP && optype1 == REGOP
- && REGNO (operands[0]) == REGNO (operands[1]) + 1)
-diff -rcp2N gcc-2.7.2.2/config/pa/pa.md g77-new/config/pa/pa.md
-*** gcc-2.7.2.2/config/pa/pa.md Mon Aug 14 09:00:49 1995
---- g77-new/config/pa/pa.md Sun Aug 10 18:45:45 1997
-***************
-*** 1828,1832 ****
- (define_insn ""
- [(set (match_operand:DF 0 "reg_or_nonsymb_mem_operand"
-! "=f,*r,Q,?o,?Q,f,*&r,*&r")
- (match_operand:DF 1 "reg_or_0_or_nonsymb_mem_operand"
- "fG,*rG,f,*r,*r,Q,o,Q"))]
---- 1828,1832 ----
- (define_insn ""
- [(set (match_operand:DF 0 "reg_or_nonsymb_mem_operand"
-! "=f,*r,Q,?o,?Q,f,*r,*r")
- (match_operand:DF 1 "reg_or_0_or_nonsymb_mem_operand"
- "fG,*rG,f,*r,*r,Q,o,Q"))]
-***************
-*** 1846,1850 ****
- (define_insn ""
- [(set (match_operand:DF 0 "reg_or_nonsymb_mem_operand"
-! "=r,?o,?Q,&r,&r")
- (match_operand:DF 1 "reg_or_0_or_nonsymb_mem_operand"
- "rG,r,r,o,Q"))]
---- 1846,1850 ----
- (define_insn ""
- [(set (match_operand:DF 0 "reg_or_nonsymb_mem_operand"
-! "=r,?o,?Q,r,r")
- (match_operand:DF 1 "reg_or_0_or_nonsymb_mem_operand"
- "rG,r,r,o,Q"))]
-***************
-*** 2019,2023 ****
- (define_insn ""
- [(set (match_operand:DI 0 "reg_or_nonsymb_mem_operand"
-! "=r,o,Q,&r,&r,&r,f,f,*T")
- (match_operand:DI 1 "general_operand"
- "rM,r,r,o,Q,i,fM,*T,f"))]
---- 2019,2023 ----
- (define_insn ""
- [(set (match_operand:DI 0 "reg_or_nonsymb_mem_operand"
-! "=r,o,Q,r,r,r,f,f,*T")
- (match_operand:DI 1 "general_operand"
- "rM,r,r,o,Q,i,fM,*T,f"))]
-***************
-*** 2037,2041 ****
- (define_insn ""
- [(set (match_operand:DI 0 "reg_or_nonsymb_mem_operand"
-! "=r,o,Q,&r,&r,&r")
- (match_operand:DI 1 "general_operand"
- "rM,r,r,o,Q,i"))]
---- 2037,2041 ----
- (define_insn ""
- [(set (match_operand:DI 0 "reg_or_nonsymb_mem_operand"
-! "=r,o,Q,r,r,r")
- (match_operand:DI 1 "general_operand"
- "rM,r,r,o,Q,i"))]
-diff -rcp2N gcc-2.7.2.2/config/rs6000/rs6000.c g77-new/config/rs6000/rs6000.c
-*** gcc-2.7.2.2/config/rs6000/rs6000.c Thu Feb 20 19:24:14 1997
---- g77-new/config/rs6000/rs6000.c Sun Aug 10 04:44:05 1997
-*************** input_operand (op, mode)
-*** 724,730 ****
- return 1;
-
-! /* For HImode and QImode, any constant is valid. */
-! if ((mode == HImode || mode == QImode)
-! && GET_CODE (op) == CONST_INT)
- return 1;
-
---- 724,729 ----
- return 1;
-
-! /* For integer modes, any constant is ok. */
-! if (GET_CODE (op) == CONST_INT)
- return 1;
-
-diff -rcp2N gcc-2.7.2.2/config/sparc/sol2.h g77-new/config/sparc/sol2.h
-*** gcc-2.7.2.2/config/sparc/sol2.h Sat Aug 19 17:36:45 1995
---- g77-new/config/sparc/sol2.h Sun Aug 10 18:45:53 1997
-*************** do { \
-*** 166,168 ****
- /* Define for support of TFmode long double and REAL_ARITHMETIC.
- Sparc ABI says that long double is 4 words. */
-! #define LONG_DOUBLE_TYPE_SIZE 128
---- 166,168 ----
- /* Define for support of TFmode long double and REAL_ARITHMETIC.
- Sparc ABI says that long double is 4 words. */
-! #define LONG_DOUBLE_TYPE_SIZE 64
-diff -rcp2N gcc-2.7.2.2/config/sparc/sparc.c g77-new/config/sparc/sparc.c
-*** gcc-2.7.2.2/config/sparc/sparc.c Tue Sep 12 18:32:24 1995
---- g77-new/config/sparc/sparc.c Sun Aug 10 18:46:03 1997
-*************** Boston, MA 02111-1307, USA. */
-*** 40,46 ****
- /* 1 if the caller has placed an "unimp" insn immediately after the call.
- This is used in v8 code when calling a function that returns a structure.
-! v9 doesn't have this. */
-
-! #define SKIP_CALLERS_UNIMP_P (!TARGET_V9 && current_function_returns_struct)
-
- /* Global variables for machine-dependent things. */
---- 40,51 ----
- /* 1 if the caller has placed an "unimp" insn immediately after the call.
- This is used in v8 code when calling a function that returns a structure.
-! v9 doesn't have this. Be careful to have this test be the same as that
-! used on the call. */
-
-! #define SKIP_CALLERS_UNIMP_P \
-! (!TARGET_V9 && current_function_returns_struct \
-! && ! integer_zerop (DECL_SIZE (DECL_RESULT (current_function_decl))) \
-! && (TREE_CODE (DECL_SIZE (DECL_RESULT (current_function_decl))) \
-! == INTEGER_CST))
-
- /* Global variables for machine-dependent things. */
-diff -rcp2N gcc-2.7.2.2/config/sparc/sparc.h g77-new/config/sparc/sparc.h
-*** gcc-2.7.2.2/config/sparc/sparc.h Thu Feb 20 19:24:15 1997
---- g77-new/config/sparc/sparc.h Sun Aug 10 18:46:13 1997
-*************** extern int leaf_function;
-*** 1526,1533 ****
-
- /* Output assembler code to FILE to increment profiler label # LABELNO
-! for profiling a function entry. */
-
- #define FUNCTION_PROFILER(FILE, LABELNO) \
- do { \
- fputs ("\tsethi %hi(", (FILE)); \
- ASM_OUTPUT_INTERNAL_LABELREF (FILE, "LP", LABELNO); \
---- 1526,1540 ----
-
- /* Output assembler code to FILE to increment profiler label # LABELNO
-! for profiling a function entry.
-!
-! 32 bit sparc uses %g2 as the STATIC_CHAIN_REGNUM which gets clobbered
-! during profiling so we need to save/restore it around the call to mcount.
-! We're guaranteed that a save has just been done, and we use the space
-! allocated for intreg/fpreg value passing. */
-
- #define FUNCTION_PROFILER(FILE, LABELNO) \
- do { \
-+ if (! TARGET_V9) \
-+ fputs ("\tst %g2,[%fp-4]\n", FILE); \
- fputs ("\tsethi %hi(", (FILE)); \
- ASM_OUTPUT_INTERNAL_LABELREF (FILE, "LP", LABELNO); \
-*************** extern int leaf_function;
-*** 1539,1542 ****
---- 1546,1551 ----
- ASM_OUTPUT_INTERNAL_LABELREF (FILE, "LP", LABELNO); \
- fputs ("),%o0,%o0\n", (FILE)); \
-+ if (! TARGET_V9) \
-+ fputs ("\tld [%fp-4],%g2\n", FILE); \
- } while (0)
-
-diff -rcp2N gcc-2.7.2.2/config/sparc/sparc.md g77-new/config/sparc/sparc.md
-*** gcc-2.7.2.2/config/sparc/sparc.md Tue Sep 12 18:57:35 1995
---- g77-new/config/sparc/sparc.md Sun Aug 10 18:46:27 1997
-***************
-*** 4799,4803 ****
- abort ();
-
-! if (GET_CODE (XEXP (operands[0], 0)) == LABEL_REF)
- {
- /* This is really a PIC sequence. We want to represent
---- 4799,4803 ----
- abort ();
-
-! if (GET_CODE (XEXP (operands[0], 0)) == LABEL_REF)
- {
- /* This is really a PIC sequence. We want to represent
-***************
-*** 4809,4824 ****
-
- if (! TARGET_V9 && INTVAL (operands[3]) != 0)
-! emit_jump_insn (gen_rtx (PARALLEL, VOIDmode, gen_rtvec (3,
-! gen_rtx (SET, VOIDmode, pc_rtx,
-! XEXP (operands[0], 0)),
-! operands[3],
-! gen_rtx (CLOBBER, VOIDmode,
-! gen_rtx (REG, Pmode, 15)))));
- else
-! emit_jump_insn (gen_rtx (PARALLEL, VOIDmode, gen_rtvec (2,
-! gen_rtx (SET, VOIDmode, pc_rtx,
-! XEXP (operands[0], 0)),
-! gen_rtx (CLOBBER, VOIDmode,
-! gen_rtx (REG, Pmode, 15)))));
- goto finish_call;
- }
---- 4809,4828 ----
-
- if (! TARGET_V9 && INTVAL (operands[3]) != 0)
-! emit_jump_insn
-! (gen_rtx (PARALLEL, VOIDmode,
-! gen_rtvec (3,
-! gen_rtx (SET, VOIDmode, pc_rtx,
-! XEXP (operands[0], 0)),
-! GEN_INT (INTVAL (operands[3]) & 0xfff),
-! gen_rtx (CLOBBER, VOIDmode,
-! gen_rtx (REG, Pmode, 15)))));
- else
-! emit_jump_insn
-! (gen_rtx (PARALLEL, VOIDmode,
-! gen_rtvec (2,
-! gen_rtx (SET, VOIDmode, pc_rtx,
-! XEXP (operands[0], 0)),
-! gen_rtx (CLOBBER, VOIDmode,
-! gen_rtx (REG, Pmode, 15)))));
- goto finish_call;
- }
-***************
-*** 4839,4852 ****
-
- if (! TARGET_V9 && INTVAL (operands[3]) != 0)
-! emit_call_insn (gen_rtx (PARALLEL, VOIDmode, gen_rtvec (3,
-! gen_rtx (CALL, VOIDmode, fn_rtx, nregs_rtx),
-! operands[3],
-! gen_rtx (CLOBBER, VOIDmode,
-! gen_rtx (REG, Pmode, 15)))));
- else
-! emit_call_insn (gen_rtx (PARALLEL, VOIDmode, gen_rtvec (2,
-! gen_rtx (CALL, VOIDmode, fn_rtx, nregs_rtx),
-! gen_rtx (CLOBBER, VOIDmode,
-! gen_rtx (REG, Pmode, 15)))));
-
- finish_call:
---- 4843,4858 ----
-
- if (! TARGET_V9 && INTVAL (operands[3]) != 0)
-! emit_call_insn
-! (gen_rtx (PARALLEL, VOIDmode,
-! gen_rtvec (3, gen_rtx (CALL, VOIDmode, fn_rtx, nregs_rtx),
-! GEN_INT (INTVAL (operands[3]) & 0xfff),
-! gen_rtx (CLOBBER, VOIDmode,
-! gen_rtx (REG, Pmode, 15)))));
- else
-! emit_call_insn
-! (gen_rtx (PARALLEL, VOIDmode,
-! gen_rtvec (2, gen_rtx (CALL, VOIDmode, fn_rtx, nregs_rtx),
-! gen_rtx (CLOBBER, VOIDmode,
-! gen_rtx (REG, Pmode, 15)))));
-
- finish_call:
-***************
-*** 4911,4915 ****
- (clobber (reg:SI 15))]
- ;;- Do not use operand 1 for most machines.
-! "! TARGET_V9 && GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) > 0"
- "call %a0,%1\;nop\;unimp %2"
- [(set_attr "type" "call_no_delay_slot")])
---- 4917,4921 ----
- (clobber (reg:SI 15))]
- ;;- Do not use operand 1 for most machines.
-! "! TARGET_V9 && GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) >= 0"
- "call %a0,%1\;nop\;unimp %2"
- [(set_attr "type" "call_no_delay_slot")])
-***************
-*** 4923,4927 ****
- (clobber (reg:SI 15))]
- ;;- Do not use operand 1 for most machines.
-! "! TARGET_V9 && GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) > 0"
- "call %a0,%1\;nop\;unimp %2"
- [(set_attr "type" "call_no_delay_slot")])
---- 4929,4933 ----
- (clobber (reg:SI 15))]
- ;;- Do not use operand 1 for most machines.
-! "! TARGET_V9 && GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) >= 0"
- "call %a0,%1\;nop\;unimp %2"
- [(set_attr "type" "call_no_delay_slot")])
-***************
-*** 5178,5184 ****
- emit_insn (gen_rtx (USE, VOIDmode, stack_pointer_rtx));
- emit_insn (gen_rtx (USE, VOIDmode, static_chain_rtx));
-- emit_insn (gen_rtx (USE, VOIDmode, gen_rtx (REG, Pmode, 8)));
- /* Return, restoring reg window and jumping to goto handler. */
- emit_insn (gen_goto_handler_and_restore ());
- DONE;
- }")
---- 5184,5190 ----
- emit_insn (gen_rtx (USE, VOIDmode, stack_pointer_rtx));
- emit_insn (gen_rtx (USE, VOIDmode, static_chain_rtx));
- /* Return, restoring reg window and jumping to goto handler. */
- emit_insn (gen_goto_handler_and_restore ());
-+ emit_barrier ();
- DONE;
- }")
-***************
-*** 5192,5200 ****
-
- (define_insn "goto_handler_and_restore"
-! [(unspec_volatile [(const_int 0)] 2)]
- ""
- "jmp %%o0+0\;restore"
- [(set_attr "type" "misc")
- (set_attr "length" "2")])
-
- ;; Special pattern for the FLUSH instruction.
---- 5198,5237 ----
-
- (define_insn "goto_handler_and_restore"
-! [(unspec_volatile [(const_int 0)] 2)
-! (use (reg:SI 8))]
- ""
- "jmp %%o0+0\;restore"
- [(set_attr "type" "misc")
- (set_attr "length" "2")])
-+
-+ ;; Pattern for use after a setjmp to store FP and the return register
-+ ;; into the stack area.
-+
-+ (define_expand "setjmp"
-+ [(const_int 0)]
-+ ""
-+ "
-+ {
-+ if (TARGET_V9)
-+ emit_insn (gen_setjmp_64 ());
-+ else
-+ emit_insn (gen_setjmp_32 ());
-+
-+ DONE;
-+ }")
-+
-+ (define_expand "setjmp_32"
-+ [(set (mem:SI (plus:SI (reg:SI 14) (const_int 56))) (match_dup 0))
-+ (set (mem:SI (plus:SI (reg:SI 14) (const_int 60))) (reg:SI 31))]
-+ ""
-+ "
-+ { operands[0] = frame_pointer_rtx; }")
-+
-+ (define_expand "setjmp_64"
-+ [(set (mem:DI (plus:DI (reg:DI 14) (const_int 112))) (match_dup 0))
-+ (set (mem:DI (plus:DI (reg:DI 14) (const_int 120))) (reg:DI 31))]
-+ ""
-+ "
-+ { operands[0] = frame_pointer_rtx; }")
-
- ;; Special pattern for the FLUSH instruction.
-diff -rcp2N gcc-2.7.2.2/config/x-linux g77-new/config/x-linux
-*** gcc-2.7.2.2/config/x-linux Tue Mar 28 07:43:37 1995
---- g77-new/config/x-linux Thu Jul 10 20:08:49 1997
-*************** BOOT_CFLAGS = -O $(CFLAGS) -Iinclude
-*** 13,14 ****
---- 13,17 ----
- # Don't run fixproto
- STMP_FIXPROTO =
-+
-+ # Don't install "assert.h" in gcc. We use the one in glibc.
-+ INSTALL_ASSERT_H =
-diff -rcp2N gcc-2.7.2.2/config/x-linux-aout g77-new/config/x-linux-aout
-*** gcc-2.7.2.2/config/x-linux-aout Wed Dec 31 19:00:00 1969
---- g77-new/config/x-linux-aout Thu Jul 10 20:08:49 1997
-***************
-*** 0 ****
---- 1,14 ----
-+ # It is defined in config/xm-linux.h.
-+ # X_CFLAGS = -DPOSIX
-+
-+ # The following is needed when compiling stages 2 and 3 because gcc's
-+ # limits.h must be picked up before /usr/include/limits.h. This is because
-+ # each does an #include_next of the other if the other hasn't been included.
-+ # /usr/include/limits.h loses if it gets found first because /usr/include is
-+ # at the end of the search order. When a new version of gcc is released,
-+ # gcc's limits.h hasn't been installed yet and hence isn't found.
-+
-+ BOOT_CFLAGS = -O $(CFLAGS) -Iinclude
-+
-+ # Don't run fixproto
-+ STMP_FIXPROTO =
-diff -rcp2N gcc-2.7.2.2/config.guess g77-new/config.guess
-*** gcc-2.7.2.2/config.guess Thu Feb 20 19:24:32 1997
---- g77-new/config.guess Thu Jul 10 20:08:50 1997
-*************** trap 'rm -f dummy.c dummy.o dummy; exit
-*** 52,63 ****
-
- case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
-- alpha:OSF1:V*:*)
-- # After 1.2, OSF1 uses "V1.3" for uname -r.
-- echo alpha-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^V//'`
-- exit 0 ;;
- alpha:OSF1:*:*)
- # 1.2 uses "1.2" for uname -r.
-! echo alpha-dec-osf${UNAME_RELEASE}
-! exit 0 ;;
- 21064:Windows_NT:50:3)
- echo alpha-dec-winnt3.5
---- 52,62 ----
-
- case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
- alpha:OSF1:*:*)
-+ # A Vn.n version is a released version.
-+ # A Tn.n version is a released field test version.
-+ # A Xn.n version is an unreleased experimental baselevel.
- # 1.2 uses "1.2" for uname -r.
-! echo alpha-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//'`
-! exit 0 ;;
- 21064:Windows_NT:50:3)
- echo alpha-dec-winnt3.5
-*************** case "${UNAME_MACHINE}:${UNAME_SYSTEM}:$
-*** 154,161 ****
- echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
- exit 0 ;;
-! ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
- echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id
- exit 0 ;; # Note that: echo "'`uname -s`'" gives 'AIX '
-! i[34]86:AIX:*:*)
- echo i386-ibm-aix
- exit 0 ;;
---- 153,160 ----
- echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
- exit 0 ;;
-! ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
- echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id
- exit 0 ;; # Note that: echo "'`uname -s`'" gives 'AIX '
-! i?86:AIX:*:*)
- echo i386-ibm-aix
- exit 0 ;;
-*************** EOF
-*** 220,224 ****
- 9000/31? ) HP_ARCH=m68000 ;;
- 9000/[34]?? ) HP_ARCH=m68k ;;
-! 9000/7?? | 9000/8?[79] ) HP_ARCH=hppa1.1 ;;
- 9000/8?? ) HP_ARCH=hppa1.0 ;;
- esac
---- 219,223 ----
- 9000/31? ) HP_ARCH=m68000 ;;
- 9000/[34]?? ) HP_ARCH=m68k ;;
-! 9000/7?? | 9000/8?[1679] ) HP_ARCH=hppa1.1 ;;
- 9000/8?? ) HP_ARCH=hppa1.0 ;;
- esac
-*************** EOF
-*** 304,308 ****
- echo m68k-hp-netbsd${UNAME_RELEASE}
- exit 0 ;;
-! i[34]86:BSD/386:*:* | *:BSD/OS:*:*)
- echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
- exit 0 ;;
---- 303,307 ----
- echo m68k-hp-netbsd${UNAME_RELEASE}
- exit 0 ;;
-! i?86:BSD/386:*:* | *:BSD/OS:*:*)
- echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
- exit 0 ;;
-*************** EOF
-*** 314,318 ****
- exit 0 ;;
- *:GNU:*:*)
-! echo `echo ${UNAME_MACHINE}|sed -e 's,/.*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
- exit 0 ;;
- *:Linux:*:*)
---- 313,317 ----
- exit 0 ;;
- *:GNU:*:*)
-! echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
- exit 0 ;;
- *:Linux:*:*)
-*************** EOF
-*** 320,330 ****
- # first see if it will tell us.
- ld_help_string=`ld --help 2>&1`
-! # if echo $ld_help_string | grep >/dev/null 2>&1 "supported emulations: elf_i[345]86"; then
- # echo "${UNAME_MACHINE}-unknown-linux" ; exit 0
-! if echo $ld_help_string | grep >/dev/null 2>&1 "supported emulations: i[345]86linux"; then
- echo "${UNAME_MACHINE}-unknown-linuxaout" ; exit 0
-! elif echo $ld_help_string | grep >/dev/null 2>&1 "supported emulations: i[345]86coff"; then
- echo "${UNAME_MACHINE}-unknown-linuxcoff" ; exit 0
- elif test "${UNAME_MACHINE}" = "alpha" ; then
- echo alpha-unknown-linux ; exit 0
- else
---- 319,333 ----
- # first see if it will tell us.
- ld_help_string=`ld --help 2>&1`
-! # if echo $ld_help_string | grep >/dev/null 2>&1 "supported emulations: elf_i?86"; then
- # echo "${UNAME_MACHINE}-unknown-linux" ; exit 0
-! if echo $ld_help_string | grep >/dev/null 2>&1 "supported emulations: i?86linux"; then
- echo "${UNAME_MACHINE}-unknown-linuxaout" ; exit 0
-! elif echo $ld_help_string | grep >/dev/null 2>&1 "supported emulations: i?86coff"; then
- echo "${UNAME_MACHINE}-unknown-linuxcoff" ; exit 0
- elif test "${UNAME_MACHINE}" = "alpha" ; then
-+ as_version_string=`as --version 2>&1`
-+ if echo $as_version_string | grep >/dev/null 2>&1 " version 2.6 "; then
-+ echo alpha-unknown-linuxoldas ; exit 0
-+ fi
- echo alpha-unknown-linux ; exit 0
- else
-*************** EOF
-*** 363,370 ****
- # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. earlier versions
- # are messed up and put the nodename in both sysname and nodename.
-! i[34]86:DYNIX/ptx:4*:*)
- echo i386-sequent-sysv4
- exit 0 ;;
-! i[34]86:*:4.*:* | i[34]86:SYSTEM_V:4.*:*)
- if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
- echo ${UNAME_MACHINE}-univel-sysv${UNAME_RELEASE}
---- 366,373 ----
- # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. earlier versions
- # are messed up and put the nodename in both sysname and nodename.
-! i?86:DYNIX/ptx:4*:*)
- echo i386-sequent-sysv4
- exit 0 ;;
-! i?86:*:4.*:* | i?86:SYSTEM_V:4.*:*)
- if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
- echo ${UNAME_MACHINE}-univel-sysv${UNAME_RELEASE}
-*************** EOF
-*** 373,377 ****
- fi
- exit 0 ;;
-! i[34]86:*:3.2:*)
- if test -f /usr/options/cb.name; then
- UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
---- 376,380 ----
- fi
- exit 0 ;;
-! i?86:*:3.2:*)
- if test -f /usr/options/cb.name; then
- UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
-*************** EOF
-*** 380,383 ****
---- 383,388 ----
- UNAME_REL=`(/bin/uname -X|egrep Release|sed -e 's/.*= //')`
- (/bin/uname -X|egrep i80486 >/dev/null) && UNAME_MACHINE=i486
-+ (/bin/uname -X|egrep '^Machine.*Pentium' >/dev/null) \
-+ && UNAME_MACHINE=i586
- echo ${UNAME_MACHINE}-unknown-sco$UNAME_REL
- else
-*************** EOF
-*** 402,406 ****
- echo m68010-convergent-sysv
- exit 0 ;;
-! M680[234]0:*:R3V[567]*:*)
- test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;;
- 3[34]??:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0)
---- 407,411 ----
- echo m68010-convergent-sysv
- exit 0 ;;
-! M68*:*:R3V[567]*:*)
- test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;;
- 3[34]??:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0)
-*************** EOF
-*** 410,414 ****
- uname -p 2>/dev/null | grep 86 >/dev/null \
- && echo i486-ncr-sysv4 && exit 0 ;;
-! m680[234]0:LynxOS:2.[23]*:*)
- echo m68k-lynx-lynxos${UNAME_RELEASE}
- exit 0 ;;
---- 415,419 ----
- uname -p 2>/dev/null | grep 86 >/dev/null \
- && echo i486-ncr-sysv4 && exit 0 ;;
-! m68*:LynxOS:2.*:*)
- echo m68k-lynx-lynxos${UNAME_RELEASE}
- exit 0 ;;
-*************** EOF
-*** 416,426 ****
- echo m68k-atari-sysv4
- exit 0 ;;
-! i[34]86:LynxOS:2.[23]*:*)
- echo i386-lynx-lynxos${UNAME_RELEASE}
- exit 0 ;;
-! TSUNAMI:LynxOS:2.[23]*:*)
- echo sparc-lynx-lynxos${UNAME_RELEASE}
- exit 0 ;;
-! rs6000:LynxOS:2.[23]*:*)
- echo rs6000-lynx-lynxos${UNAME_RELEASE}
- exit 0 ;;
---- 421,431 ----
- echo m68k-atari-sysv4
- exit 0 ;;
-! i?86:LynxOS:2.*:*)
- echo i386-lynx-lynxos${UNAME_RELEASE}
- exit 0 ;;
-! TSUNAMI:LynxOS:2.*:*)
- echo sparc-lynx-lynxos${UNAME_RELEASE}
- exit 0 ;;
-! rs6000:LynxOS:2.*:* | PowerPC:LynxOS:2.*:*)
- echo rs6000-lynx-lynxos${UNAME_RELEASE}
- exit 0 ;;
-*************** main ()
-*** 479,483 ****
- int version;
- version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
-! printf ("%s-next-nextstep%s\n", __ARCHITECTURE__, version==2 ? "2" : "3");
- exit (0);
- #endif
---- 484,488 ----
- int version;
- version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
-! printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
- exit (0);
- #endif
-diff -rcp2N gcc-2.7.2.2/config.sub g77-new/config.sub
-*** gcc-2.7.2.2/config.sub Thu Jun 15 17:01:49 1995
---- g77-new/config.sub Thu Jul 10 20:08:50 1997
-*************** case $basic_machine in
-*** 130,134 ****
- # Recognize the basic CPU types without company name.
- # Some are omitted here because they have special meanings below.
-! tahoe | i[345]86 | i860 | m68k | m68000 | m88k | ns32k | arm \
- | arme[lb] | pyramid \
- | tron | a29k | 580 | i960 | h8300 | hppa1.0 | hppa1.1 \
---- 130,134 ----
- # Recognize the basic CPU types without company name.
- # Some are omitted here because they have special meanings below.
-! tahoe | i[3456]86 | i860 | m68k | m68000 | m88k | ns32k | arm \
- | arme[lb] | pyramid \
- | tron | a29k | 580 | i960 | h8300 | hppa1.0 | hppa1.1 \
-*************** case $basic_machine in
-*** 145,149 ****
- ;;
- # Recognize the basic CPU types with company name.
-! vax-* | tahoe-* | i[345]86-* | i860-* | m68k-* | m68000-* | m88k-* \
- | sparc-* | ns32k-* | fx80-* | arm-* | c[123]* \
- | mips-* | pyramid-* | tron-* | a29k-* | romp-* | rs6000-* | power-* \
---- 145,149 ----
- ;;
- # Recognize the basic CPU types with company name.
-! vax-* | tahoe-* | i[3456]86-* | i860-* | m68k-* | m68000-* | m88k-* \
- | sparc-* | ns32k-* | fx80-* | arm-* | c[123]* \
- | mips-* | pyramid-* | tron-* | a29k-* | romp-* | rs6000-* | power-* \
-*************** case $basic_machine in
-*** 309,325 ****
- ;;
- # I'm not sure what "Sysv32" means. Should this be sysv3.2?
-! i[345]86v32)
- basic_machine=`echo $1 | sed -e 's/86.*/86-unknown/'`
- os=-sysv32
- ;;
-! i[345]86v4*)
- basic_machine=`echo $1 | sed -e 's/86.*/86-unknown/'`
- os=-sysv4
- ;;
-! i[345]86v)
- basic_machine=`echo $1 | sed -e 's/86.*/86-unknown/'`
- os=-sysv
- ;;
-! i[345]86sol2)
- basic_machine=`echo $1 | sed -e 's/86.*/86-unknown/'`
- os=-solaris2
---- 309,325 ----
- ;;
- # I'm not sure what "Sysv32" means. Should this be sysv3.2?
-! i[3456]86v32)
- basic_machine=`echo $1 | sed -e 's/86.*/86-unknown/'`
- os=-sysv32
- ;;
-! i[3456]86v4*)
- basic_machine=`echo $1 | sed -e 's/86.*/86-unknown/'`
- os=-sysv4
- ;;
-! i[3456]86v)
- basic_machine=`echo $1 | sed -e 's/86.*/86-unknown/'`
- os=-sysv
- ;;
-! i[3456]86sol2)
- basic_machine=`echo $1 | sed -e 's/86.*/86-unknown/'`
- os=-solaris2
-diff -rcp2N gcc-2.7.2.2/configure g77-new/configure
-*** gcc-2.7.2.2/configure Thu Feb 20 19:24:33 1997
---- g77-new/configure Sun Aug 10 18:46:31 1997
-*************** exec_prefix='$(prefix)'
-*** 82,85 ****
---- 82,86 ----
- # The default g++ include directory is $(libdir)/g++-include.
- gxx_include_dir='$(libdir)/g++-include'
-+ #gxx_include_dir='$(exec_prefix)/include/g++'
-
- # Default --program-transform-name to nothing.
-*************** for machine in $canon_build $canon_host
-*** 548,551 ****
---- 549,578 ----
- use_collect2=yes
- ;;
-+ alpha-*-linux*oldas*)
-+ tm_file=alpha/linux.h
-+ tmake_file=alpha/t-linux
-+ xmake_file=alpha/x-linux
-+ fixincludes=Makefile.in
-+ xm_file=alpha/xm-linux.h
-+ gas=yes gnu_ld=yes
-+ ;;
-+ alpha-*-linux*ecoff*)
-+ tm_file=alpha/linux.h
-+ tmake_file=alpha/t-linux
-+ xmake_file=alpha/x-linux
-+ fixincludes=Makefile.in
-+ xm_file=alpha/xm-linux.h
-+ extra_parts="crtbegin.o crtbeginS.o crtend.o crtendS.o"
-+ gas=yes gnu_ld=yes
-+ ;;
-+ alpha-*-linux*)
-+ tm_file=alpha/elf.h
-+ tmake_file=alpha/t-linux
-+ xmake_file=alpha/x-linux
-+ fixincludes=Makefile.in
-+ xm_file=alpha/xm-linux.h
-+ extra_parts="crtbegin.o crtbeginS.o crtend.o crtendS.o"
-+ gas=yes gnu_ld=yes
-+ ;;
- alpha-dec-osf[23456789]*)
- tm_file=alpha/osf2.h
-*************** for machine in $canon_build $canon_host
-*** 985,989 ****
- cpu_type=i386 # with a.out format using pre BFD linkers
- xm_file=i386/xm-linux.h
-! xmake_file=x-linux
- tm_file=i386/linux-oldld.h
- fixincludes=Makefile.in # The headers are ok already.
---- 1012,1016 ----
- cpu_type=i386 # with a.out format using pre BFD linkers
- xm_file=i386/xm-linux.h
-! xmake_file=x-linux-aout
- tm_file=i386/linux-oldld.h
- fixincludes=Makefile.in # The headers are ok already.
-*************** for machine in $canon_build $canon_host
-*** 994,998 ****
- cpu_type=i386 # with a.out format
- xm_file=i386/xm-linux.h
-! xmake_file=x-linux
- tm_file=i386/linux-aout.h
- fixincludes=Makefile.in # The headers are ok already.
---- 1021,1025 ----
- cpu_type=i386 # with a.out format
- xm_file=i386/xm-linux.h
-! xmake_file=x-linux-aout
- tm_file=i386/linux-aout.h
- fixincludes=Makefile.in # The headers are ok already.
-*************** for machine in $canon_build $canon_host
-*** 1003,1007 ****
- cpu_type=i386 # with ELF format, using GNU libc v1.
- xm_file=i386/xm-linux.h
-! xmake_file=x-linux
- tmake_file=t-linux-libc1
- tm_file=i386/linux.h
---- 1030,1034 ----
- cpu_type=i386 # with ELF format, using GNU libc v1.
- xm_file=i386/xm-linux.h
-! xmake_file=x-linux-aout
- tmake_file=t-linux-libc1
- tm_file=i386/linux.h
-*************** for machine in $canon_build $canon_host
-*** 1651,1654 ****
---- 1678,1702 ----
- use_collect2=yes
- ;;
-+ mips-sni-sysv4)
-+ if [ x$gas = xyes ]
-+ then
-+ if [ x$stabs = xyes ]
-+ then
-+ tm_file=mips/iris5gdb.h
-+ else
-+ tm_file=mips/sni-gas.h
-+ fi
-+ else
-+ tm_file=mips/sni-svr4.h
-+ fi
-+ xm_file=mips/xm-sysv.h
-+ xmake_file=mips/x-sni-svr4
-+ tmake_file=mips/t-mips-gas
-+ if [ x$gnu_ld != xyes ]
-+ then
-+ use_collect2=yes
-+ fi
-+ broken_install=yes
-+ ;;
- mips-sgi-irix5*) # SGI System V.4., IRIX 5
- if [ x$gas = xyes ]
-*************** MAYBE_TARGET_DEFAULT = -DTARGET_CPU_DEFA
-*** 2980,2984 ****
- rm Makefile.sed
- echo 's| ||' > Makefile.sed
-! echo "s|^target=.*$|target=${target}|" >> Makefile.sed
- echo "s|^xmake_file=.*$|xmake_file=${dep_host_xmake_file}|" >> Makefile.sed
- echo "s|^tmake_file=.*$|tmake_file=${dep_tmake_file}|" >> Makefile.sed
---- 3028,3032 ----
- rm Makefile.sed
- echo 's| ||' > Makefile.sed
-! echo "s|^target=.*$|target=${canon_target}|" >> Makefile.sed
- echo "s|^xmake_file=.*$|xmake_file=${dep_host_xmake_file}|" >> Makefile.sed
- echo "s|^tmake_file=.*$|tmake_file=${dep_tmake_file}|" >> Makefile.sed
-diff -rcp2N gcc-2.7.2.2/cse.c g77-new/cse.c
-*** gcc-2.7.2.2/cse.c Sun Nov 26 14:47:05 1995
---- g77-new/cse.c Sun Aug 10 18:46:37 1997
-*************** static struct table_elt *last_jump_equiv
-*** 520,544 ****
- static int constant_pool_entries_cost;
-
-- /* Bits describing what kind of values in memory must be invalidated
-- for a particular instruction. If all three bits are zero,
-- no memory refs need to be invalidated. Each bit is more powerful
-- than the preceding ones, and if a bit is set then the preceding
-- bits are also set.
--
-- Here is how the bits are set:
-- Pushing onto the stack invalidates only the stack pointer,
-- writing at a fixed address invalidates only variable addresses,
-- writing in a structure element at variable address
-- invalidates all but scalar variables,
-- and writing in anything else at variable address invalidates everything. */
--
-- struct write_data
-- {
-- int sp : 1; /* Invalidate stack pointer. */
-- int var : 1; /* Invalidate variable addresses. */
-- int nonscalar : 1; /* Invalidate all but scalar variables. */
-- int all : 1; /* Invalidate all memory refs. */
-- };
--
- /* Define maximum length of a branch path. */
-
---- 520,523 ----
-*************** static void merge_equiv_classes PROTO((s
-*** 626,632 ****
- struct table_elt *));
- static void invalidate PROTO((rtx, enum machine_mode));
- static void remove_invalid_refs PROTO((int));
- static void rehash_using_reg PROTO((rtx));
-! static void invalidate_memory PROTO((struct write_data *));
- static void invalidate_for_call PROTO((void));
- static rtx use_related_value PROTO((rtx, struct table_elt *));
---- 605,612 ----
- struct table_elt *));
- static void invalidate PROTO((rtx, enum machine_mode));
-+ static int cse_rtx_varies_p PROTO((rtx));
- static void remove_invalid_refs PROTO((int));
- static void rehash_using_reg PROTO((rtx));
-! static void invalidate_memory PROTO((void));
- static void invalidate_for_call PROTO((void));
- static rtx use_related_value PROTO((rtx, struct table_elt *));
-*************** static void set_nonvarying_address_compo
-*** 638,644 ****
- HOST_WIDE_INT *));
- static int refers_to_p PROTO((rtx, rtx));
-- static int refers_to_mem_p PROTO((rtx, rtx, HOST_WIDE_INT,
-- HOST_WIDE_INT));
-- static int cse_rtx_addr_varies_p PROTO((rtx));
- static rtx canon_reg PROTO((rtx, rtx));
- static void find_best_addr PROTO((rtx, rtx *));
---- 618,621 ----
-*************** static void record_jump_cond PROTO((enum
-*** 656,661 ****
- rtx, rtx, int));
- static void cse_insn PROTO((rtx, int));
-! static void note_mem_written PROTO((rtx, struct write_data *));
-! static void invalidate_from_clobbers PROTO((struct write_data *, rtx));
- static rtx cse_process_notes PROTO((rtx, rtx));
- static void cse_around_loop PROTO((rtx));
---- 633,638 ----
- rtx, rtx, int));
- static void cse_insn PROTO((rtx, int));
-! static int note_mem_written PROTO((rtx));
-! static void invalidate_from_clobbers PROTO((rtx));
- static rtx cse_process_notes PROTO((rtx, rtx));
- static void cse_around_loop PROTO((rtx));
-*************** invalidate (x, full_mode)
-*** 1512,1517 ****
- register int i;
- register struct table_elt *p;
-- rtx base;
-- HOST_WIDE_INT start, end;
-
- /* If X is a register, dependencies on its contents
---- 1489,1492 ----
-*************** invalidate (x, full_mode)
-*** 1605,1611 ****
- full_mode = GET_MODE (x);
-
-- set_nonvarying_address_components (XEXP (x, 0), GET_MODE_SIZE (full_mode),
-- &base, &start, &end);
--
- for (i = 0; i < NBUCKETS; i++)
- {
---- 1580,1583 ----
-*************** invalidate (x, full_mode)
-*** 1614,1618 ****
- {
- next = p->next_same_hash;
-! if (refers_to_mem_p (p->exp, base, start, end))
- remove_from_table (p, i);
- }
---- 1586,1594 ----
- {
- next = p->next_same_hash;
-! /* Invalidate ASM_OPERANDS which reference memory (this is easier
-! than checking all the aliases). */
-! if (p->in_memory
-! && (GET_CODE (p->exp) != MEM
-! || true_dependence (x, full_mode, p->exp, cse_rtx_varies_p)))
- remove_from_table (p, i);
- }
-*************** rehash_using_reg (x)
-*** 1695,1722 ****
- }
-
-- /* Remove from the hash table all expressions that reference memory,
-- or some of them as specified by *WRITES. */
--
-- static void
-- invalidate_memory (writes)
-- struct write_data *writes;
-- {
-- register int i;
-- register struct table_elt *p, *next;
-- int all = writes->all;
-- int nonscalar = writes->nonscalar;
--
-- for (i = 0; i < NBUCKETS; i++)
-- for (p = table[i]; p; p = next)
-- {
-- next = p->next_same_hash;
-- if (p->in_memory
-- && (all
-- || (nonscalar && p->in_struct)
-- || cse_rtx_addr_varies_p (p->exp)))
-- remove_from_table (p, i);
-- }
-- }
--
- /* Remove from the hash table any expression that is a call-clobbered
- register. Also update their TICK values. */
---- 1671,1674 ----
-*************** invalidate_for_call ()
-*** 1756,1759 ****
---- 1708,1717 ----
- next = p->next_same_hash;
-
-+ if (p->in_memory)
-+ {
-+ remove_from_table (p, hash);
-+ continue;
-+ }
-+
- if (GET_CODE (p->exp) != REG
- || REGNO (p->exp) >= FIRST_PSEUDO_REGISTER)
-*************** canon_hash (x, mode)
-*** 1946,1950 ****
- return 0;
- }
-! if (! RTX_UNCHANGING_P (x))
- {
- hash_arg_in_memory = 1;
---- 1904,1908 ----
- return 0;
- }
-! if (! RTX_UNCHANGING_P (x) || FIXED_BASE_PLUS_P (XEXP (x, 0)))
- {
- hash_arg_in_memory = 1;
-*************** set_nonvarying_address_components (addr,
-*** 2395,2477 ****
- }
-
-! /* Return 1 iff any subexpression of X refers to memory
-! at an address of BASE plus some offset
-! such that any of the bytes' offsets fall between START (inclusive)
-! and END (exclusive).
-!
-! The value is undefined if X is a varying address (as determined by
-! cse_rtx_addr_varies_p). This function is not used in such cases.
-!
-! When used in the cse pass, `qty_const' is nonzero, and it is used
-! to treat an address that is a register with a known constant value
-! as if it were that constant value.
-! In the loop pass, `qty_const' is zero, so this is not done. */
-!
-! static int
-! refers_to_mem_p (x, base, start, end)
-! rtx x, base;
-! HOST_WIDE_INT start, end;
-! {
-! register HOST_WIDE_INT i;
-! register enum rtx_code code;
-! register char *fmt;
-!
-! repeat:
-! if (x == 0)
-! return 0;
-!
-! code = GET_CODE (x);
-! if (code == MEM)
-! {
-! register rtx addr = XEXP (x, 0); /* Get the address. */
-! rtx mybase;
-! HOST_WIDE_INT mystart, myend;
-!
-! set_nonvarying_address_components (addr, GET_MODE_SIZE (GET_MODE (x)),
-! &mybase, &mystart, &myend);
-!
-!
-! /* refers_to_mem_p is never called with varying addresses.
-! If the base addresses are not equal, there is no chance
-! of the memory addresses conflicting. */
-! if (! rtx_equal_p (mybase, base))
-! return 0;
-!
-! return myend > start && mystart < end;
-! }
-!
-! /* X does not match, so try its subexpressions. */
-!
-! fmt = GET_RTX_FORMAT (code);
-! for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
-! if (fmt[i] == 'e')
-! {
-! if (i == 0)
-! {
-! x = XEXP (x, 0);
-! goto repeat;
-! }
-! else
-! if (refers_to_mem_p (XEXP (x, i), base, start, end))
-! return 1;
-! }
-! else if (fmt[i] == 'E')
-! {
-! int j;
-! for (j = 0; j < XVECLEN (x, i); j++)
-! if (refers_to_mem_p (XVECEXP (x, i, j), base, start, end))
-! return 1;
-! }
-!
-! return 0;
-! }
-!
-! /* Nonzero if X refers to memory at a varying address;
- except that a register which has at the moment a known constant value
- isn't considered variable. */
-
- static int
-! cse_rtx_addr_varies_p (x)
-! rtx x;
- {
- /* We need not check for X and the equivalence class being of the same
---- 2353,2363 ----
- }
-
-! /* Nonzero if X, a memory address, refers to a varying address;
- except that a register which has at the moment a known constant value
- isn't considered variable. */
-
- static int
-! cse_rtx_varies_p (x)
-! register rtx x;
- {
- /* We need not check for X and the equivalence class being of the same
-*************** cse_rtx_addr_varies_p (x)
-*** 2479,2497 ****
- doesn't vary in any mode. */
-
-! if (GET_CODE (x) == MEM
-! && GET_CODE (XEXP (x, 0)) == REG
-! && REGNO_QTY_VALID_P (REGNO (XEXP (x, 0)))
-! && GET_MODE (XEXP (x, 0)) == qty_mode[reg_qty[REGNO (XEXP (x, 0))]]
-! && qty_const[reg_qty[REGNO (XEXP (x, 0))]] != 0)
- return 0;
-
-! if (GET_CODE (x) == MEM
-! && GET_CODE (XEXP (x, 0)) == PLUS
-! && GET_CODE (XEXP (XEXP (x, 0), 1)) == CONST_INT
-! && GET_CODE (XEXP (XEXP (x, 0), 0)) == REG
-! && REGNO_QTY_VALID_P (REGNO (XEXP (XEXP (x, 0), 0)))
-! && (GET_MODE (XEXP (XEXP (x, 0), 0))
-! == qty_mode[reg_qty[REGNO (XEXP (XEXP (x, 0), 0))]])
-! && qty_const[reg_qty[REGNO (XEXP (XEXP (x, 0), 0))]])
- return 0;
-
---- 2365,2381 ----
- doesn't vary in any mode. */
-
-! if (GET_CODE (x) == REG
-! && REGNO_QTY_VALID_P (REGNO (x))
-! && GET_MODE (x) == qty_mode[reg_qty[REGNO (x)]]
-! && qty_const[reg_qty[REGNO (x)]] != 0)
- return 0;
-
-! if (GET_CODE (x) == PLUS
-! && GET_CODE (XEXP (x, 1)) == CONST_INT
-! && GET_CODE (XEXP (x, 0)) == REG
-! && REGNO_QTY_VALID_P (REGNO (XEXP (x, 0)))
-! && (GET_MODE (XEXP (x, 0))
-! == qty_mode[reg_qty[REGNO (XEXP (x, 0))]])
-! && qty_const[reg_qty[REGNO (XEXP (x, 0))]])
- return 0;
-
-*************** cse_rtx_addr_varies_p (x)
-*** 2501,2519 ****
- load fp minus a constant into a register, then a MEM which is the
- sum of the two `constant' registers. */
-! if (GET_CODE (x) == MEM
-! && GET_CODE (XEXP (x, 0)) == PLUS
-! && GET_CODE (XEXP (XEXP (x, 0), 0)) == REG
-! && GET_CODE (XEXP (XEXP (x, 0), 1)) == REG
-! && REGNO_QTY_VALID_P (REGNO (XEXP (XEXP (x, 0), 0)))
-! && (GET_MODE (XEXP (XEXP (x, 0), 0))
-! == qty_mode[reg_qty[REGNO (XEXP (XEXP (x, 0), 0))]])
-! && qty_const[reg_qty[REGNO (XEXP (XEXP (x, 0), 0))]]
-! && REGNO_QTY_VALID_P (REGNO (XEXP (XEXP (x, 0), 1)))
-! && (GET_MODE (XEXP (XEXP (x, 0), 1))
-! == qty_mode[reg_qty[REGNO (XEXP (XEXP (x, 0), 1))]])
-! && qty_const[reg_qty[REGNO (XEXP (XEXP (x, 0), 1))]])
- return 0;
-
-! return rtx_addr_varies_p (x);
- }
-
---- 2385,2402 ----
- load fp minus a constant into a register, then a MEM which is the
- sum of the two `constant' registers. */
-! if (GET_CODE (x) == PLUS
-! && GET_CODE (XEXP (x, 0)) == REG
-! && GET_CODE (XEXP (x, 1)) == REG
-! && REGNO_QTY_VALID_P (REGNO (XEXP (x, 0)))
-! && (GET_MODE (XEXP (x, 0))
-! == qty_mode[reg_qty[REGNO (XEXP (x, 0))]])
-! && qty_const[reg_qty[REGNO (XEXP (x, 0))]]
-! && REGNO_QTY_VALID_P (REGNO (XEXP (x, 1)))
-! && (GET_MODE (XEXP (x, 1))
-! == qty_mode[reg_qty[REGNO (XEXP (x, 1))]])
-! && qty_const[reg_qty[REGNO (XEXP (x, 1))]])
- return 0;
-
-! return rtx_varies_p (x);
- }
-
-*************** cse_insn (insn, in_libcall_block)
-*** 6105,6110 ****
- rtx this_insn_cc0 = 0;
- enum machine_mode this_insn_cc0_mode;
-- struct write_data writes_memory;
-- static struct write_data init = {0, 0, 0, 0};
-
- rtx src_eqv = 0;
---- 5988,5991 ----
-*************** cse_insn (insn, in_libcall_block)
-*** 6118,6122 ****
-
- this_insn = insn;
-- writes_memory = init;
-
- /* Find all the SETs and CLOBBERs in this instruction.
---- 5999,6002 ----
-*************** cse_insn (insn, in_libcall_block)
-*** 6220,6232 ****
- else if (GET_CODE (y) == CLOBBER)
- {
-! /* If we clobber memory, take note of that,
-! and canon the address.
- This does nothing when a register is clobbered
- because we have already invalidated the reg. */
- if (GET_CODE (XEXP (y, 0)) == MEM)
-! {
-! canon_reg (XEXP (y, 0), NULL_RTX);
-! note_mem_written (XEXP (y, 0), &writes_memory);
-! }
- }
- else if (GET_CODE (y) == USE
---- 6100,6108 ----
- else if (GET_CODE (y) == CLOBBER)
- {
-! /* If we clobber memory, canon the address.
- This does nothing when a register is clobbered
- because we have already invalidated the reg. */
- if (GET_CODE (XEXP (y, 0)) == MEM)
-! canon_reg (XEXP (y, 0), NULL_RTX);
- }
- else if (GET_CODE (y) == USE
-*************** cse_insn (insn, in_libcall_block)
-*** 6247,6254 ****
- {
- if (GET_CODE (XEXP (x, 0)) == MEM)
-! {
-! canon_reg (XEXP (x, 0), NULL_RTX);
-! note_mem_written (XEXP (x, 0), &writes_memory);
-! }
- }
-
---- 6123,6127 ----
- {
- if (GET_CODE (XEXP (x, 0)) == MEM)
-! canon_reg (XEXP (x, 0), NULL_RTX);
- }
-
-*************** cse_insn (insn, in_libcall_block)
-*** 6674,6678 ****
- }
- #endif /* LOAD_EXTEND_OP */
-!
- if (src == src_folded)
- src_folded = 0;
---- 6547,6551 ----
- }
- #endif /* LOAD_EXTEND_OP */
-!
- if (src == src_folded)
- src_folded = 0;
-*************** cse_insn (insn, in_libcall_block)
-*** 6860,6864 ****
- || (GET_CODE (src_folded) != MEM
- && ! src_folded_force_flag))
-! && GET_MODE_CLASS (mode) != MODE_CC)
- {
- src_folded_force_flag = 1;
---- 6733,6738 ----
- || (GET_CODE (src_folded) != MEM
- && ! src_folded_force_flag))
-! && GET_MODE_CLASS (mode) != MODE_CC
-! && mode != VOIDmode)
- {
- src_folded_force_flag = 1;
-*************** cse_insn (insn, in_libcall_block)
-*** 6983,6993 ****
- if (GET_CODE (dest) == MEM)
- {
- dest = fold_rtx (dest, insn);
--
-- /* Decide whether we invalidate everything in memory,
-- or just things at non-fixed places.
-- Writing a large aggregate must invalidate everything
-- because we don't know how long it is. */
-- note_mem_written (dest, &writes_memory);
- }
-
---- 6857,6869 ----
- if (GET_CODE (dest) == MEM)
- {
-+ #ifdef PUSH_ROUNDING
-+ /* Stack pushes invalidate the stack pointer. */
-+ rtx addr = XEXP (dest, 0);
-+ if ((GET_CODE (addr) == PRE_DEC || GET_CODE (addr) == PRE_INC
-+ || GET_CODE (addr) == POST_DEC || GET_CODE (addr) == POST_INC)
-+ && XEXP (addr, 0) == stack_pointer_rtx)
-+ invalidate (stack_pointer_rtx, Pmode);
-+ #endif
- dest = fold_rtx (dest, insn);
- }
-
-*************** cse_insn (insn, in_libcall_block)
-*** 7234,7238 ****
- sets[i].src_elt = src_eqv_elt;
-
-! invalidate_from_clobbers (&writes_memory, x);
-
- /* Some registers are invalidated by subroutine calls. Memory is
---- 7110,7114 ----
- sets[i].src_elt = src_eqv_elt;
-
-! invalidate_from_clobbers (x);
-
- /* Some registers are invalidated by subroutine calls. Memory is
-*************** cse_insn (insn, in_libcall_block)
-*** 7241,7248 ****
- if (GET_CODE (insn) == CALL_INSN)
- {
-- static struct write_data everything = {0, 1, 1, 1};
--
- if (! CONST_CALL_P (insn))
-! invalidate_memory (&everything);
- invalidate_for_call ();
- }
---- 7117,7122 ----
- if (GET_CODE (insn) == CALL_INSN)
- {
- if (! CONST_CALL_P (insn))
-! invalidate_memory ();
- invalidate_for_call ();
- }
-*************** cse_insn (insn, in_libcall_block)
-*** 7265,7270 ****
- we have just done an invalidate_memory that covers even those. */
- if (GET_CODE (dest) == REG || GET_CODE (dest) == SUBREG
-! || (GET_CODE (dest) == MEM && ! writes_memory.all
-! && ! cse_rtx_addr_varies_p (dest)))
- invalidate (dest, VOIDmode);
- else if (GET_CODE (dest) == STRICT_LOW_PART
---- 7139,7143 ----
- we have just done an invalidate_memory that covers even those. */
- if (GET_CODE (dest) == REG || GET_CODE (dest) == SUBREG
-! || GET_CODE (dest) == MEM)
- invalidate (dest, VOIDmode);
- else if (GET_CODE (dest) == STRICT_LOW_PART
-*************** cse_insn (insn, in_libcall_block)
-*** 7359,7363 ****
- sets[i].dest_hash, GET_MODE (dest));
- elt->in_memory = (GET_CODE (sets[i].inner_dest) == MEM
-! && ! RTX_UNCHANGING_P (sets[i].inner_dest));
-
- if (elt->in_memory)
---- 7232,7238 ----
- sets[i].dest_hash, GET_MODE (dest));
- elt->in_memory = (GET_CODE (sets[i].inner_dest) == MEM
-! && (! RTX_UNCHANGING_P (sets[i].inner_dest)
-! || FIXED_BASE_PLUS_P (XEXP (sets[i].inner_dest,
-! 0))));
-
- if (elt->in_memory)
-*************** cse_insn (insn, in_libcall_block)
-*** 7532,7580 ****
- }
-
-- /* Store 1 in *WRITES_PTR for those categories of memory ref
-- that must be invalidated when the expression WRITTEN is stored in.
-- If WRITTEN is null, say everything must be invalidated. */
--
- static void
-! note_mem_written (written, writes_ptr)
-! rtx written;
-! struct write_data *writes_ptr;
-! {
-! static struct write_data everything = {0, 1, 1, 1};
-!
-! if (written == 0)
-! *writes_ptr = everything;
-! else if (GET_CODE (written) == MEM)
-! {
-! /* Pushing or popping the stack invalidates just the stack pointer. */
-! rtx addr = XEXP (written, 0);
-! if ((GET_CODE (addr) == PRE_DEC || GET_CODE (addr) == PRE_INC
-! || GET_CODE (addr) == POST_DEC || GET_CODE (addr) == POST_INC)
-! && GET_CODE (XEXP (addr, 0)) == REG
-! && REGNO (XEXP (addr, 0)) == STACK_POINTER_REGNUM)
-! {
-! writes_ptr->sp = 1;
-! return;
-! }
-! else if (GET_MODE (written) == BLKmode)
-! *writes_ptr = everything;
-! /* (mem (scratch)) means clobber everything. */
-! else if (GET_CODE (addr) == SCRATCH)
-! *writes_ptr = everything;
-! else if (cse_rtx_addr_varies_p (written))
-! {
-! /* A varying address that is a sum indicates an array element,
-! and that's just as good as a structure element
-! in implying that we need not invalidate scalar variables.
-! However, we must allow QImode aliasing of scalars, because the
-! ANSI C standard allows character pointers to alias anything. */
-! if (! ((MEM_IN_STRUCT_P (written)
-! || GET_CODE (XEXP (written, 0)) == PLUS)
-! && GET_MODE (written) != QImode))
-! writes_ptr->all = 1;
-! writes_ptr->nonscalar = 1;
-! }
-! writes_ptr->var = 1;
- }
- }
-
---- 7407,7450 ----
- }
-
- static void
-! invalidate_memory ()
-! {
-! register int i;
-! register struct table_elt *p, *next;
-!
-! for (i = 0; i < NBUCKETS; i++)
-! for (p = table[i]; p; p = next)
-! {
-! next = p->next_same_hash;
-! if (p->in_memory)
-! remove_from_table (p, i);
-! }
-! }
-!
-! static int
-! note_mem_written (mem)
-! register rtx mem;
-! {
-! if (mem == 0 || GET_CODE(mem) != MEM )
-! return 0;
-! else
-! {
-! register rtx addr = XEXP (mem, 0);
-! /* Pushing or popping the stack invalidates just the stack pointer. */
-! if ((GET_CODE (addr) == PRE_DEC || GET_CODE (addr) == PRE_INC
-! || GET_CODE (addr) == POST_DEC || GET_CODE (addr) == POST_INC)
-! && GET_CODE (XEXP (addr, 0)) == REG
-! && REGNO (XEXP (addr, 0)) == STACK_POINTER_REGNUM)
-! {
-! if (reg_tick[STACK_POINTER_REGNUM] >= 0)
-! reg_tick[STACK_POINTER_REGNUM]++;
-!
-! /* This should be *very* rare. */
-! if (TEST_HARD_REG_BIT (hard_regs_in_table, STACK_POINTER_REGNUM))
-! invalidate (stack_pointer_rtx, VOIDmode);
-! return 1;
- }
-+ return 0;
-+ }
- }
-
-*************** note_mem_written (written, writes_ptr)
-*** 7584,7612 ****
- alias with something that is SET or CLOBBERed.
-
-- W points to the writes_memory for this insn, a struct write_data
-- saying which kinds of memory references must be invalidated.
- X is the pattern of the insn. */
-
- static void
-! invalidate_from_clobbers (w, x)
-! struct write_data *w;
- rtx x;
- {
-- /* If W->var is not set, W specifies no action.
-- If W->all is set, this step gets all memory refs
-- so they can be ignored in the rest of this function. */
-- if (w->var)
-- invalidate_memory (w);
--
-- if (w->sp)
-- {
-- if (reg_tick[STACK_POINTER_REGNUM] >= 0)
-- reg_tick[STACK_POINTER_REGNUM]++;
--
-- /* This should be *very* rare. */
-- if (TEST_HARD_REG_BIT (hard_regs_in_table, STACK_POINTER_REGNUM))
-- invalidate (stack_pointer_rtx, VOIDmode);
-- }
--
- if (GET_CODE (x) == CLOBBER)
- {
---- 7454,7463 ----
- alias with something that is SET or CLOBBERed.
-
- X is the pattern of the insn. */
-
- static void
-! invalidate_from_clobbers (x)
- rtx x;
- {
- if (GET_CODE (x) == CLOBBER)
- {
-*************** invalidate_from_clobbers (w, x)
-*** 7615,7619 ****
- {
- if (GET_CODE (ref) == REG || GET_CODE (ref) == SUBREG
-! || (GET_CODE (ref) == MEM && ! w->all))
- invalidate (ref, VOIDmode);
- else if (GET_CODE (ref) == STRICT_LOW_PART
---- 7466,7470 ----
- {
- if (GET_CODE (ref) == REG || GET_CODE (ref) == SUBREG
-! || GET_CODE (ref) == MEM)
- invalidate (ref, VOIDmode);
- else if (GET_CODE (ref) == STRICT_LOW_PART
-*************** invalidate_from_clobbers (w, x)
-*** 7631,7643 ****
- {
- rtx ref = XEXP (y, 0);
-! if (ref)
-! {
-! if (GET_CODE (ref) == REG || GET_CODE (ref) == SUBREG
-! || (GET_CODE (ref) == MEM && !w->all))
-! invalidate (ref, VOIDmode);
-! else if (GET_CODE (ref) == STRICT_LOW_PART
-! || GET_CODE (ref) == ZERO_EXTRACT)
-! invalidate (XEXP (ref, 0), GET_MODE (ref));
-! }
- }
- }
---- 7482,7491 ----
- {
- rtx ref = XEXP (y, 0);
-! if (GET_CODE (ref) == REG || GET_CODE (ref) == SUBREG
-! || GET_CODE (ref) == MEM)
-! invalidate (ref, VOIDmode);
-! else if (GET_CODE (ref) == STRICT_LOW_PART
-! || GET_CODE (ref) == ZERO_EXTRACT)
-! invalidate (XEXP (ref, 0), GET_MODE (ref));
- }
- }
-*************** cse_around_loop (loop_start)
-*** 7800,7807 ****
- }
-
-- /* Variable used for communications between the next two routines. */
--
-- static struct write_data skipped_writes_memory;
--
- /* Process one SET of an insn that was skipped. We ignore CLOBBERs
- since they are done elsewhere. This function is called via note_stores. */
---- 7648,7651 ----
-*************** invalidate_skipped_set (dest, set)
-*** 7812,7815 ****
---- 7656,7675 ----
- rtx dest;
- {
-+ enum rtx_code code = GET_CODE (dest);
-+
-+ if (code == MEM
-+ && ! note_mem_written (dest) /* If this is not a stack push ... */
-+ /* There are times when an address can appear varying and be a PLUS
-+ during this scan when it would be a fixed address were we to know
-+ the proper equivalences. So invalidate all memory if there is
-+ a BLKmode or nonscalar memory reference or a reference to a
-+ variable address. */
-+ && (MEM_IN_STRUCT_P (dest) || GET_MODE (dest) == BLKmode
-+ || cse_rtx_varies_p (XEXP (dest, 0))))
-+ {
-+ invalidate_memory ();
-+ return;
-+ }
-+
- if (GET_CODE (set) == CLOBBER
- #ifdef HAVE_cc0
-*************** invalidate_skipped_set (dest, set)
-*** 7819,7837 ****
- return;
-
-! if (GET_CODE (dest) == MEM)
-! note_mem_written (dest, &skipped_writes_memory);
-!
-! /* There are times when an address can appear varying and be a PLUS
-! during this scan when it would be a fixed address were we to know
-! the proper equivalences. So promote "nonscalar" to be "all". */
-! if (skipped_writes_memory.nonscalar)
-! skipped_writes_memory.all = 1;
-!
-! if (GET_CODE (dest) == REG || GET_CODE (dest) == SUBREG
-! || (! skipped_writes_memory.all && ! cse_rtx_addr_varies_p (dest)))
-! invalidate (dest, VOIDmode);
-! else if (GET_CODE (dest) == STRICT_LOW_PART
-! || GET_CODE (dest) == ZERO_EXTRACT)
- invalidate (XEXP (dest, 0), GET_MODE (dest));
- }
-
---- 7679,7686 ----
- return;
-
-! if (code == STRICT_LOW_PART || code == ZERO_EXTRACT)
- invalidate (XEXP (dest, 0), GET_MODE (dest));
-+ else if (code == REG || code == SUBREG || code == MEM)
-+ invalidate (dest, VOIDmode);
- }
-
-*************** invalidate_skipped_block (start)
-*** 7845,7850 ****
- {
- rtx insn;
-- static struct write_data init = {0, 0, 0, 0};
-- static struct write_data everything = {0, 1, 1, 1};
-
- for (insn = start; insn && GET_CODE (insn) != CODE_LABEL;
---- 7694,7697 ----
-*************** invalidate_skipped_block (start)
-*** 7854,7867 ****
- continue;
-
-- skipped_writes_memory = init;
--
- if (GET_CODE (insn) == CALL_INSN)
- {
- invalidate_for_call ();
-- skipped_writes_memory = everything;
- }
-
- note_stores (PATTERN (insn), invalidate_skipped_set);
-- invalidate_from_clobbers (&skipped_writes_memory, PATTERN (insn));
- }
- }
---- 7701,7712 ----
- continue;
-
- if (GET_CODE (insn) == CALL_INSN)
- {
-+ if (! CONST_CALL_P (insn))
-+ invalidate_memory ();
- invalidate_for_call ();
- }
-
- note_stores (PATTERN (insn), invalidate_skipped_set);
- }
- }
-*************** cse_set_around_loop (x, insn, loop_start
-*** 7913,7920 ****
- {
- struct table_elt *src_elt;
-- static struct write_data init = {0, 0, 0, 0};
-- struct write_data writes_memory;
--
-- writes_memory = init;
-
- /* If this is a SET, see if we can replace SET_SRC, but ignore SETs that
---- 7758,7761 ----
-*************** cse_set_around_loop (x, insn, loop_start
-*** 7976,7991 ****
-
- /* Now invalidate anything modified by X. */
-! note_mem_written (SET_DEST (x), &writes_memory);
-!
-! if (writes_memory.var)
-! invalidate_memory (&writes_memory);
-!
-! /* See comment on similar code in cse_insn for explanation of these tests. */
- if (GET_CODE (SET_DEST (x)) == REG || GET_CODE (SET_DEST (x)) == SUBREG
-! || (GET_CODE (SET_DEST (x)) == MEM && ! writes_memory.all
-! && ! cse_rtx_addr_varies_p (SET_DEST (x))))
- invalidate (SET_DEST (x), VOIDmode);
- else if (GET_CODE (SET_DEST (x)) == STRICT_LOW_PART
-! || GET_CODE (SET_DEST (x)) == ZERO_EXTRACT)
- invalidate (XEXP (SET_DEST (x), 0), GET_MODE (SET_DEST (x)));
- }
---- 7817,7828 ----
-
- /* Now invalidate anything modified by X. */
-! note_mem_written (SET_DEST (x));
-!
-! /* See comment on similar code in cse_insn for explanation of these tests. */
- if (GET_CODE (SET_DEST (x)) == REG || GET_CODE (SET_DEST (x)) == SUBREG
-! || GET_CODE (SET_DEST (x)) == MEM)
- invalidate (SET_DEST (x), VOIDmode);
- else if (GET_CODE (SET_DEST (x)) == STRICT_LOW_PART
-! || GET_CODE (SET_DEST (x)) == ZERO_EXTRACT)
- invalidate (XEXP (SET_DEST (x), 0), GET_MODE (SET_DEST (x)));
- }
-*************** cse_main (f, nregs, after_loop, file)
-*** 8234,8237 ****
---- 8071,8075 ----
-
- init_recog ();
-+ init_alias_analysis ();
-
- max_reg = nregs;
-*************** cse_basic_block (from, to, next_branch,
-*** 8405,8408 ****
---- 8243,8247 ----
- int to_usage = 0;
- int in_libcall_block = 0;
-+ int num_insns = 0;
-
- /* Each of these arrays is undefined before max_reg, so only allocate
-*************** cse_basic_block (from, to, next_branch,
-*** 8437,8440 ****
---- 8276,8299 ----
- {
- register enum rtx_code code;
-+ int i;
-+ struct table_elt *p, *next;
-+
-+ /* If we have processed 1,000 insns, flush the hash table to avoid
-+ extreme quadratic behavior. */
-+ if (num_insns++ > 1000)
-+ {
-+ for (i = 0; i < NBUCKETS; i++)
-+ for (p = table[i]; p; p = next)
-+ {
-+ next = p->next_same_hash;
-+
-+ if (GET_CODE (p->exp) == REG)
-+ invalidate (p->exp, p->mode);
-+ else
-+ remove_from_table (p, i);
-+ }
-+
-+ num_insns = 0;
-+ }
-
- /* See if this is a branch that is part of the path. If so, and it is
-diff -rcp2N gcc-2.7.2.2/dwarfout.c g77-new/dwarfout.c
-*** gcc-2.7.2.2/dwarfout.c Thu Oct 26 21:40:07 1995
---- g77-new/dwarfout.c Sun Aug 10 18:47:19 1997
-*************** output_bound_representation (bound, dim_
-*** 1629,1705 ****
- {
-
-! case ERROR_MARK:
-! return;
-
- /* All fixed-bounds are represented by INTEGER_CST nodes. */
-
-! case INTEGER_CST:
-! ASM_OUTPUT_DWARF_DATA4 (asm_out_file,
-! (unsigned) TREE_INT_CST_LOW (bound));
-! break;
-!
-! /* Dynamic bounds may be represented by NOP_EXPR nodes containing
-! SAVE_EXPR nodes. */
-!
-! case NOP_EXPR:
-! bound = TREE_OPERAND (bound, 0);
-! /* ... fall thru... */
-!
-! case SAVE_EXPR:
-! {
-! char begin_label[MAX_ARTIFICIAL_LABEL_BYTES];
-! char end_label[MAX_ARTIFICIAL_LABEL_BYTES];
-!
-! sprintf (begin_label, BOUND_BEGIN_LABEL_FMT,
-! current_dienum, dim_num, u_or_l);
-
-! sprintf (end_label, BOUND_END_LABEL_FMT,
-! current_dienum, dim_num, u_or_l);
-
-! ASM_OUTPUT_DWARF_DELTA2 (asm_out_file, end_label, begin_label);
-! ASM_OUTPUT_LABEL (asm_out_file, begin_label);
-
-! /* If we are working on a bound for a dynamic dimension in C,
-! the dynamic dimension in question had better have a static
-! (zero) lower bound and a dynamic *upper* bound. */
-
-! if (u_or_l != 'u')
-! abort ();
-
-! /* If optimization is turned on, the SAVE_EXPRs that describe
-! how to access the upper bound values are essentially bogus.
-! They only describe (at best) how to get at these values at
-! the points in the generated code right after they have just
-! been computed. Worse yet, in the typical case, the upper
-! bound values will not even *be* computed in the optimized
-! code, so these SAVE_EXPRs are entirely bogus.
-!
-! In order to compensate for this fact, we check here to see
-! if optimization is enabled, and if so, we effectively create
-! an empty location description for the (unknown and unknowable)
-! upper bound.
-!
-! This should not cause too much trouble for existing (stupid?)
-! debuggers because they have to deal with empty upper bounds
-! location descriptions anyway in order to be able to deal with
-! incomplete array types.
-!
-! Of course an intelligent debugger (GDB?) should be able to
-! comprehend that a missing upper bound specification in a
-! array type used for a storage class `auto' local array variable
-! indicates that the upper bound is both unknown (at compile-
-! time) and unknowable (at run-time) due to optimization.
-! */
-!
-! if (! optimize)
-! output_loc_descriptor
-! (eliminate_regs (SAVE_EXPR_RTL (bound), 0, NULL_RTX));
-
-! ASM_OUTPUT_LABEL (asm_out_file, end_label);
-! }
-! break;
-
-- default:
-- abort ();
- }
- }
---- 1629,1699 ----
- {
-
-! case ERROR_MARK:
-! return;
-
- /* All fixed-bounds are represented by INTEGER_CST nodes. */
-
-! case INTEGER_CST:
-! ASM_OUTPUT_DWARF_DATA4 (asm_out_file,
-! (unsigned) TREE_INT_CST_LOW (bound));
-! break;
-
-! default:
-
-! /* Dynamic bounds may be represented by NOP_EXPR nodes containing
-! SAVE_EXPR nodes, in which case we can do something, or as
-! an expression, which we cannot represent. */
-! {
-! char begin_label[MAX_ARTIFICIAL_LABEL_BYTES];
-! char end_label[MAX_ARTIFICIAL_LABEL_BYTES];
-
-! sprintf (begin_label, BOUND_BEGIN_LABEL_FMT,
-! current_dienum, dim_num, u_or_l);
-
-! sprintf (end_label, BOUND_END_LABEL_FMT,
-! current_dienum, dim_num, u_or_l);
-
-! ASM_OUTPUT_DWARF_DELTA2 (asm_out_file, end_label, begin_label);
-! ASM_OUTPUT_LABEL (asm_out_file, begin_label);
-!
-! /* If optimization is turned on, the SAVE_EXPRs that describe
-! how to access the upper bound values are essentially bogus.
-! They only describe (at best) how to get at these values at
-! the points in the generated code right after they have just
-! been computed. Worse yet, in the typical case, the upper
-! bound values will not even *be* computed in the optimized
-! code, so these SAVE_EXPRs are entirely bogus.
-!
-! In order to compensate for this fact, we check here to see
-! if optimization is enabled, and if so, we effectively create
-! an empty location description for the (unknown and unknowable)
-! upper bound.
-!
-! This should not cause too much trouble for existing (stupid?)
-! debuggers because they have to deal with empty upper bounds
-! location descriptions anyway in order to be able to deal with
-! incomplete array types.
-!
-! Of course an intelligent debugger (GDB?) should be able to
-! comprehend that a missing upper bound specification in a
-! array type used for a storage class `auto' local array variable
-! indicates that the upper bound is both unknown (at compile-
-! time) and unknowable (at run-time) due to optimization. */
-!
-! if (! optimize)
-! {
-! while (TREE_CODE (bound) == NOP_EXPR
-! || TREE_CODE (bound) == CONVERT_EXPR)
-! bound = TREE_OPERAND (bound, 0);
-!
-! if (TREE_CODE (bound) == SAVE_EXPR)
-! output_loc_descriptor
-! (eliminate_regs (SAVE_EXPR_RTL (bound), 0, NULL_RTX));
-! }
-
-! ASM_OUTPUT_LABEL (asm_out_file, end_label);
-! }
-! break;
-
- }
- }
-*************** type_attribute (type, decl_const, decl_v
-*** 2857,2861 ****
- register int root_type_modified;
-
-! if (TREE_CODE (type) == ERROR_MARK)
- return;
-
---- 2851,2855 ----
- register int root_type_modified;
-
-! if (code == ERROR_MARK)
- return;
-
-*************** type_attribute (type, decl_const, decl_v
-*** 2864,2869 ****
- type `void', so this only applies to function return types. */
-
-! if (TREE_CODE (type) == VOID_TYPE)
- return;
-
- root_type_modified = (code == POINTER_TYPE || code == REFERENCE_TYPE
---- 2858,2869 ----
- type `void', so this only applies to function return types. */
-
-! if (code == VOID_TYPE)
- return;
-+
-+ /* If this is a subtype, find the underlying type. Eventually,
-+ this should write out the appropriate subtype info. */
-+ while ((code == INTEGER_TYPE || code == REAL_TYPE)
-+ && TREE_TYPE (type) != 0)
-+ type = TREE_TYPE (type), code = TREE_CODE (type);
-
- root_type_modified = (code == POINTER_TYPE || code == REFERENCE_TYPE
-diff -rcp2N gcc-2.7.2.2/emit-rtl.c g77-new/emit-rtl.c
-*** gcc-2.7.2.2/emit-rtl.c Thu Sep 14 16:09:30 1995
---- g77-new/emit-rtl.c Sun Aug 10 18:47:08 1997
-*************** max_label_num ()
-*** 545,548 ****
---- 545,565 ----
- }
-
-+ /* Identify REG (which may be a CONCAT) as a user register. */
-+
-+ void
-+ mark_user_reg (reg)
-+ rtx reg;
-+ {
-+ if (GET_CODE (reg) == CONCAT)
-+ {
-+ REG_USERVAR_P (XEXP (reg, 0)) = 1;
-+ REG_USERVAR_P (XEXP (reg, 1)) = 1;
-+ }
-+ else if (GET_CODE (reg) == REG)
-+ REG_USERVAR_P (reg) = 1;
-+ else
-+ abort ();
-+ }
-+
- /* Return first label number used in this function (if any were used). */
-
-*************** change_address (memref, mode, addr)
-*** 1315,1318 ****
---- 1332,1338 ----
- addr = memory_address (mode, addr);
-
-+ if (rtx_equal_p (addr, XEXP (memref, 0)) && mode == GET_MODE (memref))
-+ return memref;
-+
- new = gen_rtx (MEM, mode, addr);
- MEM_VOLATILE_P (new) = MEM_VOLATILE_P (memref);
-diff -rcp2N gcc-2.7.2.2/explow.c g77-new/explow.c
-*** gcc-2.7.2.2/explow.c Thu Jun 15 07:30:10 1995
---- g77-new/explow.c Sun Aug 10 18:46:30 1997
-*************** convert_memory_address (to_mode, x)
-*** 305,310 ****
---- 305,313 ----
- rtx x;
- {
-+ enum machine_mode from_mode = to_mode == ptr_mode ? Pmode : ptr_mode;
- rtx temp;
-
-+ /* Here we handle some special cases. If none of them apply, fall through
-+ to the default case. */
- switch (GET_CODE (x))
- {
-*************** convert_memory_address (to_mode, x)
-*** 321,339 ****
- return temp;
-
-- case PLUS:
-- case MULT:
-- return gen_rtx (GET_CODE (x), to_mode,
-- convert_memory_address (to_mode, XEXP (x, 0)),
-- convert_memory_address (to_mode, XEXP (x, 1)));
--
- case CONST:
- return gen_rtx (CONST, to_mode,
- convert_memory_address (to_mode, XEXP (x, 0)));
-
-! default:
-! return convert_modes (to_mode,
-! to_mode == ptr_mode ? Pmode : ptr_mode,
-! x, POINTERS_EXTEND_UNSIGNED);
- }
- }
- #endif
---- 324,348 ----
- return temp;
-
- case CONST:
- return gen_rtx (CONST, to_mode,
- convert_memory_address (to_mode, XEXP (x, 0)));
-
-! case PLUS:
-! case MULT:
-! /* For addition the second operand is a small constant, we can safely
-! permute the converstion and addition operation. We can always safely
-! permute them if we are making the address narrower. In addition,
-! always permute the operations if this is a constant. */
-! if (GET_MODE_SIZE (to_mode) < GET_MODE_SIZE (from_mode)
-! || (GET_CODE (x) == PLUS && GET_CODE (XEXP (x, 1)) == CONST_INT
-! && (INTVAL (XEXP (x, 1)) + 20000 < 40000
-! || CONSTANT_P (XEXP (x, 0)))))
-! return gen_rtx (GET_CODE (x), to_mode,
-! convert_memory_address (to_mode, XEXP (x, 0)),
-! convert_memory_address (to_mode, XEXP (x, 1)));
- }
-+
-+ return convert_modes (to_mode, from_mode,
-+ x, POINTERS_EXTEND_UNSIGNED);
- }
- #endif
-diff -rcp2N gcc-2.7.2.2/expmed.c g77-new/expmed.c
-*** gcc-2.7.2.2/expmed.c Thu Jul 13 19:25:37 1995
---- g77-new/expmed.c Sun Aug 10 18:46:23 1997
-*************** store_bit_field (str_rtx, bitsize, bitnu
-*** 399,402 ****
---- 399,403 ----
- #ifdef HAVE_insv
- if (HAVE_insv
-+ && GET_MODE (value) != BLKmode
- && !(bitsize == 1 && GET_CODE (value) == CONST_INT)
- /* Ensure insv's size is wide enough for this field. */
-*************** store_split_bit_field (op0, bitsize, bit
-*** 777,781 ****
- done in extract_bit_field, so that the two calls to
- extract_fixed_bit_field will have comparable arguments. */
-! if (GET_CODE (value) != MEM)
- total_bits = BITS_PER_WORD;
- else
---- 778,782 ----
- done in extract_bit_field, so that the two calls to
- extract_fixed_bit_field will have comparable arguments. */
-! if (GET_CODE (value) != MEM || GET_MODE (value) == BLKmode)
- total_bits = BITS_PER_WORD;
- else
-*************** store_split_bit_field (op0, bitsize, bit
-*** 790,797 ****
- /* The args are chosen so that the last part includes the
- lsb. Give extract_bit_field the value it needs (with
-! endianness compensation) to fetch the piece we want. */
-! part = extract_fixed_bit_field (word_mode, value, 0, thissize,
-! total_bits - bitsize + bitsdone,
-! NULL_RTX, 1, align);
- }
- else
---- 791,807 ----
- /* The args are chosen so that the last part includes the
- lsb. Give extract_bit_field the value it needs (with
-! endianness compensation) to fetch the piece we want.
-!
-! ??? We have no idea what the alignment of VALUE is, so
-! we have to use a guess. */
-! part
-! = extract_fixed_bit_field
-! (word_mode, value, 0, thissize,
-! total_bits - bitsize + bitsdone, NULL_RTX, 1,
-! GET_MODE (value) == VOIDmode
-! ? UNITS_PER_WORD
-! : (GET_MODE (value) == BLKmode
-! ? 1
-! : GET_MODE_ALIGNMENT (GET_MODE (value)) / BITS_PER_UNIT));
- }
- else
-*************** store_split_bit_field (op0, bitsize, bit
-*** 803,808 ****
- & (((HOST_WIDE_INT) 1 << thissize) - 1));
- else
-! part = extract_fixed_bit_field (word_mode, value, 0, thissize,
-! bitsdone, NULL_RTX, 1, align);
- }
-
---- 813,824 ----
- & (((HOST_WIDE_INT) 1 << thissize) - 1));
- else
-! part
-! = extract_fixed_bit_field
-! (word_mode, value, 0, thissize, bitsdone, NULL_RTX, 1,
-! GET_MODE (value) == VOIDmode
-! ? UNITS_PER_WORD
-! : (GET_MODE (value) == BLKmode
-! ? 1
-! : GET_MODE_ALIGNMENT (GET_MODE (value)) / BITS_PER_UNIT));
- }
-
-*************** extract_bit_field (str_rtx, bitsize, bit
-*** 876,882 ****
- rtx spec_target_subreg = 0;
-
-- if (GET_CODE (str_rtx) == MEM && ! MEM_IN_STRUCT_P (str_rtx))
-- abort ();
--
- /* Discount the part of the structure before the desired byte.
- We need to know how many bytes are safe to reference after it. */
---- 892,895 ----
-*************** expand_divmod (rem_flag, code, mode, op0
-*** 3189,3193 ****
- Notice that we compute also the final remainder value here,
- and return the result right away. */
-! if (target == 0)
- target = gen_reg_rtx (compute_mode);
-
---- 3202,3206 ----
- Notice that we compute also the final remainder value here,
- and return the result right away. */
-! if (target == 0 || GET_MODE (target) != compute_mode)
- target = gen_reg_rtx (compute_mode);
-
-*************** expand_divmod (rem_flag, code, mode, op0
-*** 3316,3320 ****
- remainder. Notice that we compute also the final remainder
- value here, and return the result right away. */
-! if (target == 0)
- target = gen_reg_rtx (compute_mode);
-
---- 3329,3333 ----
- remainder. Notice that we compute also the final remainder
- value here, and return the result right away. */
-! if (target == 0 || GET_MODE (target) != compute_mode)
- target = gen_reg_rtx (compute_mode);
-
-*************** expand_divmod (rem_flag, code, mode, op0
-*** 3418,3422 ****
- remainder. Notice that we compute also the final remainder
- value here, and return the result right away. */
-! if (target == 0)
- target = gen_reg_rtx (compute_mode);
- if (rem_flag)
---- 3431,3435 ----
- remainder. Notice that we compute also the final remainder
- value here, and return the result right away. */
-! if (target == 0 || GET_MODE (target) != compute_mode)
- target = gen_reg_rtx (compute_mode);
- if (rem_flag)
-*************** expand_divmod (rem_flag, code, mode, op0
-*** 3602,3605 ****
---- 3615,3621 ----
- if (quotient == 0)
- {
-+ if (target && GET_MODE (target) != compute_mode)
-+ target = 0;
-+
- if (rem_flag)
- {
-*************** expand_divmod (rem_flag, code, mode, op0
-*** 3653,3656 ****
---- 3669,3675 ----
- if (rem_flag)
- {
-+ if (target && GET_MODE (target) != compute_mode)
-+ target = 0;
-+
- if (quotient == 0)
- /* No divide instruction either. Use library for remainder. */
-diff -rcp2N gcc-2.7.2.2/expr.c g77-new/expr.c
-*** gcc-2.7.2.2/expr.c Thu Feb 20 19:24:17 1997
---- g77-new/expr.c Sun Aug 10 18:47:21 1997
-*************** Boston, MA 02111-1307, USA. */
-*** 27,30 ****
---- 27,31 ----
- #include "flags.h"
- #include "regs.h"
-+ #include "hard-reg-set.h"
- #include "function.h"
- #include "insn-flags.h"
-*************** extern int stack_depth;
-*** 139,143 ****
- extern int max_stack_depth;
- extern struct obstack permanent_obstack;
-!
-
- static rtx enqueue_insn PROTO((rtx, rtx));
---- 140,144 ----
- extern int max_stack_depth;
- extern struct obstack permanent_obstack;
-! extern rtx arg_pointer_save_area;
-
- static rtx enqueue_insn PROTO((rtx, rtx));
-*************** expand_assignment (to, from, want_value,
-*** 2498,2503 ****
-
- push_temp_slots ();
-! tem = get_inner_reference (to, &bitsize, &bitpos, &offset,
-! &mode1, &unsignedp, &volatilep);
-
- /* If we are going to use store_bit_field and extract_bit_field,
---- 2499,2504 ----
-
- push_temp_slots ();
-! tem = get_inner_reference (to, &bitsize, &bitpos, &offset, &mode1,
-! &unsignedp, &volatilep, &alignment);
-
- /* If we are going to use store_bit_field and extract_bit_field,
-*************** expand_assignment (to, from, want_value,
-*** 2507,2511 ****
- tem = stabilize_reference (tem);
-
-- alignment = TYPE_ALIGN (TREE_TYPE (tem)) / BITS_PER_UNIT;
- to_rtx = expand_expr (tem, NULL_RTX, VOIDmode, 0);
- if (offset != 0)
---- 2508,2511 ----
-*************** expand_assignment (to, from, want_value,
-*** 2518,2529 ****
- gen_rtx (PLUS, ptr_mode, XEXP (to_rtx, 0),
- force_reg (ptr_mode, offset_rtx)));
-- /* If we have a variable offset, the known alignment
-- is only that of the innermost structure containing the field.
-- (Actually, we could sometimes do better by using the
-- align of an element of the innermost array, but no need.) */
-- if (TREE_CODE (to) == COMPONENT_REF
-- || TREE_CODE (to) == BIT_FIELD_REF)
-- alignment
-- = TYPE_ALIGN (TREE_TYPE (TREE_OPERAND (to, 0))) / BITS_PER_UNIT;
- }
- if (volatilep)
---- 2518,2521 ----
-*************** store_expr (exp, target, want_value)
-*** 2775,2780 ****
- which will often result in some optimizations. Do the conversion
- in two steps: first change the signedness, if needed, then
-! the extend. */
-! if (! want_value)
- {
- if (TREE_UNSIGNED (TREE_TYPE (exp))
---- 2767,2775 ----
- which will often result in some optimizations. Do the conversion
- in two steps: first change the signedness, if needed, then
-! the extend. But don't do this if the type of EXP is a subtype
-! of something else since then the conversion might involve
-! more than just converting modes. */
-! if (! want_value && INTEGRAL_TYPE_P (TREE_TYPE (exp))
-! && TREE_TYPE (TREE_TYPE (exp)) == 0)
- {
- if (TREE_UNSIGNED (TREE_TYPE (exp))
-*************** store_constructor (exp, target)
-*** 3071,3074 ****
---- 3066,3077 ----
- }
-
-+ if (TREE_READONLY (field))
-+ {
-+ if (GET_CODE (to_rtx) == MEM)
-+ to_rtx = change_address (to_rtx, GET_MODE (to_rtx),
-+ XEXP (to_rtx, 0));
-+ RTX_UNCHANGING_P (to_rtx) = 1;
-+ }
-+
- store_field (to_rtx, bitsize, bitpos, mode, TREE_VALUE (elt),
- /* The alignment of TARGET is
-*************** store_field (target, bitsize, bitpos, mo
-*** 3414,3417 ****
---- 3417,3432 ----
- rtx temp = expand_expr (exp, NULL_RTX, VOIDmode, 0);
-
-+ /* If BITSIZE is narrower than the size of the type of EXP
-+ we will be narrowing TEMP. Normally, what's wanted are the
-+ low-order bits. However, if EXP's type is a record and this is
-+ big-endian machine, we want the upper BITSIZE bits. */
-+ if (BYTES_BIG_ENDIAN && GET_MODE_CLASS (GET_MODE (temp)) == MODE_INT
-+ && bitsize < GET_MODE_BITSIZE (GET_MODE (temp))
-+ && TREE_CODE (TREE_TYPE (exp)) == RECORD_TYPE)
-+ temp = expand_shift (RSHIFT_EXPR, GET_MODE (temp), temp,
-+ size_int (GET_MODE_BITSIZE (GET_MODE (temp))
-+ - bitsize),
-+ temp, 1);
-+
- /* Unless MODE is VOIDmode or BLKmode, convert TEMP to
- MODE. */
-*************** store_field (target, bitsize, bitpos, mo
-*** 3420,3423 ****
---- 3435,3459 ----
- temp = convert_modes (mode, TYPE_MODE (TREE_TYPE (exp)), temp, 1);
-
-+ /* If the modes of TARGET and TEMP are both BLKmode, both
-+ must be in memory and BITPOS must be aligned on a byte
-+ boundary. If so, we simply do a block copy. */
-+ if (GET_MODE (target) == BLKmode && GET_MODE (temp) == BLKmode)
-+ {
-+ if (GET_CODE (target) != MEM || GET_CODE (temp) != MEM
-+ || bitpos % BITS_PER_UNIT != 0)
-+ abort ();
-+
-+ target = change_address (target, VOIDmode,
-+ plus_constant (XEXP (target, 0),
-+ bitpos / BITS_PER_UNIT));
-+
-+ emit_block_move (target, temp,
-+ GEN_INT ((bitsize + BITS_PER_UNIT - 1)
-+ / BITS_PER_UNIT),
-+ 1);
-+
-+ return value_mode == VOIDmode ? const0_rtx : target;
-+ }
-+
- /* Store the value in the bitfield. */
- store_bit_field (target, bitsize, bitpos, mode, temp, align, total_size);
-*************** get_inner_unaligned_p (exp)
-*** 3515,3518 ****
---- 3551,3557 ----
- This offset is in addition to the bit position.
- If the position is not variable, we store 0 in *POFFSET.
-+ We set *PALIGNMENT to the alignment in bytes of the address that will be
-+ computed. This is the alignment of the thing we return if *POFFSET
-+ is zero, but can be more less strictly aligned if *POFFSET is nonzero.
-
- If any of the extraction expressions is volatile,
-*************** get_inner_unaligned_p (exp)
-*** 3525,3533 ****
- If the field describes a variable-sized object, *PMODE is set to
- VOIDmode and *PBITSIZE is set to -1. An access cannot be made in
-! this case, but the address of the object can be found. */
-
- tree
- get_inner_reference (exp, pbitsize, pbitpos, poffset, pmode,
-! punsignedp, pvolatilep)
- tree exp;
- int *pbitsize;
---- 3564,3572 ----
- If the field describes a variable-sized object, *PMODE is set to
- VOIDmode and *PBITSIZE is set to -1. An access cannot be made in
-! this case, but the address of the object can be found. */
-
- tree
- get_inner_reference (exp, pbitsize, pbitpos, poffset, pmode,
-! punsignedp, pvolatilep, palignment)
- tree exp;
- int *pbitsize;
-*************** get_inner_reference (exp, pbitsize, pbit
-*** 3537,3540 ****
---- 3576,3580 ----
- int *punsignedp;
- int *pvolatilep;
-+ int *palignment;
- {
- tree orig_exp = exp;
-*************** get_inner_reference (exp, pbitsize, pbit
-*** 3542,3545 ****
---- 3582,3586 ----
- enum machine_mode mode = VOIDmode;
- tree offset = integer_zero_node;
-+ int alignment = BIGGEST_ALIGNMENT;
-
- if (TREE_CODE (exp) == COMPONENT_REF)
-*************** get_inner_reference (exp, pbitsize, pbit
-*** 3599,3607 ****
-
- *pbitpos += TREE_INT_CST_LOW (constant);
-!
-! if (var)
-! offset = size_binop (PLUS_EXPR, offset,
-! size_binop (EXACT_DIV_EXPR, var,
-! size_int (BITS_PER_UNIT)));
- }
-
---- 3640,3646 ----
-
- *pbitpos += TREE_INT_CST_LOW (constant);
-! offset = size_binop (PLUS_EXPR, offset,
-! size_binop (EXACT_DIV_EXPR, var,
-! size_int (BITS_PER_UNIT)));
- }
-
-*************** get_inner_reference (exp, pbitsize, pbit
-*** 3629,3633 ****
-
- index = fold (build (MULT_EXPR, index_type, index,
-! TYPE_SIZE (TREE_TYPE (exp))));
-
- if (TREE_CODE (index) == INTEGER_CST
---- 3668,3673 ----
-
- index = fold (build (MULT_EXPR, index_type, index,
-! convert (index_type,
-! TYPE_SIZE (TREE_TYPE (exp)))));
-
- if (TREE_CODE (index) == INTEGER_CST
-*************** get_inner_reference (exp, pbitsize, pbit
-*** 3652,3666 ****
- if (TREE_THIS_VOLATILE (exp))
- *pvolatilep = 1;
- exp = TREE_OPERAND (exp, 0);
- }
-
-! /* If this was a bit-field, see if there is a mode that allows direct
-! access in case EXP is in memory. */
-! if (mode == VOIDmode && *pbitsize != 0 && *pbitpos % *pbitsize == 0)
-! {
-! mode = mode_for_size (*pbitsize, MODE_INT, 0);
-! if (mode == BLKmode)
-! mode = VOIDmode;
-! }
-
- if (integer_zerop (offset))
---- 3692,3708 ----
- if (TREE_THIS_VOLATILE (exp))
- *pvolatilep = 1;
-+
-+ /* If the offset is non-constant already, then we can't assume any
-+ alignment more than the alignment here. */
-+ if (! integer_zerop (offset))
-+ alignment = MIN (alignment, TYPE_ALIGN (TREE_TYPE (exp)));
-+
- exp = TREE_OPERAND (exp, 0);
- }
-
-! if (TREE_CODE_CLASS (TREE_CODE (exp)) == 'd')
-! alignment = MIN (alignment, DECL_ALIGN (exp));
-! else if (TREE_TYPE (exp) != 0)
-! alignment = MIN (alignment, TYPE_ALIGN (TREE_TYPE (exp)));
-
- if (integer_zerop (offset))
-*************** get_inner_reference (exp, pbitsize, pbit
-*** 3672,3675 ****
---- 3714,3718 ----
- *pmode = mode;
- *poffset = offset;
-+ *palignment = alignment / BITS_PER_UNIT;
- return exp;
- }
-*************** init_noncopied_parts (lhs, list)
-*** 3812,3820 ****
- }
-
-! /* Subroutine of expand_expr: return nonzero iff there is no way that
- EXP can reference X, which is being modified. */
-
- static int
-! safe_from_p (x, exp)
- rtx x;
- tree exp;
---- 3855,3867 ----
- }
-
-! static int safe_from_p_count;
-! static int safe_from_p_size;
-! static tree *safe_from_p_rewritten;
-!
-! /* Subroutine of safe_from_p: return nonzero iff there is no way that
- EXP can reference X, which is being modified. */
-
- static int
-! safe_from_p_1 (x, exp)
- rtx x;
- tree exp;
-*************** safe_from_p (x, exp)
-*** 3822,3825 ****
---- 3869,3873 ----
- rtx exp_rtl = 0;
- int i, nops;
-+ int is_save_expr = 0;
-
- if (x == 0
-*************** safe_from_p (x, exp)
-*** 3860,3878 ****
-
- case 'x':
-! if (TREE_CODE (exp) == TREE_LIST)
-! return ((TREE_VALUE (exp) == 0
-! || safe_from_p (x, TREE_VALUE (exp)))
-! && (TREE_CHAIN (exp) == 0
-! || safe_from_p (x, TREE_CHAIN (exp))));
-! else
-! return 0;
-
- case '1':
-! return safe_from_p (x, TREE_OPERAND (exp, 0));
-
- case '2':
- case '<':
-! return (safe_from_p (x, TREE_OPERAND (exp, 0))
-! && safe_from_p (x, TREE_OPERAND (exp, 1)));
-
- case 'e':
---- 3908,3933 ----
-
- case 'x':
-! switch (TREE_CODE (exp))
-! {
-! case TREE_LIST:
-! return ((TREE_VALUE (exp) == 0
-! || safe_from_p_1 (x, TREE_VALUE (exp)))
-! && (TREE_CHAIN (exp) == 0
-! || safe_from_p_1 (x, TREE_CHAIN (exp))));
-!
-! case ERROR_MARK:
-! return 1;
-!
-! default:
-! return 0;
-! }
-
- case '1':
-! return safe_from_p_1 (x, TREE_OPERAND (exp, 0));
-
- case '2':
- case '<':
-! return (safe_from_p_1 (x, TREE_OPERAND (exp, 0))
-! && safe_from_p_1 (x, TREE_OPERAND (exp, 1)));
-
- case 'e':
-*************** safe_from_p (x, exp)
-*** 3887,3891 ****
- case ADDR_EXPR:
- return (staticp (TREE_OPERAND (exp, 0))
-! || safe_from_p (x, TREE_OPERAND (exp, 0)));
-
- case INDIRECT_REF:
---- 3942,3946 ----
- case ADDR_EXPR:
- return (staticp (TREE_OPERAND (exp, 0))
-! || safe_from_p_1 (x, TREE_OPERAND (exp, 0)));
-
- case INDIRECT_REF:
-*************** safe_from_p (x, exp)
-*** 3922,3928 ****
-
- case CLEANUP_POINT_EXPR:
-! return safe_from_p (x, TREE_OPERAND (exp, 0));
-
- case SAVE_EXPR:
- exp_rtl = SAVE_EXPR_RTL (exp);
- break;
---- 3977,3984 ----
-
- case CLEANUP_POINT_EXPR:
-! return safe_from_p_1 (x, TREE_OPERAND (exp, 0));
-
- case SAVE_EXPR:
-+ is_save_expr = 1;
- exp_rtl = SAVE_EXPR_RTL (exp);
- break;
-*************** safe_from_p (x, exp)
-*** 3931,3935 ****
- /* The only operand we look at is operand 1. The rest aren't
- part of the expression. */
-! return safe_from_p (x, TREE_OPERAND (exp, 1));
-
- case METHOD_CALL_EXPR:
---- 3987,3991 ----
- /* The only operand we look at is operand 1. The rest aren't
- part of the expression. */
-! return safe_from_p_1 (x, TREE_OPERAND (exp, 1));
-
- case METHOD_CALL_EXPR:
-*************** safe_from_p (x, exp)
-*** 3945,3949 ****
- for (i = 0; i < nops; i++)
- if (TREE_OPERAND (exp, i) != 0
-! && ! safe_from_p (x, TREE_OPERAND (exp, i)))
- return 0;
- }
---- 4001,4005 ----
- for (i = 0; i < nops; i++)
- if (TREE_OPERAND (exp, i) != 0
-! && ! safe_from_p_1 (x, TREE_OPERAND (exp, i)))
- return 0;
- }
-*************** safe_from_p (x, exp)
-*** 3969,3975 ****
---- 4025,4087 ----
-
- /* If we reach here, it is safe. */
-+ if (is_save_expr)
-+ {
-+ /* This SAVE_EXPR might appear many times in the top-level
-+ safe_from_p() expression, and if it has a complex
-+ subexpression, examining it multiple times could result
-+ in a combinatorial explosion. E.g. on an Alpha Cabriolet
-+ running at least 200MHz, a Fortran test case compiled with
-+ optimization took about 28 minutes to compile -- even though
-+ it was only a few lines long, and the complicated line causing
-+ so much time to be spent in the earlier version of safe_from_p()
-+ had only 293 or so unique nodes.
-+
-+ So, turn this SAVE_EXPR into an ERROR_MARK for now, but remember
-+ where it is so we can turn it back in the top-level safe_from_p()
-+ when we're done. */
-+
-+ if (safe_from_p_count > safe_from_p_size)
-+ return 0; /* For now, don't bother re-sizing the array. */
-+ safe_from_p_rewritten[safe_from_p_count++] = exp;
-+ TREE_SET_CODE (exp, ERROR_MARK);
-+ }
-+
- return 1;
- }
-
-+ /* Subroutine of expand_expr: return nonzero iff there is no way that
-+ EXP can reference X, which is being modified. */
-+
-+ static int
-+ safe_from_p (x, exp)
-+ rtx x;
-+ tree exp;
-+ {
-+ int rtn;
-+ int i;
-+ tree trees[128];
-+
-+ safe_from_p_count = 0;
-+ safe_from_p_size = sizeof (trees) / sizeof (trees[0]);
-+ safe_from_p_rewritten = &trees[0];
-+
-+ rtn = safe_from_p_1 (x, exp);
-+
-+ #if 0
-+ if (safe_from_p_count != 0)
-+ fprintf (stderr, "%s:%d: safe_from_p_count = %d\n",
-+ input_filename, lineno, safe_from_p_count);
-+ #endif
-+
-+ for (i = 0; i < safe_from_p_count; ++i)
-+ {
-+ if (TREE_CODE (trees [i]) != ERROR_MARK)
-+ abort ();
-+ TREE_SET_CODE (trees[i], SAVE_EXPR);
-+ }
-+
-+ return rtn;
-+ }
-+
- /* Subroutine of expand_expr: return nonzero iff EXP is an
- expression whose type is statically determinable. */
-*************** expand_expr (exp, target, tmode, modifie
-*** 4534,4537 ****
---- 4646,4658 ----
- }
- }
-+
-+ if (TREE_READONLY (exp))
-+ {
-+ if (GET_CODE (target) == MEM)
-+ target = change_address (target, GET_MODE (target),
-+ XEXP (target, 0));
-+ RTX_UNCHANGING_P (target) = 1;
-+ }
-+
- store_constructor (exp, target);
- return target;
-*************** expand_expr (exp, target, tmode, modifie
-*** 4543,4567 ****
- tree exp2;
-
-! /* A SAVE_EXPR as the address in an INDIRECT_EXPR is generated
-! for *PTR += ANYTHING where PTR is put inside the SAVE_EXPR.
-! This code has the same general effect as simply doing
-! expand_expr on the save expr, except that the expression PTR
-! is computed for use as a memory address. This means different
-! code, suitable for indexing, may be generated. */
-! if (TREE_CODE (exp1) == SAVE_EXPR
-! && SAVE_EXPR_RTL (exp1) == 0
-! && TYPE_MODE (TREE_TYPE (exp1)) == ptr_mode)
-! {
-! temp = expand_expr (TREE_OPERAND (exp1, 0), NULL_RTX,
-! VOIDmode, EXPAND_SUM);
-! op0 = memory_address (mode, temp);
-! op0 = copy_all_regs (op0);
-! SAVE_EXPR_RTL (exp1) = op0;
-! }
-! else
-! {
-! op0 = expand_expr (exp1, NULL_RTX, VOIDmode, EXPAND_SUM);
-! op0 = memory_address (mode, op0);
-! }
-
- temp = gen_rtx (MEM, mode, op0);
---- 4664,4669 ----
- tree exp2;
-
-! op0 = expand_expr (exp1, NULL_RTX, VOIDmode, EXPAND_SUM);
-! op0 = memory_address (mode, op0);
-
- temp = gen_rtx (MEM, mode, op0);
-*************** expand_expr (exp, target, tmode, modifie
-*** 4770,4776 ****
- tree offset;
- int volatilep = 0;
-- tree tem = get_inner_reference (exp, &bitsize, &bitpos, &offset,
-- &mode1, &unsignedp, &volatilep);
- int alignment;
-
- /* If we got back the original object, something is wrong. Perhaps
---- 4872,4879 ----
- tree offset;
- int volatilep = 0;
- int alignment;
-+ tree tem = get_inner_reference (exp, &bitsize, &bitpos, &offset,
-+ &mode1, &unsignedp, &volatilep,
-+ &alignment);
-
- /* If we got back the original object, something is wrong. Perhaps
-*************** expand_expr (exp, target, tmode, modifie
-*** 4793,4797 ****
- != INTEGER_CST)
- ? target : NULL_RTX),
-! VOIDmode, EXPAND_SUM);
-
- /* If this is a constant, put it into a register if it is a
---- 4896,4901 ----
- != INTEGER_CST)
- ? target : NULL_RTX),
-! VOIDmode,
-! modifier == EXPAND_INITIALIZER ? modifier : 0);
-
- /* If this is a constant, put it into a register if it is a
-*************** expand_expr (exp, target, tmode, modifie
-*** 4806,4810 ****
- }
-
-- alignment = TYPE_ALIGN (TREE_TYPE (tem)) / BITS_PER_UNIT;
- if (offset != 0)
- {
---- 4910,4913 ----
-*************** expand_expr (exp, target, tmode, modifie
-*** 4816,4827 ****
- gen_rtx (PLUS, ptr_mode, XEXP (op0, 0),
- force_reg (ptr_mode, offset_rtx)));
-- /* If we have a variable offset, the known alignment
-- is only that of the innermost structure containing the field.
-- (Actually, we could sometimes do better by using the
-- size of an element of the innermost array, but no need.) */
-- if (TREE_CODE (exp) == COMPONENT_REF
-- || TREE_CODE (exp) == BIT_FIELD_REF)
-- alignment = (TYPE_ALIGN (TREE_TYPE (TREE_OPERAND (exp, 0)))
-- / BITS_PER_UNIT);
- }
-
---- 4919,4922 ----
-*************** expand_expr (exp, target, tmode, modifie
-*** 4844,4848 ****
- && modifier != EXPAND_SUM
- && modifier != EXPAND_INITIALIZER
-! && ((mode1 != BLKmode && ! direct_load[(int) mode1])
- /* If the field isn't aligned enough to fetch as a memref,
- fetch it as a bit field. */
---- 4939,4945 ----
- && modifier != EXPAND_SUM
- && modifier != EXPAND_INITIALIZER
-! && ((mode1 != BLKmode && ! direct_load[(int) mode1]
-! && GET_MODE_CLASS (mode) != MODE_COMPLEX_INT
-! && GET_MODE_CLASS (mode) != MODE_COMPLEX_FLOAT)
- /* If the field isn't aligned enough to fetch as a memref,
- fetch it as a bit field. */
-*************** expand_expr (exp, target, tmode, modifie
-*** 4857,4861 ****
-
- if (ext_mode == BLKmode)
-! abort ();
-
- op0 = extract_bit_field (validize_mem (op0), bitsize, bitpos,
---- 4954,4982 ----
-
- if (ext_mode == BLKmode)
-! {
-! /* In this case, BITPOS must start at a byte boundary and
-! TARGET, if specified, must be a MEM. */
-! if (GET_CODE (op0) != MEM
-! || (target != 0 && GET_CODE (target) != MEM)
-! || bitpos % BITS_PER_UNIT != 0)
-! abort ();
-!
-! op0 = change_address (op0, VOIDmode,
-! plus_constant (XEXP (op0, 0),
-! bitpos / BITS_PER_UNIT));
-! if (target == 0)
-! {
-! target
-! = assign_stack_temp (mode, int_size_in_bytes (type), 0);
-! MEM_IN_STRUCT_P (target) = AGGREGATE_TYPE_P (type);
-! }
-!
-! emit_block_move (target, op0,
-! GEN_INT ((bitsize + BITS_PER_UNIT - 1)
-! / BITS_PER_UNIT),
-! 1);
-!
-! return target;
-! }
-
- op0 = extract_bit_field (validize_mem (op0), bitsize, bitpos,
-*************** expand_expr (exp, target, tmode, modifie
-*** 4863,4866 ****
---- 4984,4999 ----
- alignment,
- int_size_in_bytes (TREE_TYPE (tem)));
-+
-+ /* If the result is a record type and BITSIZE is narrower than
-+ the mode of OP0, an integral mode, and this is a big endian
-+ machine, we must put the field into the high-order bits. */
-+ if (TREE_CODE (type) == RECORD_TYPE && BYTES_BIG_ENDIAN
-+ && GET_MODE_CLASS (GET_MODE (op0)) == MODE_INT
-+ && bitsize < GET_MODE_BITSIZE (GET_MODE (op0)))
-+ op0 = expand_shift (LSHIFT_EXPR, GET_MODE (op0), op0,
-+ size_int (GET_MODE_BITSIZE (GET_MODE (op0))
-+ - bitsize),
-+ op0, 1);
-+
- if (mode == BLKmode)
- {
-*************** expand_expr (exp, target, tmode, modifie
-*** 4877,4880 ****
---- 5010,5018 ----
- }
-
-+ /* If the result is BLKmode, use that to access the object
-+ now as well. */
-+ if (mode == BLKmode)
-+ mode1 = BLKmode;
-+
- /* Get a reference to just this component. */
- if (modifier == EXPAND_CONST_ADDRESS
-*************** expand_expr (exp, target, tmode, modifie
-*** 4888,4895 ****
- MEM_IN_STRUCT_P (op0) = 1;
- MEM_VOLATILE_P (op0) |= volatilep;
-! if (mode == mode1 || mode1 == BLKmode || mode1 == tmode)
- return op0;
-! if (target == 0)
- target = gen_reg_rtx (tmode != VOIDmode ? tmode : mode);
- convert_move (target, op0, unsignedp);
- return target;
---- 5026,5036 ----
- MEM_IN_STRUCT_P (op0) = 1;
- MEM_VOLATILE_P (op0) |= volatilep;
-! if (mode == mode1 || mode1 == BLKmode || mode1 == tmode
-! || modifier == EXPAND_CONST_ADDRESS
-! || modifier == EXPAND_INITIALIZER)
- return op0;
-! else if (target == 0)
- target = gen_reg_rtx (tmode != VOIDmode ? tmode : mode);
-+
- convert_move (target, op0, unsignedp);
- return target;
-*************** expand_builtin (exp, target, subtarget,
-*** 7986,7989 ****
---- 8127,8365 ----
- #endif
-
-+ /* __builtin_setjmp is passed a pointer to an array of five words
-+ (not all will be used on all machines). It operates similarly to
-+ the C library function of the same name, but is more efficient.
-+ Much of the code below (and for longjmp) is copied from the handling
-+ of non-local gotos.
-+
-+ NOTE: This is intended for use by GNAT and will only work in
-+ the method used by it. This code will likely NOT survive to
-+ the GCC 2.8.0 release. */
-+ case BUILT_IN_SETJMP:
-+ if (arglist == 0
-+ || TREE_CODE (TREE_TYPE (TREE_VALUE (arglist))) != POINTER_TYPE)
-+ break;
-+
-+ {
-+ rtx buf_addr = expand_expr (TREE_VALUE (arglist), subtarget,
-+ VOIDmode, 0);
-+ rtx lab1 = gen_label_rtx (), lab2 = gen_label_rtx ();
-+ enum machine_mode sa_mode = Pmode;
-+ rtx stack_save;
-+ int old_inhibit_defer_pop = inhibit_defer_pop;
-+ int return_pops = RETURN_POPS_ARGS (get_identifier ("__dummy"),
-+ get_identifier ("__dummy"), 0);
-+ rtx next_arg_reg;
-+ CUMULATIVE_ARGS args_so_far;
-+ int current_call_is_indirect = 1;
-+ int i;
-+
-+ #ifdef POINTERS_EXTEND_UNSIGNED
-+ buf_addr = convert_memory_address (Pmode, buf_addr);
-+ #endif
-+
-+ buf_addr = force_reg (Pmode, buf_addr);
-+
-+ if (target == 0 || GET_CODE (target) != REG
-+ || REGNO (target) < FIRST_PSEUDO_REGISTER)
-+ target = gen_reg_rtx (value_mode);
-+
-+ emit_queue ();
-+
-+ CONST_CALL_P (emit_note (NULL_PTR, NOTE_INSN_SETJMP)) = 1;
-+ current_function_calls_setjmp = 1;
-+
-+ /* We store the frame pointer and the address of lab1 in the buffer
-+ and use the rest of it for the stack save area, which is
-+ machine-dependent. */
-+ emit_move_insn (gen_rtx (MEM, Pmode, buf_addr),
-+ virtual_stack_vars_rtx);
-+ emit_move_insn
-+ (validize_mem (gen_rtx (MEM, Pmode,
-+ plus_constant (buf_addr,
-+ GET_MODE_SIZE (Pmode)))),
-+ gen_rtx (LABEL_REF, Pmode, lab1));
-+
-+ #ifdef HAVE_save_stack_nonlocal
-+ if (HAVE_save_stack_nonlocal)
-+ sa_mode = insn_operand_mode[(int) CODE_FOR_save_stack_nonlocal][0];
-+ #endif
-+
-+ current_function_has_nonlocal_goto = 1;
-+
-+ stack_save = gen_rtx (MEM, sa_mode,
-+ plus_constant (buf_addr,
-+ 2 * GET_MODE_SIZE (Pmode)));
-+ emit_stack_save (SAVE_NONLOCAL, &stack_save, NULL_RTX);
-+
-+ #ifdef HAVE_setjmp
-+ if (HAVE_setjmp)
-+ emit_insn (gen_setjmp ());
-+ #endif
-+
-+ /* Set TARGET to zero and branch around the other case. */
-+ emit_move_insn (target, const0_rtx);
-+ emit_jump_insn (gen_jump (lab2));
-+ emit_barrier ();
-+ emit_label (lab1);
-+
-+ /* Note that setjmp clobbers FP when we get here, so we have to
-+ make sure it's marked as used by this function. */
-+ emit_insn (gen_rtx (USE, VOIDmode, hard_frame_pointer_rtx));
-+
-+ /* Mark the static chain as clobbered here so life information
-+ doesn't get messed up for it. */
-+ emit_insn (gen_rtx (CLOBBER, VOIDmode, static_chain_rtx));
-+
-+ /* Now put in the code to restore the frame pointer, and argument
-+ pointer, if needed. The code below is from expand_end_bindings
-+ in stmt.c; see detailed documentation there. */
-+ #ifdef HAVE_nonlocal_goto
-+ if (! HAVE_nonlocal_goto)
-+ #endif
-+ emit_move_insn (virtual_stack_vars_rtx, hard_frame_pointer_rtx);
-+
-+ #if ARG_POINTER_REGNUM != HARD_FRAME_POINTER_REGNUM
-+ if (fixed_regs[ARG_POINTER_REGNUM])
-+ {
-+ #ifdef ELIMINABLE_REGS
-+ static struct elims {int from, to;} elim_regs[] = ELIMINABLE_REGS;
-+
-+ for (i = 0; i < sizeof elim_regs / sizeof elim_regs[0]; i++)
-+ if (elim_regs[i].from == ARG_POINTER_REGNUM
-+ && elim_regs[i].to == HARD_FRAME_POINTER_REGNUM)
-+ break;
-+
-+ if (i == sizeof elim_regs / sizeof elim_regs [0])
-+ #endif
-+ {
-+ /* Now restore our arg pointer from the address at which it
-+ was saved in our stack frame.
-+ If there hasn't be space allocated for it yet, make
-+ some now. */
-+ if (arg_pointer_save_area == 0)
-+ arg_pointer_save_area
-+ = assign_stack_local (Pmode, GET_MODE_SIZE (Pmode), 0);
-+ emit_move_insn (virtual_incoming_args_rtx,
-+ copy_to_reg (arg_pointer_save_area));
-+ }
-+ }
-+ #endif
-+
-+ #ifdef HAVE_nonlocal_goto_receiver
-+ if (HAVE_nonlocal_goto_receiver)
-+ emit_insn (gen_nonlocal_goto_receiver ());
-+ #endif
-+ /* The static chain pointer contains the address of dummy function.
-+ We need to call it here to handle some PIC cases of restoring
-+ a global pointer. Then return 1. */
-+ op0 = copy_to_mode_reg (Pmode, static_chain_rtx);
-+
-+ /* We can't actually call emit_library_call here, so do everything
-+ it does, which isn't much for a libfunc with no args. */
-+ op0 = memory_address (FUNCTION_MODE, op0);
-+
-+ INIT_CUMULATIVE_ARGS (args_so_far, NULL_TREE,
-+ gen_rtx (SYMBOL_REF, Pmode, "__dummy"));
-+ next_arg_reg = FUNCTION_ARG (args_so_far, VOIDmode, void_type_node, 1);
-+
-+ #ifndef ACCUMULATE_OUTGOING_ARGS
-+ #ifdef HAVE_call_pop
-+ if (HAVE_call_pop)
-+ emit_call_insn (gen_call_pop (gen_rtx (MEM, FUNCTION_MODE, op0),
-+ const0_rtx, next_arg_reg,
-+ GEN_INT (return_pops)));
-+ else
-+ #endif
-+ #endif
-+
-+ #ifdef HAVE_call
-+ if (HAVE_call)
-+ emit_call_insn (gen_call (gen_rtx (MEM, FUNCTION_MODE, op0),
-+ const0_rtx, next_arg_reg, const0_rtx));
-+ else
-+ #endif
-+ abort ();
-+
-+ emit_move_insn (target, const1_rtx);
-+ emit_label (lab2);
-+ return target;
-+ }
-+
-+ /* __builtin_longjmp is passed a pointer to an array of five words
-+ and a value, which is a dummy. It's similar to the C library longjmp
-+ function but works with __builtin_setjmp above. */
-+ case BUILT_IN_LONGJMP:
-+ if (arglist == 0 || TREE_CHAIN (arglist) == 0
-+ || TREE_CODE (TREE_TYPE (TREE_VALUE (arglist))) != POINTER_TYPE)
-+ break;
-+
-+ {
-+ tree dummy_id = get_identifier ("__dummy");
-+ tree dummy_type = build_function_type (void_type_node, NULL_TREE);
-+ tree dummy_decl = build_decl (FUNCTION_DECL, dummy_id, dummy_type);
-+ #ifdef POINTERS_EXTEND_UNSIGNED
-+ rtx buf_addr
-+ = force_reg (Pmode,
-+ convert_memory_address
-+ (Pmode,
-+ expand_expr (TREE_VALUE (arglist),
-+ NULL_RTX, VOIDmode, 0)));
-+ #else
-+ rtx buf_addr
-+ = force_reg (Pmode, expand_expr (TREE_VALUE (arglist),
-+ NULL_RTX,
-+ VOIDmode, 0));
-+ #endif
-+ rtx fp = gen_rtx (MEM, Pmode, buf_addr);
-+ rtx lab = gen_rtx (MEM, Pmode,
-+ plus_constant (buf_addr, GET_MODE_SIZE (Pmode)));
-+ enum machine_mode sa_mode
-+ #ifdef HAVE_save_stack_nonlocal
-+ = (HAVE_save_stack_nonlocal
-+ ? insn_operand_mode[(int) CODE_FOR_save_stack_nonlocal][0]
-+ : Pmode);
-+ #else
-+ = Pmode;
-+ #endif
-+ rtx stack = gen_rtx (MEM, sa_mode,
-+ plus_constant (buf_addr,
-+ 2 * GET_MODE_SIZE (Pmode)));
-+
-+ DECL_EXTERNAL (dummy_decl) = 1;
-+ TREE_PUBLIC (dummy_decl) = 1;
-+ make_decl_rtl (dummy_decl, NULL_PTR, 1);
-+
-+ /* Expand the second expression just for side-effects. */
-+ expand_expr (TREE_VALUE (TREE_CHAIN (arglist)),
-+ const0_rtx, VOIDmode, 0);
-+
-+ assemble_external (dummy_decl);
-+
-+ /* Pick up FP, label, and SP from the block and jump. This code is
-+ from expand_goto in stmt.c; see there for detailed comments. */
-+ #if HAVE_nonlocal_goto
-+ if (HAVE_nonlocal_goto)
-+ emit_insn (gen_nonlocal_goto (fp, lab, stack,
-+ XEXP (DECL_RTL (dummy_decl), 0)));
-+ else
-+ #endif
-+ {
-+ lab = copy_to_reg (lab);
-+ emit_move_insn (hard_frame_pointer_rtx, fp);
-+ emit_stack_restore (SAVE_NONLOCAL, stack, NULL_RTX);
-+
-+ /* Put in the static chain register the address of the dummy
-+ function. */
-+ emit_move_insn (static_chain_rtx, XEXP (DECL_RTL (dummy_decl), 0));
-+ emit_insn (gen_rtx (USE, VOIDmode, hard_frame_pointer_rtx));
-+ emit_insn (gen_rtx (USE, VOIDmode, stack_pointer_rtx));
-+ emit_insn (gen_rtx (USE, VOIDmode, static_chain_rtx));
-+ emit_indirect_jump (lab);
-+ }
-+
-+ return const0_rtx;
-+ }
-+
- default: /* just do library call, if unknown builtin */
- error ("built-in function `%s' not currently supported",
-*************** preexpand_calls (exp)
-*** 8688,8701 ****
- case CALL_EXPR:
- /* Do nothing if already expanded. */
-! if (CALL_EXPR_RTL (exp) != 0)
- return;
-
-! /* Do nothing to built-in functions. */
-! if (TREE_CODE (TREE_OPERAND (exp, 0)) != ADDR_EXPR
-! || TREE_CODE (TREE_OPERAND (TREE_OPERAND (exp, 0), 0)) != FUNCTION_DECL
-! || ! DECL_BUILT_IN (TREE_OPERAND (TREE_OPERAND (exp, 0), 0))
-! /* Do nothing if the call returns a variable-sized object. */
-! || TREE_CODE (TYPE_SIZE (TREE_TYPE(exp))) != INTEGER_CST)
-! CALL_EXPR_RTL (exp) = expand_call (exp, NULL_RTX, 0);
- return;
-
---- 9064,9078 ----
- case CALL_EXPR:
- /* Do nothing if already expanded. */
-! if (CALL_EXPR_RTL (exp) != 0
-! /* Do nothing if the call returns a variable-sized object. */
-! || TREE_CODE (TYPE_SIZE (TREE_TYPE(exp))) != INTEGER_CST
-! /* Do nothing to built-in functions. */
-! || (TREE_CODE (TREE_OPERAND (exp, 0)) == ADDR_EXPR
-! && (TREE_CODE (TREE_OPERAND (TREE_OPERAND (exp, 0), 0))
-! == FUNCTION_DECL)
-! && DECL_BUILT_IN (TREE_OPERAND (TREE_OPERAND (exp, 0), 0))))
- return;
-
-! CALL_EXPR_RTL (exp) = expand_call (exp, NULL_RTX, 0);
- return;
-
-*************** do_jump (exp, if_false_label, if_true_la
-*** 9087,9090 ****
---- 9464,9468 ----
- push_temp_slots ();
- expand_expr (TREE_OPERAND (exp, 0), const0_rtx, VOIDmode, 0);
-+ preserve_temp_slots (NULL_RTX);
- free_temp_slots ();
- pop_temp_slots ();
-*************** do_jump (exp, if_false_label, if_true_la
-*** 9103,9111 ****
- tree offset;
- int volatilep = 0;
-
- /* Get description of this reference. We don't actually care
- about the underlying object here. */
- get_inner_reference (exp, &bitsize, &bitpos, &offset,
-! &mode, &unsignedp, &volatilep);
-
- type = type_for_size (bitsize, unsignedp);
---- 9481,9491 ----
- tree offset;
- int volatilep = 0;
-+ int alignment;
-
- /* Get description of this reference. We don't actually care
- about the underlying object here. */
- get_inner_reference (exp, &bitsize, &bitpos, &offset,
-! &mode, &unsignedp, &volatilep,
-! &alignment);
-
- type = type_for_size (bitsize, unsignedp);
-diff -rcp2N gcc-2.7.2.2/final.c g77-new/final.c
-*** gcc-2.7.2.2/final.c Sun Nov 26 13:50:00 1995
---- g77-new/final.c Thu Jul 10 20:11:16 1997
-*************** profile_function (file)
-*** 983,991 ****
- text_section ();
-
-! #ifdef STRUCT_VALUE_INCOMING_REGNUM
- if (sval)
- ASM_OUTPUT_REG_PUSH (file, STRUCT_VALUE_INCOMING_REGNUM);
- #else
-! #ifdef STRUCT_VALUE_REGNUM
- if (sval)
- ASM_OUTPUT_REG_PUSH (file, STRUCT_VALUE_REGNUM);
---- 983,991 ----
- text_section ();
-
-! #if defined(STRUCT_VALUE_INCOMING_REGNUM) && defined(ASM_OUTPUT_REG_PUSH)
- if (sval)
- ASM_OUTPUT_REG_PUSH (file, STRUCT_VALUE_INCOMING_REGNUM);
- #else
-! #if defined(STRUCT_VALUE_REGNUM) && defined(ASM_OUTPUT_REG_PUSH)
- if (sval)
- ASM_OUTPUT_REG_PUSH (file, STRUCT_VALUE_REGNUM);
-*************** profile_function (file)
-*** 993,1027 ****
- #endif
-
-! #if 0
-! #ifdef STATIC_CHAIN_INCOMING_REGNUM
- if (cxt)
- ASM_OUTPUT_REG_PUSH (file, STATIC_CHAIN_INCOMING_REGNUM);
- #else
-! #ifdef STATIC_CHAIN_REGNUM
- if (cxt)
- ASM_OUTPUT_REG_PUSH (file, STATIC_CHAIN_REGNUM);
- #endif
- #endif
-- #endif /* 0 */
-
- FUNCTION_PROFILER (file, profile_label_no);
-
-! #if 0
-! #ifdef STATIC_CHAIN_INCOMING_REGNUM
- if (cxt)
- ASM_OUTPUT_REG_POP (file, STATIC_CHAIN_INCOMING_REGNUM);
- #else
-! #ifdef STATIC_CHAIN_REGNUM
- if (cxt)
- ASM_OUTPUT_REG_POP (file, STATIC_CHAIN_REGNUM);
- #endif
- #endif
-- #endif /* 0 */
-
-! #ifdef STRUCT_VALUE_INCOMING_REGNUM
- if (sval)
- ASM_OUTPUT_REG_POP (file, STRUCT_VALUE_INCOMING_REGNUM);
- #else
-! #ifdef STRUCT_VALUE_REGNUM
- if (sval)
- ASM_OUTPUT_REG_POP (file, STRUCT_VALUE_REGNUM);
---- 993,1023 ----
- #endif
-
-! #if defined(STATIC_CHAIN_INCOMING_REGNUM) && defined(ASM_OUTPUT_REG_PUSH)
- if (cxt)
- ASM_OUTPUT_REG_PUSH (file, STATIC_CHAIN_INCOMING_REGNUM);
- #else
-! #if defined(STATIC_CHAIN_REGNUM) && defined(ASM_OUTPUT_REG_PUSH)
- if (cxt)
- ASM_OUTPUT_REG_PUSH (file, STATIC_CHAIN_REGNUM);
- #endif
- #endif
-
- FUNCTION_PROFILER (file, profile_label_no);
-
-! #if defined(STATIC_CHAIN_INCOMING_REGNUM) && defined(ASM_OUTPUT_REG_PUSH)
- if (cxt)
- ASM_OUTPUT_REG_POP (file, STATIC_CHAIN_INCOMING_REGNUM);
- #else
-! #if defined(STATIC_CHAIN_REGNUM) && defined(ASM_OUTPUT_REG_PUSH)
- if (cxt)
- ASM_OUTPUT_REG_POP (file, STATIC_CHAIN_REGNUM);
- #endif
- #endif
-
-! #if defined(STRUCT_VALUE_INCOMING_REGNUM) && defined(ASM_OUTPUT_REG_PUSH)
- if (sval)
- ASM_OUTPUT_REG_POP (file, STRUCT_VALUE_INCOMING_REGNUM);
- #else
-! #if defined(STRUCT_VALUE_REGNUM) && defined(ASM_OUTPUT_REG_PUSH)
- if (sval)
- ASM_OUTPUT_REG_POP (file, STRUCT_VALUE_REGNUM);
-diff -rcp2N gcc-2.7.2.2/flags.h g77-new/flags.h
-*** gcc-2.7.2.2/flags.h Thu Jun 15 07:34:11 1995
---- g77-new/flags.h Thu Jul 10 20:08:56 1997
-*************** extern int flag_unroll_loops;
-*** 204,207 ****
---- 204,221 ----
- extern int flag_unroll_all_loops;
-
-+ /* Nonzero forces all invariant computations in loops to be moved
-+ outside the loop. */
-+
-+ extern int flag_move_all_movables;
-+
-+ /* Nonzero forces all general induction variables in loops to be
-+ strength reduced. */
-+
-+ extern int flag_reduce_all_givs;
-+
-+ /* Nonzero gets another run of loop_optimize performed. */
-+
-+ extern int flag_rerun_loop_opt;
-+
- /* Nonzero for -fcse-follow-jumps:
- have cse follow jumps to do a more extensive job. */
-*************** extern int flag_gnu_linker;
-*** 339,342 ****
---- 353,369 ----
- /* Tag all structures with __attribute__(packed) */
- extern int flag_pack_struct;
-+
-+ /* 1 if alias checking is enabled: symbols do not alias each other
-+ and parameters do not alias the current stack frame. */
-+ extern int flag_alias_check;
-+
-+ /* This flag is only tested if alias checking is enabled.
-+ 0 if pointer arguments may alias each other. True in C.
-+ 1 if pointer arguments may not alias each other but may alias
-+ global variables.
-+ 2 if pointer arguments may not alias each other and may not
-+ alias global variables. True in Fortran.
-+ The value is ignored if flag_alias_check is 0. */
-+ extern int flag_argument_noalias;
-
- /* Other basic status info about current function. */
-diff -rcp2N gcc-2.7.2.2/flow.c g77-new/flow.c
-*** gcc-2.7.2.2/flow.c Mon Aug 28 06:23:34 1995
---- g77-new/flow.c Sun Aug 10 18:46:11 1997
-*************** static HARD_REG_SET elim_reg_set;
-*** 288,292 ****
- /* Forward declarations */
- static void find_basic_blocks PROTO((rtx, rtx));
-! static int uses_reg_or_mem PROTO((rtx));
- static void mark_label_ref PROTO((rtx, rtx, int));
- static void life_analysis PROTO((rtx, int));
---- 288,292 ----
- /* Forward declarations */
- static void find_basic_blocks PROTO((rtx, rtx));
-! static int jmp_uses_reg_or_mem PROTO((rtx));
- static void mark_label_ref PROTO((rtx, rtx, int));
- static void life_analysis PROTO((rtx, int));
-*************** find_basic_blocks (f, nonlocal_label_lis
-*** 554,563 ****
- if (GET_CODE (XVECEXP (pat, 0, i)) == SET
- && SET_DEST (XVECEXP (pat, 0, i)) == pc_rtx
-! && uses_reg_or_mem (SET_SRC (XVECEXP (pat, 0, i))))
- computed_jump = 1;
- }
- else if (GET_CODE (pat) == SET
- && SET_DEST (pat) == pc_rtx
-! && uses_reg_or_mem (SET_SRC (pat)))
- computed_jump = 1;
-
---- 554,563 ----
- if (GET_CODE (XVECEXP (pat, 0, i)) == SET
- && SET_DEST (XVECEXP (pat, 0, i)) == pc_rtx
-! && jmp_uses_reg_or_mem (SET_SRC (XVECEXP (pat, 0, i))))
- computed_jump = 1;
- }
- else if (GET_CODE (pat) == SET
- && SET_DEST (pat) == pc_rtx
-! && jmp_uses_reg_or_mem (SET_SRC (pat)))
- computed_jump = 1;
-
-*************** find_basic_blocks (f, nonlocal_label_lis
-*** 760,767 ****
- /* Subroutines of find_basic_blocks. */
-
-! /* Return 1 if X contain a REG or MEM that is not in the constant pool. */
-
- static int
-! uses_reg_or_mem (x)
- rtx x;
- {
---- 760,768 ----
- /* Subroutines of find_basic_blocks. */
-
-! /* Return 1 if X, the SRC_SRC of SET of (pc) contain a REG or MEM that is
-! not in the constant pool and not in the condition of an IF_THEN_ELSE. */
-
- static int
-! jmp_uses_reg_or_mem (x)
- rtx x;
- {
-*************** uses_reg_or_mem (x)
-*** 770,778 ****
- char *fmt;
-
-! if (code == REG
-! || (code == MEM
-! && ! (GET_CODE (XEXP (x, 0)) == SYMBOL_REF
-! && CONSTANT_POOL_ADDRESS_P (XEXP (x, 0)))))
-! return 1;
-
- fmt = GET_RTX_FORMAT (code);
---- 771,796 ----
- char *fmt;
-
-! switch (code)
-! {
-! case CONST:
-! case LABEL_REF:
-! case PC:
-! return 0;
-!
-! case REG:
-! return 1;
-!
-! case MEM:
-! return ! (GET_CODE (XEXP (x, 0)) == SYMBOL_REF
-! && CONSTANT_POOL_ADDRESS_P (XEXP (x, 0)));
-!
-! case IF_THEN_ELSE:
-! return (jmp_uses_reg_or_mem (XEXP (x, 1))
-! || jmp_uses_reg_or_mem (XEXP (x, 2)));
-!
-! case PLUS: case MINUS: case MULT:
-! return (jmp_uses_reg_or_mem (XEXP (x, 0))
-! || jmp_uses_reg_or_mem (XEXP (x, 1)));
-! }
-
- fmt = GET_RTX_FORMAT (code);
-*************** uses_reg_or_mem (x)
-*** 780,789 ****
- {
- if (fmt[i] == 'e'
-! && uses_reg_or_mem (XEXP (x, i)))
- return 1;
-
- if (fmt[i] == 'E')
- for (j = 0; j < XVECLEN (x, i); j++)
-! if (uses_reg_or_mem (XVECEXP (x, i, j)))
- return 1;
- }
---- 798,807 ----
- {
- if (fmt[i] == 'e'
-! && jmp_uses_reg_or_mem (XEXP (x, i)))
- return 1;
-
- if (fmt[i] == 'E')
- for (j = 0; j < XVECLEN (x, i); j++)
-! if (jmp_uses_reg_or_mem (XVECEXP (x, i, j)))
- return 1;
- }
-*************** propagate_block (old, first, last, final
-*** 1605,1614 ****
-
- /* Each call clobbers all call-clobbered regs that are not
-! global. Note that the function-value reg is a
- call-clobbered reg, and mark_set_regs has already had
- a chance to handle it. */
-
- for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
-! if (call_used_regs[i] && ! global_regs[i])
- dead[i / REGSET_ELT_BITS]
- |= ((REGSET_ELT_TYPE) 1 << (i % REGSET_ELT_BITS));
---- 1623,1633 ----
-
- /* Each call clobbers all call-clobbered regs that are not
-! global or fixed. Note that the function-value reg is a
- call-clobbered reg, and mark_set_regs has already had
- a chance to handle it. */
-
- for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
-! if (call_used_regs[i] && ! global_regs[i]
-! && ! fixed_regs[i])
- dead[i / REGSET_ELT_BITS]
- |= ((REGSET_ELT_TYPE) 1 << (i % REGSET_ELT_BITS));
-diff -rcp2N gcc-2.7.2.2/fold-const.c g77-new/fold-const.c
-*** gcc-2.7.2.2/fold-const.c Fri Sep 15 18:26:12 1995
---- g77-new/fold-const.c Sun Aug 10 18:47:18 1997
-*************** static tree unextend PROTO((tree, int, i
-*** 80,83 ****
---- 80,84 ----
- static tree fold_truthop PROTO((enum tree_code, tree, tree, tree));
- static tree strip_compound_expr PROTO((tree, tree));
-+ static int multiple_of_p PROTO((tree, tree, tree));
-
- #ifndef BRANCH_COST
-*************** const_binop (code, arg1, arg2, notrunc)
-*** 1077,1080 ****
---- 1078,1083 ----
- if (int2h == 0 && int2l > 0
- && TREE_TYPE (arg1) == sizetype
-+ && ! TREE_CONSTANT_OVERFLOW (arg1)
-+ && ! TREE_CONSTANT_OVERFLOW (arg2)
- && int1h == 0 && int1l >= 0)
- {
-*************** const_binop (code, arg1, arg2, notrunc)
-*** 1230,1233 ****
---- 1233,1237 ----
- if (TREE_CODE (arg1) == COMPLEX_CST)
- {
-+ register tree type = TREE_TYPE (arg1);
- register tree r1 = TREE_REALPART (arg1);
- register tree i1 = TREE_IMAGPART (arg1);
-*************** const_binop (code, arg1, arg2, notrunc)
-*** 1239,1253 ****
- {
- case PLUS_EXPR:
-! t = build_complex (const_binop (PLUS_EXPR, r1, r2, notrunc),
- const_binop (PLUS_EXPR, i1, i2, notrunc));
- break;
-
- case MINUS_EXPR:
-! t = build_complex (const_binop (MINUS_EXPR, r1, r2, notrunc),
- const_binop (MINUS_EXPR, i1, i2, notrunc));
- break;
-
- case MULT_EXPR:
-! t = build_complex (const_binop (MINUS_EXPR,
- const_binop (MULT_EXPR,
- r1, r2, notrunc),
---- 1243,1260 ----
- {
- case PLUS_EXPR:
-! t = build_complex (type,
-! const_binop (PLUS_EXPR, r1, r2, notrunc),
- const_binop (PLUS_EXPR, i1, i2, notrunc));
- break;
-
- case MINUS_EXPR:
-! t = build_complex (type,
-! const_binop (MINUS_EXPR, r1, r2, notrunc),
- const_binop (MINUS_EXPR, i1, i2, notrunc));
- break;
-
- case MULT_EXPR:
-! t = build_complex (type,
-! const_binop (MINUS_EXPR,
- const_binop (MULT_EXPR,
- r1, r2, notrunc),
-*************** const_binop (code, arg1, arg2, notrunc)
-*** 1271,1293 ****
- notrunc);
-
-! t = build_complex
-! (const_binop (INTEGRAL_TYPE_P (TREE_TYPE (r1))
-! ? TRUNC_DIV_EXPR : RDIV_EXPR,
-! const_binop (PLUS_EXPR,
-! const_binop (MULT_EXPR, r1, r2,
-! notrunc),
-! const_binop (MULT_EXPR, i1, i2,
-! notrunc),
-! notrunc),
-! magsquared, notrunc),
-! const_binop (INTEGRAL_TYPE_P (TREE_TYPE (r1))
-! ? TRUNC_DIV_EXPR : RDIV_EXPR,
-! const_binop (MINUS_EXPR,
-! const_binop (MULT_EXPR, i1, r2,
-! notrunc),
-! const_binop (MULT_EXPR, r1, i2,
-! notrunc),
-! notrunc),
-! magsquared, notrunc));
- }
- break;
---- 1278,1302 ----
- notrunc);
-
-! t = build_complex (type,
-! const_binop
-! (INTEGRAL_TYPE_P (TREE_TYPE (r1))
-! ? TRUNC_DIV_EXPR : RDIV_EXPR,
-! const_binop (PLUS_EXPR,
-! const_binop (MULT_EXPR, r1, r2,
-! notrunc),
-! const_binop (MULT_EXPR, i1, i2,
-! notrunc),
-! notrunc),
-! magsquared, notrunc),
-! const_binop
-! (INTEGRAL_TYPE_P (TREE_TYPE (r1))
-! ? TRUNC_DIV_EXPR : RDIV_EXPR,
-! const_binop (MINUS_EXPR,
-! const_binop (MULT_EXPR, i1, r2,
-! notrunc),
-! const_binop (MULT_EXPR, r1, i2,
-! notrunc),
-! notrunc),
-! magsquared, notrunc));
- }
- break;
-*************** const_binop (code, arg1, arg2, notrunc)
-*** 1296,1300 ****
- abort ();
- }
-- TREE_TYPE (t) = TREE_TYPE (arg1);
- return t;
- }
---- 1305,1308 ----
-*************** size_binop (code, arg0, arg1)
-*** 1346,1363 ****
- {
- /* And some specific cases even faster than that. */
-! if (code == PLUS_EXPR
-! && TREE_INT_CST_LOW (arg0) == 0
-! && TREE_INT_CST_HIGH (arg0) == 0)
- return arg1;
-! if (code == MINUS_EXPR
-! && TREE_INT_CST_LOW (arg1) == 0
-! && TREE_INT_CST_HIGH (arg1) == 0)
- return arg0;
-! if (code == MULT_EXPR
-! && TREE_INT_CST_LOW (arg0) == 1
-! && TREE_INT_CST_HIGH (arg0) == 0)
- return arg1;
- /* Handle general case of two integer constants. */
-! return const_binop (code, arg0, arg1, 0);
- }
-
---- 1354,1367 ----
- {
- /* And some specific cases even faster than that. */
-! if (code == PLUS_EXPR && integer_zerop (arg0))
- return arg1;
-! else if ((code == MINUS_EXPR || code == PLUS_EXPR)
-! && integer_zerop (arg1))
- return arg0;
-! else if (code == MULT_EXPR && integer_onep (arg0))
- return arg1;
-+
- /* Handle general case of two integer constants. */
-! return const_binop (code, arg0, arg1, 1);
- }
-
-*************** fold_convert (t, arg1)
-*** 1482,1486 ****
- {
- if (REAL_VALUE_ISNAN (TREE_REAL_CST (arg1)))
-! return arg1;
- else if (setjmp (float_error))
- {
---- 1486,1494 ----
- {
- if (REAL_VALUE_ISNAN (TREE_REAL_CST (arg1)))
-! {
-! t = arg1;
-! TREE_TYPE (arg1) = type;
-! return t;
-! }
- else if (setjmp (float_error))
- {
-*************** operand_equal_p (arg0, arg1, only_const)
-*** 1644,1687 ****
- STRIP_NOPS (arg1);
-
-! /* If ARG0 and ARG1 are the same SAVE_EXPR, they are necessarily equal.
-! We don't care about side effects in that case because the SAVE_EXPR
-! takes care of that for us. */
-! if (TREE_CODE (arg0) == SAVE_EXPR && arg0 == arg1)
-! return ! only_const;
-!
-! if (TREE_SIDE_EFFECTS (arg0) || TREE_SIDE_EFFECTS (arg1))
- return 0;
-
-! if (TREE_CODE (arg0) == TREE_CODE (arg1)
-! && TREE_CODE (arg0) == ADDR_EXPR
-! && TREE_OPERAND (arg0, 0) == TREE_OPERAND (arg1, 0))
-! return 1;
-!
-! if (TREE_CODE (arg0) == TREE_CODE (arg1)
-! && TREE_CODE (arg0) == INTEGER_CST
-! && TREE_INT_CST_LOW (arg0) == TREE_INT_CST_LOW (arg1)
-! && TREE_INT_CST_HIGH (arg0) == TREE_INT_CST_HIGH (arg1))
- return 1;
-
-! /* Detect when real constants are equal. */
-! if (TREE_CODE (arg0) == TREE_CODE (arg1)
-! && TREE_CODE (arg0) == REAL_CST)
-! return !bcmp ((char *) &TREE_REAL_CST (arg0),
-! (char *) &TREE_REAL_CST (arg1),
-! sizeof (REAL_VALUE_TYPE));
-
- if (only_const)
- return 0;
-
-- if (arg0 == arg1)
-- return 1;
--
-- if (TREE_CODE (arg0) != TREE_CODE (arg1))
-- return 0;
-- /* This is needed for conversions and for COMPONENT_REF.
-- Might as well play it safe and always test this. */
-- if (TYPE_MODE (TREE_TYPE (arg0)) != TYPE_MODE (TREE_TYPE (arg1)))
-- return 0;
--
- switch (TREE_CODE_CLASS (TREE_CODE (arg0)))
- {
---- 1652,1705 ----
- STRIP_NOPS (arg1);
-
-! if (TREE_CODE (arg0) != TREE_CODE (arg1)
-! /* This is needed for conversions and for COMPONENT_REF.
-! Might as well play it safe and always test this. */
-! || TYPE_MODE (TREE_TYPE (arg0)) != TYPE_MODE (TREE_TYPE (arg1)))
- return 0;
-
-! /* If ARG0 and ARG1 are the same SAVE_EXPR, they are necessarily equal.
-! We don't care about side effects in that case because the SAVE_EXPR
-! takes care of that for us. In all other cases, two expressions are
-! equal if they have no side effects. If we have two identical
-! expressions with side effects that should be treated the same due
-! to the only side effects being identical SAVE_EXPR's, that will
-! be detected in the recursive calls below. */
-! if (arg0 == arg1 && ! only_const
-! && (TREE_CODE (arg0) == SAVE_EXPR
-! || (! TREE_SIDE_EFFECTS (arg0) && ! TREE_SIDE_EFFECTS (arg1))))
- return 1;
-
-! /* Next handle constant cases, those for which we can return 1 even
-! if ONLY_CONST is set. */
-! if (TREE_CONSTANT (arg0) && TREE_CONSTANT (arg1))
-! switch (TREE_CODE (arg0))
-! {
-! case INTEGER_CST:
-! return (TREE_INT_CST_LOW (arg0) == TREE_INT_CST_LOW (arg1)
-! && TREE_INT_CST_HIGH (arg0) == TREE_INT_CST_HIGH (arg1));
-!
-! case REAL_CST:
-! return REAL_VALUES_EQUAL (TREE_REAL_CST (arg0), TREE_REAL_CST (arg1));
-!
-! case COMPLEX_CST:
-! return (operand_equal_p (TREE_REALPART (arg0), TREE_REALPART (arg1),
-! only_const)
-! && operand_equal_p (TREE_IMAGPART (arg0), TREE_IMAGPART (arg1),
-! only_const));
-!
-! case STRING_CST:
-! return (TREE_STRING_LENGTH (arg0) == TREE_STRING_LENGTH (arg1)
-! && ! strncmp (TREE_STRING_POINTER (arg0),
-! TREE_STRING_POINTER (arg1),
-! TREE_STRING_LENGTH (arg0)));
-!
-! case ADDR_EXPR:
-! return operand_equal_p (TREE_OPERAND (arg0, 0), TREE_OPERAND (arg1, 0),
-! 0);
-! }
-
- if (only_const)
- return 0;
-
- switch (TREE_CODE_CLASS (TREE_CODE (arg0)))
- {
-*************** operand_equal_p (arg0, arg1, only_const)
-*** 1698,1705 ****
- case '<':
- case '2':
-! return (operand_equal_p (TREE_OPERAND (arg0, 0),
-! TREE_OPERAND (arg1, 0), 0)
- && operand_equal_p (TREE_OPERAND (arg0, 1),
-! TREE_OPERAND (arg1, 1), 0));
-
- case 'r':
---- 1716,1735 ----
- case '<':
- case '2':
-! if (operand_equal_p (TREE_OPERAND (arg0, 0), TREE_OPERAND (arg1, 0), 0)
-! && operand_equal_p (TREE_OPERAND (arg0, 1), TREE_OPERAND (arg1, 1),
-! 0))
-! return 1;
-!
-! /* For commutative ops, allow the other order. */
-! return ((TREE_CODE (arg0) == PLUS_EXPR || TREE_CODE (arg0) == MULT_EXPR
-! || TREE_CODE (arg0) == MIN_EXPR || TREE_CODE (arg0) == MAX_EXPR
-! || TREE_CODE (arg0) == BIT_IOR_EXPR
-! || TREE_CODE (arg0) == BIT_XOR_EXPR
-! || TREE_CODE (arg0) == BIT_AND_EXPR
-! || TREE_CODE (arg0) == NE_EXPR || TREE_CODE (arg0) == EQ_EXPR)
-! && operand_equal_p (TREE_OPERAND (arg0, 0),
-! TREE_OPERAND (arg1, 1), 0)
- && operand_equal_p (TREE_OPERAND (arg0, 1),
-! TREE_OPERAND (arg1, 0), 0));
-
- case 'r':
-*************** optimize_bit_field_compare (code, compar
-*** 2212,2215 ****
---- 2242,2246 ----
- int lunsignedp, runsignedp;
- int lvolatilep = 0, rvolatilep = 0;
-+ int alignment;
- tree linner, rinner;
- tree mask;
-*************** optimize_bit_field_compare (code, compar
-*** 2220,2224 ****
- extraction at all and so can do nothing. */
- linner = get_inner_reference (lhs, &lbitsize, &lbitpos, &offset, &lmode,
-! &lunsignedp, &lvolatilep);
- if (linner == lhs || lbitsize == GET_MODE_BITSIZE (lmode) || lbitsize < 0
- || offset != 0)
---- 2251,2255 ----
- extraction at all and so can do nothing. */
- linner = get_inner_reference (lhs, &lbitsize, &lbitpos, &offset, &lmode,
-! &lunsignedp, &lvolatilep, &alignment);
- if (linner == lhs || lbitsize == GET_MODE_BITSIZE (lmode) || lbitsize < 0
- || offset != 0)
-*************** optimize_bit_field_compare (code, compar
-*** 2229,2234 ****
- /* If this is not a constant, we can only do something if bit positions,
- sizes, and signedness are the same. */
-! rinner = get_inner_reference (rhs, &rbitsize, &rbitpos, &offset,
-! &rmode, &runsignedp, &rvolatilep);
-
- if (rinner == rhs || lbitpos != rbitpos || lbitsize != rbitsize
---- 2260,2265 ----
- /* If this is not a constant, we can only do something if bit positions,
- sizes, and signedness are the same. */
-! rinner = get_inner_reference (rhs, &rbitsize, &rbitpos, &offset, &rmode,
-! &runsignedp, &rvolatilep, &alignment);
-
- if (rinner == rhs || lbitpos != rbitpos || lbitsize != rbitsize
-*************** decode_field_reference (exp, pbitsize, p
-*** 2403,2406 ****
---- 2434,2438 ----
- tree unsigned_type;
- int precision;
-+ int alignment;
-
- /* All the optimizations using this function assume integer fields.
-*************** decode_field_reference (exp, pbitsize, p
-*** 2423,2427 ****
-
- inner = get_inner_reference (exp, pbitsize, pbitpos, &offset, pmode,
-! punsignedp, pvolatilep);
- if ((inner == exp && and_mask == 0)
- || *pbitsize < 0 || offset != 0)
---- 2455,2459 ----
-
- inner = get_inner_reference (exp, pbitsize, pbitpos, &offset, pmode,
-! punsignedp, pvolatilep, &alignment);
- if ((inner == exp && and_mask == 0)
- || *pbitsize < 0 || offset != 0)
-*************** strip_compound_expr (t, s)
-*** 3065,3068 ****
---- 3097,3200 ----
- }
-
-+ /* Determine if first argument is a multiple of second argument.
-+ Return 0 if it is not, or is not easily determined to so be.
-+
-+ An example of the sort of thing we care about (at this point --
-+ this routine could surely be made more general, and expanded
-+ to do what the *_DIV_EXPR's fold() cases do now) is discovering
-+ that
-+
-+ SAVE_EXPR (I) * SAVE_EXPR (J * 8)
-+
-+ is a multiple of
-+
-+ SAVE_EXPR (J * 8)
-+
-+ when we know that the two `SAVE_EXPR (J * 8)' nodes are the
-+ same node (which means they will have the same value at run
-+ time, even though we don't know when they'll be assigned).
-+
-+ This code also handles discovering that
-+
-+ SAVE_EXPR (I) * SAVE_EXPR (J * 8)
-+
-+ is a multiple of
-+
-+ 8
-+
-+ (of course) so we don't have to worry about dealing with a
-+ possible remainder.
-+
-+ Note that we _look_ inside a SAVE_EXPR only to determine
-+ how it was calculated; it is not safe for fold() to do much
-+ of anything else with the internals of a SAVE_EXPR, since
-+ fold() cannot know when it will be evaluated at run time.
-+ For example, the latter example above _cannot_ be implemented
-+ as
-+
-+ SAVE_EXPR (I) * J
-+
-+ or any variant thereof, since the value of J at evaluation time
-+ of the original SAVE_EXPR is not necessarily the same at the time
-+ the new expression is evaluated. The only optimization of this
-+ sort that would be valid is changing
-+
-+ SAVE_EXPR (I) * SAVE_EXPR (SAVE_EXPR (J) * 8)
-+ divided by
-+ 8
-+
-+ to
-+
-+ SAVE_EXPR (I) * SAVE_EXPR (J)
-+
-+ (where the same SAVE_EXPR (J) is used in the original and the
-+ transformed version). */
-+
-+ static int
-+ multiple_of_p (type, top, bottom)
-+ tree type;
-+ tree top;
-+ tree bottom;
-+ {
-+ if (operand_equal_p (top, bottom, 0))
-+ return 1;
-+
-+ if (TREE_CODE (type) != INTEGER_TYPE)
-+ return 0;
-+
-+ switch (TREE_CODE (top))
-+ {
-+ case MULT_EXPR:
-+ return (multiple_of_p (type, TREE_OPERAND (top, 0), bottom)
-+ || multiple_of_p (type, TREE_OPERAND (top, 1), bottom));
-+
-+ case PLUS_EXPR:
-+ case MINUS_EXPR:
-+ return (multiple_of_p (type, TREE_OPERAND (top, 0), bottom)
-+ && multiple_of_p (type, TREE_OPERAND (top, 1), bottom));
-+
-+ case NOP_EXPR:
-+ /* Punt if conversion from non-integral or wider integral type. */
-+ if ((TREE_CODE (TREE_TYPE (TREE_OPERAND (top, 0))) != INTEGER_TYPE)
-+ || (TYPE_PRECISION (type)
-+ < TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (top, 0)))))
-+ return 0;
-+ /* Fall through. */
-+ case SAVE_EXPR:
-+ return multiple_of_p (type, TREE_OPERAND (top, 0), bottom);
-+
-+ case INTEGER_CST:
-+ if ((TREE_CODE (bottom) != INTEGER_CST)
-+ || (tree_int_cst_sgn (top) < 0)
-+ || (tree_int_cst_sgn (bottom) < 0))
-+ return 0;
-+ return integer_zerop (const_binop (TRUNC_MOD_EXPR,
-+ top, bottom, 0));
-+
-+ default:
-+ return 0;
-+ }
-+ }
-+
- /* Perform constant folding and related simplification of EXPR.
- The related simplifications include x*1 => x, x*0 => 0, etc.,
-*************** fold (expr)
-*** 3611,3615 ****
- TREE_OPERAND (arg0, 1))));
- else if (TREE_CODE (arg0) == COMPLEX_CST)
-! return build_complex (TREE_OPERAND (arg0, 0),
- fold (build1 (NEGATE_EXPR,
- TREE_TYPE (TREE_TYPE (arg0)),
---- 3743,3747 ----
- TREE_OPERAND (arg0, 1))));
- else if (TREE_CODE (arg0) == COMPLEX_CST)
-! return build_complex (type, TREE_OPERAND (arg0, 0),
- fold (build1 (NEGATE_EXPR,
- TREE_TYPE (TREE_TYPE (arg0)),
-*************** fold (expr)
-*** 4014,4018 ****
- return non_lvalue (convert (type, arg0));
- if (integer_zerop (arg1))
-! return t;
-
- /* If we have ((a / C1) / C2) where both division are the same type, try
---- 4146,4166 ----
- return non_lvalue (convert (type, arg0));
- if (integer_zerop (arg1))
-! {
-! if (extra_warnings)
-! warning ("integer division by zero");
-! return t;
-! }
-!
-! /* If arg0 is a multiple of arg1, then rewrite to the fastest div
-! operation, EXACT_DIV_EXPR. Otherwise, handle folding of
-! general divide. Note that only CEIL_DIV_EXPR is rewritten now,
-! only because the others seem to be faster in some cases, e.g. the
-! nonoptimized TRUNC_DIV_EXPR or FLOOR_DIV_EXPR on DEC Alpha. This
-! is probably just due to more work being done on it in expmed.c than
-! on EXACT_DIV_EXPR, and could presumably be fixed, since
-! EXACT_DIV_EXPR should _never_ be slower than *_DIV_EXPR. */
-! if ((code == CEIL_DIV_EXPR)
-! && multiple_of_p (type, arg0, arg1))
-! return fold (build (EXACT_DIV_EXPR, type, arg0, arg1));
-
- /* If we have ((a / C1) / C2) where both division are the same type, try
-*************** fold (expr)
-*** 4049,4053 ****
- tree xarg0 = arg0;
-
-! if (TREE_CODE (xarg0) == SAVE_EXPR)
- have_save_expr = 1, xarg0 = TREE_OPERAND (xarg0, 0);
-
---- 4197,4201 ----
- tree xarg0 = arg0;
-
-! if (TREE_CODE (xarg0) == SAVE_EXPR && SAVE_EXPR_RTL (xarg0) == 0)
- have_save_expr = 1, xarg0 = TREE_OPERAND (xarg0, 0);
-
-*************** fold (expr)
-*** 4067,4071 ****
- }
-
-! if (TREE_CODE (xarg0) == SAVE_EXPR)
- have_save_expr = 1, xarg0 = TREE_OPERAND (xarg0, 0);
-
---- 4215,4219 ----
- }
-
-! if (TREE_CODE (xarg0) == SAVE_EXPR && SAVE_EXPR_RTL (xarg0) == 0)
- have_save_expr = 1, xarg0 = TREE_OPERAND (xarg0, 0);
-
-*************** fold (expr)
-*** 5050,5054 ****
- case COMPLEX_EXPR:
- if (wins)
-! return build_complex (arg0, arg1);
- return t;
-
---- 5198,5202 ----
- case COMPLEX_EXPR:
- if (wins)
-! return build_complex (type, arg0, arg1);
- return t;
-
-diff -rcp2N gcc-2.7.2.2/function.c g77-new/function.c
-*** gcc-2.7.2.2/function.c Sun Nov 26 14:50:26 1995
---- g77-new/function.c Sun Aug 10 18:47:24 1997
-*************** free_temps_for_rtl_expr (t)
-*** 1184,1187 ****
---- 1184,1202 ----
- }
-
-+ /* Mark all temporaries ever allocated in this functon as not suitable
-+ for reuse until the current level is exited. */
-+
-+ void
-+ mark_all_temps_used ()
-+ {
-+ struct temp_slot *p;
-+
-+ for (p = temp_slots; p; p = p->next)
-+ {
-+ p->in_use = 1;
-+ p->level = MIN (p->level, temp_slot_level);
-+ }
-+ }
-+
- /* Push deeper into the nesting level for stack temporaries. */
-
-*************** pop_temp_slots ()
-*** 1208,1211 ****
---- 1223,1237 ----
- temp_slot_level--;
- }
-+
-+ /* Initialize temporary slots. */
-+
-+ void
-+ init_temp_slots ()
-+ {
-+ /* We have not allocated any temporaries yet. */
-+ temp_slots = 0;
-+ temp_slot_level = 0;
-+ target_temp_slot_level = 0;
-+ }
-
- /* Retroactively move an auto variable from a register to a stack slot.
-*************** instantiate_virtual_regs_1 (loc, object,
-*** 2838,2842 ****
- case MEM:
- /* Most cases of MEM that convert to valid addresses have already been
-! handled by our scan of regno_reg_rtx. The only special handling we
- need here is to make a copy of the rtx to ensure it isn't being
- shared if we have to change it to a pseudo.
---- 2864,2868 ----
- case MEM:
- /* Most cases of MEM that convert to valid addresses have already been
-! handled by our scan of decls. The only special handling we
- need here is to make a copy of the rtx to ensure it isn't being
- shared if we have to change it to a pseudo.
-*************** instantiate_virtual_regs_1 (loc, object,
-*** 2896,2900 ****
- has less restrictions on an address that some other insn.
- In that case, we will modify the shared address. This case
-! doesn't seem very likely, though. */
-
- if (instantiate_virtual_regs_1 (&XEXP (x, 0),
---- 2922,2928 ----
- has less restrictions on an address that some other insn.
- In that case, we will modify the shared address. This case
-! doesn't seem very likely, though. One case where this could
-! happen is in the case of a USE or CLOBBER reference, but we
-! take care of that below. */
-
- if (instantiate_virtual_regs_1 (&XEXP (x, 0),
-*************** instantiate_virtual_regs_1 (loc, object,
-*** 2909,2914 ****
-
- /* Fall through to generic unary operation case. */
-- case USE:
-- case CLOBBER:
- case SUBREG:
- case STRICT_LOW_PART:
---- 2937,2940 ----
-*************** instantiate_virtual_regs_1 (loc, object,
-*** 2927,2930 ****
---- 2953,2973 ----
- goto restart;
-
-+ case USE:
-+ case CLOBBER:
-+ /* If the operand is a MEM, see if the change is a valid MEM. If not,
-+ go ahead and make the invalid one, but do it to a copy. For a REG,
-+ just make the recursive call, since there's no chance of a problem. */
-+
-+ if ((GET_CODE (XEXP (x, 0)) == MEM
-+ && instantiate_virtual_regs_1 (&XEXP (XEXP (x, 0), 0), XEXP (x, 0),
-+ 0))
-+ || (GET_CODE (XEXP (x, 0)) == REG
-+ && instantiate_virtual_regs_1 (&XEXP (x, 0), 0, 0)))
-+ return 1;
-+
-+ XEXP (x, 0) = copy_rtx (XEXP (x, 0));
-+ loc = &XEXP (x, 0);
-+ goto restart;
-+
- case REG:
- /* Try to replace with a PLUS. If that doesn't work, compute the sum
-*************** assign_parms (fndecl, second_time)
-*** 3404,3409 ****
-
- /* If this is a memory ref that contains aggregate components,
-! mark it as such for cse and loop optimize. */
- MEM_IN_STRUCT_P (stack_parm) = aggregate;
- }
-
---- 3447,3454 ----
-
- /* If this is a memory ref that contains aggregate components,
-! mark it as such for cse and loop optimize. Likewise if it
-! is readonly. */
- MEM_IN_STRUCT_P (stack_parm) = aggregate;
-+ RTX_UNCHANGING_P (stack_parm) = TREE_READONLY (parm);
- }
-
-*************** assign_parms (fndecl, second_time)
-*** 3627,3631 ****
-
- parmreg = gen_reg_rtx (promoted_nominal_mode);
-! REG_USERVAR_P (parmreg) = 1;
-
- /* If this was an item that we received a pointer to, set DECL_RTL
---- 3672,3676 ----
-
- parmreg = gen_reg_rtx (promoted_nominal_mode);
-! mark_user_reg (parmreg);
-
- /* If this was an item that we received a pointer to, set DECL_RTL
-*************** assign_parms (fndecl, second_time)
-*** 3695,3699 ****
- Pmode above. We must use the actual mode of the parm. */
- parmreg = gen_reg_rtx (TYPE_MODE (TREE_TYPE (parm)));
-! REG_USERVAR_P (parmreg) = 1;
- emit_move_insn (parmreg, DECL_RTL (parm));
- DECL_RTL (parm) = parmreg;
---- 3740,3744 ----
- Pmode above. We must use the actual mode of the parm. */
- parmreg = gen_reg_rtx (TYPE_MODE (TREE_TYPE (parm)));
-! mark_user_reg (parmreg);
- emit_move_insn (parmreg, DECL_RTL (parm));
- DECL_RTL (parm) = parmreg;
-*************** init_function_start (subr, filename, lin
-*** 4814,4821 ****
- rtl_expr_chain = 0;
-
-! /* We have not allocated any temporaries yet. */
-! temp_slots = 0;
-! temp_slot_level = 0;
-! target_temp_slot_level = 0;
-
- /* Within function body, compute a type's size as soon it is laid out. */
---- 4859,4864 ----
- rtl_expr_chain = 0;
-
-! /* Set up to allocate temporaries. */
-! init_temp_slots ();
-
- /* Within function body, compute a type's size as soon it is laid out. */
-diff -rcp2N gcc-2.7.2.2/gcc.c g77-new/gcc.c
-*** gcc-2.7.2.2/gcc.c Tue Sep 12 17:15:11 1995
---- g77-new/gcc.c Sun Aug 10 18:47:14 1997
-*************** static int is_directory PROTO((char *,
-*** 296,300 ****
- static void validate_switches PROTO((char *));
- static void validate_all_switches PROTO((void));
-! static void give_switch PROTO((int, int));
- static int used_arg PROTO((char *, int));
- static int default_arg PROTO((char *, int));
---- 296,300 ----
- static void validate_switches PROTO((char *));
- static void validate_all_switches PROTO((void));
-! static void give_switch PROTO((int, int, int));
- static int used_arg PROTO((char *, int));
- static int default_arg PROTO((char *, int));
-*************** or with constant text in a single argume
-*** 405,408 ****
---- 405,409 ----
- name starts with `o'. %{o*} would substitute this text,
- including the space; thus, two arguments would be generated.
-+ %{^S*} likewise, but don't put a blank between a switch and any args.
- %{S*:X} substitutes X if one or more switches whose names start with -S are
- specified to CC. Note that the tail part of the -S option
-*************** process_command (argc, argv)
-*** 2828,2831 ****
---- 2829,2835 ----
- infiles[n_infiles++].name = argv[i];
- }
-+ /* -save-temps overrides -pipe, so that temp files are produced */
-+ else if (save_temps_flag && strcmp (argv[i], "-pipe") == 0)
-+ ;
- else if (argv[i][0] == '-' && argv[i][1] != 0)
- {
-*************** handle_braces (p)
-*** 3832,3835 ****
---- 3836,3844 ----
- int negate = 0;
- int suffix = 0;
-+ int include_blanks = 1;
-+
-+ if (*p == '^')
-+ /* A '^' after the open-brace means to not give blanks before args. */
-+ include_blanks = 0, ++p;
-
- if (*p == '|')
-*************** handle_braces (p)
-*** 3897,3901 ****
- if (!strncmp (switches[i].part1, filter, p - filter)
- && check_live_switch (i, p - filter))
-! give_switch (i, 0);
- }
- else
---- 3906,3910 ----
- if (!strncmp (switches[i].part1, filter, p - filter)
- && check_live_switch (i, p - filter))
-! give_switch (i, 0, include_blanks);
- }
- else
-*************** handle_braces (p)
-*** 3936,3940 ****
- do_spec_1 (string, 0, &switches[i].part1[hard_match_len]);
- /* Pass any arguments this switch has. */
-! give_switch (i, 1);
- }
-
---- 3945,3949 ----
- do_spec_1 (string, 0, &switches[i].part1[hard_match_len]);
- /* Pass any arguments this switch has. */
-! give_switch (i, 1, 1);
- }
-
-*************** handle_braces (p)
-*** 3980,3984 ****
- if (*p == '}')
- {
-! give_switch (i, 0);
- }
- else
---- 3989,3993 ----
- if (*p == '}')
- {
-! give_switch (i, 0, include_blanks);
- }
- else
-*************** check_live_switch (switchnum, prefix_len
-*** 4081,4090 ****
- This cannot fail since it never finishes a command line.
-
-! If OMIT_FIRST_WORD is nonzero, then we omit .part1 of the argument. */
-
- static void
-! give_switch (switchnum, omit_first_word)
- int switchnum;
- int omit_first_word;
- {
- if (!omit_first_word)
---- 4090,4103 ----
- This cannot fail since it never finishes a command line.
-
-! If OMIT_FIRST_WORD is nonzero, then we omit .part1 of the argument.
-!
-! If INCLUDE_BLANKS is nonzero, then we include blanks before each argument
-! of the switch. */
-
- static void
-! give_switch (switchnum, omit_first_word, include_blanks)
- int switchnum;
- int omit_first_word;
-+ int include_blanks;
- {
- if (!omit_first_word)
-*************** give_switch (switchnum, omit_first_word)
-*** 4093,4097 ****
- do_spec_1 (switches[switchnum].part1, 1, NULL_PTR);
- }
-! do_spec_1 (" ", 0, NULL_PTR);
- if (switches[switchnum].args != 0)
- {
---- 4106,4110 ----
- do_spec_1 (switches[switchnum].part1, 1, NULL_PTR);
- }
-!
- if (switches[switchnum].args != 0)
- {
-*************** give_switch (switchnum, omit_first_word)
-*** 4099,4106 ****
- for (p = switches[switchnum].args; *p; p++)
- {
- do_spec_1 (*p, 1, NULL_PTR);
-- do_spec_1 (" ", 0, NULL_PTR);
- }
- }
- switches[switchnum].valid = 1;
- }
---- 4112,4122 ----
- for (p = switches[switchnum].args; *p; p++)
- {
-+ if (include_blanks)
-+ do_spec_1 (" ", 0, NULL_PTR);
- do_spec_1 (*p, 1, NULL_PTR);
- }
- }
-+
-+ do_spec_1 (" ", 0, NULL_PTR);
- switches[switchnum].valid = 1;
- }
-diff -rcp2N gcc-2.7.2.2/gcc.texi g77-new/gcc.texi
-*** gcc-2.7.2.2/gcc.texi Thu Feb 20 19:24:19 1997
---- g77-new/gcc.texi Thu Jul 10 20:08:58 1997
-*************** original English.
-*** 149,152 ****
---- 149,153 ----
- @sp 3
- @center Last updated 29 June 1996
-+ @center (Revised for GNU Fortran 1997-01-10)
- @sp 1
- @c The version number appears twice more in this file.
-diff -rcp2N gcc-2.7.2.2/glimits.h g77-new/glimits.h
-*** gcc-2.7.2.2/glimits.h Wed Sep 29 17:30:54 1993
---- g77-new/glimits.h Thu Jul 10 20:08:58 1997
-***************
-*** 64,68 ****
- (Same as `int'). */
- #ifndef __LONG_MAX__
-! #define __LONG_MAX__ 2147483647L
- #endif
- #undef LONG_MIN
---- 64,72 ----
- (Same as `int'). */
- #ifndef __LONG_MAX__
-! # ifndef __alpha__
-! # define __LONG_MAX__ 2147483647L
-! # else
-! # define __LONG_MAX__ 9223372036854775807LL
-! # endif /* __alpha__ */
- #endif
- #undef LONG_MIN
-diff -rcp2N gcc-2.7.2.2/integrate.c g77-new/integrate.c
-*** gcc-2.7.2.2/integrate.c Fri Oct 20 18:48:13 1995
---- g77-new/integrate.c Sun Aug 10 18:46:31 1997
-*************** static rtx copy_for_inline PROTO((rtx));
-*** 67,70 ****
---- 67,71 ----
- static void integrate_parm_decls PROTO((tree, struct inline_remap *, rtvec));
- static void integrate_decl_tree PROTO((tree, int, struct inline_remap *));
-+ static void save_constants_in_decl_trees PROTO ((tree));
- static void subst_constants PROTO((rtx *, rtx, struct inline_remap *));
- static void restore_constants PROTO((rtx *));
-*************** save_for_inline_copying (fndecl)
-*** 435,438 ****
---- 436,443 ----
- }
-
-+ /* Also scan all decls, and replace any constant pool references with the
-+ actual constant. */
-+ save_constants_in_decl_trees (DECL_INITIAL (fndecl));
-+
- /* Clear out the constant pool so that we can recreate it with the
- copied constants below. */
-*************** save_for_inline_nocopy (fndecl)
-*** 781,784 ****
---- 786,793 ----
- }
-
-+ /* Also scan all decls, and replace any constant pool references with the
-+ actual constant. */
-+ save_constants_in_decl_trees (DECL_INITIAL (fndecl));
-+
- /* We have now allocated all that needs to be allocated permanently
- on the rtx obstack. Set our high-water mark, so that we
-*************** expand_inline_function (fndecl, parms, t
-*** 1571,1575 ****
- if (GET_CODE (XEXP (loc, 0)) == REG)
- {
-! temp = force_reg (Pmode, structure_value_addr);
- map->reg_map[REGNO (XEXP (loc, 0))] = temp;
- if ((CONSTANT_P (structure_value_addr)
---- 1580,1585 ----
- if (GET_CODE (XEXP (loc, 0)) == REG)
- {
-! temp = force_reg (Pmode,
-! force_operand (structure_value_addr, NULL_RTX));
- map->reg_map[REGNO (XEXP (loc, 0))] = temp;
- if ((CONSTANT_P (structure_value_addr)
-*************** integrate_decl_tree (let, level, map)
-*** 2029,2032 ****
---- 2039,2059 ----
- }
- }
-+ }
-+
-+ /* Given a BLOCK node LET, search for all DECL_RTL fields, and pass them
-+ through save_constants. */
-+
-+ static void
-+ save_constants_in_decl_trees (let)
-+ tree let;
-+ {
-+ tree t;
-+
-+ for (t = BLOCK_VARS (let); t; t = TREE_CHAIN (t))
-+ if (DECL_RTL (t) != 0)
-+ save_constants (&DECL_RTL (t));
-+
-+ for (t = BLOCK_SUBBLOCKS (let); t; t = TREE_CHAIN (t))
-+ save_constants_in_decl_trees (t);
- }
-
-diff -rcp2N gcc-2.7.2.2/invoke.texi g77-new/invoke.texi
-*** gcc-2.7.2.2/invoke.texi Tue Oct 3 11:40:43 1995
---- g77-new/invoke.texi Thu Jul 10 20:09:00 1997
-***************
-*** 1,3 ****
-! @c Copyright (C) 1988, 89, 92, 93, 94, 1995 Free Software Foundation, Inc.
- @c This is part of the GCC manual.
- @c For copying conditions, see the file gcc.texi.
---- 1,3 ----
-! @c Copyright (C) 1988, 89, 92-95, 1997 Free Software Foundation, Inc.
- @c This is part of the GCC manual.
- @c For copying conditions, see the file gcc.texi.
-*************** in the following sections.
-*** 149,152 ****
---- 149,153 ----
- -fschedule-insns2 -fstrength-reduce -fthread-jumps
- -funroll-all-loops -funroll-loops
-+ -fmove-all-movables -freduce-all-givs -frerun-loop-opt
- -O -O0 -O1 -O2 -O3
- @end smallexample
-*************** in addition to the above:
-*** 331,334 ****
---- 332,337 ----
- -fshort-double -fvolatile -fvolatile-global
- -fverbose-asm -fpack-struct +e0 +e1
-+ -fargument-alias -fargument-noalias
-+ -fargument-noalias-global
- @end smallexample
- @end table
-*************** Print extra warning messages for these e
-*** 1253,1256 ****
---- 1256,1304 ----
-
- @itemize @bullet
-+ @cindex division by zero
-+ @cindex zero, division by
-+ @item
-+ An integer division by zero is detected.
-+
-+ Some cases of division by zero might occur as the result
-+ of using so-called ``safe'' macros.
-+ For example:
-+
-+ @smallexample
-+ #define BUCKETS(b) (((b) != NULL) ? (b)->buckets : 0)
-+ @dots{...}
-+ i = j / BUCKETS(b);
-+ @end smallexample
-+
-+ Although analysis of the context of the above code could
-+ prove that @samp{b} is never null when it is executed,
-+ the division-by-zero warning is still useful, because
-+ @code{gcc} generates code to do the division by zero at
-+ run time so as to generate a run-time fault,
-+ and tidy programmers will want to find ways to prevent
-+ this needless code from being generated.
-+
-+ Note that @code{gcc} transforms expressions so as to find
-+ opportunities for performing expensive operations
-+ (such as division) at compile time instead of generating
-+ code to perform them at run time.
-+ For example, @code{gcc} transforms:
-+
-+ @smallexample
-+ 2 / (i == 0)
-+ @end smallexample
-+
-+ into:
-+
-+ @smallexample
-+ (i == 0) ? (2 / 1) : (2 / 0)
-+ @end smallexample
-+
-+ As a result, the division-by-zero warning might occur
-+ in contexts where the divisor seems to be a non-constant.
-+ It is useful in this case as well, because programmers might want
-+ to clean up the code so the compiled code does not include
-+ dead code to divide by zero.
-+
- @cindex @code{longjmp} warnings
- @item
-*************** and usually makes programs run more slow
-*** 1941,1944 ****
---- 1989,2037 ----
- implies @samp{-fstrength-reduce} as well as @samp{-frerun-cse-after-loop}.
-
-+ @item -fmove-all-movables
-+ Forces all invariant computations in loops to be moved
-+ outside the loop.
-+ This option is provided primarily to improve performance
-+ for some Fortran code, though it might improve code written
-+ in other languages.
-+
-+ @emph{Note:} When compiling programs written in Fortran,
-+ this option is enabled by default.
-+
-+ Analysis of Fortran code optimization and the resulting
-+ optimizations triggered by this option, and the
-+ @samp{-freduce-all-givs} and @samp{-frerun-loop-opt}
-+ options as well, were
-+ contributed by Toon Moene (@code{toon@@moene.indiv.nluug.nl}).
-+
-+ These three options are intended to be removed someday, once
-+ they have helped determine the efficacy of various
-+ approaches to improving the performance of Fortran code.
-+
-+ Please let us (@code{fortran@@gnu.ai.mit.edu})
-+ know how use of these options affects
-+ the performance of your production code.
-+ We're very interested in code that runs @emph{slower}
-+ when these options are @emph{enabled}.
-+
-+ @item -freduce-all-givs
-+ Forces all general-induction variables in loops to be
-+ strength-reduced.
-+ This option is provided primarily to improve performance
-+ for some Fortran code, though it might improve code written
-+ in other languages.
-+
-+ @emph{Note:} When compiling programs written in Fortran,
-+ this option is enabled by default.
-+
-+ @item -frerun-loop-opt
-+ Runs loop optimizations a second time.
-+ This option is provided primarily to improve performance
-+ for some Fortran code, though it might improve code written
-+ in other languages.
-+
-+ @emph{Note:} When compiling programs written in Fortran,
-+ this option is enabled by default.
-+
- @item -fno-peephole
- Disable any machine-specific peephole optimizations.
-*************** compilation).
-*** 4229,4232 ****
---- 4322,4397 ----
- With @samp{+e1}, G++ actually generates the code implementing virtual
- functions defined in the code, and makes them publicly visible.
-+
-+ @cindex aliasing of parameters
-+ @cindex parameters, aliased
-+ @item -fargument-alias
-+ @item -fargument-noalias
-+ @item -fargument-noalias-global
-+ Specify the possible relationships among parameters and between
-+ parameters and global data.
-+
-+ @samp{-fargument-alias} specifies that arguments (parameters) may
-+ alias each other and may alias global storage.
-+ @samp{-fargument-noalias} specifies that arguments do not alias
-+ each other, but may alias global storage.
-+ @samp{-fargument-noalias-global} specifies that arguments do not
-+ alias each other and do not alias global storage.
-+
-+ For code written in C, C++, and Objective-C, @samp{-fargument-alias}
-+ is the default.
-+ For code written in Fortran, @samp{-fargument-noalias-global} is
-+ the default, though this is pertinent only on systems where
-+ @code{g77} is installed.
-+ (See the documentation for other compilers for information on the
-+ defaults for their respective languages.)
-+
-+ Normally, @code{gcc} assumes that a write through a pointer
-+ passed as a parameter to the current function might modify a
-+ value pointed to by another pointer passed as a parameter, or
-+ in global storage.
-+
-+ For example, consider this code:
-+
-+ @example
-+ void x(int *i, int *j)
-+ @{
-+ extern int k;
-+
-+ ++*i;
-+ ++*j;
-+ ++k;
-+ @}
-+ @end example
-+
-+ When compiling the above function, @code{gcc} assumes that @samp{i} might
-+ be a pointer to the same variable as @samp{j}, and that either @samp{i},
-+ @samp{j}, or both might be a pointer to @samp{k}.
-+
-+ Therefore, @code{gcc} does not assume it can generate code to read
-+ @samp{*i}, @samp{*j}, and @samp{k} into separate registers, increment
-+ each register, then write the incremented values back out.
-+
-+ Instead, @code{gcc} must generate code that reads @samp{*i},
-+ increments it, and writes it back before reading @samp{*j},
-+ in case @samp{i} and @samp{j} are aliased, and, similarly,
-+ that writes @samp{*j} before reading @samp{k}.
-+ The result is code that, on many systems, takes longer to execute,
-+ due to the way many processors schedule instruction execution.
-+
-+ Compiling the above code with the @samp{-fargument-noalias} option
-+ allows @code{gcc} to assume that @samp{i} and @samp{j} do not alias
-+ each other, but either might alias @samp{k}.
-+
-+ Compiling the above code with the @samp{-fargument-noalias-global}
-+ option allows @code{gcc} to assume that no combination of @samp{i},
-+ @samp{j}, and @samp{k} are aliases for each other.
-+
-+ @emph{Note:} Use the @samp{-fargument-noalias} and
-+ @samp{-fargument-noalias-global} options with care.
-+ While they can result in faster executables, they can
-+ also result in executables with subtle bugs, bugs that
-+ show up only when compiled for specific target systems,
-+ or bugs that show up only when compiled by specific versions
-+ of @code{g77}.
- @end table
-
-diff -rcp2N gcc-2.7.2.2/libgcc2.c g77-new/libgcc2.c
-*** gcc-2.7.2.2/libgcc2.c Sun Nov 26 14:39:21 1995
---- g77-new/libgcc2.c Sun Aug 10 18:46:07 1997
-*************** __gcc_bcmp (s1, s2, size)
-*** 1193,1196 ****
---- 1193,1201 ----
- #endif
-
-+ #ifdef L__dummy
-+ void
-+ __dummy () {}
-+ #endif
-+
- #ifdef L_varargs
- #ifdef __i860__
-diff -rcp2N gcc-2.7.2.2/local-alloc.c g77-new/local-alloc.c
-*** gcc-2.7.2.2/local-alloc.c Mon Aug 21 13:15:44 1995
---- g77-new/local-alloc.c Sun Aug 10 18:46:10 1997
-*************** static int this_insn_number;
-*** 243,246 ****
---- 243,250 ----
- static rtx this_insn;
-
-+ /* Used to communicate changes made by update_equiv_regs to
-+ memref_referenced_p. */
-+ static rtx *reg_equiv_replacement;
-+
- static void alloc_qty PROTO((int, enum machine_mode, int, int));
- static void alloc_qty_for_scratch PROTO((rtx, int, rtx, int, int));
-*************** validate_equiv_mem_from_store (dest, set
-*** 545,549 ****
- && reg_overlap_mentioned_p (dest, equiv_mem))
- || (GET_CODE (dest) == MEM
-! && true_dependence (dest, equiv_mem)))
- equiv_mem_modified = 1;
- }
---- 549,553 ----
- && reg_overlap_mentioned_p (dest, equiv_mem))
- || (GET_CODE (dest) == MEM
-! && true_dependence (dest, VOIDmode, equiv_mem, rtx_varies_p)))
- equiv_mem_modified = 1;
- }
-*************** memref_referenced_p (memref, x)
-*** 617,621 ****
- switch (code)
- {
-- case REG:
- case CONST_INT:
- case CONST:
---- 621,624 ----
-*************** memref_referenced_p (memref, x)
-*** 629,634 ****
- return 0;
-
- case MEM:
-! if (true_dependence (memref, x))
- return 1;
- break;
---- 632,642 ----
- return 0;
-
-+ case REG:
-+ return (reg_equiv_replacement[REGNO (x)] == 0
-+ || memref_referenced_p (memref,
-+ reg_equiv_replacement[REGNO (x)]));
-+
- case MEM:
-! if (true_dependence (memref, VOIDmode, x, rtx_varies_p))
- return 1;
- break;
-*************** optimize_reg_copy_1 (insn, dest, src)
-*** 818,827 ****
- if (sregno >= FIRST_PSEUDO_REGISTER)
- {
-! reg_live_length[sregno] -= length;
-! /* reg_live_length is only an approximation after combine
-! if sched is not run, so make sure that we still have
-! a reasonable value. */
-! if (reg_live_length[sregno] < 2)
-! reg_live_length[sregno] = 2;
- reg_n_calls_crossed[sregno] -= n_calls;
- }
---- 826,839 ----
- if (sregno >= FIRST_PSEUDO_REGISTER)
- {
-! if (reg_live_length[sregno] >= 0)
-! {
-! reg_live_length[sregno] -= length;
-! /* reg_live_length is only an approximation after
-! combine if sched is not run, so make sure that we
-! still have a reasonable value. */
-! if (reg_live_length[sregno] < 2)
-! reg_live_length[sregno] = 2;
-! }
-!
- reg_n_calls_crossed[sregno] -= n_calls;
- }
-*************** optimize_reg_copy_1 (insn, dest, src)
-*** 829,833 ****
- if (dregno >= FIRST_PSEUDO_REGISTER)
- {
-! reg_live_length[dregno] += d_length;
- reg_n_calls_crossed[dregno] += d_n_calls;
- }
---- 841,847 ----
- if (dregno >= FIRST_PSEUDO_REGISTER)
- {
-! if (reg_live_length[dregno] >= 0)
-! reg_live_length[dregno] += d_length;
-!
- reg_n_calls_crossed[dregno] += d_n_calls;
- }
-*************** update_equiv_regs ()
-*** 948,953 ****
- {
- rtx *reg_equiv_init_insn = (rtx *) alloca (max_regno * sizeof (rtx *));
-- rtx *reg_equiv_replacement = (rtx *) alloca (max_regno * sizeof (rtx *));
- rtx insn;
-
- bzero ((char *) reg_equiv_init_insn, max_regno * sizeof (rtx *));
---- 962,968 ----
- {
- rtx *reg_equiv_init_insn = (rtx *) alloca (max_regno * sizeof (rtx *));
- rtx insn;
-+
-+ reg_equiv_replacement = (rtx *) alloca (max_regno * sizeof (rtx *));
-
- bzero ((char *) reg_equiv_init_insn, max_regno * sizeof (rtx *));
-diff -rcp2N gcc-2.7.2.2/loop.c g77-new/loop.c
-*** gcc-2.7.2.2/loop.c Thu Feb 20 19:24:20 1997
---- g77-new/loop.c Sun Aug 10 18:46:43 1997
-*************** int *loop_number_exit_count;
-*** 111,116 ****
- unsigned HOST_WIDE_INT loop_n_iterations;
-
-! /* Nonzero if there is a subroutine call in the current loop.
-! (unknown_address_altered is also nonzero in this case.) */
-
- static int loop_has_call;
---- 111,115 ----
- unsigned HOST_WIDE_INT loop_n_iterations;
-
-! /* Nonzero if there is a subroutine call in the current loop. */
-
- static int loop_has_call;
-*************** static char *moved_once;
-*** 160,164 ****
- here, we just turn on unknown_address_altered. */
-
-! #define NUM_STORES 20
- static rtx loop_store_mems[NUM_STORES];
-
---- 159,163 ----
- here, we just turn on unknown_address_altered. */
-
-! #define NUM_STORES 30
- static rtx loop_store_mems[NUM_STORES];
-
-*************** scan_loop (loop_start, end, nregs)
-*** 669,673 ****
- {
- temp = find_reg_note (p, REG_EQUAL, NULL_RTX);
-! if (temp && CONSTANT_P (XEXP (temp, 0)))
- src = XEXP (temp, 0), move_insn = 1;
- if (temp && find_reg_note (p, REG_RETVAL, NULL_RTX))
---- 668,673 ----
- {
- temp = find_reg_note (p, REG_EQUAL, NULL_RTX);
-! if (temp && CONSTANT_P (XEXP (temp, 0))
-! && LEGITIMATE_CONSTANT_P (XEXP (temp, 0)))
- src = XEXP (temp, 0), move_insn = 1;
- if (temp && find_reg_note (p, REG_RETVAL, NULL_RTX))
-*************** move_movables (movables, threshold, insn
-*** 1629,1632 ****
---- 1629,1633 ----
-
- if (already_moved[regno]
-+ || flag_move_all_movables
- || (threshold * savings * m->lifetime) >= insn_count
- || (m->forces && m->forces->done
-*************** prescan_loop (start, end)
-*** 2199,2203 ****
- else if (GET_CODE (insn) == CALL_INSN)
- {
-! unknown_address_altered = 1;
- loop_has_call = 1;
- }
---- 2200,2205 ----
- else if (GET_CODE (insn) == CALL_INSN)
- {
-! if (! CONST_CALL_P (insn))
-! unknown_address_altered = 1;
- loop_has_call = 1;
- }
-*************** invariant_p (x)
-*** 2777,2781 ****
- /* See if there is any dependence between a store and this load. */
- for (i = loop_store_mems_idx - 1; i >= 0; i--)
-! if (true_dependence (loop_store_mems[i], x))
- return 0;
-
---- 2779,2783 ----
- /* See if there is any dependence between a store and this load. */
- for (i = loop_store_mems_idx - 1; i >= 0; i--)
-! if (true_dependence (loop_store_mems[i], VOIDmode, x, rtx_varies_p))
- return 0;
-
-*************** strength_reduce (scan_start, end, loop_t
-*** 3821,3826 ****
- exit. */
-
-! if (v->lifetime * threshold * benefit < insn_count
-! && ! bl->reversed)
- {
- if (loop_dump_stream)
---- 3823,3828 ----
- exit. */
-
-! if ( ! flag_reduce_all_givs && v->lifetime * threshold * benefit < insn_count
-! && ! bl->reversed )
- {
- if (loop_dump_stream)
-*************** record_giv (v, insn, src_reg, dest_reg,
-*** 4375,4378 ****
---- 4377,4382 ----
- v->final_value = 0;
- v->same_insn = 0;
-+ v->unrolled = 0;
-+ v->shared = 0;
-
- /* The v->always_computable field is used in update_giv_derive, to
-*************** check_final_value (v, loop_start, loop_e
-*** 4652,4657 ****
- if (GET_CODE (p) == JUMP_INSN && JUMP_LABEL (p)
- && LABEL_NAME (JUMP_LABEL (p))
-! && ((INSN_LUID (JUMP_LABEL (p)) < INSN_LUID (v->insn)
-! && INSN_LUID (JUMP_LABEL (p)) > INSN_LUID (loop_start))
- || (INSN_LUID (JUMP_LABEL (p)) > INSN_LUID (last_giv_use)
- && INSN_LUID (JUMP_LABEL (p)) < INSN_LUID (loop_end))))
---- 4656,4664 ----
- if (GET_CODE (p) == JUMP_INSN && JUMP_LABEL (p)
- && LABEL_NAME (JUMP_LABEL (p))
-! && ((INSN_UID (JUMP_LABEL (p)) >= max_uid_for_loop)
-! || (INSN_UID (v->insn) >= max_uid_for_loop)
-! || (INSN_UID (last_giv_use) >= max_uid_for_loop)
-! || (INSN_LUID (JUMP_LABEL (p)) < INSN_LUID (v->insn)
-! && INSN_LUID (JUMP_LABEL (p)) > INSN_LUID (loop_start))
- || (INSN_LUID (JUMP_LABEL (p)) > INSN_LUID (last_giv_use)
- && INSN_LUID (JUMP_LABEL (p)) < INSN_LUID (loop_end))))
-*************** emit_iv_add_mult (b, m, a, reg, insert_b
-*** 5560,5563 ****
---- 5567,5572 ----
-
- emit_insn_before (seq, insert_before);
-+
-+ record_base_value (REGNO (reg), b);
- }
-
-diff -rcp2N gcc-2.7.2.2/loop.h g77-new/loop.h
-*** gcc-2.7.2.2/loop.h Fri Jul 14 08:23:28 1995
---- g77-new/loop.h Thu Jul 10 20:09:03 1997
-*************** struct induction
-*** 89,92 ****
---- 89,95 ----
- we won't use it to eliminate a biv, it
- would probably lose. */
-+ unsigned unrolled : 1; /* 1 if new register has been allocated in
-+ unrolled loop. */
-+ unsigned shared : 1;
- int lifetime; /* Length of life of this giv */
- int times_used; /* # times this giv is used. */
-diff -rcp2N gcc-2.7.2.2/real.c g77-new/real.c
-*** gcc-2.7.2.2/real.c Tue Aug 15 17:57:18 1995
---- g77-new/real.c Thu Jul 10 20:09:04 1997
-*************** make_nan (nan, sign, mode)
-*** 5625,5633 ****
- }
-
-! /* Convert an SFmode target `float' value to a REAL_VALUE_TYPE.
-! This is the inverse of the function `etarsingle' invoked by
- REAL_VALUE_TO_TARGET_SINGLE. */
-
- REAL_VALUE_TYPE
- ereal_from_float (f)
- HOST_WIDE_INT f;
---- 5625,5699 ----
- }
-
-! /* This is the inverse of the function `etarsingle' invoked by
- REAL_VALUE_TO_TARGET_SINGLE. */
-
- REAL_VALUE_TYPE
-+ ereal_unto_float (f)
-+ long f;
-+ {
-+ REAL_VALUE_TYPE r;
-+ unsigned EMUSHORT s[2];
-+ unsigned EMUSHORT e[NE];
-+
-+ /* Convert 32 bit integer to array of 16 bit pieces in target machine order.
-+ This is the inverse operation to what the function `endian' does. */
-+ if (REAL_WORDS_BIG_ENDIAN)
-+ {
-+ s[0] = (unsigned EMUSHORT) (f >> 16);
-+ s[1] = (unsigned EMUSHORT) f;
-+ }
-+ else
-+ {
-+ s[0] = (unsigned EMUSHORT) f;
-+ s[1] = (unsigned EMUSHORT) (f >> 16);
-+ }
-+ /* Convert and promote the target float to E-type. */
-+ e24toe (s, e);
-+ /* Output E-type to REAL_VALUE_TYPE. */
-+ PUT_REAL (e, &r);
-+ return r;
-+ }
-+
-+
-+ /* This is the inverse of the function `etardouble' invoked by
-+ REAL_VALUE_TO_TARGET_DOUBLE. */
-+
-+ REAL_VALUE_TYPE
-+ ereal_unto_double (d)
-+ long d[];
-+ {
-+ REAL_VALUE_TYPE r;
-+ unsigned EMUSHORT s[4];
-+ unsigned EMUSHORT e[NE];
-+
-+ /* Convert array of HOST_WIDE_INT to equivalent array of 16-bit pieces. */
-+ if (REAL_WORDS_BIG_ENDIAN)
-+ {
-+ s[0] = (unsigned EMUSHORT) (d[0] >> 16);
-+ s[1] = (unsigned EMUSHORT) d[0];
-+ s[2] = (unsigned EMUSHORT) (d[1] >> 16);
-+ s[3] = (unsigned EMUSHORT) d[1];
-+ }
-+ else
-+ {
-+ /* Target float words are little-endian. */
-+ s[0] = (unsigned EMUSHORT) d[0];
-+ s[1] = (unsigned EMUSHORT) (d[0] >> 16);
-+ s[2] = (unsigned EMUSHORT) d[1];
-+ s[3] = (unsigned EMUSHORT) (d[1] >> 16);
-+ }
-+ /* Convert target double to E-type. */
-+ e53toe (s, e);
-+ /* Output E-type to REAL_VALUE_TYPE. */
-+ PUT_REAL (e, &r);
-+ return r;
-+ }
-+
-+
-+ /* Convert an SFmode target `float' value to a REAL_VALUE_TYPE.
-+ This is somewhat like ereal_unto_float, but the input types
-+ for these are different. */
-+
-+ REAL_VALUE_TYPE
- ereal_from_float (f)
- HOST_WIDE_INT f;
-*************** ereal_from_float (f)
-*** 5658,5663 ****
-
- /* Convert a DFmode target `double' value to a REAL_VALUE_TYPE.
-! This is the inverse of the function `etardouble' invoked by
-! REAL_VALUE_TO_TARGET_DOUBLE.
-
- The DFmode is stored as an array of HOST_WIDE_INT in the target's
---- 5724,5729 ----
-
- /* Convert a DFmode target `double' value to a REAL_VALUE_TYPE.
-! This is somewhat like ereal_unto_double, but the input types
-! for these are different.
-
- The DFmode is stored as an array of HOST_WIDE_INT in the target's
-diff -rcp2N gcc-2.7.2.2/real.h g77-new/real.h
-*** gcc-2.7.2.2/real.h Thu Jun 15 07:57:56 1995
---- g77-new/real.h Thu Jul 10 20:09:05 1997
-*************** extern void ereal_to_decimal PROTO((REAL
-*** 152,155 ****
---- 152,157 ----
- extern int ereal_cmp PROTO((REAL_VALUE_TYPE, REAL_VALUE_TYPE));
- extern int ereal_isneg PROTO((REAL_VALUE_TYPE));
-+ extern REAL_VALUE_TYPE ereal_unto_float PROTO((long));
-+ extern REAL_VALUE_TYPE ereal_unto_double PROTO((long *));
- extern REAL_VALUE_TYPE ereal_from_float PROTO((HOST_WIDE_INT));
- extern REAL_VALUE_TYPE ereal_from_double PROTO((HOST_WIDE_INT *));
-*************** extern REAL_VALUE_TYPE real_value_trunca
-*** 197,200 ****
---- 199,208 ----
- /* IN is a REAL_VALUE_TYPE. OUT is a long. */
- #define REAL_VALUE_TO_TARGET_SINGLE(IN, OUT) ((OUT) = etarsingle ((IN)))
-+
-+ /* Inverse of REAL_VALUE_TO_TARGET_DOUBLE. */
-+ #define REAL_VALUE_UNTO_TARGET_DOUBLE(d) (ereal_unto_double (d))
-+
-+ /* Inverse of REAL_VALUE_TO_TARGET_SINGLE. */
-+ #define REAL_VALUE_UNTO_TARGET_SINGLE(f) (ereal_unto_float (f))
-
- /* d is an array of HOST_WIDE_INT that holds a double precision
-diff -rcp2N gcc-2.7.2.2/recog.c g77-new/recog.c
-*** gcc-2.7.2.2/recog.c Sat Jul 1 06:52:35 1995
---- g77-new/recog.c Sun Aug 10 18:46:55 1997
-*************** register_operand (op, mode)
-*** 872,876 ****
- REGNO (SUBREG_REG (op)))
- && (GET_MODE_SIZE (mode)
-! != GET_MODE_SIZE (GET_MODE (SUBREG_REG (op)))))
- return 0;
- #endif
---- 872,878 ----
- REGNO (SUBREG_REG (op)))
- && (GET_MODE_SIZE (mode)
-! != GET_MODE_SIZE (GET_MODE (SUBREG_REG (op))))
-! && GET_MODE_CLASS (GET_MODE (SUBREG_REG (op))) != MODE_COMPLEX_INT
-! && GET_MODE_CLASS (GET_MODE (SUBREG_REG (op))) != MODE_COMPLEX_FLOAT)
- return 0;
- #endif
-diff -rcp2N gcc-2.7.2.2/reload.c g77-new/reload.c
-*** gcc-2.7.2.2/reload.c Sat Nov 11 08:23:54 1995
---- g77-new/reload.c Sun Aug 10 04:58:03 1997
-***************
-*** 1,4 ****
- /* Search an insn for pseudo regs that must be in hard regs and are not.
-! Copyright (C) 1987, 88, 89, 92, 93, 94, 1995 Free Software Foundation, Inc.
-
- This file is part of GNU CC.
---- 1,4 ----
- /* Search an insn for pseudo regs that must be in hard regs and are not.
-! Copyright (C) 1987, 88, 89, 92-5, 1996 Free Software Foundation, Inc.
-
- This file is part of GNU CC.
-*************** static int push_secondary_reload PROTO((
-*** 292,295 ****
---- 292,296 ----
- enum machine_mode, enum reload_type,
- enum insn_code *));
-+ static enum reg_class find_valid_class PROTO((enum machine_mode, int));
- static int push_reload PROTO((rtx, rtx, rtx *, rtx *, enum reg_class,
- enum machine_mode, enum machine_mode,
-*************** static struct decomposition decompose PR
-*** 305,312 ****
- static int immune_p PROTO((rtx, rtx, struct decomposition));
- static int alternative_allows_memconst PROTO((char *, int));
-! static rtx find_reloads_toplev PROTO((rtx, int, enum reload_type, int, int));
- static rtx make_memloc PROTO((rtx, int));
- static int find_reloads_address PROTO((enum machine_mode, rtx *, rtx, rtx *,
-! int, enum reload_type, int));
- static rtx subst_reg_equivs PROTO((rtx));
- static rtx subst_indexed_address PROTO((rtx));
---- 306,313 ----
- static int immune_p PROTO((rtx, rtx, struct decomposition));
- static int alternative_allows_memconst PROTO((char *, int));
-! static rtx find_reloads_toplev PROTO((rtx, int, enum reload_type, int, int, short *));
- static rtx make_memloc PROTO((rtx, int));
- static int find_reloads_address PROTO((enum machine_mode, rtx *, rtx, rtx *,
-! int, enum reload_type, int, short *));
- static rtx subst_reg_equivs PROTO((rtx));
- static rtx subst_indexed_address PROTO((rtx));
-*************** push_secondary_reload (in_p, x, opnum, o
-*** 590,599 ****
-
- if (in_p && icode == CODE_FOR_nothing
-! && SECONDARY_MEMORY_NEEDED (class, reload_class, reload_mode))
-! get_secondary_mem (x, reload_mode, opnum, type);
-
- if (! in_p && icode == CODE_FOR_nothing
-! && SECONDARY_MEMORY_NEEDED (reload_class, class, reload_mode))
-! get_secondary_mem (x, reload_mode, opnum, type);
- #endif
- }
---- 591,600 ----
-
- if (in_p && icode == CODE_FOR_nothing
-! && SECONDARY_MEMORY_NEEDED (class, reload_class, mode))
-! get_secondary_mem (x, mode, opnum, type);
-
- if (! in_p && icode == CODE_FOR_nothing
-! && SECONDARY_MEMORY_NEEDED (reload_class, class, mode))
-! get_secondary_mem (x, mode, opnum, type);
- #endif
- }
-*************** get_secondary_mem (x, mode, opnum, type)
-*** 673,677 ****
-
- find_reloads_address (mode, NULL_PTR, XEXP (loc, 0), &XEXP (loc, 0),
-! opnum, type, 0);
- }
-
---- 674,678 ----
-
- find_reloads_address (mode, NULL_PTR, XEXP (loc, 0), &XEXP (loc, 0),
-! opnum, type, 0, NULL);
- }
-
-*************** clear_secondary_mem ()
-*** 689,692 ****
---- 690,725 ----
- #endif /* SECONDARY_MEMORY_NEEDED */
-
-+ /* Find the largest class for which every register number plus N is valid in
-+ M1 (if in range). Abort if no such class exists. */
-+
-+ static enum reg_class
-+ find_valid_class (m1, n)
-+ enum machine_mode m1;
-+ int n;
-+ {
-+ int class;
-+ int regno;
-+ enum reg_class best_class;
-+ int best_size = 0;
-+
-+ for (class = 1; class < N_REG_CLASSES; class++)
-+ {
-+ int bad = 0;
-+ for (regno = 0; regno < FIRST_PSEUDO_REGISTER && ! bad; regno++)
-+ if (TEST_HARD_REG_BIT (reg_class_contents[class], regno)
-+ && TEST_HARD_REG_BIT (reg_class_contents[class], regno + n)
-+ && ! HARD_REGNO_MODE_OK (regno + n, m1))
-+ bad = 1;
-+
-+ if (! bad && reg_class_size[class] > best_size)
-+ best_class = class, best_size = reg_class_size[class];
-+ }
-+
-+ if (best_size == 0)
-+ abort ();
-+
-+ return best_class;
-+ }
-+
- /* Record one reload that needs to be performed.
- IN is an rtx saying where the data are to be found before this instruction.
-*************** push_reload (in, out, inloc, outloc, cla
-*** 894,898 ****
- && GET_CODE (SUBREG_REG (in)) == REG
- && REGNO (SUBREG_REG (in)) < FIRST_PSEUDO_REGISTER
-! && (! HARD_REGNO_MODE_OK (REGNO (SUBREG_REG (in)), inmode)
- || (GET_MODE_SIZE (inmode) <= UNITS_PER_WORD
- && (GET_MODE_SIZE (GET_MODE (SUBREG_REG (in)))
---- 927,932 ----
- && GET_CODE (SUBREG_REG (in)) == REG
- && REGNO (SUBREG_REG (in)) < FIRST_PSEUDO_REGISTER
-! && (! HARD_REGNO_MODE_OK (REGNO (SUBREG_REG (in)) + SUBREG_WORD (in),
-! inmode)
- || (GET_MODE_SIZE (inmode) <= UNITS_PER_WORD
- && (GET_MODE_SIZE (GET_MODE (SUBREG_REG (in)))
-*************** push_reload (in, out, inloc, outloc, cla
-*** 909,913 ****
- output before the outer reload. */
- push_reload (SUBREG_REG (in), NULL_RTX, &SUBREG_REG (in), NULL_PTR,
-! GENERAL_REGS, VOIDmode, VOIDmode, 0, 0, opnum, type);
- dont_remove_subreg = 1;
- }
---- 943,948 ----
- output before the outer reload. */
- push_reload (SUBREG_REG (in), NULL_RTX, &SUBREG_REG (in), NULL_PTR,
-! find_valid_class (inmode, SUBREG_WORD (in)),
-! VOIDmode, VOIDmode, 0, 0, opnum, type);
- dont_remove_subreg = 1;
- }
-*************** push_reload (in, out, inloc, outloc, cla
-*** 982,986 ****
- && GET_CODE (SUBREG_REG (out)) == REG
- && REGNO (SUBREG_REG (out)) < FIRST_PSEUDO_REGISTER
-! && (! HARD_REGNO_MODE_OK (REGNO (SUBREG_REG (out)), outmode)
- || (GET_MODE_SIZE (outmode) <= UNITS_PER_WORD
- && (GET_MODE_SIZE (GET_MODE (SUBREG_REG (out)))
---- 1017,1022 ----
- && GET_CODE (SUBREG_REG (out)) == REG
- && REGNO (SUBREG_REG (out)) < FIRST_PSEUDO_REGISTER
-! && (! HARD_REGNO_MODE_OK (REGNO (SUBREG_REG (out)) + SUBREG_WORD (out),
-! outmode)
- || (GET_MODE_SIZE (outmode) <= UNITS_PER_WORD
- && (GET_MODE_SIZE (GET_MODE (SUBREG_REG (out)))
-*************** push_reload (in, out, inloc, outloc, cla
-*** 998,1002 ****
- dont_remove_subreg = 1;
- push_reload (SUBREG_REG (out), SUBREG_REG (out), &SUBREG_REG (out),
-! &SUBREG_REG (out), ALL_REGS, VOIDmode, VOIDmode, 0, 0,
- opnum, RELOAD_OTHER);
- }
---- 1034,1040 ----
- dont_remove_subreg = 1;
- push_reload (SUBREG_REG (out), SUBREG_REG (out), &SUBREG_REG (out),
-! &SUBREG_REG (out),
-! find_valid_class (outmode, SUBREG_WORD (out)),
-! VOIDmode, VOIDmode, 0, 0,
- opnum, RELOAD_OTHER);
- }
-*************** find_reloads (insn, replace, ind_levels,
-*** 2241,2244 ****
---- 2279,2283 ----
- int goal_earlyclobber, this_earlyclobber;
- enum machine_mode operand_mode[MAX_RECOG_OPERANDS];
-+ short force_update[MAX_RECOG_OPERANDS];
-
- this_insn = insn;
-*************** find_reloads (insn, replace, ind_levels,
-*** 2272,2275 ****
---- 2311,2316 ----
- #endif
-
-+ bzero ((char *) force_update, sizeof force_update);
-+
- /* Find what kind of insn this is. NOPERANDS gets number of operands.
- Make OPERANDS point to a vector of operand values.
-*************** find_reloads (insn, replace, ind_levels,
-*** 2469,2473 ****
- find_reloads_address (VOIDmode, NULL_PTR,
- recog_operand[i], recog_operand_loc[i],
-! i, operand_type[i], ind_levels);
- substed_operand[i] = recog_operand[i] = *recog_operand_loc[i];
- }
---- 2510,2515 ----
- find_reloads_address (VOIDmode, NULL_PTR,
- recog_operand[i], recog_operand_loc[i],
-! i, operand_type[i], ind_levels,
-! &force_update[i]);
- substed_operand[i] = recog_operand[i] = *recog_operand_loc[i];
- }
-*************** find_reloads (insn, replace, ind_levels,
-*** 2478,2482 ****
- XEXP (recog_operand[i], 0),
- &XEXP (recog_operand[i], 0),
-! i, address_type[i], ind_levels))
- address_reloaded[i] = 1;
- substed_operand[i] = recog_operand[i] = *recog_operand_loc[i];
---- 2520,2525 ----
- XEXP (recog_operand[i], 0),
- &XEXP (recog_operand[i], 0),
-! i, address_type[i], ind_levels,
-! &force_update[i]))
- address_reloaded[i] = 1;
- substed_operand[i] = recog_operand[i] = *recog_operand_loc[i];
-*************** find_reloads (insn, replace, ind_levels,
-*** 2487,2491 ****
- ind_levels,
- set != 0
-! && &SET_DEST (set) == recog_operand_loc[i]);
- else if (code == PLUS)
- /* We can get a PLUS as an "operand" as a result of
---- 2530,2535 ----
- ind_levels,
- set != 0
-! && &SET_DEST (set) == recog_operand_loc[i],
-! &force_update[i]);
- else if (code == PLUS)
- /* We can get a PLUS as an "operand" as a result of
-*************** find_reloads (insn, replace, ind_levels,
-*** 2493,2497 ****
- substed_operand[i] = recog_operand[i] = *recog_operand_loc[i]
- = find_reloads_toplev (recog_operand[i], i, address_type[i],
-! ind_levels, 0);
- else if (code == REG)
- {
---- 2537,2541 ----
- substed_operand[i] = recog_operand[i] = *recog_operand_loc[i]
- = find_reloads_toplev (recog_operand[i], i, address_type[i],
-! ind_levels, 0, &force_update[i]);
- else if (code == REG)
- {
-*************** find_reloads (insn, replace, ind_levels,
-*** 2505,2510 ****
- if (reg_equiv_constant[regno] != 0
- && (set == 0 || &SET_DEST (set) != recog_operand_loc[i]))
-! substed_operand[i] = recog_operand[i]
-! = reg_equiv_constant[regno];
- #if 0 /* This might screw code in reload1.c to delete prior output-reload
- that feeds this insn. */
---- 2549,2557 ----
- if (reg_equiv_constant[regno] != 0
- && (set == 0 || &SET_DEST (set) != recog_operand_loc[i]))
-! {
-! substed_operand[i] = recog_operand[i]
-! = reg_equiv_constant[regno];
-! force_update[i] = 1;
-! }
- #if 0 /* This might screw code in reload1.c to delete prior output-reload
- that feeds this insn. */
-*************** find_reloads (insn, replace, ind_levels,
-*** 2545,2549 ****
- XEXP (recog_operand[i], 0),
- &XEXP (recog_operand[i], 0),
-! i, address_type[i], ind_levels);
- substed_operand[i] = recog_operand[i] = *recog_operand_loc[i];
- }
---- 2592,2597 ----
- XEXP (recog_operand[i], 0),
- &XEXP (recog_operand[i], 0),
-! i, address_type[i], ind_levels,
-! &force_update[i]);
- substed_operand[i] = recog_operand[i] = *recog_operand_loc[i];
- }
-*************** find_reloads (insn, replace, ind_levels,
-*** 3415,3419 ****
- = find_reloads_toplev (force_const_mem (operand_mode[i],
- recog_operand[i]),
-! i, address_type[i], ind_levels, 0);
- if (alternative_allows_memconst (constraints1[i],
- goal_alternative_number))
---- 3463,3467 ----
- = find_reloads_toplev (force_const_mem (operand_mode[i],
- recog_operand[i]),
-! i, address_type[i], ind_levels, 0, NULL);
- if (alternative_allows_memconst (constraints1[i],
- goal_alternative_number))
-*************** find_reloads (insn, replace, ind_levels,
-*** 3595,3609 ****
- Don't do this if we aren't making replacements because we might be
- propagating things allocated by frame pointer elimination into places
-! it doesn't expect. */
-
-! if (insn_code_number >= 0 && replace)
-! for (i = insn_n_dups[insn_code_number] - 1; i >= 0; i--)
-! {
-! int opno = recog_dup_num[i];
-! *recog_dup_loc[i] = *recog_operand_loc[opno];
-! if (operand_reloadnum[opno] >= 0)
-! push_replacement (recog_dup_loc[i], operand_reloadnum[opno],
-! insn_operand_mode[insn_code_number][opno]);
-! }
-
- #if 0
---- 3643,3664 ----
- Don't do this if we aren't making replacements because we might be
- propagating things allocated by frame pointer elimination into places
-! it doesn't expect. However, always do it for replaces of pseudos
-! by constants. */
-
-! for (i = insn_n_dups[insn_code_number] - 1; i >= 0; i--)
-! {
-! int opno = recog_dup_num[i];
-!
-! if (! (insn_code_number >= 0 && replace))
-! {
-! if (! force_update[opno])
-! continue;
-! }
-!
-! *recog_dup_loc[i] = *recog_operand_loc[opno];
-! if (operand_reloadnum[opno] >= 0)
-! push_replacement (recog_dup_loc[i], operand_reloadnum[opno],
-! insn_operand_mode[insn_code_number][opno]);
-! }
-
- #if 0
-*************** find_reloads (insn, replace, ind_levels,
-*** 3829,3832 ****
---- 3884,3888 ----
- register RTX_CODE code = GET_CODE (recog_operand[i]);
- int is_set_dest = GET_CODE (body) == SET && (i == 0);
-+ short ign;
-
- if (insn_code_number >= 0)
-*************** find_reloads (insn, replace, ind_levels,
-*** 3834,3838 ****
- find_reloads_address (VOIDmode, NULL_PTR,
- recog_operand[i], recog_operand_loc[i],
-! i, RELOAD_FOR_INPUT, ind_levels);
-
- /* In these cases, we can't tell if the operand is an input
---- 3890,3894 ----
- find_reloads_address (VOIDmode, NULL_PTR,
- recog_operand[i], recog_operand_loc[i],
-! i, RELOAD_FOR_INPUT, ind_levels, &ign);
-
- /* In these cases, we can't tell if the operand is an input
-*************** find_reloads (insn, replace, ind_levels,
-*** 3845,3853 ****
- XEXP (recog_operand[i], 0),
- &XEXP (recog_operand[i], 0),
-! i, RELOAD_OTHER, ind_levels);
- if (code == SUBREG)
- recog_operand[i] = *recog_operand_loc[i]
- = find_reloads_toplev (recog_operand[i], i, RELOAD_OTHER,
-! ind_levels, is_set_dest);
- if (code == REG)
- {
---- 3901,3909 ----
- XEXP (recog_operand[i], 0),
- &XEXP (recog_operand[i], 0),
-! i, RELOAD_OTHER, ind_levels, &ign);
- if (code == SUBREG)
- recog_operand[i] = *recog_operand_loc[i]
- = find_reloads_toplev (recog_operand[i], i, RELOAD_OTHER,
-! ind_levels, is_set_dest, &ign);
- if (code == REG)
- {
-*************** alternative_allows_memconst (constraint,
-*** 3908,3915 ****
-
- IS_SET_DEST is true if X is the destination of a SET, which is not
-! appropriate to be replaced by a constant. */
-
- static rtx
-! find_reloads_toplev (x, opnum, type, ind_levels, is_set_dest)
- rtx x;
- int opnum;
---- 3964,3974 ----
-
- IS_SET_DEST is true if X is the destination of a SET, which is not
-! appropriate to be replaced by a constant.
-!
-! FORCE_UPDATE, if non-NULL, is the address of a SHORT that is set to
-! 1 if X is replaced with something based on reg_equiv_constant. */
-
- static rtx
-! find_reloads_toplev (x, opnum, type, ind_levels, is_set_dest, force_update)
- rtx x;
- int opnum;
-*************** find_reloads_toplev (x, opnum, type, ind
-*** 3917,3920 ****
---- 3976,3980 ----
- int ind_levels;
- int is_set_dest;
-+ short *force_update;
- {
- register RTX_CODE code = GET_CODE (x);
-*************** find_reloads_toplev (x, opnum, type, ind
-*** 3928,3932 ****
- register int regno = REGNO (x);
- if (reg_equiv_constant[regno] != 0 && !is_set_dest)
-! x = reg_equiv_constant[regno];
- #if 0
- /* This creates (subreg (mem...)) which would cause an unnecessary
---- 3988,3998 ----
- register int regno = REGNO (x);
- if (reg_equiv_constant[regno] != 0 && !is_set_dest)
-! {
-! x = reg_equiv_constant[regno];
-! if (force_update)
-! *force_update = 1;
-! else
-! abort (); /* Learn why this happens. */
-! }
- #if 0
- /* This creates (subreg (mem...)) which would cause an unnecessary
-*************** find_reloads_toplev (x, opnum, type, ind
-*** 3951,3955 ****
- find_reloads_address (GET_MODE (x), NULL_PTR,
- XEXP (x, 0),
-! &XEXP (x, 0), opnum, type, ind_levels);
- }
- return x;
---- 4017,4022 ----
- find_reloads_address (GET_MODE (x), NULL_PTR,
- XEXP (x, 0),
-! &XEXP (x, 0), opnum, type, ind_levels,
-! force_update);
- }
- return x;
-*************** find_reloads_toplev (x, opnum, type, ind
-*** 3959,3963 ****
- rtx tem = x;
- find_reloads_address (GET_MODE (x), &tem, XEXP (x, 0), &XEXP (x, 0),
-! opnum, type, ind_levels);
- return tem;
- }
---- 4026,4030 ----
- rtx tem = x;
- find_reloads_address (GET_MODE (x), &tem, XEXP (x, 0), &XEXP (x, 0),
-! opnum, type, ind_levels, force_update);
- return tem;
- }
-*************** find_reloads_toplev (x, opnum, type, ind
-*** 3982,3986 ****
- && (tem = gen_lowpart_common (GET_MODE (x),
- reg_equiv_constant[regno])) != 0)
-! return tem;
-
- if (GET_MODE_BITSIZE (GET_MODE (x)) == BITS_PER_WORD
---- 4049,4059 ----
- && (tem = gen_lowpart_common (GET_MODE (x),
- reg_equiv_constant[regno])) != 0)
-! {
-! if (force_update)
-! *force_update = 1;
-! else
-! abort (); /* Learn why this happens. */
-! return tem;
-! }
-
- if (GET_MODE_BITSIZE (GET_MODE (x)) == BITS_PER_WORD
-*************** find_reloads_toplev (x, opnum, type, ind
-*** 3990,3994 ****
- SUBREG_WORD (x), 0,
- GET_MODE (SUBREG_REG (x)))) != 0)
-! return tem;
-
- if (regno >= FIRST_PSEUDO_REGISTER && reg_renumber[regno] < 0
---- 4063,4073 ----
- SUBREG_WORD (x), 0,
- GET_MODE (SUBREG_REG (x)))) != 0)
-! {
-! if (force_update)
-! *force_update = 1;
-! else
-! abort (); /* Learn why this happens. */
-! return tem;
-! }
-
- if (regno >= FIRST_PSEUDO_REGISTER && reg_renumber[regno] < 0
-*************** find_reloads_toplev (x, opnum, type, ind
-*** 4040,4044 ****
- find_reloads_address (GET_MODE (x), NULL_PTR,
- XEXP (x, 0),
-! &XEXP (x, 0), opnum, type, ind_levels);
- }
-
---- 4119,4124 ----
- find_reloads_address (GET_MODE (x), NULL_PTR,
- XEXP (x, 0),
-! &XEXP (x, 0), opnum, type, ind_levels,
-! force_update);
- }
-
-*************** find_reloads_toplev (x, opnum, type, ind
-*** 4049,4053 ****
- if (fmt[i] == 'e')
- XEXP (x, i) = find_reloads_toplev (XEXP (x, i), opnum, type,
-! ind_levels, is_set_dest);
- }
- return x;
---- 4129,4133 ----
- if (fmt[i] == 'e')
- XEXP (x, i) = find_reloads_toplev (XEXP (x, i), opnum, type,
-! ind_levels, is_set_dest, NULL);
- }
- return x;
-*************** make_memloc (ad, regno)
-*** 4110,4114 ****
-
- static int
-! find_reloads_address (mode, memrefloc, ad, loc, opnum, type, ind_levels)
- enum machine_mode mode;
- rtx *memrefloc;
---- 4190,4195 ----
-
- static int
-! find_reloads_address (mode, memrefloc, ad, loc, opnum, type, ind_levels,
-! force_update)
- enum machine_mode mode;
- rtx *memrefloc;
-*************** find_reloads_address (mode, memrefloc, a
-*** 4118,4121 ****
---- 4199,4203 ----
- enum reload_type type;
- int ind_levels;
-+ short *force_update;
- {
- register int regno;
-*************** find_reloads_address (mode, memrefloc, a
-*** 4134,4137 ****
---- 4216,4223 ----
- {
- *loc = ad = reg_equiv_constant[regno];
-+ if (force_update)
-+ *force_update = 1;
-+ else
-+ abort (); /* Learn why this happens. */
- return 1;
- }
-*************** find_reloads_address (mode, memrefloc, a
-*** 4141,4145 ****
- tem = make_memloc (ad, regno);
- find_reloads_address (GET_MODE (tem), NULL_PTR, XEXP (tem, 0),
-! &XEXP (tem, 0), opnum, type, ind_levels);
- push_reload (tem, NULL_RTX, loc, NULL_PTR, BASE_REG_CLASS,
- GET_MODE (ad), VOIDmode, 0, 0,
---- 4227,4231 ----
- tem = make_memloc (ad, regno);
- find_reloads_address (GET_MODE (tem), NULL_PTR, XEXP (tem, 0),
-! &XEXP (tem, 0), opnum, type, ind_levels, NULL);
- push_reload (tem, NULL_RTX, loc, NULL_PTR, BASE_REG_CLASS,
- GET_MODE (ad), VOIDmode, 0, 0,
-*************** find_reloads_address (mode, memrefloc, a
-*** 4214,4218 ****
- tem = ad;
- find_reloads_address (GET_MODE (ad), &tem, XEXP (ad, 0), &XEXP (ad, 0),
-! opnum, type, ind_levels == 0 ? 0 : ind_levels - 1);
-
- /* If tem was changed, then we must create a new memory reference to
---- 4300,4305 ----
- tem = ad;
- find_reloads_address (GET_MODE (ad), &tem, XEXP (ad, 0), &XEXP (ad, 0),
-! opnum, type, ind_levels == 0 ? 0 : ind_levels - 1,
-! NULL);
-
- /* If tem was changed, then we must create a new memory reference to
-*************** find_reloads_address_1 (x, context, loc,
-*** 4722,4726 ****
- /* First reload the memory location's address. */
- find_reloads_address (GET_MODE (tem), 0, XEXP (tem, 0),
-! &XEXP (tem, 0), opnum, type, ind_levels);
- /* Put this inside a new increment-expression. */
- x = gen_rtx (GET_CODE (x), GET_MODE (x), tem);
---- 4809,4814 ----
- /* First reload the memory location's address. */
- find_reloads_address (GET_MODE (tem), 0, XEXP (tem, 0),
-! &XEXP (tem, 0), opnum, type, ind_levels,
-! NULL);
- /* Put this inside a new increment-expression. */
- x = gen_rtx (GET_CODE (x), GET_MODE (x), tem);
-*************** find_reloads_address_1 (x, context, loc,
-*** 4788,4792 ****
- find_reloads_address (GET_MODE (x), &XEXP (x, 0),
- XEXP (XEXP (x, 0), 0), &XEXP (XEXP (x, 0), 0),
-! opnum, type, ind_levels);
-
- reloadnum = push_reload (x, NULL_RTX, loc, NULL_PTR,
---- 4876,4880 ----
- find_reloads_address (GET_MODE (x), &XEXP (x, 0),
- XEXP (XEXP (x, 0), 0), &XEXP (XEXP (x, 0), 0),
-! opnum, type, ind_levels, NULL);
-
- reloadnum = push_reload (x, NULL_RTX, loc, NULL_PTR,
-*************** find_reloads_address_1 (x, context, loc,
-*** 4818,4822 ****
-
- find_reloads_address (GET_MODE (x), loc, XEXP (x, 0), &XEXP (x, 0),
-! opnum, type, ind_levels);
- push_reload (*loc, NULL_RTX, loc, NULL_PTR,
- context ? INDEX_REG_CLASS : BASE_REG_CLASS,
---- 4906,4910 ----
-
- find_reloads_address (GET_MODE (x), loc, XEXP (x, 0), &XEXP (x, 0),
-! opnum, type, ind_levels, NULL);
- push_reload (*loc, NULL_RTX, loc, NULL_PTR,
- context ? INDEX_REG_CLASS : BASE_REG_CLASS,
-*************** find_reloads_address_1 (x, context, loc,
-*** 4852,4856 ****
- x = make_memloc (x, regno);
- find_reloads_address (GET_MODE (x), 0, XEXP (x, 0), &XEXP (x, 0),
-! opnum, type, ind_levels);
- }
-
---- 4940,4944 ----
- x = make_memloc (x, regno);
- find_reloads_address (GET_MODE (x), 0, XEXP (x, 0), &XEXP (x, 0),
-! opnum, type, ind_levels, NULL);
- }
-
-*************** find_reloads_address_part (x, loc, class
-*** 4965,4969 ****
- rtx tem = x = force_const_mem (mode, x);
- find_reloads_address (mode, &tem, XEXP (tem, 0), &XEXP (tem, 0),
-! opnum, type, ind_levels);
- }
-
---- 5053,5057 ----
- rtx tem = x = force_const_mem (mode, x);
- find_reloads_address (mode, &tem, XEXP (tem, 0), &XEXP (tem, 0),
-! opnum, type, ind_levels, NULL);
- }
-
-*************** find_reloads_address_part (x, loc, class
-*** 4977,4981 ****
- x = gen_rtx (PLUS, GET_MODE (x), XEXP (x, 0), tem);
- find_reloads_address (mode, &tem, XEXP (tem, 0), &XEXP (tem, 0),
-! opnum, type, ind_levels);
- }
-
---- 5065,5069 ----
- x = gen_rtx (PLUS, GET_MODE (x), XEXP (x, 0), tem);
- find_reloads_address (mode, &tem, XEXP (tem, 0), &XEXP (tem, 0),
-! opnum, type, ind_levels, NULL);
- }
-
-*************** find_equiv_reg (goal, insn, class, other
-*** 5518,5522 ****
- and is also a register that appears in the address of GOAL. */
-
-! if (goal_mem && value == SET_DEST (PATTERN (where))
- && refers_to_regno_for_reload_p (valueno,
- (valueno
---- 5606,5610 ----
- and is also a register that appears in the address of GOAL. */
-
-! if (goal_mem && value == SET_DEST (single_set (where))
- && refers_to_regno_for_reload_p (valueno,
- (valueno
-*************** debug_reload()
-*** 5900,5904 ****
-
- if (reload_nocombine[r])
-! fprintf (stderr, ", can combine", reload_nocombine[r]);
-
- if (reload_secondary_p[r])
---- 5988,5992 ----
-
- if (reload_nocombine[r])
-! fprintf (stderr, ", can't combine %d", reload_nocombine[r]);
-
- if (reload_secondary_p[r])
-diff -rcp2N gcc-2.7.2.2/reload1.c g77-new/reload1.c
-*** gcc-2.7.2.2/reload1.c Sun Nov 5 11:22:22 1995
---- g77-new/reload1.c Sun Aug 10 18:47:00 1997
-*************** reload (first, global, dumpfile)
-*** 542,546 ****
- Also find all paradoxical subregs and find largest such for each pseudo.
- On machines with small register classes, record hard registers that
-! are used for user variables. These can never be used for spills. */
-
- for (insn = first; insn; insn = NEXT_INSN (insn))
---- 542,548 ----
- Also find all paradoxical subregs and find largest such for each pseudo.
- On machines with small register classes, record hard registers that
-! are used for user variables. These can never be used for spills.
-! Also look for a "constant" NOTE_INSN_SETJMP. This means that all
-! caller-saved registers must be marked live. */
-
- for (insn = first; insn; insn = NEXT_INSN (insn))
-*************** reload (first, global, dumpfile)
-*** 548,551 ****
---- 550,559 ----
- rtx set = single_set (insn);
-
-+ if (GET_CODE (insn) == NOTE && CONST_CALL_P (insn)
-+ && NOTE_LINE_NUMBER (insn) == NOTE_INSN_SETJMP)
-+ for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
-+ if (! call_used_regs[i])
-+ regs_ever_live[i] = 1;
-+
- if (set != 0 && GET_CODE (SET_DEST (set)) == REG)
- {
-*************** reload (first, global, dumpfile)
-*** 564,568 ****
- if (GET_CODE (x) == MEM)
- reg_equiv_memory_loc[i] = x;
-! else if (CONSTANT_P (x))
- {
- if (LEGITIMATE_CONSTANT_P (x))
---- 572,578 ----
- if (GET_CODE (x) == MEM)
- reg_equiv_memory_loc[i] = x;
-! else if (CONSTANT_P (x)
-! && ! (GET_CODE (x) == CONST
-! && GET_CODE (XEXP (x, 0)) == MINUS))
- {
- if (LEGITIMATE_CONSTANT_P (x))
-*************** eliminate_regs (x, mem_mode, insn)
-*** 2886,2890 ****
-
- /* Fall through to generic unary operation case. */
-- case USE:
- case STRICT_LOW_PART:
- case NEG: case NOT:
---- 2896,2899 ----
-*************** eliminate_regs (x, mem_mode, insn)
-*** 2975,2978 ****
---- 2984,3000 ----
- return x;
-
-+ case USE:
-+ /* If using a register that is the source of an eliminate we still
-+ think can be performed, note it cannot be performed since we don't
-+ know how this register is used. */
-+ for (ep = reg_eliminate; ep < &reg_eliminate[NUM_ELIMINABLE_REGS]; ep++)
-+ if (ep->from_rtx == XEXP (x, 0))
-+ ep->can_eliminate = 0;
-+
-+ new = eliminate_regs (XEXP (x, 0), mem_mode, insn);
-+ if (new != XEXP (x, 0))
-+ return gen_rtx (code, GET_MODE (x), new);
-+ return x;
-+
- case CLOBBER:
- /* If clobbering a register that is the replacement register for an
-*************** gen_reload (out, in, opnum, type)
-*** 6736,6741 ****
---- 6758,6765 ----
- if (GET_CODE (in) == PLUS
- && (GET_CODE (XEXP (in, 0)) == REG
-+ || GET_CODE (XEXP (in, 0)) == SUBREG
- || GET_CODE (XEXP (in, 0)) == MEM)
- && (GET_CODE (XEXP (in, 1)) == REG
-+ || GET_CODE (XEXP (in, 1)) == SUBREG
- || CONSTANT_P (XEXP (in, 1))
- || GET_CODE (XEXP (in, 1)) == MEM))
-*************** gen_reload (out, in, opnum, type)
-*** 6798,6807 ****
- we emit below. */
-
-! if (CONSTANT_P (op1) || GET_CODE (op1) == MEM
- || (GET_CODE (op1) == REG
- && REGNO (op1) >= FIRST_PSEUDO_REGISTER))
- tem = op0, op0 = op1, op1 = tem;
-
-! emit_insn (gen_move_insn (out, op0));
-
- /* If OP0 and OP1 are the same, we can use OUT for OP1.
---- 6822,6831 ----
- we emit below. */
-
-! if (CONSTANT_P (op1) || GET_CODE (op1) == MEM || GET_CODE (op1) == SUBREG
- || (GET_CODE (op1) == REG
- && REGNO (op1) >= FIRST_PSEUDO_REGISTER))
- tem = op0, op0 = op1, op1 = tem;
-
-! gen_reload (out, op0, opnum, type);
-
- /* If OP0 and OP1 are the same, we can use OUT for OP1.
-*************** gen_reload (out, in, opnum, type)
-*** 6831,6835 ****
- delete_insns_since (last);
-
-! emit_insn (gen_move_insn (out, op1));
- emit_insn (gen_add2_insn (out, op0));
- }
---- 6855,6859 ----
- delete_insns_since (last);
-
-! gen_reload (out, op1, opnum, type);
- emit_insn (gen_add2_insn (out, op0));
- }
-*************** gen_reload (out, in, opnum, type)
-*** 6852,6857 ****
- in = gen_rtx (REG, GET_MODE (loc), REGNO (in));
-
-! emit_insn (gen_move_insn (loc, in));
-! emit_insn (gen_move_insn (out, loc));
- }
- #endif
---- 6876,6881 ----
- in = gen_rtx (REG, GET_MODE (loc), REGNO (in));
-
-! gen_reload (loc, in, opnum, type);
-! gen_reload (out, loc, opnum, type);
- }
- #endif
-diff -rcp2N gcc-2.7.2.2/rtl.c g77-new/rtl.c
-*** gcc-2.7.2.2/rtl.c Thu Jun 15 08:02:59 1995
---- g77-new/rtl.c Thu Jul 10 20:09:06 1997
-*************** char *reg_note_name[] = { "", "REG_DEAD"
-*** 179,183 ****
- "REG_NONNEG", "REG_NO_CONFLICT", "REG_UNUSED",
- "REG_CC_SETTER", "REG_CC_USER", "REG_LABEL",
-! "REG_DEP_ANTI", "REG_DEP_OUTPUT" };
-
- /* Allocate an rtx vector of N elements.
---- 179,183 ----
- "REG_NONNEG", "REG_NO_CONFLICT", "REG_UNUSED",
- "REG_CC_SETTER", "REG_CC_USER", "REG_LABEL",
-! "REG_DEP_ANTI", "REG_DEP_OUTPUT", "REG_NOALIAS" };
-
- /* Allocate an rtx vector of N elements.
-diff -rcp2N gcc-2.7.2.2/rtl.h g77-new/rtl.h
-*** gcc-2.7.2.2/rtl.h Thu Jun 15 08:03:16 1995
---- g77-new/rtl.h Thu Jul 10 20:09:07 1997
-*************** enum reg_note { REG_DEAD = 1, REG_INC =
-*** 349,353 ****
- REG_NONNEG = 8, REG_NO_CONFLICT = 9, REG_UNUSED = 10,
- REG_CC_SETTER = 11, REG_CC_USER = 12, REG_LABEL = 13,
-! REG_DEP_ANTI = 14, REG_DEP_OUTPUT = 15 };
-
- /* Define macros to extract and insert the reg-note kind in an EXPR_LIST. */
---- 349,353 ----
- REG_NONNEG = 8, REG_NO_CONFLICT = 9, REG_UNUSED = 10,
- REG_CC_SETTER = 11, REG_CC_USER = 12, REG_LABEL = 13,
-! REG_DEP_ANTI = 14, REG_DEP_OUTPUT = 15, REG_NOALIAS = 16 };
-
- /* Define macros to extract and insert the reg-note kind in an EXPR_LIST. */
-*************** extern char *reg_note_name[];
-*** 432,436 ****
- #define NOTE_INSN_FUNCTION_BEG -13
-
--
- #if 0 /* These are not used, and I don't know what they were for. --rms. */
- #define NOTE_DECL_NAME(INSN) ((INSN)->fld[3].rtstr)
---- 432,435 ----
-*************** extern char *note_insn_name[];
-*** 576,579 ****
---- 575,579 ----
- /* For a TRAP_IF rtx, TRAP_CONDITION is an expression. */
- #define TRAP_CONDITION(RTX) ((RTX)->fld[0].rtx)
-+ #define TRAP_CODE(RTX) ((RTX)->fld[1].rtint)
-
- /* 1 in a SYMBOL_REF if it addresses this function's constants pool. */
-*************** extern rtx eliminate_constant_term PROTO
-*** 817,820 ****
---- 817,830 ----
- extern rtx expand_complex_abs PROTO((enum machine_mode, rtx, rtx, int));
- extern enum machine_mode choose_hard_reg_mode PROTO((int, int));
-+ extern int rtx_varies_p PROTO((rtx));
-+ extern int may_trap_p PROTO((rtx));
-+ extern int side_effects_p PROTO((rtx));
-+ extern int volatile_refs_p PROTO((rtx));
-+ extern int volatile_insn_p PROTO((rtx));
-+ extern void remove_note PROTO((rtx, rtx));
-+ extern void note_stores PROTO((rtx, void (*)()));
-+ extern int refers_to_regno_p PROTO((int, int, rtx, rtx *));
-+ extern int reg_overlap_mentioned_p PROTO((rtx, rtx));
-+
-
- /* Maximum number of parallel sets and clobbers in any insn in this fn.
-*************** extern rtx *regno_reg_rtx;
-*** 967,968 ****
---- 977,987 ----
-
- extern int rtx_to_tree_code PROTO((enum rtx_code));
-+
-+ extern int true_dependence PROTO((rtx, enum machine_mode, rtx, int (*)()));
-+ extern int read_dependence PROTO((rtx, rtx));
-+ extern int anti_dependence PROTO((rtx, rtx));
-+ extern int output_dependence PROTO((rtx, rtx));
-+ extern void init_alias_analysis PROTO((void));
-+ extern void end_alias_analysis PROTO((void));
-+ extern void mark_user_reg PROTO((rtx));
-+ extern void mark_reg_pointer PROTO((rtx));
-diff -rcp2N gcc-2.7.2.2/sched.c g77-new/sched.c
-*** gcc-2.7.2.2/sched.c Thu Jun 15 08:06:39 1995
---- g77-new/sched.c Sun Aug 10 18:46:13 1997
-*************** Boston, MA 02111-1307, USA. */
-*** 126,129 ****
---- 126,132 ----
- #include "insn-attr.h"
-
-+ extern char *reg_known_equiv_p;
-+ extern rtx *reg_known_value;
-+
- #ifdef INSN_SCHEDULING
- /* Arrays set up by scheduling for the same respective purposes as
-*************** static int *sched_reg_live_length;
-*** 143,146 ****
---- 146,150 ----
- by splitting insns. */
- static rtx *reg_last_uses;
-+ static int reg_last_uses_size;
- static rtx *reg_last_sets;
- static regset reg_pending_sets;
-*************** struct sometimes
-*** 294,302 ****
-
- /* Forward declarations. */
-- static rtx canon_rtx PROTO((rtx));
-- static int rtx_equal_for_memref_p PROTO((rtx, rtx));
-- static rtx find_symbolic_term PROTO((rtx));
-- static int memrefs_conflict_p PROTO((int, rtx, int, rtx,
-- HOST_WIDE_INT));
- static void add_dependence PROTO((rtx, rtx, enum reg_note));
- static void remove_dependence PROTO((rtx, rtx));
---- 298,301 ----
-*************** static int priority PROTO((rtx));
-*** 314,318 ****
- static void free_pending_lists PROTO((void));
- static void add_insn_mem_dependence PROTO((rtx *, rtx *, rtx, rtx));
-! static void flush_pending_lists PROTO((rtx));
- static void sched_analyze_1 PROTO((rtx, rtx));
- static void sched_analyze_2 PROTO((rtx, rtx));
---- 313,317 ----
- static void free_pending_lists PROTO((void));
- static void add_insn_mem_dependence PROTO((rtx *, rtx *, rtx, rtx));
-! static void flush_pending_lists PROTO((rtx, int));
- static void sched_analyze_1 PROTO((rtx, rtx));
- static void sched_analyze_2 PROTO((rtx, rtx));
-*************** void schedule_insns PROTO((FILE *));
-*** 346,885 ****
- #endif /* INSN_SCHEDULING */
-
-- #define SIZE_FOR_MODE(X) (GET_MODE_SIZE (GET_MODE (X)))
--
-- /* Vector indexed by N giving the initial (unchanging) value known
-- for pseudo-register N. */
-- static rtx *reg_known_value;
--
-- /* Vector recording for each reg_known_value whether it is due to a
-- REG_EQUIV note. Future passes (viz., reload) may replace the
-- pseudo with the equivalent expression and so we account for the
-- dependences that would be introduced if that happens. */
-- /* ??? This is a problem only on the Convex. The REG_EQUIV notes created in
-- assign_parms mention the arg pointer, and there are explicit insns in the
-- RTL that modify the arg pointer. Thus we must ensure that such insns don't
-- get scheduled across each other because that would invalidate the REG_EQUIV
-- notes. One could argue that the REG_EQUIV notes are wrong, but solving
-- the problem in the scheduler will likely give better code, so we do it
-- here. */
-- static char *reg_known_equiv_p;
--
-- /* Indicates number of valid entries in reg_known_value. */
-- static int reg_known_value_size;
--
-- static rtx
-- canon_rtx (x)
-- rtx x;
-- {
-- if (GET_CODE (x) == REG && REGNO (x) >= FIRST_PSEUDO_REGISTER
-- && REGNO (x) <= reg_known_value_size)
-- return reg_known_value[REGNO (x)];
-- else if (GET_CODE (x) == PLUS)
-- {
-- rtx x0 = canon_rtx (XEXP (x, 0));
-- rtx x1 = canon_rtx (XEXP (x, 1));
--
-- if (x0 != XEXP (x, 0) || x1 != XEXP (x, 1))
-- {
-- /* We can tolerate LO_SUMs being offset here; these
-- rtl are used for nothing other than comparisons. */
-- if (GET_CODE (x0) == CONST_INT)
-- return plus_constant_for_output (x1, INTVAL (x0));
-- else if (GET_CODE (x1) == CONST_INT)
-- return plus_constant_for_output (x0, INTVAL (x1));
-- return gen_rtx (PLUS, GET_MODE (x), x0, x1);
-- }
-- }
-- return x;
-- }
--
-- /* Set up all info needed to perform alias analysis on memory references. */
--
-- void
-- init_alias_analysis ()
-- {
-- int maxreg = max_reg_num ();
-- rtx insn;
-- rtx note;
-- rtx set;
--
-- reg_known_value_size = maxreg;
--
-- reg_known_value
-- = (rtx *) oballoc ((maxreg-FIRST_PSEUDO_REGISTER) * sizeof (rtx))
-- - FIRST_PSEUDO_REGISTER;
-- bzero ((char *) (reg_known_value + FIRST_PSEUDO_REGISTER),
-- (maxreg-FIRST_PSEUDO_REGISTER) * sizeof (rtx));
--
-- reg_known_equiv_p
-- = (char *) oballoc ((maxreg -FIRST_PSEUDO_REGISTER) * sizeof (char))
-- - FIRST_PSEUDO_REGISTER;
-- bzero (reg_known_equiv_p + FIRST_PSEUDO_REGISTER,
-- (maxreg - FIRST_PSEUDO_REGISTER) * sizeof (char));
--
-- /* Fill in the entries with known constant values. */
-- for (insn = get_insns (); insn; insn = NEXT_INSN (insn))
-- if ((set = single_set (insn)) != 0
-- && GET_CODE (SET_DEST (set)) == REG
-- && REGNO (SET_DEST (set)) >= FIRST_PSEUDO_REGISTER
-- && (((note = find_reg_note (insn, REG_EQUAL, 0)) != 0
-- && reg_n_sets[REGNO (SET_DEST (set))] == 1)
-- || (note = find_reg_note (insn, REG_EQUIV, NULL_RTX)) != 0)
-- && GET_CODE (XEXP (note, 0)) != EXPR_LIST)
-- {
-- int regno = REGNO (SET_DEST (set));
-- reg_known_value[regno] = XEXP (note, 0);
-- reg_known_equiv_p[regno] = REG_NOTE_KIND (note) == REG_EQUIV;
-- }
--
-- /* Fill in the remaining entries. */
-- while (--maxreg >= FIRST_PSEUDO_REGISTER)
-- if (reg_known_value[maxreg] == 0)
-- reg_known_value[maxreg] = regno_reg_rtx[maxreg];
-- }
--
-- /* Return 1 if X and Y are identical-looking rtx's.
--
-- We use the data in reg_known_value above to see if two registers with
-- different numbers are, in fact, equivalent. */
--
-- static int
-- rtx_equal_for_memref_p (x, y)
-- rtx x, y;
-- {
-- register int i;
-- register int j;
-- register enum rtx_code code;
-- register char *fmt;
--
-- if (x == 0 && y == 0)
-- return 1;
-- if (x == 0 || y == 0)
-- return 0;
-- x = canon_rtx (x);
-- y = canon_rtx (y);
--
-- if (x == y)
-- return 1;
--
-- code = GET_CODE (x);
-- /* Rtx's of different codes cannot be equal. */
-- if (code != GET_CODE (y))
-- return 0;
--
-- /* (MULT:SI x y) and (MULT:HI x y) are NOT equivalent.
-- (REG:SI x) and (REG:HI x) are NOT equivalent. */
--
-- if (GET_MODE (x) != GET_MODE (y))
-- return 0;
--
-- /* REG, LABEL_REF, and SYMBOL_REF can be compared nonrecursively. */
--
-- if (code == REG)
-- return REGNO (x) == REGNO (y);
-- if (code == LABEL_REF)
-- return XEXP (x, 0) == XEXP (y, 0);
-- if (code == SYMBOL_REF)
-- return XSTR (x, 0) == XSTR (y, 0);
--
-- /* For commutative operations, the RTX match if the operand match in any
-- order. Also handle the simple binary and unary cases without a loop. */
-- if (code == EQ || code == NE || GET_RTX_CLASS (code) == 'c')
-- return ((rtx_equal_for_memref_p (XEXP (x, 0), XEXP (y, 0))
-- && rtx_equal_for_memref_p (XEXP (x, 1), XEXP (y, 1)))
-- || (rtx_equal_for_memref_p (XEXP (x, 0), XEXP (y, 1))
-- && rtx_equal_for_memref_p (XEXP (x, 1), XEXP (y, 0))));
-- else if (GET_RTX_CLASS (code) == '<' || GET_RTX_CLASS (code) == '2')
-- return (rtx_equal_for_memref_p (XEXP (x, 0), XEXP (y, 0))
-- && rtx_equal_for_memref_p (XEXP (x, 1), XEXP (y, 1)));
-- else if (GET_RTX_CLASS (code) == '1')
-- return rtx_equal_for_memref_p (XEXP (x, 0), XEXP (y, 0));
--
-- /* Compare the elements. If any pair of corresponding elements
-- fail to match, return 0 for the whole things. */
--
-- fmt = GET_RTX_FORMAT (code);
-- for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
-- {
-- switch (fmt[i])
-- {
-- case 'w':
-- if (XWINT (x, i) != XWINT (y, i))
-- return 0;
-- break;
--
-- case 'n':
-- case 'i':
-- if (XINT (x, i) != XINT (y, i))
-- return 0;
-- break;
--
-- case 'V':
-- case 'E':
-- /* Two vectors must have the same length. */
-- if (XVECLEN (x, i) != XVECLEN (y, i))
-- return 0;
--
-- /* And the corresponding elements must match. */
-- for (j = 0; j < XVECLEN (x, i); j++)
-- if (rtx_equal_for_memref_p (XVECEXP (x, i, j), XVECEXP (y, i, j)) == 0)
-- return 0;
-- break;
--
-- case 'e':
-- if (rtx_equal_for_memref_p (XEXP (x, i), XEXP (y, i)) == 0)
-- return 0;
-- break;
--
-- case 'S':
-- case 's':
-- if (strcmp (XSTR (x, i), XSTR (y, i)))
-- return 0;
-- break;
--
-- case 'u':
-- /* These are just backpointers, so they don't matter. */
-- break;
--
-- case '0':
-- break;
--
-- /* It is believed that rtx's at this level will never
-- contain anything but integers and other rtx's,
-- except for within LABEL_REFs and SYMBOL_REFs. */
-- default:
-- abort ();
-- }
-- }
-- return 1;
-- }
--
-- /* Given an rtx X, find a SYMBOL_REF or LABEL_REF within
-- X and return it, or return 0 if none found. */
--
-- static rtx
-- find_symbolic_term (x)
-- rtx x;
-- {
-- register int i;
-- register enum rtx_code code;
-- register char *fmt;
--
-- code = GET_CODE (x);
-- if (code == SYMBOL_REF || code == LABEL_REF)
-- return x;
-- if (GET_RTX_CLASS (code) == 'o')
-- return 0;
--
-- fmt = GET_RTX_FORMAT (code);
-- for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
-- {
-- rtx t;
--
-- if (fmt[i] == 'e')
-- {
-- t = find_symbolic_term (XEXP (x, i));
-- if (t != 0)
-- return t;
-- }
-- else if (fmt[i] == 'E')
-- break;
-- }
-- return 0;
-- }
--
-- /* Return nonzero if X and Y (memory addresses) could reference the
-- same location in memory. C is an offset accumulator. When
-- C is nonzero, we are testing aliases between X and Y + C.
-- XSIZE is the size in bytes of the X reference,
-- similarly YSIZE is the size in bytes for Y.
--
-- If XSIZE or YSIZE is zero, we do not know the amount of memory being
-- referenced (the reference was BLKmode), so make the most pessimistic
-- assumptions.
--
-- We recognize the following cases of non-conflicting memory:
--
-- (1) addresses involving the frame pointer cannot conflict
-- with addresses involving static variables.
-- (2) static variables with different addresses cannot conflict.
--
-- Nice to notice that varying addresses cannot conflict with fp if no
-- local variables had their addresses taken, but that's too hard now. */
--
-- /* ??? In Fortran, references to a array parameter can never conflict with
-- another array parameter. */
--
-- static int
-- memrefs_conflict_p (xsize, x, ysize, y, c)
-- rtx x, y;
-- int xsize, ysize;
-- HOST_WIDE_INT c;
-- {
-- if (GET_CODE (x) == HIGH)
-- x = XEXP (x, 0);
-- else if (GET_CODE (x) == LO_SUM)
-- x = XEXP (x, 1);
-- else
-- x = canon_rtx (x);
-- if (GET_CODE (y) == HIGH)
-- y = XEXP (y, 0);
-- else if (GET_CODE (y) == LO_SUM)
-- y = XEXP (y, 1);
-- else
-- y = canon_rtx (y);
--
-- if (rtx_equal_for_memref_p (x, y))
-- return (xsize == 0 || ysize == 0 ||
-- (c >= 0 && xsize > c) || (c < 0 && ysize+c > 0));
--
-- if (y == frame_pointer_rtx || y == hard_frame_pointer_rtx
-- || y == stack_pointer_rtx)
-- {
-- rtx t = y;
-- int tsize = ysize;
-- y = x; ysize = xsize;
-- x = t; xsize = tsize;
-- }
--
-- if (x == frame_pointer_rtx || x == hard_frame_pointer_rtx
-- || x == stack_pointer_rtx)
-- {
-- rtx y1;
--
-- if (CONSTANT_P (y))
-- return 0;
--
-- if (GET_CODE (y) == PLUS
-- && canon_rtx (XEXP (y, 0)) == x
-- && (y1 = canon_rtx (XEXP (y, 1)))
-- && GET_CODE (y1) == CONST_INT)
-- {
-- c += INTVAL (y1);
-- return (xsize == 0 || ysize == 0
-- || (c >= 0 && xsize > c) || (c < 0 && ysize+c > 0));
-- }
--
-- if (GET_CODE (y) == PLUS
-- && (y1 = canon_rtx (XEXP (y, 0)))
-- && CONSTANT_P (y1))
-- return 0;
--
-- return 1;
-- }
--
-- if (GET_CODE (x) == PLUS)
-- {
-- /* The fact that X is canonicalized means that this
-- PLUS rtx is canonicalized. */
-- rtx x0 = XEXP (x, 0);
-- rtx x1 = XEXP (x, 1);
--
-- if (GET_CODE (y) == PLUS)
-- {
-- /* The fact that Y is canonicalized means that this
-- PLUS rtx is canonicalized. */
-- rtx y0 = XEXP (y, 0);
-- rtx y1 = XEXP (y, 1);
--
-- if (rtx_equal_for_memref_p (x1, y1))
-- return memrefs_conflict_p (xsize, x0, ysize, y0, c);
-- if (rtx_equal_for_memref_p (x0, y0))
-- return memrefs_conflict_p (xsize, x1, ysize, y1, c);
-- if (GET_CODE (x1) == CONST_INT)
-- if (GET_CODE (y1) == CONST_INT)
-- return memrefs_conflict_p (xsize, x0, ysize, y0,
-- c - INTVAL (x1) + INTVAL (y1));
-- else
-- return memrefs_conflict_p (xsize, x0, ysize, y, c - INTVAL (x1));
-- else if (GET_CODE (y1) == CONST_INT)
-- return memrefs_conflict_p (xsize, x, ysize, y0, c + INTVAL (y1));
--
-- /* Handle case where we cannot understand iteration operators,
-- but we notice that the base addresses are distinct objects. */
-- x = find_symbolic_term (x);
-- if (x == 0)
-- return 1;
-- y = find_symbolic_term (y);
-- if (y == 0)
-- return 1;
-- return rtx_equal_for_memref_p (x, y);
-- }
-- else if (GET_CODE (x1) == CONST_INT)
-- return memrefs_conflict_p (xsize, x0, ysize, y, c - INTVAL (x1));
-- }
-- else if (GET_CODE (y) == PLUS)
-- {
-- /* The fact that Y is canonicalized means that this
-- PLUS rtx is canonicalized. */
-- rtx y0 = XEXP (y, 0);
-- rtx y1 = XEXP (y, 1);
--
-- if (GET_CODE (y1) == CONST_INT)
-- return memrefs_conflict_p (xsize, x, ysize, y0, c + INTVAL (y1));
-- else
-- return 1;
-- }
--
-- if (GET_CODE (x) == GET_CODE (y))
-- switch (GET_CODE (x))
-- {
-- case MULT:
-- {
-- /* Handle cases where we expect the second operands to be the
-- same, and check only whether the first operand would conflict
-- or not. */
-- rtx x0, y0;
-- rtx x1 = canon_rtx (XEXP (x, 1));
-- rtx y1 = canon_rtx (XEXP (y, 1));
-- if (! rtx_equal_for_memref_p (x1, y1))
-- return 1;
-- x0 = canon_rtx (XEXP (x, 0));
-- y0 = canon_rtx (XEXP (y, 0));
-- if (rtx_equal_for_memref_p (x0, y0))
-- return (xsize == 0 || ysize == 0
-- || (c >= 0 && xsize > c) || (c < 0 && ysize+c > 0));
--
-- /* Can't properly adjust our sizes. */
-- if (GET_CODE (x1) != CONST_INT)
-- return 1;
-- xsize /= INTVAL (x1);
-- ysize /= INTVAL (x1);
-- c /= INTVAL (x1);
-- return memrefs_conflict_p (xsize, x0, ysize, y0, c);
-- }
-- }
--
-- if (CONSTANT_P (x))
-- {
-- if (GET_CODE (x) == CONST_INT && GET_CODE (y) == CONST_INT)
-- {
-- c += (INTVAL (y) - INTVAL (x));
-- return (xsize == 0 || ysize == 0
-- || (c >= 0 && xsize > c) || (c < 0 && ysize+c > 0));
-- }
--
-- if (GET_CODE (x) == CONST)
-- {
-- if (GET_CODE (y) == CONST)
-- return memrefs_conflict_p (xsize, canon_rtx (XEXP (x, 0)),
-- ysize, canon_rtx (XEXP (y, 0)), c);
-- else
-- return memrefs_conflict_p (xsize, canon_rtx (XEXP (x, 0)),
-- ysize, y, c);
-- }
-- if (GET_CODE (y) == CONST)
-- return memrefs_conflict_p (xsize, x, ysize,
-- canon_rtx (XEXP (y, 0)), c);
--
-- if (CONSTANT_P (y))
-- return (rtx_equal_for_memref_p (x, y)
-- && (xsize == 0 || ysize == 0
-- || (c >= 0 && xsize > c) || (c < 0 && ysize+c > 0)));
--
-- return 1;
-- }
-- return 1;
-- }
--
-- /* Functions to compute memory dependencies.
--
-- Since we process the insns in execution order, we can build tables
-- to keep track of what registers are fixed (and not aliased), what registers
-- are varying in known ways, and what registers are varying in unknown
-- ways.
--
-- If both memory references are volatile, then there must always be a
-- dependence between the two references, since their order can not be
-- changed. A volatile and non-volatile reference can be interchanged
-- though.
--
-- A MEM_IN_STRUCT reference at a non-QImode varying address can never
-- conflict with a non-MEM_IN_STRUCT reference at a fixed address. We must
-- allow QImode aliasing because the ANSI C standard allows character
-- pointers to alias anything. We are assuming that characters are
-- always QImode here. */
--
-- /* Read dependence: X is read after read in MEM takes place. There can
-- only be a dependence here if both reads are volatile. */
--
-- int
-- read_dependence (mem, x)
-- rtx mem;
-- rtx x;
-- {
-- return MEM_VOLATILE_P (x) && MEM_VOLATILE_P (mem);
-- }
--
-- /* True dependence: X is read after store in MEM takes place. */
--
-- int
-- true_dependence (mem, x)
-- rtx mem;
-- rtx x;
-- {
-- /* If X is an unchanging read, then it can't possibly conflict with any
-- non-unchanging store. It may conflict with an unchanging write though,
-- because there may be a single store to this address to initialize it.
-- Just fall through to the code below to resolve the case where we have
-- both an unchanging read and an unchanging write. This won't handle all
-- cases optimally, but the possible performance loss should be
-- negligible. */
-- if (RTX_UNCHANGING_P (x) && ! RTX_UNCHANGING_P (mem))
-- return 0;
--
-- return ((MEM_VOLATILE_P (x) && MEM_VOLATILE_P (mem))
-- || (memrefs_conflict_p (SIZE_FOR_MODE (mem), XEXP (mem, 0),
-- SIZE_FOR_MODE (x), XEXP (x, 0), 0)
-- && ! (MEM_IN_STRUCT_P (mem) && rtx_addr_varies_p (mem)
-- && GET_MODE (mem) != QImode
-- && ! MEM_IN_STRUCT_P (x) && ! rtx_addr_varies_p (x))
-- && ! (MEM_IN_STRUCT_P (x) && rtx_addr_varies_p (x)
-- && GET_MODE (x) != QImode
-- && ! MEM_IN_STRUCT_P (mem) && ! rtx_addr_varies_p (mem))));
-- }
--
-- /* Anti dependence: X is written after read in MEM takes place. */
--
-- int
-- anti_dependence (mem, x)
-- rtx mem;
-- rtx x;
-- {
-- /* If MEM is an unchanging read, then it can't possibly conflict with
-- the store to X, because there is at most one store to MEM, and it must
-- have occurred somewhere before MEM. */
-- if (RTX_UNCHANGING_P (mem))
-- return 0;
--
-- return ((MEM_VOLATILE_P (x) && MEM_VOLATILE_P (mem))
-- || (memrefs_conflict_p (SIZE_FOR_MODE (mem), XEXP (mem, 0),
-- SIZE_FOR_MODE (x), XEXP (x, 0), 0)
-- && ! (MEM_IN_STRUCT_P (mem) && rtx_addr_varies_p (mem)
-- && GET_MODE (mem) != QImode
-- && ! MEM_IN_STRUCT_P (x) && ! rtx_addr_varies_p (x))
-- && ! (MEM_IN_STRUCT_P (x) && rtx_addr_varies_p (x)
-- && GET_MODE (x) != QImode
-- && ! MEM_IN_STRUCT_P (mem) && ! rtx_addr_varies_p (mem))));
-- }
--
-- /* Output dependence: X is written after store in MEM takes place. */
--
-- int
-- output_dependence (mem, x)
-- rtx mem;
-- rtx x;
-- {
-- return ((MEM_VOLATILE_P (x) && MEM_VOLATILE_P (mem))
-- || (memrefs_conflict_p (SIZE_FOR_MODE (mem), XEXP (mem, 0),
-- SIZE_FOR_MODE (x), XEXP (x, 0), 0)
-- && ! (MEM_IN_STRUCT_P (mem) && rtx_addr_varies_p (mem)
-- && GET_MODE (mem) != QImode
-- && ! MEM_IN_STRUCT_P (x) && ! rtx_addr_varies_p (x))
-- && ! (MEM_IN_STRUCT_P (x) && rtx_addr_varies_p (x)
-- && GET_MODE (x) != QImode
-- && ! MEM_IN_STRUCT_P (mem) && ! rtx_addr_varies_p (mem))));
-- }
--
- /* Helper functions for instruction scheduling. */
-
---- 345,348 ----
-*************** add_insn_mem_dependence (insn_list, mem_
-*** 1609,1621 ****
-
- /* Make a dependency between every memory reference on the pending lists
-! and INSN, thus flushing the pending lists. */
-
- static void
-! flush_pending_lists (insn)
- rtx insn;
- {
- rtx link;
-
-! while (pending_read_insns)
- {
- add_dependence (insn, XEXP (pending_read_insns, 0), REG_DEP_ANTI);
---- 1072,1086 ----
-
- /* Make a dependency between every memory reference on the pending lists
-! and INSN, thus flushing the pending lists. If ONLY_WRITE, don't flush
-! the read list. */
-
- static void
-! flush_pending_lists (insn, only_write)
- rtx insn;
-+ int only_write;
- {
- rtx link;
-
-! while (pending_read_insns && ! only_write)
- {
- add_dependence (insn, XEXP (pending_read_insns, 0), REG_DEP_ANTI);
-*************** sched_analyze_1 (x, insn)
-*** 1746,1750 ****
- this flush occurs 8 times for sparc, and 10 times for m88k using
- the number 32. */
-! flush_pending_lists (insn);
- }
- else
---- 1211,1215 ----
- this flush occurs 8 times for sparc, and 10 times for m88k using
- the number 32. */
-! flush_pending_lists (insn, 0);
- }
- else
-*************** sched_analyze_2 (x, insn)
-*** 1922,1926 ****
- /* If a dependency already exists, don't create a new one. */
- if (! find_insn_list (XEXP (pending, 0), LOG_LINKS (insn)))
-! if (true_dependence (XEXP (pending_mem, 0), x))
- add_dependence (insn, XEXP (pending, 0), 0);
-
---- 1387,1392 ----
- /* If a dependency already exists, don't create a new one. */
- if (! find_insn_list (XEXP (pending, 0), LOG_LINKS (insn)))
-! if (true_dependence (XEXP (pending_mem, 0), VOIDmode,
-! x, rtx_varies_p))
- add_dependence (insn, XEXP (pending, 0), 0);
-
-*************** sched_analyze_2 (x, insn)
-*** 1968,1972 ****
- reg_pending_sets_all = 1;
-
-! flush_pending_lists (insn);
- }
-
---- 1434,1438 ----
- reg_pending_sets_all = 1;
-
-! flush_pending_lists (insn, 0);
- }
-
-*************** sched_analyze_insn (x, insn, loop_notes)
-*** 2021,2025 ****
- register RTX_CODE code = GET_CODE (x);
- rtx link;
-! int maxreg = max_reg_num ();
- int i;
-
---- 1487,1491 ----
- register RTX_CODE code = GET_CODE (x);
- rtx link;
-! int maxreg = reg_last_uses_size;
- int i;
-
-*************** sched_analyze_insn (x, insn, loop_notes)
-*** 2058,2062 ****
- if (loop_notes)
- {
-! int max_reg = max_reg_num ();
- rtx link;
-
---- 1524,1528 ----
- if (loop_notes)
- {
-! int max_reg = reg_last_uses_size;
- rtx link;
-
-*************** sched_analyze_insn (x, insn, loop_notes)
-*** 2072,2076 ****
- reg_pending_sets_all = 1;
-
-! flush_pending_lists (insn);
-
- link = loop_notes;
---- 1538,1542 ----
- reg_pending_sets_all = 1;
-
-! flush_pending_lists (insn, 0);
-
- link = loop_notes;
-*************** sched_analyze (head, tail)
-*** 2202,2207 ****
- && NOTE_LINE_NUMBER (NEXT_INSN (insn)) == NOTE_INSN_SETJMP)
- {
-! int max_reg = max_reg_num ();
-! for (i = 0; i < max_reg; i++)
- {
- for (u = reg_last_uses[i]; u; u = XEXP (u, 1))
---- 1668,1672 ----
- && NOTE_LINE_NUMBER (NEXT_INSN (insn)) == NOTE_INSN_SETJMP)
- {
-! for (i = 0; i < reg_last_uses_size; i++)
- {
- for (u = reg_last_uses[i]; u; u = XEXP (u, 1))
-*************** sched_analyze (head, tail)
-*** 2247,2259 ****
- loop_notes = 0;
-
-! /* We don't need to flush memory for a function call which does
-! not involve memory. */
-! if (! CONST_CALL_P (insn))
-! {
-! /* In the absence of interprocedural alias analysis,
-! we must flush all pending reads and writes, and
-! start new dependencies starting from here. */
-! flush_pending_lists (insn);
-! }
-
- /* Depend this function call (actually, the user of this
---- 1712,1720 ----
- loop_notes = 0;
-
-! /* In the absence of interprocedural alias analysis, we must flush
-! all pending reads and writes, and start new dependencies starting
-! from here. But only flush writes for constant calls (which may
-! be passed a pointer to something we haven't written yet). */
-! flush_pending_lists (insn, CONST_CALL_P (insn));
-
- /* Depend this function call (actually, the user of this
-*************** sched_analyze (head, tail)
-*** 2264,2270 ****
- else if (GET_CODE (insn) == NOTE
- && (NOTE_LINE_NUMBER (insn) == NOTE_INSN_LOOP_BEG
-! || NOTE_LINE_NUMBER (insn) == NOTE_INSN_LOOP_END))
-! loop_notes = gen_rtx (EXPR_LIST, REG_DEAD,
-! GEN_INT (NOTE_LINE_NUMBER (insn)), loop_notes);
-
- if (insn == tail)
---- 1725,1736 ----
- else if (GET_CODE (insn) == NOTE
- && (NOTE_LINE_NUMBER (insn) == NOTE_INSN_LOOP_BEG
-! || NOTE_LINE_NUMBER (insn) == NOTE_INSN_LOOP_END
-! || (NOTE_LINE_NUMBER (insn) == NOTE_INSN_SETJMP
-! && GET_CODE (PREV_INSN (insn)) != CALL_INSN)))
-! {
-! loop_notes = gen_rtx (EXPR_LIST, REG_DEAD,
-! GEN_INT (NOTE_LINE_NUMBER (insn)), loop_notes);
-! CONST_CALL_P (loop_notes) = CONST_CALL_P (insn);
-! }
-
- if (insn == tail)
-*************** sched_note_set (b, x, death)
-*** 2372,2380 ****
-
- #define SCHED_SORT(READY, NEW_READY, OLD_READY) \
-! do { if ((NEW_READY) - (OLD_READY) == 1) \
-! swap_sort (READY, NEW_READY); \
-! else if ((NEW_READY) - (OLD_READY) > 1) \
-! qsort (READY, NEW_READY, sizeof (rtx), rank_for_schedule); } \
-! while (0)
-
- /* Returns a positive value if y is preferred; returns a negative value if
---- 1838,1845 ----
-
- #define SCHED_SORT(READY, NEW_READY, OLD_READY) \
-! if ((NEW_READY) - (OLD_READY) == 1) \
-! swap_sort (READY, NEW_READY); \
-! else if ((NEW_READY) - (OLD_READY) > 1) \
-! qsort (READY, NEW_READY, sizeof (rtx), rank_for_schedule); else \
-
- /* Returns a positive value if y is preferred; returns a negative value if
-*************** reemit_notes (insn, last)
-*** 3128,3132 ****
- {
- if (INTVAL (XEXP (note, 0)) == NOTE_INSN_SETJMP)
-! emit_note_after (INTVAL (XEXP (note, 0)), insn);
- else
- last = emit_note_before (INTVAL (XEXP (note, 0)), last);
---- 2593,2598 ----
- {
- if (INTVAL (XEXP (note, 0)) == NOTE_INSN_SETJMP)
-! CONST_CALL_P (emit_note_after (INTVAL (XEXP (note, 0)), insn))
-! = CONST_CALL_P (note);
- else
- last = emit_note_before (INTVAL (XEXP (note, 0)), last);
-*************** schedule_block (b, file)
-*** 3174,3178 ****
- b, INSN_UID (basic_block_head[b]), INSN_UID (basic_block_end[b]));
-
-! i = max_reg_num ();
- reg_last_uses = (rtx *) alloca (i * sizeof (rtx));
- bzero ((char *) reg_last_uses, i * sizeof (rtx));
---- 2640,2644 ----
- b, INSN_UID (basic_block_head[b]), INSN_UID (basic_block_end[b]));
-
-! reg_last_uses_size = i = max_reg_num ();
- reg_last_uses = (rtx *) alloca (i * sizeof (rtx));
- bzero ((char *) reg_last_uses, i * sizeof (rtx));
-*************** schedule_block (b, file)
-*** 3800,3804 ****
- made live again later. */
- for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
-! if (call_used_regs[i] || global_regs[i])
- {
- register int offset = i / REGSET_ELT_BITS;
---- 3266,3271 ----
- made live again later. */
- for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
-! if ((call_used_regs[i] && ! fixed_regs[i])
-! || global_regs[i])
- {
- register int offset = i / REGSET_ELT_BITS;
-*************** schedule_insns (dump_file)
-*** 4717,4721 ****
- bcopy ((char *) reg_n_deaths, (char *) sched_reg_n_deaths,
- max_regno * sizeof (short));
-- init_alias_analysis ();
- }
- else
---- 4184,4187 ----
-*************** schedule_insns (dump_file)
-*** 4726,4732 ****
- bb_dead_regs = 0;
- bb_live_regs = 0;
-- if (! flag_schedule_insns)
-- init_alias_analysis ();
- }
-
- if (write_symbols != NO_DEBUG)
---- 4192,4213 ----
- bb_dead_regs = 0;
- bb_live_regs = 0;
- }
-+ init_alias_analysis ();
-+ #if 0
-+ if (dump_file)
-+ {
-+ extern rtx *reg_base_value;
-+ extern int reg_base_value_size;
-+ int i;
-+ for (i = 0; i < reg_base_value_size; i++)
-+ if (reg_base_value[i])
-+ {
-+ fprintf (dump_file, ";; reg_base_value[%d] = ", i);
-+ print_rtl (dump_file, reg_base_value[i]);
-+ fputc ('\n', dump_file);
-+ }
-+ }
-+ #endif
-+
-
- if (write_symbols != NO_DEBUG)
-diff -rcp2N gcc-2.7.2.2/sdbout.c g77-new/sdbout.c
-*** gcc-2.7.2.2/sdbout.c Thu Jun 15 08:07:11 1995
---- g77-new/sdbout.c Mon Aug 11 01:42:22 1997
-*************** plain_type_1 (type, level)
-*** 539,543 ****
- sdb_dims[sdb_n_dims++]
- = (TYPE_DOMAIN (type)
-! ? TREE_INT_CST_LOW (TYPE_MAX_VALUE (TYPE_DOMAIN (type))) + 1
- : 0);
- return PUSH_DERIVED_LEVEL (DT_ARY, m);
---- 539,546 ----
- sdb_dims[sdb_n_dims++]
- = (TYPE_DOMAIN (type)
-! && TREE_CODE (TYPE_MAX_VALUE (TYPE_DOMAIN (type))) == INTEGER_CST
-! && TREE_CODE (TYPE_MIN_VALUE (TYPE_DOMAIN (type))) == INTEGER_CST
-! ? (TREE_INT_CST_LOW (TYPE_MAX_VALUE (TYPE_DOMAIN (type)))
-! - TREE_INT_CST_LOW (TYPE_MIN_VALUE (TYPE_DOMAIN (type))) + 1)
- : 0);
- return PUSH_DERIVED_LEVEL (DT_ARY, m);
-diff -rcp2N gcc-2.7.2.2/stmt.c g77-new/stmt.c
-*** gcc-2.7.2.2/stmt.c Tue Sep 12 19:01:54 1995
---- g77-new/stmt.c Sun Aug 10 18:46:56 1997
-*************** fixup_gotos (thisblock, stack_level, cle
-*** 1244,1249 ****
- poplevel (1, 0, 0);
- end_sequence ();
-! f->before_jump
-! = emit_insns_after (cleanup_insns, f->before_jump);
-
- f->cleanup_list_list = TREE_CHAIN (lists);
---- 1244,1250 ----
- poplevel (1, 0, 0);
- end_sequence ();
-! if (cleanup_insns != 0)
-! f->before_jump
-! = emit_insns_after (cleanup_insns, f->before_jump);
-
- f->cleanup_list_list = TREE_CHAIN (lists);
-*************** expand_expr_stmt (exp)
-*** 1721,1725 ****
-
- last_expr_type = TREE_TYPE (exp);
-! if (! flag_syntax_only)
- last_expr_value = expand_expr (exp,
- (expr_stmts_for_value
---- 1722,1726 ----
-
- last_expr_type = TREE_TYPE (exp);
-! if (! flag_syntax_only || expr_stmts_for_value)
- last_expr_value = expand_expr (exp,
- (expr_stmts_for_value
-*************** expand_end_bindings (vars, mark_ends, do
-*** 3160,3163 ****
---- 3161,3169 ----
- #endif
-
-+ #ifdef HAVE_nonlocal_goto_receiver
-+ if (HAVE_nonlocal_goto_receiver)
-+ emit_insn (gen_nonlocal_goto_receiver ());
-+ #endif
-+
- /* The handler expects the desired label address in the static chain
- register. It tests the address and does an appropriate jump
-*************** expand_decl (decl)
-*** 3369,3393 ****
- = promote_mode (type, DECL_MODE (decl), &unsignedp, 0);
-
-! if (TREE_CODE (type) == COMPLEX_TYPE)
-! {
-! rtx realpart, imagpart;
-! enum machine_mode partmode = TYPE_MODE (TREE_TYPE (type));
-
-! /* For a complex type variable, make a CONCAT of two pseudos
-! so that the real and imaginary parts
-! can be allocated separately. */
-! realpart = gen_reg_rtx (partmode);
-! REG_USERVAR_P (realpart) = 1;
-! imagpart = gen_reg_rtx (partmode);
-! REG_USERVAR_P (imagpart) = 1;
-! DECL_RTL (decl) = gen_rtx (CONCAT, reg_mode, realpart, imagpart);
-! }
-! else
-! {
-! DECL_RTL (decl) = gen_reg_rtx (reg_mode);
-! if (TREE_CODE (type) == POINTER_TYPE)
-! mark_reg_pointer (DECL_RTL (decl));
-! REG_USERVAR_P (DECL_RTL (decl)) = 1;
-! }
- }
- else if (TREE_CODE (DECL_SIZE (decl)) == INTEGER_CST)
---- 3375,3383 ----
- = promote_mode (type, DECL_MODE (decl), &unsignedp, 0);
-
-! DECL_RTL (decl) = gen_reg_rtx (reg_mode);
-! mark_user_reg (DECL_RTL (decl));
-
-! if (TREE_CODE (type) == POINTER_TYPE)
-! mark_reg_pointer (DECL_RTL (decl));
- }
- else if (TREE_CODE (DECL_SIZE (decl)) == INTEGER_CST)
-*************** expand_decl (decl)
-*** 3462,3468 ****
- free_temp_slots ();
-
-! /* Allocate space on the stack for the variable. */
- address = allocate_dynamic_stack_space (size, NULL_RTX,
-! DECL_ALIGN (decl));
-
- /* Reference the variable indirect through that rtx. */
---- 3452,3461 ----
- free_temp_slots ();
-
-! /* Allocate space on the stack for the variable. Note that
-! DECL_ALIGN says how the variable is to be aligned and we
-! cannot use it to conclude anything about the alignment of
-! the size. */
- address = allocate_dynamic_stack_space (size, NULL_RTX,
-! TYPE_ALIGN (TREE_TYPE (decl)));
-
- /* Reference the variable indirect through that rtx. */
-diff -rcp2N gcc-2.7.2.2/stor-layout.c g77-new/stor-layout.c
-*** gcc-2.7.2.2/stor-layout.c Thu Feb 20 19:24:20 1997
---- g77-new/stor-layout.c Mon Aug 11 06:47:50 1997
-*************** layout_decl (decl, known_align)
-*** 255,259 ****
- if (maximum_field_alignment != 0)
- DECL_ALIGN (decl) = MIN (DECL_ALIGN (decl), maximum_field_alignment);
-! else if (flag_pack_struct)
- DECL_ALIGN (decl) = MIN (DECL_ALIGN (decl), BITS_PER_UNIT);
- }
---- 255,259 ----
- if (maximum_field_alignment != 0)
- DECL_ALIGN (decl) = MIN (DECL_ALIGN (decl), maximum_field_alignment);
-! else if (DECL_PACKED (decl))
- DECL_ALIGN (decl) = MIN (DECL_ALIGN (decl), BITS_PER_UNIT);
- }
-*************** layout_decl (decl, known_align)
-*** 261,265 ****
- if (DECL_BIT_FIELD (decl)
- && TYPE_SIZE (type) != 0
-! && TREE_CODE (TYPE_SIZE (type)) == INTEGER_CST)
- {
- register enum machine_mode xmode
---- 261,266 ----
- if (DECL_BIT_FIELD (decl)
- && TYPE_SIZE (type) != 0
-! && TREE_CODE (TYPE_SIZE (type)) == INTEGER_CST
-! && GET_MODE_CLASS (TYPE_MODE (type)) == MODE_INT)
- {
- register enum machine_mode xmode
-*************** layout_decl (decl, known_align)
-*** 278,281 ****
---- 279,291 ----
- }
-
-+ /* Turn off DECL_BIT_FIELD if we won't need it set. */
-+ if (DECL_BIT_FIELD (decl) && TYPE_MODE (type) == BLKmode
-+ && known_align % TYPE_ALIGN (type) == 0
-+ && DECL_SIZE (decl) != 0
-+ && (TREE_CODE (DECL_SIZE (decl)) != INTEGER_CST
-+ || (TREE_INT_CST_LOW (DECL_SIZE (decl)) % BITS_PER_UNIT) == 0)
-+ && DECL_ALIGN (decl) >= TYPE_ALIGN (type))
-+ DECL_BIT_FIELD (decl) = 0;
-+
- /* Evaluate nonconstant size only once, either now or as soon as safe. */
- if (DECL_SIZE (decl) != 0 && TREE_CODE (DECL_SIZE (decl)) != INTEGER_CST)
-*************** layout_record (rec)
-*** 380,384 ****
- if (maximum_field_alignment != 0)
- type_align = MIN (type_align, maximum_field_alignment);
-! else if (flag_pack_struct)
- type_align = MIN (type_align, BITS_PER_UNIT);
-
---- 390,394 ----
- if (maximum_field_alignment != 0)
- type_align = MIN (type_align, maximum_field_alignment);
-! else if (TYPE_PACKED (rec))
- type_align = MIN (type_align, BITS_PER_UNIT);
-
-*************** layout_record (rec)
-*** 422,428 ****
- && DECL_BIT_FIELD_TYPE (field)
- && !DECL_PACKED (field)
-- /* If #pragma pack is in effect, turn off this feature. */
- && maximum_field_alignment == 0
-- && !flag_pack_struct
- && !integer_zerop (DECL_SIZE (field)))
- {
---- 432,436 ----
-*************** layout_record (rec)
-*** 459,463 ****
- if (maximum_field_alignment != 0)
- type_align = MIN (type_align, maximum_field_alignment);
-! else if (flag_pack_struct)
- type_align = MIN (type_align, BITS_PER_UNIT);
-
---- 467,471 ----
- if (maximum_field_alignment != 0)
- type_align = MIN (type_align, maximum_field_alignment);
-! else if (TYPE_PACKED (rec))
- type_align = MIN (type_align, BITS_PER_UNIT);
-
-*************** layout_record (rec)
-*** 500,505 ****
- /* Do nothing. */;
- else if (TREE_CODE (dsize) == INTEGER_CST
- && TREE_INT_CST_HIGH (dsize) == 0
-! && TREE_INT_CST_LOW (dsize) + const_size > const_size)
- /* Use const_size if there's no overflow. */
- const_size += TREE_INT_CST_LOW (dsize);
---- 508,514 ----
- /* Do nothing. */;
- else if (TREE_CODE (dsize) == INTEGER_CST
-+ && ! TREE_CONSTANT_OVERFLOW (dsize)
- && TREE_INT_CST_HIGH (dsize) == 0
-! && TREE_INT_CST_LOW (dsize) + const_size >= const_size)
- /* Use const_size if there's no overflow. */
- const_size += TREE_INT_CST_LOW (dsize);
-*************** get_best_mode (bitsize, bitpos, align, l
-*** 1172,1175 ****
---- 1181,1192 ----
- enum machine_mode mode;
- int unit;
-+
-+ if (bitpos < 0)
-+ {
-+ /* For correct calculations and convenience, bias negative bitpos
-+ to become a non-negative value that is [1,bitsize], such that
-+ the relative bit offset to a multiple of bitsize is preserved. */
-+ bitpos = bitsize - ((-bitpos) % bitsize);
-+ }
-
- /* Find the narrowest integer mode that contains the bit field. */
-diff -rcp2N gcc-2.7.2.2/stupid.c g77-new/stupid.c
-*** gcc-2.7.2.2/stupid.c Sun Oct 29 07:45:22 1995
---- g77-new/stupid.c Sun Aug 10 18:46:01 1997
-*************** static int *uid_suid;
-*** 66,69 ****
---- 66,74 ----
- static int last_call_suid;
-
-+ /* Record the suid of the last NOTE_INSN_SETJMP
-+ so we can tell whether a pseudo reg crosses any setjmp. */
-+
-+ static int last_setjmp_suid;
-+
- /* Element N is suid of insn where life span of pseudo reg N ends.
- Element is 0 if register N has not been seen yet on backward scan. */
-*************** static char *regs_live;
-*** 89,92 ****
---- 94,101 ----
- static char *regs_change_size;
-
-+ /* Indexed by reg number, nonzero if reg crosses a setjmp. */
-+
-+ static char *regs_crosses_setjmp;
-+
- /* Indexed by insn's suid, the set of hard regs live after that insn. */
-
-*************** stupid_life_analysis (f, nregs, file)
-*** 149,152 ****
---- 158,162 ----
-
- last_call_suid = i + 1;
-+ last_setjmp_suid = i + 1;
- max_suid = i + 1;
-
-*************** stupid_life_analysis (f, nregs, file)
-*** 167,170 ****
---- 177,183 ----
- bzero ((char *) regs_change_size, nregs * sizeof (char));
-
-+ regs_crosses_setjmp = (char *) alloca (nregs * sizeof (char));
-+ bzero ((char *) regs_crosses_setjmp, nregs * sizeof (char));
-+
- reg_renumber = (short *) oballoc (nregs * sizeof (short));
- for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
-*************** stupid_life_analysis (f, nregs, file)
-*** 216,219 ****
---- 229,236 ----
- stupid_mark_refs (PATTERN (insn), insn);
-
-+ if (GET_CODE (insn) == NOTE
-+ && NOTE_LINE_NUMBER (insn) == NOTE_INSN_SETJMP)
-+ last_setjmp_suid = INSN_SUID (insn);
-+
- /* Mark all call-clobbered regs as live after each call insn
- so that a pseudo whose life span includes this insn
-*************** stupid_life_analysis (f, nregs, file)
-*** 254,259 ****
- register int r = reg_order[i];
-
-! /* Some regnos disappear from the rtl. Ignore them to avoid crash. */
-! if (regno_reg_rtx[r] == 0)
- continue;
-
---- 271,277 ----
- register int r = reg_order[i];
-
-! /* Some regnos disappear from the rtl. Ignore them to avoid crash.
-! Also don't allocate registers that cross a setjmp. */
-! if (regno_reg_rtx[r] == 0 || regs_crosses_setjmp[r])
- continue;
-
-*************** stupid_reg_compare (r1p, r2p)
-*** 309,314 ****
- that can hold a value of machine-mode MODE
- (but actually we test only the first of the block for holding MODE)
-! currently free from after insn whose suid is BIRTH
-! through the insn whose suid is DEATH,
- and return the number of the first of them.
- Return -1 if such a block cannot be found.
---- 327,332 ----
- that can hold a value of machine-mode MODE
- (but actually we test only the first of the block for holding MODE)
-! currently free from after insn whose suid is BORN_INSN
-! through the insn whose suid is DEAD_INSN,
- and return the number of the first of them.
- Return -1 if such a block cannot be found.
-*************** stupid_find_reg (call_preserved, class,
-*** 338,341 ****
---- 356,366 ----
- #endif
-
-+ /* If this register's life is more than 5,000 insns, we probably
-+ can't allocate it, so don't waste the time trying. This avoid
-+ quadratic behavior on programs that have regularly-occurring
-+ SAVE_EXPRs. */
-+ if (dead_insn > born_insn + 5000)
-+ return -1;
-+
- COPY_HARD_REG_SET (used,
- call_preserved ? call_used_reg_set : fixed_reg_set);
-*************** stupid_mark_refs (x, insn)
-*** 488,491 ****
---- 513,519 ----
- if (last_call_suid < reg_where_dead[regno])
- reg_n_calls_crossed[regno] += 1;
-+
-+ if (last_setjmp_suid < reg_where_dead[regno])
-+ regs_crosses_setjmp[regno] = 1;
- }
- }
-diff -rcp2N gcc-2.7.2.2/toplev.c g77-new/toplev.c
-*** gcc-2.7.2.2/toplev.c Fri Oct 20 17:56:35 1995
---- g77-new/toplev.c Sun Aug 10 18:43:36 1997
-*************** int flag_unroll_loops;
-*** 388,391 ****
---- 388,405 ----
- int flag_unroll_all_loops;
-
-+ /* Nonzero forces all invariant computations in loops to be moved
-+ outside the loop. */
-+
-+ int flag_move_all_movables = 0;
-+
-+ /* Nonzero forces all general induction variables in loops to be
-+ strength reduced. */
-+
-+ int flag_reduce_all_givs = 0;
-+
-+ /* Nonzero gets another run of loop_optimize performed. */
-+
-+ int flag_rerun_loop_opt = 0;
-+
- /* Nonzero for -fwritable-strings:
- store string constants in data segment and don't uniquize them. */
-*************** int flag_gnu_linker = 1;
-*** 522,525 ****
---- 536,550 ----
- int flag_pack_struct = 0;
-
-+ /* 1 if alias checking is on (by default, when -O). */
-+ int flag_alias_check = 0;
-+
-+ /* 0 if pointer arguments may alias each other. True in C.
-+ 1 if pointer arguments may not alias each other but may alias
-+ global variables.
-+ 2 if pointer arguments may not alias each other and may not
-+ alias global variables. True in Fortran.
-+ This defaults to 0 for C. */
-+ int flag_argument_noalias = 0;
-+
- /* Table of language-independent -f options.
- STRING is the option name. VARIABLE is the address of the variable.
-*************** struct { char *string; int *variable; in
-*** 542,545 ****
---- 567,573 ----
- {"unroll-loops", &flag_unroll_loops, 1},
- {"unroll-all-loops", &flag_unroll_all_loops, 1},
-+ {"move-all-movables", &flag_move_all_movables, 1},
-+ {"reduce-all-givs", &flag_reduce_all_givs, 1},
-+ {"rerun-loop-opt", &flag_rerun_loop_opt, 1},
- {"writable-strings", &flag_writable_strings, 1},
- {"peephole", &flag_no_peephole, 0},
-*************** struct { char *string; int *variable; in
-*** 568,572 ****
- {"gnu-linker", &flag_gnu_linker, 1},
- {"pack-struct", &flag_pack_struct, 1},
-! {"bytecode", &output_bytecode, 1}
- };
-
---- 596,604 ----
- {"gnu-linker", &flag_gnu_linker, 1},
- {"pack-struct", &flag_pack_struct, 1},
-! {"bytecode", &output_bytecode, 1},
-! {"alias-check", &flag_alias_check, 1},
-! {"argument-alias", &flag_argument_noalias, 0},
-! {"argument-noalias", &flag_argument_noalias, 1},
-! {"argument-noalias-global", &flag_argument_noalias, 2}
- };
-
-*************** rest_of_compilation (decl)
-*** 2715,2725 ****
- finish_compilation will call rest_of_compilation again
- for those functions that need to be output. Also defer those
-! functions that we are supposed to defer. */
-!
-! if (DECL_DEFER_OUTPUT (decl)
-! || ((specd || DECL_INLINE (decl))
-! && ((! TREE_PUBLIC (decl) && ! TREE_ADDRESSABLE (decl)
-! && ! flag_keep_inline_functions)
-! || DECL_EXTERNAL (decl))))
- {
- DECL_DEFER_OUTPUT (decl) = 1;
---- 2747,2760 ----
- finish_compilation will call rest_of_compilation again
- for those functions that need to be output. Also defer those
-! functions that we are supposed to defer. We cannot defer
-! functions containing nested functions since the nested function
-! data is in our non-saved obstack. */
-!
-! if (! current_function_contains_functions
-! && (DECL_DEFER_OUTPUT (decl)
-! || ((specd || DECL_INLINE (decl))
-! && ((! TREE_PUBLIC (decl) && ! TREE_ADDRESSABLE (decl)
-! && ! flag_keep_inline_functions)
-! || DECL_EXTERNAL (decl)))))
- {
- DECL_DEFER_OUTPUT (decl) = 1;
-*************** rest_of_compilation (decl)
-*** 2893,2897 ****
---- 2928,2951 ----
- TIMEVAR (loop_time,
- {
-+ int save_unroll_flag;
-+ int save_unroll_all_flag;
-+
-+ if (flag_rerun_loop_opt)
-+ {
-+ save_unroll_flag = flag_unroll_loops;
-+ save_unroll_all_flag = flag_unroll_all_loops;
-+ flag_unroll_loops = 0;
-+ flag_unroll_all_loops = 0;
-+ }
-+
- loop_optimize (insns, loop_dump_file);
-+
-+ if (flag_rerun_loop_opt)
-+ {
-+ flag_unroll_loops = save_unroll_flag;
-+ flag_unroll_all_loops = save_unroll_all_flag;
-+
-+ loop_optimize (insns, loop_dump_file);
-+ }
- });
- }
-*************** rest_of_compilation (decl)
-*** 3280,3283 ****
---- 3334,3341 ----
- resume_temporary_allocation ();
-
-+ /* Show no temporary slots allocated. */
-+
-+ init_temp_slots ();
-+
- /* The parsing time is all the time spent in yyparse
- *except* what is spent in this function. */
-*************** main (argc, argv, envp)
-*** 3383,3386 ****
---- 3441,3445 ----
- flag_omit_frame_pointer = 1;
- #endif
-+ flag_alias_check = 1;
- }
-
-diff -rcp2N gcc-2.7.2.2/tree.c g77-new/tree.c
-*** gcc-2.7.2.2/tree.c Sun Oct 1 21:26:56 1995
---- g77-new/tree.c Sun Aug 10 18:47:23 1997
-*************** build_string (len, str)
-*** 1428,1436 ****
- /* Return a newly constructed COMPLEX_CST node whose value is
- specified by the real and imaginary parts REAL and IMAG.
-! Both REAL and IMAG should be constant nodes.
-! The TREE_TYPE is not initialized. */
-
- tree
-! build_complex (real, imag)
- tree real, imag;
- {
---- 1428,1437 ----
- /* Return a newly constructed COMPLEX_CST node whose value is
- specified by the real and imaginary parts REAL and IMAG.
-! Both REAL and IMAG should be constant nodes. TYPE, if specified,
-! will be the type of the COMPLEX_CST; otherwise a new type will be made. */
-
- tree
-! build_complex (type, real, imag)
-! tree type;
- tree real, imag;
- {
-*************** build_complex (real, imag)
-*** 1439,1443 ****
- TREE_REALPART (t) = real;
- TREE_IMAGPART (t) = imag;
-! TREE_TYPE (t) = build_complex_type (TREE_TYPE (real));
- TREE_OVERFLOW (t) = TREE_OVERFLOW (real) | TREE_OVERFLOW (imag);
- TREE_CONSTANT_OVERFLOW (t)
---- 1440,1444 ----
- TREE_REALPART (t) = real;
- TREE_IMAGPART (t) = imag;
-! TREE_TYPE (t) = type ? type : build_complex_type (TREE_TYPE (real));
- TREE_OVERFLOW (t) = TREE_OVERFLOW (real) | TREE_OVERFLOW (imag);
- TREE_CONSTANT_OVERFLOW (t)
-*************** integer_zerop (expr)
-*** 1484,1487 ****
---- 1485,1489 ----
-
- return ((TREE_CODE (expr) == INTEGER_CST
-+ && ! TREE_CONSTANT_OVERFLOW (expr)
- && TREE_INT_CST_LOW (expr) == 0
- && TREE_INT_CST_HIGH (expr) == 0)
-*************** integer_onep (expr)
-*** 1501,1504 ****
---- 1503,1507 ----
-
- return ((TREE_CODE (expr) == INTEGER_CST
-+ && ! TREE_CONSTANT_OVERFLOW (expr)
- && TREE_INT_CST_LOW (expr) == 1
- && TREE_INT_CST_HIGH (expr) == 0)
-*************** integer_all_onesp (expr)
-*** 1525,1529 ****
- return 1;
-
-! else if (TREE_CODE (expr) != INTEGER_CST)
- return 0;
-
---- 1528,1533 ----
- return 1;
-
-! else if (TREE_CODE (expr) != INTEGER_CST
-! || TREE_CONSTANT_OVERFLOW (expr))
- return 0;
-
-*************** integer_pow2p (expr)
-*** 1574,1578 ****
- return 1;
-
-! if (TREE_CODE (expr) != INTEGER_CST)
- return 0;
-
---- 1578,1582 ----
- return 1;
-
-! if (TREE_CODE (expr) != INTEGER_CST || TREE_CONSTANT_OVERFLOW (expr))
- return 0;
-
-*************** real_zerop (expr)
-*** 1596,1599 ****
---- 1600,1604 ----
-
- return ((TREE_CODE (expr) == REAL_CST
-+ && ! TREE_CONSTANT_OVERFLOW (expr)
- && REAL_VALUES_EQUAL (TREE_REAL_CST (expr), dconst0))
- || (TREE_CODE (expr) == COMPLEX_CST
-*************** real_onep (expr)
-*** 1611,1614 ****
---- 1616,1620 ----
-
- return ((TREE_CODE (expr) == REAL_CST
-+ && ! TREE_CONSTANT_OVERFLOW (expr)
- && REAL_VALUES_EQUAL (TREE_REAL_CST (expr), dconst1))
- || (TREE_CODE (expr) == COMPLEX_CST
-*************** real_twop (expr)
-*** 1626,1629 ****
---- 1632,1636 ----
-
- return ((TREE_CODE (expr) == REAL_CST
-+ && ! TREE_CONSTANT_OVERFLOW (expr)
- && REAL_VALUES_EQUAL (TREE_REAL_CST (expr), dconst2))
- || (TREE_CODE (expr) == COMPLEX_CST
-*************** staticp (arg)
-*** 2055,2061 ****
- return 1;
-
- case COMPONENT_REF:
- case BIT_FIELD_REF:
-! return staticp (TREE_OPERAND (arg, 0));
-
- #if 0
---- 2062,2073 ----
- return 1;
-
-+ /* If we are referencing a bitfield, we can't evaluate an
-+ ADDR_EXPR at compile time and so it isn't a constant. */
- case COMPONENT_REF:
-+ return (! DECL_BIT_FIELD (TREE_OPERAND (arg, 1))
-+ && staticp (TREE_OPERAND (arg, 0)));
-+
- case BIT_FIELD_REF:
-! return 0;
-
- #if 0
-*************** contains_placeholder_p (exp)
-*** 2157,2160 ****
---- 2169,2174 ----
- if (code == WITH_RECORD_EXPR)
- return 0;
-+ else if (code == PLACEHOLDER_EXPR)
-+ return 1;
-
- switch (TREE_CODE_CLASS (code))
-*************** substitute_in_expr (exp, f, r)
-*** 2204,2207 ****
---- 2218,2222 ----
- {
- enum tree_code code = TREE_CODE (exp);
-+ tree op0, op1, op2;
- tree new = 0;
- tree inner;
-*************** substitute_in_expr (exp, f, r)
-*** 2225,2231 ****
- {
- case 1:
-! new = fold (build1 (code, TREE_TYPE (exp),
-! substitute_in_expr (TREE_OPERAND (exp, 0),
-! f, r)));
- break;
-
---- 2240,2248 ----
- {
- case 1:
-! op0 = substitute_in_expr (TREE_OPERAND (exp, 0), f, r);
-! if (op0 == TREE_OPERAND (exp, 0))
-! return exp;
-!
-! new = fold (build1 (code, TREE_TYPE (exp), op0));
- break;
-
-*************** substitute_in_expr (exp, f, r)
-*** 2238,2245 ****
- abort ();
-
-! new = fold (build (code, TREE_TYPE (exp),
-! substitute_in_expr (TREE_OPERAND (exp, 0), f, r),
-! substitute_in_expr (TREE_OPERAND (exp, 1),
-! f, r)));
- break;
-
---- 2255,2264 ----
- abort ();
-
-! op0 = substitute_in_expr (TREE_OPERAND (exp, 0), f, r);
-! op1 = substitute_in_expr (TREE_OPERAND (exp, 1), f, r);
-! if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1))
-! return exp;
-!
-! new = fold (build (code, TREE_TYPE (exp), op0, op1));
- break;
-
-*************** substitute_in_expr (exp, f, r)
-*** 2253,2261 ****
- abort ();
-
-! new = fold (build (code, TREE_TYPE (exp),
-! substitute_in_expr (TREE_OPERAND (exp, 0), f, r),
-! substitute_in_expr (TREE_OPERAND (exp, 1), f, r),
-! substitute_in_expr (TREE_OPERAND (exp, 2),
-! f, r)));
- }
-
---- 2272,2283 ----
- abort ();
-
-! op0 = substitute_in_expr (TREE_OPERAND (exp, 0), f, r);
-! op1 = substitute_in_expr (TREE_OPERAND (exp, 1), f, r);
-! op2 = substitute_in_expr (TREE_OPERAND (exp, 2), f, r);
-! if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1)
-! && op2 == TREE_OPERAND (exp, 2))
-! return exp;
-!
-! new = fold (build (code, TREE_TYPE (exp), op0, op1, op2));
- }
-
-*************** substitute_in_expr (exp, f, r)
-*** 2276,2302 ****
- return r;
-
-! new = fold (build (code, TREE_TYPE (exp),
-! substitute_in_expr (TREE_OPERAND (exp, 0), f, r),
- TREE_OPERAND (exp, 1)));
- break;
-
- case BIT_FIELD_REF:
-! new = fold (build (code, TREE_TYPE (exp),
-! substitute_in_expr (TREE_OPERAND (exp, 0), f, r),
-! substitute_in_expr (TREE_OPERAND (exp, 1), f, r),
-! substitute_in_expr (TREE_OPERAND (exp, 2), f, r)));
- break;
-
- case INDIRECT_REF:
- case BUFFER_REF:
-! new = fold (build1 (code, TREE_TYPE (exp),
-! substitute_in_expr (TREE_OPERAND (exp, 0),
-! f, r)));
- break;
-
- case OFFSET_REF:
-! new = fold (build (code, TREE_TYPE (exp),
-! substitute_in_expr (TREE_OPERAND (exp, 0), f, r),
-! substitute_in_expr (TREE_OPERAND (exp, 1), f, r)));
- break;
- }
---- 2298,2342 ----
- return r;
-
-! /* If this expression hasn't been completed let, leave it
-! alone. */
-! if (TREE_CODE (inner) == PLACEHOLDER_EXPR
-! && TREE_TYPE (inner) == 0)
-! return exp;
-!
-! op0 = substitute_in_expr (TREE_OPERAND (exp, 0), f, r);
-! if (op0 == TREE_OPERAND (exp, 0))
-! return exp;
-!
-! new = fold (build (code, TREE_TYPE (exp), op0,
- TREE_OPERAND (exp, 1)));
- break;
-
- case BIT_FIELD_REF:
-! op0 = substitute_in_expr (TREE_OPERAND (exp, 0), f, r);
-! op1 = substitute_in_expr (TREE_OPERAND (exp, 1), f, r);
-! op2 = substitute_in_expr (TREE_OPERAND (exp, 2), f, r);
-! if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1)
-! && op2 == TREE_OPERAND (exp, 2))
-! return exp;
-!
-! new = fold (build (code, TREE_TYPE (exp), op0, op1, op2));
- break;
-
- case INDIRECT_REF:
- case BUFFER_REF:
-! op0 = substitute_in_expr (TREE_OPERAND (exp, 0), f, r);
-! if (op0 == TREE_OPERAND (exp, 0))
-! return exp;
-!
-! new = fold (build1 (code, TREE_TYPE (exp), op0));
- break;
-
- case OFFSET_REF:
-! op0 = substitute_in_expr (TREE_OPERAND (exp, 0), f, r);
-! op1 = substitute_in_expr (TREE_OPERAND (exp, 1), f, r);
-! if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1))
-! return exp;
-!
-! new = fold (build (code, TREE_TYPE (exp), op0, op1));
- break;
- }
-*************** substitute_in_expr (exp, f, r)
-*** 2311,2454 ****
- }
-
-- /* Given a type T, a FIELD_DECL F, and a replacement value R,
-- return a new type with all size expressions that contain F
-- updated by replacing F with R. */
--
-- tree
-- substitute_in_type (t, f, r)
-- tree t, f, r;
-- {
-- switch (TREE_CODE (t))
-- {
-- case POINTER_TYPE:
-- case VOID_TYPE:
-- return t;
-- case INTEGER_TYPE:
-- case ENUMERAL_TYPE:
-- case BOOLEAN_TYPE:
-- case CHAR_TYPE:
-- if ((TREE_CODE (TYPE_MIN_VALUE (t)) != INTEGER_CST
-- && contains_placeholder_p (TYPE_MIN_VALUE (t)))
-- || (TREE_CODE (TYPE_MAX_VALUE (t)) != INTEGER_CST
-- && contains_placeholder_p (TYPE_MAX_VALUE (t))))
-- return build_range_type (t,
-- substitute_in_expr (TYPE_MIN_VALUE (t), f, r),
-- substitute_in_expr (TYPE_MAX_VALUE (t), f, r));
-- return t;
--
-- case REAL_TYPE:
-- if ((TYPE_MIN_VALUE (t) != 0
-- && TREE_CODE (TYPE_MIN_VALUE (t)) != REAL_CST
-- && contains_placeholder_p (TYPE_MIN_VALUE (t)))
-- || (TYPE_MAX_VALUE (t) != 0
-- && TREE_CODE (TYPE_MAX_VALUE (t)) != REAL_CST
-- && contains_placeholder_p (TYPE_MAX_VALUE (t))))
-- {
-- t = build_type_copy (t);
--
-- if (TYPE_MIN_VALUE (t))
-- TYPE_MIN_VALUE (t) = substitute_in_expr (TYPE_MIN_VALUE (t), f, r);
-- if (TYPE_MAX_VALUE (t))
-- TYPE_MAX_VALUE (t) = substitute_in_expr (TYPE_MAX_VALUE (t), f, r);
-- }
-- return t;
--
-- case COMPLEX_TYPE:
-- return build_complex_type (substitute_in_type (TREE_TYPE (t), f, r));
--
-- case OFFSET_TYPE:
-- case METHOD_TYPE:
-- case REFERENCE_TYPE:
-- case FILE_TYPE:
-- case SET_TYPE:
-- case FUNCTION_TYPE:
-- case LANG_TYPE:
-- /* Don't know how to do these yet. */
-- abort ();
--
-- case ARRAY_TYPE:
-- t = build_array_type (substitute_in_type (TREE_TYPE (t), f, r),
-- substitute_in_type (TYPE_DOMAIN (t), f, r));
-- TYPE_SIZE (t) = 0;
-- layout_type (t);
-- return t;
--
-- case RECORD_TYPE:
-- case UNION_TYPE:
-- case QUAL_UNION_TYPE:
-- {
-- tree new = copy_node (t);
-- tree field;
-- tree last_field = 0;
--
-- /* Start out with no fields, make new fields, and chain them
-- in. */
--
-- TYPE_FIELDS (new) = 0;
-- TYPE_SIZE (new) = 0;
--
-- for (field = TYPE_FIELDS (t); field;
-- field = TREE_CHAIN (field))
-- {
-- tree new_field = copy_node (field);
--
-- TREE_TYPE (new_field)
-- = substitute_in_type (TREE_TYPE (new_field), f, r);
--
-- /* If this is an anonymous field and the type of this field is
-- a UNION_TYPE or RECORD_TYPE with no elements, ignore it. If
-- the type just has one element, treat that as the field.
-- But don't do this if we are processing a QUAL_UNION_TYPE. */
-- if (TREE_CODE (t) != QUAL_UNION_TYPE && DECL_NAME (new_field) == 0
-- && (TREE_CODE (TREE_TYPE (new_field)) == UNION_TYPE
-- || TREE_CODE (TREE_TYPE (new_field)) == RECORD_TYPE))
-- {
-- if (TYPE_FIELDS (TREE_TYPE (new_field)) == 0)
-- continue;
--
-- if (TREE_CHAIN (TYPE_FIELDS (TREE_TYPE (new_field))) == 0)
-- new_field = TYPE_FIELDS (TREE_TYPE (new_field));
-- }
--
-- DECL_CONTEXT (new_field) = new;
-- DECL_SIZE (new_field) = 0;
--
-- if (TREE_CODE (t) == QUAL_UNION_TYPE)
-- {
-- /* Do the substitution inside the qualifier and if we find
-- that this field will not be present, omit it. */
-- DECL_QUALIFIER (new_field)
-- = substitute_in_expr (DECL_QUALIFIER (field), f, r);
-- if (integer_zerop (DECL_QUALIFIER (new_field)))
-- continue;
-- }
--
-- if (last_field == 0)
-- TYPE_FIELDS (new) = new_field;
-- else
-- TREE_CHAIN (last_field) = new_field;
--
-- last_field = new_field;
--
-- /* If this is a qualified type and this field will always be
-- present, we are done. */
-- if (TREE_CODE (t) == QUAL_UNION_TYPE
-- && integer_onep (DECL_QUALIFIER (new_field)))
-- break;
-- }
--
-- /* If this used to be a qualified union type, but we now know what
-- field will be present, make this a normal union. */
-- if (TREE_CODE (new) == QUAL_UNION_TYPE
-- && (TYPE_FIELDS (new) == 0
-- || integer_onep (DECL_QUALIFIER (TYPE_FIELDS (new)))))
-- TREE_SET_CODE (new, UNION_TYPE);
--
-- layout_type (new);
-- return new;
-- }
-- }
-- }
--
- /* Stabilize a reference so that we can use it any number of times
- without causing its operands to be evaluated more than once.
---- 2351,2354 ----
-*************** build_type_variant (type, constp, volati
-*** 3141,3145 ****
- preserve the TYPE_NAME, since there is code that depends on this. */
-
-! for (t = TYPE_MAIN_VARIANT(type); t; t = TYPE_NEXT_VARIANT (t))
- if (constp == TYPE_READONLY (t) && volatilep == TYPE_VOLATILE (t)
- && TYPE_NAME (t) == TYPE_NAME (type))
---- 3041,3045 ----
- preserve the TYPE_NAME, since there is code that depends on this. */
-
-! for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
- if (constp == TYPE_READONLY (t) && volatilep == TYPE_VOLATILE (t)
- && TYPE_NAME (t) == TYPE_NAME (type))
-*************** get_unwidened (op, for_type)
-*** 4051,4055 ****
- if (TREE_CODE (op) == COMPONENT_REF
- /* Since type_for_size always gives an integer type. */
-! && TREE_CODE (type) != REAL_TYPE)
- {
- unsigned innerprec = TREE_INT_CST_LOW (DECL_SIZE (TREE_OPERAND (op, 1)));
---- 3951,3957 ----
- if (TREE_CODE (op) == COMPONENT_REF
- /* Since type_for_size always gives an integer type. */
-! && TREE_CODE (type) != REAL_TYPE
-! /* Don't crash if field not layed out yet. */
-! && DECL_SIZE (TREE_OPERAND (op, 1)) != 0)
- {
- unsigned innerprec = TREE_INT_CST_LOW (DECL_SIZE (TREE_OPERAND (op, 1)));
-diff -rcp2N gcc-2.7.2.2/tree.h g77-new/tree.h
-*** gcc-2.7.2.2/tree.h Mon Sep 25 17:49:40 1995
---- g77-new/tree.h Sun Aug 10 18:47:08 1997
-*************** enum built_in_function
-*** 98,101 ****
---- 98,103 ----
- BUILT_IN_APPLY,
- BUILT_IN_RETURN,
-+ BUILT_IN_SETJMP,
-+ BUILT_IN_LONGJMP,
-
- /* C++ extensions */
-*************** struct tree_int_cst
-*** 408,411 ****
---- 410,415 ----
- {
- char common[sizeof (struct tree_common)];
-+ struct rtx_def *rtl; /* acts as link to register transfer language
-+ (rtl) info */
- HOST_WIDE_INT int_cst_low;
- HOST_WIDE_INT int_cst_high;
-*************** struct tree_type
-*** 957,960 ****
---- 961,967 ----
- #define DECL_STATIC_DESTRUCTOR(NODE) ((NODE)->decl.static_dtor_flag)
-
-+ /* In a PARM_DECL, nonzero if this is a restricted pointer. */
-+ #define DECL_RESTRICT(NODE) (NODE)->decl.static_ctor_flag
-+
- /* Used to indicate that this DECL represents a compiler-generated entity. */
- #define DECL_ARTIFICIAL(NODE) ((NODE)->decl.artificial_flag)
-*************** extern tree build_int_2_wide PROTO((HOS
-*** 1176,1180 ****
- extern tree build_real PROTO((tree, REAL_VALUE_TYPE));
- extern tree build_real_from_int_cst PROTO((tree, tree));
-! extern tree build_complex PROTO((tree, tree));
- extern tree build_string PROTO((int, char *));
- extern tree build1 PROTO((enum tree_code, tree, tree));
---- 1183,1187 ----
- extern tree build_real PROTO((tree, REAL_VALUE_TYPE));
- extern tree build_real_from_int_cst PROTO((tree, tree));
-! extern tree build_complex PROTO((tree, tree, tree));
- extern tree build_string PROTO((int, char *));
- extern tree build1 PROTO((enum tree_code, tree, tree));
-*************** extern int contains_placeholder_p PROTO(
-*** 1378,1387 ****
- extern tree substitute_in_expr PROTO((tree, tree, tree));
-
-- /* Given a type T, a FIELD_DECL F, and a replacement value R,
-- return a new type with all size expressions that contain F
-- updated by replacing the reference to F with R. */
--
-- extern tree substitute_in_type PROTO((tree, tree, tree));
--
- /* variable_size (EXP) is like save_expr (EXP) except that it
- is for the special case of something that is part of a
---- 1385,1388 ----
-*************** extern tree maybe_build_cleanup PROTO((
-*** 1456,1460 ****
- and find the ultimate containing object, which is returned. */
-
-! extern tree get_inner_reference PROTO((tree, int *, int *, tree *, enum machine_mode *, int *, int *));
-
- /* Return the FUNCTION_DECL which provides this _DECL with its context,
---- 1457,1463 ----
- and find the ultimate containing object, which is returned. */
-
-! extern tree get_inner_reference PROTO((tree, int *, int *, tree *,
-! enum machine_mode *, int *,
-! int *, int *));
-
- /* Return the FUNCTION_DECL which provides this _DECL with its context,
-diff -rcp2N gcc-2.7.2.2/unroll.c g77-new/unroll.c
-*** gcc-2.7.2.2/unroll.c Sat Aug 19 17:33:26 1995
---- g77-new/unroll.c Thu Jul 10 20:09:10 1997
-*************** unroll_loop (loop_end, insn_count, loop_
-*** 268,273 ****
- structure of the function. This can happen as a result of the
- "if (foo) bar; else break;" optimization in jump.c. */
-
-! if (write_symbols != NO_DEBUG)
- {
- int block_begins = 0;
---- 268,277 ----
- structure of the function. This can happen as a result of the
- "if (foo) bar; else break;" optimization in jump.c. */
-+ /* ??? Gcc has a general policy that -g is never supposed to change the code
-+ that the compiler emits, so we must disable this optimization always,
-+ even if debug info is not being output. This is rare, so this should
-+ not be a significant performance problem. */
-
-! if (1 /* write_symbols != NO_DEBUG */)
- {
- int block_begins = 0;
-*************** unroll_loop (loop_end, insn_count, loop_
-*** 633,636 ****
---- 637,657 ----
- }
-
-+ if (unroll_type == UNROLL_NAIVE
-+ && GET_CODE (last_loop_insn) == JUMP_INSN
-+ && start_label != JUMP_LABEL (last_loop_insn))
-+ {
-+ /* ??? The loop ends with a conditional branch that does not branch back
-+ to the loop start label. In this case, we must emit an unconditional
-+ branch to the loop exit after emitting the final branch.
-+ copy_loop_body does not have support for this currently, so we
-+ give up. It doesn't seem worthwhile to unroll anyways since
-+ unrolling would increase the number of branch instructions
-+ executed. */
-+ if (loop_dump_stream)
-+ fprintf (loop_dump_stream,
-+ "Unrolling failure: final conditional branch not to loop start\n");
-+ return;
-+ }
-+
- /* Allocate a translation table for the labels and insn numbers.
- They will be filled in as we copy the insns in the loop. */
-*************** unroll_loop (loop_end, insn_count, loop_
-*** 995,999 ****
- for (j = FIRST_PSEUDO_REGISTER; j < max_reg_before_loop; j++)
- if (local_regno[j])
-! map->reg_map[j] = gen_reg_rtx (GET_MODE (regno_reg_rtx[j]));
-
- /* The last copy needs the compare/branch insns at the end,
---- 1016,1024 ----
- for (j = FIRST_PSEUDO_REGISTER; j < max_reg_before_loop; j++)
- if (local_regno[j])
-! {
-! map->reg_map[j] = gen_reg_rtx (GET_MODE (regno_reg_rtx[j]));
-! record_base_value (REGNO (map->reg_map[j]),
-! regno_reg_rtx[j]);
-! }
-
- /* The last copy needs the compare/branch insns at the end,
-*************** unroll_loop (loop_end, insn_count, loop_
-*** 1136,1140 ****
- for (j = FIRST_PSEUDO_REGISTER; j < max_reg_before_loop; j++)
- if (local_regno[j])
-! map->reg_map[j] = gen_reg_rtx (GET_MODE (regno_reg_rtx[j]));
-
- /* If loop starts with a branch to the test, then fix it so that
---- 1161,1169 ----
- for (j = FIRST_PSEUDO_REGISTER; j < max_reg_before_loop; j++)
- if (local_regno[j])
-! {
-! map->reg_map[j] = gen_reg_rtx (GET_MODE (regno_reg_rtx[j]));
-! record_base_value (REGNO (map->reg_map[j]),
-! regno_reg_rtx[j]);
-! }
-
- /* If loop starts with a branch to the test, then fix it so that
-*************** copy_loop_body (copy_start, copy_end, ma
-*** 1605,1608 ****
---- 1634,1641 ----
- int this_giv_inc = INTVAL (giv_inc);
-
-+ /* If this DEST_ADDR giv was not split, then ignore it. */
-+ if (*tv->location != tv->dest_reg)
-+ continue;
-+
- /* Scale this_giv_inc if the multiplicative factors of
- the two givs are different. */
-*************** copy_loop_body (copy_start, copy_end, ma
-*** 1631,1635 ****
- incrementing the shared pseudo reg more than
- once. */
-! if (! tv->same_insn)
- {
- /* tv->dest_reg may actually be a (PLUS (REG)
---- 1664,1668 ----
- incrementing the shared pseudo reg more than
- once. */
-! if (! tv->same_insn && ! tv->shared)
- {
- /* tv->dest_reg may actually be a (PLUS (REG)
-*************** copy_loop_body (copy_start, copy_end, ma
-*** 1757,1760 ****
---- 1790,1794 ----
- giv_dest_reg = tem;
- map->reg_map[regno] = tem;
-+ record_base_value (REGNO (tem), giv_src_reg);
- }
- else
-*************** iteration_info (iteration_var, initial_v
-*** 2220,2231 ****
- return;
- }
-! /* Reject iteration variables larger than the host long size, since they
- could result in a number of iterations greater than the range of our
-! `unsigned long' variable loop_n_iterations. */
-! else if (GET_MODE_BITSIZE (GET_MODE (iteration_var)) > HOST_BITS_PER_LONG)
- {
- if (loop_dump_stream)
- fprintf (loop_dump_stream,
-! "Loop unrolling: Iteration var rejected because mode larger than host long.\n");
- return;
- }
---- 2254,2266 ----
- return;
- }
-! /* Reject iteration variables larger than the host wide int size, since they
- could result in a number of iterations greater than the range of our
-! `unsigned HOST_WIDE_INT' variable loop_n_iterations. */
-! else if ((GET_MODE_BITSIZE (GET_MODE (iteration_var))
-! > HOST_BITS_PER_WIDE_INT))
- {
- if (loop_dump_stream)
- fprintf (loop_dump_stream,
-! "Loop unrolling: Iteration var rejected because mode too large.\n");
- return;
- }
-*************** find_splittable_regs (unroll_type, loop_
-*** 2443,2447 ****
- {
- rtx tem = gen_reg_rtx (bl->biv->mode);
-!
- emit_insn_before (gen_move_insn (tem, bl->biv->src_reg),
- loop_start);
---- 2478,2483 ----
- {
- rtx tem = gen_reg_rtx (bl->biv->mode);
-!
-! record_base_value (REGNO (tem), bl->biv->add_val);
- emit_insn_before (gen_move_insn (tem, bl->biv->src_reg),
- loop_start);
-*************** find_splittable_regs (unroll_type, loop_
-*** 2500,2503 ****
---- 2536,2541 ----
- exits. */
- rtx tem = gen_reg_rtx (bl->biv->mode);
-+ record_base_value (REGNO (tem), bl->biv->add_val);
-+
- emit_insn_before (gen_move_insn (tem, bl->biv->src_reg),
- loop_start);
-*************** find_splittable_givs (bl, unroll_type, l
-*** 2675,2678 ****
---- 2713,2717 ----
- rtx tem = gen_reg_rtx (bl->biv->mode);
-
-+ record_base_value (REGNO (tem), bl->biv->add_val);
- emit_insn_before (gen_move_insn (tem, bl->biv->src_reg),
- loop_start);
-*************** find_splittable_givs (bl, unroll_type, l
-*** 2716,2719 ****
---- 2755,2759 ----
- {
- rtx tem = gen_reg_rtx (v->mode);
-+ record_base_value (REGNO (tem), v->add_val);
- emit_iv_add_mult (bl->initial_value, v->mult_val,
- v->add_val, tem, loop_start);
-*************** find_splittable_givs (bl, unroll_type, l
-*** 2734,2747 ****
- register for the split addr giv, just to be safe. */
-
-! /* ??? If there are multiple address givs which have been
-! combined with the same dest_reg giv, then we may only need
-! one new register for them. Pulling out constants below will
-! catch some of the common cases of this. Currently, I leave
-! the work of simplifying multiple address givs to the
-! following cse pass. */
-!
-! /* As a special case, if we have multiple identical address givs
-! within a single instruction, then we do use a single pseudo
-! reg for both. This is necessary in case one is a match_dup
- of the other. */
-
---- 2774,2780 ----
- register for the split addr giv, just to be safe. */
-
-! /* If we have multiple identical address givs within a
-! single instruction, then use a single pseudo reg for
-! both. This is necessary in case one is a match_dup
- of the other. */
-
-*************** find_splittable_givs (bl, unroll_type, l
-*** 2756,2759 ****
---- 2789,2812 ----
- INSN_UID (v->insn));
- }
-+ /* If multiple address GIVs have been combined with the
-+ same dest_reg GIV, do not create a new register for
-+ each. */
-+ else if (unroll_type != UNROLL_COMPLETELY
-+ && v->giv_type == DEST_ADDR
-+ && v->same && v->same->giv_type == DEST_ADDR
-+ && v->same->unrolled
-+ #ifdef ADDRESS_COST
-+ /* combine_givs_p may return true when ADDRESS_COST is
-+ defined even if the multiply and add values are
-+ not equal. To share a register here, the values
-+ must be equal, as well as related. */
-+ && rtx_equal_p (v->mult_val, v->same->mult_val)
-+ && rtx_equal_p (v->add_val, v->same->add_val)
-+ #endif
-+ )
-+ {
-+ v->dest_reg = v->same->dest_reg;
-+ v->shared = 1;
-+ }
- else if (unroll_type != UNROLL_COMPLETELY)
- {
-*************** find_splittable_givs (bl, unroll_type, l
-*** 2761,2765 ****
- register to hold the split value of the DEST_ADDR giv.
- Emit insn to initialize its value before loop start. */
-! tem = gen_reg_rtx (v->mode);
-
- /* If the address giv has a constant in its new_reg value,
---- 2814,2821 ----
- register to hold the split value of the DEST_ADDR giv.
- Emit insn to initialize its value before loop start. */
-!
-! rtx tem = gen_reg_rtx (v->mode);
-! record_base_value (REGNO (tem), v->add_val);
-! v->unrolled = 1;
-
- /* If the address giv has a constant in its new_reg value,
-*************** find_splittable_givs (bl, unroll_type, l
-*** 2772,2781 ****
- v->dest_reg
- = plus_constant (tem, INTVAL (XEXP (v->new_reg,1)));
-!
- /* Only succeed if this will give valid addresses.
- Try to validate both the first and the last
- address resulting from loop unrolling, if
- one fails, then can't do const elim here. */
-! if (! verify_addresses (v, giv_inc, unroll_number))
- {
- /* Save the negative of the eliminated const, so
---- 2828,2837 ----
- v->dest_reg
- = plus_constant (tem, INTVAL (XEXP (v->new_reg,1)));
-!
- /* Only succeed if this will give valid addresses.
- Try to validate both the first and the last
- address resulting from loop unrolling, if
- one fails, then can't do const elim here. */
-! if (verify_addresses (v, giv_inc, unroll_number))
- {
- /* Save the negative of the eliminated const, so
-*************** final_biv_value (bl, loop_start, loop_en
-*** 3061,3064 ****
---- 3117,3121 ----
-
- tem = gen_reg_rtx (bl->biv->mode);
-+ record_base_value (REGNO (tem), bl->biv->add_val);
- /* Make sure loop_end is not the last insn. */
- if (NEXT_INSN (loop_end) == 0)
-*************** final_giv_value (v, loop_start, loop_end
-*** 3154,3157 ****
---- 3211,3215 ----
- /* Put the final biv value in tem. */
- tem = gen_reg_rtx (bl->biv->mode);
-+ record_base_value (REGNO (tem), bl->biv->add_val);
- emit_iv_add_mult (increment, GEN_INT (loop_n_iterations),
- bl->initial_value, tem, insert_before);
-diff -rcp2N gcc-2.7.2.2/varasm.c g77-new/varasm.c
-*** gcc-2.7.2.2/varasm.c Thu Aug 31 19:02:53 1995
---- g77-new/varasm.c Sun Aug 10 22:26:32 1997
-*************** assemble_variable (decl, top_level, at_e
-*** 1067,1070 ****
---- 1067,1072 ----
- if (! dont_output_data)
- {
-+ int size;
-+
- if (TREE_CODE (DECL_SIZE (decl)) != INTEGER_CST)
- goto finish;
-*************** assemble_variable (decl, top_level, at_e
-*** 1072,1078 ****
- /* This is better than explicit arithmetic, since it avoids overflow. */
- size_tree = size_binop (CEIL_DIV_EXPR,
-! DECL_SIZE (decl), size_int (BITS_PER_UNIT));
-
-! if (TREE_INT_CST_HIGH (size_tree) != 0)
- {
- error_with_decl (decl, "size of variable `%s' is too large");
---- 1074,1082 ----
- /* This is better than explicit arithmetic, since it avoids overflow. */
- size_tree = size_binop (CEIL_DIV_EXPR,
-! DECL_SIZE (decl), size_int (BITS_PER_UNIT));
-
-! size = TREE_INT_CST_LOW (size_tree);
-! if (TREE_INT_CST_HIGH (size_tree) != 0
-! || size != TREE_INT_CST_LOW (size_tree))
- {
- error_with_decl (decl, "size of variable `%s' is too large");
-*************** decode_addr_const (exp, value)
-*** 2132,2135 ****
---- 2136,2140 ----
- case COMPLEX_CST:
- case CONSTRUCTOR:
-+ case INTEGER_CST:
- x = TREE_CST_RTL (target);
- break;
-*************** const_hash (exp)
-*** 2247,2251 ****
- return const_hash (TREE_OPERAND (exp, 0)) * 9
- + const_hash (TREE_OPERAND (exp, 1));
-! else if (code == NOP_EXPR || code == CONVERT_EXPR)
- return const_hash (TREE_OPERAND (exp, 0)) * 7 + 2;
-
---- 2252,2256 ----
- return const_hash (TREE_OPERAND (exp, 0)) * 9
- + const_hash (TREE_OPERAND (exp, 1));
-! else if (code == NOP_EXPR || code == CONVERT_EXPR || code == NON_LVALUE_EXPR)
- return const_hash (TREE_OPERAND (exp, 0)) * 7 + 2;
-
-*************** compare_constant_1 (exp, p)
-*** 2401,2405 ****
- return p;
- }
-! else if (code == NOP_EXPR || code == CONVERT_EXPR)
- {
- p = compare_constant_1 (TREE_OPERAND (exp, 0), p);
---- 2406,2410 ----
- return p;
- }
-! else if (code == NOP_EXPR || code == CONVERT_EXPR || code == NON_LVALUE_EXPR)
- {
- p = compare_constant_1 (TREE_OPERAND (exp, 0), p);
-*************** copy_constant (exp)
-*** 2633,2637 ****
-
- case COMPLEX_CST:
-! return build_complex (copy_constant (TREE_REALPART (exp)),
- copy_constant (TREE_IMAGPART (exp)));
-
---- 2638,2643 ----
-
- case COMPLEX_CST:
-! return build_complex (TREE_TYPE (exp),
-! copy_constant (TREE_REALPART (exp)),
- copy_constant (TREE_IMAGPART (exp)));
-
-*************** copy_constant (exp)
-*** 2644,2647 ****
---- 2650,2654 ----
- case NOP_EXPR:
- case CONVERT_EXPR:
-+ case NON_LVALUE_EXPR:
- return build1 (TREE_CODE (exp), TREE_TYPE (exp),
- copy_constant (TREE_OPERAND (exp, 0)));
-*************** output_constant_def (exp)
-*** 2690,2696 ****
- register rtx def;
-
-- if (TREE_CODE (exp) == INTEGER_CST)
-- abort (); /* No TREE_CST_RTL slot in these. */
--
- if (TREE_CST_RTL (exp))
- return TREE_CST_RTL (exp);
---- 2697,2700 ----
-*************** bc_assemble_integer (exp, size)
-*** 3620,3624 ****
- exp = fold (exp);
-
-! while (TREE_CODE (exp) == NOP_EXPR || TREE_CODE (exp) == CONVERT_EXPR)
- exp = TREE_OPERAND (exp, 0);
- if (TREE_CODE (exp) == INTEGER_CST)
---- 3624,3629 ----
- exp = fold (exp);
-
-! while (TREE_CODE (exp) == NOP_EXPR || TREE_CODE (exp) == CONVERT_EXPR
-! || TREE_CODE (exp) == NON_LVALUE_EXPR)
- exp = TREE_OPERAND (exp, 0);
- if (TREE_CODE (exp) == INTEGER_CST)
-*************** bc_assemble_integer (exp, size)
-*** 3631,3639 ****
- const_part = TREE_OPERAND (exp, 0);
- while (TREE_CODE (const_part) == NOP_EXPR
-! || TREE_CODE (const_part) == CONVERT_EXPR)
- const_part = TREE_OPERAND (const_part, 0);
- addr_part = TREE_OPERAND (exp, 1);
- while (TREE_CODE (addr_part) == NOP_EXPR
-! || TREE_CODE (addr_part) == CONVERT_EXPR)
- addr_part = TREE_OPERAND (addr_part, 0);
- if (TREE_CODE (const_part) != INTEGER_CST)
---- 3636,3646 ----
- const_part = TREE_OPERAND (exp, 0);
- while (TREE_CODE (const_part) == NOP_EXPR
-! || TREE_CODE (const_part) == CONVERT_EXPR
-! || TREE_CODE (const_part) == NON_LVALUE_EXPR)
- const_part = TREE_OPERAND (const_part, 0);
- addr_part = TREE_OPERAND (exp, 1);
- while (TREE_CODE (addr_part) == NOP_EXPR
-! || TREE_CODE (addr_part) == CONVERT_EXPR
-! || TREE_CODE (addr_part) == NON_LVALUE_EXPR)
- addr_part = TREE_OPERAND (addr_part, 0);
- if (TREE_CODE (const_part) != INTEGER_CST)
-diff -rcp2N gcc-2.7.2.2/version.c g77-new/version.c
-*** gcc-2.7.2.2/version.c Thu Feb 20 19:24:33 1997
---- g77-new/version.c Sun Aug 10 19:28:55 1997
-***************
-*** 1 ****
-! char *version_string = "2.7.2.2";
---- 1 ----
-! char *version_string = "2.7.2.2.f.3b";
diff --git a/gcc/f/gbe/2.7.2.3.diff b/gcc/f/gbe/2.7.2.3.diff
deleted file mode 100644
index d064bd8d642..00000000000
--- a/gcc/f/gbe/2.7.2.3.diff
+++ /dev/null
@@ -1,13492 +0,0 @@
-IMPORTANT: After applying this patch, you must rebuild the
-Info documentation derived from the Texinfo files in the
-gcc distribution, as this patch does not include patches
-to any derived files (due to differences in the way gcc
-version 2.7.2.2 is obtained by users). Use the following
-command sequence after applying this patch:
-
- cd gcc-2.7.2.3; make -f Makefile.in gcc.info
-
-If that fails due to `makeinfo' not being installed, obtain
-texinfo-3.11.tar.gz from a GNU distribution site, unpack,
-build, and install it, and try the above command sequence
-again.
-
-NOTE: You probably will have trouble with the `ChangeLog'
-file in this patch. That's because gcc version 2.7.2.2 itself
-had an incomplete patch file (gcc-2.7.2.2-2.7.2.3.diff.gz
-omitted the patch to gcc/ChangeLog), which in turn "infected"
-both forms of the 2.7.2.3 distribution (the .tar.gz and .diff.gz
-file, neither of which has the proper gcc/ChangeLog file).
-
-The following patch's gcc/ChangeLog patchlet assumes a
-"fixed" gcc-2.7.2.3/ChangeLog, and then further "fixes" it
-to sort the pertinent entries in the usual chronological order.
-
-If you start with the gcc-2.7.2.2.tar.gz distribution, apply
-the gcc-2.7.2.2-2.7.2.3.diff.gz patch, "fix up" the gcc/ChangeLog
-file so the new material ends up "above" the single large
-2.7.2.2 release entry (dated "Tue Jan 29 02:47:13 1997"), then
-you *should* be able to apply this patch file cleanly.
-
-In any case, don't worry; the contents of gcc/ChangeLog aren't
-really important to non-developers of gcc.
-
-
-diff -rcp2N gcc-2.7.2.3/ChangeLog gcc-2.7.2.3.f.1/ChangeLog
-*** gcc-2.7.2.3/ChangeLog Sun Aug 31 09:41:00 1997
---- gcc-2.7.2.3.f.1/ChangeLog Tue Sep 9 04:24:28 1997
-***************
-*** 1,6 ****
---- 1,36 ----
-+ Wed Sep 3 12:26:33 1997 Jim Wilson <wilson@cygnus.com>
-+
-+ * alias.c (true_dependence): Address with AND can alias scalars.
-+ (anti_dependence, output_dependence): Likewise.
-+
-+ Wed Sep 3 10:36:51 1997 Jim Wilson <wilson@cygnus.com>
-+
-+ * alias.c (true_dependence): Test x for BLKmode, in addition to mem.
-+
-+ Sat Aug 30 16:42:50 1997 Craig Burley <burley@gnu.ai.mit.edu>
-+
-+ * reload.c (find_reloads): Fix 1997-07-28 fix so the
-+ loop to handle MATCH_DUPs is disabled when insn_code_number
-+ is <= 0, because in that case recog_dup_loc is not
-+ relevant.
-+
-+ Tue Aug 26 01:52:17 1997 Craig Burley <burley@gnu.ai.mit.edu>
-+
-+ From Stan Cox <coxs@dg-rtp.dg.com>
-+ * reg-stack.c (subst_stack_regs): Cope with computed goto
-+ (`GOTO I' in FORTRAN; `goto *lab;' in GNU C).
-+
- Thu Aug 22 23:47:38 1997 H.J. Lu (hjl@gnu.ai.mit.edu)
-
- * Version 2.7.2.3 released.
-
-+ Fri Aug 22 21:31:54 1997 Jim Wilson <wilson@cygnus.com>
-+
-+ * alias.c (true_dependence): Pass x_addr not x to varies.
-+
-+ Sun Aug 17 03:31:44 1997 Craig Burley <burley@gnu.ai.mit.edu>
-+
-+ * Makefile.in: Comment out lines containing just formfeeds.
-+
- Wed Aug 13 08:28:18 1997 H.J. Lu (hjl@gnu.ai.mit.edu)
-
-*************** Wed Aug 13 08:28:18 1997 H.J. Lu (hjl@
-*** 26,33 ****
- (FINALIZE_TRAMPOLINE, CLEAR_INSN_CACHE): New.
-
-! Mon Mar 17 17:03:55 1997 J.T. Conklin <jtc@cygnus.com>
-
-! * m68k.md (beq0_di, bne0_di, bge0_di, blt0_di): Use cmpw #0
-! instead of tstl when testing address registers on the 68000.
-
- Fri Aug 8 08:15:55 1997 H.J. Lu (hjl@gnu.ai.mit.edu)
---- 56,81 ----
- (FINALIZE_TRAMPOLINE, CLEAR_INSN_CACHE): New.
-
-! Sun Aug 10 22:23:10 1997 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
-
-! * explow.c (probe_stack_range): Add USE for test_addr if -O0.
-!
-! Sun Aug 10 18:14:24 1997 Craig Burley <burley@gnu.ai.mit.edu>
-!
-! Integrate C front end part of patch for better alias
-! handling from John Carr <jfc@mit.edu>:
-! * c-decl.c (grokdeclarator): Check for RID_RESTRICT
-! flag; diagnose certain misuses; set DECL_RESTRICT as
-! appropriate.
-! * c-lex.c (init_lex): Set up RID_RESTRICT pointer.
-! Unset `restrict' as reserved word.
-! * c-lex.h: Replace RID_NOALIAS with RID_RESTRICT.
-! * c-parse.gperf: Add `restrict' and `__restrict'
-! keywords.
-! * tree.h: Add DECL_RESTRICT flag.
-!
-! Sun Aug 10 14:50:30 1997 Jim Wilson <wilson@cygnus.com>
-!
-! * sdbout.c (plain_type_1, case ARRAY_TYPE): Verify that TYPE_DOMAIN
-! has integer TYPE_{MAX,MIN}_VALUE before using them.
-
- Fri Aug 8 08:15:55 1997 H.J. Lu (hjl@gnu.ai.mit.edu)
-*************** Fri Aug 8 08:15:55 1997 H.J. Lu (hjl@
-*** 38,41 ****
---- 86,143 ----
- * install1.texi: New.
-
-+ Mon Aug 4 17:49:14 1997 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
-+
-+ * combine.c (try_combine): If have PARALLEL of independent SETs
-+ and have cc0, ensure insn using CC0 come first.
-+
-+ Sat Aug 2 08:03:04 1997 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
-+
-+ * varasm.c (compare_constant_1, case STRING_CST): Compare TYPE_MODE.
-+ (record_constant_1, case STRING_CST): Record TYPE_MODE.
-+
-+ Sat Aug 2 08:03:04 1997 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
-+
-+ * tree.c (contains_this_placeholder_p): Delete.
-+ (contains_placeholder_p): Now contains code from above function.
-+ (contains_placeholder_p, case 'r'): Don't look at offset info.
-+ * expr.c (expand_expr, case PLACEHOLDER_EXPR): Find innermost
-+ matching and don't check contains_placeholder_p.
-+
-+ Mon Jul 28 15:35:38 1997 Craig Burley <burley@gnu.ai.mit.edu>
-+
-+ * combine.c (num_sign_bit_copies): Speed up the 961126-1.c
-+ case of repeated (neg (neg (neg ...))) so c-torture runs
-+ in less time.
-+
-+ * reload.c (find_reloads_toplev, find_reloads_address):
-+ These now return whether replacement by a constant, so
-+ caller can know to do other replacements. Currently if
-+ caller doesn't want that info and such replacement would
-+ happen, we crash so as to investigate the problem and
-+ learn more about it. All callers updated.
-+ (find_reloads): If pseudo replaced by constant, always
-+ update duplicates of it.
-+
-+ Sun Jul 27 12:13:01 1997 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
-+
-+ * expr.c (expand_expr, case SAVE_EXPR): Handle top-level SAVE_EXPR by
-+ moving into current function; abort if in odd context.
-+ * fold-const.c (fold_truthop, fold): Avoid making SAVE_EXPR
-+ if at top level.
-+
-+ * expr.c (get_inner_unaligned_p): Deleted.
-+ (expand_assignment): Remove special-case of constant array.
-+ (expand_expr, case ARRAY_REF): Likewise, and clean up remaining code.
-+
-+ * explow.c (probe_stack_range): Do probing with loop if more
-+ than a small number.
-+
-+ Fri Jul 25 08:38:37 1997 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
-+
-+ * calls.c: (expand_call): If -fstack-check and temp needed
-+ for arg is too large, use alloca.
-+ * expr.c (expand_expr, case MODIFY_EXPR): Don't preexpand calls
-+ if LHS is an indirect via a constant pointer.
-+
- Mon Jul 21 22:47:13 1997 H.J. Lu (hjl@gnu.ai.mit.edu)
-
-*************** Mon Jul 21 22:47:13 1997 H.J. Lu (hjl@
-*** 43,46 ****
---- 145,213 ----
- for Linux.
-
-+ Mon Jul 21 00:00:24 1997 Craig Burley <burley@gnu.ai.mit.edu>
-+
-+ * fold-const.c (size_binop): Make sure overflows
-+ are flagged properly, so as to avoid silently generating
-+ bad code for, e.g., a too-large array.
-+
-+ Sun Jul 20 06:10:26 1997 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
-+
-+ * tree.c (contains_placeholder_p): Call contains_this_placeholder_p.
-+ (contains_this_placeholder_p): Renamed from contains_placeholder_p.
-+ Added new arg, PL.
-+ Rework to make more consistent, check more codes, and avoid
-+ undefined fields.
-+ * expr.c (expand_expr, case PLACEHOLDER_EXPR): Pick outermost
-+ object in placeholder_list of right type without a PLACEHOLDER_EXPR>
-+
-+ Sat Jul 19 17:54:28 1997 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
-+
-+ * alpha.h (STACK_CHECK_BUILTIN): New macro.
-+
-+ Thu Jul 17 07:02:10 1997 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
-+
-+ * expr.h (STACK_CHECK_*): Provide default values.
-+ (probe_stack_range): New declaration.
-+ * flags.h (flag_stack_check): Likewise.
-+ * explow.c (allocate_dynamic_stack_space): Call probe_stack_range.
-+ (emit_stack_probe, probe_stack_range): New functions.
-+ * function.c (expand_function_end): If function is non-leaf and stack
-+ checking is requested, emit needed probes.
-+ * reload1.c (reload): If checking stack, verify frame small enough.
-+ * stmt.c (expand_decl): If stack checking, use alloca for large vars.
-+ * toplev.c (flag_stack_check): New variable.
-+ (f_options): Add "stack-check".
-+
-+ Sun Jul 13 22:23:14 1997 Craig Burley <burley@gnu.ai.mit.edu>
-+
-+ * stmt.c (expand_expr_stmt): Must generate code for
-+ statements within an expression (gcc's `({ ... )}')
-+ even if -fsyntax-only.
-+
-+ Sun Jul 13 15:14:48 1997 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
-+
-+ * m68k.md (tstdi, cmpdi): Disable.
-+
-+ Tue Jul 1 23:27:43 1997 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
-+
-+ * reorg.c (redundant_insn): If INSN or possible match has REG_UNUSED
-+ note, don't have match.
-+
-+ Mon Jun 30 17:23:07 1997 Michael Meissner <meissner@cygnus.com>
-+
-+ * gcc.c (process_command): If -save-temps and -pipe were specified
-+ together, don't do -pipe.
-+
-+ Thu Jun 26 05:40:46 1997 Craig Burley <burley@gnu.ai.mit.edu>
-+
-+ * stor-layout.c (get_best_mode): Handle negative bitpos
-+ correctly, so caller doesn't get into infinite recursion
-+ trying to cope with a spurious VOIDmode.
-+
-+ Tue Jun 24 19:46:31 1997 Craig Burley <burley@gnu.ai.mit.edu>
-+
-+ * varasm.c (assemble_variable): If low part of size
-+ doesn't fit in an int, variable is too large.
-+
- Tue Jun 24 11:24:56 1997 H.J. Lu (hjl@gnu.ai.mit.edu)
-
-*************** Mon Jun 23 22:48:00 1997 Jim Wilson <w
-*** 69,92 ****
- to biv_count for reduced givs.
-
-! Tue Apr 16 16:59:49 1996 Richard Henderson <rth@tamu.edu>
-
-! * function.c (expand_function_end): Allow TRAMPOLINE_TEMPLATE
-! to be omitted on systems for which it is not cost effective.
-! * varasm.c (assemble_trampoline_template): No such function
-! if no TRAMPOLINE_TEMPLATE.
-! * m68k.h: Greatly simplify the run-time trampoline code:
-! (TRAMPOLINE_TEMPLATE, TRANSFER_FROM_TRAMPOLINE): Delete define.
-! (TRAMPOLINE_SIZE, INITIALIZE_TRAMPOLINE): Changed.
-! (TRAMPOLINE_ALIGN): No point aligning to cache line.
-! (FINISH_INIT_TRAMPOLINE): New define.
-! * m68k/next.h: Instead of redefining INITIALIZE_TRAMPOLINE,
-! make use of the new FINISH_INIT_TRAMPOLINE.
-! * m68k/{m68k.h,next.h} (FINISH_INIT_TRAMPOLINE):
-! Rename to FINALIZE_TRAMPOLINE.
-
-! Mon Apr 15 08:49:20 1996 Tom May (ftom@netcom.com)
-
-! * cse.c (invalidate_skipped_set): Ignore CLOBBER after calling
-! note_mem_written, not before.
-
- Tue Jan 29 02:47:13 1997 Richard Stallman <rms@psilocin.gnu.ai.mit.edu>
---- 236,433 ----
- to biv_count for reduced givs.
-
-! Sat Jun 21 12:09:00 1997 Craig Burley <burley@gnu.ai.mit.edu>
-
-! * toplev.c (rest_of_compilation): Also temporarily set
-! flag_unroll_all_loops to 0 during first of two calls
-! to loop_optimize, and clean up code a bit to make it
-! easier to read.
-
-! * expr.c (safe_from_p_1, safe_from_p): Fix these to use
-! TREE_SET_CODE instead of TREE_CODE.
-
-! Thu Jun 19 19:30:47 1997 Craig Burley <burley@gnu.ai.mit.edu>
-!
-! * config/alpha/alpha.c: Don't include <stamp.h> on
-! GNU Linux machines.
-!
-! * config/alpha/elf.c: New file for ELF systems.
-!
-! * config/alpha/xm-alpha.h: Don't declare alloca()
-! if it's already a macro (probably defined in stdlib.h).
-!
-! * config/alpha/xm-linux.h (HAVE_STRERROR): #define
-! this, according to what various people suggest.
-!
-! * config.guess, configure: Make some (hopefully safe)
-! changes, based mostly on gcc-2.8.0-in-development,
-! in the hopes that these make some systems configure
-! "out of the box" more easily, especially Alpha systems.
-!
-! Mon Jun 9 04:26:53 1997 Craig Burley <burley@gnu.ai.mit.edu>
-!
-! * expr.c (safe_from_p): Don't examine a given SAVE_EXPR
-! node more than once, to avoid combinatorial explosion
-! in complex expressions. Fortran case that triggered
-! this had a complicated *and* complex expression with
-! 293 unique nodes, resulting in 28 minutes of compile
-! time mostly spent in a single top-level safe_from_p()
-! call due to all the redundant SAVE_EXPR traversals.
-! This change reduced the time to around 2 seconds.
-! (safe_from_p_1): New helper function that does almost
-! exactly what the old safe_from_p() did.
-!
-! Fri May 30 11:40:10 1997 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
-!
-! * rs6000.md (movdi): Emit a CLOBBER before the two movsi insns
-! in constant case.
-!
-! Sun May 18 21:18:48 1997 Craig Burley <burley@gnu.ai.mit.edu>
-!
-! * fold-const.c (fold): Clarify why TRUNC_DIV_EXPR
-! and FLOOR_DIV_EXPR aren't rewritten to EXACT_DIV_EXPR,
-! clean up related code.
-!
-! Sat May 17 15:15:23 1997 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
-!
-! * cse.c (cse_insn): Don't record a SRC that's a MEM and the same
-! as a REG_EQUIV note if DEST is set more than once.
-!
-! Sat May 3 13:53:00 1997 Craig Burley <burley@gnu.ai.mit.edu>
-!
-! * config.sub: Change all `i[345]' to `i[3456]' to
-! support Pentium Pro (this change was already made
-! in configure for gcc-2.7.2.2).
-!
-! From Toon Moene <toon@moene.indiv.nluug.nl>:
-! * toplev.c (rest_of_compilation): Unroll loops
-! only the final time through loop optimization.
-!
-! Thu Apr 24 16:39:53 1997 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
-!
-! * stmt.c (pushcase_range): Check for null range first.
-!
-! Mon Apr 21 16:31:50 1997 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
-!
-! * cse.c (fold_rtx, case PLUS): When seeing if negative of constant
-! is around, make sure not dealing with largest negative.
-!
-! Sun Apr 20 10:46:24 1997 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
-!
-! * fold-const.c (operand_equal_p): Constants are not equal if there
-! has been an overflow.
-!
-! Sun Apr 20 10:45:35 1997 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
-!
-! * final.c (profile_function): Only call ASM_OUTPUT_REG_{PUSH,POP}
-! if defined.
-!
-! Wed Apr 16 22:26:16 1997 Craig Burley <burley@gnu.ai.mit.edu>
-!
-! * alias.c, cse.c, loop.c, rtl.c, rtl.h, sched.c:
-! Make changes submitted by <jfc@mit.edu>.
-!
-! Wed Apr 16 16:54:18 1997 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
-!
-! * function.c (find_temp_slot_from_address): Compare slots using
-! rtx_equal_p, not identity comparison.
-! * expr.c (store_expr): Check if TEMP and TARGET are the
-! same using rtx_equal_p.
-!
-! Tue Apr 15 18:03:58 1997 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
-!
-! * rs6000.c (rs6000_output_load_toc_table): New function.
-! (output_prolog): Delete code from here and call new function.
-! * rs6000.md (nonlocal_goto_receiver): New pattern.
-!
-! * expr.c (expand_assignment, store_field): Use copy_rtx when
-! need to copy rtx instead of change_address.
-! (expand_expr, case CONSTRUCTOR, COMPONENT_REF): Likewise.
-!
-! Sun Apr 13 19:32:53 1997 Craig Burley <burley@gnu.ai.mit.edu>
-!
-! * fold-const.c (fold): If extra warnings enabled,
-! warn about integer division by zero.
-!
-! Sun Apr 13 08:15:31 1997 Bernd Schmidt <crux@Pool.Informatik.RWTH-Aachen.DE>
-!
-! * final.c (profile_function): Save the static chain register
-! around the call to the profiler function.
-!
-! Sat Apr 12 14:56:42 1997 Craig Burley <burley@gnu.ai.mit.edu>
-!
-! * unroll.c (find_splittable_givs): Permit more cases
-! of mult_val/add_val to agree by using rtx_equal_p
-! to compare them instead of requiring them to be
-! integers with the same value. Also don't bother
-! checking if ADDRESS_COST not defined (they will be
-! equal in that case).
-!
-! Fri Apr 11 03:30:04 1997 Craig Burley <burley@gnu.ai.mit.edu>
-!
-! * unroll.c (find_splittable_givs): Must create a new
-! register if the mult_val and add_val fields don't
-! agree.
-!
-! Fri Apr 4 23:00:55 1997 Craig Burley <burley@gnu.ai.mit.edu>
-!
-! * fold-const.c (fold): Don't call multiple_of_p if
-! arg1 is constant zero, to avoid crashing; simplify
-! code accordingly.
-!
-! Mon Mar 24 22:33:40 1997 Dave Love <d.love@dl.ac.uk>
-!
-! * config/i386/i386.h (STACK_BOUNDARY): Define as BIGGEST_ALIGNMENT
-! so that -malign-double works for stack-allocated data.
-!
-! Wed Mar 19 12:24:11 1997 Jim Wilson <wilson@cygnus.com>
-!
-! * combine.c (move_deaths): Handle partial REG_DEAD note for
-! multi-reg hard register.
-!
-! Mon Mar 17 17:03:55 1997 J.T. Conklin <jtc@cygnus.com>
-!
-! * m68k.md (beq0_di, bne0_di, bge0_di, blt0_di): Use cmpw #0
-! instead of tstl when testing address registers on the 68000.
-!
-! Sun Mar 16 19:53:13 1997 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
-!
-! * expr.c (expand_expr, case PLACEHOLDER_EXPR): Refine which
-! object is picked.
-!
-! Mon Mar 10 16:01:44 1997 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
-!
-! * emit-rtl.c (subreg_lowpart_p): Return 0 if SUBREG_REG is VOIDmode.
-! * combine.c (simplify_rtx, case SUBREG): Fix direction of test when
-! calling operand_subword; use inline code intead of subreg_lowpart_p.
-!
-! Wed Feb 26 13:09:33 1997 Michael Meissner <meissner@cygnus.com>
-!
-! * reload.c (debug_reload): Fix format string to print
-! reload_nocombine[r].
-!
-! Sun Feb 23 15:26:53 1997 Craig Burley <burley@gnu.ai.mit.edu>
-!
-! * fold-const.c (multiple_of_p): Clean up and improve.
-! (fold): Clean up invocation of multiple_of_p.
-!
-! Sun Feb 9 14:03:53 1997 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
-!
-! * function.c (assign_stack_temp): Clear MEM flags from reuse.
-!
-! Sat Feb 8 04:53:27 1997 Craig Burley <burley@gnu.ai.mit.edu>
-!
-! From <jfc@jfc.tiac.net> Fri, 07 Feb 1997 22:02:21 -0500:
-! * alias.c (init_alias_analysis): Reduce amount of time
-! needed to simplify the reg_base_value array in the
-! typical case (especially involving function inlining).
-!
-! Fri Feb 7 07:56:12 1997 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
-!
-! * function.c (instantiate_virtual_regs_1, case USE, CLOBBER):
-! Fix error in last change.
-!
-! Sat Feb 1 18:51:47 1997 Douglas B. Rupp (rupp@gnat.com)
-!
-! * gcc.c (process_command): Fix improper use of strncpy.
-
- Tue Jan 29 02:47:13 1997 Richard Stallman <rms@psilocin.gnu.ai.mit.edu>
-*************** Tue Jan 29 02:47:13 1997 Richard Stallm
-*** 109,112 ****
---- 450,532 ----
- [! LIBC_VERSION_1] (LIB_SPEC): New override definition.
-
-+ Tue Jan 21 16:09:37 1997 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
-+
-+ * function.c (mark_all_temps_used): Set KEEP as well.
-+
-+ Fri Jan 10 17:22:17 1997 Craig Burley <burley@gnu.ai.mit.edu>
-+
-+ Minor improvements/fixes to better alias handling:
-+ * Makefile.in (alias.o): Fix typo in rule (was RLT_H).
-+ * cse.c, sched.c: Fix up some indenting.
-+ * toplev.c: Add -fargument-alias flag, so Fortran users
-+ can turn C-style aliasing on once g77 defaults to
-+ -fargument-noalias-global.
-+
-+ Integrate patch for better alias handling from
-+ John Carr <jfc@mit.edu>:
-+ * Makefile.in (OBJS, alias.o): New module and rule.
-+ * alias.c: New source module.
-+ * calls.c (expand_call): Recognize alias status of calls
-+ to malloc().
-+ * combine.c (distribute_notes): New REG_NOALIAS note.
-+ * rtl.h (REG_NOALIAS): Ditto.
-+ Many other changes for new alias.c module.
-+ * cse.c: Many changes, and much code moved into alias.c.
-+ * flags.h (flag_alias_check, flag_argument_noalias):
-+ New flags.
-+ * toplev.c: New flags and related options.
-+ * local-alloc.c (validate_equiv_mem_from_store):
-+ Caller of true_dependence changed.
-+ * loop.c (NUM_STORES): Increase to 50 from 20.
-+ (prescan_loop): "const" functions don't alter unknown addresses.
-+ (invariant_p): Caller of true_dependence changed.
-+ (record_giv): Zero new unrolled and shared flags.
-+ (emit_iv_add_mult): Record base value for register.
-+ * sched.c: Many changes, mostly moving code to alias.c.
-+ (sched_note_set): SCHED_SORT macro def form, but not function,
-+ inexplicably changed.
-+ * unroll.c: Record base values for registers, etc.
-+
-+ Fri Jan 3 04:01:00 1997 Craig Burley <burley@gnu.ai.mit.edu>
-+
-+ * loop.c (check_final_value): Handle insns with no luid's
-+ appropriately, instead of crashing on INSN_LUID macro
-+ invocations.
-+
-+ Mon Dec 23 00:49:19 1996 Craig Burley <burley@gnu.ai.mit.edu>
-+
-+ * config/alpha/alpha.md: Fix pattern that matches if_then_else
-+ involving DF target, DF comparison, SF source.
-+
-+ Fri Dec 20 15:42:52 1996 Craig Burley <burley@gnu.ai.mit.edu>
-+
-+ * fold-const.c (multiple_of_p): New function.
-+ (fold): Use new function to turn *_DIV_EXPR into EXACT_DIV_EXPR.
-+
-+ Tue Nov 26 14:50:54 1996 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
-+
-+ * expr.c (move_by_pieces): Abort only if length positive at end.
-+
-+ Tue Oct 22 18:32:20 1996 Jim Wilson <wilson@cygnus.com>
-+
-+ * unroll.c (unroll_loop): Always reject loops with unbalanced blocks.
-+
-+ Tue Sep 24 19:37:00 1996 Jim Wilson <wilson@cygnus.com>
-+
-+ * reload.c (push_secondary_reload): Do strip paradoxical SUBREG
-+ even if reload_class is CLASS_CANNOT_CHANGE_SIZE. Change reload_mode
-+ to mode in SECONDARY_MEMORY_NEEDED and get_secondary_mem calls.
-+
-+ Mon Aug 12 07:48:54 1996 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
-+
-+ * expr.c (expand_builtin, case BUILT_IN_SETJMP): Add test
-+ and call for nonlocal_goto_receiver pattern.
-+ * stmt.c (expand_end_bindings): Likewise.
-+
-+ Mon Aug 5 16:53:36 1996 Doug Evans <dje@fallis.cygnus.com>
-+
-+ * stor-layout.c (layout_record): Correct overflow test for 0 sized
-+ fields.
-+
- Sat Jun 29 12:33:39 1996 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
-
-*************** Tue Jun 11 20:18:03 1996 Per Bothner <b
-*** 118,121 ****
---- 538,551 ----
- * alpha.h (FIXPROTO_INIT): Define new macro.
-
-+ Thu Jun 6 18:24:39 1996 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
-+
-+ * fold-cont.c (fold): Don't do anything with evaluated SAVE_EXPR.
-+
-+ Sat May 18 20:17:27 1996 Jim Wilson <wilson@cygnus.com>
-+
-+ * unroll.c (copy_loop_body): When update split DEST_ADDR giv,
-+ check to make sure it was split.
-+ (find_splittable_givs): Fix reversed test of verify_addresses result.
-+
- Fri May 10 18:35:00 1996 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
-
-*************** Wed Apr 17 17:53:23 1996 Michael Meissn
-*** 136,139 ****
---- 566,597 ----
- bits.
-
-+ Tue Apr 16 16:59:49 1996 Richard Henderson <rth@tamu.edu>
-+
-+ * function.c (expand_function_end): Allow TRAMPOLINE_TEMPLATE
-+ to be omitted on systems for which it is not cost effective.
-+ * varasm.c (assemble_trampoline_template): No such function
-+ if no TRAMPOLINE_TEMPLATE.
-+ * m68k.h: Greatly simplify the run-time trampoline code:
-+ (TRAMPOLINE_TEMPLATE, TRANSFER_FROM_TRAMPOLINE): Delete define.
-+ (TRAMPOLINE_SIZE, INITIALIZE_TRAMPOLINE): Changed.
-+ (TRAMPOLINE_ALIGN): No point aligning to cache line.
-+ (FINISH_INIT_TRAMPOLINE): New define.
-+ * m68k/next.h: Instead of redefining INITIALIZE_TRAMPOLINE,
-+ make use of the new FINISH_INIT_TRAMPOLINE.
-+ * m68k/{m68k.h,next.h} (FINISH_INIT_TRAMPOLINE):
-+ Rename to FINALIZE_TRAMPOLINE.
-+
-+ Mon Apr 15 08:49:20 1996 Tom May (ftom@netcom.com)
-+
-+ * cse.c (invalidate_skipped_set): Ignore CLOBBER after calling
-+ note_mem_written, not before.
-+
-+ Sat Apr 13 07:47:09 1996 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
-+
-+ * alpha.c (alpha_emit_set_const_1): Renamed from
-+ alpha_emit_set_const and static.
-+ Remove change of Nov 26; again use normal mechanism for SImode.
-+ (alpha_emit_set_const): New function.
-+
- Mon Apr 8 13:46:28 1996 Michael Meissner <meissner@tiktok.cygnus.com>
-
-*************** Mon Feb 19 07:35:07 1996 Torbjorn Granl
-*** 176,179 ****
---- 634,642 ----
- * rs6000.md (not:SI with assign and compare): Fix typo.
-
-+ Tue Feb 13 17:43:46 1996 Jim Wilson <wilson@cygnus.com>
-+
-+ * integrate.c (save_constants_in_decl_trees): New function.
-+ (save_for_inline_copying, save_for_inline_nocopy): Call it.
-+
- Wed Jan 24 18:00:12 1996 Brendan Kehoe <brendan@lisa.cygnus.com>
-
-*************** Tue Jan 16 06:01:28 1996 Thomas Graiche
-*** 191,198 ****
---- 654,686 ----
- * i386/freebsd.h (ASM_WEAKEN_LABEL): Deleted; not supported.
-
-+ Mon Jan 15 07:22:59 1996 Michel Delval (mfd@ccv.fr)
-+
-+ * reload.c (find_equiv_reg): Apply single_set, not PATTERN, to WHERE.
-+
- Sun Jan 7 17:11:11 1996 David Edelsohn <edelsohn@mhpcc.edu>
-
- * collect2.c (scan_libraries): Correct Import File ID interpretation.
-
-+ Sat Jan 6 03:27:49 1996 Hans-Peter Nilsson <Hans-Peter.Nilsson@axis.se>
-+
-+ * expr.c (emit_move_insn_1): Don't emit lobber when moving
-+ by parts and source equals destination.
-+
-+ Sat Jan 6 03:27:49 1996 Hans-Peter Nilsson <Hans-Peter.Nilsson@axis.se>
-+
-+ * optabs.c (expand_fix): Don't copy TARGET to TO if same.
-+
-+ Mon Jan 1 09:05:07 1996 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
-+
-+ * local-alloc.c (reg_equiv_replacement): New variable.
-+ (memref_referenced_p, case REG): Check for reg_equiv_replacement.
-+ (update_equiv_regs): reg_equiv_replacement now file-scope.
-+
-+ Fri Dec 22 17:29:42 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
-+
-+ * reload.c (find_valid_class): New function.
-+ (push_reload): Use it in cases where a SUBREG and its contents
-+ both need to be reloaded.
-+
- Thu Dec 28 22:24:53 1995 Michael Meissner <meissner@tiktok.cygnus.com>
-
-*************** Mon Dec 18 18:40:34 1995 Jim Wilson <w
-*** 209,212 ****
---- 697,705 ----
- above.
-
-+ Sun Dec 17 06:37:00 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
-+
-+ * reload.c (push_secondary_reload): Don't strip paradoxical SUBREG
-+ if reload_class is CLASS_CANNOT_CHANGE_SIZE.
-+
- Sat Dec 16 07:03:33 1995 Philippe De Muyter (phdm@info.ucl.ac.be)
-
-*************** Sat Dec 9 18:05:03 1995 Jim Wilson <w
-*** 223,226 ****
---- 716,724 ----
- * expr.c (expand_expr, case INDIRECT_REF): Correct typo in May 8
- change.
-+
-+ Fri Dec 8 19:17:30 1995 Mike Meissner <meissner@beauty.cygnus.com>
-+
-+ * rs6000/rs6000.c (input_operand): Allow any integer constant, not
-+ just integers that fit in 1 instruction.
-
- Sun Nov 26 14:47:42 1995 Richard Kenner <kenner@mole.gnu.ai.mit.edu>
-diff -rcp2N gcc-2.7.2.3/Makefile.in gcc-2.7.2.3.f.1/Makefile.in
-*** gcc-2.7.2.3/Makefile.in Sun Aug 31 09:39:41 1997
---- gcc-2.7.2.3.f.1/Makefile.in Sun Aug 31 09:29:51 1997
-*************** all: all.indirect
-*** 397,401 ****
- ####cross overrides
- ####build overrides
-!
- # Now figure out from those variables how to compile and link.
-
---- 397,401 ----
- ####cross overrides
- ####build overrides
-! #
- # Now figure out from those variables how to compile and link.
-
-*************** INCLUDES = -I. -I$(srcdir) -I$(srcdir)/c
-*** 454,458 ****
- # defined in this file into the environment.
- .NOEXPORT:
-!
- # Support for additional languages (other than c and objc).
- # ??? objc can be supported this way too (leave for later).
---- 454,458 ----
- # defined in this file into the environment.
- .NOEXPORT:
-! #
- # Support for additional languages (other than c and objc).
- # ??? objc can be supported this way too (leave for later).
-*************** FLAGS_TO_PASS = \
-*** 491,495 ****
- "bindir=$(bindir)" \
- "libsubdir=$(libsubdir)"
-!
- # Lists of files for various purposes.
-
---- 491,495 ----
- "bindir=$(bindir)" \
- "libsubdir=$(libsubdir)"
-! #
- # Lists of files for various purposes.
-
-*************** OBJS = toplev.o version.o tree.o print-t
-*** 519,523 ****
- integrate.o jump.o cse.o loop.o unroll.o flow.o stupid.o combine.o \
- regclass.o local-alloc.o global.o reload.o reload1.o caller-save.o \
-! insn-peep.o reorg.o sched.o final.o recog.o reg-stack.o \
- insn-opinit.o insn-recog.o insn-extract.o insn-output.o insn-emit.o \
- insn-attrtab.o $(out_object_file) getpwd.o convert.o $(EXTRA_OBJS)
---- 519,523 ----
- integrate.o jump.o cse.o loop.o unroll.o flow.o stupid.o combine.o \
- regclass.o local-alloc.o global.o reload.o reload1.o caller-save.o \
-! insn-peep.o reorg.o alias.o sched.o final.o recog.o reg-stack.o \
- insn-opinit.o insn-recog.o insn-extract.o insn-output.o insn-emit.o \
- insn-attrtab.o $(out_object_file) getpwd.o convert.o $(EXTRA_OBJS)
-*************** LIB2FUNCS = _muldi3 _divdi3 _moddi3 _udi
-*** 570,574 ****
- _fixxfdi _fixunsxfdi _floatdixf _fixunsxfsi \
- _fixtfdi _fixunstfdi _floatditf \
-! __gcc_bcmp _varargs _eprintf _op_new _op_vnew _new_handler _op_delete \
- _op_vdel _bb _shtab _clear_cache _trampoline __main _exit _ctors _eh \
- _pure
---- 570,575 ----
- _fixxfdi _fixunsxfdi _floatdixf _fixunsxfsi \
- _fixtfdi _fixunstfdi _floatditf \
-! __gcc_bcmp _varargs __dummy _eprintf \
-! _op_new _op_vnew _new_handler _op_delete \
- _op_vdel _bb _shtab _clear_cache _trampoline __main _exit _ctors _eh \
- _pure
-*************** RTL_H = rtl.h rtl.def machmode.h machmod
-*** 585,589 ****
- TREE_H = tree.h real.h tree.def machmode.h machmode.def
- BYTECODE_H = bytecode.h bc-emit.h bc-optab.h
-!
- # Language makefile fragments.
-
---- 586,590 ----
- TREE_H = tree.h real.h tree.def machmode.h machmode.def
- BYTECODE_H = bytecode.h bc-emit.h bc-optab.h
-! #
- # Language makefile fragments.
-
-*************** BYTECODE_H = bytecode.h bc-emit.h bc-opt
-*** 607,611 ****
-
- # End of language makefile fragments.
-!
- # Avoid a lot of time thinking about remaking Makefile.in and *.def.
- .SUFFIXES: .in .def
---- 608,612 ----
-
- # End of language makefile fragments.
-! #
- # Avoid a lot of time thinking about remaking Makefile.in and *.def.
- .SUFFIXES: .in .def
-*************** xlimits.h: glimits.h limitx.h limity.h
-*** 730,734 ****
- fi
- mv tmp-xlimits.h xlimits.h
-!
- # Build libgcc.a.
- # This is done in two parts because some functions, in libgcc1.c,
---- 731,735 ----
- fi
- mv tmp-xlimits.h xlimits.h
-! #
- # Build libgcc.a.
- # This is done in two parts because some functions, in libgcc1.c,
-*************** stamp-crtS: stamp-crt crtstuff.c $(GCC_P
-*** 1042,1046 ****
- mv crtstuff$(objext) crtendS$(objext)
- touch stamp-crtS
-!
- # Compiling object files from source files.
-
---- 1043,1047 ----
- mv crtstuff$(objext) crtendS$(objext)
- touch stamp-crtS
-! #
- # Compiling object files from source files.
-
-*************** expr.o : expr.c $(CONFIG_H) $(RTL_H) $(T
-*** 1179,1183 ****
- insn-flags.h insn-codes.h expr.h insn-config.h recog.h output.h \
- typeclass.h bytecode.h bc-opcode.h bc-typecd.h bc-typecd.def bc-optab.h \
-! bc-emit.h modemap.def
- calls.o : calls.c $(CONFIG_H) $(RTL_H) $(TREE_H) flags.h expr.h insn-codes.h \
- insn-flags.h
---- 1180,1184 ----
- insn-flags.h insn-codes.h expr.h insn-config.h recog.h output.h \
- typeclass.h bytecode.h bc-opcode.h bc-typecd.h bc-typecd.def bc-optab.h \
-! bc-emit.h modemap.def hard-reg-set.h
- calls.o : calls.c $(CONFIG_H) $(RTL_H) $(TREE_H) flags.h expr.h insn-codes.h \
- insn-flags.h
-*************** reorg.o : reorg.c $(CONFIG_H) $(RTL_H) c
-*** 1238,1241 ****
---- 1239,1243 ----
- basic-block.h regs.h insn-config.h insn-attr.h insn-flags.h recog.h \
- flags.h output.h
-+ alias.o : $(CONFIG_H) $(RTL_H) flags.h hard-reg-set.h regs.h
- sched.o : sched.c $(CONFIG_H) $(RTL_H) basic-block.h regs.h hard-reg-set.h \
- flags.h insn-config.h insn-attr.h
-*************** alloca.o: alloca.c
-*** 1275,1279 ****
- -c `echo $(srcdir)/alloca.c | sed 's,^\./,,'`
- $(ALLOCA_FINISH)
-!
- # Generate header and source files from the machine description,
- # and compile them.
---- 1277,1281 ----
- -c `echo $(srcdir)/alloca.c | sed 's,^\./,,'`
- $(ALLOCA_FINISH)
-! #
- # Generate header and source files from the machine description,
- # and compile them.
-*************** stamp-output : $(md_file) genoutput $(sr
-*** 1400,1404 ****
- $(srcdir)/move-if-change tmp-output.c insn-output.c
- touch stamp-output
-!
- # Compile the programs that generate insn-* from the machine description.
- # They are compiled with $(HOST_CC), and associated libraries,
---- 1402,1406 ----
- $(srcdir)/move-if-change tmp-output.c insn-output.c
- touch stamp-output
-! #
- # Compile the programs that generate insn-* from the machine description.
- # They are compiled with $(HOST_CC), and associated libraries,
-*************** genoutput : genoutput.o $(HOST_RTL) $(HO
-*** 1493,1497 ****
- genoutput.o : genoutput.c $(RTL_H) $(build_xm_file)
- $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(srcdir)/genoutput.c
-!
- # Compile the libraries to be used by gen*.
- # If we are not cross-building, gen* use the same .o's that cc1 will use,
---- 1495,1499 ----
- genoutput.o : genoutput.c $(RTL_H) $(build_xm_file)
- $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(srcdir)/genoutput.c
-! #
- # Compile the libraries to be used by gen*.
- # If we are not cross-building, gen* use the same .o's that cc1 will use,
-*************** $(HOST_PREFIX_1)malloc.o: malloc.c
-*** 1532,1536 ****
- $(HOST_PREFIX_1):
- touch $(HOST_PREFIX_1)
-!
- # Remake bytecode files.
- BI_OBJ=bi-parser.o bi-lexer.o bi-reverse.o
---- 1534,1538 ----
- $(HOST_PREFIX_1):
- touch $(HOST_PREFIX_1)
-! #
- # Remake bytecode files.
- BI_OBJ=bi-parser.o bi-lexer.o bi-reverse.o
-*************** bytecode.maintainer-clean: bytecode.clea
-*** 1601,1605 ****
- -rm -f bi-parser.c bi-parser.h
-
-!
- # Remake cpp and protoize.
-
---- 1603,1607 ----
- -rm -f bi-parser.c bi-parser.h
-
-! #
- # Remake cpp and protoize.
-
-*************** test-protoize-simple: ./protoize ./unpro
-*** 1724,1728 ****
- diff $(srcdir)/protoize.c tmp-proto.c | cat
- -rm -f tmp-proto.[cs] tmp-proto$(objext)
-!
- # Build the include directory. The stamp files are stmp-* rather than
- # stamp-* so that mostlyclean does not force the include directory to
---- 1726,1730 ----
- diff $(srcdir)/protoize.c tmp-proto.c | cat
- -rm -f tmp-proto.[cs] tmp-proto$(objext)
-! #
- # Build the include directory. The stamp files are stmp-* rather than
- # stamp-* so that mostlyclean does not force the include directory to
-*************** stmp-fixproto: fixhdr.ready fixproto stm
-*** 1862,1866 ****
- fi
- touch stmp-fixproto
-!
- # Remake the info files.
-
---- 1864,1868 ----
- fi
- touch stmp-fixproto
-! #
- # Remake the info files.
-
-*************** $(srcdir)/INSTALL: install1.texi install
-*** 1889,1893 ****
- cd $(srcdir); $(MAKEINFO) -D INSTALLONLY --no-header \
- --no-split install1.texi -o INSTALL
-!
- # Deletion of files made during compilation.
- # There are four levels of this:
---- 1891,1895 ----
- cd $(srcdir); $(MAKEINFO) -D INSTALLONLY --no-header \
- --no-split install1.texi -o INSTALL
-! #
- # Deletion of files made during compilation.
- # There are four levels of this:
-*************** maintainer-clean: distclean bytecode.mai
-*** 2010,2014 ****
- -rm -f cpp.info* cpp.??s cpp.*aux
- -rm -f gcc.info* gcc.??s gcc.*aux
-!
- # Entry points `install' and `uninstall'.
- # Also use `install-collect2' to install collect2 when the config files don't.
---- 2012,2016 ----
- -rm -f cpp.info* cpp.??s cpp.*aux
- -rm -f gcc.info* gcc.??s gcc.*aux
-! #
- # Entry points `install' and `uninstall'.
- # Also use `install-collect2' to install collect2 when the config files don't.
-*************** uninstall: lang.uninstall
-*** 2256,2260 ****
- -rm -rf $(mandir)/protoize$(manext)
- -rm -rf $(mandir)/unprotoize$(manext)
-!
- # These exist for maintenance purposes.
-
---- 2258,2262 ----
- -rm -rf $(mandir)/protoize$(manext)
- -rm -rf $(mandir)/unprotoize$(manext)
-! #
- # These exist for maintenance purposes.
-
-diff -rcp2N gcc-2.7.2.3/alias.c gcc-2.7.2.3.f.1/alias.c
-*** gcc-2.7.2.3/alias.c Thu Jan 1 00:00:00 1970
---- gcc-2.7.2.3.f.1/alias.c Tue Sep 9 04:23:32 1997
-***************
-*** 0 ****
---- 1,1004 ----
-+ /* Alias analysis for GNU C, by John Carr (jfc@mit.edu).
-+ Derived in part from sched.c */
-+ #include "config.h"
-+ #include "rtl.h"
-+ #include "expr.h"
-+ #include "regs.h"
-+ #include "hard-reg-set.h"
-+ #include "flags.h"
-+
-+ static rtx canon_rtx PROTO((rtx));
-+ static int rtx_equal_for_memref_p PROTO((rtx, rtx));
-+ static rtx find_symbolic_term PROTO((rtx));
-+ static int memrefs_conflict_p PROTO((int, rtx, int, rtx,
-+ HOST_WIDE_INT));
-+
-+ /* Set up all info needed to perform alias analysis on memory references. */
-+
-+ #define SIZE_FOR_MODE(X) (GET_MODE_SIZE (GET_MODE (X)))
-+
-+ /* reg_base_value[N] gives an address to which register N is related.
-+ If all sets after the first add or subtract to the current value
-+ or otherwise modify it so it does not point to a different top level
-+ object, reg_base_value[N] is equal to the address part of the source
-+ of the first set. The value will be a SYMBOL_REF, a LABEL_REF, or
-+ (address (reg)) to indicate that the address is derived from an
-+ argument or fixed register. */
-+ rtx *reg_base_value;
-+ unsigned int reg_base_value_size; /* size of reg_base_value array */
-+ #define REG_BASE_VALUE(X) \
-+ (REGNO (X) < reg_base_value_size ? reg_base_value[REGNO (X)] : 0)
-+
-+ /* Vector indexed by N giving the initial (unchanging) value known
-+ for pseudo-register N. */
-+ rtx *reg_known_value;
-+
-+ /* Indicates number of valid entries in reg_known_value. */
-+ static int reg_known_value_size;
-+
-+ /* Vector recording for each reg_known_value whether it is due to a
-+ REG_EQUIV note. Future passes (viz., reload) may replace the
-+ pseudo with the equivalent expression and so we account for the
-+ dependences that would be introduced if that happens. */
-+ /* ??? This is a problem only on the Convex. The REG_EQUIV notes created in
-+ assign_parms mention the arg pointer, and there are explicit insns in the
-+ RTL that modify the arg pointer. Thus we must ensure that such insns don't
-+ get scheduled across each other because that would invalidate the REG_EQUIV
-+ notes. One could argue that the REG_EQUIV notes are wrong, but solving
-+ the problem in the scheduler will likely give better code, so we do it
-+ here. */
-+ char *reg_known_equiv_p;
-+
-+ /* Inside SRC, the source of a SET, find a base address. */
-+
-+ /* When copying arguments into pseudo-registers, record the (ADDRESS)
-+ expression for the argument directly so that even if the argument
-+ register is changed later (e.g. for a function call) the original
-+ value is noted. */
-+ static int copying_arguments;
-+
-+ static rtx
-+ find_base_value (src)
-+ register rtx src;
-+ {
-+ switch (GET_CODE (src))
-+ {
-+ case SYMBOL_REF:
-+ case LABEL_REF:
-+ return src;
-+
-+ case REG:
-+ if (copying_arguments && REGNO (src) < FIRST_PSEUDO_REGISTER)
-+ return reg_base_value[REGNO (src)];
-+ return src;
-+
-+ case MEM:
-+ /* Check for an argument passed in memory. Only record in the
-+ copying-arguments block; it is too hard to track changes
-+ otherwise. */
-+ if (copying_arguments
-+ && (XEXP (src, 0) == arg_pointer_rtx
-+ || (GET_CODE (XEXP (src, 0)) == PLUS
-+ && XEXP (XEXP (src, 0), 0) == arg_pointer_rtx)))
-+ return gen_rtx (ADDRESS, VOIDmode, src);
-+ return 0;
-+
-+ case CONST:
-+ src = XEXP (src, 0);
-+ if (GET_CODE (src) != PLUS && GET_CODE (src) != MINUS)
-+ break;
-+ /* fall through */
-+ case PLUS:
-+ case MINUS:
-+ /* Guess which operand to set the register equivalent to. */
-+ /* If the first operand is a symbol or the second operand is
-+ an integer, the first operand is the base address. */
-+ if (GET_CODE (XEXP (src, 0)) == SYMBOL_REF
-+ || GET_CODE (XEXP (src, 0)) == LABEL_REF
-+ || GET_CODE (XEXP (src, 1)) == CONST_INT)
-+ return XEXP (src, 0);
-+ /* If an operand is a register marked as a pointer, it is the base. */
-+ if (GET_CODE (XEXP (src, 0)) == REG
-+ && REGNO_POINTER_FLAG (REGNO (XEXP (src, 0))))
-+ src = XEXP (src, 0);
-+ else if (GET_CODE (XEXP (src, 1)) == REG
-+ && REGNO_POINTER_FLAG (REGNO (XEXP (src, 1))))
-+ src = XEXP (src, 1);
-+ else
-+ return 0;
-+ if (copying_arguments && REGNO (src) < FIRST_PSEUDO_REGISTER)
-+ return reg_base_value[REGNO (src)];
-+ return src;
-+
-+ case AND:
-+ /* If the second operand is constant set the base
-+ address to the first operand. */
-+ if (GET_CODE (XEXP (src, 1)) == CONST_INT
-+ && GET_CODE (XEXP (src, 0)) == REG)
-+ {
-+ src = XEXP (src, 0);
-+ if (copying_arguments && REGNO (src) < FIRST_PSEUDO_REGISTER)
-+ return reg_base_value[REGNO (src)];
-+ return src;
-+ }
-+ return 0;
-+
-+ case HIGH:
-+ return XEXP (src, 0);
-+ }
-+
-+ return 0;
-+ }
-+
-+ /* Called from init_alias_analysis indirectly through note_stores. */
-+
-+ /* while scanning insns to find base values, reg_seen[N] is nonzero if
-+ register N has been set in this function. */
-+ static char *reg_seen;
-+
-+ static
-+ void record_set (dest, set)
-+ rtx dest, set;
-+ {
-+ register int regno;
-+ rtx src;
-+
-+ if (GET_CODE (dest) != REG)
-+ return;
-+
-+ regno = REGNO (dest);
-+
-+ if (set)
-+ {
-+ /* A CLOBBER wipes out any old value but does not prevent a previously
-+ unset register from acquiring a base address (i.e. reg_seen is not
-+ set). */
-+ if (GET_CODE (set) == CLOBBER)
-+ {
-+ reg_base_value[regno] = 0;
-+ return;
-+ }
-+ src = SET_SRC (set);
-+ }
-+ else
-+ {
-+ static int unique_id;
-+ if (reg_seen[regno])
-+ {
-+ reg_base_value[regno] = 0;
-+ return;
-+ }
-+ reg_seen[regno] = 1;
-+ reg_base_value[regno] = gen_rtx (ADDRESS, Pmode,
-+ GEN_INT (unique_id++));
-+ return;
-+ }
-+
-+ /* This is not the first set. If the new value is not related to the
-+ old value, forget the base value. Note that the following code is
-+ not detected:
-+ extern int x, y; int *p = &x; p += (&y-&x);
-+ ANSI C does not allow computing the difference of addresses
-+ of distinct top level objects. */
-+ if (reg_base_value[regno])
-+ switch (GET_CODE (src))
-+ {
-+ case PLUS:
-+ case MINUS:
-+ if (XEXP (src, 0) != dest && XEXP (src, 1) != dest)
-+ reg_base_value[regno] = 0;
-+ break;
-+ case AND:
-+ if (XEXP (src, 0) != dest || GET_CODE (XEXP (src, 1)) != CONST_INT)
-+ reg_base_value[regno] = 0;
-+ break;
-+ case LO_SUM:
-+ if (XEXP (src, 0) != dest)
-+ reg_base_value[regno] = 0;
-+ break;
-+ default:
-+ reg_base_value[regno] = 0;
-+ break;
-+ }
-+ /* If this is the first set of a register, record the value. */
-+ else if ((regno >= FIRST_PSEUDO_REGISTER || ! fixed_regs[regno])
-+ && ! reg_seen[regno] && reg_base_value[regno] == 0)
-+ reg_base_value[regno] = find_base_value (src);
-+
-+ reg_seen[regno] = 1;
-+ }
-+
-+ /* Called from loop optimization when a new pseudo-register is created. */
-+ void
-+ record_base_value (regno, val)
-+ int regno;
-+ rtx val;
-+ {
-+ if (!flag_alias_check || regno >= reg_base_value_size)
-+ return;
-+ if (GET_CODE (val) == REG)
-+ {
-+ if (REGNO (val) < reg_base_value_size)
-+ reg_base_value[regno] = reg_base_value[REGNO (val)];
-+ return;
-+ }
-+ reg_base_value[regno] = find_base_value (val);
-+ }
-+
-+ static rtx
-+ canon_rtx (x)
-+ rtx x;
-+ {
-+ /* Recursively look for equivalences. */
-+ if (GET_CODE (x) == REG && REGNO (x) >= FIRST_PSEUDO_REGISTER
-+ && REGNO (x) < reg_known_value_size)
-+ return reg_known_value[REGNO (x)] == x
-+ ? x : canon_rtx (reg_known_value[REGNO (x)]);
-+ else if (GET_CODE (x) == PLUS)
-+ {
-+ rtx x0 = canon_rtx (XEXP (x, 0));
-+ rtx x1 = canon_rtx (XEXP (x, 1));
-+
-+ if (x0 != XEXP (x, 0) || x1 != XEXP (x, 1))
-+ {
-+ /* We can tolerate LO_SUMs being offset here; these
-+ rtl are used for nothing other than comparisons. */
-+ if (GET_CODE (x0) == CONST_INT)
-+ return plus_constant_for_output (x1, INTVAL (x0));
-+ else if (GET_CODE (x1) == CONST_INT)
-+ return plus_constant_for_output (x0, INTVAL (x1));
-+ return gen_rtx (PLUS, GET_MODE (x), x0, x1);
-+ }
-+ }
-+ /* This gives us much better alias analysis when called from
-+ the loop optimizer. Note we want to leave the original
-+ MEM alone, but need to return the canonicalized MEM with
-+ all the flags with their original values. */
-+ else if (GET_CODE (x) == MEM)
-+ {
-+ rtx addr = canon_rtx (XEXP (x, 0));
-+ if (addr != XEXP (x, 0))
-+ {
-+ rtx new = gen_rtx (MEM, GET_MODE (x), addr);
-+ MEM_VOLATILE_P (new) = MEM_VOLATILE_P (x);
-+ RTX_UNCHANGING_P (new) = RTX_UNCHANGING_P (x);
-+ MEM_IN_STRUCT_P (new) = MEM_IN_STRUCT_P (x);
-+ x = new;
-+ }
-+ }
-+ return x;
-+ }
-+
-+ /* Return 1 if X and Y are identical-looking rtx's.
-+
-+ We use the data in reg_known_value above to see if two registers with
-+ different numbers are, in fact, equivalent. */
-+
-+ static int
-+ rtx_equal_for_memref_p (x, y)
-+ rtx x, y;
-+ {
-+ register int i;
-+ register int j;
-+ register enum rtx_code code;
-+ register char *fmt;
-+
-+ if (x == 0 && y == 0)
-+ return 1;
-+ if (x == 0 || y == 0)
-+ return 0;
-+ x = canon_rtx (x);
-+ y = canon_rtx (y);
-+
-+ if (x == y)
-+ return 1;
-+
-+ code = GET_CODE (x);
-+ /* Rtx's of different codes cannot be equal. */
-+ if (code != GET_CODE (y))
-+ return 0;
-+
-+ /* (MULT:SI x y) and (MULT:HI x y) are NOT equivalent.
-+ (REG:SI x) and (REG:HI x) are NOT equivalent. */
-+
-+ if (GET_MODE (x) != GET_MODE (y))
-+ return 0;
-+
-+ /* REG, LABEL_REF, and SYMBOL_REF can be compared nonrecursively. */
-+
-+ if (code == REG)
-+ return REGNO (x) == REGNO (y);
-+ if (code == LABEL_REF)
-+ return XEXP (x, 0) == XEXP (y, 0);
-+ if (code == SYMBOL_REF)
-+ return XSTR (x, 0) == XSTR (y, 0);
-+
-+ /* For commutative operations, the RTX match if the operand match in any
-+ order. Also handle the simple binary and unary cases without a loop. */
-+ if (code == EQ || code == NE || GET_RTX_CLASS (code) == 'c')
-+ return ((rtx_equal_for_memref_p (XEXP (x, 0), XEXP (y, 0))
-+ && rtx_equal_for_memref_p (XEXP (x, 1), XEXP (y, 1)))
-+ || (rtx_equal_for_memref_p (XEXP (x, 0), XEXP (y, 1))
-+ && rtx_equal_for_memref_p (XEXP (x, 1), XEXP (y, 0))));
-+ else if (GET_RTX_CLASS (code) == '<' || GET_RTX_CLASS (code) == '2')
-+ return (rtx_equal_for_memref_p (XEXP (x, 0), XEXP (y, 0))
-+ && rtx_equal_for_memref_p (XEXP (x, 1), XEXP (y, 1)));
-+ else if (GET_RTX_CLASS (code) == '1')
-+ return rtx_equal_for_memref_p (XEXP (x, 0), XEXP (y, 0));
-+
-+ /* Compare the elements. If any pair of corresponding elements
-+ fail to match, return 0 for the whole things. */
-+
-+ fmt = GET_RTX_FORMAT (code);
-+ for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
-+ {
-+ switch (fmt[i])
-+ {
-+ case 'w':
-+ if (XWINT (x, i) != XWINT (y, i))
-+ return 0;
-+ break;
-+
-+ case 'n':
-+ case 'i':
-+ if (XINT (x, i) != XINT (y, i))
-+ return 0;
-+ break;
-+
-+ case 'V':
-+ case 'E':
-+ /* Two vectors must have the same length. */
-+ if (XVECLEN (x, i) != XVECLEN (y, i))
-+ return 0;
-+
-+ /* And the corresponding elements must match. */
-+ for (j = 0; j < XVECLEN (x, i); j++)
-+ if (rtx_equal_for_memref_p (XVECEXP (x, i, j), XVECEXP (y, i, j)) == 0)
-+ return 0;
-+ break;
-+
-+ case 'e':
-+ if (rtx_equal_for_memref_p (XEXP (x, i), XEXP (y, i)) == 0)
-+ return 0;
-+ break;
-+
-+ case 'S':
-+ case 's':
-+ if (strcmp (XSTR (x, i), XSTR (y, i)))
-+ return 0;
-+ break;
-+
-+ case 'u':
-+ /* These are just backpointers, so they don't matter. */
-+ break;
-+
-+ case '0':
-+ break;
-+
-+ /* It is believed that rtx's at this level will never
-+ contain anything but integers and other rtx's,
-+ except for within LABEL_REFs and SYMBOL_REFs. */
-+ default:
-+ abort ();
-+ }
-+ }
-+ return 1;
-+ }
-+
-+ /* Given an rtx X, find a SYMBOL_REF or LABEL_REF within
-+ X and return it, or return 0 if none found. */
-+
-+ static rtx
-+ find_symbolic_term (x)
-+ rtx x;
-+ {
-+ register int i;
-+ register enum rtx_code code;
-+ register char *fmt;
-+
-+ code = GET_CODE (x);
-+ if (code == SYMBOL_REF || code == LABEL_REF)
-+ return x;
-+ if (GET_RTX_CLASS (code) == 'o')
-+ return 0;
-+
-+ fmt = GET_RTX_FORMAT (code);
-+ for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
-+ {
-+ rtx t;
-+
-+ if (fmt[i] == 'e')
-+ {
-+ t = find_symbolic_term (XEXP (x, i));
-+ if (t != 0)
-+ return t;
-+ }
-+ else if (fmt[i] == 'E')
-+ break;
-+ }
-+ return 0;
-+ }
-+
-+ static rtx
-+ find_base_term (x)
-+ register rtx x;
-+ {
-+ switch (GET_CODE (x))
-+ {
-+ case REG:
-+ return REG_BASE_VALUE (x);
-+
-+ case HIGH:
-+ return find_base_term (XEXP (x, 0));
-+
-+ case CONST:
-+ x = XEXP (x, 0);
-+ if (GET_CODE (x) != PLUS && GET_CODE (x) != MINUS)
-+ return 0;
-+ /* fall through */
-+ case LO_SUM:
-+ case PLUS:
-+ case MINUS:
-+ {
-+ rtx tmp = find_base_term (XEXP (x, 0));
-+ if (tmp)
-+ return tmp;
-+ return find_base_term (XEXP (x, 1));
-+ }
-+
-+ case AND:
-+ if (GET_CODE (XEXP (x, 0)) == REG && GET_CODE (XEXP (x, 1)) == CONST_INT)
-+ return REG_BASE_VALUE (XEXP (x, 0));
-+ return 0;
-+
-+ case SYMBOL_REF:
-+ case LABEL_REF:
-+ return x;
-+
-+ default:
-+ return 0;
-+ }
-+ }
-+
-+ /* Return 0 if the addresses X and Y are known to point to different
-+ objects, 1 if they might be pointers to the same object. */
-+
-+ static int
-+ base_alias_check (x, y)
-+ rtx x, y;
-+ {
-+ rtx x_base = find_base_term (x);
-+ rtx y_base = find_base_term (y);
-+
-+ /* If either base address is unknown or the base addresses are equal,
-+ nothing is known about aliasing. */
-+
-+ if (x_base == 0 || y_base == 0 || rtx_equal_p (x_base, y_base))
-+ return 1;
-+
-+ /* The base addresses of the read and write are different
-+ expressions. If they are both symbols there is no
-+ conflict. */
-+ if (GET_CODE (x_base) != ADDRESS && GET_CODE (y_base) != ADDRESS)
-+ return 0;
-+
-+ /* If one address is a stack reference there can be no alias:
-+ stack references using different base registers do not alias,
-+ a stack reference can not alias a parameter, and a stack reference
-+ can not alias a global. */
-+ if ((GET_CODE (x_base) == ADDRESS && GET_MODE (x_base) == Pmode)
-+ || (GET_CODE (y_base) == ADDRESS && GET_MODE (y_base) == Pmode))
-+ return 0;
-+
-+ if (! flag_argument_noalias)
-+ return 1;
-+
-+ if (flag_argument_noalias > 1)
-+ return 0;
-+
-+ /* Weak noalias assertion (arguments are distinct, but may match globals). */
-+ return ! (GET_MODE (x_base) == VOIDmode && GET_MODE (y_base) == VOIDmode);
-+ }
-+
-+ /* Return nonzero if X and Y (memory addresses) could reference the
-+ same location in memory. C is an offset accumulator. When
-+ C is nonzero, we are testing aliases between X and Y + C.
-+ XSIZE is the size in bytes of the X reference,
-+ similarly YSIZE is the size in bytes for Y.
-+
-+ If XSIZE or YSIZE is zero, we do not know the amount of memory being
-+ referenced (the reference was BLKmode), so make the most pessimistic
-+ assumptions.
-+
-+ We recognize the following cases of non-conflicting memory:
-+
-+ (1) addresses involving the frame pointer cannot conflict
-+ with addresses involving static variables.
-+ (2) static variables with different addresses cannot conflict.
-+
-+ Nice to notice that varying addresses cannot conflict with fp if no
-+ local variables had their addresses taken, but that's too hard now. */
-+
-+
-+ static int
-+ memrefs_conflict_p (xsize, x, ysize, y, c)
-+ register rtx x, y;
-+ int xsize, ysize;
-+ HOST_WIDE_INT c;
-+ {
-+ if (GET_CODE (x) == HIGH)
-+ x = XEXP (x, 0);
-+ else if (GET_CODE (x) == LO_SUM)
-+ x = XEXP (x, 1);
-+ else
-+ x = canon_rtx (x);
-+ if (GET_CODE (y) == HIGH)
-+ y = XEXP (y, 0);
-+ else if (GET_CODE (y) == LO_SUM)
-+ y = XEXP (y, 1);
-+ else
-+ y = canon_rtx (y);
-+
-+ if (rtx_equal_for_memref_p (x, y))
-+ {
-+ if (xsize == 0 || ysize == 0)
-+ return 1;
-+ if (c >= 0 && xsize > c)
-+ return 1;
-+ if (c < 0 && ysize+c > 0)
-+ return 1;
-+ return 0;
-+ }
-+
-+ if (y == frame_pointer_rtx || y == hard_frame_pointer_rtx
-+ || y == stack_pointer_rtx)
-+ {
-+ rtx t = y;
-+ int tsize = ysize;
-+ y = x; ysize = xsize;
-+ x = t; xsize = tsize;
-+ }
-+
-+ if (x == frame_pointer_rtx || x == hard_frame_pointer_rtx
-+ || x == stack_pointer_rtx)
-+ {
-+ rtx y1;
-+
-+ if (CONSTANT_P (y))
-+ return 0;
-+
-+ if (GET_CODE (y) == PLUS
-+ && canon_rtx (XEXP (y, 0)) == x
-+ && (y1 = canon_rtx (XEXP (y, 1)))
-+ && GET_CODE (y1) == CONST_INT)
-+ {
-+ c += INTVAL (y1);
-+ return (xsize == 0 || ysize == 0
-+ || (c >= 0 && xsize > c) || (c < 0 && ysize+c > 0));
-+ }
-+
-+ if (GET_CODE (y) == PLUS
-+ && (y1 = canon_rtx (XEXP (y, 0)))
-+ && CONSTANT_P (y1))
-+ return 0;
-+
-+ return 1;
-+ }
-+
-+ if (GET_CODE (x) == PLUS)
-+ {
-+ /* The fact that X is canonicalized means that this
-+ PLUS rtx is canonicalized. */
-+ rtx x0 = XEXP (x, 0);
-+ rtx x1 = XEXP (x, 1);
-+
-+ if (GET_CODE (y) == PLUS)
-+ {
-+ /* The fact that Y is canonicalized means that this
-+ PLUS rtx is canonicalized. */
-+ rtx y0 = XEXP (y, 0);
-+ rtx y1 = XEXP (y, 1);
-+
-+ if (rtx_equal_for_memref_p (x1, y1))
-+ return memrefs_conflict_p (xsize, x0, ysize, y0, c);
-+ if (rtx_equal_for_memref_p (x0, y0))
-+ return memrefs_conflict_p (xsize, x1, ysize, y1, c);
-+ if (GET_CODE (x1) == CONST_INT)
-+ if (GET_CODE (y1) == CONST_INT)
-+ return memrefs_conflict_p (xsize, x0, ysize, y0,
-+ c - INTVAL (x1) + INTVAL (y1));
-+ else
-+ return memrefs_conflict_p (xsize, x0, ysize, y, c - INTVAL (x1));
-+ else if (GET_CODE (y1) == CONST_INT)
-+ return memrefs_conflict_p (xsize, x, ysize, y0, c + INTVAL (y1));
-+
-+ /* Handle case where we cannot understand iteration operators,
-+ but we notice that the base addresses are distinct objects. */
-+ /* ??? Is this still necessary? */
-+ x = find_symbolic_term (x);
-+ if (x == 0)
-+ return 1;
-+ y = find_symbolic_term (y);
-+ if (y == 0)
-+ return 1;
-+ return rtx_equal_for_memref_p (x, y);
-+ }
-+ else if (GET_CODE (x1) == CONST_INT)
-+ return memrefs_conflict_p (xsize, x0, ysize, y, c - INTVAL (x1));
-+ }
-+ else if (GET_CODE (y) == PLUS)
-+ {
-+ /* The fact that Y is canonicalized means that this
-+ PLUS rtx is canonicalized. */
-+ rtx y0 = XEXP (y, 0);
-+ rtx y1 = XEXP (y, 1);
-+
-+ if (GET_CODE (y1) == CONST_INT)
-+ return memrefs_conflict_p (xsize, x, ysize, y0, c + INTVAL (y1));
-+ else
-+ return 1;
-+ }
-+
-+ if (GET_CODE (x) == GET_CODE (y))
-+ switch (GET_CODE (x))
-+ {
-+ case MULT:
-+ {
-+ /* Handle cases where we expect the second operands to be the
-+ same, and check only whether the first operand would conflict
-+ or not. */
-+ rtx x0, y0;
-+ rtx x1 = canon_rtx (XEXP (x, 1));
-+ rtx y1 = canon_rtx (XEXP (y, 1));
-+ if (! rtx_equal_for_memref_p (x1, y1))
-+ return 1;
-+ x0 = canon_rtx (XEXP (x, 0));
-+ y0 = canon_rtx (XEXP (y, 0));
-+ if (rtx_equal_for_memref_p (x0, y0))
-+ return (xsize == 0 || ysize == 0
-+ || (c >= 0 && xsize > c) || (c < 0 && ysize+c > 0));
-+
-+ /* Can't properly adjust our sizes. */
-+ if (GET_CODE (x1) != CONST_INT)
-+ return 1;
-+ xsize /= INTVAL (x1);
-+ ysize /= INTVAL (x1);
-+ c /= INTVAL (x1);
-+ return memrefs_conflict_p (xsize, x0, ysize, y0, c);
-+ }
-+ }
-+
-+ /* Treat an access through an AND (e.g. a subword access on an Alpha)
-+ as an access with indeterminate size. */
-+ if (GET_CODE (x) == AND && GET_CODE (XEXP (x, 1)) == CONST_INT)
-+ return memrefs_conflict_p (0, XEXP (x, 0), ysize, y, c);
-+ if (GET_CODE (y) == AND && GET_CODE (XEXP (y, 1)) == CONST_INT)
-+ return memrefs_conflict_p (xsize, x, 0, XEXP (y, 0), c);
-+
-+ if (CONSTANT_P (x))
-+ {
-+ if (GET_CODE (x) == CONST_INT && GET_CODE (y) == CONST_INT)
-+ {
-+ c += (INTVAL (y) - INTVAL (x));
-+ return (xsize == 0 || ysize == 0
-+ || (c >= 0 && xsize > c) || (c < 0 && ysize+c > 0));
-+ }
-+
-+ if (GET_CODE (x) == CONST)
-+ {
-+ if (GET_CODE (y) == CONST)
-+ return memrefs_conflict_p (xsize, canon_rtx (XEXP (x, 0)),
-+ ysize, canon_rtx (XEXP (y, 0)), c);
-+ else
-+ return memrefs_conflict_p (xsize, canon_rtx (XEXP (x, 0)),
-+ ysize, y, c);
-+ }
-+ if (GET_CODE (y) == CONST)
-+ return memrefs_conflict_p (xsize, x, ysize,
-+ canon_rtx (XEXP (y, 0)), c);
-+
-+ if (CONSTANT_P (y))
-+ return (rtx_equal_for_memref_p (x, y)
-+ && (xsize == 0 || ysize == 0
-+ || (c >= 0 && xsize > c) || (c < 0 && ysize+c > 0)));
-+
-+ return 1;
-+ }
-+ return 1;
-+ }
-+
-+ /* Functions to compute memory dependencies.
-+
-+ Since we process the insns in execution order, we can build tables
-+ to keep track of what registers are fixed (and not aliased), what registers
-+ are varying in known ways, and what registers are varying in unknown
-+ ways.
-+
-+ If both memory references are volatile, then there must always be a
-+ dependence between the two references, since their order can not be
-+ changed. A volatile and non-volatile reference can be interchanged
-+ though.
-+
-+ A MEM_IN_STRUCT reference at a non-QImode non-AND varying address can never
-+ conflict with a non-MEM_IN_STRUCT reference at a fixed address. We must
-+ allow QImode aliasing because the ANSI C standard allows character
-+ pointers to alias anything. We are assuming that characters are
-+ always QImode here. We also must allow AND addresses, because they may
-+ generate accesses outside the object being referenced. This is used to
-+ generate aligned addresses from unaligned addresses, for instance, the
-+ alpha storeqi_unaligned pattern. */
-+
-+ /* Read dependence: X is read after read in MEM takes place. There can
-+ only be a dependence here if both reads are volatile. */
-+
-+ int
-+ read_dependence (mem, x)
-+ rtx mem;
-+ rtx x;
-+ {
-+ return MEM_VOLATILE_P (x) && MEM_VOLATILE_P (mem);
-+ }
-+
-+ /* True dependence: X is read after store in MEM takes place. */
-+
-+ int
-+ true_dependence (mem, mem_mode, x, varies)
-+ rtx mem;
-+ enum machine_mode mem_mode;
-+ rtx x;
-+ int (*varies)();
-+ {
-+ rtx x_addr, mem_addr;
-+
-+ if (MEM_VOLATILE_P (x) && MEM_VOLATILE_P (mem))
-+ return 1;
-+
-+ x_addr = XEXP (x, 0);
-+ mem_addr = XEXP (mem, 0);
-+
-+ if (flag_alias_check && ! base_alias_check (x_addr, mem_addr))
-+ return 0;
-+
-+ /* If X is an unchanging read, then it can't possibly conflict with any
-+ non-unchanging store. It may conflict with an unchanging write though,
-+ because there may be a single store to this address to initialize it.
-+ Just fall through to the code below to resolve the case where we have
-+ both an unchanging read and an unchanging write. This won't handle all
-+ cases optimally, but the possible performance loss should be
-+ negligible. */
-+ if (RTX_UNCHANGING_P (x) && ! RTX_UNCHANGING_P (mem))
-+ return 0;
-+
-+ x_addr = canon_rtx (x_addr);
-+ mem_addr = canon_rtx (mem_addr);
-+ if (mem_mode == VOIDmode)
-+ mem_mode = GET_MODE (mem);
-+
-+ if (! memrefs_conflict_p (mem_mode, mem_addr, SIZE_FOR_MODE (x), x_addr, 0))
-+ return 0;
-+
-+ /* If both references are struct references, or both are not, nothing
-+ is known about aliasing.
-+
-+ If either reference is QImode or BLKmode, ANSI C permits aliasing.
-+
-+ If both addresses are constant, or both are not, nothing is known
-+ about aliasing. */
-+ if (MEM_IN_STRUCT_P (x) == MEM_IN_STRUCT_P (mem)
-+ || mem_mode == QImode || mem_mode == BLKmode
-+ || GET_MODE (x) == QImode || GET_MODE (x) == BLKmode
-+ || GET_CODE (x_addr) == AND || GET_CODE (mem_addr) == AND
-+ || varies (x_addr) == varies (mem_addr))
-+ return 1;
-+
-+ /* One memory reference is to a constant address, one is not.
-+ One is to a structure, the other is not.
-+
-+ If either memory reference is a variable structure the other is a
-+ fixed scalar and there is no aliasing. */
-+ if ((MEM_IN_STRUCT_P (mem) && varies (mem_addr))
-+ || (MEM_IN_STRUCT_P (x) && varies (x_addr)))
-+ return 0;
-+
-+ return 1;
-+ }
-+
-+ /* Anti dependence: X is written after read in MEM takes place. */
-+
-+ int
-+ anti_dependence (mem, x)
-+ rtx mem;
-+ rtx x;
-+ {
-+ if (MEM_VOLATILE_P (x) && MEM_VOLATILE_P (mem))
-+ return 1;
-+
-+ if (flag_alias_check && ! base_alias_check (XEXP (x, 0), XEXP (mem, 0)))
-+ return 0;
-+
-+ /* If MEM is an unchanging read, then it can't possibly conflict with
-+ the store to X, because there is at most one store to MEM, and it must
-+ have occurred somewhere before MEM. */
-+ x = canon_rtx (x);
-+ mem = canon_rtx (mem);
-+ if (RTX_UNCHANGING_P (mem))
-+ return 0;
-+
-+ return (memrefs_conflict_p (SIZE_FOR_MODE (mem), XEXP (mem, 0),
-+ SIZE_FOR_MODE (x), XEXP (x, 0), 0)
-+ && ! (MEM_IN_STRUCT_P (mem) && rtx_addr_varies_p (mem)
-+ && GET_MODE (mem) != QImode
-+ && GET_CODE (XEXP (mem, 0)) != AND
-+ && ! MEM_IN_STRUCT_P (x) && ! rtx_addr_varies_p (x))
-+ && ! (MEM_IN_STRUCT_P (x) && rtx_addr_varies_p (x)
-+ && GET_MODE (x) != QImode
-+ && GET_CODE (XEXP (x, 0)) != AND
-+ && ! MEM_IN_STRUCT_P (mem) && ! rtx_addr_varies_p (mem)));
-+ }
-+
-+ /* Output dependence: X is written after store in MEM takes place. */
-+
-+ int
-+ output_dependence (mem, x)
-+ register rtx mem;
-+ register rtx x;
-+ {
-+ if (MEM_VOLATILE_P (x) && MEM_VOLATILE_P (mem))
-+ return 1;
-+
-+ if (flag_alias_check && !base_alias_check (XEXP (x, 0), XEXP (mem, 0)))
-+ return 0;
-+
-+ x = canon_rtx (x);
-+ mem = canon_rtx (mem);
-+ return (memrefs_conflict_p (SIZE_FOR_MODE (mem), XEXP (mem, 0),
-+ SIZE_FOR_MODE (x), XEXP (x, 0), 0)
-+ && ! (MEM_IN_STRUCT_P (mem) && rtx_addr_varies_p (mem)
-+ && GET_MODE (mem) != QImode
-+ && GET_CODE (XEXP (mem, 0)) != AND
-+ && ! MEM_IN_STRUCT_P (x) && ! rtx_addr_varies_p (x))
-+ && ! (MEM_IN_STRUCT_P (x) && rtx_addr_varies_p (x)
-+ && GET_MODE (x) != QImode
-+ && GET_CODE (XEXP (x, 0)) != AND
-+ && ! MEM_IN_STRUCT_P (mem) && ! rtx_addr_varies_p (mem)));
-+ }
-+
-+ void
-+ init_alias_analysis ()
-+ {
-+ int maxreg = max_reg_num ();
-+ int changed;
-+ register int i;
-+ register rtx insn;
-+ rtx note;
-+ rtx set;
-+
-+ reg_known_value_size = maxreg;
-+
-+ reg_known_value
-+ = (rtx *) oballoc ((maxreg - FIRST_PSEUDO_REGISTER) * sizeof (rtx))
-+ - FIRST_PSEUDO_REGISTER;
-+ reg_known_equiv_p =
-+ oballoc (maxreg - FIRST_PSEUDO_REGISTER) - FIRST_PSEUDO_REGISTER;
-+ bzero ((char *) (reg_known_value + FIRST_PSEUDO_REGISTER),
-+ (maxreg-FIRST_PSEUDO_REGISTER) * sizeof (rtx));
-+ bzero (reg_known_equiv_p + FIRST_PSEUDO_REGISTER,
-+ (maxreg - FIRST_PSEUDO_REGISTER) * sizeof (char));
-+
-+ if (flag_alias_check)
-+ {
-+ /* Overallocate reg_base_value to allow some growth during loop
-+ optimization. Loop unrolling can create a large number of
-+ registers. */
-+ reg_base_value_size = maxreg * 2;
-+ reg_base_value = (rtx *)oballoc (reg_base_value_size * sizeof (rtx));
-+ reg_seen = (char *)alloca (reg_base_value_size);
-+ bzero (reg_base_value, reg_base_value_size * sizeof (rtx));
-+ bzero (reg_seen, reg_base_value_size);
-+
-+ /* Mark all hard registers which may contain an address.
-+ The stack, frame and argument pointers may contain an address.
-+ An argument register which can hold a Pmode value may contain
-+ an address even if it is not in BASE_REGS.
-+
-+ The address expression is VOIDmode for an argument and
-+ Pmode for other registers. */
-+ #ifndef OUTGOING_REGNO
-+ #define OUTGOING_REGNO(N) N
-+ #endif
-+ for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
-+ /* Check whether this register can hold an incoming pointer
-+ argument. FUNCTION_ARG_REGNO_P tests outgoing register
-+ numbers, so translate if necessary due to register windows. */
-+ if (FUNCTION_ARG_REGNO_P (OUTGOING_REGNO (i)) && HARD_REGNO_MODE_OK (i, Pmode))
-+ reg_base_value[i] = gen_rtx (ADDRESS, VOIDmode,
-+ gen_rtx (REG, Pmode, i));
-+
-+ reg_base_value[STACK_POINTER_REGNUM]
-+ = gen_rtx (ADDRESS, Pmode, stack_pointer_rtx);
-+ reg_base_value[ARG_POINTER_REGNUM]
-+ = gen_rtx (ADDRESS, Pmode, arg_pointer_rtx);
-+ reg_base_value[FRAME_POINTER_REGNUM]
-+ = gen_rtx (ADDRESS, Pmode, frame_pointer_rtx);
-+ reg_base_value[HARD_FRAME_POINTER_REGNUM]
-+ = gen_rtx (ADDRESS, Pmode, hard_frame_pointer_rtx);
-+ }
-+
-+ copying_arguments = 1;
-+ /* Fill in the entries with known constant values. */
-+ for (insn = get_insns (); insn; insn = NEXT_INSN (insn))
-+ {
-+ if (flag_alias_check && GET_RTX_CLASS (GET_CODE (insn)) == 'i')
-+ {
-+ /* If this insn has a noalias note, process it, Otherwise,
-+ scan for sets. A simple set will have no side effects
-+ which could change the base value of any other register. */
-+ rtx noalias_note;
-+ if (GET_CODE (PATTERN (insn)) == SET
-+ && (noalias_note = find_reg_note (insn, REG_NOALIAS, NULL_RTX)))
-+ record_set (SET_DEST (PATTERN (insn)), 0);
-+ else
-+ note_stores (PATTERN (insn), record_set);
-+ }
-+ else if (GET_CODE (insn) == NOTE
-+ && NOTE_LINE_NUMBER (insn) == NOTE_INSN_FUNCTION_BEG)
-+ copying_arguments = 0;
-+
-+ if ((set = single_set (insn)) != 0
-+ && GET_CODE (SET_DEST (set)) == REG
-+ && REGNO (SET_DEST (set)) >= FIRST_PSEUDO_REGISTER
-+ && (((note = find_reg_note (insn, REG_EQUAL, 0)) != 0
-+ && reg_n_sets[REGNO (SET_DEST (set))] == 1)
-+ || (note = find_reg_note (insn, REG_EQUIV, NULL_RTX)) != 0)
-+ && GET_CODE (XEXP (note, 0)) != EXPR_LIST)
-+ {
-+ int regno = REGNO (SET_DEST (set));
-+ reg_known_value[regno] = XEXP (note, 0);
-+ reg_known_equiv_p[regno] = REG_NOTE_KIND (note) == REG_EQUIV;
-+ }
-+ }
-+
-+ /* Fill in the remaining entries. */
-+ for (i = FIRST_PSEUDO_REGISTER; i < maxreg; i++)
-+ if (reg_known_value[i] == 0)
-+ reg_known_value[i] = regno_reg_rtx[i];
-+
-+ if (! flag_alias_check)
-+ return;
-+
-+ /* Simplify the reg_base_value array so that no register refers to
-+ another register, except to special registers indirectly through
-+ ADDRESS expressions.
-+
-+ In theory this loop can take as long as O(registers^2), but unless
-+ there are very long dependency chains it will run in close to linear
-+ time. */
-+ do
-+ {
-+ changed = 0;
-+ for (i = FIRST_PSEUDO_REGISTER; i < reg_base_value_size; i++)
-+ {
-+ rtx base = reg_base_value[i];
-+ if (base && GET_CODE (base) == REG)
-+ {
-+ int base_regno = REGNO (base);
-+ if (base_regno == i) /* register set from itself */
-+ reg_base_value[i] = 0;
-+ else
-+ reg_base_value[i] = reg_base_value[base_regno];
-+ changed = 1;
-+ }
-+ }
-+ }
-+ while (changed);
-+
-+ reg_seen = 0;
-+ }
-+
-+ void
-+ end_alias_analysis ()
-+ {
-+ reg_known_value = 0;
-+ reg_base_value = 0;
-+ reg_base_value_size = 0;
-+ }
-diff -rcp2N gcc-2.7.2.3/c-decl.c gcc-2.7.2.3.f.1/c-decl.c
-*** gcc-2.7.2.3/c-decl.c Fri Oct 27 09:44:43 1995
---- gcc-2.7.2.3.f.1/c-decl.c Sun Aug 10 22:46:24 1997
-*************** init_decl_processing ()
-*** 3207,3210 ****
---- 3207,3223 ----
- builtin_function ("__builtin_cosl", ldouble_ftype_ldouble,
- BUILT_IN_COS, "cosl");
-+ builtin_function ("__builtin_setjmp",
-+ build_function_type (integer_type_node,
-+ tree_cons (NULL_TREE,
-+ ptr_type_node, endlink)),
-+ BUILT_IN_SETJMP, NULL_PTR);
-+ builtin_function ("__builtin_longjmp",
-+ build_function_type
-+ (void_type_node,
-+ tree_cons (NULL, ptr_type_node,
-+ tree_cons (NULL_TREE,
-+ integer_type_node,
-+ endlink))),
-+ BUILT_IN_LONGJMP, NULL_PTR);
-
- /* In an ANSI C program, it is okay to supply built-in meanings
-*************** grokdeclarator (declarator, declspecs, d
-*** 4049,4052 ****
---- 4062,4066 ----
- int volatilep;
- int inlinep;
-+ int restrictp;
- int explicit_int = 0;
- int explicit_char = 0;
-*************** grokdeclarator (declarator, declspecs, d
-*** 4342,4349 ****
---- 4356,4366 ----
- volatilep = !! (specbits & 1 << (int) RID_VOLATILE) + TYPE_VOLATILE (type);
- inlinep = !! (specbits & (1 << (int) RID_INLINE));
-+ restrictp = !! (specbits & (1 << (int) RID_RESTRICT));
- if (constp > 1)
- pedwarn ("duplicate `const'");
- if (volatilep > 1)
- pedwarn ("duplicate `volatile'");
-+ if (restrictp)
-+ error ("`restrict' used in non-parameter or non-pointer type declaration");
- if (! flag_gen_aux_info && (TYPE_READONLY (type) || TYPE_VOLATILE (type)))
- type = TYPE_MAIN_VARIANT (type);
-*************** grokdeclarator (declarator, declspecs, d
-*** 4693,4696 ****
---- 4710,4715 ----
- else if (TREE_VALUE (typemodlist) == ridpointers[(int) RID_VOLATILE])
- volatilep++;
-+ else if (TREE_VALUE (typemodlist) == ridpointers[(int) RID_RESTRICT])
-+ restrictp++;
- else if (!erred)
- {
-*************** grokdeclarator (declarator, declspecs, d
-*** 4703,4706 ****
---- 4722,4727 ----
- if (volatilep > 1)
- pedwarn ("duplicate `volatile'");
-+ if (restrictp > 1)
-+ pedwarn ("duplicate `restrict'");
- }
-
-*************** grokdeclarator (declarator, declspecs, d
-*** 4844,4847 ****
---- 4865,4875 ----
- }
-
-+ if (restrictp)
-+ {
-+ if (TREE_CODE (TREE_TYPE (decl)) != POINTER_TYPE)
-+ error ("`restrict' applied to non-pointer");
-+ DECL_RESTRICT (decl) = 1;
-+ }
-+
- DECL_ARG_TYPE_AS_WRITTEN (decl) = type_as_written;
- }
-*************** start_struct (code, name)
-*** 5365,5368 ****
---- 5393,5397 ----
- pushtag (name, ref);
- C_TYPE_BEING_DEFINED (ref) = 1;
-+ TYPE_PACKED (ref) = flag_pack_struct;
- return ref;
- }
-*************** start_enum (name)
-*** 5806,5809 ****
---- 5835,5841 ----
- enum_overflow = 0;
-
-+ if (flag_short_enums)
-+ TYPE_PACKED (enumtype) = 1;
-+
- return enumtype;
- }
-*************** finish_enum (enumtype, values, attribute
-*** 5862,5867 ****
- precision = MAX (lowprec, highprec);
-
-! if (flag_short_enums || TYPE_PACKED (enumtype)
-! || precision > TYPE_PRECISION (integer_type_node))
- /* Use the width of the narrowest normal C type which is wide enough. */
- TYPE_PRECISION (enumtype) = TYPE_PRECISION (type_for_size (precision, 1));
---- 5894,5898 ----
- precision = MAX (lowprec, highprec);
-
-! if (TYPE_PACKED (enumtype) || precision > TYPE_PRECISION (integer_type_node))
- /* Use the width of the narrowest normal C type which is wide enough. */
- TYPE_PRECISION (enumtype) = TYPE_PRECISION (type_for_size (precision, 1));
-diff -rcp2N gcc-2.7.2.3/c-gperf.h gcc-2.7.2.3.f.1/c-gperf.h
-*** gcc-2.7.2.3/c-gperf.h Fri Mar 4 19:15:53 1994
---- gcc-2.7.2.3.f.1/c-gperf.h Mon Aug 11 06:58:47 1997
-***************
-*** 1,15 ****
- /* C code produced by gperf version 2.5 (GNU C++ version) */
-! /* Command-line: gperf -p -j1 -i 1 -g -o -t -G -N is_reserved_word -k1,3,$ c-parse.gperf */
- struct resword { char *name; short token; enum rid rid; };
-
-! #define TOTAL_KEYWORDS 79
- #define MIN_WORD_LENGTH 2
- #define MAX_WORD_LENGTH 20
-! #define MIN_HASH_VALUE 10
-! #define MAX_HASH_VALUE 144
-! /* maximum key range = 135, duplicates = 0 */
-
- #ifdef __GNUC__
-! __inline
- #endif
- static unsigned int
---- 1,16 ----
- /* C code produced by gperf version 2.5 (GNU C++ version) */
-! /* Command-line: gperf -p -j1 -i 1 -g -o -t -G -N is_reserved_word -k1,3,$ ../g77-new/c-parse.gperf */
-! /* Command-line: gperf -p -j1 -i 1 -g -o -t -N is_reserved_word -k1,3,$ c-parse.gperf */
- struct resword { char *name; short token; enum rid rid; };
-
-! #define TOTAL_KEYWORDS 81
- #define MIN_WORD_LENGTH 2
- #define MAX_WORD_LENGTH 20
-! #define MIN_HASH_VALUE 11
-! #define MAX_HASH_VALUE 157
-! /* maximum key range = 147, duplicates = 0 */
-
- #ifdef __GNUC__
-! inline
- #endif
- static unsigned int
-*************** hash (str, len)
-*** 20,36 ****
- static unsigned char asso_values[] =
- {
-! 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
-! 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
-! 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
-! 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
-! 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
-! 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
-! 145, 145, 145, 145, 25, 145, 145, 145, 145, 145,
-! 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
-! 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
-! 145, 145, 145, 145, 145, 1, 145, 46, 8, 15,
-! 61, 6, 36, 48, 3, 5, 145, 18, 63, 25,
-! 29, 76, 1, 145, 13, 2, 1, 51, 37, 9,
-! 9, 1, 3, 145, 145, 145, 145, 145,
- };
- register int hval = len;
---- 21,37 ----
- static unsigned char asso_values[] =
- {
-! 158, 158, 158, 158, 158, 158, 158, 158, 158, 158,
-! 158, 158, 158, 158, 158, 158, 158, 158, 158, 158,
-! 158, 158, 158, 158, 158, 158, 158, 158, 158, 158,
-! 158, 158, 158, 158, 158, 158, 158, 158, 158, 158,
-! 158, 158, 158, 158, 158, 158, 158, 158, 158, 158,
-! 158, 158, 158, 158, 158, 158, 158, 158, 158, 158,
-! 158, 158, 158, 158, 2, 158, 158, 158, 158, 158,
-! 158, 158, 158, 158, 158, 158, 158, 158, 158, 158,
-! 158, 158, 158, 158, 158, 158, 158, 158, 158, 158,
-! 158, 158, 158, 158, 158, 1, 158, 18, 1, 58,
-! 56, 6, 44, 64, 13, 45, 158, 4, 26, 68,
-! 2, 74, 1, 158, 2, 13, 1, 33, 48, 5,
-! 5, 3, 12, 158, 158, 158, 158, 158,
- };
- register int hval = len;
-*************** hash (str, len)
-*** 44,47 ****
---- 45,49 ----
- case 1:
- hval += asso_values[str[0]];
-+ break;
- }
- return hval + asso_values[str[len - 1]];
-*************** hash (str, len)
-*** 50,166 ****
- static struct resword wordlist[] =
- {
-! {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",},
-! {"",},
-! {"int", TYPESPEC, RID_INT},
-! {"",}, {"",},
-! {"__typeof__", TYPEOF, NORID},
-! {"__signed__", TYPESPEC, RID_SIGNED},
-! {"__imag__", IMAGPART, NORID},
-! {"switch", SWITCH, NORID},
-! {"__inline__", SCSPEC, RID_INLINE},
-! {"else", ELSE, NORID},
-! {"__iterator__", SCSPEC, RID_ITERATOR},
-! {"__inline", SCSPEC, RID_INLINE},
-! {"__extension__", EXTENSION, NORID},
-! {"struct", STRUCT, NORID},
-! {"__real__", REALPART, NORID},
-! {"__const", TYPE_QUAL, RID_CONST},
-! {"while", WHILE, NORID},
-! {"__const__", TYPE_QUAL, RID_CONST},
-! {"case", CASE, NORID},
-! {"__complex__", TYPESPEC, RID_COMPLEX},
-! {"__iterator", SCSPEC, RID_ITERATOR},
-! {"bycopy", TYPE_QUAL, RID_BYCOPY},
-! {"",}, {"",}, {"",},
-! {"__complex", TYPESPEC, RID_COMPLEX},
-! {"",},
-! {"in", TYPE_QUAL, RID_IN},
-! {"break", BREAK, NORID},
-! {"@defs", DEFS, NORID},
-! {"",}, {"",}, {"",},
-! {"extern", SCSPEC, RID_EXTERN},
-! {"if", IF, NORID},
-! {"typeof", TYPEOF, NORID},
-! {"typedef", SCSPEC, RID_TYPEDEF},
-! {"__typeof", TYPEOF, NORID},
-! {"sizeof", SIZEOF, NORID},
-! {"",},
-! {"return", RETURN, NORID},
-! {"const", TYPE_QUAL, RID_CONST},
-! {"__volatile__", TYPE_QUAL, RID_VOLATILE},
-! {"@private", PRIVATE, NORID},
-! {"@selector", SELECTOR, NORID},
-! {"__volatile", TYPE_QUAL, RID_VOLATILE},
-! {"__asm__", ASM_KEYWORD, NORID},
-! {"",}, {"",},
-! {"continue", CONTINUE, NORID},
-! {"__alignof__", ALIGNOF, NORID},
-! {"__imag", IMAGPART, NORID},
-! {"__attribute__", ATTRIBUTE, NORID},
-! {"",}, {"",},
-! {"__attribute", ATTRIBUTE, NORID},
-! {"for", FOR, NORID},
-! {"",},
-! {"@encode", ENCODE, NORID},
-! {"id", OBJECTNAME, RID_ID},
-! {"static", SCSPEC, RID_STATIC},
-! {"@interface", INTERFACE, NORID},
-! {"",},
-! {"__signed", TYPESPEC, RID_SIGNED},
-! {"",},
-! {"__label__", LABEL, NORID},
-! {"",}, {"",},
-! {"__asm", ASM_KEYWORD, NORID},
-! {"char", TYPESPEC, RID_CHAR},
-! {"",},
-! {"inline", SCSPEC, RID_INLINE},
-! {"out", TYPE_QUAL, RID_OUT},
-! {"register", SCSPEC, RID_REGISTER},
-! {"__real", REALPART, NORID},
-! {"short", TYPESPEC, RID_SHORT},
-! {"",},
-! {"enum", ENUM, NORID},
-! {"inout", TYPE_QUAL, RID_INOUT},
-! {"",},
-! {"oneway", TYPE_QUAL, RID_ONEWAY},
-! {"union", UNION, NORID},
-! {"",},
-! {"__alignof", ALIGNOF, NORID},
-! {"",},
-! {"@implementation", IMPLEMENTATION, NORID},
-! {"",},
-! {"@class", CLASS, NORID},
-! {"",},
-! {"@public", PUBLIC, NORID},
-! {"asm", ASM_KEYWORD, NORID},
-! {"",}, {"",}, {"",}, {"",}, {"",},
-! {"default", DEFAULT, NORID},
-! {"",},
-! {"void", TYPESPEC, RID_VOID},
-! {"",},
-! {"@protected", PROTECTED, NORID},
-! {"@protocol", PROTOCOL, NORID},
-! {"",}, {"",}, {"",},
-! {"volatile", TYPE_QUAL, RID_VOLATILE},
-! {"",}, {"",},
-! {"signed", TYPESPEC, RID_SIGNED},
-! {"float", TYPESPEC, RID_FLOAT},
-! {"@end", END, NORID},
-! {"",}, {"",},
-! {"unsigned", TYPESPEC, RID_UNSIGNED},
-! {"@compatibility_alias", ALIAS, NORID},
-! {"double", TYPESPEC, RID_DOUBLE},
-! {"",}, {"",},
-! {"auto", SCSPEC, RID_AUTO},
-! {"",},
-! {"goto", GOTO, NORID},
-! {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",},
-! {"do", DO, NORID},
-! {"",}, {"",}, {"",}, {"",},
-! {"long", TYPESPEC, RID_LONG},
- };
-
- #ifdef __GNUC__
-! __inline
- #endif
- struct resword *
---- 52,167 ----
- static struct resword wordlist[] =
- {
-! {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",},
-! {"",}, {"",},
-! {"return", RETURN, NORID},
-! {"__real__", REALPART, NORID},
-! {"__typeof__", TYPEOF, NORID},
-! {"__restrict", TYPE_QUAL, RID_RESTRICT},
-! {"extern", SCSPEC, RID_EXTERN},
-! {"break", BREAK, NORID},
-! {"@encode", ENCODE, NORID},
-! {"@private", PRIVATE, NORID},
-! {"@selector", SELECTOR, NORID},
-! {"@interface", INTERFACE, NORID},
-! {"__extension__", EXTENSION, NORID},
-! {"struct", STRUCT, NORID},
-! {"",},
-! {"restrict", TYPE_QUAL, RID_RESTRICT},
-! {"__signed__", TYPESPEC, RID_SIGNED},
-! {"@defs", DEFS, NORID},
-! {"__asm__", ASM_KEYWORD, NORID},
-! {"",},
-! {"else", ELSE, NORID},
-! {"",},
-! {"__alignof__", ALIGNOF, NORID},
-! {"",},
-! {"__attribute__", ATTRIBUTE, NORID},
-! {"",},
-! {"__real", REALPART, NORID},
-! {"__attribute", ATTRIBUTE, NORID},
-! {"__label__", LABEL, NORID},
-! {"",},
-! {"@protocol", PROTOCOL, NORID},
-! {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",},
-! {"@class", CLASS, NORID},
-! {"",},
-! {"in", TYPE_QUAL, RID_IN},
-! {"int", TYPESPEC, RID_INT},
-! {"for", FOR, NORID},
-! {"typeof", TYPEOF, NORID},
-! {"typedef", SCSPEC, RID_TYPEDEF},
-! {"__typeof", TYPEOF, NORID},
-! {"__imag__", IMAGPART, NORID},
-! {"",},
-! {"__inline__", SCSPEC, RID_INLINE},
-! {"__iterator", SCSPEC, RID_ITERATOR},
-! {"__iterator__", SCSPEC, RID_ITERATOR},
-! {"__inline", SCSPEC, RID_INLINE},
-! {"while", WHILE, NORID},
-! {"__volatile__", TYPE_QUAL, RID_VOLATILE},
-! {"",},
-! {"@end", END, NORID},
-! {"__volatile", TYPE_QUAL, RID_VOLATILE},
-! {"const", TYPE_QUAL, RID_CONST},
-! {"__const", TYPE_QUAL, RID_CONST},
-! {"bycopy", TYPE_QUAL, RID_BYCOPY},
-! {"__const__", TYPE_QUAL, RID_CONST},
-! {"@protected", PROTECTED, NORID},
-! {"__complex__", TYPESPEC, RID_COMPLEX},
-! {"__alignof", ALIGNOF, NORID},
-! {"__complex", TYPESPEC, RID_COMPLEX},
-! {"continue", CONTINUE, NORID},
-! {"sizeof", SIZEOF, NORID},
-! {"register", SCSPEC, RID_REGISTER},
-! {"switch", SWITCH, NORID},
-! {"__signed", TYPESPEC, RID_SIGNED},
-! {"out", TYPE_QUAL, RID_OUT},
-! {"",},
-! {"case", CASE, NORID},
-! {"char", TYPESPEC, RID_CHAR},
-! {"inline", SCSPEC, RID_INLINE},
-! {"",},
-! {"union", UNION, NORID},
-! {"",},
-! {"@implementation", IMPLEMENTATION, NORID},
-! {"volatile", TYPE_QUAL, RID_VOLATILE},
-! {"oneway", TYPE_QUAL, RID_ONEWAY},
-! {"",},
-! {"if", IF, NORID},
-! {"__asm", ASM_KEYWORD, NORID},
-! {"short", TYPESPEC, RID_SHORT},
-! {"",},
-! {"static", SCSPEC, RID_STATIC},
-! {"long", TYPESPEC, RID_LONG},
-! {"auto", SCSPEC, RID_AUTO},
-! {"",}, {"",},
-! {"@public", PUBLIC, NORID},
-! {"double", TYPESPEC, RID_DOUBLE},
-! {"",},
-! {"id", OBJECTNAME, RID_ID},
-! {"",}, {"",}, {"",}, {"",},
-! {"default", DEFAULT, NORID},
-! {"@compatibility_alias", ALIAS, NORID},
-! {"unsigned", TYPESPEC, RID_UNSIGNED},
-! {"enum", ENUM, NORID},
-! {"",}, {"",}, {"",}, {"",},
-! {"__imag", IMAGPART, NORID},
-! {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",},
-! {"float", TYPESPEC, RID_FLOAT},
-! {"inout", TYPE_QUAL, RID_INOUT},
-! {"",}, {"",}, {"",}, {"",}, {"",}, {"",},
-! {"do", DO, NORID},
-! {"",}, {"",}, {"",}, {"",}, {"",}, {"",},
-! {"signed", TYPESPEC, RID_SIGNED},
-! {"",}, {"",}, {"",},
-! {"goto", GOTO, NORID},
-! {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",},
-! {"void", TYPESPEC, RID_VOID},
-! {"",}, {"",}, {"",},
-! {"asm", ASM_KEYWORD, NORID},
- };
-
- #ifdef __GNUC__
-! inline
- #endif
- struct resword *
-diff -rcp2N gcc-2.7.2.3/c-lex.c gcc-2.7.2.3.f.1/c-lex.c
-*** gcc-2.7.2.3/c-lex.c Thu Jun 15 11:11:39 1995
---- gcc-2.7.2.3.f.1/c-lex.c Sun Aug 10 22:46:49 1997
-*************** init_lex ()
-*** 173,176 ****
---- 173,177 ----
- ridpointers[(int) RID_CONST] = get_identifier ("const");
- ridpointers[(int) RID_VOLATILE] = get_identifier ("volatile");
-+ ridpointers[(int) RID_RESTRICT] = get_identifier ("restrict");
- ridpointers[(int) RID_AUTO] = get_identifier ("auto");
- ridpointers[(int) RID_STATIC] = get_identifier ("static");
-*************** init_lex ()
-*** 206,209 ****
---- 207,211 ----
- UNSET_RESERVED_WORD ("iterator");
- UNSET_RESERVED_WORD ("complex");
-+ UNSET_RESERVED_WORD ("restrict");
- }
- if (flag_no_asm)
-*************** init_lex ()
-*** 214,217 ****
---- 216,220 ----
- UNSET_RESERVED_WORD ("iterator");
- UNSET_RESERVED_WORD ("complex");
-+ UNSET_RESERVED_WORD ("restrict");
- }
- }
-*************** yylex ()
-*** 1433,1437 ****
- /* Create a node with determined type and value. */
- if (imag)
-! yylval.ttype = build_complex (convert (type, integer_zero_node),
- build_real (type, value));
- else
---- 1436,1441 ----
- /* Create a node with determined type and value. */
- if (imag)
-! yylval.ttype = build_complex (NULL_TREE,
-! convert (type, integer_zero_node),
- build_real (type, value));
- else
-*************** yylex ()
-*** 1624,1629 ****
- <= TYPE_PRECISION (integer_type_node))
- yylval.ttype
-! = build_complex (integer_zero_node,
-! convert (integer_type_node, yylval.ttype));
- else
- error ("complex integer constant is too wide for `complex int'");
---- 1628,1634 ----
- <= TYPE_PRECISION (integer_type_node))
- yylval.ttype
-! = build_complex (NULL_TREE, integer_zero_node,
-! convert (integer_type_node,
-! yylval.ttype));
- else
- error ("complex integer constant is too wide for `complex int'");
-diff -rcp2N gcc-2.7.2.3/c-lex.h gcc-2.7.2.3.f.1/c-lex.h
-*** gcc-2.7.2.3/c-lex.h Thu Jun 15 11:12:22 1995
---- gcc-2.7.2.3.f.1/c-lex.h Sun Aug 10 22:10:55 1997
-*************** enum rid
-*** 43,47 ****
- RID_VOLATILE,
- RID_INLINE,
-! RID_NOALIAS,
- RID_ITERATOR,
- RID_COMPLEX,
---- 43,47 ----
- RID_VOLATILE,
- RID_INLINE,
-! RID_RESTRICT,
- RID_ITERATOR,
- RID_COMPLEX,
-diff -rcp2N gcc-2.7.2.3/c-parse.gperf gcc-2.7.2.3.f.1/c-parse.gperf
-*** gcc-2.7.2.3/c-parse.gperf Fri Apr 9 23:00:44 1993
---- gcc-2.7.2.3.f.1/c-parse.gperf Sun Aug 10 22:10:55 1997
-*************** __label__, LABEL, NORID
-*** 36,39 ****
---- 36,40 ----
- __real, REALPART, NORID
- __real__, REALPART, NORID
-+ __restrict, TYPE_QUAL, RID_RESTRICT
- __signed, TYPESPEC, RID_SIGNED
- __signed__, TYPESPEC, RID_SIGNED
-*************** oneway, TYPE_QUAL, RID_ONEWAY
-*** 69,72 ****
---- 70,74 ----
- out, TYPE_QUAL, RID_OUT
- register, SCSPEC, RID_REGISTER
-+ restrict, TYPE_QUAL, RID_RESTRICT
- return, RETURN, NORID
- short, TYPESPEC, RID_SHORT
-diff -rcp2N gcc-2.7.2.3/c-typeck.c gcc-2.7.2.3.f.1/c-typeck.c
-*** gcc-2.7.2.3/c-typeck.c Sat Jun 29 16:27:15 1996
---- gcc-2.7.2.3.f.1/c-typeck.c Sun Aug 10 22:46:29 1997
-*************** pointer_int_sum (resultcode, ptrop, into
-*** 2681,2686 ****
- so the multiply won't overflow spuriously. */
-
-! if (TYPE_PRECISION (TREE_TYPE (intop)) != POINTER_SIZE)
-! intop = convert (type_for_size (POINTER_SIZE, 0), intop);
-
- /* Replace the integer argument with a suitable product by the object size.
---- 2681,2688 ----
- so the multiply won't overflow spuriously. */
-
-! if (TYPE_PRECISION (TREE_TYPE (intop)) != TYPE_PRECISION (sizetype)
-! || TREE_UNSIGNED (TREE_TYPE (intop)) != TREE_UNSIGNED (sizetype))
-! intop = convert (type_for_size (TYPE_PRECISION (sizetype),
-! TREE_UNSIGNED (sizetype)), intop);
-
- /* Replace the integer argument with a suitable product by the object size.
-diff -rcp2N gcc-2.7.2.3/calls.c gcc-2.7.2.3.f.1/calls.c
-*** gcc-2.7.2.3/calls.c Fri Oct 27 01:53:43 1995
---- gcc-2.7.2.3.f.1/calls.c Fri Aug 29 07:52:07 1997
-*************** expand_call (exp, target, ignore)
-*** 564,567 ****
---- 564,569 ----
- /* Nonzero if it is plausible that this is a call to alloca. */
- int may_be_alloca;
-+ /* Nonzero if this is a call to malloc or a related function. */
-+ int is_malloc;
- /* Nonzero if this is a call to setjmp or a related function. */
- int returns_twice;
-*************** expand_call (exp, target, ignore)
-*** 741,745 ****
- if (stack_arg_under_construction || i >= 0)
- {
-! rtx insn = NEXT_INSN (before_call), seq;
-
- /* Look for a call in the inline function code.
---- 743,749 ----
- if (stack_arg_under_construction || i >= 0)
- {
-! rtx first_insn
-! = before_call ? NEXT_INSN (before_call) : get_insns ();
-! rtx insn, seq;
-
- /* Look for a call in the inline function code.
-*************** expand_call (exp, target, ignore)
-*** 749,753 ****
-
- if (OUTGOING_ARGS_SIZE (DECL_SAVED_INSNS (fndecl)) == 0)
-! for (; insn; insn = NEXT_INSN (insn))
- if (GET_CODE (insn) == CALL_INSN)
- break;
---- 753,757 ----
-
- if (OUTGOING_ARGS_SIZE (DECL_SAVED_INSNS (fndecl)) == 0)
-! for (insn = first_insn; insn; insn = NEXT_INSN (insn))
- if (GET_CODE (insn) == CALL_INSN)
- break;
-*************** expand_call (exp, target, ignore)
-*** 781,785 ****
- seq = get_insns ();
- end_sequence ();
-! emit_insns_before (seq, NEXT_INSN (before_call));
- emit_stack_restore (SAVE_BLOCK, old_stack_level, NULL_RTX);
- }
---- 785,789 ----
- seq = get_insns ();
- end_sequence ();
-! emit_insns_before (seq, first_insn);
- emit_stack_restore (SAVE_BLOCK, old_stack_level, NULL_RTX);
- }
-*************** expand_call (exp, target, ignore)
-*** 852,855 ****
---- 856,860 ----
- returns_twice = 0;
- is_longjmp = 0;
-+ is_malloc = 0;
-
- if (name != 0 && IDENTIFIER_LENGTH (DECL_NAME (fndecl)) <= 15)
-*************** expand_call (exp, target, ignore)
-*** 891,894 ****
---- 896,903 ----
- && ! strcmp (tname, "longjmp"))
- is_longjmp = 1;
-+ /* Only recognize malloc when alias analysis is enabled. */
-+ else if (tname[0] == 'm' && flag_alias_check
-+ && ! strcmp(tname, "malloc"))
-+ is_malloc = 1;
- }
-
-*************** expand_call (exp, target, ignore)
-*** 1060,1064 ****
-
- if (TYPE_SIZE (type) == 0
-! || TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST)
- {
- /* This is a variable-sized object. Make space on the stack
---- 1069,1077 ----
-
- if (TYPE_SIZE (type) == 0
-! || TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST
-! || (flag_stack_check && ! STACK_CHECK_BUILTIN
-! && (TREE_INT_CST_HIGH (TYPE_SIZE (type)) != 0
-! || (TREE_INT_CST_LOW (TYPE_SIZE (type))
-! > STACK_CHECK_MAX_VAR_SIZE * BITS_PER_UNIT))))
- {
- /* This is a variable-sized object. Make space on the stack
-*************** expand_call (exp, target, ignore)
-*** 1087,1090 ****
---- 1100,1104 ----
-
- store_expr (args[i].tree_value, copy, 0);
-+ is_const = 0;
-
- args[i].tree_value = build1 (ADDR_EXPR,
-*************** expand_call (exp, target, ignore)
-*** 1363,1367 ****
- /* Now we are about to start emitting insns that can be deleted
- if a libcall is deleted. */
-! if (is_const)
- start_sequence ();
-
---- 1377,1381 ----
- /* Now we are about to start emitting insns that can be deleted
- if a libcall is deleted. */
-! if (is_const || is_malloc)
- start_sequence ();
-
-*************** expand_call (exp, target, ignore)
-*** 1951,1954 ****
---- 1965,1982 ----
- end_sequence ();
- emit_insns (insns);
-+ }
-+ else if (is_malloc)
-+ {
-+ rtx temp = gen_reg_rtx (GET_MODE (valreg));
-+ rtx last, insns;
-+
-+ emit_move_insn (temp, valreg);
-+ last = get_last_insn ();
-+ REG_NOTES (last) =
-+ gen_rtx (EXPR_LIST, REG_NOALIAS, temp, REG_NOTES (last));
-+ insns = get_insns ();
-+ end_sequence ();
-+ emit_insns (insns);
-+ valreg = temp;
- }
-
-diff -rcp2N gcc-2.7.2.3/cccp.c gcc-2.7.2.3.f.1/cccp.c
-*** gcc-2.7.2.3/cccp.c Thu Oct 26 22:07:26 1995
---- gcc-2.7.2.3.f.1/cccp.c Sun Aug 10 22:45:53 1997
-*************** initialize_builtins (inp, outp)
-*** 9626,9629 ****
---- 9626,9630 ----
- so that it is present only when truly compiling with GNU C. */
- /* install ((U_CHAR *) "__GNUC__", -1, T_CONST, "2", -1); */
-+ install ((U_CHAR *) "__HAVE_BUILTIN_SETJMP__", -1, T_CONST, "1", -1);
-
- if (debug_output)
-diff -rcp2N gcc-2.7.2.3/combine.c gcc-2.7.2.3.f.1/combine.c
-*** gcc-2.7.2.3/combine.c Sun Nov 26 19:32:07 1995
---- gcc-2.7.2.3.f.1/combine.c Fri Aug 29 07:52:16 1997
-*************** try_combine (i3, i2, i1)
-*** 2011,2016 ****
- XVECEXP (newpat, 0, 1)))
- {
-! newi2pat = XVECEXP (newpat, 0, 1);
-! newpat = XVECEXP (newpat, 0, 0);
-
- i2_code_number
---- 2011,2029 ----
- XVECEXP (newpat, 0, 1)))
- {
-! /* Normally, it doesn't matter which of the two is done first,
-! but it does if one references cc0. In that case, it has to
-! be first. */
-! #ifdef HAVE_cc0
-! if (reg_referenced_p (cc0_rtx, XVECEXP (newpat, 0, 0)))
-! {
-! newi2pat = XVECEXP (newpat, 0, 0);
-! newpat = XVECEXP (newpat, 0, 1);
-! }
-! else
-! #endif
-! {
-! newi2pat = XVECEXP (newpat, 0, 1);
-! newpat = XVECEXP (newpat, 0, 0);
-! }
-
- i2_code_number
-*************** simplify_rtx (x, op0_mode, last, in_dest
-*** 3278,3282 ****
- if (CONSTANT_P (SUBREG_REG (x)) && op0_mode != VOIDmode
- && GET_MODE_SIZE (mode) == UNITS_PER_WORD
-! && GET_MODE_SIZE (op0_mode) < UNITS_PER_WORD
- && GET_MODE_CLASS (mode) == MODE_INT)
- {
---- 3291,3295 ----
- if (CONSTANT_P (SUBREG_REG (x)) && op0_mode != VOIDmode
- && GET_MODE_SIZE (mode) == UNITS_PER_WORD
-! && GET_MODE_SIZE (op0_mode) > UNITS_PER_WORD
- && GET_MODE_CLASS (mode) == MODE_INT)
- {
-*************** simplify_rtx (x, op0_mode, last, in_dest
-*** 3290,3295 ****
- take the low bits. On a little-endian machine, that's
- always valid. On a big-endian machine, it's valid
-! only if the constant's mode fits in one word. */
-! if (CONSTANT_P (SUBREG_REG (x)) && subreg_lowpart_p (x)
- && GET_MODE_SIZE (mode) < GET_MODE_SIZE (op0_mode)
- && (! WORDS_BIG_ENDIAN
---- 3303,3316 ----
- take the low bits. On a little-endian machine, that's
- always valid. On a big-endian machine, it's valid
-! only if the constant's mode fits in one word. Note that we
-! cannot use subreg_lowpart_p since we SUBREG_REG may be VOIDmode. */
-! if (CONSTANT_P (SUBREG_REG (x))
-! && ((GET_MODE_SIZE (op0_mode) <= UNITS_PER_WORD
-! || ! WORDS_BIG_ENDIAN)
-! ? SUBREG_WORD (x) == 0
-! : (SUBREG_WORD (x)
-! == ((GET_MODE_SIZE (op0_mode)
-! - MAX (GET_MODE_SIZE (mode), UNITS_PER_WORD))
-! / UNITS_PER_WORD)))
- && GET_MODE_SIZE (mode) < GET_MODE_SIZE (op0_mode)
- && (! WORDS_BIG_ENDIAN
-*************** num_sign_bit_copies (x, mode)
-*** 7326,7329 ****
---- 7347,7356 ----
-
- case NEG:
-+ while (GET_MODE (XEXP (x, 0)) == GET_MODE (x)
-+ && GET_CODE (XEXP (x, 0)) == NEG
-+ && GET_MODE (XEXP (XEXP (x, 0), 0)) == GET_MODE (x)
-+ && GET_CODE (XEXP (XEXP (x, 0), 0)) == NEG)
-+ x = XEXP (XEXP (x, 0), 0); /* Speed up 961126-1.c */
-+
- /* In general, this subtracts one sign bit copy. But if the value
- is known to be positive, the number of sign bit copies is the
-*************** move_deaths (x, from_cuid, to_insn, pnot
-*** 10421,10425 ****
- if (note != 0 && regno < FIRST_PSEUDO_REGISTER
- && (GET_MODE_SIZE (GET_MODE (XEXP (note, 0)))
-! != GET_MODE_SIZE (GET_MODE (x))))
- {
- int deadregno = REGNO (XEXP (note, 0));
---- 10448,10452 ----
- if (note != 0 && regno < FIRST_PSEUDO_REGISTER
- && (GET_MODE_SIZE (GET_MODE (XEXP (note, 0)))
-! > GET_MODE_SIZE (GET_MODE (x))))
- {
- int deadregno = REGNO (XEXP (note, 0));
-*************** move_deaths (x, from_cuid, to_insn, pnot
-*** 10437,10452 ****
- REG_NOTES (where_dead));
- }
-! /* If we didn't find any note, and we have a multi-reg hard
- register, then to be safe we must check for REG_DEAD notes
- for each register other than the first. They could have
- their own REG_DEAD notes lying around. */
-! else if (note == 0 && regno < FIRST_PSEUDO_REGISTER
- && HARD_REGNO_NREGS (regno, GET_MODE (x)) > 1)
- {
- int ourend = regno + HARD_REGNO_NREGS (regno, GET_MODE (x));
-! int i;
- rtx oldnotes = 0;
-
-! for (i = regno + 1; i < ourend; i++)
- move_deaths (gen_rtx (REG, reg_raw_mode[i], i),
- from_cuid, to_insn, &oldnotes);
---- 10464,10489 ----
- REG_NOTES (where_dead));
- }
-! /* If we didn't find any note, or if we found a REG_DEAD note that
-! covers only part of the given reg, and we have a multi-reg hard
- register, then to be safe we must check for REG_DEAD notes
- for each register other than the first. They could have
- their own REG_DEAD notes lying around. */
-! else if ((note == 0
-! || (note != 0
-! && (GET_MODE_SIZE (GET_MODE (XEXP (note, 0)))
-! < GET_MODE_SIZE (GET_MODE (x)))))
-! && regno < FIRST_PSEUDO_REGISTER
- && HARD_REGNO_NREGS (regno, GET_MODE (x)) > 1)
- {
- int ourend = regno + HARD_REGNO_NREGS (regno, GET_MODE (x));
-! int i, offset;
- rtx oldnotes = 0;
-
-! if (note)
-! offset = HARD_REGNO_NREGS (regno, GET_MODE (XEXP (note, 0)));
-! else
-! offset = 1;
-!
-! for (i = regno + offset; i < ourend; i++)
- move_deaths (gen_rtx (REG, reg_raw_mode[i], i),
- from_cuid, to_insn, &oldnotes);
-*************** distribute_notes (notes, from_insn, i3,
-*** 10648,10651 ****
---- 10685,10689 ----
- case REG_EQUIV:
- case REG_NONNEG:
-+ case REG_NOALIAS:
- /* These notes say something about results of an insn. We can
- only support them if they used to be on I3 in which case they
-diff -rcp2N gcc-2.7.2.3/config/alpha/alpha.c gcc-2.7.2.3.f.1/config/alpha/alpha.c
-*** gcc-2.7.2.3/config/alpha/alpha.c Sat Jun 29 16:26:53 1996
---- gcc-2.7.2.3.f.1/config/alpha/alpha.c Fri Aug 29 07:51:37 1997
-*************** extern int rtx_equal_function_value_matt
-*** 64,67 ****
---- 64,69 ----
- /* Declarations of static functions. */
- static void alpha_set_memflags_1 PROTO((rtx, int, int, int));
-+ static rtx alpha_emit_set_const_1 PROTO((rtx, enum machine_mode,
-+ HOST_WIDE_INT, int));
- static void add_long_const PROTO((FILE *, HOST_WIDE_INT, int, int, int));
-
-*************** alpha_emit_set_const (target, mode, c, n
-*** 670,673 ****
---- 672,695 ----
- int n;
- {
-+ rtx pat;
-+ int i;
-+
-+ /* Try 1 insn, then 2, then up to N. */
-+ for (i = 1; i <= n; i++)
-+ if ((pat = alpha_emit_set_const_1 (target, mode, c, i)) != 0)
-+ return pat;
-+
-+ return 0;
-+ }
-+
-+ /* Internal routine for the above to check for N or below insns. */
-+
-+ static rtx
-+ alpha_emit_set_const_1 (target, mode, c, n)
-+ rtx target;
-+ enum machine_mode mode;
-+ HOST_WIDE_INT c;
-+ int n;
-+ {
- HOST_WIDE_INT new = c;
- int i, bits;
-*************** alpha_emit_set_const (target, mode, c, n
-*** 714,723 ****
- if (c == low || (low == 0 && extra == 0))
- return copy_to_suggested_reg (GEN_INT (c), target, mode);
-! else if (n >= 2 + (extra != 0)
-! /* We can't do this when SImode if HIGH required adjustment.
-! This is because the code relies on an implicit overflow
-! which is invisible to the RTL. We can thus get incorrect
-! code if the two ldah instructions are combined. */
-! && ! (mode == SImode && extra != 0))
- {
- temp = copy_to_suggested_reg (GEN_INT (low), subtarget, mode);
---- 736,740 ----
- if (c == low || (low == 0 && extra == 0))
- return copy_to_suggested_reg (GEN_INT (c), target, mode);
-! else if (n >= 2 + (extra != 0))
- {
- temp = copy_to_suggested_reg (GEN_INT (low), subtarget, mode);
-*************** direct_return ()
-*** 1239,1243 ****
- cross-compiler. Otherwise, use the versions in /usr/include/stamp.h. */
-
-! #if !defined(CROSS_COMPILE) && !defined(_WIN32)
- #include <stamp.h>
- #endif
---- 1256,1260 ----
- cross-compiler. Otherwise, use the versions in /usr/include/stamp.h. */
-
-! #if !defined(CROSS_COMPILE) && !defined(_WIN32) && !defined(__linux__)
- #include <stamp.h>
- #endif
-*************** output_prolog (file, size)
-*** 1370,1373 ****
---- 1387,1395 ----
-
- alpha_function_needs_gp = 0;
-+ #ifdef __linux__
-+ if(profile_flag) {
-+ alpha_function_needs_gp = 1;
-+ }
-+ #endif
- for (insn = get_insns (); insn; insn = NEXT_INSN (insn))
- if ((GET_CODE (insn) == CALL_INSN)
-diff -rcp2N gcc-2.7.2.3/config/alpha/alpha.h gcc-2.7.2.3.f.1/config/alpha/alpha.h
-*** gcc-2.7.2.3/config/alpha/alpha.h Sat Jun 29 16:27:31 1996
---- gcc-2.7.2.3.f.1/config/alpha/alpha.h Fri Aug 29 07:52:06 1997
-*************** extern int target_flags;
-*** 112,116 ****
---- 112,118 ----
- {"", TARGET_DEFAULT | TARGET_CPU_DEFAULT} }
-
-+ #ifndef TARGET_DEFAULT
- #define TARGET_DEFAULT 3
-+ #endif
-
- #ifndef TARGET_CPU_DEFAULT
-*************** extern int target_flags;
-*** 253,256 ****
---- 255,261 ----
- #define BIGGEST_ALIGNMENT 64
-
-+ /* For atomic access to objects, must have at least 32-bit alignment. */
-+ #define MINIMUM_ATOMIC_ALIGNMENT 32
-+
- /* Make strings word-aligned so strcpy from constants will be faster. */
- #define CONSTANT_ALIGNMENT(EXP, ALIGN) \
-*************** enum reg_class { NO_REGS, GENERAL_REGS,
-*** 664,667 ****
---- 669,675 ----
- On Alpha, don't define this because there are no push insns. */
- /* #define PUSH_ROUNDING(BYTES) */
-+
-+ /* Define this to be nonzero if stack checking is built into the ABI. */
-+ #define STACK_CHECK_BUILTIN 1
-
- /* Define this if the maximum size of all the outgoing args is to be
-diff -rcp2N gcc-2.7.2.3/config/alpha/alpha.md gcc-2.7.2.3.f.1/config/alpha/alpha.md
-*** gcc-2.7.2.3/config/alpha/alpha.md Fri Oct 27 10:49:59 1995
---- gcc-2.7.2.3.f.1/config/alpha/alpha.md Fri Jul 11 00:08:48 1997
-***************
-*** 1746,1752 ****
- (if_then_else:DF
- (match_operator 3 "signed_comparison_operator"
-! [(match_operand:DF 1 "reg_or_fp0_operand" "fG,fG")
- (match_operand:DF 2 "fp0_operand" "G,G")])
-! (float_extend:DF (match_operand:SF 4 "reg_or_fp0_operand" "fG,0"))
- (match_operand:DF 5 "reg_or_fp0_operand" "0,fG")))]
- "TARGET_FP"
---- 1746,1752 ----
- (if_then_else:DF
- (match_operator 3 "signed_comparison_operator"
-! [(match_operand:DF 4 "reg_or_fp0_operand" "fG,fG")
- (match_operand:DF 2 "fp0_operand" "G,G")])
-! (float_extend:DF (match_operand:SF 1 "reg_or_fp0_operand" "fG,0"))
- (match_operand:DF 5 "reg_or_fp0_operand" "0,fG")))]
- "TARGET_FP"
-diff -rcp2N gcc-2.7.2.3/config/alpha/elf.h gcc-2.7.2.3.f.1/config/alpha/elf.h
-*** gcc-2.7.2.3/config/alpha/elf.h Thu Jan 1 00:00:00 1970
---- gcc-2.7.2.3.f.1/config/alpha/elf.h Fri Jul 11 00:08:49 1997
-***************
-*** 0 ****
---- 1,522 ----
-+ /* Definitions of target machine for GNU compiler, for DEC Alpha w/ELF.
-+ Copyright (C) 1996 Free Software Foundation, Inc.
-+ Contributed by Richard Henderson (rth@tamu.edu).
-+
-+ This file is part of GNU CC.
-+
-+ GNU CC 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.
-+
-+ GNU CC 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 GNU CC; see the file COPYING. If not, write to
-+ the Free Software Foundation, 59 Temple Place - Suite 330,
-+ Boston, MA 02111-1307, USA. */
-+
-+ /* This is used on Alpha platforms that use the ELF format.
-+ Currently only Linux uses this. */
-+
-+ #include "alpha/linux.h"
-+
-+ #undef TARGET_VERSION
-+ #define TARGET_VERSION fprintf (stderr, " (Alpha Linux/ELF)");
-+
-+ #undef OBJECT_FORMAT_COFF
-+ #undef EXTENDED_COFF
-+ #define OBJECT_FORMAT_ELF
-+
-+ #define SDB_DEBUGGING_INFO
-+
-+ #undef ASM_FINAL_SPEC
-+
-+ #undef CPP_PREDEFINES
-+ #define CPP_PREDEFINES "\
-+ -D__alpha -D__alpha__ -D__linux__ -D__linux -D_LONGLONG -Dlinux -Dunix \
-+ -Asystem(linux) -Acpu(alpha) -Amachine(alpha) -D__ELF__"
-+
-+ #undef LINK_SPEC
-+ #define LINK_SPEC "-m elf64alpha -G 8 %{O*:-O3} %{!O*:-O1} \
-+ %{shared:-shared} \
-+ %{!shared: \
-+ %{!static: \
-+ %{rdynamic:-export-dynamic} \
-+ %{!dynamic-linker:-dynamic-linker /lib/ld.so.1}} \
-+ %{static:-static}}"
-+
-+ /* Output at beginning of assembler file. */
-+
-+ #undef ASM_FILE_START
-+ #define ASM_FILE_START(FILE) \
-+ { \
-+ alpha_write_verstamp (FILE); \
-+ output_file_directive (FILE, main_input_filename); \
-+ fprintf (FILE, "\t.version\t\"01.01\"\n"); \
-+ fprintf (FILE, "\t.set noat\n"); \
-+ }
-+
-+ #define ASM_OUTPUT_SOURCE_LINE(STREAM, LINE) \
-+ alpha_output_lineno (STREAM, LINE)
-+ extern void alpha_output_lineno ();
-+
-+ extern void output_file_directive ();
-+
-+ /* Attach a special .ident directive to the end of the file to identify
-+ the version of GCC which compiled this code. The format of the
-+ .ident string is patterned after the ones produced by native svr4
-+ C compilers. */
-+
-+ #define IDENT_ASM_OP ".ident"
-+
-+ #ifdef IDENTIFY_WITH_IDENT
-+ #define ASM_IDENTIFY_GCC(FILE) /* nothing */
-+ #define ASM_IDENTIFY_LANGUAGE(FILE) \
-+ fprintf(FILE, "\t%s \"GCC (%s) %s\"\n", IDENT_ASM_OP, \
-+ lang_identify(), version_string)
-+ #else
-+ #define ASM_FILE_END(FILE) \
-+ do { \
-+ fprintf ((FILE), "\t%s\t\"GCC: (GNU) %s\"\n", \
-+ IDENT_ASM_OP, version_string); \
-+ } while (0)
-+ #endif
-+
-+ /* Allow #sccs in preprocessor. */
-+
-+ #define SCCS_DIRECTIVE
-+
-+ /* Output #ident as a .ident. */
-+
-+ #define ASM_OUTPUT_IDENT(FILE, NAME) \
-+ fprintf (FILE, "\t%s\t\"%s\"\n", IDENT_ASM_OP, NAME);
-+
-+ /* This is how to allocate empty space in some section. The .zero
-+ pseudo-op is used for this on most svr4 assemblers. */
-+
-+ #define SKIP_ASM_OP ".zero"
-+
-+ #undef ASM_OUTPUT_SKIP
-+ #define ASM_OUTPUT_SKIP(FILE,SIZE) \
-+ fprintf (FILE, "\t%s\t%u\n", SKIP_ASM_OP, (SIZE))
-+
-+ /* Output the label which precedes a jumptable. Note that for all svr4
-+ systems where we actually generate jumptables (which is to say every
-+ svr4 target except i386, where we use casesi instead) we put the jump-
-+ tables into the .rodata section and since other stuff could have been
-+ put into the .rodata section prior to any given jumptable, we have to
-+ make sure that the location counter for the .rodata section gets pro-
-+ perly re-aligned prior to the actual beginning of the jump table. */
-+
-+ #define ALIGN_ASM_OP ".align"
-+
-+ #ifndef ASM_OUTPUT_BEFORE_CASE_LABEL
-+ #define ASM_OUTPUT_BEFORE_CASE_LABEL(FILE,PREFIX,NUM,TABLE) \
-+ ASM_OUTPUT_ALIGN ((FILE), 2);
-+ #endif
-+
-+ #undef ASM_OUTPUT_CASE_LABEL
-+ #define ASM_OUTPUT_CASE_LABEL(FILE,PREFIX,NUM,JUMPTABLE) \
-+ do { \
-+ ASM_OUTPUT_BEFORE_CASE_LABEL (FILE, PREFIX, NUM, JUMPTABLE) \
-+ ASM_OUTPUT_INTERNAL_LABEL (FILE, PREFIX, NUM); \
-+ } while (0)
-+
-+ /* The standard SVR4 assembler seems to require that certain builtin
-+ library routines (e.g. .udiv) be explicitly declared as .globl
-+ in each assembly file where they are referenced. */
-+
-+ #define ASM_OUTPUT_EXTERNAL_LIBCALL(FILE, FUN) \
-+ ASM_GLOBALIZE_LABEL (FILE, XSTR (FUN, 0))
-+
-+ /* This says how to output assembler code to declare an
-+ uninitialized external linkage data object. Under SVR4,
-+ the linker seems to want the alignment of data objects
-+ to depend on their types. We do exactly that here. */
-+
-+ #define COMMON_ASM_OP ".comm"
-+
-+ #undef ASM_OUTPUT_ALIGNED_COMMON
-+ #define ASM_OUTPUT_ALIGNED_COMMON(FILE, NAME, SIZE, ALIGN) \
-+ do { \
-+ fprintf ((FILE), "\t%s\t", COMMON_ASM_OP); \
-+ assemble_name ((FILE), (NAME)); \
-+ fprintf ((FILE), ",%u,%u\n", (SIZE), (ALIGN) / BITS_PER_UNIT); \
-+ } while (0)
-+
-+ /* This says how to output assembler code to declare an
-+ uninitialized internal linkage data object. Under SVR4,
-+ the linker seems to want the alignment of data objects
-+ to depend on their types. We do exactly that here. */
-+
-+ #define LOCAL_ASM_OP ".local"
-+
-+ #undef ASM_OUTPUT_ALIGNED_LOCAL
-+ #define ASM_OUTPUT_ALIGNED_LOCAL(FILE, NAME, SIZE, ALIGN) \
-+ do { \
-+ fprintf ((FILE), "\t%s\t", LOCAL_ASM_OP); \
-+ assemble_name ((FILE), (NAME)); \
-+ fprintf ((FILE), "\n"); \
-+ ASM_OUTPUT_ALIGNED_COMMON (FILE, NAME, SIZE, ALIGN); \
-+ } while (0)
-+
-+ /* This is the pseudo-op used to generate a 64-bit word of data with a
-+ specific value in some section. */
-+
-+ #define INT_ASM_OP ".quad"
-+
-+ /* This is the pseudo-op used to generate a contiguous sequence of byte
-+ values from a double-quoted string WITHOUT HAVING A TERMINATING NUL
-+ AUTOMATICALLY APPENDED. This is the same for most svr4 assemblers. */
-+
-+ #undef ASCII_DATA_ASM_OP
-+ #define ASCII_DATA_ASM_OP ".ascii"
-+
-+ /* Support const sections and the ctors and dtors sections for g++.
-+ Note that there appears to be two different ways to support const
-+ sections at the moment. You can either #define the symbol
-+ READONLY_DATA_SECTION (giving it some code which switches to the
-+ readonly data section) or else you can #define the symbols
-+ EXTRA_SECTIONS, EXTRA_SECTION_FUNCTIONS, SELECT_SECTION, and
-+ SELECT_RTX_SECTION. We do both here just to be on the safe side. */
-+
-+ #define USE_CONST_SECTION 1
-+
-+ #define CONST_SECTION_ASM_OP ".section\t.rodata"
-+
-+ /* Define the pseudo-ops used to switch to the .ctors and .dtors sections.
-+
-+ Note that we want to give these sections the SHF_WRITE attribute
-+ because these sections will actually contain data (i.e. tables of
-+ addresses of functions in the current root executable or shared library
-+ file) and, in the case of a shared library, the relocatable addresses
-+ will have to be properly resolved/relocated (and then written into) by
-+ the dynamic linker when it actually attaches the given shared library
-+ to the executing process. (Note that on SVR4, you may wish to use the
-+ `-z text' option to the ELF linker, when building a shared library, as
-+ an additional check that you are doing everything right. But if you do
-+ use the `-z text' option when building a shared library, you will get
-+ errors unless the .ctors and .dtors sections are marked as writable
-+ via the SHF_WRITE attribute.) */
-+
-+ #define CTORS_SECTION_ASM_OP ".section\t.ctors,\"aw\""
-+ #define DTORS_SECTION_ASM_OP ".section\t.dtors,\"aw\""
-+
-+ /* On svr4, we *do* have support for the .init and .fini sections, and we
-+ can put stuff in there to be executed before and after `main'. We let
-+ crtstuff.c and other files know this by defining the following symbols.
-+ The definitions say how to change sections to the .init and .fini
-+ sections. This is the same for all known svr4 assemblers. */
-+
-+ #define INIT_SECTION_ASM_OP ".section\t.init"
-+ #define FINI_SECTION_ASM_OP ".section\t.fini"
-+
-+ /* Support non-common, uninitialized data in the .bss section. */
-+
-+ #define BSS_SECTION_ASM_OP ".section\t.bss"
-+
-+ /* A default list of other sections which we might be "in" at any given
-+ time. For targets that use additional sections (e.g. .tdesc) you
-+ should override this definition in the target-specific file which
-+ includes this file. */
-+
-+ #undef EXTRA_SECTIONS
-+ #define EXTRA_SECTIONS in_const, in_ctors, in_dtors, in_bss
-+
-+ /* A default list of extra section function definitions. For targets
-+ that use additional sections (e.g. .tdesc) you should override this
-+ definition in the target-specific file which includes this file. */
-+
-+ #undef EXTRA_SECTION_FUNCTIONS
-+ #define EXTRA_SECTION_FUNCTIONS \
-+ CONST_SECTION_FUNCTION \
-+ CTORS_SECTION_FUNCTION \
-+ DTORS_SECTION_FUNCTION \
-+ BSS_SECTION_FUNCTION
-+
-+ #undef READONLY_DATA_SECTION
-+ #define READONLY_DATA_SECTION() const_section ()
-+
-+ extern void text_section ();
-+
-+ #define CONST_SECTION_FUNCTION \
-+ void \
-+ const_section () \
-+ { \
-+ if (!USE_CONST_SECTION) \
-+ text_section(); \
-+ else if (in_section != in_const) \
-+ { \
-+ fprintf (asm_out_file, "%s\n", CONST_SECTION_ASM_OP); \
-+ in_section = in_const; \
-+ } \
-+ }
-+
-+ #define CTORS_SECTION_FUNCTION \
-+ void \
-+ ctors_section () \
-+ { \
-+ if (in_section != in_ctors) \
-+ { \
-+ fprintf (asm_out_file, "%s\n", CTORS_SECTION_ASM_OP); \
-+ in_section = in_ctors; \
-+ } \
-+ }
-+
-+ #define DTORS_SECTION_FUNCTION \
-+ void \
-+ dtors_section () \
-+ { \
-+ if (in_section != in_dtors) \
-+ { \
-+ fprintf (asm_out_file, "%s\n", DTORS_SECTION_ASM_OP); \
-+ in_section = in_dtors; \
-+ } \
-+ }
-+
-+ #define BSS_SECTION_FUNCTION \
-+ void \
-+ bss_section () \
-+ { \
-+ if (in_section != in_bss) \
-+ { \
-+ fprintf (asm_out_file, "%s\n", BSS_SECTION_ASM_OP); \
-+ in_section = in_bss; \
-+ } \
-+ }
-+
-+
-+ /* Switch into a generic section.
-+ This is currently only used to support section attributes.
-+
-+ We make the section read-only and executable for a function decl,
-+ read-only for a const data decl, and writable for a non-const data decl. */
-+ #define ASM_OUTPUT_SECTION_NAME(FILE, DECL, NAME) \
-+ fprintf (FILE, ".section\t%s,\"%s\",@progbits\n", NAME, \
-+ (DECL) && TREE_CODE (DECL) == FUNCTION_DECL ? "ax" : \
-+ (DECL) && TREE_READONLY (DECL) ? "a" : "aw")
-+
-+
-+ /* A C statement (sans semicolon) to output an element in the table of
-+ global constructors. */
-+ #define ASM_OUTPUT_CONSTRUCTOR(FILE,NAME) \
-+ do { \
-+ ctors_section (); \
-+ fprintf (FILE, "\t%s\t ", INT_ASM_OP); \
-+ assemble_name (FILE, NAME); \
-+ fprintf (FILE, "\n"); \
-+ } while (0)
-+
-+ /* A C statement (sans semicolon) to output an element in the table of
-+ global destructors. */
-+ #define ASM_OUTPUT_DESTRUCTOR(FILE,NAME) \
-+ do { \
-+ dtors_section (); \
-+ fprintf (FILE, "\t%s\t ", INT_ASM_OP); \
-+ assemble_name (FILE, NAME); \
-+ fprintf (FILE, "\n"); \
-+ } while (0)
-+
-+ /* A C statement or statements to switch to the appropriate
-+ section for output of DECL. DECL is either a `VAR_DECL' node
-+ or a constant of some sort. RELOC indicates whether forming
-+ the initial value of DECL requires link-time relocations. */
-+
-+ #define SELECT_SECTION(DECL,RELOC) \
-+ { \
-+ if (TREE_CODE (DECL) == STRING_CST) \
-+ { \
-+ if (! flag_writable_strings) \
-+ const_section (); \
-+ else \
-+ data_section (); \
-+ } \
-+ else if (TREE_CODE (DECL) == VAR_DECL) \
-+ { \
-+ if ((flag_pic && RELOC) \
-+ || !TREE_READONLY (DECL) || TREE_SIDE_EFFECTS (DECL) \
-+ || !DECL_INITIAL (DECL) \
-+ || (DECL_INITIAL (DECL) != error_mark_node \
-+ && !TREE_CONSTANT (DECL_INITIAL (DECL)))) \
-+ { \
-+ if (DECL_COMMON (DECL) \
-+ && !DECL_INITIAL (DECL)) \
-+ /* || DECL_INITIAL (DECL) == error_mark_node)) */ \
-+ bss_section(); \
-+ else \
-+ data_section (); \
-+ } \
-+ else \
-+ const_section (); \
-+ } \
-+ else \
-+ const_section (); \
-+ }
-+
-+ /* A C statement or statements to switch to the appropriate
-+ section for output of RTX in mode MODE. RTX is some kind
-+ of constant in RTL. The argument MODE is redundant except
-+ in the case of a `const_int' rtx. Currently, these always
-+ go into the const section. */
-+
-+ #undef SELECT_RTX_SECTION
-+ #define SELECT_RTX_SECTION(MODE,RTX) const_section()
-+
-+ /* Define the strings used for the special svr4 .type and .size directives.
-+ These strings generally do not vary from one system running svr4 to
-+ another, but if a given system (e.g. m88k running svr) needs to use
-+ different pseudo-op names for these, they may be overridden in the
-+ file which includes this one. */
-+
-+ #define TYPE_ASM_OP ".type"
-+ #define SIZE_ASM_OP ".size"
-+
-+ /* This is how we tell the assembler that a symbol is weak. */
-+
-+ #define ASM_WEAKEN_LABEL(FILE,NAME) \
-+ do { fputs ("\t.weak\t", FILE); assemble_name (FILE, NAME); \
-+ fputc ('\n', FILE); } while (0)
-+
-+ /* This is how we tell the assembler that two symbols have the same value. */
-+
-+ #define ASM_OUTPUT_DEF(FILE,NAME1,NAME2) \
-+ do { assemble_name(FILE, NAME1); \
-+ fputs(" = ", FILE); \
-+ assemble_name(FILE, NAME2); \
-+ fputc('\n', FILE); } while (0)
-+
-+ /* The following macro defines the format used to output the second
-+ operand of the .type assembler directive. Different svr4 assemblers
-+ expect various different forms for this operand. The one given here
-+ is just a default. You may need to override it in your machine-
-+ specific tm.h file (depending upon the particulars of your assembler). */
-+
-+ #define TYPE_OPERAND_FMT "@%s"
-+
-+ /* Write the extra assembler code needed to declare a function's result.
-+ Most svr4 assemblers don't require any special declaration of the
-+ result value, but there are exceptions. */
-+
-+ #ifndef ASM_DECLARE_RESULT
-+ #define ASM_DECLARE_RESULT(FILE, RESULT)
-+ #endif
-+
-+ /* These macros generate the special .type and .size directives which
-+ are used to set the corresponding fields of the linker symbol table
-+ entries in an ELF object file under SVR4. These macros also output
-+ the starting labels for the relevant functions/objects. */
-+
-+ /* Write the extra assembler code needed to declare an object properly. */
-+
-+ #define ASM_DECLARE_OBJECT_NAME(FILE, NAME, DECL) \
-+ do { \
-+ fprintf (FILE, "\t%s\t ", TYPE_ASM_OP); \
-+ assemble_name (FILE, NAME); \
-+ putc (',', FILE); \
-+ fprintf (FILE, TYPE_OPERAND_FMT, "object"); \
-+ putc ('\n', FILE); \
-+ size_directive_output = 0; \
-+ if (!flag_inhibit_size_directive && DECL_SIZE (DECL)) \
-+ { \
-+ size_directive_output = 1; \
-+ fprintf (FILE, "\t%s\t ", SIZE_ASM_OP); \
-+ assemble_name (FILE, NAME); \
-+ fprintf (FILE, ",%d\n", int_size_in_bytes (TREE_TYPE (DECL))); \
-+ } \
-+ ASM_OUTPUT_LABEL(FILE, NAME); \
-+ } while (0)
-+
-+ /* Output the size directive for a decl in rest_of_decl_compilation
-+ in the case where we did not do so before the initializer.
-+ Once we find the error_mark_node, we know that the value of
-+ size_directive_output was set
-+ by ASM_DECLARE_OBJECT_NAME when it was run for the same decl. */
-+
-+ #define ASM_FINISH_DECLARE_OBJECT(FILE, DECL, TOP_LEVEL, AT_END) \
-+ do { \
-+ char *name = XSTR (XEXP (DECL_RTL (DECL), 0), 0); \
-+ if (!flag_inhibit_size_directive && DECL_SIZE (DECL) \
-+ && ! AT_END && TOP_LEVEL \
-+ && DECL_INITIAL (DECL) == error_mark_node \
-+ && !size_directive_output) \
-+ { \
-+ size_directive_output = 1; \
-+ fprintf (FILE, "\t%s\t ", SIZE_ASM_OP); \
-+ assemble_name (FILE, name); \
-+ fprintf (FILE, ",%d\n", int_size_in_bytes (TREE_TYPE (DECL))); \
-+ } \
-+ } while (0)
-+
-+ /* A table of bytes codes used by the ASM_OUTPUT_ASCII and
-+ ASM_OUTPUT_LIMITED_STRING macros. Each byte in the table
-+ corresponds to a particular byte value [0..255]. For any
-+ given byte value, if the value in the corresponding table
-+ position is zero, the given character can be output directly.
-+ If the table value is 1, the byte must be output as a \ooo
-+ octal escape. If the tables value is anything else, then the
-+ byte value should be output as a \ followed by the value
-+ in the table. Note that we can use standard UN*X escape
-+ sequences for many control characters, but we don't use
-+ \a to represent BEL because some svr4 assemblers (e.g. on
-+ the i386) don't know about that. Also, we don't use \v
-+ since some versions of gas, such as 2.2 did not accept it. */
-+
-+ #define ESCAPES \
-+ "\1\1\1\1\1\1\1\1btn\1fr\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\
-+ \0\0\"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\
-+ \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\\\0\0\0\
-+ \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\
-+ \1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\
-+ \1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\
-+ \1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\
-+ \1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1"
-+
-+ /* Some svr4 assemblers have a limit on the number of characters which
-+ can appear in the operand of a .string directive. If your assembler
-+ has such a limitation, you should define STRING_LIMIT to reflect that
-+ limit. Note that at least some svr4 assemblers have a limit on the
-+ actual number of bytes in the double-quoted string, and that they
-+ count each character in an escape sequence as one byte. Thus, an
-+ escape sequence like \377 would count as four bytes.
-+
-+ If your target assembler doesn't support the .string directive, you
-+ should define this to zero.
-+ */
-+
-+ #define STRING_LIMIT ((unsigned) 256)
-+
-+ #define STRING_ASM_OP ".string"
-+
-+ /*
-+ * We always use gas here, so we don't worry about ECOFF assembler problems.
-+ */
-+ #undef TARGET_GAS
-+ #define TARGET_GAS (1)
-+
-+ #undef PREFERRED_DEBUGGING_TYPE
-+ #define PREFERRED_DEBUGGING_TYPE DBX_DEBUG
-+
-+ /* Provide a STARTFILE_SPEC appropriate for Linux. Here we add
-+ the Linux magical crtbegin.o file (see crtstuff.c) which
-+ provides part of the support for getting C++ file-scope static
-+ object constructed before entering `main'. */
-+
-+ #undef STARTFILE_SPEC
-+ #define STARTFILE_SPEC \
-+ "%{!shared: \
-+ %{pg:gcrt1.o%s} %{!pg:%{p:gcrt1.o%s} %{!p:crt1.o%s}}}\
-+ crti.o%s crtbegin.o%s"
-+
-+ /* Provide a ENDFILE_SPEC appropriate for Linux. Here we tack on
-+ the Linux magical crtend.o file (see crtstuff.c) which
-+ provides part of the support for getting C++ file-scope static
-+ object constructed before entering `main', followed by a normal
-+ Linux "finalizer" file, `crtn.o'. */
-+
-+ #undef ENDFILE_SPEC
-+ #define ENDFILE_SPEC \
-+ "crtend.o%s crtn.o%s"
-diff -rcp2N gcc-2.7.2.3/config/alpha/linux.h gcc-2.7.2.3.f.1/config/alpha/linux.h
-*** gcc-2.7.2.3/config/alpha/linux.h Thu Jan 1 00:00:00 1970
---- gcc-2.7.2.3.f.1/config/alpha/linux.h Fri Jul 11 00:08:49 1997
-***************
-*** 0 ****
---- 1,72 ----
-+ /* Definitions of target machine for GNU compiler, for Alpha Linux,
-+ using ECOFF.
-+ Copyright (C) 1995 Free Software Foundation, Inc.
-+ Contributed by Bob Manson.
-+ Derived from work contributed by Cygnus Support,
-+ (c) 1993 Free Software Foundation.
-+
-+ This file is part of GNU CC.
-+
-+ GNU CC 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.
-+
-+ GNU CC 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 GNU CC; see the file COPYING. If not, write to
-+ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
-+
-+ #define TARGET_DEFAULT (3 | MASK_GAS)
-+
-+ #include "alpha/alpha.h"
-+
-+ #undef TARGET_VERSION
-+ #define TARGET_VERSION fprintf (stderr, " (Linux/Alpha)");
-+
-+ #undef CPP_PREDEFINES
-+ #define CPP_PREDEFINES "\
-+ -D__alpha -D__alpha__ -D__linux__ -D__linux -D_LONGLONG -Dlinux -Dunix \
-+ -Asystem(linux) -Acpu(alpha) -Amachine(alpha)"
-+
-+ /* We don't actually need any of these; the MD_ vars are ignored
-+ anyway for cross-compilers, and the other specs won't get picked up
-+ 'coz the user is supposed to do ld -r (hmm, perhaps that should be
-+ the default). In any case, setting them thus will catch some
-+ common user errors. */
-+
-+ #undef MD_EXEC_PREFIX
-+ #undef MD_STARTFILE_PREFIX
-+
-+ #undef LIB_SPEC
-+ #define LIB_SPEC "%{pg:-lgmon} %{pg:-lc_p} %{!pg:-lc}"
-+
-+ #undef LINK_SPEC
-+ #define LINK_SPEC \
-+ "-G 8 %{O*:-O3} %{!O*:-O1}"
-+
-+ #undef ASM_SPEC
-+ #define ASM_SPEC "-nocpp"
-+
-+ /* Can't do stabs */
-+ #undef SDB_DEBUGGING_INFO
-+
-+ /* Prefer dbx. */
-+ #undef PREFERRED_DEBUGGING_TYPE
-+ #define PREFERRED_DEBUGGING_TYPE DBX_DEBUG
-+
-+ #undef FUNCTION_PROFILER
-+
-+ #define FUNCTION_PROFILER(FILE, LABELNO) \
-+ do { \
-+ fputs ("\tlda $27,_mcount\n", (FILE)); \
-+ fputs ("\tjsr $26,($27),_mcount\n", (FILE)); \
-+ fputs ("\tldgp $29,0($26)\n", (FILE)); \
-+ } while (0);
-+
-+ /* Generate calls to memcpy, etc., not bcopy, etc. */
-+ #define TARGET_MEM_FUNCTIONS
-diff -rcp2N gcc-2.7.2.3/config/alpha/t-linux gcc-2.7.2.3.f.1/config/alpha/t-linux
-*** gcc-2.7.2.3/config/alpha/t-linux Thu Jan 1 00:00:00 1970
---- gcc-2.7.2.3.f.1/config/alpha/t-linux Fri Jul 11 00:08:49 1997
-***************
-*** 0 ****
---- 1,3 ----
-+ # Our header files are supposed to be correct, nein?
-+ FIXINCLUDES =
-+ STMP_FIXPROTO =
-diff -rcp2N gcc-2.7.2.3/config/alpha/x-linux gcc-2.7.2.3.f.1/config/alpha/x-linux
-*** gcc-2.7.2.3/config/alpha/x-linux Thu Jan 1 00:00:00 1970
---- gcc-2.7.2.3.f.1/config/alpha/x-linux Fri Jul 11 00:08:49 1997
-***************
-*** 0 ****
---- 1 ----
-+ CLIB=-lbfd -liberty
-diff -rcp2N gcc-2.7.2.3/config/alpha/xm-alpha.h gcc-2.7.2.3.f.1/config/alpha/xm-alpha.h
-*** gcc-2.7.2.3/config/alpha/xm-alpha.h Thu Aug 31 21:52:27 1995
---- gcc-2.7.2.3.f.1/config/alpha/xm-alpha.h Fri Jul 11 00:08:49 1997
-*************** Boston, MA 02111-1307, USA. */
-*** 46,51 ****
---- 46,53 ----
- #include <alloca.h>
- #else
-+ #ifndef alloca
- extern void *alloca ();
- #endif
-+ #endif
-
- /* The host compiler has problems with enum bitfields since it makes
-*************** extern void *malloc (), *realloc (), *ca
-*** 68,72 ****
---- 70,76 ----
- /* OSF/1 has vprintf. */
-
-+ #ifndef linux /* 1996/02/22 mauro@craftwork.com -- unreliable with Linux */
- #define HAVE_VPRINTF
-+ #endif
-
- /* OSF/1 has putenv. */
-diff -rcp2N gcc-2.7.2.3/config/alpha/xm-linux.h gcc-2.7.2.3.f.1/config/alpha/xm-linux.h
-*** gcc-2.7.2.3/config/alpha/xm-linux.h Thu Jan 1 00:00:00 1970
---- gcc-2.7.2.3.f.1/config/alpha/xm-linux.h Fri Jul 11 00:08:49 1997
-***************
-*** 0 ****
---- 1,10 ----
-+ #ifndef _XM_LINUX_H
-+ #define _XM_LINUX_H
-+
-+ #include "xm-alpha.h"
-+
-+ #define HAVE_STRERROR
-+
-+ #define DONT_DECLARE_SYS_SIGLIST
-+ #define USE_BFD
-+ #endif
-diff -rcp2N gcc-2.7.2.3/config/i386/i386.c gcc-2.7.2.3.f.1/config/i386/i386.c
-*** gcc-2.7.2.3/config/i386/i386.c Sun Oct 22 11:13:21 1995
---- gcc-2.7.2.3.f.1/config/i386/i386.c Sun Aug 10 22:46:09 1997
-*************** standard_80387_constant_p (x)
-*** 1290,1294 ****
- set_float_handler (handler);
- REAL_VALUE_FROM_CONST_DOUBLE (d, x);
-! is0 = REAL_VALUES_EQUAL (d, dconst0);
- is1 = REAL_VALUES_EQUAL (d, dconst1);
- set_float_handler (NULL_PTR);
---- 1290,1294 ----
- set_float_handler (handler);
- REAL_VALUE_FROM_CONST_DOUBLE (d, x);
-! is0 = REAL_VALUES_EQUAL (d, dconst0) && !REAL_VALUE_MINUS_ZERO (d);
- is1 = REAL_VALUES_EQUAL (d, dconst1);
- set_float_handler (NULL_PTR);
-diff -rcp2N gcc-2.7.2.3/config/i386/i386.h gcc-2.7.2.3.f.1/config/i386/i386.h
-*** gcc-2.7.2.3/config/i386/i386.h Fri Sep 22 22:42:57 1995
---- gcc-2.7.2.3.f.1/config/i386/i386.h Sun Aug 24 10:33:50 1997
-*************** extern int target_flags;
-*** 245,249 ****
-
- /* Boundary (in *bits*) on which stack pointer should be aligned. */
-! #define STACK_BOUNDARY 32
-
- /* Allocation boundary (in *bits*) for the code of a function.
---- 245,249 ----
-
- /* Boundary (in *bits*) on which stack pointer should be aligned. */
-! #define STACK_BOUNDARY BIGGEST_ALIGNMENT
-
- /* Allocation boundary (in *bits*) for the code of a function.
-diff -rcp2N gcc-2.7.2.3/config/m68k/m68k.md gcc-2.7.2.3.f.1/config/m68k/m68k.md
-*** gcc-2.7.2.3/config/m68k/m68k.md Sun Aug 31 09:39:43 1997
---- gcc-2.7.2.3.f.1/config/m68k/m68k.md Sun Aug 31 09:21:09 1997
-***************
-*** 288,292 ****
- (match_operand:DI 0 "nonimmediate_operand" "d"))
- (clobber (match_dup 1))])]
-! ""
- "operands[1] = gen_reg_rtx (DImode);")
-
---- 288,292 ----
- (match_operand:DI 0 "nonimmediate_operand" "d"))
- (clobber (match_dup 1))])]
-! "0"
- "operands[1] = gen_reg_rtx (DImode);")
-
-***************
-*** 411,415 ****
- (match_operand:DI 1 "general_operand" "")))
- (clobber (match_dup 2))])]
-! ""
- "operands[2] = gen_reg_rtx (DImode);")
-
---- 411,415 ----
- (match_operand:DI 1 "general_operand" "")))
- (clobber (match_dup 2))])]
-! "0"
- "operands[2] = gen_reg_rtx (DImode);")
-
-diff -rcp2N gcc-2.7.2.3/config/mips/mips.c gcc-2.7.2.3.f.1/config/mips/mips.c
-*** gcc-2.7.2.3/config/mips/mips.c Sat Jun 29 16:26:44 1996
---- gcc-2.7.2.3.f.1/config/mips/mips.c Sun Aug 10 22:45:43 1997
-*************** expand_block_move (operands)
-*** 2360,2365 ****
-
- else if (constp && bytes <= 2*MAX_MOVE_BYTES)
-! emit_insn (gen_movstrsi_internal (gen_rtx (MEM, BLKmode, dest_reg),
-! gen_rtx (MEM, BLKmode, src_reg),
- bytes_rtx, align_rtx));
-
---- 2360,2367 ----
-
- else if (constp && bytes <= 2*MAX_MOVE_BYTES)
-! emit_insn (gen_movstrsi_internal (change_address (operands[0],
-! BLKmode, dest_reg),
-! change_address (orig_src, BLKmode,
-! src_reg),
- bytes_rtx, align_rtx));
-
-diff -rcp2N gcc-2.7.2.3/config/mips/mips.h gcc-2.7.2.3.f.1/config/mips/mips.h
-*** gcc-2.7.2.3/config/mips/mips.h Thu Nov 9 16:23:09 1995
---- gcc-2.7.2.3.f.1/config/mips/mips.h Sun Aug 10 22:46:44 1997
-*************** typedef struct mips_args {
-*** 2160,2170 ****
- } \
- \
-! /* Flush the instruction cache. */ \
-! /* ??? Are the modes right? Maybe they should depend on -mint64/-mlong64? */\
- /* ??? Should check the return value for errors. */ \
-! emit_library_call (gen_rtx (SYMBOL_REF, Pmode, "cacheflush"), \
- 0, VOIDmode, 3, addr, Pmode, \
- GEN_INT (TRAMPOLINE_SIZE), SImode, \
-! GEN_INT (1), SImode); \
- }
-
---- 2160,2170 ----
- } \
- \
-! /* Flush both caches. We need to flush the data cache in case \
-! the system has a write-back cache. */ \
- /* ??? Should check the return value for errors. */ \
-! emit_library_call (gen_rtx (SYMBOL_REF, Pmode, "_flush_cache"), \
- 0, VOIDmode, 3, addr, Pmode, \
- GEN_INT (TRAMPOLINE_SIZE), SImode, \
-! GEN_INT (3), TYPE_MODE (integer_type_node)); \
- }
-
-*************** typedef struct mips_args {
-*** 2388,2392 ****
- ((GET_CODE (X) != CONST_DOUBLE \
- || mips_const_double_ok (X, GET_MODE (X))) \
-! && ! (GET_CODE (X) == CONST && ABI_64BIT))
-
- /* A C compound statement that attempts to replace X with a valid
---- 2388,2393 ----
- ((GET_CODE (X) != CONST_DOUBLE \
- || mips_const_double_ok (X, GET_MODE (X))) \
-! && ! (GET_CODE (X) == CONST \
-! && (ABI_64BIT || GET_CODE (XEXP (X, 0)) == MINUS)))
-
- /* A C compound statement that attempts to replace X with a valid
-diff -rcp2N gcc-2.7.2.3/config/mips/sni-gas.h gcc-2.7.2.3.f.1/config/mips/sni-gas.h
-*** gcc-2.7.2.3/config/mips/sni-gas.h Thu Jan 1 00:00:00 1970
---- gcc-2.7.2.3.f.1/config/mips/sni-gas.h Sun Aug 10 22:46:33 1997
-***************
-*** 0 ****
---- 1,43 ----
-+ #include "mips/sni-svr4.h"
-+
-+ /* Enable debugging. */
-+ #define DBX_DEBUGGING_INFO
-+ #define SDB_DEBUGGING_INFO
-+ #define MIPS_DEBUGGING_INFO
-+
-+ #define DWARF_DEBUGGING_INFO
-+ #undef PREFERRED_DEBUGGING_TYPE
-+ #define PREFERRED_DEBUGGING_TYPE DWARF_DEBUG
-+
-+ /* We need to use .esize and .etype instead of .size and .type to
-+ avoid conflicting with ELF directives. These are only recognized
-+ by gas, anyhow, not the native assembler. */
-+ #undef PUT_SDB_SIZE
-+ #define PUT_SDB_SIZE(a) \
-+ do { \
-+ extern FILE *asm_out_text_file; \
-+ fprintf (asm_out_text_file, "\t.esize\t%d;", (a)); \
-+ } while (0)
-+
-+ #undef PUT_SDB_TYPE
-+ #define PUT_SDB_TYPE(a) \
-+ do { \
-+ extern FILE *asm_out_text_file; \
-+ fprintf (asm_out_text_file, "\t.etype\t0x%x;", (a)); \
-+ } while (0)
-+
-+
-+ /* This is how to equate one symbol to another symbol. The syntax used is
-+ `SYM1=SYM2'. Note that this is different from the way equates are done
-+ with most svr4 assemblers, where the syntax is `.set SYM1,SYM2'. */
-+
-+ #define ASM_OUTPUT_DEF(FILE,LABEL1,LABEL2) \
-+ do { fprintf ((FILE), "\t"); \
-+ assemble_name (FILE, LABEL1); \
-+ fprintf (FILE, " = "); \
-+ assemble_name (FILE, LABEL2); \
-+ fprintf (FILE, "\n"); \
-+ } while (0)
-+
-+
-+
-diff -rcp2N gcc-2.7.2.3/config/mips/sni-svr4.h gcc-2.7.2.3.f.1/config/mips/sni-svr4.h
-*** gcc-2.7.2.3/config/mips/sni-svr4.h Thu Jan 1 00:00:00 1970
---- gcc-2.7.2.3.f.1/config/mips/sni-svr4.h Sun Aug 10 22:46:33 1997
-***************
-*** 0 ****
---- 1,103 ----
-+ /* Definitions of target machine for GNU compiler. SNI SINIX version.
-+ Copyright (C) 1996 Free Software Foundation, Inc.
-+ Contributed by Marco Walther (Marco.Walther@mch.sni.de).
-+
-+ This file is part of GNU CC.
-+
-+ GNU CC 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.
-+
-+ GNU CC 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 GNU CC; see the file COPYING. If not, write to
-+ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
-+
-+ #define MIPS_SVR4
-+
-+ #define CPP_PREDEFINES "\
-+ -Dmips -Dunix -Dhost_mips -DMIPSEB -DR3000 -DSYSTYPE_SVR4 \
-+ -D_mips -D_unix -D_host_mips -D_MIPSEB -D_R3000 -D_SYSTYPE_SVR4 \
-+ -Asystem(unix) -Asystem(svr4) -Acpu(mips) -Amachine(mips)"
-+
-+ #define CPP_SPEC "\
-+ %{.cc: -D__LANGUAGE_C_PLUS_PLUS -D_LANGUAGE_C_PLUS_PLUS} \
-+ %{.cxx: -D__LANGUAGE_C_PLUS_PLUS -D_LANGUAGE_C_PLUS_PLUS} \
-+ %{.C: -D__LANGUAGE_C_PLUS_PLUS -D_LANGUAGE_C_PLUS_PLUS} \
-+ %{.m: -D__LANGUAGE_OBJECTIVE_C -D_LANGUAGE_OBJECTIVE_C} \
-+ %{.S: -D__LANGUAGE_ASSEMBLY -D_LANGUAGE_ASSEMBLY %{!ansi:-DLANGUAGE_ASSEMBLY}} \
-+ %{.s: -D__LANGUAGE_ASSEMBLY -D_LANGUAGE_ASSEMBLY %{!ansi:-DLANGUAGE_ASSEMBLY}} \
-+ %{!.S:%{!.s: -D__LANGUAGE_C -D_LANGUAGE_C %{!ansi:-DLANGUAGE_C}}} \
-+ -D__SIZE_TYPE__=unsigned\\ int -D__PTRDIFF_TYPE__=int"
-+
-+ #define LINK_SPEC "\
-+ %{G*} \
-+ %{!mgas: \
-+ %{dy} %{dn}}"
-+
-+ #define LIB_SPEC "\
-+ %{p:-lprof1} \
-+ %{!p:%{pg:-lprof1} \
-+ %{!pg:-L/usr/ccs/lib/ -lc /usr/ccs/lib/crtn.o%s}}"
-+
-+ #define STARTFILE_SPEC "\
-+ %{pg:gcrt0.o%s} \
-+ %{!pg:%{p:mcrt0.o%s} \
-+ %{!p:/usr/ccs/lib/crt1.o /usr/ccs/lib/crti.o /usr/ccs/lib/values-Xt.o%s}}"
-+
-+ /* Mips System V.4 doesn't have a getpagesize() function needed by the
-+ trampoline code, so use the POSIX sysconf function to get it.
-+ This is only done when compiling the trampoline code. */
-+
-+ #ifdef L_trampoline
-+ #include <unistd.h>
-+
-+ #define getpagesize() sysconf(_SC_PAGE_SIZE)
-+ #endif /* L_trampoline */
-+
-+ /* Use atexit for static constructors/destructors, instead of defining
-+ our own exit function. */
-+ #define HAVE_ATEXIT
-+
-+ /* Generate calls to memcpy, etc., not bcopy, etc. */
-+ #define TARGET_MEM_FUNCTIONS
-+
-+ #define OBJECT_FORMAT_ELF
-+
-+ #define TARGET_DEFAULT MASK_ABICALLS
-+ #define ABICALLS_ASM_OP ".option pic2"
-+
-+ #define MACHINE_TYPE "SNI running SINIX 5.42"
-+
-+ #define MIPS_DEFAULT_GVALUE 0
-+
-+ #define NM_FLAGS "-p"
-+
-+ /* wir haben ein Problem, wenn in einem Assembler-File keine .text-section
-+ erzeugt wird. Dann landen diese Pseudo-Labels in irgendeiner anderen
-+ section, z.B. .reginfo. Das macht den ld sehr ungluecklich. */
-+
-+ #define ASM_IDENTIFY_GCC(mw_stream) \
-+ fprintf(mw_stream, "\t.ident \"gcc2_compiled.\"\n");
-+
-+ #define ASM_IDENTIFY_LANGUAGE(STREAM)
-+
-+ #define ASM_LONG ".word\t"
-+ #define ASM_GLOBAL ".rdata\n\t\t.globl\t"
-+
-+ #include "mips/mips.h"
-+
-+ /* We do not want to run mips-tfile! */
-+ #undef ASM_FINAL_SPEC
-+
-+ #undef OBJECT_FORMAT_COFF
-+
-+ /* We don't support debugging info for now. */
-+ #undef DBX_DEBUGGING_INFO
-+ #undef SDB_DEBUGGING_INFO
-+ #undef MIPS_DEBUGGING_INFO
-diff -rcp2N gcc-2.7.2.3/config/mips/x-sni-svr4 gcc-2.7.2.3.f.1/config/mips/x-sni-svr4
-*** gcc-2.7.2.3/config/mips/x-sni-svr4 Thu Jan 1 00:00:00 1970
---- gcc-2.7.2.3.f.1/config/mips/x-sni-svr4 Sun Aug 10 22:46:33 1997
-***************
-*** 0 ****
---- 1,18 ----
-+ # Define CC and OLDCC as the same, so that the tests:
-+ # if [ x"$(OLDCC)" = x"$(CC)" ] ...
-+ #
-+ # will succeed (if OLDCC != CC, it is assumed that GCC is
-+ # being used in secondary stage builds).
-+ # -Olimit is so the user can use -O2. Down with fixed
-+ # size tables!
-+
-+ CC = $(OLDCC)
-+ OPT =
-+ OLDCC = cc -Olimit 3000 $(OPT)
-+
-+ X_CFLAGS = -DNO_SYS_SIGLIST
-+
-+ # Show we need to use the C version of ALLOCA
-+ # The SVR3 configurations have it, but the SVR4 configurations don't.
-+ # For now, just try using it for all SVR* configurations.
-+ ALLOCA = alloca.o
-diff -rcp2N gcc-2.7.2.3/config/msdos/configur.bat gcc-2.7.2.3.f.1/config/msdos/configur.bat
-*** gcc-2.7.2.3/config/msdos/configur.bat Mon Aug 28 09:55:47 1995
---- gcc-2.7.2.3.f.1/config/msdos/configur.bat Sun Aug 10 23:08:05 1997
-*************** sed -f config/msdos/top.sed Makefile.in
-*** 18,21 ****
---- 18,27 ----
- set LANG=
-
-+ if not exist ada\make-lang.in goto no_ada
-+ sed -f config/msdos/top.sed ada\make-lang.in >> Makefile
-+ sed -f config/msdos/top.sed ada\makefile.in > ada\Makefile
-+ set LANG=%LANG% ada.&
-+ :no_ada
-+
- if not exist cp\make-lang.in goto no_cp
- sed -f config/msdos/top.sed cp\make-lang.in >> Makefile
-diff -rcp2N gcc-2.7.2.3/config/pa/pa.c gcc-2.7.2.3.f.1/config/pa/pa.c
-*** gcc-2.7.2.3/config/pa/pa.c Sun Oct 22 11:45:20 1995
---- gcc-2.7.2.3.f.1/config/pa/pa.c Sun Aug 10 22:45:44 1997
-*************** output_move_double (operands)
-*** 1344,1369 ****
- do them in the other order.
-
-! RMS says "This happens only for registers;
-! such overlap can't happen in memory unless the user explicitly
-! sets it up, and that is an undefined circumstance."
-!
-! but it happens on the HP-PA when loading parameter registers,
-! so I am going to define that circumstance, and make it work
-! as expected. */
-
-! if (optype0 == REGOP && (optype1 == MEMOP || optype1 == OFFSOP)
-! && reg_overlap_mentioned_p (operands[0], XEXP (operands[1], 0)))
- {
-- /* XXX THIS PROBABLY DOESN'T WORK. */
- /* Do the late half first. */
- if (addreg1)
- output_asm_insn ("ldo 4(%0),%0", &addreg1);
- output_asm_insn (singlemove_string (latehalf), latehalf);
- if (addreg1)
- output_asm_insn ("ldo -4(%0),%0", &addreg1);
-- /* Then clobber. */
- return singlemove_string (operands);
- }
-
- if (optype0 == REGOP && optype1 == REGOP
- && REGNO (operands[0]) == REGNO (operands[1]) + 1)
---- 1344,1377 ----
- do them in the other order.
-
-! This can happen in two cases:
-
-! mem -> register where the first half of the destination register
-! is the same register used in the memory's address. Reload
-! can create such insns.
-!
-! mem in this case will be either register indirect or register
-! indirect plus a valid offset.
-!
-! register -> register move where REGNO(dst) == REGNO(src + 1)
-! someone (Tim/Tege?) claimed this can happen for parameter loads.
-!
-! Handle mem -> register case first. */
-! if (optype0 == REGOP
-! && (optype1 == MEMOP || optype1 == OFFSOP)
-! && refers_to_regno_p (REGNO (operands[0]), REGNO (operands[0]) + 1,
-! operands[1], 0))
- {
- /* Do the late half first. */
- if (addreg1)
- output_asm_insn ("ldo 4(%0),%0", &addreg1);
- output_asm_insn (singlemove_string (latehalf), latehalf);
-+
-+ /* Then clobber. */
- if (addreg1)
- output_asm_insn ("ldo -4(%0),%0", &addreg1);
- return singlemove_string (operands);
- }
-
-+ /* Now handle register -> register case. */
- if (optype0 == REGOP && optype1 == REGOP
- && REGNO (operands[0]) == REGNO (operands[1]) + 1)
-diff -rcp2N gcc-2.7.2.3/config/pa/pa.md gcc-2.7.2.3.f.1/config/pa/pa.md
-*** gcc-2.7.2.3/config/pa/pa.md Mon Aug 14 13:00:49 1995
---- gcc-2.7.2.3.f.1/config/pa/pa.md Sun Aug 10 22:45:45 1997
-***************
-*** 1828,1832 ****
- (define_insn ""
- [(set (match_operand:DF 0 "reg_or_nonsymb_mem_operand"
-! "=f,*r,Q,?o,?Q,f,*&r,*&r")
- (match_operand:DF 1 "reg_or_0_or_nonsymb_mem_operand"
- "fG,*rG,f,*r,*r,Q,o,Q"))]
---- 1828,1832 ----
- (define_insn ""
- [(set (match_operand:DF 0 "reg_or_nonsymb_mem_operand"
-! "=f,*r,Q,?o,?Q,f,*r,*r")
- (match_operand:DF 1 "reg_or_0_or_nonsymb_mem_operand"
- "fG,*rG,f,*r,*r,Q,o,Q"))]
-***************
-*** 1846,1850 ****
- (define_insn ""
- [(set (match_operand:DF 0 "reg_or_nonsymb_mem_operand"
-! "=r,?o,?Q,&r,&r")
- (match_operand:DF 1 "reg_or_0_or_nonsymb_mem_operand"
- "rG,r,r,o,Q"))]
---- 1846,1850 ----
- (define_insn ""
- [(set (match_operand:DF 0 "reg_or_nonsymb_mem_operand"
-! "=r,?o,?Q,r,r")
- (match_operand:DF 1 "reg_or_0_or_nonsymb_mem_operand"
- "rG,r,r,o,Q"))]
-***************
-*** 2019,2023 ****
- (define_insn ""
- [(set (match_operand:DI 0 "reg_or_nonsymb_mem_operand"
-! "=r,o,Q,&r,&r,&r,f,f,*T")
- (match_operand:DI 1 "general_operand"
- "rM,r,r,o,Q,i,fM,*T,f"))]
---- 2019,2023 ----
- (define_insn ""
- [(set (match_operand:DI 0 "reg_or_nonsymb_mem_operand"
-! "=r,o,Q,r,r,r,f,f,*T")
- (match_operand:DI 1 "general_operand"
- "rM,r,r,o,Q,i,fM,*T,f"))]
-***************
-*** 2037,2041 ****
- (define_insn ""
- [(set (match_operand:DI 0 "reg_or_nonsymb_mem_operand"
-! "=r,o,Q,&r,&r,&r")
- (match_operand:DI 1 "general_operand"
- "rM,r,r,o,Q,i"))]
---- 2037,2041 ----
- (define_insn ""
- [(set (match_operand:DI 0 "reg_or_nonsymb_mem_operand"
-! "=r,o,Q,r,r,r")
- (match_operand:DI 1 "general_operand"
- "rM,r,r,o,Q,i"))]
-diff -rcp2N gcc-2.7.2.3/config/rs6000/rs6000.c gcc-2.7.2.3.f.1/config/rs6000/rs6000.c
-*** gcc-2.7.2.3/config/rs6000/rs6000.c Sat Jun 29 16:26:26 1996
---- gcc-2.7.2.3.f.1/config/rs6000/rs6000.c Fri Aug 29 07:51:51 1997
-*************** input_operand (op, mode)
-*** 724,730 ****
- return 1;
-
-! /* For HImode and QImode, any constant is valid. */
-! if ((mode == HImode || mode == QImode)
-! && GET_CODE (op) == CONST_INT)
- return 1;
-
---- 724,729 ----
- return 1;
-
-! /* For integer modes, any constant is ok. */
-! if (GET_CODE (op) == CONST_INT)
- return 1;
-
-*************** svr4_traceback (file, name, decl)
-*** 2611,2614 ****
---- 2610,2682 ----
- #endif /* USING_SVR4_H */
-
-+ /* Write out an instruction to load the TOC_TABLE address into register 30.
-+ This is only needed when TARGET_TOC, TARGET_MINIMAL_TOC, and there is
-+ a constant pool. */
-+
-+ void
-+ rs6000_output_load_toc_table (file)
-+ FILE *file;
-+ {
-+ char buf[256];
-+
-+ #ifdef USING_SVR4_H
-+ if (TARGET_RELOCATABLE)
-+ {
-+ ASM_GENERATE_INTERNAL_LABEL (buf, "LCF", rs6000_pic_labelno);
-+ fprintf (file, "\tbl ");
-+ assemble_name (file, buf);
-+ fprintf (file, "\n");
-+
-+ ASM_OUTPUT_INTERNAL_LABEL (file, "LCF", rs6000_pic_labelno);
-+ fprintf (file, "\tmflr %s\n", reg_names[30]);
-+
-+ if (TARGET_POWERPC64)
-+ fprintf (file, "\tld");
-+ else if (TARGET_NEW_MNEMONICS)
-+ fprintf (file, "\tlwz");
-+ else
-+ fprintf (file, "\tl");
-+
-+ fprintf (file, " %s,(", reg_names[0]);
-+ ASM_GENERATE_INTERNAL_LABEL (buf, "LCL", rs6000_pic_labelno);
-+ assemble_name (file, buf);
-+ fprintf (file, "-");
-+ ASM_GENERATE_INTERNAL_LABEL (buf, "LCF", rs6000_pic_labelno);
-+ assemble_name (file, buf);
-+ fprintf (file, ")(%s)\n", reg_names[30]);
-+ asm_fprintf (file, "\t{cax|add} %s,%s,%s\n",
-+ reg_names[30], reg_names[0], reg_names[30]);
-+ rs6000_pic_labelno++;
-+ }
-+ else if (!TARGET_64BIT)
-+ {
-+ ASM_GENERATE_INTERNAL_LABEL (buf, "LCTOC", 1);
-+ asm_fprintf (file, "\t{cau|addis} %s,%s,", reg_names[30], reg_names[0]);
-+ assemble_name (file, buf);
-+ asm_fprintf (file, "@ha\n");
-+ if (TARGET_NEW_MNEMONICS)
-+ {
-+ asm_fprintf (file, "\taddi %s,%s,", reg_names[30], reg_names[30]);
-+ assemble_name (file, buf);
-+ asm_fprintf (file, "@l\n");
-+ }
-+ else
-+ {
-+ asm_fprintf (file, "\tcal %s,", reg_names[30]);
-+ assemble_name (file, buf);
-+ asm_fprintf (file, "@l(%s)\n", reg_names[30]);
-+ }
-+ }
-+ else
-+ abort ();
-+
-+ #else /* !USING_SVR4_H */
-+ ASM_GENERATE_INTERNAL_LABEL (buf, "LCTOC", 0);
-+ asm_fprintf (file, "\t{l|lwz} %s,", reg_names[30]);
-+ assemble_name (file, buf);
-+ asm_fprintf (file, "(%s)\n", reg_names[2]);
-+ #endif /* USING_SVR4_H */
-+ }
-+
- /* Write function prologue. */
- void
-*************** output_prolog (file, size)
-*** 2770,2834 ****
- TOC_TABLE address into register 30. */
- if (TARGET_TOC && TARGET_MINIMAL_TOC && get_pool_size () != 0)
-! {
-! char buf[256];
-!
-! #ifdef USING_SVR4_H
-! if (TARGET_RELOCATABLE)
-! {
-! ASM_GENERATE_INTERNAL_LABEL (buf, "LCF", rs6000_pic_labelno);
-! fprintf (file, "\tbl ");
-! assemble_name (file, buf);
-! fprintf (file, "\n");
-!
-! ASM_OUTPUT_INTERNAL_LABEL (file, "LCF", rs6000_pic_labelno);
-! fprintf (file, "\tmflr %s\n", reg_names[30]);
-!
-! if (TARGET_POWERPC64)
-! fprintf (file, "\tld");
-! else if (TARGET_NEW_MNEMONICS)
-! fprintf (file, "\tlwz");
-! else
-! fprintf (file, "\tl");
-!
-! fprintf (file, " %s,(", reg_names[0]);
-! ASM_GENERATE_INTERNAL_LABEL (buf, "LCL", rs6000_pic_labelno);
-! assemble_name (file, buf);
-! fprintf (file, "-");
-! ASM_GENERATE_INTERNAL_LABEL (buf, "LCF", rs6000_pic_labelno);
-! assemble_name (file, buf);
-! fprintf (file, ")(%s)\n", reg_names[30]);
-! asm_fprintf (file, "\t{cax|add} %s,%s,%s\n",
-! reg_names[30], reg_names[0], reg_names[30]);
-! rs6000_pic_labelno++;
-! }
-! else if (!TARGET_64BIT)
-! {
-! ASM_GENERATE_INTERNAL_LABEL (buf, "LCTOC", 1);
-! asm_fprintf (file, "\t{cau|addis} %s,%s,", reg_names[30], reg_names[0]);
-! assemble_name (file, buf);
-! asm_fprintf (file, "@ha\n");
-! if (TARGET_NEW_MNEMONICS)
-! {
-! asm_fprintf (file, "\taddi %s,%s,", reg_names[30], reg_names[30]);
-! assemble_name (file, buf);
-! asm_fprintf (file, "@l\n");
-! }
-! else
-! {
-! asm_fprintf (file, "\tcal %s,", reg_names[30]);
-! assemble_name (file, buf);
-! asm_fprintf (file, "@l(%s)\n", reg_names[30]);
-! }
-! }
-! else
-! abort ();
-!
-! #else /* !USING_SVR4_H */
-! ASM_GENERATE_INTERNAL_LABEL (buf, "LCTOC", 0);
-! asm_fprintf (file, "\t{l|lwz} %s,", reg_names[30]);
-! assemble_name (file, buf);
-! asm_fprintf (file, "(%s)\n", reg_names[2]);
-! #endif /* USING_SVR4_H */
-! }
- }
-
---- 2838,2842 ----
- TOC_TABLE address into register 30. */
- if (TARGET_TOC && TARGET_MINIMAL_TOC && get_pool_size () != 0)
-! rs6000_output_load_toc_table (file);
- }
-
-diff -rcp2N gcc-2.7.2.3/config/rs6000/rs6000.md gcc-2.7.2.3.f.1/config/rs6000/rs6000.md
-*** gcc-2.7.2.3/config/rs6000/rs6000.md Sat Jun 29 16:27:24 1996
---- gcc-2.7.2.3.f.1/config/rs6000/rs6000.md Fri Aug 29 07:52:00 1997
-***************
-*** 4420,4423 ****
---- 4420,4424 ----
- }
-
-+ emit_insn (gen_rtx (CLOBBER, VOIDmode, operands[0]));
- emit_move_insn (gen_rtx (SUBREG, SImode, operands[0], WORDS_BIG_ENDIAN),
- GEN_INT (low));
-***************
-*** 5409,5412 ****
---- 5410,5425 ----
- DONE;
- }")
-+
-+ ;; If we have -mmiminal-toc, we need to reload r30 after a nonlocal goto.
-+
-+ (define_insn "nonlocal_goto_receiver"
-+ [(unspec_volatile [(const_int 0)] 1)]
-+ "TARGET_TOC && TARGET_MINIMAL_TOC && get_pool_size () != 0"
-+ "*
-+ {
-+ rs6000_output_load_toc_table (asm_out_file);
-+ return \"\";
-+ }"
-+ [(set_attr "type" "load")])
-
- ;; A function pointer is a pointer to a data area whose first word contains
-diff -rcp2N gcc-2.7.2.3/config/sparc/sol2.h gcc-2.7.2.3.f.1/config/sparc/sol2.h
-*** gcc-2.7.2.3/config/sparc/sol2.h Sat Aug 19 21:36:45 1995
---- gcc-2.7.2.3.f.1/config/sparc/sol2.h Sun Aug 10 22:45:53 1997
-*************** do { \
-*** 166,168 ****
- /* Define for support of TFmode long double and REAL_ARITHMETIC.
- Sparc ABI says that long double is 4 words. */
-! #define LONG_DOUBLE_TYPE_SIZE 128
---- 166,168 ----
- /* Define for support of TFmode long double and REAL_ARITHMETIC.
- Sparc ABI says that long double is 4 words. */
-! #define LONG_DOUBLE_TYPE_SIZE 64
-diff -rcp2N gcc-2.7.2.3/config/sparc/sparc.c gcc-2.7.2.3.f.1/config/sparc/sparc.c
-*** gcc-2.7.2.3/config/sparc/sparc.c Tue Sep 12 22:32:24 1995
---- gcc-2.7.2.3.f.1/config/sparc/sparc.c Sun Aug 10 22:46:03 1997
-*************** Boston, MA 02111-1307, USA. */
-*** 40,46 ****
- /* 1 if the caller has placed an "unimp" insn immediately after the call.
- This is used in v8 code when calling a function that returns a structure.
-! v9 doesn't have this. */
-
-! #define SKIP_CALLERS_UNIMP_P (!TARGET_V9 && current_function_returns_struct)
-
- /* Global variables for machine-dependent things. */
---- 40,51 ----
- /* 1 if the caller has placed an "unimp" insn immediately after the call.
- This is used in v8 code when calling a function that returns a structure.
-! v9 doesn't have this. Be careful to have this test be the same as that
-! used on the call. */
-
-! #define SKIP_CALLERS_UNIMP_P \
-! (!TARGET_V9 && current_function_returns_struct \
-! && ! integer_zerop (DECL_SIZE (DECL_RESULT (current_function_decl))) \
-! && (TREE_CODE (DECL_SIZE (DECL_RESULT (current_function_decl))) \
-! == INTEGER_CST))
-
- /* Global variables for machine-dependent things. */
-diff -rcp2N gcc-2.7.2.3/config/sparc/sparc.h gcc-2.7.2.3.f.1/config/sparc/sparc.h
-*** gcc-2.7.2.3/config/sparc/sparc.h Sat Jun 29 16:25:54 1996
---- gcc-2.7.2.3.f.1/config/sparc/sparc.h Sun Aug 10 22:46:13 1997
-*************** extern int leaf_function;
-*** 1526,1533 ****
-
- /* Output assembler code to FILE to increment profiler label # LABELNO
-! for profiling a function entry. */
-
- #define FUNCTION_PROFILER(FILE, LABELNO) \
- do { \
- fputs ("\tsethi %hi(", (FILE)); \
- ASM_OUTPUT_INTERNAL_LABELREF (FILE, "LP", LABELNO); \
---- 1526,1540 ----
-
- /* Output assembler code to FILE to increment profiler label # LABELNO
-! for profiling a function entry.
-!
-! 32 bit sparc uses %g2 as the STATIC_CHAIN_REGNUM which gets clobbered
-! during profiling so we need to save/restore it around the call to mcount.
-! We're guaranteed that a save has just been done, and we use the space
-! allocated for intreg/fpreg value passing. */
-
- #define FUNCTION_PROFILER(FILE, LABELNO) \
- do { \
-+ if (! TARGET_V9) \
-+ fputs ("\tst %g2,[%fp-4]\n", FILE); \
- fputs ("\tsethi %hi(", (FILE)); \
- ASM_OUTPUT_INTERNAL_LABELREF (FILE, "LP", LABELNO); \
-*************** extern int leaf_function;
-*** 1539,1542 ****
---- 1546,1551 ----
- ASM_OUTPUT_INTERNAL_LABELREF (FILE, "LP", LABELNO); \
- fputs ("),%o0,%o0\n", (FILE)); \
-+ if (! TARGET_V9) \
-+ fputs ("\tld [%fp-4],%g2\n", FILE); \
- } while (0)
-
-diff -rcp2N gcc-2.7.2.3/config/sparc/sparc.md gcc-2.7.2.3.f.1/config/sparc/sparc.md
-*** gcc-2.7.2.3/config/sparc/sparc.md Tue Sep 12 22:57:35 1995
---- gcc-2.7.2.3.f.1/config/sparc/sparc.md Sun Aug 10 22:46:27 1997
-***************
-*** 4799,4803 ****
- abort ();
-
-! if (GET_CODE (XEXP (operands[0], 0)) == LABEL_REF)
- {
- /* This is really a PIC sequence. We want to represent
---- 4799,4803 ----
- abort ();
-
-! if (GET_CODE (XEXP (operands[0], 0)) == LABEL_REF)
- {
- /* This is really a PIC sequence. We want to represent
-***************
-*** 4809,4824 ****
-
- if (! TARGET_V9 && INTVAL (operands[3]) != 0)
-! emit_jump_insn (gen_rtx (PARALLEL, VOIDmode, gen_rtvec (3,
-! gen_rtx (SET, VOIDmode, pc_rtx,
-! XEXP (operands[0], 0)),
-! operands[3],
-! gen_rtx (CLOBBER, VOIDmode,
-! gen_rtx (REG, Pmode, 15)))));
- else
-! emit_jump_insn (gen_rtx (PARALLEL, VOIDmode, gen_rtvec (2,
-! gen_rtx (SET, VOIDmode, pc_rtx,
-! XEXP (operands[0], 0)),
-! gen_rtx (CLOBBER, VOIDmode,
-! gen_rtx (REG, Pmode, 15)))));
- goto finish_call;
- }
---- 4809,4828 ----
-
- if (! TARGET_V9 && INTVAL (operands[3]) != 0)
-! emit_jump_insn
-! (gen_rtx (PARALLEL, VOIDmode,
-! gen_rtvec (3,
-! gen_rtx (SET, VOIDmode, pc_rtx,
-! XEXP (operands[0], 0)),
-! GEN_INT (INTVAL (operands[3]) & 0xfff),
-! gen_rtx (CLOBBER, VOIDmode,
-! gen_rtx (REG, Pmode, 15)))));
- else
-! emit_jump_insn
-! (gen_rtx (PARALLEL, VOIDmode,
-! gen_rtvec (2,
-! gen_rtx (SET, VOIDmode, pc_rtx,
-! XEXP (operands[0], 0)),
-! gen_rtx (CLOBBER, VOIDmode,
-! gen_rtx (REG, Pmode, 15)))));
- goto finish_call;
- }
-***************
-*** 4839,4852 ****
-
- if (! TARGET_V9 && INTVAL (operands[3]) != 0)
-! emit_call_insn (gen_rtx (PARALLEL, VOIDmode, gen_rtvec (3,
-! gen_rtx (CALL, VOIDmode, fn_rtx, nregs_rtx),
-! operands[3],
-! gen_rtx (CLOBBER, VOIDmode,
-! gen_rtx (REG, Pmode, 15)))));
- else
-! emit_call_insn (gen_rtx (PARALLEL, VOIDmode, gen_rtvec (2,
-! gen_rtx (CALL, VOIDmode, fn_rtx, nregs_rtx),
-! gen_rtx (CLOBBER, VOIDmode,
-! gen_rtx (REG, Pmode, 15)))));
-
- finish_call:
---- 4843,4858 ----
-
- if (! TARGET_V9 && INTVAL (operands[3]) != 0)
-! emit_call_insn
-! (gen_rtx (PARALLEL, VOIDmode,
-! gen_rtvec (3, gen_rtx (CALL, VOIDmode, fn_rtx, nregs_rtx),
-! GEN_INT (INTVAL (operands[3]) & 0xfff),
-! gen_rtx (CLOBBER, VOIDmode,
-! gen_rtx (REG, Pmode, 15)))));
- else
-! emit_call_insn
-! (gen_rtx (PARALLEL, VOIDmode,
-! gen_rtvec (2, gen_rtx (CALL, VOIDmode, fn_rtx, nregs_rtx),
-! gen_rtx (CLOBBER, VOIDmode,
-! gen_rtx (REG, Pmode, 15)))));
-
- finish_call:
-***************
-*** 4911,4915 ****
- (clobber (reg:SI 15))]
- ;;- Do not use operand 1 for most machines.
-! "! TARGET_V9 && GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) > 0"
- "call %a0,%1\;nop\;unimp %2"
- [(set_attr "type" "call_no_delay_slot")])
---- 4917,4921 ----
- (clobber (reg:SI 15))]
- ;;- Do not use operand 1 for most machines.
-! "! TARGET_V9 && GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) >= 0"
- "call %a0,%1\;nop\;unimp %2"
- [(set_attr "type" "call_no_delay_slot")])
-***************
-*** 4923,4927 ****
- (clobber (reg:SI 15))]
- ;;- Do not use operand 1 for most machines.
-! "! TARGET_V9 && GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) > 0"
- "call %a0,%1\;nop\;unimp %2"
- [(set_attr "type" "call_no_delay_slot")])
---- 4929,4933 ----
- (clobber (reg:SI 15))]
- ;;- Do not use operand 1 for most machines.
-! "! TARGET_V9 && GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) >= 0"
- "call %a0,%1\;nop\;unimp %2"
- [(set_attr "type" "call_no_delay_slot")])
-***************
-*** 5178,5184 ****
- emit_insn (gen_rtx (USE, VOIDmode, stack_pointer_rtx));
- emit_insn (gen_rtx (USE, VOIDmode, static_chain_rtx));
-- emit_insn (gen_rtx (USE, VOIDmode, gen_rtx (REG, Pmode, 8)));
- /* Return, restoring reg window and jumping to goto handler. */
- emit_insn (gen_goto_handler_and_restore ());
- DONE;
- }")
---- 5184,5190 ----
- emit_insn (gen_rtx (USE, VOIDmode, stack_pointer_rtx));
- emit_insn (gen_rtx (USE, VOIDmode, static_chain_rtx));
- /* Return, restoring reg window and jumping to goto handler. */
- emit_insn (gen_goto_handler_and_restore ());
-+ emit_barrier ();
- DONE;
- }")
-***************
-*** 5192,5200 ****
-
- (define_insn "goto_handler_and_restore"
-! [(unspec_volatile [(const_int 0)] 2)]
- ""
- "jmp %%o0+0\;restore"
- [(set_attr "type" "misc")
- (set_attr "length" "2")])
-
- ;; Special pattern for the FLUSH instruction.
---- 5198,5237 ----
-
- (define_insn "goto_handler_and_restore"
-! [(unspec_volatile [(const_int 0)] 2)
-! (use (reg:SI 8))]
- ""
- "jmp %%o0+0\;restore"
- [(set_attr "type" "misc")
- (set_attr "length" "2")])
-+
-+ ;; Pattern for use after a setjmp to store FP and the return register
-+ ;; into the stack area.
-+
-+ (define_expand "setjmp"
-+ [(const_int 0)]
-+ ""
-+ "
-+ {
-+ if (TARGET_V9)
-+ emit_insn (gen_setjmp_64 ());
-+ else
-+ emit_insn (gen_setjmp_32 ());
-+
-+ DONE;
-+ }")
-+
-+ (define_expand "setjmp_32"
-+ [(set (mem:SI (plus:SI (reg:SI 14) (const_int 56))) (match_dup 0))
-+ (set (mem:SI (plus:SI (reg:SI 14) (const_int 60))) (reg:SI 31))]
-+ ""
-+ "
-+ { operands[0] = frame_pointer_rtx; }")
-+
-+ (define_expand "setjmp_64"
-+ [(set (mem:DI (plus:DI (reg:DI 14) (const_int 112))) (match_dup 0))
-+ (set (mem:DI (plus:DI (reg:DI 14) (const_int 120))) (reg:DI 31))]
-+ ""
-+ "
-+ { operands[0] = frame_pointer_rtx; }")
-
- ;; Special pattern for the FLUSH instruction.
-diff -rcp2N gcc-2.7.2.3/config/x-linux gcc-2.7.2.3.f.1/config/x-linux
-*** gcc-2.7.2.3/config/x-linux Tue Mar 28 12:43:37 1995
---- gcc-2.7.2.3.f.1/config/x-linux Fri Jul 11 00:08:49 1997
-*************** BOOT_CFLAGS = -O $(CFLAGS) -Iinclude
-*** 13,14 ****
---- 13,17 ----
- # Don't run fixproto
- STMP_FIXPROTO =
-+
-+ # Don't install "assert.h" in gcc. We use the one in glibc.
-+ INSTALL_ASSERT_H =
-diff -rcp2N gcc-2.7.2.3/config/x-linux-aout gcc-2.7.2.3.f.1/config/x-linux-aout
-*** gcc-2.7.2.3/config/x-linux-aout Thu Jan 1 00:00:00 1970
---- gcc-2.7.2.3.f.1/config/x-linux-aout Fri Jul 11 00:08:49 1997
-***************
-*** 0 ****
---- 1,14 ----
-+ # It is defined in config/xm-linux.h.
-+ # X_CFLAGS = -DPOSIX
-+
-+ # The following is needed when compiling stages 2 and 3 because gcc's
-+ # limits.h must be picked up before /usr/include/limits.h. This is because
-+ # each does an #include_next of the other if the other hasn't been included.
-+ # /usr/include/limits.h loses if it gets found first because /usr/include is
-+ # at the end of the search order. When a new version of gcc is released,
-+ # gcc's limits.h hasn't been installed yet and hence isn't found.
-+
-+ BOOT_CFLAGS = -O $(CFLAGS) -Iinclude
-+
-+ # Don't run fixproto
-+ STMP_FIXPROTO =
-diff -rcp2N gcc-2.7.2.3/config.guess gcc-2.7.2.3.f.1/config.guess
-*** gcc-2.7.2.3/config.guess Sun Aug 31 09:39:43 1997
---- gcc-2.7.2.3.f.1/config.guess Sun Aug 31 09:21:10 1997
-*************** trap 'rm -f dummy.c dummy.o dummy; exit
-*** 52,63 ****
-
- case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
-- alpha:OSF1:V*:*)
-- # After 1.2, OSF1 uses "V1.3" for uname -r.
-- echo alpha-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^V//'`
-- exit 0 ;;
- alpha:OSF1:*:*)
- # 1.2 uses "1.2" for uname -r.
-! echo alpha-dec-osf${UNAME_RELEASE}
-! exit 0 ;;
- 21064:Windows_NT:50:3)
- echo alpha-dec-winnt3.5
---- 52,62 ----
-
- case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
- alpha:OSF1:*:*)
-+ # A Vn.n version is a released version.
-+ # A Tn.n version is a released field test version.
-+ # A Xn.n version is an unreleased experimental baselevel.
- # 1.2 uses "1.2" for uname -r.
-! echo alpha-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//'`
-! exit 0 ;;
- 21064:Windows_NT:50:3)
- echo alpha-dec-winnt3.5
-*************** case "${UNAME_MACHINE}:${UNAME_SYSTEM}:$
-*** 154,161 ****
- echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
- exit 0 ;;
-! ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
- echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id
- exit 0 ;; # Note that: echo "'`uname -s`'" gives 'AIX '
-! i[34]86:AIX:*:*)
- echo i386-ibm-aix
- exit 0 ;;
---- 153,160 ----
- echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
- exit 0 ;;
-! ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
- echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id
- exit 0 ;; # Note that: echo "'`uname -s`'" gives 'AIX '
-! i?86:AIX:*:*)
- echo i386-ibm-aix
- exit 0 ;;
-*************** EOF
-*** 220,224 ****
- 9000/31? ) HP_ARCH=m68000 ;;
- 9000/[34]?? ) HP_ARCH=m68k ;;
-! 9000/7?? | 9000/8?[79] ) HP_ARCH=hppa1.1 ;;
- 9000/8?? ) HP_ARCH=hppa1.0 ;;
- esac
---- 219,223 ----
- 9000/31? ) HP_ARCH=m68000 ;;
- 9000/[34]?? ) HP_ARCH=m68k ;;
-! 9000/7?? | 9000/8?[1679] ) HP_ARCH=hppa1.1 ;;
- 9000/8?? ) HP_ARCH=hppa1.0 ;;
- esac
-*************** EOF
-*** 304,308 ****
- echo m68k-hp-netbsd${UNAME_RELEASE}
- exit 0 ;;
-! i[34]86:BSD/386:*:* | *:BSD/OS:*:*)
- echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
- exit 0 ;;
---- 303,307 ----
- echo m68k-hp-netbsd${UNAME_RELEASE}
- exit 0 ;;
-! i?86:BSD/386:*:* | *:BSD/OS:*:*)
- echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
- exit 0 ;;
-*************** EOF
-*** 314,318 ****
- exit 0 ;;
- *:GNU:*:*)
-! echo `echo ${UNAME_MACHINE}|sed -e 's,/.*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
- exit 0 ;;
- *:Linux:*:*)
---- 313,317 ----
- exit 0 ;;
- *:GNU:*:*)
-! echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
- exit 0 ;;
- *:Linux:*:*)
-*************** EOF
-*** 320,330 ****
- # first see if it will tell us.
- ld_help_string=`ld --help 2>&1`
-! # if echo $ld_help_string | grep >/dev/null 2>&1 "supported emulations: elf_i[345]86"; then
- # echo "${UNAME_MACHINE}-unknown-linux" ; exit 0
-! if echo $ld_help_string | grep >/dev/null 2>&1 "supported emulations: i[345]86linux"; then
- echo "${UNAME_MACHINE}-unknown-linuxaout" ; exit 0
-! elif echo $ld_help_string | grep >/dev/null 2>&1 "supported emulations: i[345]86coff"; then
- echo "${UNAME_MACHINE}-unknown-linuxcoff" ; exit 0
- elif test "${UNAME_MACHINE}" = "alpha" ; then
- echo alpha-unknown-linux ; exit 0
- else
---- 319,333 ----
- # first see if it will tell us.
- ld_help_string=`ld --help 2>&1`
-! # if echo $ld_help_string | grep >/dev/null 2>&1 "supported emulations: elf_i?86"; then
- # echo "${UNAME_MACHINE}-unknown-linux" ; exit 0
-! if echo $ld_help_string | grep >/dev/null 2>&1 "supported emulations: i?86linux"; then
- echo "${UNAME_MACHINE}-unknown-linuxaout" ; exit 0
-! elif echo $ld_help_string | grep >/dev/null 2>&1 "supported emulations: i?86coff"; then
- echo "${UNAME_MACHINE}-unknown-linuxcoff" ; exit 0
- elif test "${UNAME_MACHINE}" = "alpha" ; then
-+ as_version_string=`as --version 2>&1`
-+ if echo $as_version_string | grep >/dev/null 2>&1 " version 2.6 "; then
-+ echo alpha-unknown-linuxoldas ; exit 0
-+ fi
- echo alpha-unknown-linux ; exit 0
- else
-*************** EOF
-*** 362,369 ****
- # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. earlier versions
- # are messed up and put the nodename in both sysname and nodename.
-! i[34]86:DYNIX/ptx:4*:*)
- echo i386-sequent-sysv4
- exit 0 ;;
-! i[34]86:*:4.*:* | i[34]86:SYSTEM_V:4.*:*)
- if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
- echo ${UNAME_MACHINE}-univel-sysv${UNAME_RELEASE}
---- 365,372 ----
- # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. earlier versions
- # are messed up and put the nodename in both sysname and nodename.
-! i?86:DYNIX/ptx:4*:*)
- echo i386-sequent-sysv4
- exit 0 ;;
-! i?86:*:4.*:* | i?86:SYSTEM_V:4.*:*)
- if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
- echo ${UNAME_MACHINE}-univel-sysv${UNAME_RELEASE}
-*************** EOF
-*** 372,376 ****
- fi
- exit 0 ;;
-! i[34]86:*:3.2:*)
- if test -f /usr/options/cb.name; then
- UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
---- 375,379 ----
- fi
- exit 0 ;;
-! i?86:*:3.2:*)
- if test -f /usr/options/cb.name; then
- UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
-*************** EOF
-*** 379,382 ****
---- 382,387 ----
- UNAME_REL=`(/bin/uname -X|egrep Release|sed -e 's/.*= //')`
- (/bin/uname -X|egrep i80486 >/dev/null) && UNAME_MACHINE=i486
-+ (/bin/uname -X|egrep '^Machine.*Pentium' >/dev/null) \
-+ && UNAME_MACHINE=i586
- echo ${UNAME_MACHINE}-unknown-sco$UNAME_REL
- else
-*************** EOF
-*** 401,405 ****
- echo m68010-convergent-sysv
- exit 0 ;;
-! M680[234]0:*:R3V[567]*:*)
- test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;;
- 3[34]??:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0)
---- 406,410 ----
- echo m68010-convergent-sysv
- exit 0 ;;
-! M68*:*:R3V[567]*:*)
- test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;;
- 3[34]??:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0)
-*************** EOF
-*** 409,413 ****
- uname -p 2>/dev/null | grep 86 >/dev/null \
- && echo i486-ncr-sysv4 && exit 0 ;;
-! m680[234]0:LynxOS:2.[23]*:*)
- echo m68k-lynx-lynxos${UNAME_RELEASE}
- exit 0 ;;
---- 414,418 ----
- uname -p 2>/dev/null | grep 86 >/dev/null \
- && echo i486-ncr-sysv4 && exit 0 ;;
-! m68*:LynxOS:2.*:*)
- echo m68k-lynx-lynxos${UNAME_RELEASE}
- exit 0 ;;
-*************** EOF
-*** 415,425 ****
- echo m68k-atari-sysv4
- exit 0 ;;
-! i[34]86:LynxOS:2.[23]*:*)
- echo i386-lynx-lynxos${UNAME_RELEASE}
- exit 0 ;;
-! TSUNAMI:LynxOS:2.[23]*:*)
- echo sparc-lynx-lynxos${UNAME_RELEASE}
- exit 0 ;;
-! rs6000:LynxOS:2.[23]*:*)
- echo rs6000-lynx-lynxos${UNAME_RELEASE}
- exit 0 ;;
---- 420,430 ----
- echo m68k-atari-sysv4
- exit 0 ;;
-! i?86:LynxOS:2.*:*)
- echo i386-lynx-lynxos${UNAME_RELEASE}
- exit 0 ;;
-! TSUNAMI:LynxOS:2.*:*)
- echo sparc-lynx-lynxos${UNAME_RELEASE}
- exit 0 ;;
-! rs6000:LynxOS:2.*:* | PowerPC:LynxOS:2.*:*)
- echo rs6000-lynx-lynxos${UNAME_RELEASE}
- exit 0 ;;
-*************** main ()
-*** 478,482 ****
- int version;
- version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
-! printf ("%s-next-nextstep%s\n", __ARCHITECTURE__, version==2 ? "2" : "3");
- exit (0);
- #endif
---- 483,487 ----
- int version;
- version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
-! printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
- exit (0);
- #endif
-diff -rcp2N gcc-2.7.2.3/configure gcc-2.7.2.3.f.1/configure
-*** gcc-2.7.2.3/configure Sun Aug 31 09:39:44 1997
---- gcc-2.7.2.3.f.1/configure Sun Aug 31 09:35:10 1997
-*************** exec_prefix='$(prefix)'
-*** 82,85 ****
---- 82,86 ----
- # The default g++ include directory is $(libdir)/g++-include.
- gxx_include_dir='$(libdir)/g++-include'
-+ #gxx_include_dir='$(exec_prefix)/include/g++'
-
- # Default --program-transform-name to nothing.
-*************** for machine in $canon_build $canon_host
-*** 548,551 ****
---- 549,578 ----
- use_collect2=yes
- ;;
-+ alpha-*-linux*oldas*)
-+ tm_file=alpha/linux.h
-+ tmake_file=alpha/t-linux
-+ xmake_file=alpha/x-linux
-+ fixincludes=Makefile.in
-+ xm_file=alpha/xm-linux.h
-+ gas=yes gnu_ld=yes
-+ ;;
-+ alpha-*-linux*ecoff*)
-+ tm_file=alpha/linux.h
-+ tmake_file=alpha/t-linux
-+ xmake_file=alpha/x-linux
-+ fixincludes=Makefile.in
-+ xm_file=alpha/xm-linux.h
-+ extra_parts="crtbegin.o crtbeginS.o crtend.o crtendS.o"
-+ gas=yes gnu_ld=yes
-+ ;;
-+ alpha-*-linux*)
-+ tm_file=alpha/elf.h
-+ tmake_file=alpha/t-linux
-+ xmake_file=alpha/x-linux
-+ fixincludes=Makefile.in
-+ xm_file=alpha/xm-linux.h
-+ extra_parts="crtbegin.o crtbeginS.o crtend.o crtendS.o"
-+ gas=yes gnu_ld=yes
-+ ;;
- alpha-dec-osf[23456789]*)
- tm_file=alpha/osf2.h
-*************** for machine in $canon_build $canon_host
-*** 982,986 ****
- cpu_type=i386 # with a.out format using pre BFD linkers
- xm_file=i386/xm-linux.h
-! xmake_file=x-linux
- tm_file=i386/linux-oldld.h
- fixincludes=Makefile.in # The headers are ok already.
---- 1009,1013 ----
- cpu_type=i386 # with a.out format using pre BFD linkers
- xm_file=i386/xm-linux.h
-! xmake_file=x-linux-aout
- tm_file=i386/linux-oldld.h
- fixincludes=Makefile.in # The headers are ok already.
-*************** for machine in $canon_build $canon_host
-*** 991,995 ****
- cpu_type=i386 # with a.out format
- xm_file=i386/xm-linux.h
-! xmake_file=x-linux
- tm_file=i386/linux-aout.h
- fixincludes=Makefile.in # The headers are ok already.
---- 1018,1022 ----
- cpu_type=i386 # with a.out format
- xm_file=i386/xm-linux.h
-! xmake_file=x-linux-aout
- tm_file=i386/linux-aout.h
- fixincludes=Makefile.in # The headers are ok already.
-*************** for machine in $canon_build $canon_host
-*** 1663,1666 ****
---- 1690,1714 ----
- use_collect2=yes
- ;;
-+ mips-sni-sysv4)
-+ if [ x$gas = xyes ]
-+ then
-+ if [ x$stabs = xyes ]
-+ then
-+ tm_file=mips/iris5gdb.h
-+ else
-+ tm_file=mips/sni-gas.h
-+ fi
-+ else
-+ tm_file=mips/sni-svr4.h
-+ fi
-+ xm_file=mips/xm-sysv.h
-+ xmake_file=mips/x-sni-svr4
-+ tmake_file=mips/t-mips-gas
-+ if [ x$gnu_ld != xyes ]
-+ then
-+ use_collect2=yes
-+ fi
-+ broken_install=yes
-+ ;;
- mips-sgi-irix5*) # SGI System V.4., IRIX 5
- if [ x$gas = xyes ]
-*************** MAYBE_TARGET_DEFAULT = -DTARGET_CPU_DEFA
-*** 2995,2999 ****
- rm Makefile.sed
- echo 's| ||' > Makefile.sed
-! echo "s|^target=.*$|target=${target}|" >> Makefile.sed
- echo "s|^xmake_file=.*$|xmake_file=${dep_host_xmake_file}|" >> Makefile.sed
- echo "s|^tmake_file=.*$|tmake_file=${dep_tmake_file}|" >> Makefile.sed
---- 3043,3047 ----
- rm Makefile.sed
- echo 's| ||' > Makefile.sed
-! echo "s|^target=.*$|target=${canon_target}|" >> Makefile.sed
- echo "s|^xmake_file=.*$|xmake_file=${dep_host_xmake_file}|" >> Makefile.sed
- echo "s|^tmake_file=.*$|tmake_file=${dep_tmake_file}|" >> Makefile.sed
-diff -rcp2N gcc-2.7.2.3/cse.c gcc-2.7.2.3.f.1/cse.c
-*** gcc-2.7.2.3/cse.c Sun Aug 31 09:39:46 1997
---- gcc-2.7.2.3.f.1/cse.c Sun Aug 31 09:21:14 1997
-*************** static struct table_elt *last_jump_equiv
-*** 520,544 ****
- static int constant_pool_entries_cost;
-
-- /* Bits describing what kind of values in memory must be invalidated
-- for a particular instruction. If all three bits are zero,
-- no memory refs need to be invalidated. Each bit is more powerful
-- than the preceding ones, and if a bit is set then the preceding
-- bits are also set.
--
-- Here is how the bits are set:
-- Pushing onto the stack invalidates only the stack pointer,
-- writing at a fixed address invalidates only variable addresses,
-- writing in a structure element at variable address
-- invalidates all but scalar variables,
-- and writing in anything else at variable address invalidates everything. */
--
-- struct write_data
-- {
-- int sp : 1; /* Invalidate stack pointer. */
-- int var : 1; /* Invalidate variable addresses. */
-- int nonscalar : 1; /* Invalidate all but scalar variables. */
-- int all : 1; /* Invalidate all memory refs. */
-- };
--
- /* Define maximum length of a branch path. */
-
---- 520,523 ----
-*************** static void merge_equiv_classes PROTO((s
-*** 626,632 ****
- struct table_elt *));
- static void invalidate PROTO((rtx, enum machine_mode));
- static void remove_invalid_refs PROTO((int));
- static void rehash_using_reg PROTO((rtx));
-! static void invalidate_memory PROTO((struct write_data *));
- static void invalidate_for_call PROTO((void));
- static rtx use_related_value PROTO((rtx, struct table_elt *));
---- 605,612 ----
- struct table_elt *));
- static void invalidate PROTO((rtx, enum machine_mode));
-+ static int cse_rtx_varies_p PROTO((rtx));
- static void remove_invalid_refs PROTO((int));
- static void rehash_using_reg PROTO((rtx));
-! static void invalidate_memory PROTO((void));
- static void invalidate_for_call PROTO((void));
- static rtx use_related_value PROTO((rtx, struct table_elt *));
-*************** static void set_nonvarying_address_compo
-*** 638,644 ****
- HOST_WIDE_INT *));
- static int refers_to_p PROTO((rtx, rtx));
-- static int refers_to_mem_p PROTO((rtx, rtx, HOST_WIDE_INT,
-- HOST_WIDE_INT));
-- static int cse_rtx_addr_varies_p PROTO((rtx));
- static rtx canon_reg PROTO((rtx, rtx));
- static void find_best_addr PROTO((rtx, rtx *));
---- 618,621 ----
-*************** static void record_jump_cond PROTO((enum
-*** 656,661 ****
- rtx, rtx, int));
- static void cse_insn PROTO((rtx, int));
-! static void note_mem_written PROTO((rtx, struct write_data *));
-! static void invalidate_from_clobbers PROTO((struct write_data *, rtx));
- static rtx cse_process_notes PROTO((rtx, rtx));
- static void cse_around_loop PROTO((rtx));
---- 633,638 ----
- rtx, rtx, int));
- static void cse_insn PROTO((rtx, int));
-! static int note_mem_written PROTO((rtx));
-! static void invalidate_from_clobbers PROTO((rtx));
- static rtx cse_process_notes PROTO((rtx, rtx));
- static void cse_around_loop PROTO((rtx));
-*************** invalidate (x, full_mode)
-*** 1512,1517 ****
- register int i;
- register struct table_elt *p;
-- rtx base;
-- HOST_WIDE_INT start, end;
-
- /* If X is a register, dependencies on its contents
---- 1489,1492 ----
-*************** invalidate (x, full_mode)
-*** 1605,1611 ****
- full_mode = GET_MODE (x);
-
-- set_nonvarying_address_components (XEXP (x, 0), GET_MODE_SIZE (full_mode),
-- &base, &start, &end);
--
- for (i = 0; i < NBUCKETS; i++)
- {
---- 1580,1583 ----
-*************** invalidate (x, full_mode)
-*** 1614,1618 ****
- {
- next = p->next_same_hash;
-! if (refers_to_mem_p (p->exp, base, start, end))
- remove_from_table (p, i);
- }
---- 1586,1594 ----
- {
- next = p->next_same_hash;
-! /* Invalidate ASM_OPERANDS which reference memory (this is easier
-! than checking all the aliases). */
-! if (p->in_memory
-! && (GET_CODE (p->exp) != MEM
-! || true_dependence (x, full_mode, p->exp, cse_rtx_varies_p)))
- remove_from_table (p, i);
- }
-*************** rehash_using_reg (x)
-*** 1695,1722 ****
- }
-
-- /* Remove from the hash table all expressions that reference memory,
-- or some of them as specified by *WRITES. */
--
-- static void
-- invalidate_memory (writes)
-- struct write_data *writes;
-- {
-- register int i;
-- register struct table_elt *p, *next;
-- int all = writes->all;
-- int nonscalar = writes->nonscalar;
--
-- for (i = 0; i < NBUCKETS; i++)
-- for (p = table[i]; p; p = next)
-- {
-- next = p->next_same_hash;
-- if (p->in_memory
-- && (all
-- || (nonscalar && p->in_struct)
-- || cse_rtx_addr_varies_p (p->exp)))
-- remove_from_table (p, i);
-- }
-- }
--
- /* Remove from the hash table any expression that is a call-clobbered
- register. Also update their TICK values. */
---- 1671,1674 ----
-*************** invalidate_for_call ()
-*** 1756,1759 ****
---- 1708,1717 ----
- next = p->next_same_hash;
-
-+ if (p->in_memory)
-+ {
-+ remove_from_table (p, hash);
-+ continue;
-+ }
-+
- if (GET_CODE (p->exp) != REG
- || REGNO (p->exp) >= FIRST_PSEUDO_REGISTER)
-*************** canon_hash (x, mode)
-*** 1946,1950 ****
- return 0;
- }
-! if (! RTX_UNCHANGING_P (x))
- {
- hash_arg_in_memory = 1;
---- 1904,1908 ----
- return 0;
- }
-! if (! RTX_UNCHANGING_P (x) || FIXED_BASE_PLUS_P (XEXP (x, 0)))
- {
- hash_arg_in_memory = 1;
-*************** set_nonvarying_address_components (addr,
-*** 2395,2477 ****
- }
-
-! /* Return 1 iff any subexpression of X refers to memory
-! at an address of BASE plus some offset
-! such that any of the bytes' offsets fall between START (inclusive)
-! and END (exclusive).
-!
-! The value is undefined if X is a varying address (as determined by
-! cse_rtx_addr_varies_p). This function is not used in such cases.
-!
-! When used in the cse pass, `qty_const' is nonzero, and it is used
-! to treat an address that is a register with a known constant value
-! as if it were that constant value.
-! In the loop pass, `qty_const' is zero, so this is not done. */
-!
-! static int
-! refers_to_mem_p (x, base, start, end)
-! rtx x, base;
-! HOST_WIDE_INT start, end;
-! {
-! register HOST_WIDE_INT i;
-! register enum rtx_code code;
-! register char *fmt;
-!
-! repeat:
-! if (x == 0)
-! return 0;
-!
-! code = GET_CODE (x);
-! if (code == MEM)
-! {
-! register rtx addr = XEXP (x, 0); /* Get the address. */
-! rtx mybase;
-! HOST_WIDE_INT mystart, myend;
-!
-! set_nonvarying_address_components (addr, GET_MODE_SIZE (GET_MODE (x)),
-! &mybase, &mystart, &myend);
-!
-!
-! /* refers_to_mem_p is never called with varying addresses.
-! If the base addresses are not equal, there is no chance
-! of the memory addresses conflicting. */
-! if (! rtx_equal_p (mybase, base))
-! return 0;
-!
-! return myend > start && mystart < end;
-! }
-!
-! /* X does not match, so try its subexpressions. */
-!
-! fmt = GET_RTX_FORMAT (code);
-! for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
-! if (fmt[i] == 'e')
-! {
-! if (i == 0)
-! {
-! x = XEXP (x, 0);
-! goto repeat;
-! }
-! else
-! if (refers_to_mem_p (XEXP (x, i), base, start, end))
-! return 1;
-! }
-! else if (fmt[i] == 'E')
-! {
-! int j;
-! for (j = 0; j < XVECLEN (x, i); j++)
-! if (refers_to_mem_p (XVECEXP (x, i, j), base, start, end))
-! return 1;
-! }
-!
-! return 0;
-! }
-!
-! /* Nonzero if X refers to memory at a varying address;
- except that a register which has at the moment a known constant value
- isn't considered variable. */
-
- static int
-! cse_rtx_addr_varies_p (x)
-! rtx x;
- {
- /* We need not check for X and the equivalence class being of the same
---- 2353,2363 ----
- }
-
-! /* Nonzero if X, a memory address, refers to a varying address;
- except that a register which has at the moment a known constant value
- isn't considered variable. */
-
- static int
-! cse_rtx_varies_p (x)
-! register rtx x;
- {
- /* We need not check for X and the equivalence class being of the same
-*************** cse_rtx_addr_varies_p (x)
-*** 2479,2497 ****
- doesn't vary in any mode. */
-
-! if (GET_CODE (x) == MEM
-! && GET_CODE (XEXP (x, 0)) == REG
-! && REGNO_QTY_VALID_P (REGNO (XEXP (x, 0)))
-! && GET_MODE (XEXP (x, 0)) == qty_mode[reg_qty[REGNO (XEXP (x, 0))]]
-! && qty_const[reg_qty[REGNO (XEXP (x, 0))]] != 0)
- return 0;
-
-! if (GET_CODE (x) == MEM
-! && GET_CODE (XEXP (x, 0)) == PLUS
-! && GET_CODE (XEXP (XEXP (x, 0), 1)) == CONST_INT
-! && GET_CODE (XEXP (XEXP (x, 0), 0)) == REG
-! && REGNO_QTY_VALID_P (REGNO (XEXP (XEXP (x, 0), 0)))
-! && (GET_MODE (XEXP (XEXP (x, 0), 0))
-! == qty_mode[reg_qty[REGNO (XEXP (XEXP (x, 0), 0))]])
-! && qty_const[reg_qty[REGNO (XEXP (XEXP (x, 0), 0))]])
- return 0;
-
---- 2365,2381 ----
- doesn't vary in any mode. */
-
-! if (GET_CODE (x) == REG
-! && REGNO_QTY_VALID_P (REGNO (x))
-! && GET_MODE (x) == qty_mode[reg_qty[REGNO (x)]]
-! && qty_const[reg_qty[REGNO (x)]] != 0)
- return 0;
-
-! if (GET_CODE (x) == PLUS
-! && GET_CODE (XEXP (x, 1)) == CONST_INT
-! && GET_CODE (XEXP (x, 0)) == REG
-! && REGNO_QTY_VALID_P (REGNO (XEXP (x, 0)))
-! && (GET_MODE (XEXP (x, 0))
-! == qty_mode[reg_qty[REGNO (XEXP (x, 0))]])
-! && qty_const[reg_qty[REGNO (XEXP (x, 0))]])
- return 0;
-
-*************** cse_rtx_addr_varies_p (x)
-*** 2501,2519 ****
- load fp minus a constant into a register, then a MEM which is the
- sum of the two `constant' registers. */
-! if (GET_CODE (x) == MEM
-! && GET_CODE (XEXP (x, 0)) == PLUS
-! && GET_CODE (XEXP (XEXP (x, 0), 0)) == REG
-! && GET_CODE (XEXP (XEXP (x, 0), 1)) == REG
-! && REGNO_QTY_VALID_P (REGNO (XEXP (XEXP (x, 0), 0)))
-! && (GET_MODE (XEXP (XEXP (x, 0), 0))
-! == qty_mode[reg_qty[REGNO (XEXP (XEXP (x, 0), 0))]])
-! && qty_const[reg_qty[REGNO (XEXP (XEXP (x, 0), 0))]]
-! && REGNO_QTY_VALID_P (REGNO (XEXP (XEXP (x, 0), 1)))
-! && (GET_MODE (XEXP (XEXP (x, 0), 1))
-! == qty_mode[reg_qty[REGNO (XEXP (XEXP (x, 0), 1))]])
-! && qty_const[reg_qty[REGNO (XEXP (XEXP (x, 0), 1))]])
- return 0;
-
-! return rtx_addr_varies_p (x);
- }
-
---- 2385,2402 ----
- load fp minus a constant into a register, then a MEM which is the
- sum of the two `constant' registers. */
-! if (GET_CODE (x) == PLUS
-! && GET_CODE (XEXP (x, 0)) == REG
-! && GET_CODE (XEXP (x, 1)) == REG
-! && REGNO_QTY_VALID_P (REGNO (XEXP (x, 0)))
-! && (GET_MODE (XEXP (x, 0))
-! == qty_mode[reg_qty[REGNO (XEXP (x, 0))]])
-! && qty_const[reg_qty[REGNO (XEXP (x, 0))]]
-! && REGNO_QTY_VALID_P (REGNO (XEXP (x, 1)))
-! && (GET_MODE (XEXP (x, 1))
-! == qty_mode[reg_qty[REGNO (XEXP (x, 1))]])
-! && qty_const[reg_qty[REGNO (XEXP (x, 1))]])
- return 0;
-
-! return rtx_varies_p (x);
- }
-
-*************** fold_rtx (x, insn)
-*** 5542,5550 ****
- CONST_INT, see if we can find a register equivalent to the
- positive constant. Make a MINUS if so. Don't do this for
-! a negative constant since we might then alternate between
- chosing positive and negative constants. Having the positive
-! constant previously-used is the more common case. */
-! if (const_arg1 && GET_CODE (const_arg1) == CONST_INT
-! && INTVAL (const_arg1) < 0 && GET_CODE (folded_arg1) == REG)
- {
- rtx new_const = GEN_INT (- INTVAL (const_arg1));
---- 5425,5439 ----
- CONST_INT, see if we can find a register equivalent to the
- positive constant. Make a MINUS if so. Don't do this for
-! a non-negative constant since we might then alternate between
- chosing positive and negative constants. Having the positive
-! constant previously-used is the more common case. Be sure
-! the resulting constant is non-negative; if const_arg1 were
-! the smallest negative number this would overflow: depending
-! on the mode, this would either just be the same value (and
-! hence not save anything) or be incorrect. */
-! if (const_arg1 != 0 && GET_CODE (const_arg1) == CONST_INT
-! && INTVAL (const_arg1) < 0
-! && - INTVAL (const_arg1) >= 0
-! && GET_CODE (folded_arg1) == REG)
- {
- rtx new_const = GEN_INT (- INTVAL (const_arg1));
-*************** cse_insn (insn, in_libcall_block)
-*** 6105,6110 ****
- rtx this_insn_cc0 = 0;
- enum machine_mode this_insn_cc0_mode;
-- struct write_data writes_memory;
-- static struct write_data init = {0, 0, 0, 0};
-
- rtx src_eqv = 0;
---- 5994,5997 ----
-*************** cse_insn (insn, in_libcall_block)
-*** 6118,6122 ****
-
- this_insn = insn;
-- writes_memory = init;
-
- /* Find all the SETs and CLOBBERs in this instruction.
---- 6005,6008 ----
-*************** cse_insn (insn, in_libcall_block)
-*** 6220,6232 ****
- else if (GET_CODE (y) == CLOBBER)
- {
-! /* If we clobber memory, take note of that,
-! and canon the address.
- This does nothing when a register is clobbered
- because we have already invalidated the reg. */
- if (GET_CODE (XEXP (y, 0)) == MEM)
-! {
-! canon_reg (XEXP (y, 0), NULL_RTX);
-! note_mem_written (XEXP (y, 0), &writes_memory);
-! }
- }
- else if (GET_CODE (y) == USE
---- 6106,6114 ----
- else if (GET_CODE (y) == CLOBBER)
- {
-! /* If we clobber memory, canon the address.
- This does nothing when a register is clobbered
- because we have already invalidated the reg. */
- if (GET_CODE (XEXP (y, 0)) == MEM)
-! canon_reg (XEXP (y, 0), NULL_RTX);
- }
- else if (GET_CODE (y) == USE
-*************** cse_insn (insn, in_libcall_block)
-*** 6247,6254 ****
- {
- if (GET_CODE (XEXP (x, 0)) == MEM)
-! {
-! canon_reg (XEXP (x, 0), NULL_RTX);
-! note_mem_written (XEXP (x, 0), &writes_memory);
-! }
- }
-
---- 6129,6133 ----
- {
- if (GET_CODE (XEXP (x, 0)) == MEM)
-! canon_reg (XEXP (x, 0), NULL_RTX);
- }
-
-*************** cse_insn (insn, in_libcall_block)
-*** 6430,6433 ****
---- 6309,6327 ----
- sets[i].src_in_struct = hash_arg_in_struct;
-
-+ /* If SRC is a MEM, there is a REG_EQUIV note for SRC, and DEST is
-+ a pseudo that is set more than once, do not record SRC. Using
-+ SRC as a replacement for anything else will be incorrect in that
-+ situation. Note that this usually occurs only for stack slots,
-+ in which case all the RTL would be refering to SRC, so we don't
-+ lose any optimization opportunities by not having SRC in the
-+ hash table. */
-+
-+ if (GET_CODE (src) == MEM
-+ && find_reg_note (insn, REG_EQUIV, src) != 0
-+ && GET_CODE (dest) == REG
-+ && REGNO (dest) >= FIRST_PSEUDO_REGISTER
-+ && reg_n_sets[REGNO (dest)] != 1)
-+ sets[i].src_volatile = 1;
-+
- #if 0
- /* It is no longer clear why we used to do this, but it doesn't
-*************** cse_insn (insn, in_libcall_block)
-*** 6674,6678 ****
- }
- #endif /* LOAD_EXTEND_OP */
-!
- if (src == src_folded)
- src_folded = 0;
---- 6568,6572 ----
- }
- #endif /* LOAD_EXTEND_OP */
-!
- if (src == src_folded)
- src_folded = 0;
-*************** cse_insn (insn, in_libcall_block)
-*** 6860,6864 ****
- || (GET_CODE (src_folded) != MEM
- && ! src_folded_force_flag))
-! && GET_MODE_CLASS (mode) != MODE_CC)
- {
- src_folded_force_flag = 1;
---- 6754,6759 ----
- || (GET_CODE (src_folded) != MEM
- && ! src_folded_force_flag))
-! && GET_MODE_CLASS (mode) != MODE_CC
-! && mode != VOIDmode)
- {
- src_folded_force_flag = 1;
-*************** cse_insn (insn, in_libcall_block)
-*** 6983,6993 ****
- if (GET_CODE (dest) == MEM)
- {
- dest = fold_rtx (dest, insn);
--
-- /* Decide whether we invalidate everything in memory,
-- or just things at non-fixed places.
-- Writing a large aggregate must invalidate everything
-- because we don't know how long it is. */
-- note_mem_written (dest, &writes_memory);
- }
-
---- 6878,6890 ----
- if (GET_CODE (dest) == MEM)
- {
-+ #ifdef PUSH_ROUNDING
-+ /* Stack pushes invalidate the stack pointer. */
-+ rtx addr = XEXP (dest, 0);
-+ if ((GET_CODE (addr) == PRE_DEC || GET_CODE (addr) == PRE_INC
-+ || GET_CODE (addr) == POST_DEC || GET_CODE (addr) == POST_INC)
-+ && XEXP (addr, 0) == stack_pointer_rtx)
-+ invalidate (stack_pointer_rtx, Pmode);
-+ #endif
- dest = fold_rtx (dest, insn);
- }
-
-*************** cse_insn (insn, in_libcall_block)
-*** 7234,7238 ****
- sets[i].src_elt = src_eqv_elt;
-
-! invalidate_from_clobbers (&writes_memory, x);
-
- /* Some registers are invalidated by subroutine calls. Memory is
---- 7131,7135 ----
- sets[i].src_elt = src_eqv_elt;
-
-! invalidate_from_clobbers (x);
-
- /* Some registers are invalidated by subroutine calls. Memory is
-*************** cse_insn (insn, in_libcall_block)
-*** 7241,7248 ****
- if (GET_CODE (insn) == CALL_INSN)
- {
-- static struct write_data everything = {0, 1, 1, 1};
--
- if (! CONST_CALL_P (insn))
-! invalidate_memory (&everything);
- invalidate_for_call ();
- }
---- 7138,7143 ----
- if (GET_CODE (insn) == CALL_INSN)
- {
- if (! CONST_CALL_P (insn))
-! invalidate_memory ();
- invalidate_for_call ();
- }
-*************** cse_insn (insn, in_libcall_block)
-*** 7265,7270 ****
- we have just done an invalidate_memory that covers even those. */
- if (GET_CODE (dest) == REG || GET_CODE (dest) == SUBREG
-! || (GET_CODE (dest) == MEM && ! writes_memory.all
-! && ! cse_rtx_addr_varies_p (dest)))
- invalidate (dest, VOIDmode);
- else if (GET_CODE (dest) == STRICT_LOW_PART
---- 7160,7164 ----
- we have just done an invalidate_memory that covers even those. */
- if (GET_CODE (dest) == REG || GET_CODE (dest) == SUBREG
-! || GET_CODE (dest) == MEM)
- invalidate (dest, VOIDmode);
- else if (GET_CODE (dest) == STRICT_LOW_PART
-*************** cse_insn (insn, in_libcall_block)
-*** 7359,7363 ****
- sets[i].dest_hash, GET_MODE (dest));
- elt->in_memory = (GET_CODE (sets[i].inner_dest) == MEM
-! && ! RTX_UNCHANGING_P (sets[i].inner_dest));
-
- if (elt->in_memory)
---- 7253,7259 ----
- sets[i].dest_hash, GET_MODE (dest));
- elt->in_memory = (GET_CODE (sets[i].inner_dest) == MEM
-! && (! RTX_UNCHANGING_P (sets[i].inner_dest)
-! || FIXED_BASE_PLUS_P (XEXP (sets[i].inner_dest,
-! 0))));
-
- if (elt->in_memory)
-*************** cse_insn (insn, in_libcall_block)
-*** 7532,7580 ****
- }
-
-- /* Store 1 in *WRITES_PTR for those categories of memory ref
-- that must be invalidated when the expression WRITTEN is stored in.
-- If WRITTEN is null, say everything must be invalidated. */
--
- static void
-! note_mem_written (written, writes_ptr)
-! rtx written;
-! struct write_data *writes_ptr;
-! {
-! static struct write_data everything = {0, 1, 1, 1};
-!
-! if (written == 0)
-! *writes_ptr = everything;
-! else if (GET_CODE (written) == MEM)
-! {
-! /* Pushing or popping the stack invalidates just the stack pointer. */
-! rtx addr = XEXP (written, 0);
-! if ((GET_CODE (addr) == PRE_DEC || GET_CODE (addr) == PRE_INC
-! || GET_CODE (addr) == POST_DEC || GET_CODE (addr) == POST_INC)
-! && GET_CODE (XEXP (addr, 0)) == REG
-! && REGNO (XEXP (addr, 0)) == STACK_POINTER_REGNUM)
-! {
-! writes_ptr->sp = 1;
-! return;
-! }
-! else if (GET_MODE (written) == BLKmode)
-! *writes_ptr = everything;
-! /* (mem (scratch)) means clobber everything. */
-! else if (GET_CODE (addr) == SCRATCH)
-! *writes_ptr = everything;
-! else if (cse_rtx_addr_varies_p (written))
-! {
-! /* A varying address that is a sum indicates an array element,
-! and that's just as good as a structure element
-! in implying that we need not invalidate scalar variables.
-! However, we must allow QImode aliasing of scalars, because the
-! ANSI C standard allows character pointers to alias anything. */
-! if (! ((MEM_IN_STRUCT_P (written)
-! || GET_CODE (XEXP (written, 0)) == PLUS)
-! && GET_MODE (written) != QImode))
-! writes_ptr->all = 1;
-! writes_ptr->nonscalar = 1;
-! }
-! writes_ptr->var = 1;
- }
- }
-
---- 7428,7471 ----
- }
-
- static void
-! invalidate_memory ()
-! {
-! register int i;
-! register struct table_elt *p, *next;
-!
-! for (i = 0; i < NBUCKETS; i++)
-! for (p = table[i]; p; p = next)
-! {
-! next = p->next_same_hash;
-! if (p->in_memory)
-! remove_from_table (p, i);
-! }
-! }
-!
-! static int
-! note_mem_written (mem)
-! register rtx mem;
-! {
-! if (mem == 0 || GET_CODE(mem) != MEM )
-! return 0;
-! else
-! {
-! register rtx addr = XEXP (mem, 0);
-! /* Pushing or popping the stack invalidates just the stack pointer. */
-! if ((GET_CODE (addr) == PRE_DEC || GET_CODE (addr) == PRE_INC
-! || GET_CODE (addr) == POST_DEC || GET_CODE (addr) == POST_INC)
-! && GET_CODE (XEXP (addr, 0)) == REG
-! && REGNO (XEXP (addr, 0)) == STACK_POINTER_REGNUM)
-! {
-! if (reg_tick[STACK_POINTER_REGNUM] >= 0)
-! reg_tick[STACK_POINTER_REGNUM]++;
-!
-! /* This should be *very* rare. */
-! if (TEST_HARD_REG_BIT (hard_regs_in_table, STACK_POINTER_REGNUM))
-! invalidate (stack_pointer_rtx, VOIDmode);
-! return 1;
- }
-+ return 0;
-+ }
- }
-
-*************** note_mem_written (written, writes_ptr)
-*** 7584,7612 ****
- alias with something that is SET or CLOBBERed.
-
-- W points to the writes_memory for this insn, a struct write_data
-- saying which kinds of memory references must be invalidated.
- X is the pattern of the insn. */
-
- static void
-! invalidate_from_clobbers (w, x)
-! struct write_data *w;
- rtx x;
- {
-- /* If W->var is not set, W specifies no action.
-- If W->all is set, this step gets all memory refs
-- so they can be ignored in the rest of this function. */
-- if (w->var)
-- invalidate_memory (w);
--
-- if (w->sp)
-- {
-- if (reg_tick[STACK_POINTER_REGNUM] >= 0)
-- reg_tick[STACK_POINTER_REGNUM]++;
--
-- /* This should be *very* rare. */
-- if (TEST_HARD_REG_BIT (hard_regs_in_table, STACK_POINTER_REGNUM))
-- invalidate (stack_pointer_rtx, VOIDmode);
-- }
--
- if (GET_CODE (x) == CLOBBER)
- {
---- 7475,7484 ----
- alias with something that is SET or CLOBBERed.
-
- X is the pattern of the insn. */
-
- static void
-! invalidate_from_clobbers (x)
- rtx x;
- {
- if (GET_CODE (x) == CLOBBER)
- {
-*************** invalidate_from_clobbers (w, x)
-*** 7615,7619 ****
- {
- if (GET_CODE (ref) == REG || GET_CODE (ref) == SUBREG
-! || (GET_CODE (ref) == MEM && ! w->all))
- invalidate (ref, VOIDmode);
- else if (GET_CODE (ref) == STRICT_LOW_PART
---- 7487,7491 ----
- {
- if (GET_CODE (ref) == REG || GET_CODE (ref) == SUBREG
-! || GET_CODE (ref) == MEM)
- invalidate (ref, VOIDmode);
- else if (GET_CODE (ref) == STRICT_LOW_PART
-*************** invalidate_from_clobbers (w, x)
-*** 7631,7643 ****
- {
- rtx ref = XEXP (y, 0);
-! if (ref)
-! {
-! if (GET_CODE (ref) == REG || GET_CODE (ref) == SUBREG
-! || (GET_CODE (ref) == MEM && !w->all))
-! invalidate (ref, VOIDmode);
-! else if (GET_CODE (ref) == STRICT_LOW_PART
-! || GET_CODE (ref) == ZERO_EXTRACT)
-! invalidate (XEXP (ref, 0), GET_MODE (ref));
-! }
- }
- }
---- 7503,7512 ----
- {
- rtx ref = XEXP (y, 0);
-! if (GET_CODE (ref) == REG || GET_CODE (ref) == SUBREG
-! || GET_CODE (ref) == MEM)
-! invalidate (ref, VOIDmode);
-! else if (GET_CODE (ref) == STRICT_LOW_PART
-! || GET_CODE (ref) == ZERO_EXTRACT)
-! invalidate (XEXP (ref, 0), GET_MODE (ref));
- }
- }
-*************** cse_around_loop (loop_start)
-*** 7800,7807 ****
- }
-
-- /* Variable used for communications between the next two routines. */
--
-- static struct write_data skipped_writes_memory;
--
- /* Process one SET of an insn that was skipped. We ignore CLOBBERs
- since they are done elsewhere. This function is called via note_stores. */
---- 7669,7672 ----
-*************** invalidate_skipped_set (dest, set)
-*** 7812,7823 ****
- rtx dest;
- {
-! if (GET_CODE (dest) == MEM)
-! note_mem_written (dest, &skipped_writes_memory);
-!
-! /* There are times when an address can appear varying and be a PLUS
-! during this scan when it would be a fixed address were we to know
-! the proper equivalences. So promote "nonscalar" to be "all". */
-! if (skipped_writes_memory.nonscalar)
-! skipped_writes_memory.all = 1;
-
- if (GET_CODE (set) == CLOBBER
---- 7677,7695 ----
- rtx dest;
- {
-! enum rtx_code code = GET_CODE (dest);
-!
-! if (code == MEM
-! && ! note_mem_written (dest) /* If this is not a stack push ... */
-! /* There are times when an address can appear varying and be a PLUS
-! during this scan when it would be a fixed address were we to know
-! the proper equivalences. So invalidate all memory if there is
-! a BLKmode or nonscalar memory reference or a reference to a
-! variable address. */
-! && (MEM_IN_STRUCT_P (dest) || GET_MODE (dest) == BLKmode
-! || cse_rtx_varies_p (XEXP (dest, 0))))
-! {
-! invalidate_memory ();
-! return;
-! }
-
- if (GET_CODE (set) == CLOBBER
-*************** invalidate_skipped_set (dest, set)
-*** 7828,7837 ****
- return;
-
-! if (GET_CODE (dest) == REG || GET_CODE (dest) == SUBREG
-! || (! skipped_writes_memory.all && ! cse_rtx_addr_varies_p (dest)))
-! invalidate (dest, VOIDmode);
-! else if (GET_CODE (dest) == STRICT_LOW_PART
-! || GET_CODE (dest) == ZERO_EXTRACT)
- invalidate (XEXP (dest, 0), GET_MODE (dest));
- }
-
---- 7700,7707 ----
- return;
-
-! if (code == STRICT_LOW_PART || code == ZERO_EXTRACT)
- invalidate (XEXP (dest, 0), GET_MODE (dest));
-+ else if (code == REG || code == SUBREG || code == MEM)
-+ invalidate (dest, VOIDmode);
- }
-
-*************** invalidate_skipped_block (start)
-*** 7845,7850 ****
- {
- rtx insn;
-- static struct write_data init = {0, 0, 0, 0};
-- static struct write_data everything = {0, 1, 1, 1};
-
- for (insn = start; insn && GET_CODE (insn) != CODE_LABEL;
---- 7715,7718 ----
-*************** invalidate_skipped_block (start)
-*** 7854,7867 ****
- continue;
-
-- skipped_writes_memory = init;
--
- if (GET_CODE (insn) == CALL_INSN)
- {
- invalidate_for_call ();
-- skipped_writes_memory = everything;
- }
-
- note_stores (PATTERN (insn), invalidate_skipped_set);
-- invalidate_from_clobbers (&skipped_writes_memory, PATTERN (insn));
- }
- }
---- 7722,7733 ----
- continue;
-
- if (GET_CODE (insn) == CALL_INSN)
- {
-+ if (! CONST_CALL_P (insn))
-+ invalidate_memory ();
- invalidate_for_call ();
- }
-
- note_stores (PATTERN (insn), invalidate_skipped_set);
- }
- }
-*************** cse_set_around_loop (x, insn, loop_start
-*** 7913,7920 ****
- {
- struct table_elt *src_elt;
-- static struct write_data init = {0, 0, 0, 0};
-- struct write_data writes_memory;
--
-- writes_memory = init;
-
- /* If this is a SET, see if we can replace SET_SRC, but ignore SETs that
---- 7779,7782 ----
-*************** cse_set_around_loop (x, insn, loop_start
-*** 7976,7991 ****
-
- /* Now invalidate anything modified by X. */
-! note_mem_written (SET_DEST (x), &writes_memory);
-!
-! if (writes_memory.var)
-! invalidate_memory (&writes_memory);
-!
-! /* See comment on similar code in cse_insn for explanation of these tests. */
- if (GET_CODE (SET_DEST (x)) == REG || GET_CODE (SET_DEST (x)) == SUBREG
-! || (GET_CODE (SET_DEST (x)) == MEM && ! writes_memory.all
-! && ! cse_rtx_addr_varies_p (SET_DEST (x))))
- invalidate (SET_DEST (x), VOIDmode);
- else if (GET_CODE (SET_DEST (x)) == STRICT_LOW_PART
-! || GET_CODE (SET_DEST (x)) == ZERO_EXTRACT)
- invalidate (XEXP (SET_DEST (x), 0), GET_MODE (SET_DEST (x)));
- }
---- 7838,7849 ----
-
- /* Now invalidate anything modified by X. */
-! note_mem_written (SET_DEST (x));
-!
-! /* See comment on similar code in cse_insn for explanation of these tests. */
- if (GET_CODE (SET_DEST (x)) == REG || GET_CODE (SET_DEST (x)) == SUBREG
-! || GET_CODE (SET_DEST (x)) == MEM)
- invalidate (SET_DEST (x), VOIDmode);
- else if (GET_CODE (SET_DEST (x)) == STRICT_LOW_PART
-! || GET_CODE (SET_DEST (x)) == ZERO_EXTRACT)
- invalidate (XEXP (SET_DEST (x), 0), GET_MODE (SET_DEST (x)));
- }
-*************** cse_main (f, nregs, after_loop, file)
-*** 8234,8237 ****
---- 8092,8096 ----
-
- init_recog ();
-+ init_alias_analysis ();
-
- max_reg = nregs;
-*************** cse_basic_block (from, to, next_branch,
-*** 8405,8408 ****
---- 8264,8268 ----
- int to_usage = 0;
- int in_libcall_block = 0;
-+ int num_insns = 0;
-
- /* Each of these arrays is undefined before max_reg, so only allocate
-*************** cse_basic_block (from, to, next_branch,
-*** 8437,8440 ****
---- 8297,8320 ----
- {
- register enum rtx_code code;
-+ int i;
-+ struct table_elt *p, *next;
-+
-+ /* If we have processed 1,000 insns, flush the hash table to avoid
-+ extreme quadratic behavior. */
-+ if (num_insns++ > 1000)
-+ {
-+ for (i = 0; i < NBUCKETS; i++)
-+ for (p = table[i]; p; p = next)
-+ {
-+ next = p->next_same_hash;
-+
-+ if (GET_CODE (p->exp) == REG)
-+ invalidate (p->exp, p->mode);
-+ else
-+ remove_from_table (p, i);
-+ }
-+
-+ num_insns = 0;
-+ }
-
- /* See if this is a branch that is part of the path. If so, and it is
-diff -rcp2N gcc-2.7.2.3/dwarfout.c gcc-2.7.2.3.f.1/dwarfout.c
-*** gcc-2.7.2.3/dwarfout.c Fri Oct 27 01:40:07 1995
---- gcc-2.7.2.3.f.1/dwarfout.c Sun Aug 10 22:47:19 1997
-*************** output_bound_representation (bound, dim_
-*** 1629,1705 ****
- {
-
-! case ERROR_MARK:
-! return;
-
- /* All fixed-bounds are represented by INTEGER_CST nodes. */
-
-! case INTEGER_CST:
-! ASM_OUTPUT_DWARF_DATA4 (asm_out_file,
-! (unsigned) TREE_INT_CST_LOW (bound));
-! break;
-!
-! /* Dynamic bounds may be represented by NOP_EXPR nodes containing
-! SAVE_EXPR nodes. */
-!
-! case NOP_EXPR:
-! bound = TREE_OPERAND (bound, 0);
-! /* ... fall thru... */
-!
-! case SAVE_EXPR:
-! {
-! char begin_label[MAX_ARTIFICIAL_LABEL_BYTES];
-! char end_label[MAX_ARTIFICIAL_LABEL_BYTES];
-!
-! sprintf (begin_label, BOUND_BEGIN_LABEL_FMT,
-! current_dienum, dim_num, u_or_l);
-
-! sprintf (end_label, BOUND_END_LABEL_FMT,
-! current_dienum, dim_num, u_or_l);
-
-! ASM_OUTPUT_DWARF_DELTA2 (asm_out_file, end_label, begin_label);
-! ASM_OUTPUT_LABEL (asm_out_file, begin_label);
-
-! /* If we are working on a bound for a dynamic dimension in C,
-! the dynamic dimension in question had better have a static
-! (zero) lower bound and a dynamic *upper* bound. */
-
-! if (u_or_l != 'u')
-! abort ();
-
-! /* If optimization is turned on, the SAVE_EXPRs that describe
-! how to access the upper bound values are essentially bogus.
-! They only describe (at best) how to get at these values at
-! the points in the generated code right after they have just
-! been computed. Worse yet, in the typical case, the upper
-! bound values will not even *be* computed in the optimized
-! code, so these SAVE_EXPRs are entirely bogus.
-!
-! In order to compensate for this fact, we check here to see
-! if optimization is enabled, and if so, we effectively create
-! an empty location description for the (unknown and unknowable)
-! upper bound.
-!
-! This should not cause too much trouble for existing (stupid?)
-! debuggers because they have to deal with empty upper bounds
-! location descriptions anyway in order to be able to deal with
-! incomplete array types.
-!
-! Of course an intelligent debugger (GDB?) should be able to
-! comprehend that a missing upper bound specification in a
-! array type used for a storage class `auto' local array variable
-! indicates that the upper bound is both unknown (at compile-
-! time) and unknowable (at run-time) due to optimization.
-! */
-!
-! if (! optimize)
-! output_loc_descriptor
-! (eliminate_regs (SAVE_EXPR_RTL (bound), 0, NULL_RTX));
-
-! ASM_OUTPUT_LABEL (asm_out_file, end_label);
-! }
-! break;
-
-- default:
-- abort ();
- }
- }
---- 1629,1699 ----
- {
-
-! case ERROR_MARK:
-! return;
-
- /* All fixed-bounds are represented by INTEGER_CST nodes. */
-
-! case INTEGER_CST:
-! ASM_OUTPUT_DWARF_DATA4 (asm_out_file,
-! (unsigned) TREE_INT_CST_LOW (bound));
-! break;
-
-! default:
-
-! /* Dynamic bounds may be represented by NOP_EXPR nodes containing
-! SAVE_EXPR nodes, in which case we can do something, or as
-! an expression, which we cannot represent. */
-! {
-! char begin_label[MAX_ARTIFICIAL_LABEL_BYTES];
-! char end_label[MAX_ARTIFICIAL_LABEL_BYTES];
-
-! sprintf (begin_label, BOUND_BEGIN_LABEL_FMT,
-! current_dienum, dim_num, u_or_l);
-
-! sprintf (end_label, BOUND_END_LABEL_FMT,
-! current_dienum, dim_num, u_or_l);
-
-! ASM_OUTPUT_DWARF_DELTA2 (asm_out_file, end_label, begin_label);
-! ASM_OUTPUT_LABEL (asm_out_file, begin_label);
-!
-! /* If optimization is turned on, the SAVE_EXPRs that describe
-! how to access the upper bound values are essentially bogus.
-! They only describe (at best) how to get at these values at
-! the points in the generated code right after they have just
-! been computed. Worse yet, in the typical case, the upper
-! bound values will not even *be* computed in the optimized
-! code, so these SAVE_EXPRs are entirely bogus.
-!
-! In order to compensate for this fact, we check here to see
-! if optimization is enabled, and if so, we effectively create
-! an empty location description for the (unknown and unknowable)
-! upper bound.
-!
-! This should not cause too much trouble for existing (stupid?)
-! debuggers because they have to deal with empty upper bounds
-! location descriptions anyway in order to be able to deal with
-! incomplete array types.
-!
-! Of course an intelligent debugger (GDB?) should be able to
-! comprehend that a missing upper bound specification in a
-! array type used for a storage class `auto' local array variable
-! indicates that the upper bound is both unknown (at compile-
-! time) and unknowable (at run-time) due to optimization. */
-!
-! if (! optimize)
-! {
-! while (TREE_CODE (bound) == NOP_EXPR
-! || TREE_CODE (bound) == CONVERT_EXPR)
-! bound = TREE_OPERAND (bound, 0);
-!
-! if (TREE_CODE (bound) == SAVE_EXPR)
-! output_loc_descriptor
-! (eliminate_regs (SAVE_EXPR_RTL (bound), 0, NULL_RTX));
-! }
-
-! ASM_OUTPUT_LABEL (asm_out_file, end_label);
-! }
-! break;
-
- }
- }
-*************** type_attribute (type, decl_const, decl_v
-*** 2857,2861 ****
- register int root_type_modified;
-
-! if (TREE_CODE (type) == ERROR_MARK)
- return;
-
---- 2851,2855 ----
- register int root_type_modified;
-
-! if (code == ERROR_MARK)
- return;
-
-*************** type_attribute (type, decl_const, decl_v
-*** 2864,2869 ****
- type `void', so this only applies to function return types. */
-
-! if (TREE_CODE (type) == VOID_TYPE)
- return;
-
- root_type_modified = (code == POINTER_TYPE || code == REFERENCE_TYPE
---- 2858,2869 ----
- type `void', so this only applies to function return types. */
-
-! if (code == VOID_TYPE)
- return;
-+
-+ /* If this is a subtype, find the underlying type. Eventually,
-+ this should write out the appropriate subtype info. */
-+ while ((code == INTEGER_TYPE || code == REAL_TYPE)
-+ && TREE_TYPE (type) != 0)
-+ type = TREE_TYPE (type), code = TREE_CODE (type);
-
- root_type_modified = (code == POINTER_TYPE || code == REFERENCE_TYPE
-diff -rcp2N gcc-2.7.2.3/emit-rtl.c gcc-2.7.2.3.f.1/emit-rtl.c
-*** gcc-2.7.2.3/emit-rtl.c Thu Sep 14 20:09:30 1995
---- gcc-2.7.2.3.f.1/emit-rtl.c Fri Aug 29 07:51:46 1997
-*************** max_label_num ()
-*** 545,548 ****
---- 545,565 ----
- }
-
-+ /* Identify REG (which may be a CONCAT) as a user register. */
-+
-+ void
-+ mark_user_reg (reg)
-+ rtx reg;
-+ {
-+ if (GET_CODE (reg) == CONCAT)
-+ {
-+ REG_USERVAR_P (XEXP (reg, 0)) = 1;
-+ REG_USERVAR_P (XEXP (reg, 1)) = 1;
-+ }
-+ else if (GET_CODE (reg) == REG)
-+ REG_USERVAR_P (reg) = 1;
-+ else
-+ abort ();
-+ }
-+
- /* Return first label number used in this function (if any were used). */
-
-*************** subreg_lowpart_p (x)
-*** 975,978 ****
---- 992,997 ----
- if (GET_CODE (x) != SUBREG)
- return 1;
-+ else if (GET_MODE (SUBREG_REG (x)) == VOIDmode)
-+ return 0;
-
- if (WORDS_BIG_ENDIAN
-*************** change_address (memref, mode, addr)
-*** 1315,1318 ****
---- 1334,1340 ----
- addr = memory_address (mode, addr);
-
-+ if (rtx_equal_p (addr, XEXP (memref, 0)) && mode == GET_MODE (memref))
-+ return memref;
-+
- new = gen_rtx (MEM, mode, addr);
- MEM_VOLATILE_P (new) = MEM_VOLATILE_P (memref);
-diff -rcp2N gcc-2.7.2.3/explow.c gcc-2.7.2.3.f.1/explow.c
-*** gcc-2.7.2.3/explow.c Thu Jun 15 11:30:10 1995
---- gcc-2.7.2.3.f.1/explow.c Fri Aug 29 07:52:03 1997
-*************** Boston, MA 02111-1307, USA. */
-*** 32,36 ****
-
- static rtx break_out_memory_refs PROTO((rtx));
-!
- /* Return an rtx for the sum of X and the integer C.
-
---- 32,36 ----
-
- static rtx break_out_memory_refs PROTO((rtx));
-! static void emit_stack_probe PROTO((rtx));
- /* Return an rtx for the sum of X and the integer C.
-
-*************** convert_memory_address (to_mode, x)
-*** 305,310 ****
---- 305,313 ----
- rtx x;
- {
-+ enum machine_mode from_mode = to_mode == ptr_mode ? Pmode : ptr_mode;
- rtx temp;
-
-+ /* Here we handle some special cases. If none of them apply, fall through
-+ to the default case. */
- switch (GET_CODE (x))
- {
-*************** convert_memory_address (to_mode, x)
-*** 321,339 ****
- return temp;
-
-- case PLUS:
-- case MULT:
-- return gen_rtx (GET_CODE (x), to_mode,
-- convert_memory_address (to_mode, XEXP (x, 0)),
-- convert_memory_address (to_mode, XEXP (x, 1)));
--
- case CONST:
- return gen_rtx (CONST, to_mode,
- convert_memory_address (to_mode, XEXP (x, 0)));
-
-! default:
-! return convert_modes (to_mode,
-! to_mode == ptr_mode ? Pmode : ptr_mode,
-! x, POINTERS_EXTEND_UNSIGNED);
- }
- }
- #endif
---- 324,348 ----
- return temp;
-
- case CONST:
- return gen_rtx (CONST, to_mode,
- convert_memory_address (to_mode, XEXP (x, 0)));
-
-! case PLUS:
-! case MULT:
-! /* For addition the second operand is a small constant, we can safely
-! permute the converstion and addition operation. We can always safely
-! permute them if we are making the address narrower. In addition,
-! always permute the operations if this is a constant. */
-! if (GET_MODE_SIZE (to_mode) < GET_MODE_SIZE (from_mode)
-! || (GET_CODE (x) == PLUS && GET_CODE (XEXP (x, 1)) == CONST_INT
-! && (INTVAL (XEXP (x, 1)) + 20000 < 40000
-! || CONSTANT_P (XEXP (x, 0)))))
-! return gen_rtx (GET_CODE (x), to_mode,
-! convert_memory_address (to_mode, XEXP (x, 0)),
-! convert_memory_address (to_mode, XEXP (x, 1)));
- }
-+
-+ return convert_modes (to_mode, from_mode,
-+ x, POINTERS_EXTEND_UNSIGNED);
- }
- #endif
-*************** allocate_dynamic_stack_space (size, targ
-*** 1066,1069 ****
---- 1075,1083 ----
- do_pending_stack_adjust ();
-
-+ /* If needed, check that we have the required amount of stack. Take into
-+ account what has already been checked. */
-+ if (flag_stack_check && ! STACK_CHECK_BUILTIN)
-+ probe_stack_range (STACK_CHECK_MAX_FRAME_SIZE + STACK_CHECK_PROTECT, size);
-+
- /* Don't use a TARGET that isn't a pseudo. */
- if (target == 0 || GET_CODE (target) != REG
-*************** allocate_dynamic_stack_space (size, targ
-*** 1133,1136 ****
---- 1147,1281 ----
-
- return target;
-+ }
-+
-+ /* Emit one stack probe at ADDRESS, an address within the stack. */
-+
-+ static void
-+ emit_stack_probe (address)
-+ rtx address;
-+ {
-+ rtx memref = gen_rtx (MEM, word_mode, address);
-+
-+ MEM_VOLATILE_P (memref) = 1;
-+
-+ if (STACK_CHECK_PROBE_LOAD)
-+ emit_move_insn (gen_reg_rtx (word_mode), memref);
-+ else
-+ emit_move_insn (memref, const0_rtx);
-+ }
-+
-+ /* Probe a range of stack addresses from FIRST to FIRST+SIZE, inclusive.
-+ FIRST is a constant and size is a Pmode RTX. These are offsets from the
-+ current stack pointer. STACK_GROWS_DOWNWARD says whether to add or
-+ subtract from the stack. If SIZE is constant, this is done
-+ with a fixed number of probes. Otherwise, we must make a loop. */
-+
-+ #ifdef STACK_GROWS_DOWNWARD
-+ #define STACK_GROW_OP MINUS
-+ #else
-+ #define STACK_GROW_OP PLUS
-+ #endif
-+
-+ void
-+ probe_stack_range (first, size)
-+ HOST_WIDE_INT first;
-+ rtx size;
-+ {
-+ /* First see if we have an insn to check the stack. Use it if so. */
-+ #ifdef HAVE_check_stack
-+ if (HAVE_check_stack)
-+ {
-+ rtx last_addr = force_operand (gen_rtx (STACK_GROW_OP, Pmode,
-+ stack_pointer_rtx,
-+ plus_constant (size, first)),
-+ NULL_RTX);
-+
-+ if (insn_operand_predicate[(int) CODE_FOR_check_stack][0]
-+ && ! ((*insn_operand_predicate[(int) CODE_FOR_check_stack][0])
-+ (last_address, Pmode)))
-+ last_address = copy_to_mode_reg (Pmode, last_address);
-+
-+ emit_insn (gen_check_stack (last_address));
-+ return;
-+ }
-+ #endif
-+
-+ /* If we have to generate explicit probes, see if we have a constant
-+ small number of them to generate. If so, that's the easy case. */
-+ if (GET_CODE (size) == CONST_INT && INTVAL (size) < 10)
-+ {
-+ HOST_WIDE_INT offset;
-+
-+ /* Start probing at FIRST + N * STACK_CHECK_PROBE_INTERVAL
-+ for values of N from 1 until it exceeds LAST. If only one
-+ probe is needed, this will not generate any code. Then probe
-+ at LAST. */
-+ for (offset = first + STACK_CHECK_PROBE_INTERVAL;
-+ offset < INTVAL (size);
-+ offset = offset + STACK_CHECK_PROBE_INTERVAL)
-+ emit_stack_probe (gen_rtx (STACK_GROW_OP, Pmode,
-+ stack_pointer_rtx, GEN_INT (offset)));
-+
-+ emit_stack_probe (gen_rtx (STACK_GROW_OP, Pmode, stack_pointer_rtx,
-+ plus_constant (size, first)));
-+ }
-+
-+ /* In the variable case, do the same as above, but in a loop. We emit loop
-+ notes so that loop optimization can be done. */
-+ else
-+ {
-+ rtx test_addr
-+ = force_operand (gen_rtx (STACK_GROW_OP, Pmode, stack_pointer_rtx,
-+ GEN_INT (first
-+ + STACK_CHECK_PROBE_INTERVAL)),
-+ NULL_RTX);
-+ rtx last_addr
-+ = force_operand (gen_rtx (STACK_GROW_OP, Pmode, stack_pointer_rtx,
-+ plus_constant (size, first)),
-+ NULL_RTX);
-+ rtx incr = GEN_INT (STACK_CHECK_PROBE_INTERVAL);
-+ rtx loop_lab = gen_label_rtx ();
-+ rtx test_lab = gen_label_rtx ();
-+ rtx end_lab = gen_label_rtx ();
-+ rtx temp;
-+
-+ if (GET_CODE (test_addr) != REG
-+ || REGNO (test_addr) < FIRST_PSEUDO_REGISTER)
-+ test_addr = force_reg (Pmode, test_addr);
-+
-+ emit_note (NULL_PTR, NOTE_INSN_LOOP_BEG);
-+ emit_jump (test_lab);
-+
-+ emit_label (loop_lab);
-+ emit_stack_probe (test_addr);
-+
-+ emit_note (NULL_PTR, NOTE_INSN_LOOP_CONT);
-+
-+ #ifdef STACK_GROWS_DOWNWARD
-+ #define CMP_OPCODE GTU
-+ temp = expand_binop (Pmode, sub_optab, test_addr, incr, test_addr,
-+ 1, OPTAB_WIDEN);
-+ #else
-+ #define CMP_OPCODE LTU
-+ temp = expand_binop (Pmode, add_optab, test_addr, incr, test_addr,
-+ 1, OPTAB_WIDEN);
-+ #endif
-+
-+ if (temp != test_addr)
-+ abort ();
-+
-+ emit_label (test_lab);
-+ emit_cmp_insn (test_addr, last_addr, CMP_OPCODE, NULL_RTX, Pmode, 1, 0);
-+ emit_jump_insn ((*bcc_gen_fctn[(int) CMP_OPCODE]) (loop_lab));
-+ emit_jump (end_lab);
-+ emit_note (NULL_PTR, NOTE_INSN_LOOP_END);
-+ emit_label (end_lab);
-+
-+ /* If will be doing stupid optimization, show test_addr is still live. */
-+ if (obey_regdecls)
-+ emit_insn (gen_rtx (USE, VOIDmode, test_addr));
-+
-+ emit_stack_probe (last_addr);
-+ }
- }
-
-diff -rcp2N gcc-2.7.2.3/expmed.c gcc-2.7.2.3.f.1/expmed.c
-*** gcc-2.7.2.3/expmed.c Thu Jul 13 23:25:37 1995
---- gcc-2.7.2.3.f.1/expmed.c Sun Aug 10 22:46:23 1997
-*************** store_bit_field (str_rtx, bitsize, bitnu
-*** 399,402 ****
---- 399,403 ----
- #ifdef HAVE_insv
- if (HAVE_insv
-+ && GET_MODE (value) != BLKmode
- && !(bitsize == 1 && GET_CODE (value) == CONST_INT)
- /* Ensure insv's size is wide enough for this field. */
-*************** store_split_bit_field (op0, bitsize, bit
-*** 777,781 ****
- done in extract_bit_field, so that the two calls to
- extract_fixed_bit_field will have comparable arguments. */
-! if (GET_CODE (value) != MEM)
- total_bits = BITS_PER_WORD;
- else
---- 778,782 ----
- done in extract_bit_field, so that the two calls to
- extract_fixed_bit_field will have comparable arguments. */
-! if (GET_CODE (value) != MEM || GET_MODE (value) == BLKmode)
- total_bits = BITS_PER_WORD;
- else
-*************** store_split_bit_field (op0, bitsize, bit
-*** 790,797 ****
- /* The args are chosen so that the last part includes the
- lsb. Give extract_bit_field the value it needs (with
-! endianness compensation) to fetch the piece we want. */
-! part = extract_fixed_bit_field (word_mode, value, 0, thissize,
-! total_bits - bitsize + bitsdone,
-! NULL_RTX, 1, align);
- }
- else
---- 791,807 ----
- /* The args are chosen so that the last part includes the
- lsb. Give extract_bit_field the value it needs (with
-! endianness compensation) to fetch the piece we want.
-!
-! ??? We have no idea what the alignment of VALUE is, so
-! we have to use a guess. */
-! part
-! = extract_fixed_bit_field
-! (word_mode, value, 0, thissize,
-! total_bits - bitsize + bitsdone, NULL_RTX, 1,
-! GET_MODE (value) == VOIDmode
-! ? UNITS_PER_WORD
-! : (GET_MODE (value) == BLKmode
-! ? 1
-! : GET_MODE_ALIGNMENT (GET_MODE (value)) / BITS_PER_UNIT));
- }
- else
-*************** store_split_bit_field (op0, bitsize, bit
-*** 803,808 ****
- & (((HOST_WIDE_INT) 1 << thissize) - 1));
- else
-! part = extract_fixed_bit_field (word_mode, value, 0, thissize,
-! bitsdone, NULL_RTX, 1, align);
- }
-
---- 813,824 ----
- & (((HOST_WIDE_INT) 1 << thissize) - 1));
- else
-! part
-! = extract_fixed_bit_field
-! (word_mode, value, 0, thissize, bitsdone, NULL_RTX, 1,
-! GET_MODE (value) == VOIDmode
-! ? UNITS_PER_WORD
-! : (GET_MODE (value) == BLKmode
-! ? 1
-! : GET_MODE_ALIGNMENT (GET_MODE (value)) / BITS_PER_UNIT));
- }
-
-*************** extract_bit_field (str_rtx, bitsize, bit
-*** 876,882 ****
- rtx spec_target_subreg = 0;
-
-- if (GET_CODE (str_rtx) == MEM && ! MEM_IN_STRUCT_P (str_rtx))
-- abort ();
--
- /* Discount the part of the structure before the desired byte.
- We need to know how many bytes are safe to reference after it. */
---- 892,895 ----
-*************** expand_divmod (rem_flag, code, mode, op0
-*** 3189,3193 ****
- Notice that we compute also the final remainder value here,
- and return the result right away. */
-! if (target == 0)
- target = gen_reg_rtx (compute_mode);
-
---- 3202,3206 ----
- Notice that we compute also the final remainder value here,
- and return the result right away. */
-! if (target == 0 || GET_MODE (target) != compute_mode)
- target = gen_reg_rtx (compute_mode);
-
-*************** expand_divmod (rem_flag, code, mode, op0
-*** 3316,3320 ****
- remainder. Notice that we compute also the final remainder
- value here, and return the result right away. */
-! if (target == 0)
- target = gen_reg_rtx (compute_mode);
-
---- 3329,3333 ----
- remainder. Notice that we compute also the final remainder
- value here, and return the result right away. */
-! if (target == 0 || GET_MODE (target) != compute_mode)
- target = gen_reg_rtx (compute_mode);
-
-*************** expand_divmod (rem_flag, code, mode, op0
-*** 3418,3422 ****
- remainder. Notice that we compute also the final remainder
- value here, and return the result right away. */
-! if (target == 0)
- target = gen_reg_rtx (compute_mode);
- if (rem_flag)
---- 3431,3435 ----
- remainder. Notice that we compute also the final remainder
- value here, and return the result right away. */
-! if (target == 0 || GET_MODE (target) != compute_mode)
- target = gen_reg_rtx (compute_mode);
- if (rem_flag)
-*************** expand_divmod (rem_flag, code, mode, op0
-*** 3602,3605 ****
---- 3615,3621 ----
- if (quotient == 0)
- {
-+ if (target && GET_MODE (target) != compute_mode)
-+ target = 0;
-+
- if (rem_flag)
- {
-*************** expand_divmod (rem_flag, code, mode, op0
-*** 3653,3656 ****
---- 3669,3675 ----
- if (rem_flag)
- {
-+ if (target && GET_MODE (target) != compute_mode)
-+ target = 0;
-+
- if (quotient == 0)
- /* No divide instruction either. Use library for remainder. */
-diff -rcp2N gcc-2.7.2.3/expr.c gcc-2.7.2.3.f.1/expr.c
-*** gcc-2.7.2.3/expr.c Sat Jun 29 16:26:15 1996
---- gcc-2.7.2.3.f.1/expr.c Fri Aug 29 08:01:24 1997
-*************** Boston, MA 02111-1307, USA. */
-*** 27,30 ****
---- 27,31 ----
- #include "flags.h"
- #include "regs.h"
-+ #include "hard-reg-set.h"
- #include "function.h"
- #include "insn-flags.h"
-*************** extern int stack_depth;
-*** 139,143 ****
- extern int max_stack_depth;
- extern struct obstack permanent_obstack;
-!
-
- static rtx enqueue_insn PROTO((rtx, rtx));
---- 140,144 ----
- extern int max_stack_depth;
- extern struct obstack permanent_obstack;
-! extern rtx arg_pointer_save_area;
-
- static rtx enqueue_insn PROTO((rtx, rtx));
-*************** static void store_constructor PROTO((tre
-*** 151,155 ****
- static rtx store_field PROTO((rtx, int, int, enum machine_mode, tree,
- enum machine_mode, int, int, int));
-- static int get_inner_unaligned_p PROTO((tree));
- static tree save_noncopied_parts PROTO((tree, tree));
- static tree init_noncopied_parts PROTO((tree, tree));
---- 152,155 ----
-*************** move_by_pieces (to, from, len, align)
-*** 1494,1498 ****
-
- /* The code above should have handled everything. */
-! if (data.len != 0)
- abort ();
- }
---- 1494,1498 ----
-
- /* The code above should have handled everything. */
-! if (data.len > 0)
- abort ();
- }
-*************** emit_move_insn_1 (x, y)
-*** 1989,1993 ****
-
- /* Show the output dies here. */
-! emit_insn (gen_rtx (CLOBBER, VOIDmode, x));
-
- for (i = 0;
---- 1989,1994 ----
-
- /* Show the output dies here. */
-! if (x != y)
-! emit_insn (gen_rtx (CLOBBER, VOIDmode, x));
-
- for (i = 0;
-*************** expand_assignment (to, from, want_value,
-*** 2481,2490 ****
- problem. */
-
-! if (TREE_CODE (to) == COMPONENT_REF
-! || TREE_CODE (to) == BIT_FIELD_REF
-! || (TREE_CODE (to) == ARRAY_REF
-! && ((TREE_CODE (TREE_OPERAND (to, 1)) == INTEGER_CST
-! && TREE_CODE (TYPE_SIZE (TREE_TYPE (to))) == INTEGER_CST)
-! || (SLOW_UNALIGNED_ACCESS && get_inner_unaligned_p (to)))))
- {
- enum machine_mode mode1;
---- 2482,2487 ----
- problem. */
-
-! if (TREE_CODE (to) == COMPONENT_REF || TREE_CODE (to) == BIT_FIELD_REF
-! || TREE_CODE (to) == ARRAY_REF)
- {
- enum machine_mode mode1;
-*************** expand_assignment (to, from, want_value,
-*** 2498,2503 ****
-
- push_temp_slots ();
-! tem = get_inner_reference (to, &bitsize, &bitpos, &offset,
-! &mode1, &unsignedp, &volatilep);
-
- /* If we are going to use store_bit_field and extract_bit_field,
---- 2495,2500 ----
-
- push_temp_slots ();
-! tem = get_inner_reference (to, &bitsize, &bitpos, &offset, &mode1,
-! &unsignedp, &volatilep, &alignment);
-
- /* If we are going to use store_bit_field and extract_bit_field,
-*************** expand_assignment (to, from, want_value,
-*** 2507,2511 ****
- tem = stabilize_reference (tem);
-
-- alignment = TYPE_ALIGN (TREE_TYPE (tem)) / BITS_PER_UNIT;
- to_rtx = expand_expr (tem, NULL_RTX, VOIDmode, 0);
- if (offset != 0)
---- 2504,2507 ----
-*************** expand_assignment (to, from, want_value,
-*** 2518,2529 ****
- gen_rtx (PLUS, ptr_mode, XEXP (to_rtx, 0),
- force_reg (ptr_mode, offset_rtx)));
-- /* If we have a variable offset, the known alignment
-- is only that of the innermost structure containing the field.
-- (Actually, we could sometimes do better by using the
-- align of an element of the innermost array, but no need.) */
-- if (TREE_CODE (to) == COMPONENT_REF
-- || TREE_CODE (to) == BIT_FIELD_REF)
-- alignment
-- = TYPE_ALIGN (TREE_TYPE (TREE_OPERAND (to, 0))) / BITS_PER_UNIT;
- }
- if (volatilep)
---- 2514,2517 ----
-*************** expand_assignment (to, from, want_value,
-*** 2535,2539 ****
- We must make a new MEM before setting the volatile bit. */
- if (offset == 0)
-! to_rtx = change_address (to_rtx, VOIDmode, XEXP (to_rtx, 0));
- MEM_VOLATILE_P (to_rtx) = 1;
- }
---- 2523,2527 ----
- We must make a new MEM before setting the volatile bit. */
- if (offset == 0)
-! to_rtx = copy_rtx (to_rtx);
- MEM_VOLATILE_P (to_rtx) = 1;
- }
-*************** store_expr (exp, target, want_value)
-*** 2775,2780 ****
- which will often result in some optimizations. Do the conversion
- in two steps: first change the signedness, if needed, then
-! the extend. */
-! if (! want_value)
- {
- if (TREE_UNSIGNED (TREE_TYPE (exp))
---- 2763,2771 ----
- which will often result in some optimizations. Do the conversion
- in two steps: first change the signedness, if needed, then
-! the extend. But don't do this if the type of EXP is a subtype
-! of something else since then the conversion might involve
-! more than just converting modes. */
-! if (! want_value && INTEGRAL_TYPE_P (TREE_TYPE (exp))
-! && TREE_TYPE (TREE_TYPE (exp)) == 0)
- {
- if (TREE_UNSIGNED (TREE_TYPE (exp))
-*************** store_expr (exp, target, want_value)
-*** 2843,2847 ****
- Convert the value to TARGET's type first if nec. */
-
-! if (temp != target && TREE_CODE (exp) != ERROR_MARK)
- {
- target = protect_from_queue (target, 1);
---- 2834,2838 ----
- Convert the value to TARGET's type first if nec. */
-
-! if (! rtx_equal_p (temp, target) && TREE_CODE (exp) != ERROR_MARK)
- {
- target = protect_from_queue (target, 1);
-*************** store_constructor (exp, target)
-*** 3071,3074 ****
---- 3062,3073 ----
- }
-
-+ if (TREE_READONLY (field))
-+ {
-+ if (GET_CODE (to_rtx) == MEM)
-+ to_rtx = copy_rtx (to_rtx);
-+
-+ RTX_UNCHANGING_P (to_rtx) = 1;
-+ }
-+
- store_field (to_rtx, bitsize, bitpos, mode, TREE_VALUE (elt),
- /* The alignment of TARGET is
-*************** store_field (target, bitsize, bitpos, mo
-*** 3414,3417 ****
---- 3413,3428 ----
- rtx temp = expand_expr (exp, NULL_RTX, VOIDmode, 0);
-
-+ /* If BITSIZE is narrower than the size of the type of EXP
-+ we will be narrowing TEMP. Normally, what's wanted are the
-+ low-order bits. However, if EXP's type is a record and this is
-+ big-endian machine, we want the upper BITSIZE bits. */
-+ if (BYTES_BIG_ENDIAN && GET_MODE_CLASS (GET_MODE (temp)) == MODE_INT
-+ && bitsize < GET_MODE_BITSIZE (GET_MODE (temp))
-+ && TREE_CODE (TREE_TYPE (exp)) == RECORD_TYPE)
-+ temp = expand_shift (RSHIFT_EXPR, GET_MODE (temp), temp,
-+ size_int (GET_MODE_BITSIZE (GET_MODE (temp))
-+ - bitsize),
-+ temp, 1);
-+
- /* Unless MODE is VOIDmode or BLKmode, convert TEMP to
- MODE. */
-*************** store_field (target, bitsize, bitpos, mo
-*** 3420,3423 ****
---- 3431,3455 ----
- temp = convert_modes (mode, TYPE_MODE (TREE_TYPE (exp)), temp, 1);
-
-+ /* If the modes of TARGET and TEMP are both BLKmode, both
-+ must be in memory and BITPOS must be aligned on a byte
-+ boundary. If so, we simply do a block copy. */
-+ if (GET_MODE (target) == BLKmode && GET_MODE (temp) == BLKmode)
-+ {
-+ if (GET_CODE (target) != MEM || GET_CODE (temp) != MEM
-+ || bitpos % BITS_PER_UNIT != 0)
-+ abort ();
-+
-+ target = change_address (target, VOIDmode,
-+ plus_constant (XEXP (target, 0),
-+ bitpos / BITS_PER_UNIT));
-+
-+ emit_block_move (target, temp,
-+ GEN_INT ((bitsize + BITS_PER_UNIT - 1)
-+ / BITS_PER_UNIT),
-+ 1);
-+
-+ return value_mode == VOIDmode ? const0_rtx : target;
-+ }
-+
- /* Store the value in the bitfield. */
- store_bit_field (target, bitsize, bitpos, mode, temp, align, total_size);
-*************** store_field (target, bitsize, bitpos, mo
-*** 3466,3471 ****
- /* Now build a reference to just the desired component. */
-
-! to_rtx = change_address (target, mode,
-! plus_constant (addr, (bitpos / BITS_PER_UNIT)));
- MEM_IN_STRUCT_P (to_rtx) = 1;
-
---- 3498,3505 ----
- /* Now build a reference to just the desired component. */
-
-! to_rtx
-! = copy_rtx (change_address (target, mode,
-! plus_constant (addr,
-! (bitpos / BITS_PER_UNIT))));
- MEM_IN_STRUCT_P (to_rtx) = 1;
-
-*************** store_field (target, bitsize, bitpos, mo
-*** 3474,3508 ****
- }
-
-- /* Return true if any object containing the innermost array is an unaligned
-- packed structure field. */
--
-- static int
-- get_inner_unaligned_p (exp)
-- tree exp;
-- {
-- int needed_alignment = TYPE_ALIGN (TREE_TYPE (exp));
--
-- while (1)
-- {
-- if (TREE_CODE (exp) == COMPONENT_REF || TREE_CODE (exp) == BIT_FIELD_REF)
-- {
-- if (TYPE_ALIGN (TREE_TYPE (TREE_OPERAND (exp, 0)))
-- < needed_alignment)
-- return 1;
-- }
-- else if (TREE_CODE (exp) != ARRAY_REF
-- && TREE_CODE (exp) != NON_LVALUE_EXPR
-- && ! ((TREE_CODE (exp) == NOP_EXPR
-- || TREE_CODE (exp) == CONVERT_EXPR)
-- && (TYPE_MODE (TREE_TYPE (exp))
-- == TYPE_MODE (TREE_TYPE (TREE_OPERAND (exp, 0))))))
-- break;
--
-- exp = TREE_OPERAND (exp, 0);
-- }
--
-- return 0;
-- }
--
- /* Given an expression EXP that may be a COMPONENT_REF, a BIT_FIELD_REF,
- or an ARRAY_REF, look for nested COMPONENT_REFs, BIT_FIELD_REFs, or
---- 3508,3511 ----
-*************** get_inner_unaligned_p (exp)
-*** 3515,3518 ****
---- 3518,3524 ----
- This offset is in addition to the bit position.
- If the position is not variable, we store 0 in *POFFSET.
-+ We set *PALIGNMENT to the alignment in bytes of the address that will be
-+ computed. This is the alignment of the thing we return if *POFFSET
-+ is zero, but can be more less strictly aligned if *POFFSET is nonzero.
-
- If any of the extraction expressions is volatile,
-*************** get_inner_unaligned_p (exp)
-*** 3525,3533 ****
- If the field describes a variable-sized object, *PMODE is set to
- VOIDmode and *PBITSIZE is set to -1. An access cannot be made in
-! this case, but the address of the object can be found. */
-
- tree
- get_inner_reference (exp, pbitsize, pbitpos, poffset, pmode,
-! punsignedp, pvolatilep)
- tree exp;
- int *pbitsize;
---- 3531,3539 ----
- If the field describes a variable-sized object, *PMODE is set to
- VOIDmode and *PBITSIZE is set to -1. An access cannot be made in
-! this case, but the address of the object can be found. */
-
- tree
- get_inner_reference (exp, pbitsize, pbitpos, poffset, pmode,
-! punsignedp, pvolatilep, palignment)
- tree exp;
- int *pbitsize;
-*************** get_inner_reference (exp, pbitsize, pbit
-*** 3537,3540 ****
---- 3543,3547 ----
- int *punsignedp;
- int *pvolatilep;
-+ int *palignment;
- {
- tree orig_exp = exp;
-*************** get_inner_reference (exp, pbitsize, pbit
-*** 3542,3545 ****
---- 3549,3553 ----
- enum machine_mode mode = VOIDmode;
- tree offset = integer_zero_node;
-+ int alignment = BIGGEST_ALIGNMENT;
-
- if (TREE_CODE (exp) == COMPONENT_REF)
-*************** get_inner_reference (exp, pbitsize, pbit
-*** 3599,3607 ****
-
- *pbitpos += TREE_INT_CST_LOW (constant);
-!
-! if (var)
-! offset = size_binop (PLUS_EXPR, offset,
-! size_binop (EXACT_DIV_EXPR, var,
-! size_int (BITS_PER_UNIT)));
- }
-
---- 3607,3613 ----
-
- *pbitpos += TREE_INT_CST_LOW (constant);
-! offset = size_binop (PLUS_EXPR, offset,
-! size_binop (EXACT_DIV_EXPR, var,
-! size_int (BITS_PER_UNIT)));
- }
-
-*************** get_inner_reference (exp, pbitsize, pbit
-*** 3629,3633 ****
-
- index = fold (build (MULT_EXPR, index_type, index,
-! TYPE_SIZE (TREE_TYPE (exp))));
-
- if (TREE_CODE (index) == INTEGER_CST
---- 3635,3640 ----
-
- index = fold (build (MULT_EXPR, index_type, index,
-! convert (index_type,
-! TYPE_SIZE (TREE_TYPE (exp)))));
-
- if (TREE_CODE (index) == INTEGER_CST
-*************** get_inner_reference (exp, pbitsize, pbit
-*** 3652,3666 ****
- if (TREE_THIS_VOLATILE (exp))
- *pvolatilep = 1;
- exp = TREE_OPERAND (exp, 0);
- }
-
-! /* If this was a bit-field, see if there is a mode that allows direct
-! access in case EXP is in memory. */
-! if (mode == VOIDmode && *pbitsize != 0 && *pbitpos % *pbitsize == 0)
-! {
-! mode = mode_for_size (*pbitsize, MODE_INT, 0);
-! if (mode == BLKmode)
-! mode = VOIDmode;
-! }
-
- if (integer_zerop (offset))
---- 3659,3675 ----
- if (TREE_THIS_VOLATILE (exp))
- *pvolatilep = 1;
-+
-+ /* If the offset is non-constant already, then we can't assume any
-+ alignment more than the alignment here. */
-+ if (! integer_zerop (offset))
-+ alignment = MIN (alignment, TYPE_ALIGN (TREE_TYPE (exp)));
-+
- exp = TREE_OPERAND (exp, 0);
- }
-
-! if (TREE_CODE_CLASS (TREE_CODE (exp)) == 'd')
-! alignment = MIN (alignment, DECL_ALIGN (exp));
-! else if (TREE_TYPE (exp) != 0)
-! alignment = MIN (alignment, TYPE_ALIGN (TREE_TYPE (exp)));
-
- if (integer_zerop (offset))
-*************** get_inner_reference (exp, pbitsize, pbit
-*** 3672,3675 ****
---- 3681,3685 ----
- *pmode = mode;
- *poffset = offset;
-+ *palignment = alignment / BITS_PER_UNIT;
- return exp;
- }
-*************** init_noncopied_parts (lhs, list)
-*** 3812,3820 ****
- }
-
-! /* Subroutine of expand_expr: return nonzero iff there is no way that
- EXP can reference X, which is being modified. */
-
- static int
-! safe_from_p (x, exp)
- rtx x;
- tree exp;
---- 3822,3834 ----
- }
-
-! static int safe_from_p_count;
-! static int safe_from_p_size;
-! static tree *safe_from_p_rewritten;
-!
-! /* Subroutine of safe_from_p: return nonzero iff there is no way that
- EXP can reference X, which is being modified. */
-
- static int
-! safe_from_p_1 (x, exp)
- rtx x;
- tree exp;
-*************** safe_from_p (x, exp)
-*** 3822,3825 ****
---- 3836,3840 ----
- rtx exp_rtl = 0;
- int i, nops;
-+ int is_save_expr = 0;
-
- if (x == 0
-*************** safe_from_p (x, exp)
-*** 3860,3878 ****
-
- case 'x':
-! if (TREE_CODE (exp) == TREE_LIST)
-! return ((TREE_VALUE (exp) == 0
-! || safe_from_p (x, TREE_VALUE (exp)))
-! && (TREE_CHAIN (exp) == 0
-! || safe_from_p (x, TREE_CHAIN (exp))));
-! else
-! return 0;
-
- case '1':
-! return safe_from_p (x, TREE_OPERAND (exp, 0));
-
- case '2':
- case '<':
-! return (safe_from_p (x, TREE_OPERAND (exp, 0))
-! && safe_from_p (x, TREE_OPERAND (exp, 1)));
-
- case 'e':
---- 3875,3900 ----
-
- case 'x':
-! switch (TREE_CODE (exp))
-! {
-! case TREE_LIST:
-! return ((TREE_VALUE (exp) == 0
-! || safe_from_p_1 (x, TREE_VALUE (exp)))
-! && (TREE_CHAIN (exp) == 0
-! || safe_from_p_1 (x, TREE_CHAIN (exp))));
-!
-! case ERROR_MARK:
-! return 1;
-!
-! default:
-! return 0;
-! }
-
- case '1':
-! return safe_from_p_1 (x, TREE_OPERAND (exp, 0));
-
- case '2':
- case '<':
-! return (safe_from_p_1 (x, TREE_OPERAND (exp, 0))
-! && safe_from_p_1 (x, TREE_OPERAND (exp, 1)));
-
- case 'e':
-*************** safe_from_p (x, exp)
-*** 3887,3891 ****
- case ADDR_EXPR:
- return (staticp (TREE_OPERAND (exp, 0))
-! || safe_from_p (x, TREE_OPERAND (exp, 0)));
-
- case INDIRECT_REF:
---- 3909,3913 ----
- case ADDR_EXPR:
- return (staticp (TREE_OPERAND (exp, 0))
-! || safe_from_p_1 (x, TREE_OPERAND (exp, 0)));
-
- case INDIRECT_REF:
-*************** safe_from_p (x, exp)
-*** 3922,3928 ****
-
- case CLEANUP_POINT_EXPR:
-! return safe_from_p (x, TREE_OPERAND (exp, 0));
-
- case SAVE_EXPR:
- exp_rtl = SAVE_EXPR_RTL (exp);
- break;
---- 3944,3951 ----
-
- case CLEANUP_POINT_EXPR:
-! return safe_from_p_1 (x, TREE_OPERAND (exp, 0));
-
- case SAVE_EXPR:
-+ is_save_expr = 1;
- exp_rtl = SAVE_EXPR_RTL (exp);
- break;
-*************** safe_from_p (x, exp)
-*** 3931,3935 ****
- /* The only operand we look at is operand 1. The rest aren't
- part of the expression. */
-! return safe_from_p (x, TREE_OPERAND (exp, 1));
-
- case METHOD_CALL_EXPR:
---- 3954,3958 ----
- /* The only operand we look at is operand 1. The rest aren't
- part of the expression. */
-! return safe_from_p_1 (x, TREE_OPERAND (exp, 1));
-
- case METHOD_CALL_EXPR:
-*************** safe_from_p (x, exp)
-*** 3945,3949 ****
- for (i = 0; i < nops; i++)
- if (TREE_OPERAND (exp, i) != 0
-! && ! safe_from_p (x, TREE_OPERAND (exp, i)))
- return 0;
- }
---- 3968,3972 ----
- for (i = 0; i < nops; i++)
- if (TREE_OPERAND (exp, i) != 0
-! && ! safe_from_p_1 (x, TREE_OPERAND (exp, i)))
- return 0;
- }
-*************** safe_from_p (x, exp)
-*** 3969,3975 ****
---- 3992,4054 ----
-
- /* If we reach here, it is safe. */
-+ if (is_save_expr)
-+ {
-+ /* This SAVE_EXPR might appear many times in the top-level
-+ safe_from_p() expression, and if it has a complex
-+ subexpression, examining it multiple times could result
-+ in a combinatorial explosion. E.g. on an Alpha Cabriolet
-+ running at least 200MHz, a Fortran test case compiled with
-+ optimization took about 28 minutes to compile -- even though
-+ it was only a few lines long, and the complicated line causing
-+ so much time to be spent in the earlier version of safe_from_p()
-+ had only 293 or so unique nodes.
-+
-+ So, turn this SAVE_EXPR into an ERROR_MARK for now, but remember
-+ where it is so we can turn it back in the top-level safe_from_p()
-+ when we're done. */
-+
-+ if (safe_from_p_count > safe_from_p_size)
-+ return 0; /* For now, don't bother re-sizing the array. */
-+ safe_from_p_rewritten[safe_from_p_count++] = exp;
-+ TREE_SET_CODE (exp, ERROR_MARK);
-+ }
-+
- return 1;
- }
-
-+ /* Subroutine of expand_expr: return nonzero iff there is no way that
-+ EXP can reference X, which is being modified. */
-+
-+ static int
-+ safe_from_p (x, exp)
-+ rtx x;
-+ tree exp;
-+ {
-+ int rtn;
-+ int i;
-+ tree trees[128];
-+
-+ safe_from_p_count = 0;
-+ safe_from_p_size = sizeof (trees) / sizeof (trees[0]);
-+ safe_from_p_rewritten = &trees[0];
-+
-+ rtn = safe_from_p_1 (x, exp);
-+
-+ #if 0
-+ if (safe_from_p_count != 0)
-+ fprintf (stderr, "%s:%d: safe_from_p_count = %d\n",
-+ input_filename, lineno, safe_from_p_count);
-+ #endif
-+
-+ for (i = 0; i < safe_from_p_count; ++i)
-+ {
-+ if (TREE_CODE (trees [i]) != ERROR_MARK)
-+ abort ();
-+ TREE_SET_CODE (trees[i], SAVE_EXPR);
-+ }
-+
-+ return rtn;
-+ }
-+
- /* Subroutine of expand_expr: return nonzero iff EXP is an
- expression whose type is statically determinable. */
-*************** expand_expr (exp, target, tmode, modifie
-*** 4300,4303 ****
---- 4379,4387 ----
- context = decl_function_context (exp);
-
-+ /* If this SAVE_EXPR was at global context, assume we are an
-+ initialization function and move it into our context. */
-+ if (context == 0)
-+ SAVE_EXPR_CONTEXT (exp) = current_function_decl;
-+
- /* We treat inline_function_decl as an alias for the current function
- because that is the inline function whose vars, types, etc.
-*************** expand_expr (exp, target, tmode, modifie
-*** 4310,4313 ****
---- 4394,4401 ----
- if (context)
- {
-+ /* The following call just exists to abort if the context is
-+ not of a containing function. */
-+ find_function_data (context);
-+
- temp = SAVE_EXPR_RTL (exp);
- if (temp && GET_CODE (temp) == REG)
-*************** expand_expr (exp, target, tmode, modifie
-*** 4381,4400 ****
- if (placeholder_list)
- {
-! tree object;
- tree old_list = placeholder_list;
-
-! for (object = TREE_PURPOSE (placeholder_list);
-! (TYPE_MAIN_VARIANT (TREE_TYPE (object))
-! != TYPE_MAIN_VARIANT (type))
-! && (TREE_CODE_CLASS (TREE_CODE (object)) == 'r'
-! || TREE_CODE_CLASS (TREE_CODE (object)) == '1'
-! || TREE_CODE_CLASS (TREE_CODE (object)) == '2'
-! || TREE_CODE_CLASS (TREE_CODE (object)) == 'e');
-! object = TREE_OPERAND (object, 0))
-! ;
-!
-! if (object != 0
-! && (TYPE_MAIN_VARIANT (TREE_TYPE (object))
-! == TYPE_MAIN_VARIANT (type)))
- {
- /* Expand this object skipping the list entries before
---- 4469,4501 ----
- if (placeholder_list)
- {
-! tree need_type = TYPE_MAIN_VARIANT (type);
-! tree object = 0;
- tree old_list = placeholder_list;
-+ tree elt;
-+
-+ /* See if the object is the type that we want. */
-+ if ((TYPE_MAIN_VARIANT (TREE_TYPE (TREE_PURPOSE (placeholder_list)))
-+ == need_type))
-+ object = TREE_PURPOSE (placeholder_list);
-+
-+ /* Find the innermost reference that is of the type we want. */
-+ for (elt = TREE_PURPOSE (placeholder_list);
-+ elt != 0
-+ && (TREE_CODE_CLASS (TREE_CODE (elt)) == 'r'
-+ || TREE_CODE_CLASS (TREE_CODE (elt)) == '1'
-+ || TREE_CODE_CLASS (TREE_CODE (elt)) == '2'
-+ || TREE_CODE_CLASS (TREE_CODE (elt)) == 'e');
-+ elt = ((TREE_CODE (elt) == COMPOUND_EXPR
-+ || TREE_CODE (elt) == COND_EXPR)
-+ ? TREE_OPERAND (elt, 1) : TREE_OPERAND (elt, 0)))
-+ if (TREE_CODE_CLASS (TREE_CODE (elt)) == 'r'
-+ && (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_OPERAND (elt, 0)))
-+ == need_type))
-+ {
-+ object = TREE_OPERAND (elt, 0);
-+ break;
-+ }
-
-! if (object != 0)
- {
- /* Expand this object skipping the list entries before
-*************** expand_expr (exp, target, tmode, modifie
-*** 4534,4537 ****
---- 4635,4647 ----
- }
- }
-+
-+ if (TREE_READONLY (exp))
-+ {
-+ if (GET_CODE (target) == MEM)
-+ target = copy_rtx (target);
-+
-+ RTX_UNCHANGING_P (target) = 1;
-+ }
-+
- store_constructor (exp, target);
- return target;
-*************** expand_expr (exp, target, tmode, modifie
-*** 4543,4567 ****
- tree exp2;
-
-! /* A SAVE_EXPR as the address in an INDIRECT_EXPR is generated
-! for *PTR += ANYTHING where PTR is put inside the SAVE_EXPR.
-! This code has the same general effect as simply doing
-! expand_expr on the save expr, except that the expression PTR
-! is computed for use as a memory address. This means different
-! code, suitable for indexing, may be generated. */
-! if (TREE_CODE (exp1) == SAVE_EXPR
-! && SAVE_EXPR_RTL (exp1) == 0
-! && TYPE_MODE (TREE_TYPE (exp1)) == ptr_mode)
-! {
-! temp = expand_expr (TREE_OPERAND (exp1, 0), NULL_RTX,
-! VOIDmode, EXPAND_SUM);
-! op0 = memory_address (mode, temp);
-! op0 = copy_all_regs (op0);
-! SAVE_EXPR_RTL (exp1) = op0;
-! }
-! else
-! {
-! op0 = expand_expr (exp1, NULL_RTX, VOIDmode, EXPAND_SUM);
-! op0 = memory_address (mode, op0);
-! }
-
- temp = gen_rtx (MEM, mode, op0);
---- 4653,4658 ----
- tree exp2;
-
-! op0 = expand_expr (exp1, NULL_RTX, VOIDmode, EXPAND_SUM);
-! op0 = memory_address (mode, op0);
-
- temp = gen_rtx (MEM, mode, op0);
-*************** expand_expr (exp, target, tmode, modifie
-*** 4597,4605 ****
- tree index = TREE_OPERAND (exp, 1);
- tree index_type = TREE_TYPE (index);
-! int i;
-!
-! if (TREE_CODE (low_bound) != INTEGER_CST
-! && contains_placeholder_p (low_bound))
-! low_bound = build (WITH_RECORD_EXPR, sizetype, low_bound, exp);
-
- /* Optimize the special-case of a zero lower bound.
---- 4688,4692 ----
- tree index = TREE_OPERAND (exp, 1);
- tree index_type = TREE_TYPE (index);
-! HOST_WIDE_INT i;
-
- /* Optimize the special-case of a zero lower bound.
-*************** expand_expr (exp, target, tmode, modifie
-*** 4618,4684 ****
- convert (sizetype, low_bound)));
-
-- if ((TREE_CODE (index) != INTEGER_CST
-- || TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST)
-- && (! SLOW_UNALIGNED_ACCESS || ! get_inner_unaligned_p (exp)))
-- {
-- /* Nonconstant array index or nonconstant element size, and
-- not an array in an unaligned (packed) structure field.
-- Generate the tree for *(&array+index) and expand that,
-- except do it in a language-independent way
-- and don't complain about non-lvalue arrays.
-- `mark_addressable' should already have been called
-- for any array for which this case will be reached. */
--
-- /* Don't forget the const or volatile flag from the array
-- element. */
-- tree variant_type = build_type_variant (type,
-- TREE_READONLY (exp),
-- TREE_THIS_VOLATILE (exp));
-- tree array_adr = build1 (ADDR_EXPR,
-- build_pointer_type (variant_type), array);
-- tree elt;
-- tree size = size_in_bytes (type);
--
-- /* Convert the integer argument to a type the same size as sizetype
-- so the multiply won't overflow spuriously. */
-- if (TYPE_PRECISION (index_type) != TYPE_PRECISION (sizetype))
-- index = convert (type_for_size (TYPE_PRECISION (sizetype), 0),
-- index);
--
-- if (TREE_CODE (size) != INTEGER_CST
-- && contains_placeholder_p (size))
-- size = build (WITH_RECORD_EXPR, sizetype, size, exp);
--
-- /* Don't think the address has side effects
-- just because the array does.
-- (In some cases the address might have side effects,
-- and we fail to record that fact here. However, it should not
-- matter, since expand_expr should not care.) */
-- TREE_SIDE_EFFECTS (array_adr) = 0;
--
-- elt
-- = build1
-- (INDIRECT_REF, type,
-- fold (build (PLUS_EXPR,
-- TYPE_POINTER_TO (variant_type),
-- array_adr,
-- fold
-- (build1
-- (NOP_EXPR,
-- TYPE_POINTER_TO (variant_type),
-- fold (build (MULT_EXPR, TREE_TYPE (index),
-- index,
-- convert (TREE_TYPE (index),
-- size))))))));;
--
-- /* Volatility, etc., of new expression is same as old
-- expression. */
-- TREE_SIDE_EFFECTS (elt) = TREE_SIDE_EFFECTS (exp);
-- TREE_THIS_VOLATILE (elt) = TREE_THIS_VOLATILE (exp);
-- TREE_READONLY (elt) = TREE_READONLY (exp);
--
-- return expand_expr (elt, target, tmode, modifier);
-- }
--
- /* Fold an expression like: "foo"[2].
- This is not done in fold so it won't happen inside &.
---- 4705,4708 ----
-*************** expand_expr (exp, target, tmode, modifie
-*** 4720,4725 ****
- && TREE_CODE (DECL_INITIAL (array)) != ERROR_MARK)
- {
-! if (TREE_CODE (index) == INTEGER_CST
-! && TREE_INT_CST_HIGH (index) == 0)
- {
- tree init = DECL_INITIAL (array);
---- 4744,4748 ----
- && TREE_CODE (DECL_INITIAL (array)) != ERROR_MARK)
- {
-! if (TREE_CODE (index) == INTEGER_CST)
- {
- tree init = DECL_INITIAL (array);
-*************** expand_expr (exp, target, tmode, modifie
-*** 4738,4748 ****
- }
- else if (TREE_CODE (init) == STRING_CST
-! && i < TREE_STRING_LENGTH (init))
-! return GEN_INT (TREE_STRING_POINTER (init)[i]);
- }
- }
- }
-
-! /* Treat array-ref with constant index as a component-ref. */
-
- case COMPONENT_REF:
---- 4761,4775 ----
- }
- else if (TREE_CODE (init) == STRING_CST
-! && TREE_INT_CST_HIGH (index) == 0
-! && (TREE_INT_CST_LOW (index)
-! < TREE_STRING_LENGTH (init)))
-! return (GEN_INT
-! (TREE_STRING_POINTER
-! (init)[TREE_INT_CST_LOW (index)]));
- }
- }
- }
-
-! /* ... fall through ... */
-
- case COMPONENT_REF:
-*************** expand_expr (exp, target, tmode, modifie
-*** 4770,4776 ****
- tree offset;
- int volatilep = 0;
-- tree tem = get_inner_reference (exp, &bitsize, &bitpos, &offset,
-- &mode1, &unsignedp, &volatilep);
- int alignment;
-
- /* If we got back the original object, something is wrong. Perhaps
---- 4797,4804 ----
- tree offset;
- int volatilep = 0;
- int alignment;
-+ tree tem = get_inner_reference (exp, &bitsize, &bitpos, &offset,
-+ &mode1, &unsignedp, &volatilep,
-+ &alignment);
-
- /* If we got back the original object, something is wrong. Perhaps
-*************** expand_expr (exp, target, tmode, modifie
-*** 4793,4797 ****
- != INTEGER_CST)
- ? target : NULL_RTX),
-! VOIDmode, EXPAND_SUM);
-
- /* If this is a constant, put it into a register if it is a
---- 4821,4826 ----
- != INTEGER_CST)
- ? target : NULL_RTX),
-! VOIDmode,
-! modifier == EXPAND_INITIALIZER ? modifier : 0);
-
- /* If this is a constant, put it into a register if it is a
-*************** expand_expr (exp, target, tmode, modifie
-*** 4806,4810 ****
- }
-
-- alignment = TYPE_ALIGN (TREE_TYPE (tem)) / BITS_PER_UNIT;
- if (offset != 0)
- {
---- 4835,4838 ----
-*************** expand_expr (exp, target, tmode, modifie
-*** 4816,4827 ****
- gen_rtx (PLUS, ptr_mode, XEXP (op0, 0),
- force_reg (ptr_mode, offset_rtx)));
-- /* If we have a variable offset, the known alignment
-- is only that of the innermost structure containing the field.
-- (Actually, we could sometimes do better by using the
-- size of an element of the innermost array, but no need.) */
-- if (TREE_CODE (exp) == COMPONENT_REF
-- || TREE_CODE (exp) == BIT_FIELD_REF)
-- alignment = (TYPE_ALIGN (TREE_TYPE (TREE_OPERAND (exp, 0)))
-- / BITS_PER_UNIT);
- }
-
---- 4844,4847 ----
-*************** expand_expr (exp, target, tmode, modifie
-*** 4844,4848 ****
- && modifier != EXPAND_SUM
- && modifier != EXPAND_INITIALIZER
-! && ((mode1 != BLKmode && ! direct_load[(int) mode1])
- /* If the field isn't aligned enough to fetch as a memref,
- fetch it as a bit field. */
---- 4864,4870 ----
- && modifier != EXPAND_SUM
- && modifier != EXPAND_INITIALIZER
-! && ((mode1 != BLKmode && ! direct_load[(int) mode1]
-! && GET_MODE_CLASS (mode) != MODE_COMPLEX_INT
-! && GET_MODE_CLASS (mode) != MODE_COMPLEX_FLOAT)
- /* If the field isn't aligned enough to fetch as a memref,
- fetch it as a bit field. */
-*************** expand_expr (exp, target, tmode, modifie
-*** 4857,4861 ****
-
- if (ext_mode == BLKmode)
-! abort ();
-
- op0 = extract_bit_field (validize_mem (op0), bitsize, bitpos,
---- 4879,4907 ----
-
- if (ext_mode == BLKmode)
-! {
-! /* In this case, BITPOS must start at a byte boundary and
-! TARGET, if specified, must be a MEM. */
-! if (GET_CODE (op0) != MEM
-! || (target != 0 && GET_CODE (target) != MEM)
-! || bitpos % BITS_PER_UNIT != 0)
-! abort ();
-!
-! op0 = change_address (op0, VOIDmode,
-! plus_constant (XEXP (op0, 0),
-! bitpos / BITS_PER_UNIT));
-! if (target == 0)
-! {
-! target
-! = assign_stack_temp (mode, int_size_in_bytes (type), 0);
-! MEM_IN_STRUCT_P (target) = AGGREGATE_TYPE_P (type);
-! }
-!
-! emit_block_move (target, op0,
-! GEN_INT ((bitsize + BITS_PER_UNIT - 1)
-! / BITS_PER_UNIT),
-! 1);
-!
-! return target;
-! }
-
- op0 = extract_bit_field (validize_mem (op0), bitsize, bitpos,
-*************** expand_expr (exp, target, tmode, modifie
-*** 4863,4866 ****
---- 4909,4924 ----
- alignment,
- int_size_in_bytes (TREE_TYPE (tem)));
-+
-+ /* If the result is a record type and BITSIZE is narrower than
-+ the mode of OP0, an integral mode, and this is a big endian
-+ machine, we must put the field into the high-order bits. */
-+ if (TREE_CODE (type) == RECORD_TYPE && BYTES_BIG_ENDIAN
-+ && GET_MODE_CLASS (GET_MODE (op0)) == MODE_INT
-+ && bitsize < GET_MODE_BITSIZE (GET_MODE (op0)))
-+ op0 = expand_shift (LSHIFT_EXPR, GET_MODE (op0), op0,
-+ size_int (GET_MODE_BITSIZE (GET_MODE (op0))
-+ - bitsize),
-+ op0, 1);
-+
- if (mode == BLKmode)
- {
-*************** expand_expr (exp, target, tmode, modifie
-*** 4877,4880 ****
---- 4935,4943 ----
- }
-
-+ /* If the result is BLKmode, use that to access the object
-+ now as well. */
-+ if (mode == BLKmode)
-+ mode1 = BLKmode;
-+
- /* Get a reference to just this component. */
- if (modifier == EXPAND_CONST_ADDRESS
-*************** expand_expr (exp, target, tmode, modifie
-*** 4883,4895 ****
- (bitpos / BITS_PER_UNIT)));
- else
-! op0 = change_address (op0, mode1,
-! plus_constant (XEXP (op0, 0),
-! (bitpos / BITS_PER_UNIT)));
- MEM_IN_STRUCT_P (op0) = 1;
- MEM_VOLATILE_P (op0) |= volatilep;
-! if (mode == mode1 || mode1 == BLKmode || mode1 == tmode)
- return op0;
-! if (target == 0)
- target = gen_reg_rtx (tmode != VOIDmode ? tmode : mode);
- convert_move (target, op0, unsignedp);
- return target;
---- 4946,4964 ----
- (bitpos / BITS_PER_UNIT)));
- else
-! op0
-! = copy_rtx
-! (change_address (op0, mode1,
-! plus_constant (XEXP (op0, 0),
-! (bitpos / BITS_PER_UNIT))));
-!
- MEM_IN_STRUCT_P (op0) = 1;
- MEM_VOLATILE_P (op0) |= volatilep;
-! if (mode == mode1 || mode1 == BLKmode || mode1 == tmode
-! || modifier == EXPAND_CONST_ADDRESS
-! || modifier == EXPAND_INITIALIZER)
- return op0;
-! else if (target == 0)
- target = gen_reg_rtx (tmode != VOIDmode ? tmode : mode);
-+
- convert_move (target, op0, unsignedp);
- return target;
-*************** expand_expr (exp, target, tmode, modifie
-*** 6199,6203 ****
- if (TREE_CODE (lhs) != VAR_DECL
- && TREE_CODE (lhs) != RESULT_DECL
-! && TREE_CODE (lhs) != PARM_DECL)
- preexpand_calls (exp);
-
---- 6268,6274 ----
- if (TREE_CODE (lhs) != VAR_DECL
- && TREE_CODE (lhs) != RESULT_DECL
-! && TREE_CODE (lhs) != PARM_DECL
-! && ! (TREE_CODE (lhs) == INDIRECT_REF
-! && TYPE_READONLY (TREE_TYPE (TREE_OPERAND (lhs, 0)))))
- preexpand_calls (exp);
-
-*************** expand_builtin (exp, target, subtarget,
-*** 7986,7989 ****
---- 8057,8295 ----
- #endif
-
-+ /* __builtin_setjmp is passed a pointer to an array of five words
-+ (not all will be used on all machines). It operates similarly to
-+ the C library function of the same name, but is more efficient.
-+ Much of the code below (and for longjmp) is copied from the handling
-+ of non-local gotos.
-+
-+ NOTE: This is intended for use by GNAT and will only work in
-+ the method used by it. This code will likely NOT survive to
-+ the GCC 2.8.0 release. */
-+ case BUILT_IN_SETJMP:
-+ if (arglist == 0
-+ || TREE_CODE (TREE_TYPE (TREE_VALUE (arglist))) != POINTER_TYPE)
-+ break;
-+
-+ {
-+ rtx buf_addr = expand_expr (TREE_VALUE (arglist), subtarget,
-+ VOIDmode, 0);
-+ rtx lab1 = gen_label_rtx (), lab2 = gen_label_rtx ();
-+ enum machine_mode sa_mode = Pmode;
-+ rtx stack_save;
-+ int old_inhibit_defer_pop = inhibit_defer_pop;
-+ int return_pops = RETURN_POPS_ARGS (get_identifier ("__dummy"),
-+ get_identifier ("__dummy"), 0);
-+ rtx next_arg_reg;
-+ CUMULATIVE_ARGS args_so_far;
-+ int current_call_is_indirect = 1;
-+ int i;
-+
-+ #ifdef POINTERS_EXTEND_UNSIGNED
-+ buf_addr = convert_memory_address (Pmode, buf_addr);
-+ #endif
-+
-+ buf_addr = force_reg (Pmode, buf_addr);
-+
-+ if (target == 0 || GET_CODE (target) != REG
-+ || REGNO (target) < FIRST_PSEUDO_REGISTER)
-+ target = gen_reg_rtx (value_mode);
-+
-+ emit_queue ();
-+
-+ CONST_CALL_P (emit_note (NULL_PTR, NOTE_INSN_SETJMP)) = 1;
-+ current_function_calls_setjmp = 1;
-+
-+ /* We store the frame pointer and the address of lab1 in the buffer
-+ and use the rest of it for the stack save area, which is
-+ machine-dependent. */
-+ emit_move_insn (gen_rtx (MEM, Pmode, buf_addr),
-+ virtual_stack_vars_rtx);
-+ emit_move_insn
-+ (validize_mem (gen_rtx (MEM, Pmode,
-+ plus_constant (buf_addr,
-+ GET_MODE_SIZE (Pmode)))),
-+ gen_rtx (LABEL_REF, Pmode, lab1));
-+
-+ #ifdef HAVE_save_stack_nonlocal
-+ if (HAVE_save_stack_nonlocal)
-+ sa_mode = insn_operand_mode[(int) CODE_FOR_save_stack_nonlocal][0];
-+ #endif
-+
-+ current_function_has_nonlocal_goto = 1;
-+
-+ stack_save = gen_rtx (MEM, sa_mode,
-+ plus_constant (buf_addr,
-+ 2 * GET_MODE_SIZE (Pmode)));
-+ emit_stack_save (SAVE_NONLOCAL, &stack_save, NULL_RTX);
-+
-+ #ifdef HAVE_setjmp
-+ if (HAVE_setjmp)
-+ emit_insn (gen_setjmp ());
-+ #endif
-+
-+ /* Set TARGET to zero and branch around the other case. */
-+ emit_move_insn (target, const0_rtx);
-+ emit_jump_insn (gen_jump (lab2));
-+ emit_barrier ();
-+ emit_label (lab1);
-+
-+ /* Note that setjmp clobbers FP when we get here, so we have to
-+ make sure it's marked as used by this function. */
-+ emit_insn (gen_rtx (USE, VOIDmode, hard_frame_pointer_rtx));
-+
-+ /* Mark the static chain as clobbered here so life information
-+ doesn't get messed up for it. */
-+ emit_insn (gen_rtx (CLOBBER, VOIDmode, static_chain_rtx));
-+
-+ /* Now put in the code to restore the frame pointer, and argument
-+ pointer, if needed. The code below is from expand_end_bindings
-+ in stmt.c; see detailed documentation there. */
-+ #ifdef HAVE_nonlocal_goto
-+ if (! HAVE_nonlocal_goto)
-+ #endif
-+ emit_move_insn (virtual_stack_vars_rtx, hard_frame_pointer_rtx);
-+
-+ #if ARG_POINTER_REGNUM != HARD_FRAME_POINTER_REGNUM
-+ if (fixed_regs[ARG_POINTER_REGNUM])
-+ {
-+ #ifdef ELIMINABLE_REGS
-+ static struct elims {int from, to;} elim_regs[] = ELIMINABLE_REGS;
-+
-+ for (i = 0; i < sizeof elim_regs / sizeof elim_regs[0]; i++)
-+ if (elim_regs[i].from == ARG_POINTER_REGNUM
-+ && elim_regs[i].to == HARD_FRAME_POINTER_REGNUM)
-+ break;
-+
-+ if (i == sizeof elim_regs / sizeof elim_regs [0])
-+ #endif
-+ {
-+ /* Now restore our arg pointer from the address at which it
-+ was saved in our stack frame.
-+ If there hasn't be space allocated for it yet, make
-+ some now. */
-+ if (arg_pointer_save_area == 0)
-+ arg_pointer_save_area
-+ = assign_stack_local (Pmode, GET_MODE_SIZE (Pmode), 0);
-+ emit_move_insn (virtual_incoming_args_rtx,
-+ copy_to_reg (arg_pointer_save_area));
-+ }
-+ }
-+ #endif
-+
-+ #ifdef HAVE_nonlocal_goto_receiver
-+ if (HAVE_nonlocal_goto_receiver)
-+ emit_insn (gen_nonlocal_goto_receiver ());
-+ #endif
-+ /* The static chain pointer contains the address of dummy function.
-+ We need to call it here to handle some PIC cases of restoring
-+ a global pointer. Then return 1. */
-+ op0 = copy_to_mode_reg (Pmode, static_chain_rtx);
-+
-+ /* We can't actually call emit_library_call here, so do everything
-+ it does, which isn't much for a libfunc with no args. */
-+ op0 = memory_address (FUNCTION_MODE, op0);
-+
-+ INIT_CUMULATIVE_ARGS (args_so_far, NULL_TREE,
-+ gen_rtx (SYMBOL_REF, Pmode, "__dummy"));
-+ next_arg_reg = FUNCTION_ARG (args_so_far, VOIDmode, void_type_node, 1);
-+
-+ #ifndef ACCUMULATE_OUTGOING_ARGS
-+ #ifdef HAVE_call_pop
-+ if (HAVE_call_pop)
-+ emit_call_insn (gen_call_pop (gen_rtx (MEM, FUNCTION_MODE, op0),
-+ const0_rtx, next_arg_reg,
-+ GEN_INT (return_pops)));
-+ else
-+ #endif
-+ #endif
-+
-+ #ifdef HAVE_call
-+ if (HAVE_call)
-+ emit_call_insn (gen_call (gen_rtx (MEM, FUNCTION_MODE, op0),
-+ const0_rtx, next_arg_reg, const0_rtx));
-+ else
-+ #endif
-+ abort ();
-+
-+ emit_move_insn (target, const1_rtx);
-+ emit_label (lab2);
-+ return target;
-+ }
-+
-+ /* __builtin_longjmp is passed a pointer to an array of five words
-+ and a value, which is a dummy. It's similar to the C library longjmp
-+ function but works with __builtin_setjmp above. */
-+ case BUILT_IN_LONGJMP:
-+ if (arglist == 0 || TREE_CHAIN (arglist) == 0
-+ || TREE_CODE (TREE_TYPE (TREE_VALUE (arglist))) != POINTER_TYPE)
-+ break;
-+
-+ {
-+ tree dummy_id = get_identifier ("__dummy");
-+ tree dummy_type = build_function_type (void_type_node, NULL_TREE);
-+ tree dummy_decl = build_decl (FUNCTION_DECL, dummy_id, dummy_type);
-+ #ifdef POINTERS_EXTEND_UNSIGNED
-+ rtx buf_addr
-+ = force_reg (Pmode,
-+ convert_memory_address
-+ (Pmode,
-+ expand_expr (TREE_VALUE (arglist),
-+ NULL_RTX, VOIDmode, 0)));
-+ #else
-+ rtx buf_addr
-+ = force_reg (Pmode, expand_expr (TREE_VALUE (arglist),
-+ NULL_RTX,
-+ VOIDmode, 0));
-+ #endif
-+ rtx fp = gen_rtx (MEM, Pmode, buf_addr);
-+ rtx lab = gen_rtx (MEM, Pmode,
-+ plus_constant (buf_addr, GET_MODE_SIZE (Pmode)));
-+ enum machine_mode sa_mode
-+ #ifdef HAVE_save_stack_nonlocal
-+ = (HAVE_save_stack_nonlocal
-+ ? insn_operand_mode[(int) CODE_FOR_save_stack_nonlocal][0]
-+ : Pmode);
-+ #else
-+ = Pmode;
-+ #endif
-+ rtx stack = gen_rtx (MEM, sa_mode,
-+ plus_constant (buf_addr,
-+ 2 * GET_MODE_SIZE (Pmode)));
-+
-+ DECL_EXTERNAL (dummy_decl) = 1;
-+ TREE_PUBLIC (dummy_decl) = 1;
-+ make_decl_rtl (dummy_decl, NULL_PTR, 1);
-+
-+ /* Expand the second expression just for side-effects. */
-+ expand_expr (TREE_VALUE (TREE_CHAIN (arglist)),
-+ const0_rtx, VOIDmode, 0);
-+
-+ assemble_external (dummy_decl);
-+
-+ /* Pick up FP, label, and SP from the block and jump. This code is
-+ from expand_goto in stmt.c; see there for detailed comments. */
-+ #if HAVE_nonlocal_goto
-+ if (HAVE_nonlocal_goto)
-+ emit_insn (gen_nonlocal_goto (fp, lab, stack,
-+ XEXP (DECL_RTL (dummy_decl), 0)));
-+ else
-+ #endif
-+ {
-+ lab = copy_to_reg (lab);
-+ emit_move_insn (hard_frame_pointer_rtx, fp);
-+ emit_stack_restore (SAVE_NONLOCAL, stack, NULL_RTX);
-+
-+ /* Put in the static chain register the address of the dummy
-+ function. */
-+ emit_move_insn (static_chain_rtx, XEXP (DECL_RTL (dummy_decl), 0));
-+ emit_insn (gen_rtx (USE, VOIDmode, hard_frame_pointer_rtx));
-+ emit_insn (gen_rtx (USE, VOIDmode, stack_pointer_rtx));
-+ emit_insn (gen_rtx (USE, VOIDmode, static_chain_rtx));
-+ emit_indirect_jump (lab);
-+ }
-+
-+ return const0_rtx;
-+ }
-+
- default: /* just do library call, if unknown builtin */
- error ("built-in function `%s' not currently supported",
-*************** preexpand_calls (exp)
-*** 8688,8701 ****
- case CALL_EXPR:
- /* Do nothing if already expanded. */
-! if (CALL_EXPR_RTL (exp) != 0)
- return;
-
-! /* Do nothing to built-in functions. */
-! if (TREE_CODE (TREE_OPERAND (exp, 0)) != ADDR_EXPR
-! || TREE_CODE (TREE_OPERAND (TREE_OPERAND (exp, 0), 0)) != FUNCTION_DECL
-! || ! DECL_BUILT_IN (TREE_OPERAND (TREE_OPERAND (exp, 0), 0))
-! /* Do nothing if the call returns a variable-sized object. */
-! || TREE_CODE (TYPE_SIZE (TREE_TYPE(exp))) != INTEGER_CST)
-! CALL_EXPR_RTL (exp) = expand_call (exp, NULL_RTX, 0);
- return;
-
---- 8994,9008 ----
- case CALL_EXPR:
- /* Do nothing if already expanded. */
-! if (CALL_EXPR_RTL (exp) != 0
-! /* Do nothing if the call returns a variable-sized object. */
-! || TREE_CODE (TYPE_SIZE (TREE_TYPE(exp))) != INTEGER_CST
-! /* Do nothing to built-in functions. */
-! || (TREE_CODE (TREE_OPERAND (exp, 0)) == ADDR_EXPR
-! && (TREE_CODE (TREE_OPERAND (TREE_OPERAND (exp, 0), 0))
-! == FUNCTION_DECL)
-! && DECL_BUILT_IN (TREE_OPERAND (TREE_OPERAND (exp, 0), 0))))
- return;
-
-! CALL_EXPR_RTL (exp) = expand_call (exp, NULL_RTX, 0);
- return;
-
-*************** do_jump (exp, if_false_label, if_true_la
-*** 9087,9090 ****
---- 9394,9398 ----
- push_temp_slots ();
- expand_expr (TREE_OPERAND (exp, 0), const0_rtx, VOIDmode, 0);
-+ preserve_temp_slots (NULL_RTX);
- free_temp_slots ();
- pop_temp_slots ();
-*************** do_jump (exp, if_false_label, if_true_la
-*** 9103,9111 ****
- tree offset;
- int volatilep = 0;
-
- /* Get description of this reference. We don't actually care
- about the underlying object here. */
- get_inner_reference (exp, &bitsize, &bitpos, &offset,
-! &mode, &unsignedp, &volatilep);
-
- type = type_for_size (bitsize, unsignedp);
---- 9411,9421 ----
- tree offset;
- int volatilep = 0;
-+ int alignment;
-
- /* Get description of this reference. We don't actually care
- about the underlying object here. */
- get_inner_reference (exp, &bitsize, &bitpos, &offset,
-! &mode, &unsignedp, &volatilep,
-! &alignment);
-
- type = type_for_size (bitsize, unsignedp);
-diff -rcp2N gcc-2.7.2.3/expr.h gcc-2.7.2.3.f.1/expr.h
-*** gcc-2.7.2.3/expr.h Fri Oct 27 10:16:56 1995
---- gcc-2.7.2.3.f.1/expr.h Fri Aug 29 07:52:02 1997
-*************** enum direction {none, upward, downward};
-*** 229,232 ****
---- 229,272 ----
- #define RETURN_IN_MEMORY(TYPE) (TYPE_MODE (TYPE) == BLKmode)
- #endif
-+
-+ /* Provide default values for the macros controlling stack checking. */
-+
-+ #ifndef STACK_CHECK_BUILTIN
-+ #define STACK_CHECK_BUILTIN 0
-+ #endif
-+
-+ /* The default interval is one page. */
-+ #ifndef STACK_CHECK_PROBE_INTERVAL
-+ #define STACK_CHECK_PROBE_INTERVAL 4096
-+ #endif
-+
-+ /* The default is to do a store into the stack. */
-+ #ifndef STACK_CHECK_PROBE_LOAD
-+ #define STACK_CHECK_PROBE_LOAD 0
-+ #endif
-+
-+ /* This value is arbitrary, but should be sufficient for most machines. */
-+ #ifndef STACK_CHECK_PROTECT
-+ #define STACK_CHECK_PROTECT (75 * UNITS_PER_WORD)
-+ #endif
-+
-+ /* Make the maximum frame size be the largest we can and still only need
-+ one probe per function. */
-+ #ifndef STACK_CHECK_MAX_FRAME_SIZE
-+ #define STACK_CHECK_MAX_FRAME_SIZE \
-+ (STACK_CHECK_PROBE_INTERVAL - UNITS_PER_WORD)
-+ #endif
-+
-+ /* This is arbitrary, but should be large enough everywhere. */
-+ #ifndef STACK_CHECK_FIXED_FRAME_SIZE
-+ #define STACK_CHECK_FIXED_FRAME_SIZE (4 * UNITS_PER_WORD)
-+ #endif
-+
-+ /* Provide a reasonable default for the maximum size of an object to
-+ allocate in the fixed frame. We may need to be able to make this
-+ controllable by the user at some point. */
-+ #ifndef STACK_CHECK_MAX_VAR_SIZE
-+ #define STACK_CHECK_MAX_VAR_SIZE (STACK_CHECK_MAX_FRAME_SIZE / 100)
-+ #endif
-
- /* Optabs are tables saying how to generate insn bodies
-*************** extern void emit_stack_restore PROTO((en
-*** 828,831 ****
---- 868,878 ----
- says how many bytes. */
- extern rtx allocate_dynamic_stack_space PROTO((rtx, rtx, int));
-+
-+ /* Probe a range of stack addresses from FIRST to FIRST+SIZE, inclusive.
-+ FIRST is a constant and size is a Pmode RTX. These are offsets from the
-+ current stack pointer. STACK_GROWS_DOWNWARD says whether to add or
-+ subtract from the stack. If SIZE is constant, this is done
-+ with a fixed number of probes. Otherwise, we must make a loop. */
-+ extern void probe_stack_range PROTO((HOST_WIDE_INT, rtx));
-
- /* Emit code to copy function value to a new temp reg and return that reg. */
-diff -rcp2N gcc-2.7.2.3/final.c gcc-2.7.2.3.f.1/final.c
-*** gcc-2.7.2.3/final.c Sun Nov 26 18:50:00 1995
---- gcc-2.7.2.3.f.1/final.c Fri Jul 11 00:11:16 1997
-*************** profile_function (file)
-*** 983,991 ****
- text_section ();
-
-! #ifdef STRUCT_VALUE_INCOMING_REGNUM
- if (sval)
- ASM_OUTPUT_REG_PUSH (file, STRUCT_VALUE_INCOMING_REGNUM);
- #else
-! #ifdef STRUCT_VALUE_REGNUM
- if (sval)
- ASM_OUTPUT_REG_PUSH (file, STRUCT_VALUE_REGNUM);
---- 983,991 ----
- text_section ();
-
-! #if defined(STRUCT_VALUE_INCOMING_REGNUM) && defined(ASM_OUTPUT_REG_PUSH)
- if (sval)
- ASM_OUTPUT_REG_PUSH (file, STRUCT_VALUE_INCOMING_REGNUM);
- #else
-! #if defined(STRUCT_VALUE_REGNUM) && defined(ASM_OUTPUT_REG_PUSH)
- if (sval)
- ASM_OUTPUT_REG_PUSH (file, STRUCT_VALUE_REGNUM);
-*************** profile_function (file)
-*** 993,1027 ****
- #endif
-
-! #if 0
-! #ifdef STATIC_CHAIN_INCOMING_REGNUM
- if (cxt)
- ASM_OUTPUT_REG_PUSH (file, STATIC_CHAIN_INCOMING_REGNUM);
- #else
-! #ifdef STATIC_CHAIN_REGNUM
- if (cxt)
- ASM_OUTPUT_REG_PUSH (file, STATIC_CHAIN_REGNUM);
- #endif
- #endif
-- #endif /* 0 */
-
- FUNCTION_PROFILER (file, profile_label_no);
-
-! #if 0
-! #ifdef STATIC_CHAIN_INCOMING_REGNUM
- if (cxt)
- ASM_OUTPUT_REG_POP (file, STATIC_CHAIN_INCOMING_REGNUM);
- #else
-! #ifdef STATIC_CHAIN_REGNUM
- if (cxt)
- ASM_OUTPUT_REG_POP (file, STATIC_CHAIN_REGNUM);
- #endif
- #endif
-- #endif /* 0 */
-
-! #ifdef STRUCT_VALUE_INCOMING_REGNUM
- if (sval)
- ASM_OUTPUT_REG_POP (file, STRUCT_VALUE_INCOMING_REGNUM);
- #else
-! #ifdef STRUCT_VALUE_REGNUM
- if (sval)
- ASM_OUTPUT_REG_POP (file, STRUCT_VALUE_REGNUM);
---- 993,1023 ----
- #endif
-
-! #if defined(STATIC_CHAIN_INCOMING_REGNUM) && defined(ASM_OUTPUT_REG_PUSH)
- if (cxt)
- ASM_OUTPUT_REG_PUSH (file, STATIC_CHAIN_INCOMING_REGNUM);
- #else
-! #if defined(STATIC_CHAIN_REGNUM) && defined(ASM_OUTPUT_REG_PUSH)
- if (cxt)
- ASM_OUTPUT_REG_PUSH (file, STATIC_CHAIN_REGNUM);
- #endif
- #endif
-
- FUNCTION_PROFILER (file, profile_label_no);
-
-! #if defined(STATIC_CHAIN_INCOMING_REGNUM) && defined(ASM_OUTPUT_REG_PUSH)
- if (cxt)
- ASM_OUTPUT_REG_POP (file, STATIC_CHAIN_INCOMING_REGNUM);
- #else
-! #if defined(STATIC_CHAIN_REGNUM) && defined(ASM_OUTPUT_REG_PUSH)
- if (cxt)
- ASM_OUTPUT_REG_POP (file, STATIC_CHAIN_REGNUM);
- #endif
- #endif
-
-! #if defined(STRUCT_VALUE_INCOMING_REGNUM) && defined(ASM_OUTPUT_REG_PUSH)
- if (sval)
- ASM_OUTPUT_REG_POP (file, STRUCT_VALUE_INCOMING_REGNUM);
- #else
-! #if defined(STRUCT_VALUE_REGNUM) && defined(ASM_OUTPUT_REG_PUSH)
- if (sval)
- ASM_OUTPUT_REG_POP (file, STRUCT_VALUE_REGNUM);
-diff -rcp2N gcc-2.7.2.3/flags.h gcc-2.7.2.3.f.1/flags.h
-*** gcc-2.7.2.3/flags.h Thu Jun 15 11:34:11 1995
---- gcc-2.7.2.3.f.1/flags.h Fri Aug 29 08:40:01 1997
-*************** extern int flag_unroll_loops;
-*** 204,207 ****
---- 204,221 ----
- extern int flag_unroll_all_loops;
-
-+ /* Nonzero forces all invariant computations in loops to be moved
-+ outside the loop. */
-+
-+ extern int flag_move_all_movables;
-+
-+ /* Nonzero forces all general induction variables in loops to be
-+ strength reduced. */
-+
-+ extern int flag_reduce_all_givs;
-+
-+ /* Nonzero gets another run of loop_optimize performed. */
-+
-+ extern int flag_rerun_loop_opt;
-+
- /* Nonzero for -fcse-follow-jumps:
- have cse follow jumps to do a more extensive job. */
-*************** extern int flag_gnu_linker;
-*** 339,342 ****
---- 353,373 ----
- /* Tag all structures with __attribute__(packed) */
- extern int flag_pack_struct;
-+
-+ /* Emit code to check for stack overflow; also may cause large objects
-+ to be allocated dynamically. */
-+ extern int flag_stack_check;
-+
-+ /* 1 if alias checking is enabled: symbols do not alias each other
-+ and parameters do not alias the current stack frame. */
-+ extern int flag_alias_check;
-+
-+ /* This flag is only tested if alias checking is enabled.
-+ 0 if pointer arguments may alias each other. True in C.
-+ 1 if pointer arguments may not alias each other but may alias
-+ global variables.
-+ 2 if pointer arguments may not alias each other and may not
-+ alias global variables. True in Fortran.
-+ The value is ignored if flag_alias_check is 0. */
-+ extern int flag_argument_noalias;
-
- /* Other basic status info about current function. */
-diff -rcp2N gcc-2.7.2.3/flow.c gcc-2.7.2.3.f.1/flow.c
-*** gcc-2.7.2.3/flow.c Mon Aug 28 10:23:34 1995
---- gcc-2.7.2.3.f.1/flow.c Wed Aug 27 11:46:36 1997
-*************** static HARD_REG_SET elim_reg_set;
-*** 288,292 ****
- /* Forward declarations */
- static void find_basic_blocks PROTO((rtx, rtx));
-! static int uses_reg_or_mem PROTO((rtx));
- static void mark_label_ref PROTO((rtx, rtx, int));
- static void life_analysis PROTO((rtx, int));
---- 288,292 ----
- /* Forward declarations */
- static void find_basic_blocks PROTO((rtx, rtx));
-! static int jmp_uses_reg_or_mem PROTO((rtx));
- static void mark_label_ref PROTO((rtx, rtx, int));
- static void life_analysis PROTO((rtx, int));
-*************** find_basic_blocks (f, nonlocal_label_lis
-*** 554,563 ****
- if (GET_CODE (XVECEXP (pat, 0, i)) == SET
- && SET_DEST (XVECEXP (pat, 0, i)) == pc_rtx
-! && uses_reg_or_mem (SET_SRC (XVECEXP (pat, 0, i))))
- computed_jump = 1;
- }
- else if (GET_CODE (pat) == SET
- && SET_DEST (pat) == pc_rtx
-! && uses_reg_or_mem (SET_SRC (pat)))
- computed_jump = 1;
-
---- 554,563 ----
- if (GET_CODE (XVECEXP (pat, 0, i)) == SET
- && SET_DEST (XVECEXP (pat, 0, i)) == pc_rtx
-! && jmp_uses_reg_or_mem (SET_SRC (XVECEXP (pat, 0, i))))
- computed_jump = 1;
- }
- else if (GET_CODE (pat) == SET
- && SET_DEST (pat) == pc_rtx
-! && jmp_uses_reg_or_mem (SET_SRC (pat)))
- computed_jump = 1;
-
-*************** find_basic_blocks (f, nonlocal_label_lis
-*** 760,767 ****
- /* Subroutines of find_basic_blocks. */
-
-! /* Return 1 if X contain a REG or MEM that is not in the constant pool. */
-
- static int
-! uses_reg_or_mem (x)
- rtx x;
- {
---- 760,768 ----
- /* Subroutines of find_basic_blocks. */
-
-! /* Return 1 if X, the SRC_SRC of SET of (pc) contain a REG or MEM that is
-! not in the constant pool and not in the condition of an IF_THEN_ELSE. */
-
- static int
-! jmp_uses_reg_or_mem (x)
- rtx x;
- {
-*************** uses_reg_or_mem (x)
-*** 770,778 ****
- char *fmt;
-
-! if (code == REG
-! || (code == MEM
-! && ! (GET_CODE (XEXP (x, 0)) == SYMBOL_REF
-! && CONSTANT_POOL_ADDRESS_P (XEXP (x, 0)))))
-! return 1;
-
- fmt = GET_RTX_FORMAT (code);
---- 771,796 ----
- char *fmt;
-
-! switch (code)
-! {
-! case CONST:
-! case LABEL_REF:
-! case PC:
-! return 0;
-!
-! case REG:
-! return 1;
-!
-! case MEM:
-! return ! (GET_CODE (XEXP (x, 0)) == SYMBOL_REF
-! && CONSTANT_POOL_ADDRESS_P (XEXP (x, 0)));
-!
-! case IF_THEN_ELSE:
-! return (jmp_uses_reg_or_mem (XEXP (x, 1))
-! || jmp_uses_reg_or_mem (XEXP (x, 2)));
-!
-! case PLUS: case MINUS: case MULT:
-! return (jmp_uses_reg_or_mem (XEXP (x, 0))
-! || jmp_uses_reg_or_mem (XEXP (x, 1)));
-! }
-
- fmt = GET_RTX_FORMAT (code);
-*************** uses_reg_or_mem (x)
-*** 780,789 ****
- {
- if (fmt[i] == 'e'
-! && uses_reg_or_mem (XEXP (x, i)))
- return 1;
-
- if (fmt[i] == 'E')
- for (j = 0; j < XVECLEN (x, i); j++)
-! if (uses_reg_or_mem (XVECEXP (x, i, j)))
- return 1;
- }
---- 798,807 ----
- {
- if (fmt[i] == 'e'
-! && jmp_uses_reg_or_mem (XEXP (x, i)))
- return 1;
-
- if (fmt[i] == 'E')
- for (j = 0; j < XVECLEN (x, i); j++)
-! if (jmp_uses_reg_or_mem (XVECEXP (x, i, j)))
- return 1;
- }
-*************** propagate_block (old, first, last, final
-*** 1605,1614 ****
-
- /* Each call clobbers all call-clobbered regs that are not
-! global. Note that the function-value reg is a
- call-clobbered reg, and mark_set_regs has already had
- a chance to handle it. */
-
- for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
-! if (call_used_regs[i] && ! global_regs[i])
- dead[i / REGSET_ELT_BITS]
- |= ((REGSET_ELT_TYPE) 1 << (i % REGSET_ELT_BITS));
---- 1623,1633 ----
-
- /* Each call clobbers all call-clobbered regs that are not
-! global or fixed. Note that the function-value reg is a
- call-clobbered reg, and mark_set_regs has already had
- a chance to handle it. */
-
- for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
-! if (call_used_regs[i] && ! global_regs[i]
-! && ! fixed_regs[i])
- dead[i / REGSET_ELT_BITS]
- |= ((REGSET_ELT_TYPE) 1 << (i % REGSET_ELT_BITS));
-diff -rcp2N gcc-2.7.2.3/fold-const.c gcc-2.7.2.3.f.1/fold-const.c
-*** gcc-2.7.2.3/fold-const.c Fri Sep 15 22:26:12 1995
---- gcc-2.7.2.3.f.1/fold-const.c Fri Aug 29 07:52:10 1997
-*************** static tree unextend PROTO((tree, int, i
-*** 80,83 ****
---- 80,84 ----
- static tree fold_truthop PROTO((enum tree_code, tree, tree, tree));
- static tree strip_compound_expr PROTO((tree, tree));
-+ static int multiple_of_p PROTO((tree, tree, tree));
-
- #ifndef BRANCH_COST
-*************** const_binop (code, arg1, arg2, notrunc)
-*** 1077,1080 ****
---- 1078,1083 ----
- if (int2h == 0 && int2l > 0
- && TREE_TYPE (arg1) == sizetype
-+ && ! TREE_CONSTANT_OVERFLOW (arg1)
-+ && ! TREE_CONSTANT_OVERFLOW (arg2)
- && int1h == 0 && int1l >= 0)
- {
-*************** const_binop (code, arg1, arg2, notrunc)
-*** 1230,1233 ****
---- 1233,1237 ----
- if (TREE_CODE (arg1) == COMPLEX_CST)
- {
-+ register tree type = TREE_TYPE (arg1);
- register tree r1 = TREE_REALPART (arg1);
- register tree i1 = TREE_IMAGPART (arg1);
-*************** const_binop (code, arg1, arg2, notrunc)
-*** 1239,1253 ****
- {
- case PLUS_EXPR:
-! t = build_complex (const_binop (PLUS_EXPR, r1, r2, notrunc),
- const_binop (PLUS_EXPR, i1, i2, notrunc));
- break;
-
- case MINUS_EXPR:
-! t = build_complex (const_binop (MINUS_EXPR, r1, r2, notrunc),
- const_binop (MINUS_EXPR, i1, i2, notrunc));
- break;
-
- case MULT_EXPR:
-! t = build_complex (const_binop (MINUS_EXPR,
- const_binop (MULT_EXPR,
- r1, r2, notrunc),
---- 1243,1260 ----
- {
- case PLUS_EXPR:
-! t = build_complex (type,
-! const_binop (PLUS_EXPR, r1, r2, notrunc),
- const_binop (PLUS_EXPR, i1, i2, notrunc));
- break;
-
- case MINUS_EXPR:
-! t = build_complex (type,
-! const_binop (MINUS_EXPR, r1, r2, notrunc),
- const_binop (MINUS_EXPR, i1, i2, notrunc));
- break;
-
- case MULT_EXPR:
-! t = build_complex (type,
-! const_binop (MINUS_EXPR,
- const_binop (MULT_EXPR,
- r1, r2, notrunc),
-*************** const_binop (code, arg1, arg2, notrunc)
-*** 1271,1293 ****
- notrunc);
-
-! t = build_complex
-! (const_binop (INTEGRAL_TYPE_P (TREE_TYPE (r1))
-! ? TRUNC_DIV_EXPR : RDIV_EXPR,
-! const_binop (PLUS_EXPR,
-! const_binop (MULT_EXPR, r1, r2,
-! notrunc),
-! const_binop (MULT_EXPR, i1, i2,
-! notrunc),
-! notrunc),
-! magsquared, notrunc),
-! const_binop (INTEGRAL_TYPE_P (TREE_TYPE (r1))
-! ? TRUNC_DIV_EXPR : RDIV_EXPR,
-! const_binop (MINUS_EXPR,
-! const_binop (MULT_EXPR, i1, r2,
-! notrunc),
-! const_binop (MULT_EXPR, r1, i2,
-! notrunc),
-! notrunc),
-! magsquared, notrunc));
- }
- break;
---- 1278,1302 ----
- notrunc);
-
-! t = build_complex (type,
-! const_binop
-! (INTEGRAL_TYPE_P (TREE_TYPE (r1))
-! ? TRUNC_DIV_EXPR : RDIV_EXPR,
-! const_binop (PLUS_EXPR,
-! const_binop (MULT_EXPR, r1, r2,
-! notrunc),
-! const_binop (MULT_EXPR, i1, i2,
-! notrunc),
-! notrunc),
-! magsquared, notrunc),
-! const_binop
-! (INTEGRAL_TYPE_P (TREE_TYPE (r1))
-! ? TRUNC_DIV_EXPR : RDIV_EXPR,
-! const_binop (MINUS_EXPR,
-! const_binop (MULT_EXPR, i1, r2,
-! notrunc),
-! const_binop (MULT_EXPR, r1, i2,
-! notrunc),
-! notrunc),
-! magsquared, notrunc));
- }
- break;
-*************** const_binop (code, arg1, arg2, notrunc)
-*** 1296,1300 ****
- abort ();
- }
-- TREE_TYPE (t) = TREE_TYPE (arg1);
- return t;
- }
---- 1305,1308 ----
-*************** size_binop (code, arg0, arg1)
-*** 1346,1363 ****
- {
- /* And some specific cases even faster than that. */
-! if (code == PLUS_EXPR
-! && TREE_INT_CST_LOW (arg0) == 0
-! && TREE_INT_CST_HIGH (arg0) == 0)
- return arg1;
-! if (code == MINUS_EXPR
-! && TREE_INT_CST_LOW (arg1) == 0
-! && TREE_INT_CST_HIGH (arg1) == 0)
- return arg0;
-! if (code == MULT_EXPR
-! && TREE_INT_CST_LOW (arg0) == 1
-! && TREE_INT_CST_HIGH (arg0) == 0)
- return arg1;
- /* Handle general case of two integer constants. */
-! return const_binop (code, arg0, arg1, 0);
- }
-
---- 1354,1367 ----
- {
- /* And some specific cases even faster than that. */
-! if (code == PLUS_EXPR && integer_zerop (arg0))
- return arg1;
-! else if ((code == MINUS_EXPR || code == PLUS_EXPR)
-! && integer_zerop (arg1))
- return arg0;
-! else if (code == MULT_EXPR && integer_onep (arg0))
- return arg1;
-+
- /* Handle general case of two integer constants. */
-! return const_binop (code, arg0, arg1, 1);
- }
-
-*************** fold_convert (t, arg1)
-*** 1482,1486 ****
- {
- if (REAL_VALUE_ISNAN (TREE_REAL_CST (arg1)))
-! return arg1;
- else if (setjmp (float_error))
- {
---- 1486,1494 ----
- {
- if (REAL_VALUE_ISNAN (TREE_REAL_CST (arg1)))
-! {
-! t = arg1;
-! TREE_TYPE (arg1) = type;
-! return t;
-! }
- else if (setjmp (float_error))
- {
-*************** operand_equal_p (arg0, arg1, only_const)
-*** 1644,1687 ****
- STRIP_NOPS (arg1);
-
-! /* If ARG0 and ARG1 are the same SAVE_EXPR, they are necessarily equal.
-! We don't care about side effects in that case because the SAVE_EXPR
-! takes care of that for us. */
-! if (TREE_CODE (arg0) == SAVE_EXPR && arg0 == arg1)
-! return ! only_const;
-!
-! if (TREE_SIDE_EFFECTS (arg0) || TREE_SIDE_EFFECTS (arg1))
- return 0;
-
-! if (TREE_CODE (arg0) == TREE_CODE (arg1)
-! && TREE_CODE (arg0) == ADDR_EXPR
-! && TREE_OPERAND (arg0, 0) == TREE_OPERAND (arg1, 0))
-! return 1;
-!
-! if (TREE_CODE (arg0) == TREE_CODE (arg1)
-! && TREE_CODE (arg0) == INTEGER_CST
-! && TREE_INT_CST_LOW (arg0) == TREE_INT_CST_LOW (arg1)
-! && TREE_INT_CST_HIGH (arg0) == TREE_INT_CST_HIGH (arg1))
- return 1;
-
-! /* Detect when real constants are equal. */
-! if (TREE_CODE (arg0) == TREE_CODE (arg1)
-! && TREE_CODE (arg0) == REAL_CST)
-! return !bcmp ((char *) &TREE_REAL_CST (arg0),
-! (char *) &TREE_REAL_CST (arg1),
-! sizeof (REAL_VALUE_TYPE));
-
- if (only_const)
- return 0;
-
-- if (arg0 == arg1)
-- return 1;
--
-- if (TREE_CODE (arg0) != TREE_CODE (arg1))
-- return 0;
-- /* This is needed for conversions and for COMPONENT_REF.
-- Might as well play it safe and always test this. */
-- if (TYPE_MODE (TREE_TYPE (arg0)) != TYPE_MODE (TREE_TYPE (arg1)))
-- return 0;
--
- switch (TREE_CODE_CLASS (TREE_CODE (arg0)))
- {
---- 1652,1710 ----
- STRIP_NOPS (arg1);
-
-! if (TREE_CODE (arg0) != TREE_CODE (arg1)
-! /* This is needed for conversions and for COMPONENT_REF.
-! Might as well play it safe and always test this. */
-! || TYPE_MODE (TREE_TYPE (arg0)) != TYPE_MODE (TREE_TYPE (arg1)))
- return 0;
-
-! /* If ARG0 and ARG1 are the same SAVE_EXPR, they are necessarily equal.
-! We don't care about side effects in that case because the SAVE_EXPR
-! takes care of that for us. In all other cases, two expressions are
-! equal if they have no side effects. If we have two identical
-! expressions with side effects that should be treated the same due
-! to the only side effects being identical SAVE_EXPR's, that will
-! be detected in the recursive calls below. */
-! if (arg0 == arg1 && ! only_const
-! && (TREE_CODE (arg0) == SAVE_EXPR
-! || (! TREE_SIDE_EFFECTS (arg0) && ! TREE_SIDE_EFFECTS (arg1))))
- return 1;
-
-! /* Next handle constant cases, those for which we can return 1 even
-! if ONLY_CONST is set. */
-! if (TREE_CONSTANT (arg0) && TREE_CONSTANT (arg1))
-! switch (TREE_CODE (arg0))
-! {
-! case INTEGER_CST:
-! return (! TREE_CONSTANT_OVERFLOW (arg0)
-! && ! TREE_CONSTANT_OVERFLOW (arg1)
-! && TREE_INT_CST_LOW (arg0) == TREE_INT_CST_LOW (arg1)
-! && TREE_INT_CST_HIGH (arg0) == TREE_INT_CST_HIGH (arg1));
-!
-! case REAL_CST:
-! return (! TREE_CONSTANT_OVERFLOW (arg0)
-! && ! TREE_CONSTANT_OVERFLOW (arg1)
-! && REAL_VALUES_EQUAL (TREE_REAL_CST (arg0),
-! TREE_REAL_CST (arg1)));
-!
-! case COMPLEX_CST:
-! return (operand_equal_p (TREE_REALPART (arg0), TREE_REALPART (arg1),
-! only_const)
-! && operand_equal_p (TREE_IMAGPART (arg0), TREE_IMAGPART (arg1),
-! only_const));
-!
-! case STRING_CST:
-! return (TREE_STRING_LENGTH (arg0) == TREE_STRING_LENGTH (arg1)
-! && ! strncmp (TREE_STRING_POINTER (arg0),
-! TREE_STRING_POINTER (arg1),
-! TREE_STRING_LENGTH (arg0)));
-!
-! case ADDR_EXPR:
-! return operand_equal_p (TREE_OPERAND (arg0, 0), TREE_OPERAND (arg1, 0),
-! 0);
-! }
-
- if (only_const)
- return 0;
-
- switch (TREE_CODE_CLASS (TREE_CODE (arg0)))
- {
-*************** operand_equal_p (arg0, arg1, only_const)
-*** 1698,1705 ****
- case '<':
- case '2':
-! return (operand_equal_p (TREE_OPERAND (arg0, 0),
-! TREE_OPERAND (arg1, 0), 0)
- && operand_equal_p (TREE_OPERAND (arg0, 1),
-! TREE_OPERAND (arg1, 1), 0));
-
- case 'r':
---- 1721,1740 ----
- case '<':
- case '2':
-! if (operand_equal_p (TREE_OPERAND (arg0, 0), TREE_OPERAND (arg1, 0), 0)
-! && operand_equal_p (TREE_OPERAND (arg0, 1), TREE_OPERAND (arg1, 1),
-! 0))
-! return 1;
-!
-! /* For commutative ops, allow the other order. */
-! return ((TREE_CODE (arg0) == PLUS_EXPR || TREE_CODE (arg0) == MULT_EXPR
-! || TREE_CODE (arg0) == MIN_EXPR || TREE_CODE (arg0) == MAX_EXPR
-! || TREE_CODE (arg0) == BIT_IOR_EXPR
-! || TREE_CODE (arg0) == BIT_XOR_EXPR
-! || TREE_CODE (arg0) == BIT_AND_EXPR
-! || TREE_CODE (arg0) == NE_EXPR || TREE_CODE (arg0) == EQ_EXPR)
-! && operand_equal_p (TREE_OPERAND (arg0, 0),
-! TREE_OPERAND (arg1, 1), 0)
- && operand_equal_p (TREE_OPERAND (arg0, 1),
-! TREE_OPERAND (arg1, 0), 0));
-
- case 'r':
-*************** optimize_bit_field_compare (code, compar
-*** 2212,2215 ****
---- 2247,2251 ----
- int lunsignedp, runsignedp;
- int lvolatilep = 0, rvolatilep = 0;
-+ int alignment;
- tree linner, rinner;
- tree mask;
-*************** optimize_bit_field_compare (code, compar
-*** 2220,2224 ****
- extraction at all and so can do nothing. */
- linner = get_inner_reference (lhs, &lbitsize, &lbitpos, &offset, &lmode,
-! &lunsignedp, &lvolatilep);
- if (linner == lhs || lbitsize == GET_MODE_BITSIZE (lmode) || lbitsize < 0
- || offset != 0)
---- 2256,2260 ----
- extraction at all and so can do nothing. */
- linner = get_inner_reference (lhs, &lbitsize, &lbitpos, &offset, &lmode,
-! &lunsignedp, &lvolatilep, &alignment);
- if (linner == lhs || lbitsize == GET_MODE_BITSIZE (lmode) || lbitsize < 0
- || offset != 0)
-*************** optimize_bit_field_compare (code, compar
-*** 2229,2234 ****
- /* If this is not a constant, we can only do something if bit positions,
- sizes, and signedness are the same. */
-! rinner = get_inner_reference (rhs, &rbitsize, &rbitpos, &offset,
-! &rmode, &runsignedp, &rvolatilep);
-
- if (rinner == rhs || lbitpos != rbitpos || lbitsize != rbitsize
---- 2265,2270 ----
- /* If this is not a constant, we can only do something if bit positions,
- sizes, and signedness are the same. */
-! rinner = get_inner_reference (rhs, &rbitsize, &rbitpos, &offset, &rmode,
-! &runsignedp, &rvolatilep, &alignment);
-
- if (rinner == rhs || lbitpos != rbitpos || lbitsize != rbitsize
-*************** decode_field_reference (exp, pbitsize, p
-*** 2403,2406 ****
---- 2439,2443 ----
- tree unsigned_type;
- int precision;
-+ int alignment;
-
- /* All the optimizations using this function assume integer fields.
-*************** decode_field_reference (exp, pbitsize, p
-*** 2423,2427 ****
-
- inner = get_inner_reference (exp, pbitsize, pbitpos, &offset, pmode,
-! punsignedp, pvolatilep);
- if ((inner == exp && and_mask == 0)
- || *pbitsize < 0 || offset != 0)
---- 2460,2464 ----
-
- inner = get_inner_reference (exp, pbitsize, pbitpos, &offset, pmode,
-! punsignedp, pvolatilep, &alignment);
- if ((inner == exp && and_mask == 0)
- || *pbitsize < 0 || offset != 0)
-*************** fold_truthop (code, truth_type, lhs, rhs
-*** 2767,2770 ****
---- 2804,2810 ----
- {
- /* Avoid evaluating the variable part twice. */
-+ if (current_function_decl == 0)
-+ return 0;
-+
- ll_arg = save_expr (ll_arg);
- lhs = build (lcode, TREE_TYPE (lhs), ll_arg, lr_arg);
-*************** strip_compound_expr (t, s)
-*** 3065,3068 ****
---- 3105,3208 ----
- }
-
-+ /* Determine if first argument is a multiple of second argument.
-+ Return 0 if it is not, or is not easily determined to so be.
-+
-+ An example of the sort of thing we care about (at this point --
-+ this routine could surely be made more general, and expanded
-+ to do what the *_DIV_EXPR's fold() cases do now) is discovering
-+ that
-+
-+ SAVE_EXPR (I) * SAVE_EXPR (J * 8)
-+
-+ is a multiple of
-+
-+ SAVE_EXPR (J * 8)
-+
-+ when we know that the two `SAVE_EXPR (J * 8)' nodes are the
-+ same node (which means they will have the same value at run
-+ time, even though we don't know when they'll be assigned).
-+
-+ This code also handles discovering that
-+
-+ SAVE_EXPR (I) * SAVE_EXPR (J * 8)
-+
-+ is a multiple of
-+
-+ 8
-+
-+ (of course) so we don't have to worry about dealing with a
-+ possible remainder.
-+
-+ Note that we _look_ inside a SAVE_EXPR only to determine
-+ how it was calculated; it is not safe for fold() to do much
-+ of anything else with the internals of a SAVE_EXPR, since
-+ fold() cannot know when it will be evaluated at run time.
-+ For example, the latter example above _cannot_ be implemented
-+ as
-+
-+ SAVE_EXPR (I) * J
-+
-+ or any variant thereof, since the value of J at evaluation time
-+ of the original SAVE_EXPR is not necessarily the same at the time
-+ the new expression is evaluated. The only optimization of this
-+ sort that would be valid is changing
-+
-+ SAVE_EXPR (I) * SAVE_EXPR (SAVE_EXPR (J) * 8)
-+ divided by
-+ 8
-+
-+ to
-+
-+ SAVE_EXPR (I) * SAVE_EXPR (J)
-+
-+ (where the same SAVE_EXPR (J) is used in the original and the
-+ transformed version). */
-+
-+ static int
-+ multiple_of_p (type, top, bottom)
-+ tree type;
-+ tree top;
-+ tree bottom;
-+ {
-+ if (operand_equal_p (top, bottom, 0))
-+ return 1;
-+
-+ if (TREE_CODE (type) != INTEGER_TYPE)
-+ return 0;
-+
-+ switch (TREE_CODE (top))
-+ {
-+ case MULT_EXPR:
-+ return (multiple_of_p (type, TREE_OPERAND (top, 0), bottom)
-+ || multiple_of_p (type, TREE_OPERAND (top, 1), bottom));
-+
-+ case PLUS_EXPR:
-+ case MINUS_EXPR:
-+ return (multiple_of_p (type, TREE_OPERAND (top, 0), bottom)
-+ && multiple_of_p (type, TREE_OPERAND (top, 1), bottom));
-+
-+ case NOP_EXPR:
-+ /* Punt if conversion from non-integral or wider integral type. */
-+ if ((TREE_CODE (TREE_TYPE (TREE_OPERAND (top, 0))) != INTEGER_TYPE)
-+ || (TYPE_PRECISION (type)
-+ < TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (top, 0)))))
-+ return 0;
-+ /* Fall through. */
-+ case SAVE_EXPR:
-+ return multiple_of_p (type, TREE_OPERAND (top, 0), bottom);
-+
-+ case INTEGER_CST:
-+ if ((TREE_CODE (bottom) != INTEGER_CST)
-+ || (tree_int_cst_sgn (top) < 0)
-+ || (tree_int_cst_sgn (bottom) < 0))
-+ return 0;
-+ return integer_zerop (const_binop (TRUNC_MOD_EXPR,
-+ top, bottom, 0));
-+
-+ default:
-+ return 0;
-+ }
-+ }
-+
- /* Perform constant folding and related simplification of EXPR.
- The related simplifications include x*1 => x, x*0 => 0, etc.,
-*************** fold (expr)
-*** 3091,3096 ****
- int wins = 1;
-
-! /* Don't try to process an RTL_EXPR since its operands aren't trees. */
-! if (code == RTL_EXPR)
- return t;
-
---- 3231,3237 ----
- int wins = 1;
-
-! /* Don't try to process an RTL_EXPR since its operands aren't trees.
-! Likewise for a SAVE_EXPR that's already been evaluated. */
-! if (code == RTL_EXPR || (code == SAVE_EXPR && SAVE_EXPR_RTL (t)) != 0)
- return t;
-
-*************** fold (expr)
-*** 3280,3285 ****
- fold (build (code, type,
- arg0, TREE_OPERAND (arg1, 1))));
-! else if (TREE_CODE (arg1) == COND_EXPR
-! || TREE_CODE_CLASS (TREE_CODE (arg1)) == '<')
- {
- tree test, true_value, false_value;
---- 3421,3427 ----
- fold (build (code, type,
- arg0, TREE_OPERAND (arg1, 1))));
-! else if ((TREE_CODE (arg1) == COND_EXPR
-! || TREE_CODE_CLASS (TREE_CODE (arg1)) == '<')
-! && (! TREE_SIDE_EFFECTS (arg0) || current_function_decl != 0))
- {
- tree test, true_value, false_value;
-*************** fold (expr)
-*** 3319,3323 ****
- return fold (build (COND_EXPR, type, test, lhs, rhs));
-
-! arg0 = save_expr (arg0);
- }
-
---- 3461,3466 ----
- return fold (build (COND_EXPR, type, test, lhs, rhs));
-
-! if (current_function_decl != 0)
-! arg0 = save_expr (arg0);
- }
-
-*************** fold (expr)
-*** 3336,3341 ****
- return build (COMPOUND_EXPR, type, TREE_OPERAND (arg0, 0),
- fold (build (code, type, TREE_OPERAND (arg0, 1), arg1)));
-! else if (TREE_CODE (arg0) == COND_EXPR
-! || TREE_CODE_CLASS (TREE_CODE (arg0)) == '<')
- {
- tree test, true_value, false_value;
---- 3479,3485 ----
- return build (COMPOUND_EXPR, type, TREE_OPERAND (arg0, 0),
- fold (build (code, type, TREE_OPERAND (arg0, 1), arg1)));
-! else if ((TREE_CODE (arg0) == COND_EXPR
-! || TREE_CODE_CLASS (TREE_CODE (arg0)) == '<')
-! && (! TREE_SIDE_EFFECTS (arg1) || current_function_decl != 0))
- {
- tree test, true_value, false_value;
-*************** fold (expr)
-*** 3367,3371 ****
- return fold (build (COND_EXPR, type, test, lhs, rhs));
-
-! arg1 = save_expr (arg1);
- }
-
---- 3511,3516 ----
- return fold (build (COND_EXPR, type, test, lhs, rhs));
-
-! if (current_function_decl != 0)
-! arg1 = save_expr (arg1);
- }
-
-*************** fold (expr)
-*** 3611,3615 ****
- TREE_OPERAND (arg0, 1))));
- else if (TREE_CODE (arg0) == COMPLEX_CST)
-! return build_complex (TREE_OPERAND (arg0, 0),
- fold (build1 (NEGATE_EXPR,
- TREE_TYPE (TREE_TYPE (arg0)),
---- 3756,3760 ----
- TREE_OPERAND (arg0, 1))));
- else if (TREE_CODE (arg0) == COMPLEX_CST)
-! return build_complex (type, TREE_OPERAND (arg0, 0),
- fold (build1 (NEGATE_EXPR,
- TREE_TYPE (TREE_TYPE (arg0)),
-*************** fold (expr)
-*** 3889,3893 ****
- return non_lvalue (convert (type, arg0));
- /* x*2 is x+x */
-! if (! wins && real_twop (arg1))
- {
- tree arg = save_expr (arg0);
---- 4034,4038 ----
- return non_lvalue (convert (type, arg0));
- /* x*2 is x+x */
-! if (! wins && real_twop (arg1) && current_function_decl != 0)
- {
- tree arg = save_expr (arg0);
-*************** fold (expr)
-*** 4014,4018 ****
- return non_lvalue (convert (type, arg0));
- if (integer_zerop (arg1))
-! return t;
-
- /* If we have ((a / C1) / C2) where both division are the same type, try
---- 4159,4179 ----
- return non_lvalue (convert (type, arg0));
- if (integer_zerop (arg1))
-! {
-! if (extra_warnings)
-! warning ("integer division by zero");
-! return t;
-! }
-!
-! /* If arg0 is a multiple of arg1, then rewrite to the fastest div
-! operation, EXACT_DIV_EXPR. Otherwise, handle folding of
-! general divide. Note that only CEIL_DIV_EXPR is rewritten now,
-! only because the others seem to be faster in some cases, e.g. the
-! nonoptimized TRUNC_DIV_EXPR or FLOOR_DIV_EXPR on DEC Alpha. This
-! is probably just due to more work being done on it in expmed.c than
-! on EXACT_DIV_EXPR, and could presumably be fixed, since
-! EXACT_DIV_EXPR should _never_ be slower than *_DIV_EXPR. */
-! if ((code == CEIL_DIV_EXPR)
-! && multiple_of_p (type, arg0, arg1))
-! return fold (build (EXACT_DIV_EXPR, type, arg0, arg1));
-
- /* If we have ((a / C1) / C2) where both division are the same type, try
-*************** fold (expr)
-*** 4049,4053 ****
- tree xarg0 = arg0;
-
-! if (TREE_CODE (xarg0) == SAVE_EXPR)
- have_save_expr = 1, xarg0 = TREE_OPERAND (xarg0, 0);
-
---- 4210,4214 ----
- tree xarg0 = arg0;
-
-! if (TREE_CODE (xarg0) == SAVE_EXPR && SAVE_EXPR_RTL (xarg0) == 0)
- have_save_expr = 1, xarg0 = TREE_OPERAND (xarg0, 0);
-
-*************** fold (expr)
-*** 4067,4071 ****
- }
-
-! if (TREE_CODE (xarg0) == SAVE_EXPR)
- have_save_expr = 1, xarg0 = TREE_OPERAND (xarg0, 0);
-
---- 4228,4232 ----
- }
-
-! if (TREE_CODE (xarg0) == SAVE_EXPR && SAVE_EXPR_RTL (xarg0) == 0)
- have_save_expr = 1, xarg0 = TREE_OPERAND (xarg0, 0);
-
-*************** fold (expr)
-*** 5050,5054 ****
- case COMPLEX_EXPR:
- if (wins)
-! return build_complex (arg0, arg1);
- return t;
-
---- 5211,5215 ----
- case COMPLEX_EXPR:
- if (wins)
-! return build_complex (type, arg0, arg1);
- return t;
-
-diff -rcp2N gcc-2.7.2.3/function.c gcc-2.7.2.3.f.1/function.c
-*** gcc-2.7.2.3/function.c Sun Aug 31 09:39:47 1997
---- gcc-2.7.2.3.f.1/function.c Sun Aug 31 09:21:15 1997
-*************** assign_stack_temp (mode, size, keep)
-*** 917,920 ****
---- 917,925 ----
- p->keep = keep;
- }
-+
-+ /* We may be reusing an old slot, so clear any MEM flags that may have been
-+ set from before. */
-+ RTX_UNCHANGING_P (p->slot) = 0;
-+ MEM_IN_STRUCT_P (p->slot) = 0;
- return p->slot;
- }
-*************** find_temp_slot_from_address (x)
-*** 994,999 ****
- if (! p->in_use)
- continue;
-! else if (XEXP (p->slot, 0) == x
-! || p->address == x)
- return p;
-
---- 999,1004 ----
- if (! p->in_use)
- continue;
-! else if (rtx_equal_p (XEXP (p->slot, 0), x)
-! || rtx_equal_p (p->address, x))
- return p;
-
-*************** free_temps_for_rtl_expr (t)
-*** 1184,1187 ****
---- 1189,1207 ----
- }
-
-+ /* Mark all temporaries ever allocated in this functon as not suitable
-+ for reuse until the current level is exited. */
-+
-+ void
-+ mark_all_temps_used ()
-+ {
-+ struct temp_slot *p;
-+
-+ for (p = temp_slots; p; p = p->next)
-+ {
-+ p->in_use = p->keep = 1;
-+ p->level = MIN (p->level, temp_slot_level);
-+ }
-+ }
-+
- /* Push deeper into the nesting level for stack temporaries. */
-
-*************** pop_temp_slots ()
-*** 1208,1211 ****
---- 1228,1242 ----
- temp_slot_level--;
- }
-+
-+ /* Initialize temporary slots. */
-+
-+ void
-+ init_temp_slots ()
-+ {
-+ /* We have not allocated any temporaries yet. */
-+ temp_slots = 0;
-+ temp_slot_level = 0;
-+ target_temp_slot_level = 0;
-+ }
-
- /* Retroactively move an auto variable from a register to a stack slot.
-*************** instantiate_virtual_regs_1 (loc, object,
-*** 2838,2842 ****
- case MEM:
- /* Most cases of MEM that convert to valid addresses have already been
-! handled by our scan of regno_reg_rtx. The only special handling we
- need here is to make a copy of the rtx to ensure it isn't being
- shared if we have to change it to a pseudo.
---- 2869,2873 ----
- case MEM:
- /* Most cases of MEM that convert to valid addresses have already been
-! handled by our scan of decls. The only special handling we
- need here is to make a copy of the rtx to ensure it isn't being
- shared if we have to change it to a pseudo.
-*************** instantiate_virtual_regs_1 (loc, object,
-*** 2896,2900 ****
- has less restrictions on an address that some other insn.
- In that case, we will modify the shared address. This case
-! doesn't seem very likely, though. */
-
- if (instantiate_virtual_regs_1 (&XEXP (x, 0),
---- 2927,2933 ----
- has less restrictions on an address that some other insn.
- In that case, we will modify the shared address. This case
-! doesn't seem very likely, though. One case where this could
-! happen is in the case of a USE or CLOBBER reference, but we
-! take care of that below. */
-
- if (instantiate_virtual_regs_1 (&XEXP (x, 0),
-*************** instantiate_virtual_regs_1 (loc, object,
-*** 2909,2914 ****
-
- /* Fall through to generic unary operation case. */
-- case USE:
-- case CLOBBER:
- case SUBREG:
- case STRICT_LOW_PART:
---- 2942,2945 ----
-*************** instantiate_virtual_regs_1 (loc, object,
-*** 2927,2930 ****
---- 2958,2978 ----
- goto restart;
-
-+ case USE:
-+ case CLOBBER:
-+ /* If the operand is a MEM, see if the change is a valid MEM. If not,
-+ go ahead and make the invalid one, but do it to a copy. For a REG,
-+ just make the recursive call, since there's no chance of a problem. */
-+
-+ if ((GET_CODE (XEXP (x, 0)) == MEM
-+ && instantiate_virtual_regs_1 (&XEXP (XEXP (x, 0), 0), XEXP (x, 0),
-+ 0))
-+ || (GET_CODE (XEXP (x, 0)) == REG
-+ && instantiate_virtual_regs_1 (&XEXP (x, 0), object, 0)))
-+ return 1;
-+
-+ XEXP (x, 0) = copy_rtx (XEXP (x, 0));
-+ loc = &XEXP (x, 0);
-+ goto restart;
-+
- case REG:
- /* Try to replace with a PLUS. If that doesn't work, compute the sum
-*************** assign_parms (fndecl, second_time)
-*** 3404,3409 ****
-
- /* If this is a memory ref that contains aggregate components,
-! mark it as such for cse and loop optimize. */
- MEM_IN_STRUCT_P (stack_parm) = aggregate;
- }
-
---- 3452,3459 ----
-
- /* If this is a memory ref that contains aggregate components,
-! mark it as such for cse and loop optimize. Likewise if it
-! is readonly. */
- MEM_IN_STRUCT_P (stack_parm) = aggregate;
-+ RTX_UNCHANGING_P (stack_parm) = TREE_READONLY (parm);
- }
-
-*************** assign_parms (fndecl, second_time)
-*** 3627,3631 ****
-
- parmreg = gen_reg_rtx (promoted_nominal_mode);
-! REG_USERVAR_P (parmreg) = 1;
-
- /* If this was an item that we received a pointer to, set DECL_RTL
---- 3677,3681 ----
-
- parmreg = gen_reg_rtx (promoted_nominal_mode);
-! mark_user_reg (parmreg);
-
- /* If this was an item that we received a pointer to, set DECL_RTL
-*************** assign_parms (fndecl, second_time)
-*** 3695,3699 ****
- Pmode above. We must use the actual mode of the parm. */
- parmreg = gen_reg_rtx (TYPE_MODE (TREE_TYPE (parm)));
-! REG_USERVAR_P (parmreg) = 1;
- emit_move_insn (parmreg, DECL_RTL (parm));
- DECL_RTL (parm) = parmreg;
---- 3745,3749 ----
- Pmode above. We must use the actual mode of the parm. */
- parmreg = gen_reg_rtx (TYPE_MODE (TREE_TYPE (parm)));
-! mark_user_reg (parmreg);
- emit_move_insn (parmreg, DECL_RTL (parm));
- DECL_RTL (parm) = parmreg;
-*************** init_function_start (subr, filename, lin
-*** 4814,4821 ****
- rtl_expr_chain = 0;
-
-! /* We have not allocated any temporaries yet. */
-! temp_slots = 0;
-! temp_slot_level = 0;
-! target_temp_slot_level = 0;
-
- /* Within function body, compute a type's size as soon it is laid out. */
---- 4864,4869 ----
- rtl_expr_chain = 0;
-
-! /* Set up to allocate temporaries. */
-! init_temp_slots ();
-
- /* Within function body, compute a type's size as soon it is laid out. */
-*************** expand_function_end (filename, line, end
-*** 5295,5298 ****
---- 5343,5366 ----
- /* Put those insns at entry to the containing function (this one). */
- emit_insns_before (seq, tail_recursion_reentry);
-+ }
-+
-+ /* If we are doing stack checking and this function makes calls,
-+ do a stack probe at the start of the function to ensure we have enough
-+ space for another stack frame. */
-+ if (flag_stack_check && ! STACK_CHECK_BUILTIN)
-+ {
-+ rtx insn, seq;
-+
-+ for (insn = get_insns (); insn; insn = NEXT_INSN (insn))
-+ if (GET_CODE (insn) == CALL_INSN)
-+ {
-+ start_sequence ();
-+ probe_stack_range (STACK_CHECK_PROTECT,
-+ GEN_INT (STACK_CHECK_MAX_FRAME_SIZE));
-+ seq = get_insns ();
-+ end_sequence ();
-+ emit_insns_before (seq, tail_recursion_reentry);
-+ break;
-+ }
- }
-
-diff -rcp2N gcc-2.7.2.3/gcc.c gcc-2.7.2.3.f.1/gcc.c
-*** gcc-2.7.2.3/gcc.c Sun Aug 31 09:39:48 1997
---- gcc-2.7.2.3.f.1/gcc.c Sun Aug 31 09:21:16 1997
-*************** static int is_directory PROTO((char *,
-*** 296,300 ****
- static void validate_switches PROTO((char *));
- static void validate_all_switches PROTO((void));
-! static void give_switch PROTO((int, int));
- static int used_arg PROTO((char *, int));
- static int default_arg PROTO((char *, int));
---- 296,300 ----
- static void validate_switches PROTO((char *));
- static void validate_all_switches PROTO((void));
-! static void give_switch PROTO((int, int, int));
- static int used_arg PROTO((char *, int));
- static int default_arg PROTO((char *, int));
-*************** or with constant text in a single argume
-*** 405,408 ****
---- 405,409 ----
- name starts with `o'. %{o*} would substitute this text,
- including the space; thus, two arguments would be generated.
-+ %{^S*} likewise, but don't put a blank between a switch and any args.
- %{S*:X} substitutes X if one or more switches whose names start with -S are
- specified to CC. Note that the tail part of the -S option
-*************** process_command (argc, argv)
-*** 2649,2655 ****
- else
- {
-! char *string = xmalloc (len + 1);
- strncpy (string, value, len-7);
-! strcat (string, "include");
- add_prefix (&include_prefixes, string, 1, 0, 0);
- }
---- 2650,2656 ----
- else
- {
-! char *string = xmalloc (len);
- strncpy (string, value, len-7);
-! strcpy (string+len-7, "include");
- add_prefix (&include_prefixes, string, 1, 0, 0);
- }
-*************** process_command (argc, argv)
-*** 2828,2831 ****
---- 2829,2835 ----
- infiles[n_infiles++].name = argv[i];
- }
-+ /* -save-temps overrides -pipe, so that temp files are produced */
-+ else if (save_temps_flag && strcmp (argv[i], "-pipe") == 0)
-+ ;
- else if (argv[i][0] == '-' && argv[i][1] != 0)
- {
-*************** handle_braces (p)
-*** 3832,3835 ****
---- 3836,3844 ----
- int negate = 0;
- int suffix = 0;
-+ int include_blanks = 1;
-+
-+ if (*p == '^')
-+ /* A '^' after the open-brace means to not give blanks before args. */
-+ include_blanks = 0, ++p;
-
- if (*p == '|')
-*************** handle_braces (p)
-*** 3897,3901 ****
- if (!strncmp (switches[i].part1, filter, p - filter)
- && check_live_switch (i, p - filter))
-! give_switch (i, 0);
- }
- else
---- 3906,3910 ----
- if (!strncmp (switches[i].part1, filter, p - filter)
- && check_live_switch (i, p - filter))
-! give_switch (i, 0, include_blanks);
- }
- else
-*************** handle_braces (p)
-*** 3936,3940 ****
- do_spec_1 (string, 0, &switches[i].part1[hard_match_len]);
- /* Pass any arguments this switch has. */
-! give_switch (i, 1);
- }
-
---- 3945,3949 ----
- do_spec_1 (string, 0, &switches[i].part1[hard_match_len]);
- /* Pass any arguments this switch has. */
-! give_switch (i, 1, 1);
- }
-
-*************** handle_braces (p)
-*** 3980,3984 ****
- if (*p == '}')
- {
-! give_switch (i, 0);
- }
- else
---- 3989,3993 ----
- if (*p == '}')
- {
-! give_switch (i, 0, include_blanks);
- }
- else
-*************** check_live_switch (switchnum, prefix_len
-*** 4081,4090 ****
- This cannot fail since it never finishes a command line.
-
-! If OMIT_FIRST_WORD is nonzero, then we omit .part1 of the argument. */
-
- static void
-! give_switch (switchnum, omit_first_word)
- int switchnum;
- int omit_first_word;
- {
- if (!omit_first_word)
---- 4090,4103 ----
- This cannot fail since it never finishes a command line.
-
-! If OMIT_FIRST_WORD is nonzero, then we omit .part1 of the argument.
-!
-! If INCLUDE_BLANKS is nonzero, then we include blanks before each argument
-! of the switch. */
-
- static void
-! give_switch (switchnum, omit_first_word, include_blanks)
- int switchnum;
- int omit_first_word;
-+ int include_blanks;
- {
- if (!omit_first_word)
-*************** give_switch (switchnum, omit_first_word)
-*** 4093,4097 ****
- do_spec_1 (switches[switchnum].part1, 1, NULL_PTR);
- }
-! do_spec_1 (" ", 0, NULL_PTR);
- if (switches[switchnum].args != 0)
- {
---- 4106,4110 ----
- do_spec_1 (switches[switchnum].part1, 1, NULL_PTR);
- }
-!
- if (switches[switchnum].args != 0)
- {
-*************** give_switch (switchnum, omit_first_word)
-*** 4099,4106 ****
- for (p = switches[switchnum].args; *p; p++)
- {
- do_spec_1 (*p, 1, NULL_PTR);
-- do_spec_1 (" ", 0, NULL_PTR);
- }
- }
- switches[switchnum].valid = 1;
- }
---- 4112,4122 ----
- for (p = switches[switchnum].args; *p; p++)
- {
-+ if (include_blanks)
-+ do_spec_1 (" ", 0, NULL_PTR);
- do_spec_1 (*p, 1, NULL_PTR);
- }
- }
-+
-+ do_spec_1 (" ", 0, NULL_PTR);
- switches[switchnum].valid = 1;
- }
-diff -rcp2N gcc-2.7.2.3/gcc.texi gcc-2.7.2.3.f.1/gcc.texi
-*** gcc-2.7.2.3/gcc.texi Wed Jul 24 18:57:41 1996
---- gcc-2.7.2.3.f.1/gcc.texi Fri Jul 11 00:08:58 1997
-*************** original English.
-*** 149,152 ****
---- 149,153 ----
- @sp 3
- @center Last updated 29 June 1996
-+ @center (Revised for GNU Fortran 1997-01-10)
- @sp 1
- @c The version number appears twice more in this file.
-diff -rcp2N gcc-2.7.2.3/glimits.h gcc-2.7.2.3.f.1/glimits.h
-*** gcc-2.7.2.3/glimits.h Wed Sep 29 21:30:54 1993
---- gcc-2.7.2.3.f.1/glimits.h Fri Jul 11 00:08:58 1997
-***************
-*** 64,68 ****
- (Same as `int'). */
- #ifndef __LONG_MAX__
-! #define __LONG_MAX__ 2147483647L
- #endif
- #undef LONG_MIN
---- 64,72 ----
- (Same as `int'). */
- #ifndef __LONG_MAX__
-! # ifndef __alpha__
-! # define __LONG_MAX__ 2147483647L
-! # else
-! # define __LONG_MAX__ 9223372036854775807LL
-! # endif /* __alpha__ */
- #endif
- #undef LONG_MIN
-diff -rcp2N gcc-2.7.2.3/integrate.c gcc-2.7.2.3.f.1/integrate.c
-*** gcc-2.7.2.3/integrate.c Fri Oct 20 22:48:13 1995
---- gcc-2.7.2.3.f.1/integrate.c Sun Aug 10 22:46:31 1997
-*************** static rtx copy_for_inline PROTO((rtx));
-*** 67,70 ****
---- 67,71 ----
- static void integrate_parm_decls PROTO((tree, struct inline_remap *, rtvec));
- static void integrate_decl_tree PROTO((tree, int, struct inline_remap *));
-+ static void save_constants_in_decl_trees PROTO ((tree));
- static void subst_constants PROTO((rtx *, rtx, struct inline_remap *));
- static void restore_constants PROTO((rtx *));
-*************** save_for_inline_copying (fndecl)
-*** 435,438 ****
---- 436,443 ----
- }
-
-+ /* Also scan all decls, and replace any constant pool references with the
-+ actual constant. */
-+ save_constants_in_decl_trees (DECL_INITIAL (fndecl));
-+
- /* Clear out the constant pool so that we can recreate it with the
- copied constants below. */
-*************** save_for_inline_nocopy (fndecl)
-*** 781,784 ****
---- 786,793 ----
- }
-
-+ /* Also scan all decls, and replace any constant pool references with the
-+ actual constant. */
-+ save_constants_in_decl_trees (DECL_INITIAL (fndecl));
-+
- /* We have now allocated all that needs to be allocated permanently
- on the rtx obstack. Set our high-water mark, so that we
-*************** expand_inline_function (fndecl, parms, t
-*** 1571,1575 ****
- if (GET_CODE (XEXP (loc, 0)) == REG)
- {
-! temp = force_reg (Pmode, structure_value_addr);
- map->reg_map[REGNO (XEXP (loc, 0))] = temp;
- if ((CONSTANT_P (structure_value_addr)
---- 1580,1585 ----
- if (GET_CODE (XEXP (loc, 0)) == REG)
- {
-! temp = force_reg (Pmode,
-! force_operand (structure_value_addr, NULL_RTX));
- map->reg_map[REGNO (XEXP (loc, 0))] = temp;
- if ((CONSTANT_P (structure_value_addr)
-*************** integrate_decl_tree (let, level, map)
-*** 2029,2032 ****
---- 2039,2059 ----
- }
- }
-+ }
-+
-+ /* Given a BLOCK node LET, search for all DECL_RTL fields, and pass them
-+ through save_constants. */
-+
-+ static void
-+ save_constants_in_decl_trees (let)
-+ tree let;
-+ {
-+ tree t;
-+
-+ for (t = BLOCK_VARS (let); t; t = TREE_CHAIN (t))
-+ if (DECL_RTL (t) != 0)
-+ save_constants (&DECL_RTL (t));
-+
-+ for (t = BLOCK_SUBBLOCKS (let); t; t = TREE_CHAIN (t))
-+ save_constants_in_decl_trees (t);
- }
-
-diff -rcp2N gcc-2.7.2.3/invoke.texi gcc-2.7.2.3.f.1/invoke.texi
-*** gcc-2.7.2.3/invoke.texi Tue Oct 3 15:40:43 1995
---- gcc-2.7.2.3.f.1/invoke.texi Fri Aug 29 07:52:17 1997
-***************
-*** 1,3 ****
-! @c Copyright (C) 1988, 89, 92, 93, 94, 1995 Free Software Foundation, Inc.
- @c This is part of the GCC manual.
- @c For copying conditions, see the file gcc.texi.
---- 1,3 ----
-! @c Copyright (C) 1988, 89, 92-95, 1997 Free Software Foundation, Inc.
- @c This is part of the GCC manual.
- @c For copying conditions, see the file gcc.texi.
-*************** in the following sections.
-*** 149,152 ****
---- 149,153 ----
- -fschedule-insns2 -fstrength-reduce -fthread-jumps
- -funroll-all-loops -funroll-loops
-+ -fmove-all-movables -freduce-all-givs -frerun-loop-opt
- -O -O0 -O1 -O2 -O3
- @end smallexample
-*************** in addition to the above:
-*** 330,334 ****
- -freg-struct-return -fshared-data -fshort-enums
- -fshort-double -fvolatile -fvolatile-global
-! -fverbose-asm -fpack-struct +e0 +e1
- @end smallexample
- @end table
---- 331,337 ----
- -freg-struct-return -fshared-data -fshort-enums
- -fshort-double -fvolatile -fvolatile-global
-! -fverbose-asm -fpack-struct -fstack-check +e0 +e1
-! -fargument-alias -fargument-noalias
-! -fargument-noalias-global
- @end smallexample
- @end table
-*************** Print extra warning messages for these e
-*** 1253,1256 ****
---- 1256,1304 ----
-
- @itemize @bullet
-+ @cindex division by zero
-+ @cindex zero, division by
-+ @item
-+ An integer division by zero is detected.
-+
-+ Some cases of division by zero might occur as the result
-+ of using so-called ``safe'' macros.
-+ For example:
-+
-+ @smallexample
-+ #define BUCKETS(b) (((b) != NULL) ? (b)->buckets : 0)
-+ @dots{...}
-+ i = j / BUCKETS(b);
-+ @end smallexample
-+
-+ Although analysis of the context of the above code could
-+ prove that @samp{b} is never null when it is executed,
-+ the division-by-zero warning is still useful, because
-+ @code{gcc} generates code to do the division by zero at
-+ run time so as to generate a run-time fault,
-+ and tidy programmers will want to find ways to prevent
-+ this needless code from being generated.
-+
-+ Note that @code{gcc} transforms expressions so as to find
-+ opportunities for performing expensive operations
-+ (such as division) at compile time instead of generating
-+ code to perform them at run time.
-+ For example, @code{gcc} transforms:
-+
-+ @smallexample
-+ 2 / (i == 0)
-+ @end smallexample
-+
-+ into:
-+
-+ @smallexample
-+ (i == 0) ? (2 / 1) : (2 / 0)
-+ @end smallexample
-+
-+ As a result, the division-by-zero warning might occur
-+ in contexts where the divisor seems to be a non-constant.
-+ It is useful in this case as well, because programmers might want
-+ to clean up the code so the compiled code does not include
-+ dead code to divide by zero.
-+
- @cindex @code{longjmp} warnings
- @item
-*************** and usually makes programs run more slow
-*** 1941,1944 ****
---- 1989,2037 ----
- implies @samp{-fstrength-reduce} as well as @samp{-frerun-cse-after-loop}.
-
-+ @item -fmove-all-movables
-+ Forces all invariant computations in loops to be moved
-+ outside the loop.
-+ This option is provided primarily to improve performance
-+ for some Fortran code, though it might improve code written
-+ in other languages.
-+
-+ @emph{Note:} When compiling programs written in Fortran,
-+ this option is enabled by default.
-+
-+ Analysis of Fortran code optimization and the resulting
-+ optimizations triggered by this option, and the
-+ @samp{-freduce-all-givs} and @samp{-frerun-loop-opt}
-+ options as well, were
-+ contributed by Toon Moene (@code{toon@@moene.indiv.nluug.nl}).
-+
-+ These three options are intended to be removed someday, once
-+ they have helped determine the efficacy of various
-+ approaches to improving the performance of Fortran code.
-+
-+ Please let us (@code{fortran@@gnu.ai.mit.edu})
-+ know how use of these options affects
-+ the performance of your production code.
-+ We're very interested in code that runs @emph{slower}
-+ when these options are @emph{enabled}.
-+
-+ @item -freduce-all-givs
-+ Forces all general-induction variables in loops to be
-+ strength-reduced.
-+ This option is provided primarily to improve performance
-+ for some Fortran code, though it might improve code written
-+ in other languages.
-+
-+ @emph{Note:} When compiling programs written in Fortran,
-+ this option is enabled by default.
-+
-+ @item -frerun-loop-opt
-+ Runs loop optimizations a second time.
-+ This option is provided primarily to improve performance
-+ for some Fortran code, though it might improve code written
-+ in other languages.
-+
-+ @emph{Note:} When compiling programs written in Fortran,
-+ this option is enabled by default.
-+
- @item -fno-peephole
- Disable any machine-specific peephole optimizations.
-*************** not want to use this option, since it ma
-*** 4212,4215 ****
---- 4305,4315 ----
- the offsets of structure members won't agree with system libraries.
-
-+ @item -fstack-check
-+ Generate code to verify that you do not go beyond the boundary of the
-+ stack. You should specify this flag if you are running in an
-+ environment with multiple threads, but only rarely need to specify it in
-+ a single-threaded environment since stack overflow is automatically
-+ detected on nearly all systems if there is only one stack.
-+
- @item +e0
- @itemx +e1
-*************** compilation).
-*** 4229,4232 ****
---- 4329,4404 ----
- With @samp{+e1}, G++ actually generates the code implementing virtual
- functions defined in the code, and makes them publicly visible.
-+
-+ @cindex aliasing of parameters
-+ @cindex parameters, aliased
-+ @item -fargument-alias
-+ @item -fargument-noalias
-+ @item -fargument-noalias-global
-+ Specify the possible relationships among parameters and between
-+ parameters and global data.
-+
-+ @samp{-fargument-alias} specifies that arguments (parameters) may
-+ alias each other and may alias global storage.
-+ @samp{-fargument-noalias} specifies that arguments do not alias
-+ each other, but may alias global storage.
-+ @samp{-fargument-noalias-global} specifies that arguments do not
-+ alias each other and do not alias global storage.
-+
-+ For code written in C, C++, and Objective-C, @samp{-fargument-alias}
-+ is the default.
-+ For code written in Fortran, @samp{-fargument-noalias-global} is
-+ the default, though this is pertinent only on systems where
-+ @code{g77} is installed.
-+ (See the documentation for other compilers for information on the
-+ defaults for their respective languages.)
-+
-+ Normally, @code{gcc} assumes that a write through a pointer
-+ passed as a parameter to the current function might modify a
-+ value pointed to by another pointer passed as a parameter, or
-+ in global storage.
-+
-+ For example, consider this code:
-+
-+ @example
-+ void x(int *i, int *j)
-+ @{
-+ extern int k;
-+
-+ ++*i;
-+ ++*j;
-+ ++k;
-+ @}
-+ @end example
-+
-+ When compiling the above function, @code{gcc} assumes that @samp{i} might
-+ be a pointer to the same variable as @samp{j}, and that either @samp{i},
-+ @samp{j}, or both might be a pointer to @samp{k}.
-+
-+ Therefore, @code{gcc} does not assume it can generate code to read
-+ @samp{*i}, @samp{*j}, and @samp{k} into separate registers, increment
-+ each register, then write the incremented values back out.
-+
-+ Instead, @code{gcc} must generate code that reads @samp{*i},
-+ increments it, and writes it back before reading @samp{*j},
-+ in case @samp{i} and @samp{j} are aliased, and, similarly,
-+ that writes @samp{*j} before reading @samp{k}.
-+ The result is code that, on many systems, takes longer to execute,
-+ due to the way many processors schedule instruction execution.
-+
-+ Compiling the above code with the @samp{-fargument-noalias} option
-+ allows @code{gcc} to assume that @samp{i} and @samp{j} do not alias
-+ each other, but either might alias @samp{k}.
-+
-+ Compiling the above code with the @samp{-fargument-noalias-global}
-+ option allows @code{gcc} to assume that no combination of @samp{i},
-+ @samp{j}, and @samp{k} are aliases for each other.
-+
-+ @emph{Note:} Use the @samp{-fargument-noalias} and
-+ @samp{-fargument-noalias-global} options with care.
-+ While they can result in faster executables, they can
-+ also result in executables with subtle bugs, bugs that
-+ show up only when compiled for specific target systems,
-+ or bugs that show up only when compiled by specific versions
-+ of @code{g77}.
- @end table
-
-diff -rcp2N gcc-2.7.2.3/libgcc2.c gcc-2.7.2.3.f.1/libgcc2.c
-*** gcc-2.7.2.3/libgcc2.c Sun Nov 26 19:39:21 1995
---- gcc-2.7.2.3.f.1/libgcc2.c Sun Aug 10 22:46:07 1997
-*************** __gcc_bcmp (s1, s2, size)
-*** 1193,1196 ****
---- 1193,1201 ----
- #endif
-
-+ #ifdef L__dummy
-+ void
-+ __dummy () {}
-+ #endif
-+
- #ifdef L_varargs
- #ifdef __i860__
-diff -rcp2N gcc-2.7.2.3/local-alloc.c gcc-2.7.2.3.f.1/local-alloc.c
-*** gcc-2.7.2.3/local-alloc.c Mon Aug 21 17:15:44 1995
---- gcc-2.7.2.3.f.1/local-alloc.c Sun Aug 10 22:46:10 1997
-*************** static int this_insn_number;
-*** 243,246 ****
---- 243,250 ----
- static rtx this_insn;
-
-+ /* Used to communicate changes made by update_equiv_regs to
-+ memref_referenced_p. */
-+ static rtx *reg_equiv_replacement;
-+
- static void alloc_qty PROTO((int, enum machine_mode, int, int));
- static void alloc_qty_for_scratch PROTO((rtx, int, rtx, int, int));
-*************** validate_equiv_mem_from_store (dest, set
-*** 545,549 ****
- && reg_overlap_mentioned_p (dest, equiv_mem))
- || (GET_CODE (dest) == MEM
-! && true_dependence (dest, equiv_mem)))
- equiv_mem_modified = 1;
- }
---- 549,553 ----
- && reg_overlap_mentioned_p (dest, equiv_mem))
- || (GET_CODE (dest) == MEM
-! && true_dependence (dest, VOIDmode, equiv_mem, rtx_varies_p)))
- equiv_mem_modified = 1;
- }
-*************** memref_referenced_p (memref, x)
-*** 617,621 ****
- switch (code)
- {
-- case REG:
- case CONST_INT:
- case CONST:
---- 621,624 ----
-*************** memref_referenced_p (memref, x)
-*** 629,634 ****
- return 0;
-
- case MEM:
-! if (true_dependence (memref, x))
- return 1;
- break;
---- 632,642 ----
- return 0;
-
-+ case REG:
-+ return (reg_equiv_replacement[REGNO (x)] == 0
-+ || memref_referenced_p (memref,
-+ reg_equiv_replacement[REGNO (x)]));
-+
- case MEM:
-! if (true_dependence (memref, VOIDmode, x, rtx_varies_p))
- return 1;
- break;
-*************** optimize_reg_copy_1 (insn, dest, src)
-*** 818,827 ****
- if (sregno >= FIRST_PSEUDO_REGISTER)
- {
-! reg_live_length[sregno] -= length;
-! /* reg_live_length is only an approximation after combine
-! if sched is not run, so make sure that we still have
-! a reasonable value. */
-! if (reg_live_length[sregno] < 2)
-! reg_live_length[sregno] = 2;
- reg_n_calls_crossed[sregno] -= n_calls;
- }
---- 826,839 ----
- if (sregno >= FIRST_PSEUDO_REGISTER)
- {
-! if (reg_live_length[sregno] >= 0)
-! {
-! reg_live_length[sregno] -= length;
-! /* reg_live_length is only an approximation after
-! combine if sched is not run, so make sure that we
-! still have a reasonable value. */
-! if (reg_live_length[sregno] < 2)
-! reg_live_length[sregno] = 2;
-! }
-!
- reg_n_calls_crossed[sregno] -= n_calls;
- }
-*************** optimize_reg_copy_1 (insn, dest, src)
-*** 829,833 ****
- if (dregno >= FIRST_PSEUDO_REGISTER)
- {
-! reg_live_length[dregno] += d_length;
- reg_n_calls_crossed[dregno] += d_n_calls;
- }
---- 841,847 ----
- if (dregno >= FIRST_PSEUDO_REGISTER)
- {
-! if (reg_live_length[dregno] >= 0)
-! reg_live_length[dregno] += d_length;
-!
- reg_n_calls_crossed[dregno] += d_n_calls;
- }
-*************** update_equiv_regs ()
-*** 948,953 ****
- {
- rtx *reg_equiv_init_insn = (rtx *) alloca (max_regno * sizeof (rtx *));
-- rtx *reg_equiv_replacement = (rtx *) alloca (max_regno * sizeof (rtx *));
- rtx insn;
-
- bzero ((char *) reg_equiv_init_insn, max_regno * sizeof (rtx *));
---- 962,968 ----
- {
- rtx *reg_equiv_init_insn = (rtx *) alloca (max_regno * sizeof (rtx *));
- rtx insn;
-+
-+ reg_equiv_replacement = (rtx *) alloca (max_regno * sizeof (rtx *));
-
- bzero ((char *) reg_equiv_init_insn, max_regno * sizeof (rtx *));
-diff -rcp2N gcc-2.7.2.3/loop.c gcc-2.7.2.3.f.1/loop.c
-*** gcc-2.7.2.3/loop.c Sat Jun 29 16:26:59 1996
---- gcc-2.7.2.3.f.1/loop.c Sun Aug 10 22:46:43 1997
-*************** int *loop_number_exit_count;
-*** 111,116 ****
- unsigned HOST_WIDE_INT loop_n_iterations;
-
-! /* Nonzero if there is a subroutine call in the current loop.
-! (unknown_address_altered is also nonzero in this case.) */
-
- static int loop_has_call;
---- 111,115 ----
- unsigned HOST_WIDE_INT loop_n_iterations;
-
-! /* Nonzero if there is a subroutine call in the current loop. */
-
- static int loop_has_call;
-*************** static char *moved_once;
-*** 160,164 ****
- here, we just turn on unknown_address_altered. */
-
-! #define NUM_STORES 20
- static rtx loop_store_mems[NUM_STORES];
-
---- 159,163 ----
- here, we just turn on unknown_address_altered. */
-
-! #define NUM_STORES 30
- static rtx loop_store_mems[NUM_STORES];
-
-*************** scan_loop (loop_start, end, nregs)
-*** 669,673 ****
- {
- temp = find_reg_note (p, REG_EQUAL, NULL_RTX);
-! if (temp && CONSTANT_P (XEXP (temp, 0)))
- src = XEXP (temp, 0), move_insn = 1;
- if (temp && find_reg_note (p, REG_RETVAL, NULL_RTX))
---- 668,673 ----
- {
- temp = find_reg_note (p, REG_EQUAL, NULL_RTX);
-! if (temp && CONSTANT_P (XEXP (temp, 0))
-! && LEGITIMATE_CONSTANT_P (XEXP (temp, 0)))
- src = XEXP (temp, 0), move_insn = 1;
- if (temp && find_reg_note (p, REG_RETVAL, NULL_RTX))
-*************** move_movables (movables, threshold, insn
-*** 1629,1632 ****
---- 1629,1633 ----
-
- if (already_moved[regno]
-+ || flag_move_all_movables
- || (threshold * savings * m->lifetime) >= insn_count
- || (m->forces && m->forces->done
-*************** prescan_loop (start, end)
-*** 2199,2203 ****
- else if (GET_CODE (insn) == CALL_INSN)
- {
-! unknown_address_altered = 1;
- loop_has_call = 1;
- }
---- 2200,2205 ----
- else if (GET_CODE (insn) == CALL_INSN)
- {
-! if (! CONST_CALL_P (insn))
-! unknown_address_altered = 1;
- loop_has_call = 1;
- }
-*************** invariant_p (x)
-*** 2777,2781 ****
- /* See if there is any dependence between a store and this load. */
- for (i = loop_store_mems_idx - 1; i >= 0; i--)
-! if (true_dependence (loop_store_mems[i], x))
- return 0;
-
---- 2779,2783 ----
- /* See if there is any dependence between a store and this load. */
- for (i = loop_store_mems_idx - 1; i >= 0; i--)
-! if (true_dependence (loop_store_mems[i], VOIDmode, x, rtx_varies_p))
- return 0;
-
-*************** strength_reduce (scan_start, end, loop_t
-*** 3821,3826 ****
- exit. */
-
-! if (v->lifetime * threshold * benefit < insn_count
-! && ! bl->reversed)
- {
- if (loop_dump_stream)
---- 3823,3828 ----
- exit. */
-
-! if ( ! flag_reduce_all_givs && v->lifetime * threshold * benefit < insn_count
-! && ! bl->reversed )
- {
- if (loop_dump_stream)
-*************** record_giv (v, insn, src_reg, dest_reg,
-*** 4375,4378 ****
---- 4377,4382 ----
- v->final_value = 0;
- v->same_insn = 0;
-+ v->unrolled = 0;
-+ v->shared = 0;
-
- /* The v->always_computable field is used in update_giv_derive, to
-*************** check_final_value (v, loop_start, loop_e
-*** 4652,4657 ****
- if (GET_CODE (p) == JUMP_INSN && JUMP_LABEL (p)
- && LABEL_NAME (JUMP_LABEL (p))
-! && ((INSN_LUID (JUMP_LABEL (p)) < INSN_LUID (v->insn)
-! && INSN_LUID (JUMP_LABEL (p)) > INSN_LUID (loop_start))
- || (INSN_LUID (JUMP_LABEL (p)) > INSN_LUID (last_giv_use)
- && INSN_LUID (JUMP_LABEL (p)) < INSN_LUID (loop_end))))
---- 4656,4664 ----
- if (GET_CODE (p) == JUMP_INSN && JUMP_LABEL (p)
- && LABEL_NAME (JUMP_LABEL (p))
-! && ((INSN_UID (JUMP_LABEL (p)) >= max_uid_for_loop)
-! || (INSN_UID (v->insn) >= max_uid_for_loop)
-! || (INSN_UID (last_giv_use) >= max_uid_for_loop)
-! || (INSN_LUID (JUMP_LABEL (p)) < INSN_LUID (v->insn)
-! && INSN_LUID (JUMP_LABEL (p)) > INSN_LUID (loop_start))
- || (INSN_LUID (JUMP_LABEL (p)) > INSN_LUID (last_giv_use)
- && INSN_LUID (JUMP_LABEL (p)) < INSN_LUID (loop_end))))
-*************** emit_iv_add_mult (b, m, a, reg, insert_b
-*** 5560,5563 ****
---- 5567,5572 ----
-
- emit_insn_before (seq, insert_before);
-+
-+ record_base_value (REGNO (reg), b);
- }
-
-diff -rcp2N gcc-2.7.2.3/loop.h gcc-2.7.2.3.f.1/loop.h
-*** gcc-2.7.2.3/loop.h Fri Jul 14 12:23:28 1995
---- gcc-2.7.2.3.f.1/loop.h Fri Jul 11 00:09:03 1997
-*************** struct induction
-*** 89,92 ****
---- 89,95 ----
- we won't use it to eliminate a biv, it
- would probably lose. */
-+ unsigned unrolled : 1; /* 1 if new register has been allocated in
-+ unrolled loop. */
-+ unsigned shared : 1;
- int lifetime; /* Length of life of this giv */
- int times_used; /* # times this giv is used. */
-diff -rcp2N gcc-2.7.2.3/md.texi gcc-2.7.2.3.f.1/md.texi
-*** gcc-2.7.2.3/md.texi Sun Nov 26 19:05:33 1995
---- gcc-2.7.2.3.f.1/md.texi Fri Aug 29 07:52:18 1997
-*************** Some machines require other operations s
-*** 2334,2337 ****
---- 2334,2347 ----
- maintaining the back chain. Define this pattern to emit those
- operations in addition to updating the stack pointer.
-+
-+ @cindex @code{check_stack} instruction pattern
-+ @item @samp{check_stack}
-+ If stack checking cannot be done on your system by probing the stack with
-+ a load or store instruction (@pxref{Stack Checking}), define this pattern
-+ to perform the needed check and signaling an error if the stack
-+ has overflowed. The single operand is the location in the stack furthest
-+ from the current stack pointer that you need to validate. Normally,
-+ on machines where this pattern is needed, you would obtain the stack
-+ limit from a global or thread-specific variable or register.
- @end table
-
-diff -rcp2N gcc-2.7.2.3/optabs.c gcc-2.7.2.3.f.1/optabs.c
-*** gcc-2.7.2.3/optabs.c Sat Oct 21 22:16:13 1995
---- gcc-2.7.2.3.f.1/optabs.c Fri Aug 29 07:51:36 1997
-*************** expand_fix (to, from, unsignedp)
-*** 3878,3885 ****
- }
-
-! if (GET_MODE (to) == GET_MODE (target))
-! emit_move_insn (to, target);
-! else
-! convert_move (to, target, 0);
- }
-
---- 3878,3888 ----
- }
-
-! if (target != to)
-! {
-! if (GET_MODE (to) == GET_MODE (target))
-! emit_move_insn (to, target);
-! else
-! convert_move (to, target, 0);
-! }
- }
-
-diff -rcp2N gcc-2.7.2.3/real.c gcc-2.7.2.3.f.1/real.c
-*** gcc-2.7.2.3/real.c Tue Aug 15 21:57:18 1995
---- gcc-2.7.2.3.f.1/real.c Fri Jul 11 00:09:04 1997
-*************** make_nan (nan, sign, mode)
-*** 5625,5633 ****
- }
-
-! /* Convert an SFmode target `float' value to a REAL_VALUE_TYPE.
-! This is the inverse of the function `etarsingle' invoked by
- REAL_VALUE_TO_TARGET_SINGLE. */
-
- REAL_VALUE_TYPE
- ereal_from_float (f)
- HOST_WIDE_INT f;
---- 5625,5699 ----
- }
-
-! /* This is the inverse of the function `etarsingle' invoked by
- REAL_VALUE_TO_TARGET_SINGLE. */
-
- REAL_VALUE_TYPE
-+ ereal_unto_float (f)
-+ long f;
-+ {
-+ REAL_VALUE_TYPE r;
-+ unsigned EMUSHORT s[2];
-+ unsigned EMUSHORT e[NE];
-+
-+ /* Convert 32 bit integer to array of 16 bit pieces in target machine order.
-+ This is the inverse operation to what the function `endian' does. */
-+ if (REAL_WORDS_BIG_ENDIAN)
-+ {
-+ s[0] = (unsigned EMUSHORT) (f >> 16);
-+ s[1] = (unsigned EMUSHORT) f;
-+ }
-+ else
-+ {
-+ s[0] = (unsigned EMUSHORT) f;
-+ s[1] = (unsigned EMUSHORT) (f >> 16);
-+ }
-+ /* Convert and promote the target float to E-type. */
-+ e24toe (s, e);
-+ /* Output E-type to REAL_VALUE_TYPE. */
-+ PUT_REAL (e, &r);
-+ return r;
-+ }
-+
-+
-+ /* This is the inverse of the function `etardouble' invoked by
-+ REAL_VALUE_TO_TARGET_DOUBLE. */
-+
-+ REAL_VALUE_TYPE
-+ ereal_unto_double (d)
-+ long d[];
-+ {
-+ REAL_VALUE_TYPE r;
-+ unsigned EMUSHORT s[4];
-+ unsigned EMUSHORT e[NE];
-+
-+ /* Convert array of HOST_WIDE_INT to equivalent array of 16-bit pieces. */
-+ if (REAL_WORDS_BIG_ENDIAN)
-+ {
-+ s[0] = (unsigned EMUSHORT) (d[0] >> 16);
-+ s[1] = (unsigned EMUSHORT) d[0];
-+ s[2] = (unsigned EMUSHORT) (d[1] >> 16);
-+ s[3] = (unsigned EMUSHORT) d[1];
-+ }
-+ else
-+ {
-+ /* Target float words are little-endian. */
-+ s[0] = (unsigned EMUSHORT) d[0];
-+ s[1] = (unsigned EMUSHORT) (d[0] >> 16);
-+ s[2] = (unsigned EMUSHORT) d[1];
-+ s[3] = (unsigned EMUSHORT) (d[1] >> 16);
-+ }
-+ /* Convert target double to E-type. */
-+ e53toe (s, e);
-+ /* Output E-type to REAL_VALUE_TYPE. */
-+ PUT_REAL (e, &r);
-+ return r;
-+ }
-+
-+
-+ /* Convert an SFmode target `float' value to a REAL_VALUE_TYPE.
-+ This is somewhat like ereal_unto_float, but the input types
-+ for these are different. */
-+
-+ REAL_VALUE_TYPE
- ereal_from_float (f)
- HOST_WIDE_INT f;
-*************** ereal_from_float (f)
-*** 5658,5663 ****
-
- /* Convert a DFmode target `double' value to a REAL_VALUE_TYPE.
-! This is the inverse of the function `etardouble' invoked by
-! REAL_VALUE_TO_TARGET_DOUBLE.
-
- The DFmode is stored as an array of HOST_WIDE_INT in the target's
---- 5724,5729 ----
-
- /* Convert a DFmode target `double' value to a REAL_VALUE_TYPE.
-! This is somewhat like ereal_unto_double, but the input types
-! for these are different.
-
- The DFmode is stored as an array of HOST_WIDE_INT in the target's
-diff -rcp2N gcc-2.7.2.3/real.h gcc-2.7.2.3.f.1/real.h
-*** gcc-2.7.2.3/real.h Thu Jun 15 11:57:56 1995
---- gcc-2.7.2.3.f.1/real.h Fri Jul 11 00:09:05 1997
-*************** extern void ereal_to_decimal PROTO((REAL
-*** 152,155 ****
---- 152,157 ----
- extern int ereal_cmp PROTO((REAL_VALUE_TYPE, REAL_VALUE_TYPE));
- extern int ereal_isneg PROTO((REAL_VALUE_TYPE));
-+ extern REAL_VALUE_TYPE ereal_unto_float PROTO((long));
-+ extern REAL_VALUE_TYPE ereal_unto_double PROTO((long *));
- extern REAL_VALUE_TYPE ereal_from_float PROTO((HOST_WIDE_INT));
- extern REAL_VALUE_TYPE ereal_from_double PROTO((HOST_WIDE_INT *));
-*************** extern REAL_VALUE_TYPE real_value_trunca
-*** 197,200 ****
---- 199,208 ----
- /* IN is a REAL_VALUE_TYPE. OUT is a long. */
- #define REAL_VALUE_TO_TARGET_SINGLE(IN, OUT) ((OUT) = etarsingle ((IN)))
-+
-+ /* Inverse of REAL_VALUE_TO_TARGET_DOUBLE. */
-+ #define REAL_VALUE_UNTO_TARGET_DOUBLE(d) (ereal_unto_double (d))
-+
-+ /* Inverse of REAL_VALUE_TO_TARGET_SINGLE. */
-+ #define REAL_VALUE_UNTO_TARGET_SINGLE(f) (ereal_unto_float (f))
-
- /* d is an array of HOST_WIDE_INT that holds a double precision
-diff -rcp2N gcc-2.7.2.3/recog.c gcc-2.7.2.3.f.1/recog.c
-*** gcc-2.7.2.3/recog.c Sat Jul 1 10:52:35 1995
---- gcc-2.7.2.3.f.1/recog.c Sun Aug 10 22:46:55 1997
-*************** register_operand (op, mode)
-*** 872,876 ****
- REGNO (SUBREG_REG (op)))
- && (GET_MODE_SIZE (mode)
-! != GET_MODE_SIZE (GET_MODE (SUBREG_REG (op)))))
- return 0;
- #endif
---- 872,878 ----
- REGNO (SUBREG_REG (op)))
- && (GET_MODE_SIZE (mode)
-! != GET_MODE_SIZE (GET_MODE (SUBREG_REG (op))))
-! && GET_MODE_CLASS (GET_MODE (SUBREG_REG (op))) != MODE_COMPLEX_INT
-! && GET_MODE_CLASS (GET_MODE (SUBREG_REG (op))) != MODE_COMPLEX_FLOAT)
- return 0;
- #endif
-diff -rcp2N gcc-2.7.2.3/reg-stack.c gcc-2.7.2.3.f.1/reg-stack.c
-*** gcc-2.7.2.3/reg-stack.c Thu Jun 15 21:36:05 1995
---- gcc-2.7.2.3.f.1/reg-stack.c Wed Aug 27 11:44:55 1997
-*************** subst_stack_regs (insn, regstack)
-*** 2620,2623 ****
---- 2620,2624 ----
- register rtx *note_link, note;
- register int i;
-+ rtx head, jump, pat, cipat;
- int n_operands;
-
-*************** subst_stack_regs (insn, regstack)
-*** 2690,2693 ****
---- 2691,2728 ----
- if (GET_CODE (insn) == NOTE)
- return;
-+
-+ /* If we are reached by a computed goto which sets this same stack register,
-+ then pop this stack register, but maintain regstack. */
-+
-+ if (INSN_UID (insn) <= max_uid)
-+ {
-+ head = block_begin[BLOCK_NUM(insn)];
-+ pat = PATTERN(insn);
-+ if (GET_CODE (head) == CODE_LABEL
-+ && GET_CODE (pat) == SET && STACK_REG_P (SET_DEST (pat)))
-+ for (jump = LABEL_REFS (head);
-+ jump != head;
-+ jump = LABEL_NEXTREF (jump))
-+ {
-+ cipat = PATTERN (CONTAINING_INSN (jump));
-+ if (GET_CODE (cipat) == SET
-+ && SET_DEST (cipat) == pc_rtx
-+ && uses_reg_or_mem (SET_SRC (cipat))
-+ && INSN_UID (CONTAINING_INSN (jump)) <= max_uid)
-+ {
-+ int from_block = BLOCK_NUM (CONTAINING_INSN (jump));
-+ if (TEST_HARD_REG_BIT (block_out_reg_set[from_block],
-+ REGNO (SET_DEST (pat))))
-+ {
-+ struct stack_def old;
-+ bcopy (regstack->reg, old.reg, sizeof (old.reg));
-+ emit_pop_insn (insn, regstack, SET_DEST (pat), emit_insn_before);
-+ regstack->top += 1;
-+ bcopy (old.reg, regstack->reg, sizeof (old.reg));
-+ SET_HARD_REG_BIT (regstack->reg_set, REGNO (SET_DEST (pat)));
-+ }
-+ }
-+ }
-+ }
-
- /* If there is a REG_UNUSED note on a stack register on this insn,
-diff -rcp2N gcc-2.7.2.3/reload.c gcc-2.7.2.3.f.1/reload.c
-*** gcc-2.7.2.3/reload.c Sat Nov 11 13:23:54 1995
---- gcc-2.7.2.3.f.1/reload.c Sat Aug 30 20:42:37 1997
-***************
-*** 1,4 ****
- /* Search an insn for pseudo regs that must be in hard regs and are not.
-! Copyright (C) 1987, 88, 89, 92, 93, 94, 1995 Free Software Foundation, Inc.
-
- This file is part of GNU CC.
---- 1,4 ----
- /* Search an insn for pseudo regs that must be in hard regs and are not.
-! Copyright (C) 1987, 88, 89, 92-5, 1996 Free Software Foundation, Inc.
-
- This file is part of GNU CC.
-*************** static int push_secondary_reload PROTO((
-*** 292,295 ****
---- 292,296 ----
- enum machine_mode, enum reload_type,
- enum insn_code *));
-+ static enum reg_class find_valid_class PROTO((enum machine_mode, int));
- static int push_reload PROTO((rtx, rtx, rtx *, rtx *, enum reg_class,
- enum machine_mode, enum machine_mode,
-*************** static struct decomposition decompose PR
-*** 305,312 ****
- static int immune_p PROTO((rtx, rtx, struct decomposition));
- static int alternative_allows_memconst PROTO((char *, int));
-! static rtx find_reloads_toplev PROTO((rtx, int, enum reload_type, int, int));
- static rtx make_memloc PROTO((rtx, int));
- static int find_reloads_address PROTO((enum machine_mode, rtx *, rtx, rtx *,
-! int, enum reload_type, int));
- static rtx subst_reg_equivs PROTO((rtx));
- static rtx subst_indexed_address PROTO((rtx));
---- 306,313 ----
- static int immune_p PROTO((rtx, rtx, struct decomposition));
- static int alternative_allows_memconst PROTO((char *, int));
-! static rtx find_reloads_toplev PROTO((rtx, int, enum reload_type, int, int, short *));
- static rtx make_memloc PROTO((rtx, int));
- static int find_reloads_address PROTO((enum machine_mode, rtx *, rtx, rtx *,
-! int, enum reload_type, int, short *));
- static rtx subst_reg_equivs PROTO((rtx));
- static rtx subst_indexed_address PROTO((rtx));
-*************** push_secondary_reload (in_p, x, opnum, o
-*** 590,599 ****
-
- if (in_p && icode == CODE_FOR_nothing
-! && SECONDARY_MEMORY_NEEDED (class, reload_class, reload_mode))
-! get_secondary_mem (x, reload_mode, opnum, type);
-
- if (! in_p && icode == CODE_FOR_nothing
-! && SECONDARY_MEMORY_NEEDED (reload_class, class, reload_mode))
-! get_secondary_mem (x, reload_mode, opnum, type);
- #endif
- }
---- 591,600 ----
-
- if (in_p && icode == CODE_FOR_nothing
-! && SECONDARY_MEMORY_NEEDED (class, reload_class, mode))
-! get_secondary_mem (x, mode, opnum, type);
-
- if (! in_p && icode == CODE_FOR_nothing
-! && SECONDARY_MEMORY_NEEDED (reload_class, class, mode))
-! get_secondary_mem (x, mode, opnum, type);
- #endif
- }
-*************** get_secondary_mem (x, mode, opnum, type)
-*** 673,677 ****
-
- find_reloads_address (mode, NULL_PTR, XEXP (loc, 0), &XEXP (loc, 0),
-! opnum, type, 0);
- }
-
---- 674,678 ----
-
- find_reloads_address (mode, NULL_PTR, XEXP (loc, 0), &XEXP (loc, 0),
-! opnum, type, 0, NULL);
- }
-
-*************** clear_secondary_mem ()
-*** 689,692 ****
---- 690,725 ----
- #endif /* SECONDARY_MEMORY_NEEDED */
-
-+ /* Find the largest class for which every register number plus N is valid in
-+ M1 (if in range). Abort if no such class exists. */
-+
-+ static enum reg_class
-+ find_valid_class (m1, n)
-+ enum machine_mode m1;
-+ int n;
-+ {
-+ int class;
-+ int regno;
-+ enum reg_class best_class;
-+ int best_size = 0;
-+
-+ for (class = 1; class < N_REG_CLASSES; class++)
-+ {
-+ int bad = 0;
-+ for (regno = 0; regno < FIRST_PSEUDO_REGISTER && ! bad; regno++)
-+ if (TEST_HARD_REG_BIT (reg_class_contents[class], regno)
-+ && TEST_HARD_REG_BIT (reg_class_contents[class], regno + n)
-+ && ! HARD_REGNO_MODE_OK (regno + n, m1))
-+ bad = 1;
-+
-+ if (! bad && reg_class_size[class] > best_size)
-+ best_class = class, best_size = reg_class_size[class];
-+ }
-+
-+ if (best_size == 0)
-+ abort ();
-+
-+ return best_class;
-+ }
-+
- /* Record one reload that needs to be performed.
- IN is an rtx saying where the data are to be found before this instruction.
-*************** push_reload (in, out, inloc, outloc, cla
-*** 894,898 ****
- && GET_CODE (SUBREG_REG (in)) == REG
- && REGNO (SUBREG_REG (in)) < FIRST_PSEUDO_REGISTER
-! && (! HARD_REGNO_MODE_OK (REGNO (SUBREG_REG (in)), inmode)
- || (GET_MODE_SIZE (inmode) <= UNITS_PER_WORD
- && (GET_MODE_SIZE (GET_MODE (SUBREG_REG (in)))
---- 927,932 ----
- && GET_CODE (SUBREG_REG (in)) == REG
- && REGNO (SUBREG_REG (in)) < FIRST_PSEUDO_REGISTER
-! && (! HARD_REGNO_MODE_OK (REGNO (SUBREG_REG (in)) + SUBREG_WORD (in),
-! inmode)
- || (GET_MODE_SIZE (inmode) <= UNITS_PER_WORD
- && (GET_MODE_SIZE (GET_MODE (SUBREG_REG (in)))
-*************** push_reload (in, out, inloc, outloc, cla
-*** 909,913 ****
- output before the outer reload. */
- push_reload (SUBREG_REG (in), NULL_RTX, &SUBREG_REG (in), NULL_PTR,
-! GENERAL_REGS, VOIDmode, VOIDmode, 0, 0, opnum, type);
- dont_remove_subreg = 1;
- }
---- 943,948 ----
- output before the outer reload. */
- push_reload (SUBREG_REG (in), NULL_RTX, &SUBREG_REG (in), NULL_PTR,
-! find_valid_class (inmode, SUBREG_WORD (in)),
-! VOIDmode, VOIDmode, 0, 0, opnum, type);
- dont_remove_subreg = 1;
- }
-*************** push_reload (in, out, inloc, outloc, cla
-*** 982,986 ****
- && GET_CODE (SUBREG_REG (out)) == REG
- && REGNO (SUBREG_REG (out)) < FIRST_PSEUDO_REGISTER
-! && (! HARD_REGNO_MODE_OK (REGNO (SUBREG_REG (out)), outmode)
- || (GET_MODE_SIZE (outmode) <= UNITS_PER_WORD
- && (GET_MODE_SIZE (GET_MODE (SUBREG_REG (out)))
---- 1017,1022 ----
- && GET_CODE (SUBREG_REG (out)) == REG
- && REGNO (SUBREG_REG (out)) < FIRST_PSEUDO_REGISTER
-! && (! HARD_REGNO_MODE_OK (REGNO (SUBREG_REG (out)) + SUBREG_WORD (out),
-! outmode)
- || (GET_MODE_SIZE (outmode) <= UNITS_PER_WORD
- && (GET_MODE_SIZE (GET_MODE (SUBREG_REG (out)))
-*************** push_reload (in, out, inloc, outloc, cla
-*** 998,1002 ****
- dont_remove_subreg = 1;
- push_reload (SUBREG_REG (out), SUBREG_REG (out), &SUBREG_REG (out),
-! &SUBREG_REG (out), ALL_REGS, VOIDmode, VOIDmode, 0, 0,
- opnum, RELOAD_OTHER);
- }
---- 1034,1040 ----
- dont_remove_subreg = 1;
- push_reload (SUBREG_REG (out), SUBREG_REG (out), &SUBREG_REG (out),
-! &SUBREG_REG (out),
-! find_valid_class (outmode, SUBREG_WORD (out)),
-! VOIDmode, VOIDmode, 0, 0,
- opnum, RELOAD_OTHER);
- }
-*************** find_reloads (insn, replace, ind_levels,
-*** 2241,2244 ****
---- 2279,2283 ----
- int goal_earlyclobber, this_earlyclobber;
- enum machine_mode operand_mode[MAX_RECOG_OPERANDS];
-+ short force_update[MAX_RECOG_OPERANDS];
-
- this_insn = insn;
-*************** find_reloads (insn, replace, ind_levels,
-*** 2272,2275 ****
---- 2311,2316 ----
- #endif
-
-+ bzero ((char *) force_update, sizeof force_update);
-+
- /* Find what kind of insn this is. NOPERANDS gets number of operands.
- Make OPERANDS point to a vector of operand values.
-*************** find_reloads (insn, replace, ind_levels,
-*** 2469,2473 ****
- find_reloads_address (VOIDmode, NULL_PTR,
- recog_operand[i], recog_operand_loc[i],
-! i, operand_type[i], ind_levels);
- substed_operand[i] = recog_operand[i] = *recog_operand_loc[i];
- }
---- 2510,2515 ----
- find_reloads_address (VOIDmode, NULL_PTR,
- recog_operand[i], recog_operand_loc[i],
-! i, operand_type[i], ind_levels,
-! &force_update[i]);
- substed_operand[i] = recog_operand[i] = *recog_operand_loc[i];
- }
-*************** find_reloads (insn, replace, ind_levels,
-*** 2478,2482 ****
- XEXP (recog_operand[i], 0),
- &XEXP (recog_operand[i], 0),
-! i, address_type[i], ind_levels))
- address_reloaded[i] = 1;
- substed_operand[i] = recog_operand[i] = *recog_operand_loc[i];
---- 2520,2525 ----
- XEXP (recog_operand[i], 0),
- &XEXP (recog_operand[i], 0),
-! i, address_type[i], ind_levels,
-! &force_update[i]))
- address_reloaded[i] = 1;
- substed_operand[i] = recog_operand[i] = *recog_operand_loc[i];
-*************** find_reloads (insn, replace, ind_levels,
-*** 2487,2491 ****
- ind_levels,
- set != 0
-! && &SET_DEST (set) == recog_operand_loc[i]);
- else if (code == PLUS)
- /* We can get a PLUS as an "operand" as a result of
---- 2530,2535 ----
- ind_levels,
- set != 0
-! && &SET_DEST (set) == recog_operand_loc[i],
-! &force_update[i]);
- else if (code == PLUS)
- /* We can get a PLUS as an "operand" as a result of
-*************** find_reloads (insn, replace, ind_levels,
-*** 2493,2497 ****
- substed_operand[i] = recog_operand[i] = *recog_operand_loc[i]
- = find_reloads_toplev (recog_operand[i], i, address_type[i],
-! ind_levels, 0);
- else if (code == REG)
- {
---- 2537,2541 ----
- substed_operand[i] = recog_operand[i] = *recog_operand_loc[i]
- = find_reloads_toplev (recog_operand[i], i, address_type[i],
-! ind_levels, 0, &force_update[i]);
- else if (code == REG)
- {
-*************** find_reloads (insn, replace, ind_levels,
-*** 2505,2510 ****
- if (reg_equiv_constant[regno] != 0
- && (set == 0 || &SET_DEST (set) != recog_operand_loc[i]))
-! substed_operand[i] = recog_operand[i]
-! = reg_equiv_constant[regno];
- #if 0 /* This might screw code in reload1.c to delete prior output-reload
- that feeds this insn. */
---- 2549,2557 ----
- if (reg_equiv_constant[regno] != 0
- && (set == 0 || &SET_DEST (set) != recog_operand_loc[i]))
-! {
-! substed_operand[i] = recog_operand[i]
-! = reg_equiv_constant[regno];
-! force_update[i] = 1;
-! }
- #if 0 /* This might screw code in reload1.c to delete prior output-reload
- that feeds this insn. */
-*************** find_reloads (insn, replace, ind_levels,
-*** 2545,2549 ****
- XEXP (recog_operand[i], 0),
- &XEXP (recog_operand[i], 0),
-! i, address_type[i], ind_levels);
- substed_operand[i] = recog_operand[i] = *recog_operand_loc[i];
- }
---- 2592,2597 ----
- XEXP (recog_operand[i], 0),
- &XEXP (recog_operand[i], 0),
-! i, address_type[i], ind_levels,
-! &force_update[i]);
- substed_operand[i] = recog_operand[i] = *recog_operand_loc[i];
- }
-*************** find_reloads (insn, replace, ind_levels,
-*** 3415,3419 ****
- = find_reloads_toplev (force_const_mem (operand_mode[i],
- recog_operand[i]),
-! i, address_type[i], ind_levels, 0);
- if (alternative_allows_memconst (constraints1[i],
- goal_alternative_number))
---- 3463,3467 ----
- = find_reloads_toplev (force_const_mem (operand_mode[i],
- recog_operand[i]),
-! i, address_type[i], ind_levels, 0, NULL);
- if (alternative_allows_memconst (constraints1[i],
- goal_alternative_number))
-*************** find_reloads (insn, replace, ind_levels,
-*** 3595,3604 ****
- Don't do this if we aren't making replacements because we might be
- propagating things allocated by frame pointer elimination into places
-! it doesn't expect. */
-
-! if (insn_code_number >= 0 && replace)
- for (i = insn_n_dups[insn_code_number] - 1; i >= 0; i--)
- {
- int opno = recog_dup_num[i];
- *recog_dup_loc[i] = *recog_operand_loc[opno];
- if (operand_reloadnum[opno] >= 0)
---- 3643,3657 ----
- Don't do this if we aren't making replacements because we might be
- propagating things allocated by frame pointer elimination into places
-! it doesn't expect. However, always do it for replaces of pseudos
-! by constants. */
-
-! if (insn_code_number >= 0)
- for (i = insn_n_dups[insn_code_number] - 1; i >= 0; i--)
- {
- int opno = recog_dup_num[i];
-+
-+ if (! replace && ! force_update[opno])
-+ continue;
-+
- *recog_dup_loc[i] = *recog_operand_loc[opno];
- if (operand_reloadnum[opno] >= 0)
-*************** find_reloads (insn, replace, ind_levels,
-*** 3829,3832 ****
---- 3882,3886 ----
- register RTX_CODE code = GET_CODE (recog_operand[i]);
- int is_set_dest = GET_CODE (body) == SET && (i == 0);
-+ short ign;
-
- if (insn_code_number >= 0)
-*************** find_reloads (insn, replace, ind_levels,
-*** 3834,3838 ****
- find_reloads_address (VOIDmode, NULL_PTR,
- recog_operand[i], recog_operand_loc[i],
-! i, RELOAD_FOR_INPUT, ind_levels);
-
- /* In these cases, we can't tell if the operand is an input
---- 3888,3892 ----
- find_reloads_address (VOIDmode, NULL_PTR,
- recog_operand[i], recog_operand_loc[i],
-! i, RELOAD_FOR_INPUT, ind_levels, &ign);
-
- /* In these cases, we can't tell if the operand is an input
-*************** find_reloads (insn, replace, ind_levels,
-*** 3845,3853 ****
- XEXP (recog_operand[i], 0),
- &XEXP (recog_operand[i], 0),
-! i, RELOAD_OTHER, ind_levels);
- if (code == SUBREG)
- recog_operand[i] = *recog_operand_loc[i]
- = find_reloads_toplev (recog_operand[i], i, RELOAD_OTHER,
-! ind_levels, is_set_dest);
- if (code == REG)
- {
---- 3899,3907 ----
- XEXP (recog_operand[i], 0),
- &XEXP (recog_operand[i], 0),
-! i, RELOAD_OTHER, ind_levels, &ign);
- if (code == SUBREG)
- recog_operand[i] = *recog_operand_loc[i]
- = find_reloads_toplev (recog_operand[i], i, RELOAD_OTHER,
-! ind_levels, is_set_dest, &ign);
- if (code == REG)
- {
-*************** alternative_allows_memconst (constraint,
-*** 3908,3915 ****
-
- IS_SET_DEST is true if X is the destination of a SET, which is not
-! appropriate to be replaced by a constant. */
-
- static rtx
-! find_reloads_toplev (x, opnum, type, ind_levels, is_set_dest)
- rtx x;
- int opnum;
---- 3962,3972 ----
-
- IS_SET_DEST is true if X is the destination of a SET, which is not
-! appropriate to be replaced by a constant.
-!
-! FORCE_UPDATE, if non-NULL, is the address of a SHORT that is set to
-! 1 if X is replaced with something based on reg_equiv_constant. */
-
- static rtx
-! find_reloads_toplev (x, opnum, type, ind_levels, is_set_dest, force_update)
- rtx x;
- int opnum;
-*************** find_reloads_toplev (x, opnum, type, ind
-*** 3917,3920 ****
---- 3974,3978 ----
- int ind_levels;
- int is_set_dest;
-+ short *force_update;
- {
- register RTX_CODE code = GET_CODE (x);
-*************** find_reloads_toplev (x, opnum, type, ind
-*** 3928,3932 ****
- register int regno = REGNO (x);
- if (reg_equiv_constant[regno] != 0 && !is_set_dest)
-! x = reg_equiv_constant[regno];
- #if 0
- /* This creates (subreg (mem...)) which would cause an unnecessary
---- 3986,3996 ----
- register int regno = REGNO (x);
- if (reg_equiv_constant[regno] != 0 && !is_set_dest)
-! {
-! x = reg_equiv_constant[regno];
-! if (force_update)
-! *force_update = 1;
-! else
-! abort (); /* Learn why this happens. */
-! }
- #if 0
- /* This creates (subreg (mem...)) which would cause an unnecessary
-*************** find_reloads_toplev (x, opnum, type, ind
-*** 3951,3955 ****
- find_reloads_address (GET_MODE (x), NULL_PTR,
- XEXP (x, 0),
-! &XEXP (x, 0), opnum, type, ind_levels);
- }
- return x;
---- 4015,4020 ----
- find_reloads_address (GET_MODE (x), NULL_PTR,
- XEXP (x, 0),
-! &XEXP (x, 0), opnum, type, ind_levels,
-! force_update);
- }
- return x;
-*************** find_reloads_toplev (x, opnum, type, ind
-*** 3959,3963 ****
- rtx tem = x;
- find_reloads_address (GET_MODE (x), &tem, XEXP (x, 0), &XEXP (x, 0),
-! opnum, type, ind_levels);
- return tem;
- }
---- 4024,4028 ----
- rtx tem = x;
- find_reloads_address (GET_MODE (x), &tem, XEXP (x, 0), &XEXP (x, 0),
-! opnum, type, ind_levels, force_update);
- return tem;
- }
-*************** find_reloads_toplev (x, opnum, type, ind
-*** 3982,3986 ****
- && (tem = gen_lowpart_common (GET_MODE (x),
- reg_equiv_constant[regno])) != 0)
-! return tem;
-
- if (GET_MODE_BITSIZE (GET_MODE (x)) == BITS_PER_WORD
---- 4047,4057 ----
- && (tem = gen_lowpart_common (GET_MODE (x),
- reg_equiv_constant[regno])) != 0)
-! {
-! if (force_update)
-! *force_update = 1;
-! else
-! abort (); /* Learn why this happens. */
-! return tem;
-! }
-
- if (GET_MODE_BITSIZE (GET_MODE (x)) == BITS_PER_WORD
-*************** find_reloads_toplev (x, opnum, type, ind
-*** 3990,3994 ****
- SUBREG_WORD (x), 0,
- GET_MODE (SUBREG_REG (x)))) != 0)
-! return tem;
-
- if (regno >= FIRST_PSEUDO_REGISTER && reg_renumber[regno] < 0
---- 4061,4071 ----
- SUBREG_WORD (x), 0,
- GET_MODE (SUBREG_REG (x)))) != 0)
-! {
-! if (force_update)
-! *force_update = 1;
-! else
-! abort (); /* Learn why this happens. */
-! return tem;
-! }
-
- if (regno >= FIRST_PSEUDO_REGISTER && reg_renumber[regno] < 0
-*************** find_reloads_toplev (x, opnum, type, ind
-*** 4040,4044 ****
- find_reloads_address (GET_MODE (x), NULL_PTR,
- XEXP (x, 0),
-! &XEXP (x, 0), opnum, type, ind_levels);
- }
-
---- 4117,4122 ----
- find_reloads_address (GET_MODE (x), NULL_PTR,
- XEXP (x, 0),
-! &XEXP (x, 0), opnum, type, ind_levels,
-! force_update);
- }
-
-*************** find_reloads_toplev (x, opnum, type, ind
-*** 4049,4053 ****
- if (fmt[i] == 'e')
- XEXP (x, i) = find_reloads_toplev (XEXP (x, i), opnum, type,
-! ind_levels, is_set_dest);
- }
- return x;
---- 4127,4131 ----
- if (fmt[i] == 'e')
- XEXP (x, i) = find_reloads_toplev (XEXP (x, i), opnum, type,
-! ind_levels, is_set_dest, NULL);
- }
- return x;
-*************** make_memloc (ad, regno)
-*** 4110,4114 ****
-
- static int
-! find_reloads_address (mode, memrefloc, ad, loc, opnum, type, ind_levels)
- enum machine_mode mode;
- rtx *memrefloc;
---- 4188,4193 ----
-
- static int
-! find_reloads_address (mode, memrefloc, ad, loc, opnum, type, ind_levels,
-! force_update)
- enum machine_mode mode;
- rtx *memrefloc;
-*************** find_reloads_address (mode, memrefloc, a
-*** 4118,4121 ****
---- 4197,4201 ----
- enum reload_type type;
- int ind_levels;
-+ short *force_update;
- {
- register int regno;
-*************** find_reloads_address (mode, memrefloc, a
-*** 4134,4137 ****
---- 4214,4221 ----
- {
- *loc = ad = reg_equiv_constant[regno];
-+ if (force_update)
-+ *force_update = 1;
-+ else
-+ abort (); /* Learn why this happens. */
- return 1;
- }
-*************** find_reloads_address (mode, memrefloc, a
-*** 4141,4145 ****
- tem = make_memloc (ad, regno);
- find_reloads_address (GET_MODE (tem), NULL_PTR, XEXP (tem, 0),
-! &XEXP (tem, 0), opnum, type, ind_levels);
- push_reload (tem, NULL_RTX, loc, NULL_PTR, BASE_REG_CLASS,
- GET_MODE (ad), VOIDmode, 0, 0,
---- 4225,4229 ----
- tem = make_memloc (ad, regno);
- find_reloads_address (GET_MODE (tem), NULL_PTR, XEXP (tem, 0),
-! &XEXP (tem, 0), opnum, type, ind_levels, NULL);
- push_reload (tem, NULL_RTX, loc, NULL_PTR, BASE_REG_CLASS,
- GET_MODE (ad), VOIDmode, 0, 0,
-*************** find_reloads_address (mode, memrefloc, a
-*** 4214,4218 ****
- tem = ad;
- find_reloads_address (GET_MODE (ad), &tem, XEXP (ad, 0), &XEXP (ad, 0),
-! opnum, type, ind_levels == 0 ? 0 : ind_levels - 1);
-
- /* If tem was changed, then we must create a new memory reference to
---- 4298,4303 ----
- tem = ad;
- find_reloads_address (GET_MODE (ad), &tem, XEXP (ad, 0), &XEXP (ad, 0),
-! opnum, type, ind_levels == 0 ? 0 : ind_levels - 1,
-! NULL);
-
- /* If tem was changed, then we must create a new memory reference to
-*************** find_reloads_address_1 (x, context, loc,
-*** 4722,4726 ****
- /* First reload the memory location's address. */
- find_reloads_address (GET_MODE (tem), 0, XEXP (tem, 0),
-! &XEXP (tem, 0), opnum, type, ind_levels);
- /* Put this inside a new increment-expression. */
- x = gen_rtx (GET_CODE (x), GET_MODE (x), tem);
---- 4807,4812 ----
- /* First reload the memory location's address. */
- find_reloads_address (GET_MODE (tem), 0, XEXP (tem, 0),
-! &XEXP (tem, 0), opnum, type, ind_levels,
-! NULL);
- /* Put this inside a new increment-expression. */
- x = gen_rtx (GET_CODE (x), GET_MODE (x), tem);
-*************** find_reloads_address_1 (x, context, loc,
-*** 4788,4792 ****
- find_reloads_address (GET_MODE (x), &XEXP (x, 0),
- XEXP (XEXP (x, 0), 0), &XEXP (XEXP (x, 0), 0),
-! opnum, type, ind_levels);
-
- reloadnum = push_reload (x, NULL_RTX, loc, NULL_PTR,
---- 4874,4878 ----
- find_reloads_address (GET_MODE (x), &XEXP (x, 0),
- XEXP (XEXP (x, 0), 0), &XEXP (XEXP (x, 0), 0),
-! opnum, type, ind_levels, NULL);
-
- reloadnum = push_reload (x, NULL_RTX, loc, NULL_PTR,
-*************** find_reloads_address_1 (x, context, loc,
-*** 4818,4822 ****
-
- find_reloads_address (GET_MODE (x), loc, XEXP (x, 0), &XEXP (x, 0),
-! opnum, type, ind_levels);
- push_reload (*loc, NULL_RTX, loc, NULL_PTR,
- context ? INDEX_REG_CLASS : BASE_REG_CLASS,
---- 4904,4908 ----
-
- find_reloads_address (GET_MODE (x), loc, XEXP (x, 0), &XEXP (x, 0),
-! opnum, type, ind_levels, NULL);
- push_reload (*loc, NULL_RTX, loc, NULL_PTR,
- context ? INDEX_REG_CLASS : BASE_REG_CLASS,
-*************** find_reloads_address_1 (x, context, loc,
-*** 4852,4856 ****
- x = make_memloc (x, regno);
- find_reloads_address (GET_MODE (x), 0, XEXP (x, 0), &XEXP (x, 0),
-! opnum, type, ind_levels);
- }
-
---- 4938,4942 ----
- x = make_memloc (x, regno);
- find_reloads_address (GET_MODE (x), 0, XEXP (x, 0), &XEXP (x, 0),
-! opnum, type, ind_levels, NULL);
- }
-
-*************** find_reloads_address_part (x, loc, class
-*** 4965,4969 ****
- rtx tem = x = force_const_mem (mode, x);
- find_reloads_address (mode, &tem, XEXP (tem, 0), &XEXP (tem, 0),
-! opnum, type, ind_levels);
- }
-
---- 5051,5055 ----
- rtx tem = x = force_const_mem (mode, x);
- find_reloads_address (mode, &tem, XEXP (tem, 0), &XEXP (tem, 0),
-! opnum, type, ind_levels, NULL);
- }
-
-*************** find_reloads_address_part (x, loc, class
-*** 4977,4981 ****
- x = gen_rtx (PLUS, GET_MODE (x), XEXP (x, 0), tem);
- find_reloads_address (mode, &tem, XEXP (tem, 0), &XEXP (tem, 0),
-! opnum, type, ind_levels);
- }
-
---- 5063,5067 ----
- x = gen_rtx (PLUS, GET_MODE (x), XEXP (x, 0), tem);
- find_reloads_address (mode, &tem, XEXP (tem, 0), &XEXP (tem, 0),
-! opnum, type, ind_levels, NULL);
- }
-
-*************** find_equiv_reg (goal, insn, class, other
-*** 5518,5522 ****
- and is also a register that appears in the address of GOAL. */
-
-! if (goal_mem && value == SET_DEST (PATTERN (where))
- && refers_to_regno_for_reload_p (valueno,
- (valueno
---- 5604,5608 ----
- and is also a register that appears in the address of GOAL. */
-
-! if (goal_mem && value == SET_DEST (single_set (where))
- && refers_to_regno_for_reload_p (valueno,
- (valueno
-*************** debug_reload()
-*** 5900,5904 ****
-
- if (reload_nocombine[r])
-! fprintf (stderr, ", can combine", reload_nocombine[r]);
-
- if (reload_secondary_p[r])
---- 5986,5990 ----
-
- if (reload_nocombine[r])
-! fprintf (stderr, ", can't combine %d", reload_nocombine[r]);
-
- if (reload_secondary_p[r])
-diff -rcp2N gcc-2.7.2.3/reload1.c gcc-2.7.2.3.f.1/reload1.c
-*** gcc-2.7.2.3/reload1.c Sun Nov 5 16:22:22 1995
---- gcc-2.7.2.3.f.1/reload1.c Fri Aug 29 07:52:04 1997
-*************** reload (first, global, dumpfile)
-*** 542,546 ****
- Also find all paradoxical subregs and find largest such for each pseudo.
- On machines with small register classes, record hard registers that
-! are used for user variables. These can never be used for spills. */
-
- for (insn = first; insn; insn = NEXT_INSN (insn))
---- 542,548 ----
- Also find all paradoxical subregs and find largest such for each pseudo.
- On machines with small register classes, record hard registers that
-! are used for user variables. These can never be used for spills.
-! Also look for a "constant" NOTE_INSN_SETJMP. This means that all
-! caller-saved registers must be marked live. */
-
- for (insn = first; insn; insn = NEXT_INSN (insn))
-*************** reload (first, global, dumpfile)
-*** 548,551 ****
---- 550,559 ----
- rtx set = single_set (insn);
-
-+ if (GET_CODE (insn) == NOTE && CONST_CALL_P (insn)
-+ && NOTE_LINE_NUMBER (insn) == NOTE_INSN_SETJMP)
-+ for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
-+ if (! call_used_regs[i])
-+ regs_ever_live[i] = 1;
-+
- if (set != 0 && GET_CODE (SET_DEST (set)) == REG)
- {
-*************** reload (first, global, dumpfile)
-*** 564,568 ****
- if (GET_CODE (x) == MEM)
- reg_equiv_memory_loc[i] = x;
-! else if (CONSTANT_P (x))
- {
- if (LEGITIMATE_CONSTANT_P (x))
---- 572,578 ----
- if (GET_CODE (x) == MEM)
- reg_equiv_memory_loc[i] = x;
-! else if (CONSTANT_P (x)
-! && ! (GET_CODE (x) == CONST
-! && GET_CODE (XEXP (x, 0)) == MINUS))
- {
- if (LEGITIMATE_CONSTANT_P (x))
-*************** reload (first, global, dumpfile)
-*** 2013,2016 ****
---- 2023,2040 ----
- #endif
-
-+ /* If we are doing stack checking, give a warning if this function's
-+ frame size is larger than we expect. */
-+ if (flag_stack_check && ! STACK_CHECK_BUILTIN)
-+ {
-+ HOST_WIDE_INT size = get_frame_size () + STACK_CHECK_FIXED_FRAME_SIZE;
-+
-+ for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
-+ if (regs_ever_live[i] && ! fixed_regs[i] && call_used_regs[i])
-+ size += UNITS_PER_WORD;
-+
-+ if (size > STACK_CHECK_MAX_FRAME_SIZE)
-+ warning ("frame size too large for reliable stack checking");
-+ }
-+
- /* Indicate that we no longer have known memory locations or constants. */
- reg_equiv_constant = 0;
-*************** eliminate_regs (x, mem_mode, insn)
-*** 2886,2890 ****
-
- /* Fall through to generic unary operation case. */
-- case USE:
- case STRICT_LOW_PART:
- case NEG: case NOT:
---- 2910,2913 ----
-*************** eliminate_regs (x, mem_mode, insn)
-*** 2975,2978 ****
---- 2998,3014 ----
- return x;
-
-+ case USE:
-+ /* If using a register that is the source of an eliminate we still
-+ think can be performed, note it cannot be performed since we don't
-+ know how this register is used. */
-+ for (ep = reg_eliminate; ep < &reg_eliminate[NUM_ELIMINABLE_REGS]; ep++)
-+ if (ep->from_rtx == XEXP (x, 0))
-+ ep->can_eliminate = 0;
-+
-+ new = eliminate_regs (XEXP (x, 0), mem_mode, insn);
-+ if (new != XEXP (x, 0))
-+ return gen_rtx (code, GET_MODE (x), new);
-+ return x;
-+
- case CLOBBER:
- /* If clobbering a register that is the replacement register for an
-*************** gen_reload (out, in, opnum, type)
-*** 6736,6741 ****
---- 6772,6779 ----
- if (GET_CODE (in) == PLUS
- && (GET_CODE (XEXP (in, 0)) == REG
-+ || GET_CODE (XEXP (in, 0)) == SUBREG
- || GET_CODE (XEXP (in, 0)) == MEM)
- && (GET_CODE (XEXP (in, 1)) == REG
-+ || GET_CODE (XEXP (in, 1)) == SUBREG
- || CONSTANT_P (XEXP (in, 1))
- || GET_CODE (XEXP (in, 1)) == MEM))
-*************** gen_reload (out, in, opnum, type)
-*** 6798,6807 ****
- we emit below. */
-
-! if (CONSTANT_P (op1) || GET_CODE (op1) == MEM
- || (GET_CODE (op1) == REG
- && REGNO (op1) >= FIRST_PSEUDO_REGISTER))
- tem = op0, op0 = op1, op1 = tem;
-
-! emit_insn (gen_move_insn (out, op0));
-
- /* If OP0 and OP1 are the same, we can use OUT for OP1.
---- 6836,6845 ----
- we emit below. */
-
-! if (CONSTANT_P (op1) || GET_CODE (op1) == MEM || GET_CODE (op1) == SUBREG
- || (GET_CODE (op1) == REG
- && REGNO (op1) >= FIRST_PSEUDO_REGISTER))
- tem = op0, op0 = op1, op1 = tem;
-
-! gen_reload (out, op0, opnum, type);
-
- /* If OP0 and OP1 are the same, we can use OUT for OP1.
-*************** gen_reload (out, in, opnum, type)
-*** 6831,6835 ****
- delete_insns_since (last);
-
-! emit_insn (gen_move_insn (out, op1));
- emit_insn (gen_add2_insn (out, op0));
- }
---- 6869,6873 ----
- delete_insns_since (last);
-
-! gen_reload (out, op1, opnum, type);
- emit_insn (gen_add2_insn (out, op0));
- }
-*************** gen_reload (out, in, opnum, type)
-*** 6852,6857 ****
- in = gen_rtx (REG, GET_MODE (loc), REGNO (in));
-
-! emit_insn (gen_move_insn (loc, in));
-! emit_insn (gen_move_insn (out, loc));
- }
- #endif
---- 6890,6895 ----
- in = gen_rtx (REG, GET_MODE (loc), REGNO (in));
-
-! gen_reload (loc, in, opnum, type);
-! gen_reload (out, loc, opnum, type);
- }
- #endif
-diff -rcp2N gcc-2.7.2.3/reorg.c gcc-2.7.2.3.f.1/reorg.c
-*** gcc-2.7.2.3/reorg.c Fri Sep 15 21:38:55 1995
---- gcc-2.7.2.3.f.1/reorg.c Fri Aug 29 07:52:00 1997
-*************** redundant_insn (insn, target, delay_list
-*** 1961,1964 ****
---- 1961,1969 ----
- int i;
-
-+ /* If INSN has any REG_UNUSED notes, it can't match anything since we
-+ are allowed to not actually assign to such a register. */
-+ if (find_reg_note (insn, REG_UNUSED, NULL_RTX) != 0)
-+ return 0;
-+
- /* Scan backwards looking for a match. */
- for (trial = PREV_INSN (target); trial; trial = PREV_INSN (trial))
-*************** redundant_insn (insn, target, delay_list
-*** 1999,2003 ****
- for (i = XVECLEN (pat, 0) - 1; i > 0; i--)
- if (GET_CODE (XVECEXP (pat, 0, i)) == GET_CODE (insn)
-! && rtx_equal_p (PATTERN (XVECEXP (pat, 0, i)), ipat))
- break;
-
---- 2004,2009 ----
- for (i = XVECLEN (pat, 0) - 1; i > 0; i--)
- if (GET_CODE (XVECEXP (pat, 0, i)) == GET_CODE (insn)
-! && rtx_equal_p (PATTERN (XVECEXP (pat, 0, i)), ipat)
-! && ! find_reg_note (XVECEXP (pat, 0, i), REG_UNUSED, NULL_RTX))
- break;
-
-*************** redundant_insn (insn, target, delay_list
-*** 2007,2011 ****
- }
-
-! else if (GET_CODE (trial) == GET_CODE (insn) && rtx_equal_p (pat, ipat))
- break;
- }
---- 2013,2018 ----
- }
-
-! else if (GET_CODE (trial) == GET_CODE (insn) && rtx_equal_p (pat, ipat)
-! && ! find_reg_note (trial, REG_UNUSED, NULL_RTX))
- break;
- }
-diff -rcp2N gcc-2.7.2.3/rtl.c gcc-2.7.2.3.f.1/rtl.c
-*** gcc-2.7.2.3/rtl.c Thu Jun 15 12:02:59 1995
---- gcc-2.7.2.3.f.1/rtl.c Fri Jul 11 00:09:06 1997
-*************** char *reg_note_name[] = { "", "REG_DEAD"
-*** 179,183 ****
- "REG_NONNEG", "REG_NO_CONFLICT", "REG_UNUSED",
- "REG_CC_SETTER", "REG_CC_USER", "REG_LABEL",
-! "REG_DEP_ANTI", "REG_DEP_OUTPUT" };
-
- /* Allocate an rtx vector of N elements.
---- 179,183 ----
- "REG_NONNEG", "REG_NO_CONFLICT", "REG_UNUSED",
- "REG_CC_SETTER", "REG_CC_USER", "REG_LABEL",
-! "REG_DEP_ANTI", "REG_DEP_OUTPUT", "REG_NOALIAS" };
-
- /* Allocate an rtx vector of N elements.
-diff -rcp2N gcc-2.7.2.3/rtl.h gcc-2.7.2.3.f.1/rtl.h
-*** gcc-2.7.2.3/rtl.h Thu Jun 15 12:03:16 1995
---- gcc-2.7.2.3.f.1/rtl.h Fri Jul 11 00:09:07 1997
-*************** enum reg_note { REG_DEAD = 1, REG_INC =
-*** 349,353 ****
- REG_NONNEG = 8, REG_NO_CONFLICT = 9, REG_UNUSED = 10,
- REG_CC_SETTER = 11, REG_CC_USER = 12, REG_LABEL = 13,
-! REG_DEP_ANTI = 14, REG_DEP_OUTPUT = 15 };
-
- /* Define macros to extract and insert the reg-note kind in an EXPR_LIST. */
---- 349,353 ----
- REG_NONNEG = 8, REG_NO_CONFLICT = 9, REG_UNUSED = 10,
- REG_CC_SETTER = 11, REG_CC_USER = 12, REG_LABEL = 13,
-! REG_DEP_ANTI = 14, REG_DEP_OUTPUT = 15, REG_NOALIAS = 16 };
-
- /* Define macros to extract and insert the reg-note kind in an EXPR_LIST. */
-*************** extern char *reg_note_name[];
-*** 432,436 ****
- #define NOTE_INSN_FUNCTION_BEG -13
-
--
- #if 0 /* These are not used, and I don't know what they were for. --rms. */
- #define NOTE_DECL_NAME(INSN) ((INSN)->fld[3].rtstr)
---- 432,435 ----
-*************** extern char *note_insn_name[];
-*** 576,579 ****
---- 575,579 ----
- /* For a TRAP_IF rtx, TRAP_CONDITION is an expression. */
- #define TRAP_CONDITION(RTX) ((RTX)->fld[0].rtx)
-+ #define TRAP_CODE(RTX) ((RTX)->fld[1].rtint)
-
- /* 1 in a SYMBOL_REF if it addresses this function's constants pool. */
-*************** extern rtx eliminate_constant_term PROTO
-*** 817,820 ****
---- 817,830 ----
- extern rtx expand_complex_abs PROTO((enum machine_mode, rtx, rtx, int));
- extern enum machine_mode choose_hard_reg_mode PROTO((int, int));
-+ extern int rtx_varies_p PROTO((rtx));
-+ extern int may_trap_p PROTO((rtx));
-+ extern int side_effects_p PROTO((rtx));
-+ extern int volatile_refs_p PROTO((rtx));
-+ extern int volatile_insn_p PROTO((rtx));
-+ extern void remove_note PROTO((rtx, rtx));
-+ extern void note_stores PROTO((rtx, void (*)()));
-+ extern int refers_to_regno_p PROTO((int, int, rtx, rtx *));
-+ extern int reg_overlap_mentioned_p PROTO((rtx, rtx));
-+
-
- /* Maximum number of parallel sets and clobbers in any insn in this fn.
-*************** extern rtx *regno_reg_rtx;
-*** 967,968 ****
---- 977,987 ----
-
- extern int rtx_to_tree_code PROTO((enum rtx_code));
-+
-+ extern int true_dependence PROTO((rtx, enum machine_mode, rtx, int (*)()));
-+ extern int read_dependence PROTO((rtx, rtx));
-+ extern int anti_dependence PROTO((rtx, rtx));
-+ extern int output_dependence PROTO((rtx, rtx));
-+ extern void init_alias_analysis PROTO((void));
-+ extern void end_alias_analysis PROTO((void));
-+ extern void mark_user_reg PROTO((rtx));
-+ extern void mark_reg_pointer PROTO((rtx));
-diff -rcp2N gcc-2.7.2.3/sched.c gcc-2.7.2.3.f.1/sched.c
-*** gcc-2.7.2.3/sched.c Thu Jun 15 12:06:39 1995
---- gcc-2.7.2.3.f.1/sched.c Sun Aug 10 22:46:13 1997
-*************** Boston, MA 02111-1307, USA. */
-*** 126,129 ****
---- 126,132 ----
- #include "insn-attr.h"
-
-+ extern char *reg_known_equiv_p;
-+ extern rtx *reg_known_value;
-+
- #ifdef INSN_SCHEDULING
- /* Arrays set up by scheduling for the same respective purposes as
-*************** static int *sched_reg_live_length;
-*** 143,146 ****
---- 146,150 ----
- by splitting insns. */
- static rtx *reg_last_uses;
-+ static int reg_last_uses_size;
- static rtx *reg_last_sets;
- static regset reg_pending_sets;
-*************** struct sometimes
-*** 294,302 ****
-
- /* Forward declarations. */
-- static rtx canon_rtx PROTO((rtx));
-- static int rtx_equal_for_memref_p PROTO((rtx, rtx));
-- static rtx find_symbolic_term PROTO((rtx));
-- static int memrefs_conflict_p PROTO((int, rtx, int, rtx,
-- HOST_WIDE_INT));
- static void add_dependence PROTO((rtx, rtx, enum reg_note));
- static void remove_dependence PROTO((rtx, rtx));
---- 298,301 ----
-*************** static int priority PROTO((rtx));
-*** 314,318 ****
- static void free_pending_lists PROTO((void));
- static void add_insn_mem_dependence PROTO((rtx *, rtx *, rtx, rtx));
-! static void flush_pending_lists PROTO((rtx));
- static void sched_analyze_1 PROTO((rtx, rtx));
- static void sched_analyze_2 PROTO((rtx, rtx));
---- 313,317 ----
- static void free_pending_lists PROTO((void));
- static void add_insn_mem_dependence PROTO((rtx *, rtx *, rtx, rtx));
-! static void flush_pending_lists PROTO((rtx, int));
- static void sched_analyze_1 PROTO((rtx, rtx));
- static void sched_analyze_2 PROTO((rtx, rtx));
-*************** void schedule_insns PROTO((FILE *));
-*** 346,885 ****
- #endif /* INSN_SCHEDULING */
-
-- #define SIZE_FOR_MODE(X) (GET_MODE_SIZE (GET_MODE (X)))
--
-- /* Vector indexed by N giving the initial (unchanging) value known
-- for pseudo-register N. */
-- static rtx *reg_known_value;
--
-- /* Vector recording for each reg_known_value whether it is due to a
-- REG_EQUIV note. Future passes (viz., reload) may replace the
-- pseudo with the equivalent expression and so we account for the
-- dependences that would be introduced if that happens. */
-- /* ??? This is a problem only on the Convex. The REG_EQUIV notes created in
-- assign_parms mention the arg pointer, and there are explicit insns in the
-- RTL that modify the arg pointer. Thus we must ensure that such insns don't
-- get scheduled across each other because that would invalidate the REG_EQUIV
-- notes. One could argue that the REG_EQUIV notes are wrong, but solving
-- the problem in the scheduler will likely give better code, so we do it
-- here. */
-- static char *reg_known_equiv_p;
--
-- /* Indicates number of valid entries in reg_known_value. */
-- static int reg_known_value_size;
--
-- static rtx
-- canon_rtx (x)
-- rtx x;
-- {
-- if (GET_CODE (x) == REG && REGNO (x) >= FIRST_PSEUDO_REGISTER
-- && REGNO (x) <= reg_known_value_size)
-- return reg_known_value[REGNO (x)];
-- else if (GET_CODE (x) == PLUS)
-- {
-- rtx x0 = canon_rtx (XEXP (x, 0));
-- rtx x1 = canon_rtx (XEXP (x, 1));
--
-- if (x0 != XEXP (x, 0) || x1 != XEXP (x, 1))
-- {
-- /* We can tolerate LO_SUMs being offset here; these
-- rtl are used for nothing other than comparisons. */
-- if (GET_CODE (x0) == CONST_INT)
-- return plus_constant_for_output (x1, INTVAL (x0));
-- else if (GET_CODE (x1) == CONST_INT)
-- return plus_constant_for_output (x0, INTVAL (x1));
-- return gen_rtx (PLUS, GET_MODE (x), x0, x1);
-- }
-- }
-- return x;
-- }
--
-- /* Set up all info needed to perform alias analysis on memory references. */
--
-- void
-- init_alias_analysis ()
-- {
-- int maxreg = max_reg_num ();
-- rtx insn;
-- rtx note;
-- rtx set;
--
-- reg_known_value_size = maxreg;
--
-- reg_known_value
-- = (rtx *) oballoc ((maxreg-FIRST_PSEUDO_REGISTER) * sizeof (rtx))
-- - FIRST_PSEUDO_REGISTER;
-- bzero ((char *) (reg_known_value + FIRST_PSEUDO_REGISTER),
-- (maxreg-FIRST_PSEUDO_REGISTER) * sizeof (rtx));
--
-- reg_known_equiv_p
-- = (char *) oballoc ((maxreg -FIRST_PSEUDO_REGISTER) * sizeof (char))
-- - FIRST_PSEUDO_REGISTER;
-- bzero (reg_known_equiv_p + FIRST_PSEUDO_REGISTER,
-- (maxreg - FIRST_PSEUDO_REGISTER) * sizeof (char));
--
-- /* Fill in the entries with known constant values. */
-- for (insn = get_insns (); insn; insn = NEXT_INSN (insn))
-- if ((set = single_set (insn)) != 0
-- && GET_CODE (SET_DEST (set)) == REG
-- && REGNO (SET_DEST (set)) >= FIRST_PSEUDO_REGISTER
-- && (((note = find_reg_note (insn, REG_EQUAL, 0)) != 0
-- && reg_n_sets[REGNO (SET_DEST (set))] == 1)
-- || (note = find_reg_note (insn, REG_EQUIV, NULL_RTX)) != 0)
-- && GET_CODE (XEXP (note, 0)) != EXPR_LIST)
-- {
-- int regno = REGNO (SET_DEST (set));
-- reg_known_value[regno] = XEXP (note, 0);
-- reg_known_equiv_p[regno] = REG_NOTE_KIND (note) == REG_EQUIV;
-- }
--
-- /* Fill in the remaining entries. */
-- while (--maxreg >= FIRST_PSEUDO_REGISTER)
-- if (reg_known_value[maxreg] == 0)
-- reg_known_value[maxreg] = regno_reg_rtx[maxreg];
-- }
--
-- /* Return 1 if X and Y are identical-looking rtx's.
--
-- We use the data in reg_known_value above to see if two registers with
-- different numbers are, in fact, equivalent. */
--
-- static int
-- rtx_equal_for_memref_p (x, y)
-- rtx x, y;
-- {
-- register int i;
-- register int j;
-- register enum rtx_code code;
-- register char *fmt;
--
-- if (x == 0 && y == 0)
-- return 1;
-- if (x == 0 || y == 0)
-- return 0;
-- x = canon_rtx (x);
-- y = canon_rtx (y);
--
-- if (x == y)
-- return 1;
--
-- code = GET_CODE (x);
-- /* Rtx's of different codes cannot be equal. */
-- if (code != GET_CODE (y))
-- return 0;
--
-- /* (MULT:SI x y) and (MULT:HI x y) are NOT equivalent.
-- (REG:SI x) and (REG:HI x) are NOT equivalent. */
--
-- if (GET_MODE (x) != GET_MODE (y))
-- return 0;
--
-- /* REG, LABEL_REF, and SYMBOL_REF can be compared nonrecursively. */
--
-- if (code == REG)
-- return REGNO (x) == REGNO (y);
-- if (code == LABEL_REF)
-- return XEXP (x, 0) == XEXP (y, 0);
-- if (code == SYMBOL_REF)
-- return XSTR (x, 0) == XSTR (y, 0);
--
-- /* For commutative operations, the RTX match if the operand match in any
-- order. Also handle the simple binary and unary cases without a loop. */
-- if (code == EQ || code == NE || GET_RTX_CLASS (code) == 'c')
-- return ((rtx_equal_for_memref_p (XEXP (x, 0), XEXP (y, 0))
-- && rtx_equal_for_memref_p (XEXP (x, 1), XEXP (y, 1)))
-- || (rtx_equal_for_memref_p (XEXP (x, 0), XEXP (y, 1))
-- && rtx_equal_for_memref_p (XEXP (x, 1), XEXP (y, 0))));
-- else if (GET_RTX_CLASS (code) == '<' || GET_RTX_CLASS (code) == '2')
-- return (rtx_equal_for_memref_p (XEXP (x, 0), XEXP (y, 0))
-- && rtx_equal_for_memref_p (XEXP (x, 1), XEXP (y, 1)));
-- else if (GET_RTX_CLASS (code) == '1')
-- return rtx_equal_for_memref_p (XEXP (x, 0), XEXP (y, 0));
--
-- /* Compare the elements. If any pair of corresponding elements
-- fail to match, return 0 for the whole things. */
--
-- fmt = GET_RTX_FORMAT (code);
-- for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
-- {
-- switch (fmt[i])
-- {
-- case 'w':
-- if (XWINT (x, i) != XWINT (y, i))
-- return 0;
-- break;
--
-- case 'n':
-- case 'i':
-- if (XINT (x, i) != XINT (y, i))
-- return 0;
-- break;
--
-- case 'V':
-- case 'E':
-- /* Two vectors must have the same length. */
-- if (XVECLEN (x, i) != XVECLEN (y, i))
-- return 0;
--
-- /* And the corresponding elements must match. */
-- for (j = 0; j < XVECLEN (x, i); j++)
-- if (rtx_equal_for_memref_p (XVECEXP (x, i, j), XVECEXP (y, i, j)) == 0)
-- return 0;
-- break;
--
-- case 'e':
-- if (rtx_equal_for_memref_p (XEXP (x, i), XEXP (y, i)) == 0)
-- return 0;
-- break;
--
-- case 'S':
-- case 's':
-- if (strcmp (XSTR (x, i), XSTR (y, i)))
-- return 0;
-- break;
--
-- case 'u':
-- /* These are just backpointers, so they don't matter. */
-- break;
--
-- case '0':
-- break;
--
-- /* It is believed that rtx's at this level will never
-- contain anything but integers and other rtx's,
-- except for within LABEL_REFs and SYMBOL_REFs. */
-- default:
-- abort ();
-- }
-- }
-- return 1;
-- }
--
-- /* Given an rtx X, find a SYMBOL_REF or LABEL_REF within
-- X and return it, or return 0 if none found. */
--
-- static rtx
-- find_symbolic_term (x)
-- rtx x;
-- {
-- register int i;
-- register enum rtx_code code;
-- register char *fmt;
--
-- code = GET_CODE (x);
-- if (code == SYMBOL_REF || code == LABEL_REF)
-- return x;
-- if (GET_RTX_CLASS (code) == 'o')
-- return 0;
--
-- fmt = GET_RTX_FORMAT (code);
-- for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
-- {
-- rtx t;
--
-- if (fmt[i] == 'e')
-- {
-- t = find_symbolic_term (XEXP (x, i));
-- if (t != 0)
-- return t;
-- }
-- else if (fmt[i] == 'E')
-- break;
-- }
-- return 0;
-- }
--
-- /* Return nonzero if X and Y (memory addresses) could reference the
-- same location in memory. C is an offset accumulator. When
-- C is nonzero, we are testing aliases between X and Y + C.
-- XSIZE is the size in bytes of the X reference,
-- similarly YSIZE is the size in bytes for Y.
--
-- If XSIZE or YSIZE is zero, we do not know the amount of memory being
-- referenced (the reference was BLKmode), so make the most pessimistic
-- assumptions.
--
-- We recognize the following cases of non-conflicting memory:
--
-- (1) addresses involving the frame pointer cannot conflict
-- with addresses involving static variables.
-- (2) static variables with different addresses cannot conflict.
--
-- Nice to notice that varying addresses cannot conflict with fp if no
-- local variables had their addresses taken, but that's too hard now. */
--
-- /* ??? In Fortran, references to a array parameter can never conflict with
-- another array parameter. */
--
-- static int
-- memrefs_conflict_p (xsize, x, ysize, y, c)
-- rtx x, y;
-- int xsize, ysize;
-- HOST_WIDE_INT c;
-- {
-- if (GET_CODE (x) == HIGH)
-- x = XEXP (x, 0);
-- else if (GET_CODE (x) == LO_SUM)
-- x = XEXP (x, 1);
-- else
-- x = canon_rtx (x);
-- if (GET_CODE (y) == HIGH)
-- y = XEXP (y, 0);
-- else if (GET_CODE (y) == LO_SUM)
-- y = XEXP (y, 1);
-- else
-- y = canon_rtx (y);
--
-- if (rtx_equal_for_memref_p (x, y))
-- return (xsize == 0 || ysize == 0 ||
-- (c >= 0 && xsize > c) || (c < 0 && ysize+c > 0));
--
-- if (y == frame_pointer_rtx || y == hard_frame_pointer_rtx
-- || y == stack_pointer_rtx)
-- {
-- rtx t = y;
-- int tsize = ysize;
-- y = x; ysize = xsize;
-- x = t; xsize = tsize;
-- }
--
-- if (x == frame_pointer_rtx || x == hard_frame_pointer_rtx
-- || x == stack_pointer_rtx)
-- {
-- rtx y1;
--
-- if (CONSTANT_P (y))
-- return 0;
--
-- if (GET_CODE (y) == PLUS
-- && canon_rtx (XEXP (y, 0)) == x
-- && (y1 = canon_rtx (XEXP (y, 1)))
-- && GET_CODE (y1) == CONST_INT)
-- {
-- c += INTVAL (y1);
-- return (xsize == 0 || ysize == 0
-- || (c >= 0 && xsize > c) || (c < 0 && ysize+c > 0));
-- }
--
-- if (GET_CODE (y) == PLUS
-- && (y1 = canon_rtx (XEXP (y, 0)))
-- && CONSTANT_P (y1))
-- return 0;
--
-- return 1;
-- }
--
-- if (GET_CODE (x) == PLUS)
-- {
-- /* The fact that X is canonicalized means that this
-- PLUS rtx is canonicalized. */
-- rtx x0 = XEXP (x, 0);
-- rtx x1 = XEXP (x, 1);
--
-- if (GET_CODE (y) == PLUS)
-- {
-- /* The fact that Y is canonicalized means that this
-- PLUS rtx is canonicalized. */
-- rtx y0 = XEXP (y, 0);
-- rtx y1 = XEXP (y, 1);
--
-- if (rtx_equal_for_memref_p (x1, y1))
-- return memrefs_conflict_p (xsize, x0, ysize, y0, c);
-- if (rtx_equal_for_memref_p (x0, y0))
-- return memrefs_conflict_p (xsize, x1, ysize, y1, c);
-- if (GET_CODE (x1) == CONST_INT)
-- if (GET_CODE (y1) == CONST_INT)
-- return memrefs_conflict_p (xsize, x0, ysize, y0,
-- c - INTVAL (x1) + INTVAL (y1));
-- else
-- return memrefs_conflict_p (xsize, x0, ysize, y, c - INTVAL (x1));
-- else if (GET_CODE (y1) == CONST_INT)
-- return memrefs_conflict_p (xsize, x, ysize, y0, c + INTVAL (y1));
--
-- /* Handle case where we cannot understand iteration operators,
-- but we notice that the base addresses are distinct objects. */
-- x = find_symbolic_term (x);
-- if (x == 0)
-- return 1;
-- y = find_symbolic_term (y);
-- if (y == 0)
-- return 1;
-- return rtx_equal_for_memref_p (x, y);
-- }
-- else if (GET_CODE (x1) == CONST_INT)
-- return memrefs_conflict_p (xsize, x0, ysize, y, c - INTVAL (x1));
-- }
-- else if (GET_CODE (y) == PLUS)
-- {
-- /* The fact that Y is canonicalized means that this
-- PLUS rtx is canonicalized. */
-- rtx y0 = XEXP (y, 0);
-- rtx y1 = XEXP (y, 1);
--
-- if (GET_CODE (y1) == CONST_INT)
-- return memrefs_conflict_p (xsize, x, ysize, y0, c + INTVAL (y1));
-- else
-- return 1;
-- }
--
-- if (GET_CODE (x) == GET_CODE (y))
-- switch (GET_CODE (x))
-- {
-- case MULT:
-- {
-- /* Handle cases where we expect the second operands to be the
-- same, and check only whether the first operand would conflict
-- or not. */
-- rtx x0, y0;
-- rtx x1 = canon_rtx (XEXP (x, 1));
-- rtx y1 = canon_rtx (XEXP (y, 1));
-- if (! rtx_equal_for_memref_p (x1, y1))
-- return 1;
-- x0 = canon_rtx (XEXP (x, 0));
-- y0 = canon_rtx (XEXP (y, 0));
-- if (rtx_equal_for_memref_p (x0, y0))
-- return (xsize == 0 || ysize == 0
-- || (c >= 0 && xsize > c) || (c < 0 && ysize+c > 0));
--
-- /* Can't properly adjust our sizes. */
-- if (GET_CODE (x1) != CONST_INT)
-- return 1;
-- xsize /= INTVAL (x1);
-- ysize /= INTVAL (x1);
-- c /= INTVAL (x1);
-- return memrefs_conflict_p (xsize, x0, ysize, y0, c);
-- }
-- }
--
-- if (CONSTANT_P (x))
-- {
-- if (GET_CODE (x) == CONST_INT && GET_CODE (y) == CONST_INT)
-- {
-- c += (INTVAL (y) - INTVAL (x));
-- return (xsize == 0 || ysize == 0
-- || (c >= 0 && xsize > c) || (c < 0 && ysize+c > 0));
-- }
--
-- if (GET_CODE (x) == CONST)
-- {
-- if (GET_CODE (y) == CONST)
-- return memrefs_conflict_p (xsize, canon_rtx (XEXP (x, 0)),
-- ysize, canon_rtx (XEXP (y, 0)), c);
-- else
-- return memrefs_conflict_p (xsize, canon_rtx (XEXP (x, 0)),
-- ysize, y, c);
-- }
-- if (GET_CODE (y) == CONST)
-- return memrefs_conflict_p (xsize, x, ysize,
-- canon_rtx (XEXP (y, 0)), c);
--
-- if (CONSTANT_P (y))
-- return (rtx_equal_for_memref_p (x, y)
-- && (xsize == 0 || ysize == 0
-- || (c >= 0 && xsize > c) || (c < 0 && ysize+c > 0)));
--
-- return 1;
-- }
-- return 1;
-- }
--
-- /* Functions to compute memory dependencies.
--
-- Since we process the insns in execution order, we can build tables
-- to keep track of what registers are fixed (and not aliased), what registers
-- are varying in known ways, and what registers are varying in unknown
-- ways.
--
-- If both memory references are volatile, then there must always be a
-- dependence between the two references, since their order can not be
-- changed. A volatile and non-volatile reference can be interchanged
-- though.
--
-- A MEM_IN_STRUCT reference at a non-QImode varying address can never
-- conflict with a non-MEM_IN_STRUCT reference at a fixed address. We must
-- allow QImode aliasing because the ANSI C standard allows character
-- pointers to alias anything. We are assuming that characters are
-- always QImode here. */
--
-- /* Read dependence: X is read after read in MEM takes place. There can
-- only be a dependence here if both reads are volatile. */
--
-- int
-- read_dependence (mem, x)
-- rtx mem;
-- rtx x;
-- {
-- return MEM_VOLATILE_P (x) && MEM_VOLATILE_P (mem);
-- }
--
-- /* True dependence: X is read after store in MEM takes place. */
--
-- int
-- true_dependence (mem, x)
-- rtx mem;
-- rtx x;
-- {
-- /* If X is an unchanging read, then it can't possibly conflict with any
-- non-unchanging store. It may conflict with an unchanging write though,
-- because there may be a single store to this address to initialize it.
-- Just fall through to the code below to resolve the case where we have
-- both an unchanging read and an unchanging write. This won't handle all
-- cases optimally, but the possible performance loss should be
-- negligible. */
-- if (RTX_UNCHANGING_P (x) && ! RTX_UNCHANGING_P (mem))
-- return 0;
--
-- return ((MEM_VOLATILE_P (x) && MEM_VOLATILE_P (mem))
-- || (memrefs_conflict_p (SIZE_FOR_MODE (mem), XEXP (mem, 0),
-- SIZE_FOR_MODE (x), XEXP (x, 0), 0)
-- && ! (MEM_IN_STRUCT_P (mem) && rtx_addr_varies_p (mem)
-- && GET_MODE (mem) != QImode
-- && ! MEM_IN_STRUCT_P (x) && ! rtx_addr_varies_p (x))
-- && ! (MEM_IN_STRUCT_P (x) && rtx_addr_varies_p (x)
-- && GET_MODE (x) != QImode
-- && ! MEM_IN_STRUCT_P (mem) && ! rtx_addr_varies_p (mem))));
-- }
--
-- /* Anti dependence: X is written after read in MEM takes place. */
--
-- int
-- anti_dependence (mem, x)
-- rtx mem;
-- rtx x;
-- {
-- /* If MEM is an unchanging read, then it can't possibly conflict with
-- the store to X, because there is at most one store to MEM, and it must
-- have occurred somewhere before MEM. */
-- if (RTX_UNCHANGING_P (mem))
-- return 0;
--
-- return ((MEM_VOLATILE_P (x) && MEM_VOLATILE_P (mem))
-- || (memrefs_conflict_p (SIZE_FOR_MODE (mem), XEXP (mem, 0),
-- SIZE_FOR_MODE (x), XEXP (x, 0), 0)
-- && ! (MEM_IN_STRUCT_P (mem) && rtx_addr_varies_p (mem)
-- && GET_MODE (mem) != QImode
-- && ! MEM_IN_STRUCT_P (x) && ! rtx_addr_varies_p (x))
-- && ! (MEM_IN_STRUCT_P (x) && rtx_addr_varies_p (x)
-- && GET_MODE (x) != QImode
-- && ! MEM_IN_STRUCT_P (mem) && ! rtx_addr_varies_p (mem))));
-- }
--
-- /* Output dependence: X is written after store in MEM takes place. */
--
-- int
-- output_dependence (mem, x)
-- rtx mem;
-- rtx x;
-- {
-- return ((MEM_VOLATILE_P (x) && MEM_VOLATILE_P (mem))
-- || (memrefs_conflict_p (SIZE_FOR_MODE (mem), XEXP (mem, 0),
-- SIZE_FOR_MODE (x), XEXP (x, 0), 0)
-- && ! (MEM_IN_STRUCT_P (mem) && rtx_addr_varies_p (mem)
-- && GET_MODE (mem) != QImode
-- && ! MEM_IN_STRUCT_P (x) && ! rtx_addr_varies_p (x))
-- && ! (MEM_IN_STRUCT_P (x) && rtx_addr_varies_p (x)
-- && GET_MODE (x) != QImode
-- && ! MEM_IN_STRUCT_P (mem) && ! rtx_addr_varies_p (mem))));
-- }
--
- /* Helper functions for instruction scheduling. */
-
---- 345,348 ----
-*************** add_insn_mem_dependence (insn_list, mem_
-*** 1609,1621 ****
-
- /* Make a dependency between every memory reference on the pending lists
-! and INSN, thus flushing the pending lists. */
-
- static void
-! flush_pending_lists (insn)
- rtx insn;
- {
- rtx link;
-
-! while (pending_read_insns)
- {
- add_dependence (insn, XEXP (pending_read_insns, 0), REG_DEP_ANTI);
---- 1072,1086 ----
-
- /* Make a dependency between every memory reference on the pending lists
-! and INSN, thus flushing the pending lists. If ONLY_WRITE, don't flush
-! the read list. */
-
- static void
-! flush_pending_lists (insn, only_write)
- rtx insn;
-+ int only_write;
- {
- rtx link;
-
-! while (pending_read_insns && ! only_write)
- {
- add_dependence (insn, XEXP (pending_read_insns, 0), REG_DEP_ANTI);
-*************** sched_analyze_1 (x, insn)
-*** 1746,1750 ****
- this flush occurs 8 times for sparc, and 10 times for m88k using
- the number 32. */
-! flush_pending_lists (insn);
- }
- else
---- 1211,1215 ----
- this flush occurs 8 times for sparc, and 10 times for m88k using
- the number 32. */
-! flush_pending_lists (insn, 0);
- }
- else
-*************** sched_analyze_2 (x, insn)
-*** 1922,1926 ****
- /* If a dependency already exists, don't create a new one. */
- if (! find_insn_list (XEXP (pending, 0), LOG_LINKS (insn)))
-! if (true_dependence (XEXP (pending_mem, 0), x))
- add_dependence (insn, XEXP (pending, 0), 0);
-
---- 1387,1392 ----
- /* If a dependency already exists, don't create a new one. */
- if (! find_insn_list (XEXP (pending, 0), LOG_LINKS (insn)))
-! if (true_dependence (XEXP (pending_mem, 0), VOIDmode,
-! x, rtx_varies_p))
- add_dependence (insn, XEXP (pending, 0), 0);
-
-*************** sched_analyze_2 (x, insn)
-*** 1968,1972 ****
- reg_pending_sets_all = 1;
-
-! flush_pending_lists (insn);
- }
-
---- 1434,1438 ----
- reg_pending_sets_all = 1;
-
-! flush_pending_lists (insn, 0);
- }
-
-*************** sched_analyze_insn (x, insn, loop_notes)
-*** 2021,2025 ****
- register RTX_CODE code = GET_CODE (x);
- rtx link;
-! int maxreg = max_reg_num ();
- int i;
-
---- 1487,1491 ----
- register RTX_CODE code = GET_CODE (x);
- rtx link;
-! int maxreg = reg_last_uses_size;
- int i;
-
-*************** sched_analyze_insn (x, insn, loop_notes)
-*** 2058,2062 ****
- if (loop_notes)
- {
-! int max_reg = max_reg_num ();
- rtx link;
-
---- 1524,1528 ----
- if (loop_notes)
- {
-! int max_reg = reg_last_uses_size;
- rtx link;
-
-*************** sched_analyze_insn (x, insn, loop_notes)
-*** 2072,2076 ****
- reg_pending_sets_all = 1;
-
-! flush_pending_lists (insn);
-
- link = loop_notes;
---- 1538,1542 ----
- reg_pending_sets_all = 1;
-
-! flush_pending_lists (insn, 0);
-
- link = loop_notes;
-*************** sched_analyze (head, tail)
-*** 2202,2207 ****
- && NOTE_LINE_NUMBER (NEXT_INSN (insn)) == NOTE_INSN_SETJMP)
- {
-! int max_reg = max_reg_num ();
-! for (i = 0; i < max_reg; i++)
- {
- for (u = reg_last_uses[i]; u; u = XEXP (u, 1))
---- 1668,1672 ----
- && NOTE_LINE_NUMBER (NEXT_INSN (insn)) == NOTE_INSN_SETJMP)
- {
-! for (i = 0; i < reg_last_uses_size; i++)
- {
- for (u = reg_last_uses[i]; u; u = XEXP (u, 1))
-*************** sched_analyze (head, tail)
-*** 2247,2259 ****
- loop_notes = 0;
-
-! /* We don't need to flush memory for a function call which does
-! not involve memory. */
-! if (! CONST_CALL_P (insn))
-! {
-! /* In the absence of interprocedural alias analysis,
-! we must flush all pending reads and writes, and
-! start new dependencies starting from here. */
-! flush_pending_lists (insn);
-! }
-
- /* Depend this function call (actually, the user of this
---- 1712,1720 ----
- loop_notes = 0;
-
-! /* In the absence of interprocedural alias analysis, we must flush
-! all pending reads and writes, and start new dependencies starting
-! from here. But only flush writes for constant calls (which may
-! be passed a pointer to something we haven't written yet). */
-! flush_pending_lists (insn, CONST_CALL_P (insn));
-
- /* Depend this function call (actually, the user of this
-*************** sched_analyze (head, tail)
-*** 2264,2270 ****
- else if (GET_CODE (insn) == NOTE
- && (NOTE_LINE_NUMBER (insn) == NOTE_INSN_LOOP_BEG
-! || NOTE_LINE_NUMBER (insn) == NOTE_INSN_LOOP_END))
-! loop_notes = gen_rtx (EXPR_LIST, REG_DEAD,
-! GEN_INT (NOTE_LINE_NUMBER (insn)), loop_notes);
-
- if (insn == tail)
---- 1725,1736 ----
- else if (GET_CODE (insn) == NOTE
- && (NOTE_LINE_NUMBER (insn) == NOTE_INSN_LOOP_BEG
-! || NOTE_LINE_NUMBER (insn) == NOTE_INSN_LOOP_END
-! || (NOTE_LINE_NUMBER (insn) == NOTE_INSN_SETJMP
-! && GET_CODE (PREV_INSN (insn)) != CALL_INSN)))
-! {
-! loop_notes = gen_rtx (EXPR_LIST, REG_DEAD,
-! GEN_INT (NOTE_LINE_NUMBER (insn)), loop_notes);
-! CONST_CALL_P (loop_notes) = CONST_CALL_P (insn);
-! }
-
- if (insn == tail)
-*************** sched_note_set (b, x, death)
-*** 2372,2380 ****
-
- #define SCHED_SORT(READY, NEW_READY, OLD_READY) \
-! do { if ((NEW_READY) - (OLD_READY) == 1) \
-! swap_sort (READY, NEW_READY); \
-! else if ((NEW_READY) - (OLD_READY) > 1) \
-! qsort (READY, NEW_READY, sizeof (rtx), rank_for_schedule); } \
-! while (0)
-
- /* Returns a positive value if y is preferred; returns a negative value if
---- 1838,1845 ----
-
- #define SCHED_SORT(READY, NEW_READY, OLD_READY) \
-! if ((NEW_READY) - (OLD_READY) == 1) \
-! swap_sort (READY, NEW_READY); \
-! else if ((NEW_READY) - (OLD_READY) > 1) \
-! qsort (READY, NEW_READY, sizeof (rtx), rank_for_schedule); else \
-
- /* Returns a positive value if y is preferred; returns a negative value if
-*************** reemit_notes (insn, last)
-*** 3128,3132 ****
- {
- if (INTVAL (XEXP (note, 0)) == NOTE_INSN_SETJMP)
-! emit_note_after (INTVAL (XEXP (note, 0)), insn);
- else
- last = emit_note_before (INTVAL (XEXP (note, 0)), last);
---- 2593,2598 ----
- {
- if (INTVAL (XEXP (note, 0)) == NOTE_INSN_SETJMP)
-! CONST_CALL_P (emit_note_after (INTVAL (XEXP (note, 0)), insn))
-! = CONST_CALL_P (note);
- else
- last = emit_note_before (INTVAL (XEXP (note, 0)), last);
-*************** schedule_block (b, file)
-*** 3174,3178 ****
- b, INSN_UID (basic_block_head[b]), INSN_UID (basic_block_end[b]));
-
-! i = max_reg_num ();
- reg_last_uses = (rtx *) alloca (i * sizeof (rtx));
- bzero ((char *) reg_last_uses, i * sizeof (rtx));
---- 2640,2644 ----
- b, INSN_UID (basic_block_head[b]), INSN_UID (basic_block_end[b]));
-
-! reg_last_uses_size = i = max_reg_num ();
- reg_last_uses = (rtx *) alloca (i * sizeof (rtx));
- bzero ((char *) reg_last_uses, i * sizeof (rtx));
-*************** schedule_block (b, file)
-*** 3800,3804 ****
- made live again later. */
- for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
-! if (call_used_regs[i] || global_regs[i])
- {
- register int offset = i / REGSET_ELT_BITS;
---- 3266,3271 ----
- made live again later. */
- for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
-! if ((call_used_regs[i] && ! fixed_regs[i])
-! || global_regs[i])
- {
- register int offset = i / REGSET_ELT_BITS;
-*************** schedule_insns (dump_file)
-*** 4717,4721 ****
- bcopy ((char *) reg_n_deaths, (char *) sched_reg_n_deaths,
- max_regno * sizeof (short));
-- init_alias_analysis ();
- }
- else
---- 4184,4187 ----
-*************** schedule_insns (dump_file)
-*** 4726,4732 ****
- bb_dead_regs = 0;
- bb_live_regs = 0;
-- if (! flag_schedule_insns)
-- init_alias_analysis ();
- }
-
- if (write_symbols != NO_DEBUG)
---- 4192,4213 ----
- bb_dead_regs = 0;
- bb_live_regs = 0;
- }
-+ init_alias_analysis ();
-+ #if 0
-+ if (dump_file)
-+ {
-+ extern rtx *reg_base_value;
-+ extern int reg_base_value_size;
-+ int i;
-+ for (i = 0; i < reg_base_value_size; i++)
-+ if (reg_base_value[i])
-+ {
-+ fprintf (dump_file, ";; reg_base_value[%d] = ", i);
-+ print_rtl (dump_file, reg_base_value[i]);
-+ fputc ('\n', dump_file);
-+ }
-+ }
-+ #endif
-+
-
- if (write_symbols != NO_DEBUG)
-diff -rcp2N gcc-2.7.2.3/sdbout.c gcc-2.7.2.3.f.1/sdbout.c
-*** gcc-2.7.2.3/sdbout.c Thu Jun 15 12:07:11 1995
---- gcc-2.7.2.3.f.1/sdbout.c Mon Aug 11 05:42:22 1997
-*************** plain_type_1 (type, level)
-*** 539,543 ****
- sdb_dims[sdb_n_dims++]
- = (TYPE_DOMAIN (type)
-! ? TREE_INT_CST_LOW (TYPE_MAX_VALUE (TYPE_DOMAIN (type))) + 1
- : 0);
- return PUSH_DERIVED_LEVEL (DT_ARY, m);
---- 539,546 ----
- sdb_dims[sdb_n_dims++]
- = (TYPE_DOMAIN (type)
-! && TREE_CODE (TYPE_MAX_VALUE (TYPE_DOMAIN (type))) == INTEGER_CST
-! && TREE_CODE (TYPE_MIN_VALUE (TYPE_DOMAIN (type))) == INTEGER_CST
-! ? (TREE_INT_CST_LOW (TYPE_MAX_VALUE (TYPE_DOMAIN (type)))
-! - TREE_INT_CST_LOW (TYPE_MIN_VALUE (TYPE_DOMAIN (type))) + 1)
- : 0);
- return PUSH_DERIVED_LEVEL (DT_ARY, m);
-diff -rcp2N gcc-2.7.2.3/stmt.c gcc-2.7.2.3.f.1/stmt.c
-*** gcc-2.7.2.3/stmt.c Tue Sep 12 23:01:54 1995
---- gcc-2.7.2.3.f.1/stmt.c Fri Aug 29 07:52:05 1997
-*************** fixup_gotos (thisblock, stack_level, cle
-*** 1244,1249 ****
- poplevel (1, 0, 0);
- end_sequence ();
-! f->before_jump
-! = emit_insns_after (cleanup_insns, f->before_jump);
-
- f->cleanup_list_list = TREE_CHAIN (lists);
---- 1244,1250 ----
- poplevel (1, 0, 0);
- end_sequence ();
-! if (cleanup_insns != 0)
-! f->before_jump
-! = emit_insns_after (cleanup_insns, f->before_jump);
-
- f->cleanup_list_list = TREE_CHAIN (lists);
-*************** expand_expr_stmt (exp)
-*** 1721,1725 ****
-
- last_expr_type = TREE_TYPE (exp);
-! if (! flag_syntax_only)
- last_expr_value = expand_expr (exp,
- (expr_stmts_for_value
---- 1722,1726 ----
-
- last_expr_type = TREE_TYPE (exp);
-! if (! flag_syntax_only || expr_stmts_for_value)
- last_expr_value = expand_expr (exp,
- (expr_stmts_for_value
-*************** expand_end_bindings (vars, mark_ends, do
-*** 3160,3163 ****
---- 3161,3169 ----
- #endif
-
-+ #ifdef HAVE_nonlocal_goto_receiver
-+ if (HAVE_nonlocal_goto_receiver)
-+ emit_insn (gen_nonlocal_goto_receiver ());
-+ #endif
-+
- /* The handler expects the desired label address in the static chain
- register. It tests the address and does an appropriate jump
-*************** expand_decl (decl)
-*** 3369,3395 ****
- = promote_mode (type, DECL_MODE (decl), &unsignedp, 0);
-
-! if (TREE_CODE (type) == COMPLEX_TYPE)
-! {
-! rtx realpart, imagpart;
-! enum machine_mode partmode = TYPE_MODE (TREE_TYPE (type));
-
-! /* For a complex type variable, make a CONCAT of two pseudos
-! so that the real and imaginary parts
-! can be allocated separately. */
-! realpart = gen_reg_rtx (partmode);
-! REG_USERVAR_P (realpart) = 1;
-! imagpart = gen_reg_rtx (partmode);
-! REG_USERVAR_P (imagpart) = 1;
-! DECL_RTL (decl) = gen_rtx (CONCAT, reg_mode, realpart, imagpart);
-! }
-! else
-! {
-! DECL_RTL (decl) = gen_reg_rtx (reg_mode);
-! if (TREE_CODE (type) == POINTER_TYPE)
-! mark_reg_pointer (DECL_RTL (decl));
-! REG_USERVAR_P (DECL_RTL (decl)) = 1;
-! }
- }
-! else if (TREE_CODE (DECL_SIZE (decl)) == INTEGER_CST)
- {
- /* Variable of fixed size that goes on the stack. */
---- 3375,3389 ----
- = promote_mode (type, DECL_MODE (decl), &unsignedp, 0);
-
-! DECL_RTL (decl) = gen_reg_rtx (reg_mode);
-! mark_user_reg (DECL_RTL (decl));
-
-! if (TREE_CODE (type) == POINTER_TYPE)
-! mark_reg_pointer (DECL_RTL (decl));
- }
-! else if (TREE_CODE (DECL_SIZE (decl)) == INTEGER_CST
-! && ! (flag_stack_check && ! STACK_CHECK_BUILTIN
-! && (TREE_INT_CST_HIGH (DECL_SIZE (decl)) != 0
-! || (TREE_INT_CST_LOW (DECL_SIZE (decl))
-! > STACK_CHECK_MAX_VAR_SIZE * BITS_PER_UNIT))))
- {
- /* Variable of fixed size that goes on the stack. */
-*************** expand_decl (decl)
-*** 3462,3468 ****
- free_temp_slots ();
-
-! /* Allocate space on the stack for the variable. */
- address = allocate_dynamic_stack_space (size, NULL_RTX,
-! DECL_ALIGN (decl));
-
- /* Reference the variable indirect through that rtx. */
---- 3456,3465 ----
- free_temp_slots ();
-
-! /* Allocate space on the stack for the variable. Note that
-! DECL_ALIGN says how the variable is to be aligned and we
-! cannot use it to conclude anything about the alignment of
-! the size. */
- address = allocate_dynamic_stack_space (size, NULL_RTX,
-! TYPE_ALIGN (TREE_TYPE (decl)));
-
- /* Reference the variable indirect through that rtx. */
-*************** pushcase_range (value1, value2, converte
-*** 4155,4158 ****
---- 4152,4159 ----
- return 1;
-
-+ /* Fail if the range is empty. */
-+ if (tree_int_cst_lt (value2, value1))
-+ return 4;
-+
- if (stack_block_stack
- && stack_block_stack->depth > case_stack->depth)
-*************** pushcase_range (value1, value2, converte
-*** 4189,4197 ****
- /* Convert VALUEs to type in which the comparisons are nominally done. */
- if (value1 == 0) /* Negative infinity. */
-! value1 = TYPE_MIN_VALUE(index_type);
- value1 = (*converter) (nominal_type, value1);
-
- if (value2 == 0) /* Positive infinity. */
-! value2 = TYPE_MAX_VALUE(index_type);
- value2 = (*converter) (nominal_type, value2);
-
---- 4190,4198 ----
- /* Convert VALUEs to type in which the comparisons are nominally done. */
- if (value1 == 0) /* Negative infinity. */
-! value1 = TYPE_MIN_VALUE (index_type);
- value1 = (*converter) (nominal_type, value1);
-
- if (value2 == 0) /* Positive infinity. */
-! value2 = TYPE_MAX_VALUE (index_type);
- value2 = (*converter) (nominal_type, value2);
-
-*************** pushcase_range (value1, value2, converte
-*** 4202,4209 ****
- if (! int_fits_type_p (value2, index_type))
- return 3;
--
-- /* Fail if the range is empty. */
-- if (tree_int_cst_lt (value2, value1))
-- return 4;
-
- /* If the bounds are equal, turn this into the one-value case. */
---- 4203,4206 ----
-diff -rcp2N gcc-2.7.2.3/stor-layout.c gcc-2.7.2.3.f.1/stor-layout.c
-*** gcc-2.7.2.3/stor-layout.c Sat Jun 29 16:26:51 1996
---- gcc-2.7.2.3.f.1/stor-layout.c Mon Aug 11 10:47:50 1997
-*************** layout_decl (decl, known_align)
-*** 255,259 ****
- if (maximum_field_alignment != 0)
- DECL_ALIGN (decl) = MIN (DECL_ALIGN (decl), maximum_field_alignment);
-! else if (flag_pack_struct)
- DECL_ALIGN (decl) = MIN (DECL_ALIGN (decl), BITS_PER_UNIT);
- }
---- 255,259 ----
- if (maximum_field_alignment != 0)
- DECL_ALIGN (decl) = MIN (DECL_ALIGN (decl), maximum_field_alignment);
-! else if (DECL_PACKED (decl))
- DECL_ALIGN (decl) = MIN (DECL_ALIGN (decl), BITS_PER_UNIT);
- }
-*************** layout_decl (decl, known_align)
-*** 261,265 ****
- if (DECL_BIT_FIELD (decl)
- && TYPE_SIZE (type) != 0
-! && TREE_CODE (TYPE_SIZE (type)) == INTEGER_CST)
- {
- register enum machine_mode xmode
---- 261,266 ----
- if (DECL_BIT_FIELD (decl)
- && TYPE_SIZE (type) != 0
-! && TREE_CODE (TYPE_SIZE (type)) == INTEGER_CST
-! && GET_MODE_CLASS (TYPE_MODE (type)) == MODE_INT)
- {
- register enum machine_mode xmode
-*************** layout_decl (decl, known_align)
-*** 278,281 ****
---- 279,291 ----
- }
-
-+ /* Turn off DECL_BIT_FIELD if we won't need it set. */
-+ if (DECL_BIT_FIELD (decl) && TYPE_MODE (type) == BLKmode
-+ && known_align % TYPE_ALIGN (type) == 0
-+ && DECL_SIZE (decl) != 0
-+ && (TREE_CODE (DECL_SIZE (decl)) != INTEGER_CST
-+ || (TREE_INT_CST_LOW (DECL_SIZE (decl)) % BITS_PER_UNIT) == 0)
-+ && DECL_ALIGN (decl) >= TYPE_ALIGN (type))
-+ DECL_BIT_FIELD (decl) = 0;
-+
- /* Evaluate nonconstant size only once, either now or as soon as safe. */
- if (DECL_SIZE (decl) != 0 && TREE_CODE (DECL_SIZE (decl)) != INTEGER_CST)
-*************** layout_record (rec)
-*** 380,384 ****
- if (maximum_field_alignment != 0)
- type_align = MIN (type_align, maximum_field_alignment);
-! else if (flag_pack_struct)
- type_align = MIN (type_align, BITS_PER_UNIT);
-
---- 390,394 ----
- if (maximum_field_alignment != 0)
- type_align = MIN (type_align, maximum_field_alignment);
-! else if (TYPE_PACKED (rec))
- type_align = MIN (type_align, BITS_PER_UNIT);
-
-*************** layout_record (rec)
-*** 422,428 ****
- && DECL_BIT_FIELD_TYPE (field)
- && !DECL_PACKED (field)
-- /* If #pragma pack is in effect, turn off this feature. */
- && maximum_field_alignment == 0
-- && !flag_pack_struct
- && !integer_zerop (DECL_SIZE (field)))
- {
---- 432,436 ----
-*************** layout_record (rec)
-*** 459,463 ****
- if (maximum_field_alignment != 0)
- type_align = MIN (type_align, maximum_field_alignment);
-! else if (flag_pack_struct)
- type_align = MIN (type_align, BITS_PER_UNIT);
-
---- 467,471 ----
- if (maximum_field_alignment != 0)
- type_align = MIN (type_align, maximum_field_alignment);
-! else if (TYPE_PACKED (rec))
- type_align = MIN (type_align, BITS_PER_UNIT);
-
-*************** layout_record (rec)
-*** 500,505 ****
- /* Do nothing. */;
- else if (TREE_CODE (dsize) == INTEGER_CST
- && TREE_INT_CST_HIGH (dsize) == 0
-! && TREE_INT_CST_LOW (dsize) + const_size > const_size)
- /* Use const_size if there's no overflow. */
- const_size += TREE_INT_CST_LOW (dsize);
---- 508,514 ----
- /* Do nothing. */;
- else if (TREE_CODE (dsize) == INTEGER_CST
-+ && ! TREE_CONSTANT_OVERFLOW (dsize)
- && TREE_INT_CST_HIGH (dsize) == 0
-! && TREE_INT_CST_LOW (dsize) + const_size >= const_size)
- /* Use const_size if there's no overflow. */
- const_size += TREE_INT_CST_LOW (dsize);
-*************** get_best_mode (bitsize, bitpos, align, l
-*** 1172,1175 ****
---- 1181,1192 ----
- enum machine_mode mode;
- int unit;
-+
-+ if (bitpos < 0)
-+ {
-+ /* For correct calculations and convenience, bias negative bitpos
-+ to become a non-negative value that is [1,bitsize], such that
-+ the relative bit offset to a multiple of bitsize is preserved. */
-+ bitpos = bitsize - ((-bitpos) % bitsize);
-+ }
-
- /* Find the narrowest integer mode that contains the bit field. */
-diff -rcp2N gcc-2.7.2.3/stupid.c gcc-2.7.2.3.f.1/stupid.c
-*** gcc-2.7.2.3/stupid.c Sun Oct 29 12:45:22 1995
---- gcc-2.7.2.3.f.1/stupid.c Sun Aug 10 22:46:01 1997
-*************** static int *uid_suid;
-*** 66,69 ****
---- 66,74 ----
- static int last_call_suid;
-
-+ /* Record the suid of the last NOTE_INSN_SETJMP
-+ so we can tell whether a pseudo reg crosses any setjmp. */
-+
-+ static int last_setjmp_suid;
-+
- /* Element N is suid of insn where life span of pseudo reg N ends.
- Element is 0 if register N has not been seen yet on backward scan. */
-*************** static char *regs_live;
-*** 89,92 ****
---- 94,101 ----
- static char *regs_change_size;
-
-+ /* Indexed by reg number, nonzero if reg crosses a setjmp. */
-+
-+ static char *regs_crosses_setjmp;
-+
- /* Indexed by insn's suid, the set of hard regs live after that insn. */
-
-*************** stupid_life_analysis (f, nregs, file)
-*** 149,152 ****
---- 158,162 ----
-
- last_call_suid = i + 1;
-+ last_setjmp_suid = i + 1;
- max_suid = i + 1;
-
-*************** stupid_life_analysis (f, nregs, file)
-*** 167,170 ****
---- 177,183 ----
- bzero ((char *) regs_change_size, nregs * sizeof (char));
-
-+ regs_crosses_setjmp = (char *) alloca (nregs * sizeof (char));
-+ bzero ((char *) regs_crosses_setjmp, nregs * sizeof (char));
-+
- reg_renumber = (short *) oballoc (nregs * sizeof (short));
- for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
-*************** stupid_life_analysis (f, nregs, file)
-*** 216,219 ****
---- 229,236 ----
- stupid_mark_refs (PATTERN (insn), insn);
-
-+ if (GET_CODE (insn) == NOTE
-+ && NOTE_LINE_NUMBER (insn) == NOTE_INSN_SETJMP)
-+ last_setjmp_suid = INSN_SUID (insn);
-+
- /* Mark all call-clobbered regs as live after each call insn
- so that a pseudo whose life span includes this insn
-*************** stupid_life_analysis (f, nregs, file)
-*** 254,259 ****
- register int r = reg_order[i];
-
-! /* Some regnos disappear from the rtl. Ignore them to avoid crash. */
-! if (regno_reg_rtx[r] == 0)
- continue;
-
---- 271,277 ----
- register int r = reg_order[i];
-
-! /* Some regnos disappear from the rtl. Ignore them to avoid crash.
-! Also don't allocate registers that cross a setjmp. */
-! if (regno_reg_rtx[r] == 0 || regs_crosses_setjmp[r])
- continue;
-
-*************** stupid_reg_compare (r1p, r2p)
-*** 309,314 ****
- that can hold a value of machine-mode MODE
- (but actually we test only the first of the block for holding MODE)
-! currently free from after insn whose suid is BIRTH
-! through the insn whose suid is DEATH,
- and return the number of the first of them.
- Return -1 if such a block cannot be found.
---- 327,332 ----
- that can hold a value of machine-mode MODE
- (but actually we test only the first of the block for holding MODE)
-! currently free from after insn whose suid is BORN_INSN
-! through the insn whose suid is DEAD_INSN,
- and return the number of the first of them.
- Return -1 if such a block cannot be found.
-*************** stupid_find_reg (call_preserved, class,
-*** 338,341 ****
---- 356,366 ----
- #endif
-
-+ /* If this register's life is more than 5,000 insns, we probably
-+ can't allocate it, so don't waste the time trying. This avoid
-+ quadratic behavior on programs that have regularly-occurring
-+ SAVE_EXPRs. */
-+ if (dead_insn > born_insn + 5000)
-+ return -1;
-+
- COPY_HARD_REG_SET (used,
- call_preserved ? call_used_reg_set : fixed_reg_set);
-*************** stupid_mark_refs (x, insn)
-*** 488,491 ****
---- 513,519 ----
- if (last_call_suid < reg_where_dead[regno])
- reg_n_calls_crossed[regno] += 1;
-+
-+ if (last_setjmp_suid < reg_where_dead[regno])
-+ regs_crosses_setjmp[regno] = 1;
- }
- }
-diff -rcp2N gcc-2.7.2.3/tm.texi gcc-2.7.2.3.f.1/tm.texi
-*** gcc-2.7.2.3/tm.texi Sun Sep 3 12:59:01 1995
---- gcc-2.7.2.3.f.1/tm.texi Fri Aug 29 07:52:19 1997
-*************** This describes the stack layout and call
-*** 1951,1954 ****
---- 1951,1955 ----
- @menu
- * Frame Layout::
-+ * Stack Checking::
- * Frame Registers::
- * Elimination::
-*************** This discusses registers that address th
-*** 2070,2073 ****
---- 2071,2156 ----
- @table @code
- @findex STACK_POINTER_REGNUM
-+ @end table
-+
-+ @node Stack Checking
-+ @subsection Specifying How Stack Checking is Done
-+
-+ GNU CC will check that stack references are within the boundaries of
-+ the stack, if the @samp{-fstack-check} is specified, in one of three ways:
-+
-+ @enumerate
-+ @item
-+ If the value of the @code{STACK_CHECK_BUILTIN} macro is nonzero, GNU CC
-+ will assume that you have arranged for stack checking to be done at
-+ appropriate places in the configuration files, e.g., in
-+ @code{FUNCTION_PROLOGUE}. GNU CC will do not other special processing.
-+
-+ @item
-+ If @code{STACK_CHECK_BUILTIN} is zero and you defined a named pattern
-+ called @code{check_stack} in your @file{md} file, GNU CC will call that
-+ pattern with one argument which is the address to compare the stack
-+ value against. You must arrange for this pattern to report an error if
-+ the stack pointer is out of range.
-+
-+ @item
-+ If neither of the above are true, GNU CC will generate code to periodically
-+ ``probe'' the stack pointer using the values of the macros defined below.
-+ @end enumerate
-+
-+ Normally, you will use the default values of these macros, so GNU CC
-+ will use the third approach.
-+
-+ @table @code
-+ @findex STACK_CHECK_BUILTIN
-+ @item STACK_CHECK_BUILTIN
-+ A nonzero value if stack checking is done by the configuration files in a
-+ machine-dependent manner. You should define this macro if stack checking
-+ is require by the ABI of your machine or if you would like to have to stack
-+ checking in some more efficient way than GNU CC's portable approach.
-+ The default value of this macro is zero.
-+
-+ @findex STACK_CHECK_PROBE_INTERVAL
-+ @item STACK_CHECK_PROBE_INTERVAL
-+ An integer representing the interval at which GNU CC must generate stack
-+ probe instructions. You will normally define this macro to be no larger
-+ than the size of the ``guard pages'' at the end of a stack area. The
-+ default value of 4096 is suitable for most systems.
-+
-+ @findex STACK_CHECK_PROBE_LOAD
-+ @item STACK_CHECK_PROBE_LOAD
-+ A integer which is nonzero if GNU CC should perform the stack probe
-+ as a load instruction and zero if GNU CC should use a store instruction.
-+ The default is zero, which is the most efficient choice on most systems.
-+
-+ @findex STACK_CHECK_PROTECT
-+ @item STACK_CHECK_PROTECT
-+ The number of bytes of stack needed to recover from a stack overflow,
-+ for languages where such a recovery is supported. The default value of
-+ 75 words should be adequate for most machines.
-+
-+ @findex STACK_CHECK_MAX_FRAME_SIZE
-+ @item STACK_CHECK_MAX_FRAME_SIZE
-+ The maximum size of a stack frame, in bytes. GNU CC will generate probe
-+ instructions in non-leaf functions to ensure at least this many bytes of
-+ stack are available. If a stack frame is larger than this size, stack
-+ checking will not be reliable and GNU CC will issue a warning. The
-+ default is chosen so that GNU CC only generates one instruction on most
-+ systems. You should normally not change the default value of this macro.
-+
-+ @findex STACK_CHECK_FIXED_FRAME_SIZE
-+ @item STACK_CHECK_FIXED_FRAME_SIZE
-+ GNU CC uses this value to generate the above warning message. It
-+ represents the amount of fixed frame used by a function, not including
-+ space for any callee-saved registers, temporaries and user variables.
-+ You need only specify an upper bound for this amount and will normally
-+ use the default of four words.
-+
-+ @findex STACK_CHECK_MAX_VAR_SIZE
-+ @item STACK_CHECK_MAX_VAR_SIZE
-+ The maximum size, in bytes, of an object that GNU CC will place in the
-+ fixed area of the stack frame when the user specifies
-+ @samp{-fstack-check}.
-+ GNU CC computed the default from the values of the above macros and you will
-+ normally not need to override that default.
- @item STACK_POINTER_REGNUM
- The register number of the stack pointer register, which must also be a
-diff -rcp2N gcc-2.7.2.3/toplev.c gcc-2.7.2.3.f.1/toplev.c
-*** gcc-2.7.2.3/toplev.c Fri Oct 20 21:56:35 1995
---- gcc-2.7.2.3.f.1/toplev.c Fri Aug 29 09:13:14 1997
-*************** int flag_unroll_loops;
-*** 388,391 ****
---- 388,405 ----
- int flag_unroll_all_loops;
-
-+ /* Nonzero forces all invariant computations in loops to be moved
-+ outside the loop. */
-+
-+ int flag_move_all_movables = 0;
-+
-+ /* Nonzero forces all general induction variables in loops to be
-+ strength reduced. */
-+
-+ int flag_reduce_all_givs = 0;
-+
-+ /* Nonzero gets another run of loop_optimize performed. */
-+
-+ int flag_rerun_loop_opt = 0;
-+
- /* Nonzero for -fwritable-strings:
- store string constants in data segment and don't uniquize them. */
-*************** int flag_gnu_linker = 1;
-*** 522,525 ****
---- 536,554 ----
- int flag_pack_struct = 0;
-
-+ /* 1 if alias checking is on (by default, when -O). */
-+ int flag_alias_check = 0;
-+
-+ /* 0 if pointer arguments may alias each other. True in C.
-+ 1 if pointer arguments may not alias each other but may alias
-+ global variables.
-+ 2 if pointer arguments may not alias each other and may not
-+ alias global variables. True in Fortran.
-+ This defaults to 0 for C. */
-+ int flag_argument_noalias = 0;
-+
-+ /* Emit code to check for stack overflow; also may cause large objects
-+ to be allocated dynamically. */
-+ int flag_stack_check;
-+
- /* Table of language-independent -f options.
- STRING is the option name. VARIABLE is the address of the variable.
-*************** struct { char *string; int *variable; in
-*** 542,545 ****
---- 571,577 ----
- {"unroll-loops", &flag_unroll_loops, 1},
- {"unroll-all-loops", &flag_unroll_all_loops, 1},
-+ {"move-all-movables", &flag_move_all_movables, 1},
-+ {"reduce-all-givs", &flag_reduce_all_givs, 1},
-+ {"rerun-loop-opt", &flag_rerun_loop_opt, 1},
- {"writable-strings", &flag_writable_strings, 1},
- {"peephole", &flag_no_peephole, 0},
-*************** struct { char *string; int *variable; in
-*** 568,572 ****
- {"gnu-linker", &flag_gnu_linker, 1},
- {"pack-struct", &flag_pack_struct, 1},
-! {"bytecode", &output_bytecode, 1}
- };
-
---- 600,609 ----
- {"gnu-linker", &flag_gnu_linker, 1},
- {"pack-struct", &flag_pack_struct, 1},
-! {"bytecode", &output_bytecode, 1},
-! {"alias-check", &flag_alias_check, 1},
-! {"argument-alias", &flag_argument_noalias, 0},
-! {"argument-noalias", &flag_argument_noalias, 1},
-! {"argument-noalias-global", &flag_argument_noalias, 2},
-! {"stack-check", &flag_stack_check, 1}
- };
-
-*************** rest_of_compilation (decl)
-*** 2715,2725 ****
- finish_compilation will call rest_of_compilation again
- for those functions that need to be output. Also defer those
-! functions that we are supposed to defer. */
-!
-! if (DECL_DEFER_OUTPUT (decl)
-! || ((specd || DECL_INLINE (decl))
-! && ((! TREE_PUBLIC (decl) && ! TREE_ADDRESSABLE (decl)
-! && ! flag_keep_inline_functions)
-! || DECL_EXTERNAL (decl))))
- {
- DECL_DEFER_OUTPUT (decl) = 1;
---- 2752,2765 ----
- finish_compilation will call rest_of_compilation again
- for those functions that need to be output. Also defer those
-! functions that we are supposed to defer. We cannot defer
-! functions containing nested functions since the nested function
-! data is in our non-saved obstack. */
-!
-! if (! current_function_contains_functions
-! && (DECL_DEFER_OUTPUT (decl)
-! || ((specd || DECL_INLINE (decl))
-! && ((! TREE_PUBLIC (decl) && ! TREE_ADDRESSABLE (decl)
-! && ! flag_keep_inline_functions)
-! || DECL_EXTERNAL (decl)))))
- {
- DECL_DEFER_OUTPUT (decl) = 1;
-*************** rest_of_compilation (decl)
-*** 2893,2897 ****
---- 2933,2956 ----
- TIMEVAR (loop_time,
- {
-+ int save_unroll_flag;
-+ int save_unroll_all_flag;
-+
-+ if (flag_rerun_loop_opt)
-+ {
-+ save_unroll_flag = flag_unroll_loops;
-+ save_unroll_all_flag = flag_unroll_all_loops;
-+ flag_unroll_loops = 0;
-+ flag_unroll_all_loops = 0;
-+ }
-+
- loop_optimize (insns, loop_dump_file);
-+
-+ if (flag_rerun_loop_opt)
-+ {
-+ flag_unroll_loops = save_unroll_flag;
-+ flag_unroll_all_loops = save_unroll_all_flag;
-+
-+ loop_optimize (insns, loop_dump_file);
-+ }
- });
- }
-*************** rest_of_compilation (decl)
-*** 3280,3283 ****
---- 3339,3346 ----
- resume_temporary_allocation ();
-
-+ /* Show no temporary slots allocated. */
-+
-+ init_temp_slots ();
-+
- /* The parsing time is all the time spent in yyparse
- *except* what is spent in this function. */
-*************** main (argc, argv, envp)
-*** 3383,3386 ****
---- 3446,3450 ----
- flag_omit_frame_pointer = 1;
- #endif
-+ flag_alias_check = 1;
- }
-
-diff -rcp2N gcc-2.7.2.3/tree.c gcc-2.7.2.3.f.1/tree.c
-*** gcc-2.7.2.3/tree.c Mon Oct 2 01:26:56 1995
---- gcc-2.7.2.3.f.1/tree.c Fri Aug 29 08:15:03 1997
-*************** build_string (len, str)
-*** 1428,1436 ****
- /* Return a newly constructed COMPLEX_CST node whose value is
- specified by the real and imaginary parts REAL and IMAG.
-! Both REAL and IMAG should be constant nodes.
-! The TREE_TYPE is not initialized. */
-
- tree
-! build_complex (real, imag)
- tree real, imag;
- {
---- 1428,1437 ----
- /* Return a newly constructed COMPLEX_CST node whose value is
- specified by the real and imaginary parts REAL and IMAG.
-! Both REAL and IMAG should be constant nodes. TYPE, if specified,
-! will be the type of the COMPLEX_CST; otherwise a new type will be made. */
-
- tree
-! build_complex (type, real, imag)
-! tree type;
- tree real, imag;
- {
-*************** build_complex (real, imag)
-*** 1439,1443 ****
- TREE_REALPART (t) = real;
- TREE_IMAGPART (t) = imag;
-! TREE_TYPE (t) = build_complex_type (TREE_TYPE (real));
- TREE_OVERFLOW (t) = TREE_OVERFLOW (real) | TREE_OVERFLOW (imag);
- TREE_CONSTANT_OVERFLOW (t)
---- 1440,1444 ----
- TREE_REALPART (t) = real;
- TREE_IMAGPART (t) = imag;
-! TREE_TYPE (t) = type ? type : build_complex_type (TREE_TYPE (real));
- TREE_OVERFLOW (t) = TREE_OVERFLOW (real) | TREE_OVERFLOW (imag);
- TREE_CONSTANT_OVERFLOW (t)
-*************** integer_zerop (expr)
-*** 1484,1487 ****
---- 1485,1489 ----
-
- return ((TREE_CODE (expr) == INTEGER_CST
-+ && ! TREE_CONSTANT_OVERFLOW (expr)
- && TREE_INT_CST_LOW (expr) == 0
- && TREE_INT_CST_HIGH (expr) == 0)
-*************** integer_onep (expr)
-*** 1501,1504 ****
---- 1503,1507 ----
-
- return ((TREE_CODE (expr) == INTEGER_CST
-+ && ! TREE_CONSTANT_OVERFLOW (expr)
- && TREE_INT_CST_LOW (expr) == 1
- && TREE_INT_CST_HIGH (expr) == 0)
-*************** integer_all_onesp (expr)
-*** 1525,1529 ****
- return 1;
-
-! else if (TREE_CODE (expr) != INTEGER_CST)
- return 0;
-
---- 1528,1533 ----
- return 1;
-
-! else if (TREE_CODE (expr) != INTEGER_CST
-! || TREE_CONSTANT_OVERFLOW (expr))
- return 0;
-
-*************** integer_pow2p (expr)
-*** 1574,1578 ****
- return 1;
-
-! if (TREE_CODE (expr) != INTEGER_CST)
- return 0;
-
---- 1578,1582 ----
- return 1;
-
-! if (TREE_CODE (expr) != INTEGER_CST || TREE_CONSTANT_OVERFLOW (expr))
- return 0;
-
-*************** real_zerop (expr)
-*** 1596,1599 ****
---- 1600,1604 ----
-
- return ((TREE_CODE (expr) == REAL_CST
-+ && ! TREE_CONSTANT_OVERFLOW (expr)
- && REAL_VALUES_EQUAL (TREE_REAL_CST (expr), dconst0))
- || (TREE_CODE (expr) == COMPLEX_CST
-*************** real_onep (expr)
-*** 1611,1614 ****
---- 1616,1620 ----
-
- return ((TREE_CODE (expr) == REAL_CST
-+ && ! TREE_CONSTANT_OVERFLOW (expr)
- && REAL_VALUES_EQUAL (TREE_REAL_CST (expr), dconst1))
- || (TREE_CODE (expr) == COMPLEX_CST
-*************** real_twop (expr)
-*** 1626,1629 ****
---- 1632,1636 ----
-
- return ((TREE_CODE (expr) == REAL_CST
-+ && ! TREE_CONSTANT_OVERFLOW (expr)
- && REAL_VALUES_EQUAL (TREE_REAL_CST (expr), dconst2))
- || (TREE_CODE (expr) == COMPLEX_CST
-*************** staticp (arg)
-*** 2055,2061 ****
- return 1;
-
- case COMPONENT_REF:
- case BIT_FIELD_REF:
-! return staticp (TREE_OPERAND (arg, 0));
-
- #if 0
---- 2062,2073 ----
- return 1;
-
-+ /* If we are referencing a bitfield, we can't evaluate an
-+ ADDR_EXPR at compile time and so it isn't a constant. */
- case COMPONENT_REF:
-+ return (! DECL_BIT_FIELD (TREE_OPERAND (arg, 1))
-+ && staticp (TREE_OPERAND (arg, 0)));
-+
- case BIT_FIELD_REF:
-! return 0;
-
- #if 0
-*************** save_expr (expr)
-*** 2141,2148 ****
-
- /* Return 1 if EXP contains a PLACEHOLDER_EXPR; i.e., if it represents a size
-! or offset that depends on a field within a record.
-!
-! Note that we only allow such expressions within simple arithmetic
-! or a COND_EXPR. */
-
- int
---- 2153,2157 ----
-
- /* Return 1 if EXP contains a PLACEHOLDER_EXPR; i.e., if it represents a size
-! or offset that depends on a field within a record. */
-
- int
-*************** contains_placeholder_p (exp)
-*** 2151,2155 ****
- {
- register enum tree_code code = TREE_CODE (exp);
-- tree inner;
-
- /* If we have a WITH_RECORD_EXPR, it "cancels" any PLACEHOLDER_EXPR
---- 2160,2163 ----
-*************** contains_placeholder_p (exp)
-*** 2157,2173 ****
- if (code == WITH_RECORD_EXPR)
- return 0;
-
- switch (TREE_CODE_CLASS (code))
- {
- case 'r':
-! for (inner = TREE_OPERAND (exp, 0);
-! TREE_CODE_CLASS (TREE_CODE (inner)) == 'r';
-! inner = TREE_OPERAND (inner, 0))
-! ;
-! return TREE_CODE (inner) == PLACEHOLDER_EXPR;
-
- case '1':
- case '2': case '<':
- case 'e':
- switch (tree_code_length[(int) code])
- {
---- 2165,2203 ----
- if (code == WITH_RECORD_EXPR)
- return 0;
-+ else if (code == PLACEHOLDER_EXPR)
-+ return 1;
-
- switch (TREE_CODE_CLASS (code))
- {
- case 'r':
-! /* Don't look at any PLACEHOLDER_EXPRs that might be in index or bit
-! position computations since they will be converted into a
-! WITH_RECORD_EXPR involving the reference, which will assume
-! here will be valid. */
-! return contains_placeholder_p (TREE_OPERAND (exp, 0));
-
- case '1':
- case '2': case '<':
- case 'e':
-+ switch (code)
-+ {
-+ case COMPOUND_EXPR:
-+ /* Ignoring the first operand isn't quite right, but works best. */
-+ return contains_placeholder_p (TREE_OPERAND (exp, 1));
-+
-+ case RTL_EXPR:
-+ case CONSTRUCTOR:
-+ return 0;
-+
-+ case COND_EXPR:
-+ return (contains_placeholder_p (TREE_OPERAND (exp, 0))
-+ || contains_placeholder_p (TREE_OPERAND (exp, 1))
-+ || contains_placeholder_p (TREE_OPERAND (exp, 2)));
-+
-+ case SAVE_EXPR:
-+ return (SAVE_EXPR_RTL (exp) == 0
-+ && contains_placeholder_p (TREE_OPERAND (exp, 0)));
-+ }
-+
- switch (tree_code_length[(int) code])
- {
-*************** contains_placeholder_p (exp)
-*** 2175,2189 ****
- return contains_placeholder_p (TREE_OPERAND (exp, 0));
- case 2:
-! return (code != RTL_EXPR
-! && code != CONSTRUCTOR
-! && ! (code == SAVE_EXPR && SAVE_EXPR_RTL (exp) != 0)
-! && code != WITH_RECORD_EXPR
-! && (contains_placeholder_p (TREE_OPERAND (exp, 0))
-! || contains_placeholder_p (TREE_OPERAND (exp, 1))));
-! case 3:
-! return (code == COND_EXPR
-! && (contains_placeholder_p (TREE_OPERAND (exp, 0))
-! || contains_placeholder_p (TREE_OPERAND (exp, 1))
-! || contains_placeholder_p (TREE_OPERAND (exp, 2))));
- }
- }
---- 2205,2210 ----
- return contains_placeholder_p (TREE_OPERAND (exp, 0));
- case 2:
-! return (contains_placeholder_p (TREE_OPERAND (exp, 0))
-! || contains_placeholder_p (TREE_OPERAND (exp, 1)));
- }
- }
-*************** substitute_in_expr (exp, f, r)
-*** 2204,2207 ****
---- 2225,2229 ----
- {
- enum tree_code code = TREE_CODE (exp);
-+ tree op0, op1, op2;
- tree new = 0;
- tree inner;
-*************** substitute_in_expr (exp, f, r)
-*** 2225,2231 ****
- {
- case 1:
-! new = fold (build1 (code, TREE_TYPE (exp),
-! substitute_in_expr (TREE_OPERAND (exp, 0),
-! f, r)));
- break;
-
---- 2247,2255 ----
- {
- case 1:
-! op0 = substitute_in_expr (TREE_OPERAND (exp, 0), f, r);
-! if (op0 == TREE_OPERAND (exp, 0))
-! return exp;
-!
-! new = fold (build1 (code, TREE_TYPE (exp), op0));
- break;
-
-*************** substitute_in_expr (exp, f, r)
-*** 2238,2245 ****
- abort ();
-
-! new = fold (build (code, TREE_TYPE (exp),
-! substitute_in_expr (TREE_OPERAND (exp, 0), f, r),
-! substitute_in_expr (TREE_OPERAND (exp, 1),
-! f, r)));
- break;
-
---- 2262,2271 ----
- abort ();
-
-! op0 = substitute_in_expr (TREE_OPERAND (exp, 0), f, r);
-! op1 = substitute_in_expr (TREE_OPERAND (exp, 1), f, r);
-! if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1))
-! return exp;
-!
-! new = fold (build (code, TREE_TYPE (exp), op0, op1));
- break;
-
-*************** substitute_in_expr (exp, f, r)
-*** 2253,2261 ****
- abort ();
-
-! new = fold (build (code, TREE_TYPE (exp),
-! substitute_in_expr (TREE_OPERAND (exp, 0), f, r),
-! substitute_in_expr (TREE_OPERAND (exp, 1), f, r),
-! substitute_in_expr (TREE_OPERAND (exp, 2),
-! f, r)));
- }
-
---- 2279,2290 ----
- abort ();
-
-! op0 = substitute_in_expr (TREE_OPERAND (exp, 0), f, r);
-! op1 = substitute_in_expr (TREE_OPERAND (exp, 1), f, r);
-! op2 = substitute_in_expr (TREE_OPERAND (exp, 2), f, r);
-! if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1)
-! && op2 == TREE_OPERAND (exp, 2))
-! return exp;
-!
-! new = fold (build (code, TREE_TYPE (exp), op0, op1, op2));
- }
-
-*************** substitute_in_expr (exp, f, r)
-*** 2276,2302 ****
- return r;
-
-! new = fold (build (code, TREE_TYPE (exp),
-! substitute_in_expr (TREE_OPERAND (exp, 0), f, r),
- TREE_OPERAND (exp, 1)));
- break;
-
- case BIT_FIELD_REF:
-! new = fold (build (code, TREE_TYPE (exp),
-! substitute_in_expr (TREE_OPERAND (exp, 0), f, r),
-! substitute_in_expr (TREE_OPERAND (exp, 1), f, r),
-! substitute_in_expr (TREE_OPERAND (exp, 2), f, r)));
- break;
-
- case INDIRECT_REF:
- case BUFFER_REF:
-! new = fold (build1 (code, TREE_TYPE (exp),
-! substitute_in_expr (TREE_OPERAND (exp, 0),
-! f, r)));
- break;
-
- case OFFSET_REF:
-! new = fold (build (code, TREE_TYPE (exp),
-! substitute_in_expr (TREE_OPERAND (exp, 0), f, r),
-! substitute_in_expr (TREE_OPERAND (exp, 1), f, r)));
- break;
- }
---- 2305,2349 ----
- return r;
-
-! /* If this expression hasn't been completed let, leave it
-! alone. */
-! if (TREE_CODE (inner) == PLACEHOLDER_EXPR
-! && TREE_TYPE (inner) == 0)
-! return exp;
-!
-! op0 = substitute_in_expr (TREE_OPERAND (exp, 0), f, r);
-! if (op0 == TREE_OPERAND (exp, 0))
-! return exp;
-!
-! new = fold (build (code, TREE_TYPE (exp), op0,
- TREE_OPERAND (exp, 1)));
- break;
-
- case BIT_FIELD_REF:
-! op0 = substitute_in_expr (TREE_OPERAND (exp, 0), f, r);
-! op1 = substitute_in_expr (TREE_OPERAND (exp, 1), f, r);
-! op2 = substitute_in_expr (TREE_OPERAND (exp, 2), f, r);
-! if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1)
-! && op2 == TREE_OPERAND (exp, 2))
-! return exp;
-!
-! new = fold (build (code, TREE_TYPE (exp), op0, op1, op2));
- break;
-
- case INDIRECT_REF:
- case BUFFER_REF:
-! op0 = substitute_in_expr (TREE_OPERAND (exp, 0), f, r);
-! if (op0 == TREE_OPERAND (exp, 0))
-! return exp;
-!
-! new = fold (build1 (code, TREE_TYPE (exp), op0));
- break;
-
- case OFFSET_REF:
-! op0 = substitute_in_expr (TREE_OPERAND (exp, 0), f, r);
-! op1 = substitute_in_expr (TREE_OPERAND (exp, 1), f, r);
-! if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1))
-! return exp;
-!
-! new = fold (build (code, TREE_TYPE (exp), op0, op1));
- break;
- }
-*************** substitute_in_expr (exp, f, r)
-*** 2311,2454 ****
- }
-
-- /* Given a type T, a FIELD_DECL F, and a replacement value R,
-- return a new type with all size expressions that contain F
-- updated by replacing F with R. */
--
-- tree
-- substitute_in_type (t, f, r)
-- tree t, f, r;
-- {
-- switch (TREE_CODE (t))
-- {
-- case POINTER_TYPE:
-- case VOID_TYPE:
-- return t;
-- case INTEGER_TYPE:
-- case ENUMERAL_TYPE:
-- case BOOLEAN_TYPE:
-- case CHAR_TYPE:
-- if ((TREE_CODE (TYPE_MIN_VALUE (t)) != INTEGER_CST
-- && contains_placeholder_p (TYPE_MIN_VALUE (t)))
-- || (TREE_CODE (TYPE_MAX_VALUE (t)) != INTEGER_CST
-- && contains_placeholder_p (TYPE_MAX_VALUE (t))))
-- return build_range_type (t,
-- substitute_in_expr (TYPE_MIN_VALUE (t), f, r),
-- substitute_in_expr (TYPE_MAX_VALUE (t), f, r));
-- return t;
--
-- case REAL_TYPE:
-- if ((TYPE_MIN_VALUE (t) != 0
-- && TREE_CODE (TYPE_MIN_VALUE (t)) != REAL_CST
-- && contains_placeholder_p (TYPE_MIN_VALUE (t)))
-- || (TYPE_MAX_VALUE (t) != 0
-- && TREE_CODE (TYPE_MAX_VALUE (t)) != REAL_CST
-- && contains_placeholder_p (TYPE_MAX_VALUE (t))))
-- {
-- t = build_type_copy (t);
--
-- if (TYPE_MIN_VALUE (t))
-- TYPE_MIN_VALUE (t) = substitute_in_expr (TYPE_MIN_VALUE (t), f, r);
-- if (TYPE_MAX_VALUE (t))
-- TYPE_MAX_VALUE (t) = substitute_in_expr (TYPE_MAX_VALUE (t), f, r);
-- }
-- return t;
--
-- case COMPLEX_TYPE:
-- return build_complex_type (substitute_in_type (TREE_TYPE (t), f, r));
--
-- case OFFSET_TYPE:
-- case METHOD_TYPE:
-- case REFERENCE_TYPE:
-- case FILE_TYPE:
-- case SET_TYPE:
-- case FUNCTION_TYPE:
-- case LANG_TYPE:
-- /* Don't know how to do these yet. */
-- abort ();
--
-- case ARRAY_TYPE:
-- t = build_array_type (substitute_in_type (TREE_TYPE (t), f, r),
-- substitute_in_type (TYPE_DOMAIN (t), f, r));
-- TYPE_SIZE (t) = 0;
-- layout_type (t);
-- return t;
--
-- case RECORD_TYPE:
-- case UNION_TYPE:
-- case QUAL_UNION_TYPE:
-- {
-- tree new = copy_node (t);
-- tree field;
-- tree last_field = 0;
--
-- /* Start out with no fields, make new fields, and chain them
-- in. */
--
-- TYPE_FIELDS (new) = 0;
-- TYPE_SIZE (new) = 0;
--
-- for (field = TYPE_FIELDS (t); field;
-- field = TREE_CHAIN (field))
-- {
-- tree new_field = copy_node (field);
--
-- TREE_TYPE (new_field)
-- = substitute_in_type (TREE_TYPE (new_field), f, r);
--
-- /* If this is an anonymous field and the type of this field is
-- a UNION_TYPE or RECORD_TYPE with no elements, ignore it. If
-- the type just has one element, treat that as the field.
-- But don't do this if we are processing a QUAL_UNION_TYPE. */
-- if (TREE_CODE (t) != QUAL_UNION_TYPE && DECL_NAME (new_field) == 0
-- && (TREE_CODE (TREE_TYPE (new_field)) == UNION_TYPE
-- || TREE_CODE (TREE_TYPE (new_field)) == RECORD_TYPE))
-- {
-- if (TYPE_FIELDS (TREE_TYPE (new_field)) == 0)
-- continue;
--
-- if (TREE_CHAIN (TYPE_FIELDS (TREE_TYPE (new_field))) == 0)
-- new_field = TYPE_FIELDS (TREE_TYPE (new_field));
-- }
--
-- DECL_CONTEXT (new_field) = new;
-- DECL_SIZE (new_field) = 0;
--
-- if (TREE_CODE (t) == QUAL_UNION_TYPE)
-- {
-- /* Do the substitution inside the qualifier and if we find
-- that this field will not be present, omit it. */
-- DECL_QUALIFIER (new_field)
-- = substitute_in_expr (DECL_QUALIFIER (field), f, r);
-- if (integer_zerop (DECL_QUALIFIER (new_field)))
-- continue;
-- }
--
-- if (last_field == 0)
-- TYPE_FIELDS (new) = new_field;
-- else
-- TREE_CHAIN (last_field) = new_field;
--
-- last_field = new_field;
--
-- /* If this is a qualified type and this field will always be
-- present, we are done. */
-- if (TREE_CODE (t) == QUAL_UNION_TYPE
-- && integer_onep (DECL_QUALIFIER (new_field)))
-- break;
-- }
--
-- /* If this used to be a qualified union type, but we now know what
-- field will be present, make this a normal union. */
-- if (TREE_CODE (new) == QUAL_UNION_TYPE
-- && (TYPE_FIELDS (new) == 0
-- || integer_onep (DECL_QUALIFIER (TYPE_FIELDS (new)))))
-- TREE_SET_CODE (new, UNION_TYPE);
--
-- layout_type (new);
-- return new;
-- }
-- }
-- }
--
- /* Stabilize a reference so that we can use it any number of times
- without causing its operands to be evaluated more than once.
---- 2358,2361 ----
-*************** build_type_variant (type, constp, volati
-*** 3141,3145 ****
- preserve the TYPE_NAME, since there is code that depends on this. */
-
-! for (t = TYPE_MAIN_VARIANT(type); t; t = TYPE_NEXT_VARIANT (t))
- if (constp == TYPE_READONLY (t) && volatilep == TYPE_VOLATILE (t)
- && TYPE_NAME (t) == TYPE_NAME (type))
---- 3048,3052 ----
- preserve the TYPE_NAME, since there is code that depends on this. */
-
-! for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
- if (constp == TYPE_READONLY (t) && volatilep == TYPE_VOLATILE (t)
- && TYPE_NAME (t) == TYPE_NAME (type))
-*************** get_unwidened (op, for_type)
-*** 4051,4055 ****
- if (TREE_CODE (op) == COMPONENT_REF
- /* Since type_for_size always gives an integer type. */
-! && TREE_CODE (type) != REAL_TYPE)
- {
- unsigned innerprec = TREE_INT_CST_LOW (DECL_SIZE (TREE_OPERAND (op, 1)));
---- 3958,3964 ----
- if (TREE_CODE (op) == COMPONENT_REF
- /* Since type_for_size always gives an integer type. */
-! && TREE_CODE (type) != REAL_TYPE
-! /* Don't crash if field not layed out yet. */
-! && DECL_SIZE (TREE_OPERAND (op, 1)) != 0)
- {
- unsigned innerprec = TREE_INT_CST_LOW (DECL_SIZE (TREE_OPERAND (op, 1)));
-diff -rcp2N gcc-2.7.2.3/tree.h gcc-2.7.2.3.f.1/tree.h
-*** gcc-2.7.2.3/tree.h Mon Sep 25 21:49:40 1995
---- gcc-2.7.2.3.f.1/tree.h Sun Aug 10 22:47:08 1997
-*************** enum built_in_function
-*** 98,101 ****
---- 98,103 ----
- BUILT_IN_APPLY,
- BUILT_IN_RETURN,
-+ BUILT_IN_SETJMP,
-+ BUILT_IN_LONGJMP,
-
- /* C++ extensions */
-*************** struct tree_int_cst
-*** 408,411 ****
---- 410,415 ----
- {
- char common[sizeof (struct tree_common)];
-+ struct rtx_def *rtl; /* acts as link to register transfer language
-+ (rtl) info */
- HOST_WIDE_INT int_cst_low;
- HOST_WIDE_INT int_cst_high;
-*************** struct tree_type
-*** 957,960 ****
---- 961,967 ----
- #define DECL_STATIC_DESTRUCTOR(NODE) ((NODE)->decl.static_dtor_flag)
-
-+ /* In a PARM_DECL, nonzero if this is a restricted pointer. */
-+ #define DECL_RESTRICT(NODE) (NODE)->decl.static_ctor_flag
-+
- /* Used to indicate that this DECL represents a compiler-generated entity. */
- #define DECL_ARTIFICIAL(NODE) ((NODE)->decl.artificial_flag)
-*************** extern tree build_int_2_wide PROTO((HOS
-*** 1176,1180 ****
- extern tree build_real PROTO((tree, REAL_VALUE_TYPE));
- extern tree build_real_from_int_cst PROTO((tree, tree));
-! extern tree build_complex PROTO((tree, tree));
- extern tree build_string PROTO((int, char *));
- extern tree build1 PROTO((enum tree_code, tree, tree));
---- 1183,1187 ----
- extern tree build_real PROTO((tree, REAL_VALUE_TYPE));
- extern tree build_real_from_int_cst PROTO((tree, tree));
-! extern tree build_complex PROTO((tree, tree, tree));
- extern tree build_string PROTO((int, char *));
- extern tree build1 PROTO((enum tree_code, tree, tree));
-*************** extern int contains_placeholder_p PROTO(
-*** 1378,1387 ****
- extern tree substitute_in_expr PROTO((tree, tree, tree));
-
-- /* Given a type T, a FIELD_DECL F, and a replacement value R,
-- return a new type with all size expressions that contain F
-- updated by replacing the reference to F with R. */
--
-- extern tree substitute_in_type PROTO((tree, tree, tree));
--
- /* variable_size (EXP) is like save_expr (EXP) except that it
- is for the special case of something that is part of a
---- 1385,1388 ----
-*************** extern tree maybe_build_cleanup PROTO((
-*** 1456,1460 ****
- and find the ultimate containing object, which is returned. */
-
-! extern tree get_inner_reference PROTO((tree, int *, int *, tree *, enum machine_mode *, int *, int *));
-
- /* Return the FUNCTION_DECL which provides this _DECL with its context,
---- 1457,1463 ----
- and find the ultimate containing object, which is returned. */
-
-! extern tree get_inner_reference PROTO((tree, int *, int *, tree *,
-! enum machine_mode *, int *,
-! int *, int *));
-
- /* Return the FUNCTION_DECL which provides this _DECL with its context,
-diff -rcp2N gcc-2.7.2.3/unroll.c gcc-2.7.2.3.f.1/unroll.c
-*** gcc-2.7.2.3/unroll.c Sun Aug 31 09:39:49 1997
---- gcc-2.7.2.3.f.1/unroll.c Sun Aug 31 09:21:17 1997
-*************** unroll_loop (loop_end, insn_count, loop_
-*** 268,273 ****
- structure of the function. This can happen as a result of the
- "if (foo) bar; else break;" optimization in jump.c. */
-
-! if (write_symbols != NO_DEBUG)
- {
- int block_begins = 0;
---- 268,277 ----
- structure of the function. This can happen as a result of the
- "if (foo) bar; else break;" optimization in jump.c. */
-+ /* ??? Gcc has a general policy that -g is never supposed to change the code
-+ that the compiler emits, so we must disable this optimization always,
-+ even if debug info is not being output. This is rare, so this should
-+ not be a significant performance problem. */
-
-! if (1 /* write_symbols != NO_DEBUG */)
- {
- int block_begins = 0;
-*************** unroll_loop (loop_end, insn_count, loop_
-*** 633,636 ****
---- 637,657 ----
- }
-
-+ if (unroll_type == UNROLL_NAIVE
-+ && GET_CODE (last_loop_insn) == JUMP_INSN
-+ && start_label != JUMP_LABEL (last_loop_insn))
-+ {
-+ /* ??? The loop ends with a conditional branch that does not branch back
-+ to the loop start label. In this case, we must emit an unconditional
-+ branch to the loop exit after emitting the final branch.
-+ copy_loop_body does not have support for this currently, so we
-+ give up. It doesn't seem worthwhile to unroll anyways since
-+ unrolling would increase the number of branch instructions
-+ executed. */
-+ if (loop_dump_stream)
-+ fprintf (loop_dump_stream,
-+ "Unrolling failure: final conditional branch not to loop start\n");
-+ return;
-+ }
-+
- /* Allocate a translation table for the labels and insn numbers.
- They will be filled in as we copy the insns in the loop. */
-*************** unroll_loop (loop_end, insn_count, loop_
-*** 995,999 ****
- for (j = FIRST_PSEUDO_REGISTER; j < max_reg_before_loop; j++)
- if (local_regno[j])
-! map->reg_map[j] = gen_reg_rtx (GET_MODE (regno_reg_rtx[j]));
-
- /* The last copy needs the compare/branch insns at the end,
---- 1016,1024 ----
- for (j = FIRST_PSEUDO_REGISTER; j < max_reg_before_loop; j++)
- if (local_regno[j])
-! {
-! map->reg_map[j] = gen_reg_rtx (GET_MODE (regno_reg_rtx[j]));
-! record_base_value (REGNO (map->reg_map[j]),
-! regno_reg_rtx[j]);
-! }
-
- /* The last copy needs the compare/branch insns at the end,
-*************** unroll_loop (loop_end, insn_count, loop_
-*** 1136,1140 ****
- for (j = FIRST_PSEUDO_REGISTER; j < max_reg_before_loop; j++)
- if (local_regno[j])
-! map->reg_map[j] = gen_reg_rtx (GET_MODE (regno_reg_rtx[j]));
-
- /* If loop starts with a branch to the test, then fix it so that
---- 1161,1169 ----
- for (j = FIRST_PSEUDO_REGISTER; j < max_reg_before_loop; j++)
- if (local_regno[j])
-! {
-! map->reg_map[j] = gen_reg_rtx (GET_MODE (regno_reg_rtx[j]));
-! record_base_value (REGNO (map->reg_map[j]),
-! regno_reg_rtx[j]);
-! }
-
- /* If loop starts with a branch to the test, then fix it so that
-*************** copy_loop_body (copy_start, copy_end, ma
-*** 1605,1608 ****
---- 1634,1641 ----
- int this_giv_inc = INTVAL (giv_inc);
-
-+ /* If this DEST_ADDR giv was not split, then ignore it. */
-+ if (*tv->location != tv->dest_reg)
-+ continue;
-+
- /* Scale this_giv_inc if the multiplicative factors of
- the two givs are different. */
-*************** copy_loop_body (copy_start, copy_end, ma
-*** 1631,1635 ****
- incrementing the shared pseudo reg more than
- once. */
-! if (! tv->same_insn)
- {
- /* tv->dest_reg may actually be a (PLUS (REG)
---- 1664,1668 ----
- incrementing the shared pseudo reg more than
- once. */
-! if (! tv->same_insn && ! tv->shared)
- {
- /* tv->dest_reg may actually be a (PLUS (REG)
-*************** copy_loop_body (copy_start, copy_end, ma
-*** 1757,1760 ****
---- 1790,1794 ----
- giv_dest_reg = tem;
- map->reg_map[regno] = tem;
-+ record_base_value (REGNO (tem), giv_src_reg);
- }
- else
-*************** iteration_info (iteration_var, initial_v
-*** 2220,2231 ****
- return;
- }
-! /* Reject iteration variables larger than the host long size, since they
- could result in a number of iterations greater than the range of our
-! `unsigned long' variable loop_n_iterations. */
-! else if (GET_MODE_BITSIZE (GET_MODE (iteration_var)) > HOST_BITS_PER_LONG)
- {
- if (loop_dump_stream)
- fprintf (loop_dump_stream,
-! "Loop unrolling: Iteration var rejected because mode larger than host long.\n");
- return;
- }
---- 2254,2266 ----
- return;
- }
-! /* Reject iteration variables larger than the host wide int size, since they
- could result in a number of iterations greater than the range of our
-! `unsigned HOST_WIDE_INT' variable loop_n_iterations. */
-! else if ((GET_MODE_BITSIZE (GET_MODE (iteration_var))
-! > HOST_BITS_PER_WIDE_INT))
- {
- if (loop_dump_stream)
- fprintf (loop_dump_stream,
-! "Loop unrolling: Iteration var rejected because mode too large.\n");
- return;
- }
-*************** find_splittable_regs (unroll_type, loop_
-*** 2443,2447 ****
- {
- rtx tem = gen_reg_rtx (bl->biv->mode);
-!
- emit_insn_before (gen_move_insn (tem, bl->biv->src_reg),
- loop_start);
---- 2478,2483 ----
- {
- rtx tem = gen_reg_rtx (bl->biv->mode);
-!
-! record_base_value (REGNO (tem), bl->biv->add_val);
- emit_insn_before (gen_move_insn (tem, bl->biv->src_reg),
- loop_start);
-*************** find_splittable_regs (unroll_type, loop_
-*** 2500,2503 ****
---- 2536,2541 ----
- exits. */
- rtx tem = gen_reg_rtx (bl->biv->mode);
-+ record_base_value (REGNO (tem), bl->biv->add_val);
-+
- emit_insn_before (gen_move_insn (tem, bl->biv->src_reg),
- loop_start);
-*************** find_splittable_givs (bl, unroll_type, l
-*** 2675,2678 ****
---- 2713,2717 ----
- rtx tem = gen_reg_rtx (bl->biv->mode);
-
-+ record_base_value (REGNO (tem), bl->biv->add_val);
- emit_insn_before (gen_move_insn (tem, bl->biv->src_reg),
- loop_start);
-*************** find_splittable_givs (bl, unroll_type, l
-*** 2716,2719 ****
---- 2755,2759 ----
- {
- rtx tem = gen_reg_rtx (v->mode);
-+ record_base_value (REGNO (tem), v->add_val);
- emit_iv_add_mult (bl->initial_value, v->mult_val,
- v->add_val, tem, loop_start);
-*************** find_splittable_givs (bl, unroll_type, l
-*** 2734,2747 ****
- register for the split addr giv, just to be safe. */
-
-! /* ??? If there are multiple address givs which have been
-! combined with the same dest_reg giv, then we may only need
-! one new register for them. Pulling out constants below will
-! catch some of the common cases of this. Currently, I leave
-! the work of simplifying multiple address givs to the
-! following cse pass. */
-!
-! /* As a special case, if we have multiple identical address givs
-! within a single instruction, then we do use a single pseudo
-! reg for both. This is necessary in case one is a match_dup
- of the other. */
-
---- 2774,2780 ----
- register for the split addr giv, just to be safe. */
-
-! /* If we have multiple identical address givs within a
-! single instruction, then use a single pseudo reg for
-! both. This is necessary in case one is a match_dup
- of the other. */
-
-*************** find_splittable_givs (bl, unroll_type, l
-*** 2756,2759 ****
---- 2789,2812 ----
- INSN_UID (v->insn));
- }
-+ /* If multiple address GIVs have been combined with the
-+ same dest_reg GIV, do not create a new register for
-+ each. */
-+ else if (unroll_type != UNROLL_COMPLETELY
-+ && v->giv_type == DEST_ADDR
-+ && v->same && v->same->giv_type == DEST_ADDR
-+ && v->same->unrolled
-+ #ifdef ADDRESS_COST
-+ /* combine_givs_p may return true when ADDRESS_COST is
-+ defined even if the multiply and add values are
-+ not equal. To share a register here, the values
-+ must be equal, as well as related. */
-+ && rtx_equal_p (v->mult_val, v->same->mult_val)
-+ && rtx_equal_p (v->add_val, v->same->add_val)
-+ #endif
-+ )
-+ {
-+ v->dest_reg = v->same->dest_reg;
-+ v->shared = 1;
-+ }
- else if (unroll_type != UNROLL_COMPLETELY)
- {
-*************** find_splittable_givs (bl, unroll_type, l
-*** 2761,2765 ****
- register to hold the split value of the DEST_ADDR giv.
- Emit insn to initialize its value before loop start. */
-! tem = gen_reg_rtx (v->mode);
-
- /* If the address giv has a constant in its new_reg value,
---- 2814,2821 ----
- register to hold the split value of the DEST_ADDR giv.
- Emit insn to initialize its value before loop start. */
-!
-! rtx tem = gen_reg_rtx (v->mode);
-! record_base_value (REGNO (tem), v->add_val);
-! v->unrolled = 1;
-
- /* If the address giv has a constant in its new_reg value,
-*************** find_splittable_givs (bl, unroll_type, l
-*** 2772,2781 ****
- v->dest_reg
- = plus_constant (tem, INTVAL (XEXP (v->new_reg,1)));
-!
- /* Only succeed if this will give valid addresses.
- Try to validate both the first and the last
- address resulting from loop unrolling, if
- one fails, then can't do const elim here. */
-! if (! verify_addresses (v, giv_inc, unroll_number))
- {
- /* Save the negative of the eliminated const, so
---- 2828,2837 ----
- v->dest_reg
- = plus_constant (tem, INTVAL (XEXP (v->new_reg,1)));
-!
- /* Only succeed if this will give valid addresses.
- Try to validate both the first and the last
- address resulting from loop unrolling, if
- one fails, then can't do const elim here. */
-! if (verify_addresses (v, giv_inc, unroll_number))
- {
- /* Save the negative of the eliminated const, so
-*************** final_biv_value (bl, loop_start, loop_en
-*** 3068,3071 ****
---- 3124,3128 ----
-
- tem = gen_reg_rtx (bl->biv->mode);
-+ record_base_value (REGNO (tem), bl->biv->add_val);
- /* Make sure loop_end is not the last insn. */
- if (NEXT_INSN (loop_end) == 0)
-*************** final_giv_value (v, loop_start, loop_end
-*** 3161,3164 ****
---- 3218,3222 ----
- /* Put the final biv value in tem. */
- tem = gen_reg_rtx (bl->biv->mode);
-+ record_base_value (REGNO (tem), bl->biv->add_val);
- emit_iv_add_mult (increment, GEN_INT (loop_n_iterations),
- bl->initial_value, tem, insert_before);
-diff -rcp2N gcc-2.7.2.3/varasm.c gcc-2.7.2.3.f.1/varasm.c
-*** gcc-2.7.2.3/varasm.c Sun Aug 31 09:39:49 1997
---- gcc-2.7.2.3.f.1/varasm.c Sun Aug 31 09:21:18 1997
-*************** assemble_variable (decl, top_level, at_e
-*** 1067,1070 ****
---- 1067,1072 ----
- if (! dont_output_data)
- {
-+ int size;
-+
- if (TREE_CODE (DECL_SIZE (decl)) != INTEGER_CST)
- goto finish;
-*************** assemble_variable (decl, top_level, at_e
-*** 1072,1078 ****
- /* This is better than explicit arithmetic, since it avoids overflow. */
- size_tree = size_binop (CEIL_DIV_EXPR,
-! DECL_SIZE (decl), size_int (BITS_PER_UNIT));
-
-! if (TREE_INT_CST_HIGH (size_tree) != 0)
- {
- error_with_decl (decl, "size of variable `%s' is too large");
---- 1074,1082 ----
- /* This is better than explicit arithmetic, since it avoids overflow. */
- size_tree = size_binop (CEIL_DIV_EXPR,
-! DECL_SIZE (decl), size_int (BITS_PER_UNIT));
-
-! size = TREE_INT_CST_LOW (size_tree);
-! if (TREE_INT_CST_HIGH (size_tree) != 0
-! || size != TREE_INT_CST_LOW (size_tree))
- {
- error_with_decl (decl, "size of variable `%s' is too large");
-*************** decode_addr_const (exp, value)
-*** 2134,2137 ****
---- 2138,2142 ----
- case COMPLEX_CST:
- case CONSTRUCTOR:
-+ case INTEGER_CST:
- x = TREE_CST_RTL (target);
- break;
-*************** const_hash (exp)
-*** 2249,2253 ****
- return const_hash (TREE_OPERAND (exp, 0)) * 9
- + const_hash (TREE_OPERAND (exp, 1));
-! else if (code == NOP_EXPR || code == CONVERT_EXPR)
- return const_hash (TREE_OPERAND (exp, 0)) * 7 + 2;
-
---- 2254,2258 ----
- return const_hash (TREE_OPERAND (exp, 0)) * 9
- + const_hash (TREE_OPERAND (exp, 1));
-! else if (code == NOP_EXPR || code == CONVERT_EXPR || code == NON_LVALUE_EXPR)
- return const_hash (TREE_OPERAND (exp, 0)) * 7 + 2;
-
-*************** compare_constant_1 (exp, p)
-*** 2314,2317 ****
---- 2319,2324 ----
- if (flag_writable_strings)
- return 0;
-+ if (*p++ != TYPE_MODE (TREE_TYPE (exp)))
-+ return 0;
- strp = TREE_STRING_POINTER (exp);
- len = TREE_STRING_LENGTH (exp);
-*************** compare_constant_1 (exp, p)
-*** 2403,2407 ****
- return p;
- }
-! else if (code == NOP_EXPR || code == CONVERT_EXPR)
- {
- p = compare_constant_1 (TREE_OPERAND (exp, 0), p);
---- 2410,2414 ----
- return p;
- }
-! else if (code == NOP_EXPR || code == CONVERT_EXPR || code == NON_LVALUE_EXPR)
- {
- p = compare_constant_1 (TREE_OPERAND (exp, 0), p);
-*************** record_constant_1 (exp)
-*** 2469,2472 ****
---- 2476,2480 ----
- return;
-
-+ obstack_1grow (&permanent_obstack, TYPE_MODE (TREE_TYPE (exp)));
- strp = TREE_STRING_POINTER (exp);
- len = TREE_STRING_LENGTH (exp);
-*************** copy_constant (exp)
-*** 2635,2639 ****
-
- case COMPLEX_CST:
-! return build_complex (copy_constant (TREE_REALPART (exp)),
- copy_constant (TREE_IMAGPART (exp)));
-
---- 2643,2648 ----
-
- case COMPLEX_CST:
-! return build_complex (TREE_TYPE (exp),
-! copy_constant (TREE_REALPART (exp)),
- copy_constant (TREE_IMAGPART (exp)));
-
-*************** copy_constant (exp)
-*** 2646,2649 ****
---- 2655,2659 ----
- case NOP_EXPR:
- case CONVERT_EXPR:
-+ case NON_LVALUE_EXPR:
- return build1 (TREE_CODE (exp), TREE_TYPE (exp),
- copy_constant (TREE_OPERAND (exp, 0)));
-*************** output_constant_def (exp)
-*** 2692,2698 ****
- register rtx def;
-
-- if (TREE_CODE (exp) == INTEGER_CST)
-- abort (); /* No TREE_CST_RTL slot in these. */
--
- if (TREE_CST_RTL (exp))
- return TREE_CST_RTL (exp);
---- 2702,2705 ----
-*************** bc_assemble_integer (exp, size)
-*** 3622,3626 ****
- exp = fold (exp);
-
-! while (TREE_CODE (exp) == NOP_EXPR || TREE_CODE (exp) == CONVERT_EXPR)
- exp = TREE_OPERAND (exp, 0);
- if (TREE_CODE (exp) == INTEGER_CST)
---- 3629,3634 ----
- exp = fold (exp);
-
-! while (TREE_CODE (exp) == NOP_EXPR || TREE_CODE (exp) == CONVERT_EXPR
-! || TREE_CODE (exp) == NON_LVALUE_EXPR)
- exp = TREE_OPERAND (exp, 0);
- if (TREE_CODE (exp) == INTEGER_CST)
-*************** bc_assemble_integer (exp, size)
-*** 3633,3641 ****
- const_part = TREE_OPERAND (exp, 0);
- while (TREE_CODE (const_part) == NOP_EXPR
-! || TREE_CODE (const_part) == CONVERT_EXPR)
- const_part = TREE_OPERAND (const_part, 0);
- addr_part = TREE_OPERAND (exp, 1);
- while (TREE_CODE (addr_part) == NOP_EXPR
-! || TREE_CODE (addr_part) == CONVERT_EXPR)
- addr_part = TREE_OPERAND (addr_part, 0);
- if (TREE_CODE (const_part) != INTEGER_CST)
---- 3641,3651 ----
- const_part = TREE_OPERAND (exp, 0);
- while (TREE_CODE (const_part) == NOP_EXPR
-! || TREE_CODE (const_part) == CONVERT_EXPR
-! || TREE_CODE (const_part) == NON_LVALUE_EXPR)
- const_part = TREE_OPERAND (const_part, 0);
- addr_part = TREE_OPERAND (exp, 1);
- while (TREE_CODE (addr_part) == NOP_EXPR
-! || TREE_CODE (addr_part) == CONVERT_EXPR
-! || TREE_CODE (addr_part) == NON_LVALUE_EXPR)
- addr_part = TREE_OPERAND (addr_part, 0);
- if (TREE_CODE (const_part) != INTEGER_CST)
-diff -rcp2N gcc-2.7.2.3/version.c gcc-2.7.2.3.f.1/version.c
-*** gcc-2.7.2.3/version.c Sun Aug 31 09:39:50 1997
---- gcc-2.7.2.3.f.1/version.c Tue Sep 9 04:13:48 1997
-***************
-*** 1 ****
-! char *version_string = "2.7.2.3";
---- 1 ----
-! char *version_string = "2.7.2.3.f.1";
diff --git a/gcc/f/gbe/README b/gcc/f/gbe/README
deleted file mode 100644
index c30f5d7e6b8..00000000000
--- a/gcc/f/gbe/README
+++ /dev/null
@@ -1,45 +0,0 @@
-970909
-
-This directory contains .diff files for various GNU CC distributions
-supported by this version of GNU Fortran.
-
-The name of a file includes which gcc version to which it applies.
-For example, 2.7.2.3.diff is the patch file for gcc version 2.7.2.3.
-
-To apply a .diff file to, say, gcc 2.7.2.3, one might use the following
-command (where the current directory contains the gcc source distribution
-after merging into it the g77 source distribution, which would be
-named gcc-2.7.2.3 in this example):
-
- patch -p1 -d gcc-2.7.2.3 < gcc-2.7.2.3/f/gbe/2.7.2.3.diff
-
-
-This version of g77 is best combined with gcc versions 2.7.2.3.
-
-However, note that applying any of these patches does _not_ update
-the gcc.info* files that constitute the Info documentation for gcc.
-Therefore, after applying the patch, you must rebuild the Info
-documentation yourself via:
-
- cd gcc; make -f Makefile.in gcc.info
-
-If the above command doesn't work because you don't have makeinfo
-installed, you are STRONGLY encouraged to obtain the most recent
-version of the GNU texinfo package (texinfo-3.11.tar.gz as of this
-writing), build, and install it, then try the above command (as
-makeinfo is part of texinfo).
-
-This distribution of g77 is not supported for versions of gcc prior
-to 2.7.2.3.
-
-If you are using a version of gcc more recent than the most
-recent .diff file's version, try the most recent .diff ONLY
-if the difference is in the third field. E.g. the above
-patch might work on gcc-2.7.3 or gcc-2.7.4 if these were
-released. On the other hand, it probably wouldn't work for
-a more major release like gcc-2.8.0 or gcc-3.0.0, and you
-shouldn't try it. If the .diff file is missing, don't bother
-asking <fortran@gnu.ai.mit.edu> for it -- it is certainly
-being worked on. In the meantime, watch our progress at
-<ftp://alpha.gnu.ai.mit.edu/g77.plan> for information on support
-for the recent versions of gcc.
diff --git a/gcc/f/install0.texi b/gcc/f/install0.texi
index cfb59bf0219..bbc8ab5c223 100644
--- a/gcc/f/install0.texi
+++ b/gcc/f/install0.texi
@@ -10,5 +10,5 @@ this copyright notice and permission notice.
@node Top,,, (dir)
@chapter Installing GNU Fortran
-@include install.texi
+@include g77install.texi
@bye
diff --git a/gcc/f/intdoc.c b/gcc/f/intdoc.c
index a302a7be358..6e88df4dbbb 100644
--- a/gcc/f/intdoc.c
+++ b/gcc/f/intdoc.c
@@ -67,7 +67,7 @@ static char *elaborate_if_real (ffeintrinImp imp, int argno);
static void print_type_string (char *c);
int
-main (int argc, char **argv __attribute__ ((unused)))
+main (int argc, char **argv)
{
if (argc != 1)
{
@@ -494,7 +494,7 @@ external procedure.\n\
if ((argi[0] == '*')
|| (argi[0] == 'n')
|| (argi[0] == '+')
- || (argi[0] == 'p'))
+ || (argi[0] == 'p'))
printf ("-1, @var{%s}-2, @dots{}, @var{%s}-n",
argc, argc);
}
@@ -559,7 +559,7 @@ this intrinsic is valid only when used as the argument to\n\
}
#if 0
else if ((c[0] == 'I')
- && (c[1] == 'p'))
+ && (c[1] == '7'))
printf (", the exact type being wide enough to hold a pointer\n\
on the target system (typically @code{INTEGER(KIND=1)} or @code{INTEGER(KIND=4)}).\n\n");
#endif
@@ -730,10 +730,6 @@ types of all the arguments.\n\n");
argument_name_string (imp, 0));
break;
- case 'p':
- printf ("@code{INTEGER} wide enough to hold a pointer");
- break;
-
default:
assert ("Ia" == NULL);
break;
@@ -848,7 +844,7 @@ types of all the arguments.\n\n");
break;
default:
- assert ("N1" == NULL);
+ assert ("E1" == NULL);
break;
}
break;
@@ -1209,10 +1205,6 @@ print_type_string (char *c)
printf ("@code{INTEGER(KIND=%d)}", (kind - '0'));
break;
- case 'p':
- printf ("@code{INTEGER(KIND=0)}");
- break;
-
default:
assert ("Ia" == NULL);
break;
@@ -1336,7 +1328,7 @@ print_type_string (char *c)
break;
default:
- assert ("arg type?" == NULL);
+ assert ("type?" == NULL);
break;
}
}
diff --git a/gcc/f/intdoc.h b/gcc/f/intdoc.h
deleted file mode 100644
index 58b4007f7d5..00000000000
--- a/gcc/f/intdoc.h
+++ /dev/null
@@ -1,2370 +0,0 @@
-/* Copyright (C) 1997 Free Software Foundation, Inc.
- * This is part of the G77 manual.
- * For copying conditions, see the file g77.texi. */
-
-/* This is the file containing the verbage for the
- intrinsics. It consists of a data base built up
- via DEFDOC macros of the form:
-
- DEFDOC (IMP, SUMMARY, DESCRIPTION)
-
- IMP is the implementation keyword used in the intrin module.
- SUMMARY is the short summary to go in the "* Menu:" section
- of the Info document. DESCRIPTION is the longer description
- to go in the documentation itself.
-
- Note that IMP is leveraged across multiple intrinsic names.
-
- To make for more accurate and consistent documentation,
- the translation made by intdoc.c of the text in SUMMARY
- and DESCRIPTION includes the special sequence
-
- @ARGNO@
-
- where ARGNO is a series of digits forming a number that
- is substituted by intdoc.c as follows:
-
- 0 The initial-caps form of the intrinsic name (e.g. Float).
- 1-98 The initial-caps form of the ARGNO'th argument.
- 99 (SUMMARY only) a newline plus the appropriate # of spaces.
-
- Hope this info is enough to encourage people to feel free to
- add documentation to this file!
-
-*/
-
-/* ~~~~~ to do:
- ALARM
-*/
-
-#define ARCHAIC(upper,mixed) \
- "Archaic form of @code{" #upper "()} that is specific\n\
-to one type for @var{@1@}.\n\
-@xref{" #mixed " Intrinsic}.\n"
-
-#define ARCHAIC_2nd(upper,mixed) \
- "Archaic form of @code{" #upper "()} that is specific\n\
-to one type for @var{@2@}.\n\
-@xref{" #mixed " Intrinsic}.\n"
-
-#define ARCHAIC_2(upper,mixed) \
- "Archaic form of @code{" #upper "()} that is specific\n\
-to one type for @var{@1@} and @var{@2@}.\n\
-@xref{" #mixed " Intrinsic}.\n"
-
-DEFDOC (ABS, "Absolute value.", "\
-Returns the absolute value of @var{@1@}.
-
-If @var{@1@} is type @code{COMPLEX}, the absolute
-value is computed as:
-
-@example
-SQRT(REALPART(@var{@1@})**2, IMAGPART(@var{@1@})**2)
-@end example
-
-@noindent
-Otherwise, it is computed by negating the @var{@1@} if
-it is negative, or returning @var{@1@}.
-
-@xref{Sign Intrinsic}, for how to explicitly
-compute the positive or negative form of the absolute
-value of an expression.
-")
-
-DEFDOC (CABS, "Absolute value (archaic).", ARCHAIC (ABS, Abs))
-
-DEFDOC (DABS, "Absolute value (archaic).", ARCHAIC (ABS, Abs))
-
-DEFDOC (IABS, "Absolute value (archaic).", ARCHAIC (ABS, Abs))
-
-DEFDOC (CDABS, "Absolute value (archaic).", ARCHAIC (ABS, Abs))
-
-DEFDOC (ACHAR, "ASCII character from code.", "\
-Returns the ASCII character corresponding to the
-code specified by @var{@1@}.
-
-@xref{IAChar Intrinsic}, for the inverse of this function.
-
-@xref{Char Intrinsic}, for the function corresponding
-to the system's native character set.
-")
-
-DEFDOC (IACHAR, "ASCII code for character.", "\
-Returns the code for the ASCII character in the
-first character position of @var{@1@}.
-
-@xref{AChar Intrinsic}, for the inverse of this function.
-
-@xref{IChar Intrinsic}, for the function corresponding
-to the system's native character set.
-")
-
-DEFDOC (CHAR, "Character from code.", "\
-Returns the character corresponding to the
-code specified by @var{@1@}, using the system's
-native character set.
-
-Because the system's native character set is used,
-the correspondence between character and their codes
-is not necessarily the same between GNU Fortran
-implementations.
-
-Note that no intrinsic exists to convert a numerical
-value to a printable character string.
-For example, there is no intrinsic that, given
-an @code{INTEGER} or @code{REAL} argument with the
-value @samp{154}, returns the @code{CHARACTER}
-result @samp{'154'}.
-
-Instead, you can use internal-file I/O to do this kind
-of conversion.
-For example:
-
-@smallexample
-INTEGER VALUE
-CHARACTER*10 STRING
-VALUE = 154
-WRITE (STRING, '(I10)'), VALUE
-PRINT *, STRING
-END
-@end smallexample
-
-The above program, when run, prints:
-
-@smallexample
- 154
-@end smallexample
-
-@xref{IChar Intrinsic}, for the inverse of the @code{@0@} function.
-
-@xref{AChar Intrinsic}, for the function corresponding
-to the ASCII character set.
-")
-
-DEFDOC (ICHAR, "Code for character.", "\
-Returns the code for the character in the
-first character position of @var{@1@}.
-
-Because the system's native character set is used,
-the correspondence between character and their codes
-is not necessarily the same between GNU Fortran
-implementations.
-
-Note that no intrinsic exists to convert a printable
-character string to a numerical value.
-For example, there is no intrinsic that, given
-the @code{CHARACTER} value @samp{'154'}, returns an
-@code{INTEGER} or @code{REAL} value with the value @samp{154}.
-
-Instead, you can use internal-file I/O to do this kind
-of conversion.
-For example:
-
-@smallexample
-INTEGER VALUE
-CHARACTER*10 STRING
-STRING = '154'
-READ (STRING, '(I10)'), VALUE
-PRINT *, VALUE
-END
-@end smallexample
-
-The above program, when run, prints:
-
-@smallexample
- 154
-@end smallexample
-
-@xref{Char Intrinsic}, for the inverse of the @code{@0@} function.
-
-@xref{IAChar Intrinsic}, for the function corresponding
-to the ASCII character set.
-")
-
-DEFDOC (ACOS, "Arc cosine.", "\
-Returns the arc-cosine (inverse cosine) of @var{@1@}
-in radians.
-
-@xref{Cos Intrinsic}, for the inverse of this function.
-")
-
-DEFDOC (DACOS, "Arc cosine (archaic).", ARCHAIC (ACOS, ACos))
-
-DEFDOC (AIMAG, "Convert/extract imaginary part of complex.", "\
-Returns the (possibly converted) imaginary part of @var{@1@}.
-
-Use of @code{@0@()} with an argument of a type
-other than @code{COMPLEX(KIND=1)} is restricted to the following case:
-
-@example
-REAL(AIMAG(@1@))
-@end example
-
-@noindent
-This expression converts the imaginary part of @1@ to
-@code{REAL(KIND=1)}.
-
-@xref{REAL() and AIMAG() of Complex}, for more information.
-")
-
-DEFDOC (DIMAG, "Convert/extract imaginary part of complex (archaic).", ARCHAIC (AIMAG, AImag))
-
-DEFDOC (AINT, "Truncate to whole number.", "\
-Returns @var{@1@} with the fractional portion of its
-magnitude truncated and its sign preserved.
-(Also called ``truncation towards zero''.)
-
-@xref{ANInt Intrinsic}, for how to round to nearest
-whole number.
-
-@xref{Int Intrinsic}, for how to truncate and then convert
-number to @code{INTEGER}.
-")
-
-DEFDOC (DINT, "Truncate to whole number (archaic).", ARCHAIC (AINT, AInt))
-
-DEFDOC (INT, "Convert to @code{INTEGER} value truncated@99@to whole number.", "\
-Returns @var{@1@} with the fractional portion of its
-magnitude truncated and its sign preserved, converted
-to type @code{INTEGER(KIND=1)}.
-
-If @var{@1@} is type @code{COMPLEX}, its real part is
-truncated and converted, and its imaginary part is disregarded.
-
-@xref{NInt Intrinsic}, for how to convert, rounded to nearest
-whole number.
-
-@xref{AInt Intrinsic}, for how to truncate to whole number
-without converting.
-")
-
-DEFDOC (IDINT, "Convert to @code{INTEGER} value truncated@99@to whole number (archaic).", ARCHAIC (INT, Int))
-
-DEFDOC (ANINT, "Round to nearest whole number.", "\
-Returns @var{@1@} with the fractional portion of its
-magnitude eliminated by rounding to the nearest whole
-number and with its sign preserved.
-
-A fractional portion exactly equal to
-@samp{.5} is rounded to the whole number that
-is larger in magnitude.
-(Also called ``Fortran round''.)
-
-@xref{AInt Intrinsic}, for how to truncate to
-whole number.
-
-@xref{NInt Intrinsic}, for how to round and then convert
-number to @code{INTEGER}.
-")
-
-DEFDOC (DNINT, "Round to nearest whole number (archaic).", ARCHAIC (ANINT, ANInt))
-
-DEFDOC (NINT, "Convert to @code{INTEGER} value rounded@99@to nearest whole number.", "\
-Returns @var{@1@} with the fractional portion of its
-magnitude eliminated by rounding to the nearest whole
-number and with its sign preserved, converted
-to type @code{INTEGER(KIND=1)}.
-
-If @var{@1@} is type @code{COMPLEX}, its real part is
-rounded and converted.
-
-A fractional portion exactly equal to
-@samp{.5} is rounded to the whole number that
-is larger in magnitude.
-(Also called ``Fortran round''.)
-
-@xref{Int Intrinsic}, for how to convert, truncate to
-whole number.
-
-@xref{ANInt Intrinsic}, for how to round to nearest whole number
-without converting.
-")
-
-DEFDOC (IDNINT, "Convert to @code{INTEGER} value rounded@99@to nearest whole number (archaic).", ARCHAIC (NINT, NInt))
-
-DEFDOC (LOG, "Natural logarithm.", "\
-Returns the natural logarithm of @var{@1@}, which must
-be greater than zero or, if type @code{COMPLEX}, must not
-be zero.
-
-@xref{Exp Intrinsic}, for the inverse of this function.
-
-@xref{Log10 Intrinsic}, for the base-10 logarithm function.
-")
-
-DEFDOC (ALOG, "Natural logarithm (archaic).", ARCHAIC (LOG, Log))
-
-DEFDOC (CLOG, "Natural logarithm (archaic).", ARCHAIC (LOG, Log))
-
-DEFDOC (DLOG, "Natural logarithm (archaic).", ARCHAIC (LOG, Log))
-
-DEFDOC (CDLOG, "Natural logarithm (archaic).", ARCHAIC (LOG, Log))
-
-DEFDOC (LOG10, "Natural logarithm.", "\
-Returns the natural logarithm of @var{@1@}, which must
-be greater than zero or, if type @code{COMPLEX}, must not
-be zero.
-
-The inverse of this function is @samp{10. ** LOG10(@var{@1@})}.
-
-@xref{Log Intrinsic}, for the natural logarithm function.
-")
-
-DEFDOC (ALOG10, "Natural logarithm (archaic).", ARCHAIC (LOG10, Log10))
-
-DEFDOC (DLOG10, "Natural logarithm (archaic).", ARCHAIC (LOG10, Log10))
-
-DEFDOC (MAX, "Maximum value.", "\
-Returns the argument with the largest value.
-
-@xref{Min Intrinsic}, for the opposite function.
-")
-
-DEFDOC (AMAX0, "Maximum value (archaic).", "\
-Archaic form of @code{MAX()} that is specific
-to one type for @var{@1@} and a different return type.
-@xref{Max Intrinsic}.
-")
-
-DEFDOC (AMAX1, "Maximum value (archaic).", ARCHAIC (MAX, Max))
-
-DEFDOC (DMAX1, "Maximum value (archaic).", ARCHAIC (MAX, Max))
-
-DEFDOC (MAX0, "Maximum value (archaic).", ARCHAIC (MAX, Max))
-
-DEFDOC (MAX1, "Maximum value (archaic).", "\
-Archaic form of @code{MAX()} that is specific
-to one type for @var{@1@} and a different return type.
-@xref{Max Intrinsic}.
-")
-
-DEFDOC (MIN, "Minimum value.", "\
-Returns the argument with the smallest value.
-
-@xref{Max Intrinsic}, for the opposite function.
-")
-
-DEFDOC (AMIN0, "Minimum value (archaic).", "\
-Archaic form of @code{MIN()} that is specific
-to one type for @var{@1@} and a different return type.
-@xref{Min Intrinsic}.
-")
-
-DEFDOC (AMIN1, "Minimum value (archaic).", ARCHAIC (MIN, Min))
-
-DEFDOC (DMIN1, "Minimum value (archaic).", ARCHAIC (MIN, Min))
-
-DEFDOC (MIN0, "Minimum value (archaic).", ARCHAIC (MIN, Min))
-
-DEFDOC (MIN1, "Minimum value (archaic).", "\
-Archaic form of @code{MIN()} that is specific
-to one type for @var{@1@} and a different return type.
-@xref{Min Intrinsic}.
-")
-
-DEFDOC (MOD, "Remainder.", "\
-Returns remainder calculated as:
-
-@smallexample
-@var{@1@} - (INT(@var{@1@} / @var{@2@}) * @var{@2@})
-@end smallexample
-
-@var{@2@} must not be zero.
-")
-
-DEFDOC (AMOD, "Remainder (archaic).", ARCHAIC (MOD, Mod))
-
-DEFDOC (DMOD, "Remainder (archaic).", ARCHAIC (MOD, Mod))
-
-DEFDOC (AND, "Boolean AND.", "\
-Returns value resulting from boolean AND of
-pair of bits in each of @var{@1@} and @var{@2@}.
-")
-
-DEFDOC (IAND, "Boolean AND.", "\
-Returns value resulting from boolean AND of
-pair of bits in each of @var{@1@} and @var{@2@}.
-")
-
-DEFDOC (OR, "Boolean OR.", "\
-Returns value resulting from boolean OR of
-pair of bits in each of @var{@1@} and @var{@2@}.
-")
-
-DEFDOC (IOR, "Boolean OR.", "\
-Returns value resulting from boolean OR of
-pair of bits in each of @var{@1@} and @var{@2@}.
-")
-
-DEFDOC (XOR, "Boolean XOR.", "\
-Returns value resulting from boolean exclusive-OR of
-pair of bits in each of @var{@1@} and @var{@2@}.
-")
-
-DEFDOC (IEOR, "Boolean XOR.", "\
-Returns value resulting from boolean exclusive-OR of
-pair of bits in each of @var{@1@} and @var{@2@}.
-")
-
-DEFDOC (NOT, "Boolean NOT.", "\
-Returns value resulting from boolean NOT of each bit
-in @var{@1@}.
-")
-
-DEFDOC (ASIN, "Arc sine.", "\
-Returns the arc-sine (inverse sine) of @var{@1@}
-in radians.
-
-@xref{Sin Intrinsic}, for the inverse of this function.
-")
-
-DEFDOC (DASIN, "Arc sine (archaic).", ARCHAIC (ASIN, ASin))
-
-DEFDOC (ATAN, "Arc tangent.", "\
-Returns the arc-tangent (inverse tangent) of @var{@1@}
-in radians.
-
-@xref{Tan Intrinsic}, for the inverse of this function.
-")
-
-DEFDOC (DATAN, "Arc tangent (archaic).", ARCHAIC (ATAN, ATan))
-
-DEFDOC (ATAN2, "Arc tangent.", "\
-Returns the arc-tangent (inverse tangent) of the complex
-number (@var{@1@}, @var{@2@}) in radians.
-
-@xref{Tan Intrinsic}, for the inverse of this function.
-")
-
-DEFDOC (DATAN2, "Arc tangent (archaic).", ARCHAIC_2 (ATAN2, ATan2))
-
-DEFDOC (BIT_SIZE, "Number of bits in argument's type.", "\
-Returns the number of bits (integer precision plus sign bit)
-represented by the type for @var{@1@}.
-
-@xref{BTest Intrinsic}, for how to test the value of a
-bit in a variable or array.
-
-@xref{IBSet Intrinsic}, for how to set a bit in a variable to 1.
-
-@xref{IBClr Intrinsic}, for how to set a bit in a variable to 0.
-
-")
-
-DEFDOC (BTEST, "Test bit.", "\
-Returns @code{.TRUE.} if bit @var{@2@} in @var{@1@} is
-1, @code{.FALSE.} otherwise.
-
-(Bit 0 is the low-order (rightmost) bit, adding the value
-@ifinfo
-2**0,
-@end ifinfo
-@iftex
-@tex
-$2^0$,
-@end tex
-@end iftex
-or 1,
-to the number if set to 1;
-bit 1 is the next-higher-order bit, adding
-@ifinfo
-2**1,
-@end ifinfo
-@iftex
-@tex
-$2^1$,
-@end tex
-@end iftex
-or 2;
-bit 2 adds
-@ifinfo
-2**2,
-@end ifinfo
-@iftex
-@tex
-$2^2$,
-@end tex
-@end iftex
-or 4; and so on.)
-
-@xref{Bit_Size Intrinsic}, for how to obtain the number of bits
-in a type.
-The leftmost bit of @var{@1@} is @samp{BIT_SIZE(@var{@1@}-1}.
-")
-
-DEFDOC (CMPLX, "Construct @code{COMPLEX(KIND=1)} value.", "\
-If @var{@1@} is not type @code{COMPLEX},
-constructs a value of type @code{COMPLEX(KIND=1)} from the
-real and imaginary values specified by @var{@1@} and
-@var{@2@}, respectively.
-If @var{@2@} is omitted, @samp{0.} is assumed.
-
-If @var{@1@} is type @code{COMPLEX},
-converts it to type @code{COMPLEX(KIND=1)}.
-
-@xref{Complex Intrinsic}, for information on easily constructing
-a @code{COMPLEX} value of arbitrary precision from @code{REAL}
-arguments.
-")
-
-DEFDOC (DCMPLX, "Construct @code{COMPLEX(KIND=2)} value.", "\
-If @var{@1@} is not type @code{COMPLEX},
-constructs a value of type @code{COMPLEX(KIND=2)} from the
-real and imaginary values specified by @var{@1@} and
-@var{@2@}, respectively.
-If @var{@2@} is omitted, @samp{0D0} is assumed.
-
-If @var{@1@} is type @code{COMPLEX},
-converts it to type @code{COMPLEX(KIND=2)}.
-
-Although this intrinsic is not standard Fortran,
-it is a popular extension offered by many compilers
-that support @code{DOUBLE COMPLEX}, since it offers
-the easiest way to convert to @code{DOUBLE COMPLEX}
-without using Fortran 90 features (such as the @samp{KIND=}
-argument to the @code{CMPLX()} intrinsic).
-
-(@samp{CMPLX(0D0, 0D0)} returns a single-precision
-@code{COMPLEX} result, as required by standard FORTRAN 77.
-That's why so many compilers provide @code{DCMPLX()}, since
-@samp{DCMPLX(0D0, 0D0)} returns a @code{DOUBLE COMPLEX}
-result.
-Still, @code{DCMPLX()} converts even @code{REAL*16} arguments
-to their @code{REAL*8} equivalents in most dialects of
-Fortran, so neither it nor @code{CMPLX()} allow easy
-construction of arbitrary-precision values without
-potentially forcing a conversion involving extending or
-reducing precision.
-GNU Fortran provides such an intrinsic, called @code{COMPLEX()}.)
-
-@xref{Complex Intrinsic}, for information on easily constructing
-a @code{COMPLEX} value of arbitrary precision from @code{REAL}
-arguments.
-")
-
-DEFDOC (CONJG, "Complex conjugate.", "\
-Returns the complex conjugate:
-
-@example
-COMPLEX(REALPART(@var{@1@}), -IMAGPART(@var{@1@}))
-@end example
-")
-
-DEFDOC (DCONJG, "Complex conjugate (archaic).", ARCHAIC (CONJG, ATan2))
-
-DEFDOC (COS, "Cosine.", "\
-Returns the cosine of @var{@1@}, an angle measured
-in radians.
-
-@xref{ACos Intrinsic}, for the inverse of this function.
-")
-
-DEFDOC (CCOS, "Cosine (archaic).", ARCHAIC (COS, Cos))
-
-DEFDOC (DCOS, "Cosine (archaic).", ARCHAIC (COS, Cos))
-
-DEFDOC (CDCOS, "Cosine (archaic).", ARCHAIC (COS, Cos))
-
-DEFDOC (COSH, "Hyperbolic cosine.", "\
-Returns the hyperbolic cosine of @var{@1@}.
-")
-
-DEFDOC (DCOSH, "Hyperbolic cosine (archaic).", ARCHAIC (COSH, CosH))
-
-DEFDOC (SQRT, "Square root.", "\
-Returns the square root of @var{@1@}, which must
-not be negative.
-
-To calculate and represent the square root of a negative
-number, complex arithmetic must be used.
-For example, @samp{SQRT(COMPLEX(@var{@1@}))}.
-
-The inverse of this function is @samp{SQRT(@var{@1@}) * SQRT(@var{@1@})}.
-")
-
-DEFDOC (CSQRT, "Square root (archaic).", ARCHAIC (SQRT, SqRt))
-
-DEFDOC (DSQRT, "Square root (archaic).", ARCHAIC (SQRT, SqRt))
-
-DEFDOC (CDSQRT, "Square root (archaic).", ARCHAIC (SQRT, SqRt))
-
-DEFDOC (DBLE, "Convert to double precision.", "\
-Returns @var{@1@} converted to double precision
-(@code{REAL(KIND=2)}).
-If @var{@1@} is @code{COMPLEX}, the real part of
-@var{@1@} is used for the conversion
-and the imaginary part disregarded.
-
-@xref{Sngl Intrinsic}, for the function that converts
-to single precision.
-
-@xref{Int Intrinsic}, for the function that converts
-to @code{INTEGER}.
-
-@xref{Complex Intrinsic}, for the function that converts
-to @code{COMPLEX}.
-")
-
-DEFDOC (DIM, "Difference magnitude (non-negative subtract).", "\
-Returns @samp{@var{@1@}-@var{@2@}} if @var{@1@} is greater than
-@var{@2@}; otherwise returns zero.
-")
-
-DEFDOC (DDIM, "Difference magnitude (archaic).", ARCHAIC_2 (DIM, DiM))
-DEFDOC (IDIM, "Difference magnitude (archaic).", ARCHAIC_2 (IDIM, IDiM))
-
-DEFDOC (DPROD, "Double-precision product.", "\
-Returns @samp{DBLE(@var{@1@})*DBLE(@var{@2@})}.
-")
-
-DEFDOC (EXP, "Exponential.", "\
-Returns @samp{@var{e}**@var{@1@}}, where
-@var{e} is approximately 2.7182818.
-
-@xref{Log Intrinsic}, for the inverse of this function.
-")
-
-DEFDOC (CEXP, "Exponential (archaic).", ARCHAIC (EXP, Exp))
-
-DEFDOC (DEXP, "Exponential (archaic).", ARCHAIC (EXP, Exp))
-
-DEFDOC (CDEXP, "Exponential (archaic).", ARCHAIC (EXP, Exp))
-
-DEFDOC (FLOAT, "Conversion (archaic).", ARCHAIC (REAL, Real))
-DEFDOC (DFLOAT, "Conversion (archaic).", ARCHAIC (REAL, Real))
-
-DEFDOC (IFIX, "Conversion (archaic).", ARCHAIC (INT, Int))
-
-DEFDOC (LONG, "Conversion to @code{INTEGER(KIND=1)} (archaic).", "\
-Archaic form of @code{INT()} that is specific
-to one type for @var{@1@}.
-@xref{Int Intrinsic}.
-
-The precise meaning of this intrinsic might change
-in a future version of the GNU Fortran language,
-as more is learned about how it is used.
-")
-
-DEFDOC (SHORT, "Convert to @code{INTEGER(KIND=6)} value@99@truncated to whole number.", "\
-Returns @var{@1@} with the fractional portion of its
-magnitude truncated and its sign preserved, converted
-to type @code{INTEGER(KIND=6)}.
-
-If @var{@1@} is type @code{COMPLEX}, its real part
-is truncated and converted, and its imaginary part is disgregarded.
-
-@xref{Int Intrinsic}.
-
-The precise meaning of this intrinsic might change
-in a future version of the GNU Fortran language,
-as more is learned about how it is used.
-")
-
-DEFDOC (INT2, "Convert to @code{INTEGER(KIND=6)} value@99@truncated to whole number.", "\
-Returns @var{@1@} with the fractional portion of its
-magnitude truncated and its sign preserved, converted
-to type @code{INTEGER(KIND=6)}.
-
-If @var{@1@} is type @code{COMPLEX}, its real part
-is truncated and converted, and its imaginary part is disgregarded.
-
-@xref{Int Intrinsic}.
-
-The precise meaning of this intrinsic might change
-in a future version of the GNU Fortran language,
-as more is learned about how it is used.
-")
-
-DEFDOC (INT8, "Convert to @code{INTEGER(KIND=2)} value@99@truncated to whole number.", "\
-Returns @var{@1@} with the fractional portion of its
-magnitude truncated and its sign preserved, converted
-to type @code{INTEGER(KIND=2)}.
-
-If @var{@1@} is type @code{COMPLEX}, its real part
-is truncated and converted, and its imaginary part is disgregarded.
-
-@xref{Int Intrinsic}.
-
-The precise meaning of this intrinsic might change
-in a future version of the GNU Fortran language,
-as more is learned about how it is used.
-")
-
-DEFDOC (LEN, "Length of character entity.", "\
-Returns the length of @var{@1@}.
-
-If @var{@1@} is an array, the length of an element
-of @var{@1@} is returned.
-
-Note that @var{@1@} need not be defined when this
-intrinsic is invoked, since only the length, not
-the content, of @var{@1@} is needed.
-
-@xref{Bit_Size Intrinsic}, for the function that determines
-the size of its argument in bits.
-")
-
-DEFDOC (TAN, "Tangent.", "\
-Returns the tangent of @var{@1@}, an angle measured
-in radians.
-
-@xref{ATan Intrinsic}, for the inverse of this function.
-")
-
-DEFDOC (DTAN, "Tangent (archaic).", ARCHAIC (TAN, Tan))
-
-DEFDOC (TANH, "Hyperbolic tangent.", "\
-Returns the hyperbolic tangent of @var{@1@}.
-")
-
-DEFDOC (DTANH, "Hyperbolic tangent (archaic).", ARCHAIC (TANH, TanH))
-
-DEFDOC (SNGL, "Convert (archaic).", ARCHAIC (REAL, Real))
-
-DEFDOC (SIN, "Sine.", "\
-Returns the sine of @var{@1@}, an angle measured
-in radians.
-
-@xref{ASin Intrinsic}, for the inverse of this function.
-")
-
-DEFDOC (CSIN, "Sine (archaic).", ARCHAIC (SIN, Sin))
-
-DEFDOC (DSIN, "Sine (archaic).", ARCHAIC (SIN, Sin))
-
-DEFDOC (CDSIN, "Sine (archaic).", ARCHAIC (SIN, Sin))
-
-DEFDOC (SINH, "Hyperbolic sine.", "\
-Returns the hyperbolic sine of @var{@1@}.
-")
-
-DEFDOC (DSINH, "Hyperbolic sine (archaic).", ARCHAIC (SINH, SinH))
-
-DEFDOC (LSHIFT, "Left-shift bits.", "\
-Returns @var{@1@} shifted to the left
-@var{@2@} bits.
-
-Although similar to the expression
-@samp{@var{@1@}*(2**@var{@2@})}, there
-are important differences.
-For example, the sign of the result is
-not necessarily the same as the sign of
-@var{@1@}.
-
-Currently this intrinsic is defined assuming
-the underlying representation of @var{@1@}
-is as a two's-complement integer.
-It is unclear at this point whether that
-definition will apply when a different
-representation is involved.
-
-@xref{LShift Intrinsic}, for the inverse of this function.
-
-@xref{IShft Intrinsic}, for information
-on a more widely available left-shifting
-intrinsic that is also more precisely defined.
-")
-
-DEFDOC (RSHIFT, "Right-shift bits.", "\
-Returns @var{@1@} shifted to the right
-@var{@2@} bits.
-
-Although similar to the expression
-@samp{@var{@1@}/(2**@var{@2@})}, there
-are important differences.
-For example, the sign of the result is
-undefined.
-
-Currently this intrinsic is defined assuming
-the underlying representation of @var{@1@}
-is as a two's-complement integer.
-It is unclear at this point whether that
-definition will apply when a different
-representation is involved.
-
-@xref{RShift Intrinsic}, for the inverse of this function.
-
-@xref{IShft Intrinsic}, for information
-on a more widely available right-shifting
-intrinsic that is also more precisely defined.
-")
-
-DEFDOC (LGE, "Lexically greater than or equal.", "\
-Returns @samp{.TRUE.} if @samp{@var{@1@}.GE.@var{@2@}},
-@samp{.FALSE.} otherwise.
-@var{@1@} and @var{@2@} are interpreted as containing
-ASCII character codes.
-If either value contains a character not in the ASCII
-character set, the result is processor dependent.
-
-If the @var{@1@} and @var{@2@} are not the same length,
-the shorter is compared as if spaces were appended to
-it to form a value that has the same length as the longer.
-
-The lexical comparison intrinsics @code{LGe}, @code{LGt},
-@code{LLe}, and @code{LLt} differ from the corresponding
-intrinsic operators @code{.GE.}, @code{.GT.},
-@code{.LE.}, @code{.LT.}.
-Because the ASCII collating sequence is assumed,
-the following expressions always return @samp{.TRUE.}:
-
-@smallexample
-LGE ('0', ' ')
-LGE ('A', '0')
-LGE ('a', 'A')
-@end smallexample
-
-The following related expressions do @emph{not} always
-return @samp{.TRUE.}, as they are not necessarily evaluated
-assuming the arguments use ASCII encoding:
-
-@smallexample
-'0' .GE. ' '
-'A' .GE. '0'
-'a' .GE. 'A'
-@end smallexample
-
-The same difference exists
-between @code{LGt} and @code{.GT.};
-between @code{LLe} and @code{.LE.}; and
-between @code{LLt} and @code{.LT.}.
-")
-
-DEFDOC (LGT, "Lexically greater than.", "\
-Returns @samp{.TRUE.} if @samp{@var{@1@}.GT.@var{@2@}},
-@samp{.FALSE.} otherwise.
-@var{@1@} and @var{@2@} are interpreted as containing
-ASCII character codes.
-If either value contains a character not in the ASCII
-character set, the result is processor dependent.
-
-If the @var{@1@} and @var{@2@} are not the same length,
-the shorter is compared as if spaces were appended to
-it to form a value that has the same length as the longer.
-
-@xref{LGe Intrinsic}, for information on the distinction
-between the @code{@0@} intrinsic and the @code{.GT.}
-operator.
-")
-
-DEFDOC (LLE, "Lexically less than or equal.", "\
-Returns @samp{.TRUE.} if @samp{@var{@1@}.LE.@var{@2@}},
-@samp{.FALSE.} otherwise.
-@var{@1@} and @var{@2@} are interpreted as containing
-ASCII character codes.
-If either value contains a character not in the ASCII
-character set, the result is processor dependent.
-
-If the @var{@1@} and @var{@2@} are not the same length,
-the shorter is compared as if spaces were appended to
-it to form a value that has the same length as the longer.
-
-@xref{LGe Intrinsic}, for information on the distinction
-between the @code{@0@} intrinsic and the @code{.LE.}
-operator.
-")
-
-DEFDOC (LLT, "Lexically less than.", "\
-Returns @samp{.TRUE.} if @samp{@var{@1@}.LT.@var{@2@}},
-@samp{.FALSE.} otherwise.
-@var{@1@} and @var{@2@} are interpreted as containing
-ASCII character codes.
-If either value contains a character not in the ASCII
-character set, the result is processor dependent.
-
-If the @var{@1@} and @var{@2@} are not the same length,
-the shorter is compared as if spaces were appended to
-it to form a value that has the same length as the longer.
-
-@xref{LGe Intrinsic}, for information on the distinction
-between the @code{@0@} intrinsic and the @code{.LT.}
-operator.
-")
-
-DEFDOC (SIGN, "Apply sign to magnitude.", "\
-Returns @samp{ABS(@var{@1@})*@var{s}}, where
-@var{s} is +1 if @samp{@var{@2@}.GE.0},
--1 otherwise.
-
-@xref{Abs Intrinsic}, for the function that returns
-the magnitude of a value.
-")
-
-DEFDOC (DSIGN, "Apply sign to magnitude (archaic).", ARCHAIC_2 (SIGN, Sign))
-DEFDOC (ISIGN, "Apply sign to magnitude (archaic).", ARCHAIC_2 (ISIGN, ISign))
-
-DEFDOC (REAL, "Convert value to type @code{REAL(KIND=1)}.", "\
-Converts @var{@1@} to @code{REAL(KIND=1)}.
-
-Use of @code{@0@()} with a @code{COMPLEX} argument
-(other than @code{COMPLEX(KIND=1)}) is restricted to the following case:
-
-@example
-REAL(REAL(@1@))
-@end example
-
-@noindent
-This expression converts the real part of @1@ to
-@code{REAL(KIND=1)}.
-
-@xref{RealPart Intrinsic}, for information on a GNU Fortran
-intrinsic that extracts the real part of an arbitrary
-@code{COMPLEX} value.
-
-@xref{REAL() and AIMAG() of Complex}, for more information.
-")
-
-DEFDOC (DREAL, "Convert value to type @code{REAL(KIND=2)}.", "\
-Converts @var{@1@} to @code{REAL(KIND=2)}.
-
-If @var{@1@} is type @code{COMPLEX}, its real part
-is converted (if necessary) to @code{REAL(KIND=2)},
-and its imaginary part is disregarded.
-
-Although this intrinsic is not standard Fortran,
-it is a popular extension offered by many compilers
-that support @code{DOUBLE COMPLEX}, since it offers
-the easiest way to extract the real part of a @code{DOUBLE COMPLEX}
-value without using the Fortran 90 @code{REAL()} intrinsic
-in a way that produces a return value inconsistent with
-the way many FORTRAN 77 compilers handle @code{REAL()} of
-a @code{DOUBLE COMPLEX} value.
-
-@xref{RealPart Intrinsic}, for information on a GNU Fortran
-intrinsic that avoids these areas of confusion.
-
-@xref{REAL() and AIMAG() of Complex}, for more information on
-this issue.
-")
-
-DEFDOC (IMAGPART, "Extract imaginary part of complex.", "\
-The imaginary part of @var{@1@} is returned, without conversion.
-
-@emph{Note:} The way to do this in standard Fortran 90
-is @samp{AIMAG(@var{@1@})}.
-However, when, for example, @var{@1@} is @code{DOUBLE COMPLEX},
-@samp{AIMAG(@var{@1@})} means something different for some compilers
-that are not true Fortran 90 compilers but offer some
-extensions standardized by Fortran 90 (such as the
-@code{DOUBLE COMPLEX} type, also known as @code{COMPLEX(KIND=2)}).
-
-The advantage of @code{@0@()} is that, while not necessarily
-more or less portable than @code{AIMAG()}, it is more likely to
-cause a compiler that doesn't support it to produce a diagnostic
-than generate incorrect code.
-
-@xref{REAL() and AIMAG() of Complex}, for more information.
-")
-
-DEFDOC (COMPLEX, "Build complex value from real and@99@imaginary parts.", "\
-Returns a @code{COMPLEX} value that has @samp{@1@} and @samp{@2@} as its
-real and imaginary parts, respectively.
-
-If @var{@1@} and @var{@2@} are the same type, and that type is not
-@code{INTEGER}, no data conversion is performed, and the type of
-the resulting value has the same kind value as the types
-of @var{@1@} and @var{@2@}.
-
-If @var{@1@} and @var{@2@} are not the same type, the usual type-promotion
-rules are applied to both, converting either or both to the
-appropriate @code{REAL} type.
-The type of the resulting value has the same kind value as the
-type to which both @var{@1@} and @var{@2@} were converted, in this case.
-
-If @var{@1@} and @var{@2@} are both @code{INTEGER}, they are both converted
-to @code{REAL(KIND=1)}, and the result of the @code{@0@()}
-invocation is type @code{COMPLEX(KIND=1)}.
-
-@emph{Note:} The way to do this in standard Fortran 90
-is too hairy to describe here, but it is important to
-note that @samp{CMPLX(D1,D2)} returns a @code{COMPLEX(KIND=1)}
-result even if @samp{D1} and @samp{D2} are type @code{REAL(KIND=2)}.
-Hence the availability of @code{COMPLEX()} in GNU Fortran.
-")
-
-DEFDOC (LOC, "Address of entity in core.", "\
-The @code{LOC()} intrinsic works the
-same way as the @code{%LOC()} construct.
-@xref{%LOC(),,The @code{%LOC()} Construct}, for
-more information.
-")
-
-DEFDOC (REALPART, "Extract real part of complex.", "\
-The real part of @var{@1@} is returned, without conversion.
-
-@emph{Note:} The way to do this in standard Fortran 90
-is @samp{REAL(@var{@1@})}.
-However, when, for example, @var{@1@} is @code{COMPLEX(KIND=2)},
-@samp{REAL(@var{@1@})} means something different for some compilers
-that are not true Fortran 90 compilers but offer some
-extensions standardized by Fortran 90 (such as the
-@code{DOUBLE COMPLEX} type, also known as @code{COMPLEX(KIND=2)}).
-
-The advantage of @code{@0@()} is that, while not necessarily
-more or less portable than @code{REAL()}, it is more likely to
-cause a compiler that doesn't support it to produce a diagnostic
-than generate incorrect code.
-
-@xref{REAL() and AIMAG() of Complex}, for more information.
-")
-
-DEFDOC (GETARG, "Obtain command-line argument.", "\
-Sets @var{@2@} to the @var{@1@}-th command-line argument (or to all
-blanks if there are fewer than @var{@2@} command-line arguments);
-@code{CALL @0@(0, @var{value})} sets @var{value} to the name of the
-program (on systems that support this feature).
-
-@xref{IArgC Intrinsic}, for information on how to get the number
-of arguments.
-")
-
-DEFDOC (ABORT, "Abort the program.", "\
-Prints a message and potentially causes a core dump via @code{abort(3)}.
-")
-
-DEFDOC (EXIT, "Terminate the program.", "\
-Exit the program with status @var{@1@} after closing open Fortran
-I/O units and otherwise behaving as @code{exit(2)}.
-If @var{@1@} is omitted the canonical `success' value
-will be returned to the system.
-")
-
-DEFDOC (IARGC, "Obtain count of command-line arguments.", "\
-Returns the number of command-line arguments.
-
-This count does not include the specification of the program
-name itself.
-")
-
-DEFDOC (CTIME_func, "Convert time to Day Mon dd hh:mm:ss yyyy.", "\
-Converts @var{@1@}, a system time value, such as returned by
-@code{TIME8()}, to a string of the form @samp{Sat Aug 19 18:13:14 1995},
-and returns that string as the function value.
-
-@xref{Time8 Intrinsic}.
-")
-
-DEFDOC (CTIME_subr, "Convert time to Day Mon dd hh:mm:ss yyyy.", "\
-Converts @var{@2@}, a system time value, such as returned by
-@code{TIME8()}, to a string of the form @samp{Sat Aug 19 18:13:14 1995},
-and returns that string in @var{@1@}.
-
-@xref{Time8 Intrinsic}.
-
-Some non-GNU implementations of Fortran provide this intrinsic as
-only a function, not as a subroutine.
-")
-
-DEFDOC (DATE, "Get current date as dd-Mon-yy.", "\
-Returns @var{@1@} in the form @samp{@var{dd}-@var{mmm}-@var{yy}},
-representing the numeric day of the month @var{dd}, a three-character
-abbreviation of the month name @var{mmm} and the last two digits of
-the year @var{yy}, e.g.@ @samp{25-Nov-96}.
-
-This intrinsic is not recommended, due to the year 2000 approaching.
-@xref{CTime Intrinsic (subroutine)}, for information on obtaining more digits
-for the current (or any) date.
-")
-
-DEFDOC (DTIME_func, "Get elapsed time since last time.", "\
-Initially, return the number of seconds of runtime
-since the start of the process's execution
-as the function value,
-and the user and system components of this in @samp{@var{@1@}(1)}
-and @samp{@var{@1@}(2)} respectively.
-The functions' value is equal to @samp{@var{@1@}(1) + @var{@1@}(2)}.
-
-Subsequent invocations of @samp{@0@()} return values accumulated since the
-previous invocation.
-
-Due to the side effects performed by this intrinsic, the function
-form is not recommended.
-")
-
-DEFDOC (DTIME_subr, "Get elapsed time since last time.", "\
-Initially, return the number of seconds of runtime
-since the start of the process's execution
-in @var{@1@},
-and the user and system components of this in @samp{@var{@2@}(1)}
-and @samp{@var{@2@}(2)} respectively.
-The value of @var{@1@} is equal to @samp{@var{@2@}(1) + @var{@2@}(2)}.
-
-Subsequent invocations of @samp{@0@()} set values based on accumulations
-since the previous invocation.
-
-Some non-GNU implementations of Fortran provide this intrinsic as
-only a function, not as a subroutine.
-")
-
-DEFDOC (ETIME_func, "Get elapsed time for process.", "\
-Return the number of seconds of runtime
-since the start of the process's execution
-as the function value,
-and the user and system components of this in @samp{@var{@1@}(1)}
-and @samp{@var{@1@}(2)} respectively.
-The functions' value is equal to @samp{@var{@1@}(1) + @var{@1@}(2)}.
-")
-
-DEFDOC (ETIME_subr, "Get elapsed time for process.", "\
-Return the number of seconds of runtime
-since the start of the process's execution
-in @var{@1@},
-and the user and system components of this in @samp{@var{@2@}(1)}
-and @samp{@var{@2@}(2)} respectively.
-The value of @var{@1@} is equal to @samp{@var{@2@}(1) + @var{@2@}(2)}.
-
-Some non-GNU implementations of Fortran provide this intrinsic as
-only a function, not as a subroutine.
-")
-
-DEFDOC (FDATE_func, "Get current time as Day Mon dd hh:mm:ss yyyy.", "\
-Returns the current date (using the same format as @code{CTIME()}).
-
-Equivalent to:
-
-@example
-CTIME(TIME8())
-@end example
-
-@xref{CTime Intrinsic (function)}.
-")
-
-DEFDOC (FDATE_subr, "Get current time as Day Mon dd hh:mm:ss yyyy.", "\
-Returns the current date (using the same format as @code{CTIME()})
-in @var{@1@}.
-
-Equivalent to:
-
-@example
-CALL CTIME(@var{@1@}, TIME8())
-@end example
-
-@xref{CTime Intrinsic (subroutine)}.
-
-Some non-GNU implementations of Fortran provide this intrinsic as
-only a function, not as a subroutine.
-")
-
-DEFDOC (GMTIME, "Convert time to GMT time info.", "\
-Given a system time value @var{@1@}, fills @var{@2@} with values
-extracted from it appropriate to the GMT time zone using
-@code{gmtime(3)}.
-
-The array elements are as follows:
-
-@enumerate
-@item
-Seconds after the minute, range 0--59 or 0--61 to allow for leap
-seconds
-
-@item
-Minutes after the hour, range 0--59
-
-@item
-Hours past midnight, range 0--23
-
-@item
-Day of month, range 0--31
-
-@item
-Number of months since January, range 0--12
-
-@item
-Years since 1900
-
-@item
-Number of days since Sunday, range 0--6
-
-@item
-Days since January 1
-
-@item
-Daylight savings indicator: positive if daylight savings is in effect,
-zero if not, and negative if the information isn't available.
-@end enumerate
-")
-
-DEFDOC (LTIME, "Convert time to local time info.", "\
-Given a system time value @var{@1@}, fills @var{@2@} with values
-extracted from it appropriate to the GMT time zone using
-@code{localtime(3)}.
-
-The array elements are as follows:
-
-@enumerate
-@item
-Seconds after the minute, range 0--59 or 0--61 to allow for leap
-seconds
-
-@item
-Minutes after the hour, range 0--59
-
-@item
-Hours past midnight, range 0--23
-
-@item
-Day of month, range 0--31
-
-@item
-Number of months since January, range 0--12
-
-@item
-Years since 1900
-
-@item
-Number of days since Sunday, range 0--6
-
-@item
-Days since January 1
-
-@item
-Daylight savings indicator: positive if daylight savings is in effect,
-zero if not, and negative if the information isn't available.
-@end enumerate
-")
-
-DEFDOC (IDATE_unix, "Get local time info.", "\
-Fills @var{@1@} with the numerical values at the current local time
-of day, month (in the range 1--12), and year in elements 1, 2, and 3,
-respectively.
-The year has four significant digits.
-")
-
-DEFDOC (IDATE_vxt, "Get local time info (VAX/VMS).", "\
-Returns the numerical values of the current local time.
-The month (in the range 1--12) is returned in @var{@1@},
-the day (in the range 1--7) in @var{@2@},
-and the year in @var{@3@} (in the range 0--99).
-
-This intrinsic is not recommended, due to the year 2000 approaching.
-")
-
-DEFDOC (ITIME, "Get local time of day.", "\
-Returns the current local time hour, minutes, and seconds in elements
-1, 2, and 3 of @var{@1@}, respectively.
-")
-
-DEFDOC (MCLOCK, "Get number of clock ticks for process.", "\
-Returns the number of clock ticks since the start of the process.
-Supported on systems with @code{clock(3)} (q.v.).
-
-This intrinsic is not fully portable, such as to systems
-with 32-bit @code{INTEGER} types but supporting times
-wider than 32 bits.
-@xref{MClock8 Intrinsic}, for information on a
-similar intrinsic that might be portable to more
-GNU Fortran implementations, though to fewer
-Fortran compilers.
-
-If the system does not support @code{clock(3)},
--1 is returned.
-")
-
-DEFDOC (MCLOCK8, "Get number of clock ticks for process.", "\
-Returns the number of clock ticks since the start of the process.
-Supported on systems with @code{clock(3)} (q.v.).
-
-No Fortran implementations other than GNU Fortran are
-known to support this intrinsic at the time of this
-writing.
-@xref{MClock Intrinsic}, for information on a
-similar intrinsic that might be portable to more Fortran
-compilers, though to fewer GNU Fortran implementations.
-
-If the system does not support @code{clock(3)},
--1 is returned.
-")
-
-DEFDOC (SECNDS, "Get local time offset since midnight.", "\
-Returns the local time in seconds since midnight minus the value
-@var{@1@}.
-")
-
-DEFDOC (SECOND_func, "Get CPU time for process in seconds.", "\
-Returns the process's runtime in seconds---the same value as the
-UNIX function @code{etime} returns.
-
-This routine is known from Cray Fortran.
-")
-
-DEFDOC (SECOND_subr, "Get CPU time for process@99@in seconds.", "\
-Returns the process's runtime in seconds in @var{@1@}---the same value
-as the UNIX function @code{etime} returns.
-
-This routine is known from Cray Fortran. @xref{Cpu_Time Intrinsic}
-for a standard equivalent.
-")
-
-DEFDOC (SYSTEM_CLOCK, "Get current system clock value.", "\
-Returns in @var{@1@} the current value of the system clock; this is
-the value returned by the UNIX function @code{times(2)}
-in this implementation, but
-isn't in general.
-@var{@2@} is the number of clock ticks per second and
-@var{@3@} is the maximum value this can take, which isn't very useful
-in this implementation since it's just the maximum C @code{unsigned
-int} value.
-")
-
-DEFDOC (CPU_TIME, "Get current CPU time.", "\
-Returns in @var{@1@} the current value of the system time.
-This implementation of the Fortran 95 intrinsic is just an alias for
-@code{second} @xref{Second Intrinsic (subroutine)}.
-")
-
-DEFDOC (TIME8, "Get current time as time value.", "\
-Returns the current time encoded as a long integer
-(in the manner of the UNIX function @code{time(3)}).
-This value is suitable for passing to @code{CTIME},
-@code{GMTIME}, and @code{LTIME}.
-
-No Fortran implementations other than GNU Fortran are
-known to support this intrinsic at the time of this
-writing.
-@xref{Time Intrinsic (UNIX)}, for information on a
-similar intrinsic that might be portable to more Fortran
-compilers, though to fewer GNU Fortran implementations.
-")
-
-DEFDOC (TIME_unix, "Get current time as time value.", "\
-Returns the current time encoded as an integer
-(in the manner of the UNIX function @code{time(3)}).
-This value is suitable for passing to @code{CTIME},
-@code{GMTIME}, and @code{LTIME}.
-
-This intrinsic is not fully portable, such as to systems
-with 32-bit @code{INTEGER} types but supporting times
-wider than 32 bits.
-@xref{Time8 Intrinsic}, for information on a
-similar intrinsic that might be portable to more
-GNU Fortran implementations, though to fewer
-Fortran compilers.
-")
-
-#define BES(num,n,val) "\
-Calculates the Bessel function of the " #num " kind of \
-order " #n " of @var{@" #val "@}.\n\
-See @code{bessel(3m)}, on whose implementation the \
-function depends.\
-"
-
-DEFDOC (BESJ0, "Bessel function.", BES (first, 0, 1))
-DEFDOC (BESJ1, "Bessel function.", BES (first, 1, 1))
-DEFDOC (BESJN, "Bessel function.", BES (first, @var{N}, 2))
-DEFDOC (BESY0, "Bessel function.", BES (second, 0, 1))
-DEFDOC (BESY1, "Bessel function.", BES (second, 1, 1))
-DEFDOC (BESYN, "Bessel function.", BES (second, @var{N}, 2))
-DEFDOC (DBESJ0, "Bessel function (archaic).", ARCHAIC (BESJ0, BesJ0))
-DEFDOC (DBESJ1, "Bessel function (archaic).", ARCHAIC (BESJ1, BesJ1))
-DEFDOC (DBESJN, "Bessel function (archaic).", ARCHAIC_2nd (BESJN, BesJN))
-DEFDOC (DBESY0, "Bessel function (archaic).", ARCHAIC (BESY0, BesY0))
-DEFDOC (DBESY1, "Bessel function (archaic).", ARCHAIC (BESY1, BesY1))
-DEFDOC (DBESYN, "Bessel function (archaic).", ARCHAIC_2nd (BESYN, BesYN))
-
-DEFDOC (ERF, "Error function.", "\
-Returns the error function of @var{@1@}.
-See @code{erf(3m)}, which provides the implementation.
-")
-
-DEFDOC (ERFC, "Complementary error function.", "\
-Returns the complementary error function of @var{@1@}:
-@samp{ERFC(R) = 1 - ERF(R)} (except that the result may be more
-accurate than explicitly evaluating that formulae would give).
-See @code{erfc(3m)}, which provides the implementation.
-")
-
-DEFDOC (DERF, "Error function (archaic).", ARCHAIC (ERF, ErF))
-DEFDOC (DERFC, "Complementary error function (archaic).", ARCHAIC (ERFC, ErFC))
-
-DEFDOC (IRAND, "Random number.", "\
-Returns a uniform quasi-random number up to a system-dependent limit.
-If @var{@1@} is 0, the next number in sequence is returned; if
-@var{@1@} is 1, the generator is restarted by calling the UNIX function
-@samp{srand(0)}; if @var{@1@} has any other value,
-it is used as a new seed with @code{srand()}.
-
-@xref{SRand Intrinsic}.
-
-@emph{Note:} As typically implemented (by the routine of the same
-name in the C library), this random number generator is a very poor
-one, though the BSD and GNU libraries provide a much better
-implementation than the `traditional' one.
-On a different system you almost certainly want to use something better.
-")
-
-DEFDOC (RAND, "Random number.", "\
-Returns a uniform quasi-random number between 0 and 1.
-If @var{@1@} is 0, the next number in sequence is returned; if
-@var{@1@} is 1, the generator is restarted by calling @samp{srand(0)};
-if @var{@1@} has any other value, it is used as a new seed with
-@code{srand}.
-
-@xref{SRand Intrinsic}.
-
-@emph{Note:} As typically implemented (by the routine of the same
-name in the C library), this random number generator is a very poor
-one, though the BSD and GNU libraries provide a much better
-implementation than the `traditional' one.
-On a different system you
-almost certainly want to use something better.
-")
-
-DEFDOC (SRAND, "Random seed.", "\
-Reinitialises the generator with the seed in @var{@1@}.
-@xref{IRand Intrinsic}.
-@xref{Rand Intrinsic}.
-")
-
-DEFDOC (ACCESS, "Check file accessibility.", "\
-Checks file @var{@1@} for accessibility in the mode specified by @var{@2@} and
-returns 0 if the file is accessible in that mode, otherwise an error
-code if the file is inaccessible or @var{@2@} is invalid.
-See @code{access(2)}.
-A null character (@samp{CHAR(0)}) marks the end of
-the name in @var{@1@}---otherwise,
-trailing blanks in @var{@1@} are ignored.
-@var{@2@} may be a concatenation of any of the following characters:
-
-@table @samp
-@item r
-Read permission
-
-@item w
-Write permission
-
-@item x
-Execute permission
-
-@item @kbd{SPC}
-Existence
-@end table
-")
-
-DEFDOC (CHDIR_subr, "Change directory.", "\
-Sets the current working directory to be @var{@1@}.
-If the @var{@2@} argument is supplied, it contains 0
-on success or a non-zero error code otherwise upon return.
-See @code{chdir(3)}.
-
-Some non-GNU implementations of Fortran provide this intrinsic as
-only a function, not as a subroutine, or do not support the
-(optional) @var{@2@} argument.
-")
-
-DEFDOC (CHDIR_func, "Change directory.", "\
-Sets the current working directory to be @var{@1@}.
-Returns 0 on success or a non-zero error code.
-See @code{chdir(3)}.
-
-Due to the side effects performed by this intrinsic, the function
-form is not recommended.
-")
-
-DEFDOC (CHMOD_func, "Change file modes.", "\
-Changes the access mode of file @var{@1@} according to the
-specification @var{@2@}, which is given in the format of
-@code{chmod(1)}.
-A null character (@samp{CHAR(0)}) marks the end of
-the name in @var{@1@}---otherwise,
-trailing blanks in @var{@1@} are ignored.
-Currently, @var{@1@} must not contain the single quote
-character.
-
-Returns 0 on success or a non-zero error code otherwise.
-
-Note that this currently works
-by actually invoking @code{/bin/chmod} (or the @code{chmod} found when
-the library was configured) and so may fail in some circumstances and
-will, anyway, be slow.
-
-Due to the side effects performed by this intrinsic, the function
-form is not recommended.
-")
-
-DEFDOC (CHMOD_subr, "Change file modes.", "\
-Changes the access mode of file @var{@1@} according to the
-specification @var{@2@}, which is given in the format of
-@code{chmod(1)}.
-A null character (@samp{CHAR(0)}) marks the end of
-the name in @var{@1@}---otherwise,
-trailing blanks in @var{@1@} are ignored.
-Currently, @var{@1@} must not contain the single quote
-character.
-
-If the @var{@3@} argument is supplied, it contains
-0 on success or a non-zero error code upon return.
-
-Note that this currently works
-by actually invoking @code{/bin/chmod} (or the @code{chmod} found when
-the library was configured) and so may fail in some circumstances and
-will, anyway, be slow.
-
-Some non-GNU implementations of Fortran provide this intrinsic as
-only a function, not as a subroutine, or do not support the
-(optional) @var{@3@} argument.
-")
-
-DEFDOC (GETCWD_func, "Get current working directory.", "\
-Places the current working directory in @var{@1@}.
-Returns 0 on
-success, otherwise a non-zero error code
-(@code{ENOSYS} if the system does not provide @code{getcwd(3)}
-or @code{getwd(3)}).
-")
-
-DEFDOC (GETCWD_subr, "Get current working directory.", "\
-Places the current working directory in @var{@1@}.
-If the @var{@2@} argument is supplied, it contains 0
-success or a non-zero error code upon return
-(@code{ENOSYS} if the system does not provide @code{getcwd(3)}
-or @code{getwd(3)}).
-
-Some non-GNU implementations of Fortran provide this intrinsic as
-only a function, not as a subroutine, or do not support the
-(optional) @var{@2@} argument.
-")
-
-DEFDOC (FSTAT_func, "Get file information.", "\
-Obtains data about the file open on Fortran I/O unit @var{@1@} and
-places them in the array @var{@2@}.
-The values in this array are
-extracted from the @code{stat} structure as returned by
-@code{fstat(2)} q.v., as follows:
-
-@enumerate
-@item
-File mode
-
-@item
-Inode number
-
-@item
-ID of device containing directory entry for file
-
-@item
-Device id (if relevant)
-
-@item
-Number of links
-
-@item
-Owner's uid
-
-@item
-Owner's gid
-
-@item
-File size (bytes)
-
-@item
-Last access time
-
-@item
-Last modification time
-
-@item
-Last file status change time
-
-@item
-Preferred I/O block size
-
-@item
-Number of blocks allocated
-@end enumerate
-
-Not all these elements are relevant on all systems.
-If an element is not relevant, it is returned as 0.
-
-Returns 0 on success or a non-zero error code.
-")
-
-DEFDOC (FSTAT_subr, "Get file information.", "\
-Obtains data about the file open on Fortran I/O unit @var{@1@} and
-places them in the array @var{@2@}.
-The values in this array are
-extracted from the @code{stat} structure as returned by
-@code{fstat(2)} q.v., as follows:
-
-@enumerate
-@item
-File mode
-
-@item
-Inode number
-
-@item
-ID of device containing directory entry for file
-
-@item
-Device id (if relevant)
-
-@item
-Number of links
-
-@item
-Owner's uid
-
-@item
-Owner's gid
-
-@item
-File size (bytes)
-
-@item
-Last access time
-
-@item
-Last modification time
-
-@item
-Last file status change time
-
-@item
-Preferred I/O block size
-
-@item
-Number of blocks allocated
-@end enumerate
-
-Not all these elements are relevant on all systems.
-If an element is not relevant, it is returned as 0.
-
-If the @var{@3@} argument is supplied, it contains
-0 on success or a non-zero error code upon return.
-
-Some non-GNU implementations of Fortran provide this intrinsic as
-only a function, not as a subroutine, or do not support the
-(optional) @var{@3@} argument.
-")
-
-DEFDOC (LSTAT_func, "Get file information.", "\
-Obtains data about the given file @var{@1@} and places them in the array
-@var{@2@}.
-A null character (@samp{CHAR(0)}) marks the end of
-the name in @var{@1@}---otherwise,
-trailing blanks in @var{@1@} are ignored.
-If @var{@1@} is a symbolic link it returns data on the
-link itself, so the routine is available only on systems that support
-symbolic links.
-The values in this array are extracted from the
-@code{stat} structure as returned by @code{fstat(2)} q.v., as follows:
-
-@enumerate
-@item
-File mode
-
-@item
-Inode number
-
-@item
-ID of device containing directory entry for file
-
-@item
-Device id (if relevant)
-
-@item
-Number of links
-
-@item
-Owner's uid
-
-@item
-Owner's gid
-
-@item
-File size (bytes)
-
-@item
-Last access time
-
-@item
-Last modification time
-
-@item
-Last file status change time
-
-@item
-Preferred I/O block size
-
-@item
-Number of blocks allocated
-@end enumerate
-
-Not all these elements are relevant on all systems.
-If an element is not relevant, it is returned as 0.
-
-Returns 0 on success or a non-zero error code
-(@code{ENOSYS} if the system does not provide @code{lstat(2)}).
-")
-
-DEFDOC (LSTAT_subr, "Get file information.", "\
-Obtains data about the given file @var{@1@} and places them in the array
-@var{@2@}.
-A null character (@samp{CHAR(0)}) marks the end of
-the name in @var{@1@}---otherwise,
-trailing blanks in @var{@1@} are ignored.
-If @var{@1@} is a symbolic link it returns data on the
-link itself, so the routine is available only on systems that support
-symbolic links.
-The values in this array are extracted from the
-@code{stat} structure as returned by @code{fstat(2)} q.v., as follows:
-
-@enumerate
-@item
-File mode
-
-@item
-Inode number
-
-@item
-ID of device containing directory entry for file
-
-@item
-Device id (if relevant)
-
-@item
-Number of links
-
-@item
-Owner's uid
-
-@item
-Owner's gid
-
-@item
-File size (bytes)
-
-@item
-Last access time
-
-@item
-Last modification time
-
-@item
-Last file status change time
-
-@item
-Preferred I/O block size
-
-@item
-Number of blocks allocated
-@end enumerate
-
-Not all these elements are relevant on all systems.
-If an element is not relevant, it is returned as 0.
-
-If the @var{@3@} argument is supplied, it contains
-0 on success or a non-zero error code upon return
-(@code{ENOSYS} if the system does not provide @code{lstat(2)}).
-
-Some non-GNU implementations of Fortran provide this intrinsic as
-only a function, not as a subroutine, or do not support the
-(optional) @var{@3@} argument.
-")
-
-DEFDOC (STAT_func, "Get file information.", "\
-Obtains data about the given file @var{@1@} and places them in the array
-@var{@2@}.
-A null character (@samp{CHAR(0)}) marks the end of
-the name in @var{@1@}---otherwise,
-trailing blanks in @var{@1@} are ignored.
-The values in this array are extracted from the
-@code{stat} structure as returned by @code{fstat(2)} q.v., as follows:
-
-@enumerate
-@item
-File mode
-
-@item
-Inode number
-
-@item
-ID of device containing directory entry for file
-
-@item
-Device id (if relevant)
-
-@item
-Number of links
-
-@item
-Owner's uid
-
-@item
-Owner's gid
-
-@item
-File size (bytes)
-
-@item
-Last access time
-
-@item
-Last modification time
-
-@item
-Last file status change time
-
-@item
-Preferred I/O block size
-
-@item
-Number of blocks allocated
-@end enumerate
-
-Not all these elements are relevant on all systems.
-If an element is not relevant, it is returned as 0.
-
-Returns 0 on success or a non-zero error code.
-")
-
-DEFDOC (STAT_subr, "Get file information.", "\
-Obtains data about the given file @var{@1@} and places them in the array
-@var{@2@}.
-A null character (@samp{CHAR(0)}) marks the end of
-the name in @var{@1@}---otherwise,
-trailing blanks in @var{@1@} are ignored.
-The values in this array are extracted from the
-@code{stat} structure as returned by @code{fstat(2)} q.v., as follows:
-
-@enumerate
-@item
-File mode
-
-@item
-Inode number
-
-@item
-ID of device containing directory entry for file
-
-@item
-Device id (if relevant)
-
-@item
-Number of links
-
-@item
-Owner's uid
-
-@item
-Owner's gid
-
-@item
-File size (bytes)
-
-@item
-Last access time
-
-@item
-Last modification time
-
-@item
-Last file status change time
-
-@item
-Preferred I/O block size
-
-@item
-Number of blocks allocated
-@end enumerate
-
-Not all these elements are relevant on all systems.
-If an element is not relevant, it is returned as 0.
-
-If the @var{@3@} argument is supplied, it contains
-0 on success or a non-zero error code upon return.
-
-Some non-GNU implementations of Fortran provide this intrinsic as
-only a function, not as a subroutine, or do not support the
-(optional) @var{@3@} argument.
-")
-
-DEFDOC (LINK_subr, "Make hard link in file system.", "\
-Makes a (hard) link from file @var{@1@} to @var{@2@}.
-A null character (@samp{CHAR(0)}) marks the end of
-the names in @var{@1@} and @var{@2@}---otherwise,
-trailing blanks in @var{@1@} and @var{@2@} are ignored.
-If the @var{@3@} argument is supplied, it contains
-0 on success or a non-zero error code upon return.
-See @code{link(2)}.
-
-Some non-GNU implementations of Fortran provide this intrinsic as
-only a function, not as a subroutine, or do not support the
-(optional) @var{@3@} argument.
-")
-
-DEFDOC (LINK_func, "Make hard link in file system.", "\
-Makes a (hard) link from file @var{@1@} to @var{@2@}.
-A null character (@samp{CHAR(0)}) marks the end of
-the names in @var{@1@} and @var{@2@}---otherwise,
-trailing blanks in @var{@1@} and @var{@2@} are ignored.
-Returns 0 on success or a non-zero error code.
-See @code{link(2)}.
-
-Due to the side effects performed by this intrinsic, the function
-form is not recommended.
-")
-
-DEFDOC (SYMLNK_subr, "Make symbolic link in file system.", "\
-Makes a symbolic link from file @var{@1@} to @var{@2@}.
-A null character (@samp{CHAR(0)}) marks the end of
-the names in @var{@1@} and @var{@2@}---otherwise,
-trailing blanks in @var{@1@} and @var{@2@} are ignored.
-If the @var{@3@} argument is supplied, it contains
-0 on success or a non-zero error code upon return
-(@code{ENOSYS} if the system does not provide @code{symlink(2)}).
-
-Some non-GNU implementations of Fortran provide this intrinsic as
-only a function, not as a subroutine, or do not support the
-(optional) @var{@3@} argument.
-")
-
-DEFDOC (SYMLNK_func, "Make symbolic link in file system.", "\
-Makes a symbolic link from file @var{@1@} to @var{@2@}.
-A null character (@samp{CHAR(0)}) marks the end of
-the names in @var{@1@} and @var{@2@}---otherwise,
-trailing blanks in @var{@1@} and @var{@2@} are ignored.
-Returns 0 on success or a non-zero error code
-(@code{ENOSYS} if the system does not provide @code{symlink(2)}).
-
-Due to the side effects performed by this intrinsic, the function
-form is not recommended.
-")
-
-DEFDOC (RENAME_subr, "Rename file.", "\
-Renames the file @var{@1@} to @var{@2@}.
-A null character (@samp{CHAR(0)}) marks the end of
-the names in @var{@1@} and @var{@2@}---otherwise,
-trailing blanks in @var{@1@} and @var{@2@} are ignored.
-See @code{rename(2)}.
-If the @var{@3@} argument is supplied, it contains
-0 on success or a non-zero error code upon return.
-
-Some non-GNU implementations of Fortran provide this intrinsic as
-only a function, not as a subroutine, or do not support the
-(optional) @var{@3@} argument.
-")
-
-DEFDOC (RENAME_func, "Rename file.", "\
-Renames the file @var{@1@} to @var{@2@}.
-A null character (@samp{CHAR(0)}) marks the end of
-the names in @var{@1@} and @var{@2@}---otherwise,
-trailing blanks in @var{@1@} and @var{@2@} are ignored.
-See @code{rename(2)}.
-Returns 0 on success or a non-zero error code.
-
-Due to the side effects performed by this intrinsic, the function
-form is not recommended.
-")
-
-DEFDOC (UMASK_subr, "Set file creation permissions mask.", "\
-Sets the file creation mask to @var{@1@} and returns the old value in
-argument @var{@2@} if it is supplied.
-See @code{umask(2)}.
-
-Some non-GNU implementations of Fortran provide this intrinsic as
-only a function, not as a subroutine.
-")
-
-DEFDOC (UMASK_func, "Set file creation permissions mask.", "\
-Sets the file creation mask to @var{@1@} and returns the old value.
-See @code{umask(2)}.
-
-Due to the side effects performed by this intrinsic, the function
-form is not recommended.
-")
-
-DEFDOC (UNLINK_subr, "Unlink file.", "\
-Unlink the file @var{@1@}.
-A null character (@samp{CHAR(0)}) marks the end of
-the name in @var{@1@}---otherwise,
-trailing blanks in @var{@1@} are ignored.
-If the @var{@2@} argument is supplied, it contains
-0 on success or a non-zero error code upon return.
-See @code{unlink(2)}.
-
-Some non-GNU implementations of Fortran provide this intrinsic as
-only a function, not as a subroutine, or do not support the
-(optional) @var{@2@} argument.
-")
-
-DEFDOC (UNLINK_func, "Unlink file.", "\
-Unlink the file @var{@1@}.
-A null character (@samp{CHAR(0)}) marks the end of
-the name in @var{@1@}---otherwise,
-trailing blanks in @var{@1@} are ignored.
-Returns 0 on success or a non-zero error code.
-See @code{unlink(2)}.
-
-Due to the side effects performed by this intrinsic, the function
-form is not recommended.
-")
-
-DEFDOC (GERROR, "Get error message for last error.", "\
-Returns the system error message corresponding to the last system
-error (C @code{errno}).
-")
-
-DEFDOC (IERRNO, "Get error number for last error.", "\
-Returns the last system error number (corresponding to the C
-@code{errno}).
-")
-
-DEFDOC (PERROR, "Print error message for last error.", "\
-Prints (on the C @code{stderr} stream) a newline-terminated error
-message corresponding to the last system error.
-This is prefixed by @var{@1@}, a colon and a space.
-See @code{perror(3)}.
-")
-
-DEFDOC (GETGID, "Get process group id.", "\
-Returns the group id for the current process.
-")
-
-DEFDOC (GETUID, "Get process user id.", "\
-Returns the user id for the current process.
-")
-
-DEFDOC (GETPID, "Get process id.", "\
-Returns the process id for the current process.
-")
-
-DEFDOC (GETENV, "Get environment variable.", "\
-Sets @var{@2@} to the value of environment variable given by the
-value of @var{@1@} (@code{$name} in shell terms) or to blanks if
-@code{$name} has not been set.
-A null character (@samp{CHAR(0)}) marks the end of
-the name in @var{@1@}---otherwise,
-trailing blanks in @var{@1@} are ignored.
-")
-
-DEFDOC (GETLOG, "Get login name.", "\
-Returns the login name for the process in @var{@1@}.
-")
-
-DEFDOC (HOSTNM_func, "Get host name.", "\
-Fills @var{@1@} with the system's host name returned by
-@code{gethostname(2)}, returning 0 on success or a non-zero error code
-(@code{ENOSYS} if the system does not provide @code{gethostname(2)}).
-
-This intrinsic is not available on all systems.
-")
-
-DEFDOC (HOSTNM_subr, "Get host name.", "\
-Fills @var{@1@} with the system's host name returned by
-@code{gethostname(2)}.
-If the @var{@2@} argument is supplied, it contains
-0 on success or a non-zero error code upon return
-(@code{ENOSYS} if the system does not provide @code{gethostname(2)}).
-
-This intrinsic is not available on all systems.
-
-Some non-GNU implementations of Fortran provide this intrinsic as
-only a function, not as a subroutine, or do not support the
-(optional) @var{@2@} argument.
-")
-
-/* Fixme: stream I/O */
-
-DEFDOC (FLUSH, "Flush buffered output.", "\
-Flushes Fortran unit(s) currently open for output.
-Without the optional argument, all such units are flushed,
-otherwise just the unit specified by @var{@1@}.
-
-Some non-GNU implementations of Fortran provide this intrinsic
-as a library procedure that might or might not support the
-(optional) @var{@1@} argument.
-")
-
-DEFDOC (FNUM, "Get file descriptor from Fortran unit number.", "\
-Returns the Unix file descriptor number corresponding to the open
-Fortran I/O unit @var{@1@}.
-This could be passed to an interface to C I/O routines.
-")
-
-#define IOWARN "
-Stream I/O should not be mixed with normal record-oriented (formatted or
-unformatted) I/O on the same unit; the results are unpredictable.
-"
-
-DEFDOC (FGET_func, "Read a character from unit 5 stream-wise.", "\
-Reads a single character into @var{@1@} in stream mode from unit 5
-(by-passing normal formatted input) using @code{getc(3)}.
-Returns 0 on
-success, @minus{}1 on end-of-file, and the error code from
-@code{ferror(3)} otherwise.
-" IOWARN)
-
-DEFDOC (FGET_subr, "Read a character from unit 5 stream-wise.", "\
-Reads a single character into @var{@1@} in stream mode from unit 5
-(by-passing normal formatted output) using @code{getc(3)}.
-Returns in
-@var{@2@} 0 on success, @minus{}1 on end-of-file, and the error code
-from @code{ferror(3)} otherwise.
-" IOWARN)
-
-DEFDOC (FGETC_func, "Read a character stream-wise.", "\
-Reads a single character into @var{@2@} in stream mode from unit @var{@1@}
-(by-passing normal formatted output) using @code{getc(3)}.
-Returns 0 on
-success, @minus{}1 on end-of-file, and the error code from
-@code{ferror(3)} otherwise.
-" IOWARN)
-
-DEFDOC (FGETC_subr, "Read a character stream-wise.", "\
-Reads a single character into @var{@2@} in stream mode from unit @var{@1@}
-(by-passing normal formatted output) using @code{getc(3)}.
-Returns in
-@var{@3@} 0 on success, @minus{}1 on end-of-file, and the error code from
-@code{ferror(3)} otherwise.
-" IOWARN)
-
-DEFDOC (FPUT_func, "Write a character to unit 6 stream-wise.", "\
-Writes the single character @var{@1@} in stream mode to unit 6
-(by-passing normal formatted output) using @code{getc(3)}.
-Returns 0 on
-success, the error code from @code{ferror(3)} otherwise.
-" IOWARN)
-
-DEFDOC (FPUT_subr, "Write a character to unit 6 stream-wise.", "\
-Writes the single character @var{@1@} in stream mode to unit 6
-(by-passing normal formatted output) using @code{putc(3)}.
-Returns in
-@var{@2@} 0 on success, the error code from @code{ferror(3)} otherwise.
-" IOWARN)
-
-DEFDOC (FPUTC_func, "Write a character stream-wise.", "\
-Writes the single character @var{@2@} in stream mode to unit @var{@1@}
-(by-passing normal formatted output) using @code{putc(3)}.
-Returns 0 on
-success, the error code from @code{ferror(3)} otherwise.
-" IOWARN)
-
-DEFDOC (FPUTC_subr, "Write a character stream-wise.", "\
-Writes the single character @var{@1@} in stream mode to unit 6
-(by-passing normal formatted output) using @code{putc(3)}.
-Returns in
-@var{@2@} 0 on success, the error code from @code{ferror(3)} otherwise.
-" IOWARN)
-
-DEFDOC (FSEEK, "Position file (low-level).", "\
-Attempts to move Fortran unit @var{@1@} to the specified
-@var{Offset}: absolute offset if @var{@2@}=0; relative to the
-current offset if @var{@2@}=1; relative to the end of the file if
-@var{@2@}=2.
-It branches to label @var{@3@} if @var{@1@} is
-not open or if the call otherwise fails.
-")
-
-DEFDOC (FTELL_func, "Get file position (low-level).", "\
-Returns the current offset of Fortran unit @var{@1@}
-(or @minus{}1 if @var{@1@} is not open).
-")
-
-DEFDOC (FTELL_subr, "Get file position (low-level).", "\
-Sets @var{@2@} to the current offset of Fortran unit @var{@1@}
-(or to @minus{}1 if @var{@1@} is not open).
-
-Some non-GNU implementations of Fortran provide this intrinsic as
-only a function, not as a subroutine.
-")
-
-DEFDOC (ISATTY, "Is unit connected to a terminal?", "\
-Returns @code{.TRUE.} if and only if the Fortran I/O unit
-specified by @var{@1@} is connected
-to a terminal device.
-See @code{isatty(3)}.
-")
-
-DEFDOC (TTYNAM_func, "Get name of terminal device for unit.", "\
-Returns the name of the terminal device open on logical unit
-@var{@1@} or a blank string if @var{@1@} is not connected to a
-terminal.
-")
-
-DEFDOC (TTYNAM_subr, "Get name of terminal device for unit.", "\
-Sets @var{@1@} to the name of the terminal device open on logical unit
-@var{@2@} or a blank string if @var{@2@} is not connected to a
-terminal.
-
-Some non-GNU implementations of Fortran provide this intrinsic as
-only a function, not as a subroutine.
-")
-
-DEFDOC (SIGNAL_subr, "Muck with signal handling.", "\
-If @var{@2@} is a an @code{EXTERNAL} routine, arranges for it to be
-invoked with a single integer argument (of system-dependent length)
-when signal @var{@1@} occurs.
-If @var{@1@} is an integer, it can be
-used to turn off handling of signal @var{@2@} or revert to its default
-action.
-See @code{signal(2)}.
-
-Note that @var{@2@} will be called using C conventions, so its value in
-Fortran terms is obtained by applying @code{%LOC()} (or @var{LOC()}) to it.
-
-The value returned by @code{signal(2)} is written to @var{@3@}, if
-that argument is supplied.
-Otherwise the return value is ignored.
-
-Some non-GNU implementations of Fortran provide this intrinsic as
-only a function, not as a subroutine, or do not support the
-(optional) @var{@3@} argument.
-")
-
-DEFDOC (SIGNAL_func, "Muck with signal handling.", "\
-If @var{@2@} is a an @code{EXTERNAL} routine, arranges for it to be
-invoked with a single integer argument (of system-dependent length)
-when signal @var{@1@} occurs.
-If @var{@1@} is an integer, it can be
-used to turn off handling of signal @var{@2@} or revert to its default
-action.
-See @code{signal(2)}.
-
-Note that @var{@2@} will be called using C conventions, so its value in
-Fortran terms is obtained by applying @code{%LOC()} (or @var{LOC()}) to it.
-
-The value returned by @code{signal(2)} is returned.
-
-Due to the side effects performed by this intrinsic, the function
-form is not recommended.
-")
-
-DEFDOC (KILL_func, "Signal a process.", "\
-Sends the signal specified by @var{@2@} to the process @var{@1@}.
-Returns 0 on success or a non-zero error code.
-See @code{kill(2)}.
-
-Due to the side effects performed by this intrinsic, the function
-form is not recommended.
-")
-
-DEFDOC (KILL_subr, "Signal a process.", "\
-Sends the signal specified by @var{@2@} to the process @var{@1@}.
-If the @var{@3@} argument is supplied, it contains
-0 on success or a non-zero error code upon return.
-See @code{kill(2)}.
-
-Some non-GNU implementations of Fortran provide this intrinsic as
-only a function, not as a subroutine, or do not support the
-(optional) @var{@3@} argument.
-")
-
-DEFDOC (LNBLNK, "Get last non-blank character in string.", "\
-Returns the index of the last non-blank character in @var{@1@}.
-@code{LNBLNK} and @code{LEN_TRIM} are equivalent.
-")
-
-DEFDOC (SLEEP, "Sleep for a specified time.", "\
-Causes the process to pause for @var{@1@} seconds.
-See @code{sleep(2)}.
-")
-
-DEFDOC (SYSTEM_subr, "Invoke shell (system) command.", "\
-Passes the command @var{@1@} to a shell (see @code{system(3)}).
-If argument @var{@2@} is present, it contains the value returned by
-@code{system(3)}, presumably 0 if the shell command succeeded.
-Note that which shell is used to invoke the command is system-dependent
-and environment-dependent.
-
-Some non-GNU implementations of Fortran provide this intrinsic as
-only a function, not as a subroutine, or do not support the
-(optional) @var{@2@} argument.
-")
-
-DEFDOC (SYSTEM_func, "Invoke shell (system) command.", "\
-Passes the command @var{@1@} to a shell (see @code{system(3)}).
-Returns the value returned by
-@code{system(3)}, presumably 0 if the shell command succeeded.
-Note that which shell is used to invoke the command is system-dependent
-and environment-dependent.
-
-Due to the side effects performed by this intrinsic, the function
-form is not recommended.
-However, the function form can be valid in cases where the
-actual side effects performed by the call are unimportant to
-the application.
-
-For example, on a UNIX system, @samp{SAME = SYSTEM('cmp a b')}
-does not perform any side effects likely to be important to the
-program, so the programmer would not care if the actual system
-call (and invocation of @code{cmp}) was optimized away in a situation
-where the return value could be determined otherwise, or was not
-actually needed (@samp{SAME} not actually referenced after the
-sample assignment statement).
-")
-
-DEFDOC (TIME_vxt, "Get the time as a character value.", "\
-Returns in @var{@1@} a character representation of the current time as
-obtained from @code{ctime(3)}.
-
-@xref{Fdate Intrinsic (subroutine)} for an equivalent routine.
-")
-
-DEFDOC (IBCLR, "Clear a bit.", "\
-Returns the value of @var{@1@} with bit @var{@2@} cleared (set to
-zero).
-@xref{BTest Intrinsic} for information on bit positions.
-")
-
-DEFDOC (IBSET, "Set a bit.", "\
-Returns the value of @var{@1@} with bit @var{@2@} set (to one).
-@xref{BTest Intrinsic} for information on bit positions.
-")
-
-DEFDOC (IBITS, "Extract a bit subfield of a variable.", "\
-Extracts a subfield of length @var{@3@} from @var{@1@}, starting from
-bit position @var{@2@} and extending left for @var{@3@} bits.
-The result is right-justified and the remaining bits are zeroed.
-The value
-of @samp{@var{@2@}+@var{@3@}} must be less than or equal to the value
-@samp{BIT_SIZE(@var{@1@})}.
-@xref{Bit_Size Intrinsic}.
-")
-
-DEFDOC (ISHFT, "Logical bit shift.", "\
-All bits representing @var{@1@} are shifted @var{@2@} places.
-@samp{@var{@2@}.GT.0} indicates a left shift, @samp{@var{@2@}.EQ.0}
-indicates no shift and @samp{@var{@2@}.LT.0} indicates a right shift.
-If the absolute value of the shift count is greater than
-@samp{BIT_SIZE(@var{@1@})}, the result is undefined.
-Bits shifted out from the left end or the right end, as the case may be,
-are lost.
-Zeros are shifted in from the opposite end.
-
-@xref{IShftC Intrinsic} for the circular-shift equivalent.
-")
-
-DEFDOC (ISHFTC, "Circular bit shift.", "\
-The rightmost @var{@3@} bits of the argument @var{@1@}
-are shifted circularly @var{@2@}
-places, i.e.@ the bits shifted out of one end are shifted into
-the opposite end.
-No bits are lost.
-The unshifted bits of the result are the same as
-the unshifted bits of @var{@1@}.
-The absolute value of the argument @var{@2@}
-must be less than or equal to @var{@3@}.
-The value of @var{@3@} must be greater than or equal to one and less than
-or equal to @samp{BIT_SIZE(@var{@1@})}.
-
-@xref{IShft Intrinsic} for the logical shift equivalent.
-")
-
-DEFDOC (MVBITS, "Moving a bit field.", "\
-Moves @var{@3@} bits from positions @var{@2@} through
-@samp{@var{@2@}+@var{@3@}-1} of @var{@1@} to positions @var{@5@} through
-@samp{@var{@2@}+@var{@3@}-1} of @var{@4@}. The portion of argument
-@var{@4@} not affected by the movement of bits is unchanged. Arguments
-@var{@1@} and @var{@4@} are permitted to be the same numeric storage
-unit. The values of @samp{@var{@2@}+@var{@3@}} and
-@samp{@var{@5@}+@var{@3@}} must be less than or equal to
-@samp{BIT_SIZE(@var{@1@})}.
-")
-
-DEFDOC (INDEX, "Locate a CHARACTER substring.", "\
-Returns the position of the start of the first occurrence of string
-@var{@2@} as a substring in @var{@1@}, counting from one.
-If @var{@2@} doesn't occur in @var{@1@}, zero is returned.
-")
-
diff --git a/gcc/f/intdoc.in b/gcc/f/intdoc.in
index eabb2e7e4e6..80046b730c2 100644
--- a/gcc/f/intdoc.in
+++ b/gcc/f/intdoc.in
@@ -2190,12 +2190,13 @@ DEFDOC (SIGNAL_subr, "Muck with signal handling.", "\
If @var{@2@} is a an @code{EXTERNAL} routine, arranges for it to be
invoked with a single integer argument (of system-dependent length)
when signal @var{@1@} occurs.
-If @var{@1@} is an integer, it can be
-used to turn off handling of signal @var{@2@} or revert to its default
+If @var{@2@} is an integer, it can be
+used to turn off handling of signal @var{@1@} or revert to its default
action.
See @code{signal(2)}.
-Note that @var{@2@} will be called using C conventions, so its value in
+Note that @var{@2@} will be called using C conventions,
+so the value of its argument in Fortran terms
Fortran terms is obtained by applying @code{%LOC()} (or @var{LOC()}) to it.
The value returned by @code{signal(2)} is written to @var{@3@}, if
@@ -2205,24 +2206,106 @@ Otherwise the return value is ignored.
Some non-GNU implementations of Fortran provide this intrinsic as
only a function, not as a subroutine, or do not support the
(optional) @var{@3@} argument.
+
+@emph{Warning:} Use of the @code{libf2c} run-time library function
+@samp{signal_} directly
+(such as via @samp{EXTERNAL SIGNAL})
+requires use of the @code{%VAL()} construct
+to pass an @code{INTEGER} value
+(such as @samp{SIG_IGN} or @samp{SIG_DFL})
+for the @var{@2@} argument.
+
+However, while @samp{CALL SIGNAL(@var{signum}, %VAL(SIG_IGN))}
+works when @samp{SIGNAL} is treated as an external procedure
+(and resolves, at link time, to @code{libf2c}'s @samp{signal_} routine),
+this construct is not valid when @samp{SIGNAL} is recognized
+as the intrinsic of that name.
+
+Therefore, for maximum portability and reliability,
+code such references to the @samp{SIGNAL} facility as follows:
+
+@smallexample
+INTRINSIC SIGNAL
+@dots{}
+CALL SIGNAL(@var{signum}, SIG_IGN)
+@end smallexample
+
+@code{g77} will compile such a call correctly,
+while other compilers will generally either do so as well
+or reject the @samp{INTRINSIC SIGNAL} statement via a diagnostic,
+allowing you to take appropriate action.
")
DEFDOC (SIGNAL_func, "Muck with signal handling.", "\
If @var{@2@} is a an @code{EXTERNAL} routine, arranges for it to be
invoked with a single integer argument (of system-dependent length)
when signal @var{@1@} occurs.
-If @var{@1@} is an integer, it can be
-used to turn off handling of signal @var{@2@} or revert to its default
+If @var{@2@} is an integer, it can be
+used to turn off handling of signal @var{@1@} or revert to its default
action.
See @code{signal(2)}.
-Note that @var{@2@} will be called using C conventions, so its value in
-Fortran terms is obtained by applying @code{%LOC()} (or @var{LOC()}) to it.
+Note that @var{@2@} will be called using C conventions,
+so the value of its argument in Fortran terms
+is obtained by applying @code{%LOC()} (or @var{LOC()}) to it.
The value returned by @code{signal(2)} is returned.
Due to the side effects performed by this intrinsic, the function
form is not recommended.
+
+@emph{Warning:} If the returned value is stored in
+an @code{INTEGER(KIND=1)} (default @code{INTEGER}) argument,
+truncation of the original return value occurs on some systems
+(such as Alphas, which have 64-bit pointers but 32-bit default integers),
+with no warning issued by @code{g77} under normal circumstances.
+
+Therefore, the following code fragment might silently fail on
+some systems:
+
+@smallexample
+INTEGER RTN
+EXTERNAL MYHNDL
+RTN = SIGNAL(@var{signum}, MYHNDL)
+@dots{}
+! Restore original handler:
+RTN = SIGNAL(@var{signum}, RTN)
+@end smallexample
+
+The reason for the failure is that @samp{RTN} might not hold
+all the information on the original handler for the signal,
+thus restoring an invalid handler.
+This bug could manifest itself as a spurious run-time failure
+at an arbitrary point later during the program's execution,
+for example.
+
+@emph{Warning:} Use of the @code{libf2c} run-time library function
+@samp{signal_} directly
+(such as via @samp{EXTERNAL SIGNAL})
+requires use of the @code{%VAL()} construct
+to pass an @code{INTEGER} value
+(such as @samp{SIG_IGN} or @samp{SIG_DFL})
+for the @var{@2@} argument.
+
+However, while @samp{RTN = SIGNAL(@var{signum}, %VAL(SIG_IGN))}
+works when @samp{SIGNAL} is treated as an external procedure
+(and resolves, at link time, to @code{libf2c}'s @samp{signal_} routine),
+this construct is not valid when @samp{SIGNAL} is recognized
+as the intrinsic of that name.
+
+Therefore, for maximum portability and reliability,
+code such references to the @samp{SIGNAL} facility as follows:
+
+@smallexample
+INTRINSIC SIGNAL
+@dots{}
+RTN = SIGNAL(@var{signum}, SIG_IGN)
+@end smallexample
+
+@code{g77} will compile such a call correctly,
+while other compilers will generally either do so as well
+or reject the @samp{INTRINSIC SIGNAL} statement via a diagnostic,
+allowing you to take appropriate action.
")
DEFDOC (KILL_func, "Signal a process.", "\
diff --git a/gcc/f/intdoc.texi b/gcc/f/intdoc.texi
index c0093d1912a..7db02afc9a3 100644
--- a/gcc/f/intdoc.texi
+++ b/gcc/f/intdoc.texi
@@ -6355,7 +6355,7 @@ Int2(@var{A})
Int2: @code{INTEGER(KIND=6)} function.
@noindent
-@var{A}: @code{INTEGER}; scalar; INTENT(IN).
+@var{A}: @code{INTEGER}, @code{REAL}, or @code{COMPLEX}; scalar; INTENT(IN).
@noindent
Intrinsic groups: @code{gnu}.
@@ -6390,7 +6390,7 @@ Int8(@var{A})
Int8: @code{INTEGER(KIND=2)} function.
@noindent
-@var{A}: @code{INTEGER}; scalar; INTENT(IN).
+@var{A}: @code{INTEGER}, @code{REAL}, or @code{COMPLEX}; scalar; INTENT(IN).
@noindent
Intrinsic groups: @code{gnu}.
@@ -7373,7 +7373,7 @@ Loc(@var{Entity})
@end example
@noindent
-Loc: @code{INTEGER(KIND=0)} function.
+Loc: @code{INTEGER(KIND=7)} function.
@noindent
@var{Entity}: Any type; cannot be a constant or expression.
@@ -9260,7 +9260,7 @@ CALL Signal(@var{Number}, @var{Handler}, @var{Status})
or dummy/global @code{INTEGER(KIND=1)} scalar.
@noindent
-@var{Status}: @code{INTEGER(KIND=1)}; OPTIONAL; scalar; INTENT(OUT).
+@var{Status}: @code{INTEGER(KIND=7)}; OPTIONAL; scalar; INTENT(OUT).
@noindent
Intrinsic groups: @code{unix}.
@@ -9271,12 +9271,13 @@ Description:
If @var{Handler} is a an @code{EXTERNAL} routine, arranges for it to be
invoked with a single integer argument (of system-dependent length)
when signal @var{Number} occurs.
-If @var{Number} is an integer, it can be
-used to turn off handling of signal @var{Handler} or revert to its default
+If @var{Handler} is an integer, it can be
+used to turn off handling of signal @var{Number} or revert to its default
action.
See @code{signal(2)}.
-Note that @var{Handler} will be called using C conventions, so its value in
+Note that @var{Handler} will be called using C conventions,
+so the value of its argument in Fortran terms
Fortran terms is obtained by applying @code{%LOC()} (or @var{LOC()}) to it.
The value returned by @code{signal(2)} is written to @var{Status}, if
@@ -9287,6 +9288,34 @@ Some non-GNU implementations of Fortran provide this intrinsic as
only a function, not as a subroutine, or do not support the
(optional) @var{Status} argument.
+@emph{Warning:} Use of the @code{libf2c} run-time library function
+@samp{signal_} directly
+(such as via @samp{EXTERNAL SIGNAL})
+requires use of the @code{%VAL()} construct
+to pass an @code{INTEGER} value
+(such as @samp{SIG_IGN} or @samp{SIG_DFL})
+for the @var{Handler} argument.
+
+However, while @samp{CALL SIGNAL(@var{signum}, %VAL(SIG_IGN))}
+works when @samp{SIGNAL} is treated as an external procedure
+(and resolves, at link time, to @code{libf2c}'s @samp{signal_} routine),
+this construct is not valid when @samp{SIGNAL} is recognized
+as the intrinsic of that name.
+
+Therefore, for maximum portability and reliability,
+code such references to the @samp{SIGNAL} facility as follows:
+
+@smallexample
+INTRINSIC SIGNAL
+@dots{}
+CALL SIGNAL(@var{signum}, SIG_IGN)
+@end smallexample
+
+@code{g77} will compile such a call correctly,
+while other compilers will generally either do so as well
+or reject the @samp{INTRINSIC SIGNAL} statement via a diagnostic,
+allowing you to take appropriate action.
+
For information on other intrinsics with the same name:
@xref{Signal Intrinsic (function)}.
@@ -9303,7 +9332,7 @@ Signal(@var{Number}, @var{Handler})
@end example
@noindent
-Signal: @code{INTEGER(KIND=1)} function.
+Signal: @code{INTEGER(KIND=7)} function.
@noindent
@var{Number}: @code{INTEGER}; scalar; INTENT(IN).
@@ -9321,19 +9350,73 @@ Description:
If @var{Handler} is a an @code{EXTERNAL} routine, arranges for it to be
invoked with a single integer argument (of system-dependent length)
when signal @var{Number} occurs.
-If @var{Number} is an integer, it can be
-used to turn off handling of signal @var{Handler} or revert to its default
+If @var{Handler} is an integer, it can be
+used to turn off handling of signal @var{Number} or revert to its default
action.
See @code{signal(2)}.
-Note that @var{Handler} will be called using C conventions, so its value in
-Fortran terms is obtained by applying @code{%LOC()} (or @var{LOC()}) to it.
+Note that @var{Handler} will be called using C conventions,
+so the value of its argument in Fortran terms
+is obtained by applying @code{%LOC()} (or @var{LOC()}) to it.
The value returned by @code{signal(2)} is returned.
Due to the side effects performed by this intrinsic, the function
form is not recommended.
+@emph{Warning:} If the returned value is stored in
+an @code{INTEGER(KIND=1)} (default @code{INTEGER}) argument,
+truncation of the original return value occurs on some systems
+(such as Alphas, which have 64-bit pointers but 32-bit default integers),
+with no warning issued by @code{g77} under normal circumstances.
+
+Therefore, the following code fragment might silently fail on
+some systems:
+
+@smallexample
+INTEGER RTN
+EXTERNAL MYHNDL
+RTN = SIGNAL(@var{signum}, MYHNDL)
+@dots{}
+! Restore original handler:
+RTN = SIGNAL(@var{signum}, RTN)
+@end smallexample
+
+The reason for the failure is that @samp{RTN} might not hold
+all the information on the original handler for the signal,
+thus restoring an invalid handler.
+This bug could manifest itself as a spurious run-time failure
+at an arbitrary point later during the program's execution,
+for example.
+
+@emph{Warning:} Use of the @code{libf2c} run-time library function
+@samp{signal_} directly
+(such as via @samp{EXTERNAL SIGNAL})
+requires use of the @code{%VAL()} construct
+to pass an @code{INTEGER} value
+(such as @samp{SIG_IGN} or @samp{SIG_DFL})
+for the @var{Handler} argument.
+
+However, while @samp{RTN = SIGNAL(@var{signum}, %VAL(SIG_IGN))}
+works when @samp{SIGNAL} is treated as an external procedure
+(and resolves, at link time, to @code{libf2c}'s @samp{signal_} routine),
+this construct is not valid when @samp{SIGNAL} is recognized
+as the intrinsic of that name.
+
+Therefore, for maximum portability and reliability,
+code such references to the @samp{SIGNAL} facility as follows:
+
+@smallexample
+INTRINSIC SIGNAL
+@dots{}
+RTN = SIGNAL(@var{signum}, SIG_IGN)
+@end smallexample
+
+@code{g77} will compile such a call correctly,
+while other compilers will generally either do so as well
+or reject the @samp{INTRINSIC SIGNAL} statement via a diagnostic,
+allowing you to take appropriate action.
+
For information on other intrinsics with the same name:
@xref{Signal Intrinsic (subroutine)}.
diff --git a/gcc/f/intrin.c b/gcc/f/intrin.c
index 16f36fbdb3c..0b699b75e96 100644
--- a/gcc/f/intrin.c
+++ b/gcc/f/intrin.c
@@ -398,6 +398,10 @@ ffeintrin_check_ (ffeintrinImp imp, ffebldOp op,
case 6:
akt = 3;
break;
+
+ case 7:
+ akt = ffecom_pointer_kind ();
+ break;
}
}
okay &= anynum || (ffeinfo_kindtype (i) == akt);
@@ -519,11 +523,6 @@ ffeintrin_check_ (ffeintrinImp imp, ffebldOp op,
} while (TRUE);
}
- /* Ignore explicit trailing omitted args. */
-
- while ((arg != NULL) && (ffebld_head (arg) == NULL))
- arg = ffebld_trail (arg);
-
if (arg != NULL)
return FFEBAD_INTRINSIC_TOOMANY;
@@ -593,6 +592,10 @@ ffeintrin_check_ (ffeintrinImp imp, ffebldOp op,
case 6:
kt = 3;
break;
+
+ case 7:
+ kt = ffecom_pointer_kind ();
+ break;
}
}
break;
@@ -603,10 +606,6 @@ ffeintrin_check_ (ffeintrinImp imp, ffebldOp op,
kt = 1;
break;
- case 'p':
- kt = ffecom_pointer_kind ();
- break;
-
case '=':
need_col = TRUE;
/* Fall through. */
@@ -991,6 +990,10 @@ ffeintrin_check_ (ffeintrinImp imp, ffebldOp op,
case 6:
akt = 3;
break;
+
+ case 7:
+ akt = ffecom_pointer_kind ();
+ break;
}
}
okay &= anynum || (ffeinfo_kindtype (i) == akt);
@@ -1363,7 +1366,8 @@ ffeintrin_fulfill_generic (ffebld *expr, ffeinfo *info, ffelexToken t)
if ((ffesymbol_attrs (ffebld_symter (symter)) & FFESYMBOL_attrsTYPE)
&& (((bt != ffesymbol_basictype (ffebld_symter (symter)))
|| (kt != ffesymbol_kindtype (ffebld_symter (symter)))
- || (sz != ffesymbol_size (ffebld_symter (symter))))))
+ || ((sz != FFETARGET_charactersizeNONE)
+ && (sz != ffesymbol_size (ffebld_symter (symter)))))))
{
ffebad_start (FFEBAD_INTRINSIC_TYPE);
ffebad_here (0, ffelex_token_where_line (t),
@@ -1569,14 +1573,14 @@ ffeintrin_init_0 ()
if ((c[0] != '-')
&& (c[0] != 'A')
- && (c[0] != 'C')
- && (c[0] != 'I')
- && (c[0] != 'L')
- && (c[0] != 'R')
- && (c[0] != 'B')
- && (c[0] != 'F')
- && (c[0] != 'N')
- && (c[0] != 'S'))
+ && (c[0] != 'C')
+ && (c[0] != 'I')
+ && (c[0] != 'L')
+ && (c[0] != 'R')
+ && (c[0] != 'B')
+ && (c[0] != 'F')
+ && (c[0] != 'N')
+ && (c[0] != 'S'))
{
fprintf (stderr, "%s: bad return-base-type\n",
ffeintrin_imps_[i].name);
@@ -1584,10 +1588,9 @@ ffeintrin_init_0 ()
}
if ((c[1] != '-')
&& (c[1] != '=')
- && ((c[1] < '1')
- || (c[1] > '9'))
- && (c[1] != 'C')
- && (c[1] != 'p'))
+ && ((c[1] < '1')
+ || (c[1] > '9'))
+ && (c[1] != 'C'))
{
fprintf (stderr, "%s: bad return-kind-type\n",
ffeintrin_imps_[i].name);
@@ -1613,8 +1616,8 @@ ffeintrin_init_0 ()
}
if ((c[colon + 1] != '-')
&& (c[colon + 1] != '*')
- && ((c[colon + 1] < '0')
- || (c[colon + 1] > '9')))
+ && ((c[colon + 1] < '0')
+ || (c[colon + 1] > '9')))
{
fprintf (stderr, "%s: bad COL-spec\n",
ffeintrin_imps_[i].name);
@@ -1625,7 +1628,7 @@ ffeintrin_init_0 ()
{
while ((c[0] != '=')
&& (c[0] != ',')
- && (c[0] != '\0'))
+ && (c[0] != '\0'))
++c;
if (c[0] != '=')
{
@@ -1635,28 +1638,27 @@ ffeintrin_init_0 ()
}
if ((c[1] == '?')
|| (c[1] == '!')
- || (c[1] == '!')
|| (c[1] == '+')
- || (c[1] == '*')
+ || (c[1] == '*')
|| (c[1] == 'n')
- || (c[1] == 'p'))
+ || (c[1] == 'p'))
++c;
if (((c[1] != '-')
&& (c[1] != 'A')
- && (c[1] != 'C')
- && (c[1] != 'I')
- && (c[1] != 'L')
- && (c[1] != 'R')
- && (c[1] != 'B')
- && (c[1] != 'F')
- && (c[1] != 'N')
- && (c[1] != 'S')
- && (c[1] != 'g')
- && (c[1] != 's'))
+ && (c[1] != 'C')
+ && (c[1] != 'I')
+ && (c[1] != 'L')
+ && (c[1] != 'R')
+ && (c[1] != 'B')
+ && (c[1] != 'F')
+ && (c[1] != 'N')
+ && (c[1] != 'S')
+ && (c[1] != 'g')
+ && (c[1] != 's'))
|| ((c[2] != '*')
&& ((c[2] < '1')
|| (c[2] > '9'))
- && (c[2] != 'A')))
+ && (c[2] != 'A')))
{
fprintf (stderr, "%s: bad arg-type\n",
ffeintrin_imps_[i].name);
@@ -1693,13 +1695,13 @@ ffeintrin_init_0 ()
++c;
if ((c[3] == '&')
|| (c[3] == 'i')
- || (c[3] == 'w')
- || (c[3] == 'x'))
+ || (c[3] == 'w')
+ || (c[3] == 'x'))
++c;
if (c[3] == ',')
{
c += 4;
- break;
+ continue;
}
if (c[3] != '\0')
{
diff --git a/gcc/f/intrin.def b/gcc/f/intrin.def
index 66ca3c0a215..c4105c96dfa 100644
--- a/gcc/f/intrin.def
+++ b/gcc/f/intrin.def
@@ -25,7 +25,7 @@ DEFNAME ("AIMIN0", "aimin0", "AIMin0", genNONE, specAIMIN0) /* VXT */
DEFNAME ("AINT", "aint", "AInt", genNONE, specAINT)
DEFNAME ("AJMAX0", "ajmax0", "AJMax0", genNONE, specAJMAX0) /* VXT */
DEFNAME ("AJMIN0", "ajmin0", "AJMin0", genNONE, specAJMIN0) /* VXT */
-DEFNAME ("ALARM", "alarm", "Alarm", genNONE, specALARM) /* UNIX */
+DEFNAME ("ALARM", "alarm", "Alarm", genNONE, specALARM) /* UNIX */
DEFNAME ("ALL", "all", "All", genNONE, specALL) /* F90 */
DEFNAME ("ALLOCATED", "allocated", "Allocated", genNONE, specALLOCATED) /* F90 */
DEFNAME ("ALOG", "alog", "ALog", genNONE, specALOG)
@@ -76,7 +76,7 @@ DEFNAME ("COS", "cos", "Cos", genNONE, specCOS)
DEFNAME ("COSD", "cosd", "CosD", genNONE, specCOSD) /* VXT */
DEFNAME ("COSH", "cosh", "CosH", genNONE, specCOSH)
DEFNAME ("COUNT", "count", "Count", genNONE, specCOUNT) /* F90 */
-DEFNAME ("CPU_TIME", "cpu_time", "Cpu_Time", genNONE, specCPU_TIME) /* F95 */
+DEFNAME ("CPU_TIME", "cpu_time", "Cpu_Time", genNONE, specCPU_TIME) /* F95 */
DEFNAME ("CSHIFT", "cshift", "CShift", genNONE, specCSHIFT) /* F90 */
DEFNAME ("CSIN", "csin", "CSin", genNONE, specCSIN)
DEFNAME ("CSQRT", "csqrt", "CSqRt", genNONE, specCSQRT)
@@ -3038,8 +3038,8 @@ DEFSPEC (NONE,
3 (Same size as CHARACTER*1)
4 (Twice the size of 2)
6 (Twice the size as 3)
+ 7 (Same size as `char *')
C Like 1 (F77), except (F90), if COL is COMPLEX, uses kind type of COL
- p ffecom_pointer_kind_
<return-modifier> is:
@@ -3229,7 +3229,7 @@ DEFIMP (CHDIR_subr, "CHDIR_subr", CHDIR,,, "--:-:Dir=A1,Status=?I1w")
DEFIMP (CHMOD_func, "CHMOD_func", CHMOD,,, "I1:-:Name=A1,Mode=A1")
DEFIMP (CHMOD_subr, "CHMOD_subr", CHMOD,,, "--:-:Name=A1,Mode=A1,Status=?I1w")
DEFIMP (COMPLEX, "COMPLEX", ,,, "C=:*:Real=S*,Imag=S*")
-DEFIMP (CPU_TIME, "CPU_TIME", ,,, "--:-:Seconds=R1w")
+DEFIMP (CPU_TIME, "CPU_TIME", SECOND,,, "--:-:Seconds=R1w")
DEFIMP (CTIME_func, "CTIME_func", CTIME,,, "A1*:-:STime=I*")
DEFIMP (CTIME_subr, "CTIME_subr", CTIME,,, "--:-:Result=A1w,STime=I*")
DEFIMP (DATE, "DATE", DATE,,, "--:-:Date=A1w")
@@ -3293,8 +3293,8 @@ DEFIMP (IEOR, "IEOR", ,,, "I=:*:I=I*,J=I*")
DEFIMP (IOR, "IOR", ,,, "I=:*:I=I*,J=I*")
DEFIMP (IERRNO, "IERRNO", IERRNO,,, "I1:-:")
DEFIMP (IMAGPART, "IMAGPART", ,,, "R=:0:Z=C*")
-DEFIMP (INT2, "INT2", ,,, "I6:-:A=I*")
-DEFIMP (INT8, "INT8", ,,, "I2:-:A=I*")
+DEFIMP (INT2, "INT2", ,,, "I6:-:A=N*")
+DEFIMP (INT8, "INT8", ,,, "I2:-:A=N*")
DEFIMP (IRAND, "IRAND", IRAND,,, "I1:-:Flag=?I*")
DEFIMP (ISATTY, "ISATTY", ISATTY,,, "L1:-:Unit=I*")
DEFIMP (ISHFT, "ISHFT", ,,, "I=:0:I=I*,Shift=I*")
@@ -3309,7 +3309,7 @@ DEFIMP (LONG, "LONG", ,,, "I1:-:A=I6")
DEFIMP (LSTAT_func, "LSTAT_func", LSTAT,,, "I1:-:File=A1,SArray=I1(13)w")
DEFIMP (LSTAT_subr, "LSTAT_subr", LSTAT,,, "--:-:File=A1,SArray=I1(13)w,Status=?I1w")
DEFIMP (LTIME, "LTIME", LTIME,,, "--:-:STime=I1,TArray=I1(9)w")
-DEFIMP (LOC, "LOC", ,,, "Ip:-:Entity=-*&&")
+DEFIMP (LOC, "LOC", ,,, "I7:-:Entity=-*&&")
DEFIMP (LSHIFT, "LSHIFT", ,,, "I=:0:I=I*,Shift=I*")
DEFIMP (MCLOCK, "MCLOCK", MCLOCK,,, "I1:-:")
DEFIMP (MCLOCK8, "MCLOCK8", MCLOCK,,, "I2:-:")
@@ -3326,8 +3326,8 @@ DEFIMP (SECNDS, "SECNDS", SECNDS,,, "R1:-:T=R1")
DEFIMP (SECOND_func, "SECOND_func", SECOND,SECOND,, "R1:-:")
DEFIMP (SECOND_subr, "SECOND_subr", SECOND,,, "--:-:Seconds=R1w")
DEFIMP (SHORT, "SHORT", ,,, "I6:-:A=I*")
-DEFIMP (SIGNAL_func, "SIGNAL_func", L_SIGNAL,,, "I1:-:Number=I*,Handler=s*")
-DEFIMP (SIGNAL_subr, "SIGNAL_subr", L_SIGNAL,,, "--:-:Number=I*,Handler=s*,Status=?I1w")
+DEFIMP (SIGNAL_func, "SIGNAL_func", L_SIGNAL,,, "I7:-:Number=I*,Handler=s*")
+DEFIMP (SIGNAL_subr, "SIGNAL_subr", L_SIGNAL,,, "--:-:Number=I*,Handler=s*,Status=?I7w")
DEFIMP (SLEEP, "SLEEP", SLEEP,,, "--:-:Seconds=I1")
DEFIMP (SRAND, "SRAND", SRAND,,, "--:-:Seed=I*")
DEFIMP (STAT_func, "STAT_func", STAT,,, "I1:-:File=A1,SArray=I1(13)w")
diff --git a/gcc/f/lang-options.h b/gcc/f/lang-options.h
index a0e5c80596d..7b031dcc57a 100644
--- a/gcc/f/lang-options.h
+++ b/gcc/f/lang-options.h
@@ -1,5 +1,5 @@
/* lang-options.h file for Fortran
- Copyright (C) 1995-1997 Free Software Foundation, Inc.
+ Copyright (C) 1995-1998 Free Software Foundation, Inc.
Contributed by James Craig Burley (burley@gnu.ai.mit.edu).
This file is part of GNU Fortran.
@@ -111,6 +111,14 @@ the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
"-ff2c-intrinsics-hide",
"-ff2c-intrinsics-disable",
"-ff2c-intrinsics-enable",
+ "-fgnu-intrinsics-delete",
+ "-fgnu-intrinsics-hide",
+ "-fgnu-intrinsics-disable",
+ "-fgnu-intrinsics-enable",
+ "-fbadu77-intrinsics-delete",
+ "-fbadu77-intrinsics-hide",
+ "-fbadu77-intrinsics-disable",
+ "-fbadu77-intrinsics-enable",
"-ff90-intrinsics-delete",
"-ff90-intrinsics-hide",
"-ff90-intrinsics-disable",
diff --git a/gcc/f/lang-specs.h b/gcc/f/lang-specs.h
index 016f59ce197..c9419c33e20 100644
--- a/gcc/f/lang-specs.h
+++ b/gcc/f/lang-specs.h
@@ -33,8 +33,8 @@ the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
#define OO ".o"
#endif
- {".F", "@f77-cpp-input"},
- {".fpp", "@f77-cpp-input"},
+ {".F", {"@f77-cpp-input"}},
+ {".fpp", {"@f77-cpp-input"}},
{"@f77-cpp-input",
/* For f77 we want -traditional to avoid errors with, for
instance, mismatched '. Also, we avoid unpleasant surprises
@@ -43,16 +43,16 @@ the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
Sun f77, at least) so you test `__unix' rather than `unix'.
-D_LANGUAGE_FORTRAN is used by some compilers like SGI and
might as well be in there. */
- "cpp -lang-c %{nostdinc*} %{C} %{v} %{A*} %{I*} %{P} %I\
+ {"cpp -lang-c %{nostdinc*} %{C} %{v} %{A*} %{I*} %{P} %I\
%{C:%{!E:%eGNU C does not support -C without using -E}}\
%{M} %{MM} %{MD:-MD %b.d} %{MMD:-MMD %b.d} %{MG}\
-undef -D__GNUC__=%v1 -D__GNUC_MINOR__=%v2\
%{ansi:-trigraphs -$ -D__STRICT_ANSI__}\
%{!undef:%P} -D_LANGUAGE_FORTRAN %{trigraphs} \
- %c %{O*:%{!O0:-D__OPTIMIZE__}} -traditional\
+ %c %{Os:-D__OPTIMIZE_SIZE__} %{O*:%{!O0:-D__OPTIMIZE__}} -traditional\
%{g*} %{W*} %{w} %{pedantic*} %{H} %{d*} %C %{D*} %{U*} %{i*} %Z\
%i %{!M:%{!MM:%{!E:%{!pipe:%g.i}}}}%{E:%W{o*}}%{M:%W{o*}}%{MM:%W{o*}} |\n",
- "%{!M:%{!MM:%{!E:f771 %{!pipe:%g.i} -fset-g77-defaults %(f771) \
+ "%{!M:%{!MM:%{!E:f771 %{!pipe:%g.i} -fset-g77-defaults %(f771) \
%{!Q:-quiet} -dumpbase %b.F %{d*} %{m*} %{a}\
%{g*} %{O*} %{W*} %{w} %{pedantic*} \
%{v:-version -fversion} %{pg:-p} %{p} %{f*} %{I*}\
@@ -61,13 +61,13 @@ the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
%{S:%W{o*}%{!o*:-o %b.s}}%{!S:-o %{|!pipe:%g.s}} |\n\
%{!S:as %a %Y\
%{c:%W{o*}%{!o*:-o %w%b" OO "}}%{!c:-o %d%w%u" OO "}\
- %{!pipe:%g.s} %A\n }}}}"},
- {".r", "@ratfor"},
+ %{!pipe:%g.s} %A\n }}}}"}},
+ {".r", {"@ratfor"}},
{"@ratfor",
- "ratfor %{C} %{v}\
+ {"ratfor %{C} %{v}\
%{C:%{!E:%eGNU C does not support -C without using -E}}\
%{!E:%{!pipe:-o %g.f}}%{E:%W{o*}} %i |\n",
- "%{!E:f771 %{!pipe:%g.f} -fset-g77-defaults %(f771) \
+ "%{!E:f771 %{!pipe:%g.f} -fset-g77-defaults %(f771) \
%{!Q:-quiet} -dumpbase %b.r %{d*} %{m*} %{a}\
%{g*} %{O*} %{W*} %{w} %{pedantic*} \
%{v:-version -fversion} %{pg:-p} %{p} %{f*} %{I*}\
@@ -76,11 +76,11 @@ the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
%{S:%W{o*}%{!o*:-o %b.s}}%{!S:-o %{|!pipe:%g.s}} |\n\
%{!S:as %a %Y\
%{c:%W{o*}%{!o*:-o %w%b" OO "}}%{!c:-o %d%w%u" OO "}\
- %{!pipe:%g.s} %A\n }}"},
- {".f", "@f77"},
- {".for", "@f77"},
+ %{!pipe:%g.s} %A\n }}"}},
+ {".f", {"@f77"}},
+ {".for", {"@f77"}},
{"@f77",
- "%{!M:%{!MM:%{!E:f771 %i -fset-g77-defaults %(f771) \
+ {"%{!M:%{!MM:%{!E:f771 %i -fset-g77-defaults %(f771) \
%{!Q:-quiet} -dumpbase %b.f %{d*} %{m*} %{a}\
%{g*} %{O*} %{W*} %{w} %{pedantic*}\
%{v:-version -fversion} %{pg:-p} %{p} %{f*} %{I*}\
@@ -89,7 +89,7 @@ the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
%{S:%W{o*}%{!o*:-o %b.s}}%{!S:-o %{|!pipe:%g.s}} |\n\
%{!S:as %a %Y\
%{c:%W{o*}%{!o*:-o %w%b" OO "}}%{!c:-o %d%w%u" OO "}\
- %{!pipe:%g.s} %A\n }}}}"},
+ %{!pipe:%g.s} %A\n }}}}"}},
#undef OO
diff --git a/gcc/f/lex.c b/gcc/f/lex.c
index acb439157af..dbf79dd4b06 100644
--- a/gcc/f/lex.c
+++ b/gcc/f/lex.c
@@ -230,7 +230,7 @@ ffelex_append_to_token_ (char c)
}
#ifdef MAP_CHARACTER
Sorry, MAP_CHARACTER is not going to work as expected in GNU Fortran,
-please contact fortran@gnu.ai.mit.edu if you wish to fund work to
+please contact fortran@gnu.org if you wish to fund work to
port g77 to non-ASCII machines.
#endif
ffelex_token_->text[ffelex_token_->length++] = c;
diff --git a/gcc/f/malloc.c b/gcc/f/malloc.c
index 1cbaf0399ca..4a553e92084 100644
--- a/gcc/f/malloc.c
+++ b/gcc/f/malloc.c
@@ -51,7 +51,7 @@ struct _malloc_root_ malloc_root_
(mallocArea_) &malloc_root_.malloc_pool_image_.first,
0,
#if MALLOC_DEBUG
- 0, 0, 0, 0, 0, 0, 0, '/'
+ 0, 0, 0, 0, 0, 0, 0, { '/' }
#endif
},
};
diff --git a/gcc/f/news.texi b/gcc/f/news.texi
index b9f01423eac..2853dfd13d1 100644
--- a/gcc/f/news.texi
+++ b/gcc/f/news.texi
@@ -5,7 +5,7 @@
@c The text of this file appears in the file BUGS
@c in the G77 distribution, as well as in the G77 manual.
-@c 1997-09-09
+@c 1997-10-10
@ifclear NEWSONLY
@node News
@@ -24,6 +24,85 @@ diagnostics, internal improvements, and miscellany.
This order is not strict---for example, some items
involve a combination of these elements.
+@heading In 0.5.22:
+@itemize @bullet
+@item
+Fix a compiler crash on statements such as
+@samp{PRINT *, (REAL(Z(I)),I=1,2)}, where
+@samp{Z} is @code{DOUBLE COMPLEX}.
+
+@item
+Improve diagnostic messages from @code{libf2c}
+so it is more likely that the printing of the
+active format string is limited to the string,
+with no trailing garbage being printed.
+
+(Unlike @code{f2c}, @code{g77} does not append
+a null byte to its compiled form of every
+format string specified via a @code{FORMAT} statement.
+However, @code{f2c} would exhibit the problem
+anyway for a statement like @samp{PRINT '(I)garbage', 1}
+by printing @samp{(I)garbage} as the format string.)
+
+@item
+Improve compilation of FORMAT expressions so that
+a null byte is appended to the last operand if it
+is a constant.
+This provides a cleaner run-time diagnostic as provided
+by @code{libf2c} for statements like @samp{PRINT '(I1', 42}.
+
+@item
+Fix @code{SIGNAL} intrinsic so it offers portable
+support for 64-bit systems (such as Digital Alphas
+running GNU/Linux).
+
+@item
+Support @samp{FORMAT(I<@var{expr}>)} when @var{expr} is a
+compile-time constant @code{INTEGER} expression.
+
+@item
+Fix code generation for iterative @code{DO} loops that
+have one or more references to the iteration variable,
+or to aliases of it, in their control expressions.
+For example, @samp{DO 10 J=2,J} now is compiled correctly.
+
+@item
+Fix a compiler crash involving optimization of
+certain complicated expressions involving @code{COMPLEX}
+arithmetic (especially multiplication).
+
+@item
+Fix an internal error compiling the @code{Cpu_Time} intrinsic.
+
+@item
+Rename the @code{gcc} keyword @code{restrict} to
+@code{__restrict__}, to avoid rejecting valid, existing,
+C programs.
+Support for @code{restrict} is now more like support
+for @code{complex}.
+
+@item
+Fix @code{DTime} intrinsic so as not to truncate
+results to integer values (on some systems) and allow general numeric
+args for the @code{Int2} and @code{Int8} intrinsics.
+
+@item
+Improve diagnostic messages from @code{libf2c}
+so it is more likely that the printing of the
+active format string is limited to the string,
+with no trailing garbage being printed.
+
+(Unlike @code{f2c}, @code{g77} does not append
+a null byte to its compiled form of every
+format string specified via a @code{FORMAT} statement.
+However, @code{f2c} would exhibit the problem
+anyway for a statement like @samp{PRINT '(I)garbage', 1}
+by printing @samp{(I)garbage} as the format string.)
+
+@item
+Upgrade to @code{libf2c} as of 1997-09-23.
+@end itemize
+
@heading In 0.5.21:
@itemize @bullet
@item
diff --git a/gcc/f/parse.c b/gcc/f/parse.c
index 7a48fbb58f5..62b98f31930 100644
--- a/gcc/f/parse.c
+++ b/gcc/f/parse.c
@@ -25,7 +25,7 @@ the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
#include "top.h"
#include "com.h"
#include "where.h"
-#include "zzz.h"
+#include "version.h"
#if FFECOM_targetCURRENT == FFECOM_targetGCC
#include "flags.j"
#endif
@@ -47,10 +47,7 @@ yyparse ()
ffewhereFile wf;
if (ffe_is_version ())
- fprintf (stderr, "GNU Fortran Front End version %s compiled: %s %s\n",
- ffezzz_version_string,
- ffezzz_date,
- ffezzz_time);
+ fprintf (stderr, "GNU Fortran Front End version %s\n", ffe_version_string);
#if FFECOM_targetCURRENT == FFECOM_targetFFE
ffe_init_0 ();
diff --git a/gcc/f/proj.c b/gcc/f/proj.c
index 0e1ef2e8bcd..78fcc45927b 100644
--- a/gcc/f/proj.c
+++ b/gcc/f/proj.c
@@ -23,7 +23,7 @@ the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
#include <ctype.h>
#include "glimits.j"
-#if !FFEPROJ_STRTOUL
+#ifndef HAVE_STRTOUL
unsigned long int
strtoul (const char *nptr, char **endptr, int base)
{
@@ -43,10 +43,9 @@ strtoul (const char *nptr, char **endptr, int base)
return number;
}
-
#endif
-#if !FFEPROJ_BSEARCH
+#ifndef HAVE_BSEARCH
void *
bsearch (const void *key, const void *base, size_t nmemb, size_t size,
int (*compar) (const void *, const void *))
@@ -67,5 +66,4 @@ bsearch (const void *key, const void *base, size_t nmemb, size_t size,
return NULL;
}
-
#endif
diff --git a/gcc/f/proj.h b/gcc/f/proj.h
index b84cff6aa64..d05b1c32b8d 100644
--- a/gcc/f/proj.h
+++ b/gcc/f/proj.h
@@ -43,29 +43,14 @@ the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
simply remove all but the simplest and most useful code (which is
still in proj.c).
- So, if you find your system can't link because bsearch() or strtoul()
- aren't found, please just fix your system, or hand-edit the code
- below as appropriate. I DO NOT WANT ANY "BUG REPORTS" ABOUT THIS.
- g77 requires a working ANSI C environment, and if bsearch() and strtoul()
- do not exist, or if <assert.h> isn't found, etc., then you don't have
- one, and it is not g77's fault. If it turns out g77 is simply
- referring to the wrong system header file -- something I can verify
- myself using my copy of the ANSI C standard -- I would like to know
- about that. Otherwise, g77 is not the place to fix problems with your
- ANSI C implementation, though perhaps gcc might be.
- -- burley@gnu.ai.mit.edu 1995-03-24 */
-
-#ifndef FFEPROJ_BSEARCH
-#define FFEPROJ_BSEARCH 1 /* 0=>use slow code in proj.c. */
-#endif
-#ifndef FFEPROJ_STRTOUL
-#define FFEPROJ_STRTOUL 1 /* 0=>use untested code in proj.c. */
-#endif
+ XXX Not entirely true anymore. We do want to cater to broken systems
+ again by using autoconf to handle the braindamage for us. */
/* Include files everyone gets. */
#include "config.j" /* Must come before any other #includes in gcc. */
#include "assert.j" /* Use gcc's assert.h. */
+#include <ctype.h>
#include <stdio.h>
#include <stddef.h>
#include <stdlib.h>
@@ -100,4 +85,8 @@ typedef enum
#define dmpout stderr
#endif
+#ifndef isascii
+#define isascii(c) ((unsigned char)(c) <= 0x7f)
+#endif
+
#endif
diff --git a/gcc/f/runtime/ChangeLog b/gcc/f/runtime/ChangeLog
deleted file mode 100644
index 57b175eaf6a..00000000000
--- a/gcc/f/runtime/ChangeLog
+++ /dev/null
@@ -1,756 +0,0 @@
-Tue Sep 9 00:33:24 1997 Craig Burley <burley@gnu.ai.mit.edu>
-
- * Version 0.5.21 released.
-
-Mon Sep 8 19:39:01 1997 Craig Burley <burley@gnu.ai.mit.edu>
-
- * libI77/close.c (f_exit): Fix thinko, inverted test
- of whether initialization done, so exiting now closes
- open units again.
-
-Tue Aug 26 01:42:21 1997 Craig Burley <burley@gnu.ai.mit.edu>
-
- From Jim Wilson:
- * configure.in: Make sure RANLIB_TEST is set also.
-
- From Robert Lipe <robertl@dgii.com>:
- * libU77/getcwd_.c, libU77/hostnm_.c, libU77/lstat_.c:
- Also #include <errno.h>, to define ENOSYS.
-
-Tue Aug 26 01:25:58 1997 Craig Burley <burley@gnu.ai.mit.edu>
-
- * Makefile.in (stamp-lib): Put all f2cext.c objects in
- a temp directory named libE77, then `ar' them all at
- once into libf2c.a, to get the job done a bit faster.
- Still remove the objects (and libE77 directory) afterward.
-
-Sun Aug 24 05:04:35 1997 Craig Burley <burley@gnu.ai.mit.edu>
-
- * libU77/rand_.c (G77_rand_0), libU77/dtime_.c (G77_dtime_0),
- libU77/etime_.c (G77_etime_0), libU77/secnds_.c (G77_secnds_0),
- libU77/second_.c (G77_second_0): Really return `double', not
- `doublereal', since the result is cast to `float'.
- * f2cext.c: (rand_, dtime_, etime_, secnds_, second_): Ditto.
- (erf_, erfc_, besj0_, besj1_, besjn_, besy0_, besy1_,
- besyn_, dbesj0_, dbesj1_, dbesjn_, dbesy0_, dbesy1_,
- dbesyn_): All of these return `double', not `doublereal',
- as they either have `float' or `double' results.
- * libU77/bes.c (besj0_, besj1_, besjn_, besy0_, besy1_,
- besyn_): Ditto.
- * libU77/dbes.c (dbesj0_, dbesj1_, dbesjn_, dbesy0_, dbesy1_,
- dbesyn_): Ditto.
-
- Update to Netlib version of 1997-08-16:
- * libI77/iio.c: Fix bug in internal writes to an array
- of character strings.
-
- * Makefile.in (UOBJ): Restore fixes made by Dan Pettet I
- lost, which included the addition of mclock_.o already noted
- below, plus adding symlnk_.o.
-
-Thu Aug 21 03:58:34 1997 Craig Burley <burley@gnu.ai.mit.edu>
-
- * Makefile.in (UOBJ): Add mclock_.o, thanks to Mumit Khan!
-
-1997-08-21 Dave Love <d.love@dl.ac.uk>
-
- * libU77/alarm_.c: Fix return type: `integer'.
-
-Mon Aug 11 20:12:42 1997 Craig Burley <burley@gnu.ai.mit.edu>
-
- * Makefile.in ($(lib), stamp-lib): Ensure that library
- gets fully updated even if updating was aborted earlier.
-
- * libU77/hostnm_.c (G77_hostnm_0): Return ENOSYS and stuff
- in errno if system has no gethostname() function.
-
- * libU77/lstat_.c (G77_lstat_0): Return ENOSYS and stuff
- in errno if system has no lstat() function.
-
- * libU77/getcwd_.c (G77_getcwd_0): Return ENOSYS and stuff
- in errno if system has no getcwd() or getwd() function.
- Test HAVE_GETCWD properly.
-
- * libU77/symlnk_.c (G77_symlink_0): Return ENOSYS and stuff
- in errno if system has no symlink() function.
-
- * libU77/mclock_.c (G77_mclock_0): Return -1 if system
- has no clock() function.
-
-Mon Aug 11 01:55:36 1997 Craig Burley <burley@gnu.ai.mit.edu>
-
- * Makefile.in (F2CEXT): Add `alarm' to this list.
-
- * f2cext.c (alarm_): Fix some typos in this function.
- Delete third `status' argument.
-
- * libU77/alarm_.c: Delete third `status' argument,
- as caller gets this from function result; return
- status value as function result for caller.
-
- * configure.in: Rename `ac_cv_struct_FILE' to
- `g77_cv_struct_FILE' according to 1997-06-26 change.
-
-1997-08-06 Dave Love <d.love@dl.ac.uk>
-
- * libU77/vxtidate_.c: Correct day/month argument order.
- * f2cext.c: Likewise.
-
-1997-07-07 Dave Love <d.love@dl.ac.uk>
-
- * f2cext.c: Add alarm_.
-
- * Makefile.in, libU77/Makefile.in: Add alarm_.
-
- * libU77/alarm_.c: New file.
-
-1997-06-26 Dave Love <d.love@dl.ac.uk>
-
- * configure.in: Generally use prefix `g77_' for cached values
- we've invented, not `ac_'.
-
-Tue Jun 24 18:50:06 1997 Craig Burley <burley@gnu.ai.mit.edu>
-
- * libI77/ilnw.c (s_wsni): Call f_init() here.
- (s_wsli): Ditto.
- (e_wsli): Turn off "doing I/O" flag here.
-
-1997-06-20 Dave Love <d.love@dl.ac.uk>
-
- * runtime/configure.in: Check for cygwin32 after Mumit Khan (but
- differently); if cygwin32 define NON_UNIX_STDIO and don't define
- NON_ANSI_RW_MODES.
-
-Tue Jun 01 06:26:29 1997 Craig Burley <burley@gnu.ai.mit.edu>
-
- * libI77/rsne.c (nl_init): Don't call f_init() here,
- since s_rsne() already does.
- (c_lir): Call f_init() here instead.
- * libI77/rsli.c (e_rsli): Turn off "doing I/O" flag here.
- * libI77/sue.c (e_rsue): Ditto.
-
-Sun Jun 22 23:27:22 1997 Craig Burley <burley@gnu.ai.mit.edu>
-
- * libI77/fio.h (err): Mark I/O as no longer in progress
- before returning a non-zero error indicator (since
- that tells the caller to jump over the remaining I/O
- calls, including the corresponding `e_whatever' call).
- * libI77/err.c (endif): Ditto.
- * libI77/sfe.c (e_wsfe): Ditto.
- * libI77/lread.c (ERR): Ditto.
- * libI77/lread.c (l_read): Ditto by having quad case
- use ERR, not return, to return non-zero error code.
-
-Sat Jun 21 12:31:28 1997 Craig Burley <burley@gnu.ai.mit.edu>
-
- * libI77/open.c (fk_open): Temporarily turn off
- "doing I/O" flag during f_open() call to avoid recursive
- I/O error.
-
-Tue Jun 17 22:40:47 1997 Craig Burley <burley@gnu.ai.mit.edu>
-
- * err.c, close.c, rewind.c, inquire.c, backspace.c, endfile.c,
- iio.c, open.c, Version.c, sfe.c, wsle.c, rsne.c, sue.c, rsfe.c,
- lread.c, wsfe.c, fio.h, due.c, dfe.c: Change f__init from
- `flag' to `int' and to signal not just whether initialization
- has happened (bit 0), but also whether I/O is in progress
- already (bit 1). Consistently produce a clear diagnostic
- in cases of recursive I/O. Avoid infinite recursion in
- f__fatal, in case sig_die triggers another error. Don't
- output info on internals if not initialized in f__fatal. Don't
- bother closing units in f_exit if initialization hasn't
- happened.
-
-Tue Jun 10 12:57:44 1997 Craig Burley <burley@gnu.ai.mit.edu>
-
- Update to Netlib version of 1997-06-09:
- * libI77/err.c, libI77/lread.c, libI77/rdfmt.c,
- libI77/wref.c: Move some #include's around.
-
-Mon Jun 9 18:11:56 1997 Craig Burley <burley@gnu.ai.mit.edu>
-
- * libU77/kill_.c (kill_): KR_headers version needed
- `*' in front of args in decls.
-
-Sun May 25 03:16:53 1997 Craig Burley <burley@gnu.ai.mit.edu>
-
- Update to Netlib version of 1997-05-24:
- * libF77/README, libF77/Version.c, libF77/main.c,
- libF77/makefile, libF77/s_paus.c, libF77/signal1.h,
- libF77/signal_.c, libF77/z_div.c, libI77/Notice,
- libI77/README, libI77/Version.c, libI77/dfe.c,
- libI77/err.c, libI77/fmt.c, libI77/makefile,
- libI77/rawio.h: Apply many, but not all, of the changes
- made to libf2c since last update.
- * libF77/Makefile.in (MISC), Makefile.in (MISC): Rename
- exit.o to exit_.o to go along with Netlib.
- * libF77/signal.c: Make the prologue much simpler than
- Netlib has it.
-
-Sun May 18 20:56:02 1997 Craig Burley <burley@gnu.ai.mit.edu>
-
- * libU77/unlink_.c, libU77/stat_.c, libU77/symlnk_.c,
- libU77/chmod_.c: g_char first arg is const.
-
- * libU77/chmod_.c: s_cat expects ftnlen[], not int[] or
- integer[], change types of array and variables
- accordingly.
-
-May 7 1997 Daniel Pettet <dan.pettet@bchydro.bc.ca>
-
- * libU77/dbes_.c: Commented out the code in the
- same way the bes* routines are commented out. This
- was done because corresponding C routines are referenced
- directly in com-rt.def.
-
-Mon May 5 13:56:02 1997 Craig Burley <burley@gnu.ai.mit.edu>
-
- * libU77/stat_.c: Reverse KR/ANSI decls of g_char().
-
-Apr 18 1997 Daniel Pettet <dan.pettet@bchydro.bc.ca>
-
- * libF77/F77_aloc.c, libF77/abort_.c, libF77/derf_.c,
- libF77/derfc_.c, libF77/ef1asc_.c, libF77/ef1cmc_.c,
- libF77/erf_.c, libF77/erfc_.c, libF77/exit.c,
- libF77/getarg_.c, libF77/getenv_.c, libF77/iargc_.c,
- libF77/s_cat.c, libF77/signal_.c, libF77/system_.c,
- libI77/close.c, libI77/ftell_.c, libU77/access_.c,
- libU77/bes.c, libU77/chdir_.c, libU77/chmod_.c, libU77/ctime_.c,
- libU77/date_.c, libU77/dbes.c, libU77/dtime_.c, libU77/etime_.c,
- libU77/fdate_.c, libU77/fgetc_.c, libU77/flush1_.c,
- libU77/fnum_.c, libU77/fputc_.c, libU77/fstat_.c,
- libU77/gerror_.c, libU77/getcwd_.c, libU77/getgid_.c,
- libU77/getlog_.c, libU77/getpid_.c, libU77/getuid_.c,
- libU77/gmtime_.c, libU77/hostnm_.c, libU77/idate_.c,
- libU77/ierrno_.c, libU77/irand_.c, libU77/isatty_.c,
- libU77/itime_.c, libU77/kill_.c, libU77/link_.c,
- libU77/lnblnk_.c, libU77/ltime_.c, libU77/mclock_.c,
- libU77/perror_.c, libU77/rand_.c, libU77/rename_.c,
- libU77/secnds_.c, libU77/second_.c, libU77/sleep_.c,
- libU77/srand_.c, libU77/stat_.c, libU77/symlnk_.c,
- libU77/system_clock_.c, libU77/time_.c, libU77/ttynam_.c,
- libU77/umask_.c, libU77/unlink_.c, libU77/vxtidate_.c,
- libU77/vxttime_.c: Completed renaming routines that are directly
- callable from g77 to internal names of the form
- G77_xxxx_0 that are known as intrinsics by g77.
-
-Apr 8 1997 Daniel Pettet <dan.pettet@bchydro.bc.ca>
-
- * Makefile.in: Add libU77/mclock_.o and libU77/symlnk_.o to UOBJ.
- * libU77/Makefile.in: Add mclock_.c to SRCS.
- Add mclock_.o and symlnk_.o to OBJS.
- Add mclock_.o dependency.
-
-Apr 8 1997 Daniel Pettet <dan.pettet@bchydro.bc.ca>
-
- * libU77/symlnk_.c: Added a couple of (char*) casts to malloc
- to silence the compiler.
-
-1997-03-17 Dave Love <d.love@dl.ac.uk>
-
- * libU77/access_.c, libU77/chdir_.c, libU77/chmod_.c,
- libU77/link_.c, libU77/lstat_.c, libU77/rename_.c, libU77/stat_.c,
- libU77/symlnk_.c, libU77/u77-test.f, libU77/unlink_.c: Strip
- trailing blanks from file names for consistency with other
- implementations (notably Sun's).
-
- * libU77/chmod_.c: Quote the file name given to the shell.
-
-Mon Mar 10 00:19:17 1997 Craig Burley <burley@gnu.ai.mit.edu>
-
- * libI77/uio.c (do_ud) [PAD_UDread]: Add semicolon to err()
- invocation when macro not defined (from Mumit Khan
- <khan@xraylith.wisc.edu>).
-
-Fri Feb 28 13:16:50 1997 Craig Burley <burley@gnu.ai.mit.edu>
-
- * Version 0.5.20 released.
-
-Wed Feb 26 20:28:53 1997 Craig Burley <burley@gnu.ai.mit.edu>
-
- * Makefile.in: $(MAKE) invocations now explicitly
- specify `-f Makefile', just in case the `makefile's
- from the netlib distribution would get used instead.
-
-Mon Feb 24 16:43:39 1997 Craig Burley <burley@gnu.ai.mit.edu>
-
- * libU77/Makefile.in (check): Specify driver, and
- don't bother enabling already-enabled intrinsic groups.
- Also, get the $(srcdir) version of u77-test.f.
-
-Sat Feb 22 14:08:42 1997 Craig Burley <burley@gnu.ai.mit.edu>
-
- * libU77/u77-test.f: Explicitly declare intrinsics, get
- rid of useless CHARACTER declarations on intrinsics (maybe
- someday appropriate to implement meaning of that in g77
- and restore them?).
- Add spin loop just to fatten up the timings a bit.
- Clarify ETIME output as having three fields.
- Call TIME with CHARACTER*8, not CHARACTER*6, argument.
- Call new SECOND intrinsic subroutine, after calling
- new DUMDUM subroutine just to ensure the correct value
- doesn't get left around in a register or something.
-
-Thu Feb 20 15:22:42 1997 Craig Burley <burley@gnu.ai.mit.edu>
-
- * libU77/bes.c: Comment out all the code, as g77 avoids actually
- calling it, going directly to the system's library instead.
-
-Mon Feb 17 02:27:41 1997 Craig Burley <burley@gnu.ai.mit.edu>
-
- * libU77/fgetc_.c (fgetc_): Allow return value to be
- CHARACTER*(*), properly handle CHARACTER*0 and blank-pad
- CHARACTER*n where n>1.
-
-Tue Feb 11 14:12:19 1997 Craig Burley <burley@gnu.ai.mit.edu>
-
- * Makefile.in: Clarify role of $(srcdir) here. Fix
- various targets accordingly. Don't rely at all on
- gcc/f/include/ being a link to gcc/include/ -- just
- use it directly.
- (${srcdir}/configure, ${srcdir}/libU77/configure):
- Remove the config.cache files in build directory before
- cd'ing to source directory as well.
-
- * libF77/Makefile.in, libI77/Makefile.in (ALL_CFLAGS):
- Include `-I.' to pick up build directory.
- Use gcc/include/ directly.
- * libU77/Makefile.in (ALL_CFLAGS): Include `-I$(srcdir)'
- to pick up source directory.
- (OBJS): Fix typo in `chmod_.o' (was `chmod.o').
-
-Mon Feb 10 12:54:47 1997 Craig Burley <burley@gnu.ai.mit.edu>
-
- * Makefile.in (UOBJ), libU77/Makefile.in (OBJS): Add
- libU77/chmod_.o to list of objects.
- * libU77/chmod_.c: Fix up headers.
- Fix implementation to not prematurely truncate command
- string and make room for trailing null.
-
- * libU77/ctime_.c: Incoming xstime argument is now longint.
- * libU77/mclock_.c: Now returns longint.
- * libU77/time_.c: Now returns longint.
-
-1997-02-10 Dave Love <d.love@dl.ac.uk>
-
- * etime_.c, dtime_.c: Typo rounded times to seconds.
-
- * date_.c: Add missing return.
-
- * hostnm_.c: #include unistd.h.
-
-Sat Feb 8 03:30:19 1997 Craig Burley <burley@gnu.ai.mit.edu>
-
- INTEGER*8 support built in to f2c.h and libf2c (since
- gcc will be used to compile relevant code anyway):
- * Makefile.in, libF77/Makefile.in: Add pow_qq.o,
- qbitbits.o, and qbitshft.o to $POW and $F90BIT macros,
- as appropriate.
- * f2c.h.in: Define appropriate types and macros.
- Place #error directive correctly.
- * configure.in: Determine appropriate types for long
- integer (F2C_LONGINT).
- Meanwhile, quote strings in #error, for consistency.
- Fix restoring of ac_cpp macro.
- * configure: Regenerated using autoconf-2.12.
-
- * libF77/Version.c, libI77/Version.c, libU77/Version.c:
- Update version numbers.
- Change names and code for g77-specific version-printing
- routines (shorter names should be safer to link on
- weird, 8-char systems).
-
- * libF77/c_cos.c, libF77/c_div.c, libF77/c_exp.c,
- libF77/c_log.c, libF77/c_sin.c, libF77/c_sqrt.c,
- libF77/d_cnjg.c, libF77/pow_zi.c, libF77/r_cnjg.c,
- libF77/z_cos.c, libF77/z_div.c, libF77/z_exp.c,
- libF77/z_log.c, libF77/z_sin.c, libF77/z_sqrt.c:
- Changed to work properly even when result is aliased
- with any inputs.
-
- * libF77/makefile, libI77/makefile: Leave these in
- the g77 distribution, so it is easier to track changes
- to official libf2c.
-
- * libF77/signal_.c: Eliminate redundant `return 0;'.
-
- * libI77/fio.h (err, errfl): Fix these so they work
- (and must be expressed) as statements.
- Fix up many users of err() to include trailing semicolon.
-
- * Incorporate changes by Bell Labs to libf2c through 1997-02-07.
-
-1997-02-06 Dave Love <d.love@dl.ac.uk>
-
- * libU77/etime_.c, libU77/dtime_.c: Fix getrusage stuff.
-
- * libU77/config.h.in: Regenerate for HAVE_GETRUSAGE.
-
- * libU77/Makefile.in, libI77/Makefile.in, libF77/Makefile.in:
- Redo *clean targets; distclean and maintainer-clean remove the stage?
- and include links. This probably want looking at further.
-
-Wed Feb 5 00:21:23 1997 Craig Burley <burley@gnu.ai.mit.edu>
-
- Add libU77 library from Dave Love <d.love@dl.ac.uk>:
- * Makefile.in: Add libU77 directory, rules, etc.
- * configure.in: New libU77 directory, Makefile, etc.
-
- * Makefile.in, libF77/Makefile.in, libI77/Makefile.in,
- libU77/Makefile.in: Reorganize these so $(AR) commands
- handled by the top-level Makefile instead of the
- subordinates. This permits it to do $(AR) only when
- one or more object files actually change, instead of
- having to force-update it as was necessary before.
- And that had the disadvantage of requiring, e.g., user
- root to have access to $(AR) to the library simply to
- install g77, which might be problematic on an NFS setup.
- (mostlyclean, clean, distclean, maintainer-clean):
- Properly handle these rules.
-
- * Makefile.in: Don't invoke config.status here -- let
- compiler-level stuff handle all that.
-
- * err.c [MISSING_FILE_ELEMS]: Declare malloc in this case
- too, so it doesn't end up as an integer.
-
-Sat Feb 1 02:43:48 1997 Craig Burley <burley@gnu.ai.mit.edu>
-
- * libF77/Makefile.in: More fixup for $(F90BIT) -- wasn't
- in list for ar command, and it wasn't correctly listed
- in the list of things depending on f2c.h.
-
- * f2c.h.in: Fix up #error directive.
-
-1997-01-31 Dave Love <d.love@dl.ac.uk>
-
- * libF77/Makefile.in ($(lib)): Add $(F90BIT); shouldn't exclude
- stuff f2c needs so we can share the library.
-
-Sat Jan 18 19:39:03 1997 Craig Burley <burley@gnu.ai.mit.edu>
-
- * configure.in: No longer define ALWAYS_FLUSH, the
- resulting performance is too low.
-
-Wed Dec 18 12:06:02 1996 Craig Burley <burley@gnu.ai.mit.edu>
-
- Patch from Mumit Khan <khan@xraylith.wisc.edu>:
- * libF77/s_paus.c: Add __CYGWIN32__ to list of macros
- controlling how to pause.
-
-Sun Dec 1 21:25:27 1996 Craig Burley <burley@gnu.ai.mit.edu>
-
- * configure: Regenerated using autoconf-2.12.
-
-Mon Nov 25 21:16:15 1996 Craig Burley <burley@gnu.ai.mit.edu>
-
- * configure: Regenerated using autoconf-2.11.
-
-1996-11-19 Dave Love <d.love@dl.ac.uk>
-
- * libI77/backspace.c: Include sys/types.h for size_t.
-
-Wed Nov 6 14:17:27 1996 Craig Burley <burley@gnu.ai.mit.edu>
-
- * f2c.h.in: Properly comment out the unsupported stuff so
- we don't get build-time errors.
-
- * libF77/Version.c, libI77/Version.c: Restore macro definition
- of version information.
-
- * libI77/Makefile.in (OBJ): Add ftell_.o to list of objects.
-
- * libI77/uio.c (do_ud): Fix up casts in PAD_UDread case just
- like they were fixed in the other case.
-
-Thu Oct 31 22:27:45 1996 Craig Burley <burley@gnu.ai.mit.edu>
-
- * libI77/ftell_.c (fseek_): Map incoming whence argument to
- system's actual SEEK_CUR, SEEK_SET, or SEEK_END macro for
- fseek(), and crash (gracefully) if the argument is invalid.
-
-1996-10-19 Dave Love <d.love@dl.ac.uk>
-
- * configure.in: Add check that we have the tools to cross-compile
- if appropriate.
- (NO_EOF_CHAR_CHECK,Skip_f2c_Undefs): Define.
-
- * libF77/Makefile.in (F90BIT): New routines from Netlib.
-
- * f2c.h.in:
- Use more sanitary #error (indented for K&R compliance if necessary) if
- f2c_i2 defined.
- Sync with Netlib: Add `uninteger'. (Commented out) integer*8 stuff.
- bit_{test,clear,set} macros.
-
-1996-10-19 Dave Love <d.love@dl.ac.uk>
-
- Update to Netlib version of 1996-09-26.
-
- * libI77/Version.c: Use <stdio.h>, not "stdio.h".
- * libF77/Version.c: Likewise.
-
-Wed Aug 28 13:25:29 1996 Dave Love <d.love@dl.ac.uk>
-
- * libI77/rsne.c (x_rsne): Use size_t instead of int.
-
- * libI77/endfile.c (copy): Use size_t in place of int.
-
-Wed Aug 28 13:22:20 1996 Dave Love <d.love@dl.ac.uk>
-
- * libI77/backspace.c (f_back): Cast fread arg to size_t.
-
-Tue Aug 27 19:11:30 1996 Dave Love <d.love@dl.ac.uk>
-
- * libI77/Version.c: Supply */ to avoid apparent nested comment.
-
-Tue Aug 20 09:21:43 1996 Dave Love <d.love@dl.ac.uk>
-
- * libF77/Makefile.in (ALL_CFLAGS): Fix missing ../ for include.
- * libI77/Makefile.in (ALL_CFLAGS): Likewise.
-
-Sat Aug 17 13:00:47 1996 Dave Love <d.love@dl.ac.uk>
-
- * (libF77/qbitshft.c, libF77/qbitbits.c, libF77/lbitshft.c,
- libF77/lbitbits.c): New file from Netlib. qbit... not currently
- compiled.
-
-Sun Jul 7 18:06:33 1996 Dave Love <d.love@dl.ac.uk>
-
- * libF77/z_sqrt.c, libF77/z_sin.c, libF77/z_exp.c, libF77/z_log.c,
- libF77/system_.c, libF77/z_cos.c, libF77/signal_.c,
- libF77/s_stop.c, libF77/sig_die.c, libF77/s_paus.c,
- libF77/s_rnge.c, libF77/s_cat.c, libF77/r_tan.c, libF77/r_tanh.c,
- libF77/r_sinh.c, libF77/r_sqrt.c, libF77/r_sin.c, libF77/r_mod.c,
- libF77/r_nint.c, libF77/r_lg10.c, libF77/r_log.c, libF77/r_exp.c,
- libF77/r_int.c, libF77/r_cosh.c, libF77/r_atn2.c, libF77/r_cos.c,
- libF77/r_asin.c, libF77/r_atan.c, libF77/r_acos.c,
- libF77/pow_dd.c, libF77/pow_zz.c, libF77/main.c, libF77/i_dnnt.c,
- libF77/i_nint.c, libF77/h_dnnt.c, libF77/h_nint.c, libF77/exit.c,
- libF77/d_tan.c, libF77/d_tanh.c, libF77/d_sqrt.c, libF77/d_sin.c,
- libF77/d_sinh.c, libF77/d_mod.c, libF77/d_nint.c, libF77/d_log.c,
- libF77/d_int.c, libF77/d_lg10.c, libF77/d_cosh.c, libF77/d_exp.c,
- libF77/d_atn2.c, libF77/d_cos.c, libF77/d_atan.c, libF77/d_acos.c,
- libF77/d_asin.c, libF77/c_sqrt.c, libF77/cabs.c, libF77/c_sin.c,
- libF77/c_exp.c, libF77/c_log.c, libF77/c_cos.c, libF77/F77_aloc.c,
- libF77/abort_.c, libI77/xwsne.c, libI77/wref.c, libI77/util.c,
- libI77/uio.c, libI77/rsne.c, libI77/rdfmt.c, libI77/rawio.h,
- libI77/open.c, libI77/lread.c, libI77/inquire.c, libI77/fio.h,
- libI77/err.c, libI77/endfile.c, libI77/close.c:
- Use #include <...>, not #include "..." for mkdeps
-
-Sat Jul 6 21:39:21 1996 Dave Love <d.love@dl.ac.uk>
-
- * libI77/ftell_.c: Added from Netlib distribution.
-
-Sat Mar 30 20:57:24 1996 Dave Love <d.love@dl.ac.uk>
-
- * configure.in: Eliminate explicit use of
- {RANLIB,AR}_FOR_TARGET.
- * Makefile.in: Likewise.
- * libF77/Makefile.in: Likewise.
- * libI77/Makefile.in: Likewise.
- * configure: Regenerated.
-
-Sat Mar 30 21:02:03 1996 Dave Love <d.love@dl.ac.uk>
-
- * Makefile.in: Eliminate explicit use of
- {RANLIB,AR}_FOR_TARGET.
-
-Tue Mar 26 23:39:59 1996 Dave Love <d.love@dl.ac.uk>
-
- * Makefile.in: Remove hardwired RANLIB and RANLIB_TEST (unnoted
- change).
-
-Mon Mar 25 21:04:56 1996 Craig Burley <burley@gnu.ai.mit.edu>
-
- * Incorporate changes by Bell Labs to libf2c through 1996-03-23,
- including changes to dmg and netlib email addresses.
-
-Tue Mar 19 13:10:02 1996 Craig Burley <burley@gnu.ai.mit.edu>
-
- * Incorporate changes by AT&T/Bellcore to libf2c through 1996-03-19.
-
- * Makefile.in (rebuilt): New target.
-
- * lib[FI]77/Makefile.in: Use $AR_FOR_TARGET, not $AR.
-
-Tue Mar 19 12:53:19 1996 Dave Love <d.love@dl.ac.uk>
-
- * configure.in (ac_cpp): #include <stdio.h> instead
- of <features.h>.
-
-Tue Mar 19 12:52:09 1996 Mumit Khan <khan@xraylith.wisc.edu>
-
- * configure.in (ac_cpp): For f2c integer type,
- add -I$srcdir/../.. to make it work on mips-ultrix4.2.
-
-Sat Mar 9 17:37:15 1996 Craig Burley <burley@gnu.ai.mit.edu>
-
- * libI77/Makefile.in (.c.o): Add -DAllow_TYQUAD, to enable
- I/O support for INTEGER*8.
- * f2c.h.in: Turn on longint type.
-
-Fri Dec 29 18:22:01 1995 Craig Burley <burley@gnu.ai.mit.edu>
-
- * Makefile.in: Reorganize the *clean rules to more closely
- parallel gcc's.
-
- * lib[FI]77/Makefile.in: Ignore error from $(AR) command,
- in case just doing an install and installer has no write
- access to library (this is a kludge fix -- perhaps install
- targets should never try updating anything?).
-
-Sat Nov 18 19:37:22 1995 Craig Burley (burley@gnu.ai.mit.edu)
-
- * Version 0.5.17 released.
-
-Thu Nov 16 07:20:35 1995 Craig Burley (burley@gnu.ai.mit.edu)
-
- * Incorporate changes by AT&T/Bellcore to libf2c through 1995-11-15.
-
-Fri Sep 22 02:19:59 1995 Craig Burley (burley@gnu.ai.mit.edu)
-
- * libI77/backspace.c, libI77/close.c, libI77/endfile.c,
- libI77/fio.h, libI77/inquire.c, libI77/rawio.h,
- libF77/s_paus.c: Not an MSDOS system if GO32
- is defined, in the sense that the run-time environment
- is thus more UNIX-like.
-
-Wed Sep 20 02:24:51 1995 Craig Burley (burley@gnu.ai.mit.edu)
-
- * libF77/Makefile.in, libI77/Makefile.in: Comment out `ld -r -x'
- and `mv' line pairs, since `-x' isn't supported on systems
- such as Solaris, and these lines don't seem to do anything
- useful after all.
-
-Wed Aug 30 15:58:35 1995 Craig Burley (burley@gnu.ai.mit.edu)
-
- * Version 0.5.16 released.
-
- * Incorporate changes by AT&T/Bellcore to libf2c through 950829.
-
-Mon Aug 28 12:50:34 1995 Craig Burley (burley@gnu.ai.mit.edu)
-
- * libF77/Makefile.in, libI77/Makefile.in ($(lib)): Force ar'ing
- and ranlib'ing of libf2c.a, else after rm'ing libf2c.a and
- doing a make, only libI77 or libF77 would be added to
- the newly created archive.
- Also, instead of `$?' list all targets explicitly so all
- objects are updated in libf2c.a even if only one actually
- needs recompiling, for similar reason -- we can't easily tell
- if a given object is really up-to-date in libf2c.a, or even
- present there.
-
-Sun Aug 27 14:54:24 1995 Craig Burley (burley@gnu.ai.mit.edu)
-
- * libF77/Makefile.in, libI77/Makefile.in: Fix spacing so
- initial tabs are present in all appropriate places.
- Move identical $(AR) commands in if then/else clauses
- to single command preceding if.
- (.c.o, Version[FI].o): Use $@ instead of $* because AIX (RS/6000)
- says $@ means source, not object, basename, and $@ seems to work
- everywhere.
-
-Wed Aug 23 15:44:25 1995 Craig Burley (burley@gnu.ai.mit.edu)
-
- * libF77/system_.c (system_): Declare as returning `ftnint',
- consistent with signal_, instead of defaulting to `int'.
- Hope dmg@research.att.com agrees, else probably will
- change to whatever he determines is correct (and change
- g77 accordingly).
-
-Thu Aug 17 08:46:17 1995 Craig Burley (burley@gnu.ai.mit.edu)
-
- * libI77/rsne.c (s_rsne): Call f_init if not already done.
-
-Thu Aug 17 04:35:28 1995 Craig Burley (burley@gnu.ai.mit.edu)
-
- * Incorporate changes by Bellcore to libf2c through 950817.
- And this text is for EMACS: (foo at bar).
-
-Wed Aug 16 17:33:06 1995 Craig Burley (burley@gnu.ai.mit.edu)
-
- * libF77/Makefile.in, libI77/Makefile.in (CFLAGS): Put -g1
- after configured CFLAGS but before GCC_CFLAGS, so by default
- the libraries are built with minimal debugging information.
-
-Fri Jul 28 10:30:15 1995 Dave Love <d.love@dl.ac.uk>
-
- * libI77/open.c (f_open): Call f_init if not already done.
-
-Sat Jul 1 19:31:56 1995 Craig Burley (burley@gnu.ai.mit.edu)
-
- * libF77/system_.c (system_): Make buff one byte bigger so
- following byte doesn't get overwritten by call with large
- string.
-
-Tue Jun 27 23:28:16 1995 Craig Burley (burley@gnu.ai.mit.edu)
-
- * Incorporate changes by Bellcore to libf2c through 950613.
-
- * libF77/Version.c (__G77_LIBF77_VERSION__): Add this string
- to track g77 mods to libf2c.
-
- * libI77/Version.c (__G77_LIBI77_VERSION__): Add this string
- to track g77 mods to libf2c.
-
- * libI77/rawio.h: #include <rawio.h> only conditionally,
- using macro intended for that purpose.
-
-Fri May 19 11:20:00 1995 Craig Burley (burley@gnu.ai.mit.edu)
-
- * configure.in: Incorporate change made by d.love,
-
- * configure: Regenerated.
-
-Wed Apr 26 21:08:57 BST 1995 Dave Love <d.love@dl.ac.uk>
-
- * configure.in: Fix quoting problem in atexit check.
-
- * configure: Regenerated (with current autoconf).
-
-Wed Mar 15 12:49:58 1995 Craig Burley (burley@gnu.ai.mit.edu)
-
- * Incorporate changes by Bellcore to libf2c through 950315.
-
-Sun Mar 5 18:54:29 1995 Craig Burley (burley@gnu.ai.mit.edu)
-
- * README: Tell people not to read lib[fi]77/README.
-
-Wed Feb 15 14:30:58 1995 Craig Burley (burley@gnu.ai.mit.edu)
-
- * configure.in: Update copyright notice at top of file.
-
- * f2c.h.in (f2c_i2): Make sure defining this crashes compilations.
-
- * libI77/Makefile.in (F2C_H): Fix typo in definition of this
- symbol (was FF2C_H=...).
-
-Sun Feb 12 13:39:36 1995 Craig Burley (burley@gnu.ai.mit.edu)
-
- * README: Remove some obsolete items.
- Add date.
-
- * TODO: Add date.
-
-Sat Feb 11 22:07:54 1995 Craig Burley (burley@gnu.ai.mit.edu)
-
- * Makefile.in (libf77, libi77): Add rules to .PHONY list.
-
- * f2c.h.in (flag): Make same type as friends.
-
- * libF77/Makefile.in (libf77): Rename to $(lib), remove from
- .PHONY list. Fix some typos.
-
- * libI77/Makefile.in (libi77): Rename to $(lib), remove from
- .PHONY list. Fix some typos.
-
-Thu Feb 2 12:22:41 1995 Craig Burley (burley@gnu.ai.mit.edu)
-
- * Makefile.in (libF77/Makefile): Fix typos in this rule's name
- and dependencies.
-
- * libF77/Makefile.in (libf77): Add rule to .PHONY list.
-
- * libI77/Makefile.in (libi77): Add rule to .PHONY list.
diff --git a/gcc/f/runtime/Makefile.in b/gcc/f/runtime/Makefile.in
deleted file mode 100644
index e923c06f266..00000000000
--- a/gcc/f/runtime/Makefile.in
+++ /dev/null
@@ -1,253 +0,0 @@
-# Makefile for GNU F77 compiler runtime.
-# Copyright (C) 1995-1997 Free Software Foundation, Inc.
-# Contributed by Dave Love (d.love@dl.ac.uk).
-#
-#This file is part of GNU Fortran.
-#
-#GNU Fortran 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.
-#
-#GNU Fortran 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 GNU Fortran; see the file COPYING. If not, write to
-#the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
-#02111-1307, USA.
-
-#### Start of system configuration section. ####
-
-# $(srcdir) must be set to the g77 runtime source directory
-# (g77/f/runtime/).
-
-srcdir = @srcdir@
-VPATH = @srcdir@
-
-top_srcdir = @top_srcdir@
-
-INSTALL = @INSTALL@ # installs aren't actually done from here
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_DATA = @INSTALL_DATA@
-RANLIB = @RANLIB@
-RANLIB_TEST = @RANLIB_TEST@
-
-CFLAGS = @CFLAGS@
-CPPFLAGS = @CPPFLAGS@ @DEFS@
-LDFLAGS = @LDFLAGS@
-LIBS = @LIBS@
-CGFLAGS = -g0
-
-GCC_FOR_TARGET = @CC@
-CC = $(GCC_FOR_TARGET)
-
-CROSS = @CROSS@
-
-objext = .o
-
-transform=@program_transform_name@
-
-prefix = @prefix@
-exec_prefix = @exec_prefix@
-
-AR = ar
-AR_FLAGS = rc
-
-# Directory in which to install scripts.
-bindir = $(exec_prefix)/bin
-
-# Directory in which to install library files.
-libdir = $(prefix)/lib
-
-# Directory in which to install documentation info files.
-infodir = $(prefix)/info
-
-#### End of system configuration section. ####
-
-SHELL = /bin/sh
-
-lib = ../../libf2c.a
-
-SUBDIRS = libI77 libF77 libU77
-
-MISC = libF77/F77_aloc.o libF77/VersionF.o libF77/main.o libF77/s_rnge.o \
- libF77/abort_.o libF77/getarg_.o libF77/iargc_.o libF77/getenv_.o \
- libF77/signal_.o libF77/s_stop.o libF77/s_paus.o libF77/system_.o \
- libF77/cabs.o libF77/derf_.o libF77/derfc_.o libF77/erf_.o \
- libF77/erfc_.o libF77/sig_die.o libF77/exit_.o
-POW = libF77/pow_ci.o libF77/pow_dd.o libF77/pow_di.o libF77/pow_hh.o \
- libF77/pow_ii.o libF77/pow_ri.o libF77/pow_zi.o libF77/pow_zz.o \
- libF77/pow_qq.o
-CX = libF77/c_abs.o libF77/c_cos.o libF77/c_div.o libF77/c_exp.o \
- libF77/c_log.o libF77/c_sin.o libF77/c_sqrt.o
-DCX = libF77/z_abs.o libF77/z_cos.o libF77/z_div.o libF77/z_exp.o \
- libF77/z_log.o libF77/z_sin.o libF77/z_sqrt.o
-REAL = libF77/r_abs.o libF77/r_acos.o libF77/r_asin.o libF77/r_atan.o \
- libF77/r_atn2.o libF77/r_cnjg.o libF77/r_cos.o libF77/r_cosh.o \
- libF77/r_dim.o libF77/r_exp.o libF77/r_imag.o libF77/r_int.o \
- libF77/r_lg10.o libF77/r_log.o libF77/r_mod.o libF77/r_nint.o \
- libF77/r_sign.o libF77/r_sin.o libF77/r_sinh.o libF77/r_sqrt.o \
- libF77/r_tan.o libF77/r_tanh.o
-DBL = libF77/d_abs.o libF77/d_acos.o libF77/d_asin.o libF77/d_atan.o \
- libF77/d_atn2.o libF77/d_cnjg.o libF77/d_cos.o libF77/d_cosh.o \
- libF77/d_dim.o libF77/d_exp.o libF77/d_imag.o libF77/d_int.o \
- libF77/d_lg10.o libF77/d_log.o libF77/d_mod.o libF77/d_nint.o \
- libF77/d_prod.o libF77/d_sign.o libF77/d_sin.o libF77/d_sinh.o \
- libF77/d_sqrt.o libF77/d_tan.o libF77/d_tanh.o
-INT = libF77/i_abs.o libF77/i_dim.o libF77/i_dnnt.o libF77/i_indx.o \
- libF77/i_len.o libF77/i_mod.o libF77/i_nint.o libF77/i_sign.o
-HALF = libF77/h_abs.o libF77/h_dim.o libF77/h_dnnt.o libF77/h_indx.o \
- libF77/h_len.o libF77/h_mod.o libF77/h_nint.o libF77/h_sign.o
-CMP = libF77/l_ge.o libF77/l_gt.o libF77/l_le.o libF77/l_lt.o \
- libF77/hl_ge.o libF77/hl_gt.o libF77/hl_le.o libF77/hl_lt.o
-EFL = libF77/ef1asc_.o libF77/ef1cmc_.o
-CHAR = libF77/s_cat.o libF77/s_cmp.o libF77/s_copy.o
-F90BIT = libF77/lbitbits.o libF77/lbitshft.o libF77/qbitbits.o \
- libF77/qbitshft.o
-FOBJ = $(MISC) $(POW) $(CX) $(DCX) $(REAL) $(DBL) $(INT) $(HALF) $(CMP) \
- $(EFL) $(CHAR) $(F90BIT)
-
-IOBJ = libI77/VersionI.o libI77/backspace.o libI77/close.o libI77/dfe.o \
- libI77/dolio.o libI77/due.o libI77/endfile.o libI77/err.o \
- libI77/fmt.o libI77/fmtlib.o libI77/iio.o libI77/ilnw.o \
- libI77/inquire.o libI77/lread.o libI77/lwrite.o libI77/open.o \
- libI77/rdfmt.o libI77/rewind.o libI77/rsfe.o libI77/rsli.o \
- libI77/rsne.o libI77/sfe.o libI77/sue.o libI77/typesize.o \
- libI77/uio.o libI77/util.o libI77/wref.o libI77/wrtfmt.o \
- libI77/wsfe.o libI77/wsle.o libI77/wsne.o libI77/xwsne.o \
- libI77/ftell_.o
-
-UOBJ = libU77/VersionU.o libU77/gerror_.o libU77/perror_.o libU77/ierrno_.o \
- libU77/itime_.o libU77/time_.o libU77/unlink_.o libU77/fnum_.o \
- libU77/getpid_.o libU77/getuid_.o libU77/getgid_.o libU77/kill_.o \
- libU77/rand_.o libU77/srand_.o libU77/irand_.o libU77/sleep_.o \
- libU77/idate_.o libU77/ctime_.o libU77/etime_.o libU77/dtime_.o \
- libU77/isatty_.o libU77/ltime_.o libU77/fstat_.o libU77/stat_.o \
- libU77/lstat_.o libU77/access_.o libU77/link_.o libU77/getlog_.o \
- libU77/ttynam_.o libU77/getcwd_.o libU77/vxttime_.o \
- libU77/vxtidate_.o libU77/gmtime_.o libU77/fdate_.o libU77/secnds_.o \
- libU77/bes.o libU77/dbes.o libU77/chdir_.o libU77/chmod_.o \
- libU77/lnblnk_.o libU77/hostnm_.o libU77/rename_.o libU77/fgetc_.o \
- libU77/fputc_.o libU77/umask_.o libU77/system_clock_.o libU77/date_.o \
- libU77/second_.o libU77/flush1_.o libU77/alarm_.o libU77/mclock_.o \
- libU77/symlnk_.o
-
-F2CEXT = abort derf derfc ef1asc ef1cmc erf erfc exit getarg getenv iargc \
- signal system flush ftell fseek access besj0 besj1 besjn besy0 besy1 \
- besyn chdir chmod ctime date dbesj0 dbesj1 dbesjn dbesy0 dbesy1 dbesyn \
- dtime etime fdate fgetc fget flush1 fnum fputc fput fstat gerror \
- getcwd getgid getlog getpid getuid gmtime hostnm idate ierrno irand \
- isatty itime kill link lnblnk lstat ltime mclock perror rand rename \
- secnds second sleep srand stat symlnk sclock time ttynam umask unlink \
- vxtidt vxttim alarm
-
-# flags_to_pass to recursive makes & configure (hence the quoting style)
-FLAGS_TO_PASS = \
- CROSS="$(CROSS)" \
- AR_FLAGS="$(AR_FLAGS)" \
- AR="$(AR)" \
- GCCFLAGS="$(GCCFLAGS)" \
- GCC_FOR_TARGET="$(GCC_FOR_TARGET)" \
- CC="$(GCC_FOR_TARGET)" \
- LDFLAGS="$(LDFLAGS)" \
- RANLIB="$(RANLIB)" \
- RANLIB_TEST="$(RANLIB_TEST)" \
- SHELL="$(SHELL)"
-
-CROSS_FLAGS_TO_PASS = \
- CROSS="$(CROSS)" \
- AR_FLAGS="$(AR_FLAGS)" \
- AR="$(AR)" \
- GCCFLAGS="$(GCCFLAGS)" \
- GCC_FOR_TARGET="$(GCC_FOR_TARGET)" \
- CC="$(GCC_FOR_TARGET)" \
- LDFLAGS="$(LDFLAGS)" \
- RANLIB="$(RANLIB)" \
- RANLIB_TEST="$(RANLIB_TEST)" \
- SHELL="$(SHELL)"
-
-all: ../../include/f2c.h libi77 libf77 libu77 $(lib)
-
-$(lib): stamp-lib ; @true
-stamp-lib: $(FOBJ) $(IOBJ) $(UOBJ)
- rm -f stamp-lib
- $(AR) $(AR_FLAGS) $(lib) $?
- rm -fr libE77
- mkdir libE77
- for name in $(F2CEXT); \
- do \
- echo $${name}; \
- $(GCC_FOR_TARGET) -c -I. -I$(srcdir) -I../../include $(CPPFLAGS) $(CFLAGS) $(CGFLAGS) \
- -DL$${name} $(srcdir)/f2cext.c -o libE77/L$${name}$(objext); \
- if [ $$? -eq 0 ] ; then true; else exit 1; fi; \
- done
- $(AR) $(AR_FLAGS) $(lib) libE77/*$(object)
- rm -fr libE77
- if $(RANLIB_TEST); then $(RANLIB) $(lib); \
- else true; fi
- touch stamp-lib
-
-libi77: libI77/Makefile
- if test "$(CROSS)"; then \
- cd libI77; $(MAKE) -f Makefile $(CROSS_FLAGS_TO_PASS) all ; \
- else \
- cd libI77; $(MAKE) -f Makefile $(FLAGS_TO_PASS) all ; \
- fi
-
-libf77: libF77/Makefile
- if test "$(CROSS)"; then \
- cd libF77; $(MAKE) -f Makefile $(CROSS_FLAGS_TO_PASS) all ; \
- else \
- cd libF77; $(MAKE) -f Makefile $(FLAGS_TO_PASS) all ; \
- fi
-
-libu77: libU77/Makefile
- if test "$(CROSS)"; then \
- cd libU77; $(MAKE) -f Makefile $(CROSS_FLAGS_TO_PASS) all ; \
- else \
- cd libU77; $(MAKE) -f Makefile $(FLAGS_TO_PASS) all ; \
- fi
-
-${srcdir}/configure: ${srcdir}/configure.in
- rm -f config.cache && cd ${srcdir} && autoconf && rm -f config.cache
-${srcdir}/libU77/configure: ${srcdir}/libU77/configure.in
- rm -f libU77/config.cache && cd ${srcdir}/libU77 && autoconf && rm -f config.cache
-#../include/f2c.h libI77/Makefile libF77/Makefile libU77/Makefile Makefile: ${srcdir}/Makefile.in \
-# config.status libU77/config.status
-# $(FLAGS_TO_PASS) CONFIG_SITE=/dev/null $(SHELL) config.status
-# cd libU77; $(FLAGS_TO_PASS) CONFIG_SITE=/dev/null $(SHELL) config.status
-
-# Extra dependencies for the targets above:
-libI77/Makefile: $(srcdir)/libI77/Makefile.in
-libF77/Makefile: $(srcdir)/libF77/Makefile.in
-libU77/Makefile: $(srcdir)/libU77/Makefile.in
-../../include/f2c.h: $(srcdir)/f2c.h.in
-
-#config.status: ${srcdir}/configure
-# $(FLAGS_TO_PASS) CONFIG_SITE=/dev/null $(SHELL) config.status --recheck
-#libU77/config.status: ${srcdir}/libU77/configure
-# cd libU77; $(FLAGS_TO_PASS) CONFIG_SITE=/dev/null $(SHELL) config.status --recheck
-
-mostlyclean:
- for i in libI77 libF77 libU77; do cd $$i; $(MAKE) -f Makefile mostlyclean; cd ..; done
-
-clean:
- -rm -f config.log config.cache
- for i in libI77 libF77 libU77; do cd $$i; $(MAKE) -f Makefile clean; cd ..; done
-
-distclean: clean
- -rm -f Makefile lib?77/Makefile config.status libU77/config.status ../../include/f2c.h
-
-maintainer-clean: distclean
- -rm -f $(srcdir)/configure $(srcdir)/libU77/configure
-
-uninstall:
- rm ../../include/f2c.h
-
-rebuilt: ${srcdir}/configure ${srcdir}/libU77/configure
-
-.PHONY: libf77 libi77 libu77 rebuilt mostlyclean clean distclean maintainer-clean \
- uninstall all
diff --git a/gcc/f/runtime/README b/gcc/f/runtime/README
deleted file mode 100644
index 9419af77189..00000000000
--- a/gcc/f/runtime/README
+++ /dev/null
@@ -1,46 +0,0 @@
-970811
-
-This directory contains the f2c library packaged for use with g77 to configure
-and build automatically (in principle!) as part of the top-level configure and
-make steps. This depends on the makefile and configure fragments in ../f.
-
-Some small changes have been made to the f2c distributions of lib[FI]77 which
-come from <ftp:bell-labs.com/netlib/f2c/> and are maintained (excellently) by
-David M. Gay <dmg@bell-labs.com>. See the Notice files for copyright
-information. I'll try to get the changes rolled into the f2c distribution.
-
-Files that come directly from netlib are either maintained in the
-gcc/f/runtime/ directory under their original names or, if they
-are not pertinent for g77's version of libf2c, under their original
-names with `.netlib' appended. For example, gcc/f/runtime/permissions.netlib
-is a copy of f2c's top-level`permissions' file in the netlib distribution.
-In this case, it applies only to the relevant portions of the libF77/ and
-libI77/ directories; it does not apply to the libU77/ directory, which is
-distributed under different licensing arrangements. Similarly,
-the `makefile.netlib' files in libF77/ and libI77/ are copies of
-the respective `makefile' files in the netlib distribution, but
-are not used when building g77's version of libf2c.
-
-The `README.netlib' files in libF77/ and libI77/ thus might be
-interesting, but should not be taken as guidelines for how to
-configure and build libf2c in g77's distribution.
-
-The packaging for auto-configuration was done by Dave Love <d.love@dl.ac.uk>.
-Minor changes have been made by James Craig Burley <burley@gnu.ai.mit.edu>,
-who probably broke things Dave had working. :-)
-
-Among the user-visible changes (choices) g77 makes in its
-version of libf2c:
-
-- f2c.h configured to default to padding unformatted direct reads
- (#define Pad_UDread), because that's the behavior most users
- expect.
-
-- f2c.h configured to default to outputting leading zeros before
- decimal points in formatted and list-directed output, to be compatible
- with many other compilers (#define WANT_LEAD_0). Either way is
- standard-conforming, however, and you should try to avoid writing
- code that assumes one format or another.
-
-- dtime_() and etime_() are from Dave Love's libU77, not from
- netlib's libF77.
diff --git a/gcc/f/runtime/TODO b/gcc/f/runtime/TODO
deleted file mode 100644
index a44d1ed7f23..00000000000
--- a/gcc/f/runtime/TODO
+++ /dev/null
@@ -1,17 +0,0 @@
-970811
-
-TODO list for the g77 library
-
-* `Makefile.in's should be brought up to standard; I'm not sure they
- have a complete set of targets at present.
-
-* Investigate building shared libraries on systems we know about
- (probably in 0.5.22, using libtool-1.0 from the FSF, which looks
- quite useful).
-
-* Test cases.
-
-* Allow the library to be stripped to save space.
-
-* An interface to IEEE maths functions from libc where this makes
- sense.
diff --git a/gcc/f/runtime/changes.netlib b/gcc/f/runtime/changes.netlib
deleted file mode 100644
index 1827154b591..00000000000
--- a/gcc/f/runtime/changes.netlib
+++ /dev/null
@@ -1,2841 +0,0 @@
-31 Aug. 1989:
- 1. A(min(i,j)) now is translated correctly (where A is an array).
- 2. 7 and 8 character variable names are allowed (but elicit a
- complaint under -ext).
- 3. LOGICAL*1 is treated as LOGICAL, with just one error message
- per LOGICAL*1 statement (rather than one per variable declared
- in that statement). [Note that LOGICAL*1 is not in Fortran 77.]
- Like f77, f2c now allows the format in a read or write statement
- to be an integer array.
-
-5 Sept. 1989:
- Fixed botch in argument passing of substrings of equivalenced
-variables.
-
-15 Sept. 1989:
- Warn about incorrect code generated when a character-valued
-function is not declared external and is passed as a parameter
-(in violation of the Fortran 77 standard) before it is invoked.
-Example:
-
- subroutine foo(a,b)
- character*10 a,b
- call goo(a,b)
- b = a(3)
- end
-
-18 Sept. 1989:
- Complain about overlapping initializations.
-
-20 Sept. 1989:
- Warn about names declared EXTERNAL but never referenced;
-include such names as externs in the generated C (even
-though most C compilers will discard them).
-
-24 Sept. 1989:
- New option -w8 to suppress complaint when COMMON or EQUIVALENCE
-forces word alignment of a double.
- Under -A (for ANSI C), ensure that floating constants (terminated
-by 'f') contain either a decimal point or an exponent field.
- Repair bugs sometimes encountered with CHAR and ICHAR intrinsic
-functions.
- Restore f77's optimizations for copying and comparing character
-strings of length 1.
- Always assume floating-point valued routines in libF77 return
-doubles, even under -R.
- Repair occasional omission of arguments in routines having multiple
-entry points.
- Repair bugs in computing offsets of character strings involved
-in EQUIVALENCE.
- Don't omit structure qualification when COMMON variables are used
-as FORMATs or internal files.
-
-2 Oct. 1989:
- Warn about variables that appear only in data stmts; don't emit them.
- Fix bugs in character DATA for noncharacter variables
-involved in EQUIVALENCE.
- Treat noncharacter variables initialized (at least partly) with
-character data as though they were equivalenced -- put out a struct
-and #define the variables. This eliminates the hideous and nonportable
-numeric values that were used to initialize such variables.
- Treat IMPLICIT NONE as IMPLICIT UNDEFINED(A-Z) .
- Quit when given invalid options.
-
-8 Oct. 1989:
- Modified naming scheme for generated intermediate variables;
-more are recycled, fewer distinct ones used.
- New option -W nn specifies nn characters/word for Hollerith
-data initializing non-character variables.
- Bug fix: x(i:min(i+10,j)) used to elicit "Can't handle opcode 31 yet".
- Integer expressions of the form (i+const1) - (i+const2), where
-i is a scalar integer variable, are now simplified to (const1-const2);
-this leads to simpler translation of some substring expressions.
- Initialize uninitialized portions of character string arrays to 0
-rather than to blanks.
-
-9 Oct. 1989:
- New option -c to insert comments showing original Fortran source.
- New option -g to insert line numbers of original Fortran source.
-
-10 Oct. 1989:
- ! recognized as in-line comment delimiter (a la Fortran 88).
-
-24 Oct. 1989:
- New options to ease coping with systems that want the structs
-that result from COMMON blocks to be defined just once:
- -E causes uninitialized COMMON blocks to be declared Extern;
-if Extern is undefined, f2c.h #defines it to be extern.
- -ec causes a separate .c file to be emitted for each
-uninitialized COMMON block: COMMON /ABC/ yields abc_com.c;
-thus one can compile *_com.c into a library to ensure
-precisely one definition.
- -e1c is similar to -ec, except that everything goes into
-one file, along with comments that give a sed script for
-splitting the file into the pieces that -ec would give.
-This is for use with netlib's "execute f2c" service (for which
--ec is coerced into -e1c, and the sed script will put everything
-but the COMMON definitions into f2c_out.c ).
-
-28 Oct. 1989:
- Convert "i = i op ..." into "i op= ...;" even when i is a
-dummy argument.
-
-13 Nov. 1989:
- Name integer constants (passed as arguments) c__... rather
-than c_... so
- common /c/stuff
- call foo(1)
- ...
-is translated correctly.
-
-19 Nov. 1989:
- Floating-point constants are now kept as strings unless they
-are involved in constant expressions that get simplified. The
-floating-point constants kept as strings can have arbitrarily
-many significant figures and a very large exponent field (as
-large as long int allows on the machine on which f2c runs).
-Thus, for example, the body of
-
- subroutine zot(x)
- double precision x(6), pi
- parameter (pi=3.1415926535897932384626433832795028841972)
- x(1) = pi
- x(2) = pi+1
- x(3) = 9287349823749272.7429874923740978492734D-298374
- x(4) = .89
- x(5) = 4.0005
- x(6) = 10D7
- end
-
-now gets translated into
-
- x[1] = 3.1415926535897932384626433832795028841972;
- x[2] = 4.1415926535897931;
- x[3] = 9.2873498237492727429874923740978492734e-298359;
- x[4] = (float).89;
- x[5] = (float)4.0005;
- x[6] = 1e8;
-
-rather than the former
-
- x[1] = 3.1415926535897931;
- x[2] = 4.1415926535897931;
- x[3] = 0.;
- x[4] = (float)0.89000000000000003;
- x[5] = (float)4.0004999999999997;
- x[6] = 100000000.;
-
- Recognition of f77 machine-constant intrinsics deleted, i.e.,
-epbase, epprec, epemin, epemax, eptiny, ephuge, epmrsp.
-
-22 Nov. 1989:
- Workarounds for glitches on some Sun systems...
- libf77: libF77/makefile modified to point out possible need
-to compile libF77/main.c with -Donexit=on_exit .
- libi77: libI77/wref.c (and libI77/README) modified so non-ANSI
-systems can compile with USE_STRLEN defined, which will cause
- sprintf(b = buf, "%#.*f", d, x);
- n = strlen(b) + d1;
-rather than
- n = sprintf(b = buf, "%#.*f", d, x) + d1;
-to be compiled.
-
-26 Nov. 1989:
- Longer names are now accepted (up to 50 characters); names may
-contain underscores (in which case they will have two underscores
-appended, to avoid clashes with library names).
-
-28 Nov. 1989:
- libi77 updated:
- 1. Allow 3 (or, on Crays, 4) digit exponents under format Ew.d .
- 2. Try to get things right on machines where ints have 16 bits.
-
-29 Nov. 1989:
- Supplied missing semicolon in parameterless subroutines that
-have multiple entry points (all of them parameterless).
-
-30 Nov. 1989:
- libf77 and libi77 revised to use types from f2c.h.
- f2c now types floating-point valued C library routines as "double"
-rather than "doublereal" (for use with nonstandard C compilers for
-which "double" is IEEE double extended).
-
-1 Dec. 1989:
- f2c.h updated to eliminate #defines rendered unnecessary (and,
-indeed, dangerous) by change of 26 Nov. to long names possibly
-containing underscores.
- libi77 further revised: yesterday's change omitted two tweaks to fmt.h
-(tweaks which only matter if float and real or double and doublereal are
-different types).
-
-2 Dec. 1989:
- Better error message (than "bad tag") for NAMELIST, which no longer
-inhibits C output.
-
-4 Dec. 1989:
- Allow capital letters in hex constants (f77 extension; e.g.,
-x'a012BCd', X'A012BCD' and x'a012bcd' are all treated as the integer
-167848909).
- libi77 further revised: lio.c lio.h lread.c wref.c wrtfmt.c tweaked
-again to allow float and real or double and doublereal to be different.
-
-6 Dec. 1989:
- Revised f2c.h -- required for the following...
- Simpler looking translations for abs, min, max, using #defines in
-revised f2c.h .
- libi77: more corrections to types; additions for NAMELIST.
- Corrected casts in some I/O calls.
- Translation of NAMELIST; libi77 must still be revised. Currently
-libi77 gives you a run-time error message if you attempt NAMELIST I/O.
-
-7 Dec. 1989:
- Fixed bug that prevented local integer variables that appear in DATA
-stmts from being ASSIGNed statement labels.
- Fillers (for DATA statements initializing EQUIVALENCEd variables and
-variables in COMMON) typed integer rather than doublereal (for slightly
-more portability, e.g. to Crays).
- libi77: missing return values supplied in a few places; some tests
-reordered for better working on the Cray.
- libf77: better accuracy for complex divide, complex square root,
-real mod function (casts to double; double temporaries).
-
-9 Dec. 1989:
- Fixed bug that caused needless (albeit harmless) empty lines to be
-inserted in the C output when a comment line contained trailing blanks.
- Further tweak to type of fillers: allow doublereal fillers if the
-struct has doublereal data.
-
-11 Dec. 1989:
- Alteration of rule for producing external (C) names from names that
-contain underscores. Now the external name is always obtained by
-appending a pair of underscores.
-
-12 Dec. 1989:
- C production inhibited after most errors.
-
-15 Dec. 1989:
- Fixed bug in headers for subroutines having two or more character
-strings arguments: the length arguments were reversed.
-
-19 Dec. 1989:
- f2c.h libf77 libi77: adjusted so #undefs in f2c.h should not foil
-compilation of libF77 and libI77.
- libf77: getenv_ adjusted to work with unsorted environments.
- libi77: the iostat= specifier should now work right with internal I/O.
-
-20 Dec. 1989:
- f2c bugs fixed: In the absence of an err= specifier, the iostat=
-specifier was generally set wrong. Character strings containing
-explicit nulls (\0) were truncated at the first null.
- Unlabeled DO loops recognized; must be terminated by ENDDO.
-(Don't ask for CYCLE, EXIT, named DO loops, or DO WHILE.)
-
-29 Dec. 1989:
- Nested unlabeled DO loops now handled properly; new warning for
-extraneous text at end of FORMAT.
-
-30 Dec. 1989:
- Fixed bug in translating dble(real(...)), dble(sngl(...)), and
-dble(float(...)), where ... is either of type double complex or
-is an expression requiring assignment to intermediate variables (e.g.,
-dble(real(foo(x+1))), where foo is a function and x is a variable).
-Regard nonblank label fields on continuation lines as an error.
-
-3 Jan. 1990:
- New option -C++ yields output that should be understood
-by C++ compilers.
-
-6 Jan. 1989:
- -a now excludes variables that appear in a namelist from those
-that it makes automatic. (As before, it also excludes variables
-that appear in a common, data, equivalence, or save statement.)
- The syntactically correct Fortran
- read(*,i) x
- end
-now yields syntactically correct C (even though both the Fortran
-and C are buggy -- no FORMAT has not been ASSIGNed to i).
-
-7 Jan. 1990:
- libi77: routines supporting NAMELIST added. Surrounding quotes
-made optional when no ambiguity arises in a list or namelist READ
-of a character-string value.
-
-9 Jan. 1990:
- f2c.src made available.
-
-16 Jan. 1990:
- New options -P to produce ANSI C or C++ prototypes for procedures
-defined. Change to -A and -C++: f2c tries to infer prototypes for
-invoked procedures unless the new -!P option is given. New warning
-messages for inconsistent calling sequences among procedures within
-a single file. Most of f2c/src is affected.
- f2c.h: typedefs for procedure arguments added; netlib's f2c service
-will insert appropriate typedefs for use with older versions of f2c.h.
-
-17 Jan. 1990:
- f2c/src: defs.h exec.c format.c proc.c putpcc.c version.c xsum0.out
-updated. Castargs and protofile made extern in defs.h; exec.c
-modified so superfluous else clauses are diagnosed; unused variables
-omitted from declarations in format.c proc.c putpcc.c .
-
-21 Jan. 1990:
- No C emitted for procedures declared external but not referenced.
- f2c.h: more new types added for use with -P.
- New feature: f2c accepts as arguments files ending in .p or .P;
-such files are assumed to be prototype files, such as produced by
-the -P option. All prototype files are read before any Fortran files
-and apply globally to all Fortran files. Suitable prototypes help f2c
-warn about calling-sequence errors and can tell f2c how to type
-procedures declared external but not explicitly typed; the latter is
-mainly of interest for users of the -A and -C++ options. (Prototype
-arguments are not available to netlib's "execute f2c" service.)
- New option -it tells f2c to try to infer types of untyped external
-arguments from their use as parameters to prototyped or previously
-defined procedures.
- f2c/src: many minor cleanups; most modules changed. Individual
-files in f2c/src are now in "bundle" format. The former f2c.1 is
-now f2c.1t; "f2c.1t from f2c" and "f2c.1t from f2c/src" are now the
-same, as are "f2c.1 from f2c" and "f2c.1 from f2c/src". People who
-do not obtain a new copy of "all from f2c/src" should at least add
- fclose(sortfp);
-after the call on do_init_data(outfile, sortfp) in format_data.c .
-
-22 Jan. 1990:
- Cleaner man page wording (thanks to Doug McIlroy).
- -it now also applies to all untyped EXTERNAL procedures, not just
-arguments.
-
-23 Jan. 01:34:00 EST 1990:
- Bug fixes: under -A and -C++, incorrect C was generated for
-subroutines having multiple entries but no arguments.
- Under -A -P, subroutines of no arguments were given prototype
-calling sequence () rather than (void).
- Character-valued functions elicited erroneous warning messages
-about inconsistent calling sequences when referenced by another
-procedure in the same file.
- f2c.1t: omit first appearance of libF77.a in FILES section;
-load order of libraries is -lF77 -lI77, not vice versa (bug
-introduced in yesterday's edits); define .F macro for those whose
--man lacks it. (For a while after yesterday's fixes were posted,
-f2c.1t was out of date. Sorry!)
-
-23 Jan. 9:53:24 EST 1990:
- Character substring expressions involving function calls having
-character arguments (including the intrinsic len function) yielded
-incorrect C.
- Procedures defined after invocation (in the same file) with
-conflicting argument types also got an erroneous message about
-the wrong number of arguments.
-
-24 Jan. 11:44:00 EST 1990:
- Bug fixes: -p omitted #undefs; COMMON block names containing
-underscores had their C names incorrectly computed; a COMMON block
-having the name of a previously defined procedure wreaked havoc;
-if all arguments were .P files, f2c tried reading the second as a
-Fortran file.
- New feature: -P emits comments showing COMMON block lengths, so one
-can get warnings of incompatible COMMON block lengths by having f2c
-read .P (or .p) files. Now by running f2c twice, first with -P -!c
-(or -P!c), then with *.P among the arguments, you can be warned of
-inconsistent COMMON usage, and COMMON blocks having inconsistent
-lengths will be given the maximum length. (The latter always did
-happen within each input file; now -P lets you extend this behavior
-across files.)
-
-26 Jan. 16:44:00 EST 1990:
- Option -it made less aggressive: untyped external procedures that
-are invoked are now typed by the rules of Fortran, rather than by
-previous use of procedures to which they are passed as arguments
-before being invoked.
- Option -P now includes information about references, i.e., called
-procedures, in the prototype files (in the form of special comments).
-This allows iterative invocations of f2c to infer more about untyped
-external names, particularly when multiple Fortran files are involved.
- As usual, there are some obscure bug fixes:
-1. Repair of erroneous warning messages about inconsistent number of
-arguments that arose when a character dummy parameter was discovered
-to be a function or when multiple entry points involved character
-variables appearing in a previous entry point.
-2. Repair of memory fault after error msg about "adjustable character
-function".
-3. Under -U, allow MAIN_ as a subroutine name (in the same file as a
-main program).
-4. Change for consistency: a known function invoked as a subroutine,
-then as a function elicits a warning rather than an error.
-
-26 Jan. 22:32:00 EST 1990:
- Fixed two bugs that resulted in incorrect C for substrings, within
-the body of a character-valued function, of the function's name, when
-those substrings were arguments to another function (even implicitly,
-as in character-string assignment).
-
-28 Jan. 18:32:00 EST 1990:
- libf77, libi77: checksum files added; "make check" looks for
-transmission errors. NAMELIST read modified to allow $ rather than &
-to precede a namelist name, to allow $ rather than / to terminate
-input where the name of another variable would otherwise be expected,
-and to regard all nonprinting ASCII characters <= ' ' as spaces.
-
-29 Jan. 02:11:00 EST 1990:
- "fc from f2c" added.
- -it option made the default; -!it turns it off. Type information is
-now updated in a previously missed case.
- -P option tweaked again; message about when rerunning f2c may change
-prototypes or declarations made more accurate.
- New option -Ps implies -P and returns exit status 4 if rerunning
-f2c -P with prototype inputs might change prototypes or declarations.
-Now you can execute a crude script like
-
- cat *.f >zap.F
- rm -f zap.P
- while :; do
- f2c -Ps -!c zap.[FP]
- case $? in 4) ;; *) break;; esac
- done
-
-to get a file zap.P of the best prototypes f2c can determine for *.f .
-
-Jan. 29 07:30:21 EST 1990:
- Forgot to check for error status when setting return code 4 under -Ps;
-error status (1, 2, 3, or, for caught signal, 126) now takes precedence.
-
-Jan 29 14:17:00 EST 1990:
- Incorrect handling of
- open(n,'filename')
-repaired -- now treated as
- open(n,file='filename')
-(and, under -ext, given an error message).
- New optional source file memset.c for people whose systems don't
-provide memset, memcmp, and memcpy; #include <string.h> in mem.c
-changed to #include "string.h" so BSD people can create a local
-string.h that simply says #include <strings.h> .
-
-Jan 30 10:34:00 EST 1990:
- Fix erroneous warning at end of definition of a procedure with
-character arguments when the procedure had previously been called with
-a numeric argument instead of a character argument. (There were two
-warnings, the second one incorrectly complaining of a wrong number of
-arguments.)
-
-Jan 30 16:29:41 EST 1990:
- Fix case where -P and -Ps erroneously reported another iteration
-necessary. (Only harm is the extra iteration.)
-
-Feb 3 01:40:00 EST 1990:
- Supply semicolon occasionally omitted under -c .
- Try to force correct alignment when numeric variables are initialized
-with character data (a non-standard and non-portable practice). You
-must use the -W option if your code has such data statements and is
-meant to run on a machine with other than 4 characters/word; e.g., for
-code meant to run on a Cray, you would specify -W8 .
- Allow parentheses around expressions in output lists (in write and
-print statements).
- Rename source files so their names are <= 12 characters long
-(so there's room to append .Z and still have <= 14 characters);
-renamed files: formatdata.c niceprintf.c niceprintf.h safstrncpy.c .
- f2c material made available by anonymous ftp from research.att.com
-(look in dist/f2c ).
-
-Feb 3 03:49:00 EST 1990:
- Repair memory fault that arose from use (in an assignment or
-call) of a non-argument variable declared CHARACTER*(*).
-
-Feb 9 01:35:43 EST 1990:
- Fix erroneous error msg about bad types in
- subroutine foo(a,adim)
- dimension a(adim)
- integer adim
- Fix improper passing of character args (and possible memory fault)
-in the expression part of a computed goto.
- Fix botched calling sequences in array references involving
-functions having character args.
- Fix memory fault caused by invocation of character-valued functions
-of no arguments.
- Fix botched calling sequence of a character*1-valued function
-assigned to a character*1 variable.
- Fix bug in error msg for inconsistent number of args in prototypes.
- Allow generation of C output despite inconsistencies in prototypes,
-but give exit code 8.
- Simplify include logic (by removing some bogus logic); never
-prepend "/usr/include/" to file names.
- Minor cleanups (that should produce no visible change in f2c's
-behavior) in intr.c parse.h main.c defs.h formatdata.c p1output.c .
-
-Feb 10 00:19:38 EST 1990:
- Insert (integer) casts when floating-point expressions are used
-as subscripts.
- Make SAVE stmt (with no variable list) override -a .
- Minor cleanups: change field to Field in struct Addrblock (for the
-benefit of buggy C compilers); omit system("/bin/cp ...") in misc.c .
-
-Feb 13 00:39:00 EST 1990:
- Error msg fix in gram.dcl: change "cannot make %s parameter"
-to "cannot make into parameter".
-
-Feb 14 14:02:00 EST 1990:
- Various cleanups (invisible on systems with 4-byte ints), thanks
-to Dave Regan: vaxx.c eliminated; %d changed to %ld various places;
-external names adjusted for the benefit of stupid systems (that ignore
-case and recognize only 6 significant characters in external names);
-buffer shortened in xsum.c (e.g. for MS-DOS); fopen modes distinguish
-text and binary files; several unused functions eliminated; missing
-arg supplied to an unlikely fatalstr invocation.
-
-Thu Feb 15 19:15:53 EST 1990:
- More cleanups (invisible on systems with 4 byte ints); casts inserted
-so most complaints from cyntax(1) and lint(1) go away; a few (int)
-versus (long) casts corrected.
-
-Fri Feb 16 19:55:00 EST 1990:
- Recognize and translate unnamed Fortran 8x do while statements.
- Fix bug that occasionally caused improper breaking of character
-strings.
- New error message for attempts to provide DATA in a type-declaration
-statement.
-
-Sat Feb 17 11:43:00 EST 1990:
- Fix infinite loop clf -> Fatal -> done -> clf after I/O error.
- Change "if (addrp->vclass = CLPROC)" to "if (addrp->vclass == CLPROC)"
-in p1_addr (in p1output.c); this was probably harmless.
- Move a misplaced } in lex.c (which slowed initkey()).
- Thanks to Gary Word for pointing these things out.
-
-Sun Feb 18 18:07:00 EST 1990:
- Detect overlapping initializations of arrays and scalar variables
-in previously missed cases.
- Treat logical*2 as logical (after issuing a warning).
- Don't pass string literals to p1_comment().
- Correct a cast (introduced 16 Feb.) in gram.expr; this matters e.g.
-on a Cray.
- Attempt to isolate UNIX-specific things in sysdep.c (a new source
-file). Unless sysdep.c is compiled with SYSTEM_SORT defined, the
-intermediate files created for DATA statements are now sorted in-core
-without invoking system().
-
-Tue Feb 20 16:10:35 EST 1990:
- Move definition of binread and binwrite from init.c to sysdep.c .
- Recognize Fortran 8x tokens < <= == >= > <> as synonyms for
-.LT. .LE. .EQ. .GE. .GT. .NE.
- Minor cleanup in putpcc.c: fully remove simoffset().
- More discussion of system dependencies added to libI77/README.
-
-Tue Feb 20 21:44:07 EST 1990:
- Minor cleanups for the benefit of EBCDIC machines -- try to remove
-the assumption that 'a' through 'z' are contiguous. (Thanks again to
-Gary Word.) Also, change log2 to log_2 (shouldn't be necessary).
-
-Wed Feb 21 06:24:56 EST 1990:
- Fix botch in init.c introduced in previous change; only matters
-to non-ASCII machines.
-
-Thu Feb 22 17:29:12 EST 1990:
- Allow several entry points to mention the same array. Protect
-parameter adjustments with if's (for the case that an array is not
-an argument to all entrypoints).
- Under -u, allow
- subroutine foo(x,n)
- real x(n)
- integer n
- Compute intermediate variables used to evaluate dimension expressions
-at the right time. Example previously mistranslated:
- subroutine foo(x,k,m,n)
- real x(min(k,m,n))
- ...
- write(*,*) x
- Detect duplicate arguments. (The error msg points to the first
-executable stmt -- not wonderful, but not worth fixing.)
- Minor cleanup of min/max computation (sometimes slightly simpler).
-
-Sun Feb 25 09:39:01 EST 1990:
- Minor tweak to multiple entry points: protect parameter adjustments
-with if's only for (array) args that do not appear in all entry points.
- Minor tweaks to format.c and io.c (invisible unless your compiler
-complained at the duplicate #defines of IOSUNIT and IOSFMT or at
-comparisons of p1gets(...) with NULL).
-
-Sun Feb 25 18:40:10 EST 1990:
- Fix bug introduced Feb. 22: if a subprogram contained DATA and the
-first executable statement was labeled, then the label got lost.
-(Just change INEXEC to INDATA in p1output.c; it occurs just once.)
-
-Mon Feb 26 17:45:10 EST 1990:
- Fix bug in handling of " and ' in comments.
-
-Wed Mar 28 01:43:06 EST 1990:
-libI77:
- 1. Repair nasty I/O bug: opening two files and closing the first
-(after possibly reading or writing it), then writing the second caused
-the last buffer of the second to be lost.
- 2. Formatted reads of logical values treated all letters other than
-t or T as f (false).
- libI77 files changed: err.c rdfmt.c Version.c
- (Request "libi77 from f2c" -- you can't get these files individually.)
-
-f2c itself:
- Repair nasty bug in translation of
- ELSE IF (condition involving complicated abs, min, or max)
--- auxiliary statements were emitted at the wrong place.
- Supply semicolon previously omitted from the translation of a label
-(of a CONTINUE) immediately preceding an ELSE IF or an ELSE. This
-bug made f2c produce invalid C.
- Correct a memory fault that occurred (on some machines) when the
-error message "adjustable dimension on non-argument" should be given.
- Minor tweaks to remove some harmless warnings by overly chatty C
-compilers.
- Argument arays having constant dimensions but a variable lower bound
-(e.g., x(n+1:n+3)) had a * omitted from scalar arguments involved in
-the array offset computation.
-
-Wed Mar 28 18:47:59 EST 1990:
-libf77: add exit(0) to end of main [return(0) encounters a Cray bug]
-
-Sun Apr 1 16:20:58 EDT 1990:
- Avoid dereferencing null when processing equivalences after an error.
-
-Fri Apr 6 08:29:49 EDT 1990:
- Calls involving alternate return specifiers omitted processing
-needed for things like min, max, abs, and // (concatenation).
- INTEGER*2 PARAMETERs were treated as INTEGER*4.
- Convert some O(n^2) parsing to O(n).
-
-Tue Apr 10 20:07:02 EDT 1990:
- When inconsistent calling sequences involve differing numbers of
-arguments, report the first differing argument rather than the numbers
-of arguments.
- Fix bug under -a: formatted I/O in which either the unit or the
-format was a local character variable sometimes resulted in invalid C
-(a static struct initialized with an automatic component).
- Improve error message for invalid flag after elided -.
- Complain when literal table overflows, rather than infinitely
-looping. (The complaint mentions the new and otherwise undocumented
--NL option for specifying a larger literal table.)
- New option -h for forcing strings to word (or, with -hd, double-word)
-boundaries where possible.
- Repair a bug that could cause improper splitting of strings.
- Fix bug (cast of c to doublereal) in
- subroutine foo(c,r)
- double complex c
- double precision r
- c = cmplx(r,real(c))
- end
- New include file "sysdep.h" has some things from defs.h (and
-elsewhere) that one may need to modify on some systems.
- Some large arrays that were previously statically allocated are now
-dynamically allocated when f2c starts running.
- f2c/src files changed:
- README cds.c defs.h f2c.1 f2c.1t format.c formatdata.c init.c
- io.c lex.c main.c makefile mem.c misc.c names.c niceprintf.c
- output.c parse_args.c pread.c put.c putpcc.c sysdep.h
- version.c xsum0.out
-
-Wed Apr 11 18:27:12 EDT 1990:
- Fix bug in argument consistency checking of character, complex, and
-double complex valued functions. If the same source file contained a
-definition of such a function with arguments not explicitly typed,
-then subsequent references to the function might get erroneous
-warnings of inconsistent calling sequences.
- Tweaks to sysdep.h for partially ANSI systems.
- New options -kr and -krd cause f2c to use temporary variables to
-enforce Fortran evaluation-order rules with pernicious, old-style C
-compilers that apply the associative law to floating-point operations.
-
-Sat Apr 14 15:50:15 EDT 1990:
- libi77: libI77 adjusted to allow list-directed and namelist I/O
-of internal files; bug in namelist I/O of logical and character arrays
-fixed; list input of complex numbers adjusted to permit d or D to
-denote the start of the exponent field of a component.
- f2c itself: fix bug in handling complicated lower-bound
-expressions for character substrings; e.g., min and max did not work
-right, nor did function invocations involving character arguments.
- Switch to octal notation, rather than hexadecimal, for nonprinting
-characters in character and string constants.
- Fix bug (when neither -A nor -C++ was specified) in typing of
-external arguments of type complex, double complex, or character:
- subroutine foo(c)
- external c
- complex c
-now results in
- /* Complex */ int (*c) ();
-(as, indeed, it once did) rather than
- complex (*c) ();
-
-Sat Apr 14 22:50:39 EDT 1990:
- libI77/makefile: updated "make check" to omit lio.c
- lib[FI]77/makefile: trivial change: define CC = cc, reference $(CC).
- (Request, e.g., "libi77 from f2c" -- you can't ask for individual
-files from lib[FI]77.)
-
-Wed Apr 18 00:56:37 EDT 1990:
- Move declaration of atof() from defs.h to sysdep.h, where it is
-now not declared if stdlib.h is included. (NeXT's stdlib.h has a
-#define atof that otherwise wreaks havoc.)
- Under -u, provide a more intelligible error message (than "bad tag")
-for an attempt to define a function without specifying its type.
-
-Wed Apr 18 17:26:27 EDT 1990:
- Recognize \v (vertical tab) in Hollerith as well as quoted strings;
-add recognition of \r (carriage return).
- New option -!bs turns off recognition of escapes in character strings
-(\0, \\, \b, \f, \n, \r, \t, \v).
- Move to sysdep.c initialization of some arrays whose initialization
-assumed ASCII; #define Table_size in sysdep.h rather than using
-hard-coded 256 in allocating arrays of size 1 << (bits/byte).
-
-Thu Apr 19 08:13:21 EDT 1990:
- Warn when escapes would make Hollerith extend beyond statement end.
- Omit max() definition from misc.c (should be invisible except on
-systems that erroneously #define max in stdlib.h).
-
-Mon Apr 23 22:24:51 EDT 1990:
- When producing default-style C (no -A or -C++), cast switch
-expressions to (int).
- Move "-lF77 -lI77 -lm -lc" to link_msg, defined in sysdep.c .
- Add #define scrub(x) to sysdep.h, with invocations in format.c and
-formatdata.c, so that people who have systems like VMS that would
-otherwise create multiple versions of intermediate files can
-#define scrub(x) unlink(x)
-
-Tue Apr 24 18:28:36 EDT 1990:
- Pass string lengths once rather than twice to a function of character
-arguments involved in comparison of character strings of length 1.
-
-Fri Apr 27 13:11:52 EDT 1990:
- Fix bug that made f2c gag on concatenations involving char(...) on
-some systems.
-
-Sat Apr 28 23:20:16 EDT 1990:
- Fix control-stack bug in
- if(...) then
- else if (complicated condition)
- else
- endif
-(where the complicated condition causes assignment to an auxiliary
-variable, e.g., max(a*b,c)).
-
-Mon Apr 30 13:30:10 EDT 1990:
- Change fillers for DATA with holes from substructures to arrays
-(in an attempt to make things work right with C compilers that have
-funny padding rules for substructures, e.g., Sun C compilers).
- Minor cleanup of exec.c (should not affect generated C).
-
-Mon Apr 30 23:13:51 EDT 1990:
- Fix bug in handling return values of functions having multiple
-entry points of differing return types.
-
-Sat May 5 01:45:18 EDT 1990:
- Fix type inference bug in
- subroutine foo(x)
- call goo(x)
- end
- subroutine goo(i)
- i = 3
- end
-Instead of warning of inconsistent calling sequences for goo,
-f2c was simply making i a real variable; now i is correctly
-typed as an integer variable, and f2c issues an error message.
- Adjust error messages issued at end of declarations so they
-don't blame the first executable statement.
-
-Sun May 6 01:29:07 EDT 1990:
- Fix bug in -P and -Ps: warn when the definition of a subprogram adds
-information that would change prototypes or previous declarations.
-
-Thu May 10 18:09:15 EDT 1990:
- Fix further obscure bug with (default) -it: inconsistent calling
-sequences and I/O statements could interact to cause a memory fault.
-Example:
- SUBROUTINE FOO
- CALL GOO(' Something') ! Forgot integer first arg
- END
- SUBROUTINE GOO(IUNIT,MSG)
- CHARACTER*(*)MSG
- WRITE(IUNIT,'(1X,A)') MSG
- END
-
-Fri May 11 16:49:11 EDT 1990:
- Under -!c, do not delete any .c files (when there are errors).
- Avoid dereferencing 0 when a fatal error occurs while reading
-Fortran on stdin.
-
-Wed May 16 18:24:42 EDT 1990:
- f2c.ps made available.
-
-Mon Jun 4 12:53:08 EDT 1990:
- Diagnose I/O units of invalid type.
- Add specific error msg about dummy arguments in common.
-
-Wed Jun 13 12:43:17 EDT 1990:
- Under -A, supply a missing "[1]" for CHARACTER*1 variables that appear
-both in a DATA statement and in either COMMON or EQUIVALENCE.
-
-Mon Jun 18 16:58:31 EDT 1990:
- Trivial updates to f2c.ps . ("Fortran 8x" --> "Fortran 90"; omit
-"(draft)" from "(draft) ANSI C".)
-
-Tue Jun 19 07:36:32 EDT 1990:
- Fix incorrect code generated for ELSE IF(expression involving
-function call passing non-constant substring).
- Under -h, preserve the property that strings are null-terminated
-where possible.
- Remove spaces between # and define in lex.c output.c parse.h .
-
-Mon Jun 25 07:22:59 EDT 1990:
- Minor tweak to makefile to reduce unnecessary recompilations.
-
-Tue Jun 26 11:49:53 EDT 1990:
- Fix unintended truncation of some integer constants on machines
-where casting a long to (int) may change the value. E.g., when f2c
-ran on machines with 16-bit ints, "i = 99999" was being translated
-to "i = -31073;".
-
-Wed Jun 27 11:05:32 EDT 1990:
- Arrange for CHARACTER-valued PARAMETERs to honor their length
-specifications. Allow CHAR(nn) in expressions defining such PARAMETERs.
-
-Fri Jul 20 09:17:30 EDT 1990:
- Avoid dereferencing 0 when a FORMAT statement has no label.
-
-Thu Jul 26 11:09:39 EDT 1990:
- Remarks about VOID and binread,binwrite added to README.
- Tweaks to parse_args: should be invisible unless your compiler
-complained at (short)*store.
-
-Thu Aug 2 02:07:58 EDT 1990:
- f2c.ps: change the first line of page 5 from
- include stuff
-to
- include 'stuff'
-
-Tue Aug 14 13:21:24 EDT 1990:
- libi77: libI77 adjusted to treat tabs as spaces in list input.
-
-Fri Aug 17 07:24:53 EDT 1990:
- libi77: libI77 adjusted so a blank='ZERO' clause (upper case Z)
-in an open of a currently open file works right.
-
-Tue Aug 28 01:56:44 EDT 1990:
- Fix bug in warnings of inconsistent calling sequences: if an
-argument to a subprogram was never referenced, then a previous
-invocation of the subprogram (in the same source file) that
-passed something of the wrong type for that argument did not
-elicit a warning message.
-
-Thu Aug 30 09:46:12 EDT 1990:
- libi77: prevent embedded blanks in list output of complex values;
-omit exponent field in list output of values of magnitude between
-10 and 1e8; prevent writing stdin and reading stdout or stderr;
-don't close stdin, stdout, or stderr when reopening units 5, 6, 0.
-
-Tue Sep 4 12:30:57 EDT 1990:
- Fix bug in C emitted under -I2 or -i2 for INTEGER*4 FUNCTION.
- Warn of missing final END even if there are previous errors.
-
-Fri Sep 7 13:55:34 EDT 1990:
- Remark about "make xsum.out" and "make f2c" added to README.
-
-Tue Sep 18 23:50:01 EDT 1990:
- Fix null dereference (and, on some systems, writing of bogus *_com.c
-files) under -ec or -e1c when a prototype file (*.p or *.P) describes
-COMMON blocks that do not appear in the Fortran source.
- libi77:
- Add some #ifdef lines (#ifdef MSDOS, #ifndef MSDOS) to avoid
-references to stat and fstat on non-UNIX systems.
- On UNIX systems, add component udev to unit; decide that old
-and new files are the same iff both the uinode and udev components
-of unit agree.
- When an open stmt specifies STATUS='OLD', use stat rather than
-access (on UNIX systems) to check the existence of the file (in case
-directories leading to the file have funny permissions and this is
-a setuid or setgid program).
-
-Thu Sep 27 16:04:09 EDT 1990:
- Supply missing entry for Impldoblock in blksize array of cpexpr
-(in expr.c). No examples are known where this omission caused trouble.
-
-Tue Oct 2 22:58:09 EDT 1990:
- libf77: test signal(...) == SIG_IGN rather than & 01 in main().
- libi77: adjust rewind.c so two successive rewinds after a write
-don't clobber the file.
-
-Thu Oct 11 18:00:14 EDT 1990:
- libi77: minor cleanups: add #include "fcntl.h" to endfile.c, err.c,
-open.c; adjust g_char in util.c for segmented memories; in f_inqu
-(inquire.c), define x appropriately when MSDOS is defined.
-
-Mon Oct 15 20:02:11 EDT 1990:
- Add #ifdef MSDOS pointer adjustments to mem.c; treat NAME= as a
-synonym for FILE= in OPEN statements.
-
-Wed Oct 17 16:40:37 EDT 1990:
- libf77, libi77: minor cleanups: _cleanup() and abort() invocations
-replaced by invocations of sig_die in main.c; some error messages
-previously lost in buffers will now appear.
-
-Mon Oct 22 16:11:27 EDT 1990:
- libf77: separate sig_die from main (for folks who don't want to use
-the main in libF77).
- libi77: minor tweak to comments in README.
-
-Fri Nov 2 13:49:35 EST 1990:
- Use two underscores rather than one in generated temporary variable
-names to avoid conflict with COMMON names. f2c.ps updated to reflect
-this change and the NAME= extension introduced 15 Oct.
- Repair a rare memory fault in io.c .
-
-Mon Nov 5 16:43:55 EST 1990:
- libi77: changes to open.c (and err.c): complain if an open stmt
-specifies new= and the file already exists (as specified by Fortrans 77
-and 90); allow file= to be omitted in open stmts and allow
-status='replace' (Fortran 90 extensions).
-
-Fri Nov 30 10:10:14 EST 1990:
- Adjust malloc.c for unusual systems whose sbrk() can return values
-not properly aligned for doubles.
- Arrange for slightly more helpful and less repetitive warnings for
-non-character variables initialized with character data; these warnings
-are (still) suppressed by -w66.
-
-Fri Nov 30 15:57:59 EST 1990:
- Minor tweak to README (about changing VOID in f2c.h).
-
-Mon Dec 3 07:36:20 EST 1990:
- Fix spelling of "character" in f2c.1t.
-
-Tue Dec 4 09:48:56 EST 1990:
- Remark about link_msg and libf2c added to f2c/README.
-
-Thu Dec 6 08:33:24 EST 1990:
- Under -U, render label nnn as L_nnn rather than Lnnn.
-
-Fri Dec 7 18:05:00 EST 1990:
- Add more names from f2c.h (e.g. integer, real) to the c_keywords
-list of names to which an underscore is appended to avoid confusion.
-
-Mon Dec 10 19:11:15 EST 1990:
- Minor tweaks to makefile (./xsum) and README (binread/binwrite).
- libi77: a few modifications for POSIX systems; meant to be invisible
-elsewhere.
-
-Sun Dec 16 23:03:16 EST 1990:
- Fix null dereference caused by unusual erroneous input, e.g.
- call foo('abc')
- end
- subroutine foo(msg)
- data n/3/
- character*(*) msg
- end
-(Subroutine foo is illegal because the character statement comes after a
-data statement.)
- Use decimal rather than hex constants in xsum.c (to prevent
-erroneous warning messages about constant overflow).
-
-Mon Dec 17 12:26:40 EST 1990:
- Fix rare extra underscore in character length parameters passed
-for multiple entry points.
-
-Wed Dec 19 17:19:26 EST 1990:
- Allow generation of C despite error messages about bad alignment
-forced by equivalence.
- Allow variable-length concatenations in I/O statements, such as
- open(3, file=bletch(1:n) // '.xyz')
-
-Fri Dec 28 17:08:30 EST 1990:
- Fix bug under -p with formats and internal I/O "units" in COMMON,
-as in
- COMMON /FIGLEA/F
- CHARACTER*20 F
- F = '(A)'
- WRITE (*,FMT=F) 'Hello, world!'
- END
-
-Tue Jan 15 12:00:24 EST 1991:
- Fix bug when two equivalence groups are merged, the second with
-nonzero offset, and the result is then merged into a common block.
-Example:
- INTEGER W(3), X(3), Y(3), Z(3)
- COMMON /ZOT/ Z
- EQUIVALENCE (W(1),X(1)), (X(2),Y(1)), (Z(3),X(1))
-***** W WAS GIVEN THE WRONG OFFSET
- Recognize Fortran 90's optional NML= in NAMELIST READs and WRITEs.
-(Currently NML= and FMT= are treated as synonyms -- there's no
-error message if, e.g., NML= specifies a format.)
- libi77: minor adjustment to allow internal READs from character
-string constants in read-only memory.
-
-Fri Jan 18 22:56:15 EST 1991:
- Add comment to README about needing to comment out the typedef of
-size_t in sysdep.h on some systems, e.g. Sun 4.1.
- Fix misspelling of "statement" in an error message in lex.c
-
-Wed Jan 23 00:38:48 EST 1991:
- Allow hex, octal, and binary constants to have the qualifying letter
-(z, x, o, or b) either before or after the quoted string containing the
-digits. For now this change will not be reflected in f2c.ps .
-
-Tue Jan 29 16:23:45 EST 1991:
- Arrange for character-valued statement functions to give results of
-the right length (that of the statement function's name).
-
-Wed Jan 30 07:05:32 EST 1991:
- More tweaks for character-valued statement functions: an error
-check and an adjustment so a right-hand side of nonconstant length
-(e.g., a substring) is handled right.
-
-Wed Jan 30 09:49:36 EST 1991:
- Fix p1_head to avoid printing (char *)0 with %s.
-
-Thu Jan 31 13:53:44 EST 1991:
- Add a test after the cleanup call generated for I/O statements with
-ERR= or END= clauses to catch the unlikely event that the cleanup
-routine encounters an error.
-
-Mon Feb 4 08:00:58 EST 1991:
- Minor cleanup: omit unneeded jumps and labels from code generated for
-some NAMELIST READs and WRITEs with IOSTAT=, ERR=, and/or END=.
-
-Tue Feb 5 01:39:36 EST 1991:
- Change Mktemp to mktmp (for the benefit of systems so brain-damaged
-that they do not distinguish case in external names -- and that for
-some reason want to load mktemp). Try to get xsum0.out right this
-time (it somehow didn't get updated on 4 Feb. 1991).
- Add note to libi77/README about adjusting the interpretation of
-RECL= specifiers in OPENs for direct unformatted I/O.
-
-Thu Feb 7 17:24:42 EST 1991:
- New option -r casts values of REAL functions, including intrinsics,
-to REAL. This only matters for unportable code like
- real r
- r = asin(1.)
- if (r .eq. asin(1.)) ...
-[The behavior of such code varies with the Fortran compiler used --
-and sometimes is affected by compiler options.] For now, the man page
-at the end of f2c.ps is the only part of f2c.ps that reflects this new
-option.
-
-Fri Feb 8 18:12:51 EST 1991:
- Cast pointer differences passed as arguments to the appropriate type.
-This matters, e.g., with MSDOS compilers that yield a long pointer
-difference but have int == short.
- Disallow nonpositive dimensions.
-
-Fri Feb 15 12:24:15 EST 1991:
- Change %d to %ld in sprintf call in putpower in putpcc.c.
- Free more memory (e.g. allowing translation of larger Fortran
-files under MS-DOS).
- Recognize READ (character expression) and WRITE (character expression)
-as formatted I/O with the format given by the character expression.
- Update year in Notice.
-
-Sat Feb 16 00:42:32 EST 1991:
- Recant recognizing WRITE(character expression) as formatted output
--- Fortran 77 is not symmetric in its syntax for READ and WRITE.
-
-Mon Mar 4 15:19:42 EST 1991:
- Fix bug in passing the real part of a complex argument to an intrinsic
-function. Omit unneeded parentheses in nested calls to intrinsics.
-Example:
- subroutine foo(x, y)
- complex y
- x = exp(sin(real(y))) + exp(imag(y))
- end
-
-Fri Mar 8 15:05:42 EST 1991:
- Fix a comment in expr.c; omit safstrncpy.c (which had bugs in
-cases not used by f2c).
-
-Wed Mar 13 02:27:23 EST 1991:
- Initialize firstmemblock->next in mem_init in mem.c . [On most
-systems it was fortuituously 0, but with System V, -lmalloc could
-trip on this missed initialization.]
-
-Wed Mar 13 11:47:42 EST 1991:
- Fix a reference to freed memory.
-
-Wed Mar 27 00:42:19 EST 1991:
- Fix a memory fault caused by such illegal Fortran as
- function foo
- x = 3
- logical foo ! declaration among executables
- foo=.false. ! used to suffer memory fault
- end
-
-Fri Apr 5 08:30:31 EST 1991:
- Fix loss of % in some format expressions, e.g.
- write(*,'(1h%)')
- Fix botch introduced 27 March 1991 that caused subroutines with
-multiple entry points to have extraneous declarations of ret_val.
-
-Fri Apr 5 12:44:02 EST 1991
- Try again to omit extraneous ret_val declarations -- this morning's
-fix was sometimes wrong.
-
-Mon Apr 8 13:47:06 EDT 1991:
- Arrange for s_rnge to have the right prototype under -A -C .
-
-Wed Apr 17 13:36:03 EDT 1991:
- New fatal error message for apparent invocation of a recursive
-statement function.
-
-Thu Apr 25 15:13:37 EDT 1991:
- F2c and libi77 adjusted so NAMELIST works with -i2. (I forgot
-about -i2 when adding NAMELIST.) This required a change to f2c.h
-(that only affects NAMELIST I/O under -i2.) Man-page description of
--i2 adjusted to reflect that -i2 stores array lengths in short ints.
-
-Fri Apr 26 02:54:41 EDT 1991:
- Libi77: fix some bugs in NAMELIST reading of multi-dimensional arrays
-(file rsne.c).
-
-Thu May 9 02:13:51 EDT 1991:
- Omit a trailing space in expr.c (could cause a false xsum value if
-a mailer drops the trailing blank).
-
-Thu May 16 13:14:59 EDT 1991:
- Libi77: increase LEFBL in lio.h to overcome a NeXT bug.
- Tweak for compilers that recognize "nested" comments: inside comments,
-turn /* into /+ (as well as */ into +/).
-
-Sat May 25 11:44:25 EDT 1991:
- libf77: s_rnge: declare line long int rather than int.
-
-Fri May 31 07:51:50 EDT 1991:
- libf77: system_: officially return status.
-
-Mon Jun 17 16:52:53 EDT 1991:
- Minor tweaks: omit unnecessary declaration of strcmp (that caused
-trouble on a system where strcmp was a macro) from misc.c; add
-SHELL = /bin/sh to makefiles.
- Fix a dereference of null when a CHARACTER*(*) declaration appears
-(illegally) after DATA. Complain only once per subroutine about
-declarations appearing after DATA.
-
-Mon Jul 1 00:28:13 EDT 1991:
- Add test and error message for illegal use of subroutine names, e.g.
- SUBROUTINE ZAP(A)
- ZAP = A
- END
-
-Mon Jul 8 21:49:20 EDT 1991:
- Issue a warning about things like
- integer i
- i = 'abc'
-(which is treated as i = ichar('a')). [It might be nice to treat 'abc'
-as an integer initialized (in a DATA statement) with 'abc', but
-other matters have higher priority.]
- Render
- i = ichar('A')
-as
- i = 'A';
-rather than
- i = 65;
-(which assumes ASCII).
-
-Fri Jul 12 07:41:30 EDT 1991:
- Note added to README about erroneous definitions of __STDC__ .
-
-Sat Jul 13 13:38:54 EDT 1991:
- Fix bugs in double type convesions of complex values, e.g.
-sngl(real(...)) or dble(real(...)) (where ... is complex).
-
-Mon Jul 15 13:21:42 EDT 1991:
- Fix bug introduced 8 July 1991 that caused erroneous warnings
-"ichar([first char. of] char. string) assumed for conversion to numeric"
-when a subroutine had an array of character strings as an argument.
-
-Wed Aug 28 01:12:17 EDT 1991:
- Omit an unused function in format.c, an unused variable in proc.c .
- Under -r8, promote complex to double complex (as the man page claims).
-
-Fri Aug 30 17:19:17 EDT 1991:
- f2c.ps updated: slightly expand description of intrinsics and,or,xor,
-not; add mention of intrinsics lshift, rshift; add note about f2c
-accepting Fortran 90 inline comments (starting with !); update Cobalt
-Blue address.
-
-Tue Sep 17 07:17:33 EDT 1991:
- libI77: err.c and open.c modified to use modes "rb" and "wb"
-when (f)opening unformatted files; README updated to point out
-that it may be necessary to change these modes to "r" and "w"
-on some non-ANSI systems.
-
-Tue Oct 15 10:25:49 EDT 1991:
- Minor tweaks that make some PC compilers happier: insert some
-casts, add args to signal functions.
- Change -g to emit uncommented #line lines -- and to emit more of them;
-update fc, f2c.1, f2c.1t, f2c.ps to reflect this.
- Change uchar to Uchar in xsum.c .
- Bring gram.c up to date.
-
-Thu Oct 17 09:22:05 EDT 1991:
- libi77: README, fio.h, sue.c, uio.c changed so the length field
-in unformatted sequential records has type long rather than int
-(unless UIOLEN_int is #defined). This is for systems where sizeof(int)
-can vary, depending on the compiler or compiler options.
-
-Thu Oct 17 13:42:59 EDT 1991:
- libi77: inquire.c: when MSDOS is defined, don't strcmp units[i].ufnm
-when it is NULL.
-
-Fri Oct 18 15:16:00 EDT 1991:
- Correct xsum0.out in "all from f2c/src" (somehow botched on 15 Oct.).
-
-Tue Oct 22 18:12:56 EDT 1991:
- Fix memory fault when a character*(*) argument is used (illegally)
-as a dummy variable in the definition of a statement function. (The
-memory fault occurred when the statement function was invoked.)
- Complain about implicit character*(*).
-
-Thu Nov 14 08:50:42 EST 1991:
- libi77: change uint to Uint in fmt.h, rdfmt.c, wrtfmt.c; this change
-should be invisible unless you're running a brain-damaged system.
-
-Mon Nov 25 19:04:40 EST 1991:
- libi77: correct botches introduced 17 Oct. 1991 and 14 Nov. 1991
-(change uint to Uint in lwrite.c; other changes that only matter if
-sizeof(int) != sizeof(long)).
- Add a more meaningful error message when bailing out due to an attempt
-to invoke a COMMON variable as a function.
-
-Sun Dec 1 19:29:24 EST 1991:
- libi77: uio.c: add test for read failure (seq. unformatted reads);
-adjust an error return from EOF to off end of record.
-
-Tue Dec 10 17:42:28 EST 1991:
- Add tests to prevent memory faults with bad uses of character*(*).
-
-Thu Dec 12 11:24:41 EST 1991:
- libi77: fix bug with internal list input that caused the last
-character of each record to be ignored; adjust error message in
-internal formatted input from "end-of-file" to "off end of record"
-if the format specifies more characters than the record contains.
-
-Wed Dec 18 17:48:11 EST 1991:
- Fix bug in translating nonsensical ichar invocations involving
-concatenations.
- Fix bug in passing intrinsics lle, llt, lge, lgt as arguments;
-hl_le was being passed rather than l_le, etc.
- libf77: adjust length parameters from long to ftnlen, for
-compiling with f2c_i2 defined.
-
-Sat Dec 21 15:30:57 EST 1991:
- Allow DO nnn ... to end with an END DO statement labelled nnn.
-
-Tue Dec 31 13:53:47 EST 1991:
- Fix bug in handling dimension a(n**3,2) -- pow_ii was called
-incorrectly.
- Fix bug in translating
- subroutine x(abc,n)
- character abc(n)
- write(abc,'(i10)') 123
- end
-(omitted declaration and initialiation of abc_dim1).
- Complain about dimension expressions of such invalid types
-as complex and logical.
-
-Fri Jan 17 11:54:20 EST 1992:
- Diagnose some illegal uses of main program name (rather than
-memory faulting).
- libi77: (1) In list and namelist input, treat "r* ," and "r*,"
-alike (where r is a positive integer constant), and fix a bug in
-handling null values following items with repeat counts (e.g.,
-2*1,,3). (2) For namelist reading of a numeric array, allow a new
-name-value subsequence to terminate the current one (as though the
-current one ended with the right number of null values).
-(3) [lio.h, lwrite.c]: omit insignificant zeros in list and namelist
-output. (Compile with -DOld_list_output to get the old behavior.)
-
-Sat Jan 18 15:58:01 EST 1992:
- libi77: make list output consistent with F format by printing .1
-rather than 0.1 (introduced yesterday).
-
-Wed Jan 22 08:32:43 EST 1992:
- libi77: add comment to README pointing out preconnection of
-Fortran units 5, 6, 0 to stdin, stdout, stderr (respectively).
-
-Mon Feb 3 11:57:53 EST 1992:
- libi77: fix namelist read bug that caused the character following
-a comma to be ignored.
-
-Fri Feb 28 01:04:26 EST 1992:
- libf77: fix buggy z_sqrt.c (double precision square root), which
-misbehaved for arguments in the southwest quadrant.
-
-Thu Mar 19 15:05:18 EST 1992:
- Fix bug (introduced 17 Jan 1992) in handling multiple entry points
-of differing types (with implicitly typed entries appearing after
-the first executable statement).
- Fix memory fault in the following illegal Fortran:
- double precision foo(i)
-* illegal: above should be "double precision function foo(i)"
- foo = i * 3.2
- entry moo(i)
- end
- Note about ANSI_Libraries (relevant, e.g., to IRIX 4.0.1 and AIX)
-added to README.
- Abort zero divides during constant simplification.
-
-Sat Mar 21 01:27:09 EST 1992:
- Tweak ckalloc (misc.c) for systems where malloc(0) = 0; this matters
-for subroutines with multiple entry points but no arguments.
- Add "struct memblock;" to init.c (irrelevant to most compilers).
-
-Wed Mar 25 13:31:05 EST 1992:
- Fix bug with IMPLICIT INTEGER*4(...): under -i2 or -I2, the *4 was
-ignored.
-
-Tue May 5 09:53:55 EDT 1992:
- Tweaks to README; e.g., ANSI_LIbraries changed to ANSI_Libraries .
-
-Wed May 6 23:49:07 EDT 1992
- Under -A and -C++, have subroutines return 0 (even if they have
-no * arguments).
- Adjust libi77 (rsne.c and lread.c) for systems where ungetc is
-a macro. Tweak lib[FI]77/makefile to use unique intermediate file
-names (for parallel makes).
-
-Tue May 19 09:03:05 EDT 1992:
- Adjust libI77 to make err= work with internal list and formatted I/O.
-
-Sat May 23 18:17:42 EDT 1992:
- Under -A and -C++, supply "return 0;" after the code generated for
-a STOP statement -- the C compiler doesn't know that s_stop won't
-return.
- New (mutually exclusive) options:
- -f treats all input lines as free-format lines,
- honoring text that appears after column 72
- and not padding lines shorter than 72 characters
- with blanks (which matters if a character string
- is continued across 2 or more lines).
- -72 treats text appearing after column 72 as an error.
-
-Sun May 24 09:45:37 EDT 1992:
- Tweak description of -f in f2c.1 and f2c.1t; update f2c.ps .
-
-Fri May 29 01:17:15 EDT 1992:
- Complain about externals used as variables. Example
- subroutine foo(a,b)
- external b
- a = a*b ! illegal use of b; perhaps should be b()
- end
-
-Mon Jun 15 11:15:27 EDT 1992:
- Fix bug in handling namelists with names that have underscores.
-
-Sat Jun 27 17:30:59 EDT 1992:
- Under -A and -C++, end Main program aliases with "return 0;".
- Under -A and -C++, use .P files and usage in previous subprograms
-in the current file to give prototypes for functions declared EXTERNAL
-but not invoked.
- Fix memory fault under -d1 -P .
- Under -A and -C++, cast arguments to the right types in calling
-a function that has been defined in the current file or in a .P file.
- Fix bug in handling multi-dimensional arrays with array references
-in their leading dimensions.
- Fix bug in the intrinsic cmplx function when the first argument
-involves an expression for which f2c generates temporary variables,
-e.g. cmplx(abs(real(a)),1.) .
-
-Sat Jul 18 07:36:58 EDT 1992:
- Fix buglet with -e1c (invisible on most systems) temporary file
-f2c_functions was unlinked before being closed.
- libf77: fix bugs in evaluating m**n for integer n < 0 and m an
-integer different from 1 or a real or double precision 0.
-Catch SIGTRAP (to print "Trace trap" before aborting). Programs
-that previously erroneously computed 1 for 0**-1 may now fault.
-Relevant routines: main.c pow_di.c pow_hh.c pow_ii.c pow_ri.c .
-
-Sat Jul 18 08:40:10 EDT 1992:
- libi77: allow namelist input to end with & (e.g. &end).
-
-Thu Jul 23 00:14:43 EDT 1992
- Append two underscores rather than one to C keywords used as
-local variables to avoid conflicts with similarly named COMMON blocks.
-
-Thu Jul 23 11:20:55 EDT 1992:
- libf77, libi77 updated to assume ANSI prototypes unless KR_headers
-is #defined.
- libi77 now recognizes a Z format item as in Fortran 90;
-the implementation assumes 8-bit bytes and botches character strings
-on little-endian machines (by printing their bytes from right to
-left): expect this bug to persist; fixing it would require a
-change to the I/O calling sequences.
-
-Tue Jul 28 15:18:33 EDT 1992:
- libi77: insert missed "#ifdef KR_headers" lines around getnum
-header in rsne.c. Version not updated.
-
-NOTE: "index from f2c" now ends with current timestamps of files in
-"all from f2c/src", sorted by time. To bring your source up to date,
-obtain source files with a timestamp later than the time shown in your
-version.c.
-
-Fri Aug 14 08:07:09 EDT 1992:
- libi77: tweak wrt_E in wref.c to avoid signing NaNs.
-
-Sun Aug 23 19:05:22 EDT 1992:
- fc: supply : after O in getopt invocation (for -O1 -O2 -O3).
-
-Mon Aug 24 18:37:59 EDT 1992:
- Recant above tweak to fc: getopt is dumber than I thought;
-it's necessary to say -O 1 (etc.).
- libF77/README: add comments about ABORT, ERF, DERF, ERFC, DERFC,
-GETARG, GETENV, IARGC, SIGNAL, and SYSTEM.
-
-Tue Oct 27 01:57:42 EST 1992:
- libf77, libi77:
- 1. Fix botched indirection in signal_.c.
- 2. Supply missing l_eof = 0 assignment to s_rsne() in rsne.c (so
-end-of-file on other files won't confuse namelist reads of external
-files).
- 3. Prepend f__ to external names that are only of internal
-interest to lib[FI]77.
-
-Thu Oct 29 12:37:18 EST 1992:
- libf77: Fix botch in signal_.c when KR_headers is #defined;
-add CFLAGS to makefile.
- libi77: trivial change to makefile for consistency with
-libF77/makefile.
-
-Wed Feb 3 02:05:16 EST 1993:
- Recognize types INTEGER*1, LOGICAL*1, LOGICAL*2, INTEGER*8.
-INTEGER*8 is not well tested and will only work reasonably on
-systems where int = 4 bytes, long = 8 bytes; on such systems,
-you'll have to modify f2c.h appropriately, changing integer
-from long to int and adding typedef long longint. You'll also
-have to compile libI77 with Allow_TYQUAD #defined and adjust
-libF77/makefile to compile pow_qq.c. In the f2c source, changes
-for INTEGER*8 are delimited by #ifdef TYQUAD ... #endif. You
-can omit the INTEGER*8 changes by compiling with NO_TYQUAD
-#defined. Otherwise, the new command-line option -!i8
-disables recognition of INTEGER*8.
- libf77: add pow_qq.c
- libi77: add #ifdef Allow_TYQUAD stuff. Changes for INTEGER*1,
-LOGICAL*1, and LOGICAL*2 came last 23 July 1992. Fix bug in
-backspace (that only bit when the last character of the second
-or subsequent buffer read was the previous newline). Guard
-against L_tmpnam being too small in endfile.c. For MSDOS,
-close and reopen files when copying to truncate. Lengthen
-LINTW (buffer size in lwrite.c).
- Add \ to the end of #define lines that get broken.
- Fix bug in handling NAMELIST of items in EQUIVALENCE.
- Under -h (or -hd), convert Hollerith to integer in general expressions
-(e.g., assignments), not just when they're passed as arguments, and
-blank-pad rather than 0-pad the Hollerith to a multiple of
-sizeof(integer) or sizeof(doublereal).
- Add command-line option -s, which instructs f2c preserve multi-
-dimensional subscripts (by emitting and using appropriate #defines).
- Fix glitch (with default type inferences) in examples like
- call foo('abc')
- end
- subroutine foo(goo)
- end
-This gave two warning messages:
- Warning on line 4 of y.f: inconsistent calling sequences for foo:
- here 1, previously 2 args and string lengths.
- Warning on line 4 of y.f: inconsistent calling sequences for foo:
- here 2, previously 1 args and string lengths.
-Now the second Warning is suppressed.
- Complain about all inconsistent arguments, not just the first.
- Switch to automatic creation of "all from f2c/src". For folks
-getting f2c source via ftp, this means f2c/src/all.Z is now an
-empty file rather than a bundle.
- Separate -P and -A: -P no longer implies -A.
-
-Thu Feb 4 00:32:20 EST 1993:
- Fix some glitches (introduced yesterday) with -h .
-
-Fri Feb 5 01:40:38 EST 1993:
- Fix bug in types conveyed for namelists (introduced 3 Feb. 1993).
-
-Fri Feb 5 21:26:43 EST 1993:
- libi77: tweaks to NAMELIST and open (after comments by Harold
-Youngren):
- 1. Reading a ? instead of &name (the start of a namelist) causes
- the namelist being sought to be written to stdout (unit 6);
- to omit this feature, compile rsne.c with -DNo_Namelist_Questions.
- 2. Reading the wrong namelist name now leads to an error message
- and an attempt to skip input until the right namelist name is found;
- to omit this feature, compile rsne.c with -DNo_Bad_Namelist_Skip.
- 3. Namelist writes now insert newlines before each variable; to omit
- this feature, compile xwsne.c with -DNo_Extra_Namelist_Newlines.
- 4. For OPEN of sequential files, ACCESS='APPEND' (or
- access='anything else starting with "A" or "a"') causes the file to
- be positioned at end-of-file, so a write will append to the file.
- (This is nonstandard, but does not require modifying data
- structures.)
-
-Mon Feb 8 14:40:37 EST 1993:
- Increase number of continuation lines allowed from 19 to 99,
-and allow changing this limit with -NC (e.g. -NC200 for 200 lines).
- Treat control-Z (at the beginning of a line) as end-of-file: see
-the new penultimate paragraph of README.
- Fix a rarely seen glitch that could make an error messages to say
-"line 0".
-
-Tue Feb 9 02:05:40 EST 1993
- libi77: change some #ifdef MSDOS lines to #ifdef NON_UNIX_STDIO,
-and, in err.c under NON_UNIX_STDIO, avoid close(creat(name,0666))
-when the unit has another file descriptor for name.
-
-Tue Feb 9 17:12:49 EST 1993
- libi77: more tweaks for NON_UNIX_STDIO: use stdio routines
-rather than open, close, creat, seek, fdopen (except for f__isdev).
-
-Fri Feb 12 15:49:33 EST 1993
- Update src/gram.c (which was forgotten in the recent updates).
-Most folks regenerate it anyway (wity yacc or bison).
-
-Thu Mar 4 17:07:38 EST 1993
- Increase default max labels in computed gotos and alternate returns
-to 257, and allow -Nl1234 to specify this number.
- Tweak put.c to check p->tag == TADDR in realpart() and imagpart().
- Adjust fc script to allow .r (RATFOR) files and -C (check subscripts).
- Avoid declaring strchr in niceprintf.c under -DANSI_Libraries .
- gram.c updated again.
- libi77: err.c, open.c: take declaration of fdopen from rawio.h.
-
-Sat Mar 6 07:09:11 EST 1993
- libi77: uio.c: adjust off-end-of-record test for sequential
-unformatted reads to respond to err= rather than end= .
-
-Sat Mar 6 16:12:47 EST 1993
- Treat scalar arguments of the form (v) and v+0, where v is a variable,
-as expressions: assign to a temporary variable, and pass the latter.
- gram.c updated.
-
-Mon Mar 8 09:35:38 EST 1993
- "f2c.h from f2c" updated to add types logical1 and integer1 for
-LOGICAL*1 and INTEGER*1. ("f2c.h from f2c" is supposed to be the
-same as "f2c.h from f2c/src", which was updated 3 Feb. 1993.)
-
-Mon Mar 8 17:57:55 EST 1993
- Fix rarely seen bug that could cause strange casts in function
-invocations (revealed by an example with msdos/f2c.exe).
- msdos/f2cx.exe.Z and msdos/f2c.exe.Z updated (ftp access only).
-
-Fri Mar 12 12:37:01 EST 1993
- Fix bug with -s in handling subscripts involving min, max, and
-complicated expressions requiring temporaries.
- Fix bug in handling COMMONs that need padding by a char array.
- msdos/f2cx.exe.Z and msdos/f2c.exe.Z updated (ftp access only).
-
-Fri Mar 12 17:16:16 EST 1993
- libf77, libi77: updated for compiling under C++.
-
-Mon Mar 15 16:21:37 EST 1993
- libi77: more minor tweaks (for -DKR_headers); Version.c not changed.
-
-Thu Mar 18 12:37:30 EST 1993
- Flag -r (for discarding carriage-returns on systems that end lines
-with carriage-return/newline pairs, e.g. PCs) added to xsum, and
-xsum.c converted to ANSI/ISO syntax (with K&R syntax available with
--DKR_headers). [When time permits, the f2c source will undergo a
-similar conversion.]
- libi77: tweaks to #includes in endfile.c, err.c, open.c, rawio.h;
-Version.c not changed.
- f2c.ps updated (to pick up revision of 2 Feb. 1993 to f2c.1).
-
-Fri Mar 19 09:19:26 EST 1993
- libi77: add (char *) casts to malloc and realloc invocations
-in err.c, open.c; Version.c not changed.
-
-Tue Mar 30 07:17:15 EST 1993
- Fix bug introduced 6 March 1993: possible memory corruption when
-loops in data statements involve constant subscripts, as in
- DATA (GUNIT(1,I),I=0,14)/15*-1/
-
-Tue Mar 30 16:17:42 EST 1993
- Fix bug with -s: (floating-point array item)*(complex item)
-generates an _subscr() reference for the floating-point array,
-but a #define for the _subscr() was omitted.
-
-Tue Apr 6 12:11:22 EDT 1993
- libi77: adjust error returns for formatted inputs to flush the current
-input line when err= is specified. To restore the old behavior (input
-left mid-line), either adjust the #definition of errfl in fio.h or omit
-the invocation of f__doend in err__fl (in err.c).
-
-Tue Apr 6 13:30:04 EDT 1993
- Fix bug revealed in
- subroutine foo(i)
- call goo(int(i))
- end
-which now passes a copy of i, rather than i itself.
-
-Sat Apr 17 11:41:02 EDT 1993
- Adjust appending of underscores to conform with f2c.ps ("A Fortran
-to C Converter"): names that conflict with C keywords or f2c type
-names now have just one underscore appended (rather than two); add
-"integer1", "logical1", "longint" to the keyword list.
- Append underscores to names that appear in EQUIVALENCE and are
-component names in a structure declared in f2c.h, thus avoiding a
-problem caused by the #defines emitted for equivalences. Example:
- complex a
- equivalence (i,j)
- a = 1 ! a.i went awry because of #define i
- j = 2
- write(*,*) a, i
- end
- Adjust line-breaking logic to avoid splitting very long constants
-(and names). Example:
- ! The next line starts with tab and thus is a free-format line.
- a=.012345689012345689012345689012345689012345689012345689012345689012345689
- end
- Omit extraneous "return 0;" from entry stubs emitted for multiple
-entry points of type character, complex, or double complex.
-
-Sat Apr 17 14:35:05 EDT 1993
- Fix bug (introduced 4 Feb.) in separating -P from -A that kept f2c
-from re-reading a .P file written without -A or -C++ describing a
-routine with an external argument. [See the just-added note about
-separating -P from -A in the changes above for 3 Feb. 1993.]
- Fix bug (type UNKNOWN for V in the example below) revealed by
- subroutine a()
- external c
- call b(c)
- end
- subroutine b(v)
- end
-
-Sun Apr 18 19:55:26 EDT 1993
- Fix wrong calling sequence for mem() in yesterday's addition to
-equiv.c .
-
-Wed Apr 21 17:39:46 EDT 1993
- Fix bug revealed in
-
- ASSIGN 10 TO L1
- GO TO 20
- 10 ASSIGN 30 TO L2
- STOP 10
-
- 20 ASSIGN 10 TO L2 ! Bug here because 10 had been assigned
- ! to another label, then defined.
- GO TO L2
- 30 END
-
-Fri Apr 23 18:38:50 EDT 1993
- Fix bug with -h revealed in
- CHARACTER*9 FOO
- WRITE(FOO,'(I6)') 1
- WRITE(FOO,'(I6)') 2 ! struct icilist io___3 botched
- END
-
-Tue Apr 27 16:08:28 EDT 1993
- Tweak to makefile: remove "size f2c".
-
-Tue May 4 23:48:20 EDT 1993
- libf77: tweak signal_ line of f2ch.add .
-
-Tue Jun 1 13:47:13 EDT 1993
- Fix bug introduced 3 Feb. 1993 in handling multiple entry
-points with differing return types -- the postfix array in proc.c
-needed a new entry for integer*8 (which resulted in wrong
-Multitype suffixes for non-integral types).
- For (default) K&R C, generate VOID rather than int functions for
-functions of Fortran type character, complex, and double complex.
- msdos/f2cx.exe.Z and msdos/f2c.exe.Z updated (ftp access only).
-
-Tue Jun 1 23:11:15 EDT 1993
- f2c.h: add Multitype component g and commented type longint.
- proc.c: omit "return 0;" from stubs for complex and double complex
-entries (when entries have multiple types); add test to avoid memory
-fault with illegal combinations of entry types.
-
-Mon Jun 7 12:00:47 EDT 1993
- Fix memory fault in
- common /c/ m
- integer m(1)
- data m(1)/1/, m(2)/2/ ! one too many initializers
- end
- msdos/f2cx.exe.Z and msdos/f2c.exe.Z updated (ftp access only).
-
-Fri Jun 18 13:55:51 EDT 1993
- libi77: change type of signal_ in f2ch.add; change type of il in
-union Uint from long to integer (for machines like the DEC Alpha,
-where integer should be the same as int). Version.c not changed.
- Tweak gram.dcl and gram.head: add semicolons after some rules that
-lacked them, and remove an extraneous semicolon. These changes are
-completely transparent to our local yacc programs, but apparently
-matter on some VMS systems.
-
-Wed Jun 23 01:02:56 EDT 1993
- Update "fc" shell script, and bring f2c.1 and f2c.1t up to date:
-they're meant to be linked with (i.e., the same as) src/f2c.1 and
-src/f2c.1t . [In the last update of f2c.1* (2 Feb. 1993), only
-src/f2c.1 and src/f2c.1t got changed -- a mistake.]
-
-Wed Jun 23 09:04:31 EDT 1993
- libi77: fix bug in format reversions for internal writes.
-Example:
- character*60 lines(2)
- write(lines,"('n =',i3,2(' more text',i3))") 3, 4, 5, 6
- write(*,*) 'lines(1) = ', lines(1)
- write(*,*) 'lines(2) = ', lines(2)
- end
-gave an error message that began "iio: off end of record", rather
-than giving the correct output:
-
- lines(1) = n = 3 more text 4 more text 5
- lines(2) = more text 6 more text
-
-Thu Aug 5 11:31:14 EDT 1993
- libi77: lread.c: fix bug in handling repetition counts for logical
-data (during list or namelist input). Change struct f__syl to
-struct syl (for buggy compilers).
-
-Sat Aug 7 16:05:30 EDT 1993
- libi77: lread.c (again): fix bug in namelist reading of incomplete
-logical arrays.
- Fix minor calling-sequence errors in format.c, output.c, putpcc.c:
-should be invisible.
-
-Mon Aug 9 09:12:38 EDT 1993
- Fix erroneous cast under -A in translating
- character*(*) function getc()
- getc(2:3)=' ' !wrong cast in first arg to s_copy
- end
- libi77: lread.c: fix bug in namelist reading of an incomplete array
-of numeric data followed by another namelist item whose name starts
-with 'd', 'D', 'e', or 'E'.
-
-Fri Aug 20 13:22:10 EDT 1993
- Fix bug in do while revealed by
- subroutine skdig (line, i)
- character line*(*), ch*1
- integer i
- logical isdigit
- isdigit(ch) = ch.ge.'0' .and. ch.le.'9'
- do while (isdigit(line(i:i))) ! ch__1[0] was set before
- ! "while(...) {...}"
- i = i + 1
- enddo
- end
-
-Fri Aug 27 08:22:54 EDT 1993
- Add #ifdefs to avoid declaring atol when it is a macro; version.c
-not updated.
-
-Wed Sep 8 12:24:26 EDT 1993
- libi77: open.c: protect #include "sys/..." with
-#ifndef NON_UNIX_STDIO; Version date not changed.
-
-Thu Sep 9 08:51:21 EDT 1993
- Adjust "include" to interpret file names relative to the directory
-of the file that contains the "include".
-
-Fri Sep 24 00:56:12 EDT 1993
- Fix offset error resulting from repeating the same equivalence
-statement twice. Example:
- real a(2), b(2)
- equivalence (a(2), b(2))
- equivalence (a(2), b(2))
- end
- Increase MAXTOKENLEN (to roughly the largest allowed by ANSI C).
-
-Mon Sep 27 08:55:09 EDT 1993
- libi77: endfile.c: protect #include "sys/types.h" with
-#ifndef NON_UNIX_STDIO; Version.c not changed.
-
-Fri Oct 15 15:37:26 EDT 1993
- Fix rarely seen parsing bug illustrated by
- subroutine foo(xabcdefghij)
- character*(*) xabcdefghij
- IF (xabcdefghij.NE.'##') GOTO 40
- 40 end
-in which the spacing in the IF line is crucial.
-
-Thu Oct 21 13:55:11 EDT 1993
- Give more meaningful error message (then "unexpected character in
-cds") when constant simplification leads to Infinity or NaN.
-
-Wed Nov 10 15:01:05 EST 1993
- libi77: backspace.c: adjust, under -DMSDOS, to cope with MSDOS
-text files, as handled by some popular PC C compilers. Beware:
-the (defective) libraries associated with these compilers assume lines
-end with \r\n (conventional MS-DOS text files) -- and ftell (and
-hence the current implementation of backspace) screws up if lines with
-just \n.
-
-Thu Nov 18 09:37:47 EST 1993
- Give a better error (than "control stack empty") for an extraneous
-ENDDO. Example:
- enddo
- end
- Update comments about ftp in "readme from f2c".
-
-Sun Nov 28 17:26:50 EST 1993
- Change format of time stamp in version.c to yyyymmdd.
- Sort parameter adjustments (or complain of impossible dependencies)
-so that dummy arguments are referenced only after being adjusted.
-Example:
- subroutine foo(a,b)
- integer a(2) ! a must be adjusted before b
- double precision b(a(1),a(2))
- call goo(b(3,4))
- end
- Adjust structs for initialized common blocks and equivalence classes
-to omit the trailing struct component added to force alignment when
-padding already forces the desired alignment. Example:
- PROGRAM TEST
- COMMON /Z/ A, CC
- CHARACTER*4 CC
- DATA cc /'a'/
- END
-now gives
- struct {
- integer fill_1[1];
- char e_2[4];
- } z_ = { {0}, {'a', ' ', ' ', ' '} };
-rather than
-struct {
- integer fill_1[1];
- char e_2[4];
- real e_3;
- } z_ = { {0}, {'a', ' ', ' ', ' '}, (float)0. };
-
-Wed Dec 8 16:24:43 EST 1993
- Adjust lex.c to recognize # nnn "filename" lines emitted by cpp;
-this affects the file names and line numbers in error messages and
-the #line lines emitted under -g.
- Under -g, arrange for a file that starts with an executable
-statement to have the first #line line indicate line 1, rather
-than the line number of the END statement ending the main program.
- Adjust fc script to run files ending in .F through /lib/cpp.
- Fix bug ("Impossible tag 2") in
- if (t .eq. (0,2)) write(*,*) 'Bug!'
- end
- libi77: iio.c: adjust internal formatted reads to treat short records
-as though padded with blanks (rather than causing an "off end of record"
-error).
-
-Wed Dec 15 15:19:15 EST 1993
- fc: adjusted for .F files to pass -D and -I options to cpp.
-
-Fri Dec 17 20:03:38 EST 1993
- Fix botch introduced 28 Nov. 1993 in vax.c; change "version of"
-to "version".
-
-Tue Jan 4 15:39:52 EST 1994
- msdos/f2cx.exe.Z and msdos/f2c.exe.Z updated (ftp access only).
-
-Wed Jan 19 08:55:19 EST 1994
- Arrange to accept
- integer Nx, Ny, Nz
- parameter (Nx = 10, Ny = 20)
- parameter (Nz = max(Nx, Ny))
- integer c(Nz)
- call foo(c)
- end
-rather than complaining "Declaration error for c: adjustable dimension
-on non-argument". The necessary changes cause some hitherto unfolded
-constant expressions to be folded.
- Accept BYTE as a synonym for INTEGER*1.
-
-Thu Jan 27 08:57:40 EST 1994
- Fix botch in changes of 19 Jan. 1994 that broke entry points with
-multi-dimensional array arguments that did not appear in the subprogram
-argument list and whose leading dimensions depend on arguments.
-
-Mon Feb 7 09:24:30 EST 1994
- Remove artifact in "fc" script that caused -O to be ignored:
- 87c87
- < # lcc ignores -O...
- ---
- > CFLAGS="$CFLAGS $O"
-
-Sun Feb 20 17:04:58 EST 1994
- Fix bugs reading .P files for routines with arguments of type
-INTEGER*1, INTEGER*8, LOGICAL*2.
- Fix glitch in reporting inconsistent arguments for routines involving
-character arguments: "arg n" had n too large by the number of
-character arguments.
-
-Tue Feb 22 20:50:08 EST 1994
- Trivial changes to data.c format.c main.c niceprintf.c output.h and
-sysdep.h (consistency improvements).
- libI77: lread.c: check for NULL return from realloc.
-
-Fri Feb 25 23:56:08 EST 1994
- output.c, sysdep.h: arrange for -DUSE_DTOA to use dtoa.c and g_fmt.c
-for correctly rounded decimal values on IEEE-arithmetic machines
-(plus machines with VAX and IBM-mainframe arithmetic). These
-routines are available from netlib's fp directory.
- msdos/f2cx.exe.Z and msdos/f2c.exe.Z updated (ftp access only); the
-former uses -DUSE_DTOA to keep 12 from printing as 12.000000000000001.
- vax.c: fix wrong arguments to badtag and frchain introduced
-28 Nov. 1993.
- Source for f2c converted to ANSI/ISO format, with the K&R format
-available by compilation with -DKR_headers .
- Arrange for (double precision expression) relop (single precision
-constant) to retain the single-precision nature of the constant.
-Example:
- double precision t
- if (t .eq. 0.3) ...
-
-Mon Feb 28 11:40:24 EST 1994
- README updated to reflect a modification just made to netlib's
-"dtoa.c from fp":
-96a97,105
-> Also add the rule
->
-> dtoa.o: dtoa.c
-> $(CC) -c $(CFLAGS) -DMALLOC=ckalloc -DIEEE... dtoa.c
->
-> (without the initial tab) to the makefile, where IEEE... is one of
-> IEEE_MC68k, IEEE_8087, VAX, or IBM, depending on your machine's
-> arithmetic. See the comments near the start of dtoa.c.
->
-
-Sat Mar 5 09:41:52 EST 1994
- Complain about functions with the name of a previously declared
-common block (which is illegal).
- New option -d specifies the directory for output .c and .P files;
-f2c.1 and f2c.1t updated. The former undocumented debug option -dnnn
-is now -Dnnn.
-
-Thu Mar 10 10:21:44 EST 1994
- libf77: add #undef min and #undef max lines to s_paus.c s_stop.c
-and system_.c; Version.c not changed.
- libi77: add -DPad_UDread lines to uio.c and explanation to README:
- Some buggy Fortran programs use unformatted direct I/O to write
- an incomplete record and later read more from that record than
- they have written. For records other than the last, the unwritten
- portion of the record reads as binary zeros. The last record is
- a special case: attempting to read more from it than was written
- gives end-of-file -- which may help one find a bug. Some other
- Fortran I/O libraries treat the last record no differently than
- others and thus give no help in finding the bug of reading more
- than was written. If you wish to have this behavior, compile
- uio.c with -DPad_UDread .
-Version.c not changed.
-
-Tue Mar 29 17:27:54 EST 1994
- Adjust make_param so dimensions involving min, max, and other
-complicated constant expressions do not provoke error messages
-about adjustable dimensions on non-arguments.
- Fix botch introduced 19 Jan 1994: "adjustable dimension on non-
-argument" messages could cause some things to be freed twice.
-
-Tue May 10 07:55:12 EDT 1994
- Trivial changes to exec.c, p1output.c, parse_args.c, proc.c,
-and putpcc.c: change arguments from
- type foo[]
-to
- type *foo
-for consistency with defs.h. For most compilers, this makes no
-difference.
-
-Thu Jun 2 12:18:18 EDT 1994
- Fix bug in handling FORMAT statements that have adjacent character
-(or Hollerith) strings: an extraneous \002 appeared between the
-strings.
- libf77: under -DNO_ONEXIT, arrange for f_exit to be called just
-once; previously, upon abnormal termination (including stop statements),
-it was called twice.
-
-Mon Jun 6 15:52:57 EDT 1994
- libf77: Avoid references to SIGABRT and SIGIOT if neither is defined;
-Version.c not changed.
- libi77: Add cast to definition of errfl() in fio.h; this only matters
-on systems with sizeof(int) < sizeof(long). Under -DNON_UNIX_STDIO,
-use binary mode for direct formatted files (to avoid any confusion
-connected with \n characters).
-
-Fri Jun 10 16:47:31 EDT 1994
- Fix bug under -A in handling unreferenced (and undeclared)
-external arguments in subroutines with multiple entry points. Example:
- subroutine m(fcn,futil)
- external fcn,futil
- call fcn
- entry mintio(i1) ! (D_fp)0 rather than (U_fp)0 for futil
- end
-
-Wed Jun 15 10:38:14 EDT 1994
- Allow char(constant expression) function in parameter declarations.
-(This was probably broken in the changes of 29 March 1994.)
-
-Fri Jul 1 23:54:00 EDT 1994
- Minor adjustments to makefile (rule for f2c.1 commented out) and
-sysdep.h (#undef KR_headers if __STDC__ is #defined, and base test
-for ANSI_Libraries and ANSI_Prototypes on KR_headers rather than
-__STDC__); version.c touched but not changed.
- libi77: adjust fp.h so local.h is only needed under -DV10;
-Version.c not changed.
-
-Tue Jul 5 03:05:46 EDT 1994
- Fix segmentation fault in
- subroutine foo(a,b,k)
- data i/1/
- double precision a(k,1) ! sequence error: must precede data
- b = a(i,1)
- end
- libi77: Fix bug (introduced 6 June 1994?) in reopening files under
-NON_UNIX_STDIO.
- Fix some error messages caused by illegal Fortran. Examples:
-* 1.
- x(i) = 0 !Missing declaration for array x
- call f(x) !Said Impossible storage class 8 in routine mkaddr
- end !Now says invalid use of statement function x
-* 2.
- f = g !No declaration for g; by default it's a real variable
- call g !Said invalid class code 2 for function g
- end !Now says g cannot be called
-* 3.
- intrinsic foo !Invalid intrinsic name
- a = foo(b) !Said intrcall: bad intrgroup 0
- end !Now just complains about line 1
-
-Tue Jul 5 11:14:26 EDT 1994
- Fix glitch in handling erroneous statement function declarations.
-Example:
- a(j(i) - i) = a(j(i) - i) + 1 ! bad statement function
- call foo(a(3)) ! Said Impossible type 0 in routine mktmpn
- end ! Now warns that i and j are not used
-
-Wed Jul 6 17:31:25 EDT 1994
- Tweak test for statement functions that (illegally) call themselves;
-f2c will now proceed to check for other errors, rather than bailing
-out at the first recursive statement function reference.
- Warn about but retain divisions by 0 (instead of calling them
-"compiler errors" and quiting). On IEEE machines, this permits
- double precision nan, ninf, pinf
- nan = 0.d0/0.d0
- pinf = 1.d0/0.d0
- ninf = -1.d0/0.d0
- write(*,*) 'nan, pinf, ninf = ', nan, pinf, ninf
- end
-to print
- nan, pinf, ninf = NaN Infinity -Infinity
- libi77: wref.c: protect with #ifdef GOOD_SPRINTF_EXPONENT an
-optimization that requires exponents to have 2 digits when 2 digits
-suffice. lwrite.c wsfe.c (list and formatted external output):
-omit ' ' carriage-control when compiled with -DOMIT_BLANK_CC .
-Off-by-one bug fixed in character count for list output of character
-strings. Omit '.' in list-directed printing of Nan, Infinity.
-
-Mon Jul 11 13:05:33 EDT 1994
- src/gram.c updated.
-
-Tue Jul 12 10:24:42 EDT 1994
- libi77: wrtfmt.c: under G11.4, write 0. as " .0000 " rather
-than " .0000E+00".
-
-Thu Jul 14 17:55:46 EDT 1994
- Fix glitch in changes of 6 July 1994 that could cause erroneous
-"division by zero" warnings (or worse). Example:
- subroutine foo(a,b)
- y = b
- a = a / y ! erroneous warning of division by zero
- end
-
-Mon Aug 1 16:45:17 EDT 1994
- libi77: lread.c rsne.c: for benefit of systems with a buggy stdio.h,
-declare ungetc when neither KR_headers nor ungetc is #defined.
-Version.c not changed.
-
-Wed Aug 3 01:53:00 EDT 1994
- libi77: lwrite.c (list output): do not insert a newline when
-appending an oversize item to an empty line.
-
-Mon Aug 8 00:51:01 EDT 1994
- Fix bug (introduced 3 Feb. 1993) that, under -i2, kept LOGICAL*2
-variables from appearing in INQUIRE statements. Under -I2, allow
-LOGICAL*4 variables to appear in INQUIRE. Fix intrinsic function
-LEN so it returns a short value under -i2, a long value otherwise.
- exec.c: fix obscure memory fault possible with bizarre (and highly
-erroneous) DO-loop syntax.
-
-Fri Aug 12 10:45:57 EDT 1994
- libi77: fix glitch that kept ERR= (in list- or format-directed input)
-from working after a NAMELIST READ.
-
-Thu Aug 25 13:58:26 EDT 1994
- Suppress -s when -C is specified.
- Give full pathname (netlib@research.att.com) for netlib in readme and
-src/README.
-
-Wed Sep 7 22:13:20 EDT 1994
- libi77: typesize.c: adjust to allow types LOGICAL*1, LOGICAL*2,
-INTEGER*1, and (under -DAllow_TYQUAD) INTEGER*8 in NAMELISTs.
-
-Fri Sep 16 17:50:18 EDT 1994
- Change name adjustment for reserved words: instead of just appending
-"_" (a single underscore), append "_a_" to local variable names to avoid
-trouble when a common block is named a reserved word and the same
-reserved word is also a local variable name. Example:
- common /const/ a,b,c
- real const(3)
- equivalence (const(1),a)
- a = 1.234
- end
- Arrange for ichar() to treat characters as unsigned.
- libf77: s_cmp.c: treat characters as unsigned in comparisons.
-These changes for unsignedness only matter for strings that contain
-non-ASCII characters. Now ichar() should always be >= 0.
-
-Sat Sep 17 11:19:32 EDT 1994
- fc: set rc=$? before exit (to get exit code right in trap code).
-
-Mon Sep 19 17:49:43 EDT 1994
- libf77: s_paus.c: flush stderr after PAUSE; add #ifdef MSDOS stuff.
- libi77: README: point out general need for -DMSDOS under MS-DOS.
-
-Tue Sep 20 11:42:30 EDT 1994
- Fix bug in comparing identically named common blocks, in which
-all components have the same names and types, but at least one is
-dimensioned (1) and the other is not dimensioned. Example:
- subroutine foo
- common /ab/ a
- a=1. !!! translated correctly to ab_1.a = (float)1.;
- end
- subroutine goo
- common /ab/ a(1)
- a(1)=2. !!! translated erroneously to ab_1.a[0] = (float)2.
- end
-
-Tue Sep 27 23:47:34 EDT 1994
- Fix bug introduced 16 Sept. 1994: don't add _a_ to C keywords
-used as external names. In fact, return to earlier behavior of
-appending __ to C keywords unless they are used as external names,
-in which case they get just one underscore appended.
- Adjust constant handling so integer and logical PARAMETERs retain
-type information, particularly under -I2. Example:
- SUBROUTINE FOO
- INTEGER I
- INTEGER*1 I1
- INTEGER*2 I2
- INTEGER*4 I4
- LOGICAL L
- LOGICAL*1 L1
- LOGICAL*2 L2
- LOGICAL*4 L4
- PARAMETER (L=.FALSE., L1=.FALSE., L2=.FALSE., L4=.FALSE.)
- PARAMETER (I=0,I1=0,I2=0,I4=0)
- CALL DUMMY(I, I1, I2, I4, L, L1, L2, L4)
- END
- f2c.1t: Change f\^2c to f2c (omit half-narrow space) in line following
-".SH NAME" for benefit of systems that cannot cope with troff commands
-in this context.
-
-Wed Sep 28 12:45:19 EDT 1994
- libf77: s_cmp.c fix glitch in -DKR_headers version introduced
-12 days ago.
-
-Thu Oct 6 09:46:53 EDT 1994
- libi77: util.c: omit f__mvgbt (which is never used).
- f2c.h: change "long" to "long int" to facilitate the adjustments
-by means of sed described above. Comment out unused typedef of Long.
-
-Fri Oct 21 18:02:24 EDT 1994
- libf77: add s_catow.c and adjust README to point out that changing
-"s_cat.o" to "s_catow.o" in the makefile will permit the target of a
-concatenation to appear on its right-hand side (contrary to the
-Fortran 77 Standard and at the cost of some run-time efficiency).
-
-Wed Nov 2 00:03:58 EST 1994
- Adjust -g output to contain only one #line line per statement,
-inserting \ before the \n ending lines broken because of their
-length [this insertion was recanted 10 Dec. 1994]. This change
-accommodates an idiocy in the ANSI/ISO C standard, which leaves
-undefined the behavior of #line lines that occur within the arguments
-to a macro call.
-
-Wed Nov 2 14:44:27 EST 1994
- libi77: under compilation with -DALWAYS_FLUSH, flush buffers at
-the end of each write statement, and test (via the return from
-fflush) for write failures, which can be caught with an ERR=
-specifier in the write statement. This extra flushing slows
-execution, but can abort execution or alter the flow of control
-when a disk fills up.
- f2c/src/io.c: Add ERR= test to e_wsle invocation (end of
-list-directed external output) to catch write failures when libI77
-is compiled with -DALWAYS_FLUSH.
-
-Thu Nov 3 10:59:13 EST 1994
- Fix bug in handling dimensions involving certain intrinsic
-functions of constant expressions: the expressions, rather than
-pointers to them, were passed. Example:
- subroutine subtest(n,x)
- real x(2**n,n) ! pow_ii(2,n) was called; now it's pow_ii(&c__2,n)
- x(2,2)=3.
- end
-
-Tue Nov 8 23:56:30 EST 1994
- malloc.c: remove assumption that only malloc calls sbrk. This
-appears to make malloc.c useful on RS6000 systems.
-
-Sun Nov 13 13:09:38 EST 1994
- Turn off constant folding of integers used in floating-point
-expressions, so the assignment in
- subroutine foo(x)
- double precision x
- x = x*1000000*500000
- end
-is rendered as
- *x = *x * 1000000 * 500000;
-rather than as
- *x *= 1783793664;
-
-Sat Dec 10 16:31:40 EST 1994
- Supply a better error message (than "Impossible type 14") for
- subroutine foo
- foo = 3
- end
- Under -g, convey name of included files to #line lines.
- Recant insertion of \ introduced (under -g) 2 Nov. 1994.
-
-Thu Dec 15 14:33:55 EST 1994
- New command-line option -Idir specifies directories in which to
-look for non-absolute include files (after looking in the directory
-of the current input file). There can be several -Idir options, each
-specifying one directory. All -Idir options are considered, from
-left to right, until a suitably named file is found. The -I2 and -I4
-command-line options have precedence, so directories named 2 or 4
-must be spelled by some circumlocation, such as -I./2 .
- f2c.ps updated to mention the new -Idir option, correct a typo,
-and bring the man page at the end up to date.
- lex.c: fix bug in reading line numbers in #line lines.
- fc updated to pass -Idir options to f2c.
-
-Thu Dec 29 09:48:03 EST 1994
- Fix bug (e.g., addressing fault) in diagnosing inconsistency in
-the type of function eta in the following example:
- function foo(c1,c2)
- double complex foo,c1,c2
- double precision eta
- foo = eta(c1,c2)
- end
- function eta(c1,c2)
- double complex eta,c1,c2
- eta = c1*c2
- end
-
-Mon Jan 2 13:27:26 EST 1995
- Retain casts for SNGL (or FLOAT) that were erroneously optimized
-away. Example:
- subroutine foo(a,b)
- double precision a,b
- a = float(b) ! now rendered as *a = (real) (*b);
- end
- Use float (rather than double) temporaries in certain expressions
-of type complex. Example: the temporary for sngl(b) in
- complex a
- double precision b
- a = sngl(b) - (3.,4.)
-is now of type float.
-
-Fri Jan 6 00:00:27 EST 1995
- Adjust intrinsic function cmplx to act as dcmplx (returning
-double complex rather than complex) if either of its args is of
-type double precision. The double temporaries used prior to 2 Jan.
-1995 previously gave it this same behavior.
-
-Thu Jan 12 12:31:35 EST 1995
- Adjust -krd to use double temporaries in some calculations of
-type complex.
- libf77: pow_[dhiqrz][hiq].c: adjust x**i to work on machines
-that sign-extend right shifts when i is the most negative integer.
-
-Wed Jan 25 00:14:42 EST 1995
- Fix memory fault in handling overlapping initializations in
- block data
- common /zot/ d
- double precision d(3)
- character*6 v(4)
- real r(2)
- equivalence (d(3),r(1)), (d(1),v(1))
- data v/'abcdef', 'ghijkl', 'mnopqr', 'stuvwx'/
- data r/4.,5./
- end
- names.c: add "far", "huge", "near" to c_keywords (causing them
-to have __ appended when used as local variables).
- libf77: add s_copyow.c, an alternative to s_copy.c for handling
-(illegal) character assignments where the right- and left-hand
-sides overlap, as in a(2:4) = a(1:3).
-
-Thu Jan 26 14:21:19 EST 1995
- libf77: roll s_catow.c and s_copyow.c into s_cat.c and s_copy.c,
-respectively, allowing the left-hand side of a character assignment
-to appear on its right-hand side unless s_cat.c and s_copy.c are
-compiled with -DNO_OVERWRITE (which is a bit more efficient).
-Fortran 77 forbids the left-hand side from participating in the
-right-hand side (of a character assignment), but Fortran 90 allows it.
- libi77: wref.c: fix glitch in printing the exponent of 0 when
-GOOD_SPRINTF_EXPONENT is not #defined.
-
-Fri Jan 27 12:25:41 EST 1995
- Under -C++ -ec (or -C++ -e1c), surround struct declarations with
- #ifdef __cplusplus
- extern "C" {
- #endif
-and
- #ifdef __cplusplus
- }
- #endif
-(This isn't needed with cfront, but apparently is necessary with
-some other C++ compilers.)
- libf77: minor tweak to s_copy.c: copy forward whenever possible
-(for better cache behavior).
-
-Wed Feb 1 10:26:12 EST 1995
- Complain about parameter statements that assign values to dummy
-arguments, as in
- subroutine foo(x)
- parameter(x = 3.4)
- end
-
-Sat Feb 4 20:22:02 EST 1995
- fc: omit "lib=/lib/num/lib.lo".
-
-Wed Feb 8 08:41:14 EST 1995
- Minor changes to exec.c, putpcc.c to avoid "bad tag" or "error
-in frexpr" with certain invalid Fortran.
-
-Sat Feb 11 08:57:39 EST 1995
- Complain about integer overflows, both in simplifying integer
-expressions, and in converting integers from decimal to binary.
- Fix a memory fault in putcx1() associated with invalid input.
-
-Thu Feb 23 11:20:59 EST 1995
- Omit MAXTOKENLEN; realloc token if necessary (to handle very long
-strings).
-
-Fri Feb 24 11:02:00 EST 1995
- libi77: iio.c: z_getc: insert (unsigned char *) to allow internal
-reading of characters with high-bit set (on machines that sign-extend
-characters).
-
-Tue Mar 14 18:22:42 EST 1995
- Fix glitch (in io.c) in handling 0-length strings in format
-statements, as in
- write(*,10)
- 10 format(' ab','','cd')
- libi77: lread.c and rsfe.c: adjust s_rsle and s_rsfe to check for
-end-of-file (to prevent infinite loops with empty read statements).
-
-Wed Mar 22 10:01:46 EST 1995
- f2c.ps: adjust discussion of -P on p. 7 to reflect a change made
-3 Feb. 1993: -P no longer implies -A.
-
-Fri Apr 21 18:35:00 EDT 1995
- fc script: remove absolute paths (since PATH specifies only standard
-places). On most systems, it's still necessary to adjust the PATH
-assignment at the start of fc to fit the local conventions.
-
-Fri May 26 10:03:17 EDT 1995
- fc script: add recognition of -P and .P files.
- libi77: iio.c: z_wnew: fix bug in handling T format items in internal
-writes whose last item is written to an earlier position than some
-previous item.
-
-Wed May 31 11:39:48 EDT 1995
- libf77: added subroutine exit(rc) (with integer return code rc),
-which works like a stop statement but supplies rc as the program's
-return code.
-
-Fri Jun 2 11:56:50 EDT 1995
- Fix memory fault in
- parameter (x=2.)
- data x /2./
- end
-This now elicits two error messages; the second ("too many
-initializers"), though not desirable, seems hard to eliminate
-without considerable hassle.
-
-Mon Jul 17 23:24:20 EDT 1995
- Fix botch in simplifying constants in certain complex
-expressions. Example:
- subroutine foo(s,z)
- double complex z
- double precision s, M, P
- parameter ( M = 100.d0, P = 2.d0 )
- z = M * M / s * dcmplx (1.d0, P/M)
-*** The imaginary part of z was miscomputed ***
- end
- Under -ext, complain about nonintegral dimensions.
-
-Fri Jul 21 11:18:36 EDT 1995
- Fix glitch on line 159 of init.c: change
- "(shortlogical *)0)",
-to
- "(shortlogical *)0",
-This affects multiple entry points when some but not all have
-arguments of type logical*2.
- libi77: adjust lwrite.c, wref.c, wrtfmt.c so compiling with
--DWANT_LEAD_0 causes formatted writes of floating-point numbers of
-magnitude < 1 to have an explicit 0 before the decimal point (if the
-field-width permits it). Note that the Fortran 77 Standard leaves it
-up to the implementation whether to supply these superfluous zeros.
-
-Tue Aug 1 09:25:56 EDT 1995
- Permit real (or double precision) parameters in dimension expressions.
-
-Mon Aug 7 08:04:00 EDT 1995
- Append "_eqv" rather than just "_" to names that that appear in
-EQUIVALENCE statements as well as structs in f2c.h (to avoid a
-conflict when these names also name common blocks).
-
-Tue Aug 8 12:49:02 EDT 1995
- Modify yesterday's change: merge st_fields with c_keywords, to
-cope with equivalences introduced to permit initializing numeric
-variables with character data. DATA statements causing these
-equivalences can appear after executable statements, so the only
-safe course is to rename all local variable with names in the
-former st_fields list. This has the unfortunate side effect that
-the common local variable "i" will henceforth be renamed "i__".
-
-Wed Aug 30 00:19:32 EDT 1995
- libf77: add F77_aloc, now used in s_cat and system_ (to allocate
-memory and check for failure in so doing).
- libi77: improve MSDOS logic in backspace.c.
-
-Wed Sep 6 09:06:19 EDT 1995
- libf77: Fix return type of system_ (integer) under -DKR_headers.
- libi77: Move some f_init calls around for people who do not use
-libF77's main(); now open and namelist read statements that are the
-first I/O statements executed should work right in that context.
-Adjust namelist input to treat a subscripted name whose subscripts do
-not involve colons similarly to the name without a subscript: accept
-several values, stored in successive elements starting at the
-indicated subscript. Adjust namelist output to quote character
-strings (avoiding confusion with arrays of character strings).
-
-Thu Sep 7 00:36:04 EDT 1995
- Fix glitch in integer*8 exponentiation function: it's pow_qq, not
-pow_qi.
- libi77: fix some bugs with -DAllow_TYQUAD (for integer*8); when
-looking for the &name that starts NAMELIST input, treat lines whose
-first nonblank character is something other than &, $, or ? as
-comment lines (i.e., ignore them), unless rsne.c is compiled with
--DNo_Namelist_Comments.
-
-Thu Sep 7 09:05:40 EDT 1995
- libi77: rdfmt.c: one more tweak for -DAllow_TYQUAD.
-
-Tue Sep 19 00:03:02 EDT 1995
- Adjust handling of floating-point subscript bounds (a questionable
-f2c extension) so subscripts in the generated C are of integral type.
- Move #define of roundup to proc.c (where its use is commented out);
-version.c left at 19950918.
-
-Wed Sep 20 17:24:19 EDT 1995
- Fix bug in handling ichar() under -h.
-
-Thu Oct 5 07:52:56 EDT 1995
- libi77: wrtfmt.c: fix bug with t editing (f__cursor was not always
-zeroed in mv_cur).
-
-Tue Oct 10 10:47:54 EDT 1995
- Under -ext, warn about X**-Y and X**+Y. Following the original f77,
-f2c treats these as X**(-Y) and X**(+Y), respectively. (They are not
-allowed by the official Fortran 77 Standard.) Some Fortran compilers
-give a bizarre interpretation to larger contexts, making multiplication
-noncommutative: they treat X**-Y*Z as X**(-Y*Z) rather than X**(-Y)*Z,
-which, following the rules of Fortran 77, is the same as (X**(-Y))*Z.
-
-Wed Oct 11 13:27:05 EDT 1995
- libi77: move defs of f__hiwater, f__svic, f__icptr from wrtfmt.c
-to err.c. This should work around a problem with buggy loaders and
-sometimes leads to smaller executable programs.
-
-Sat Oct 21 23:54:22 EDT 1995
- Under -h, fix bug in the treatment of ichar('0') in arithmetic
-expressions.
- Demote to -dneg (a new command-line option not mentioned in the
-man page) imitation of the original f77's treatment of unary minus
-applied to a REAL operand (yielding a DOUBLE PRECISION result).
-Previously this imitation (which was present for debugging) occurred
-under (the default) -!R. It is still suppressed by -R.
-
-Tue Nov 7 23:52:57 EST 1995
- Adjust assigned GOTOs to honor SAVE declarations.
- Add comments about ranlib to lib[FI]77/README and makefile.
-
-Tue Dec 19 22:54:06 EST 1995
- libf77: s_cat.c: fix bug when 2nd or later arg overlaps lhs.
-
-Tue Jan 2 17:54:00 EST 1996
- libi77: rdfmt.c: move #include "ctype.h" up before "stdlib.h"; no
-change to Version.c.
-
-Sun Feb 25 22:20:20 EST 1996
- Adjust expr.c to permit raising the integer constants 1 and -1 to
-negative constant integral powers.
- Avoid faulting when -T and -d are not followed by a directory name
-(immediately, without intervening spaces).
-
-Wed Feb 28 12:49:01 EST 1996
- Fix a glitch in handling complex parameters assigned a "wrong" type.
-Example:
- complex d, z
- parameter(z = (0d0,0d0))
- data d/z/ ! elicited "non-constant initializer"
- call foo(d)
- end
-
-Thu Feb 29 00:53:12 EST 1996
- Fix bug in handling character parameters assigned a char() value.
-Example:
- character*2 b,c
- character*1 esc
- parameter(esc = char(27))
- integer i
- data (b(i:i),i=1,2)/esc,'a'/
- data (c(i:i),i=1,2)/esc,'b'/ ! memory fault
- call foo(b,c)
- end
-
-Fri Mar 1 23:44:51 EST 1996
- Fix glitch in evaluating .EQ. and .NE. when both operands are
-logical constants (.TRUE. or .FALSE.).
-
-Fri Mar 15 17:29:54 EST 1996
- libi77: lread.c, rsfe.c: honor END= in READ stmts with empty iolist.
-
-Tue Mar 19 23:08:32 EST 1996
- lex.c: arrange for a "statement" consisting of a single short bogus
-keyword to elicit an error message showing the whole keyword. The
-error message formerly omitted the last letter of the bad keyword.
- libf77: s_cat.c: supply missing break after overlap detection.
-
-Mon May 13 23:35:26 EDT 1996
- Recognize Fortran 90's /= as a synonym for .NE.. (<> remains a
-synonym for .NE..)
- Emit an empty int function of no arguments to supply an external
-name to named block data subprograms (so they can be called somewhere
-to force them to be loaded from a library).
- Fix bug (memory fault) in handling the following illegal Fortran:
- parameter(i=1)
- equivalence(i,j)
- end
- Treat cdabs, cdcos, cdexp, cdlog, cdsin, and cdsqrt as synonyms for
-the double complex intrinsics zabs, zcos, zexp, zlog, zsin, and zsqrt,
-respectively, unless -cd is specified.
- Recognize the Fortran 90 bit-manipulation intrinsics btest, iand,
-ibclr, ibits, ibset, ieor, ior, ishft, and ishftc, unless -i90 is
-specified. Note that iand, ieor, and ior are thus now synonyms for
-"and", "xor", and "or", respectively.
- Add three macros (bit_test, bit_clear, bit_set) to f2c.h for use
-with btest, ibclr, and ibset, respectively. Add new functions
-[lq]bit_bits, [lq]bit_shift, and [lq]_bit_cshift to libF77 for
-use with ibits, ishft, and ishftc, respectively.
- Add integer function ftell(unit) (returning -1 on error) and
-subroutine fseek(unit, offset, whence, *) to libI77 (with branch to
-label * on error).
-
-Tue May 14 23:21:12 EDT 1996
- Fix glitch (possible memory fault, or worse) in handling multiple
-entry points with names over 28 characters long.
-
-Mon Jun 10 01:20:16 EDT 1996
- Update netlib E-mail and ftp addresses in f2c/readme and
-f2c/src/readme (which are different files) -- to reflect the upcoming
-breakup of AT&T.
- libf77: trivial tweaks to F77_aloc.c and system_.c; Version.c not
-changed.
- libi77: Adjust rsli.c and lread.c so internal list input with too
-few items in the input string will honor end= .
-
-Mon Jun 10 22:59:57 EDT 1996
- Add Bits_per_Byte to sysdep.h and adjust definition of Table_size
-to depend on Bits_per_Byte (forcing Table_size to be a power of 2); in
-lex.c, change "comstart[c & 0xfff]" to "comstart[c & (Table_size-1)]"
-to avoid an out-of-range subscript on end-of-file.
-
-Wed Jun 12 00:24:28 EDT 1996
- Fix bug in output.c (dereferencing a freed pointer) revealed in
- print * !np in out_call in output.c clobbered by free
- end !during out_expr.
-
-Wed Jun 19 08:12:47 EDT 1996
- f2c.h: add types uinteger, ulongint (for libF77); add qbit_clear
-and qbit_set macros (in a commented-out section) for integer*8.
- For integer*8, use qbit_clear and qbit_set for ibclr and ibset.
- libf77: add casts to unsigned in [lq]bitshft.c.
-
-Thu Jun 20 13:30:43 EDT 1996
- Complain at character*(*) in common (rather than faulting).
- Fix bug in recognizing hex constants that start with "16#" (e.g.,
-16#1234abcd, which is a synonym for z'1234abcd').
- Fix bugs in constant folding of expressions involving btest, ibclr,
-and ibset.
- Fix bug in constant folding of rshift(16#80000000, -31) (on a 32-bit
-machine; more generally, the bug was in constant folding of
-rshift(ibset(0,NBITS-1), 1-NBITS) when f2c runs on a machine with
-long ints having NBITS bits.
-
-Mon Jun 24 07:58:53 EDT 1996
- Adjust struct Literal and newlabel() function to accommodate huge
-source files (with more than 32767 newlabel() invocations).
- Omit .c file when the .f file has a missing final end statement.
-
-Wed Jun 26 14:00:02 EDT 1996
- libi77: Add discussion of MXUNIT (highest allowed Fortran unit number)
-to libI77/README.
-
-Fri Jun 28 14:16:11 EDT 1996
- Fix glitch with -onetrip: the temporary variable used for nonconstant
-initial loop variable values was recycled too soon. Example:
- do i = j+1, k
- call foo(i+1) ! temp for j+1 was reused here
- enddo
- end
-
-Tue Jul 2 16:11:27 EDT 1996
- formatdata.c: add a 0 to the end of the basetype array (for TYBLANK)
-(an omission that was harmless on most machines).
- expr.c: fix a dereference of NULL that was only possible with buggy
-input, such as
- subroutine $sub(s) ! the '$' is erroneous
- character s*(*)
- s(1:) = ' '
- end
-
-Sat Jul 6 00:44:56 EDT 1996
- Fix glitch in the intrinsic "real" function when applied to a
-complex (or double complex) variable and passed as an argument to
-some intrinsic functions. Example:
- complex a
- b = sqrt(a)
- end
- Fix glitch (only visible if you do not use f2c's malloc and the
-malloc you do use is defective in the sense that malloc(0) returns 0)
-in handling include files that end with another include (perhaps
-followed by comments).
- Fix glitch with character*(*) arguments named "h" and "i" when
-the body of the subroutine invokes the intrinsic LEN function.
- Arrange that after a previous "f2c -P foo.f" has produced foo.P,
-running "f2c foo.P foo.f" will produce valid C when foo.f contains
- call sub('1234')
- end
- subroutine sub(msg)
- end
-Specifically, the length argument in "call sub" is now suppressed.
-With or without foo.P, it is also now suppressed when the order of
-subprograms in file foo.f is reversed:
- subroutine sub(msg)
- end
- call sub('1234')
- end
- Adjust copyright notices to reflect AT&T breakup.
-
-Wed Jul 10 09:25:49 EDT 1996
- Fix bug (possible memory fault) in handling erroneously placed
-and inconsistent declarations. Example that faulted:
- character*1 w(8)
- call foo(w)
- end
- subroutine foo(m)
- data h /0.5/
- integer m(2) ! should be before data
- end
- Fix bug (possible fault) in handling illegal "if" constructions.
-Example (that faulted):
- subroutine foo(i,j)
- if (i) then ! bug: i is integer, not logical
- else if (j) then ! bug: j is integer, not logical
- endif
- end
- Fix glitch with character*(*) argument named "ret_len" to a
-character*(*) function.
-
-Wed Jul 10 23:04:16 EDT 1996
- Fix more glitches in the intrinsic "real" function when applied to a
-complex (or double complex) variable and passed as an argument to
-some intrinsic functions. Example:
- complex a, b
- r = sqrt(real(conjg(a))) + sqrt(real(a*b))
- end
-
-Thu Jul 11 17:27:16 EDT 1996
- Fix a memory fault associated with complicated, illegal input.
-Example:
- subroutine goo
- character a
- call foo(a) ! inconsistent with subsequent def and call
- end
- subroutine foo(a)
- end
- call foo(a)
- end
-
-Wed Jul 17 19:18:28 EDT 1996
- Fix yet another case of intrinsic "real" applied to a complex
-argument. Example:
- complex a(3)
- x = sqrt(real(a(2))) ! gave error message about bad tag
- end
-
-Mon Aug 26 11:28:57 EDT 1996
- Tweak sysdep.c for non-Unix systems in which process ID's can be
-over 5 digits long.
-
-Tue Aug 27 08:31:32 EDT 1996
- Adjust the ishft intrinsic to use unsigned right shifts. (Previously,
-a negative constant second operand resulted in a possibly signed shift.)
-
-Thu Sep 12 14:04:07 EDT 1996
- equiv.c: fix glitch with -DKR_headers.
- libi77: fmtlib.c: fix bug in printing the most negative integer.
-
-Fri Sep 13 08:54:40 EDT 1996
- Diagnose some illegal appearances of substring notation.
-
-Tue Sep 17 17:48:09 EDT 1996
- Fix fault in handling some complex parameters. Example:
- subroutine foo(a)
- double complex a, b
- parameter(b = (0,1))
- a = b ! f2c faulted here
- end
-
-Thu Sep 26 07:47:10 EDT 1996
- libi77: fmt.h: for formatted writes of negative integer*1 values,
-make ic signed on ANSI systems. If formatted writes of integer*1
-values trouble you when using a K&R C compiler, switch to an ANSI
-compiler or use a compiler flag that makes characters signed.
-
-Tue Oct 1 14:41:36 EDT 1996
- Give a better error message when dummy arguments appear in data
-statements.
-
-Thu Oct 17 13:37:22 EDT 1996
- Fix bug in typechecking arguments to character and complex (or
-double complex) functions; the bug could cause length arguments
-for character arguments to be omitted on invocations appearing
-textually after the first invocation. For example, in
- subroutine foo
- character c
- complex zot
- call goo(zot(c), zot(c))
- end
-the length was omitted from the second invocation of zot, and
-there was an erroneous error message about inconsistent calling
-sequences.
-
-Wed Dec 4 13:59:14 EST 1996
- Fix bug revealed by
- subroutine test(cdum,rdum)
- complex cdum
- rdum=cos(real(cdum)) ! "Unexpected tag 3 in opconv_fudge"
- end
- Fix glitch in parsing "DO 10 D0 = 1, 10".
- Fix glitch in parsing
- real*8 x
- real*8 x ! erroneous "incompatible type" message
- call foo(x)
- end
-
-Mon Dec 9 23:15:02 EST 1996
- Fix glitch in parameter adjustments for arrays whose lower
-bound depends on a scalar argument. Example:
- subroutine bug(p,z,m,n)
- integer z(*),m,n
- double precision p(z(m):z(m) + n) ! p_offset botched
- call foo(p(0), p(n))
- end
- libi77: complain about non-positive rec= in direct read and write
-statements.
- libf77: trivial adjustments; Version.c not changed.
-
-Wed Feb 12 00:18:03 EST 1997
- output.c: fix (seldom problematic) glitch in out_call: put parens
-around the ... in a test of the form "if (q->tag == TADDR && ...)".
- vax.c: fix bug revealed in the "psi_offset =" assignment in the
-following example:
- subroutine foo(psi,m)
- integer z(100),m
- common /a/ z
- double precision psi(z(m):z(m) + 10)
- call foo(m+1, psi(0),psi(10))
- end
-
-Mon Feb 24 23:44:54 EST 1997
- For consistency with f2c's current treatment of adjacent character
-strings in FORMAT statements, recognize a Hollerith string following
-a string (and merge adjacent strings in FORMAT statements).
-
-Wed Feb 26 13:41:11 EST 1997
- New libf2c.zip, a combination of the libf77 and libi77 bundles (and
-available only by ftp).
- libf77: adjust functions with a complex output argument to permit
-aliasing it with input arguments. (For now, at least, this is just
-for possible benefit of g77.)
- libi77: tweak to ftell_.c for systems with strange definitions of
-SEEK_SET, etc.
-
-Tue Apr 8 20:57:08 EDT 1997
- libf77: [cz]_div.c: tweaks invisible on most systems (that may
-improve things slightly with optimized compilation on systems that use
-gratuitous extra precision).
- libi77: fmt.c: adjust to complain at missing numbers in formats
-(but still treat missing ".nnn" as ".0").
-
-Fri Apr 11 14:05:57 EDT 1997
- libi77: err.c: attempt to make stderr line buffered rather than
-fully buffered. (Buffering is needed for format items T and TR.)
-
-Thu Apr 17 22:42:43 EDT 1997
- libf77: add F77_aloc.o to makefile (and makefile.u in libf2c.zip).
-
-Fri Apr 25 19:32:09 EDT 1997
- libf77: add [de]time_.c (which may give trouble on some systems).
-
-Tue May 27 09:18:52 EDT 1997
- libi77: ftell_.c: fix typo that caused the third argument to be
-treated as 2 on some systems.
-
-Mon Jun 9 00:04:37 EDT 1997
- libi77 (and libf2c.zip): adjust include order in err.c lread.c wref.c
-rdfmt.c to include fmt.h (etc.) after system includes. Version.c not
-changed.
-
-Mon Jul 21 16:04:54 EDT 1997
- proc.c: fix glitch in logic for "nonpositive dimension" message.
- libi77: inquire.c: always include string.h (for possible use with
--DNON_UNIX_STDIO); Version.c not changed.
-
-Thu Jul 24 17:11:23 EDT 1997
- Tweak "Notice" to reflect the AT&T breakup -- we missed it when
-updating the copyright notices in the source files last summer.
- Adjust src/makefile so malloc.o is not used by default, but can
-be specified with "make MALLOC=malloc.o".
- Add comments to src/README about the "CRAY" T3E.
-
-Tue Aug 5 14:53:25 EDT 1997
- Add definition of calloc to malloc.c; this makes f2c's malloc
-work on some systems where trouble hitherto arose because references
-to calloc brought in the system's malloc. (On sensible systems,
-calloc is defined separately from malloc. To avoid confusion on
-other systems, f2c/malloc.c now defines calloc.)
- libi77: lread.c: adjust to accord with a change to the Fortran 8X
-draft (in 1990 or 1991) that rescinded permission to elide quote marks
-in namelist input of character data; to get the old behavior, compile
-with F8X_NML_ELIDE_QUOTES #defined. wrtfmt.o: wrt_G: tweak to print
-the right number of 0's for zero under G format.
-
-Sat Aug 16 05:45:32 EDT 1997
- libI77: iio.c: fix bug in internal writes to an array of character
-strings that sometimes caused one more array element than required by
-the format to be blank-filled. Example: format(1x).
diff --git a/gcc/f/runtime/configure b/gcc/f/runtime/configure
deleted file mode 100755
index 9d7b6f5069f..00000000000
--- a/gcc/f/runtime/configure
+++ /dev/null
@@ -1,2051 +0,0 @@
-#! /bin/sh
-
-# Guess values for system-dependent variables and create Makefiles.
-# Generated automatically using autoconf version 2.12
-# Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc.
-#
-# This configure script is free software; the Free Software Foundation
-# gives unlimited permission to copy, distribute and modify it.
-
-# Defaults:
-ac_help=
-ac_default_prefix=/usr/local
-# Any additions from configure.in:
-
-# Initialize some variables set by options.
-# The variables have the same names as the options, with
-# dashes changed to underlines.
-build=NONE
-cache_file=./config.cache
-exec_prefix=NONE
-host=NONE
-no_create=
-nonopt=NONE
-no_recursion=
-prefix=NONE
-program_prefix=NONE
-program_suffix=NONE
-program_transform_name=s,x,x,
-silent=
-site=
-srcdir=
-target=NONE
-verbose=
-x_includes=NONE
-x_libraries=NONE
-bindir='${exec_prefix}/bin'
-sbindir='${exec_prefix}/sbin'
-libexecdir='${exec_prefix}/libexec'
-datadir='${prefix}/share'
-sysconfdir='${prefix}/etc'
-sharedstatedir='${prefix}/com'
-localstatedir='${prefix}/var'
-libdir='${exec_prefix}/lib'
-includedir='${prefix}/include'
-oldincludedir='/usr/include'
-infodir='${prefix}/info'
-mandir='${prefix}/man'
-
-# Initialize some other variables.
-subdirs=
-MFLAGS= MAKEFLAGS=
-# Maximum number of lines to put in a shell here document.
-ac_max_here_lines=12
-
-ac_prev=
-for ac_option
-do
-
- # If the previous option needs an argument, assign it.
- if test -n "$ac_prev"; then
- eval "$ac_prev=\$ac_option"
- ac_prev=
- continue
- fi
-
- case "$ac_option" in
- -*=*) ac_optarg=`echo "$ac_option" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
- *) ac_optarg= ;;
- esac
-
- # Accept the important Cygnus configure options, so we can diagnose typos.
-
- case "$ac_option" in
-
- -bindir | --bindir | --bindi | --bind | --bin | --bi)
- ac_prev=bindir ;;
- -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
- bindir="$ac_optarg" ;;
-
- -build | --build | --buil | --bui | --bu)
- ac_prev=build ;;
- -build=* | --build=* | --buil=* | --bui=* | --bu=*)
- build="$ac_optarg" ;;
-
- -cache-file | --cache-file | --cache-fil | --cache-fi \
- | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
- ac_prev=cache_file ;;
- -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
- | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
- cache_file="$ac_optarg" ;;
-
- -datadir | --datadir | --datadi | --datad | --data | --dat | --da)
- ac_prev=datadir ;;
- -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \
- | --da=*)
- datadir="$ac_optarg" ;;
-
- -disable-* | --disable-*)
- ac_feature=`echo $ac_option|sed -e 's/-*disable-//'`
- # Reject names that are not valid shell variable names.
- if test -n "`echo $ac_feature| sed 's/[-a-zA-Z0-9_]//g'`"; then
- { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; }
- fi
- ac_feature=`echo $ac_feature| sed 's/-/_/g'`
- eval "enable_${ac_feature}=no" ;;
-
- -enable-* | --enable-*)
- ac_feature=`echo $ac_option|sed -e 's/-*enable-//' -e 's/=.*//'`
- # Reject names that are not valid shell variable names.
- if test -n "`echo $ac_feature| sed 's/[-_a-zA-Z0-9]//g'`"; then
- { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; }
- fi
- ac_feature=`echo $ac_feature| sed 's/-/_/g'`
- case "$ac_option" in
- *=*) ;;
- *) ac_optarg=yes ;;
- esac
- eval "enable_${ac_feature}='$ac_optarg'" ;;
-
- -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
- | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
- | --exec | --exe | --ex)
- ac_prev=exec_prefix ;;
- -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
- | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
- | --exec=* | --exe=* | --ex=*)
- exec_prefix="$ac_optarg" ;;
-
- -gas | --gas | --ga | --g)
- # Obsolete; use --with-gas.
- with_gas=yes ;;
-
- -help | --help | --hel | --he)
- # Omit some internal or obsolete options to make the list less imposing.
- # This message is too long to be a string in the A/UX 3.1 sh.
- cat << EOF
-Usage: configure [options] [host]
-Options: [defaults in brackets after descriptions]
-Configuration:
- --cache-file=FILE cache test results in FILE
- --help print this message
- --no-create do not create output files
- --quiet, --silent do not print \`checking...' messages
- --version print the version of autoconf that created configure
-Directory and file names:
- --prefix=PREFIX install architecture-independent files in PREFIX
- [$ac_default_prefix]
- --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
- [same as prefix]
- --bindir=DIR user executables in DIR [EPREFIX/bin]
- --sbindir=DIR system admin executables in DIR [EPREFIX/sbin]
- --libexecdir=DIR program executables in DIR [EPREFIX/libexec]
- --datadir=DIR read-only architecture-independent data in DIR
- [PREFIX/share]
- --sysconfdir=DIR read-only single-machine data in DIR [PREFIX/etc]
- --sharedstatedir=DIR modifiable architecture-independent data in DIR
- [PREFIX/com]
- --localstatedir=DIR modifiable single-machine data in DIR [PREFIX/var]
- --libdir=DIR object code libraries in DIR [EPREFIX/lib]
- --includedir=DIR C header files in DIR [PREFIX/include]
- --oldincludedir=DIR C header files for non-gcc in DIR [/usr/include]
- --infodir=DIR info documentation in DIR [PREFIX/info]
- --mandir=DIR man documentation in DIR [PREFIX/man]
- --srcdir=DIR find the sources in DIR [configure dir or ..]
- --program-prefix=PREFIX prepend PREFIX to installed program names
- --program-suffix=SUFFIX append SUFFIX to installed program names
- --program-transform-name=PROGRAM
- run sed PROGRAM on installed program names
-EOF
- cat << EOF
-Host type:
- --build=BUILD configure for building on BUILD [BUILD=HOST]
- --host=HOST configure for HOST [guessed]
- --target=TARGET configure for TARGET [TARGET=HOST]
-Features and packages:
- --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
- --enable-FEATURE[=ARG] include FEATURE [ARG=yes]
- --with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
- --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
- --x-includes=DIR X include files are in DIR
- --x-libraries=DIR X library files are in DIR
-EOF
- if test -n "$ac_help"; then
- echo "--enable and --with options recognized:$ac_help"
- fi
- exit 0 ;;
-
- -host | --host | --hos | --ho)
- ac_prev=host ;;
- -host=* | --host=* | --hos=* | --ho=*)
- host="$ac_optarg" ;;
-
- -includedir | --includedir | --includedi | --included | --include \
- | --includ | --inclu | --incl | --inc)
- ac_prev=includedir ;;
- -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
- | --includ=* | --inclu=* | --incl=* | --inc=*)
- includedir="$ac_optarg" ;;
-
- -infodir | --infodir | --infodi | --infod | --info | --inf)
- ac_prev=infodir ;;
- -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
- infodir="$ac_optarg" ;;
-
- -libdir | --libdir | --libdi | --libd)
- ac_prev=libdir ;;
- -libdir=* | --libdir=* | --libdi=* | --libd=*)
- libdir="$ac_optarg" ;;
-
- -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
- | --libexe | --libex | --libe)
- ac_prev=libexecdir ;;
- -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
- | --libexe=* | --libex=* | --libe=*)
- libexecdir="$ac_optarg" ;;
-
- -localstatedir | --localstatedir | --localstatedi | --localstated \
- | --localstate | --localstat | --localsta | --localst \
- | --locals | --local | --loca | --loc | --lo)
- ac_prev=localstatedir ;;
- -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
- | --localstate=* | --localstat=* | --localsta=* | --localst=* \
- | --locals=* | --local=* | --loca=* | --loc=* | --lo=*)
- localstatedir="$ac_optarg" ;;
-
- -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
- ac_prev=mandir ;;
- -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
- mandir="$ac_optarg" ;;
-
- -nfp | --nfp | --nf)
- # Obsolete; use --without-fp.
- with_fp=no ;;
-
- -no-create | --no-create | --no-creat | --no-crea | --no-cre \
- | --no-cr | --no-c)
- no_create=yes ;;
-
- -no-recursion | --no-recursion | --no-recursio | --no-recursi \
- | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
- no_recursion=yes ;;
-
- -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
- | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
- | --oldin | --oldi | --old | --ol | --o)
- ac_prev=oldincludedir ;;
- -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
- | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
- | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
- oldincludedir="$ac_optarg" ;;
-
- -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
- ac_prev=prefix ;;
- -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
- prefix="$ac_optarg" ;;
-
- -program-prefix | --program-prefix | --program-prefi | --program-pref \
- | --program-pre | --program-pr | --program-p)
- ac_prev=program_prefix ;;
- -program-prefix=* | --program-prefix=* | --program-prefi=* \
- | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
- program_prefix="$ac_optarg" ;;
-
- -program-suffix | --program-suffix | --program-suffi | --program-suff \
- | --program-suf | --program-su | --program-s)
- ac_prev=program_suffix ;;
- -program-suffix=* | --program-suffix=* | --program-suffi=* \
- | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
- program_suffix="$ac_optarg" ;;
-
- -program-transform-name | --program-transform-name \
- | --program-transform-nam | --program-transform-na \
- | --program-transform-n | --program-transform- \
- | --program-transform | --program-transfor \
- | --program-transfo | --program-transf \
- | --program-trans | --program-tran \
- | --progr-tra | --program-tr | --program-t)
- ac_prev=program_transform_name ;;
- -program-transform-name=* | --program-transform-name=* \
- | --program-transform-nam=* | --program-transform-na=* \
- | --program-transform-n=* | --program-transform-=* \
- | --program-transform=* | --program-transfor=* \
- | --program-transfo=* | --program-transf=* \
- | --program-trans=* | --program-tran=* \
- | --progr-tra=* | --program-tr=* | --program-t=*)
- program_transform_name="$ac_optarg" ;;
-
- -q | -quiet | --quiet | --quie | --qui | --qu | --q \
- | -silent | --silent | --silen | --sile | --sil)
- silent=yes ;;
-
- -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
- ac_prev=sbindir ;;
- -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
- | --sbi=* | --sb=*)
- sbindir="$ac_optarg" ;;
-
- -sharedstatedir | --sharedstatedir | --sharedstatedi \
- | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
- | --sharedst | --shareds | --shared | --share | --shar \
- | --sha | --sh)
- ac_prev=sharedstatedir ;;
- -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
- | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
- | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
- | --sha=* | --sh=*)
- sharedstatedir="$ac_optarg" ;;
-
- -site | --site | --sit)
- ac_prev=site ;;
- -site=* | --site=* | --sit=*)
- site="$ac_optarg" ;;
-
- -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
- ac_prev=srcdir ;;
- -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
- srcdir="$ac_optarg" ;;
-
- -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
- | --syscon | --sysco | --sysc | --sys | --sy)
- ac_prev=sysconfdir ;;
- -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
- | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
- sysconfdir="$ac_optarg" ;;
-
- -target | --target | --targe | --targ | --tar | --ta | --t)
- ac_prev=target ;;
- -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
- target="$ac_optarg" ;;
-
- -v | -verbose | --verbose | --verbos | --verbo | --verb)
- verbose=yes ;;
-
- -version | --version | --versio | --versi | --vers)
- echo "configure generated by autoconf version 2.12"
- exit 0 ;;
-
- -with-* | --with-*)
- ac_package=`echo $ac_option|sed -e 's/-*with-//' -e 's/=.*//'`
- # Reject names that are not valid shell variable names.
- if test -n "`echo $ac_package| sed 's/[-_a-zA-Z0-9]//g'`"; then
- { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; }
- fi
- ac_package=`echo $ac_package| sed 's/-/_/g'`
- case "$ac_option" in
- *=*) ;;
- *) ac_optarg=yes ;;
- esac
- eval "with_${ac_package}='$ac_optarg'" ;;
-
- -without-* | --without-*)
- ac_package=`echo $ac_option|sed -e 's/-*without-//'`
- # Reject names that are not valid shell variable names.
- if test -n "`echo $ac_package| sed 's/[-a-zA-Z0-9_]//g'`"; then
- { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; }
- fi
- ac_package=`echo $ac_package| sed 's/-/_/g'`
- eval "with_${ac_package}=no" ;;
-
- --x)
- # Obsolete; use --with-x.
- with_x=yes ;;
-
- -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
- | --x-incl | --x-inc | --x-in | --x-i)
- ac_prev=x_includes ;;
- -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
- | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
- x_includes="$ac_optarg" ;;
-
- -x-libraries | --x-libraries | --x-librarie | --x-librari \
- | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
- ac_prev=x_libraries ;;
- -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
- | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
- x_libraries="$ac_optarg" ;;
-
- -*) { echo "configure: error: $ac_option: invalid option; use --help to show usage" 1>&2; exit 1; }
- ;;
-
- *)
- if test -n "`echo $ac_option| sed 's/[-a-z0-9.]//g'`"; then
- echo "configure: warning: $ac_option: invalid host type" 1>&2
- fi
- if test "x$nonopt" != xNONE; then
- { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; }
- fi
- nonopt="$ac_option"
- ;;
-
- esac
-done
-
-if test -n "$ac_prev"; then
- { echo "configure: error: missing argument to --`echo $ac_prev | sed 's/_/-/g'`" 1>&2; exit 1; }
-fi
-
-trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15
-
-# File descriptor usage:
-# 0 standard input
-# 1 file creation
-# 2 errors and warnings
-# 3 some systems may open it to /dev/tty
-# 4 used on the Kubota Titan
-# 6 checking for... messages and results
-# 5 compiler messages saved in config.log
-if test "$silent" = yes; then
- exec 6>/dev/null
-else
- exec 6>&1
-fi
-exec 5>./config.log
-
-echo "\
-This file contains any messages produced by compilers while
-running configure, to aid debugging if configure makes a mistake.
-" 1>&5
-
-# Strip out --no-create and --no-recursion so they do not pile up.
-# Also quote any args containing shell metacharacters.
-ac_configure_args=
-for ac_arg
-do
- case "$ac_arg" in
- -no-create | --no-create | --no-creat | --no-crea | --no-cre \
- | --no-cr | --no-c) ;;
- -no-recursion | --no-recursion | --no-recursio | --no-recursi \
- | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;;
- *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*)
- ac_configure_args="$ac_configure_args '$ac_arg'" ;;
- *) ac_configure_args="$ac_configure_args $ac_arg" ;;
- esac
-done
-
-# NLS nuisances.
-# Only set these to C if already set. These must not be set unconditionally
-# because not all systems understand e.g. LANG=C (notably SCO).
-# Fixing LC_MESSAGES prevents Solaris sh from translating var values in `set'!
-# Non-C LC_CTYPE values break the ctype check.
-if test "${LANG+set}" = set; then LANG=C; export LANG; fi
-if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi
-if test "${LC_MESSAGES+set}" = set; then LC_MESSAGES=C; export LC_MESSAGES; fi
-if test "${LC_CTYPE+set}" = set; then LC_CTYPE=C; export LC_CTYPE; fi
-
-# confdefs.h avoids OS command line length limits that DEFS can exceed.
-rm -rf conftest* confdefs.h
-# AIX cpp loses on an empty file, so make sure it contains at least a newline.
-echo > confdefs.h
-
-# A filename unique to this package, relative to the directory that
-# configure is in, which we can look for to find out if srcdir is correct.
-ac_unique_file=libF77/Version.c
-
-# Find the source files, if location was not specified.
-if test -z "$srcdir"; then
- ac_srcdir_defaulted=yes
- # Try the directory containing this script, then its parent.
- ac_prog=$0
- ac_confdir=`echo $ac_prog|sed 's%/[^/][^/]*$%%'`
- test "x$ac_confdir" = "x$ac_prog" && ac_confdir=.
- srcdir=$ac_confdir
- if test ! -r $srcdir/$ac_unique_file; then
- srcdir=..
- fi
-else
- ac_srcdir_defaulted=no
-fi
-if test ! -r $srcdir/$ac_unique_file; then
- if test "$ac_srcdir_defaulted" = yes; then
- { echo "configure: error: can not find sources in $ac_confdir or .." 1>&2; exit 1; }
- else
- { echo "configure: error: can not find sources in $srcdir" 1>&2; exit 1; }
- fi
-fi
-srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'`
-
-# Prefer explicitly selected file to automatically selected ones.
-if test -z "$CONFIG_SITE"; then
- if test "x$prefix" != xNONE; then
- CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site"
- else
- CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
- fi
-fi
-for ac_site_file in $CONFIG_SITE; do
- if test -r "$ac_site_file"; then
- echo "loading site script $ac_site_file"
- . "$ac_site_file"
- fi
-done
-
-if test -r "$cache_file"; then
- echo "loading cache $cache_file"
- . $cache_file
-else
- echo "creating cache $cache_file"
- > $cache_file
-fi
-
-ac_ext=c
-# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
-ac_link='${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
-cross_compiling=$ac_cv_prog_cc_cross
-
-if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then
- # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu.
- if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then
- ac_n= ac_c='
-' ac_t=' '
- else
- ac_n=-n ac_c= ac_t=
- fi
-else
- ac_n= ac_c='\c' ac_t=
-fi
-
-
-
-# From configure.in 1.10
-
-# For g77 we'll set CC to point at the built gcc, but this will get it into
-# the makefiles
-# Extract the first word of "gcc", so it can be a program name with args.
-set dummy gcc; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:530: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- if test -n "$CC"; then
- ac_cv_prog_CC="$CC" # Let the user override the test.
-else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
- for ac_dir in $PATH; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_prog_CC="gcc"
- break
- fi
- done
- IFS="$ac_save_ifs"
-fi
-fi
-CC="$ac_cv_prog_CC"
-if test -n "$CC"; then
- echo "$ac_t""$CC" 1>&6
-else
- echo "$ac_t""no" 1>&6
-fi
-
-if test -z "$CC"; then
- # Extract the first word of "cc", so it can be a program name with args.
-set dummy cc; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:559: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- if test -n "$CC"; then
- ac_cv_prog_CC="$CC" # Let the user override the test.
-else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
- ac_prog_rejected=no
- for ac_dir in $PATH; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then
- ac_prog_rejected=yes
- continue
- fi
- ac_cv_prog_CC="cc"
- break
- fi
- done
- IFS="$ac_save_ifs"
-if test $ac_prog_rejected = yes; then
- # We found a bogon in the path, so make sure we never use it.
- set dummy $ac_cv_prog_CC
- shift
- if test $# -gt 0; then
- # We chose a different compiler from the bogus one.
- # However, it has the same basename, so the bogon will be chosen
- # first if we set CC to just the basename; use the full file name.
- shift
- set dummy "$ac_dir/$ac_word" "$@"
- shift
- ac_cv_prog_CC="$@"
- fi
-fi
-fi
-fi
-CC="$ac_cv_prog_CC"
-if test -n "$CC"; then
- echo "$ac_t""$CC" 1>&6
-else
- echo "$ac_t""no" 1>&6
-fi
-
- test -z "$CC" && { echo "configure: error: no acceptable cc found in \$PATH" 1>&2; exit 1; }
-fi
-
-echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
-echo "configure:607: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
-
-ac_ext=c
-# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
-ac_link='${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
-cross_compiling=$ac_cv_prog_cc_cross
-
-cat > conftest.$ac_ext <<EOF
-#line 617 "configure"
-#include "confdefs.h"
-main(){return(0);}
-EOF
-if { (eval echo configure:621: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
- ac_cv_prog_cc_works=yes
- # If we can't run a trivial program, we are probably using a cross compiler.
- if (./conftest; exit) 2>/dev/null; then
- ac_cv_prog_cc_cross=no
- else
- ac_cv_prog_cc_cross=yes
- fi
-else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- ac_cv_prog_cc_works=no
-fi
-rm -fr conftest*
-
-echo "$ac_t""$ac_cv_prog_cc_works" 1>&6
-if test $ac_cv_prog_cc_works = no; then
- { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; }
-fi
-echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
-echo "configure:641: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
-echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6
-cross_compiling=$ac_cv_prog_cc_cross
-
-echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
-echo "configure:646: checking whether we are using GNU C" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.c <<EOF
-#ifdef __GNUC__
- yes;
-#endif
-EOF
-if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:655: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
- ac_cv_prog_gcc=yes
-else
- ac_cv_prog_gcc=no
-fi
-fi
-
-echo "$ac_t""$ac_cv_prog_gcc" 1>&6
-
-if test $ac_cv_prog_gcc = yes; then
- GCC=yes
- ac_test_CFLAGS="${CFLAGS+set}"
- ac_save_CFLAGS="$CFLAGS"
- CFLAGS=
- echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
-echo "configure:670: checking whether ${CC-cc} accepts -g" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- echo 'void f(){}' > conftest.c
-if test -z "`${CC-cc} -g -c conftest.c 2>&1`"; then
- ac_cv_prog_cc_g=yes
-else
- ac_cv_prog_cc_g=no
-fi
-rm -f conftest*
-
-fi
-
-echo "$ac_t""$ac_cv_prog_cc_g" 1>&6
- if test "$ac_test_CFLAGS" = set; then
- CFLAGS="$ac_save_CFLAGS"
- elif test $ac_cv_prog_cc_g = yes; then
- CFLAGS="-g -O2"
- else
- CFLAGS="-O2"
- fi
-else
- GCC=
- test "${CFLAGS+set}" = set || CFLAGS="-g"
-fi
-
-if test "$CROSS";then
- ac_cv_c_cross=yes
-else
- ac_cv_c_cross=no
-fi
-
-test "$AR" || AR=ar
-
-if test "$RANLIB"; then :
-
- if test -z "$RANLIB_TEST"; then
- RANLIB_TEST=true
- fi
-else
- RANLIB_TEST=true
- # Extract the first word of "ranlib", so it can be a program name with args.
-set dummy ranlib; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:715: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- if test -n "$RANLIB"; then
- ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
-else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
- for ac_dir in $PATH; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_prog_RANLIB="ranlib"
- break
- fi
- done
- IFS="$ac_save_ifs"
- test -z "$ac_cv_prog_RANLIB" && ac_cv_prog_RANLIB=":"
-fi
-fi
-RANLIB="$ac_cv_prog_RANLIB"
-if test -n "$RANLIB"; then
- echo "$ac_t""$RANLIB" 1>&6
-else
- echo "$ac_t""no" 1>&6
-fi
-
-fi
-
-
-
-
-# Sanity check for the cross-compilation case:
-echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
-echo "configure:748: checking how to run the C preprocessor" >&5
-# On Suns, sometimes $CPP names a directory.
-if test -n "$CPP" && test -d "$CPP"; then
- CPP=
-fi
-if test -z "$CPP"; then
-if eval "test \"`echo '$''{'ac_cv_prog_CPP'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- # This must be in double quotes, not single quotes, because CPP may get
- # substituted into the Makefile and "${CC-cc}" will confuse make.
- CPP="${CC-cc} -E"
- # On the NeXT, cc -E runs the code through the compiler's parser,
- # not just through cpp.
- cat > conftest.$ac_ext <<EOF
-#line 763 "configure"
-#include "confdefs.h"
-#include <assert.h>
-Syntax Error
-EOF
-ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:769: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-ac_err=`grep -v '^ *+' conftest.out`
-if test -z "$ac_err"; then
- :
-else
- echo "$ac_err" >&5
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- CPP="${CC-cc} -E -traditional-cpp"
- cat > conftest.$ac_ext <<EOF
-#line 780 "configure"
-#include "confdefs.h"
-#include <assert.h>
-Syntax Error
-EOF
-ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:786: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-ac_err=`grep -v '^ *+' conftest.out`
-if test -z "$ac_err"; then
- :
-else
- echo "$ac_err" >&5
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- CPP=/lib/cpp
-fi
-rm -f conftest*
-fi
-rm -f conftest*
- ac_cv_prog_CPP="$CPP"
-fi
- CPP="$ac_cv_prog_CPP"
-else
- ac_cv_prog_CPP="$CPP"
-fi
-echo "$ac_t""$CPP" 1>&6
-
-ac_safe=`echo "stdio.h" | sed 'y%./+-%__p_%'`
-echo $ac_n "checking for stdio.h""... $ac_c" 1>&6
-echo "configure:810: checking for stdio.h" >&5
-if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.$ac_ext <<EOF
-#line 815 "configure"
-#include "confdefs.h"
-#include <stdio.h>
-EOF
-ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:820: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-ac_err=`grep -v '^ *+' conftest.out`
-if test -z "$ac_err"; then
- rm -rf conftest*
- eval "ac_cv_header_$ac_safe=yes"
-else
- echo "$ac_err" >&5
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- eval "ac_cv_header_$ac_safe=no"
-fi
-rm -f conftest*
-fi
-if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
- echo "$ac_t""yes" 1>&6
- :
-else
- echo "$ac_t""no" 1>&6
-{ echo "configure: error: Can't find stdio.h.
-You must have a usable C system for the target already installed, at least
-including headers and, preferably, the library, before you can configure
-the G77 runtime system. If necessary, install gcc now with \`LANGUAGES=c',
-then the target library, then build with \`LANGUAGES=f77'." 1>&2; exit 1; }
-fi
-
-
-echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6
-echo "configure:848: checking for ANSI C header files" >&5
-if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.$ac_ext <<EOF
-#line 853 "configure"
-#include "confdefs.h"
-#include <stdlib.h>
-#include <stdarg.h>
-#include <string.h>
-#include <float.h>
-EOF
-ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:861: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-ac_err=`grep -v '^ *+' conftest.out`
-if test -z "$ac_err"; then
- rm -rf conftest*
- ac_cv_header_stdc=yes
-else
- echo "$ac_err" >&5
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- ac_cv_header_stdc=no
-fi
-rm -f conftest*
-
-if test $ac_cv_header_stdc = yes; then
- # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
-cat > conftest.$ac_ext <<EOF
-#line 878 "configure"
-#include "confdefs.h"
-#include <string.h>
-EOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- egrep "memchr" >/dev/null 2>&1; then
- :
-else
- rm -rf conftest*
- ac_cv_header_stdc=no
-fi
-rm -f conftest*
-
-fi
-
-if test $ac_cv_header_stdc = yes; then
- # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
-cat > conftest.$ac_ext <<EOF
-#line 896 "configure"
-#include "confdefs.h"
-#include <stdlib.h>
-EOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- egrep "free" >/dev/null 2>&1; then
- :
-else
- rm -rf conftest*
- ac_cv_header_stdc=no
-fi
-rm -f conftest*
-
-fi
-
-if test $ac_cv_header_stdc = yes; then
- # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
-if test "$cross_compiling" = yes; then
- :
-else
- cat > conftest.$ac_ext <<EOF
-#line 917 "configure"
-#include "confdefs.h"
-#include <ctype.h>
-#define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
-#define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
-#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
-int main () { int i; for (i = 0; i < 256; i++)
-if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2);
-exit (0); }
-
-EOF
-if { (eval echo configure:928: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
-then
- :
-else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -fr conftest*
- ac_cv_header_stdc=no
-fi
-rm -fr conftest*
-fi
-
-fi
-fi
-
-echo "$ac_t""$ac_cv_header_stdc" 1>&6
-if test $ac_cv_header_stdc = yes; then
- cat >> confdefs.h <<\EOF
-#define STDC_HEADERS 1
-EOF
-
-fi
-
-
-
-echo $ac_n "checking for posix""... $ac_c" 1>&6
-echo "configure:954: checking for posix" >&5
-if eval "test \"`echo '$''{'g77_cv_header_posix'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.$ac_ext <<EOF
-#line 959 "configure"
-#include "confdefs.h"
-#include <sys/types.h>
-#include <unistd.h>
-#ifdef _POSIX_VERSION
- yes
-#endif
-
-EOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- egrep "yes" >/dev/null 2>&1; then
- rm -rf conftest*
- g77_cv_header_posix=yes
-else
- rm -rf conftest*
- g77_cv_header_posix=no
-fi
-rm -f conftest*
-
-fi
-
-echo "$ac_t""$g77_cv_header_posix" 1>&6
-
-# We can rely on the GNU library being posix-ish. I guess checking the
-# header isn't actually like checking the functions, though...
-echo $ac_n "checking for GNU library""... $ac_c" 1>&6
-echo "configure:985: checking for GNU library" >&5
-if eval "test \"`echo '$''{'g77_cv_lib_gnu'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.$ac_ext <<EOF
-#line 990 "configure"
-#include "confdefs.h"
-#include <stdio.h>
-#ifdef __GNU_LIBRARY__
- yes
-#endif
-
-EOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- egrep "yes" >/dev/null 2>&1; then
- rm -rf conftest*
- g77_cv_lib_gnu=yes
-else
- rm -rf conftest*
- g77_cv_lib_gnu=no
-fi
-rm -f conftest*
-
-fi
-
-echo "$ac_t""$g77_cv_lib_gnu" 1>&6
-
-# Apparently cygwin needs to be special-cased.
-echo $ac_n "checking for cyg\`win'32""... $ac_c" 1>&6
-echo "configure:1014: checking for cyg\`win'32" >&5
-if eval "test \"`echo '$''{'g77_cv_sys_cygwin32'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.$ac_ext <<EOF
-#line 1019 "configure"
-#include "confdefs.h"
-#ifdef __CYGWIN32__
- yes
-#endif
-
-EOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- egrep "yes" >/dev/null 2>&1; then
- rm -rf conftest*
- g77_cv_sys_cygwin32=yes
-else
- rm -rf conftest*
- g77_cv_sys_cygwin32=no
-fi
-rm -f conftest*
-
-fi
-
-echo "$ac_t""$g77_cv_sys_cygwin32" 1>&6
-
-ac_safe=`echo "fcntl.h" | sed 'y%./+-%__p_%'`
-echo $ac_n "checking for fcntl.h""... $ac_c" 1>&6
-echo "configure:1042: checking for fcntl.h" >&5
-if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.$ac_ext <<EOF
-#line 1047 "configure"
-#include "confdefs.h"
-#include <fcntl.h>
-EOF
-ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1052: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-ac_err=`grep -v '^ *+' conftest.out`
-if test -z "$ac_err"; then
- rm -rf conftest*
- eval "ac_cv_header_$ac_safe=yes"
-else
- echo "$ac_err" >&5
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- eval "ac_cv_header_$ac_safe=no"
-fi
-rm -f conftest*
-fi
-if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
- echo "$ac_t""yes" 1>&6
- test $g77_cv_header_posix = yes && cat >> confdefs.h <<\EOF
-#define _POSIX_SOURCE 1
-EOF
-
-else
- echo "$ac_t""no" 1>&6
-cat >> confdefs.h <<\EOF
-#define NO_FCNTL 1
-EOF
- cat >> confdefs.h <<\EOF
-#define OPEN_DECL 1
-EOF
-
-fi
-
-
-echo $ac_n "checking for working const""... $ac_c" 1>&6
-echo "configure:1085: checking for working const" >&5
-if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.$ac_ext <<EOF
-#line 1090 "configure"
-#include "confdefs.h"
-
-int main() {
-
-/* Ultrix mips cc rejects this. */
-typedef int charset[2]; const charset x;
-/* SunOS 4.1.1 cc rejects this. */
-char const *const *ccp;
-char **p;
-/* NEC SVR4.0.2 mips cc rejects this. */
-struct point {int x, y;};
-static struct point const zero = {0,0};
-/* AIX XL C 1.02.0.0 rejects this.
- It does not let you subtract one const X* pointer from another in an arm
- of an if-expression whose if-part is not a constant expression */
-const char *g = "string";
-ccp = &g + (g ? g-g : 0);
-/* HPUX 7.0 cc rejects these. */
-++ccp;
-p = (char**) ccp;
-ccp = (char const *const *) p;
-{ /* SCO 3.2v4 cc rejects this. */
- char *t;
- char const *s = 0 ? (char *) 0 : (char const *) 0;
-
- *t++ = 0;
-}
-{ /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */
- int x[] = {25, 17};
- const int *foo = &x[0];
- ++foo;
-}
-{ /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */
- typedef const int *iptr;
- iptr p = 0;
- ++p;
-}
-{ /* AIX XL C 1.02.0.0 rejects this saying
- "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */
- struct s { int j; const int *ap[3]; };
- struct s *b; b->j = 5;
-}
-{ /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */
- const int foo = 10;
-}
-
-; return 0; }
-EOF
-if { (eval echo configure:1139: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- rm -rf conftest*
- ac_cv_c_const=yes
-else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- ac_cv_c_const=no
-fi
-rm -f conftest*
-fi
-
-echo "$ac_t""$ac_cv_c_const" 1>&6
-if test $ac_cv_c_const = no; then
- cat >> confdefs.h <<\EOF
-#define const
-EOF
-
-fi
-
-echo $ac_n "checking for size_t""... $ac_c" 1>&6
-echo "configure:1160: checking for size_t" >&5
-if eval "test \"`echo '$''{'ac_cv_type_size_t'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.$ac_ext <<EOF
-#line 1165 "configure"
-#include "confdefs.h"
-#include <sys/types.h>
-#if STDC_HEADERS
-#include <stdlib.h>
-#include <stddef.h>
-#endif
-EOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- egrep "size_t[^a-zA-Z_0-9]" >/dev/null 2>&1; then
- rm -rf conftest*
- ac_cv_type_size_t=yes
-else
- rm -rf conftest*
- ac_cv_type_size_t=no
-fi
-rm -f conftest*
-
-fi
-echo "$ac_t""$ac_cv_type_size_t" 1>&6
-if test $ac_cv_type_size_t = no; then
- cat >> confdefs.h <<\EOF
-#define size_t unsigned
-EOF
-
-fi
-
-
-echo $ac_n "checking return type of signal handlers""... $ac_c" 1>&6
-echo "configure:1194: checking return type of signal handlers" >&5
-if eval "test \"`echo '$''{'ac_cv_type_signal'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.$ac_ext <<EOF
-#line 1199 "configure"
-#include "confdefs.h"
-#include <sys/types.h>
-#include <signal.h>
-#ifdef signal
-#undef signal
-#endif
-#ifdef __cplusplus
-extern "C" void (*signal (int, void (*)(int)))(int);
-#else
-void (*signal ()) ();
-#endif
-
-int main() {
-int i;
-; return 0; }
-EOF
-if { (eval echo configure:1216: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- rm -rf conftest*
- ac_cv_type_signal=void
-else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- ac_cv_type_signal=int
-fi
-rm -f conftest*
-fi
-
-echo "$ac_t""$ac_cv_type_signal" 1>&6
-cat >> confdefs.h <<EOF
-#define RETSIGTYPE $ac_cv_type_signal
-EOF
-
-
-# we'll get atexit by default
-if test $ac_cv_header_stdc != yes; then
-echo $ac_n "checking for atexit""... $ac_c" 1>&6
-echo "configure:1237: checking for atexit" >&5
-if eval "test \"`echo '$''{'ac_cv_func_atexit'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.$ac_ext <<EOF
-#line 1242 "configure"
-#include "confdefs.h"
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char atexit(); below. */
-#include <assert.h>
-/* Override any gcc2 internal prototype to avoid an error. */
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char atexit();
-
-int main() {
-
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_atexit) || defined (__stub___atexit)
-choke me
-#else
-atexit();
-#endif
-
-; return 0; }
-EOF
-if { (eval echo configure:1265: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
- rm -rf conftest*
- eval "ac_cv_func_atexit=yes"
-else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- eval "ac_cv_func_atexit=no"
-fi
-rm -f conftest*
-fi
-
-if eval "test \"`echo '$ac_cv_func_'atexit`\" = yes"; then
- echo "$ac_t""yes" 1>&6
- cat >> confdefs.h <<\EOF
-#define onexit atexit
-EOF
-
-else
- echo "$ac_t""no" 1>&6
- cat >> confdefs.h <<\EOF
-#define NO_ONEXIT 1
-EOF
-
- echo $ac_n "checking for onexit""... $ac_c" 1>&6
-echo "configure:1290: checking for onexit" >&5
-if eval "test \"`echo '$''{'ac_cv_func_onexit'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.$ac_ext <<EOF
-#line 1295 "configure"
-#include "confdefs.h"
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char onexit(); below. */
-#include <assert.h>
-/* Override any gcc2 internal prototype to avoid an error. */
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char onexit();
-
-int main() {
-
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_onexit) || defined (__stub___onexit)
-choke me
-#else
-onexit();
-#endif
-
-; return 0; }
-EOF
-if { (eval echo configure:1318: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
- rm -rf conftest*
- eval "ac_cv_func_onexit=yes"
-else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- eval "ac_cv_func_onexit=no"
-fi
-rm -f conftest*
-fi
-
-if eval "test \"`echo '$ac_cv_func_'onexit`\" = yes"; then
- echo "$ac_t""yes" 1>&6
- :
-else
- echo "$ac_t""no" 1>&6
-echo $ac_n "checking for on_exit""... $ac_c" 1>&6
-echo "configure:1336: checking for on_exit" >&5
-if eval "test \"`echo '$''{'ac_cv_func_on_exit'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.$ac_ext <<EOF
-#line 1341 "configure"
-#include "confdefs.h"
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char on_exit(); below. */
-#include <assert.h>
-/* Override any gcc2 internal prototype to avoid an error. */
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char on_exit();
-
-int main() {
-
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_on_exit) || defined (__stub___on_exit)
-choke me
-#else
-on_exit();
-#endif
-
-; return 0; }
-EOF
-if { (eval echo configure:1364: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
- rm -rf conftest*
- eval "ac_cv_func_on_exit=yes"
-else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- eval "ac_cv_func_on_exit=no"
-fi
-rm -f conftest*
-fi
-
-if eval "test \"`echo '$ac_cv_func_'on_exit`\" = yes"; then
- echo "$ac_t""yes" 1>&6
- cat >> confdefs.h <<\EOF
-#define onexit on_exit
-EOF
-
-else
- echo "$ac_t""no" 1>&6
-fi
-
-fi
-
-fi
-
-else true
-fi
-
-# This should always succeed on unix.
-# Apparently positive result on cygwin loses re. NON_UNIX_STDIO
-# (as of cygwin b18).
-echo $ac_n "checking for fstat""... $ac_c" 1>&6
-echo "configure:1397: checking for fstat" >&5
-if eval "test \"`echo '$''{'ac_cv_func_fstat'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.$ac_ext <<EOF
-#line 1402 "configure"
-#include "confdefs.h"
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char fstat(); below. */
-#include <assert.h>
-/* Override any gcc2 internal prototype to avoid an error. */
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char fstat();
-
-int main() {
-
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_fstat) || defined (__stub___fstat)
-choke me
-#else
-fstat();
-#endif
-
-; return 0; }
-EOF
-if { (eval echo configure:1425: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
- rm -rf conftest*
- eval "ac_cv_func_fstat=yes"
-else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- eval "ac_cv_func_fstat=no"
-fi
-rm -f conftest*
-fi
-
-if eval "test \"`echo '$ac_cv_func_'fstat`\" = yes"; then
- echo "$ac_t""yes" 1>&6
- :
-else
- echo "$ac_t""no" 1>&6
-fi
-
-echo $ac_n "checking need for NON_UNIX_STDIO""... $ac_c" 1>&6
-echo "configure:1445: checking need for NON_UNIX_STDIO" >&5
-if test $g77_cv_sys_cygwin32 = yes || test $ac_cv_func_fstat = no; then
- echo "$ac_t""yes" 1>&6
- cat >> confdefs.h <<\EOF
-#define NON_UNIX_STDIO 1
-EOF
-
-else
- echo "$ac_t""no" 1>&6
-fi
-
-# This is necessary for e.g. Linux:
-echo $ac_n "checking for necessary members of struct FILE""... $ac_c" 1>&6
-echo "configure:1458: checking for necessary members of struct FILE" >&5
-if eval "test \"`echo '$''{'g77_cv_struct_FILE'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.$ac_ext <<EOF
-#line 1463 "configure"
-#include "confdefs.h"
-#include <stdio.h>
-int main() {
-FILE s; s._ptr; s._base; s._flag;
-; return 0; }
-EOF
-if { (eval echo configure:1470: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- rm -rf conftest*
- g77_cv_struct_FILE=yes
-else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- g77_cv_struct_FILE=no
-fi
-rm -f conftest*
-fi
-echo "$ac_t""$g77_cv_struct_FILE" 1>&6
-if test $g77_cv_struct_FILE = no; then
- cat >> confdefs.h <<\EOF
-#define MISSING_FILE_ELEMS 1
-EOF
-
-fi
-
-echo $ac_n "checking for drem in -lm""... $ac_c" 1>&6
-echo "configure:1490: checking for drem in -lm" >&5
-ac_lib_var=`echo m'_'drem | sed 'y%./+-%__p_%'`
-if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- ac_save_LIBS="$LIBS"
-LIBS="-lm $LIBS"
-cat > conftest.$ac_ext <<EOF
-#line 1498 "configure"
-#include "confdefs.h"
-/* Override any gcc2 internal prototype to avoid an error. */
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char drem();
-
-int main() {
-drem()
-; return 0; }
-EOF
-if { (eval echo configure:1509: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
- rm -rf conftest*
- eval "ac_cv_lib_$ac_lib_var=yes"
-else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- eval "ac_cv_lib_$ac_lib_var=no"
-fi
-rm -f conftest*
-LIBS="$ac_save_LIBS"
-
-fi
-if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
- echo "$ac_t""yes" 1>&6
- cat >> confdefs.h <<\EOF
-#define IEEE_drem 1
-EOF
-
-else
- echo "$ac_t""no" 1>&6
-fi
-
-
-
-# posix will guarantee the right behaviour for sprintf, else we can't be
-# sure; HEADER_STDC wouldn't be the right check in sunos4, for instance.
-# However, on my sunos4/gcc setup unistd.h leads us wrongly to believe
-# we're posix-conformant, so always do the test.
-echo $ac_n "checking for ansi/posix sprintf result""... $ac_c" 1>&6
-echo "configure:1539: checking for ansi/posix sprintf result" >&5
-if test "$cross_compiling" = yes; then
- g77_cv_sys_sprintf_ansi=no
-else
- cat > conftest.$ac_ext <<EOF
-#line 1544 "configure"
-#include "confdefs.h"
- #include <stdio.h>
- /* does sprintf return the number of chars transferred? */
- main () {char foo[2]; (sprintf(foo, "1") == 1) ? exit(0) : exit(1);}
-
-EOF
-if { (eval echo configure:1551: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
-then
- g77_cv_sys_sprintf_ansi=yes
-else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -fr conftest*
- g77_cv_sys_sprintf_ansi=no
-fi
-rm -fr conftest*
-fi
-
-if eval "test \"`echo '$''{'g77_cv_sys_sprintf_ansi'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- g77_cv_sys_sprintf_ansi=$g77_cv_sys_sprintf_ansi
-fi
-
-if test $ac_cv_c_cross = no; then
- echo "$ac_t""$g77_cv_sys_sprintf_ansi" 1>&6
-else
- echo "$ac_t""can't tell -- assuming no" 1>&6
-fi
-# The cygwin patch takes steps to avoid defining USE_STRLEN here -- I don't
-# understand why.
-if test $g77_cv_sys_sprintf_ansi != yes; then
- cat >> confdefs.h <<\EOF
-#define USE_STRLEN 1
-EOF
-
-fi
-
-# define NON_ANSI_RW_MODES on unix (can't hurt)
-echo $ac_n "checking NON_ANSI_RW_MODES""... $ac_c" 1>&6
-echo "configure:1585: checking NON_ANSI_RW_MODES" >&5
-cat > conftest.$ac_ext <<EOF
-#line 1587 "configure"
-#include "confdefs.h"
-#ifdef unix
- yes
-#endif
-#ifdef __unix
- yes
-#endif
-#ifdef __unix__
- yes
-#endif
-
-EOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- egrep "yes" >/dev/null 2>&1; then
- rm -rf conftest*
- is_unix=yes
-else
- rm -rf conftest*
- is_unix=no
-fi
-rm -f conftest*
-
-if test $g77_cv_sys_cygwin32 = yes; then
- echo "$ac_t""no" 1>&6
-else
- if test $is_unix = yes; then
- cat >> confdefs.h <<\EOF
-#define NON_ANSI_RW_MODES 1
-EOF
-
- echo "$ac_t""yes" 1>&6
- else
- echo "$ac_t""no" 1>&6
- fi
-fi
-
-# We have to firkle with the info in hconfig.h to figure out suitable types
-# (via com.h). proj.h and com.h are in $srcdir/.., config.h which they need
-# is in ../.. and the config files are in $srcdir/../../config.
-echo $ac_n "checking f2c integer type""... $ac_c" 1>&6
-echo "configure:1628: checking f2c integer type" >&5
-late_ac_cpp=$ac_cpp
-ac_cpp="$late_ac_cpp -I$srcdir/.. -I../.. -I$srcdir/../.. -I$srcdir/../../config"
-if eval "test \"`echo '$''{'g77_cv_sys_f2cinteger'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.$ac_ext <<EOF
-#line 1635 "configure"
-#include "confdefs.h"
-#include "proj.h"
-#define FFECOM_DETERMINE_TYPES 1
-#include "com.h"
-#if FFECOM_f2cINTEGER == FFECOM_f2ccodeLONG
-F2C_INTEGER=long int
-#elif FFECOM_f2cINTEGER == FFECOM_f2ccodeINT
-F2C_INTEGER=int
-#else
-# error "Cannot find a suitable type for F2C_INTEGER"
-#endif
-
-EOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- egrep "F2C_INTEGER=long int" >/dev/null 2>&1; then
- rm -rf conftest*
- g77_cv_sys_f2cinteger="long int"
-fi
-rm -f conftest*
-
-if test "$g77_cv_sys_f2cinteger" = ""; then
- cat > conftest.$ac_ext <<EOF
-#line 1658 "configure"
-#include "confdefs.h"
-#include "proj.h"
-#define FFECOM_DETERMINE_TYPES 1
-#include "com.h"
-#if FFECOM_f2cINTEGER == FFECOM_f2ccodeLONG
-F2C_INTEGER=long int
-#elif FFECOM_f2cINTEGER == FFECOM_f2ccodeINT
-F2C_INTEGER=int
-#else
-# error "Cannot find a suitable type for F2C_INTEGER"
-#endif
-
-EOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- egrep "F2C_INTEGER=int" >/dev/null 2>&1; then
- rm -rf conftest*
- g77_cv_sys_f2cinteger=int
-fi
-rm -f conftest*
-
-fi
-if test "$g77_cv_sys_f2cinteger" = ""; then
- echo "$ac_t""""" 1>&6
- { echo "configure: error: Can't determine type for f2c integer; config.log may help." 1>&2; exit 1; }
-fi
-
-fi
-
-echo "$ac_t""$g77_cv_sys_f2cinteger" 1>&6
-F2C_INTEGER=$g77_cv_sys_f2cinteger
-ac_cpp=$late_ac_cpp
-
-
-echo $ac_n "checking f2c long int type""... $ac_c" 1>&6
-echo "configure:1693: checking f2c long int type" >&5
-late_ac_cpp=$ac_cpp
-ac_cpp="$late_ac_cpp -I$srcdir/.. -I../.. -I$srcdir/../.. -I$srcdir/../../config"
-if eval "test \"`echo '$''{'g77_cv_sys_f2clongint'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.$ac_ext <<EOF
-#line 1700 "configure"
-#include "confdefs.h"
-#include "proj.h"
-#define FFECOM_DETERMINE_TYPES 1
-#include "com.h"
-#if FFECOM_f2cLONGINT == FFECOM_f2ccodeLONG
-F2C_LONGINT=long int
-#elif FFECOM_f2cLONGINT == FFECOM_f2ccodeLONGLONG
-F2C_LONGINT=long long int
-#else
-# error "Cannot find a suitable type for F2C_LONGINT"
-#endif
-
-EOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- egrep "F2C_LONGINT=long int" >/dev/null 2>&1; then
- rm -rf conftest*
- g77_cv_sys_f2clongint="long int"
-fi
-rm -f conftest*
-
-if test "$g77_cv_sys_f2clongint" = ""; then
- cat > conftest.$ac_ext <<EOF
-#line 1723 "configure"
-#include "confdefs.h"
-#include "proj.h"
-#define FFECOM_DETERMINE_TYPES 1
-#include "com.h"
-#if FFECOM_f2cLONGINT == FFECOM_f2ccodeLONG
-F2C_LONGINT=long int
-#elif FFECOM_f2cLONGINT == FFECOM_f2ccodeLONGLONG
-F2C_LONGINT=long long int
-#else
-# error "Cannot find a suitable type for F2C_LONGINT"
-#endif
-
-EOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- egrep "F2C_LONGINT=long long int" >/dev/null 2>&1; then
- rm -rf conftest*
- g77_cv_sys_f2clongint="long long int"
-fi
-rm -f conftest*
-
-fi
-if test "$g77_cv_sys_f2clongint" = ""; then
- echo "$ac_t""""" 1>&6
- { echo "configure: error: Can't determine type for f2c long int; config.log may help." 1>&2; exit 1; }
-fi
-
-fi
-
-echo "$ac_t""$g77_cv_sys_f2clongint" 1>&6
-F2C_LONGINT=$g77_cv_sys_f2clongint
-ac_cpp=$late_ac_cpp
-
-
-
-
-
-
-# This EOF_CHAR is a misfeature on unix.
-cat >> confdefs.h <<\EOF
-#define NO_EOF_CHAR_CHECK 1
-EOF
-
-
-cat >> confdefs.h <<\EOF
-#define Skip_f2c_Undefs 1
-EOF
-
-
-
-
-
-cat >> confdefs.h <<\EOF
-#define Pad_UDread 1
-EOF
-
-
-
-
-
-cat >> confdefs.h <<\EOF
-#define WANT_LEAD_0 1
-EOF
-
-
-# avoid confusion in case the `makefile's from the f2c distribution have
-# got put here
-test -f libF77/makefile && mv libF77/makefile libF77/makefile.ori
-test -f libI77/makefile && mv libI77/makefile libI77/makefile.ori
-test -f libU77/makefile && mv libU77/makefile libU77/makefile.ori
-
-trap '' 1 2 15
-cat > confcache <<\EOF
-# This file is a shell script that caches the results of configure
-# tests run on this system so they can be shared between configure
-# scripts and configure runs. It is not useful on other systems.
-# If it contains results you don't want to keep, you may remove or edit it.
-#
-# By default, configure uses ./config.cache as the cache file,
-# creating it if it does not exist already. You can give configure
-# the --cache-file=FILE option to use a different cache file; that is
-# what configure does when it calls configure scripts in
-# subdirectories, so they share the cache.
-# Giving --cache-file=/dev/null disables caching, for debugging configure.
-# config.status only pays attention to the cache file if you give it the
-# --recheck option to rerun configure.
-#
-EOF
-# The following way of writing the cache mishandles newlines in values,
-# but we know of no workaround that is simple, portable, and efficient.
-# So, don't put newlines in cache variables' values.
-# Ultrix sh set writes to stderr and can't be redirected directly,
-# and sets the high bit in the cache file unless we assign to the vars.
-(set) 2>&1 |
- case `(ac_space=' '; set) 2>&1` in
- *ac_space=\ *)
- # `set' does not quote correctly, so add quotes (double-quote substitution
- # turns \\\\ into \\, and sed turns \\ into \).
- sed -n \
- -e "s/'/'\\\\''/g" \
- -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p"
- ;;
- *)
- # `set' quotes correctly as required by POSIX, so do not add quotes.
- sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p'
- ;;
- esac >> confcache
-if cmp -s $cache_file confcache; then
- :
-else
- if test -w $cache_file; then
- echo "updating cache $cache_file"
- cat confcache > $cache_file
- else
- echo "not updating unwritable cache $cache_file"
- fi
-fi
-rm -f confcache
-
-trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15
-
-test "x$prefix" = xNONE && prefix=$ac_default_prefix
-# Let make expand exec_prefix.
-test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
-
-# Any assignment to VPATH causes Sun make to only execute
-# the first set of double-colon rules, so remove it if not needed.
-# If there is a colon in the path, we need to keep it.
-if test "x$srcdir" = x.; then
- ac_vpsub='/^[ ]*VPATH[ ]*=[^:]*$/d'
-fi
-
-trap 'rm -f $CONFIG_STATUS conftest*; exit 1' 1 2 15
-
-# Transform confdefs.h into DEFS.
-# Protect against shell expansion while executing Makefile rules.
-# Protect against Makefile macro expansion.
-cat > conftest.defs <<\EOF
-s%#define \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%-D\1=\2%g
-s%[ `~#$^&*(){}\\|;'"<>?]%\\&%g
-s%\[%\\&%g
-s%\]%\\&%g
-s%\$%$$%g
-EOF
-DEFS=`sed -f conftest.defs confdefs.h | tr '\012' ' '`
-rm -f conftest.defs
-
-
-# Without the "./", some shells look in PATH for config.status.
-: ${CONFIG_STATUS=./config.status}
-
-echo creating $CONFIG_STATUS
-rm -f $CONFIG_STATUS
-cat > $CONFIG_STATUS <<EOF
-#! /bin/sh
-# Generated automatically by configure.
-# Run this file to recreate the current configuration.
-# This directory was configured as follows,
-# on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
-#
-# $0 $ac_configure_args
-#
-# Compiler output produced by configure, useful for debugging
-# configure, is in ./config.log if it exists.
-
-ac_cs_usage="Usage: $CONFIG_STATUS [--recheck] [--version] [--help]"
-for ac_option
-do
- case "\$ac_option" in
- -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
- echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion"
- exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;;
- -version | --version | --versio | --versi | --vers | --ver | --ve | --v)
- echo "$CONFIG_STATUS generated by autoconf version 2.12"
- exit 0 ;;
- -help | --help | --hel | --he | --h)
- echo "\$ac_cs_usage"; exit 0 ;;
- *) echo "\$ac_cs_usage"; exit 1 ;;
- esac
-done
-
-ac_given_srcdir=$srcdir
-
-trap 'rm -fr `echo "Makefile ../../include/f2c.h:f2c.h.in libI77/Makefile libF77/Makefile libU77/Makefile" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15
-EOF
-cat >> $CONFIG_STATUS <<EOF
-
-# Protect against being on the right side of a sed subst in config.status.
-sed 's/%@/@@/; s/@%/@@/; s/%g\$/@g/; /@g\$/s/[\\\\&%]/\\\\&/g;
- s/@@/%@/; s/@@/@%/; s/@g\$/%g/' > conftest.subs <<\\CEOF
-$ac_vpsub
-$extrasub
-s%@CFLAGS@%$CFLAGS%g
-s%@CPPFLAGS@%$CPPFLAGS%g
-s%@CXXFLAGS@%$CXXFLAGS%g
-s%@DEFS@%$DEFS%g
-s%@LDFLAGS@%$LDFLAGS%g
-s%@LIBS@%$LIBS%g
-s%@exec_prefix@%$exec_prefix%g
-s%@prefix@%$prefix%g
-s%@program_transform_name@%$program_transform_name%g
-s%@bindir@%$bindir%g
-s%@sbindir@%$sbindir%g
-s%@libexecdir@%$libexecdir%g
-s%@datadir@%$datadir%g
-s%@sysconfdir@%$sysconfdir%g
-s%@sharedstatedir@%$sharedstatedir%g
-s%@localstatedir@%$localstatedir%g
-s%@libdir@%$libdir%g
-s%@includedir@%$includedir%g
-s%@oldincludedir@%$oldincludedir%g
-s%@infodir@%$infodir%g
-s%@mandir@%$mandir%g
-s%@CC@%$CC%g
-s%@AR@%$AR%g
-s%@RANLIB@%$RANLIB%g
-s%@RANLIB_TEST@%$RANLIB_TEST%g
-s%@CPP@%$CPP%g
-s%@F2C_INTEGER@%$F2C_INTEGER%g
-s%@F2C_LONGINT@%$F2C_LONGINT%g
-s%@CROSS@%$CROSS%g
-
-CEOF
-EOF
-
-cat >> $CONFIG_STATUS <<\EOF
-
-# Split the substitutions into bite-sized pieces for seds with
-# small command number limits, like on Digital OSF/1 and HP-UX.
-ac_max_sed_cmds=90 # Maximum number of lines to put in a sed script.
-ac_file=1 # Number of current file.
-ac_beg=1 # First line for current file.
-ac_end=$ac_max_sed_cmds # Line after last line for current file.
-ac_more_lines=:
-ac_sed_cmds=""
-while $ac_more_lines; do
- if test $ac_beg -gt 1; then
- sed "1,${ac_beg}d; ${ac_end}q" conftest.subs > conftest.s$ac_file
- else
- sed "${ac_end}q" conftest.subs > conftest.s$ac_file
- fi
- if test ! -s conftest.s$ac_file; then
- ac_more_lines=false
- rm -f conftest.s$ac_file
- else
- if test -z "$ac_sed_cmds"; then
- ac_sed_cmds="sed -f conftest.s$ac_file"
- else
- ac_sed_cmds="$ac_sed_cmds | sed -f conftest.s$ac_file"
- fi
- ac_file=`expr $ac_file + 1`
- ac_beg=$ac_end
- ac_end=`expr $ac_end + $ac_max_sed_cmds`
- fi
-done
-if test -z "$ac_sed_cmds"; then
- ac_sed_cmds=cat
-fi
-EOF
-
-cat >> $CONFIG_STATUS <<EOF
-
-CONFIG_FILES=\${CONFIG_FILES-"Makefile ../../include/f2c.h:f2c.h.in libI77/Makefile libF77/Makefile libU77/Makefile"}
-EOF
-cat >> $CONFIG_STATUS <<\EOF
-for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then
- # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
- case "$ac_file" in
- *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'`
- ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
- *) ac_file_in="${ac_file}.in" ;;
- esac
-
- # Adjust a relative srcdir, top_srcdir, and INSTALL for subdirectories.
-
- # Remove last slash and all that follows it. Not all systems have dirname.
- ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'`
- if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
- # The file is in a subdirectory.
- test ! -d "$ac_dir" && mkdir "$ac_dir"
- ac_dir_suffix="/`echo $ac_dir|sed 's%^\./%%'`"
- # A "../" for each directory in $ac_dir_suffix.
- ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'`
- else
- ac_dir_suffix= ac_dots=
- fi
-
- case "$ac_given_srcdir" in
- .) srcdir=.
- if test -z "$ac_dots"; then top_srcdir=.
- else top_srcdir=`echo $ac_dots|sed 's%/$%%'`; fi ;;
- /*) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;;
- *) # Relative path.
- srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix"
- top_srcdir="$ac_dots$ac_given_srcdir" ;;
- esac
-
-
- echo creating "$ac_file"
- rm -f "$ac_file"
- configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure."
- case "$ac_file" in
- *Makefile*) ac_comsub="1i\\
-# $configure_input" ;;
- *) ac_comsub= ;;
- esac
-
- ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"`
- sed -e "$ac_comsub
-s%@configure_input@%$configure_input%g
-s%@srcdir@%$srcdir%g
-s%@top_srcdir@%$top_srcdir%g
-" $ac_file_inputs | (eval "$ac_sed_cmds") > $ac_file
-fi; done
-rm -f conftest.s*
-
-EOF
-cat >> $CONFIG_STATUS <<EOF
-
-EOF
-cat >> $CONFIG_STATUS <<\EOF
-
-exit 0
-EOF
-chmod +x $CONFIG_STATUS
-rm -fr confdefs* $ac_clean_files
-test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1
-
-
-
diff --git a/gcc/f/runtime/configure.in b/gcc/f/runtime/configure.in
deleted file mode 100644
index 7b1ed2cd0f8..00000000000
--- a/gcc/f/runtime/configure.in
+++ /dev/null
@@ -1,375 +0,0 @@
-# Process this file with autoconf to produce a configure script.
-# Copyright (C) 1995, 1997 Free Software Foundation, Inc.
-# Contributed by Dave Love (d.love@dl.ac.uk).
-#
-#This file is part of GNU Fortran.
-#
-#GNU Fortran 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.
-#
-#GNU Fortran 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 GNU Fortran; see the file COPYING. If not, write to
-#the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
-#02111-1307, USA.
-
-AC_INIT(libF77/Version.c)
-
-AC_REVISION(1.10)
-
-dnl Checks for programs.
-# For g77 we'll set CC to point at the built gcc, but this will get it into
-# the makefiles
-AC_PROG_CC
-dnl AC_C_CROSS
-dnl Gives misleading `(cached)' message from the check.
-if test "$CROSS";then
- ac_cv_c_cross=yes
-else
- ac_cv_c_cross=no
-fi
-
-dnl These should be inherited in the recursive make, but ensure they are
-dnl defined:
-test "$AR" || AR=ar
-AC_SUBST(AR)
-if test "$RANLIB"; then :
- AC_SUBST(RANLIB)
-dnl Make sure that RANLIB_TEST is set also.
- if test -z "$RANLIB_TEST"; then
- RANLIB_TEST=true
- fi
-else
- RANLIB_TEST=true
- AC_PROG_RANLIB
-fi
-AC_SUBST(RANLIB_TEST)
-
-dnl not needed for g77?
-dnl AC_PROG_MAKE_SET
-
-dnl Checks for libraries.
-
-dnl Checks for header files.
-# Sanity check for the cross-compilation case:
-AC_CHECK_HEADER(stdio.h,:,
- [AC_MSG_ERROR([Can't find stdio.h.
-You must have a usable C system for the target already installed, at least
-including headers and, preferably, the library, before you can configure
-the G77 runtime system. If necessary, install gcc now with \`LANGUAGES=c',
-then the target library, then build with \`LANGUAGES=f77'.])])
-
-AC_HEADER_STDC
-dnl We could do this if we didn't know we were using gcc
-dnl AC_MSG_CHECKING(for prototype-savvy compiler)
-dnl AC_CACHE_VAL(g77_cv_sys_proto,
-dnl [AC_TRY_LINK(,
-dnl dnl looks screwy because TRY_LINK expects a function body
-dnl [return 0;} int foo (int * bar) {],
-dnl g77_cv_sys_proto=yes,
-dnl [g77_cv_sys_proto=no
-dnl AC_DEFINE(KR_headers)])])
-dnl AC_MSG_RESULT($g77_cv_sys_proto)
-
-dnl for U77
-dnl AC_CHECK_HEADERS(unistd.h)
-
-AC_MSG_CHECKING(for posix)
-AC_CACHE_VAL(g77_cv_header_posix,
- AC_EGREP_CPP(yes,
- [#include <sys/types.h>
-#include <unistd.h>
-#ifdef _POSIX_VERSION
- yes
-#endif
-],
- g77_cv_header_posix=yes,
- g77_cv_header_posix=no))
-AC_MSG_RESULT($g77_cv_header_posix)
-
-# We can rely on the GNU library being posix-ish. I guess checking the
-# header isn't actually like checking the functions, though...
-AC_MSG_CHECKING(for GNU library)
-AC_CACHE_VAL(g77_cv_lib_gnu,
- AC_EGREP_CPP(yes,
- [#include <stdio.h>
-#ifdef __GNU_LIBRARY__
- yes
-#endif
-],
- g77_cv_lib_gnu=yes, g77_cv_lib_gnu=no))
-AC_MSG_RESULT($g77_cv_lib_gnu)
-
-# Apparently cygwin needs to be special-cased.
-AC_MSG_CHECKING([for cyg\`win'32])
-AC_CACHE_VAL(g77_cv_sys_cygwin32,
- AC_EGREP_CPP(yes,
- [#ifdef __CYGWIN32__
- yes
-#endif
-],
- g77_cv_sys_cygwin32=yes,
- g77_cv_sys_cygwin32=no))
-AC_MSG_RESULT($g77_cv_sys_cygwin32)
-
-AC_CHECK_HEADER(fcntl.h,
- test $g77_cv_header_posix = yes && AC_DEFINE(_POSIX_SOURCE),
- AC_DEFINE(NO_FCNTL) AC_DEFINE(OPEN_DECL))
-
-dnl Checks for typedefs, structures, and compiler characteristics.
-AC_C_CONST
-AC_TYPE_SIZE_T
-
-dnl Checks for library functions.
-AC_TYPE_SIGNAL
-# we'll get atexit by default
-if test $ac_cv_header_stdc != yes; then
-AC_CHECK_FUNC(atexit,
- AC_DEFINE(onexit,atexit),dnl just in case
- [AC_DEFINE(NO_ONEXIT)
- AC_CHECK_FUNC(onexit,,
- [AC_CHECK_FUNC(on_exit,
- AC_DEFINE(onexit,on_exit),)])])
-else true
-fi
-
-# This should always succeed on unix.
-# Apparently positive result on cygwin loses re. NON_UNIX_STDIO
-# (as of cygwin b18).
-AC_CHECK_FUNC(fstat)
-AC_MSG_CHECKING([need for NON_UNIX_STDIO])
-if test $g77_cv_sys_cygwin32 = yes || test $ac_cv_func_fstat = no; then
- AC_MSG_RESULT(yes)
- AC_DEFINE(NON_UNIX_STDIO)
-else
- AC_MSG_RESULT(no)
-fi
-
-# This is necessary for e.g. Linux:
-AC_MSG_CHECKING([for necessary members of struct FILE])
-AC_CACHE_VAL(g77_cv_struct_FILE,
-[AC_TRY_COMPILE([#include <stdio.h>],
- [FILE s; s._ptr; s._base; s._flag;],g77_cv_struct_FILE=yes,
- g77_cv_struct_FILE=no)])dnl
-AC_MSG_RESULT($g77_cv_struct_FILE)
-if test $g77_cv_struct_FILE = no; then
- AC_DEFINE(MISSING_FILE_ELEMS)
-fi
-
-dnl perhaps should check also for remainder
-dnl Unfortunately, the message implies we're just checking for -lm...
-AC_CHECK_LIB(m,drem,AC_DEFINE(IEEE_drem))
-
-dnl for U77:
-dnl AC_CHECK_FUNCS(symlink getcwd lstat)
-dnl test $ac_cv_func_symlink = yes && SYMLNK=symlnk_.o
-dnl test $ac_cv_func_lstat = yes && SYMLNK="$SYMLNK lstat_.o"
-dnl AC_SUBST(SYMLNK)
-
-# posix will guarantee the right behaviour for sprintf, else we can't be
-# sure; HEADER_STDC wouldn't be the right check in sunos4, for instance.
-# However, on my sunos4/gcc setup unistd.h leads us wrongly to believe
-# we're posix-conformant, so always do the test.
-AC_MSG_CHECKING(for ansi/posix sprintf result)
-dnl This loses if included as an argument to AC_CACHE_VAL because the
-dnl changequote doesn't take effect and the [] vanish.
-dnl fixme: use cached value
-AC_TRY_RUN(changequote(<<, >>)dnl
- <<#include <stdio.h>
- /* does sprintf return the number of chars transferred? */
- main () {char foo[2]; (sprintf(foo, "1") == 1) ? exit(0) : exit(1);}
->>changequote([, ]),
- g77_cv_sys_sprintf_ansi=yes,
- g77_cv_sys_sprintf_ansi=no,
- g77_cv_sys_sprintf_ansi=no)
-AC_CACHE_VAL(g77_cv_sys_sprintf_ansi,
- g77_cv_sys_sprintf_ansi=$g77_cv_sys_sprintf_ansi)
-dnl We get a misleading `(cached)' message...
-if test $ac_cv_c_cross = no; then
- AC_MSG_RESULT($g77_cv_sys_sprintf_ansi)
-else
- AC_MSG_RESULT([can't tell -- assuming no])
-fi
-# The cygwin patch takes steps to avoid defining USE_STRLEN here -- I don't
-# understand why.
-if test $g77_cv_sys_sprintf_ansi != yes; then
- AC_DEFINE(USE_STRLEN)
-fi
-
-# define NON_ANSI_RW_MODES on unix (can't hurt)
-AC_MSG_CHECKING(NON_ANSI_RW_MODES)
-AC_EGREP_CPP(yes,
-[#ifdef unix
- yes
-#endif
-#ifdef __unix
- yes
-#endif
-#ifdef __unix__
- yes
-#endif
-], is_unix=yes, is_unix=no)
-if test $g77_cv_sys_cygwin32 = yes; then
- AC_MSG_RESULT(no)
-else
- if test $is_unix = yes; then
- AC_DEFINE(NON_ANSI_RW_MODES)
- AC_MSG_RESULT(yes)
- else
- AC_MSG_RESULT(no)
- fi
-fi
-
-# We have to firkle with the info in hconfig.h to figure out suitable types
-# (via com.h). proj.h and com.h are in $srcdir/.., config.h which they need
-# is in ../.. and the config files are in $srcdir/../../config.
-AC_MSG_CHECKING(f2c integer type)
-late_ac_cpp=$ac_cpp
-ac_cpp="$late_ac_cpp -I$srcdir/.. -I../.. -I$srcdir/../.. -I$srcdir/../../config"
-AC_CACHE_VAL(g77_cv_sys_f2cinteger,
-AC_EGREP_CPP(F2C_INTEGER=long int,
-[#include "proj.h"
-#define FFECOM_DETERMINE_TYPES 1
-#include "com.h"
-#if FFECOM_f2cINTEGER == FFECOM_f2ccodeLONG
-F2C_INTEGER=long int
-#elif FFECOM_f2cINTEGER == FFECOM_f2ccodeINT
-F2C_INTEGER=int
-#else
-# error "Cannot find a suitable type for F2C_INTEGER"
-#endif
-],
- g77_cv_sys_f2cinteger="long int",)
-if test "$g77_cv_sys_f2cinteger" = ""; then
- AC_EGREP_CPP(F2C_INTEGER=int,
-[#include "proj.h"
-#define FFECOM_DETERMINE_TYPES 1
-#include "com.h"
-#if FFECOM_f2cINTEGER == FFECOM_f2ccodeLONG
-F2C_INTEGER=long int
-#elif FFECOM_f2cINTEGER == FFECOM_f2ccodeINT
-F2C_INTEGER=int
-#else
-# error "Cannot find a suitable type for F2C_INTEGER"
-#endif
-],
- g77_cv_sys_f2cinteger=int,)
-fi
-if test "$g77_cv_sys_f2cinteger" = ""; then
- AC_MSG_RESULT("")
- AC_MSG_ERROR([Can't determine type for f2c integer; config.log may help.])
-fi
-)
-AC_MSG_RESULT($g77_cv_sys_f2cinteger)
-F2C_INTEGER=$g77_cv_sys_f2cinteger
-ac_cpp=$late_ac_cpp
-AC_SUBST(F2C_INTEGER)
-
-AC_MSG_CHECKING(f2c long int type)
-late_ac_cpp=$ac_cpp
-ac_cpp="$late_ac_cpp -I$srcdir/.. -I../.. -I$srcdir/../.. -I$srcdir/../../config"
-AC_CACHE_VAL(g77_cv_sys_f2clongint,
-AC_EGREP_CPP(F2C_LONGINT=long int,
-[#include "proj.h"
-#define FFECOM_DETERMINE_TYPES 1
-#include "com.h"
-#if FFECOM_f2cLONGINT == FFECOM_f2ccodeLONG
-F2C_LONGINT=long int
-#elif FFECOM_f2cLONGINT == FFECOM_f2ccodeLONGLONG
-F2C_LONGINT=long long int
-#else
-# error "Cannot find a suitable type for F2C_LONGINT"
-#endif
-],
- g77_cv_sys_f2clongint="long int",)
-if test "$g77_cv_sys_f2clongint" = ""; then
- AC_EGREP_CPP(F2C_LONGINT=long long int,
-[#include "proj.h"
-#define FFECOM_DETERMINE_TYPES 1
-#include "com.h"
-#if FFECOM_f2cLONGINT == FFECOM_f2ccodeLONG
-F2C_LONGINT=long int
-#elif FFECOM_f2cLONGINT == FFECOM_f2ccodeLONGLONG
-F2C_LONGINT=long long int
-#else
-# error "Cannot find a suitable type for F2C_LONGINT"
-#endif
-],
- g77_cv_sys_f2clongint="long long int",)
-fi
-if test "$g77_cv_sys_f2clongint" = ""; then
- AC_MSG_RESULT("")
- AC_MSG_ERROR([Can't determine type for f2c long int; config.log may help.])
-fi
-)
-AC_MSG_RESULT($g77_cv_sys_f2clongint)
-F2C_LONGINT=$g77_cv_sys_f2clongint
-ac_cpp=$late_ac_cpp
-AC_SUBST(F2C_LONGINT)
-
-dnl maybe check for drem/remainder
-
-AC_SUBST(CROSS)
-
-
-# This EOF_CHAR is a misfeature on unix.
-AC_DEFINE(NO_EOF_CHAR_CHECK)
-
-AC_DEFINE(Skip_f2c_Undefs)
-
-dnl Craig had these in f2c.h, but they're only relevant for building libf2c
-dnl anyway.
-
-dnl For GNU Fortran (g77), we always enable the following behaviors for
-dnl libf2c, to make things easy on the programmer. The alternate
-dnl behaviors have their uses, and g77 might provide them as compiler,
-dnl rather than library, options, so only a single copy of a shared libf2c
-dnl need be built for a system.
-
-dnl This makes unformatted I/O more consistent in relation to other
-dnl systems. It is not required by the F77 standard.
-
-AC_DEFINE(Pad_UDread)
-
-dnl This makes ERR= and IOSTAT= returns work properly in disk-full
-dnl situations, making things work more as expected. It slows things
-dnl down, so g77 will probably someday choose the original implementation
-dnl on a case-by-case basis when it can be shown to not be necessary
-dnl (e.g. no ERR= or IOSTAT=) or when it is given the appropriate
-dnl compile-time option or, perhaps, source-code directive.
-
-dnl AC_DEFINE(ALWAYS_FLUSH)
-
-dnl Most Fortran implementations do this, so to make it easier
-dnl to compare the output of g77-compiled programs to those compiled
-dnl by most other compilers, tell libf2c to put leading zeros in
-dnl appropriate places on output
-
-AC_DEFINE(WANT_LEAD_0)
-
-# avoid confusion in case the `makefile's from the f2c distribution have
-# got put here
-test -f libF77/makefile && mv libF77/makefile libF77/makefile.ori
-test -f libI77/makefile && mv libI77/makefile libI77/makefile.ori
-test -f libU77/makefile && mv libU77/makefile libU77/makefile.ori
-
-AC_OUTPUT(Makefile ../../include/f2c.h:f2c.h.in libI77/Makefile libF77/Makefile libU77/Makefile)
-
-dnl We might have configuration options to:
-dnl * allow non-standard string concatenation (use libF77 s_catow.o,
-dnl not s_cat.o)
-dnl * change unit preconnexion in libI77/err.c (f_init.c)
-dnl * -DALWAYS_FLUSH in libI77
-dnl * -DOMIT_BLANK_CC in libI77
-
-dnl Local Variables:
-dnl comment-start: "dnl "
-dnl comment-end: ""
-dnl comment-start-skip: "\\bdnl\\b\\s *"
-dnl End:
diff --git a/gcc/f/runtime/disclaimer.netlib b/gcc/f/runtime/disclaimer.netlib
deleted file mode 100644
index a11108f83db..00000000000
--- a/gcc/f/runtime/disclaimer.netlib
+++ /dev/null
@@ -1,15 +0,0 @@
-f2c is a Fortran to C converter under development since 1990 by
- David M. Gay (then AT&T Bell Labs, now Bell Labs, Lucent Technologies)
- Stu Feldman (then at Bellcore, now at IBM)
- Mark Maimone (Carnegie-Mellon University)
- Norm Schryer (then AT&T Bell Labs, now AT&T Labs)
-Please send bug reports to dmg@research.bell-labs.com .
-
-AT&T, Bellcore and Lucent disclaim all warranties with regard to this
-software, including all implied warranties of merchantability
-and fitness. In no event shall AT&T, Bellcore or Lucent be liable for
-any special, indirect or consequential damages or any damages
-whatsoever resulting from loss of use, data or profits, whether
-in an action of contract, negligence or other tortious action,
-arising out of or in connection with the use or performance of
-this software.
diff --git a/gcc/f/runtime/f2c.h.in b/gcc/f/runtime/f2c.h.in
deleted file mode 100644
index 90374678100..00000000000
--- a/gcc/f/runtime/f2c.h.in
+++ /dev/null
@@ -1,227 +0,0 @@
-/* f2c.h -- Standard Fortran to C header file */
-
-/** barf [ba:rf] 2. "He suggested using FORTRAN, and everybody barfed."
-
- - From The Shogakukan DICTIONARY OF NEW ENGLISH (Second edition) */
-
-#ifndef F2C_INCLUDE
-#define F2C_INCLUDE
-
-/* F2C_INTEGER will normally be `int' but would be `long' on 16-bit systems */
-/* we assume short, float are OK */
-typedef @F2C_INTEGER@ /* long int */ integer;
-typedef unsigned @F2C_INTEGER@ /* long */ uinteger;
-typedef char *address;
-typedef short int shortint;
-typedef float real;
-typedef double doublereal;
-typedef struct { real r, i; } complex;
-typedef struct { doublereal r, i; } doublecomplex;
-typedef @F2C_INTEGER@ /* long int */ logical;
-typedef short int shortlogical;
-typedef char logical1;
-typedef char integer1;
-typedef @F2C_LONGINT@ /* long long */ longint; /* system-dependent */
-typedef unsigned @F2C_LONGINT@ /* long long */ ulongint; /* system-dependent */
-#define qbit_clear(a,b) ((a) & ~((ulongint)1 << (b)))
-#define qbit_set(a,b) ((a) | ((ulongint)1 << (b)))
-
-#define TRUE_ (1)
-#define FALSE_ (0)
-
-/* Extern is for use with -E */
-#ifndef Extern
-#define Extern extern
-#endif
-
-/* I/O stuff */
-
-#ifdef f2c_i2
-#error "f2c_i2 will not work with g77!!!!"
-/* for -i2 */
-typedef short flag;
-typedef short ftnlen;
-typedef short ftnint;
-#else
-typedef @F2C_INTEGER@ /* long int */ flag;
-typedef @F2C_INTEGER@ /* long int */ ftnlen;
-typedef @F2C_INTEGER@ /* long int */ ftnint;
-#endif
-
-/*external read, write*/
-typedef struct
-{ flag cierr;
- ftnint ciunit;
- flag ciend;
- char *cifmt;
- ftnint cirec;
-} cilist;
-
-/*internal read, write*/
-typedef struct
-{ flag icierr;
- char *iciunit;
- flag iciend;
- char *icifmt;
- ftnint icirlen;
- ftnint icirnum;
-} icilist;
-
-/*open*/
-typedef struct
-{ flag oerr;
- ftnint ounit;
- char *ofnm;
- ftnlen ofnmlen;
- char *osta;
- char *oacc;
- char *ofm;
- ftnint orl;
- char *oblnk;
-} olist;
-
-/*close*/
-typedef struct
-{ flag cerr;
- ftnint cunit;
- char *csta;
-} cllist;
-
-/*rewind, backspace, endfile*/
-typedef struct
-{ flag aerr;
- ftnint aunit;
-} alist;
-
-/* inquire */
-typedef struct
-{ flag inerr;
- ftnint inunit;
- char *infile;
- ftnlen infilen;
- ftnint *inex; /*parameters in standard's order*/
- ftnint *inopen;
- ftnint *innum;
- ftnint *innamed;
- char *inname;
- ftnlen innamlen;
- char *inacc;
- ftnlen inacclen;
- char *inseq;
- ftnlen inseqlen;
- char *indir;
- ftnlen indirlen;
- char *infmt;
- ftnlen infmtlen;
- char *inform;
- ftnint informlen;
- char *inunf;
- ftnlen inunflen;
- ftnint *inrecl;
- ftnint *innrec;
- char *inblank;
- ftnlen inblanklen;
-} inlist;
-
-#define VOID void
-
-union Multitype { /* for multiple entry points */
- integer1 g;
- shortint h;
- integer i;
- /* longint j; */
- real r;
- doublereal d;
- complex c;
- doublecomplex z;
- };
-
-typedef union Multitype Multitype;
-
-/*typedef long int Long;*/ /* No longer used; formerly in Namelist */
-
-struct Vardesc { /* for Namelist */
- char *name;
- char *addr;
- ftnlen *dims;
- int type;
- };
-typedef struct Vardesc Vardesc;
-
-struct Namelist {
- char *name;
- Vardesc **vars;
- int nvars;
- };
-typedef struct Namelist Namelist;
-
-#define abs(x) ((x) >= 0 ? (x) : -(x))
-#define dabs(x) (doublereal)abs(x)
-#define min(a,b) ((a) <= (b) ? (a) : (b))
-#define max(a,b) ((a) >= (b) ? (a) : (b))
-#define dmin(a,b) (doublereal)min(a,b)
-#define dmax(a,b) (doublereal)max(a,b)
-#define bit_test(a,b) ((a) >> (b) & 1)
-#define bit_clear(a,b) ((a) & ~((uinteger)1 << (b)))
-#define bit_set(a,b) ((a) | ((uinteger)1 << (b)))
-
-/* procedure parameter types for -A and -C++ */
-
-#define F2C_proc_par_types 1
-#ifdef __cplusplus
-typedef int /* Unknown procedure type */ (*U_fp)(...);
-typedef shortint (*J_fp)(...);
-typedef integer (*I_fp)(...);
-typedef real (*R_fp)(...);
-typedef doublereal (*D_fp)(...), (*E_fp)(...);
-typedef /* Complex */ VOID (*C_fp)(...);
-typedef /* Double Complex */ VOID (*Z_fp)(...);
-typedef logical (*L_fp)(...);
-typedef shortlogical (*K_fp)(...);
-typedef /* Character */ VOID (*H_fp)(...);
-typedef /* Subroutine */ int (*S_fp)(...);
-#else
-typedef int /* Unknown procedure type */ (*U_fp)();
-typedef shortint (*J_fp)();
-typedef integer (*I_fp)();
-typedef real (*R_fp)();
-typedef doublereal (*D_fp)(), (*E_fp)();
-typedef /* Complex */ VOID (*C_fp)();
-typedef /* Double Complex */ VOID (*Z_fp)();
-typedef logical (*L_fp)();
-typedef shortlogical (*K_fp)();
-typedef /* Character */ VOID (*H_fp)();
-typedef /* Subroutine */ int (*S_fp)();
-#endif
-/* E_fp is for real functions when -R is not specified */
-typedef VOID C_f; /* complex function */
-typedef VOID H_f; /* character function */
-typedef VOID Z_f; /* double complex function */
-typedef doublereal E_f; /* real function with -R not specified */
-
-/* undef any lower-case symbols that your C compiler predefines, e.g.: */
-
-#ifndef Skip_f2c_Undefs
-/* (No such symbols should be defined in a strict ANSI C compiler.
- We can avoid trouble with f2c-translated code by using
- gcc -ansi [-traditional].) */
-#undef cray
-#undef gcos
-#undef mc68010
-#undef mc68020
-#undef mips
-#undef pdp11
-#undef sgi
-#undef sparc
-#undef sun
-#undef sun2
-#undef sun3
-#undef sun4
-#undef u370
-#undef u3b
-#undef u3b2
-#undef u3b5
-#undef unix
-#undef vax
-#endif
-#endif
diff --git a/gcc/f/runtime/f2cext.c b/gcc/f/runtime/f2cext.c
deleted file mode 100644
index d5ac815c9b4..00000000000
--- a/gcc/f/runtime/f2cext.c
+++ /dev/null
@@ -1,562 +0,0 @@
-/* Copyright (C) 1997 Free Software Foundation, Inc.
-This file is part of GNU Fortran run-time library.
-
-This library is free software; you can redistribute it and/or modify it
-under the terms of the GNU Library General Public License as published
-by the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-GNU Fortran 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
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with GNU Fortran; see the file COPYING.LIB. If
-not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA. */
-
-
-#include <f2c.h>
-typedef int (*sig_proc)(int);
-
-#ifdef Labort
-int abort_ (void) {
- extern int G77_abort_0 (void);
- return G77_abort_0 ();
-}
-#endif
-
-#ifdef Lderf
-double derf_ (doublereal *x) {
- extern double G77_derf_0 (doublereal *x);
- return G77_derf_0 (x);
-}
-#endif
-
-#ifdef Lderfc
-double derfc_ (doublereal *x) {
- extern double G77_derfc_0 (doublereal *x);
- return G77_derfc_0 (x);
-}
-#endif
-
-#ifdef Lef1asc
-int ef1asc_ (ftnint *a, ftnlen *la, ftnint *b, ftnlen *lb) {
- extern int G77_ef1asc_0 (ftnint *a, ftnlen *la, ftnint *b, ftnlen *lb);
- return G77_ef1asc_0 (a, la, b, lb);
-}
-#endif
-
-#ifdef Lef1cmc
-integer ef1cmc_ (ftnint *a, ftnlen *la, ftnint *b, ftnlen *lb) {
- extern integer G77_ef1cmc_0 (ftnint *a, ftnlen *la, ftnint *b, ftnlen *lb);
- return G77_ef1cmc_0 (a, la, b, lb);
-}
-#endif
-
-#ifdef Lerf
-double erf_ (real *x) {
- extern double G77_erf_0 (real *x);
- return G77_erf_0 (x);
-}
-#endif
-
-#ifdef Lerfc
-double erfc_ (real *x) {
- extern double G77_erfc_0 (real *x);
- return G77_erfc_0 (x);
-}
-#endif
-
-#ifdef Lexit
-void exit_ (integer *rc) {
- extern void G77_exit_0 (integer *rc);
- G77_exit_0 (rc);
-}
-#endif
-
-#ifdef Lgetarg
-void getarg_ (ftnint *n, char *s, ftnlen ls) {
- extern void G77_getarg_0 (ftnint *n, char *s, ftnlen ls);
- G77_getarg_0 (n, s, ls);
-}
-#endif
-
-#ifdef Lgetenv
-void getenv_ (char *fname, char *value, ftnlen flen, ftnlen vlen) {
- extern void G77_getenv_0 (char *fname, char *value, ftnlen flen, ftnlen vlen);
- G77_getenv_0 (fname, value, flen, vlen);
-}
-#endif
-
-#ifdef Liargc
-ftnint iargc_ (void) {
- extern ftnint G77_iargc_0 (void);
- return G77_iargc_0 ();
-}
-#endif
-
-#ifdef Lsignal
-ftnint signal_ (integer *sigp, sig_proc proc) {
- extern ftnint G77_signal_0 (integer *sigp, sig_proc proc);
- return G77_signal_0 (sigp, proc);
-}
-#endif
-
-#ifdef Lsystem
-integer system_ (char *s, ftnlen n) {
- extern integer G77_system_0 (char *s, ftnlen n);
- return G77_system_0 (s, n);
-}
-#endif
-
-#ifdef Lflush
-int flush_ (void) {
- extern int G77_flush_0 (void);
- return G77_flush_0 ();
-}
-#endif
-
-#ifdef Lftell
-integer ftell_ (integer *Unit) {
- extern integer G77_ftell_0 (integer *Unit);
- return G77_ftell_0 (Unit);
-}
-#endif
-
-#ifdef Lfseek
-integer fseek_ (integer *Unit, integer *offset, integer *xwhence) {
- extern integer G77_fseek_0 (integer *Unit, integer *offset, integer *xwhence);
- return G77_fseek_0 (Unit, offset, xwhence);
-}
-#endif
-
-#ifdef Laccess
-integer access_ (const char *name, const char *mode, ftnlen Lname, ftnlen Lmode) {
- extern integer G77_access_0 (const char *name, const char *mode, ftnlen Lname, ftnlen Lmode);
- return G77_access_0 (name, mode, Lname, Lmode);
-}
-#endif
-
-#ifdef Lalarm
-integer alarm_ (integer *seconds, sig_proc proc, integer *status) {
- extern integer G77_alarm_0 (integer *seconds, sig_proc proc);
- return G77_alarm_0 (seconds, proc);
-}
-#endif
-
-#ifdef Lbesj0
-double besj0_ (const real *x) {
- return j0 (*x);
-}
-#endif
-
-#ifdef Lbesj1
-double besj1_ (const real *x) {
- return j1 (*x);
-}
-#endif
-
-#ifdef Lbesjn
-double besjn_ (const integer *n, real *x) {
- return jn (*n, *x);
-}
-#endif
-
-#ifdef Lbesy0
-double besy0_ (const real *x) {
- return y0 (*x);
-}
-#endif
-
-#ifdef Lbesy1
-double besy1_ (const real *x) {
- return y1 (*x);
-}
-#endif
-
-#ifdef Lbesyn
-double besyn_ (const integer *n, real *x) {
- return yn (*n, *x);
-}
-#endif
-
-#ifdef Lchdir
-integer chdir_ (const char *name, const ftnlen Lname) {
- extern integer G77_chdir_0 (const char *name, const ftnlen Lname);
- return G77_chdir_0 (name, Lname);
-}
-#endif
-
-#ifdef Lchmod
-integer chmod_ (const char *name, const char *mode, const ftnlen Lname, const ftnlen Lmode) {
- extern integer G77_chmod_0 (const char *name, const char *mode, const ftnlen Lname, const ftnlen Lmode);
- return G77_chmod_0 (name, mode, Lname, Lmode);
-}
-#endif
-
-#ifdef Lctime
-void ctime_ (char *chtime, const ftnlen Lchtime, longint *xstime) {
- extern void G77_ctime_0 (char *chtime, const ftnlen Lchtime, longint *xstime);
- G77_ctime_0 (chtime, Lchtime, xstime);
-}
-#endif
-
-#ifdef Ldate
-int date_ (char *buf, ftnlen buf_len) {
- extern int G77_date_0 (char *buf, ftnlen buf_len);
- return G77_date_0 (buf, buf_len);
-}
-#endif
-
-#ifdef Ldbesj0
-double dbesj0_ (const double *x) {
- return j0 (*x);
-}
-#endif
-
-#ifdef Ldbesj1
-double dbesj1_ (const double *x) {
- return j1 (*x);
-}
-#endif
-
-#ifdef Ldbesjn
-double dbesjn_ (const integer *n, double *x) {
- return jn (*n, *x);
-}
-#endif
-
-#ifdef Ldbesy0
-double dbesy0_ (const double *x) {
- return y0 (*x);
-}
-#endif
-
-#ifdef Ldbesy1
-double dbesy1_ (const double *x) {
- return y1 (*x);
-}
-#endif
-
-#ifdef Ldbesyn
-double dbesyn_ (const integer *n, double *x) {
- return yn (*n, *x);
-}
-#endif
-
-#ifdef Ldtime
-double dtime_ (real tarray[2]) {
- extern double G77_dtime_0 (real tarray[2]);
- return G77_dtime_0 (tarray);
-}
-#endif
-
-#ifdef Letime
-double etime_ (real tarray[2]) {
- extern double G77_etime_0 (real tarray[2]);
- return G77_etime_0 (tarray);
-}
-#endif
-
-#ifdef Lfdate
-void fdate_ (char *ret_val, ftnlen ret_val_len) {
- extern void G77_fdate_0 (char *ret_val, ftnlen ret_val_len);
- G77_fdate_0 (ret_val, ret_val_len);
-}
-#endif
-
-#ifdef Lfgetc
-integer fgetc_ (const integer *lunit, char *c, ftnlen Lc) {
- extern integer G77_fgetc_0 (const integer *lunit, char *c, ftnlen Lc);
- return G77_fgetc_0 (lunit, c, Lc);
-}
-#endif
-
-#ifdef Lfget
-integer fget_ (char *c, const ftnlen Lc) {
- extern integer G77_fget_0 (char *c, const ftnlen Lc);
- return G77_fget_0 (c, Lc);
-}
-#endif
-
-#ifdef Lflush1
-int flush1_ (const integer *lunit) {
- extern int G77_flush1_0 (const integer *lunit);
- return G77_flush1_0 (lunit);
-}
-#endif
-
-#ifdef Lfnum
-integer fnum_ (integer *lunit) {
- extern integer G77_fnum_0 (integer *lunit);
- return G77_fnum_0 (lunit);
-}
-#endif
-
-#ifdef Lfputc
-integer fputc_ (const integer *lunit, const char *c, const ftnlen Lc) {
- extern integer G77_fputc_0 (const integer *lunit, const char *c, const ftnlen Lc);
- return G77_fputc_0 (lunit, c, Lc);
-}
-#endif
-
-#ifdef Lfput
-integer fput_ (const char *c, const ftnlen Lc) {
- extern integer G77_fput_0 (const char *c, const ftnlen Lc);
- return G77_fput_0 (c, Lc);
-}
-#endif
-
-#ifdef Lfstat
-integer fstat_ (const integer *lunit, integer statb[13]) {
- extern integer G77_fstat_0 (const integer *lunit, integer statb[13]);
- return G77_fstat_0 (lunit, statb);
-}
-#endif
-
-#ifdef Lgerror
-int gerror_ (char *str, ftnlen Lstr) {
- extern int G77_gerror_0 (char *str, ftnlen Lstr);
- return G77_gerror_0 (str, Lstr);
-}
-#endif
-
-#ifdef Lgetcwd
-integer getcwd_ (char *str, const ftnlen Lstr) {
- extern integer G77_getcwd_0 (char *str, const ftnlen Lstr);
- return G77_getcwd_0 (str, Lstr);
-}
-#endif
-
-#ifdef Lgetgid
-integer getgid_ (void) {
- extern integer G77_getgid_0 (void);
- return G77_getgid_0 ();
-}
-#endif
-
-#ifdef Lgetlog
-int getlog_ (char *str, const ftnlen Lstr) {
- extern int G77_getlog_0 (char *str, const ftnlen Lstr);
- return G77_getlog_0 (str, Lstr);
-}
-#endif
-
-#ifdef Lgetpid
-integer getpid_ (void) {
- extern integer G77_getpid_0 (void);
- return G77_getpid_0 ();
-}
-#endif
-
-#ifdef Lgetuid
-integer getuid_ (void) {
- extern integer G77_getuid_0 (void);
- return G77_getuid_0 ();
-}
-#endif
-
-#ifdef Lgmtime
-int gmtime_ (const integer *stime, integer tarray[9]) {
- extern int G77_gmtime_0 (const integer *stime, integer tarray[9]);
- return G77_gmtime_0 (stime, tarray);
-}
-#endif
-
-#ifdef Lhostnm
-integer hostnm_ (char *name, ftnlen Lname) {
- extern integer G77_hostnm_0 (char *name, ftnlen Lname);
- return G77_hostnm_0 (name, Lname);
-}
-#endif
-
-#ifdef Lidate
-int idate_ (int iarray[3]) {
- extern int G77_idate_0 (int iarray[3]);
- return G77_idate_0 (iarray);
-}
-#endif
-
-#ifdef Lierrno
-integer ierrno_ (void) {
- extern integer G77_ierrno_0 (void);
- return G77_ierrno_0 ();
-}
-#endif
-
-#ifdef Lirand
-integer irand_ (integer *flag) {
- extern integer G77_irand_0 (integer *flag);
- return G77_irand_0 (flag);
-}
-#endif
-
-#ifdef Lisatty
-logical isatty_ (integer *lunit) {
- extern logical G77_isatty_0 (integer *lunit);
- return G77_isatty_0 (lunit);
-}
-#endif
-
-#ifdef Litime
-int itime_ (integer tarray[3]) {
- extern int G77_itime_0 (integer tarray[3]);
- return G77_itime_0 (tarray);
-}
-#endif
-
-#ifdef Lkill
-integer kill_ (const integer *pid, const integer *signum) {
- extern integer G77_kill_0 (const integer *pid, const integer *signum);
- return G77_kill_0 (pid, signum);
-}
-#endif
-
-#ifdef Llink
-integer link_ (const char *path1, const char *path2, const ftnlen Lpath1, const ftnlen Lpath2) {
- extern integer G77_link_0 (const char *path1, const char *path2, const ftnlen Lpath1, const ftnlen Lpath2);
- return G77_link_0 (path1, path2, Lpath1, Lpath2);
-}
-#endif
-
-#ifdef Llnblnk
-integer lnblnk_ (char *str, ftnlen str_len) {
- extern integer G77_lnblnk_0 (char *str, ftnlen str_len);
- return G77_lnblnk_0 (str, str_len);
-}
-#endif
-
-#ifdef Llstat
-integer lstat_ (const char *name, integer statb[13], const ftnlen Lname) {
- extern integer G77_lstat_0 (const char *name, integer statb[13], const ftnlen Lname);
- return G77_lstat_0 (name, statb, Lname);
-}
-#endif
-
-#ifdef Lltime
-int ltime_ (const integer *stime, integer tarray[9]) {
- extern int G77_ltime_0 (const integer *stime, integer tarray[9]);
- return G77_ltime_0 (stime, tarray);
-}
-#endif
-
-#ifdef Lmclock
-longint mclock_ (void) {
- extern longint G77_mclock_0 (void);
- return G77_mclock_0 ();
-}
-#endif
-
-#ifdef Lperror
-int perror_ (const char *str, const ftnlen Lstr) {
- extern int G77_perror_0 (const char *str, const ftnlen Lstr);
- return G77_perror_0 (str, Lstr);
-}
-#endif
-
-#ifdef Lrand
-double rand_ (integer *flag) {
- extern double G77_rand_0 (integer *flag);
- return G77_rand_0 (flag);
-}
-#endif
-
-#ifdef Lrename
-integer rename_ (const char *path1, const char *path2, const ftnlen Lpath1, const ftnlen Lpath2) {
- extern integer G77_rename_0 (const char *path1, const char *path2, const ftnlen Lpath1, const ftnlen Lpath2);
- return G77_rename_0 (path1, path2, Lpath1, Lpath2);
-}
-#endif
-
-#ifdef Lsecnds
-double secnds_ (real *r) {
- extern double G77_secnds_0 (real *r);
- return G77_secnds_0 (r);
-}
-#endif
-
-#ifdef Lsecond
-double second_ () {
- extern double G77_second_0 ();
- return G77_second_0 ();
-}
-#endif
-
-#ifdef Lsleep
-int sleep_ (const integer *seconds) {
- extern int G77_sleep_0 (const integer *seconds);
- return G77_sleep_0 (seconds);
-}
-#endif
-
-#ifdef Lsrand
-int srand_ (const integer *seed) {
- extern int G77_srand_0 (const integer *seed);
- return G77_srand_0 (seed);
-}
-#endif
-
-#ifdef Lstat
-integer stat_ (const char *name, integer statb[13], const ftnlen Lname) {
- extern integer G77_stat_0 (const char *name, integer statb[13], const ftnlen Lname);
- return G77_stat_0 (name, statb, Lname);
-}
-#endif
-
-#ifdef Lsymlnk
-integer symlnk_ (const char *path1, const char *path2, const ftnlen Lpath1, const ftnlen Lpath2) {
- extern integer G77_symlnk_0 (const char *path1, const char *path2, const ftnlen Lpath1, const ftnlen Lpath2);
- return G77_symlnk_0 (path1, path2, Lpath1, Lpath2);
-}
-#endif
-
-#ifdef Lsclock
-int system_clock_ (integer *count, integer *count_rate, integer *count_max) {
- extern int G77_system_clock_0 (integer *count, integer *count_rate, integer *count_max);
- return G77_system_clock_0 (count, count_rate, count_max);
-}
-#endif
-
-#ifdef Ltime
-longint time_ (void) {
- extern longint G77_time_0 (void);
- return G77_time_0 ();
-}
-#endif
-
-#ifdef Lttynam
-void ttynam_ (char *ret_val, ftnlen ret_val_len, integer *lunit) {
- extern void G77_ttynam_0 (char *ret_val, ftnlen ret_val_len, integer *lunit);
- G77_ttynam_0 (ret_val, ret_val_len, lunit);
-}
-#endif
-
-#ifdef Lumask
-integer umask_ (integer *mask) {
- extern integer G77_umask_0 (integer *mask);
- return G77_umask_0 (mask);
-}
-#endif
-
-#ifdef Lunlink
-integer unlink_ (const char *str, const ftnlen Lstr) {
- extern integer G77_unlink_0 (const char *str, const ftnlen Lstr);
- return G77_unlink_0 (str, Lstr);
-}
-#endif
-
-#ifdef Lvxtidt
-int vxtidate_ (integer *m, integer *d, integer *y) {
- extern int G77_vxtidate_0 (integer *m, integer *d, integer *y);
- return G77_vxtidate_0 (m, d, y);
-}
-#endif
-
-#ifdef Lvxttim
-void vxttime_ (char chtime[8], const ftnlen Lchtime) {
- extern void G77_vxttime_0 (char chtime[8], const ftnlen Lchtime);
- G77_vxttime_0 (chtime, Lchtime);
-}
-#endif
diff --git a/gcc/f/runtime/libF77/F77_aloc.c b/gcc/f/runtime/libF77/F77_aloc.c
deleted file mode 100644
index 8754fe2ef70..00000000000
--- a/gcc/f/runtime/libF77/F77_aloc.c
+++ /dev/null
@@ -1,32 +0,0 @@
-#include "f2c.h"
-#undef abs
-#undef min
-#undef max
-#include <stdio.h>
-
-static integer memfailure = 3;
-
-#ifdef KR_headers
-extern char *malloc();
-extern void G77_exit_0 ();
-
- char *
-F77_aloc(Len, whence) integer Len; char *whence;
-#else
-#include <stdlib.h>
-extern void G77_exit_0 (integer*);
-
- char *
-F77_aloc(integer Len, char *whence)
-#endif
-{
- char *rv;
- unsigned int uLen = (unsigned int) Len; /* for K&R C */
-
- if (!(rv = (char*)malloc(uLen))) {
- fprintf(stderr, "malloc(%u) failure in %s\n",
- uLen, whence);
- G77_exit_0 (&memfailure);
- }
- return rv;
- }
diff --git a/gcc/f/runtime/libF77/Makefile.in b/gcc/f/runtime/libF77/Makefile.in
deleted file mode 100644
index 208626cb4a0..00000000000
--- a/gcc/f/runtime/libF77/Makefile.in
+++ /dev/null
@@ -1,95 +0,0 @@
-# Makefile for GNU F77 compiler runtime.
-# Copyright 1990 - 1994 by AT&T Bell Laboratories and Bellcore (see the
-# file `Notice').
-# Portions of this file Copyright (C) 1995, 1996 Free Software Foundation, Inc.
-# Contributed by Dave Love (d.love@dl.ac.uk).
-#
-#This file is part of GNU Fortran.
-#
-#GNU Fortran 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.
-#
-#GNU Fortran 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 GNU Fortran; see the file COPYING. If not, write to
-#the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
-#02111-1307, USA.
-
-SHELL = /bin/sh
-
-srcdir = @srcdir@
-VPATH = @srcdir@
-
-#### Start of system configuration section. ####
-
-# The _FOR_TARGET things are appropriate for a cross-make, passed by the
-# superior makefile
-GCC_FOR_TARGET = @CC@
-CC = $(GCC_FOR_TARGET)
-CFLAGS = @CFLAGS@ $(GCC_FLAGS)
-CPPFLAGS = @CPPFLAGS@
-DEFS = @DEFS@
-CGFLAGS = -g0
-# f2c.h should already be installed in xgcc's include directory but add that
-# to -I anyhow in case not using xgcc.
-ALL_CFLAGS = -I. -I$(srcdir) -I../../../include $(CPPFLAGS) $(DEFS) $(CFLAGS)
-AR = @AR@
-AR_FLAGS = rc
-RANLIB = @RANLIB@
-RANLIB_TEST = @RANLIB_TEST@
-CROSS = @CROSS@
-
-.SUFFIXES:
-.SUFFIXES: .c .o
-
-.c.o:
- $(CC) -c -DSkip_f2c_Undefs $(ALL_CFLAGS) $(CGFLAGS) $<
-
-MISC = F77_aloc.o VersionF.o main.o s_rnge.o abort_.o getarg_.o iargc_.o\
- getenv_.o signal_.o s_stop.o s_paus.o system_.o cabs.o\
- derf_.o derfc_.o erf_.o erfc_.o sig_die.o exit_.o
-POW = pow_ci.o pow_dd.o pow_di.o pow_hh.o pow_ii.o pow_ri.o pow_zi.o pow_zz.o \
- pow_qq.o
-CX = c_abs.o c_cos.o c_div.o c_exp.o c_log.o c_sin.o c_sqrt.o
-DCX = z_abs.o z_cos.o z_div.o z_exp.o z_log.o z_sin.o z_sqrt.o
-REAL = r_abs.o r_acos.o r_asin.o r_atan.o r_atn2.o r_cnjg.o r_cos.o\
- r_cosh.o r_dim.o r_exp.o r_imag.o r_int.o\
- r_lg10.o r_log.o r_mod.o r_nint.o r_sign.o\
- r_sin.o r_sinh.o r_sqrt.o r_tan.o r_tanh.o
-DBL = d_abs.o d_acos.o d_asin.o d_atan.o d_atn2.o\
- d_cnjg.o d_cos.o d_cosh.o d_dim.o d_exp.o\
- d_imag.o d_int.o d_lg10.o d_log.o d_mod.o\
- d_nint.o d_prod.o d_sign.o d_sin.o d_sinh.o\
- d_sqrt.o d_tan.o d_tanh.o
-INT = i_abs.o i_dim.o i_dnnt.o i_indx.o i_len.o i_mod.o i_nint.o i_sign.o
-HALF = h_abs.o h_dim.o h_dnnt.o h_indx.o h_len.o h_mod.o h_nint.o h_sign.o
-CMP = l_ge.o l_gt.o l_le.o l_lt.o hl_ge.o hl_gt.o hl_le.o hl_lt.o
-EFL = ef1asc_.o ef1cmc_.o
-CHAR = s_cat.o s_cmp.o s_copy.o
-F90BIT = lbitbits.o lbitshft.o qbitbits.o qbitshft.o
-
-F2C_H = ../../../include/f2c.h
-
-all: $(MISC) $(POW) $(CX) $(DCX) $(REAL) $(DBL) $(INT) \
- $(HALF) $(CMP) $(EFL) $(CHAR) $(F90BIT)
-
-VersionF.o: Version.c
- $(CC) -c $(CGFLAGS) -o $@ $(srcdir)/Version.c
-
-mostlyclean clean:
- -rm -f *.o
-
-distclean maintainer-clean: clean
- -rm -f stage? include Makefile
-
-# Not quite all these actually do depend on f2c.h...
-$(MISC) $(POW) $(CX) $(DCX) $(REAL) $(DBL) $(INT) \
- $(HALF) $(CMP) $(EFL) $(CHAR) $(F90BIT): $(F2C_H)
-
-.PHONY: mostlyclean clean distclean maintainer-clean all
diff --git a/gcc/f/runtime/libF77/Notice b/gcc/f/runtime/libF77/Notice
deleted file mode 100644
index 261b719bc57..00000000000
--- a/gcc/f/runtime/libF77/Notice
+++ /dev/null
@@ -1,23 +0,0 @@
-/****************************************************************
-Copyright 1990 - 1997 by AT&T, Lucent Technologies and Bellcore.
-
-Permission to use, copy, modify, and distribute this software
-and its documentation for any purpose and without fee is hereby
-granted, provided that the above copyright notice appear in all
-copies and that both that the copyright notice and this
-permission notice and warranty disclaimer appear in supporting
-documentation, and that the names of AT&T, Bell Laboratories,
-Lucent or Bellcore or any of their entities not be used in
-advertising or publicity pertaining to distribution of the
-software without specific, written prior permission.
-
-AT&T, Lucent and Bellcore disclaim all warranties with regard to
-this software, including all implied warranties of
-merchantability and fitness. In no event shall AT&T, Lucent or
-Bellcore be liable for any special, indirect or consequential
-damages or any damages whatsoever resulting from loss of use,
-data or profits, whether in an action of contract, negligence or
-other tortious action, arising out of or in connection with the
-use or performance of this software.
-****************************************************************/
-
diff --git a/gcc/f/runtime/libF77/README.netlib b/gcc/f/runtime/libF77/README.netlib
deleted file mode 100644
index 76682152551..00000000000
--- a/gcc/f/runtime/libF77/README.netlib
+++ /dev/null
@@ -1,108 +0,0 @@
-If your compiler does not recognize ANSI C headers,
-compile with KR_headers defined: either add -DKR_headers
-to the definition of CFLAGS in the makefile, or insert
-
-#define KR_headers
-
-at the top of f2c.h , cabs.c , main.c , and sig_die.c .
-
-Under MS-DOS, compile s_paus.c with -DMSDOS.
-
-If you have a really ancient K&R C compiler that does not understand
-void, add -Dvoid=int to the definition of CFLAGS in the makefile.
-
-If you use a C++ compiler, first create a local f2c.h by appending
-f2ch.add to the usual f2c.h, e.g., by issuing the command
- make f2c.h
-which assumes f2c.h is installed in /usr/include .
-
-If your system lacks onexit() and you are not using an ANSI C
-compiler, then you should compile main.c, s_paus.c, s_stop.c, and
-sig_die.c with NO_ONEXIT defined. See the comments about onexit in
-the makefile.
-
-If your system has a double drem() function such that drem(a,b)
-is the IEEE remainder function (with double a, b), then you may
-wish to compile r_mod.c and d_mod.c with IEEE_drem defined.
-On some systems, you may also need to compile with -Ddrem=remainder .
-
-To check for transmission errors, issue the command
- make check
-This assumes you have the xsum program whose source, xsum.c,
-is distributed as part of "all from f2c/src". If you do not
-have xsum, you can obtain xsum.c by sending the following E-mail
-message to netlib@netlib.bell-labs.com
- send xsum.c from f2c/src
-
-The makefile assumes you have installed f2c.h in a standard
-place (and does not cause recompilation when f2c.h is changed);
-f2c.h comes with "all from f2c" (the source for f2c) and is
-available separately ("f2c.h from f2c").
-
-Most of the routines in libF77 are support routines for Fortran
-intrinsic functions or for operations that f2c chooses not
-to do "in line". There are a few exceptions, summarized below --
-functions and subroutines that appear to your program as ordinary
-external Fortran routines.
-
-1. CALL ABORT prints a message and causes a core dump.
-
-2. ERF(r) and DERF(d) and the REAL and DOUBLE PRECISION
- error functions (with x REAL and d DOUBLE PRECISION);
- DERF must be declared DOUBLE PRECISION in your program.
- Both ERF and DERF assume your C library provides the
- underlying erf() function (which not all systems do).
-
-3. ERFC(r) and DERFC(d) are the complementary error functions:
- ERFC(r) = 1 - ERF(r) and DERFC(d) = 1.d0 - DERFC(d)
- (except that their results may be more accurate than
- explicitly evaluating the above formulae would give).
- Again, ERFC and r are REAL, and DERFC and d are DOUBLE
- PRECISION (and must be declared as such in your program),
- and ERFC and DERFC rely on your system's erfc().
-
-4. CALL GETARG(n,s), where n is an INTEGER and s is a CHARACTER
- variable, sets s to the n-th command-line argument (or to
- all blanks if there are fewer than n command-line arguments);
- CALL GETARG(0,s) sets s to the name of the program (on systems
- that support this feature). See IARGC below.
-
-5. CALL GETENV(name, value), where name and value are of type
- CHARACTER, sets value to the environment value, $name, of
- name (or to blanks if $name has not been set).
-
-6. NARGS = IARGC() sets NARGS to the number of command-line
- arguments (an INTEGER value).
-
-7. CALL SIGNAL(n,func), where n is an INTEGER and func is an
- EXTERNAL procedure, arranges for func to be invoked when
- signal n occurs (on systems where this makes sense).
-
-8. CALL SYSTEM(cmd), where cmd is of type CHARACTER, passes
- cmd to the system's command processor (on systems where
- this can be done).
-
-The makefile does not attempt to compile pow_qq.c, qbitbits.c,
-and qbitshft.c, which are meant for use with INTEGER*8. To use
-INTEGER*8, you must modify f2c.h to declare longint and ulongint
-appropriately; then add pow_qq.o to the POW = line in the makefile,
-and add " qbitbits.o qbitshft.o" to the makefile's F90BIT = line.
-
-Following Fortran 90, s_cat.c and s_copy.c allow the target of a
-(character string) assignment to be appear on its right-hand, at
-the cost of some extra overhead for all run-time concatenations.
-If you prefer the extra efficiency that comes with the Fortran 77
-requirement that the left-hand side of a character assignment not
-be involved in the right-hand side, compile s_cat.c and s_copy.c
-with -DNO_OVERWRITE .
-
-If your system lacks a ranlib command, you don't need it.
-Either comment out the makefile's ranlib invocation, or install
-a harmless "ranlib" command somewhere in your PATH, such as the
-one-line shell script
-
- exit 0
-
-or (on some systems)
-
- exec /usr/bin/ar lts $1 >/dev/null
diff --git a/gcc/f/runtime/libF77/Version.c b/gcc/f/runtime/libF77/Version.c
deleted file mode 100644
index 8644f3f8187..00000000000
--- a/gcc/f/runtime/libF77/Version.c
+++ /dev/null
@@ -1,65 +0,0 @@
-static char junk[] = "\n@(#)LIBF77 VERSION 19970404\n";
-
-/*
-*/
-
-char __G77_LIBF77_VERSION__[] = "0.5.21";
-
-/*
-2.00 11 June 1980. File version.c added to library.
-2.01 31 May 1988. s_paus() flushes stderr; names of hl_* fixed
- [ d]erf[c ] added
- 8 Aug. 1989: #ifdefs for f2c -i2 added to s_cat.c
- 29 Nov. 1989: s_cmp returns long (for f2c)
- 30 Nov. 1989: arg types from f2c.h
- 12 Dec. 1989: s_rnge allows long names
- 19 Dec. 1989: getenv_ allows unsorted environment
- 28 Mar. 1990: add exit(0) to end of main()
- 2 Oct. 1990: test signal(...) == SIG_IGN rather than & 01 in main
- 17 Oct. 1990: abort() calls changed to sig_die(...,1)
- 22 Oct. 1990: separate sig_die from main
- 25 Apr. 1991: minor, theoretically invisible tweaks to s_cat, sig_die
- 31 May 1991: make system_ return status
- 18 Dec. 1991: change long to ftnlen (for -i2) many places
- 28 Feb. 1992: repair z_sqrt.c (scribbled on input, gave wrong answer)
- 18 July 1992: for n < 0, repair handling of 0**n in pow_[dr]i.c
- and m**n in pow_hh.c and pow_ii.c;
- catch SIGTRAP in main() for error msg before abort
- 23 July 1992: switch to ANSI prototypes unless KR_headers is #defined
- 23 Oct. 1992: fix botch in signal_.c (erroneous deref of 2nd arg);
- change Cabs to f__cabs.
- 12 March 1993: various tweaks for C++
- 2 June 1994: adjust so abnormal terminations invoke f_exit just once
- 16 Sept. 1994: s_cmp: treat characters as unsigned in comparisons.
- 19 Sept. 1994: s_paus: flush after end of PAUSE; add -DMSDOS
- 12 Jan. 1995: pow_[dhiqrz][hiq]: adjust x**i to work on machines
- that sign-extend right shifts when i is the most
- negative integer.
- 26 Jan. 1995: adjust s_cat.c, s_copy.c to permit the left-hand side
- of character assignments to appear on the right-hand
- side (unless compiled with -DNO_OVERWRITE).
- 27 Jan. 1995: minor tweak to s_copy.c: copy forward whenever
- possible (for better cache behavior).
- 30 May 1995: added subroutine exit(rc) integer rc. Version not changed.
- 29 Aug. 1995: add F77_aloc.c; use it in s_cat.c and system_.c.
- 6 Sept. 1995: fix return type of system_ under -DKR_headers.
- 19 Dec. 1995: s_cat.c: fix bug when 2nd or later arg overlaps lhs.
- 19 Mar. 1996: s_cat.c: supply missing break after overlap detection.
- 13 May 1996: add [lq]bitbits.c and [lq]bitshft.c (f90 bit intrinsics).
- 19 June 1996: add casts to unsigned in [lq]bitshft.c.
- 26 Feb. 1997: adjust functions with a complex output argument
- to permit aliasing it with input arguments.
- (For now, at least, this is just for possible
- benefit of g77.)
- 4 April 1997: [cz]_div.c: tweaks invisible on most systems (that may
- affect systems using gratuitous extra precision).
-*/
-
-#include <stdio.h>
-
-void
-g77__fvers__ ()
-{
- fprintf (stderr, "__G77_LIBF77_VERSION__: %s", __G77_LIBF77_VERSION__);
- fputs (junk, stderr);
-}
diff --git a/gcc/f/runtime/libF77/abort_.c b/gcc/f/runtime/libF77/abort_.c
deleted file mode 100644
index 8efdc42f970..00000000000
--- a/gcc/f/runtime/libF77/abort_.c
+++ /dev/null
@@ -1,18 +0,0 @@
-#include <stdio.h>
-#include "f2c.h"
-
-#ifdef KR_headers
-extern VOID sig_die();
-
-int G77_abort_0 ()
-#else
-extern void sig_die(char*,int);
-
-int G77_abort_0 (void)
-#endif
-{
-sig_die("Fortran abort routine called", 1);
-#ifdef __cplusplus
-return 0;
-#endif
-}
diff --git a/gcc/f/runtime/libF77/c_abs.c b/gcc/f/runtime/libF77/c_abs.c
deleted file mode 100644
index 041fbd3d8bb..00000000000
--- a/gcc/f/runtime/libF77/c_abs.c
+++ /dev/null
@@ -1,14 +0,0 @@
-#include "f2c.h"
-
-#ifdef KR_headers
-extern double f__cabs();
-
-double c_abs(z) complex *z;
-#else
-extern double f__cabs(double, double);
-
-double c_abs(complex *z)
-#endif
-{
-return( f__cabs( z->r, z->i ) );
-}
diff --git a/gcc/f/runtime/libF77/c_cos.c b/gcc/f/runtime/libF77/c_cos.c
deleted file mode 100644
index 9e833c168b3..00000000000
--- a/gcc/f/runtime/libF77/c_cos.c
+++ /dev/null
@@ -1,21 +0,0 @@
-#include "f2c.h"
-
-#ifdef KR_headers
-extern double sin(), cos(), sinh(), cosh();
-
-VOID c_cos(resx, z) complex *resx, *z;
-#else
-#undef abs
-#include <math.h>
-
-void c_cos(complex *resx, complex *z)
-#endif
-{
-complex res;
-
-res.r = cos(z->r) * cosh(z->i);
-res.i = - sin(z->r) * sinh(z->i);
-
-resx->r = res.r;
-resx->i = res.i;
-}
diff --git a/gcc/f/runtime/libF77/c_div.c b/gcc/f/runtime/libF77/c_div.c
deleted file mode 100644
index 9568354bd53..00000000000
--- a/gcc/f/runtime/libF77/c_div.c
+++ /dev/null
@@ -1,40 +0,0 @@
-#include "f2c.h"
-
-#ifdef KR_headers
-extern VOID sig_die();
-VOID c_div(resx, a, b)
-complex *a, *b, *resx;
-#else
-extern void sig_die(char*,int);
-void c_div(complex *resx, complex *a, complex *b)
-#endif
-{
-double ratio, den;
-double abr, abi;
-complex res;
-
-if( (abr = b->r) < 0.)
- abr = - abr;
-if( (abi = b->i) < 0.)
- abi = - abi;
-if( abr <= abi )
- {
- if(abi == 0)
- sig_die("complex division by zero", 1);
- ratio = (double)b->r / b->i ;
- den = b->i * (1 + ratio*ratio);
- res.r = (a->r*ratio + a->i) / den;
- res.i = (a->i*ratio - a->r) / den;
- }
-
-else
- {
- ratio = (double)b->i / b->r ;
- den = b->r * (1 + ratio*ratio);
- res.r = (a->r + a->i*ratio) / den;
- res.i = (a->i - a->r*ratio) / den;
- }
-
-resx->r = res.r;
-resx->i = res.i;
-}
diff --git a/gcc/f/runtime/libF77/c_exp.c b/gcc/f/runtime/libF77/c_exp.c
deleted file mode 100644
index 8d3d33d0fe3..00000000000
--- a/gcc/f/runtime/libF77/c_exp.c
+++ /dev/null
@@ -1,23 +0,0 @@
-#include "f2c.h"
-
-#ifdef KR_headers
-extern double exp(), cos(), sin();
-
- VOID c_exp(resx, z) complex *resx, *z;
-#else
-#undef abs
-#include <math.h>
-
-void c_exp(complex *resx, complex *z)
-#endif
-{
-double expx;
-complex res;
-
-expx = exp(z->r);
-res.r = expx * cos(z->i);
-res.i = expx * sin(z->i);
-
-resx->r = res.r;
-resx->i = res.i;
-}
diff --git a/gcc/f/runtime/libF77/c_log.c b/gcc/f/runtime/libF77/c_log.c
deleted file mode 100644
index 6715131ad1d..00000000000
--- a/gcc/f/runtime/libF77/c_log.c
+++ /dev/null
@@ -1,21 +0,0 @@
-#include "f2c.h"
-
-#ifdef KR_headers
-extern double log(), f__cabs(), atan2();
-VOID c_log(resx, z) complex *resx, *z;
-#else
-#undef abs
-#include <math.h>
-extern double f__cabs(double, double);
-
-void c_log(complex *resx, complex *z)
-#endif
-{
-complex res;
-
-res.i = atan2(z->i, z->r);
-res.r = log( f__cabs(z->r, z->i) );
-
-resx->r = res.r;
-resx->i = res.i;
-}
diff --git a/gcc/f/runtime/libF77/c_sin.c b/gcc/f/runtime/libF77/c_sin.c
deleted file mode 100644
index 7bf3e392bed..00000000000
--- a/gcc/f/runtime/libF77/c_sin.c
+++ /dev/null
@@ -1,21 +0,0 @@
-#include "f2c.h"
-
-#ifdef KR_headers
-extern double sin(), cos(), sinh(), cosh();
-
-VOID c_sin(resx, z) complex *resx, *z;
-#else
-#undef abs
-#include <math.h>
-
-void c_sin(complex *resx, complex *z)
-#endif
-{
-complex res;
-
-res.r = sin(z->r) * cosh(z->i);
-res.i = cos(z->r) * sinh(z->i);
-
-resx->r = res.r;
-resx->i = res.i;
-}
diff --git a/gcc/f/runtime/libF77/c_sqrt.c b/gcc/f/runtime/libF77/c_sqrt.c
deleted file mode 100644
index 775977a87f7..00000000000
--- a/gcc/f/runtime/libF77/c_sqrt.c
+++ /dev/null
@@ -1,38 +0,0 @@
-#include "f2c.h"
-
-#ifdef KR_headers
-extern double sqrt(), f__cabs();
-
-VOID c_sqrt(resx, z) complex *resx, *z;
-#else
-#undef abs
-#include <math.h>
-extern double f__cabs(double, double);
-
-void c_sqrt(complex *resx, complex *z)
-#endif
-{
-double mag, t;
-complex res;
-
-if( (mag = f__cabs(z->r, z->i)) == 0.)
- res.r = res.i = 0.;
-else if(z->r > 0)
- {
- res.r = t = sqrt(0.5 * (mag + z->r) );
- t = z->i / t;
- res.i = 0.5 * t;
- }
-else
- {
- t = sqrt(0.5 * (mag - z->r) );
- if(z->i < 0)
- t = -t;
- res.i = t;
- t = z->i / t;
- res.r = 0.5 * t;
- }
-
-resx->r = res.r;
-resx->i = res.i;
-}
diff --git a/gcc/f/runtime/libF77/cabs.c b/gcc/f/runtime/libF77/cabs.c
deleted file mode 100644
index 2fad044e884..00000000000
--- a/gcc/f/runtime/libF77/cabs.c
+++ /dev/null
@@ -1,27 +0,0 @@
-#ifdef KR_headers
-extern double sqrt();
-double f__cabs(real, imag) double real, imag;
-#else
-#undef abs
-#include <math.h>
-double f__cabs(double real, double imag)
-#endif
-{
-double temp;
-
-if(real < 0)
- real = -real;
-if(imag < 0)
- imag = -imag;
-if(imag > real){
- temp = real;
- real = imag;
- imag = temp;
-}
-if((real+imag) == real)
- return(real);
-
-temp = imag/real;
-temp = real*sqrt(1.0 + temp*temp); /*overflow!!*/
-return(temp);
-}
diff --git a/gcc/f/runtime/libF77/d_abs.c b/gcc/f/runtime/libF77/d_abs.c
deleted file mode 100644
index cb157e067b7..00000000000
--- a/gcc/f/runtime/libF77/d_abs.c
+++ /dev/null
@@ -1,12 +0,0 @@
-#include "f2c.h"
-
-#ifdef KR_headers
-double d_abs(x) doublereal *x;
-#else
-double d_abs(doublereal *x)
-#endif
-{
-if(*x >= 0)
- return(*x);
-return(- *x);
-}
diff --git a/gcc/f/runtime/libF77/d_acos.c b/gcc/f/runtime/libF77/d_acos.c
deleted file mode 100644
index 33da5369db2..00000000000
--- a/gcc/f/runtime/libF77/d_acos.c
+++ /dev/null
@@ -1,13 +0,0 @@
-#include "f2c.h"
-
-#ifdef KR_headers
-double acos();
-double d_acos(x) doublereal *x;
-#else
-#undef abs
-#include <math.h>
-double d_acos(doublereal *x)
-#endif
-{
-return( acos(*x) );
-}
diff --git a/gcc/f/runtime/libF77/d_asin.c b/gcc/f/runtime/libF77/d_asin.c
deleted file mode 100644
index 79b33ca1bd6..00000000000
--- a/gcc/f/runtime/libF77/d_asin.c
+++ /dev/null
@@ -1,13 +0,0 @@
-#include "f2c.h"
-
-#ifdef KR_headers
-double asin();
-double d_asin(x) doublereal *x;
-#else
-#undef abs
-#include <math.h>
-double d_asin(doublereal *x)
-#endif
-{
-return( asin(*x) );
-}
diff --git a/gcc/f/runtime/libF77/d_atan.c b/gcc/f/runtime/libF77/d_atan.c
deleted file mode 100644
index caea4a406e0..00000000000
--- a/gcc/f/runtime/libF77/d_atan.c
+++ /dev/null
@@ -1,13 +0,0 @@
-#include "f2c.h"
-
-#ifdef KR_headers
-double atan();
-double d_atan(x) doublereal *x;
-#else
-#undef abs
-#include <math.h>
-double d_atan(doublereal *x)
-#endif
-{
-return( atan(*x) );
-}
diff --git a/gcc/f/runtime/libF77/d_atn2.c b/gcc/f/runtime/libF77/d_atn2.c
deleted file mode 100644
index 6748a55d56f..00000000000
--- a/gcc/f/runtime/libF77/d_atn2.c
+++ /dev/null
@@ -1,13 +0,0 @@
-#include "f2c.h"
-
-#ifdef KR_headers
-double atan2();
-double d_atn2(x,y) doublereal *x, *y;
-#else
-#undef abs
-#include <math.h>
-double d_atn2(doublereal *x, doublereal *y)
-#endif
-{
-return( atan2(*x,*y) );
-}
diff --git a/gcc/f/runtime/libF77/d_cnjg.c b/gcc/f/runtime/libF77/d_cnjg.c
deleted file mode 100644
index 1afa3bc4061..00000000000
--- a/gcc/f/runtime/libF77/d_cnjg.c
+++ /dev/null
@@ -1,17 +0,0 @@
-#include "f2c.h"
-
- VOID
-#ifdef KR_headers
-d_cnjg(resx, z) doublecomplex *resx, *z;
-#else
-d_cnjg(doublecomplex *resx, doublecomplex *z)
-#endif
-{
-doublecomplex res;
-
-res.r = z->r;
-res.i = - z->i;
-
-resx->r = res.r;
-resx->i = res.i;
-}
diff --git a/gcc/f/runtime/libF77/d_cos.c b/gcc/f/runtime/libF77/d_cos.c
deleted file mode 100644
index fa4d6ca406f..00000000000
--- a/gcc/f/runtime/libF77/d_cos.c
+++ /dev/null
@@ -1,13 +0,0 @@
-#include "f2c.h"
-
-#ifdef KR_headers
-double cos();
-double d_cos(x) doublereal *x;
-#else
-#undef abs
-#include <math.h>
-double d_cos(doublereal *x)
-#endif
-{
-return( cos(*x) );
-}
diff --git a/gcc/f/runtime/libF77/d_cosh.c b/gcc/f/runtime/libF77/d_cosh.c
deleted file mode 100644
index edc0ebc1092..00000000000
--- a/gcc/f/runtime/libF77/d_cosh.c
+++ /dev/null
@@ -1,13 +0,0 @@
-#include "f2c.h"
-
-#ifdef KR_headers
-double cosh();
-double d_cosh(x) doublereal *x;
-#else
-#undef abs
-#include <math.h>
-double d_cosh(doublereal *x)
-#endif
-{
-return( cosh(*x) );
-}
diff --git a/gcc/f/runtime/libF77/d_dim.c b/gcc/f/runtime/libF77/d_dim.c
deleted file mode 100644
index 1d0ecb7bbb6..00000000000
--- a/gcc/f/runtime/libF77/d_dim.c
+++ /dev/null
@@ -1,10 +0,0 @@
-#include "f2c.h"
-
-#ifdef KR_headers
-double d_dim(a,b) doublereal *a, *b;
-#else
-double d_dim(doublereal *a, doublereal *b)
-#endif
-{
-return( *a > *b ? *a - *b : 0);
-}
diff --git a/gcc/f/runtime/libF77/d_exp.c b/gcc/f/runtime/libF77/d_exp.c
deleted file mode 100644
index be12fd70551..00000000000
--- a/gcc/f/runtime/libF77/d_exp.c
+++ /dev/null
@@ -1,13 +0,0 @@
-#include "f2c.h"
-
-#ifdef KR_headers
-double exp();
-double d_exp(x) doublereal *x;
-#else
-#undef abs
-#include <math.h>
-double d_exp(doublereal *x)
-#endif
-{
-return( exp(*x) );
-}
diff --git a/gcc/f/runtime/libF77/d_imag.c b/gcc/f/runtime/libF77/d_imag.c
deleted file mode 100644
index 793a3f9c405..00000000000
--- a/gcc/f/runtime/libF77/d_imag.c
+++ /dev/null
@@ -1,10 +0,0 @@
-#include "f2c.h"
-
-#ifdef KR_headers
-double d_imag(z) doublecomplex *z;
-#else
-double d_imag(doublecomplex *z)
-#endif
-{
-return(z->i);
-}
diff --git a/gcc/f/runtime/libF77/d_int.c b/gcc/f/runtime/libF77/d_int.c
deleted file mode 100644
index beff1e7d378..00000000000
--- a/gcc/f/runtime/libF77/d_int.c
+++ /dev/null
@@ -1,13 +0,0 @@
-#include "f2c.h"
-
-#ifdef KR_headers
-double floor();
-double d_int(x) doublereal *x;
-#else
-#undef abs
-#include <math.h>
-double d_int(doublereal *x)
-#endif
-{
-return( (*x>0) ? floor(*x) : -floor(- *x) );
-}
diff --git a/gcc/f/runtime/libF77/d_lg10.c b/gcc/f/runtime/libF77/d_lg10.c
deleted file mode 100644
index c0892bd512a..00000000000
--- a/gcc/f/runtime/libF77/d_lg10.c
+++ /dev/null
@@ -1,15 +0,0 @@
-#include "f2c.h"
-
-#define log10e 0.43429448190325182765
-
-#ifdef KR_headers
-double log();
-double d_lg10(x) doublereal *x;
-#else
-#undef abs
-#include <math.h>
-double d_lg10(doublereal *x)
-#endif
-{
-return( log10e * log(*x) );
-}
diff --git a/gcc/f/runtime/libF77/d_log.c b/gcc/f/runtime/libF77/d_log.c
deleted file mode 100644
index 592015b2821..00000000000
--- a/gcc/f/runtime/libF77/d_log.c
+++ /dev/null
@@ -1,13 +0,0 @@
-#include "f2c.h"
-
-#ifdef KR_headers
-double log();
-double d_log(x) doublereal *x;
-#else
-#undef abs
-#include <math.h>
-double d_log(doublereal *x)
-#endif
-{
-return( log(*x) );
-}
diff --git a/gcc/f/runtime/libF77/d_mod.c b/gcc/f/runtime/libF77/d_mod.c
deleted file mode 100644
index 23f19299168..00000000000
--- a/gcc/f/runtime/libF77/d_mod.c
+++ /dev/null
@@ -1,40 +0,0 @@
-#include "f2c.h"
-
-#ifdef KR_headers
-#ifdef IEEE_drem
-double drem();
-#else
-double floor();
-#endif
-double d_mod(x,y) doublereal *x, *y;
-#else
-#ifdef IEEE_drem
-double drem(double, double);
-#else
-#undef abs
-#include <math.h>
-#endif
-double d_mod(doublereal *x, doublereal *y)
-#endif
-{
-#ifdef IEEE_drem
- double xa, ya, z;
- if ((ya = *y) < 0.)
- ya = -ya;
- z = drem(xa = *x, ya);
- if (xa > 0) {
- if (z < 0)
- z += ya;
- }
- else if (z > 0)
- z -= ya;
- return z;
-#else
- double quotient;
- if( (quotient = *x / *y) >= 0)
- quotient = floor(quotient);
- else
- quotient = -floor(-quotient);
- return(*x - (*y) * quotient );
-#endif
-}
diff --git a/gcc/f/runtime/libF77/d_nint.c b/gcc/f/runtime/libF77/d_nint.c
deleted file mode 100644
index 064beff669c..00000000000
--- a/gcc/f/runtime/libF77/d_nint.c
+++ /dev/null
@@ -1,14 +0,0 @@
-#include "f2c.h"
-
-#ifdef KR_headers
-double floor();
-double d_nint(x) doublereal *x;
-#else
-#undef abs
-#include <math.h>
-double d_nint(doublereal *x)
-#endif
-{
-return( (*x)>=0 ?
- floor(*x + .5) : -floor(.5 - *x) );
-}
diff --git a/gcc/f/runtime/libF77/d_prod.c b/gcc/f/runtime/libF77/d_prod.c
deleted file mode 100644
index 3d4cef7835c..00000000000
--- a/gcc/f/runtime/libF77/d_prod.c
+++ /dev/null
@@ -1,10 +0,0 @@
-#include "f2c.h"
-
-#ifdef KR_headers
-double d_prod(x,y) real *x, *y;
-#else
-double d_prod(real *x, real *y)
-#endif
-{
-return( (*x) * (*y) );
-}
diff --git a/gcc/f/runtime/libF77/d_sign.c b/gcc/f/runtime/libF77/d_sign.c
deleted file mode 100644
index 514ff0bbff8..00000000000
--- a/gcc/f/runtime/libF77/d_sign.c
+++ /dev/null
@@ -1,12 +0,0 @@
-#include "f2c.h"
-
-#ifdef KR_headers
-double d_sign(a,b) doublereal *a, *b;
-#else
-double d_sign(doublereal *a, doublereal *b)
-#endif
-{
-double x;
-x = (*a >= 0 ? *a : - *a);
-return( *b >= 0 ? x : -x);
-}
diff --git a/gcc/f/runtime/libF77/d_sin.c b/gcc/f/runtime/libF77/d_sin.c
deleted file mode 100644
index fdd699eede5..00000000000
--- a/gcc/f/runtime/libF77/d_sin.c
+++ /dev/null
@@ -1,13 +0,0 @@
-#include "f2c.h"
-
-#ifdef KR_headers
-double sin();
-double d_sin(x) doublereal *x;
-#else
-#undef abs
-#include <math.h>
-double d_sin(doublereal *x)
-#endif
-{
-return( sin(*x) );
-}
diff --git a/gcc/f/runtime/libF77/d_sinh.c b/gcc/f/runtime/libF77/d_sinh.c
deleted file mode 100644
index 77f36904f8e..00000000000
--- a/gcc/f/runtime/libF77/d_sinh.c
+++ /dev/null
@@ -1,13 +0,0 @@
-#include "f2c.h"
-
-#ifdef KR_headers
-double sinh();
-double d_sinh(x) doublereal *x;
-#else
-#undef abs
-#include <math.h>
-double d_sinh(doublereal *x)
-#endif
-{
-return( sinh(*x) );
-}
diff --git a/gcc/f/runtime/libF77/d_sqrt.c b/gcc/f/runtime/libF77/d_sqrt.c
deleted file mode 100644
index b5cf83b946f..00000000000
--- a/gcc/f/runtime/libF77/d_sqrt.c
+++ /dev/null
@@ -1,13 +0,0 @@
-#include "f2c.h"
-
-#ifdef KR_headers
-double sqrt();
-double d_sqrt(x) doublereal *x;
-#else
-#undef abs
-#include <math.h>
-double d_sqrt(doublereal *x)
-#endif
-{
-return( sqrt(*x) );
-}
diff --git a/gcc/f/runtime/libF77/d_tan.c b/gcc/f/runtime/libF77/d_tan.c
deleted file mode 100644
index af94a053223..00000000000
--- a/gcc/f/runtime/libF77/d_tan.c
+++ /dev/null
@@ -1,13 +0,0 @@
-#include "f2c.h"
-
-#ifdef KR_headers
-double tan();
-double d_tan(x) doublereal *x;
-#else
-#undef abs
-#include <math.h>
-double d_tan(doublereal *x)
-#endif
-{
-return( tan(*x) );
-}
diff --git a/gcc/f/runtime/libF77/d_tanh.c b/gcc/f/runtime/libF77/d_tanh.c
deleted file mode 100644
index 92a02d4fd6b..00000000000
--- a/gcc/f/runtime/libF77/d_tanh.c
+++ /dev/null
@@ -1,13 +0,0 @@
-#include "f2c.h"
-
-#ifdef KR_headers
-double tanh();
-double d_tanh(x) doublereal *x;
-#else
-#undef abs
-#include <math.h>
-double d_tanh(doublereal *x)
-#endif
-{
-return( tanh(*x) );
-}
diff --git a/gcc/f/runtime/libF77/derf_.c b/gcc/f/runtime/libF77/derf_.c
deleted file mode 100644
index fba6b6b11f3..00000000000
--- a/gcc/f/runtime/libF77/derf_.c
+++ /dev/null
@@ -1,12 +0,0 @@
-#include "f2c.h"
-
-#ifdef KR_headers
-double erf();
-double G77_derf_0 (x) doublereal *x;
-#else
-extern double erf(double);
-double G77_derf_0 (doublereal *x)
-#endif
-{
-return( erf(*x) );
-}
diff --git a/gcc/f/runtime/libF77/derfc_.c b/gcc/f/runtime/libF77/derfc_.c
deleted file mode 100644
index ae1ac740302..00000000000
--- a/gcc/f/runtime/libF77/derfc_.c
+++ /dev/null
@@ -1,14 +0,0 @@
-#include "f2c.h"
-
-#ifdef KR_headers
-extern double erfc();
-
-double G77_derfc_0 (x) doublereal *x;
-#else
-extern double erfc(double);
-
-double G77_derfc_0 (doublereal *x)
-#endif
-{
-return( erfc(*x) );
-}
diff --git a/gcc/f/runtime/libF77/dtime_.c b/gcc/f/runtime/libF77/dtime_.c
deleted file mode 100644
index 2e775c6b84e..00000000000
--- a/gcc/f/runtime/libF77/dtime_.c
+++ /dev/null
@@ -1,45 +0,0 @@
-#include "time.h"
-#ifndef USE_CLOCK
-#include "sys/types.h"
-#include "sys/times.h"
-#endif
-
-#undef Hz
-#ifdef CLK_TCK
-#define Hz CLK_TCK
-#else
-#ifdef HZ
-#define Hz HZ
-#else
-#define Hz 60
-#endif
-#endif
-
- float
-#ifdef KR_headers
-dtime_(tarray) float *tarray;
-#else
-dtime_(float *tarray)
-#endif
-{
-#ifdef USE_CLOCK
-#ifndef CLOCKS_PER_SECOND
-#define CLOCKS_PER_SECOND Hz
-#endif
- static double t0;
- double t = clock();
- tarray[1] = 0;
- tarray[0] = (t - t0) / CLOCKS_PER_SECOND;
- t0 = t;
- return tarray[0];
-#else
- struct tms t;
- static struct tms t0;
-
- times(&t);
- tarray[0] = (t.tms_utime - t0.tms_utime) / Hz;
- tarray[1] = (t.tms_stime - t0.tms_stime) / Hz;
- t0 = t;
- return tarray[0] + tarray[1];
-#endif
- }
diff --git a/gcc/f/runtime/libF77/ef1asc_.c b/gcc/f/runtime/libF77/ef1asc_.c
deleted file mode 100644
index a922a1d9ba9..00000000000
--- a/gcc/f/runtime/libF77/ef1asc_.c
+++ /dev/null
@@ -1,21 +0,0 @@
-/* EFL support routine to copy string b to string a */
-
-#include "f2c.h"
-
-
-#define M ( (long) (sizeof(long) - 1) )
-#define EVEN(x) ( ( (x)+ M) & (~M) )
-
-#ifdef KR_headers
-extern VOID s_copy();
-G77_ef1asc_0 (a, la, b, lb) ftnint *a, *b; ftnlen *la, *lb;
-#else
-extern void s_copy(char*,char*,ftnlen,ftnlen);
-int G77_ef1asc_0 (ftnint *a, ftnlen *la, ftnint *b, ftnlen *lb)
-#endif
-{
-s_copy( (char *)a, (char *)b, EVEN(*la), *lb );
-#ifdef __cplusplus
-return 0;
-#endif
-}
diff --git a/gcc/f/runtime/libF77/ef1cmc_.c b/gcc/f/runtime/libF77/ef1cmc_.c
deleted file mode 100644
index f471172935f..00000000000
--- a/gcc/f/runtime/libF77/ef1cmc_.c
+++ /dev/null
@@ -1,14 +0,0 @@
-/* EFL support routine to compare two character strings */
-
-#include "f2c.h"
-
-#ifdef KR_headers
-extern integer s_cmp();
-integer G77_ef1cmc_0 (a, la, b, lb) ftnint *a, *b; ftnlen *la, *lb;
-#else
-extern integer s_cmp(char*,char*,ftnlen,ftnlen);
-integer G77_ef1cmc_0 (ftnint *a, ftnlen *la, ftnint *b, ftnlen *lb)
-#endif
-{
-return( s_cmp( (char *)a, (char *)b, *la, *lb) );
-}
diff --git a/gcc/f/runtime/libF77/erf_.c b/gcc/f/runtime/libF77/erf_.c
deleted file mode 100644
index 1ba4350ad05..00000000000
--- a/gcc/f/runtime/libF77/erf_.c
+++ /dev/null
@@ -1,12 +0,0 @@
-#include "f2c.h"
-
-#ifdef KR_headers
-double erf();
-double G77_erf_0 (x) real *x;
-#else
-extern double erf(double);
-double G77_erf_0 (real *x)
-#endif
-{
-return( erf(*x) );
-}
diff --git a/gcc/f/runtime/libF77/erfc_.c b/gcc/f/runtime/libF77/erfc_.c
deleted file mode 100644
index f44b1d49d84..00000000000
--- a/gcc/f/runtime/libF77/erfc_.c
+++ /dev/null
@@ -1,12 +0,0 @@
-#include "f2c.h"
-
-#ifdef KR_headers
-double erfc();
-double G77_erfc_0 (x) real *x;
-#else
-extern double erfc(double);
-double G77_erfc_0 (real *x)
-#endif
-{
-return( erfc(*x) );
-}
diff --git a/gcc/f/runtime/libF77/etime_.c b/gcc/f/runtime/libF77/etime_.c
deleted file mode 100644
index 0fb658af43c..00000000000
--- a/gcc/f/runtime/libF77/etime_.c
+++ /dev/null
@@ -1,38 +0,0 @@
-#include "time.h"
-#ifndef USE_CLOCK
-#include "sys/types.h"
-#include "sys/times.h"
-#endif
-
-#undef Hz
-#ifdef CLK_TCK
-#define Hz CLK_TCK
-#else
-#ifdef HZ
-#define Hz HZ
-#else
-#define Hz 60
-#endif
-#endif
-
- float
-#ifdef KR_headers
-etime_(tarray) float *tarray;
-#else
-etime_(float *tarray)
-#endif
-{
-#ifdef USE_CLOCK
-#ifndef CLOCKS_PER_SECOND
-#define CLOCKS_PER_SECOND Hz
-#endif
- double t = clock();
- tarray[1] = 0;
- return tarray[0] = t / CLOCKS_PER_SECOND;
-#else
- struct tms t;
-
- times(&t);
- return (tarray[0] = t.tms_utime/Hz) + (tarray[1] = t.tms_stime/Hz);
-#endif
- }
diff --git a/gcc/f/runtime/libF77/exit_.c b/gcc/f/runtime/libF77/exit_.c
deleted file mode 100644
index 4c0582add12..00000000000
--- a/gcc/f/runtime/libF77/exit_.c
+++ /dev/null
@@ -1,37 +0,0 @@
-/* This gives the effect of
-
- subroutine exit(rc)
- integer*4 rc
- stop
- end
-
- * with the added side effect of supplying rc as the program's exit code.
- */
-
-#include "f2c.h"
-#undef abs
-#undef min
-#undef max
-#ifndef KR_headers
-#include <stdlib.h>
-#ifdef __cplusplus
-extern "C" {
-#endif
-extern void f_exit(void);
-#endif
-
- void
-#ifdef KR_headers
-G77_exit_0 (rc) integer *rc;
-#else
-G77_exit_0 (integer *rc)
-#endif
-{
-#ifdef NO_ONEXIT
- f_exit();
-#endif
- exit(*rc);
- }
-#ifdef __cplusplus
-}
-#endif
diff --git a/gcc/f/runtime/libF77/f2ch.add b/gcc/f/runtime/libF77/f2ch.add
deleted file mode 100644
index a2acc17a159..00000000000
--- a/gcc/f/runtime/libF77/f2ch.add
+++ /dev/null
@@ -1,162 +0,0 @@
-/* If you are using a C++ compiler, append the following to f2c.h
- for compiling libF77 and libI77. */
-
-#ifdef __cplusplus
-extern "C" {
-extern int abort_(void);
-extern double c_abs(complex *);
-extern void c_cos(complex *, complex *);
-extern void c_div(complex *, complex *, complex *);
-extern void c_exp(complex *, complex *);
-extern void c_log(complex *, complex *);
-extern void c_sin(complex *, complex *);
-extern void c_sqrt(complex *, complex *);
-extern double d_abs(double *);
-extern double d_acos(double *);
-extern double d_asin(double *);
-extern double d_atan(double *);
-extern double d_atn2(double *, double *);
-extern void d_cnjg(doublecomplex *, doublecomplex *);
-extern double d_cos(double *);
-extern double d_cosh(double *);
-extern double d_dim(double *, double *);
-extern double d_exp(double *);
-extern double d_imag(doublecomplex *);
-extern double d_int(double *);
-extern double d_lg10(double *);
-extern double d_log(double *);
-extern double d_mod(double *, double *);
-extern double d_nint(double *);
-extern double d_prod(float *, float *);
-extern double d_sign(double *, double *);
-extern double d_sin(double *);
-extern double d_sinh(double *);
-extern double d_sqrt(double *);
-extern double d_tan(double *);
-extern double d_tanh(double *);
-extern double derf_(double *);
-extern double derfc_(double *);
-extern integer do_fio(ftnint *, char *, ftnlen);
-extern integer do_lio(ftnint *, ftnint *, char *, ftnlen);
-extern integer do_uio(ftnint *, char *, ftnlen);
-extern integer e_rdfe(void);
-extern integer e_rdue(void);
-extern integer e_rsfe(void);
-extern integer e_rsfi(void);
-extern integer e_rsle(void);
-extern integer e_rsli(void);
-extern integer e_rsue(void);
-extern integer e_wdfe(void);
-extern integer e_wdue(void);
-extern integer e_wsfe(void);
-extern integer e_wsfi(void);
-extern integer e_wsle(void);
-extern integer e_wsli(void);
-extern integer e_wsue(void);
-extern int ef1asc_(ftnint *, ftnlen *, ftnint *, ftnlen *);
-extern integer ef1cmc_(ftnint *, ftnlen *, ftnint *, ftnlen *);
-extern double erf(double);
-extern double erf_(float *);
-extern double erfc(double);
-extern double erfc_(float *);
-extern integer f_back(alist *);
-extern integer f_clos(cllist *);
-extern integer f_end(alist *);
-extern void f_exit(void);
-extern integer f_inqu(inlist *);
-extern integer f_open(olist *);
-extern integer f_rew(alist *);
-extern int flush_(void);
-extern void getarg_(integer *, char *, ftnlen);
-extern void getenv_(char *, char *, ftnlen, ftnlen);
-extern short h_abs(short *);
-extern short h_dim(short *, short *);
-extern short h_dnnt(double *);
-extern short h_indx(char *, char *, ftnlen, ftnlen);
-extern short h_len(char *, ftnlen);
-extern short h_mod(short *, short *);
-extern short h_nint(float *);
-extern short h_sign(short *, short *);
-extern short hl_ge(char *, char *, ftnlen, ftnlen);
-extern short hl_gt(char *, char *, ftnlen, ftnlen);
-extern short hl_le(char *, char *, ftnlen, ftnlen);
-extern short hl_lt(char *, char *, ftnlen, ftnlen);
-extern integer i_abs(integer *);
-extern integer i_dim(integer *, integer *);
-extern integer i_dnnt(double *);
-extern integer i_indx(char *, char *, ftnlen, ftnlen);
-extern integer i_len(char *, ftnlen);
-extern integer i_mod(integer *, integer *);
-extern integer i_nint(float *);
-extern integer i_sign(integer *, integer *);
-extern integer iargc_(void);
-extern ftnlen l_ge(char *, char *, ftnlen, ftnlen);
-extern ftnlen l_gt(char *, char *, ftnlen, ftnlen);
-extern ftnlen l_le(char *, char *, ftnlen, ftnlen);
-extern ftnlen l_lt(char *, char *, ftnlen, ftnlen);
-extern void pow_ci(complex *, complex *, integer *);
-extern double pow_dd(double *, double *);
-extern double pow_di(double *, integer *);
-extern short pow_hh(short *, shortint *);
-extern integer pow_ii(integer *, integer *);
-extern double pow_ri(float *, integer *);
-extern void pow_zi(doublecomplex *, doublecomplex *, integer *);
-extern void pow_zz(doublecomplex *, doublecomplex *, doublecomplex *);
-extern double r_abs(float *);
-extern double r_acos(float *);
-extern double r_asin(float *);
-extern double r_atan(float *);
-extern double r_atn2(float *, float *);
-extern void r_cnjg(complex *, complex *);
-extern double r_cos(float *);
-extern double r_cosh(float *);
-extern double r_dim(float *, float *);
-extern double r_exp(float *);
-extern double r_imag(complex *);
-extern double r_int(float *);
-extern double r_lg10(float *);
-extern double r_log(float *);
-extern double r_mod(float *, float *);
-extern double r_nint(float *);
-extern double r_sign(float *, float *);
-extern double r_sin(float *);
-extern double r_sinh(float *);
-extern double r_sqrt(float *);
-extern double r_tan(float *);
-extern double r_tanh(float *);
-extern void s_cat(char *, char **, integer *, integer *, ftnlen);
-extern integer s_cmp(char *, char *, ftnlen, ftnlen);
-extern void s_copy(char *, char *, ftnlen, ftnlen);
-extern int s_paus(char *, ftnlen);
-extern integer s_rdfe(cilist *);
-extern integer s_rdue(cilist *);
-extern integer s_rnge(char *, integer, char *, integer);
-extern integer s_rsfe(cilist *);
-extern integer s_rsfi(icilist *);
-extern integer s_rsle(cilist *);
-extern integer s_rsli(icilist *);
-extern integer s_rsne(cilist *);
-extern integer s_rsni(icilist *);
-extern integer s_rsue(cilist *);
-extern int s_stop(char *, ftnlen);
-extern integer s_wdfe(cilist *);
-extern integer s_wdue(cilist *);
-extern integer s_wsfe(cilist *);
-extern integer s_wsfi(icilist *);
-extern integer s_wsle(cilist *);
-extern integer s_wsli(icilist *);
-extern integer s_wsne(cilist *);
-extern integer s_wsni(icilist *);
-extern integer s_wsue(cilist *);
-extern void sig_die(char *, int);
-extern integer signal_(integer *, void (*)(int));
-extern integer system_(char *, ftnlen);
-extern double z_abs(doublecomplex *);
-extern void z_cos(doublecomplex *, doublecomplex *);
-extern void z_div(doublecomplex *, doublecomplex *, doublecomplex *);
-extern void z_exp(doublecomplex *, doublecomplex *);
-extern void z_log(doublecomplex *, doublecomplex *);
-extern void z_sin(doublecomplex *, doublecomplex *);
-extern void z_sqrt(doublecomplex *, doublecomplex *);
- }
-#endif
diff --git a/gcc/f/runtime/libF77/getarg_.c b/gcc/f/runtime/libF77/getarg_.c
deleted file mode 100644
index eaded2e4c9b..00000000000
--- a/gcc/f/runtime/libF77/getarg_.c
+++ /dev/null
@@ -1,28 +0,0 @@
-#include "f2c.h"
-
-/*
- * subroutine getarg(k, c)
- * returns the kth unix command argument in fortran character
- * variable argument c
-*/
-
-#ifdef KR_headers
-VOID G77_getarg_0 (n, s, ls) ftnint *n; register char *s; ftnlen ls;
-#else
-void G77_getarg_0 (ftnint *n, register char *s, ftnlen ls)
-#endif
-{
-extern int xargc;
-extern char **xargv;
-register char *t;
-register int i;
-
-if(*n>=0 && *n<xargc)
- t = xargv[*n];
-else
- t = "";
-for(i = 0; i<ls && *t!='\0' ; ++i)
- *s++ = *t++;
-for( ; i<ls ; ++i)
- *s++ = ' ';
-}
diff --git a/gcc/f/runtime/libF77/getenv_.c b/gcc/f/runtime/libF77/getenv_.c
deleted file mode 100644
index b9916e6065e..00000000000
--- a/gcc/f/runtime/libF77/getenv_.c
+++ /dev/null
@@ -1,51 +0,0 @@
-#include "f2c.h"
-
-/*
- * getenv - f77 subroutine to return environment variables
- *
- * called by:
- * call getenv (ENV_NAME, char_var)
- * where:
- * ENV_NAME is the name of an environment variable
- * char_var is a character variable which will receive
- * the current value of ENV_NAME, or all blanks
- * if ENV_NAME is not defined
- */
-
-#ifdef KR_headers
-VOID G77_getenv_0 (fname, value, flen, vlen) char *value, *fname; ftnlen vlen, flen;
-#else
-void G77_getenv_0 (char *fname, char *value, ftnlen flen, ftnlen vlen)
-#endif
-{
-extern char **environ;
-register char *ep, *fp, *flast;
-register char **env = environ;
-
-flast = fname + flen;
-for(fp = fname ; fp < flast ; ++fp)
- if(*fp == ' ')
- {
- flast = fp;
- break;
- }
-
-while (ep = *env++)
- {
- for(fp = fname; fp<flast ; )
- if(*fp++ != *ep++)
- goto endloop;
-
- if(*ep++ == '=') { /* copy right hand side */
- while( *ep && --vlen>=0 )
- *value++ = *ep++;
-
- goto blank;
- }
-endloop: ;
- }
-
-blank:
- while( --vlen >= 0 )
- *value++ = ' ';
-}
diff --git a/gcc/f/runtime/libF77/h_abs.c b/gcc/f/runtime/libF77/h_abs.c
deleted file mode 100644
index 73b82151ac1..00000000000
--- a/gcc/f/runtime/libF77/h_abs.c
+++ /dev/null
@@ -1,12 +0,0 @@
-#include "f2c.h"
-
-#ifdef KR_headers
-shortint h_abs(x) shortint *x;
-#else
-shortint h_abs(shortint *x)
-#endif
-{
-if(*x >= 0)
- return(*x);
-return(- *x);
-}
diff --git a/gcc/f/runtime/libF77/h_dim.c b/gcc/f/runtime/libF77/h_dim.c
deleted file mode 100644
index ceff660e26c..00000000000
--- a/gcc/f/runtime/libF77/h_dim.c
+++ /dev/null
@@ -1,10 +0,0 @@
-#include "f2c.h"
-
-#ifdef KR_headers
-shortint h_dim(a,b) shortint *a, *b;
-#else
-shortint h_dim(shortint *a, shortint *b)
-#endif
-{
-return( *a > *b ? *a - *b : 0);
-}
diff --git a/gcc/f/runtime/libF77/h_dnnt.c b/gcc/f/runtime/libF77/h_dnnt.c
deleted file mode 100644
index 9d0aa25f1d3..00000000000
--- a/gcc/f/runtime/libF77/h_dnnt.c
+++ /dev/null
@@ -1,14 +0,0 @@
-#include "f2c.h"
-
-#ifdef KR_headers
-double floor();
-shortint h_dnnt(x) doublereal *x;
-#else
-#undef abs
-#include <math.h>
-shortint h_dnnt(doublereal *x)
-#endif
-{
-return( (*x)>=0 ?
- floor(*x + .5) : -floor(.5 - *x) );
-}
diff --git a/gcc/f/runtime/libF77/h_indx.c b/gcc/f/runtime/libF77/h_indx.c
deleted file mode 100644
index a211cc7fa0f..00000000000
--- a/gcc/f/runtime/libF77/h_indx.c
+++ /dev/null
@@ -1,26 +0,0 @@
-#include "f2c.h"
-
-#ifdef KR_headers
-shortint h_indx(a, b, la, lb) char *a, *b; ftnlen la, lb;
-#else
-shortint h_indx(char *a, char *b, ftnlen la, ftnlen lb)
-#endif
-{
-ftnlen i, n;
-char *s, *t, *bend;
-
-n = la - lb + 1;
-bend = b + lb;
-
-for(i = 0 ; i < n ; ++i)
- {
- s = a + i;
- t = b;
- while(t < bend)
- if(*s++ != *t++)
- goto no;
- return((shortint)i+1);
- no: ;
- }
-return(0);
-}
diff --git a/gcc/f/runtime/libF77/h_len.c b/gcc/f/runtime/libF77/h_len.c
deleted file mode 100644
index 00a2151bfa1..00000000000
--- a/gcc/f/runtime/libF77/h_len.c
+++ /dev/null
@@ -1,10 +0,0 @@
-#include "f2c.h"
-
-#ifdef KR_headers
-shortint h_len(s, n) char *s; ftnlen n;
-#else
-shortint h_len(char *s, ftnlen n)
-#endif
-{
-return(n);
-}
diff --git a/gcc/f/runtime/libF77/h_mod.c b/gcc/f/runtime/libF77/h_mod.c
deleted file mode 100644
index 43431c1c503..00000000000
--- a/gcc/f/runtime/libF77/h_mod.c
+++ /dev/null
@@ -1,10 +0,0 @@
-#include "f2c.h"
-
-#ifdef KR_headers
-shortint h_mod(a,b) short *a, *b;
-#else
-shortint h_mod(short *a, short *b)
-#endif
-{
-return( *a % *b);
-}
diff --git a/gcc/f/runtime/libF77/h_nint.c b/gcc/f/runtime/libF77/h_nint.c
deleted file mode 100644
index 0af3735da42..00000000000
--- a/gcc/f/runtime/libF77/h_nint.c
+++ /dev/null
@@ -1,14 +0,0 @@
-#include "f2c.h"
-
-#ifdef KR_headers
-double floor();
-shortint h_nint(x) real *x;
-#else
-#undef abs
-#include <math.h>
-shortint h_nint(real *x)
-#endif
-{
-return( (*x)>=0 ?
- floor(*x + .5) : -floor(.5 - *x) );
-}
diff --git a/gcc/f/runtime/libF77/h_sign.c b/gcc/f/runtime/libF77/h_sign.c
deleted file mode 100644
index 7b06c157a74..00000000000
--- a/gcc/f/runtime/libF77/h_sign.c
+++ /dev/null
@@ -1,12 +0,0 @@
-#include "f2c.h"
-
-#ifdef KR_headers
-shortint h_sign(a,b) shortint *a, *b;
-#else
-shortint h_sign(shortint *a, shortint *b)
-#endif
-{
-shortint x;
-x = (*a >= 0 ? *a : - *a);
-return( *b >= 0 ? x : -x);
-}
diff --git a/gcc/f/runtime/libF77/hl_ge.c b/gcc/f/runtime/libF77/hl_ge.c
deleted file mode 100644
index 4c29527065a..00000000000
--- a/gcc/f/runtime/libF77/hl_ge.c
+++ /dev/null
@@ -1,12 +0,0 @@
-#include "f2c.h"
-
-#ifdef KR_headers
-extern integer s_cmp();
-shortlogical hl_ge(a,b,la,lb) char *a, *b; ftnlen la, lb;
-#else
-extern integer s_cmp(char *, char *, ftnlen, ftnlen);
-shortlogical hl_ge(char *a, char *b, ftnlen la, ftnlen lb)
-#endif
-{
-return(s_cmp(a,b,la,lb) >= 0);
-}
diff --git a/gcc/f/runtime/libF77/hl_gt.c b/gcc/f/runtime/libF77/hl_gt.c
deleted file mode 100644
index c4f345a0859..00000000000
--- a/gcc/f/runtime/libF77/hl_gt.c
+++ /dev/null
@@ -1,12 +0,0 @@
-#include "f2c.h"
-
-#ifdef KR_headers
-extern integer s_cmp();
-shortlogical hl_gt(a,b,la,lb) char *a, *b; ftnlen la, lb;
-#else
-extern integer s_cmp(char *, char *, ftnlen, ftnlen);
-shortlogical hl_gt(char *a, char *b, ftnlen la, ftnlen lb)
-#endif
-{
-return(s_cmp(a,b,la,lb) > 0);
-}
diff --git a/gcc/f/runtime/libF77/hl_le.c b/gcc/f/runtime/libF77/hl_le.c
deleted file mode 100644
index a9cce596c71..00000000000
--- a/gcc/f/runtime/libF77/hl_le.c
+++ /dev/null
@@ -1,12 +0,0 @@
-#include "f2c.h"
-
-#ifdef KR_headers
-extern integer s_cmp();
-shortlogical hl_le(a,b,la,lb) char *a, *b; ftnlen la, lb;
-#else
-extern integer s_cmp(char *, char *, ftnlen, ftnlen);
-shortlogical hl_le(char *a, char *b, ftnlen la, ftnlen lb)
-#endif
-{
-return(s_cmp(a,b,la,lb) <= 0);
-}
diff --git a/gcc/f/runtime/libF77/hl_lt.c b/gcc/f/runtime/libF77/hl_lt.c
deleted file mode 100644
index 162d919c3b4..00000000000
--- a/gcc/f/runtime/libF77/hl_lt.c
+++ /dev/null
@@ -1,12 +0,0 @@
-#include "f2c.h"
-
-#ifdef KR_headers
-extern integer s_cmp();
-shortlogical hl_lt(a,b,la,lb) char *a, *b; ftnlen la, lb;
-#else
-extern integer s_cmp(char *, char *, ftnlen, ftnlen);
-shortlogical hl_lt(char *a, char *b, ftnlen la, ftnlen lb)
-#endif
-{
-return(s_cmp(a,b,la,lb) < 0);
-}
diff --git a/gcc/f/runtime/libF77/i_abs.c b/gcc/f/runtime/libF77/i_abs.c
deleted file mode 100644
index be21295aaa1..00000000000
--- a/gcc/f/runtime/libF77/i_abs.c
+++ /dev/null
@@ -1,12 +0,0 @@
-#include "f2c.h"
-
-#ifdef KR_headers
-integer i_abs(x) integer *x;
-#else
-integer i_abs(integer *x)
-#endif
-{
-if(*x >= 0)
- return(*x);
-return(- *x);
-}
diff --git a/gcc/f/runtime/libF77/i_dim.c b/gcc/f/runtime/libF77/i_dim.c
deleted file mode 100644
index 6e1b1707b55..00000000000
--- a/gcc/f/runtime/libF77/i_dim.c
+++ /dev/null
@@ -1,10 +0,0 @@
-#include "f2c.h"
-
-#ifdef KR_headers
-integer i_dim(a,b) integer *a, *b;
-#else
-integer i_dim(integer *a, integer *b)
-#endif
-{
-return( *a > *b ? *a - *b : 0);
-}
diff --git a/gcc/f/runtime/libF77/i_dnnt.c b/gcc/f/runtime/libF77/i_dnnt.c
deleted file mode 100644
index 8fcecb68200..00000000000
--- a/gcc/f/runtime/libF77/i_dnnt.c
+++ /dev/null
@@ -1,14 +0,0 @@
-#include "f2c.h"
-
-#ifdef KR_headers
-double floor();
-integer i_dnnt(x) doublereal *x;
-#else
-#undef abs
-#include <math.h>
-integer i_dnnt(doublereal *x)
-#endif
-{
-return( (*x)>=0 ?
- floor(*x + .5) : -floor(.5 - *x) );
-}
diff --git a/gcc/f/runtime/libF77/i_indx.c b/gcc/f/runtime/libF77/i_indx.c
deleted file mode 100644
index 96e7bc51ba8..00000000000
--- a/gcc/f/runtime/libF77/i_indx.c
+++ /dev/null
@@ -1,26 +0,0 @@
-#include "f2c.h"
-
-#ifdef KR_headers
-integer i_indx(a, b, la, lb) char *a, *b; ftnlen la, lb;
-#else
-integer i_indx(char *a, char *b, ftnlen la, ftnlen lb)
-#endif
-{
-ftnlen i, n;
-char *s, *t, *bend;
-
-n = la - lb + 1;
-bend = b + lb;
-
-for(i = 0 ; i < n ; ++i)
- {
- s = a + i;
- t = b;
- while(t < bend)
- if(*s++ != *t++)
- goto no;
- return(i+1);
- no: ;
- }
-return(0);
-}
diff --git a/gcc/f/runtime/libF77/i_len.c b/gcc/f/runtime/libF77/i_len.c
deleted file mode 100644
index 4020fee4618..00000000000
--- a/gcc/f/runtime/libF77/i_len.c
+++ /dev/null
@@ -1,10 +0,0 @@
-#include "f2c.h"
-
-#ifdef KR_headers
-integer i_len(s, n) char *s; ftnlen n;
-#else
-integer i_len(char *s, ftnlen n)
-#endif
-{
-return(n);
-}
diff --git a/gcc/f/runtime/libF77/i_mod.c b/gcc/f/runtime/libF77/i_mod.c
deleted file mode 100644
index 6937c421357..00000000000
--- a/gcc/f/runtime/libF77/i_mod.c
+++ /dev/null
@@ -1,10 +0,0 @@
-#include "f2c.h"
-
-#ifdef KR_headers
-integer i_mod(a,b) integer *a, *b;
-#else
-integer i_mod(integer *a, integer *b)
-#endif
-{
-return( *a % *b);
-}
diff --git a/gcc/f/runtime/libF77/i_nint.c b/gcc/f/runtime/libF77/i_nint.c
deleted file mode 100644
index c0f6795171f..00000000000
--- a/gcc/f/runtime/libF77/i_nint.c
+++ /dev/null
@@ -1,14 +0,0 @@
-#include "f2c.h"
-
-#ifdef KR_headers
-double floor();
-integer i_nint(x) real *x;
-#else
-#undef abs
-#include <math.h>
-integer i_nint(real *x)
-#endif
-{
-return( (*x)>=0 ?
- floor(*x + .5) : -floor(.5 - *x) );
-}
diff --git a/gcc/f/runtime/libF77/i_sign.c b/gcc/f/runtime/libF77/i_sign.c
deleted file mode 100644
index 94009b86e6f..00000000000
--- a/gcc/f/runtime/libF77/i_sign.c
+++ /dev/null
@@ -1,12 +0,0 @@
-#include "f2c.h"
-
-#ifdef KR_headers
-integer i_sign(a,b) integer *a, *b;
-#else
-integer i_sign(integer *a, integer *b)
-#endif
-{
-integer x;
-x = (*a >= 0 ? *a : - *a);
-return( *b >= 0 ? x : -x);
-}
diff --git a/gcc/f/runtime/libF77/iargc_.c b/gcc/f/runtime/libF77/iargc_.c
deleted file mode 100644
index 7ce5e08d306..00000000000
--- a/gcc/f/runtime/libF77/iargc_.c
+++ /dev/null
@@ -1,11 +0,0 @@
-#include "f2c.h"
-
-#ifdef KR_headers
-ftnint G77_iargc_0 ()
-#else
-ftnint G77_iargc_0 (void)
-#endif
-{
-extern int xargc;
-return ( xargc - 1 );
-}
diff --git a/gcc/f/runtime/libF77/l_ge.c b/gcc/f/runtime/libF77/l_ge.c
deleted file mode 100644
index 86b4a1f5a7f..00000000000
--- a/gcc/f/runtime/libF77/l_ge.c
+++ /dev/null
@@ -1,12 +0,0 @@
-#include "f2c.h"
-
-#ifdef KR_headers
-extern integer s_cmp();
-logical l_ge(a,b,la,lb) char *a, *b; ftnlen la, lb;
-#else
-extern integer s_cmp(char *, char *, ftnlen, ftnlen);
-logical l_ge(char *a, char *b, ftnlen la, ftnlen lb)
-#endif
-{
-return(s_cmp(a,b,la,lb) >= 0);
-}
diff --git a/gcc/f/runtime/libF77/l_gt.c b/gcc/f/runtime/libF77/l_gt.c
deleted file mode 100644
index c4b52f5bf7d..00000000000
--- a/gcc/f/runtime/libF77/l_gt.c
+++ /dev/null
@@ -1,12 +0,0 @@
-#include "f2c.h"
-
-#ifdef KR_headers
-extern integer s_cmp();
-logical l_gt(a,b,la,lb) char *a, *b; ftnlen la, lb;
-#else
-extern integer s_cmp(char *, char *, ftnlen, ftnlen);
-logical l_gt(char *a, char *b, ftnlen la, ftnlen lb)
-#endif
-{
-return(s_cmp(a,b,la,lb) > 0);
-}
diff --git a/gcc/f/runtime/libF77/l_le.c b/gcc/f/runtime/libF77/l_le.c
deleted file mode 100644
index f2740a23814..00000000000
--- a/gcc/f/runtime/libF77/l_le.c
+++ /dev/null
@@ -1,12 +0,0 @@
-#include "f2c.h"
-
-#ifdef KR_headers
-extern integer s_cmp();
-logical l_le(a,b,la,lb) char *a, *b; ftnlen la, lb;
-#else
-extern integer s_cmp(char *, char *, ftnlen, ftnlen);
-logical l_le(char *a, char *b, ftnlen la, ftnlen lb)
-#endif
-{
-return(s_cmp(a,b,la,lb) <= 0);
-}
diff --git a/gcc/f/runtime/libF77/l_lt.c b/gcc/f/runtime/libF77/l_lt.c
deleted file mode 100644
index c48dc946f9a..00000000000
--- a/gcc/f/runtime/libF77/l_lt.c
+++ /dev/null
@@ -1,12 +0,0 @@
-#include "f2c.h"
-
-#ifdef KR_headers
-extern integer s_cmp();
-logical l_lt(a,b,la,lb) char *a, *b; ftnlen la, lb;
-#else
-extern integer s_cmp(char *, char *, ftnlen, ftnlen);
-logical l_lt(char *a, char *b, ftnlen la, ftnlen lb)
-#endif
-{
-return(s_cmp(a,b,la,lb) < 0);
-}
diff --git a/gcc/f/runtime/libF77/lbitbits.c b/gcc/f/runtime/libF77/lbitbits.c
deleted file mode 100644
index 75e9f9c603f..00000000000
--- a/gcc/f/runtime/libF77/lbitbits.c
+++ /dev/null
@@ -1,62 +0,0 @@
-#include "f2c.h"
-
-#ifndef LONGBITS
-#define LONGBITS 32
-#endif
-
- integer
-#ifdef KR_headers
-lbit_bits(a, b, len) integer a, b, len;
-#else
-lbit_bits(integer a, integer b, integer len)
-#endif
-{
- /* Assume 2's complement arithmetic */
-
- unsigned long x, y;
-
- x = (unsigned long) a;
- y = (unsigned long)-1L;
- x >>= b;
- y <<= len;
- return (integer)(x & ~y);
- }
-
- integer
-#ifdef KR_headers
-lbit_cshift(a, b, len) integer a, b, len;
-#else
-lbit_cshift(integer a, integer b, integer len)
-#endif
-{
- unsigned long x, y, z;
-
- x = (unsigned long)a;
- if (len <= 0) {
- if (len == 0)
- return 0;
- goto full_len;
- }
- if (len >= LONGBITS) {
- full_len:
- if (b >= 0) {
- b %= LONGBITS;
- return (integer)(x << b | x >> LONGBITS -b );
- }
- b = -b;
- b %= LONGBITS;
- return (integer)(x << LONGBITS - b | x >> b);
- }
- y = z = (unsigned long)-1;
- y <<= len;
- z &= ~y;
- y &= x;
- x &= z;
- if (b >= 0) {
- b %= len;
- return (integer)(y | z & (x << b | x >> len - b));
- }
- b = -b;
- b %= len;
- return (integer)(y | z & (x >> b | x << len - b));
- }
diff --git a/gcc/f/runtime/libF77/lbitshft.c b/gcc/f/runtime/libF77/lbitshft.c
deleted file mode 100644
index 81b0fdbeaba..00000000000
--- a/gcc/f/runtime/libF77/lbitshft.c
+++ /dev/null
@@ -1,11 +0,0 @@
-#include "f2c.h"
-
- integer
-#ifdef KR_headers
-lbit_shift(a, b) integer a; integer b;
-#else
-lbit_shift(integer a, integer b)
-#endif
-{
- return b >= 0 ? a << b : (integer)((uinteger)a >> -b);
- }
diff --git a/gcc/f/runtime/libF77/main.c b/gcc/f/runtime/libF77/main.c
deleted file mode 100644
index 469a64bdcb3..00000000000
--- a/gcc/f/runtime/libF77/main.c
+++ /dev/null
@@ -1,135 +0,0 @@
-/* STARTUP PROCEDURE FOR UNIX FORTRAN PROGRAMS */
-
-#include <stdio.h>
-#include "signal1.h"
-
-#ifndef SIGIOT
-#ifdef SIGABRT
-#define SIGIOT SIGABRT
-#endif
-#endif
-
-#ifndef KR_headers
-#undef VOID
-#include <stdlib.h>
-#endif
-
-#ifndef VOID
-#define VOID void
-#endif
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#ifdef NO__STDC
-#define ONEXIT onexit
-extern VOID f_exit();
-#else
-#ifndef KR_headers
-extern void f_exit(void);
-#ifndef NO_ONEXIT
-#define ONEXIT atexit
-extern int atexit(void (*)(void));
-#endif
-#else
-#ifndef NO_ONEXIT
-#define ONEXIT onexit
-extern VOID f_exit();
-#endif
-#endif
-#endif
-
-#ifdef KR_headers
-extern VOID f_init(), sig_die();
-extern int MAIN__();
-#define Int /* int */
-#else
-extern void f_init(void), sig_die(char*, int);
-extern int MAIN__(void);
-#define Int int
-#endif
-
-static VOID sigfdie(Int n)
-{
-sig_die("Floating Exception", 1);
-}
-
-
-static VOID sigidie(Int n)
-{
-sig_die("IOT Trap", 1);
-}
-
-#ifdef SIGQUIT
-static VOID sigqdie(Int n)
-{
-sig_die("Quit signal", 1);
-}
-#endif
-
-
-static VOID sigindie(Int n)
-{
-sig_die("Interrupt", 0);
-}
-
-static VOID sigtdie(Int n)
-{
-sig_die("Killed", 0);
-}
-
-#ifdef SIGTRAP
-static VOID sigtrdie(Int n)
-{
-sig_die("Trace trap", 1);
-}
-#endif
-
-
-int xargc;
-char **xargv;
-
-#ifdef __cplusplus
- }
-#endif
-
-#ifdef KR_headers
-main(argc, argv) int argc; char **argv;
-#else
-main(int argc, char **argv)
-#endif
-{
-xargc = argc;
-xargv = argv;
-signal1(SIGFPE, sigfdie); /* ignore underflow, enable overflow */
-#ifdef SIGIOT
-signal1(SIGIOT, sigidie);
-#endif
-#ifdef SIGTRAP
-signal1(SIGTRAP, sigtrdie);
-#endif
-#ifdef SIGQUIT
-if(signal1(SIGQUIT,sigqdie) == SIG_IGN)
- signal1(SIGQUIT, SIG_IGN);
-#endif
-if(signal1(SIGINT, sigindie) == SIG_IGN)
- signal1(SIGINT, SIG_IGN);
-signal1(SIGTERM,sigtdie);
-
-#ifdef pdp11
- ldfps(01200); /* detect overflow as an exception */
-#endif
-
-f_init();
-#ifndef NO_ONEXIT
-ONEXIT(f_exit);
-#endif
-MAIN__();
-#ifdef NO_ONEXIT
-f_exit();
-#endif
-exit(0); /* exit(0) rather than return(0) to bypass Cray bug */
-return 0; /* For compilers that complain of missing return values; */
- /* others will complain that this is unreachable code. */
-}
diff --git a/gcc/f/runtime/libF77/makefile.netlib b/gcc/f/runtime/libF77/makefile.netlib
deleted file mode 100644
index 230ca7e9f93..00000000000
--- a/gcc/f/runtime/libF77/makefile.netlib
+++ /dev/null
@@ -1,103 +0,0 @@
-.SUFFIXES: .c .o
-CC = cc
-SHELL = /bin/sh
-CFLAGS = -O
-
-# If your system lacks onexit() and you are not using an
-# ANSI C compiler, then you should add -DNO_ONEXIT to CFLAGS,
-# e.g., by changing the above "CFLAGS =" line to
-# CFLAGS = -O -DNO_ONEXIT
-
-# On at least some Sun systems, it is more appropriate to change the
-# "CFLAGS =" line to
-# CFLAGS = -O -Donexit=on_exit
-
-# compile, then strip unnecessary symbols
-.c.o:
- $(CC) -c -DSkip_f2c_Undefs $(CFLAGS) $*.c
- ld -r -x -o $*.xxx $*.o
- mv $*.xxx $*.o
-## Under Solaris (and other systems that do not understand ld -x),
-## omit -x in the ld line above.
-## If your system does not have the ld command, comment out
-## or remove both the ld and mv lines above.
-
-MISC = F77_aloc.o Version.o main.o s_rnge.o abort_.o getarg_.o iargc_.o \
- getenv_.o signal_.o s_stop.o s_paus.o system_.o cabs.o\
- derf_.o derfc_.o erf_.o erfc_.o sig_die.o exit_.o
-POW = pow_ci.o pow_dd.o pow_di.o pow_hh.o pow_ii.o pow_ri.o pow_zi.o pow_zz.o
-CX = c_abs.o c_cos.o c_div.o c_exp.o c_log.o c_sin.o c_sqrt.o
-DCX = z_abs.o z_cos.o z_div.o z_exp.o z_log.o z_sin.o z_sqrt.o
-REAL = r_abs.o r_acos.o r_asin.o r_atan.o r_atn2.o r_cnjg.o r_cos.o\
- r_cosh.o r_dim.o r_exp.o r_imag.o r_int.o\
- r_lg10.o r_log.o r_mod.o r_nint.o r_sign.o\
- r_sin.o r_sinh.o r_sqrt.o r_tan.o r_tanh.o
-DBL = d_abs.o d_acos.o d_asin.o d_atan.o d_atn2.o\
- d_cnjg.o d_cos.o d_cosh.o d_dim.o d_exp.o\
- d_imag.o d_int.o d_lg10.o d_log.o d_mod.o\
- d_nint.o d_prod.o d_sign.o d_sin.o d_sinh.o\
- d_sqrt.o d_tan.o d_tanh.o
-INT = i_abs.o i_dim.o i_dnnt.o i_indx.o i_len.o i_mod.o i_nint.o i_sign.o
-HALF = h_abs.o h_dim.o h_dnnt.o h_indx.o h_len.o h_mod.o h_nint.o h_sign.o
-CMP = l_ge.o l_gt.o l_le.o l_lt.o hl_ge.o hl_gt.o hl_le.o hl_lt.o
-EFL = ef1asc_.o ef1cmc_.o
-CHAR = F77_aloc.o s_cat.o s_cmp.o s_copy.o
-F90BIT = lbitbits.o lbitshft.o
-QINT = pow_qq.o qbitbits.o qbitshft.o
-TIME = dtime_.o etime_.o
-
-all: signal1.h libF77.a
-
-# You may need to adjust signal1.h suitably for your system...
-signal1.h: signal1.h0
- cp signal1.h0 signal1.h
-
-# If you get an error compiling dtime_.c or etime_.c, try adding
-# -DUSE_CLOCK to the CFLAGS assignment above; if that does not work,
-# omit $(TIME) from the dependency list for libF77.a below.
-
-# For INTEGER*8 support (which requires system-dependent adjustments to
-# f2c.h), add $(QINT) to the libf2c.a dependency list below...
-
-libF77.a : $(MISC) $(POW) $(CX) $(DCX) $(REAL) $(DBL) $(INT) \
- $(HALF) $(CMP) $(EFL) $(CHAR) $(F90BIT) $(TIME)
- ar r libF77.a $?
- -ranlib libF77.a
-
-### If your system lacks ranlib, you don't need it; see README.
-
-Version.o: Version.c
- $(CC) -c Version.c
-
-# To compile with C++, first "make f2c.h"
-f2c.h: f2ch.add
- cat /usr/include/f2c.h f2ch.add >f2c.h
-
-install: libF77.a
- mv libF77.a /usr/lib
- ranlib /usr/lib/libF77.a
-
-clean:
- rm -f libF77.a *.o
-
-check:
- xsum F77_aloc.c Notice README Version.c abort_.c c_abs.c c_cos.c \
- c_div.c c_exp.c c_log.c c_sin.c c_sqrt.c cabs.c d_abs.c d_acos.c \
- d_asin.c d_atan.c d_atn2.c d_cnjg.c d_cos.c d_cosh.c d_dim.c \
- d_exp.c d_imag.c d_int.c d_lg10.c d_log.c d_mod.c d_nint.c \
- d_prod.c d_sign.c d_sin.c d_sinh.c d_sqrt.c d_tan.c d_tanh.c \
- derf_.c derfc_.c dtime_.c \
- ef1asc_.c ef1cmc_.c erf_.c erfc_.c etime_.c exit_.c f2ch.add \
- getarg_.c getenv_.c h_abs.c h_dim.c h_dnnt.c h_indx.c h_len.c \
- h_mod.c h_nint.c h_sign.c hl_ge.c hl_gt.c hl_le.c hl_lt.c \
- i_abs.c i_dim.c i_dnnt.c i_indx.c i_len.c i_mod.c i_nint.c \
- i_sign.c iargc_.c l_ge.c l_gt.c l_le.c l_lt.c lbitbits.c lbitshft.c \
- main.c makefile pow_ci.c pow_dd.c pow_di.c pow_hh.c pow_ii.c \
- pow_qq.c pow_ri.c pow_zi.c pow_zz.c qbitbits.c qbitshft.c \
- r_abs.c r_acos.c r_asin.c r_atan.c r_atn2.c \
- r_cnjg.c r_cos.c r_cosh.c r_dim.c r_exp.c r_imag.c r_int.c r_lg10.c \
- r_log.c r_mod.c r_nint.c r_sign.c r_sin.c r_sinh.c r_sqrt.c \
- r_tan.c r_tanh.c s_cat.c s_cmp.c s_copy.c \
- s_paus.c s_rnge.c s_stop.c sig_die.c signal1.h0 signal_.c system_.c \
- z_abs.c z_cos.c z_div.c z_exp.c z_log.c z_sin.c z_sqrt.c >zap
- cmp zap libF77.xsum && rm zap || diff libF77.xsum zap
diff --git a/gcc/f/runtime/libF77/pow_ci.c b/gcc/f/runtime/libF77/pow_ci.c
deleted file mode 100644
index 37e2ce0f2eb..00000000000
--- a/gcc/f/runtime/libF77/pow_ci.c
+++ /dev/null
@@ -1,20 +0,0 @@
-#include "f2c.h"
-
-#ifdef KR_headers
-VOID pow_ci(p, a, b) /* p = a**b */
- complex *p, *a; integer *b;
-#else
-extern void pow_zi(doublecomplex*, doublecomplex*, integer*);
-void pow_ci(complex *p, complex *a, integer *b) /* p = a**b */
-#endif
-{
-doublecomplex p1, a1;
-
-a1.r = a->r;
-a1.i = a->i;
-
-pow_zi(&p1, &a1, b);
-
-p->r = p1.r;
-p->i = p1.i;
-}
diff --git a/gcc/f/runtime/libF77/pow_dd.c b/gcc/f/runtime/libF77/pow_dd.c
deleted file mode 100644
index d0dd0ff2744..00000000000
--- a/gcc/f/runtime/libF77/pow_dd.c
+++ /dev/null
@@ -1,13 +0,0 @@
-#include "f2c.h"
-
-#ifdef KR_headers
-double pow();
-double pow_dd(ap, bp) doublereal *ap, *bp;
-#else
-#undef abs
-#include <math.h>
-double pow_dd(doublereal *ap, doublereal *bp)
-#endif
-{
-return(pow(*ap, *bp) );
-}
diff --git a/gcc/f/runtime/libF77/pow_di.c b/gcc/f/runtime/libF77/pow_di.c
deleted file mode 100644
index affed625a91..00000000000
--- a/gcc/f/runtime/libF77/pow_di.c
+++ /dev/null
@@ -1,35 +0,0 @@
-#include "f2c.h"
-
-#ifdef KR_headers
-double pow_di(ap, bp) doublereal *ap; integer *bp;
-#else
-double pow_di(doublereal *ap, integer *bp)
-#endif
-{
-double pow, x;
-integer n;
-unsigned long u;
-
-pow = 1;
-x = *ap;
-n = *bp;
-
-if(n != 0)
- {
- if(n < 0)
- {
- n = -n;
- x = 1/x;
- }
- for(u = n; ; )
- {
- if(u & 01)
- pow *= x;
- if(u >>= 1)
- x *= x;
- else
- break;
- }
- }
-return(pow);
-}
diff --git a/gcc/f/runtime/libF77/pow_hh.c b/gcc/f/runtime/libF77/pow_hh.c
deleted file mode 100644
index 24a019734da..00000000000
--- a/gcc/f/runtime/libF77/pow_hh.c
+++ /dev/null
@@ -1,33 +0,0 @@
-#include "f2c.h"
-
-#ifdef KR_headers
-shortint pow_hh(ap, bp) shortint *ap, *bp;
-#else
-shortint pow_hh(shortint *ap, shortint *bp)
-#endif
-{
- shortint pow, x, n;
- unsigned u;
-
- x = *ap;
- n = *bp;
-
- if (n <= 0) {
- if (n == 0 || x == 1)
- return 1;
- if (x != -1)
- return x == 0 ? 1/x : 0;
- n = -n;
- }
- u = n;
- for(pow = 1; ; )
- {
- if(u & 01)
- pow *= x;
- if(u >>= 1)
- x *= x;
- else
- break;
- }
- return(pow);
- }
diff --git a/gcc/f/runtime/libF77/pow_ii.c b/gcc/f/runtime/libF77/pow_ii.c
deleted file mode 100644
index 84d1c7e0b5e..00000000000
--- a/gcc/f/runtime/libF77/pow_ii.c
+++ /dev/null
@@ -1,33 +0,0 @@
-#include "f2c.h"
-
-#ifdef KR_headers
-integer pow_ii(ap, bp) integer *ap, *bp;
-#else
-integer pow_ii(integer *ap, integer *bp)
-#endif
-{
- integer pow, x, n;
- unsigned long u;
-
- x = *ap;
- n = *bp;
-
- if (n <= 0) {
- if (n == 0 || x == 1)
- return 1;
- if (x != -1)
- return x == 0 ? 1/x : 0;
- n = -n;
- }
- u = n;
- for(pow = 1; ; )
- {
- if(u & 01)
- pow *= x;
- if(u >>= 1)
- x *= x;
- else
- break;
- }
- return(pow);
- }
diff --git a/gcc/f/runtime/libF77/pow_qq.c b/gcc/f/runtime/libF77/pow_qq.c
deleted file mode 100644
index 3bc80e05f7f..00000000000
--- a/gcc/f/runtime/libF77/pow_qq.c
+++ /dev/null
@@ -1,33 +0,0 @@
-#include "f2c.h"
-
-#ifdef KR_headers
-longint pow_qq(ap, bp) longint *ap, *bp;
-#else
-longint pow_qq(longint *ap, longint *bp)
-#endif
-{
- longint pow, x, n;
- unsigned long long u; /* system-dependent */
-
- x = *ap;
- n = *bp;
-
- if (n <= 0) {
- if (n == 0 || x == 1)
- return 1;
- if (x != -1)
- return x == 0 ? 1/x : 0;
- n = -n;
- }
- u = n;
- for(pow = 1; ; )
- {
- if(u & 01)
- pow *= x;
- if(u >>= 1)
- x *= x;
- else
- break;
- }
- return(pow);
- }
diff --git a/gcc/f/runtime/libF77/pow_ri.c b/gcc/f/runtime/libF77/pow_ri.c
deleted file mode 100644
index 6e5816bbf10..00000000000
--- a/gcc/f/runtime/libF77/pow_ri.c
+++ /dev/null
@@ -1,35 +0,0 @@
-#include "f2c.h"
-
-#ifdef KR_headers
-double pow_ri(ap, bp) real *ap; integer *bp;
-#else
-double pow_ri(real *ap, integer *bp)
-#endif
-{
-double pow, x;
-integer n;
-unsigned long u;
-
-pow = 1;
-x = *ap;
-n = *bp;
-
-if(n != 0)
- {
- if(n < 0)
- {
- n = -n;
- x = 1/x;
- }
- for(u = n; ; )
- {
- if(u & 01)
- pow *= x;
- if(u >>= 1)
- x *= x;
- else
- break;
- }
- }
-return(pow);
-}
diff --git a/gcc/f/runtime/libF77/pow_zi.c b/gcc/f/runtime/libF77/pow_zi.c
deleted file mode 100644
index 898ea6be917..00000000000
--- a/gcc/f/runtime/libF77/pow_zi.c
+++ /dev/null
@@ -1,61 +0,0 @@
-#include "f2c.h"
-
-#ifdef KR_headers
-VOID pow_zi(resx, a, b) /* p = a**b */
- doublecomplex *resx, *a; integer *b;
-#else
-extern void z_div(doublecomplex*, doublecomplex*, doublecomplex*);
-void pow_zi(doublecomplex *resx, doublecomplex *a, integer *b) /* p = a**b */
-#endif
-{
-integer n;
-unsigned long u;
-double t;
-doublecomplex x;
-doublecomplex res;
-static doublecomplex one = {1.0, 0.0};
-
-n = *b;
-
-if(n == 0)
- {
- resx->r = 1;
- resx->i = 0;
- return;
- }
-
-res.r = 1;
-res.i = 0;
-
-if(n < 0)
- {
- n = -n;
- z_div(&x, &one, a);
- }
-else
- {
- x.r = a->r;
- x.i = a->i;
- }
-
-for(u = n; ; )
- {
- if(u & 01)
- {
- t = res.r * x.r - res.i * x.i;
- res.i = res.r * x.i + res.i * x.r;
- res.r = t;
- }
- if(u >>= 1)
- {
- t = x.r * x.r - x.i * x.i;
- x.i = 2 * x.r * x.i;
- x.r = t;
- }
- else
- break;
- }
-
-resx->r = res.r;
-resx->i = res.i;
-}
diff --git a/gcc/f/runtime/libF77/pow_zz.c b/gcc/f/runtime/libF77/pow_zz.c
deleted file mode 100644
index 20faf29cfb8..00000000000
--- a/gcc/f/runtime/libF77/pow_zz.c
+++ /dev/null
@@ -1,23 +0,0 @@
-#include "f2c.h"
-
-#ifdef KR_headers
-double log(), exp(), cos(), sin(), atan2(), f__cabs();
-VOID pow_zz(r,a,b) doublecomplex *r, *a, *b;
-#else
-#undef abs
-#include <math.h>
-extern double f__cabs(double,double);
-void pow_zz(doublecomplex *r, doublecomplex *a, doublecomplex *b)
-#endif
-{
-double logr, logi, x, y;
-
-logr = log( f__cabs(a->r, a->i) );
-logi = atan2(a->i, a->r);
-
-x = exp( logr * b->r - logi * b->i );
-y = logr * b->i + logi * b->r;
-
-r->r = x * cos(y);
-r->i = x * sin(y);
-}
diff --git a/gcc/f/runtime/libF77/qbitbits.c b/gcc/f/runtime/libF77/qbitbits.c
deleted file mode 100644
index ad4ac963ce2..00000000000
--- a/gcc/f/runtime/libF77/qbitbits.c
+++ /dev/null
@@ -1,66 +0,0 @@
-#include "f2c.h"
-
-#ifndef LONGBITS
-#define LONGBITS 32
-#endif
-
-#ifndef LONG8BITS
-#define LONG8BITS (2*LONGBITS)
-#endif
-
- integer
-#ifdef KR_headers
-qbit_bits(a, b, len) longint a; integer b, len;
-#else
-qbit_bits(longint a, integer b, integer len)
-#endif
-{
- /* Assume 2's complement arithmetic */
-
- ulongint x, y;
-
- x = (ulongint) a;
- y = (ulongint)-1L;
- x >>= b;
- y <<= len;
- return (longint)(x & y);
- }
-
- longint
-#ifdef KR_headers
-qbit_cshift(a, b, len) longint a; integer b, len;
-#else
-qbit_cshift(longint a, integer b, integer len)
-#endif
-{
- ulongint x, y, z;
-
- x = (ulongint)a;
- if (len <= 0) {
- if (len == 0)
- return 0;
- goto full_len;
- }
- if (len >= LONG8BITS) {
- full_len:
- if (b >= 0) {
- b %= LONG8BITS;
- return (longint)(x << b | x >> LONG8BITS - b );
- }
- b = -b;
- b %= LONG8BITS;
- return (longint)(x << LONG8BITS - b | x >> b);
- }
- y = z = (unsigned long)-1;
- y <<= len;
- z &= ~y;
- y &= x;
- x &= z;
- if (b >= 0) {
- b %= len;
- return (longint)(y | z & (x << b | x >> len - b));
- }
- b = -b;
- b %= len;
- return (longint)(y | z & (x >> b | x << len - b));
- }
diff --git a/gcc/f/runtime/libF77/qbitshft.c b/gcc/f/runtime/libF77/qbitshft.c
deleted file mode 100644
index 87fffb91ff8..00000000000
--- a/gcc/f/runtime/libF77/qbitshft.c
+++ /dev/null
@@ -1,11 +0,0 @@
-#include "f2c.h"
-
- longint
-#ifdef KR_headers
-qbit_shift(a, b) longint a; integer b;
-#else
-qbit_shift(longint a, integer b)
-#endif
-{
- return b >= 0 ? a << b : (longint)((ulongint)a >> -b);
- }
diff --git a/gcc/f/runtime/libF77/r_abs.c b/gcc/f/runtime/libF77/r_abs.c
deleted file mode 100644
index 7b222961d16..00000000000
--- a/gcc/f/runtime/libF77/r_abs.c
+++ /dev/null
@@ -1,12 +0,0 @@
-#include "f2c.h"
-
-#ifdef KR_headers
-double r_abs(x) real *x;
-#else
-double r_abs(real *x)
-#endif
-{
-if(*x >= 0)
- return(*x);
-return(- *x);
-}
diff --git a/gcc/f/runtime/libF77/r_acos.c b/gcc/f/runtime/libF77/r_acos.c
deleted file mode 100644
index 330f88a3092..00000000000
--- a/gcc/f/runtime/libF77/r_acos.c
+++ /dev/null
@@ -1,13 +0,0 @@
-#include "f2c.h"
-
-#ifdef KR_headers
-double acos();
-double r_acos(x) real *x;
-#else
-#undef abs
-#include <math.h>
-double r_acos(real *x)
-#endif
-{
-return( acos(*x) );
-}
diff --git a/gcc/f/runtime/libF77/r_asin.c b/gcc/f/runtime/libF77/r_asin.c
deleted file mode 100644
index 45ece4b749e..00000000000
--- a/gcc/f/runtime/libF77/r_asin.c
+++ /dev/null
@@ -1,13 +0,0 @@
-#include "f2c.h"
-
-#ifdef KR_headers
-double asin();
-double r_asin(x) real *x;
-#else
-#undef abs
-#include <math.h>
-double r_asin(real *x)
-#endif
-{
-return( asin(*x) );
-}
diff --git a/gcc/f/runtime/libF77/r_atan.c b/gcc/f/runtime/libF77/r_atan.c
deleted file mode 100644
index 36479c915b0..00000000000
--- a/gcc/f/runtime/libF77/r_atan.c
+++ /dev/null
@@ -1,13 +0,0 @@
-#include "f2c.h"
-
-#ifdef KR_headers
-double atan();
-double r_atan(x) real *x;
-#else
-#undef abs
-#include <math.h>
-double r_atan(real *x)
-#endif
-{
-return( atan(*x) );
-}
diff --git a/gcc/f/runtime/libF77/r_atn2.c b/gcc/f/runtime/libF77/r_atn2.c
deleted file mode 100644
index 9347e1f13a9..00000000000
--- a/gcc/f/runtime/libF77/r_atn2.c
+++ /dev/null
@@ -1,13 +0,0 @@
-#include "f2c.h"
-
-#ifdef KR_headers
-double atan2();
-double r_atn2(x,y) real *x, *y;
-#else
-#undef abs
-#include <math.h>
-double r_atn2(real *x, real *y)
-#endif
-{
-return( atan2(*x,*y) );
-}
diff --git a/gcc/f/runtime/libF77/r_cnjg.c b/gcc/f/runtime/libF77/r_cnjg.c
deleted file mode 100644
index b6175eedfd7..00000000000
--- a/gcc/f/runtime/libF77/r_cnjg.c
+++ /dev/null
@@ -1,16 +0,0 @@
-#include "f2c.h"
-
-#ifdef KR_headers
-VOID r_cnjg(resx, z) complex *resx, *z;
-#else
-VOID r_cnjg(complex *resx, complex *z)
-#endif
-{
-complex res;
-
-res.r = z->r;
-res.i = - z->i;
-
-resx->r = res.r;
-resx->i = res.i;
-}
diff --git a/gcc/f/runtime/libF77/r_cos.c b/gcc/f/runtime/libF77/r_cos.c
deleted file mode 100644
index 5bda158cee9..00000000000
--- a/gcc/f/runtime/libF77/r_cos.c
+++ /dev/null
@@ -1,13 +0,0 @@
-#include "f2c.h"
-
-#ifdef KR_headers
-double cos();
-double r_cos(x) real *x;
-#else
-#undef abs
-#include <math.h>
-double r_cos(real *x)
-#endif
-{
-return( cos(*x) );
-}
diff --git a/gcc/f/runtime/libF77/r_cosh.c b/gcc/f/runtime/libF77/r_cosh.c
deleted file mode 100644
index 7ae72cc0cef..00000000000
--- a/gcc/f/runtime/libF77/r_cosh.c
+++ /dev/null
@@ -1,13 +0,0 @@
-#include "f2c.h"
-
-#ifdef KR_headers
-double cosh();
-double r_cosh(x) real *x;
-#else
-#undef abs
-#include <math.h>
-double r_cosh(real *x)
-#endif
-{
-return( cosh(*x) );
-}
diff --git a/gcc/f/runtime/libF77/r_dim.c b/gcc/f/runtime/libF77/r_dim.c
deleted file mode 100644
index baca95cd9e4..00000000000
--- a/gcc/f/runtime/libF77/r_dim.c
+++ /dev/null
@@ -1,10 +0,0 @@
-#include "f2c.h"
-
-#ifdef KR_headers
-double r_dim(a,b) real *a, *b;
-#else
-double r_dim(real *a, real *b)
-#endif
-{
-return( *a > *b ? *a - *b : 0);
-}
diff --git a/gcc/f/runtime/libF77/r_exp.c b/gcc/f/runtime/libF77/r_exp.c
deleted file mode 100644
index d1dea75563f..00000000000
--- a/gcc/f/runtime/libF77/r_exp.c
+++ /dev/null
@@ -1,13 +0,0 @@
-#include "f2c.h"
-
-#ifdef KR_headers
-double exp();
-double r_exp(x) real *x;
-#else
-#undef abs
-#include <math.h>
-double r_exp(real *x)
-#endif
-{
-return( exp(*x) );
-}
diff --git a/gcc/f/runtime/libF77/r_imag.c b/gcc/f/runtime/libF77/r_imag.c
deleted file mode 100644
index d51252bbb79..00000000000
--- a/gcc/f/runtime/libF77/r_imag.c
+++ /dev/null
@@ -1,10 +0,0 @@
-#include "f2c.h"
-
-#ifdef KR_headers
-double r_imag(z) complex *z;
-#else
-double r_imag(complex *z)
-#endif
-{
-return(z->i);
-}
diff --git a/gcc/f/runtime/libF77/r_int.c b/gcc/f/runtime/libF77/r_int.c
deleted file mode 100644
index 8378e775726..00000000000
--- a/gcc/f/runtime/libF77/r_int.c
+++ /dev/null
@@ -1,13 +0,0 @@
-#include "f2c.h"
-
-#ifdef KR_headers
-double floor();
-double r_int(x) real *x;
-#else
-#undef abs
-#include <math.h>
-double r_int(real *x)
-#endif
-{
-return( (*x>0) ? floor(*x) : -floor(- *x) );
-}
diff --git a/gcc/f/runtime/libF77/r_lg10.c b/gcc/f/runtime/libF77/r_lg10.c
deleted file mode 100644
index 51f84201711..00000000000
--- a/gcc/f/runtime/libF77/r_lg10.c
+++ /dev/null
@@ -1,15 +0,0 @@
-#include "f2c.h"
-
-#define log10e 0.43429448190325182765
-
-#ifdef KR_headers
-double log();
-double r_lg10(x) real *x;
-#else
-#undef abs
-#include <math.h>
-double r_lg10(real *x)
-#endif
-{
-return( log10e * log(*x) );
-}
diff --git a/gcc/f/runtime/libF77/r_log.c b/gcc/f/runtime/libF77/r_log.c
deleted file mode 100644
index 4873fb418e8..00000000000
--- a/gcc/f/runtime/libF77/r_log.c
+++ /dev/null
@@ -1,13 +0,0 @@
-#include "f2c.h"
-
-#ifdef KR_headers
-double log();
-double r_log(x) real *x;
-#else
-#undef abs
-#include <math.h>
-double r_log(real *x)
-#endif
-{
-return( log(*x) );
-}
diff --git a/gcc/f/runtime/libF77/r_mod.c b/gcc/f/runtime/libF77/r_mod.c
deleted file mode 100644
index faea344a7b7..00000000000
--- a/gcc/f/runtime/libF77/r_mod.c
+++ /dev/null
@@ -1,40 +0,0 @@
-#include "f2c.h"
-
-#ifdef KR_headers
-#ifdef IEEE_drem
-double drem();
-#else
-double floor();
-#endif
-double r_mod(x,y) real *x, *y;
-#else
-#ifdef IEEE_drem
-double drem(double, double);
-#else
-#undef abs
-#include <math.h>
-#endif
-double r_mod(real *x, real *y)
-#endif
-{
-#ifdef IEEE_drem
- double xa, ya, z;
- if ((ya = *y) < 0.)
- ya = -ya;
- z = drem(xa = *x, ya);
- if (xa > 0) {
- if (z < 0)
- z += ya;
- }
- else if (z > 0)
- z -= ya;
- return z;
-#else
- double quotient;
- if( (quotient = (double)*x / *y) >= 0)
- quotient = floor(quotient);
- else
- quotient = -floor(-quotient);
- return(*x - (*y) * quotient );
-#endif
-}
diff --git a/gcc/f/runtime/libF77/r_nint.c b/gcc/f/runtime/libF77/r_nint.c
deleted file mode 100644
index f5382af660a..00000000000
--- a/gcc/f/runtime/libF77/r_nint.c
+++ /dev/null
@@ -1,14 +0,0 @@
-#include "f2c.h"
-
-#ifdef KR_headers
-double floor();
-double r_nint(x) real *x;
-#else
-#undef abs
-#include <math.h>
-double r_nint(real *x)
-#endif
-{
-return( (*x)>=0 ?
- floor(*x + .5) : -floor(.5 - *x) );
-}
diff --git a/gcc/f/runtime/libF77/r_sign.c b/gcc/f/runtime/libF77/r_sign.c
deleted file mode 100644
index df6d02af00a..00000000000
--- a/gcc/f/runtime/libF77/r_sign.c
+++ /dev/null
@@ -1,12 +0,0 @@
-#include "f2c.h"
-
-#ifdef KR_headers
-double r_sign(a,b) real *a, *b;
-#else
-double r_sign(real *a, real *b)
-#endif
-{
-double x;
-x = (*a >= 0 ? *a : - *a);
-return( *b >= 0 ? x : -x);
-}
diff --git a/gcc/f/runtime/libF77/r_sin.c b/gcc/f/runtime/libF77/r_sin.c
deleted file mode 100644
index 095b9510de9..00000000000
--- a/gcc/f/runtime/libF77/r_sin.c
+++ /dev/null
@@ -1,13 +0,0 @@
-#include "f2c.h"
-
-#ifdef KR_headers
-double sin();
-double r_sin(x) real *x;
-#else
-#undef abs
-#include <math.h>
-double r_sin(real *x)
-#endif
-{
-return( sin(*x) );
-}
diff --git a/gcc/f/runtime/libF77/r_sinh.c b/gcc/f/runtime/libF77/r_sinh.c
deleted file mode 100644
index 3bf4bb138be..00000000000
--- a/gcc/f/runtime/libF77/r_sinh.c
+++ /dev/null
@@ -1,13 +0,0 @@
-#include "f2c.h"
-
-#ifdef KR_headers
-double sinh();
-double r_sinh(x) real *x;
-#else
-#undef abs
-#include <math.h>
-double r_sinh(real *x)
-#endif
-{
-return( sinh(*x) );
-}
diff --git a/gcc/f/runtime/libF77/r_sqrt.c b/gcc/f/runtime/libF77/r_sqrt.c
deleted file mode 100644
index d0203d3d19b..00000000000
--- a/gcc/f/runtime/libF77/r_sqrt.c
+++ /dev/null
@@ -1,13 +0,0 @@
-#include "f2c.h"
-
-#ifdef KR_headers
-double sqrt();
-double r_sqrt(x) real *x;
-#else
-#undef abs
-#include <math.h>
-double r_sqrt(real *x)
-#endif
-{
-return( sqrt(*x) );
-}
diff --git a/gcc/f/runtime/libF77/r_tan.c b/gcc/f/runtime/libF77/r_tan.c
deleted file mode 100644
index fc0009e4774..00000000000
--- a/gcc/f/runtime/libF77/r_tan.c
+++ /dev/null
@@ -1,13 +0,0 @@
-#include "f2c.h"
-
-#ifdef KR_headers
-double tan();
-double r_tan(x) real *x;
-#else
-#undef abs
-#include <math.h>
-double r_tan(real *x)
-#endif
-{
-return( tan(*x) );
-}
diff --git a/gcc/f/runtime/libF77/r_tanh.c b/gcc/f/runtime/libF77/r_tanh.c
deleted file mode 100644
index 818c6a8451b..00000000000
--- a/gcc/f/runtime/libF77/r_tanh.c
+++ /dev/null
@@ -1,13 +0,0 @@
-#include "f2c.h"
-
-#ifdef KR_headers
-double tanh();
-double r_tanh(x) real *x;
-#else
-#undef abs
-#include <math.h>
-double r_tanh(real *x)
-#endif
-{
-return( tanh(*x) );
-}
diff --git a/gcc/f/runtime/libF77/s_cat.c b/gcc/f/runtime/libF77/s_cat.c
deleted file mode 100644
index f462fd24945..00000000000
--- a/gcc/f/runtime/libF77/s_cat.c
+++ /dev/null
@@ -1,75 +0,0 @@
-/* Unless compiled with -DNO_OVERWRITE, this variant of s_cat allows the
- * target of a concatenation to appear on its right-hand side (contrary
- * to the Fortran 77 Standard, but in accordance with Fortran 90).
- */
-
-#include "f2c.h"
-#ifndef NO_OVERWRITE
-#include <stdio.h>
-#undef abs
-#ifdef KR_headers
- extern char *F77_aloc();
- extern void free();
- extern void G77_exit_0 ();
-#else
-#undef min
-#undef max
-#include <stdlib.h>
- extern char *F77_aloc(ftnlen, char*);
-#endif
-#include <string.h>
-#endif /* NO_OVERWRITE */
-
- VOID
-#ifdef KR_headers
-s_cat(lp, rpp, rnp, np, ll) char *lp, *rpp[]; ftnlen rnp[], *np, ll;
-#else
-s_cat(char *lp, char *rpp[], ftnlen rnp[], ftnlen *np, ftnlen ll)
-#endif
-{
- ftnlen i, nc;
- char *rp;
- ftnlen n = *np;
-#ifndef NO_OVERWRITE
- ftnlen L, m;
- char *lp0, *lp1;
-
- lp0 = 0;
- lp1 = lp;
- L = ll;
- i = 0;
- while(i < n) {
- rp = rpp[i];
- m = rnp[i++];
- if (rp >= lp1 || rp + m <= lp) {
- if ((L -= m) <= 0) {
- n = i;
- break;
- }
- lp1 += m;
- continue;
- }
- lp0 = lp;
- lp = lp1 = F77_aloc(L = ll, "s_cat");
- break;
- }
- lp1 = lp;
-#endif /* NO_OVERWRITE */
- for(i = 0 ; i < n ; ++i) {
- nc = ll;
- if(rnp[i] < nc)
- nc = rnp[i];
- ll -= nc;
- rp = rpp[i];
- while(--nc >= 0)
- *lp++ = *rp++;
- }
- while(--ll >= 0)
- *lp++ = ' ';
-#ifndef NO_OVERWRITE
- if (lp0) {
- memcpy(lp0, lp1, L);
- free(lp1);
- }
-#endif
- }
diff --git a/gcc/f/runtime/libF77/s_cmp.c b/gcc/f/runtime/libF77/s_cmp.c
deleted file mode 100644
index 1e052f28642..00000000000
--- a/gcc/f/runtime/libF77/s_cmp.c
+++ /dev/null
@@ -1,44 +0,0 @@
-#include "f2c.h"
-
-/* compare two strings */
-
-#ifdef KR_headers
-integer s_cmp(a0, b0, la, lb) char *a0, *b0; ftnlen la, lb;
-#else
-integer s_cmp(char *a0, char *b0, ftnlen la, ftnlen lb)
-#endif
-{
-register unsigned char *a, *aend, *b, *bend;
-a = (unsigned char *)a0;
-b = (unsigned char *)b0;
-aend = a + la;
-bend = b + lb;
-
-if(la <= lb)
- {
- while(a < aend)
- if(*a != *b)
- return( *a - *b );
- else
- { ++a; ++b; }
-
- while(b < bend)
- if(*b != ' ')
- return( ' ' - *b );
- else ++b;
- }
-
-else
- {
- while(b < bend)
- if(*a == *b)
- { ++a; ++b; }
- else
- return( *a - *b );
- while(a < aend)
- if(*a != ' ')
- return(*a - ' ');
- else ++a;
- }
-return(0);
-}
diff --git a/gcc/f/runtime/libF77/s_copy.c b/gcc/f/runtime/libF77/s_copy.c
deleted file mode 100644
index d1673510c62..00000000000
--- a/gcc/f/runtime/libF77/s_copy.c
+++ /dev/null
@@ -1,51 +0,0 @@
-/* Unless compiled with -DNO_OVERWRITE, this variant of s_copy allows the
- * target of an assignment to appear on its right-hand side (contrary
- * to the Fortran 77 Standard, but in accordance with Fortran 90),
- * as in a(2:5) = a(4:7) .
- */
-
-#include "f2c.h"
-
-/* assign strings: a = b */
-
-#ifdef KR_headers
-VOID s_copy(a, b, la, lb) register char *a, *b; ftnlen la, lb;
-#else
-void s_copy(register char *a, register char *b, ftnlen la, ftnlen lb)
-#endif
-{
- register char *aend, *bend;
-
- aend = a + la;
-
- if(la <= lb)
-#ifndef NO_OVERWRITE
- if (a <= b || a >= b + la)
-#endif
- while(a < aend)
- *a++ = *b++;
-#ifndef NO_OVERWRITE
- else
- for(b += la; a < aend; )
- *--aend = *--b;
-#endif
-
- else {
- bend = b + lb;
-#ifndef NO_OVERWRITE
- if (a <= b || a >= bend)
-#endif
- while(b < bend)
- *a++ = *b++;
-#ifndef NO_OVERWRITE
- else {
- a += lb;
- while(b < bend)
- *--a = *--bend;
- a += lb;
- }
-#endif
- while(a < aend)
- *a++ = ' ';
- }
- }
diff --git a/gcc/f/runtime/libF77/s_paus.c b/gcc/f/runtime/libF77/s_paus.c
deleted file mode 100644
index 1317008cb73..00000000000
--- a/gcc/f/runtime/libF77/s_paus.c
+++ /dev/null
@@ -1,88 +0,0 @@
-#include <stdio.h>
-#include "f2c.h"
-#define PAUSESIG 15
-
-#ifdef KR_headers
-#define Void /* void */
-#define Int /* int */
-#else
-#define Void void
-#define Int int
-#undef abs
-#undef min
-#undef max
-#include <stdlib.h>
-#include "signal1.h"
-#ifdef __cplusplus
-extern "C" {
-#endif
-extern int getpid(void), isatty(int), pause(void);
-#endif
-
-extern VOID f_exit(Void);
-
- static VOID
-waitpause(Int n)
-{ n = n; /* shut up compiler warning */
- return;
- }
-
- static VOID
-#ifdef KR_headers
-s_1paus(fin) FILE *fin;
-#else
-s_1paus(FILE *fin)
-#endif
-{
- fprintf(stderr,
- "To resume execution, type go. Other input will terminate the job.\n");
- fflush(stderr);
- if( getc(fin)!='g' || getc(fin)!='o' || getc(fin)!='\n' ) {
- fprintf(stderr, "STOP\n");
-#ifdef NO_ONEXIT
- f_exit();
-#endif
- exit(0);
- }
- }
-
- int
-#ifdef KR_headers
-s_paus(s, n) char *s; ftnlen n;
-#else
-s_paus(char *s, ftnlen n)
-#endif
-{
- fprintf(stderr, "PAUSE ");
- if(n > 0)
- fprintf(stderr, " %.*s", (int)n, s);
- fprintf(stderr, " statement executed\n");
- if( isatty(fileno(stdin)) )
- s_1paus(stdin);
- else {
-#if (defined (MSDOS) && !defined (GO32)) || defined(__CYGWIN32__)
- FILE *fin;
- fin = fopen("con", "r");
- if (!fin) {
- fprintf(stderr, "s_paus: can't open con!\n");
- fflush(stderr);
- exit(1);
- }
- s_1paus(fin);
- fclose(fin);
-#else
- fprintf(stderr,
- "To resume execution, execute a kill -%d %d command\n",
- PAUSESIG, getpid() );
- signal1(PAUSESIG, waitpause);
- fflush(stderr);
- pause();
-#endif
- }
- fprintf(stderr, "Execution resumes after PAUSE.\n");
- fflush(stderr);
- return 0; /* NOT REACHED */
-#ifdef __cplusplus
- }
-#endif
-}
diff --git a/gcc/f/runtime/libF77/s_rnge.c b/gcc/f/runtime/libF77/s_rnge.c
deleted file mode 100644
index 189b5247ced..00000000000
--- a/gcc/f/runtime/libF77/s_rnge.c
+++ /dev/null
@@ -1,26 +0,0 @@
-#include <stdio.h>
-#include "f2c.h"
-
-/* called when a subscript is out of range */
-
-#ifdef KR_headers
-extern VOID sig_die();
-integer s_rnge(varn, offset, procn, line) char *varn, *procn; ftnint offset, line;
-#else
-extern VOID sig_die(char*,int);
-integer s_rnge(char *varn, ftnint offset, char *procn, ftnint line)
-#endif
-{
-register int i;
-
-fprintf(stderr, "Subscript out of range on file line %ld, procedure ", line);
-while((i = *procn) && i != '_' && i != ' ')
- putc(*procn++, stderr);
-fprintf(stderr, ".\nAttempt to access the %ld-th element of variable ", offset+1);
-while((i = *varn) && i != ' ')
- putc(*varn++, stderr);
-sig_die(".", 1);
-#ifdef __cplusplus
-return 0;
-#endif
-}
diff --git a/gcc/f/runtime/libF77/s_stop.c b/gcc/f/runtime/libF77/s_stop.c
deleted file mode 100644
index 2e3f1035b30..00000000000
--- a/gcc/f/runtime/libF77/s_stop.c
+++ /dev/null
@@ -1,37 +0,0 @@
-#include <stdio.h>
-#include "f2c.h"
-
-#ifdef KR_headers
-extern void f_exit();
-VOID s_stop(s, n) char *s; ftnlen n;
-#else
-#undef abs
-#undef min
-#undef max
-#include <stdlib.h>
-#ifdef __cplusplus
-extern "C" {
-#endif
-void f_exit(void);
-
-int s_stop(char *s, ftnlen n)
-#endif
-{
-int i;
-
-if(n > 0)
- {
- fprintf(stderr, "STOP ");
- for(i = 0; i<n ; ++i)
- putc(*s++, stderr);
- fprintf(stderr, " statement executed\n");
- }
-#ifdef NO_ONEXIT
-f_exit();
-#endif
-exit(0);
-#ifdef __cplusplus
-return 0; /* NOT REACHED */
-}
-#endif
-}
diff --git a/gcc/f/runtime/libF77/sig_die.c b/gcc/f/runtime/libF77/sig_die.c
deleted file mode 100644
index bebb1e7b8f7..00000000000
--- a/gcc/f/runtime/libF77/sig_die.c
+++ /dev/null
@@ -1,45 +0,0 @@
-#include <stdio.h>
-#include <signal.h>
-
-#ifndef SIGIOT
-#ifdef SIGABRT
-#define SIGIOT SIGABRT
-#endif
-#endif
-
-#ifdef KR_headers
-void sig_die(s, kill) register char *s; int kill;
-#else
-#include <stdlib.h>
-#ifdef __cplusplus
-extern "C" {
-#endif
- extern void f_exit(void);
-
-void sig_die(register char *s, int kill)
-#endif
-{
- /* print error message, then clear buffers */
- fprintf(stderr, "%s\n", s);
-
- if(kill)
- {
- fflush(stderr);
- f_exit();
- fflush(stderr);
- /* now get a core */
-#ifdef SIGIOT
- signal(SIGIOT, SIG_DFL);
-#endif
- abort();
- }
- else {
-#ifdef NO_ONEXIT
- f_exit();
-#endif
- exit(1);
- }
- }
-#ifdef __cplusplus
-}
-#endif
diff --git a/gcc/f/runtime/libF77/signal1.h b/gcc/f/runtime/libF77/signal1.h
deleted file mode 100644
index b559211e8e4..00000000000
--- a/gcc/f/runtime/libF77/signal1.h
+++ /dev/null
@@ -1,5 +0,0 @@
-/* The g77 implementation of libf2c directly includes signal1.h0,
- instead of copying it to signal1.h, since that seems easier to
- cope with at this point. */
-
-#include "signal1.h0"
diff --git a/gcc/f/runtime/libF77/signal1.h0 b/gcc/f/runtime/libF77/signal1.h0
deleted file mode 100644
index 8800a18d77b..00000000000
--- a/gcc/f/runtime/libF77/signal1.h0
+++ /dev/null
@@ -1,25 +0,0 @@
-/* You may need to adjust the definition of signal1 to supply a */
-/* cast to the correct argument type. This detail is system- and */
-/* compiler-dependent. The #define below assumes signal.h declares */
-/* type SIG_PF for the signal function's second argument. */
-
-#include <signal.h>
-
-#ifndef Sigret_t
-#define Sigret_t void
-#endif
-#ifndef Sigarg_t
-#ifdef KR_headers
-#define Sigarg_t
-#else
-#define Sigarg_t int
-#endif
-#endif /*Sigarg_t*/
-
-#ifdef USE_SIG_PF /* compile with -DUSE_SIG_PF under IRIX */
-#define sig_pf SIG_PF
-#else
-typedef Sigret_t (*sig_pf)(Sigarg_t);
-#endif
-
-#define signal1(a,b) signal(a,(sig_pf)b)
diff --git a/gcc/f/runtime/libF77/signal_.c b/gcc/f/runtime/libF77/signal_.c
deleted file mode 100644
index 1ac81391aef..00000000000
--- a/gcc/f/runtime/libF77/signal_.c
+++ /dev/null
@@ -1,14 +0,0 @@
-#include "f2c.h"
-#include "signal1.h"
-
-#ifdef KR_headers
-ftnint G77_signal_0 (sigp, proc) integer *sigp; sig_pf proc;
-#else
-ftnint G77_signal_0 (integer *sigp, sig_pf proc)
-#endif
-{
- int sig;
- sig = (int)*sigp;
-
- return (ftnint)signal(sig, proc);
- }
diff --git a/gcc/f/runtime/libF77/system_.c b/gcc/f/runtime/libF77/system_.c
deleted file mode 100644
index ed024a14ded..00000000000
--- a/gcc/f/runtime/libF77/system_.c
+++ /dev/null
@@ -1,36 +0,0 @@
-/* f77 interface to system routine */
-
-#include "f2c.h"
-
-#ifdef KR_headers
-extern char *F77_aloc();
-
- integer
-G77_system_0 (s, n) register char *s; ftnlen n;
-#else
-#undef abs
-#undef min
-#undef max
-#include <stdlib.h>
-extern char *F77_aloc(ftnlen, char*);
-
- integer
-G77_system_0 (register char *s, ftnlen n)
-#endif
-{
- char buff0[256], *buff;
- register char *bp, *blast;
- integer rv;
-
- buff = bp = n < sizeof(buff0)
- ? buff0 : F77_aloc(n+1, "system_");
- blast = bp + n;
-
- while(bp < blast && *s)
- *bp++ = *s++;
- *bp = 0;
- rv = system(buff);
- if (buff != buff0)
- free(buff);
- return rv;
- }
diff --git a/gcc/f/runtime/libF77/z_abs.c b/gcc/f/runtime/libF77/z_abs.c
deleted file mode 100644
index 7e67ad2957f..00000000000
--- a/gcc/f/runtime/libF77/z_abs.c
+++ /dev/null
@@ -1,12 +0,0 @@
-#include "f2c.h"
-
-#ifdef KR_headers
-double f__cabs();
-double z_abs(z) doublecomplex *z;
-#else
-double f__cabs(double, double);
-double z_abs(doublecomplex *z)
-#endif
-{
-return( f__cabs( z->r, z->i ) );
-}
diff --git a/gcc/f/runtime/libF77/z_cos.c b/gcc/f/runtime/libF77/z_cos.c
deleted file mode 100644
index a811bbecc65..00000000000
--- a/gcc/f/runtime/libF77/z_cos.c
+++ /dev/null
@@ -1,19 +0,0 @@
-#include "f2c.h"
-
-#ifdef KR_headers
-double sin(), cos(), sinh(), cosh();
-VOID z_cos(resx, z) doublecomplex *resx, *z;
-#else
-#undef abs
-#include <math.h>
-void z_cos(doublecomplex *resx, doublecomplex *z)
-#endif
-{
-doublecomplex res;
-
-res.r = cos(z->r) * cosh(z->i);
-res.i = - sin(z->r) * sinh(z->i);
-
-resx->r = res.r;
-resx->i = res.i;
-}
diff --git a/gcc/f/runtime/libF77/z_div.c b/gcc/f/runtime/libF77/z_div.c
deleted file mode 100644
index 4a987ab255a..00000000000
--- a/gcc/f/runtime/libF77/z_div.c
+++ /dev/null
@@ -1,39 +0,0 @@
-#include "f2c.h"
-
-#ifdef KR_headers
-extern VOID sig_die();
-VOID z_div(resx, a, b) doublecomplex *a, *b, *resx;
-#else
-extern void sig_die(char*, int);
-void z_div(doublecomplex *resx, doublecomplex *a, doublecomplex *b)
-#endif
-{
-double ratio, den;
-double abr, abi;
-doublecomplex res;
-
-if( (abr = b->r) < 0.)
- abr = - abr;
-if( (abi = b->i) < 0.)
- abi = - abi;
-if( abr <= abi )
- {
- if(abi == 0)
- sig_die("complex division by zero", 1);
- ratio = b->r / b->i ;
- den = b->i * (1 + ratio*ratio);
- res.r = (a->r*ratio + a->i) / den;
- res.i = (a->i*ratio - a->r) / den;
- }
-
-else
- {
- ratio = b->i / b->r ;
- den = b->r * (1 + ratio*ratio);
- res.r = (a->r + a->i*ratio) / den;
- res.i = (a->i - a->r*ratio) / den;
- }
-
-resx->r = res.r;
-resx->i = res.i;
-}
diff --git a/gcc/f/runtime/libF77/z_exp.c b/gcc/f/runtime/libF77/z_exp.c
deleted file mode 100644
index 85fb63e4209..00000000000
--- a/gcc/f/runtime/libF77/z_exp.c
+++ /dev/null
@@ -1,21 +0,0 @@
-#include "f2c.h"
-
-#ifdef KR_headers
-double exp(), cos(), sin();
-VOID z_exp(resx, z) doublecomplex *resx, *z;
-#else
-#undef abs
-#include <math.h>
-void z_exp(doublecomplex *resx, doublecomplex *z)
-#endif
-{
-double expx;
-doublecomplex res;
-
-expx = exp(z->r);
-res.r = expx * cos(z->i);
-res.i = expx * sin(z->i);
-
-resx->r = res.r;
-resx->i = res.i;
-}
diff --git a/gcc/f/runtime/libF77/z_log.c b/gcc/f/runtime/libF77/z_log.c
deleted file mode 100644
index 48afca63d6d..00000000000
--- a/gcc/f/runtime/libF77/z_log.c
+++ /dev/null
@@ -1,20 +0,0 @@
-#include "f2c.h"
-
-#ifdef KR_headers
-double log(), f__cabs(), atan2();
-VOID z_log(resx, z) doublecomplex *resx, *z;
-#else
-#undef abs
-#include <math.h>
-extern double f__cabs(double, double);
-void z_log(doublecomplex *resx, doublecomplex *z)
-#endif
-{
-doublecomplex res;
-
-res.i = atan2(z->i, z->r);
-res.r = log( f__cabs( z->r, z->i ) );
-
-resx->r = res.r;
-resx->i = res.i;
-}
diff --git a/gcc/f/runtime/libF77/z_sin.c b/gcc/f/runtime/libF77/z_sin.c
deleted file mode 100644
index 94456c9c30a..00000000000
--- a/gcc/f/runtime/libF77/z_sin.c
+++ /dev/null
@@ -1,19 +0,0 @@
-#include "f2c.h"
-
-#ifdef KR_headers
-double sin(), cos(), sinh(), cosh();
-VOID z_sin(resx, z) doublecomplex *resx, *z;
-#else
-#undef abs
-#include <math.h>
-void z_sin(doublecomplex *resx, doublecomplex *z)
-#endif
-{
-doublecomplex res;
-
-res.r = sin(z->r) * cosh(z->i);
-res.i = cos(z->r) * sinh(z->i);
-
-resx->r = res.r;
-resx->i = res.i;
-}
diff --git a/gcc/f/runtime/libF77/z_sqrt.c b/gcc/f/runtime/libF77/z_sqrt.c
deleted file mode 100644
index f5db5651991..00000000000
--- a/gcc/f/runtime/libF77/z_sqrt.c
+++ /dev/null
@@ -1,33 +0,0 @@
-#include "f2c.h"
-
-#ifdef KR_headers
-double sqrt(), f__cabs();
-VOID z_sqrt(resx, z) doublecomplex *resx, *z;
-#else
-#undef abs
-#include <math.h>
-extern double f__cabs(double, double);
-void z_sqrt(doublecomplex *resx, doublecomplex *z)
-#endif
-{
-double mag;
-doublecomplex res;
-
-if( (mag = f__cabs(z->r, z->i)) == 0.)
- res.r = res.i = 0.;
-else if(z->r > 0)
- {
- res.r = sqrt(0.5 * (mag + z->r) );
- res.i = z->i / res.r / 2;
- }
-else
- {
- res.i = sqrt(0.5 * (mag - z->r) );
- if(z->i < 0)
- res.i = - res.i;
- res.r = z->i / res.i / 2;
- }
-
-resx->r = res.r;
-resx->i = res.i;
-}
diff --git a/gcc/f/runtime/libI77/Makefile.in b/gcc/f/runtime/libI77/Makefile.in
deleted file mode 100644
index 34bc5fa3997..00000000000
--- a/gcc/f/runtime/libI77/Makefile.in
+++ /dev/null
@@ -1,129 +0,0 @@
-# Makefile for GNU F77 compiler runtime.
-# Copyright 1990 - 1994 by AT&T Bell Laboratories and Bellcore (see the
-# file `Notice').
-# Portions of this file Copyright (C) 1995, 1996 Free Software Foundation, Inc.
-# Contributed by Dave Love (d.love@dl.ac.uk).
-#
-#This file is part of GNU Fortran.
-#
-#GNU Fortran 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.
-#
-#GNU Fortran 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 GNU Fortran; see the file COPYING. If not, write to
-#the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
-#02111-1307, USA.
-
-SHELL = /bin/sh
-
-srcdir = @srcdir@
-VPATH = @srcdir@
-
-#### Start of system configuration section. ####
-
-# The _FOR_TARGET things are appropriate for a cross-make, passed by the
-# superior makefile
-GCC_FOR_TARGET = @CC@
-CC = $(GCC_FOR_TARGET)
-CFLAGS = @CFLAGS@ $(GCC_FLAGS)
-CPPFLAGS = @CPPFLAGS@
-DEFS = @DEFS@
-CGFLAGS = -g0
-# f2c.h should already be installed in xgcc's include directory but add that
-# to -I anyhow in case not using xgcc.
-ALL_CFLAGS = -I. -I$(srcdir) -I../../../include $(CPPFLAGS) $(DEFS) $(CFLAGS)
-AR = @AR@
-AR_FLAGS = rc
-RANLIB = @RANLIB@
-RANLIB_TEST = @RANLIB_TEST@
-CROSS = @CROSS@
-
-.SUFFIXES:
-.SUFFIXES: .c .o
-
-.c.o:
- $(CC) -c -DSkip_f2c_Undefs -DAllow_TYQUAD $(ALL_CFLAGS) $(CGFLAGS) $<
-
-OBJ = VersionI.o backspace.o close.o dfe.o dolio.o due.o endfile.o err.o \
- fmt.o fmtlib.o iio.o ilnw.o inquire.o lread.o lwrite.o open.o \
- rdfmt.o rewind.o rsfe.o rsli.o rsne.o sfe.o sue.o typesize.o uio.o \
- util.o wref.o wrtfmt.o wsfe.o wsle.o wsne.o xwsne.o \
- ftell_.o
-
-F2C_H = ../../../include/f2c.h
-
-all: $(OBJ)
-
-VersionI.o: Version.c
- $(CC) -c $(CGFLAGS) -o $@ $(srcdir)/Version.c
-
-mostlyclean clean:
- -rm -f $(OBJ)
-
-distclean maintainer-clean: mostlyclean
- -rm -f stage? include Makefile
-
-backspace.o: fio.h
-close.o: fio.h
-dfe.o: fio.h
-dfe.o: fmt.h
-due.o: fio.h
-endfile.o: fio.h rawio.h
-err.o: fio.h rawio.h
-fmt.o: fio.h
-fmt.o: fmt.h
-ftell_.o: fio.h
-iio.o: fio.h
-iio.o: fmt.h
-ilnw.o: fio.h
-ilnw.o: lio.h
-inquire.o: fio.h
-lread.o: fio.h
-lread.o: fmt.h
-lread.o: lio.h
-lread.o: fp.h
-lwrite.o: fio.h
-lwrite.o: fmt.h
-lwrite.o: lio.h
-open.o: fio.h rawio.h
-rdfmt.o: fio.h
-rdfmt.o: fmt.h
-rdfmt.o: fp.h
-rewind.o: fio.h
-rsfe.o: fio.h
-rsfe.o: fmt.h
-rsli.o: fio.h
-rsli.o: lio.h
-rsne.o: fio.h
-rsne.o: lio.h
-sfe.o: fio.h
-sue.o: fio.h
-uio.o: fio.h
-util.o: fio.h
-wref.o: fio.h
-wref.o: fmt.h
-wref.o: fp.h
-wrtfmt.o: fio.h
-wrtfmt.o: fmt.h
-wsfe.o: fio.h
-wsfe.o: fmt.h
-wsle.o: fio.h
-wsle.o: fmt.h
-wsle.o: lio.h
-wsne.o: fio.h
-wsne.o: lio.h
-xwsne.o: fio.h
-xwsne.o: lio.h
-xwsne.o: fmt.h
-
-# May be pessimistic:
-$(OBJ): $(F2C_H)
-
-.PHONY: mostlyclean clean distclean maintainer-clean all
diff --git a/gcc/f/runtime/libI77/Notice b/gcc/f/runtime/libI77/Notice
deleted file mode 100644
index 261b719bc57..00000000000
--- a/gcc/f/runtime/libI77/Notice
+++ /dev/null
@@ -1,23 +0,0 @@
-/****************************************************************
-Copyright 1990 - 1997 by AT&T, Lucent Technologies and Bellcore.
-
-Permission to use, copy, modify, and distribute this software
-and its documentation for any purpose and without fee is hereby
-granted, provided that the above copyright notice appear in all
-copies and that both that the copyright notice and this
-permission notice and warranty disclaimer appear in supporting
-documentation, and that the names of AT&T, Bell Laboratories,
-Lucent or Bellcore or any of their entities not be used in
-advertising or publicity pertaining to distribution of the
-software without specific, written prior permission.
-
-AT&T, Lucent and Bellcore disclaim all warranties with regard to
-this software, including all implied warranties of
-merchantability and fitness. In no event shall AT&T, Lucent or
-Bellcore be liable for any special, indirect or consequential
-damages or any damages whatsoever resulting from loss of use,
-data or profits, whether in an action of contract, negligence or
-other tortious action, arising out of or in connection with the
-use or performance of this software.
-****************************************************************/
-
diff --git a/gcc/f/runtime/libI77/README.netlib b/gcc/f/runtime/libI77/README.netlib
deleted file mode 100644
index 30dd5b5223d..00000000000
--- a/gcc/f/runtime/libI77/README.netlib
+++ /dev/null
@@ -1,225 +0,0 @@
-If your compiler does not recognize ANSI C headers,
-compile with KR_headers defined: either add -DKR_headers
-to the definition of CFLAGS in the makefile, or insert
-
-#define KR_headers
-
-at the top of f2c.h and fmtlib.c .
-
-
-If you have a really ancient K&R C compiler that does not understand
-void, add -Dvoid=int to the definition of CFLAGS in the makefile.
-
-If you use a C++ compiler, first create a local f2c.h by appending
-f2ch.add to the usual f2c.h, e.g., by issuing the command
- make f2c.h
-which assumes f2c.h is installed in /usr/include .
-
-If your system lacks /usr/include/fcntl.h , then you
-should simply create an empty fcntl.h in this directory.
-If your compiler then complains about creat and open not
-having a prototype, compile with OPEN_DECL defined.
-On many systems, open and creat are declared in fcntl.h .
-
-If your system has /usr/include/fcntl.h, you may need to add
--D_POSIX_SOURCE to the makefile's definition of CFLAGS.
-
-If your system's sprintf does not work the way ANSI C
-specifies -- specifically, if it does not return the
-number of characters transmitted -- then insert the line
-
-#define USE_STRLEN
-
-at the end of fmt.h . This is necessary with
-at least some versions of Sun and DEC software.
-In particular, if you get a warning about an improper
-pointer/integer combination in compiling wref.c, then
-you need to compile with -DUSE_STRLEN .
-
-If your system's fopen does not like the ANSI binary
-reading and writing modes "rb" and "wb", then you should
-compile open.c with NON_ANSI_RW_MODES #defined.
-
-If you get error messages about references to cf->_ptr
-and cf->_base when compiling wrtfmt.c and wsfe.c or to
-stderr->_flag when compiling err.c, then insert the line
-
-#define NON_UNIX_STDIO
-
-at the beginning of fio.h, and recompile everything (or
-at least those modules that contain NON_UNIX_STDIO).
-
-Unformatted sequential records consist of a length of record
-contents, the record contents themselves, and the length of
-record contents again (for backspace). Prior to 17 Oct. 1991,
-the length was of type int; now it is of type long, but you
-can change it back to int by inserting
-
-#define UIOLEN_int
-
-at the beginning of fio.h. This affects only sue.c and uio.c .
-
-On VAX, Cray, or Research Tenth-Edition Unix systems, you may
-need to add -DVAX, -DCRAY, or -DV10 (respectively) to CFLAGS
-to make fp.h work correctly. Alternatively, you may need to
-edit fp.h to suit your machine.
-
-You may need to supply the following non-ANSI routines:
-
- fstat(int fileds, struct stat *buf) is similar
-to stat(char *name, struct stat *buf), except that
-the first argument, fileds, is the file descriptor
-returned by open rather than the name of the file.
-fstat is used in the system-dependent routine
-canseek (in the libI77 source file err.c), which
-is supposed to return 1 if it's possible to issue
-seeks on the file in question, 0 if it's not; you may
-need to suitably modify err.c . On non-UNIX systems,
-you can avoid references to fstat and stat by compiling
-with NON_UNIX_STDIO defined; in that case, you may need
-to supply access(char *Name,0), which is supposed to
-return 0 if file Name exists, nonzero otherwise.
-
- char * mktemp(char *buf) is supposed to replace the
-6 trailing X's in buf with a unique number and then
-return buf. The idea is to get a unique name for
-a temporary file.
-
-On non-UNIX systems, you may need to change a few other,
-e.g.: the form of name computed by mktemp() in endfile.c and
-open.c; the use of the open(), close(), and creat() system
-calls in endfile.c, err.c, open.c; and the modes in calls on
-fopen() and fdopen() (and perhaps the use of fdopen() itself
--- it's supposed to return a FILE* corresponding to a given
-an integer file descriptor) in err.c and open.c (component ufmt
-of struct unit is 1 for formatted I/O -- text mode on some systems
--- and 0 for unformatted I/O -- binary mode on some systems).
-Compiling with -DNON_UNIX_STDIO omits all references to creat()
-and almost all references to open() and close(), the exception
-being in the function f__isdev() (in open.c).
-
-For MS-DOS, compile all of libI77 with -DMSDOS (which implies
--DNON_UNIX_STDIO). You may need to make other compiler-dependent
-adjustments; for example, for Turbo C++ you need to adjust the mktemp
-invocations and to #undef ungetc in lread.c and rsne.c .
-
-If you want to be able to load against libI77 but not libF77,
-then you will need to add sig_die.o (from libF77) to libI77.
-
-If you wish to use translated Fortran that has funny notions
-of record length for direct unformatted I/O (i.e., that assumes
-RECL= values in OPEN statements are not bytes but rather counts
-of some other units -- e.g., 4-character words for VMS), then you
-should insert an appropriate #define for url_Adjust at the
-beginning of open.c . For VMS Fortran, for example,
-#define url_Adjust(x) x *= 4
-would suffice.
-
-To check for transmission errors, issue the command
- make check
-This assumes you have the xsum program whose source, xsum.c,
-is distributed as part of "all from f2c/src". If you do not
-have xsum, you can obtain xsum.c by sending the following E-mail
-message to netlib@netlib.bell-labs.com
- send xsum.c from f2c/src
-
-The makefile assumes you have installed f2c.h in a standard
-place (and does not cause recompilation when f2c.h is changed);
-f2c.h comes with "all from f2c" (the source for f2c) and is
-available separately ("f2c.h from f2c").
-
-By default, Fortran I/O units 5, 6, and 0 are pre-connected to
-stdin, stdout, and stderr, respectively. You can change this
-behavior by changing f_init() in err.c to suit your needs.
-Note that f2c assumes READ(*... means READ(5... and WRITE(*...
-means WRITE(6... . Moreover, an OPEN(n,... statement that does
-not specify a file name (and does not specify STATUS='SCRATCH')
-assumes FILE='fort.n' . You can change this by editing open.c
-and endfile.c suitably.
-
-Unless you adjust the "#define MXUNIT" line in fio.h, Fortran units
-0, 1, ..., 99 are available, i.e., the highest allowed unit number
-is MXUNIT - 1.
-
-Lines protected from compilation by #ifdef Allow_TYQUAD
-are for a possible extension to 64-bit integers in which
-integer = int = 32 bits and longint = long = 64 bits.
-
-Extensions (Feb. 1993) to NAMELIST processing:
- 1. Reading a ? instead of &name (the start of a namelist) causes
-the namelist being sought to be written to stdout (unit 6);
-to omit this feature, compile rsne.c with -DNo_Namelist_Questions.
- 2. Reading the wrong namelist name now leads to an error message
-and an attempt to skip input until the right namelist name is found;
-to omit this feature, compile rsne.c with -DNo_Bad_Namelist_Skip.
- 3. Namelist writes now insert newlines before each variable; to omit
-this feature, compile xwsne.c with -DNo_Extra_Namelist_Newlines.
- 4. (Sept. 1995) When looking for the &name that starts namelist
-input, lines whose first non-blank character is something other
-than &, $, or ? are treated as comment lines and ignored, unless
-rsne.c is compiled with -DNo_Namelist_Comments.
-
-Nonstandard extension (Feb. 1993) to open: for sequential files,
-ACCESS='APPEND' (or access='anything else starting with "A" or "a"')
-causes the file to be positioned at end-of-file, so a write will
-append to the file.
-
-Some buggy Fortran programs use unformatted direct I/O to write
-an incomplete record and later read more from that record than
-they have written. For records other than the last, the unwritten
-portion of the record reads as binary zeros. The last record is
-a special case: attempting to read more from it than was written
-gives end-of-file -- which may help one find a bug. Some other
-Fortran I/O libraries treat the last record no differently than
-others and thus give no help in finding the bug of reading more
-than was written. If you wish to have this behavior, compile
-uio.c with -DPad_UDread .
-
-If you want to be able to catch write failures (e.g., due to a
-disk being full) with an ERR= specifier, compile dfe.c, due.c,
-sfe.c, sue.c, and wsle.c with -DALWAYS_FLUSH. This will lead to
-slower execution and more I/O, but should make ERR= work as
-expected, provided fflush returns an error return when its
-physical write fails.
-
-Carriage controls are meant to be interpreted by the UNIX col
-program (or a similar program). Sometimes it's convenient to use
-only ' ' as the carriage control character (normal single spacing).
-If you compile lwrite.c and wsfe.c with -DOMIT_BLANK_CC, formatted
-external output lines will have an initial ' ' quietly omitted,
-making use of the col program unnecessary with output that only
-has ' ' for carriage control.
-
-The Fortran 77 Standard leaves it up to the implementation whether
-formatted writes of floating-point numbers of absolute value < 1 have
-a zero before the decimal point. By default, libI77 omits such
-superfluous zeros, but you can cause them to appear by compiling
-lwrite.c, wref.c, and wrtfmt.c with -DWANT_LEAD_0 .
-
-If your system lacks a ranlib command, you don't need it.
-Either comment out the makefile's ranlib invocation, or install
-a harmless "ranlib" command somewhere in your PATH, such as the
-one-line shell script
-
- exit 0
-
-or (on some systems)
-
- exec /usr/bin/ar lts $1 >/dev/null
-
-Most of the routines in libI77 are support routines for Fortran
-I/O. There are a few exceptions, summarized below -- I/O related
-functions and subroutines that appear to your program as ordinary
-external Fortran routines.
-
-1. CALL FLUSH flushes all buffers.
-
-2. FTELL(i) is an INTEGER function that returns the current
- offset of Fortran unit i (or -1 if unit i is not open).
-
-3. CALL FSEEK(i, offset, whence, *errlab) attemps to move
- Fortran unit i to the specified offset: absolute offset
- if whence = 0; relative to the current offset if whence = 1;
- relative to the end of the file if whence = 2. It branches
- to label errlab if unit i is not open or if the call
- otherwise fails.
diff --git a/gcc/f/runtime/libI77/Version.c b/gcc/f/runtime/libI77/Version.c
deleted file mode 100644
index cbb63c9250a..00000000000
--- a/gcc/f/runtime/libI77/Version.c
+++ /dev/null
@@ -1,276 +0,0 @@
-static char junk[] = "\n@(#) LIBI77 VERSION pjw,dmg-mods 19970816\n";
-
-/*
-*/
-
-char __G77_LIBI77_VERSION__[] = "0.5.21";
-
-/*
-2.01 $ format added
-2.02 Coding bug in open.c repaired
-2.03 fixed bugs in lread.c (read * with negative f-format) and lio.c
- and lio.h (e-format conforming to spec)
-2.04 changed open.c and err.c (fopen and freopen respectively) to
- update to new c-library (append mode)
-2.05 added namelist capability
-2.06 allow internal list and namelist I/O
-*/
-
-/*
-close.c:
- allow upper-case STATUS= values
-endfile.c
- create fort.nnn if unit nnn not open;
- else if (file length == 0) use creat() rather than copy;
- use local copy() rather than forking /bin/cp;
- rewind, fseek to clear buffer (for no reading past EOF)
-err.c
- use neither setbuf nor setvbuf; make stderr buffered
-fio.h
- #define _bufend
-inquire.c
- upper case responses;
- omit byfile test from SEQUENTIAL=
- answer "YES" to DIRECT= for unopened file (open to debate)
-lio.c
- flush stderr, stdout at end of each stmt
- space before character strings in list output only at line start
-lio.h
- adjust LEW, LED consistent with old libI77
-lread.c
- use atof()
- allow "nnn*," when reading complex constants
-open.c
- try opening for writing when open for read fails, with
- special uwrt value (2) delaying creat() to first write;
- set curunit so error messages don't drop core;
- no file name ==> fort.nnn except for STATUS='SCRATCH'
-rdfmt.c
- use atof(); trust EOF == end-of-file (so don't read past
- end-of-file after endfile stmt)
-sfe.c
- flush stderr, stdout at end of each stmt
-wrtfmt.c:
- use upper case
- put wrt_E and wrt_F into wref.c, use sprintf()
- rather than ecvt() and fcvt() [more accurate on VAX]
-*/
-
-/* 16 Oct. 1988: uwrt = 3 after write, rewind, so close won't zap the file. */
-
-/* 10 July 1989: change _bufend to buf_end in fio.h, wsfe.c, wrtfmt.c */
-
-/* 28 Nov. 1989: corrections for IEEE and Cray arithmetic */
-/* 29 Nov. 1989: change various int return types to long for f2c */
-/* 30 Nov. 1989: various types from f2c.h */
-/* 6 Dec. 1989: types corrected various places */
-/* 19 Dec. 1989: make iostat= work right for internal I/O */
-/* 8 Jan. 1990: add rsne, wsne -- routines for handling NAMELIST */
-/* 28 Jan. 1990: have NAMELIST read treat $ as &, general white
- space as blank */
-/* 27 Mar. 1990: change an = to == in rd_L(rdfmt.c) so formatted reads
- of logical values reject letters other than fFtT;
- have nowwriting reset cf */
-/* 14 Aug. 1990: adjust lread.c to treat tabs as spaces in list input */
-/* 17 Aug. 1990: adjust open.c to recognize blank='Z...' as well as
- blank='z...' when reopening an open file */
-/* 30 Aug. 1990: prevent embedded blanks in list output of complex values;
- omit exponent field in list output of values of
- magnitude between 10 and 1e8; prevent writing stdin
- and reading stdout or stderr; don't close stdin, stdout,
- or stderr when reopening units 5, 6, 0. */
-/* 18 Sep. 1990: add component udev to unit and consider old == new file
- iff uinode and udev values agree; use stat rather than
- access to check existence of file (when STATUS='OLD')*/
-/* 2 Oct. 1990: adjust rewind.c so two successive rewinds after a write
- don't clobber the file. */
-/* 9 Oct. 1990: add #include "fcntl.h" to endfile.c, err.c, open.c;
- adjust g_char in util.c for segmented memories. */
-/* 17 Oct. 1990: replace abort() and _cleanup() with calls on
- sig_die(...,1) (defined in main.c). */
-/* 5 Nov. 1990: changes to open.c: complain if new= is specified and the
- file already exists; allow file= to be omitted in open stmts
- and allow status='replace' (Fortran 90 extensions). */
-/* 11 Dec. 1990: adjustments for POSIX. */
-/* 15 Jan. 1991: tweak i_ungetc in rsli.c to allow reading from
- strings in read-only memory. */
-/* 25 Apr. 1991: adjust namelist stuff to work with f2c -i2 */
-/* 26 Apr. 1991: fix some bugs with NAMELIST read of multi-dim. arrays */
-/* 16 May 1991: increase LEFBL in lio.h to bypass NeXT bug */
-/* 17 Oct. 1991: change type of length field in sequential unformatted
- records from int to long (for systems where sizeof(int)
- can vary, depending on the compiler or compiler options). */
-/* 14 Nov. 1991: change uint to Uint in fmt.h, rdfmt.c, wrtfmt.c. */
-/* 25 Nov. 1991: change uint to Uint in lwrite.c; change sizeof(int) to
- sizeof(uioint) in fseeks in sue.c (missed on 17 Oct.). */
-/* 1 Dec. 1991: uio.c: add test for read failure (seq. unformatted reads);
- adjust an error return from EOF to off end of record */
-/* 12 Dec. 1991: rsli.c: fix bug with internal list input that caused
- the last character of each record to be ignored.
- iio.c: adjust error message in internal formatted
- input from "end-of-file" to "off end of record" if
- the format specifies more characters than the
- record contains. */
-/* 17 Jan. 1992: lread.c, rsne.c: in list and namelist input,
- treat "r* ," and "r*," alike (where r is a
- positive integer constant), and fix a bug in
- handling null values following items with repeat
- counts (e.g., 2*1,,3); for namelist reading
- of a numeric array, allow a new name-value subsequence
- to terminate the current one (as though the current
- one ended with the right number of null values).
- lio.h, lwrite.c: omit insignificant zeros in
- list and namelist output. To get the old
- behavior, compile with -DOld_list_output . */
-/* 18 Jan. 1992: make list output consistent with F format by
- printing .1 rather than 0.1 (introduced yesterday). */
-/* 3 Feb. 1992: rsne.c: fix namelist read bug that caused the
- character following a comma to be ignored. */
-/* 19 May 1992: adjust iio.c, ilnw.c, rdfmt.c and rsli.c to make err=
- work with internal list and formatted I/O. */
-/* 18 July 1992: adjust rsne.c to allow namelist input to stop at
- an & (e.g. &end). */
-/* 23 July 1992: switch to ANSI prototypes unless KR_headers is #defined ;
- recognize Z format (assuming 8-bit bytes). */
-/* 14 Aug. 1992: tweak wrt_E in wref.c to avoid -NaN */
-/* 23 Oct. 1992: Supply missing l_eof = 0 assignment to s_rsne() in rsne.c
- (so end-of-file on other files won't confuse namelist
- reads of external files). Prepend f__ to external
- names that are only of internal interest to lib[FI]77. */
-/* 1 Feb. 1993: backspace.c: fix bug that bit when last char of 2nd
- buffer == '\n'.
- endfile.c: guard against tiny L_tmpnam; close and reopen
- files in t_runc().
- lio.h: lengthen LINTW (buffer size in lwrite.c).
- err.c, open.c: more prepending of f__ (to [rw]_mode). */
-/* 5 Feb. 1993: tweaks to NAMELIST: rsne.c: ? prints the namelist being
- sought; namelists of the wrong name are skipped (after
- an error message; xwsne.c: namelist writes have a
- newline before each new variable.
- open.c: ACCESS='APPEND' positions sequential files
- at EOF (nonstandard extension -- that doesn't require
- changing data structures). */
-/* 9 Feb. 1993: Change some #ifdef MSDOS lines to #ifdef NON_UNIX_STDIO.
- err.c: under NON_UNIX_STDIO, avoid close(creat(name,0666))
- when the unit has another file descriptor for name. */
-/* 4 March 1993: err.c, open.c: take declaration of fdopen from rawio.h;
- open.c: always give f__w_mode[] 4 elements for use
- in t_runc (in endfile.c -- for change of 1 Feb. 1993). */
-/* 6 March 1993: uio.c: adjust off-end-of-record test for sequential
- unformatted reads to respond to err= rather than end=. */
-/* 12 March 1993: various tweaks for C++ */
-/* 6 April 1993: adjust error returns for formatted inputs to flush
- the current input line when err=label is specified.
- To restore the old behavior (input left mid-line),
- either adjust the #definition of errfl in fio.h or
- omit the invocation of f__doend in err__fl (in err.c). */
-/* 23 June 1993: iio.c: fix bug in format reversions for internal writes. */
-/* 5 Aug. 1993: lread.c: fix bug in handling repetition counts for
- logical data (during list or namelist input).
- Change struct f__syl to struct syl (for buggy compilers). */
-/* 7 Aug. 1993: lread.c: fix bug in namelist reading of incomplete
- logical arrays. */
-/* 9 Aug. 1993: lread.c: fix bug in namelist reading of an incomplete
- array of numeric data followed by another namelist
- item whose name starts with 'd', 'D', 'e', or 'E'. */
-/* 8 Sept. 1993: open.c: protect #include "sys/..." with
- #ifndef NON_UNIX_STDIO; Version date not changed. */
-/* 10 Nov. 1993: backspace.c: add nonsense for #ifdef MSDOS */
-/* 8 Dec. 1993: iio.c: adjust internal formatted reads to treat
- short records as though padded with blanks
- (rather than causing an "off end of record" error). */
-/* 22 Feb. 1994: lread.c: check that realloc did not return NULL. */
-/* 6 June 1994: Under NON_UNIX_STDIO, use binary mode for direct
- formatted files (avoiding any confusion regarding \n). */
-/* 5 July 1994: Fix bug (introduced 6 June 1994?) in reopening files
- under NON_UNIX_STDIO. */
-/* 6 July 1994: wref.c: protect with #ifdef GOOD_SPRINTF_EXPONENT an
- optimization that requires exponents to have 2 digits
- when 2 digits suffice.
- lwrite.c wsfe.c (list and formatted external output):
- omit ' ' carriage-control when compiled with
- -DOMIT_BLANK_CC . Off-by-one bug fixed in character
- count for list output of character strings.
- Omit '.' in list-directed printing of Nan, Infinity. */
-/* 12 July 1994: wrtfmt.c: under G11.4, write 0. as " .0000 " rather
- than " .0000E+00". */
-/* 3 Aug. 1994: lwrite.c: do not insert a newline when appending an
- oversize item to an empty line. */
-/* 12 Aug. 1994: rsli.c rsne.c: fix glitch (reset nml_read) that kept
- ERR= (in list- or format-directed input) from working
- after a NAMELIST READ. */
-/* 7 Sept. 1994: typesize.c: adjust to allow types LOGICAL*1, LOGICAL*2,
- INTEGER*1, and (under -DAllow_TYQUAD) INTEGER*8
- in NAMELISTs. */
-/* 6 Oct. 1994: util.c: omit f__mvgbt, as it is never used. */
-/* 2 Nov. 1994: add #ifdef ALWAYS_FLUSH logic. */
-/* 26 Jan. 1995: wref.c: fix glitch in printing the exponent of 0 when
- GOOD_SPRINTF_EXPONENT is not #defined. */
-/* 24 Feb. 1995: iio.c: z_getc: insert (unsigned char *) to allow
- internal reading of characters with high-bit set
- (on machines that sign-extend characters). */
-/* 14 March 1995:lread.c and rsfe.c: adjust s_rsle and s_rsfe to
- check for end-of-file (to prevent infinite loops
- with empty read statements). */
-/* 26 May 1995: iio.c: z_wnew: fix bug in handling T format items
- in internal writes whose last item is written to
- an earlier position than some previous item. */
-/* 29 Aug. 1995: backspace.c: adjust MSDOS logic. */
-/* 6 Sept. 1995: Adjust namelist input to treat a subscripted name
- whose subscripts do not involve colons similarly
- to the name without a subscript: accept several
- values, stored in successive elements starting at
- the indicated subscript. Adjust namelist output
- to quote character strings (avoiding confusion with
- arrays of character strings). Adjust f_init calls
- for people who don't use libF77's main(); now open and
- namelist read statements invoke f_init if needed. */
-/* 7 Sept. 1995: Fix some bugs with -DAllow_TYQUAD (for integer*8).
- Add -DNo_Namelist_Comments lines to rsne.c. */
-/* 5 Oct. 1995: wrtfmt.c: fix bug with t editing (f__cursor was not
- always zeroed in mv_cur). */
-/* 11 Oct. 1995: move defs of f__hiwater, f__svic, f__icptr from wrtfmt.c
- to err.c */
-/* 15 Mar. 1996: lread.c, rsfe.c: honor END= in READ stmt with empty iolist */
-
-/* 13 May 1996: add ftell_.c and fseek_.c */
-/* 9 June 1996: Adjust rsli.c and lread.c so internal list input with
- too few items in the input string will honor end= . */
-/* 12 Sept. 1995:fmtlib.c: fix glitch in printing the most negative integer. */
-/* 25 Sept. 1995:fmt.h: for formatted writes of negative integer*1 values,
- make ic signed on ANSI systems. If formatted writes of
- integer*1 values trouble you when using a K&R C compiler,
- switch to an ANSI compiler or use a compiler flag that
- makes characters signed. */
-/* 9 Dec. 1996: d[fu]e.c, err.c: complain about non-positive rec=
- in direct read and write statements.
- ftell_.c: change param "unit" to "Unit" for -DKR_headers. */
-/* 26 Feb. 1997: ftell_.c: on systems that define SEEK_SET, etc., use
- SEEK_SET, SEEK_CUR, SEEK_END for *whence = 0, 1, 2. */
-/* 7 Apr. 1997: fmt.c: adjust to complain at missing numbers in formats
- (but still treat missing ".nnn" as ".0"). */
-/* 11 Apr. 1997: err.c: attempt to make stderr line buffered rather
- than fully buffered. (Buffering is needed for format
- items T and TR.) */
-/* 27 May 1997: ftell_.c: fix typo (that caused the third argument to be
- treated as 2 on some systems). */
-/* 5 Aug. 1997: lread.c: adjust to accord with a change to the Fortran 8X
- draft (in 1990 or 1991) that rescinded permission to elide
- quote marks in namelist input of character data; compile
- with -DF8X_NML_ELIDE_QUOTES to get the old behavior.
- wrtfmt.o: wrt_G: tweak to print the right number of 0's
- for zero under G format. */
-/* 16 Aug. 1997: iio.c: fix bug in internal writes to an array of character
- strings that sometimes caused one more array element than
- required by the format to be blank-filled. Example:
- format(1x). */
-/* 17 June 1997: detect recursive I/O and call f__fatal explaining it. */
-
-#include <stdio.h>
-
-void
-g77__ivers__ ()
-{
- fprintf (stderr, "__G77_LIBI77_VERSION__: %s", __G77_LIBI77_VERSION__);
- fputs (junk, stderr);
-}
diff --git a/gcc/f/runtime/libI77/backspace.c b/gcc/f/runtime/libI77/backspace.c
deleted file mode 100644
index 8413d5f6821..00000000000
--- a/gcc/f/runtime/libI77/backspace.c
+++ /dev/null
@@ -1,101 +0,0 @@
-#include <sys/types.h>
-#include "f2c.h"
-#include "fio.h"
-#ifdef KR_headers
-integer f_back(a) alist *a;
-#else
-integer f_back(alist *a)
-#endif
-{ unit *b;
- int i, n, ndec;
-#if defined (MSDOS) && !defined (GO32)
- int j, k;
- long w, z;
-#endif
- long x, y;
- char buf[32];
- if (f__init & 2)
- f__fatal (131, "I/O recursion");
- if(a->aunit >= MXUNIT || a->aunit < 0)
- err(a->aerr,101,"backspace");
- b= &f__units[a->aunit];
- if(b->useek==0) err(a->aerr,106,"backspace");
- if(b->ufd==NULL) {
- fk_open(1, 1, a->aunit);
- return(0);
- }
- if(b->uend==1)
- { b->uend=0;
- return(0);
- }
- if(b->uwrt) {
- (void) t_runc(a);
- if (f__nowreading(b))
- err(a->aerr,errno,"backspace");
- }
- if(b->url>0)
- {
- x=ftell(b->ufd);
- y = x % b->url;
- if(y == 0) x--;
- x /= b->url;
- x *= b->url;
- (void) fseek(b->ufd,x,SEEK_SET);
- return(0);
- }
-
- if(b->ufmt==0)
- { (void) fseek(b->ufd,-(long)sizeof(int),SEEK_CUR);
- (void) fread((char *)&n,sizeof(int),1,b->ufd);
- (void) fseek(b->ufd,-(long)n-2*sizeof(int),SEEK_CUR);
- return(0);
- }
-#if defined (MSDOS) && !defined (GO32)
- w = -1;
-#endif
- for(ndec = 1;; ndec = 0)
- {
- y = x = ftell(b->ufd);
- if(x < sizeof(buf))
- x = 0;
- else
- x -= sizeof(buf);
- (void) fseek(b->ufd,x,SEEK_SET);
- n=fread(buf,1,(size_t)(y-x), b->ufd);
- for(i = n - ndec; --i >= 0; )
- {
- if(buf[i]!='\n') continue;
-#if defined (MSDOS) && !defined (GO32)
- for(j = k = 0; j <= i; j++)
- if (buf[j] == '\n')
- k++;
- fseek(b->ufd,x,SEEK_SET);
- for(;;)
- if (getc(b->ufd) == '\n') {
- if ((z = ftell(b->ufd)) >= y && ndec) {
- if (w == -1)
- goto break2;
- break;
- }
- if (--k <= 0)
- return 0;
- w = z;
- }
- fseek(b->ufd, w, SEEK_SET);
-#else
- fseek(b->ufd,(long)(i+1-n),SEEK_CUR);
-#endif
- return(0);
- }
-#if defined (MSDOS) && !defined (GO32)
- break2:
-#endif
- if(x==0)
- {
- (void) fseek(b->ufd, 0L, SEEK_SET);
- return(0);
- }
- else if(n<=0) err(a->aerr,(EOF),"backspace");
- (void) fseek(b->ufd, x, SEEK_SET);
- }
-}
diff --git a/gcc/f/runtime/libI77/close.c b/gcc/f/runtime/libI77/close.c
deleted file mode 100644
index 691f931a3c0..00000000000
--- a/gcc/f/runtime/libI77/close.c
+++ /dev/null
@@ -1,99 +0,0 @@
-#include "f2c.h"
-#include "fio.h"
-#ifdef KR_headers
-integer f_clos(a) cllist *a;
-#else
-#undef abs
-#undef min
-#undef max
-#include <stdlib.h>
-#ifdef NON_UNIX_STDIO
-#ifndef unlink
-#define unlink remove
-#endif
-#else
-#if defined (MSDOS) && !defined (GO32)
-#include "io.h"
-#else
-#ifdef __cplusplus
-extern "C" int unlink(const char*);
-#else
-extern int unlink(const char*);
-#endif
-#endif
-#endif
-
-integer f_clos(cllist *a)
-#endif
-{ unit *b;
-
- if (f__init & 2)
- f__fatal (131, "I/O recursion");
- if(a->cunit >= MXUNIT) return(0);
- b= &f__units[a->cunit];
- if(b->ufd==NULL)
- goto done;
- if (!a->csta)
- if (b->uscrtch == 1)
- goto Delete;
- else
- goto Keep;
- switch(*a->csta) {
- default:
- Keep:
- case 'k':
- case 'K':
- if(b->uwrt == 1)
- t_runc((alist *)a);
- if(b->ufnm) {
- fclose(b->ufd);
- free(b->ufnm);
- }
- break;
- case 'd':
- case 'D':
- Delete:
- if(b->ufnm) {
- fclose(b->ufd);
- unlink(b->ufnm); /*SYSDEP*/
- free(b->ufnm);
- }
- }
- b->ufd=NULL;
- done:
- b->uend=0;
- b->ufnm=NULL;
- return(0);
- }
- void
-#ifdef KR_headers
-f_exit()
-#else
-f_exit(void)
-#endif
-{ int i;
- static cllist xx;
- if (! (f__init & 1))
- return; /* Not initialized, so no open units. */
- if (!xx.cerr) {
- xx.cerr=1;
- xx.csta=NULL;
- for(i=0;i<MXUNIT;i++)
- {
- xx.cunit=i;
- (void) f_clos(&xx);
- }
- }
-}
- int
-#ifdef KR_headers
-G77_flush_0 ()
-#else
-G77_flush_0 (void)
-#endif
-{ int i;
- for(i=0;i<MXUNIT;i++)
- if(f__units[i].ufd != NULL && f__units[i].uwrt)
- fflush(f__units[i].ufd);
-return 0;
-}
diff --git a/gcc/f/runtime/libI77/dfe.c b/gcc/f/runtime/libI77/dfe.c
deleted file mode 100644
index e229e0e3356..00000000000
--- a/gcc/f/runtime/libI77/dfe.c
+++ /dev/null
@@ -1,156 +0,0 @@
-#include "f2c.h"
-#include "fio.h"
-#include "fmt.h"
-
-y_rsk(Void)
-{
- if(f__curunit->uend || f__curunit->url <= f__recpos
- || f__curunit->url == 1) return 0;
- do {
- getc(f__cf);
- } while(++f__recpos < f__curunit->url);
- return 0;
-}
-y_getc(Void)
-{
- int ch;
- if(f__curunit->uend) return(-1);
- if((ch=getc(f__cf))!=EOF)
- {
- f__recpos++;
- if(f__curunit->url>=f__recpos ||
- f__curunit->url==1)
- return(ch);
- else return(' ');
- }
- if(feof(f__cf))
- {
- f__curunit->uend=1;
- errno=0;
- return(-1);
- }
- err(f__elist->cierr,errno,"readingd");
-}
-#ifdef KR_headers
-y_putc(c)
-#else
-y_putc(int c)
-#endif
-{
- f__recpos++;
- if(f__recpos <= f__curunit->url || f__curunit->url==1)
- putc(c,f__cf);
- else
- err(f__elist->cierr,110,"dout");
- return(0);
-}
-y_rev(Void)
-{ /*what about work done?*/
- if(f__curunit->url==1 || f__recpos==f__curunit->url)
- return(0);
- while(f__recpos<f__curunit->url)
- (*f__putn)(' ');
- f__recpos=0;
- return(0);
-}
-y_err(Void)
-{
- err(f__elist->cierr, 110, "dfe");
-}
-
-y_newrec(Void)
-{
- if(f__curunit->url == 1 || f__recpos == f__curunit->url) {
- f__hiwater = f__recpos = f__cursor = 0;
- return(1);
- }
- if(f__hiwater > f__recpos)
- f__recpos = f__hiwater;
- y_rev();
- f__hiwater = f__cursor = 0;
- return(1);
-}
-
-#ifdef KR_headers
-c_dfe(a) cilist *a;
-#else
-c_dfe(cilist *a)
-#endif
-{
- f__sequential=0;
- f__formatted=f__external=1;
- f__elist=a;
- f__cursor=f__scale=f__recpos=0;
- if(a->ciunit>MXUNIT || a->ciunit<0)
- err(a->cierr,101,"startchk");
- f__curunit = &f__units[a->ciunit];
- if(f__curunit->ufd==NULL && fk_open(DIR,FMT,a->ciunit))
- err(a->cierr,104,"dfe");
- f__cf=f__curunit->ufd;
- if(!f__curunit->ufmt) err(a->cierr,102,"dfe");
- if(!f__curunit->useek) err(a->cierr,104,"dfe");
- f__fmtbuf=a->cifmt;
- if(a->cirec <= 0)
- err(a->cierr,130,"dfe");
- (void) fseek(f__cf,(long)f__curunit->url * (a->cirec-1),SEEK_SET);
- f__curunit->uend = 0;
- return(0);
-}
-#ifdef KR_headers
-integer s_rdfe(a) cilist *a;
-#else
-integer s_rdfe(cilist *a)
-#endif
-{
- int n;
- if(f__init != 1) f_init();
- f__init = 3;
- f__reading=1;
- if(n=c_dfe(a))return(n);
- if(f__curunit->uwrt && f__nowreading(f__curunit))
- err(a->cierr,errno,"read start");
- f__getn = y_getc;
- f__doed = rd_ed;
- f__doned = rd_ned;
- f__dorevert = f__donewrec = y_err;
- f__doend = y_rsk;
- if(pars_f(f__fmtbuf)<0)
- err(a->cierr,100,"read start");
- fmt_bg();
- return(0);
-}
-#ifdef KR_headers
-integer s_wdfe(a) cilist *a;
-#else
-integer s_wdfe(cilist *a)
-#endif
-{
- int n;
- if(f__init != 1) f_init();
- f__init = 3;
- f__reading=0;
- if(n=c_dfe(a)) return(n);
- if(f__curunit->uwrt != 1 && f__nowwriting(f__curunit))
- err(a->cierr,errno,"startwrt");
- f__putn = y_putc;
- f__doed = w_ed;
- f__doned= w_ned;
- f__dorevert = y_err;
- f__donewrec = y_newrec;
- f__doend = y_rev;
- if(pars_f(f__fmtbuf)<0)
- err(a->cierr,100,"startwrt");
- fmt_bg();
- return(0);
-}
-integer e_rdfe(Void)
-{
- f__init = 1;
- (void) en_fio();
- return(0);
-}
-integer e_wdfe(Void)
-{
- f__init = 1;
- return en_fio();
-}
diff --git a/gcc/f/runtime/libI77/dolio.c b/gcc/f/runtime/libI77/dolio.c
deleted file mode 100644
index 4b5a2ca6588..00000000000
--- a/gcc/f/runtime/libI77/dolio.c
+++ /dev/null
@@ -1,20 +0,0 @@
-#include "f2c.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#ifdef KR_headers
-extern int (*f__lioproc)();
-
-integer do_lio(type,number,ptr,len) ftnint *number,*type; char *ptr; ftnlen len;
-#else
-extern int (*f__lioproc)(ftnint*, char*, ftnlen, ftnint);
-
-integer do_lio(ftnint *type, ftnint *number, char *ptr, ftnlen len)
-#endif
-{
- return((*f__lioproc)(number,ptr,len,*type));
-}
-#ifdef __cplusplus
- }
-#endif
diff --git a/gcc/f/runtime/libI77/due.c b/gcc/f/runtime/libI77/due.c
deleted file mode 100644
index dec58657b50..00000000000
--- a/gcc/f/runtime/libI77/due.c
+++ /dev/null
@@ -1,73 +0,0 @@
-#include "f2c.h"
-#include "fio.h"
-
-#ifdef KR_headers
-c_due(a) cilist *a;
-#else
-c_due(cilist *a)
-#endif
-{
- if(f__init != 1) f_init();
- f__init = 3;
- if(a->ciunit>=MXUNIT || a->ciunit<0)
- err(a->cierr,101,"startio");
- f__sequential=f__formatted=f__recpos=0;
- f__external=1;
- f__curunit = &f__units[a->ciunit];
- f__elist=a;
- if(f__curunit->ufd==NULL && fk_open(DIR,UNF,a->ciunit) ) err(a->cierr,104,"due");
- f__cf=f__curunit->ufd;
- if(f__curunit->ufmt) err(a->cierr,102,"cdue");
- if(!f__curunit->useek) err(a->cierr,104,"cdue");
- if(f__curunit->ufd==NULL) err(a->cierr,114,"cdue");
- if(a->cirec <= 0)
- err(a->cierr,130,"due");
- (void) fseek(f__cf,(long)(a->cirec-1)*f__curunit->url,SEEK_SET);
- f__curunit->uend = 0;
- return(0);
-}
-#ifdef KR_headers
-integer s_rdue(a) cilist *a;
-#else
-integer s_rdue(cilist *a)
-#endif
-{
- int n;
- f__reading=1;
- if(n=c_due(a)) return(n);
- if(f__curunit->uwrt && f__nowreading(f__curunit))
- err(a->cierr,errno,"read start");
- return(0);
-}
-#ifdef KR_headers
-integer s_wdue(a) cilist *a;
-#else
-integer s_wdue(cilist *a)
-#endif
-{
- int n;
- f__reading=0;
- if(n=c_due(a)) return(n);
- if(f__curunit->uwrt != 1 && f__nowwriting(f__curunit))
- err(a->cierr,errno,"write start");
- return(0);
-}
-integer e_rdue(Void)
-{
- f__init = 1;
- if(f__curunit->url==1 || f__recpos==f__curunit->url)
- return(0);
- (void) fseek(f__cf,(long)(f__curunit->url-f__recpos),SEEK_CUR);
- if(ftell(f__cf)%f__curunit->url)
- err(f__elist->cierr,200,"syserr");
- return(0);
-}
-integer e_wdue(Void)
-{
- f__init = 1;
-#ifdef ALWAYS_FLUSH
- if (fflush(f__cf))
- err(f__elist->cierr,errno,"write end");
-#endif
- return(e_rdue());
-}
diff --git a/gcc/f/runtime/libI77/endfile.c b/gcc/f/runtime/libI77/endfile.c
deleted file mode 100644
index 6050d1e3b30..00000000000
--- a/gcc/f/runtime/libI77/endfile.c
+++ /dev/null
@@ -1,195 +0,0 @@
-#include "f2c.h"
-#include "fio.h"
-#include <sys/types.h>
-#include "rawio.h"
-
-#ifdef KR_headers
-extern char *strcpy();
-#else
-#undef abs
-#undef min
-#undef max
-#include <stdlib.h>
-#include <string.h>
-#endif
-
-#ifdef NON_UNIX_STDIO
-#ifndef unlink
-#define unlink remove
-#endif
-#else
-#if defined (MSDOS) && !defined (GO32)
-#include "io.h"
-#endif
-#endif
-
-#ifdef NON_UNIX_STDIO
-extern char *f__r_mode[], *f__w_mode[];
-#endif
-
-#ifdef KR_headers
-integer f_end(a) alist *a;
-#else
-integer f_end(alist *a)
-#endif
-{
- unit *b;
- if (f__init & 2)
- f__fatal (131, "I/O recursion");
- if(a->aunit>=MXUNIT || a->aunit<0) err(a->aerr,101,"endfile");
- b = &f__units[a->aunit];
- if(b->ufd==NULL) {
- char nbuf[10];
- (void) sprintf(nbuf,"fort.%ld",a->aunit);
-#ifdef NON_UNIX_STDIO
- { FILE *tf;
- if (tf = fopen(nbuf, f__w_mode[0]))
- fclose(tf);
- }
-#else
- close(creat(nbuf, 0666));
-#endif
- return(0);
- }
- b->uend=1;
- return(b->useek ? t_runc(a) : 0);
-}
-
- static int
-#ifdef NON_UNIX_STDIO
-#ifdef KR_headers
-copy(from, len, to) char *from, *to; register long len;
-#else
-copy(FILE *from, register long len, FILE *to)
-#endif
-{
- int k, len1;
- char buf[BUFSIZ];
-
- while(fread(buf, len1 = len > BUFSIZ ? BUFSIZ : (int)len, 1, from)) {
- if (!fwrite(buf, len1, 1, to))
- return 1;
- if ((len -= len1) <= 0)
- break;
- }
- return 0;
- }
-#else
-#ifdef KR_headers
-copy(from, len, to) char *from, *to; register long len;
-#else
-copy(char *from, register long len, char *to)
-#endif
-{
- register size_t n;
- int k, rc = 0, tmp;
- char buf[BUFSIZ];
-
- if ((k = open(from, O_RDONLY)) < 0)
- return 1;
- if ((tmp = creat(to,0666)) < 0)
- return 1;
- while((n = read(k, buf, (size_t) (len > BUFSIZ ? BUFSIZ : (int)len))) > 0) {
- if (write(tmp, buf, n) != n)
- { rc = 1; break; }
- if ((len -= n) <= 0)
- break;
- }
- close(k);
- close(tmp);
- return n < 0 ? 1 : rc;
- }
-#endif
-
-#ifndef L_tmpnam
-#define L_tmpnam 16
-#endif
-
- int
-#ifdef KR_headers
-t_runc(a) alist *a;
-#else
-t_runc(alist *a)
-#endif
-{
- char nm[L_tmpnam+12]; /* extra space in case L_tmpnam is tiny */
- long loc, len;
- unit *b;
-#ifdef NON_UNIX_STDIO
- FILE *bf, *tf;
-#else
- FILE *bf;
-#endif
- int rc = 0;
-
- b = &f__units[a->aunit];
- if(b->url)
- return(0); /*don't truncate direct files*/
- loc=ftell(bf = b->ufd);
- fseek(bf,0L,SEEK_END);
- len=ftell(bf);
- if (loc >= len || b->useek == 0 || b->ufnm == NULL)
- return(0);
-#ifdef NON_UNIX_STDIO
- fclose(b->ufd);
-#else
- rewind(b->ufd); /* empty buffer */
-#endif
- if (!loc) {
-#ifdef NON_UNIX_STDIO
- if (!(bf = fopen(b->ufnm, f__w_mode[b->ufmt])))
-#else
- if (close(creat(b->ufnm,0666)))
-#endif
- rc = 1;
- if (b->uwrt)
- b->uwrt = 1;
- goto done;
- }
-#ifdef _POSIX_SOURCE
- tmpnam(nm);
-#else
- strcpy(nm,"tmp.FXXXXXX");
- mktemp(nm);
-#endif
-#ifdef NON_UNIX_STDIO
- if (!(bf = fopen(b->ufnm, f__r_mode[0]))) {
- bad:
- rc = 1;
- goto done;
- }
- if (!(tf = fopen(nm, f__w_mode[0])))
- goto bad;
- if (copy(bf, loc, tf)) {
- bad1:
- rc = 1;
- goto done1;
- }
- if (!(bf = freopen(b->ufnm, f__w_mode[0], bf)))
- goto bad1;
- if (!(tf = freopen(nm, f__r_mode[0], tf)))
- goto bad1;
- if (copy(tf, loc, bf))
- goto bad1;
- if (f__w_mode[0] != f__w_mode[b->ufmt]) {
- if (!(bf = freopen(b->ufnm, f__w_mode[b->ufmt|2], bf)))
- goto bad1;
- fseek(bf, loc, SEEK_SET);
- }
-done1:
- fclose(tf);
- unlink(nm);
-done:
- f__cf = b->ufd = bf;
-#else
- if (copy(b->ufnm, loc, nm)
- || copy(nm, loc, b->ufnm))
- rc = 1;
- unlink(nm);
- fseek(b->ufd, loc, SEEK_SET);
-done:
-#endif
- if (rc)
- err(a->aerr,111,"endfile");
- return 0;
- }
diff --git a/gcc/f/runtime/libI77/err.c b/gcc/f/runtime/libI77/err.c
deleted file mode 100644
index 1d0188737be..00000000000
--- a/gcc/f/runtime/libI77/err.c
+++ /dev/null
@@ -1,298 +0,0 @@
-#ifndef NON_UNIX_STDIO
-#include <sys/types.h>
-#include <sys/stat.h>
-#endif
-#include "f2c.h"
-#if defined (NON_UNIX_STDIO) || defined (MISSING_FILE_ELEMS)
-#ifdef KR_headers
-extern char *malloc();
-#else
-#undef abs
-#undef min
-#undef max
-#include <stdlib.h>
-#endif
-#endif
-#include "fio.h"
-#include "fmt.h" /* for struct syl */
-#include "rawio.h" /* for fcntl.h, fdopen */
-
-/*global definitions*/
-unit f__units[MXUNIT]; /*unit table*/
-int f__init; /*bit 0: set after initializations;
- bit 1: set during I/O involving returns to
- caller of library (or calls to user code)*/
-cilist *f__elist; /*active external io list*/
-icilist *f__svic; /*active internal io list*/
-flag f__reading; /*1 if reading, 0 if writing*/
-flag f__cplus,f__cblank;
-char *f__fmtbuf;
-flag f__external; /*1 if external io, 0 if internal */
-#ifdef KR_headers
-int (*f__doed)(),(*f__doned)();
-int (*f__doend)(),(*f__donewrec)(),(*f__dorevert)();
-int (*f__getn)(),(*f__putn)(); /*for formatted io*/
-#else
-int (*f__getn)(void),(*f__putn)(int); /*for formatted io*/
-int (*f__doed)(struct syl*, char*, ftnlen),(*f__doned)(struct syl*);
-int (*f__dorevert)(void),(*f__donewrec)(void),(*f__doend)(void);
-#endif
-flag f__sequential; /*1 if sequential io, 0 if direct*/
-flag f__formatted; /*1 if formatted io, 0 if unformatted*/
-FILE *f__cf; /*current file*/
-unit *f__curunit; /*current unit*/
-int f__recpos; /*place in current record*/
-int f__cursor, f__hiwater, f__scale;
-char *f__icptr;
-
-/*error messages*/
-char *F_err[] =
-{
- "error in format", /* 100 */
- "illegal unit number", /* 101 */
- "formatted io not allowed", /* 102 */
- "unformatted io not allowed", /* 103 */
- "direct io not allowed", /* 104 */
- "sequential io not allowed", /* 105 */
- "can't backspace file", /* 106 */
- "null file name", /* 107 */
- "can't stat file", /* 108 */
- "unit not connected", /* 109 */
- "off end of record", /* 110 */
- "truncation failed in endfile", /* 111 */
- "incomprehensible list input", /* 112 */
- "out of free space", /* 113 */
- "unit not connected", /* 114 */
- "read unexpected character", /* 115 */
- "bad logical input field", /* 116 */
- "bad variable type", /* 117 */
- "bad namelist name", /* 118 */
- "variable not in namelist", /* 119 */
- "no end record", /* 120 */
- "variable count incorrect", /* 121 */
- "subscript for scalar variable", /* 122 */
- "invalid array section", /* 123 */
- "substring out of bounds", /* 124 */
- "subscript out of bounds", /* 125 */
- "can't read file", /* 126 */
- "can't write file", /* 127 */
- "'new' file exists", /* 128 */
- "can't append to file", /* 129 */
- "non-positive record number", /* 130 */
- "I/O started while already doing I/O" /* 131 */
-};
-#define MAXERR (sizeof(F_err)/sizeof(char *)+100)
-
-#ifdef KR_headers
-f__canseek(f) FILE *f; /*SYSDEP*/
-#else
-f__canseek(FILE *f) /*SYSDEP*/
-#endif
-{
-#ifdef NON_UNIX_STDIO
- return !isatty(fileno(f));
-#else
- struct stat x;
-
- if (fstat(fileno(f),&x) < 0)
- return(0);
-#ifdef S_IFMT
- switch(x.st_mode & S_IFMT) {
- case S_IFDIR:
- case S_IFREG:
- if(x.st_nlink > 0) /* !pipe */
- return(1);
- else
- return(0);
- case S_IFCHR:
- if(isatty(fileno(f)))
- return(0);
- return(1);
-#ifdef S_IFBLK
- case S_IFBLK:
- return(1);
-#endif
- }
-#else
-#ifdef S_ISDIR
- /* POSIX version */
- if (S_ISREG(x.st_mode) || S_ISDIR(x.st_mode)) {
- if(x.st_nlink > 0) /* !pipe */
- return(1);
- else
- return(0);
- }
- if (S_ISCHR(x.st_mode)) {
- if(isatty(fileno(f)))
- return(0);
- return(1);
- }
- if (S_ISBLK(x.st_mode))
- return(1);
-#else
- Help! How does fstat work on this system?
-#endif
-#endif
- return(0); /* who knows what it is? */
-#endif
-}
-
- void
-#ifdef KR_headers
-f__fatal(n,s) char *s;
-#else
-f__fatal(int n, char *s)
-#endif
-{
- static int dead = 0;
-
- if(n<100 && n>=0) perror(s); /*SYSDEP*/
- else if(n >= (int)MAXERR || n < -1)
- { fprintf(stderr,"%s: illegal error number %d\n",s,n);
- }
- else if(n == -1) fprintf(stderr,"%s: end of file\n",s);
- else
- fprintf(stderr,"%s: %s\n",s,F_err[n-100]);
- if (dead) {
- fprintf (stderr, "(libf2c f__fatal already called, aborting.)");
- abort();
- }
- dead = 1;
- if (f__init & 1) {
- if (f__curunit) {
- fprintf(stderr,"apparent state: unit %d ",f__curunit-f__units);
- fprintf(stderr, f__curunit->ufnm ? "named %s\n" : "(unnamed)\n",
- f__curunit->ufnm);
- }
- else
- fprintf(stderr,"apparent state: internal I/O\n");
- if (f__fmtbuf)
- fprintf(stderr,"last format: %s\n",f__fmtbuf);
- fprintf(stderr,"lately %s %s %s %s",f__reading?"reading":"writing",
- f__sequential?"sequential":"direct",f__formatted?"formatted":"unformatted",
- f__external?"external":"internal");
- }
- f__init &= ~2; /* No longer doing I/O (no more user code to be called). */
- sig_die(" IO", 1);
-}
-/*initialization routine*/
- VOID
-f_init(Void)
-{ unit *p;
-
- if (f__init & 2)
- f__fatal (131, "I/O recursion");
- f__init = 1;
- p= &f__units[0];
- p->ufd=stderr;
- p->useek=f__canseek(stderr);
-#ifdef _IOLBF
- setvbuf(stderr, (char*)malloc(BUFSIZ+8), _IOLBF, BUFSIZ+8);
-#else
-#if defined (NON_UNIX_STDIO) || defined (MISSING_FILE_ELEMS)
- setbuf(stderr, (char *)malloc(BUFSIZ+8));
-#else
- stderr->_flag &= ~_IONBF;
-#endif
-#endif
- p->ufmt=1;
- p->uwrt=1;
- p = &f__units[5];
- p->ufd=stdin;
- p->useek=f__canseek(stdin);
- p->ufmt=1;
- p->uwrt=0;
- p= &f__units[6];
- p->ufd=stdout;
- p->useek=f__canseek(stdout);
- p->ufmt=1;
- p->uwrt=1;
-}
-#ifdef KR_headers
-f__nowreading(x) unit *x;
-#else
-f__nowreading(unit *x)
-#endif
-{
- long loc;
- int ufmt;
- extern char *f__r_mode[];
-
- if (!x->ufnm)
- goto cantread;
- ufmt = x->ufmt;
- loc=ftell(x->ufd);
- if(freopen(x->ufnm,f__r_mode[ufmt],x->ufd) == NULL) {
- cantread:
- errno = 126;
- return(1);
- }
- x->uwrt=0;
- (void) fseek(x->ufd,loc,SEEK_SET);
- return(0);
-}
-#ifdef KR_headers
-f__nowwriting(x) unit *x;
-#else
-f__nowwriting(unit *x)
-#endif
-{
- long loc;
- int ufmt;
- extern char *f__w_mode[];
-#ifndef NON_UNIX_STDIO
- int k;
-#endif
-
- if (!x->ufnm)
- goto cantwrite;
- ufmt = x->ufmt;
-#ifdef NON_UNIX_STDIO
- ufmt |= 2;
-#endif
- if (x->uwrt == 3) { /* just did write, rewind */
-#ifdef NON_UNIX_STDIO
- if (!(f__cf = x->ufd =
- freopen(x->ufnm,f__w_mode[ufmt],x->ufd)))
-#else
- if (close(creat(x->ufnm,0666)))
-#endif
- goto cantwrite;
- }
- else {
- loc=ftell(x->ufd);
-#ifdef NON_UNIX_STDIO
- if (!(f__cf = x->ufd =
- freopen(x->ufnm, f__w_mode[ufmt], x->ufd)))
-#else
- if (fclose(x->ufd) < 0
- || (k = x->uwrt == 2 ? creat(x->ufnm,0666)
- : open(x->ufnm,O_WRONLY)) < 0
- || (f__cf = x->ufd = fdopen(k,f__w_mode[ufmt])) == NULL)
-#endif
- {
- x->ufd = NULL;
- cantwrite:
- errno = 127;
- return(1);
- }
- (void) fseek(x->ufd,loc,SEEK_SET);
- }
- x->uwrt = 1;
- return(0);
-}
-
- int
-#ifdef KR_headers
-err__fl(f, m, s) int f, m; char *s;
-#else
-err__fl(int f, int m, char *s)
-#endif
-{
- if (!f)
- f__fatal(m, s);
- if (f__doend)
- (*f__doend)();
- f__init &= ~2;
- return errno = m;
- }
diff --git a/gcc/f/runtime/libI77/f2ch.add b/gcc/f/runtime/libI77/f2ch.add
deleted file mode 100644
index a2acc17a159..00000000000
--- a/gcc/f/runtime/libI77/f2ch.add
+++ /dev/null
@@ -1,162 +0,0 @@
-/* If you are using a C++ compiler, append the following to f2c.h
- for compiling libF77 and libI77. */
-
-#ifdef __cplusplus
-extern "C" {
-extern int abort_(void);
-extern double c_abs(complex *);
-extern void c_cos(complex *, complex *);
-extern void c_div(complex *, complex *, complex *);
-extern void c_exp(complex *, complex *);
-extern void c_log(complex *, complex *);
-extern void c_sin(complex *, complex *);
-extern void c_sqrt(complex *, complex *);
-extern double d_abs(double *);
-extern double d_acos(double *);
-extern double d_asin(double *);
-extern double d_atan(double *);
-extern double d_atn2(double *, double *);
-extern void d_cnjg(doublecomplex *, doublecomplex *);
-extern double d_cos(double *);
-extern double d_cosh(double *);
-extern double d_dim(double *, double *);
-extern double d_exp(double *);
-extern double d_imag(doublecomplex *);
-extern double d_int(double *);
-extern double d_lg10(double *);
-extern double d_log(double *);
-extern double d_mod(double *, double *);
-extern double d_nint(double *);
-extern double d_prod(float *, float *);
-extern double d_sign(double *, double *);
-extern double d_sin(double *);
-extern double d_sinh(double *);
-extern double d_sqrt(double *);
-extern double d_tan(double *);
-extern double d_tanh(double *);
-extern double derf_(double *);
-extern double derfc_(double *);
-extern integer do_fio(ftnint *, char *, ftnlen);
-extern integer do_lio(ftnint *, ftnint *, char *, ftnlen);
-extern integer do_uio(ftnint *, char *, ftnlen);
-extern integer e_rdfe(void);
-extern integer e_rdue(void);
-extern integer e_rsfe(void);
-extern integer e_rsfi(void);
-extern integer e_rsle(void);
-extern integer e_rsli(void);
-extern integer e_rsue(void);
-extern integer e_wdfe(void);
-extern integer e_wdue(void);
-extern integer e_wsfe(void);
-extern integer e_wsfi(void);
-extern integer e_wsle(void);
-extern integer e_wsli(void);
-extern integer e_wsue(void);
-extern int ef1asc_(ftnint *, ftnlen *, ftnint *, ftnlen *);
-extern integer ef1cmc_(ftnint *, ftnlen *, ftnint *, ftnlen *);
-extern double erf(double);
-extern double erf_(float *);
-extern double erfc(double);
-extern double erfc_(float *);
-extern integer f_back(alist *);
-extern integer f_clos(cllist *);
-extern integer f_end(alist *);
-extern void f_exit(void);
-extern integer f_inqu(inlist *);
-extern integer f_open(olist *);
-extern integer f_rew(alist *);
-extern int flush_(void);
-extern void getarg_(integer *, char *, ftnlen);
-extern void getenv_(char *, char *, ftnlen, ftnlen);
-extern short h_abs(short *);
-extern short h_dim(short *, short *);
-extern short h_dnnt(double *);
-extern short h_indx(char *, char *, ftnlen, ftnlen);
-extern short h_len(char *, ftnlen);
-extern short h_mod(short *, short *);
-extern short h_nint(float *);
-extern short h_sign(short *, short *);
-extern short hl_ge(char *, char *, ftnlen, ftnlen);
-extern short hl_gt(char *, char *, ftnlen, ftnlen);
-extern short hl_le(char *, char *, ftnlen, ftnlen);
-extern short hl_lt(char *, char *, ftnlen, ftnlen);
-extern integer i_abs(integer *);
-extern integer i_dim(integer *, integer *);
-extern integer i_dnnt(double *);
-extern integer i_indx(char *, char *, ftnlen, ftnlen);
-extern integer i_len(char *, ftnlen);
-extern integer i_mod(integer *, integer *);
-extern integer i_nint(float *);
-extern integer i_sign(integer *, integer *);
-extern integer iargc_(void);
-extern ftnlen l_ge(char *, char *, ftnlen, ftnlen);
-extern ftnlen l_gt(char *, char *, ftnlen, ftnlen);
-extern ftnlen l_le(char *, char *, ftnlen, ftnlen);
-extern ftnlen l_lt(char *, char *, ftnlen, ftnlen);
-extern void pow_ci(complex *, complex *, integer *);
-extern double pow_dd(double *, double *);
-extern double pow_di(double *, integer *);
-extern short pow_hh(short *, shortint *);
-extern integer pow_ii(integer *, integer *);
-extern double pow_ri(float *, integer *);
-extern void pow_zi(doublecomplex *, doublecomplex *, integer *);
-extern void pow_zz(doublecomplex *, doublecomplex *, doublecomplex *);
-extern double r_abs(float *);
-extern double r_acos(float *);
-extern double r_asin(float *);
-extern double r_atan(float *);
-extern double r_atn2(float *, float *);
-extern void r_cnjg(complex *, complex *);
-extern double r_cos(float *);
-extern double r_cosh(float *);
-extern double r_dim(float *, float *);
-extern double r_exp(float *);
-extern double r_imag(complex *);
-extern double r_int(float *);
-extern double r_lg10(float *);
-extern double r_log(float *);
-extern double r_mod(float *, float *);
-extern double r_nint(float *);
-extern double r_sign(float *, float *);
-extern double r_sin(float *);
-extern double r_sinh(float *);
-extern double r_sqrt(float *);
-extern double r_tan(float *);
-extern double r_tanh(float *);
-extern void s_cat(char *, char **, integer *, integer *, ftnlen);
-extern integer s_cmp(char *, char *, ftnlen, ftnlen);
-extern void s_copy(char *, char *, ftnlen, ftnlen);
-extern int s_paus(char *, ftnlen);
-extern integer s_rdfe(cilist *);
-extern integer s_rdue(cilist *);
-extern integer s_rnge(char *, integer, char *, integer);
-extern integer s_rsfe(cilist *);
-extern integer s_rsfi(icilist *);
-extern integer s_rsle(cilist *);
-extern integer s_rsli(icilist *);
-extern integer s_rsne(cilist *);
-extern integer s_rsni(icilist *);
-extern integer s_rsue(cilist *);
-extern int s_stop(char *, ftnlen);
-extern integer s_wdfe(cilist *);
-extern integer s_wdue(cilist *);
-extern integer s_wsfe(cilist *);
-extern integer s_wsfi(icilist *);
-extern integer s_wsle(cilist *);
-extern integer s_wsli(icilist *);
-extern integer s_wsne(cilist *);
-extern integer s_wsni(icilist *);
-extern integer s_wsue(cilist *);
-extern void sig_die(char *, int);
-extern integer signal_(integer *, void (*)(int));
-extern integer system_(char *, ftnlen);
-extern double z_abs(doublecomplex *);
-extern void z_cos(doublecomplex *, doublecomplex *);
-extern void z_div(doublecomplex *, doublecomplex *, doublecomplex *);
-extern void z_exp(doublecomplex *, doublecomplex *);
-extern void z_log(doublecomplex *, doublecomplex *);
-extern void z_sin(doublecomplex *, doublecomplex *);
-extern void z_sqrt(doublecomplex *, doublecomplex *);
- }
-#endif
diff --git a/gcc/f/runtime/libI77/fio.h b/gcc/f/runtime/libI77/fio.h
deleted file mode 100644
index 769d360a626..00000000000
--- a/gcc/f/runtime/libI77/fio.h
+++ /dev/null
@@ -1,102 +0,0 @@
-#include <stdio.h>
-#include <errno.h>
-#ifndef NULL
-/* ANSI C */
-#include <stddef.h>
-#endif
-
-#ifndef SEEK_SET
-#define SEEK_SET 0
-#define SEEK_CUR 1
-#define SEEK_END 2
-#endif
-
-#if defined (MSDOS) && !defined (GO32)
-#ifndef NON_UNIX_STDIO
-#define NON_UNIX_STDIO
-#endif
-#endif
-
-#ifdef UIOLEN_int
-typedef int uiolen;
-#else
-typedef long uiolen;
-#endif
-
-/*units*/
-typedef struct
-{ FILE *ufd; /*0=unconnected*/
- char *ufnm;
-#if !(defined (MSDOS) && !defined (GO32))
- long uinode;
- int udev;
-#endif
- int url; /*0=sequential*/
- flag useek; /*true=can backspace, use dir, ...*/
- flag ufmt;
- flag uprnt;
- flag ublnk;
- flag uend;
- flag uwrt; /*last io was write*/
- flag uscrtch;
-} unit;
-
-extern int f__init;
-extern cilist *f__elist; /*active external io list*/
-extern flag f__reading,f__external,f__sequential,f__formatted;
-#undef Void
-#ifdef KR_headers
-#define Void /*void*/
-extern int (*f__getn)(),(*f__putn)(); /*for formatted io*/
-extern long f__inode();
-extern VOID sig_die();
-extern int (*f__donewrec)(), t_putc(), x_wSL();
-extern int c_sfe(), err__fl(), xrd_SL();
-#else
-#define Void void
-#ifdef __cplusplus
-extern "C" {
-#endif
-extern int (*f__getn)(void),(*f__putn)(int); /*for formatted io*/
-extern long f__inode(char*,int*);
-extern void sig_die(char*,int);
-extern void f__fatal(int,char*);
-extern int t_runc(alist*);
-extern int f__nowreading(unit*), f__nowwriting(unit*);
-extern int fk_open(int,int,ftnint);
-extern int en_fio(void);
-extern void f_init(void);
-extern int (*f__donewrec)(void), t_putc(int), x_wSL(void);
-extern void b_char(char*,char*,ftnlen), g_char(char*,ftnlen,char*);
-extern int c_sfe(cilist*), z_rnew(void);
-extern int isatty(int);
-extern int err__fl(int,int,char*);
-extern int xrd_SL(void);
-#ifdef __cplusplus
- }
-#endif
-#endif
-extern int (*f__doend)(Void);
-extern FILE *f__cf; /*current file*/
-extern unit *f__curunit; /*current unit*/
-extern unit f__units[];
-#define err(f,m,s) do {if(f) {f__init &= ~2; errno= m;} else f__fatal(m,s); return(m);} while(0)
-#define errfl(f,m,s) do {return err__fl((int)f,m,s);} while(0)
-
-/*Table sizes*/
-#define MXUNIT 100
-
-extern int f__recpos; /*position in current record*/
-extern int f__cursor; /* offset to move to */
-extern int f__hiwater; /* so TL doesn't confuse us */
-
-#define WRITE 1
-#define READ 2
-#define SEQ 3
-#define DIR 4
-#define FMT 5
-#define UNF 6
-#define EXT 7
-#define INT 8
-
-#define buf_end(x) (x->_flag & _IONBF ? x->_ptr : x->_base + BUFSIZ)
diff --git a/gcc/f/runtime/libI77/fmt.c b/gcc/f/runtime/libI77/fmt.c
deleted file mode 100644
index a82f82153f6..00000000000
--- a/gcc/f/runtime/libI77/fmt.c
+++ /dev/null
@@ -1,516 +0,0 @@
-#include "f2c.h"
-#include "fio.h"
-#include "fmt.h"
-#define skip(s) while(*s==' ') s++
-#ifdef interdata
-#define SYLMX 300
-#endif
-#ifdef pdp11
-#define SYLMX 300
-#endif
-#ifdef vax
-#define SYLMX 300
-#endif
-#ifndef SYLMX
-#define SYLMX 300
-#endif
-#define GLITCH '\2'
- /* special quote character for stu */
-extern int f__cursor,f__scale;
-extern flag f__cblank,f__cplus; /*blanks in I and compulsory plus*/
-struct syl f__syl[SYLMX];
-int f__parenlvl,f__pc,f__revloc;
-
- static
-#ifdef KR_headers
-char *ap_end(s) char *s;
-#else
-char *ap_end(char *s)
-#endif
-{ char quote;
- quote= *s++;
- for(;*s;s++)
- { if(*s!=quote) continue;
- if(*++s!=quote) return(s);
- }
- if(f__elist->cierr) {
- errno = 100;
- return(NULL);
- }
- f__fatal(100, "bad string");
- /*NOTREACHED*/ return 0;
-}
- static
-#ifdef KR_headers
-op_gen(a,b,c,d)
-#else
-op_gen(int a, int b, int c, int d)
-#endif
-{ struct syl *p= &f__syl[f__pc];
- if(f__pc>=SYLMX)
- { fprintf(stderr,"format too complicated:\n");
- sig_die(f__fmtbuf, 1);
- }
- p->op=a;
- p->p1=b;
- p->p2=c;
- p->p3=d;
- return(f__pc++);
-}
-#ifdef KR_headers
-static char *f_list();
-static char *gt_num(s,n,n1) char *s; int *n, n1;
-#else
-static char *f_list(char*);
-static char *gt_num(char *s, int *n, int n1)
-#endif
-{ int m=0,f__cnt=0;
- char c;
- for(c= *s;;c = *s)
- { if(c==' ')
- { s++;
- continue;
- }
- if(c>'9' || c<'0') break;
- m=10*m+c-'0';
- f__cnt++;
- s++;
- }
- if(f__cnt==0) {
- if (!n1)
- s = 0;
- *n=n1;
- }
- else *n=m;
- return(s);
-}
-
- static
-#ifdef KR_headers
-char *f_s(s,curloc) char *s;
-#else
-char *f_s(char *s, int curloc)
-#endif
-{
- skip(s);
- if(*s++!='(')
- {
- return(NULL);
- }
- if(f__parenlvl++ ==1) f__revloc=curloc;
- if(op_gen(RET1,curloc,0,0)<0 ||
- (s=f_list(s))==NULL)
- {
- return(NULL);
- }
- skip(s);
- return(s);
-}
-
- static
-#ifdef KR_headers
-ne_d(s,p) char *s,**p;
-#else
-ne_d(char *s, char **p)
-#endif
-{ int n,x,sign=0;
- struct syl *sp;
- switch(*s)
- {
- default:
- return(0);
- case ':': (void) op_gen(COLON,0,0,0); break;
- case '$':
- (void) op_gen(NONL, 0, 0, 0); break;
- case 'B':
- case 'b':
- if(*++s=='z' || *s == 'Z') (void) op_gen(BZ,0,0,0);
- else (void) op_gen(BN,0,0,0);
- break;
- case 'S':
- case 's':
- if(*(s+1)=='s' || *(s+1) == 'S')
- { x=SS;
- s++;
- }
- else if(*(s+1)=='p' || *(s+1) == 'P')
- { x=SP;
- s++;
- }
- else x=S;
- (void) op_gen(x,0,0,0);
- break;
- case '/': (void) op_gen(SLASH,0,0,0); break;
- case '-': sign=1;
- case '+': s++; /*OUTRAGEOUS CODING TRICK*/
- case '0': case '1': case '2': case '3': case '4':
- case '5': case '6': case '7': case '8': case '9':
- if (!(s=gt_num(s,&n,0))) {
- bad: *p = 0;
- return 1;
- }
- switch(*s)
- {
- default:
- return(0);
- case 'P':
- case 'p': if(sign) n= -n; (void) op_gen(P,n,0,0); break;
- case 'X':
- case 'x': (void) op_gen(X,n,0,0); break;
- case 'H':
- case 'h':
- sp = &f__syl[op_gen(H,n,0,0)];
- *(char **)&sp->p2 = s + 1;
- s+=n;
- break;
- }
- break;
- case GLITCH:
- case '"':
- case '\'':
- sp = &f__syl[op_gen(APOS,0,0,0)];
- *(char **)&sp->p2 = s;
- if((*p = ap_end(s)) == NULL)
- return(0);
- return(1);
- case 'T':
- case 't':
- if(*(s+1)=='l' || *(s+1) == 'L')
- { x=TL;
- s++;
- }
- else if(*(s+1)=='r'|| *(s+1) == 'R')
- { x=TR;
- s++;
- }
- else x=T;
- if (!(s=gt_num(s+1,&n,0)))
- goto bad;
- s--;
- (void) op_gen(x,n,0,0);
- break;
- case 'X':
- case 'x': (void) op_gen(X,1,0,0); break;
- case 'P':
- case 'p': (void) op_gen(P,1,0,0); break;
- }
- s++;
- *p=s;
- return(1);
-}
-
- static
-#ifdef KR_headers
-e_d(s,p) char *s,**p;
-#else
-e_d(char *s, char **p)
-#endif
-{ int i,im,n,w,d,e,found=0,x=0;
- char *sv=s;
- s=gt_num(s,&n,1);
- (void) op_gen(STACK,n,0,0);
- switch(*s++)
- {
- default: break;
- case 'E':
- case 'e': x=1;
- case 'G':
- case 'g':
- found=1;
- if (!(s=gt_num(s,&w,0))) {
- bad:
- *p = 0;
- return 1;
- }
- if(w==0) break;
- if(*s=='.') {
- if (!(s=gt_num(s+1,&d,0)))
- goto bad;
- }
- else d=0;
- if(*s!='E' && *s != 'e')
- (void) op_gen(x==1?E:G,w,d,0); /* default is Ew.dE2 */
- else {
- if (!(s=gt_num(s+1,&e,0)))
- goto bad;
- (void) op_gen(x==1?EE:GE,w,d,e);
- }
- break;
- case 'O':
- case 'o':
- i = O;
- im = OM;
- goto finish_I;
- case 'Z':
- case 'z':
- i = Z;
- im = ZM;
- goto finish_I;
- case 'L':
- case 'l':
- found=1;
- if (!(s=gt_num(s,&w,0)))
- goto bad;
- if(w==0) break;
- (void) op_gen(L,w,0,0);
- break;
- case 'A':
- case 'a':
- found=1;
- skip(s);
- if(*s>='0' && *s<='9')
- { s=gt_num(s,&w,1);
- if(w==0) break;
- (void) op_gen(AW,w,0,0);
- break;
- }
- (void) op_gen(A,0,0,0);
- break;
- case 'F':
- case 'f':
- if (!(s=gt_num(s,&w,0)))
- goto bad;
- found=1;
- if(w==0) break;
- if(*s=='.') {
- if (!(s=gt_num(s+1,&d,0)))
- goto bad;
- }
- else d=0;
- (void) op_gen(F,w,d,0);
- break;
- case 'D':
- case 'd':
- found=1;
- if (!(s=gt_num(s,&w,0)))
- goto bad;
- if(w==0) break;
- if(*s=='.') {
- if (!(s=gt_num(s+1,&d,0)))
- goto bad;
- }
- else d=0;
- (void) op_gen(D,w,d,0);
- break;
- case 'I':
- case 'i':
- i = I;
- im = IM;
- finish_I:
- if (!(s=gt_num(s,&w,0)))
- goto bad;
- found=1;
- if(w==0) break;
- if(*s!='.')
- { (void) op_gen(i,w,0,0);
- break;
- }
- if (!(s=gt_num(s+1,&d,0)))
- goto bad;
- (void) op_gen(im,w,d,0);
- break;
- }
- if(found==0)
- { f__pc--; /*unSTACK*/
- *p=sv;
- return(0);
- }
- *p=s;
- return(1);
-}
- static
-#ifdef KR_headers
-char *i_tem(s) char *s;
-#else
-char *i_tem(char *s)
-#endif
-{ char *t;
- int n,curloc;
- if(*s==')') return(s);
- if(ne_d(s,&t)) return(t);
- if(e_d(s,&t)) return(t);
- s=gt_num(s,&n,1);
- if((curloc=op_gen(STACK,n,0,0))<0) return(NULL);
- return(f_s(s,curloc));
-}
-
- static
-#ifdef KR_headers
-char *f_list(s) char *s;
-#else
-char *f_list(char *s)
-#endif
-{
- for(;*s!=0;)
- { skip(s);
- if((s=i_tem(s))==NULL) return(NULL);
- skip(s);
- if(*s==',') s++;
- else if(*s==')')
- { if(--f__parenlvl==0)
- {
- (void) op_gen(REVERT,f__revloc,0,0);
- return(++s);
- }
- (void) op_gen(GOTO,0,0,0);
- return(++s);
- }
- }
- return(NULL);
-}
-
-#ifdef KR_headers
-pars_f(s) char *s;
-#else
-pars_f(char *s)
-#endif
-{
- f__parenlvl=f__revloc=f__pc=0;
- if(f_s(s,0) == NULL)
- {
- return(-1);
- }
- return(0);
-}
-#define STKSZ 10
-int f__cnt[STKSZ],f__ret[STKSZ],f__cp,f__rp;
-flag f__workdone, f__nonl;
-
- static
-#ifdef KR_headers
-type_f(n)
-#else
-type_f(int n)
-#endif
-{
- switch(n)
- {
- default:
- return(n);
- case RET1:
- return(RET1);
- case REVERT: return(REVERT);
- case GOTO: return(GOTO);
- case STACK: return(STACK);
- case X:
- case SLASH:
- case APOS: case H:
- case T: case TL: case TR:
- return(NED);
- case F:
- case I:
- case IM:
- case A: case AW:
- case O: case OM:
- case L:
- case E: case EE: case D:
- case G: case GE:
- case Z: case ZM:
- return(ED);
- }
-}
-#ifdef KR_headers
-integer do_fio(number,ptr,len) ftnint *number; ftnlen len; char *ptr;
-#else
-integer do_fio(ftnint *number, char *ptr, ftnlen len)
-#endif
-{ struct syl *p;
- int n,i;
- for(i=0;i<*number;i++,ptr+=len)
- {
-loop: switch(type_f((p= &f__syl[f__pc])->op))
- {
- default:
- fprintf(stderr,"unknown code in do_fio: %d\n%s\n",
- p->op,f__fmtbuf);
- err(f__elist->cierr,100,"do_fio");
- case NED:
- if((*f__doned)(p))
- { f__pc++;
- goto loop;
- }
- f__pc++;
- continue;
- case ED:
- if(f__cnt[f__cp]<=0)
- { f__cp--;
- f__pc++;
- goto loop;
- }
- if(ptr==NULL)
- return((*f__doend)());
- f__cnt[f__cp]--;
- f__workdone=1;
- if((n=(*f__doed)(p,ptr,len))>0)
- errfl(f__elist->cierr,errno,"fmt");
- if(n<0)
- err(f__elist->ciend,(EOF),"fmt");
- continue;
- case STACK:
- f__cnt[++f__cp]=p->p1;
- f__pc++;
- goto loop;
- case RET1:
- f__ret[++f__rp]=p->p1;
- f__pc++;
- goto loop;
- case GOTO:
- if(--f__cnt[f__cp]<=0)
- { f__cp--;
- f__rp--;
- f__pc++;
- goto loop;
- }
- f__pc=1+f__ret[f__rp--];
- goto loop;
- case REVERT:
- f__rp=f__cp=0;
- f__pc = p->p1;
- if(ptr==NULL)
- return((*f__doend)());
- if(!f__workdone) return(0);
- if((n=(*f__dorevert)()) != 0) return(n);
- goto loop;
- case COLON:
- if(ptr==NULL)
- return((*f__doend)());
- f__pc++;
- goto loop;
- case NONL:
- f__nonl = 1;
- f__pc++;
- goto loop;
- case S:
- case SS:
- f__cplus=0;
- f__pc++;
- goto loop;
- case SP:
- f__cplus = 1;
- f__pc++;
- goto loop;
- case P: f__scale=p->p1;
- f__pc++;
- goto loop;
- case BN:
- f__cblank=0;
- f__pc++;
- goto loop;
- case BZ:
- f__cblank=1;
- f__pc++;
- goto loop;
- }
- }
- return(0);
-}
-en_fio(Void)
-{ ftnint one=1;
- return(do_fio(&one,(char *)NULL,(ftnint)0));
-}
- VOID
-fmt_bg(Void)
-{
- f__workdone=f__cp=f__rp=f__pc=f__cursor=0;
- f__cnt[0]=f__ret[0]=0;
-}
diff --git a/gcc/f/runtime/libI77/fmt.h b/gcc/f/runtime/libI77/fmt.h
deleted file mode 100644
index 509746e13b9..00000000000
--- a/gcc/f/runtime/libI77/fmt.h
+++ /dev/null
@@ -1,99 +0,0 @@
-struct syl
-{ int op,p1,p2,p3;
-};
-#define RET1 1
-#define REVERT 2
-#define GOTO 3
-#define X 4
-#define SLASH 5
-#define STACK 6
-#define I 7
-#define ED 8
-#define NED 9
-#define IM 10
-#define APOS 11
-#define H 12
-#define TL 13
-#define TR 14
-#define T 15
-#define COLON 16
-#define S 17
-#define SP 18
-#define SS 19
-#define P 20
-#define BN 21
-#define BZ 22
-#define F 23
-#define E 24
-#define EE 25
-#define D 26
-#define G 27
-#define GE 28
-#define L 29
-#define A 30
-#define AW 31
-#define O 32
-#define NONL 33
-#define OM 34
-#define Z 35
-#define ZM 36
-extern struct syl f__syl[];
-extern int f__pc,f__parenlvl,f__revloc;
-typedef union
-{ real pf;
- doublereal pd;
-} ufloat;
-typedef union
-{ short is;
-#ifndef KR_headers
- signed
-#endif
- char ic;
- integer il;
-#ifdef Allow_TYQUAD
- longint ili;
-#endif
-} Uint;
-#ifdef KR_headers
-extern int (*f__doed)(),(*f__doned)();
-extern int (*f__dorevert)();
-extern int rd_ed(),rd_ned();
-extern int w_ed(),w_ned();
-#else
-#ifdef __cplusplus
-extern "C" {
-#endif
-extern int (*f__doed)(struct syl*, char*, ftnlen),(*f__doned)(struct syl*);
-extern int (*f__dorevert)(void);
-extern void fmt_bg(void);
-extern int pars_f(char*);
-extern int rd_ed(struct syl*, char*, ftnlen),rd_ned(struct syl*);
-extern int w_ed(struct syl*, char*, ftnlen),w_ned(struct syl*);
-extern int wrt_E(ufloat*, int, int, int, ftnlen);
-extern int wrt_F(ufloat*, int, int, ftnlen);
-extern int wrt_L(Uint*, int, ftnlen);
-#ifdef __cplusplus
- }
-#endif
-#endif
-extern flag f__cblank,f__cplus,f__workdone, f__nonl;
-extern char *f__fmtbuf;
-extern int f__scale;
-#define GET(x) if((x=(*f__getn)())<0) return(x)
-#define VAL(x) (x!='\n'?x:' ')
-#define PUT(x) (*f__putn)(x)
-extern int f__cursor;
-
-#undef TYQUAD
-#ifndef Allow_TYQUAD
-#undef longint
-#define longint long
-#else
-#define TYQUAD 14
-#endif
-
-#ifdef KR_headers
-extern char *f__icvt();
-#else
-extern char *f__icvt(longint, int*, int*, int);
-#endif
diff --git a/gcc/f/runtime/libI77/fmtlib.c b/gcc/f/runtime/libI77/fmtlib.c
deleted file mode 100644
index 91483fc5290..00000000000
--- a/gcc/f/runtime/libI77/fmtlib.c
+++ /dev/null
@@ -1,45 +0,0 @@
-/* @(#)fmtlib.c 1.2 */
-#define MAXINTLENGTH 23
-
-#include "f2c.h"
-#ifndef Allow_TYQUAD
-#undef longint
-#define longint long
-#undef ulongint
-#define ulongint unsigned long
-#endif
-
-#ifdef KR_headers
-char *f__icvt(value,ndigit,sign, base) longint value; int *ndigit,*sign;
- register int base;
-#else
-char *f__icvt(longint value, int *ndigit, int *sign, int base)
-#endif
-{
- static char buf[MAXINTLENGTH+1];
- register int i;
- ulongint uvalue;
-
- if(value > 0) {
- uvalue = value;
- *sign = 0;
- }
- else if (value < 0) {
- uvalue = -value;
- *sign = 1;
- }
- else {
- *sign = 0;
- *ndigit = 1;
- buf[MAXINTLENGTH-1] = '0';
- return &buf[MAXINTLENGTH-1];
- }
- i = MAXINTLENGTH;
- do {
- buf[--i] = (uvalue%base) + '0';
- uvalue /= base;
- }
- while(uvalue > 0);
- *ndigit = MAXINTLENGTH - i;
- return &buf[i];
- }
diff --git a/gcc/f/runtime/libI77/fp.h b/gcc/f/runtime/libI77/fp.h
deleted file mode 100644
index 40743d79f74..00000000000
--- a/gcc/f/runtime/libI77/fp.h
+++ /dev/null
@@ -1,28 +0,0 @@
-#define FMAX 40
-#define EXPMAXDIGS 8
-#define EXPMAX 99999999
-/* FMAX = max number of nonzero digits passed to atof() */
-/* EXPMAX = 10^EXPMAXDIGS - 1 = largest allowed exponent absolute value */
-
-#ifdef V10 /* Research Tenth-Edition Unix */
-#include "local.h"
-#endif
-
-/* MAXFRACDIGS and MAXINTDIGS are for wrt_F -- bounds (not necessarily
- tight) on the maximum number of digits to the right and left of
- * the decimal point.
- */
-
-#ifdef VAX
-#define MAXFRACDIGS 56
-#define MAXINTDIGS 38
-#else
-#ifdef CRAY
-#define MAXFRACDIGS 9880
-#define MAXINTDIGS 9864
-#else
-/* values that suffice for IEEE double */
-#define MAXFRACDIGS 344
-#define MAXINTDIGS 308
-#endif
-#endif
diff --git a/gcc/f/runtime/libI77/ftell_.c b/gcc/f/runtime/libI77/ftell_.c
deleted file mode 100644
index 1bd03be325a..00000000000
--- a/gcc/f/runtime/libI77/ftell_.c
+++ /dev/null
@@ -1,46 +0,0 @@
-#include "f2c.h"
-#include "fio.h"
-
- static FILE *
-#ifdef KR_headers
-unit_chk(Unit, who) integer Unit; char *who;
-#else
-unit_chk(integer Unit, char *who)
-#endif
-{
- if (Unit >= MXUNIT || Unit < 0)
- f__fatal(101, who);
- return f__units[Unit].ufd;
- }
-
- integer
-#ifdef KR_headers
-G77_ftell_0 (Unit) integer *Unit;
-#else
-G77_ftell_0 (integer *Unit)
-#endif
-{
- FILE *f;
- return (f = unit_chk(*Unit, "ftell")) ? ftell(f) : -1L;
- }
-
- integer
-#ifdef KR_headers
-G77_fseek_0 (Unit, offset, xwhence) integer *Unit, *offset, *xwhence;
-#else
-G77_fseek_0 (integer *Unit, integer *offset, integer *xwhence)
-#endif
-{
- FILE *f;
- int w = (int)*xwhence;
-#ifdef SEEK_SET
- static int wohin[3] = { SEEK_SET, SEEK_CUR, SEEK_END };
-#endif
- if (w < 0 || w > 2)
- w = 0;
-#ifdef SEEK_SET
- w = wohin[w];
-#endif
- return !(f = unit_chk(*Unit, "fseek"))
- || fseek(f, *offset, w) ? 1 : 0;
- }
diff --git a/gcc/f/runtime/libI77/iio.c b/gcc/f/runtime/libI77/iio.c
deleted file mode 100644
index 22eae3f433d..00000000000
--- a/gcc/f/runtime/libI77/iio.c
+++ /dev/null
@@ -1,148 +0,0 @@
-#include "f2c.h"
-#include "fio.h"
-#include "fmt.h"
-extern char *f__icptr;
-char *f__icend;
-extern icilist *f__svic;
-int f__icnum;
-extern int f__hiwater;
-z_getc(Void)
-{
- if(f__recpos++ < f__svic->icirlen) {
- if(f__icptr >= f__icend) err(f__svic->iciend,(EOF),"endfile");
- return(*(unsigned char *)f__icptr++);
- }
- return '\n';
-}
-#ifdef KR_headers
-z_putc(c)
-#else
-z_putc(int c)
-#endif
-{
- if(f__icptr >= f__icend) err(f__svic->icierr,110,"inwrite");
- if(f__recpos++ < f__svic->icirlen)
- *f__icptr++ = c;
- else err(f__svic->icierr,110,"recend");
- return 0;
-}
-z_rnew(Void)
-{
- f__icptr = f__svic->iciunit + (++f__icnum)*f__svic->icirlen;
- f__recpos = 0;
- f__cursor = 0;
- f__hiwater = 0;
- return 1;
-}
-
- static int
-z_endp(Void)
-{
- (*f__donewrec)();
- return 0;
- }
-
-#ifdef KR_headers
-c_si(a) icilist *a;
-#else
-c_si(icilist *a)
-#endif
-{
- if (f__init & 2)
- f__fatal (131, "I/O recursion");
- f__init |= 2;
- f__elist = (cilist *)a;
- f__fmtbuf=a->icifmt;
- if(pars_f(f__fmtbuf)<0)
- err(a->icierr,100,"startint");
- fmt_bg();
- f__sequential=f__formatted=1;
- f__external=0;
- f__cblank=f__cplus=f__scale=0;
- f__svic=a;
- f__icnum=f__recpos=0;
- f__cursor = 0;
- f__hiwater = 0;
- f__icptr = a->iciunit;
- f__icend = f__icptr + a->icirlen*a->icirnum;
- f__curunit = 0;
- f__cf = 0;
- return(0);
-}
-
- int
-iw_rev(Void)
-{
- if(f__workdone)
- z_endp();
- f__hiwater = f__recpos = f__cursor = 0;
- return(f__workdone=0);
- }
-
-#ifdef KR_headers
-integer s_rsfi(a) icilist *a;
-#else
-integer s_rsfi(icilist *a)
-#endif
-{ int n;
- if(n=c_si(a)) return(n);
- f__reading=1;
- f__doed=rd_ed;
- f__doned=rd_ned;
- f__getn=z_getc;
- f__dorevert = z_endp;
- f__donewrec = z_rnew;
- f__doend = z_endp;
- return(0);
-}
-
-z_wnew(Void)
-{
- if (f__recpos < f__hiwater) {
- f__icptr += f__hiwater - f__recpos;
- f__recpos = f__hiwater;
- }
- while(f__recpos++ < f__svic->icirlen)
- *f__icptr++ = ' ';
- f__recpos = 0;
- f__cursor = 0;
- f__hiwater = 0;
- f__icnum++;
- return 1;
-}
-#ifdef KR_headers
-integer s_wsfi(a) icilist *a;
-#else
-integer s_wsfi(icilist *a)
-#endif
-{ int n;
- if(n=c_si(a)) return(n);
- f__reading=0;
- f__doed=w_ed;
- f__doned=w_ned;
- f__putn=z_putc;
- f__dorevert = iw_rev;
- f__donewrec = z_wnew;
- f__doend = z_endp;
- return(0);
-}
-integer e_rsfi(Void)
-{ int n;
- f__init &= ~2;
- n = en_fio();
- f__fmtbuf = NULL;
- return(n);
-}
-integer e_wsfi(Void)
-{
- int n;
- f__init &= ~2;
- n = en_fio();
- f__fmtbuf = NULL;
- if(f__icnum >= f__svic->icirnum
- || !f__recpos && f__icnum)
- return(n);
- while(f__recpos++ < f__svic->icirlen)
- *f__icptr++ = ' ';
- return(n);
-}
diff --git a/gcc/f/runtime/libI77/ilnw.c b/gcc/f/runtime/libI77/ilnw.c
deleted file mode 100644
index 08ea2be7831..00000000000
--- a/gcc/f/runtime/libI77/ilnw.c
+++ /dev/null
@@ -1,82 +0,0 @@
-#include "f2c.h"
-#include "fio.h"
-#include "lio.h"
-extern char *f__icptr;
-extern char *f__icend;
-extern icilist *f__svic;
-extern int f__icnum;
-#ifdef KR_headers
-extern int z_putc();
-#else
-extern int z_putc(int);
-#endif
-
- static int
-z_wSL(Void)
-{
- while(f__recpos < f__svic->icirlen)
- z_putc(' ');
- return z_rnew();
- }
-
- VOID
-#ifdef KR_headers
-c_liw(a) icilist *a;
-#else
-c_liw(icilist *a)
-#endif
-{
- f__reading = 0;
- f__external = 0;
- f__formatted = 1;
- f__putn = z_putc;
- L_len = a->icirlen;
- f__donewrec = z_wSL;
- f__svic = a;
- f__icnum = f__recpos = 0;
- f__cursor = 0;
- f__cf = 0;
- f__curunit = 0;
- f__icptr = a->iciunit;
- f__icend = f__icptr + a->icirlen*a->icirnum;
- f__elist = (cilist *)a;
- }
-
- integer
-#ifdef KR_headers
-s_wsni(a) icilist *a;
-#else
-s_wsni(icilist *a)
-#endif
-{
- cilist ca;
-
- if(f__init != 1) f_init();
- f__init = 3;
- c_liw(a);
- ca.cifmt = a->icifmt;
- x_wsne(&ca);
- z_wSL();
- return 0;
- }
-
- integer
-#ifdef KR_headers
-s_wsli(a) icilist *a;
-#else
-s_wsli(icilist *a)
-#endif
-{
- if(f__init != 1) f_init();
- f__init = 3;
- f__lioproc = l_write;
- c_liw(a);
- return(0);
- }
-
-integer e_wsli(Void)
-{
- f__init = 1;
- z_wSL();
- return(0);
- }
diff --git a/gcc/f/runtime/libI77/inquire.c b/gcc/f/runtime/libI77/inquire.c
deleted file mode 100644
index 963d4c3e5e8..00000000000
--- a/gcc/f/runtime/libI77/inquire.c
+++ /dev/null
@@ -1,108 +0,0 @@
-#include "f2c.h"
-#include "fio.h"
-#include <string.h>
-#ifdef KR_headers
-integer f_inqu(a) inlist *a;
-#else
-#if defined (MSDOS) && !defined (GO32)
-#undef abs
-#undef min
-#undef max
-#include "io.h"
-#endif
-integer f_inqu(inlist *a)
-#endif
-{ flag byfile;
- int i, n;
- unit *p;
- char buf[256];
- long x;
- if (f__init & 2)
- f__fatal (131, "I/O recursion");
- if(a->infile!=NULL)
- { byfile=1;
- g_char(a->infile,a->infilen,buf);
-#ifdef NON_UNIX_STDIO
- x = access(buf,0) ? -1 : 0;
- for(i=0,p=NULL;i<MXUNIT;i++)
- if(f__units[i].ufd != NULL
- && f__units[i].ufnm != NULL
- && !strcmp(f__units[i].ufnm,buf)) {
- p = &f__units[i];
- break;
- }
-#else
- x=f__inode(buf, &n);
- for(i=0,p=NULL;i<MXUNIT;i++)
- if(f__units[i].uinode==x
- && f__units[i].ufd!=NULL
- && f__units[i].udev == n) {
- p = &f__units[i];
- break;
- }
-#endif
- }
- else
- {
- byfile=0;
- if(a->inunit<MXUNIT && a->inunit>=0)
- {
- p= &f__units[a->inunit];
- }
- else
- {
- p=NULL;
- }
- }
- if(a->inex!=NULL)
- if(byfile && x != -1 || !byfile && p!=NULL)
- *a->inex=1;
- else *a->inex=0;
- if(a->inopen!=NULL)
- if(byfile) *a->inopen=(p!=NULL);
- else *a->inopen=(p!=NULL && p->ufd!=NULL);
- if(a->innum!=NULL) *a->innum= p-f__units;
- if(a->innamed!=NULL)
- if(byfile || p!=NULL && p->ufnm!=NULL)
- *a->innamed=1;
- else *a->innamed=0;
- if(a->inname!=NULL)
- if(byfile)
- b_char(buf,a->inname,a->innamlen);
- else if(p!=NULL && p->ufnm!=NULL)
- b_char(p->ufnm,a->inname,a->innamlen);
- if(a->inacc!=NULL && p!=NULL && p->ufd!=NULL)
- if(p->url)
- b_char("DIRECT",a->inacc,a->inacclen);
- else b_char("SEQUENTIAL",a->inacc,a->inacclen);
- if(a->inseq!=NULL)
- if(p!=NULL && p->url)
- b_char("NO",a->inseq,a->inseqlen);
- else b_char("YES",a->inseq,a->inseqlen);
- if(a->indir!=NULL)
- if(p==NULL || p->url)
- b_char("YES",a->indir,a->indirlen);
- else b_char("NO",a->indir,a->indirlen);
- if(a->infmt!=NULL)
- if(p!=NULL && p->ufmt==0)
- b_char("UNFORMATTED",a->infmt,a->infmtlen);
- else b_char("FORMATTED",a->infmt,a->infmtlen);
- if(a->inform!=NULL)
- if(p!=NULL && p->ufmt==0)
- b_char("NO",a->inform,a->informlen);
- else b_char("YES",a->inform,a->informlen);
- if(a->inunf)
- if(p!=NULL && p->ufmt==0)
- b_char("YES",a->inunf,a->inunflen);
- else if (p!=NULL) b_char("NO",a->inunf,a->inunflen);
- else b_char("UNKNOWN",a->inunf,a->inunflen);
- if(a->inrecl!=NULL && p!=NULL)
- *a->inrecl=p->url;
- if(a->innrec!=NULL && p!=NULL && p->url>0)
- *a->innrec=ftell(p->ufd)/p->url+1;
- if(a->inblank && p!=NULL && p->ufmt)
- if(p->ublnk)
- b_char("ZERO",a->inblank,a->inblanklen);
- else b_char("NULL",a->inblank,a->inblanklen);
- return(0);
-}
diff --git a/gcc/f/runtime/libI77/lio.h b/gcc/f/runtime/libI77/lio.h
deleted file mode 100644
index 012317206aa..00000000000
--- a/gcc/f/runtime/libI77/lio.h
+++ /dev/null
@@ -1,74 +0,0 @@
-/* copy of ftypes from the compiler */
-/* variable types
- * numeric assumptions:
- * int < reals < complexes
- * TYDREAL-TYREAL = TYDCOMPLEX-TYCOMPLEX
- */
-
-/* 0-10 retain their old (pre LOGICAL*1, etc.) */
-/* values to allow mixing old and new objects. */
-
-#define TYUNKNOWN 0
-#define TYADDR 1
-#define TYSHORT 2
-#define TYLONG 3
-#define TYREAL 4
-#define TYDREAL 5
-#define TYCOMPLEX 6
-#define TYDCOMPLEX 7
-#define TYLOGICAL 8
-#define TYCHAR 9
-#define TYSUBR 10
-#define TYINT1 11
-#define TYLOGICAL1 12
-#define TYLOGICAL2 13
-#ifdef Allow_TYQUAD
-#undef TYQUAD
-#define TYQUAD 14
-#endif
-
-#define LINTW 24
-#define LINE 80
-#define LLOGW 2
-#ifdef Old_list_output
-#define LLOW 1.0
-#define LHIGH 1.e9
-#define LEFMT " %# .8E"
-#define LFFMT " %# .9g"
-#else
-#define LGFMT "%.9G"
-#endif
-/* LEFBL 20 should suffice; 24 overcomes a NeXT bug. */
-#define LEFBL 24
-
-typedef union
-{
- char flchar;
- short flshort;
- ftnint flint;
-#ifdef Allow_TYQUAD
- longint fllongint;
-#endif
- real flreal;
- doublereal fldouble;
-} flex;
-extern int f__scale;
-#ifdef KR_headers
-extern int (*f__lioproc)(), (*l_getc)(), (*l_ungetc)();
-extern int l_read(), l_write();
-#else
-#ifdef __cplusplus
-extern "C" {
-#endif
-extern int (*f__lioproc)(ftnint*, char*, ftnlen, ftnint);
-extern int l_write(ftnint*, char*, ftnlen, ftnint);
-extern void x_wsne(cilist*);
-extern int c_le(cilist*), (*l_getc)(void), (*l_ungetc)(int,FILE*);
-extern int l_read(ftnint*,char*,ftnlen,ftnint);
-extern integer e_rsle(void), e_wsle(void), s_wsne(cilist*);
-extern int z_rnew(void);
-#ifdef __cplusplus
- }
-#endif
-#endif
-extern ftnint L_len;
diff --git a/gcc/f/runtime/libI77/lread.c b/gcc/f/runtime/libI77/lread.c
deleted file mode 100644
index 3f0642c24cd..00000000000
--- a/gcc/f/runtime/libI77/lread.c
+++ /dev/null
@@ -1,684 +0,0 @@
-#include <ctype.h>
-#include "f2c.h"
-#include "fio.h"
-
-/* Compile with -DF8X_NML_ELIDE_QUOTES to permit eliding quotation */
-/* marks in namelist input a la the Fortran 8X Draft published in */
-/* the May 1989 issue of Fortran Forum. */
-
-
-extern char *f__fmtbuf;
-
-#ifdef Allow_TYQUAD
-static longint f__llx;
-static int quad_read;
-#endif
-
-#ifdef KR_headers
-extern double atof();
-extern char *malloc(), *realloc();
-int (*f__lioproc)(), (*l_getc)(), (*l_ungetc)();
-#else
-#undef abs
-#undef min
-#undef max
-#include <stdlib.h>
-int (*f__lioproc)(ftnint*, char*, ftnlen, ftnint), (*l_getc)(void),
- (*l_ungetc)(int,FILE*);
-#endif
-
-#include "fmt.h"
-#include "lio.h"
-#include "fp.h"
-
-int l_eof;
-
-#define isblnk(x) (f__ltab[x+1]&B)
-#define issep(x) (f__ltab[x+1]&SX)
-#define isapos(x) (f__ltab[x+1]&AX)
-#define isexp(x) (f__ltab[x+1]&EX)
-#define issign(x) (f__ltab[x+1]&SG)
-#define iswhit(x) (f__ltab[x+1]&WH)
-#define SX 1
-#define B 2
-#define AX 4
-#define EX 8
-#define SG 16
-#define WH 32
-char f__ltab[128+1] = { /* offset one for EOF */
- 0,
- 0,0,AX,0,0,0,0,0,0,WH|B,SX|WH,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- SX|B|WH,0,AX,0,0,0,0,AX,0,0,0,SG,SX,SG,0,SX,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,EX,EX,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- AX,0,0,0,EX,EX,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-};
-
-#ifdef ungetc
- static int
-#ifdef KR_headers
-un_getc(x,f__cf) int x; FILE *f__cf;
-#else
-un_getc(int x, FILE *f__cf)
-#endif
-{ return ungetc(x,f__cf); }
-#else
-#define un_getc ungetc
-#ifdef KR_headers
- extern int ungetc();
-#else
-extern int ungetc(int, FILE*); /* for systems with a buggy stdio.h */
-#endif
-#endif
-
-t_getc(Void)
-{ int ch;
- if(f__curunit->uend) return(EOF);
- if((ch=getc(f__cf))!=EOF) return(ch);
- if(feof(f__cf))
- f__curunit->uend = l_eof = 1;
- return(EOF);
-}
-integer e_rsle(Void)
-{
- int ch;
- f__init = 1;
- if(f__curunit->uend) return(0);
- while((ch=t_getc())!='\n')
- if (ch == EOF) {
- if(feof(f__cf))
- f__curunit->uend = l_eof = 1;
- return EOF;
- }
- return(0);
-}
-
-flag f__lquit;
-int f__lcount,f__ltype,nml_read;
-char *f__lchar;
-double f__lx,f__ly;
-#define ERR(x) if(n=(x)) {f__init &= ~2; return(n);}
-#define GETC(x) (x=(*l_getc)())
-#define Ungetc(x,y) (*l_ungetc)(x,y)
-
-#ifdef KR_headers
-l_R(poststar) int poststar;
-#else
-l_R(int poststar)
-#endif
-{
- char s[FMAX+EXPMAXDIGS+4];
- register int ch;
- register char *sp, *spe, *sp1;
- long e, exp;
- int havenum, havestar, se;
-
- if (!poststar) {
- if (f__lcount > 0)
- return(0);
- f__lcount = 1;
- }
-#ifdef Allow_TYQUAD
- f__llx = 0;
-#endif
- f__ltype = 0;
- exp = 0;
- havestar = 0;
-retry:
- sp1 = sp = s;
- spe = sp + FMAX;
- havenum = 0;
-
- switch(GETC(ch)) {
- case '-': *sp++ = ch; sp1++; spe++;
- case '+':
- GETC(ch);
- }
- while(ch == '0') {
- ++havenum;
- GETC(ch);
- }
- while(isdigit(ch)) {
- if (sp < spe) *sp++ = ch;
- else ++exp;
- GETC(ch);
- }
- if (ch == '*' && !poststar) {
- if (sp == sp1 || exp || *s == '-') {
- errfl(f__elist->cierr,112,"bad repetition count");
- }
- poststar = havestar = 1;
- *sp = 0;
- f__lcount = atoi(s);
- goto retry;
- }
- if (ch == '.') {
- GETC(ch);
- if (sp == sp1)
- while(ch == '0') {
- ++havenum;
- --exp;
- GETC(ch);
- }
- while(isdigit(ch)) {
- if (sp < spe)
- { *sp++ = ch; --exp; }
- GETC(ch);
- }
- }
- havenum += sp - sp1;
- se = 0;
- if (issign(ch))
- goto signonly;
- if (havenum && isexp(ch)) {
- GETC(ch);
- if (issign(ch)) {
-signonly:
- if (ch == '-') se = 1;
- GETC(ch);
- }
- if (!isdigit(ch)) {
-bad:
- errfl(f__elist->cierr,112,"exponent field");
- }
-
- e = ch - '0';
- while(isdigit(GETC(ch))) {
- e = 10*e + ch - '0';
- if (e > EXPMAX)
- goto bad;
- }
- if (se)
- exp -= e;
- else
- exp += e;
- }
- (void) Ungetc(ch, f__cf);
- if (sp > sp1) {
- ++havenum;
- while(*--sp == '0')
- ++exp;
- if (exp)
- sprintf(sp+1, "e%ld", exp);
- else
- sp[1] = 0;
- f__lx = atof(s);
-#ifdef Allow_TYQUAD
- if (quad_read && (se = sp - sp1 + exp) > 14 && se < 20) {
- /* Assuming 64-bit longint and 32-bit long. */
- if (exp < 0)
- sp += exp;
- if (sp1 <= sp) {
- f__llx = *sp1 - '0';
- while(++sp1 <= sp)
- f__llx = 10*f__llx + (*sp1 - '0');
- }
- while(--exp >= 0)
- f__llx *= 10;
- if (*s == '-')
- f__llx = -f__llx;
- }
-#endif
- }
- else
- f__lx = 0.;
- if (havenum)
- f__ltype = TYLONG;
- else
- switch(ch) {
- case ',':
- case '/':
- break;
- default:
- if (havestar && ( ch == ' '
- ||ch == '\t'
- ||ch == '\n'))
- break;
- if (nml_read > 1) {
- f__lquit = 2;
- return 0;
- }
- errfl(f__elist->cierr,112,"invalid number");
- }
- return 0;
- }
-
- static int
-#ifdef KR_headers
-rd_count(ch) register int ch;
-#else
-rd_count(register int ch)
-#endif
-{
- if (ch < '0' || ch > '9')
- return 1;
- f__lcount = ch - '0';
- while(GETC(ch) >= '0' && ch <= '9')
- f__lcount = 10*f__lcount + ch - '0';
- Ungetc(ch,f__cf);
- return f__lcount <= 0;
- }
-
-l_C(Void)
-{ int ch, nml_save;
- double lz;
- if(f__lcount>0) return(0);
- f__ltype=0;
- GETC(ch);
- if(ch!='(')
- {
- if (nml_read > 1 && (ch < '0' || ch > '9')) {
- Ungetc(ch,f__cf);
- f__lquit = 2;
- return 0;
- }
- if (rd_count(ch))
- if(!f__cf || !feof(f__cf))
- errfl(f__elist->cierr,112,"complex format");
- else
- err(f__elist->cierr,(EOF),"lread");
- if(GETC(ch)!='*')
- {
- if(!f__cf || !feof(f__cf))
- errfl(f__elist->cierr,112,"no star");
- else
- err(f__elist->cierr,(EOF),"lread");
- }
- if(GETC(ch)!='(')
- { Ungetc(ch,f__cf);
- return(0);
- }
- }
- else
- f__lcount = 1;
- while(iswhit(GETC(ch)));
- Ungetc(ch,f__cf);
- nml_save = nml_read;
- nml_read = 0;
- if (ch = l_R(1))
- return ch;
- if (!f__ltype)
- errfl(f__elist->cierr,112,"no real part");
- lz = f__lx;
- while(iswhit(GETC(ch)));
- if(ch!=',')
- { (void) Ungetc(ch,f__cf);
- errfl(f__elist->cierr,112,"no comma");
- }
- while(iswhit(GETC(ch)));
- (void) Ungetc(ch,f__cf);
- if (ch = l_R(1))
- return ch;
- if (!f__ltype)
- errfl(f__elist->cierr,112,"no imaginary part");
- while(iswhit(GETC(ch)));
- if(ch!=')') errfl(f__elist->cierr,112,"no )");
- f__ly = f__lx;
- f__lx = lz;
-#ifdef Allow_TYQUAD
- f__llx = 0;
-#endif
- nml_read = nml_save;
- return(0);
-}
-l_L(Void)
-{
- int ch;
- if(f__lcount>0) return(0);
- f__lcount = 1;
- f__ltype=0;
- GETC(ch);
- if(isdigit(ch))
- {
- rd_count(ch);
- if(GETC(ch)!='*')
- if(!f__cf || !feof(f__cf))
- errfl(f__elist->cierr,112,"no star");
- else
- err(f__elist->cierr,(EOF),"lread");
- GETC(ch);
- }
- if(ch == '.') GETC(ch);
- switch(ch)
- {
- case 't':
- case 'T':
- f__lx=1;
- break;
- case 'f':
- case 'F':
- f__lx=0;
- break;
- default:
- if(isblnk(ch) || issep(ch) || ch==EOF)
- { (void) Ungetc(ch,f__cf);
- return(0);
- }
- if (nml_read > 1) {
- Ungetc(ch,f__cf);
- f__lquit = 2;
- return 0;
- }
- errfl(f__elist->cierr,112,"logical");
- }
- f__ltype=TYLONG;
- while(!issep(GETC(ch)) && ch!=EOF);
- (void) Ungetc(ch, f__cf);
- return(0);
-}
-#define BUFSIZE 128
-l_CHAR(Void)
-{ int ch,size,i;
- static char rafail[] = "realloc failure";
- char quote,*p;
- if(f__lcount>0) return(0);
- f__ltype=0;
- if(f__lchar!=NULL) free(f__lchar);
- size=BUFSIZE;
- p=f__lchar = (char *)malloc((unsigned int)size);
- if(f__lchar == NULL)
- errfl(f__elist->cierr,113,"no space");
-
- GETC(ch);
- if(isdigit(ch)) {
- /* allow Fortran 8x-style unquoted string... */
- /* either find a repetition count or the string */
- f__lcount = ch - '0';
- *p++ = ch;
- for(i = 1;;) {
- switch(GETC(ch)) {
- case '*':
- if (f__lcount == 0) {
- f__lcount = 1;
-#ifndef F8X_NML_ELIDE_QUOTES
- if (nml_read)
- goto no_quote;
-#endif
- goto noquote;
- }
- p = f__lchar;
- goto have_lcount;
- case ',':
- case ' ':
- case '\t':
- case '\n':
- case '/':
- Ungetc(ch,f__cf);
- /* no break */
- case EOF:
- f__lcount = 1;
- f__ltype = TYCHAR;
- return *p = 0;
- }
- if (!isdigit(ch)) {
- f__lcount = 1;
-#ifndef F8X_NML_ELIDE_QUOTES
- if (nml_read) {
- no_quote:
- errfl(f__elist->cierr,112,
- "undelimited character string");
- }
-#endif
- goto noquote;
- }
- *p++ = ch;
- f__lcount = 10*f__lcount + ch - '0';
- if (++i == size) {
- f__lchar = (char *)realloc(f__lchar,
- (unsigned int)(size += BUFSIZE));
- if(f__lchar == NULL)
- errfl(f__elist->cierr,113,rafail);
- p = f__lchar + i;
- }
- }
- }
- else (void) Ungetc(ch,f__cf);
- have_lcount:
- if(GETC(ch)=='\'' || ch=='"') quote=ch;
- else if(isblnk(ch) || (issep(ch) && ch != '\n') || ch==EOF) {
- Ungetc(ch,f__cf);
- return 0;
- }
-#ifndef F8X_NML_ELIDE_QUOTES
- else if (nml_read > 1) {
- Ungetc(ch,f__cf);
- f__lquit = 2;
- return 0;
- }
-#endif
- else {
- /* Fortran 8x-style unquoted string */
- *p++ = ch;
- for(i = 1;;) {
- switch(GETC(ch)) {
- case ',':
- case ' ':
- case '\t':
- case '\n':
- case '/':
- Ungetc(ch,f__cf);
- /* no break */
- case EOF:
- f__ltype = TYCHAR;
- return *p = 0;
- }
- noquote:
- *p++ = ch;
- if (++i == size) {
- f__lchar = (char *)realloc(f__lchar,
- (unsigned int)(size += BUFSIZE));
- if(f__lchar == NULL)
- errfl(f__elist->cierr,113,rafail);
- p = f__lchar + i;
- }
- }
- }
- f__ltype=TYCHAR;
- for(i=0;;)
- { while(GETC(ch)!=quote && ch!='\n'
- && ch!=EOF && ++i<size) *p++ = ch;
- if(i==size)
- {
- newone:
- f__lchar= (char *)realloc(f__lchar,
- (unsigned int)(size += BUFSIZE));
- if(f__lchar == NULL)
- errfl(f__elist->cierr,113,rafail);
- p=f__lchar+i-1;
- *p++ = ch;
- }
- else if(ch==EOF) return(EOF);
- else if(ch=='\n')
- { if(*(p-1) != '\\') continue;
- i--;
- p--;
- if(++i<size) *p++ = ch;
- else goto newone;
- }
- else if(GETC(ch)==quote)
- { if(++i<size) *p++ = ch;
- else goto newone;
- }
- else
- { (void) Ungetc(ch,f__cf);
- *p = 0;
- return(0);
- }
- }
-}
-#ifdef KR_headers
-c_le(a) cilist *a;
-#else
-c_le(cilist *a)
-#endif
-{
- if(f__init != 1) f_init();
- f__init = 3;
- f__fmtbuf="list io";
- if(a->ciunit>=MXUNIT || a->ciunit<0)
- err(a->cierr,101,"stler");
- f__scale=f__recpos=0;
- f__elist=a;
- f__curunit = &f__units[a->ciunit];
- if(f__curunit->ufd==NULL && fk_open(SEQ,FMT,a->ciunit))
- err(a->cierr,102,"lio");
- f__cf=f__curunit->ufd;
- if(!f__curunit->ufmt) err(a->cierr,103,"lio");
- return(0);
-}
-#ifdef KR_headers
-l_read(number,ptr,len,type) ftnint *number,type; char *ptr; ftnlen len;
-#else
-l_read(ftnint *number, char *ptr, ftnlen len, ftnint type)
-#endif
-{
-#define Ptr ((flex *)ptr)
- int i,n,ch;
- doublereal *yy;
- real *xx;
- for(i=0;i<*number;i++)
- {
- if(f__lquit) return(0);
- if(l_eof)
- err(f__elist->ciend, EOF, "list in");
- if(f__lcount == 0) {
- f__ltype = 0;
- for(;;) {
- GETC(ch);
- switch(ch) {
- case EOF:
- err(f__elist->ciend,(EOF),"list in");
- case ' ':
- case '\t':
- case '\n':
- continue;
- case '/':
- f__lquit = 1;
- goto loopend;
- case ',':
- f__lcount = 1;
- goto loopend;
- default:
- (void) Ungetc(ch, f__cf);
- goto rddata;
- }
- }
- }
- rddata:
- switch((int)type)
- {
- case TYINT1:
- case TYSHORT:
- case TYLONG:
- case TYREAL:
- case TYDREAL:
- ERR(l_R(0));
- break;
-#ifdef TYQUAD
- case TYQUAD:
- quad_read = 1;
- n = l_R(0);
- quad_read = 0;
- ERR(n);
- break;
-#endif
- case TYCOMPLEX:
- case TYDCOMPLEX:
- ERR(l_C());
- break;
- case TYLOGICAL1:
- case TYLOGICAL2:
- case TYLOGICAL:
- ERR(l_L());
- break;
- case TYCHAR:
- ERR(l_CHAR());
- break;
- }
- while (GETC(ch) == ' ' || ch == '\t');
- if (ch != ',' || f__lcount > 1)
- Ungetc(ch,f__cf);
- loopend:
- if(f__lquit) return(0);
- if(f__cf && ferror(f__cf)) {
- clearerr(f__cf);
- errfl(f__elist->cierr,errno,"list in");
- }
- if(f__ltype==0) goto bump;
- switch((int)type)
- {
- case TYINT1:
- case TYLOGICAL1:
- Ptr->flchar = (char)f__lx;
- break;
- case TYLOGICAL2:
- case TYSHORT:
- Ptr->flshort = (short)f__lx;
- break;
- case TYLOGICAL:
- case TYLONG:
- Ptr->flint=f__lx;
- break;
-#ifdef Allow_TYQUAD
- case TYQUAD:
- if (!(Ptr->fllongint = f__llx))
- Ptr->fllongint = f__lx;
- break;
-#endif
- case TYREAL:
- Ptr->flreal=f__lx;
- break;
- case TYDREAL:
- Ptr->fldouble=f__lx;
- break;
- case TYCOMPLEX:
- xx=(real *)ptr;
- *xx++ = f__lx;
- *xx = f__ly;
- break;
- case TYDCOMPLEX:
- yy=(doublereal *)ptr;
- *yy++ = f__lx;
- *yy = f__ly;
- break;
- case TYCHAR:
- b_char(f__lchar,ptr,len);
- break;
- }
- bump:
- if(f__lcount>0) f__lcount--;
- ptr += len;
- if (nml_read)
- nml_read++;
- }
- return(0);
-#undef Ptr
-}
-#ifdef KR_headers
-integer s_rsle(a) cilist *a;
-#else
-integer s_rsle(cilist *a)
-#endif
-{
- int n;
-
- if(n=c_le(a)) return(n);
- f__reading=1;
- f__external=1;
- f__formatted=1;
- f__lioproc = l_read;
- f__lquit = 0;
- f__lcount = 0;
- l_eof = 0;
- if(f__curunit->uwrt && f__nowreading(f__curunit))
- err(a->cierr,errno,"read start");
- if(f__curunit->uend)
- err(f__elist->ciend,(EOF),"read start");
- l_getc = t_getc;
- l_ungetc = un_getc;
- f__doend = xrd_SL;
- return(0);
-}
diff --git a/gcc/f/runtime/libI77/lwrite.c b/gcc/f/runtime/libI77/lwrite.c
deleted file mode 100644
index 5da7dfbb972..00000000000
--- a/gcc/f/runtime/libI77/lwrite.c
+++ /dev/null
@@ -1,310 +0,0 @@
-#include "f2c.h"
-#include "fio.h"
-#include "fmt.h"
-#include "lio.h"
-
-ftnint L_len;
-int f__Aquote;
-
- static VOID
-donewrec(Void)
-{
- if (f__recpos)
- (*f__donewrec)();
- }
-
-#ifdef KR_headers
-t_putc(c)
-#else
-t_putc(int c)
-#endif
-{
- f__recpos++;
- putc(c,f__cf);
- return(0);
-}
- static VOID
-#ifdef KR_headers
-lwrt_I(n) longint n;
-#else
-lwrt_I(longint n)
-#endif
-{
- char *p;
- int ndigit, sign;
-
- p = f__icvt(n, &ndigit, &sign, 10);
- if(f__recpos + ndigit >= L_len)
- donewrec();
- PUT(' ');
- if (sign)
- PUT('-');
- while(*p)
- PUT(*p++);
-}
- static VOID
-#ifdef KR_headers
-lwrt_L(n, len) ftnint n; ftnlen len;
-#else
-lwrt_L(ftnint n, ftnlen len)
-#endif
-{
- if(f__recpos+LLOGW>=L_len)
- donewrec();
- wrt_L((Uint *)&n,LLOGW, len);
-}
- static VOID
-#ifdef KR_headers
-lwrt_A(p,len) char *p; ftnlen len;
-#else
-lwrt_A(char *p, ftnlen len)
-#endif
-{
- int a;
- char *p1, *pe;
-
- a = 0;
- pe = p + len;
- if (f__Aquote) {
- a = 3;
- if (len > 1 && p[len-1] == ' ') {
- while(--len > 1 && p[len-1] == ' ');
- pe = p + len;
- }
- p1 = p;
- while(p1 < pe)
- if (*p1++ == '\'')
- a++;
- }
- if(f__recpos+len+a >= L_len)
- donewrec();
- if (a
-#ifndef OMIT_BLANK_CC
- || !f__recpos
-#endif
- )
- PUT(' ');
- if (a) {
- PUT('\'');
- while(p < pe) {
- if (*p == '\'')
- PUT('\'');
- PUT(*p++);
- }
- PUT('\'');
- }
- else
- while(p < pe)
- PUT(*p++);
-}
-
- static int
-#ifdef KR_headers
-l_g(buf, n) char *buf; double n;
-#else
-l_g(char *buf, double n)
-#endif
-{
-#ifdef Old_list_output
- doublereal absn;
- char *fmt;
-
- absn = n;
- if (absn < 0)
- absn = -absn;
- fmt = LLOW <= absn && absn < LHIGH ? LFFMT : LEFMT;
-#ifdef USE_STRLEN
- sprintf(buf, fmt, n);
- return strlen(buf);
-#else
- return sprintf(buf, fmt, n);
-#endif
-
-#else
- register char *b, c, c1;
-
- b = buf;
- *b++ = ' ';
- if (n < 0) {
- *b++ = '-';
- n = -n;
- }
- else
- *b++ = ' ';
- if (n == 0) {
- *b++ = '0';
- *b++ = '.';
- *b = 0;
- goto f__ret;
- }
- sprintf(b, LGFMT, n);
- switch(*b) {
-#ifndef WANT_LEAD_0
- case '0':
- while(b[0] = b[1])
- b++;
- break;
-#endif
- case 'i':
- case 'I':
- /* Infinity */
- case 'n':
- case 'N':
- /* NaN */
- while(*++b);
- break;
-
- default:
- /* Fortran 77 insists on having a decimal point... */
- for(;; b++)
- switch(*b) {
- case 0:
- *b++ = '.';
- *b = 0;
- goto f__ret;
- case '.':
- while(*++b);
- goto f__ret;
- case 'E':
- for(c1 = '.', c = 'E'; *b = c1;
- c1 = c, c = *++b);
- goto f__ret;
- }
- }
- f__ret:
- return b - buf;
-#endif
- }
-
- static VOID
-#ifdef KR_headers
-l_put(s) register char *s;
-#else
-l_put(register char *s)
-#endif
-{
-#ifdef KR_headers
- register int c, (*pn)() = f__putn;
-#else
- register int c, (*pn)(int) = f__putn;
-#endif
- while(c = *s++)
- (*pn)(c);
- }
-
- static VOID
-#ifdef KR_headers
-lwrt_F(n) double n;
-#else
-lwrt_F(double n)
-#endif
-{
- char buf[LEFBL];
-
- if(f__recpos + l_g(buf,n) >= L_len)
- donewrec();
- l_put(buf);
-}
- static VOID
-#ifdef KR_headers
-lwrt_C(a,b) double a,b;
-#else
-lwrt_C(double a, double b)
-#endif
-{
- char *ba, *bb, bufa[LEFBL], bufb[LEFBL];
- int al, bl;
-
- al = l_g(bufa, a);
- for(ba = bufa; *ba == ' '; ba++)
- --al;
- bl = l_g(bufb, b) + 1; /* intentionally high by 1 */
- for(bb = bufb; *bb == ' '; bb++)
- --bl;
- if(f__recpos + al + bl + 3 >= L_len)
- donewrec();
-#ifdef OMIT_BLANK_CC
- else
-#endif
- PUT(' ');
- PUT('(');
- l_put(ba);
- PUT(',');
- if (f__recpos + bl >= L_len) {
- (*f__donewrec)();
-#ifndef OMIT_BLANK_CC
- PUT(' ');
-#endif
- }
- l_put(bb);
- PUT(')');
-}
-#ifdef KR_headers
-l_write(number,ptr,len,type) ftnint *number,type; char *ptr; ftnlen len;
-#else
-l_write(ftnint *number, char *ptr, ftnlen len, ftnint type)
-#endif
-{
-#define Ptr ((flex *)ptr)
- int i;
- longint x;
- double y,z;
- real *xx;
- doublereal *yy;
- for(i=0;i< *number; i++)
- {
- switch((int)type)
- {
- default: f__fatal(204,"unknown type in lio");
- case TYINT1:
- x = Ptr->flchar;
- goto xint;
- case TYSHORT:
- x=Ptr->flshort;
- goto xint;
-#ifdef Allow_TYQUAD
- case TYQUAD:
- x = Ptr->fllongint;
- goto xint;
-#endif
- case TYLONG:
- x=Ptr->flint;
- xint: lwrt_I(x);
- break;
- case TYREAL:
- y=Ptr->flreal;
- goto xfloat;
- case TYDREAL:
- y=Ptr->fldouble;
- xfloat: lwrt_F(y);
- break;
- case TYCOMPLEX:
- xx= &Ptr->flreal;
- y = *xx++;
- z = *xx;
- goto xcomplex;
- case TYDCOMPLEX:
- yy = &Ptr->fldouble;
- y= *yy++;
- z = *yy;
- xcomplex:
- lwrt_C(y,z);
- break;
- case TYLOGICAL1:
- x = Ptr->flchar;
- goto xlog;
- case TYLOGICAL2:
- x = Ptr->flshort;
- goto xlog;
- case TYLOGICAL:
- x = Ptr->flint;
- xlog: lwrt_L(Ptr->flint, len);
- break;
- case TYCHAR:
- lwrt_A(ptr,len);
- break;
- }
- ptr += len;
- }
- return(0);
-}
diff --git a/gcc/f/runtime/libI77/makefile.netlib b/gcc/f/runtime/libI77/makefile.netlib
deleted file mode 100644
index edba1fe8569..00000000000
--- a/gcc/f/runtime/libI77/makefile.netlib
+++ /dev/null
@@ -1,104 +0,0 @@
-.SUFFIXES: .c .o
-CC = cc
-CFLAGS = -O
-SHELL = /bin/sh
-
-# compile, then strip unnecessary symbols
-.c.o:
- $(CC) -c -DSkip_f2c_Undefs $(CFLAGS) $*.c
- ld -r -x -o $*.xxx $*.o
- mv $*.xxx $*.o
-## Under Solaris (and other systems that do not understand ld -x),
-## omit -x in the ld line above.
-## If your system does not have the ld command, comment out
-## or remove both the ld and mv lines above.
-
-OBJ = Version.o backspace.o close.o dfe.o dolio.o due.o endfile.o err.o \
- fmt.o fmtlib.o ftell_.o iio.o ilnw.o inquire.o lread.o lwrite.o \
- open.o rdfmt.o rewind.o rsfe.o rsli.o rsne.o sfe.o sue.o typesize.o \
- uio.o util.o wref.o wrtfmt.o wsfe.o wsle.o wsne.o xwsne.o
-libI77.a: $(OBJ)
- ar r libI77.a $?
- -ranlib libI77.a
-
-### If your system lacks ranlib, you don't need it; see README.
-
-install: libI77.a
- cp libI77.a /usr/lib/libI77.a
- ranlib /usr/lib/libI77.a
-
-Version.o: Version.c
- $(CC) -c Version.c
-
-# To compile with C++, first "make f2c.h"
-f2c.h: f2ch.add
- cat /usr/include/f2c.h f2ch.add >f2c.h
-
-
-clean:
- rm -f $(OBJ) libI77.a
-
-clobber: clean
- rm -f libI77.a
-
-backspace.o: fio.h
-close.o: fio.h
-dfe.o: fio.h
-dfe.o: fmt.h
-due.o: fio.h
-endfile.o: fio.h rawio.h
-err.o: fio.h rawio.h
-fmt.o: fio.h
-fmt.o: fmt.h
-ftell_.o: fio.h
-iio.o: fio.h
-iio.o: fmt.h
-ilnw.o: fio.h
-ilnw.o: lio.h
-inquire.o: fio.h
-lread.o: fio.h
-lread.o: fmt.h
-lread.o: lio.h
-lread.o: fp.h
-lwrite.o: fio.h
-lwrite.o: fmt.h
-lwrite.o: lio.h
-open.o: fio.h rawio.h
-rdfmt.o: fio.h
-rdfmt.o: fmt.h
-rdfmt.o: fp.h
-rewind.o: fio.h
-rsfe.o: fio.h
-rsfe.o: fmt.h
-rsli.o: fio.h
-rsli.o: lio.h
-rsne.o: fio.h
-rsne.o: lio.h
-sfe.o: fio.h
-sue.o: fio.h
-uio.o: fio.h
-util.o: fio.h
-wref.o: fio.h
-wref.o: fmt.h
-wref.o: fp.h
-wrtfmt.o: fio.h
-wrtfmt.o: fmt.h
-wsfe.o: fio.h
-wsfe.o: fmt.h
-wsle.o: fio.h
-wsle.o: fmt.h
-wsle.o: lio.h
-wsne.o: fio.h
-wsne.o: lio.h
-xwsne.o: fio.h
-xwsne.o: lio.h
-xwsne.o: fmt.h
-
-check:
- xsum Notice README Version.c backspace.c close.c dfe.c dolio.c \
- due.c endfile.c err.c f2ch.add fio.h fmt.c fmt.h fmtlib.c fp.h \
- ftell_.c iio.c ilnw.c inquire.c lio.h lread.c lwrite.c makefile \
- open.c rawio.h rdfmt.c rewind.c rsfe.c rsli.c rsne.c sfe.c sue.c \
- typesize.c uio.c util.c wref.c wrtfmt.c wsfe.c wsle.c wsne.c \
- xwsne.c >zap
- cmp zap libI77.xsum && rm zap || diff libI77.xsum zap
diff --git a/gcc/f/runtime/libI77/open.c b/gcc/f/runtime/libI77/open.c
deleted file mode 100644
index b08302b5b2c..00000000000
--- a/gcc/f/runtime/libI77/open.c
+++ /dev/null
@@ -1,245 +0,0 @@
-#ifndef NON_UNIX_STDIO
-#include <sys/types.h>
-#include <sys/stat.h>
-#endif
-#include "f2c.h"
-#include "fio.h"
-#include <string.h>
-#include "rawio.h"
-
-#ifdef KR_headers
-extern char *malloc(), *mktemp();
-extern integer f_clos();
-#else
-#undef abs
-#undef min
-#undef max
-#include <stdlib.h>
-extern int f__canseek(FILE*);
-extern integer f_clos(cllist*);
-#endif
-
-#ifdef NON_ANSI_RW_MODES
-char *f__r_mode[2] = {"r", "r"};
-char *f__w_mode[4] = {"w", "w", "r+w", "r+w"};
-#else
-char *f__r_mode[2] = {"rb", "r"};
-char *f__w_mode[4] = {"wb", "w", "r+b", "r+"};
-#endif
-
-#ifdef KR_headers
-f__isdev(s) char *s;
-#else
-f__isdev(char *s)
-#endif
-{
-#ifdef NON_UNIX_STDIO
- int i, j;
-
- i = open(s,O_RDONLY);
- if (i == -1)
- return 0;
- j = isatty(i);
- close(i);
- return j;
-#else
- struct stat x;
-
- if(stat(s, &x) == -1) return(0);
-#ifdef S_IFMT
- switch(x.st_mode&S_IFMT) {
- case S_IFREG:
- case S_IFDIR:
- return(0);
- }
-#else
-#ifdef S_ISREG
- /* POSIX version */
- if(S_ISREG(x.st_mode) || S_ISDIR(x.st_mode))
- return(0);
- else
-#else
- Help! How does stat work on this system?
-#endif
-#endif
- return(1);
-#endif
-}
-#ifdef KR_headers
-integer f_open(a) olist *a;
-#else
-integer f_open(olist *a)
-#endif
-{ unit *b;
- integer rv;
- char buf[256], *s;
- cllist x;
- int ufmt;
-#ifdef NON_UNIX_STDIO
- FILE *tf;
-#else
- int n;
- struct stat stb;
-#endif
- if(f__init != 1) f_init();
- if(a->ounit>=MXUNIT || a->ounit<0)
- err(a->oerr,101,"open");
- f__curunit = b = &f__units[a->ounit];
- if(b->ufd) {
- if(a->ofnm==0)
- {
- same: if (a->oblnk)
- b->ublnk = *a->oblnk == 'z' || *a->oblnk == 'Z';
- return(0);
- }
-#ifdef NON_UNIX_STDIO
- if (b->ufnm
- && strlen(b->ufnm) == a->ofnmlen
- && !strncmp(b->ufnm, b->ufnm, (unsigned)a->ofnmlen))
- goto same;
-#else
- g_char(a->ofnm,a->ofnmlen,buf);
- if (f__inode(buf,&n) == b->uinode && n == b->udev)
- goto same;
-#endif
- x.cunit=a->ounit;
- x.csta=0;
- x.cerr=a->oerr;
- if ((rv = f_clos(&x)) != 0)
- return rv;
- }
- b->url = (int)a->orl;
- b->ublnk = a->oblnk && (*a->oblnk == 'z' || *a->oblnk == 'Z');
- if(a->ofm==0)
- { if(b->url>0) b->ufmt=0;
- else b->ufmt=1;
- }
- else if(*a->ofm=='f' || *a->ofm == 'F') b->ufmt=1;
- else b->ufmt=0;
- ufmt = b->ufmt;
-#ifdef url_Adjust
- if (b->url && !ufmt)
- url_Adjust(b->url);
-#endif
- if (a->ofnm) {
- g_char(a->ofnm,a->ofnmlen,buf);
- if (!buf[0])
- err(a->oerr,107,"open");
- }
- else
- sprintf(buf, "fort.%ld", a->ounit);
- b->uscrtch = 0;
- switch(a->osta ? *a->osta : 'u')
- {
- case 'o':
- case 'O':
-#ifdef NON_UNIX_STDIO
- if(access(buf,0))
-#else
- if(stat(buf,&stb))
-#endif
- err(a->oerr,errno,"open");
- break;
- case 's':
- case 'S':
- b->uscrtch=1;
-#ifdef _POSIX_SOURCE
- tmpnam(buf);
-#else
- (void) strcpy(buf,"tmp.FXXXXXX");
- (void) mktemp(buf);
-#endif
- goto replace;
- case 'n':
- case 'N':
-#ifdef NON_UNIX_STDIO
- if(!access(buf,0))
-#else
- if(!stat(buf,&stb))
-#endif
- err(a->oerr,128,"open");
- /* no break */
- case 'r': /* Fortran 90 replace option */
- case 'R':
- replace:
-#ifdef NON_UNIX_STDIO
- if (tf = fopen(buf,f__w_mode[0]))
- fclose(tf);
-#else
- (void) close(creat(buf, 0666));
-#endif
- }
-
- b->ufnm=(char *) malloc((unsigned int)(strlen(buf)+1));
- if(b->ufnm==NULL) err(a->oerr,113,"no space");
- (void) strcpy(b->ufnm,buf);
- b->uend=0;
- b->uwrt = 0;
-#ifdef NON_UNIX_STDIO
- if ((s = a->oacc) && (*s == 'd' || *s == 'D'))
- ufmt = 0;
-#endif
- if(f__isdev(buf))
- { b->ufd = fopen(buf,f__r_mode[ufmt]);
- if(b->ufd==NULL) err(a->oerr,errno,buf);
- }
- else {
- if(!(b->ufd = fopen(buf, f__r_mode[ufmt]))) {
-#ifdef NON_UNIX_STDIO
- if (b->ufd = fopen(buf, f__w_mode[ufmt|2]))
- b->uwrt = 2;
- else if (b->ufd = fopen(buf, f__w_mode[ufmt]))
- b->uwrt = 1;
- else
-#else
- if ((n = open(buf,O_WRONLY)) >= 0)
- b->uwrt = 2;
- else {
- n = creat(buf, 0666);
- b->uwrt = 1;
- }
- if (n < 0
- || (b->ufd = fdopen(n, f__w_mode[ufmt])) == NULL)
-#endif
- err(a->oerr, errno, "open");
- }
- }
- b->useek=f__canseek(b->ufd);
-#ifndef NON_UNIX_STDIO
- if((b->uinode=f__inode(buf,&b->udev))==-1)
- err(a->oerr,108,"open");
-#endif
- if(b->useek)
- if (a->orl)
- rewind(b->ufd);
- else if ((s = a->oacc) && (*s == 'a' || *s == 'A')
- && fseek(b->ufd, 0L, SEEK_END))
- err(a->oerr,129,"open");
- return(0);
-}
-#ifdef KR_headers
-fk_open(seq,fmt,n) ftnint n;
-#else
-fk_open(int seq, int fmt, ftnint n)
-#endif
-{ char nbuf[10];
- olist a;
- int rtn;
- int save_init;
-
- (void) sprintf(nbuf,"fort.%ld",n);
- a.oerr=1;
- a.ounit=n;
- a.ofnm=nbuf;
- a.ofnmlen=strlen(nbuf);
- a.osta=NULL;
- a.oacc= seq==SEQ?"s":"d";
- a.ofm = fmt==FMT?"f":"u";
- a.orl = seq==DIR?1:0;
- a.oblnk=NULL;
- save_init = f__init;
- f__init &= ~2;
- rtn = f_open(&a);
- f__init = save_init | 1;
- return rtn;
-}
diff --git a/gcc/f/runtime/libI77/rawio.h b/gcc/f/runtime/libI77/rawio.h
deleted file mode 100644
index cc5cab8b7bb..00000000000
--- a/gcc/f/runtime/libI77/rawio.h
+++ /dev/null
@@ -1,45 +0,0 @@
-#ifdef KR_headers
-extern FILE *fdopen();
-#else
-#if defined (MSDOS) && !defined (GO32)
-#include "io.h"
-#ifndef WATCOM
-#define close _close
-#define creat _creat
-#define open _open
-#define read _read
-#define write _write
-#endif /*WATCOM*/
-#endif /*MSDOS*/
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if !(defined (MSDOS) && !defined (GO32))
-#ifdef OPEN_DECL
-extern int creat(const char*,int), open(const char*,int);
-#endif
-extern int close(int);
-extern int read(int,void*,size_t), write(int,void*,size_t);
-extern int unlink(const char*);
-#ifndef _POSIX_SOURCE
-#ifndef NON_UNIX_STDIO
-extern FILE *fdopen(int, const char*);
-#endif
-#endif
-#endif /*KR_HEADERS*/
-
-extern char *mktemp(char*);
-
-#ifdef __cplusplus
- }
-#endif
-#endif
-
-#ifndef NO_FCNTL
-#include <fcntl.h>
-#endif
-
-#ifndef O_WRONLY
-#define O_RDONLY 0
-#define O_WRONLY 1
-#endif
diff --git a/gcc/f/runtime/libI77/rdfmt.c b/gcc/f/runtime/libI77/rdfmt.c
deleted file mode 100644
index 0d8c2b4d9ca..00000000000
--- a/gcc/f/runtime/libI77/rdfmt.c
+++ /dev/null
@@ -1,476 +0,0 @@
-#include <ctype.h>
-#include "f2c.h"
-#include "fio.h"
-
-extern int f__cursor;
-#ifdef KR_headers
-extern double atof();
-#else
-#undef abs
-#undef min
-#undef max
-#include <stdlib.h>
-#endif
-
-#include "fmt.h"
-#include "fp.h"
-
- static int
-#ifdef KR_headers
-rd_Z(n,w,len) Uint *n; ftnlen len;
-#else
-rd_Z(Uint *n, int w, ftnlen len)
-#endif
-{
- long x[9];
- char *s, *s0, *s1, *se, *t;
- int ch, i, w1, w2;
- static char hex[256];
- static int one = 1;
- int bad = 0;
-
- if (!hex['0']) {
- s = "0123456789";
- while(ch = *s++)
- hex[ch] = ch - '0' + 1;
- s = "ABCDEF";
- while(ch = *s++)
- hex[ch] = hex[ch + 'a' - 'A'] = ch - 'A' + 11;
- }
- s = s0 = (char *)x;
- s1 = (char *)&x[4];
- se = (char *)&x[8];
- if (len > 4*sizeof(long))
- return errno = 117;
- while (w) {
- GET(ch);
- if (ch==',' || ch=='\n')
- break;
- w--;
- if (ch > ' ') {
- if (!hex[ch & 0xff])
- bad++;
- *s++ = ch;
- if (s == se) {
- /* discard excess characters */
- for(t = s0, s = s1; t < s1;)
- *t++ = *s++;
- s = s1;
- }
- }
- }
- if (bad)
- return errno = 115;
- w = (int)len;
- w1 = s - s0;
- w2 = w1+1 >> 1;
- t = (char *)n;
- if (*(char *)&one) {
- /* little endian */
- t += w - 1;
- i = -1;
- }
- else
- i = 1;
- for(; w > w2; t += i, --w)
- *t = 0;
- if (!w)
- return 0;
- if (w < w2)
- s0 = s - (w << 1);
- else if (w1 & 1) {
- *t = hex[*s0++ & 0xff] - 1;
- if (!--w)
- return 0;
- t += i;
- }
- do {
- *t = hex[*s0 & 0xff]-1 << 4 | hex[s0[1] & 0xff]-1;
- t += i;
- s0 += 2;
- }
- while(--w);
- return 0;
- }
-
- static int
-#ifdef KR_headers
-rd_I(n,w,len, base) Uint *n; int w; ftnlen len; register int base;
-#else
-rd_I(Uint *n, int w, ftnlen len, register int base)
-#endif
-{ longint x;
- int sign,ch;
- char s[84], *ps;
- ps=s; x=0;
- while (w)
- {
- GET(ch);
- if (ch==',' || ch=='\n') break;
- *ps=ch; ps++; w--;
- }
- *ps='\0';
- ps=s;
- while (*ps==' ') ps++;
- if (*ps=='-') { sign=1; ps++; }
- else { sign=0; if (*ps=='+') ps++; }
-loop: while (*ps>='0' && *ps<='9') { x=x*base+(*ps-'0'); ps++; }
- if (*ps==' ') {if (f__cblank) x *= base; ps++; goto loop;}
- if(sign) x = -x;
- if(len==sizeof(integer)) n->il=x;
- else if(len == sizeof(char)) n->ic = (char)x;
-#ifdef Allow_TYQUAD
- else if (len == sizeof(longint)) n->ili = x;
-#endif
- else n->is = (short)x;
- if (*ps) return(errno=115); else return(0);
-}
- static int
-#ifdef KR_headers
-rd_L(n,w,len) ftnint *n; ftnlen len;
-#else
-rd_L(ftnint *n, int w, ftnlen len)
-#endif
-{ int ch, lv;
- char s[84], *ps;
- ps=s;
- while (w) {
- GET(ch);
- if (ch==','||ch=='\n') break;
- *ps=ch;
- ps++; w--;
- }
- *ps='\0';
- ps=s; while (*ps==' ') ps++;
- if (*ps=='.') ps++;
- if (*ps=='t' || *ps == 'T')
- lv = 1;
- else if (*ps == 'f' || *ps == 'F')
- lv = 0;
- else return(errno=116);
- switch(len) {
- case sizeof(char): *(char *)n = (char)lv; break;
- case sizeof(short): *(short *)n = (short)lv; break;
- default: *n = lv;
- }
- return 0;
-}
-
- static int
-#ifdef KR_headers
-rd_F(p, w, d, len) ufloat *p; ftnlen len;
-#else
-rd_F(ufloat *p, int w, int d, ftnlen len)
-#endif
-{
- char s[FMAX+EXPMAXDIGS+4];
- register int ch;
- register char *sp, *spe, *sp1;
- double x;
- int scale1, se;
- long e, exp;
-
- sp1 = sp = s;
- spe = sp + FMAX;
- exp = -d;
- x = 0.;
-
- do {
- GET(ch);
- w--;
- } while (ch == ' ' && w);
- switch(ch) {
- case '-': *sp++ = ch; sp1++; spe++;
- case '+':
- if (!w) goto zero;
- --w;
- GET(ch);
- }
- while(ch == ' ') {
-blankdrop:
- if (!w--) goto zero; GET(ch); }
- while(ch == '0')
- { if (!w--) goto zero; GET(ch); }
- if (ch == ' ' && f__cblank)
- goto blankdrop;
- scale1 = f__scale;
- while(isdigit(ch)) {
-digloop1:
- if (sp < spe) *sp++ = ch;
- else ++exp;
-digloop1e:
- if (!w--) goto done;
- GET(ch);
- }
- if (ch == ' ') {
- if (f__cblank)
- { ch = '0'; goto digloop1; }
- goto digloop1e;
- }
- if (ch == '.') {
- exp += d;
- if (!w--) goto done;
- GET(ch);
- if (sp == sp1) { /* no digits yet */
- while(ch == '0') {
-skip01:
- --exp;
-skip0:
- if (!w--) goto done;
- GET(ch);
- }
- if (ch == ' ') {
- if (f__cblank) goto skip01;
- goto skip0;
- }
- }
- while(isdigit(ch)) {
-digloop2:
- if (sp < spe)
- { *sp++ = ch; --exp; }
-digloop2e:
- if (!w--) goto done;
- GET(ch);
- }
- if (ch == ' ') {
- if (f__cblank)
- { ch = '0'; goto digloop2; }
- goto digloop2e;
- }
- }
- switch(ch) {
- default:
- break;
- case '-': se = 1; goto signonly;
- case '+': se = 0; goto signonly;
- case 'e':
- case 'E':
- case 'd':
- case 'D':
- if (!w--)
- goto bad;
- GET(ch);
- while(ch == ' ') {
- if (!w--)
- goto bad;
- GET(ch);
- }
- se = 0;
- switch(ch) {
- case '-': se = 1;
- case '+':
-signonly:
- if (!w--)
- goto bad;
- GET(ch);
- }
- while(ch == ' ') {
- if (!w--)
- goto bad;
- GET(ch);
- }
- if (!isdigit(ch))
- goto bad;
-
- e = ch - '0';
- for(;;) {
- if (!w--)
- { ch = '\n'; break; }
- GET(ch);
- if (!isdigit(ch)) {
- if (ch == ' ') {
- if (f__cblank)
- ch = '0';
- else continue;
- }
- else
- break;
- }
- e = 10*e + ch - '0';
- if (e > EXPMAX && sp > sp1)
- goto bad;
- }
- if (se)
- exp -= e;
- else
- exp += e;
- scale1 = 0;
- }
- switch(ch) {
- case '\n':
- case ',':
- break;
- default:
-bad:
- return (errno = 115);
- }
-done:
- if (sp > sp1) {
- while(*--sp == '0')
- ++exp;
- if (exp -= scale1)
- sprintf(sp+1, "e%ld", exp);
- else
- sp[1] = 0;
- x = atof(s);
- }
-zero:
- if (len == sizeof(real))
- p->pf = x;
- else
- p->pd = x;
- return(0);
- }
-
-
- static int
-#ifdef KR_headers
-rd_A(p,len) char *p; ftnlen len;
-#else
-rd_A(char *p, ftnlen len)
-#endif
-{ int i,ch;
- for(i=0;i<len;i++)
- { GET(ch);
- *p++=VAL(ch);
- }
- return(0);
-}
- static int
-#ifdef KR_headers
-rd_AW(p,w,len) char *p; ftnlen len;
-#else
-rd_AW(char *p, int w, ftnlen len)
-#endif
-{ int i,ch;
- if(w>=len)
- { for(i=0;i<w-len;i++)
- GET(ch);
- for(i=0;i<len;i++)
- { GET(ch);
- *p++=VAL(ch);
- }
- return(0);
- }
- for(i=0;i<w;i++)
- { GET(ch);
- *p++=VAL(ch);
- }
- for(i=0;i<len-w;i++) *p++=' ';
- return(0);
-}
- static int
-#ifdef KR_headers
-rd_H(n,s) char *s;
-#else
-rd_H(int n, char *s)
-#endif
-{ int i,ch;
- for(i=0;i<n;i++)
- if((ch=(*f__getn)())<0) return(ch);
- else *s++ = ch=='\n'?' ':ch;
- return(1);
-}
- static int
-#ifdef KR_headers
-rd_POS(s) char *s;
-#else
-rd_POS(char *s)
-#endif
-{ char quote;
- int ch;
- quote= *s++;
- for(;*s;s++)
- if(*s==quote && *(s+1)!=quote) break;
- else if((ch=(*f__getn)())<0) return(ch);
- else *s = ch=='\n'?' ':ch;
- return(1);
-}
-#ifdef KR_headers
-rd_ed(p,ptr,len) struct syl *p; char *ptr; ftnlen len;
-#else
-rd_ed(struct syl *p, char *ptr, ftnlen len)
-#endif
-{ int ch;
- for(;f__cursor>0;f__cursor--) if((ch=(*f__getn)())<0) return(ch);
- if(f__cursor<0)
- { if(f__recpos+f__cursor < 0) /*err(elist->cierr,110,"fmt")*/
- f__cursor = -f__recpos; /* is this in the standard? */
- if(f__external == 0) {
- extern char *f__icptr;
- f__icptr += f__cursor;
- }
- else if(f__curunit && f__curunit->useek)
- (void) fseek(f__cf,(long) f__cursor,SEEK_CUR);
- else
- err(f__elist->cierr,106,"fmt");
- f__recpos += f__cursor;
- f__cursor=0;
- }
- switch(p->op)
- {
- default: fprintf(stderr,"rd_ed, unexpected code: %d\n", p->op);
- sig_die(f__fmtbuf, 1);
- case IM:
- case I: ch = rd_I((Uint *)ptr,p->p1,len, 10);
- break;
-
- /* O and OM don't work right for character, double, complex, */
- /* or doublecomplex, and they differ from Fortran 90 in */
- /* showing a minus sign for negative values. */
-
- case OM:
- case O: ch = rd_I((Uint *)ptr, p->p1, len, 8);
- break;
- case L: ch = rd_L((ftnint *)ptr,p->p1,len);
- break;
- case A: ch = rd_A(ptr,len);
- break;
- case AW:
- ch = rd_AW(ptr,p->p1,len);
- break;
- case E: case EE:
- case D:
- case G:
- case GE:
- case F: ch = rd_F((ufloat *)ptr,p->p1,p->p2,len);
- break;
-
- /* Z and ZM assume 8-bit bytes. */
-
- case ZM:
- case Z:
- ch = rd_Z((Uint *)ptr, p->p1, len);
- break;
- }
- if(ch == 0) return(ch);
- else if(ch == EOF) return(EOF);
- if (f__cf)
- clearerr(f__cf);
- return(errno);
-}
-#ifdef KR_headers
-rd_ned(p) struct syl *p;
-#else
-rd_ned(struct syl *p)
-#endif
-{
- switch(p->op)
- {
- default: fprintf(stderr,"rd_ned, unexpected code: %d\n", p->op);
- sig_die(f__fmtbuf, 1);
- case APOS:
- return(rd_POS(*(char **)&p->p2));
- case H: return(rd_H(p->p1,*(char **)&p->p2));
- case SLASH: return((*f__donewrec)());
- case TR:
- case X: f__cursor += p->p1;
- return(1);
- case T: f__cursor=p->p1-f__recpos - 1;
- return(1);
- case TL: f__cursor -= p->p1;
- if(f__cursor < -f__recpos) /* TL1000, 1X */
- f__cursor = -f__recpos;
- return(1);
- }
-}
diff --git a/gcc/f/runtime/libI77/rewind.c b/gcc/f/runtime/libI77/rewind.c
deleted file mode 100644
index 9ba4b239f32..00000000000
--- a/gcc/f/runtime/libI77/rewind.c
+++ /dev/null
@@ -1,26 +0,0 @@
-#include "f2c.h"
-#include "fio.h"
-#ifdef KR_headers
-integer f_rew(a) alist *a;
-#else
-integer f_rew(alist *a)
-#endif
-{
- unit *b;
- if (f__init & 2)
- f__fatal (131, "I/O recursion");
- if(a->aunit>=MXUNIT || a->aunit<0)
- err(a->aerr,101,"rewind");
- b = &f__units[a->aunit];
- if(b->ufd == NULL || b->uwrt == 3)
- return(0);
- if(!b->useek)
- err(a->aerr,106,"rewind");
- if(b->uwrt) {
- (void) t_runc(a);
- b->uwrt = 3;
- }
- rewind(b->ufd);
- b->uend=0;
- return(0);
-}
diff --git a/gcc/f/runtime/libI77/rsfe.c b/gcc/f/runtime/libI77/rsfe.c
deleted file mode 100644
index 02a9e6d4680..00000000000
--- a/gcc/f/runtime/libI77/rsfe.c
+++ /dev/null
@@ -1,80 +0,0 @@
-/* read sequential formatted external */
-#include "f2c.h"
-#include "fio.h"
-#include "fmt.h"
-
-xrd_SL(Void)
-{ int ch;
- if(!f__curunit->uend)
- while((ch=getc(f__cf))!='\n')
- if (ch == EOF) {
- f__curunit->uend = 1;
- break;
- }
- f__cursor=f__recpos=0;
- return(1);
-}
-x_getc(Void)
-{ int ch;
- if(f__curunit->uend) return(EOF);
- ch = getc(f__cf);
- if(ch!=EOF && ch!='\n')
- { f__recpos++;
- return(ch);
- }
- if(ch=='\n')
- { (void) ungetc(ch,f__cf);
- return(ch);
- }
- if(f__curunit->uend || feof(f__cf))
- { errno=0;
- f__curunit->uend=1;
- return(-1);
- }
- return(-1);
-}
-x_endp(Void)
-{
- xrd_SL();
- return f__curunit->uend == 1 ? EOF : 0;
-}
-x_rev(Void)
-{
- (void) xrd_SL();
- return(0);
-}
-#ifdef KR_headers
-integer s_rsfe(a) cilist *a; /* start */
-#else
-integer s_rsfe(cilist *a) /* start */
-#endif
-{ int n;
- if(f__init != 1) f_init();
- f__init = 3;
- if(n=c_sfe(a)) return(n);
- f__reading=1;
- f__sequential=1;
- f__formatted=1;
- f__external=1;
- f__elist=a;
- f__cursor=f__recpos=0;
- f__scale=0;
- f__fmtbuf=a->cifmt;
- f__curunit= &f__units[a->ciunit];
- f__cf=f__curunit->ufd;
- if(pars_f(f__fmtbuf)<0) err(a->cierr,100,"startio");
- f__getn= x_getc;
- f__doed= rd_ed;
- f__doned= rd_ned;
- fmt_bg();
- f__doend=x_endp;
- f__donewrec=xrd_SL;
- f__dorevert=x_rev;
- f__cblank=f__curunit->ublnk;
- f__cplus=0;
- if(f__curunit->uwrt && f__nowreading(f__curunit))
- err(a->cierr,errno,"read start");
- if(f__curunit->uend)
- err(f__elist->ciend,(EOF),"read start");
- return(0);
-}
diff --git a/gcc/f/runtime/libI77/rsli.c b/gcc/f/runtime/libI77/rsli.c
deleted file mode 100644
index baf2ba54873..00000000000
--- a/gcc/f/runtime/libI77/rsli.c
+++ /dev/null
@@ -1,105 +0,0 @@
-#include "f2c.h"
-#include "fio.h"
-#include "lio.h"
-#include "fmt.h" /* for f__doend */
-
-extern flag f__lquit;
-extern int f__lcount;
-extern char *f__icptr;
-extern char *f__icend;
-extern icilist *f__svic;
-extern int f__icnum, f__recpos;
-
-static int i_getc(Void)
-{
- if(f__recpos >= f__svic->icirlen) {
- if (f__recpos++ == f__svic->icirlen)
- return '\n';
- z_rnew();
- }
- f__recpos++;
- if(f__icptr >= f__icend)
- return EOF;
- return(*f__icptr++);
- }
-
- static
-#ifdef KR_headers
-int i_ungetc(ch, f) int ch; FILE *f;
-#else
-int i_ungetc(int ch, FILE *f)
-#endif
-{
- if (--f__recpos == f__svic->icirlen)
- return '\n';
- if (f__recpos < -1)
- err(f__svic->icierr,110,"recend");
- /* *--icptr == ch, and icptr may point to read-only memory */
- return *--f__icptr /* = ch */;
- }
-
- static void
-#ifdef KR_headers
-c_lir(a) icilist *a;
-#else
-c_lir(icilist *a)
-#endif
-{
- extern int l_eof;
- if(f__init != 1) f_init();
- f__init = 3;
- f__reading = 1;
- f__external = 0;
- f__formatted = 1;
- f__svic = a;
- L_len = a->icirlen;
- f__recpos = -1;
- f__icnum = f__recpos = 0;
- f__cursor = 0;
- l_getc = i_getc;
- l_ungetc = i_ungetc;
- l_eof = 0;
- f__icptr = a->iciunit;
- f__icend = f__icptr + a->icirlen*a->icirnum;
- f__cf = 0;
- f__curunit = 0;
- f__elist = (cilist *)a;
- }
-
-
-#ifdef KR_headers
-integer s_rsli(a) icilist *a;
-#else
-integer s_rsli(icilist *a)
-#endif
-{
- f__lioproc = l_read;
- f__lquit = 0;
- f__lcount = 0;
- c_lir(a);
- f__doend = 0;
- return(0);
- }
-
-integer e_rsli(Void)
-{ f__init = 1; return 0; }
-
-#ifdef KR_headers
-integer s_rsni(a) icilist *a;
-#else
-extern int x_rsne(cilist*);
-
-integer s_rsni(icilist *a)
-#endif
-{
- extern int nml_read;
- integer rv;
- cilist ca;
- ca.ciend = a->iciend;
- ca.cierr = a->icierr;
- ca.cifmt = a->icifmt;
- c_lir(a);
- rv = x_rsne(&ca);
- nml_read = 0;
- return rv;
- }
diff --git a/gcc/f/runtime/libI77/rsne.c b/gcc/f/runtime/libI77/rsne.c
deleted file mode 100644
index 86bb2164f12..00000000000
--- a/gcc/f/runtime/libI77/rsne.c
+++ /dev/null
@@ -1,607 +0,0 @@
-#include "f2c.h"
-#include "fio.h"
-#include "lio.h"
-
-#define MAX_NL_CACHE 3 /* maximum number of namelist hash tables to cache */
-#define MAXDIM 20 /* maximum number of subscripts */
-
- struct dimen {
- ftnlen extent;
- ftnlen curval;
- ftnlen delta;
- ftnlen stride;
- };
- typedef struct dimen dimen;
-
- struct hashentry {
- struct hashentry *next;
- char *name;
- Vardesc *vd;
- };
- typedef struct hashentry hashentry;
-
- struct hashtab {
- struct hashtab *next;
- Namelist *nl;
- int htsize;
- hashentry *tab[1];
- };
- typedef struct hashtab hashtab;
-
- static hashtab *nl_cache;
- static int n_nlcache;
- static hashentry **zot;
- static int colonseen;
- extern ftnlen f__typesize[];
-
- extern flag f__lquit;
- extern int f__lcount, nml_read;
- extern t_getc(Void);
-
-#ifdef KR_headers
- extern char *malloc(), *memset();
-
-#ifdef ungetc
- static int
-un_getc(x,f__cf) int x; FILE *f__cf;
-{ return ungetc(x,f__cf); }
-#else
-#define un_getc ungetc
- extern int ungetc();
-#endif
-
-#else
-#undef abs
-#undef min
-#undef max
-#include <stdlib.h>
-#include <string.h>
-
-#ifdef ungetc
- static int
-un_getc(int x, FILE *f__cf)
-{ return ungetc(x,f__cf); }
-#else
-#define un_getc ungetc
-extern int ungetc(int, FILE*); /* for systems with a buggy stdio.h */
-#endif
-#endif
-
- static Vardesc *
-#ifdef KR_headers
-hash(ht, s) hashtab *ht; register char *s;
-#else
-hash(hashtab *ht, register char *s)
-#endif
-{
- register int c, x;
- register hashentry *h;
- char *s0 = s;
-
- for(x = 0; c = *s++; x = x & 0x4000 ? ((x << 1) & 0x7fff) + 1 : x << 1)
- x += c;
- for(h = *(zot = ht->tab + x % ht->htsize); h; h = h->next)
- if (!strcmp(s0, h->name))
- return h->vd;
- return 0;
- }
-
- hashtab *
-#ifdef KR_headers
-mk_hashtab(nl) Namelist *nl;
-#else
-mk_hashtab(Namelist *nl)
-#endif
-{
- int nht, nv;
- hashtab *ht;
- Vardesc *v, **vd, **vde;
- hashentry *he;
-
- hashtab **x, **x0, *y;
- for(x = &nl_cache; y = *x; x0 = x, x = &y->next)
- if (nl == y->nl)
- return y;
- if (n_nlcache >= MAX_NL_CACHE) {
- /* discard least recently used namelist hash table */
- y = *x0;
- free((char *)y->next);
- y->next = 0;
- }
- else
- n_nlcache++;
- nv = nl->nvars;
- if (nv >= 0x4000)
- nht = 0x7fff;
- else {
- for(nht = 1; nht < nv; nht <<= 1);
- nht += nht - 1;
- }
- ht = (hashtab *)malloc(sizeof(hashtab) + (nht-1)*sizeof(hashentry *)
- + nv*sizeof(hashentry));
- if (!ht)
- return 0;
- he = (hashentry *)&ht->tab[nht];
- ht->nl = nl;
- ht->htsize = nht;
- ht->next = nl_cache;
- nl_cache = ht;
- memset((char *)ht->tab, 0, nht*sizeof(hashentry *));
- vd = nl->vars;
- vde = vd + nv;
- while(vd < vde) {
- v = *vd++;
- if (!hash(ht, v->name)) {
- he->next = *zot;
- *zot = he;
- he->name = v->name;
- he->vd = v;
- he++;
- }
- }
- return ht;
- }
-
-static char Alpha[256], Alphanum[256];
-
- static VOID
-nl_init(Void) {
- register char *s;
- register int c;
-
- for(s = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; c = *s++; )
- Alpha[c]
- = Alphanum[c]
- = Alpha[c + 'a' - 'A']
- = Alphanum[c + 'a' - 'A']
- = c;
- for(s = "0123456789_"; c = *s++; )
- Alphanum[c] = c;
- }
-
-#define GETC(x) (x=(*l_getc)())
-#define Ungetc(x,y) (*l_ungetc)(x,y)
-
- static int
-#ifdef KR_headers
-getname(s, slen) register char *s; int slen;
-#else
-getname(register char *s, int slen)
-#endif
-{
- register char *se = s + slen - 1;
- register int ch;
-
- GETC(ch);
- if (!(*s++ = Alpha[ch & 0xff])) {
- if (ch != EOF)
- ch = 115;
- errfl(f__elist->cierr, ch, "namelist read");
- }
- while(*s = Alphanum[GETC(ch) & 0xff])
- if (s < se)
- s++;
- if (ch == EOF)
- err(f__elist->cierr, EOF, "namelist read");
- if (ch > ' ')
- Ungetc(ch,f__cf);
- return *s = 0;
- }
-
- static int
-#ifdef KR_headers
-getnum(chp, val) int *chp; ftnlen *val;
-#else
-getnum(int *chp, ftnlen *val)
-#endif
-{
- register int ch, sign;
- register ftnlen x;
-
- while(GETC(ch) <= ' ' && ch >= 0);
- if (ch == '-') {
- sign = 1;
- GETC(ch);
- }
- else {
- sign = 0;
- if (ch == '+')
- GETC(ch);
- }
- x = ch - '0';
- if (x < 0 || x > 9)
- return 115;
- while(GETC(ch) >= '0' && ch <= '9')
- x = 10*x + ch - '0';
- while(ch <= ' ' && ch >= 0)
- GETC(ch);
- if (ch == EOF)
- return EOF;
- *val = sign ? -x : x;
- *chp = ch;
- return 0;
- }
-
- static int
-#ifdef KR_headers
-getdimen(chp, d, delta, extent, x1)
- int *chp; dimen *d; ftnlen delta, extent, *x1;
-#else
-getdimen(int *chp, dimen *d, ftnlen delta, ftnlen extent, ftnlen *x1)
-#endif
-{
- register int k;
- ftnlen x2, x3;
-
- if (k = getnum(chp, x1))
- return k;
- x3 = 1;
- if (*chp == ':') {
- if (k = getnum(chp, &x2))
- return k;
- x2 -= *x1;
- if (*chp == ':') {
- if (k = getnum(chp, &x3))
- return k;
- if (!x3)
- return 123;
- x2 /= x3;
- colonseen = 1;
- }
- if (x2 < 0 || x2 >= extent)
- return 123;
- d->extent = x2 + 1;
- }
- else
- d->extent = 1;
- d->curval = 0;
- d->delta = delta;
- d->stride = x3;
- return 0;
- }
-
-#ifndef No_Namelist_Questions
- static Void
-#ifdef KR_headers
-print_ne(a) cilist *a;
-#else
-print_ne(cilist *a)
-#endif
-{
- flag intext = f__external;
- int rpsave = f__recpos;
- FILE *cfsave = f__cf;
- unit *usave = f__curunit;
- cilist t;
- t = *a;
- t.ciunit = 6;
- s_wsne(&t);
- fflush(f__cf);
- f__external = intext;
- f__reading = 1;
- f__recpos = rpsave;
- f__cf = cfsave;
- f__curunit = usave;
- f__elist = a;
- }
-#endif
-
- static char where0[] = "namelist read start ";
-
-#ifdef KR_headers
-x_rsne(a) cilist *a;
-#else
-x_rsne(cilist *a)
-#endif
-{
- int ch, got1, k, n, nd, quote, readall;
- Namelist *nl;
- static char where[] = "namelist read";
- char buf[64];
- hashtab *ht;
- Vardesc *v;
- dimen *dn, *dn0, *dn1;
- ftnlen *dims, *dims1;
- ftnlen b, b0, b1, ex, no, no1, nomax, size, span;
- ftnint type;
- char *vaddr;
- long iva, ivae;
- dimen dimens[MAXDIM], substr;
-
- if (!Alpha['a'])
- nl_init();
- f__reading=1;
- f__formatted=1;
- got1 = 0;
- top:
- for(;;) switch(GETC(ch)) {
- case EOF:
- eof:
- err(a->ciend,(EOF),where0);
- case '&':
- case '$':
- goto have_amp;
-#ifndef No_Namelist_Questions
- case '?':
- print_ne(a);
- continue;
-#endif
- default:
- if (ch <= ' ' && ch >= 0)
- continue;
-#ifndef No_Namelist_Comments
- while(GETC(ch) != '\n')
- if (ch == EOF)
- goto eof;
-#else
- errfl(a->cierr, 115, where0);
-#endif
- }
- have_amp:
- if (ch = getname(buf,(int) sizeof(buf)))
- return ch;
- nl = (Namelist *)a->cifmt;
- if (strcmp(buf, nl->name))
-#ifdef No_Bad_Namelist_Skip
- errfl(a->cierr, 118, where0);
-#else
- {
- fprintf(stderr,
- "Skipping namelist \"%s\": seeking namelist \"%s\".\n",
- buf, nl->name);
- fflush(stderr);
- for(;;) switch(GETC(ch)) {
- case EOF:
- err(a->ciend, EOF, where0);
- case '/':
- case '&':
- case '$':
- if (f__external)
- e_rsle();
- else
- z_rnew();
- goto top;
- case '"':
- case '\'':
- quote = ch;
- more_quoted:
- while(GETC(ch) != quote)
- if (ch == EOF)
- err(a->ciend, EOF, where0);
- if (GETC(ch) == quote)
- goto more_quoted;
- Ungetc(ch,f__cf);
- default:
- continue;
- }
- }
-#endif
- ht = mk_hashtab(nl);
- if (!ht)
- errfl(f__elist->cierr, 113, where0);
- for(;;) {
- for(;;) switch(GETC(ch)) {
- case EOF:
- if (got1)
- return 0;
- err(a->ciend, EOF, where0);
- case '/':
- case '$':
- case '&':
- return 0;
- default:
- if (ch <= ' ' && ch >= 0 || ch == ',')
- continue;
- Ungetc(ch,f__cf);
- if (ch = getname(buf,(int) sizeof(buf)))
- return ch;
- goto havename;
- }
- havename:
- v = hash(ht,buf);
- if (!v)
- errfl(a->cierr, 119, where);
- while(GETC(ch) <= ' ' && ch >= 0);
- vaddr = v->addr;
- type = v->type;
- if (type < 0) {
- size = -type;
- type = TYCHAR;
- }
- else
- size = f__typesize[type];
- ivae = size;
- iva = readall = 0;
- if (ch == '(' /*)*/ ) {
- dn = dimens;
- if (!(dims = v->dims)) {
- if (type != TYCHAR)
- errfl(a->cierr, 122, where);
- if (k = getdimen(&ch, dn, (ftnlen)size,
- (ftnlen)size, &b))
- errfl(a->cierr, k, where);
- if (ch != ')')
- errfl(a->cierr, 115, where);
- b1 = dn->extent;
- if (--b < 0 || b + b1 > size)
- return 124;
- iva += b;
- size = b1;
- while(GETC(ch) <= ' ' && ch >= 0);
- goto scalar;
- }
- nd = (int)dims[0];
- nomax = span = dims[1];
- ivae = iva + size*nomax;
- colonseen = 0;
- if (k = getdimen(&ch, dn, size, nomax, &b))
- errfl(a->cierr, k, where);
- no = dn->extent;
- b0 = dims[2];
- dims1 = dims += 3;
- ex = 1;
- for(n = 1; n++ < nd; dims++) {
- if (ch != ',')
- errfl(a->cierr, 115, where);
- dn1 = dn + 1;
- span /= *dims;
- if (k = getdimen(&ch, dn1, dn->delta**dims,
- span, &b1))
- errfl(a->cierr, k, where);
- ex *= *dims;
- b += b1*ex;
- no *= dn1->extent;
- dn = dn1;
- }
- if (ch != ')')
- errfl(a->cierr, 115, where);
- readall = 1 - colonseen;
- b -= b0;
- if (b < 0 || b >= nomax)
- errfl(a->cierr, 125, where);
- iva += size * b;
- dims = dims1;
- while(GETC(ch) <= ' ' && ch >= 0);
- no1 = 1;
- dn0 = dimens;
- if (type == TYCHAR && ch == '(' /*)*/) {
- if (k = getdimen(&ch, &substr, size, size, &b))
- errfl(a->cierr, k, where);
- if (ch != ')')
- errfl(a->cierr, 115, where);
- b1 = substr.extent;
- if (--b < 0 || b + b1 > size)
- return 124;
- iva += b;
- b0 = size;
- size = b1;
- while(GETC(ch) <= ' ' && ch >= 0);
- if (b1 < b0)
- goto delta_adj;
- }
- if (readall)
- goto delta_adj;
- for(; dn0 < dn; dn0++) {
- if (dn0->extent != *dims++ || dn0->stride != 1)
- break;
- no1 *= dn0->extent;
- }
- if (dn0 == dimens && dimens[0].stride == 1) {
- no1 = dimens[0].extent;
- dn0++;
- }
- delta_adj:
- ex = 0;
- for(dn1 = dn0; dn1 <= dn; dn1++)
- ex += (dn1->extent-1)
- * (dn1->delta *= dn1->stride);
- for(dn1 = dn; dn1 > dn0; dn1--) {
- ex -= (dn1->extent - 1) * dn1->delta;
- dn1->delta -= ex;
- }
- }
- else if (dims = v->dims) {
- no = no1 = dims[1];
- ivae = iva + no*size;
- }
- else
- scalar:
- no = no1 = 1;
- if (ch != '=')
- errfl(a->cierr, 115, where);
- got1 = nml_read = 1;
- f__lcount = 0;
- readloop:
- for(;;) {
- if (iva >= ivae || iva < 0) {
- f__lquit = 1;
- goto mustend;
- }
- else if (iva + no1*size > ivae)
- no1 = (ivae - iva)/size;
- f__lquit = 0;
- if (k = l_read(&no1, vaddr + iva, size, type))
- return k;
- if (f__lquit == 1)
- return 0;
- if (readall) {
- iva += dn0->delta;
- if (f__lcount > 0) {
- no1 = (ivae - iva)/size;
- if (no1 > f__lcount)
- no1 = f__lcount;
- iva += no1 * dn0->delta;
- if (k = l_read(&no1, vaddr + iva,
- size, type))
- return k;
- }
- }
- mustend:
- GETC(ch);
- if (readall)
- if (iva >= ivae)
- readall = 0;
- else for(;;) {
- switch(ch) {
- case ' ':
- case '\t':
- case '\n':
- GETC(ch);
- continue;
- }
- break;
- }
- if (ch == '/' || ch == '$' || ch == '&') {
- f__lquit = 1;
- return 0;
- }
- else if (f__lquit) {
- while(ch <= ' ' && ch >= 0)
- GETC(ch);
- Ungetc(ch,f__cf);
- if (!Alpha[ch & 0xff] && ch >= 0)
- errfl(a->cierr, 125, where);
- break;
- }
- Ungetc(ch,f__cf);
- if (readall && !Alpha[ch & 0xff])
- goto readloop;
- if ((no -= no1) <= 0)
- break;
- for(dn1 = dn0; dn1 <= dn; dn1++) {
- if (++dn1->curval < dn1->extent) {
- iva += dn1->delta;
- goto readloop;
- }
- dn1->curval = 0;
- }
- break;
- }
- }
- }
-
- integer
-#ifdef KR_headers
-s_rsne(a) cilist *a;
-#else
-s_rsne(cilist *a)
-#endif
-{
- extern int l_eof;
- int n;
-
- f__external=1;
- l_eof = 0;
- if(n = c_le(a))
- return n;
- if(f__curunit->uwrt && f__nowreading(f__curunit))
- err(a->cierr,errno,where0);
- l_getc = t_getc;
- l_ungetc = un_getc;
- f__doend = xrd_SL;
- n = x_rsne(a);
- nml_read = 0;
- if (n)
- return n;
- return e_rsle();
- }
diff --git a/gcc/f/runtime/libI77/sfe.c b/gcc/f/runtime/libI77/sfe.c
deleted file mode 100644
index 1bb10d9052d..00000000000
--- a/gcc/f/runtime/libI77/sfe.c
+++ /dev/null
@@ -1,44 +0,0 @@
-/* sequential formatted external common routines*/
-#include "f2c.h"
-#include "fio.h"
-
-extern char *f__fmtbuf;
-
-integer e_rsfe(Void)
-{ int n;
- f__init = 1;
- n=en_fio();
- if (f__cf == stdout)
- fflush(stdout);
- else if (f__cf == stderr)
- fflush(stderr);
- f__fmtbuf=NULL;
- return(n);
-}
-#ifdef KR_headers
-c_sfe(a) cilist *a; /* check */
-#else
-c_sfe(cilist *a) /* check */
-#endif
-{ unit *p;
- if(a->ciunit >= MXUNIT || a->ciunit<0)
- err(a->cierr,101,"startio");
- p = &f__units[a->ciunit];
- if(p->ufd==NULL && fk_open(SEQ,FMT,a->ciunit)) err(a->cierr,114,"sfe");
- if(!p->ufmt) err(a->cierr,102,"sfe");
- return(0);
-}
-integer e_wsfe(Void)
-{
-#ifdef ALWAYS_FLUSH
- int n;
- f__init = 1;
- n = en_fio();
- f__fmtbuf=NULL;
- if (!n && fflush(f__cf))
- err(f__elist->cierr, errno, "write end");
- return n;
-#else
- return(e_rsfe());
-#endif
-}
diff --git a/gcc/f/runtime/libI77/sue.c b/gcc/f/runtime/libI77/sue.c
deleted file mode 100644
index 8f2ea314f30..00000000000
--- a/gcc/f/runtime/libI77/sue.c
+++ /dev/null
@@ -1,87 +0,0 @@
-#include "f2c.h"
-#include "fio.h"
-extern uiolen f__reclen;
-long f__recloc;
-
-#ifdef KR_headers
-c_sue(a) cilist *a;
-#else
-c_sue(cilist *a)
-#endif
-{
- if(a->ciunit >= MXUNIT || a->ciunit < 0)
- err(a->cierr,101,"startio");
- f__external=f__sequential=1;
- f__formatted=0;
- f__curunit = &f__units[a->ciunit];
- f__elist=a;
- if(f__curunit->ufd==NULL && fk_open(SEQ,UNF,a->ciunit))
- err(a->cierr,114,"sue");
- f__cf=f__curunit->ufd;
- if(f__curunit->ufmt) err(a->cierr,103,"sue");
- if(!f__curunit->useek) err(a->cierr,103,"sue");
- return(0);
-}
-#ifdef KR_headers
-integer s_rsue(a) cilist *a;
-#else
-integer s_rsue(cilist *a)
-#endif
-{
- int n;
- if(f__init != 1) f_init();
- f__init = 3;
- f__reading=1;
- if(n=c_sue(a)) return(n);
- f__recpos=0;
- if(f__curunit->uwrt && f__nowreading(f__curunit))
- err(a->cierr, errno, "read start");
- if(fread((char *)&f__reclen,sizeof(uiolen),1,f__cf)
- != 1)
- { if(feof(f__cf))
- { f__curunit->uend = 1;
- err(a->ciend, EOF, "start");
- }
- clearerr(f__cf);
- err(a->cierr, errno, "start");
- }
- return(0);
-}
-#ifdef KR_headers
-integer s_wsue(a) cilist *a;
-#else
-integer s_wsue(cilist *a)
-#endif
-{
- int n;
- if(f__init != 1) f_init();
- f__init = 3;
- if(n=c_sue(a)) return(n);
- f__reading=0;
- f__reclen=0;
- if(f__curunit->uwrt != 1 && f__nowwriting(f__curunit))
- err(a->cierr, errno, "write start");
- f__recloc=ftell(f__cf);
- (void) fseek(f__cf,(long)sizeof(uiolen),SEEK_CUR);
- return(0);
-}
-integer e_wsue(Void)
-{ long loc;
- f__init = 1;
- fwrite((char *)&f__reclen,sizeof(uiolen),1,f__cf);
-#ifdef ALWAYS_FLUSH
- if (fflush(f__cf))
- err(f__elist->cierr, errno, "write end");
-#endif
- loc=ftell(f__cf);
- fseek(f__cf,f__recloc,SEEK_SET);
- fwrite((char *)&f__reclen,sizeof(uiolen),1,f__cf);
- fseek(f__cf,loc,SEEK_SET);
- return(0);
-}
-integer e_rsue(Void)
-{
- f__init = 1;
- (void) fseek(f__cf,(long)(f__reclen-f__recpos+sizeof(uiolen)),SEEK_CUR);
- return(0);
-}
diff --git a/gcc/f/runtime/libI77/typesize.c b/gcc/f/runtime/libI77/typesize.c
deleted file mode 100644
index 1cb20ff2863..00000000000
--- a/gcc/f/runtime/libI77/typesize.c
+++ /dev/null
@@ -1,12 +0,0 @@
-#include "f2c.h"
-
-ftnlen f__typesize[] = { 0, 0, sizeof(shortint), sizeof(integer),
- sizeof(real), sizeof(doublereal),
- sizeof(complex), sizeof(doublecomplex),
- sizeof(logical), sizeof(char),
- 0, sizeof(integer1),
- sizeof(logical1), sizeof(shortlogical),
-#ifdef Allow_TYQUAD
- sizeof(longint),
-#endif
- 0};
diff --git a/gcc/f/runtime/libI77/uio.c b/gcc/f/runtime/libI77/uio.c
deleted file mode 100644
index ea733cec06c..00000000000
--- a/gcc/f/runtime/libI77/uio.c
+++ /dev/null
@@ -1,69 +0,0 @@
-#include "f2c.h"
-#include "fio.h"
-#include <sys/types.h>
-uiolen f__reclen;
-
-#ifdef KR_headers
-do_us(number,ptr,len) ftnint *number; char *ptr; ftnlen len;
-#else
-do_us(ftnint *number, char *ptr, ftnlen len)
-#endif
-{
- if(f__reading)
- {
- f__recpos += (int)(*number * len);
- if(f__recpos>f__reclen)
- err(f__elist->cierr, 110, "do_us");
- if (fread(ptr,(size_t)len,(size_t)(*number),f__cf) != *number)
- err(f__elist->ciend, EOF, "do_us");
- return(0);
- }
- else
- {
- f__reclen += *number * len;
- (void) fwrite(ptr,(size_t)len,(size_t)(*number),f__cf);
- return(0);
- }
-}
-#ifdef KR_headers
-integer do_ud(number,ptr,len) ftnint *number; char *ptr; ftnlen len;
-#else
-integer do_ud(ftnint *number, char *ptr, ftnlen len)
-#endif
-{
- f__recpos += (int)(*number * len);
- if(f__recpos > f__curunit->url && f__curunit->url!=1)
- err(f__elist->cierr,110,"do_ud");
- if(f__reading)
- {
-#ifdef Pad_UDread
-#ifdef KR_headers
- int i;
-#else
- size_t i;
-#endif
- if (!(i = fread(ptr,(size_t)len,(size_t)(*number),f__cf))
- && !(f__recpos - *number*len))
- err(f__elist->cierr,EOF,"do_ud");
- if (i < *number)
- memset(ptr + i*len, 0, (*number - i)*len);
- return 0;
-#else
- if(fread(ptr,(size_t)len,(size_t)(*number),f__cf) != *number)
- err(f__elist->cierr,EOF,"do_ud");
- else return(0);
-#endif
- }
- (void) fwrite(ptr,(size_t)len,(size_t)(*number),f__cf);
- return(0);
-}
-#ifdef KR_headers
-integer do_uio(number,ptr,len) ftnint *number; char *ptr; ftnlen len;
-#else
-integer do_uio(ftnint *number, char *ptr, ftnlen len)
-#endif
-{
- if(f__sequential)
- return(do_us(number,ptr,len));
- else return(do_ud(number,ptr,len));
-}
diff --git a/gcc/f/runtime/libI77/util.c b/gcc/f/runtime/libI77/util.c
deleted file mode 100644
index a24932533c1..00000000000
--- a/gcc/f/runtime/libI77/util.c
+++ /dev/null
@@ -1,51 +0,0 @@
-#ifndef NON_UNIX_STDIO
-#include <sys/types.h>
-#include <sys/stat.h>
-#endif
-#include "f2c.h"
-#include "fio.h"
-
- VOID
-#ifdef KR_headers
-g_char(a,alen,b) char *a,*b; ftnlen alen;
-#else
-g_char(char *a, ftnlen alen, char *b)
-#endif
-{
- char *x = a + alen, *y = b + alen;
-
- for(;; y--) {
- if (x <= a) {
- *b = 0;
- return;
- }
- if (*--x != ' ')
- break;
- }
- *y-- = 0;
- do *y-- = *x;
- while(x-- > a);
- }
-
- VOID
-#ifdef KR_headers
-b_char(a,b,blen) char *a,*b; ftnlen blen;
-#else
-b_char(char *a, char *b, ftnlen blen)
-#endif
-{ int i;
- for(i=0;i<blen && *a!=0;i++) *b++= *a++;
- for(;i<blen;i++) *b++=' ';
-}
-#ifndef NON_UNIX_STDIO
-#ifdef KR_headers
-long f__inode(a, dev) char *a; int *dev;
-#else
-long f__inode(char *a, int *dev)
-#endif
-{ struct stat x;
- if(stat(a,&x)<0) return(-1);
- *dev = x.st_dev;
- return(x.st_ino);
-}
-#endif
diff --git a/gcc/f/runtime/libI77/wref.c b/gcc/f/runtime/libI77/wref.c
deleted file mode 100644
index a10bcaa1236..00000000000
--- a/gcc/f/runtime/libI77/wref.c
+++ /dev/null
@@ -1,276 +0,0 @@
-#include "f2c.h"
-#include "fio.h"
-#ifndef VAX
-#include <ctype.h>
-#endif
-
-#ifndef KR_headers
-#undef abs
-#undef min
-#undef max
-#include <stdlib.h>
-#include <string.h>
-#endif
-
-#include "fmt.h"
-#include "fp.h"
-
-#ifdef KR_headers
-wrt_E(p,w,d,e,len) ufloat *p; ftnlen len;
-#else
-wrt_E(ufloat *p, int w, int d, int e, ftnlen len)
-#endif
-{
- char buf[FMAX+EXPMAXDIGS+4], *s, *se;
- int d1, delta, e1, i, sign, signspace;
- double dd;
-#ifdef WANT_LEAD_0
- int insert0 = 0;
-#endif
-#ifndef VAX
- int e0 = e;
-#endif
-
- if(e <= 0)
- e = 2;
- if(f__scale) {
- if(f__scale >= d + 2 || f__scale <= -d)
- goto nogood;
- }
- if(f__scale <= 0)
- --d;
- if (len == sizeof(real))
- dd = p->pf;
- else
- dd = p->pd;
- if (dd < 0.) {
- signspace = sign = 1;
- dd = -dd;
- }
- else {
- sign = 0;
- signspace = (int)f__cplus;
-#ifndef VAX
- if (!dd)
- dd = 0.; /* avoid -0 */
-#endif
- }
- delta = w - (2 /* for the . and the d adjustment above */
- + 2 /* for the E+ */ + signspace + d + e);
-#ifdef WANT_LEAD_0
- if (f__scale <= 0 && delta > 0) {
- delta--;
- insert0 = 1;
- }
- else
-#endif
- if (delta < 0) {
-nogood:
- while(--w >= 0)
- PUT('*');
- return(0);
- }
- if (f__scale < 0)
- d += f__scale;
- if (d > FMAX) {
- d1 = d - FMAX;
- d = FMAX;
- }
- else
- d1 = 0;
- sprintf(buf,"%#.*E", d, dd);
-#ifndef VAX
- /* check for NaN, Infinity */
- if (!isdigit(buf[0])) {
- switch(buf[0]) {
- case 'n':
- case 'N':
- signspace = 0; /* no sign for NaNs */
- }
- delta = w - strlen(buf) - signspace;
- if (delta < 0)
- goto nogood;
- while(--delta >= 0)
- PUT(' ');
- if (signspace)
- PUT(sign ? '-' : '+');
- for(s = buf; *s; s++)
- PUT(*s);
- return 0;
- }
-#endif
- se = buf + d + 3;
-#ifdef GOOD_SPRINTF_EXPONENT /* When possible, exponent has 2 digits. */
- if (f__scale != 1 && dd)
- sprintf(se, "%+.2d", atoi(se) + 1 - f__scale);
-#else
- if (dd)
- sprintf(se, "%+.2d", atoi(se) + 1 - f__scale);
- else
- strcpy(se, "+00");
-#endif
- s = ++se;
- if (e < 2) {
- if (*s != '0')
- goto nogood;
- }
-#ifndef VAX
- /* accommodate 3 significant digits in exponent */
- if (s[2]) {
-#ifdef Pedantic
- if (!e0 && !s[3])
- for(s -= 2, e1 = 2; s[0] = s[1]; s++);
-
- /* Pedantic gives the behavior that Fortran 77 specifies, */
- /* i.e., requires that E be specified for exponent fields */
- /* of more than 3 digits. With Pedantic undefined, we get */
- /* the behavior that Cray displays -- you get a bigger */
- /* exponent field if it fits. */
-#else
- if (!e0) {
- for(s -= 2, e1 = 2; s[0] = s[1]; s++)
-#ifdef CRAY
- delta--;
- if ((delta += 4) < 0)
- goto nogood
-#endif
- ;
- }
-#endif
- else if (e0 >= 0)
- goto shift;
- else
- e1 = e;
- }
- else
- shift:
-#endif
- for(s += 2, e1 = 2; *s; ++e1, ++s)
- if (e1 >= e)
- goto nogood;
- while(--delta >= 0)
- PUT(' ');
- if (signspace)
- PUT(sign ? '-' : '+');
- s = buf;
- i = f__scale;
- if (f__scale <= 0) {
-#ifdef WANT_LEAD_0
- if (insert0)
- PUT('0');
-#endif
- PUT('.');
- for(; i < 0; ++i)
- PUT('0');
- PUT(*s);
- s += 2;
- }
- else if (f__scale > 1) {
- PUT(*s);
- s += 2;
- while(--i > 0)
- PUT(*s++);
- PUT('.');
- }
- if (d1) {
- se -= 2;
- while(s < se) PUT(*s++);
- se += 2;
- do PUT('0'); while(--d1 > 0);
- }
- while(s < se)
- PUT(*s++);
- if (e < 2)
- PUT(s[1]);
- else {
- while(++e1 <= e)
- PUT('0');
- while(*s)
- PUT(*s++);
- }
- return 0;
- }
-
-#ifdef KR_headers
-wrt_F(p,w,d,len) ufloat *p; ftnlen len;
-#else
-wrt_F(ufloat *p, int w, int d, ftnlen len)
-#endif
-{
- int d1, sign, n;
- double x;
- char *b, buf[MAXINTDIGS+MAXFRACDIGS+4], *s;
-
- x= (len==sizeof(real)?p->pf:p->pd);
- if (d < MAXFRACDIGS)
- d1 = 0;
- else {
- d1 = d - MAXFRACDIGS;
- d = MAXFRACDIGS;
- }
- if (x < 0.)
- { x = -x; sign = 1; }
- else {
- sign = 0;
-#ifndef VAX
- if (!x)
- x = 0.;
-#endif
- }
-
- if (n = f__scale)
- if (n > 0)
- do x *= 10.; while(--n > 0);
- else
- do x *= 0.1; while(++n < 0);
-
-#ifdef USE_STRLEN
- sprintf(b = buf, "%#.*f", d, x);
- n = strlen(b) + d1;
-#else
- n = sprintf(b = buf, "%#.*f", d, x) + d1;
-#endif
-
-#ifndef WANT_LEAD_0
- if (buf[0] == '0' && d)
- { ++b; --n; }
-#endif
- if (sign) {
- /* check for all zeros */
- for(s = b;;) {
- while(*s == '0') s++;
- switch(*s) {
- case '.':
- s++; continue;
- case 0:
- sign = 0;
- }
- break;
- }
- }
- if (sign || f__cplus)
- ++n;
- if (n > w) {
-#ifdef WANT_LEAD_0
- if (buf[0] == '0' && --n == w)
- ++b;
- else
-#endif
- {
- while(--w >= 0)
- PUT('*');
- return 0;
- }
- }
- for(w -= n; --w >= 0; )
- PUT(' ');
- if (sign)
- PUT('-');
- else if (f__cplus)
- PUT('+');
- while(n = *b++)
- PUT(n);
- while(--d1 >= 0)
- PUT('0');
- return 0;
- }
diff --git a/gcc/f/runtime/libI77/wrtfmt.c b/gcc/f/runtime/libI77/wrtfmt.c
deleted file mode 100644
index e14efa85833..00000000000
--- a/gcc/f/runtime/libI77/wrtfmt.c
+++ /dev/null
@@ -1,385 +0,0 @@
-#include "f2c.h"
-#include "fio.h"
-#include "fmt.h"
-
-extern icilist *f__svic;
-extern char *f__icptr;
-
- static int
-mv_cur(Void) /* shouldn't use fseek because it insists on calling fflush */
- /* instead we know too much about stdio */
-{
- int cursor = f__cursor;
- f__cursor = 0;
- if(f__external == 0) {
- if(cursor < 0) {
- if(f__hiwater < f__recpos)
- f__hiwater = f__recpos;
- f__recpos += cursor;
- f__icptr += cursor;
- if(f__recpos < 0)
- err(f__elist->cierr, 110, "left off");
- }
- else if(cursor > 0) {
- if(f__recpos + cursor >= f__svic->icirlen)
- err(f__elist->cierr, 110, "recend");
- if(f__hiwater <= f__recpos)
- for(; cursor > 0; cursor--)
- (*f__putn)(' ');
- else if(f__hiwater <= f__recpos + cursor) {
- cursor -= f__hiwater - f__recpos;
- f__icptr += f__hiwater - f__recpos;
- f__recpos = f__hiwater;
- for(; cursor > 0; cursor--)
- (*f__putn)(' ');
- }
- else {
- f__icptr += cursor;
- f__recpos += cursor;
- }
- }
- return(0);
- }
- if(cursor > 0) {
- if(f__hiwater <= f__recpos)
- for(;cursor>0;cursor--) (*f__putn)(' ');
- else if(f__hiwater <= f__recpos + cursor) {
-#if ! defined (NON_UNIX_STDIO) && ! defined (MISSING_FILE_ELEMS)
- if(f__cf->_ptr + f__hiwater - f__recpos < buf_end(f__cf))
- f__cf->_ptr += f__hiwater - f__recpos;
- else
-#endif
- (void) fseek(f__cf, (long) (f__hiwater - f__recpos), SEEK_CUR);
- cursor -= f__hiwater - f__recpos;
- f__recpos = f__hiwater;
- for(; cursor > 0; cursor--)
- (*f__putn)(' ');
- }
- else {
-#if ! defined (NON_UNIX_STDIO) && ! defined (MISSING_FILE_ELEMS)
- if(f__cf->_ptr + cursor < buf_end(f__cf))
- f__cf->_ptr += cursor;
- else
-#endif
- (void) fseek(f__cf, (long)cursor, SEEK_CUR);
- f__recpos += cursor;
- }
- }
- if(cursor<0)
- {
- if(cursor+f__recpos<0) err(f__elist->cierr,110,"left off");
-#if ! defined (NON_UNIX_STDIO) && ! defined (MISSING_FILE_ELEMS)
- if(f__cf->_ptr + cursor >= f__cf->_base)
- f__cf->_ptr += cursor;
- else
-#endif
- if(f__curunit && f__curunit->useek)
- (void) fseek(f__cf,(long)cursor,SEEK_CUR);
- else
- err(f__elist->cierr,106,"fmt");
- if(f__hiwater < f__recpos)
- f__hiwater = f__recpos;
- f__recpos += cursor;
- }
- return(0);
-}
-
- static int
-#ifdef KR_headers
-wrt_Z(n,w,minlen,len) Uint *n; int w, minlen; ftnlen len;
-#else
-wrt_Z(Uint *n, int w, int minlen, ftnlen len)
-#endif
-{
- register char *s, *se;
- register int i, w1;
- static int one = 1;
- static char hex[] = "0123456789ABCDEF";
- s = (char *)n;
- --len;
- if (*(char *)&one) {
- /* little endian */
- se = s;
- s += len;
- i = -1;
- }
- else {
- se = s + len;
- i = 1;
- }
- for(;; s += i)
- if (s == se || *s)
- break;
- w1 = (i*(se-s) << 1) + 1;
- if (*s & 0xf0)
- w1++;
- if (w1 > w)
- for(i = 0; i < w; i++)
- (*f__putn)('*');
- else {
- if ((minlen -= w1) > 0)
- w1 += minlen;
- while(--w >= w1)
- (*f__putn)(' ');
- while(--minlen >= 0)
- (*f__putn)('0');
- if (!(*s & 0xf0)) {
- (*f__putn)(hex[*s & 0xf]);
- if (s == se)
- return 0;
- s += i;
- }
- for(;; s += i) {
- (*f__putn)(hex[*s >> 4 & 0xf]);
- (*f__putn)(hex[*s & 0xf]);
- if (s == se)
- break;
- }
- }
- return 0;
- }
-
- static int
-#ifdef KR_headers
-wrt_I(n,w,len, base) Uint *n; ftnlen len; register int base;
-#else
-wrt_I(Uint *n, int w, ftnlen len, register int base)
-#endif
-{ int ndigit,sign,spare,i;
- longint x;
- char *ans;
- if(len==sizeof(integer)) x=n->il;
- else if(len == sizeof(char)) x = n->ic;
-#ifdef Allow_TYQUAD
- else if (len == sizeof(longint)) x = n->ili;
-#endif
- else x=n->is;
- ans=f__icvt(x,&ndigit,&sign, base);
- spare=w-ndigit;
- if(sign || f__cplus) spare--;
- if(spare<0)
- for(i=0;i<w;i++) (*f__putn)('*');
- else
- { for(i=0;i<spare;i++) (*f__putn)(' ');
- if(sign) (*f__putn)('-');
- else if(f__cplus) (*f__putn)('+');
- for(i=0;i<ndigit;i++) (*f__putn)(*ans++);
- }
- return(0);
-}
- static int
-#ifdef KR_headers
-wrt_IM(n,w,m,len,base) Uint *n; ftnlen len; int base;
-#else
-wrt_IM(Uint *n, int w, int m, ftnlen len, int base)
-#endif
-{ int ndigit,sign,spare,i,xsign;
- longint x;
- char *ans;
- if(sizeof(integer)==len) x=n->il;
- else if(len == sizeof(char)) x = n->ic;
-#ifdef Allow_TYQUAD
- else if (len == sizeof(longint)) x = n->ili;
-#endif
- else x=n->is;
- ans=f__icvt(x,&ndigit,&sign, base);
- if(sign || f__cplus) xsign=1;
- else xsign=0;
- if(ndigit+xsign>w || m+xsign>w)
- { for(i=0;i<w;i++) (*f__putn)('*');
- return(0);
- }
- if(x==0 && m==0)
- { for(i=0;i<w;i++) (*f__putn)(' ');
- return(0);
- }
- if(ndigit>=m)
- spare=w-ndigit-xsign;
- else
- spare=w-m-xsign;
- for(i=0;i<spare;i++) (*f__putn)(' ');
- if(sign) (*f__putn)('-');
- else if(f__cplus) (*f__putn)('+');
- for(i=0;i<m-ndigit;i++) (*f__putn)('0');
- for(i=0;i<ndigit;i++) (*f__putn)(*ans++);
- return(0);
-}
- static int
-#ifdef KR_headers
-wrt_AP(s) char *s;
-#else
-wrt_AP(char *s)
-#endif
-{ char quote;
- int i;
-
- if(f__cursor && (i = mv_cur()))
- return i;
- quote = *s++;
- for(;*s;s++)
- { if(*s!=quote) (*f__putn)(*s);
- else if(*++s==quote) (*f__putn)(*s);
- else return(1);
- }
- return(1);
-}
- static int
-#ifdef KR_headers
-wrt_H(a,s) char *s;
-#else
-wrt_H(int a, char *s)
-#endif
-{
- int i;
-
- if(f__cursor && (i = mv_cur()))
- return i;
- while(a--) (*f__putn)(*s++);
- return(1);
-}
-#ifdef KR_headers
-wrt_L(n,len, sz) Uint *n; ftnlen sz;
-#else
-wrt_L(Uint *n, int len, ftnlen sz)
-#endif
-{ int i;
- long x;
- if(sizeof(long)==sz) x=n->il;
- else if(sz == sizeof(char)) x = n->ic;
- else x=n->is;
- for(i=0;i<len-1;i++)
- (*f__putn)(' ');
- if(x) (*f__putn)('T');
- else (*f__putn)('F');
- return(0);
-}
- static int
-#ifdef KR_headers
-wrt_A(p,len) char *p; ftnlen len;
-#else
-wrt_A(char *p, ftnlen len)
-#endif
-{
- while(len-- > 0) (*f__putn)(*p++);
- return(0);
-}
- static int
-#ifdef KR_headers
-wrt_AW(p,w,len) char * p; ftnlen len;
-#else
-wrt_AW(char * p, int w, ftnlen len)
-#endif
-{
- while(w>len)
- { w--;
- (*f__putn)(' ');
- }
- while(w-- > 0)
- (*f__putn)(*p++);
- return(0);
-}
-
- static int
-#ifdef KR_headers
-wrt_G(p,w,d,e,len) ufloat *p; ftnlen len;
-#else
-wrt_G(ufloat *p, int w, int d, int e, ftnlen len)
-#endif
-{ double up = 1,x;
- int i=0,oldscale,n,j;
- x = len==sizeof(real)?p->pf:p->pd;
- if(x < 0 ) x = -x;
- if(x<.1) {
- if (x != 0.)
- return(wrt_E(p,w,d,e,len));
- i = 1;
- goto have_i;
- }
- for(;i<=d;i++,up*=10)
- { if(x>=up) continue;
- have_i:
- oldscale = f__scale;
- f__scale = 0;
- if(e==0) n=4;
- else n=e+2;
- i=wrt_F(p,w-n,d-i,len);
- for(j=0;j<n;j++) (*f__putn)(' ');
- f__scale=oldscale;
- return(i);
- }
- return(wrt_E(p,w,d,e,len));
-}
-#ifdef KR_headers
-w_ed(p,ptr,len) struct syl *p; char *ptr; ftnlen len;
-#else
-w_ed(struct syl *p, char *ptr, ftnlen len)
-#endif
-{
- int i;
-
- if(f__cursor && (i = mv_cur()))
- return i;
- switch(p->op)
- {
- default:
- fprintf(stderr,"w_ed, unexpected code: %d\n", p->op);
- sig_die(f__fmtbuf, 1);
- case I: return(wrt_I((Uint *)ptr,p->p1,len, 10));
- case IM:
- return(wrt_IM((Uint *)ptr,p->p1,p->p2,len,10));
-
- /* O and OM don't work right for character, double, complex, */
- /* or doublecomplex, and they differ from Fortran 90 in */
- /* showing a minus sign for negative values. */
-
- case O: return(wrt_I((Uint *)ptr, p->p1, len, 8));
- case OM:
- return(wrt_IM((Uint *)ptr,p->p1,p->p2,len,8));
- case L: return(wrt_L((Uint *)ptr,p->p1, len));
- case A: return(wrt_A(ptr,len));
- case AW:
- return(wrt_AW(ptr,p->p1,len));
- case D:
- case E:
- case EE:
- return(wrt_E((ufloat *)ptr,p->p1,p->p2,p->p3,len));
- case G:
- case GE:
- return(wrt_G((ufloat *)ptr,p->p1,p->p2,p->p3,len));
- case F: return(wrt_F((ufloat *)ptr,p->p1,p->p2,len));
-
- /* Z and ZM assume 8-bit bytes. */
-
- case Z: return(wrt_Z((Uint *)ptr,p->p1,0,len));
- case ZM:
- return(wrt_Z((Uint *)ptr,p->p1,p->p2,len));
- }
-}
-#ifdef KR_headers
-w_ned(p) struct syl *p;
-#else
-w_ned(struct syl *p)
-#endif
-{
- switch(p->op)
- {
- default: fprintf(stderr,"w_ned, unexpected code: %d\n", p->op);
- sig_die(f__fmtbuf, 1);
- case SLASH:
- return((*f__donewrec)());
- case T: f__cursor = p->p1-f__recpos - 1;
- return(1);
- case TL: f__cursor -= p->p1;
- if(f__cursor < -f__recpos) /* TL1000, 1X */
- f__cursor = -f__recpos;
- return(1);
- case TR:
- case X:
- f__cursor += p->p1;
- return(1);
- case APOS:
- return(wrt_AP(*(char **)&p->p2));
- case H:
- return(wrt_H(p->p1,*(char **)&p->p2));
- }
-}
diff --git a/gcc/f/runtime/libI77/wsfe.c b/gcc/f/runtime/libI77/wsfe.c
deleted file mode 100644
index 5adb1a49f08..00000000000
--- a/gcc/f/runtime/libI77/wsfe.c
+++ /dev/null
@@ -1,85 +0,0 @@
-/*write sequential formatted external*/
-#include "f2c.h"
-#include "fio.h"
-#include "fmt.h"
-extern int f__hiwater;
-
-#ifdef KR_headers
-x_putc(c)
-#else
-x_putc(int c)
-#endif
-{
- /* this uses \n as an indicator of record-end */
- if(c == '\n' && f__recpos < f__hiwater) { /* fseek calls fflush, a loss */
-#if ! defined (NON_UNIX_STDIO) && ! defined (MISSING_FILE_ELEMS)
- if(f__cf->_ptr + f__hiwater - f__recpos < buf_end(f__cf))
- f__cf->_ptr += f__hiwater - f__recpos;
- else
-#endif
- (void) fseek(f__cf, (long)(f__hiwater - f__recpos), SEEK_CUR);
- }
-#ifdef OMIT_BLANK_CC
- if (!f__recpos++ && c == ' ')
- return c;
-#else
- f__recpos++;
-#endif
- return putc(c,f__cf);
-}
-x_wSL(Void)
-{
- (*f__putn)('\n');
- f__recpos=0;
- f__cursor = 0;
- f__hiwater = 0;
- return(1);
-}
-xw_end(Void)
-{
- if(f__nonl == 0)
- (*f__putn)('\n');
- f__hiwater = f__recpos = f__cursor = 0;
- return(0);
-}
-xw_rev(Void)
-{
- if(f__workdone) (*f__putn)('\n');
- f__hiwater = f__recpos = f__cursor = 0;
- return(f__workdone=0);
-}
-
-#ifdef KR_headers
-integer s_wsfe(a) cilist *a; /*start*/
-#else
-integer s_wsfe(cilist *a) /*start*/
-#endif
-{ int n;
- if(f__init != 1) f_init();
- f__init = 3;
- if(n=c_sfe(a)) return(n);
- f__reading=0;
- f__sequential=1;
- f__formatted=1;
- f__external=1;
- f__elist=a;
- f__hiwater = f__cursor=f__recpos=0;
- f__nonl = 0;
- f__scale=0;
- f__fmtbuf=a->cifmt;
- f__curunit = &f__units[a->ciunit];
- f__cf=f__curunit->ufd;
- if(pars_f(f__fmtbuf)<0) err(a->cierr,100,"startio");
- f__putn= x_putc;
- f__doed= w_ed;
- f__doned= w_ned;
- f__doend=xw_end;
- f__dorevert=xw_rev;
- f__donewrec=x_wSL;
- fmt_bg();
- f__cplus=0;
- f__cblank=f__curunit->ublnk;
- if(f__curunit->uwrt != 1 && f__nowwriting(f__curunit))
- err(a->cierr,errno,"write start");
- return(0);
-}
diff --git a/gcc/f/runtime/libI77/wsle.c b/gcc/f/runtime/libI77/wsle.c
deleted file mode 100644
index d13f78f650b..00000000000
--- a/gcc/f/runtime/libI77/wsle.c
+++ /dev/null
@@ -1,41 +0,0 @@
-#include "f2c.h"
-#include "fio.h"
-#include "fmt.h"
-#include "lio.h"
-
-#ifdef KR_headers
-integer s_wsle(a) cilist *a;
-#else
-integer s_wsle(cilist *a)
-#endif
-{
- int n;
- if(n=c_le(a)) return(n);
- f__reading=0;
- f__external=1;
- f__formatted=1;
- f__putn = t_putc;
- f__lioproc = l_write;
- L_len = LINE;
- f__donewrec = x_wSL;
- if(f__curunit->uwrt != 1 && f__nowwriting(f__curunit))
- err(a->cierr, errno, "list output start");
- return(0);
- }
-
-integer e_wsle(Void)
-{
- f__init = 1;
- t_putc('\n');
- f__recpos=0;
-#ifdef ALWAYS_FLUSH
- if (fflush(f__cf))
- err(f__elist->cierr, errno, "write end");
-#else
- if (f__cf == stdout)
- fflush(stdout);
- else if (f__cf == stderr)
- fflush(stderr);
-#endif
- return(0);
- }
diff --git a/gcc/f/runtime/libI77/wsne.c b/gcc/f/runtime/libI77/wsne.c
deleted file mode 100644
index 0febd52634f..00000000000
--- a/gcc/f/runtime/libI77/wsne.c
+++ /dev/null
@@ -1,26 +0,0 @@
-#include "f2c.h"
-#include "fio.h"
-#include "lio.h"
-
- integer
-#ifdef KR_headers
-s_wsne(a) cilist *a;
-#else
-s_wsne(cilist *a)
-#endif
-{
- int n;
-
- if(n=c_le(a))
- return(n);
- f__reading=0;
- f__external=1;
- f__formatted=1;
- f__putn = t_putc;
- L_len = LINE;
- f__donewrec = x_wSL;
- if(f__curunit->uwrt != 1 && f__nowwriting(f__curunit))
- err(a->cierr, errno, "namelist output start");
- x_wsne(a);
- return e_wsle();
- }
diff --git a/gcc/f/runtime/libI77/xwsne.c b/gcc/f/runtime/libI77/xwsne.c
deleted file mode 100644
index 71f6f1d5da5..00000000000
--- a/gcc/f/runtime/libI77/xwsne.c
+++ /dev/null
@@ -1,72 +0,0 @@
-#include "f2c.h"
-#include "fio.h"
-#include "lio.h"
-#include "fmt.h"
-
-extern int f__Aquote;
-
- static VOID
-nl_donewrec(Void)
-{
- (*f__donewrec)();
- PUT(' ');
- }
-
-#ifdef KR_headers
-x_wsne(a) cilist *a;
-#else
-#include <string.h>
-
- VOID
-x_wsne(cilist *a)
-#endif
-{
- Namelist *nl;
- char *s;
- Vardesc *v, **vd, **vde;
- ftnint *number, type;
- ftnlen *dims;
- ftnlen size;
- static ftnint one = 1;
- extern ftnlen f__typesize[];
-
- nl = (Namelist *)a->cifmt;
- PUT('&');
- for(s = nl->name; *s; s++)
- PUT(*s);
- PUT(' ');
- f__Aquote = 1;
- vd = nl->vars;
- vde = vd + nl->nvars;
- while(vd < vde) {
- v = *vd++;
- s = v->name;
-#ifdef No_Extra_Namelist_Newlines
- if (f__recpos+strlen(s)+2 >= L_len)
-#endif
- nl_donewrec();
- while(*s)
- PUT(*s++);
- PUT(' ');
- PUT('=');
- number = (dims = v->dims) ? dims + 1 : &one;
- type = v->type;
- if (type < 0) {
- size = -type;
- type = TYCHAR;
- }
- else
- size = f__typesize[type];
- l_write(number, v->addr, size, type);
- if (vd < vde) {
- if (f__recpos+2 >= L_len)
- nl_donewrec();
- PUT(',');
- PUT(' ');
- }
- else if (f__recpos+1 >= L_len)
- nl_donewrec();
- }
- f__Aquote = 0;
- PUT('/');
- }
diff --git a/gcc/f/runtime/libU77/COPYING.LIB b/gcc/f/runtime/libU77/COPYING.LIB
deleted file mode 100644
index eb685a5ec98..00000000000
--- a/gcc/f/runtime/libU77/COPYING.LIB
+++ /dev/null
@@ -1,481 +0,0 @@
- GNU LIBRARY GENERAL PUBLIC LICENSE
- Version 2, June 1991
-
- Copyright (C) 1991 Free Software Foundation, Inc.
- 675 Mass Ave, Cambridge, MA 02139, USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-[This is the first released version of the library GPL. It is
- numbered 2 because it goes with version 2 of the ordinary GPL.]
-
- Preamble
-
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-Licenses are intended to guarantee your freedom to share and change
-free software--to make sure the software is free for all its users.
-
- This license, the Library General Public License, applies to some
-specially designated Free Software Foundation software, and to any
-other libraries whose authors decide to use it. You can use it for
-your libraries, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
- To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if
-you distribute copies of the library, or if you modify it.
-
- For example, if you distribute copies of the library, whether gratis
-or for a fee, you must give the recipients all the rights that we gave
-you. You must make sure that they, too, receive or can get the source
-code. If you link a program with the library, you must provide
-complete object files to the recipients so that they can relink them
-with the library, after making changes to the library and recompiling
-it. And you must show them these terms so they know their rights.
-
- Our method of protecting your rights has two steps: (1) copyright
-the library, and (2) offer you this license which gives you legal
-permission to copy, distribute and/or modify the library.
-
- Also, for each distributor's protection, we want to make certain
-that everyone understands that there is no warranty for this free
-library. If the library is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original
-version, so that any problems introduced by others will not reflect on
-the original authors' reputations.
-
- Finally, any free program is threatened constantly by software
-patents. We wish to avoid the danger that companies distributing free
-software will individually obtain patent licenses, thus in effect
-transforming the program into proprietary software. To prevent this,
-we have made it clear that any patent must be licensed for everyone's
-free use or not licensed at all.
-
- Most GNU software, including some libraries, is covered by the ordinary
-GNU General Public License, which was designed for utility programs. This
-license, the GNU Library General Public License, applies to certain
-designated libraries. This license is quite different from the ordinary
-one; be sure to read it in full, and don't assume that anything in it is
-the same as in the ordinary license.
-
- The reason we have a separate public license for some libraries is that
-they blur the distinction we usually make between modifying or adding to a
-program and simply using it. Linking a program with a library, without
-changing the library, is in some sense simply using the library, and is
-analogous to running a utility program or application program. However, in
-a textual and legal sense, the linked executable is a combined work, a
-derivative of the original library, and the ordinary General Public License
-treats it as such.
-
- Because of this blurred distinction, using the ordinary General
-Public License for libraries did not effectively promote software
-sharing, because most developers did not use the libraries. We
-concluded that weaker conditions might promote sharing better.
-
- However, unrestricted linking of non-free programs would deprive the
-users of those programs of all benefit from the free status of the
-libraries themselves. This Library General Public License is intended to
-permit developers of non-free programs to use free libraries, while
-preserving your freedom as a user of such programs to change the free
-libraries that are incorporated in them. (We have not seen how to achieve
-this as regards changes in header files, but we have achieved it as regards
-changes in the actual functions of the Library.) The hope is that this
-will lead to faster development of free libraries.
-
- The precise terms and conditions for copying, distribution and
-modification follow. Pay close attention to the difference between a
-"work based on the library" and a "work that uses the library". The
-former contains code derived from the library, while the latter only
-works together with the library.
-
- Note that it is possible for a library to be covered by the ordinary
-General Public License rather than by this special one.
-
- GNU LIBRARY GENERAL PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. This License Agreement applies to any software library which
-contains a notice placed by the copyright holder or other authorized
-party saying it may be distributed under the terms of this Library
-General Public License (also called "this License"). Each licensee is
-addressed as "you".
-
- A "library" means a collection of software functions and/or data
-prepared so as to be conveniently linked with application programs
-(which use some of those functions and data) to form executables.
-
- The "Library", below, refers to any such software library or work
-which has been distributed under these terms. A "work based on the
-Library" means either the Library or any derivative work under
-copyright law: that is to say, a work containing the Library or a
-portion of it, either verbatim or with modifications and/or translated
-straightforwardly into another language. (Hereinafter, translation is
-included without limitation in the term "modification".)
-
- "Source code" for a work means the preferred form of the work for
-making modifications to it. For a library, complete source code means
-all the source code for all modules it contains, plus any associated
-interface definition files, plus the scripts used to control compilation
-and installation of the library.
-
- Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of
-running a program using the Library is not restricted, and output from
-such a program is covered only if its contents constitute a work based
-on the Library (independent of the use of the Library in a tool for
-writing it). Whether that is true depends on what the Library does
-and what the program that uses the Library does.
-
- 1. You may copy and distribute verbatim copies of the Library's
-complete source code as you receive it, in any medium, provided that
-you conspicuously and appropriately publish on each copy an
-appropriate copyright notice and disclaimer of warranty; keep intact
-all the notices that refer to this License and to the absence of any
-warranty; and distribute a copy of this License along with the
-Library.
-
- You may charge a fee for the physical act of transferring a copy,
-and you may at your option offer warranty protection in exchange for a
-fee.
-
- 2. You may modify your copy or copies of the Library or any portion
-of it, thus forming a work based on the Library, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
- a) The modified work must itself be a software library.
-
- b) You must cause the files modified to carry prominent notices
- stating that you changed the files and the date of any change.
-
- c) You must cause the whole of the work to be licensed at no
- charge to all third parties under the terms of this License.
-
- d) If a facility in the modified Library refers to a function or a
- table of data to be supplied by an application program that uses
- the facility, other than as an argument passed when the facility
- is invoked, then you must make a good faith effort to ensure that,
- in the event an application does not supply such function or
- table, the facility still operates, and performs whatever part of
- its purpose remains meaningful.
-
- (For example, a function in a library to compute square roots has
- a purpose that is entirely well-defined independent of the
- application. Therefore, Subsection 2d requires that any
- application-supplied function or table used by this function must
- be optional: if the application does not supply it, the square
- root function must still compute square roots.)
-
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Library,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
-distribute the same sections as part of a whole which is a work based
-on the Library, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote
-it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Library.
-
-In addition, mere aggregation of another work not based on the Library
-with the Library (or with a work based on the Library) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
- 3. You may opt to apply the terms of the ordinary GNU General Public
-License instead of this License to a given copy of the Library. To do
-this, you must alter all the notices that refer to this License, so
-that they refer to the ordinary GNU General Public License, version 2,
-instead of to this License. (If a newer version than version 2 of the
-ordinary GNU General Public License has appeared, then you can specify
-that version instead if you wish.) Do not make any other change in
-these notices.
-
- Once this change is made in a given copy, it is irreversible for
-that copy, so the ordinary GNU General Public License applies to all
-subsequent copies and derivative works made from that copy.
-
- This option is useful when you wish to copy part of the code of
-the Library into a program that is not a library.
-
- 4. You may copy and distribute the Library (or a portion or
-derivative of it, under Section 2) in object code or executable form
-under the terms of Sections 1 and 2 above provided that you accompany
-it with the complete corresponding machine-readable source code, which
-must be distributed under the terms of Sections 1 and 2 above on a
-medium customarily used for software interchange.
-
- If distribution of object code is made by offering access to copy
-from a designated place, then offering equivalent access to copy the
-source code from the same place satisfies the requirement to
-distribute the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
- 5. A program that contains no derivative of any portion of the
-Library, but is designed to work with the Library by being compiled or
-linked with it, is called a "work that uses the Library". Such a
-work, in isolation, is not a derivative work of the Library, and
-therefore falls outside the scope of this License.
-
- However, linking a "work that uses the Library" with the Library
-creates an executable that is a derivative of the Library (because it
-contains portions of the Library), rather than a "work that uses the
-library". The executable is therefore covered by this License.
-Section 6 states terms for distribution of such executables.
-
- When a "work that uses the Library" uses material from a header file
-that is part of the Library, the object code for the work may be a
-derivative work of the Library even though the source code is not.
-Whether this is true is especially significant if the work can be
-linked without the Library, or if the work is itself a library. The
-threshold for this to be true is not precisely defined by law.
-
- If such an object file uses only numerical parameters, data
-structure layouts and accessors, and small macros and small inline
-functions (ten lines or less in length), then the use of the object
-file is unrestricted, regardless of whether it is legally a derivative
-work. (Executables containing this object code plus portions of the
-Library will still fall under Section 6.)
-
- Otherwise, if the work is a derivative of the Library, you may
-distribute the object code for the work under the terms of Section 6.
-Any executables containing that work also fall under Section 6,
-whether or not they are linked directly with the Library itself.
-
- 6. As an exception to the Sections above, you may also compile or
-link a "work that uses the Library" with the Library to produce a
-work containing portions of the Library, and distribute that work
-under terms of your choice, provided that the terms permit
-modification of the work for the customer's own use and reverse
-engineering for debugging such modifications.
-
- You must give prominent notice with each copy of the work that the
-Library is used in it and that the Library and its use are covered by
-this License. You must supply a copy of this License. If the work
-during execution displays copyright notices, you must include the
-copyright notice for the Library among them, as well as a reference
-directing the user to the copy of this License. Also, you must do one
-of these things:
-
- a) Accompany the work with the complete corresponding
- machine-readable source code for the Library including whatever
- changes were used in the work (which must be distributed under
- Sections 1 and 2 above); and, if the work is an executable linked
- with the Library, with the complete machine-readable "work that
- uses the Library", as object code and/or source code, so that the
- user can modify the Library and then relink to produce a modified
- executable containing the modified Library. (It is understood
- that the user who changes the contents of definitions files in the
- Library will not necessarily be able to recompile the application
- to use the modified definitions.)
-
- b) Accompany the work with a written offer, valid for at
- least three years, to give the same user the materials
- specified in Subsection 6a, above, for a charge no more
- than the cost of performing this distribution.
-
- c) If distribution of the work is made by offering access to copy
- from a designated place, offer equivalent access to copy the above
- specified materials from the same place.
-
- d) Verify that the user has already received a copy of these
- materials or that you have already sent this user a copy.
-
- For an executable, the required form of the "work that uses the
-Library" must include any data and utility programs needed for
-reproducing the executable from it. However, as a special exception,
-the source code distributed need not include anything that is normally
-distributed (in either source or binary form) with the major
-components (compiler, kernel, and so on) of the operating system on
-which the executable runs, unless that component itself accompanies
-the executable.
-
- It may happen that this requirement contradicts the license
-restrictions of other proprietary libraries that do not normally
-accompany the operating system. Such a contradiction means you cannot
-use both them and the Library together in an executable that you
-distribute.
-
- 7. You may place library facilities that are a work based on the
-Library side-by-side in a single library together with other library
-facilities not covered by this License, and distribute such a combined
-library, provided that the separate distribution of the work based on
-the Library and of the other library facilities is otherwise
-permitted, and provided that you do these two things:
-
- a) Accompany the combined library with a copy of the same work
- based on the Library, uncombined with any other library
- facilities. This must be distributed under the terms of the
- Sections above.
-
- b) Give prominent notice with the combined library of the fact
- that part of it is a work based on the Library, and explaining
- where to find the accompanying uncombined form of the same work.
-
- 8. You may not copy, modify, sublicense, link with, or distribute
-the Library except as expressly provided under this License. Any
-attempt otherwise to copy, modify, sublicense, link with, or
-distribute the Library is void, and will automatically terminate your
-rights under this License. However, parties who have received copies,
-or rights, from you under this License will not have their licenses
-terminated so long as such parties remain in full compliance.
-
- 9. You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or
-distribute the Library or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Library (or any work based on the
-Library), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Library or works based on it.
-
- 10. Each time you redistribute the Library (or any work based on the
-Library), the recipient automatically receives a license from the
-original licensor to copy, distribute, link with or modify the Library
-subject to these terms and conditions. You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
- 11. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Library at all. For example, if a patent
-license would not permit royalty-free redistribution of the Library by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Library.
-
-If any portion of this section is held invalid or unenforceable under any
-particular circumstance, the balance of the section is intended to apply,
-and the section as a whole is intended to apply in other circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system which is
-implemented by public license practices. Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
- 12. If the distribution and/or use of the Library is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Library under this License may add
-an explicit geographical distribution limitation excluding those countries,
-so that distribution is permitted only in or among countries not thus
-excluded. In such case, this License incorporates the limitation as if
-written in the body of this License.
-
- 13. The Free Software Foundation may publish revised and/or new
-versions of the Library General Public License from time to time.
-Such new versions will be similar in spirit to the present version,
-but may differ in detail to address new problems or concerns.
-
-Each version is given a distinguishing version number. If the Library
-specifies a version number of this License which applies to it and
-"any later version", you have the option of following the terms and
-conditions either of that version or of any later version published by
-the Free Software Foundation. If the Library does not specify a
-license version number, you may choose any version ever published by
-the Free Software Foundation.
-
- 14. If you wish to incorporate parts of the Library into other free
-programs whose distribution conditions are incompatible with these,
-write to the author to ask for permission. For software which is
-copyrighted by the Free Software Foundation, write to the Free
-Software Foundation; we sometimes make exceptions for this. Our
-decision will be guided by the two goals of preserving the free status
-of all derivatives of our free software and of promoting the sharing
-and reuse of software generally.
-
- NO WARRANTY
-
- 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
-WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
-OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
-KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
-LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
-THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
- 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
-WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
-AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
-FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
-CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
-LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
-RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
-FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGES.
-
- END OF TERMS AND CONDITIONS
-
- Appendix: How to Apply These Terms to Your New Libraries
-
- If you develop a new library, and you want it to be of the greatest
-possible use to the public, we recommend making it free software that
-everyone can redistribute and change. You can do so by permitting
-redistribution under these terms (or, alternatively, under the terms of the
-ordinary General Public License).
-
- To apply these terms, attach the following notices to the library. It is
-safest to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least the
-"copyright" line and a pointer to where the full notice is found.
-
- <one line to give the library's name and a brief idea of what it does.>
- Copyright (C) <year> <name of author>
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public
- License as published by the Free Software Foundation; either
- version 2 of the License, or (at your option) any later version.
-
- This library 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
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with this library; if not, write to the Free
- Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
-Also add information on how to contact you by electronic and paper mail.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the library, if
-necessary. Here is a sample; alter the names:
-
- Yoyodyne, Inc., hereby disclaims all copyright interest in the
- library `Frob' (a library for tweaking knobs) written by James Random Hacker.
-
- <signature of Ty Coon>, 1 April 1990
- Ty Coon, President of Vice
-
-That's all there is to it!
diff --git a/gcc/f/runtime/libU77/Makefile.in b/gcc/f/runtime/libU77/Makefile.in
deleted file mode 100644
index 2e6846b23de..00000000000
--- a/gcc/f/runtime/libU77/Makefile.in
+++ /dev/null
@@ -1,155 +0,0 @@
-# Makefile for GNU F77 compiler runtime, libc interface.
-# Copyright (C) 1995-1997 Free Software Foundation, Inc.
-# Contributed by Dave Love (d.love@dl.ac.uk).
-#
-#This file is part of GNU Fortran libU77 library.
-#
-#This library is free software; you can redistribute it and/or modify
-#it under the terms of the GNU Library General Public License as
-#published by the Free Software Foundation; either version 2, or (at
-#your option) any later version.
-#
-#GNU Fortran 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
-#Library General Public License for more details.
-#
-#You should have received a copy of the GNU General Public License
-#along with GNU Fortran; see the file COPYING. If not, write to
-#Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-SHELL = /bin/sh
-
-srcdir = @srcdir@
-VPATH = @srcdir@
-
-#### Start of system configuration section. ####
-
-# The _FOR_TARGET things are appropriate for a cross-make, passed by the
-# superior makefile
-GCC_FOR_TARGET = @CC@
-CC = $(GCC_FOR_TARGET)
-CFLAGS = @CFLAGS@ $(GCC_FLAGS)
-CPPFLAGS = @CPPFLAGS@
-DEFS = @DEFS@
-CGFLAGS = -g0
-# f2c.h should already be installed in xgcc's include directory but add that
-# to -I anyhow in case not using xgcc. fio.h is in libI77. We need config.h
-# from `.'.
-ALL_CFLAGS = -I. -I$(srcdir) -I$(srcdir)/../libI77 -I../../../include $(CPPFLAGS) $(DEFS) $(CFLAGS)
-AR = @AR@
-AR_FLAGS = rc
-RANLIB = @RANLIB@
-RANLIB_TEST = @RANLIB_TEST@
-CROSS = @CROSS@
-G77DIR = ../../../
-
-.SUFFIXES:
-.SUFFIXES: .c .o
-
-.c.o:
- $(CC) -c -DSkip_f2c_Undefs $(ALL_CFLAGS) $(CGFLAGS) $<
-
-OBJS = VersionU.o gerror_.o perror_.o ierrno_.o itime_.o time_.o \
- unlink_.o fnum_.o getpid_.o getuid_.o getgid_.o kill_.o rand_.o \
- srand_.o irand_.o sleep_.o idate_.o ctime_.o etime_.o \
- dtime_.o isatty_.o ltime_.o fstat_.o stat_.o \
- lstat_.o access_.o link_.o getlog_.o ttynam_.o getcwd_.o symlnk_.o \
- vxttime_.o vxtidate_.o gmtime_.o fdate_.o secnds_.o \
- bes.o dbes.o \
- chdir_.o chmod_.o lnblnk_.o hostnm_.o rename_.o fgetc_.o fputc_.o \
- umask_.o system_clock_.o date_.o second_.o flush1_.o mclock_.o \
- alarm_.o
-SRCS = Version.c gerror_.c perror_.c ierrno_.c itime_.c time_.c \
- unlink_.c fnum_.c getpid_.c getuid_.c getgid_.c kill_.c rand_.c \
- srand_.c irand_.c sleep_.c idate_.c ctime_.c etime_.c \
- dtime_.c isatty_.c ltime_.c fstat_.c stat_.c \
- lstat_.c access_.c link_.c getlog_.c ttynam_.c getcwd_.c symlnk_.c \
- vxttime_.c vxtidate_.c gmtime_.c fdate_.c secnds_.c \
- bes.c dbes.c \
- chdir_.c chmod_.c lnblnk_.c hostnm_.c rename_.c fgetc_.c fputc_.c \
- umask_.c system_clock_.c date_.c second_.c flush1_.c mclock_.c \
- alarm_.c
-
-F2C_H = ../../../include/f2c.h
-
-all: $(OBJS)
-
-VersionU.o: Version.c
- $(CC) -c $(CGFLAGS) -o $@ $(srcdir)/Version.c
-
-lint:
- lint $(CFLAGS) $(SRCS)
-
-mostlyclean:
- -rm -f $(OBJS)
-
-clean: mostlyclean
- -rm -f config.log a.out
-
-distclean realclean maintainer-clean: clean
- -rm -f config.h Makefile config.status config.cache stage? include
-
-$(OBJS): $(F2C_H) config.h
-
-check:
- -$(G77DIR)g77 --driver=$(G77DIR)/xgcc -B$(G77DIR) -g $(srcdir)/u77-test.f $(lib) && ./a.out
- rm -f a.out
-
-access_.o: access_.c
-ctime_.o: ctime_.c
-dtime_.o: dtime_.c
-etime_.o: etime_.c
-fnum_.o: fnum_.c $(srcdir)/../libI77/fio.h
-fstat_.o: fstat_.c
-gerror_.o: gerror_.c
-getcwd_.o: getcwd_.c
-getgid_.o: getgid_.c
-getlog_.o: getlog_.c
-getpid_.o: getpid_.c
-getuid_.o: getuid_.c
-idate_.o: idate_.c
-ierrno_.o: ierrno_.c
-irand_.o: irand_.c
-isatty_.o: isatty_.c $(srcdir)/../libI77/fio.h
-itime_.o: itime_.c
-kill_.o: kill_.c
-link_.o: link_.c
-loc_.o: loc_.c
-lstat_.o: lstat_.c
-ltime_.o: ltime_.c
-perror_.o: perror_.c
-qsort.o: qsort.c
-qsort_.o: qsort_.c
-rand_.o: rand_.c
-rename_.o: rename_.c
-second_.o: second_.c
-sleep_.o: sleep_.c
-srand_.o: srand_.c
-stat_.o: stat_.c
-symlnk_.o: symlnk_.c
-time_.o: time_.c
-ttynam_.o: ttynam_.c
-unlink_.o: unlink_.c
-wait_.o: wait_.c
-vxttime_.o: vxttime_.c
-vtxidate_.o: vxtidate_.c
-fdate_.o: fdate_.c
-gmtime_.o: gmtime_.c
-secnds_.o: secnds_.c
-bes.o: bes.c
-dbes.o: dbes.c
-lnblnk_.o: lnblnk_.c
-chmod_.o: chmod_.c
-chdir_.o: chdir_.c
-hostnm_.o: hostnm_.c
-rename_.o: rename_.c
-fputc_.o: fputc_.c
-fgetc_.o: fgetc_.c
-system_clock_.o: system_clock_.c
-umask_.o: umask_.c
-flush1_.o: flush1_.c
-mclock_.o: mclock_.c
-alarm_.o: alarm_.c
-
-.PHONY: mostlyclean clean distclean maintainer-clean lint check all
diff --git a/gcc/f/runtime/libU77/PROJECTS b/gcc/f/runtime/libU77/PROJECTS
deleted file mode 100644
index 0cf1383cbf9..00000000000
--- a/gcc/f/runtime/libU77/PROJECTS
+++ /dev/null
@@ -1,10 +0,0 @@
- -*- indented-text-*-
-
-* Interface to strget
-
-* Non-blocking (`asynchronous') i/o (per c.l.f. discussion)
-
-* `ioinit'-type routine for various i/o options
-
-* IEEE/VAX/... number format conversion (or XDR interface). This
- might be made optionally transparent per logical unit a la DECtran.
diff --git a/gcc/f/runtime/libU77/README b/gcc/f/runtime/libU77/README
deleted file mode 100644
index 9033a495f1b..00000000000
--- a/gcc/f/runtime/libU77/README
+++ /dev/null
@@ -1,40 +0,0 @@
-19970811 -*-text-*-
-
-g77 libU77
-----------
-
-This directory contains an implementation of most of the `traditional'
-Unix libU77 routines, mostly an interface to libc and libm routines
-and some extra ones for time and date etc. It's intended for use with
-g77, to whose configuration procedure it's currently tied, but should
-be compatible with f2c otherwise, if using the same f2c.h.
-
-The contents of libU77 and its interfaces aren't consistent across
-implementations. This one is mostly taken from documentation for (an
-old version of) the Convex implementation and the v2 SunPro one.
-As of g77 version 0.5.20, most of these routines have been made
-into g77 intrinsics. Some routines have a version with a name prefixed
-by `vxt', corresponding to the VMS Fortran versions, and these should
-be integrated with g77's intrinsics visibility control.
-
-A few routines are currently missing; in the case of `fork', for
-instance, because they're probably not useful, and in the case of
-`qsort' and those for stream-based i/o handling, because they need
-more effort/research. The configuration should weed out those few
-which correspond to facilities which may not be present on some Unix
-systems, such as symbolic links. It's unclear whether the interfaces
-to the native library random number routines should be retained, since
-their implementation is likely to be something one should avoid
-assiduously.
-
-This library has been tested it under SunOS4.1.3 and Irix5.2 and there
-has been some feedback from Linux; presumably potential problems lie
-mainly with systems with impoverished native C library support which
-haven't been properly taken care of with autoconf.
-
-There's another GPL'd implementation of this stuff which I only found
-out about recently (despite having looked) and I haven't yet checked
-how they should be amalgamated.
-
-Dave Love <d.love@dl.ac.uk> Aug '95
-(minor changes by Craig Burley <burley@gnu.ai.mit.edu> Aug '97)
diff --git a/gcc/f/runtime/libU77/Version.c b/gcc/f/runtime/libU77/Version.c
deleted file mode 100644
index 88a2907c217..00000000000
--- a/gcc/f/runtime/libU77/Version.c
+++ /dev/null
@@ -1,12 +0,0 @@
-static char junk[] = "\n@(#) LIBU77 VERSION 19970609\n";
-
-char __G77_LIBU77_VERSION__[] = "0.5.21";
-
-#include <stdio.h>
-
-void
-g77__uvers__ ()
-{
- fprintf (stderr, "__G77_LIBU77_VERSION__: %s", __G77_LIBU77_VERSION__);
- fputs (junk, stderr);
-}
diff --git a/gcc/f/runtime/libU77/access_.c b/gcc/f/runtime/libU77/access_.c
deleted file mode 100644
index 1699ef065f2..00000000000
--- a/gcc/f/runtime/libU77/access_.c
+++ /dev/null
@@ -1,80 +0,0 @@
-/* Copyright (C) 1995, 1997 Free Software Foundation, Inc.
-This file is part of GNU Fortran libU77 library.
-
-This library is free software; you can redistribute it and/or modify it
-under the terms of the GNU Library General Public License as published
-by the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-GNU Fortran 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
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with GNU Fortran; see the file COPYING.LIB. If
-not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA. */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-#if HAVE_UNISTD_H
-# include <unistd.h>
-#endif
-#if HAVE_STDLIB_H
-# include <stdlib.h>
-#else
-# include <stdio.h> /* for NULL */
-#endif
-
-#include <errno.h>
-#include <limits.h>
-#include "f2c.h"
-
-#ifndef R_OK /* for SVR1-2 */
-# define R_OK 4
-#endif
-#ifndef W_OK
-# define W_OK 2
-#endif
-#ifndef X_OK
-# define X_OK 1
-#endif
-#ifndef F_OK
-# define F_OK 0
-#endif
-
-#ifdef KR_headers
-void g_char ();
-
-integer G77_access_0 (name, mode, Lname, Lmode)
- char *name, *mode;
- ftnlen Lname, Lmode;
-#else
-void g_char(const char *a, ftnlen alen, char *b);
-
-integer G77_access_0 (const char *name, const char *mode, ftnlen Lname, ftnlen Lmode)
-#endif
-{
- char *buff;
- char *bp, *blast;
- int amode, i;
-
- buff = malloc (Lname+1);
- if (buff == NULL) return -1;
- g_char (name, Lname, buff);
- amode = 0;
- for (i=0;i<Lmode;i++) {
- switch (mode[i]) {
- case 'r': amode |= R_OK; break;
- case 'w': amode |= W_OK; break;
- case 'x': amode |= X_OK; break;
- case ' ': amode |= F_OK; break; /* as per Sun, at least */
- default: return EINVAL;
- }
- }
- i = access (buff, amode);
- free (buff);
- return i;
-}
diff --git a/gcc/f/runtime/libU77/acconfig.h b/gcc/f/runtime/libU77/acconfig.h
deleted file mode 100644
index 12bba85b869..00000000000
--- a/gcc/f/runtime/libU77/acconfig.h
+++ /dev/null
@@ -1,2 +0,0 @@
-/* Define as the path of the `chmod' program. */
-#undef CHMOD_PATH
diff --git a/gcc/f/runtime/libU77/alarm_.c b/gcc/f/runtime/libU77/alarm_.c
deleted file mode 100644
index b1c347d4a68..00000000000
--- a/gcc/f/runtime/libU77/alarm_.c
+++ /dev/null
@@ -1,59 +0,0 @@
-/* Copyright (C) 1997 Free Software Foundation, Inc.
-This file is part of GNU Fortran libU77 library.
-
-This library is free software; you can redistribute it and/or modify it
-under the terms of the GNU Library General Public License as published
-by the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-GNU Fortran 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
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with GNU Fortran; see the file COPYING.LIB. If
-not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA. */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#if HAVE_UNISTD_H
-# include <unistd.h>
-#endif
-
-#include "f2c.h"
-
-#ifndef RETSIGTYPE
-/* we shouldn't rely on this... */
-#ifdef KR_headers
-#define RETSIGTYPE int
-#else
-#define RETSIGTYPE void
-#endif
-#endif
-typedef RETSIGTYPE (*sig_type)();
-
-#ifdef KR_headers
-extern sig_type signal();
-
-integer G77_alarm_0 (seconds, proc)
- integer *seconds;
- sig_type proc;
-#else
-#include <signal.h>
-typedef int (*sig_proc)(int);
-
-integer G77_alarm_0 (integer *seconds, sig_proc proc)
-#endif
-{
- int status;
-
- if (signal(SIGALRM, (sig_type)proc) == SIG_ERR)
- status = -1;
- else
- status = alarm (*seconds);
- return status;
-}
diff --git a/gcc/f/runtime/libU77/bes.c b/gcc/f/runtime/libU77/bes.c
deleted file mode 100644
index 442337fd77a..00000000000
--- a/gcc/f/runtime/libU77/bes.c
+++ /dev/null
@@ -1,46 +0,0 @@
-/* Copyright (C) 1995, 1996 Free Software Foundation, Inc.
-This file is part of GNU Fortran libU77 library.
-
-This library is free software; you can redistribute it and/or modify it
-under the terms of the GNU Library General Public License as published
-by the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-GNU Fortran 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
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with GNU Fortran; see the file COPYING.LIB. If
-not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA. */
-
-#if 0 /* Don't include these unless necessary -- jcb. */
-#include "f2c.h"
-#include <math.h>
-
-double G77_besj0_0 (const real *x) {
- return j0 (*x);
-}
-
-double G77_besj1_0 (const real *x) {
- return j1 (*x);
-}
-
-double G77_besjn_0 (const integer *n, real *x) {
- return jn (*n, *x);
- }
-
-double G77_besy0_0 (const real *x) {
- return y0 (*x);
-}
-
-double G77_besy1_0 (const real *x) {
- return y1 (*x);
-}
-
-double G77_besyn_0 (const integer *n, real *x) {
- return yn (*n, *x);
-}
-#endif
diff --git a/gcc/f/runtime/libU77/chdir_.c b/gcc/f/runtime/libU77/chdir_.c
deleted file mode 100644
index 500be54fbe6..00000000000
--- a/gcc/f/runtime/libU77/chdir_.c
+++ /dev/null
@@ -1,57 +0,0 @@
-/* Copyright (C) 1995, 1997 Free Software Foundation, Inc.
-This file is part of GNU Fortran libU77 library.
-
-This library is free software; you can redistribute it and/or modify it
-under the terms of the GNU Library General Public License as published
-by the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-GNU Fortran 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
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with GNU Fortran; see the file COPYING.LIB. If
-not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA. */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-#if HAVE_UNISTD_H
-# include <unistd.h>
-#endif
-#if HAVE_STDLIB_H
-# include <stdlib.h>
-#else
-# include <stdio.h>
-#endif
-
-#include <errno.h>
-#include "f2c.h"
-
-
-#ifdef KR_headers
-void g_char ();
-
-integer G77_chdir_0 (name, Lname)
- char *name;
- ftnlen Lname;
-#else
-void g_char(const char *a, ftnlen alen, char *b);
-
-integer G77_chdir_0 (const char *name, const ftnlen Lname)
-#endif
-{
- char *buff;
- char *bp, *blast;
- int i;
-
- buff = malloc (Lname+1);
- if (buff == NULL) return -1;
- g_char (name, Lname, buff);
- i = chdir (buff);
- free (buff);
- return i ? errno : 0;
-}
diff --git a/gcc/f/runtime/libU77/chmod_.c b/gcc/f/runtime/libU77/chmod_.c
deleted file mode 100644
index 9797b80f3f5..00000000000
--- a/gcc/f/runtime/libU77/chmod_.c
+++ /dev/null
@@ -1,79 +0,0 @@
-/* Copyright (C) 1995, 1997 Free Software Foundation, Inc.
-This file is part of GNU Fortran libU77 library.
-
-This library is free software; you can redistribute it and/or modify it
-under the terms of the GNU Library General Public License as published
-by the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-GNU Fortran 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
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with GNU Fortran; see the file COPYING.LIB. If
-not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA. */
-
-
-/* This definitely shouldn't be done this way -- should canibalise
- chmod(1) from GNU or BSD. */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-#if HAVE_UNISTD_H
-# include <unistd.h>
-#endif
-#if HAVE_STDLIB_H
-# include <stdlib.h>
-#else
-# include <stdio.h> /* for NULL */
-#endif
-
-#include "f2c.h"
-
-#ifndef CHMOD_PATH
-#define CHMOD_PATH "/bin/chmod"
-#endif
-
-#ifdef KR_headers
-extern void s_cat ();
-void g_char ();
-
-integer G77_chmod_0 (name, mode, Lname, Lmode)
- char *name, *mode;
- ftnlen Lname, Lmode;
-#else
-extern void s_cat(char *lp, char *rpp[], ftnlen rnp[], ftnlen *np, ftnlen ll);
-void g_char(const char *a, ftnlen alen, char *b);
-
-integer G77_chmod_0 (/* const */ char *name, /* const */ char *mode, const ftnlen Lname, const ftnlen Lmode)
-#endif
-{
- char *buff;
- char *bp, *blast;
- int i;
- ftnlen l, l2;
- ftnlen six = 6;
- address a[6];
- ftnlen ii[6];
- char chmod_path [] = CHMOD_PATH;
- l = strlen (chmod_path);
- buff = malloc (Lname+Lmode+l+3+13+1);
- if (buff == NULL) return -1;
- ii[0] = l; a[0] = chmod_path;
- ii[1] = 1; a[1] = " ";
- ii[2] = Lmode; a[2] = mode;
- ii[3] = 2; a[3] = " '";
- for (l2=Lname; (l2 > 1) && (name[l2-1] == ' '); )
- l2--;
- ii[4] = l2; a[4] = name;
- ii[5] = 13; a[5] = "' 2>/dev/null";
- s_cat (buff, a, ii, &six, Lname+Lmode+l+3+13);
- buff[Lname+Lmode+l+3+13] = '\0';
- i = system (buff);
- free (buff);
- return i;
-}
diff --git a/gcc/f/runtime/libU77/config.h.in b/gcc/f/runtime/libU77/config.h.in
deleted file mode 100644
index 45ada20e236..00000000000
--- a/gcc/f/runtime/libU77/config.h.in
+++ /dev/null
@@ -1,73 +0,0 @@
-/* config.h.in. Generated automatically from configure.in by autoheader. */
-
-/* Define to empty if the keyword does not work. */
-#undef const
-
-/* Define if your struct stat has st_blksize. */
-#undef HAVE_ST_BLKSIZE
-
-/* Define if your struct stat has st_blocks. */
-#undef HAVE_ST_BLOCKS
-
-/* Define if your struct stat has st_rdev. */
-#undef HAVE_ST_RDEV
-
-/* Define to `int' if <sys/types.h> doesn't define. */
-#undef mode_t
-
-/* Define to `int' if <sys/types.h> doesn't define. */
-#undef pid_t
-
-/* Define to `unsigned' if <sys/types.h> doesn't define. */
-#undef size_t
-
-/* Define if you have the ANSI C header files. */
-#undef STDC_HEADERS
-
-/* Define if you can safely include both <sys/time.h> and <time.h>. */
-#undef TIME_WITH_SYS_TIME
-
-/* Define if your <sys/time.h> declares struct tm. */
-#undef TM_IN_SYS_TIME
-
-/* Define as the path of the `chmod' program. */
-#undef CHMOD_PATH
-
-/* Define if you have the clock function. */
-#undef HAVE_CLOCK
-
-/* Define if you have the getcwd function. */
-#undef HAVE_GETCWD
-
-/* Define if you have the gethostname function. */
-#undef HAVE_GETHOSTNAME
-
-/* Define if you have the getrusage function. */
-#undef HAVE_GETRUSAGE
-
-/* Define if you have the getwd function. */
-#undef HAVE_GETWD
-
-/* Define if you have the lstat function. */
-#undef HAVE_LSTAT
-
-/* Define if you have the strerror function. */
-#undef HAVE_STRERROR
-
-/* Define if you have the symlink function. */
-#undef HAVE_SYMLINK
-
-/* Define if you have the <limits.h> header file. */
-#undef HAVE_LIMITS_H
-
-/* Define if you have the <stdlib.h> header file. */
-#undef HAVE_STDLIB_H
-
-/* Define if you have the <string.h> header file. */
-#undef HAVE_STRING_H
-
-/* Define if you have the <sys/time.h> header file. */
-#undef HAVE_SYS_TIME_H
-
-/* Define if you have the <unistd.h> header file. */
-#undef HAVE_UNISTD_H
diff --git a/gcc/f/runtime/libU77/configure b/gcc/f/runtime/libU77/configure
deleted file mode 100755
index 63fb0e7844e..00000000000
--- a/gcc/f/runtime/libU77/configure
+++ /dev/null
@@ -1,1758 +0,0 @@
-#! /bin/sh
-
-# Guess values for system-dependent variables and create Makefiles.
-# Generated automatically using autoconf version 2.12
-# Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc.
-#
-# This configure script is free software; the Free Software Foundation
-# gives unlimited permission to copy, distribute and modify it.
-
-# Defaults:
-ac_help=
-ac_default_prefix=/usr/local
-# Any additions from configure.in:
-
-# Initialize some variables set by options.
-# The variables have the same names as the options, with
-# dashes changed to underlines.
-build=NONE
-cache_file=./config.cache
-exec_prefix=NONE
-host=NONE
-no_create=
-nonopt=NONE
-no_recursion=
-prefix=NONE
-program_prefix=NONE
-program_suffix=NONE
-program_transform_name=s,x,x,
-silent=
-site=
-srcdir=
-target=NONE
-verbose=
-x_includes=NONE
-x_libraries=NONE
-bindir='${exec_prefix}/bin'
-sbindir='${exec_prefix}/sbin'
-libexecdir='${exec_prefix}/libexec'
-datadir='${prefix}/share'
-sysconfdir='${prefix}/etc'
-sharedstatedir='${prefix}/com'
-localstatedir='${prefix}/var'
-libdir='${exec_prefix}/lib'
-includedir='${prefix}/include'
-oldincludedir='/usr/include'
-infodir='${prefix}/info'
-mandir='${prefix}/man'
-
-# Initialize some other variables.
-subdirs=
-MFLAGS= MAKEFLAGS=
-# Maximum number of lines to put in a shell here document.
-ac_max_here_lines=12
-
-ac_prev=
-for ac_option
-do
-
- # If the previous option needs an argument, assign it.
- if test -n "$ac_prev"; then
- eval "$ac_prev=\$ac_option"
- ac_prev=
- continue
- fi
-
- case "$ac_option" in
- -*=*) ac_optarg=`echo "$ac_option" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
- *) ac_optarg= ;;
- esac
-
- # Accept the important Cygnus configure options, so we can diagnose typos.
-
- case "$ac_option" in
-
- -bindir | --bindir | --bindi | --bind | --bin | --bi)
- ac_prev=bindir ;;
- -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
- bindir="$ac_optarg" ;;
-
- -build | --build | --buil | --bui | --bu)
- ac_prev=build ;;
- -build=* | --build=* | --buil=* | --bui=* | --bu=*)
- build="$ac_optarg" ;;
-
- -cache-file | --cache-file | --cache-fil | --cache-fi \
- | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
- ac_prev=cache_file ;;
- -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
- | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
- cache_file="$ac_optarg" ;;
-
- -datadir | --datadir | --datadi | --datad | --data | --dat | --da)
- ac_prev=datadir ;;
- -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \
- | --da=*)
- datadir="$ac_optarg" ;;
-
- -disable-* | --disable-*)
- ac_feature=`echo $ac_option|sed -e 's/-*disable-//'`
- # Reject names that are not valid shell variable names.
- if test -n "`echo $ac_feature| sed 's/[-a-zA-Z0-9_]//g'`"; then
- { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; }
- fi
- ac_feature=`echo $ac_feature| sed 's/-/_/g'`
- eval "enable_${ac_feature}=no" ;;
-
- -enable-* | --enable-*)
- ac_feature=`echo $ac_option|sed -e 's/-*enable-//' -e 's/=.*//'`
- # Reject names that are not valid shell variable names.
- if test -n "`echo $ac_feature| sed 's/[-_a-zA-Z0-9]//g'`"; then
- { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; }
- fi
- ac_feature=`echo $ac_feature| sed 's/-/_/g'`
- case "$ac_option" in
- *=*) ;;
- *) ac_optarg=yes ;;
- esac
- eval "enable_${ac_feature}='$ac_optarg'" ;;
-
- -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
- | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
- | --exec | --exe | --ex)
- ac_prev=exec_prefix ;;
- -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
- | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
- | --exec=* | --exe=* | --ex=*)
- exec_prefix="$ac_optarg" ;;
-
- -gas | --gas | --ga | --g)
- # Obsolete; use --with-gas.
- with_gas=yes ;;
-
- -help | --help | --hel | --he)
- # Omit some internal or obsolete options to make the list less imposing.
- # This message is too long to be a string in the A/UX 3.1 sh.
- cat << EOF
-Usage: configure [options] [host]
-Options: [defaults in brackets after descriptions]
-Configuration:
- --cache-file=FILE cache test results in FILE
- --help print this message
- --no-create do not create output files
- --quiet, --silent do not print \`checking...' messages
- --version print the version of autoconf that created configure
-Directory and file names:
- --prefix=PREFIX install architecture-independent files in PREFIX
- [$ac_default_prefix]
- --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
- [same as prefix]
- --bindir=DIR user executables in DIR [EPREFIX/bin]
- --sbindir=DIR system admin executables in DIR [EPREFIX/sbin]
- --libexecdir=DIR program executables in DIR [EPREFIX/libexec]
- --datadir=DIR read-only architecture-independent data in DIR
- [PREFIX/share]
- --sysconfdir=DIR read-only single-machine data in DIR [PREFIX/etc]
- --sharedstatedir=DIR modifiable architecture-independent data in DIR
- [PREFIX/com]
- --localstatedir=DIR modifiable single-machine data in DIR [PREFIX/var]
- --libdir=DIR object code libraries in DIR [EPREFIX/lib]
- --includedir=DIR C header files in DIR [PREFIX/include]
- --oldincludedir=DIR C header files for non-gcc in DIR [/usr/include]
- --infodir=DIR info documentation in DIR [PREFIX/info]
- --mandir=DIR man documentation in DIR [PREFIX/man]
- --srcdir=DIR find the sources in DIR [configure dir or ..]
- --program-prefix=PREFIX prepend PREFIX to installed program names
- --program-suffix=SUFFIX append SUFFIX to installed program names
- --program-transform-name=PROGRAM
- run sed PROGRAM on installed program names
-EOF
- cat << EOF
-Host type:
- --build=BUILD configure for building on BUILD [BUILD=HOST]
- --host=HOST configure for HOST [guessed]
- --target=TARGET configure for TARGET [TARGET=HOST]
-Features and packages:
- --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
- --enable-FEATURE[=ARG] include FEATURE [ARG=yes]
- --with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
- --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
- --x-includes=DIR X include files are in DIR
- --x-libraries=DIR X library files are in DIR
-EOF
- if test -n "$ac_help"; then
- echo "--enable and --with options recognized:$ac_help"
- fi
- exit 0 ;;
-
- -host | --host | --hos | --ho)
- ac_prev=host ;;
- -host=* | --host=* | --hos=* | --ho=*)
- host="$ac_optarg" ;;
-
- -includedir | --includedir | --includedi | --included | --include \
- | --includ | --inclu | --incl | --inc)
- ac_prev=includedir ;;
- -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
- | --includ=* | --inclu=* | --incl=* | --inc=*)
- includedir="$ac_optarg" ;;
-
- -infodir | --infodir | --infodi | --infod | --info | --inf)
- ac_prev=infodir ;;
- -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
- infodir="$ac_optarg" ;;
-
- -libdir | --libdir | --libdi | --libd)
- ac_prev=libdir ;;
- -libdir=* | --libdir=* | --libdi=* | --libd=*)
- libdir="$ac_optarg" ;;
-
- -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
- | --libexe | --libex | --libe)
- ac_prev=libexecdir ;;
- -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
- | --libexe=* | --libex=* | --libe=*)
- libexecdir="$ac_optarg" ;;
-
- -localstatedir | --localstatedir | --localstatedi | --localstated \
- | --localstate | --localstat | --localsta | --localst \
- | --locals | --local | --loca | --loc | --lo)
- ac_prev=localstatedir ;;
- -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
- | --localstate=* | --localstat=* | --localsta=* | --localst=* \
- | --locals=* | --local=* | --loca=* | --loc=* | --lo=*)
- localstatedir="$ac_optarg" ;;
-
- -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
- ac_prev=mandir ;;
- -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
- mandir="$ac_optarg" ;;
-
- -nfp | --nfp | --nf)
- # Obsolete; use --without-fp.
- with_fp=no ;;
-
- -no-create | --no-create | --no-creat | --no-crea | --no-cre \
- | --no-cr | --no-c)
- no_create=yes ;;
-
- -no-recursion | --no-recursion | --no-recursio | --no-recursi \
- | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
- no_recursion=yes ;;
-
- -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
- | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
- | --oldin | --oldi | --old | --ol | --o)
- ac_prev=oldincludedir ;;
- -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
- | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
- | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
- oldincludedir="$ac_optarg" ;;
-
- -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
- ac_prev=prefix ;;
- -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
- prefix="$ac_optarg" ;;
-
- -program-prefix | --program-prefix | --program-prefi | --program-pref \
- | --program-pre | --program-pr | --program-p)
- ac_prev=program_prefix ;;
- -program-prefix=* | --program-prefix=* | --program-prefi=* \
- | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
- program_prefix="$ac_optarg" ;;
-
- -program-suffix | --program-suffix | --program-suffi | --program-suff \
- | --program-suf | --program-su | --program-s)
- ac_prev=program_suffix ;;
- -program-suffix=* | --program-suffix=* | --program-suffi=* \
- | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
- program_suffix="$ac_optarg" ;;
-
- -program-transform-name | --program-transform-name \
- | --program-transform-nam | --program-transform-na \
- | --program-transform-n | --program-transform- \
- | --program-transform | --program-transfor \
- | --program-transfo | --program-transf \
- | --program-trans | --program-tran \
- | --progr-tra | --program-tr | --program-t)
- ac_prev=program_transform_name ;;
- -program-transform-name=* | --program-transform-name=* \
- | --program-transform-nam=* | --program-transform-na=* \
- | --program-transform-n=* | --program-transform-=* \
- | --program-transform=* | --program-transfor=* \
- | --program-transfo=* | --program-transf=* \
- | --program-trans=* | --program-tran=* \
- | --progr-tra=* | --program-tr=* | --program-t=*)
- program_transform_name="$ac_optarg" ;;
-
- -q | -quiet | --quiet | --quie | --qui | --qu | --q \
- | -silent | --silent | --silen | --sile | --sil)
- silent=yes ;;
-
- -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
- ac_prev=sbindir ;;
- -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
- | --sbi=* | --sb=*)
- sbindir="$ac_optarg" ;;
-
- -sharedstatedir | --sharedstatedir | --sharedstatedi \
- | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
- | --sharedst | --shareds | --shared | --share | --shar \
- | --sha | --sh)
- ac_prev=sharedstatedir ;;
- -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
- | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
- | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
- | --sha=* | --sh=*)
- sharedstatedir="$ac_optarg" ;;
-
- -site | --site | --sit)
- ac_prev=site ;;
- -site=* | --site=* | --sit=*)
- site="$ac_optarg" ;;
-
- -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
- ac_prev=srcdir ;;
- -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
- srcdir="$ac_optarg" ;;
-
- -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
- | --syscon | --sysco | --sysc | --sys | --sy)
- ac_prev=sysconfdir ;;
- -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
- | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
- sysconfdir="$ac_optarg" ;;
-
- -target | --target | --targe | --targ | --tar | --ta | --t)
- ac_prev=target ;;
- -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
- target="$ac_optarg" ;;
-
- -v | -verbose | --verbose | --verbos | --verbo | --verb)
- verbose=yes ;;
-
- -version | --version | --versio | --versi | --vers)
- echo "configure generated by autoconf version 2.12"
- exit 0 ;;
-
- -with-* | --with-*)
- ac_package=`echo $ac_option|sed -e 's/-*with-//' -e 's/=.*//'`
- # Reject names that are not valid shell variable names.
- if test -n "`echo $ac_package| sed 's/[-_a-zA-Z0-9]//g'`"; then
- { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; }
- fi
- ac_package=`echo $ac_package| sed 's/-/_/g'`
- case "$ac_option" in
- *=*) ;;
- *) ac_optarg=yes ;;
- esac
- eval "with_${ac_package}='$ac_optarg'" ;;
-
- -without-* | --without-*)
- ac_package=`echo $ac_option|sed -e 's/-*without-//'`
- # Reject names that are not valid shell variable names.
- if test -n "`echo $ac_package| sed 's/[-a-zA-Z0-9_]//g'`"; then
- { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; }
- fi
- ac_package=`echo $ac_package| sed 's/-/_/g'`
- eval "with_${ac_package}=no" ;;
-
- --x)
- # Obsolete; use --with-x.
- with_x=yes ;;
-
- -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
- | --x-incl | --x-inc | --x-in | --x-i)
- ac_prev=x_includes ;;
- -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
- | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
- x_includes="$ac_optarg" ;;
-
- -x-libraries | --x-libraries | --x-librarie | --x-librari \
- | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
- ac_prev=x_libraries ;;
- -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
- | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
- x_libraries="$ac_optarg" ;;
-
- -*) { echo "configure: error: $ac_option: invalid option; use --help to show usage" 1>&2; exit 1; }
- ;;
-
- *)
- if test -n "`echo $ac_option| sed 's/[-a-z0-9.]//g'`"; then
- echo "configure: warning: $ac_option: invalid host type" 1>&2
- fi
- if test "x$nonopt" != xNONE; then
- { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; }
- fi
- nonopt="$ac_option"
- ;;
-
- esac
-done
-
-if test -n "$ac_prev"; then
- { echo "configure: error: missing argument to --`echo $ac_prev | sed 's/_/-/g'`" 1>&2; exit 1; }
-fi
-
-trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15
-
-# File descriptor usage:
-# 0 standard input
-# 1 file creation
-# 2 errors and warnings
-# 3 some systems may open it to /dev/tty
-# 4 used on the Kubota Titan
-# 6 checking for... messages and results
-# 5 compiler messages saved in config.log
-if test "$silent" = yes; then
- exec 6>/dev/null
-else
- exec 6>&1
-fi
-exec 5>./config.log
-
-echo "\
-This file contains any messages produced by compilers while
-running configure, to aid debugging if configure makes a mistake.
-" 1>&5
-
-# Strip out --no-create and --no-recursion so they do not pile up.
-# Also quote any args containing shell metacharacters.
-ac_configure_args=
-for ac_arg
-do
- case "$ac_arg" in
- -no-create | --no-create | --no-creat | --no-crea | --no-cre \
- | --no-cr | --no-c) ;;
- -no-recursion | --no-recursion | --no-recursio | --no-recursi \
- | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;;
- *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*)
- ac_configure_args="$ac_configure_args '$ac_arg'" ;;
- *) ac_configure_args="$ac_configure_args $ac_arg" ;;
- esac
-done
-
-# NLS nuisances.
-# Only set these to C if already set. These must not be set unconditionally
-# because not all systems understand e.g. LANG=C (notably SCO).
-# Fixing LC_MESSAGES prevents Solaris sh from translating var values in `set'!
-# Non-C LC_CTYPE values break the ctype check.
-if test "${LANG+set}" = set; then LANG=C; export LANG; fi
-if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi
-if test "${LC_MESSAGES+set}" = set; then LC_MESSAGES=C; export LC_MESSAGES; fi
-if test "${LC_CTYPE+set}" = set; then LC_CTYPE=C; export LC_CTYPE; fi
-
-# confdefs.h avoids OS command line length limits that DEFS can exceed.
-rm -rf conftest* confdefs.h
-# AIX cpp loses on an empty file, so make sure it contains at least a newline.
-echo > confdefs.h
-
-# A filename unique to this package, relative to the directory that
-# configure is in, which we can look for to find out if srcdir is correct.
-ac_unique_file=access_.c
-
-# Find the source files, if location was not specified.
-if test -z "$srcdir"; then
- ac_srcdir_defaulted=yes
- # Try the directory containing this script, then its parent.
- ac_prog=$0
- ac_confdir=`echo $ac_prog|sed 's%/[^/][^/]*$%%'`
- test "x$ac_confdir" = "x$ac_prog" && ac_confdir=.
- srcdir=$ac_confdir
- if test ! -r $srcdir/$ac_unique_file; then
- srcdir=..
- fi
-else
- ac_srcdir_defaulted=no
-fi
-if test ! -r $srcdir/$ac_unique_file; then
- if test "$ac_srcdir_defaulted" = yes; then
- { echo "configure: error: can not find sources in $ac_confdir or .." 1>&2; exit 1; }
- else
- { echo "configure: error: can not find sources in $srcdir" 1>&2; exit 1; }
- fi
-fi
-srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'`
-
-# Prefer explicitly selected file to automatically selected ones.
-if test -z "$CONFIG_SITE"; then
- if test "x$prefix" != xNONE; then
- CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site"
- else
- CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
- fi
-fi
-for ac_site_file in $CONFIG_SITE; do
- if test -r "$ac_site_file"; then
- echo "loading site script $ac_site_file"
- . "$ac_site_file"
- fi
-done
-
-if test -r "$cache_file"; then
- echo "loading cache $cache_file"
- . $cache_file
-else
- echo "creating cache $cache_file"
- > $cache_file
-fi
-
-ac_ext=c
-# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
-ac_link='${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
-cross_compiling=$ac_cv_prog_cc_cross
-
-if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then
- # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu.
- if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then
- ac_n= ac_c='
-' ac_t=' '
- else
- ac_n=-n ac_c= ac_t=
- fi
-else
- ac_n= ac_c='\c' ac_t=
-fi
-
-
-
-
-# For g77 we'll set CC to point at the built gcc, but this will get it into
-# the makefiles
-# Extract the first word of "gcc", so it can be a program name with args.
-set dummy gcc; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:529: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- if test -n "$CC"; then
- ac_cv_prog_CC="$CC" # Let the user override the test.
-else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
- for ac_dir in $PATH; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_prog_CC="gcc"
- break
- fi
- done
- IFS="$ac_save_ifs"
-fi
-fi
-CC="$ac_cv_prog_CC"
-if test -n "$CC"; then
- echo "$ac_t""$CC" 1>&6
-else
- echo "$ac_t""no" 1>&6
-fi
-
-if test -z "$CC"; then
- # Extract the first word of "cc", so it can be a program name with args.
-set dummy cc; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:558: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- if test -n "$CC"; then
- ac_cv_prog_CC="$CC" # Let the user override the test.
-else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
- ac_prog_rejected=no
- for ac_dir in $PATH; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then
- ac_prog_rejected=yes
- continue
- fi
- ac_cv_prog_CC="cc"
- break
- fi
- done
- IFS="$ac_save_ifs"
-if test $ac_prog_rejected = yes; then
- # We found a bogon in the path, so make sure we never use it.
- set dummy $ac_cv_prog_CC
- shift
- if test $# -gt 0; then
- # We chose a different compiler from the bogus one.
- # However, it has the same basename, so the bogon will be chosen
- # first if we set CC to just the basename; use the full file name.
- shift
- set dummy "$ac_dir/$ac_word" "$@"
- shift
- ac_cv_prog_CC="$@"
- fi
-fi
-fi
-fi
-CC="$ac_cv_prog_CC"
-if test -n "$CC"; then
- echo "$ac_t""$CC" 1>&6
-else
- echo "$ac_t""no" 1>&6
-fi
-
- test -z "$CC" && { echo "configure: error: no acceptable cc found in \$PATH" 1>&2; exit 1; }
-fi
-
-echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
-echo "configure:606: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
-
-ac_ext=c
-# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
-ac_link='${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
-cross_compiling=$ac_cv_prog_cc_cross
-
-cat > conftest.$ac_ext <<EOF
-#line 616 "configure"
-#include "confdefs.h"
-main(){return(0);}
-EOF
-if { (eval echo configure:620: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
- ac_cv_prog_cc_works=yes
- # If we can't run a trivial program, we are probably using a cross compiler.
- if (./conftest; exit) 2>/dev/null; then
- ac_cv_prog_cc_cross=no
- else
- ac_cv_prog_cc_cross=yes
- fi
-else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- ac_cv_prog_cc_works=no
-fi
-rm -fr conftest*
-
-echo "$ac_t""$ac_cv_prog_cc_works" 1>&6
-if test $ac_cv_prog_cc_works = no; then
- { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; }
-fi
-echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
-echo "configure:640: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
-echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6
-cross_compiling=$ac_cv_prog_cc_cross
-
-echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
-echo "configure:645: checking whether we are using GNU C" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.c <<EOF
-#ifdef __GNUC__
- yes;
-#endif
-EOF
-if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:654: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
- ac_cv_prog_gcc=yes
-else
- ac_cv_prog_gcc=no
-fi
-fi
-
-echo "$ac_t""$ac_cv_prog_gcc" 1>&6
-
-if test $ac_cv_prog_gcc = yes; then
- GCC=yes
- ac_test_CFLAGS="${CFLAGS+set}"
- ac_save_CFLAGS="$CFLAGS"
- CFLAGS=
- echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
-echo "configure:669: checking whether ${CC-cc} accepts -g" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- echo 'void f(){}' > conftest.c
-if test -z "`${CC-cc} -g -c conftest.c 2>&1`"; then
- ac_cv_prog_cc_g=yes
-else
- ac_cv_prog_cc_g=no
-fi
-rm -f conftest*
-
-fi
-
-echo "$ac_t""$ac_cv_prog_cc_g" 1>&6
- if test "$ac_test_CFLAGS" = set; then
- CFLAGS="$ac_save_CFLAGS"
- elif test $ac_cv_prog_cc_g = yes; then
- CFLAGS="-g -O2"
- else
- CFLAGS="-O2"
- fi
-else
- GCC=
- test "${CFLAGS+set}" = set || CFLAGS="-g"
-fi
-
-if test "$CROSS";then
- ac_cv_c_cross=yes
-else
- ac_cv_c_cross=no
-fi
-
-# Extract the first word of "chmod", so it can be a program name with args.
-set dummy chmod; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:705: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_path_ac_cv_prog_chmod'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- case "$ac_cv_prog_chmod" in
- /*)
- ac_cv_path_ac_cv_prog_chmod="$ac_cv_prog_chmod" # Let the user override the test with a path.
- ;;
- *)
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
- for ac_dir in $PATH; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_path_ac_cv_prog_chmod="$ac_dir/$ac_word"
- break
- fi
- done
- IFS="$ac_save_ifs"
- test -z "$ac_cv_path_ac_cv_prog_chmod" && ac_cv_path_ac_cv_prog_chmod="no"
- ;;
-esac
-fi
-ac_cv_prog_chmod="$ac_cv_path_ac_cv_prog_chmod"
-if test -n "$ac_cv_prog_chmod"; then
- echo "$ac_t""$ac_cv_prog_chmod" 1>&6
-else
- echo "$ac_t""no" 1>&6
-fi
-
-if test "$ac_cv_prog_chmod" != no || test "$CROSS"; then
- MAYBES=chmod_.o
- cat >> confdefs.h <<EOF
-#define CHMOD_PATH "$ac_cv_prog_chmod"
-EOF
-
-else
- MAYBES=""
-fi
-
-if test "$ac_cv_c_cross" = yes; then
- RANLIB=$RANLIB_FOR_TARGET
- AR=$AR_FOR_TARGET
-
-else
- # Extract the first word of "ranlib", so it can be a program name with args.
-set dummy ranlib; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:752: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- if test -n "$RANLIB"; then
- ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
-else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
- for ac_dir in $PATH; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_prog_RANLIB="ranlib"
- break
- fi
- done
- IFS="$ac_save_ifs"
- test -z "$ac_cv_prog_RANLIB" && ac_cv_prog_RANLIB=":"
-fi
-fi
-RANLIB="$ac_cv_prog_RANLIB"
-if test -n "$RANLIB"; then
- echo "$ac_t""$RANLIB" 1>&6
-else
- echo "$ac_t""no" 1>&6
-fi
-
- AR=ar
- RANLIB_TEST=true
-fi
-
-
-
-echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
-echo "configure:785: checking how to run the C preprocessor" >&5
-# On Suns, sometimes $CPP names a directory.
-if test -n "$CPP" && test -d "$CPP"; then
- CPP=
-fi
-if test -z "$CPP"; then
-if eval "test \"`echo '$''{'ac_cv_prog_CPP'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- # This must be in double quotes, not single quotes, because CPP may get
- # substituted into the Makefile and "${CC-cc}" will confuse make.
- CPP="${CC-cc} -E"
- # On the NeXT, cc -E runs the code through the compiler's parser,
- # not just through cpp.
- cat > conftest.$ac_ext <<EOF
-#line 800 "configure"
-#include "confdefs.h"
-#include <assert.h>
-Syntax Error
-EOF
-ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:806: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-ac_err=`grep -v '^ *+' conftest.out`
-if test -z "$ac_err"; then
- :
-else
- echo "$ac_err" >&5
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- CPP="${CC-cc} -E -traditional-cpp"
- cat > conftest.$ac_ext <<EOF
-#line 817 "configure"
-#include "confdefs.h"
-#include <assert.h>
-Syntax Error
-EOF
-ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:823: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-ac_err=`grep -v '^ *+' conftest.out`
-if test -z "$ac_err"; then
- :
-else
- echo "$ac_err" >&5
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- CPP=/lib/cpp
-fi
-rm -f conftest*
-fi
-rm -f conftest*
- ac_cv_prog_CPP="$CPP"
-fi
- CPP="$ac_cv_prog_CPP"
-else
- ac_cv_prog_CPP="$CPP"
-fi
-echo "$ac_t""$CPP" 1>&6
-
-echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6
-echo "configure:846: checking for ANSI C header files" >&5
-if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.$ac_ext <<EOF
-#line 851 "configure"
-#include "confdefs.h"
-#include <stdlib.h>
-#include <stdarg.h>
-#include <string.h>
-#include <float.h>
-EOF
-ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:859: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-ac_err=`grep -v '^ *+' conftest.out`
-if test -z "$ac_err"; then
- rm -rf conftest*
- ac_cv_header_stdc=yes
-else
- echo "$ac_err" >&5
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- ac_cv_header_stdc=no
-fi
-rm -f conftest*
-
-if test $ac_cv_header_stdc = yes; then
- # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
-cat > conftest.$ac_ext <<EOF
-#line 876 "configure"
-#include "confdefs.h"
-#include <string.h>
-EOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- egrep "memchr" >/dev/null 2>&1; then
- :
-else
- rm -rf conftest*
- ac_cv_header_stdc=no
-fi
-rm -f conftest*
-
-fi
-
-if test $ac_cv_header_stdc = yes; then
- # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
-cat > conftest.$ac_ext <<EOF
-#line 894 "configure"
-#include "confdefs.h"
-#include <stdlib.h>
-EOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- egrep "free" >/dev/null 2>&1; then
- :
-else
- rm -rf conftest*
- ac_cv_header_stdc=no
-fi
-rm -f conftest*
-
-fi
-
-if test $ac_cv_header_stdc = yes; then
- # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
-if test "$cross_compiling" = yes; then
- :
-else
- cat > conftest.$ac_ext <<EOF
-#line 915 "configure"
-#include "confdefs.h"
-#include <ctype.h>
-#define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
-#define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
-#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
-int main () { int i; for (i = 0; i < 256; i++)
-if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2);
-exit (0); }
-
-EOF
-if { (eval echo configure:926: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
-then
- :
-else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -fr conftest*
- ac_cv_header_stdc=no
-fi
-rm -fr conftest*
-fi
-
-fi
-fi
-
-echo "$ac_t""$ac_cv_header_stdc" 1>&6
-if test $ac_cv_header_stdc = yes; then
- cat >> confdefs.h <<\EOF
-#define STDC_HEADERS 1
-EOF
-
-fi
-
-
-echo $ac_n "checking whether time.h and sys/time.h may both be included""... $ac_c" 1>&6
-echo "configure:951: checking whether time.h and sys/time.h may both be included" >&5
-if eval "test \"`echo '$''{'ac_cv_header_time'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.$ac_ext <<EOF
-#line 956 "configure"
-#include "confdefs.h"
-#include <sys/types.h>
-#include <sys/time.h>
-#include <time.h>
-int main() {
-struct tm *tp;
-; return 0; }
-EOF
-if { (eval echo configure:965: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- rm -rf conftest*
- ac_cv_header_time=yes
-else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- ac_cv_header_time=no
-fi
-rm -f conftest*
-fi
-
-echo "$ac_t""$ac_cv_header_time" 1>&6
-if test $ac_cv_header_time = yes; then
- cat >> confdefs.h <<\EOF
-#define TIME_WITH_SYS_TIME 1
-EOF
-
-fi
-
-for ac_hdr in limits.h unistd.h sys/time.h string.h stdlib.h
-do
-ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
-echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:989: checking for $ac_hdr" >&5
-if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.$ac_ext <<EOF
-#line 994 "configure"
-#include "confdefs.h"
-#include <$ac_hdr>
-EOF
-ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:999: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-ac_err=`grep -v '^ *+' conftest.out`
-if test -z "$ac_err"; then
- rm -rf conftest*
- eval "ac_cv_header_$ac_safe=yes"
-else
- echo "$ac_err" >&5
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- eval "ac_cv_header_$ac_safe=no"
-fi
-rm -f conftest*
-fi
-if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
- echo "$ac_t""yes" 1>&6
- ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
- cat >> confdefs.h <<EOF
-#define $ac_tr_hdr 1
-EOF
-
-else
- echo "$ac_t""no" 1>&6
-fi
-done
-
-
-echo $ac_n "checking for working const""... $ac_c" 1>&6
-echo "configure:1027: checking for working const" >&5
-if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.$ac_ext <<EOF
-#line 1032 "configure"
-#include "confdefs.h"
-
-int main() {
-
-/* Ultrix mips cc rejects this. */
-typedef int charset[2]; const charset x;
-/* SunOS 4.1.1 cc rejects this. */
-char const *const *ccp;
-char **p;
-/* NEC SVR4.0.2 mips cc rejects this. */
-struct point {int x, y;};
-static struct point const zero = {0,0};
-/* AIX XL C 1.02.0.0 rejects this.
- It does not let you subtract one const X* pointer from another in an arm
- of an if-expression whose if-part is not a constant expression */
-const char *g = "string";
-ccp = &g + (g ? g-g : 0);
-/* HPUX 7.0 cc rejects these. */
-++ccp;
-p = (char**) ccp;
-ccp = (char const *const *) p;
-{ /* SCO 3.2v4 cc rejects this. */
- char *t;
- char const *s = 0 ? (char *) 0 : (char const *) 0;
-
- *t++ = 0;
-}
-{ /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */
- int x[] = {25, 17};
- const int *foo = &x[0];
- ++foo;
-}
-{ /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */
- typedef const int *iptr;
- iptr p = 0;
- ++p;
-}
-{ /* AIX XL C 1.02.0.0 rejects this saying
- "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */
- struct s { int j; const int *ap[3]; };
- struct s *b; b->j = 5;
-}
-{ /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */
- const int foo = 10;
-}
-
-; return 0; }
-EOF
-if { (eval echo configure:1081: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- rm -rf conftest*
- ac_cv_c_const=yes
-else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- ac_cv_c_const=no
-fi
-rm -f conftest*
-fi
-
-echo "$ac_t""$ac_cv_c_const" 1>&6
-if test $ac_cv_c_const = no; then
- cat >> confdefs.h <<\EOF
-#define const
-EOF
-
-fi
-
-echo $ac_n "checking for size_t""... $ac_c" 1>&6
-echo "configure:1102: checking for size_t" >&5
-if eval "test \"`echo '$''{'ac_cv_type_size_t'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.$ac_ext <<EOF
-#line 1107 "configure"
-#include "confdefs.h"
-#include <sys/types.h>
-#if STDC_HEADERS
-#include <stdlib.h>
-#include <stddef.h>
-#endif
-EOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- egrep "size_t[^a-zA-Z_0-9]" >/dev/null 2>&1; then
- rm -rf conftest*
- ac_cv_type_size_t=yes
-else
- rm -rf conftest*
- ac_cv_type_size_t=no
-fi
-rm -f conftest*
-
-fi
-echo "$ac_t""$ac_cv_type_size_t" 1>&6
-if test $ac_cv_type_size_t = no; then
- cat >> confdefs.h <<\EOF
-#define size_t unsigned
-EOF
-
-fi
-
-echo $ac_n "checking for mode_t""... $ac_c" 1>&6
-echo "configure:1135: checking for mode_t" >&5
-if eval "test \"`echo '$''{'ac_cv_type_mode_t'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.$ac_ext <<EOF
-#line 1140 "configure"
-#include "confdefs.h"
-#include <sys/types.h>
-#if STDC_HEADERS
-#include <stdlib.h>
-#include <stddef.h>
-#endif
-EOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- egrep "mode_t[^a-zA-Z_0-9]" >/dev/null 2>&1; then
- rm -rf conftest*
- ac_cv_type_mode_t=yes
-else
- rm -rf conftest*
- ac_cv_type_mode_t=no
-fi
-rm -f conftest*
-
-fi
-echo "$ac_t""$ac_cv_type_mode_t" 1>&6
-if test $ac_cv_type_mode_t = no; then
- cat >> confdefs.h <<\EOF
-#define mode_t int
-EOF
-
-fi
-
-
-echo $ac_n "checking for pid_t""... $ac_c" 1>&6
-echo "configure:1169: checking for pid_t" >&5
-if eval "test \"`echo '$''{'ac_cv_type_pid_t'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.$ac_ext <<EOF
-#line 1174 "configure"
-#include "confdefs.h"
-#include <sys/types.h>
-#if STDC_HEADERS
-#include <stdlib.h>
-#include <stddef.h>
-#endif
-EOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- egrep "pid_t[^a-zA-Z_0-9]" >/dev/null 2>&1; then
- rm -rf conftest*
- ac_cv_type_pid_t=yes
-else
- rm -rf conftest*
- ac_cv_type_pid_t=no
-fi
-rm -f conftest*
-
-fi
-echo "$ac_t""$ac_cv_type_pid_t" 1>&6
-if test $ac_cv_type_pid_t = no; then
- cat >> confdefs.h <<\EOF
-#define pid_t int
-EOF
-
-fi
-
-echo $ac_n "checking for st_blksize in struct stat""... $ac_c" 1>&6
-echo "configure:1202: checking for st_blksize in struct stat" >&5
-if eval "test \"`echo '$''{'ac_cv_struct_st_blksize'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.$ac_ext <<EOF
-#line 1207 "configure"
-#include "confdefs.h"
-#include <sys/types.h>
-#include <sys/stat.h>
-int main() {
-struct stat s; s.st_blksize;
-; return 0; }
-EOF
-if { (eval echo configure:1215: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- rm -rf conftest*
- ac_cv_struct_st_blksize=yes
-else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- ac_cv_struct_st_blksize=no
-fi
-rm -f conftest*
-fi
-
-echo "$ac_t""$ac_cv_struct_st_blksize" 1>&6
-if test $ac_cv_struct_st_blksize = yes; then
- cat >> confdefs.h <<\EOF
-#define HAVE_ST_BLKSIZE 1
-EOF
-
-fi
-
-echo $ac_n "checking for st_blocks in struct stat""... $ac_c" 1>&6
-echo "configure:1236: checking for st_blocks in struct stat" >&5
-if eval "test \"`echo '$''{'ac_cv_struct_st_blocks'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.$ac_ext <<EOF
-#line 1241 "configure"
-#include "confdefs.h"
-#include <sys/types.h>
-#include <sys/stat.h>
-int main() {
-struct stat s; s.st_blocks;
-; return 0; }
-EOF
-if { (eval echo configure:1249: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- rm -rf conftest*
- ac_cv_struct_st_blocks=yes
-else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- ac_cv_struct_st_blocks=no
-fi
-rm -f conftest*
-fi
-
-echo "$ac_t""$ac_cv_struct_st_blocks" 1>&6
-if test $ac_cv_struct_st_blocks = yes; then
- cat >> confdefs.h <<\EOF
-#define HAVE_ST_BLOCKS 1
-EOF
-
-else
- LIBOBJS="$LIBOBJS fileblocks.o"
-fi
-
-echo $ac_n "checking for st_rdev in struct stat""... $ac_c" 1>&6
-echo "configure:1272: checking for st_rdev in struct stat" >&5
-if eval "test \"`echo '$''{'ac_cv_struct_st_rdev'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.$ac_ext <<EOF
-#line 1277 "configure"
-#include "confdefs.h"
-#include <sys/types.h>
-#include <sys/stat.h>
-int main() {
-struct stat s; s.st_rdev;
-; return 0; }
-EOF
-if { (eval echo configure:1285: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- rm -rf conftest*
- ac_cv_struct_st_rdev=yes
-else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- ac_cv_struct_st_rdev=no
-fi
-rm -f conftest*
-fi
-
-echo "$ac_t""$ac_cv_struct_st_rdev" 1>&6
-if test $ac_cv_struct_st_rdev = yes; then
- cat >> confdefs.h <<\EOF
-#define HAVE_ST_RDEV 1
-EOF
-
-fi
-
-echo $ac_n "checking whether struct tm is in sys/time.h or time.h""... $ac_c" 1>&6
-echo "configure:1306: checking whether struct tm is in sys/time.h or time.h" >&5
-if eval "test \"`echo '$''{'ac_cv_struct_tm'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.$ac_ext <<EOF
-#line 1311 "configure"
-#include "confdefs.h"
-#include <sys/types.h>
-#include <time.h>
-int main() {
-struct tm *tp; tp->tm_sec;
-; return 0; }
-EOF
-if { (eval echo configure:1319: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- rm -rf conftest*
- ac_cv_struct_tm=time.h
-else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- ac_cv_struct_tm=sys/time.h
-fi
-rm -f conftest*
-fi
-
-echo "$ac_t""$ac_cv_struct_tm" 1>&6
-if test $ac_cv_struct_tm = sys/time.h; then
- cat >> confdefs.h <<\EOF
-#define TM_IN_SYS_TIME 1
-EOF
-
-fi
-
-
-
-for ac_func in symlink getcwd getwd lstat gethostname strerror clock getrusage
-do
-echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:1344: checking for $ac_func" >&5
-if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.$ac_ext <<EOF
-#line 1349 "configure"
-#include "confdefs.h"
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func(); below. */
-#include <assert.h>
-/* Override any gcc2 internal prototype to avoid an error. */
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func();
-
-int main() {
-
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-$ac_func();
-#endif
-
-; return 0; }
-EOF
-if { (eval echo configure:1372: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
- rm -rf conftest*
- eval "ac_cv_func_$ac_func=yes"
-else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- eval "ac_cv_func_$ac_func=no"
-fi
-rm -f conftest*
-fi
-
-if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
- echo "$ac_t""yes" 1>&6
- ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
- cat >> confdefs.h <<EOF
-#define $ac_tr_func 1
-EOF
-
-else
- echo "$ac_t""no" 1>&6
-fi
-done
-
-test $ac_cv_func_symlink = yes && MAYBES="$MAYBES symlnk_.o"
-test $ac_cv_func_lstat = yes && MAYBES="$MAYBES lstat_.o"
-test $ac_cv_func_gethostname = yes && MAYBES="$MAYBES hostnm_.o"
-test $ac_cv_func_clock = yes && MAYBES="$MAYBES mclock_.o"
-
-
-
-
-
-
-
-trap '' 1 2 15
-cat > confcache <<\EOF
-# This file is a shell script that caches the results of configure
-# tests run on this system so they can be shared between configure
-# scripts and configure runs. It is not useful on other systems.
-# If it contains results you don't want to keep, you may remove or edit it.
-#
-# By default, configure uses ./config.cache as the cache file,
-# creating it if it does not exist already. You can give configure
-# the --cache-file=FILE option to use a different cache file; that is
-# what configure does when it calls configure scripts in
-# subdirectories, so they share the cache.
-# Giving --cache-file=/dev/null disables caching, for debugging configure.
-# config.status only pays attention to the cache file if you give it the
-# --recheck option to rerun configure.
-#
-EOF
-# The following way of writing the cache mishandles newlines in values,
-# but we know of no workaround that is simple, portable, and efficient.
-# So, don't put newlines in cache variables' values.
-# Ultrix sh set writes to stderr and can't be redirected directly,
-# and sets the high bit in the cache file unless we assign to the vars.
-(set) 2>&1 |
- case `(ac_space=' '; set) 2>&1` in
- *ac_space=\ *)
- # `set' does not quote correctly, so add quotes (double-quote substitution
- # turns \\\\ into \\, and sed turns \\ into \).
- sed -n \
- -e "s/'/'\\\\''/g" \
- -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p"
- ;;
- *)
- # `set' quotes correctly as required by POSIX, so do not add quotes.
- sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p'
- ;;
- esac >> confcache
-if cmp -s $cache_file confcache; then
- :
-else
- if test -w $cache_file; then
- echo "updating cache $cache_file"
- cat confcache > $cache_file
- else
- echo "not updating unwritable cache $cache_file"
- fi
-fi
-rm -f confcache
-
-trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15
-
-test "x$prefix" = xNONE && prefix=$ac_default_prefix
-# Let make expand exec_prefix.
-test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
-
-# Any assignment to VPATH causes Sun make to only execute
-# the first set of double-colon rules, so remove it if not needed.
-# If there is a colon in the path, we need to keep it.
-if test "x$srcdir" = x.; then
- ac_vpsub='/^[ ]*VPATH[ ]*=[^:]*$/d'
-fi
-
-trap 'rm -f $CONFIG_STATUS conftest*; exit 1' 1 2 15
-
-DEFS=-DHAVE_CONFIG_H
-
-# Without the "./", some shells look in PATH for config.status.
-: ${CONFIG_STATUS=./config.status}
-
-echo creating $CONFIG_STATUS
-rm -f $CONFIG_STATUS
-cat > $CONFIG_STATUS <<EOF
-#! /bin/sh
-# Generated automatically by configure.
-# Run this file to recreate the current configuration.
-# This directory was configured as follows,
-# on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
-#
-# $0 $ac_configure_args
-#
-# Compiler output produced by configure, useful for debugging
-# configure, is in ./config.log if it exists.
-
-ac_cs_usage="Usage: $CONFIG_STATUS [--recheck] [--version] [--help]"
-for ac_option
-do
- case "\$ac_option" in
- -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
- echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion"
- exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;;
- -version | --version | --versio | --versi | --vers | --ver | --ve | --v)
- echo "$CONFIG_STATUS generated by autoconf version 2.12"
- exit 0 ;;
- -help | --help | --hel | --he | --h)
- echo "\$ac_cs_usage"; exit 0 ;;
- *) echo "\$ac_cs_usage"; exit 1 ;;
- esac
-done
-
-ac_given_srcdir=$srcdir
-
-trap 'rm -fr `echo "Makefile config.h" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15
-EOF
-cat >> $CONFIG_STATUS <<EOF
-
-# Protect against being on the right side of a sed subst in config.status.
-sed 's/%@/@@/; s/@%/@@/; s/%g\$/@g/; /@g\$/s/[\\\\&%]/\\\\&/g;
- s/@@/%@/; s/@@/@%/; s/@g\$/%g/' > conftest.subs <<\\CEOF
-$ac_vpsub
-$extrasub
-s%@CFLAGS@%$CFLAGS%g
-s%@CPPFLAGS@%$CPPFLAGS%g
-s%@CXXFLAGS@%$CXXFLAGS%g
-s%@DEFS@%$DEFS%g
-s%@LDFLAGS@%$LDFLAGS%g
-s%@LIBS@%$LIBS%g
-s%@exec_prefix@%$exec_prefix%g
-s%@prefix@%$prefix%g
-s%@program_transform_name@%$program_transform_name%g
-s%@bindir@%$bindir%g
-s%@sbindir@%$sbindir%g
-s%@libexecdir@%$libexecdir%g
-s%@datadir@%$datadir%g
-s%@sysconfdir@%$sysconfdir%g
-s%@sharedstatedir@%$sharedstatedir%g
-s%@localstatedir@%$localstatedir%g
-s%@libdir@%$libdir%g
-s%@includedir@%$includedir%g
-s%@oldincludedir@%$oldincludedir%g
-s%@infodir@%$infodir%g
-s%@mandir@%$mandir%g
-s%@CC@%$CC%g
-s%@ac_cv_prog_chmod@%$ac_cv_prog_chmod%g
-s%@RANLIB@%$RANLIB%g
-s%@AR@%$AR%g
-s%@CPP@%$CPP%g
-s%@LIBOBJS@%$LIBOBJS%g
-s%@MAYBES@%$MAYBES%g
-s%@CROSS@%$CROSS%g
-s%@RANLIB_TEST@%$RANLIB_TEST%g
-
-CEOF
-EOF
-
-cat >> $CONFIG_STATUS <<\EOF
-
-# Split the substitutions into bite-sized pieces for seds with
-# small command number limits, like on Digital OSF/1 and HP-UX.
-ac_max_sed_cmds=90 # Maximum number of lines to put in a sed script.
-ac_file=1 # Number of current file.
-ac_beg=1 # First line for current file.
-ac_end=$ac_max_sed_cmds # Line after last line for current file.
-ac_more_lines=:
-ac_sed_cmds=""
-while $ac_more_lines; do
- if test $ac_beg -gt 1; then
- sed "1,${ac_beg}d; ${ac_end}q" conftest.subs > conftest.s$ac_file
- else
- sed "${ac_end}q" conftest.subs > conftest.s$ac_file
- fi
- if test ! -s conftest.s$ac_file; then
- ac_more_lines=false
- rm -f conftest.s$ac_file
- else
- if test -z "$ac_sed_cmds"; then
- ac_sed_cmds="sed -f conftest.s$ac_file"
- else
- ac_sed_cmds="$ac_sed_cmds | sed -f conftest.s$ac_file"
- fi
- ac_file=`expr $ac_file + 1`
- ac_beg=$ac_end
- ac_end=`expr $ac_end + $ac_max_sed_cmds`
- fi
-done
-if test -z "$ac_sed_cmds"; then
- ac_sed_cmds=cat
-fi
-EOF
-
-cat >> $CONFIG_STATUS <<EOF
-
-CONFIG_FILES=\${CONFIG_FILES-"Makefile"}
-EOF
-cat >> $CONFIG_STATUS <<\EOF
-for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then
- # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
- case "$ac_file" in
- *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'`
- ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
- *) ac_file_in="${ac_file}.in" ;;
- esac
-
- # Adjust a relative srcdir, top_srcdir, and INSTALL for subdirectories.
-
- # Remove last slash and all that follows it. Not all systems have dirname.
- ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'`
- if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
- # The file is in a subdirectory.
- test ! -d "$ac_dir" && mkdir "$ac_dir"
- ac_dir_suffix="/`echo $ac_dir|sed 's%^\./%%'`"
- # A "../" for each directory in $ac_dir_suffix.
- ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'`
- else
- ac_dir_suffix= ac_dots=
- fi
-
- case "$ac_given_srcdir" in
- .) srcdir=.
- if test -z "$ac_dots"; then top_srcdir=.
- else top_srcdir=`echo $ac_dots|sed 's%/$%%'`; fi ;;
- /*) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;;
- *) # Relative path.
- srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix"
- top_srcdir="$ac_dots$ac_given_srcdir" ;;
- esac
-
-
- echo creating "$ac_file"
- rm -f "$ac_file"
- configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure."
- case "$ac_file" in
- *Makefile*) ac_comsub="1i\\
-# $configure_input" ;;
- *) ac_comsub= ;;
- esac
-
- ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"`
- sed -e "$ac_comsub
-s%@configure_input@%$configure_input%g
-s%@srcdir@%$srcdir%g
-s%@top_srcdir@%$top_srcdir%g
-" $ac_file_inputs | (eval "$ac_sed_cmds") > $ac_file
-fi; done
-rm -f conftest.s*
-
-# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where
-# NAME is the cpp macro being defined and VALUE is the value it is being given.
-#
-# ac_d sets the value in "#define NAME VALUE" lines.
-ac_dA='s%^\([ ]*\)#\([ ]*define[ ][ ]*\)'
-ac_dB='\([ ][ ]*\)[^ ]*%\1#\2'
-ac_dC='\3'
-ac_dD='%g'
-# ac_u turns "#undef NAME" with trailing blanks into "#define NAME VALUE".
-ac_uA='s%^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)'
-ac_uB='\([ ]\)%\1#\2define\3'
-ac_uC=' '
-ac_uD='\4%g'
-# ac_e turns "#undef NAME" without trailing blanks into "#define NAME VALUE".
-ac_eA='s%^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)'
-ac_eB='$%\1#\2define\3'
-ac_eC=' '
-ac_eD='%g'
-
-if test "${CONFIG_HEADERS+set}" != set; then
-EOF
-cat >> $CONFIG_STATUS <<EOF
- CONFIG_HEADERS="config.h"
-EOF
-cat >> $CONFIG_STATUS <<\EOF
-fi
-for ac_file in .. $CONFIG_HEADERS; do if test "x$ac_file" != x..; then
- # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
- case "$ac_file" in
- *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'`
- ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
- *) ac_file_in="${ac_file}.in" ;;
- esac
-
- echo creating $ac_file
-
- rm -f conftest.frag conftest.in conftest.out
- ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"`
- cat $ac_file_inputs > conftest.in
-
-EOF
-
-# Transform confdefs.h into a sed script conftest.vals that substitutes
-# the proper values into config.h.in to produce config.h. And first:
-# Protect against being on the right side of a sed subst in config.status.
-# Protect against being in an unquoted here document in config.status.
-rm -f conftest.vals
-cat > conftest.hdr <<\EOF
-s/[\\&%]/\\&/g
-s%[\\$`]%\\&%g
-s%#define \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD}%gp
-s%ac_d%ac_u%gp
-s%ac_u%ac_e%gp
-EOF
-sed -n -f conftest.hdr confdefs.h > conftest.vals
-rm -f conftest.hdr
-
-# This sed command replaces #undef with comments. This is necessary, for
-# example, in the case of _POSIX_SOURCE, which is predefined and required
-# on some systems where configure will not decide to define it.
-cat >> conftest.vals <<\EOF
-s%^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*%/* & */%
-EOF
-
-# Break up conftest.vals because some shells have a limit on
-# the size of here documents, and old seds have small limits too.
-
-rm -f conftest.tail
-while :
-do
- ac_lines=`grep -c . conftest.vals`
- # grep -c gives empty output for an empty file on some AIX systems.
- if test -z "$ac_lines" || test "$ac_lines" -eq 0; then break; fi
- # Write a limited-size here document to conftest.frag.
- echo ' cat > conftest.frag <<CEOF' >> $CONFIG_STATUS
- sed ${ac_max_here_lines}q conftest.vals >> $CONFIG_STATUS
- echo 'CEOF
- sed -f conftest.frag conftest.in > conftest.out
- rm -f conftest.in
- mv conftest.out conftest.in
-' >> $CONFIG_STATUS
- sed 1,${ac_max_here_lines}d conftest.vals > conftest.tail
- rm -f conftest.vals
- mv conftest.tail conftest.vals
-done
-rm -f conftest.vals
-
-cat >> $CONFIG_STATUS <<\EOF
- rm -f conftest.frag conftest.h
- echo "/* $ac_file. Generated automatically by configure. */" > conftest.h
- cat conftest.in >> conftest.h
- rm -f conftest.in
- if cmp -s $ac_file conftest.h 2>/dev/null; then
- echo "$ac_file is unchanged"
- rm -f conftest.h
- else
- # Remove last slash and all that follows it. Not all systems have dirname.
- ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'`
- if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
- # The file is in a subdirectory.
- test ! -d "$ac_dir" && mkdir "$ac_dir"
- fi
- rm -f $ac_file
- mv conftest.h $ac_file
- fi
-fi; done
-
-EOF
-cat >> $CONFIG_STATUS <<EOF
-
-EOF
-cat >> $CONFIG_STATUS <<\EOF
-
-exit 0
-EOF
-chmod +x $CONFIG_STATUS
-rm -fr confdefs* $ac_clean_files
-test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1
-
diff --git a/gcc/f/runtime/libU77/configure.in b/gcc/f/runtime/libU77/configure.in
deleted file mode 100644
index d50fa118e93..00000000000
--- a/gcc/f/runtime/libU77/configure.in
+++ /dev/null
@@ -1,111 +0,0 @@
-# Process this file with autoconf to produce a configure script.
-# Copyright (C) 1995 Free Software Foundation, Inc.
-# Contributed by Dave Love (d.love@dl.ac.uk).
-#
-#This file is part of the GNU Fortran libU77 library.
-#
-#This library 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.
-#
-#GNU Fortran 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 Library General Public License for more details.
-#
-#You should have received a copy of the GNU Library General Public
-#License along with GNU Fortran; see the file COPYING. If not, write
-#to Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-#USA.
-
-AC_INIT(access_.c)
-AC_CONFIG_HEADER(config.h)
-
-dnl Checks for programs.
-# For g77 we'll set CC to point at the built gcc, but this will get it into
-# the makefiles
-AC_PROG_CC
-dnl AC_C_CROSS
-dnl Gives misleading `(cached)' message from the check.
-if test "$CROSS";then
- ac_cv_c_cross=yes
-else
- ac_cv_c_cross=no
-fi
-
-dnl This is only because we (horribly) punt the chmod job to the program at
-dnl present. Note that the result of this test could be wrong in the cross
-dnl case.
-AC_PATH_PROG(ac_cv_prog_chmod, chmod, no)
-if test "$ac_cv_prog_chmod" != no || test "$CROSS"; then
- MAYBES=chmod_.o
- AC_DEFINE_UNQUOTED(CHMOD_PATH,"$ac_cv_prog_chmod")
-else
- MAYBES=""
-fi
-
-dnl for g77 build maybe use $(RANLIB_FOR_TARGET) always (like wise AR)
-if test "$ac_cv_c_cross" = yes; then
- RANLIB=$RANLIB_FOR_TARGET
- AR=$AR_FOR_TARGET
- AC_SUBST(RANLIB)
-else
- AC_PROG_RANLIB
- AR=ar
- RANLIB_TEST=true
-fi
-AC_SUBST(AR)
-dnl not needed for g77
-dnl AC_SUBST(AR_FOR_TARGET)
-dnl AC_SUBST(RANLIB_FOR_TARGET)
-dnl AC_SUBST(RANLIB_TEST_FOR_TARGET)
-dnl not needed for g77?
-dnl AC_PROG_MAKE_SET
-
-dnl Checks for libraries.
-
-dnl Checks for header files.
-AC_HEADER_STDC
-dnl We could do this if we didn't know we were using gcc
-dnl AC_MSG_CHECKING(for prototype-savvy compiler)
-dnl AC_CACHE_VAL(ac_cv_sys_proto,
-dnl [AC_TRY_LINK(,
-dnl dnl looks screwy because TRY_LINK expects a function body
-dnl [return 0;} int foo (int * bar) {],
-dnl ac_cv_sys_proto=yes,
-dnl [ac_cv_sys_proto=no
-dnl AC_DEFINE(KR_headers)])])
-dnl AC_MSG_RESULT($ac_cv_sys_proto)
-
-AC_HEADER_TIME
-AC_CHECK_HEADERS(limits.h unistd.h sys/time.h string.h stdlib.h)
-
-dnl Checks for typedefs, structures, and compiler characteristics.
-AC_C_CONST
-AC_TYPE_SIZE_T
-AC_TYPE_MODE_T
-
-AC_TYPE_PID_T
-dnl The next 3 demand a dummy fileblocks.o (added to LIBOJS). We don't use
-dnl LIBOJS, though.
-AC_STRUCT_ST_BLKSIZE
-AC_STRUCT_ST_BLOCKS
-AC_STRUCT_ST_RDEV
-AC_STRUCT_TM
-
-dnl Checks for library functions.
-
-AC_CHECK_FUNCS(symlink getcwd getwd lstat gethostname strerror clock getrusage)
-test $ac_cv_func_symlink = yes && MAYBES="$MAYBES symlnk_.o"
-test $ac_cv_func_lstat = yes && MAYBES="$MAYBES lstat_.o"
-test $ac_cv_func_gethostname = yes && MAYBES="$MAYBES hostnm_.o"
-test $ac_cv_func_clock = yes && MAYBES="$MAYBES mclock_.o"
-AC_SUBST(MAYBES)
-
-
-AC_SUBST(CROSS)
-AC_SUBST(RANLIB)
-AC_SUBST(RANLIB_TEST)
-
-AC_OUTPUT(Makefile)
diff --git a/gcc/f/runtime/libU77/ctime_.c b/gcc/f/runtime/libU77/ctime_.c
deleted file mode 100644
index af5813772af..00000000000
--- a/gcc/f/runtime/libU77/ctime_.c
+++ /dev/null
@@ -1,57 +0,0 @@
-/* Copyright (C) 1995, 1996 Free Software Foundation, Inc.
-This file is part of GNU Fortran libU77 library.
-
-This library is free software; you can redistribute it and/or modify it
-under the terms of the GNU Library General Public License as published
-by the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-GNU Fortran 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
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with GNU Fortran; see the file COPYING.LIB. If
-not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA. */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-#if TIME_WITH_SYS_TIME
-# include <sys/time.h>
-# include <time.h>
-#else
-# if HAVE_SYS_TIME_H
-# include <sys/time.h>
-# else
-# include <time.h>
-# endif
-#endif
-#if HAVE_STRING_H
-# include <string.h>
-#else
-# include <strings.h>
-#endif
-#include "f2c.h"
-
-/* may need sys/time.h & long arg for stime (bsd, svr1-3) */
-
-#ifdef KR_headers
-/* Character */ void G77_ctime_0 (chtime, Lchtime, xstime)
- char *chtime;
- longint * xstime;
- ftnlen Lchtime;
-#else
-/* Character */ void G77_ctime_0 (char *chtime, const ftnlen Lchtime, longint * xstime)
-#endif
-{
- int i, l;
- int s_copy ();
- time_t stime = *xstime;
-
- /* Allow a length other than 24 for compatibility with what other
- systems do, despite it being documented as 24. */
- s_copy (chtime, ctime (&stime), Lchtime, 24);
-}
diff --git a/gcc/f/runtime/libU77/date_.c b/gcc/f/runtime/libU77/date_.c
deleted file mode 100644
index 8426edc4fb0..00000000000
--- a/gcc/f/runtime/libU77/date_.c
+++ /dev/null
@@ -1,39 +0,0 @@
-/* date_.f -- translated by f2c (version 19961001).
- You must link the resulting object file with the libraries:
- -lf2c -lm (in that order)
-*/
-
-#include "f2c.h"
-
-/* Table of constant values */
-
-static integer c__5 = 5;
-
-/* Subroutine */ int G77_date_0 (char *buf, ftnlen buf_len)
-{
- /* System generated locals */
- address a__1[5];
- integer i__1, i__2[5];
- char ch__1[24];
-
- /* Builtin functions */
- /* Subroutine */ int s_copy(), s_cat();
-
- /* Local variables */
- static char cbuf[24];
- extern integer G77_time_0 ();
- extern /* Character */ VOID G77_ctime_0 ();
-
- i__1 = G77_time_0 ();
- G77_ctime_0 (ch__1, 24L, &i__1);
- s_copy(cbuf, ch__1, 24L, 24L);
-/* Writing concatenation */
- i__2[0] = 2, a__1[0] = cbuf + 8;
- i__2[1] = 1, a__1[1] = "-";
- i__2[2] = 3, a__1[2] = cbuf + 4;
- i__2[3] = 1, a__1[3] = "-";
- i__2[4] = 2, a__1[4] = cbuf + 22;
- s_cat(buf, a__1, i__2, &c__5, buf_len);
- return 0;
-} /* date_ */
-
diff --git a/gcc/f/runtime/libU77/dbes.c b/gcc/f/runtime/libU77/dbes.c
deleted file mode 100644
index 8c245cf3c25..00000000000
--- a/gcc/f/runtime/libU77/dbes.c
+++ /dev/null
@@ -1,46 +0,0 @@
-/* Copyright (C) 1995, 1996 Free Software Foundation, Inc.
-This file is part of GNU Fortran libU77 library.
-
-This library is free software; you can redistribute it and/or modify it
-under the terms of the GNU Library General Public License as published
-by the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-GNU Fortran 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
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with GNU Fortran; see the file COPYING.LIB. If
-not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA. */
-
-#include "f2c.h"
-#include <math.h>
-
-#if 0 /* Don't include these unless necessary -- dnp. */
-double G77_dbesj0_0 (const double *x) {
- return j0 (*x);
-}
-
-double G77_dbesj1_0 (const double *x) {
- return j1 (*x);
-}
-
-double G77_dbesjn_0 (const integer *n, double *x) {
- return jn (*n, *x);
- }
-
-double G77_dbesy0_0 (const double *x) {
- return y0 (*x);
-}
-
-double G77_dbesy1_0 (const double *x) {
- return y1 (*x);
-}
-
-double G77_dbesyn_0 (const integer *n, double *x) {
- return yn (*n, *x);
-}
-#endif
diff --git a/gcc/f/runtime/libU77/dtime_.c b/gcc/f/runtime/libU77/dtime_.c
deleted file mode 100644
index dc0accbfdf0..00000000000
--- a/gcc/f/runtime/libU77/dtime_.c
+++ /dev/null
@@ -1,82 +0,0 @@
-/* Copyright (C) 1995, 1996 Free Software Foundation, Inc.
-This file is part of GNU Fortran libU77 library.
-
-This library is free software; you can redistribute it and/or modify it
-under the terms of the GNU Library General Public License as published
-by the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-GNU Fortran 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
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with GNU Fortran; see the file COPYING.LIB. If
-not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA. */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-#if HAVE_UNISTD_H
-# include <unistd.h>
-#endif
-#include <sys/times.h>
-#if HAVE_GETRUSAGE
-# include <sys/time.h>
-# include <sys/resource.h>
-#endif
-#include "f2c.h"
-
-/* For dtime, etime we store the clock tick parameter (clk_tck) the
- first time either of them is invoked rather than each time. This
- approach probably speeds up each invocation by avoiding a system
- call each time, but means that the overhead of the first call is
- different to all others. */
-static long clk_tck = 0;
-
-#ifdef KR_headers
-double G77_dtime_0 (tarray)
- real tarray[2];
-#else
-double G77_dtime_0 (real tarray[2])
-#endif
-{
- time_t utime, stime;
- static time_t old_utime = 0, old_stime = 0;
- /* The getrusage version is only the default for convenience. */
-#ifdef HAVE_GETRUSAGE
- struct rusage rbuff;
-
- if (getrusage (RUSAGE_SELF, &rbuff) != 0)
- abort ();
- utime = ((float) (rbuff.ru_utime).tv_sec +
- (float) (rbuff.ru_utime).tv_usec/1000000.0);
- tarray[0] = utime - (float) old_utime;
- stime = ((float) (rbuff.ru_stime).tv_sec +
- (float) (rbuff.ru_stime).tv_usec/1000000.0);
- tarray[1] = stime - old_stime;
-#else /* HAVE_GETRUSAGE */
- struct tms buffer;
-
-/* NeXTStep seems to define _SC_CLK_TCK but not to have sysconf;
- fixme: does using _POSIX_VERSION help? */
-# if defined _SC_CLK_TCK && defined _POSIX_VERSION
- if (! clk_tck) clk_tck = sysconf(_SC_CLK_TCK);
-# elif defined CLOCKS_PER_SECOND
- if (! clk_tck) clk_tck = CLOCKS_PER_SECOND;
-# elif defined CLK_TCK
- if (! clk_tck) clk_tck = CLK_TCK;
-# elif defined HAVE_GETRUSAGE
-# else
- #error Dont know clock tick length
-# endif
- if (times(&buffer) < 0) return -1.0;
- utime = buffer.tms_utime; stime = buffer.tms_stime;
- tarray[0] = ((float)(utime - old_utime)) / (float)clk_tck;
- tarray[1] = ((float)(stime - old_stime)) / (float)clk_tck;
-#endif /* HAVE_GETRUSAGE */
- old_utime = utime; old_stime = stime;
- return (tarray[0]+tarray[1]);
-}
diff --git a/gcc/f/runtime/libU77/etime_.c b/gcc/f/runtime/libU77/etime_.c
deleted file mode 100644
index fa6ccfb0d4d..00000000000
--- a/gcc/f/runtime/libU77/etime_.c
+++ /dev/null
@@ -1,78 +0,0 @@
-/* Copyright (C) 1995, 1996 Free Software Foundation, Inc.
-This file is part of GNU Fortran libU77 library.
-
-This library is free software; you can redistribute it and/or modify it
-under the terms of the GNU Library General Public License as published
-by the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-GNU Fortran 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
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with GNU Fortran; see the file COPYING.LIB. If
-not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA. */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-#if HAVE_UNISTD_H
-# include <unistd.h>
-#endif
-#include <sys/types.h>
-#include <sys/times.h>
-#include <sys/param.h>
-#if HAVE_GETRUSAGE
-# include <sys/time.h>
-# include <sys/resource.h>
-#endif
-#include "f2c.h"
-
-/* For dtime, etime we store the clock tick parameter (clk_tck) the
- first time either of them is invoked rather than each time. This
- approach probably speeds up each invocation by avoiding a system
- call each time, but means that the overhead of the first call is
- different to all others. */
-static long clk_tck = 0;
-
-#ifdef KR_headers
-double G77_etime_0 (tarray)
- real tarray[2];
-#else
-double G77_etime_0 (real tarray[2])
-#endif
-{
- /* The getrusage version is only the default for convenience. */
-#ifdef HAVE_GETRUSAGE
- struct rusage rbuff;
-
- if (getrusage (RUSAGE_SELF, &rbuff) != 0)
- abort ();
- tarray[0] = ((float) (rbuff.ru_utime).tv_sec +
- (float) (rbuff.ru_utime).tv_usec/1000000.0);
- tarray[1] = ((float) (rbuff.ru_stime).tv_sec +
- (float) (rbuff.ru_stime).tv_usec/1000000.0);
-#else /* HAVE_GETRUSAGE */
- struct tms buffer;
-
-/* NeXTStep seems to define _SC_CLK_TCK but not to have sysconf;
- fixme: does using _POSIX_VERSION help? */
-# if defined _SC_CLK_TCK && defined _POSIX_VERSION
- if (! clk_tck) clk_tck = sysconf(_SC_CLK_TCK);
-# elif defined CLOCKS_PER_SECOND
- if (! clk_tck) clk_tck = CLOCKS_PER_SECOND;
-# elif defined CLK_TCK
- if (! clk_tck) clk_tck = CLK_TCK;
-# elif defined HAVE_GETRUSAGE
-# else
- #error Dont know clock tick length
-# endif
- if (times(&buffer) < 0) return -1.0;
- tarray[0] = (float) buffer.tms_utime / (float)clk_tck;
- tarray[1] = (float) buffer.tms_stime / (float)clk_tck;
-#endif /* HAVE_GETRUSAGE */
- return (tarray[0]+tarray[1]);
-}
diff --git a/gcc/f/runtime/libU77/fdate_.c b/gcc/f/runtime/libU77/fdate_.c
deleted file mode 100644
index afe8b24fc44..00000000000
--- a/gcc/f/runtime/libU77/fdate_.c
+++ /dev/null
@@ -1,53 +0,0 @@
-/* Copyright (C) 1995, 1996 Free Software Foundation, Inc.
-This file is part of GNU Fortran libU77 library.
-
-This library is free software; you can redistribute it and/or modify it
-under the terms of the GNU Library General Public License as published
-by the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-GNU Fortran 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
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with GNU Fortran; see the file COPYING.LIB. If
-not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA. */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-#include <stdio.h>
-#if TIME_WITH_SYS_TIME
-# include <sys/time.h>
-# include <time.h>
-#else
-# if HAVE_SYS_TIME_H
-# include <sys/time.h>
-# else
-# include <time.h>
-# endif
-#endif
-#if HAVE_STRING_H
-# include <string.h>
-#else
-# include <strings.h>
-#endif
-
-#include "f2c.h"
-
-/* NB. this implementation is for a character*24 function. There's
- also a subroutine version. Of course, the calling convention is
- essentially the same for both. */
-
-/* Character *24 */ void G77_fdate_0 (char *ret_val, ftnlen ret_val_len)
-{
- int s_copy ();
- time_t tloc;
- tloc = time (NULL);
- /* Allow a length other than 24 for compatibility with what other
- systems do, despite it being documented as 24. */
- s_copy (ret_val, ctime ((time_t *) &tloc), ret_val_len, 24);
-}
diff --git a/gcc/f/runtime/libU77/fgetc_.c b/gcc/f/runtime/libU77/fgetc_.c
deleted file mode 100644
index 49f39830d2c..00000000000
--- a/gcc/f/runtime/libU77/fgetc_.c
+++ /dev/null
@@ -1,70 +0,0 @@
-/* Copyright (C) 1996 Free Software Foundation, Inc.
-This file is part of GNU Fortran libU77 library.
-
-This library is free software; you can redistribute it and/or modify it
-under the terms of the GNU Library General Public License as published
-by the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-GNU Fortran 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
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with GNU Fortran; see the file COPYING.LIB. If
-not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA. */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-#include <stdio.h>
-#include "f2c.h"
-#include "fio.h"
-
-#ifdef KR_headers
-integer G77_fgetc_0 (lunit, c, Lc)
- integer *lunit;
- ftnlen Lc; /* should be 1 */
- char *c;
-#else
-integer G77_fgetc_0 (const integer *lunit, char *c, ftnlen Lc)
-#endif
-{
- int err;
- FILE *f = f__units[*lunit].ufd;
-
- if (*lunit>=MXUNIT || *lunit<0)
- return 101; /* bad unit error */
- err = getc (f);
- if (err == EOF) {
- if (feof (f))
- return -1;
- else
- return ferror (f); }
- else {
- if (Lc == 0)
- return 0;
-
- c[0] = err;
- while (--Lc)
- *++c = ' ';
- return 0; }
-}
-
-#ifdef KR_headers
-integer G77_fget_0 (c, Lc)
- ftnlen Lc; /* should be 1 */
- char *c;
-#else
-integer G77_fget_0 (char *c, const ftnlen Lc)
-#endif
-{
- integer five = 5;
-
- return G77_fgetc_0 (&five, c, Lc);
-}
diff --git a/gcc/f/runtime/libU77/flush1_.c b/gcc/f/runtime/libU77/flush1_.c
deleted file mode 100644
index 451915debac..00000000000
--- a/gcc/f/runtime/libU77/flush1_.c
+++ /dev/null
@@ -1,46 +0,0 @@
-/* Copyright (C) 1995 Free Software Foundation, Inc.
-This file is part of GNU Fortran libU77 library.
-
-This library is free software; you can redistribute it and/or modify it
-under the terms of the GNU Library General Public License as published
-by the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-GNU Fortran 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
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with GNU Fortran; see the file COPYING.LIB. If
-not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA. */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-#include <stdio.h>
-#include "f2c.h"
-#include "fio.h"
-
-/* This flushes a single unit, c.f. libI77 version. */
-
-#ifdef KR_headers
-extern integer G77_fnum_0 ();
-
-/* Subroutine */ int G77_flush1_0 (lunit)
- integer *lunit;
-#else
-extern integer G77_fnum_0 (integer *);
-
-/* Subroutine */ int G77_flush1_0 (const integer *lunit)
-#endif
-{
- if (*lunit>=MXUNIT || *lunit<0)
- err(1,101,"flush");
- /* f__units is a table of descriptions for the unit numbers (defined
- in io.h) with file descriptors rather than streams */
- if (f__units[*lunit].ufd != NULL && f__units[*lunit].uwrt)
- fflush(f__units[*lunit].ufd);
- return 0;
-}
diff --git a/gcc/f/runtime/libU77/fnum_.c b/gcc/f/runtime/libU77/fnum_.c
deleted file mode 100644
index 0a3ba013e06..00000000000
--- a/gcc/f/runtime/libU77/fnum_.c
+++ /dev/null
@@ -1,38 +0,0 @@
-/* Copyright (C) 1995 Free Software Foundation, Inc.
-This file is part of GNU Fortran libU77 library.
-
-This library is free software; you can redistribute it and/or modify it
-under the terms of the GNU Library General Public License as published
-by the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-GNU Fortran 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
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with GNU Fortran; see the file COPYING.LIB. If
-not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA. */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-#include "f2c.h"
-#include "fio.h"
-
-#ifdef KR_headers
-integer G77_fnum_0 (lunit)
- integer *lunit;
-#else
-integer G77_fnum_0 (integer *lunit)
-#endif
-{
- if (*lunit>=MXUNIT || *lunit<0)
- err(1,101,"fnum");
- /* f__units is a table of descriptions for the unit numbers (defined
- in io.h). Use file descriptor (ufd) and fileno rather than udev
- field since udev is unix specific */
- return fileno(f__units[*lunit].ufd);
-}
diff --git a/gcc/f/runtime/libU77/fputc_.c b/gcc/f/runtime/libU77/fputc_.c
deleted file mode 100644
index 5a1109e8d4f..00000000000
--- a/gcc/f/runtime/libU77/fputc_.c
+++ /dev/null
@@ -1,65 +0,0 @@
-/* Copyright (C) 1996 Free Software Foundation, Inc.
-This file is part of GNU Fortran libU77 library.
-
-This library is free software; you can redistribute it and/or modify it
-under the terms of the GNU Library General Public License as published
-by the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-GNU Fortran 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
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with GNU Fortran; see the file COPYING.LIB. If
-not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA. */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-#include <stdio.h>
-#include "f2c.h"
-#include "fio.h"
-
-#ifdef KR_headers
-integer G77_fputc_0 (lunit, c, Lc)
- integer *lunit;
- ftnlen Lc; /* should be 1 */
- char *c;
-#else
-integer G77_fputc_0 (const integer *lunit, const char *c, const ftnlen Lc)
-#endif
-{
- int err;
- FILE *f = f__units[*lunit].ufd;
-
- if (*lunit>=MXUNIT || *lunit<0)
- return 101; /* bad unit error */
- err = putc (c[0], f);
- if (err == EOF) {
- if (feof (f))
- return -1;
- else
- return ferror (f);
- }
- else
- return 0;
-}
-
-#ifdef KR_headers
-integer G77_fput_0 (c, Lc)
- ftnlen Lc; /* should be 1 */
- char *c;
-#else
-integer G77_fput_0 (const char *c, const ftnlen Lc)
-#endif
-{
- integer six = 6;
-
- return G77_fputc_0 (&six, c, Lc);
-}
diff --git a/gcc/f/runtime/libU77/fstat_.c b/gcc/f/runtime/libU77/fstat_.c
deleted file mode 100644
index da5434ad0b7..00000000000
--- a/gcc/f/runtime/libU77/fstat_.c
+++ /dev/null
@@ -1,71 +0,0 @@
-/* Copyright (C) 1995 Free Software Foundation, Inc.
-This file is part of GNU Fortran libU77 library.
-
-This library is free software; you can redistribute it and/or modify it
-under the terms of the GNU Library General Public License as published
-by the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-GNU Fortran 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
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with GNU Fortran; see the file COPYING.LIB. If
-not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA. */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-#include "f2c.h"
-#include <sys/types.h>
-#include <sys/stat.h>
-
-#ifdef KR_headers
-extern integer G77_fnum_0 ();
-
-integer G77_fstat_0 (lunit, statb)
- integer *lunit;
- integer statb[13];
-#else
-extern integer G77_fnum_0 (const integer *);
-
-integer G77_fstat_0 (const integer *lunit, integer statb[13])
-#endif
-{
- int err;
- struct stat buf;
-
- err = fstat (G77_fnum_0 (lunit), &buf);
- statb[0] = buf.st_dev;
- statb[1] = buf.st_ino;
- statb[2] = buf.st_mode;
- statb[3] = buf.st_nlink;
- statb[4] = buf.st_uid;
- statb[5] = buf.st_gid;
-#if HAVE_ST_RDEV
- statb[6] = buf.st_rdev; /* not posix */
-#else
- statb[6] = 0;
-#endif
- statb[7] = buf.st_size;
- statb[8] = buf.st_atime;
- statb[9] = buf.st_mtime;
- statb[10] = buf.st_ctime;
-#if HAVE_ST_BLKSIZE
- statb[11] = buf.st_blksize; /* not posix */
-#else
- statb[11] = -1;
-#endif
-#if HAVE_ST_BLOCKS
- statb[12] = buf.st_blocks; /* not posix */
-#else
- statb[12] = -1;
-#endif
- return err;
-}
diff --git a/gcc/f/runtime/libU77/gerror_.c b/gcc/f/runtime/libU77/gerror_.c
deleted file mode 100644
index 6f5943c1dce..00000000000
--- a/gcc/f/runtime/libU77/gerror_.c
+++ /dev/null
@@ -1,49 +0,0 @@
-/* Copyright (C) 1995 Free Software Foundation, Inc.
-This file is part of GNU Fortran libU77 library.
-
-This library is free software; you can redistribute it and/or modify it
-under the terms of the GNU Library General Public License as published
-by the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-GNU Fortran 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
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with GNU Fortran; see the file COPYING.LIB. If
-not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA. */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-#include <errno.h>
-#include <stddef.h>
-#if HAVE_STRING_H
-# include <string.h>
-#else
-# include <strings.h>
-#endif
-#include "f2c.h"
-
-#ifndef HAVE_STRERROR
- extern char *sys_errlist [];
-# define strerror(i) (sys_errlist[i])
-#endif
-#ifdef KR_headers
-extern void s_copy ();
-/* Subroutine */ int G77_gerror_0 (str, Lstr)
- char *str; ftnlen Lstr;
-#else
-extern void s_copy(register char *a, register char *b, ftnlen la, ftnlen lb);
-/* Subroutine */ int G77_gerror_0 (char *str, ftnlen Lstr)
-#endif
-{
- char * s;
-
- s = strerror(errno);
- s_copy (str, s, Lstr, strlen (s));
- return 0;
-}
diff --git a/gcc/f/runtime/libU77/getcwd_.c b/gcc/f/runtime/libU77/getcwd_.c
deleted file mode 100644
index e757803896a..00000000000
--- a/gcc/f/runtime/libU77/getcwd_.c
+++ /dev/null
@@ -1,99 +0,0 @@
-/* Copyright (C) 1995, 1996 Free Software Foundation, Inc.
-This file is part of GNU Fortran libU77 library.
-
-This library is free software; you can redistribute it and/or modify it
-under the terms of the GNU Library General Public License as published
-by the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-GNU Fortran 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
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with GNU Fortran; see the file COPYING.LIB. If
-not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA. */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-#include <errno.h>
-#if HAVE_STRING_H
-# include <string.h>
-#else
-# include <strings.h>
-#endif
-#include <stdio.h> /* for NULL */
-#include <errno.h> /* for ENOSYS */
-#include "f2c.h"
-
-#if HAVE_GETCWD
-
-#ifdef HAVE_UNISTD_H
-# include <unistd.h>
-#else
- extern char *getcwd ();
-#endif
-
-#ifdef KR_headers
-extern void s_copy ();
-integer G77_getcwd_0 (str, Lstr)
- char *str; ftnlen Lstr;
-#else
-extern void s_copy(register char *a, register char *b, ftnlen la, ftnlen lb);
-integer G77_getcwd_0 (char *str, const ftnlen Lstr)
-#endif
-{
- int i;
- char *ret;
-
- ret = getcwd (str, Lstr);
- if (ret == NULL) return errno;
- for (i=strlen(str); i<Lstr; i++)
- str[i] = ' ';
- return 0;
-}
-
-#elif HAVE_GETWD /* HAVE_GETCWD */
-
-/* getwd usage taken from SunOS4 man */
-
-# include <sys/param.h>
- extern char *getwd ();
-#ifdef KR_headers
-extern VOID s_copy ();
-integer G77_getcwd_0 (str, Lstr)
- char *str; ftnlen Lstr;
-#else
-extern void s_copy(register char *a, register char *b, ftnlen la, ftnlen lb);
-integer G77_getcwd_0 (char *str, const ftnlen Lstr)
-#endif
-{
- char pathname[MAXPATHLEN];
- size_t l;
-
- if (getwd (pathname) == NULL) {
- return errno;
- } else {
- s_copy (str, pathname, Lstr, strlen (str));
- return 0;
- }
-}
-
-#else /* !HAVE_GETWD && !HAVE_GETCWD */
-
-#ifdef KR_headers
-extern VOID s_copy ();
-integer G77_getcwd_0 (str, Lstr)
- char *str; ftnlen Lstr;
-#else
-extern void s_copy(register char *a, register char *b, ftnlen la, ftnlen lb);
-integer G77_getcwd_0 (char *str, const ftnlen Lstr)
-#endif
-{
- return errno = ENOSYS;
-}
-
-#endif
diff --git a/gcc/f/runtime/libU77/getgid_.c b/gcc/f/runtime/libU77/getgid_.c
deleted file mode 100644
index 02e8a4e4895..00000000000
--- a/gcc/f/runtime/libU77/getgid_.c
+++ /dev/null
@@ -1,35 +0,0 @@
-/* Copyright (C) 1995 Free Software Foundation, Inc.
-This file is part of GNU Fortran libU77 library.
-
-This library is free software; you can redistribute it and/or modify it
-under the terms of the GNU Library General Public License as published
-by the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-GNU Fortran 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
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with GNU Fortran; see the file COPYING.LIB. If
-not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA. */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#include <sys/types.h>
-#include "f2c.h"
-
-#ifdef KR_headers
-integer G77_getgid_0 ()
-#else
-integer G77_getgid_0 (void)
-#endif
-{
- return getgid ();
-}
diff --git a/gcc/f/runtime/libU77/getlog_.c b/gcc/f/runtime/libU77/getlog_.c
deleted file mode 100644
index a2c5f20f28b..00000000000
--- a/gcc/f/runtime/libU77/getlog_.c
+++ /dev/null
@@ -1,62 +0,0 @@
-/* Copyright (C) 1995 Free Software Foundation, Inc.
-This file is part of GNU Fortran libU77 library.
-
-This library is free software; you can redistribute it and/or modify it
-under the terms of the GNU Library General Public License as published
-by the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-GNU Fortran 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
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with GNU Fortran; see the file COPYING.LIB. If
-not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA. */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-#if HAVE_STDLIB_H
-# include <stdlib.h>
-#else
-# include <stdio.h>
-#endif
-#include <stdio.h>
-#if HAVE_UNISTD_H
-# include <unistd.h>
-#endif
-#if HAVE_STRING_H
-# include <string.h>
-#else
-# include <strings.h>
-#endif
-#include "f2c.h"
-
-/* getlogin not in svr1-3 */
-
-/* SGI also has character*(*) function getlog() */
-
-#ifdef KR_headers
-extern VOID s_copy ();
-/* Subroutine */ int G77_getlog_0 (str, Lstr)
- char *str; ftnlen Lstr;
-#else
-extern void s_copy(register char *a, register char *b, ftnlen la, ftnlen lb);
-/* Subroutine */ int G77_getlog_0 (char *str, const ftnlen Lstr)
-#endif
-{
- size_t i;
- char *p;
-
- p = getlogin ();
- if (p != NULL) {
- i = strlen (p);
- s_copy (str, p, Lstr, i);
- } else {
- s_copy (str, " ", Lstr, 1);
- }
- return 0;
-}
diff --git a/gcc/f/runtime/libU77/getpid_.c b/gcc/f/runtime/libU77/getpid_.c
deleted file mode 100644
index fa484785957..00000000000
--- a/gcc/f/runtime/libU77/getpid_.c
+++ /dev/null
@@ -1,35 +0,0 @@
-/* Copyright (C) 1995 Free Software Foundation, Inc.
-This file is part of GNU Fortran libU77 library.
-
-This library is free software; you can redistribute it and/or modify it
-under the terms of the GNU Library General Public License as published
-by the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-GNU Fortran 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
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with GNU Fortran; see the file COPYING.LIB. If
-not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA. */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#include <sys/types.h>
-#include "f2c.h"
-
-#ifdef KR_headers
-integer G77_getpid_0 ()
-#else
-integer G77_getpid_0 (void)
-#endif
-{
- return getpid ();
-}
diff --git a/gcc/f/runtime/libU77/getuid_.c b/gcc/f/runtime/libU77/getuid_.c
deleted file mode 100644
index 421bb4c9362..00000000000
--- a/gcc/f/runtime/libU77/getuid_.c
+++ /dev/null
@@ -1,35 +0,0 @@
-/* Copyright (C) 1995 Free Software Foundation, Inc.
-This file is part of GNU Fortran libU77 library.
-
-This library is free software; you can redistribute it and/or modify it
-under the terms of the GNU Library General Public License as published
-by the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-GNU Fortran 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
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with GNU Fortran; see the file COPYING.LIB. If
-not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA. */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#include <sys/types.h>
-#include "f2c.h"
-
-#ifdef KR_headers
-integer G77_getuid_0 ()
-#else
-integer G77_getuid_0 (void)
-#endif
-{
- return getuid ();
-}
diff --git a/gcc/f/runtime/libU77/gmtime_.c b/gcc/f/runtime/libU77/gmtime_.c
deleted file mode 100644
index 5f6f8ec6a0b..00000000000
--- a/gcc/f/runtime/libU77/gmtime_.c
+++ /dev/null
@@ -1,54 +0,0 @@
-/* Copyright (C) 1995 Free Software Foundation, Inc.
-This file is part of GNU Fortran libU77 library.
-
-This library is free software; you can redistribute it and/or modify it
-under the terms of the GNU Library General Public License as published
-by the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-GNU Fortran 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
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with GNU Fortran; see the file COPYING.LIB. If
-not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA. */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-/* fixme: do we need to use TM_IN_SYS_TIME? */
-#if TIME_WITH_SYS_TIME
-# include <sys/time.h>
-# include <time.h>
-#else
-# if HAVE_SYS_TIME_H
-# include <sys/time.h>
-# else
-# include <time.h>
-# endif
-#endif
-#include "f2c.h"
-
-#ifdef KR_headers
-/* Subroutine */ int G77_gmtime_0 (stime, tarray)
- integer *stime, tarray[9];
-#else
-/* Subroutine */ int G77_gmtime_0 (const integer * stime, integer tarray[9])
-#endif
-{
- struct tm *lt;
- lt = gmtime ((time_t *) stime);
- tarray[0] = lt->tm_sec;
- tarray[1] = lt->tm_min;
- tarray[2] = lt->tm_hour;
- tarray[3] = lt->tm_mday;
- tarray[4] = lt->tm_mon;
- tarray[5] = lt->tm_year;
- tarray[6] = lt->tm_wday;
- tarray[7] = lt->tm_yday;
- tarray[8] = lt->tm_isdst;
- return 0;
-}
diff --git a/gcc/f/runtime/libU77/hostnm_.c b/gcc/f/runtime/libU77/hostnm_.c
deleted file mode 100644
index 8229e09e727..00000000000
--- a/gcc/f/runtime/libU77/hostnm_.c
+++ /dev/null
@@ -1,49 +0,0 @@
-/* Copyright (C) 1995 Free Software Foundation, Inc.
-This file is part of GNU Fortran libU77 library.
-
-This library is free software; you can redistribute it and/or modify it
-under the terms of the GNU Library General Public License as published
-by the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-GNU Fortran 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
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with GNU Fortran; see the file COPYING.LIB. If
-not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA. */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-#if HAVE_STRING_H
-# include <string.h>
-#else
-# include <strings.h>
-#endif
-#if HAVE_UNISTD_H
-# include <unistd.h>
-#endif
-#include <errno.h> /* for ENOSYS */
-#include "f2c.h"
-
-integer G77_hostnm_0 (char *name, ftnlen Lname)
-{
- int ret, i;
-
-#if HAVE_GETHOSTNAME
- ret = gethostname (name, Lname);
- if (ret==0) {
- /* Pad with blanks (assuming gethostname will make an error
- return if it can't fit in the null). */
- for (i=strlen(name); i<=Lname; i++)
- name[i] = ' ';
- }
- return ret;
-#else
- return errno = ENOSYS;
-#endif
-}
diff --git a/gcc/f/runtime/libU77/idate_.c b/gcc/f/runtime/libU77/idate_.c
deleted file mode 100644
index c4075767a4c..00000000000
--- a/gcc/f/runtime/libU77/idate_.c
+++ /dev/null
@@ -1,57 +0,0 @@
-/* Copyright (C) 1995, 1996 Free Software Foundation, Inc.
-This file is part of GNU Fortran libU77 library.
-
-This library is free software; you can redistribute it and/or modify it
-under the terms of the GNU Library General Public License as published
-by the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-GNU Fortran 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
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with GNU Fortran; see the file COPYING.LIB. If
-not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA. */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-#include <stdio.h>
-#if TIME_WITH_SYS_TIME
-# include <sys/time.h>
-# include <time.h>
-#else
-# if HAVE_SYS_TIME_H
-# include <sys/time.h>
-# else
-# include <time.h>
-# endif
-#endif
-#include "f2c.h"
-
-/* VMS and Irix versions (at least) differ from libU77 elsewhere */
-
-/* libU77 one: */
-
-#ifdef KR_headers
-/* Subroutine */ int G77_idate_0 (iarray)
- int iarray[3];
-#else
-/* Subroutine */ int G77_idate_0 (int iarray[3])
-#endif
-{
- struct tm *lt;
- time_t tim;
- tim = time(NULL);
- lt = localtime(&tim);
- iarray[0] = lt->tm_mday;
- iarray[1] = lt->tm_mon + 1; /* in range 1-12 in SunOS (experimentally) */
- /* The `+1900' is consistent with SunOS and Irix, but they don't say
- it's added. I think I've seen a system where tm_year was since
- 1970, but can't now verify that, so assume the ANSI definition. */
- iarray[2] = lt->tm_year + 1900;
- return 0;
-}
diff --git a/gcc/f/runtime/libU77/ierrno_.c b/gcc/f/runtime/libU77/ierrno_.c
deleted file mode 100644
index 557b53a4664..00000000000
--- a/gcc/f/runtime/libU77/ierrno_.c
+++ /dev/null
@@ -1,32 +0,0 @@
-/* Copyright (C) 1995 Free Software Foundation, Inc.
-This file is part of GNU Fortran libU77 library.
-
-This library is free software; you can redistribute it and/or modify it
-under the terms of the GNU Library General Public License as published
-by the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-GNU Fortran 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
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with GNU Fortran; see the file COPYING.LIB. If
-not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA. */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-#include <errno.h>
-#include "f2c.h"
-
-#ifdef KR_headers
-integer G77_ierrno_0 ()
-#else
-integer G77_ierrno_0 (void)
-#endif
-{
- return errno;
-}
diff --git a/gcc/f/runtime/libU77/irand_.c b/gcc/f/runtime/libU77/irand_.c
deleted file mode 100644
index 2bf14ccee26..00000000000
--- a/gcc/f/runtime/libU77/irand_.c
+++ /dev/null
@@ -1,57 +0,0 @@
-/* Copyright (C) 1995 Free Software Foundation, Inc.
-This file is part of GNU Fortran libU77 library.
-
-This library is free software; you can redistribute it and/or modify it
-under the terms of the GNU Library General Public License as published
-by the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-GNU Fortran 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
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with GNU Fortran; see the file COPYING.LIB. If
-not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA. */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-#if HAVE_STDLIB_H
-# include <stdlib.h>
-#endif
-#include "f2c.h"
-
-/* We could presumably do much better than the traditional libc
- version, though at least the glibc one is reasonable, it seems.
- For the sake of the innocent, I'm not sure we should really do
- this... */
-
-/* Note this is per SunOS -- other s may have no arg. */
-
-#ifdef KR_headers
-integer G77_irand_0 (flag)
- integer *flag;
-#else
-integer G77_irand_0 (integer *flag)
-#endif
-{
- switch (*flag) {
- case 0:
- break;
- case 1:
- srand (0); /* Arbitrary choice of initialiser. */
- break;
- default:
- srand (*flag);
- }
- return rand ();
-}
-
-
-
-
-
-
diff --git a/gcc/f/runtime/libU77/isatty_.c b/gcc/f/runtime/libU77/isatty_.c
deleted file mode 100644
index 92c33468f53..00000000000
--- a/gcc/f/runtime/libU77/isatty_.c
+++ /dev/null
@@ -1,44 +0,0 @@
-/* Copyright (C) 1995 Free Software Foundation, Inc.
-This file is part of GNU Fortran libU77 library.
-
-This library is free software; you can redistribute it and/or modify it
-under the terms of the GNU Library General Public License as published
-by the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-GNU Fortran 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
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with GNU Fortran; see the file COPYING.LIB. If
-not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA. */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-#if HAVE_UNISTD_H
-# include <unistd.h>
-#endif
-#include "f2c.h"
-#include "fio.h"
-
-#ifdef KR_headers
-extern integer G77_fnum_0 ();
-
-logical G77_isatty_0 (lunit)
- integer *lunit;
-#else
-extern integer G77_fnum_0 (integer *);
-
-logical G77_isatty_0 (integer *lunit)
-#endif
-{
- if (*lunit>=MXUNIT || *lunit<0)
- err(1,101,"isatty");
- /* f__units is a table of descriptions for the unit numbers (defined
- in io.h) with file descriptors rather than streams */
- return (isatty(G77_fnum_0 (lunit)) ? TRUE_ : FALSE_);
-}
diff --git a/gcc/f/runtime/libU77/itime_.c b/gcc/f/runtime/libU77/itime_.c
deleted file mode 100644
index 50378d54426..00000000000
--- a/gcc/f/runtime/libU77/itime_.c
+++ /dev/null
@@ -1,51 +0,0 @@
-/* Copyright (C) 1995 Free Software Foundation, Inc.
-This file is part of GNU Fortran libU77 library.
-
-This library is free software; you can redistribute it and/or modify it
-under the terms of the GNU Library General Public License as published
-by the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-GNU Fortran 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
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with GNU Fortran; see the file COPYING.LIB. If
-not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA. */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-#include <stdio.h>
-#if TIME_WITH_SYS_TIME
-# include <sys/time.h>
-# include <time.h>
-#else
-# if HAVE_SYS_TIME_H
-# include <sys/time.h>
-# else
-# include <time.h>
-# endif
-#endif
-#include "f2c.h"
-
-#ifdef KR_headers
-/* Subroutine */ int G77_itime_0 (tarray)
- integer tarray[3];
-#else
-/* Subroutine */ int G77_itime_0 (integer tarray[3])
-#endif
-{
- struct tm *lt;
- time_t tim;
-
- tim = time(NULL);
- lt = localtime(&tim);
- tarray[0] = lt->tm_hour;
- tarray[1] = lt->tm_min;
- tarray[2] = lt->tm_sec;
- return 0;
-}
diff --git a/gcc/f/runtime/libU77/kill_.c b/gcc/f/runtime/libU77/kill_.c
deleted file mode 100644
index 32afddf1e46..00000000000
--- a/gcc/f/runtime/libU77/kill_.c
+++ /dev/null
@@ -1,37 +0,0 @@
-/* Copyright (C) 1995 Free Software Foundation, Inc.
-This file is part of GNU Fortran libU77 library.
-
-This library is free software; you can redistribute it and/or modify it
-under the terms of the GNU Library General Public License as published
-by the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-GNU Fortran 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
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with GNU Fortran; see the file COPYING.LIB. If
-not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA. */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-#include <sys/types.h>
-#include <signal.h>
-#include <errno.h>
-#include "f2c.h"
-
-/* fixme: bsd, svr1-3 use int, not pid_t */
-
-#ifdef KR_headers
-integer G77_kill_0 (pid, signum)
- integer *pid, *signum;
-#else
-integer G77_kill_0 (const integer *pid, const integer *signum)
-#endif
-{
- return kill ((pid_t) *pid, *signum) ? errno : 0;
-}
diff --git a/gcc/f/runtime/libU77/link_.c b/gcc/f/runtime/libU77/link_.c
deleted file mode 100644
index 6892dcb7694..00000000000
--- a/gcc/f/runtime/libU77/link_.c
+++ /dev/null
@@ -1,58 +0,0 @@
-/* Copyright (C) 1995, 1997 Free Software Foundation, Inc.
-This file is part of GNU Fortran libU77 library.
-
-This library is free software; you can redistribute it and/or modify it
-under the terms of the GNU Library General Public License as published
-by the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-GNU Fortran 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
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with GNU Fortran; see the file COPYING.LIB. If
-not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA. */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-#if HAVE_STDLIB_H
-# include <stdlib.h>
-#else
-# include <stdio.h>
-#endif
-#if HAVE_UNISTD_H
-# include <unistd.h>
-#endif
-#include <errno.h>
-#include <sys/param.h>
-#include "f2c.h"
-
-#ifdef KR_headers
-void g_char ();
-
-integer G77_link_0 (path1, path2, Lpath1, Lpath2)
- char *path1, *path2; ftnlen Lpath1, Lpath2;
-#else
-void g_char(const char *a, ftnlen alen, char *b);
-
-integer G77_link_0 (const char *path1, const char *path2, const ftnlen Lpath1, const ftnlen Lpath2)
-#endif
-{
- char *buff1, *buff2;
- char *bp, *blast;
- int i;
-
- buff1 = malloc (Lpath1+1);
- if (buff1 == NULL) return -1;
- g_char (path1, Lpath1, buff1);
- buff2 = malloc (Lpath2+1);
- if (buff2 == NULL) return -1;
- g_char (path2, Lpath2, buff2);
- i = link (buff1, buff2);
- free (buff1); free (buff2);
- return i ? errno : 0;
-}
diff --git a/gcc/f/runtime/libU77/lnblnk_.c b/gcc/f/runtime/libU77/lnblnk_.c
deleted file mode 100644
index 806eca293f1..00000000000
--- a/gcc/f/runtime/libU77/lnblnk_.c
+++ /dev/null
@@ -1,35 +0,0 @@
-/* Copyright (C) 1995, 1997 Free Software Foundation, Inc.
-This file is part of GNU Fortran libU77 library.
-
-This library is free software; you can redistribute it and/or modify it
-under the terms of the GNU Library General Public License as published
-by the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-GNU Fortran 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
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with GNU Fortran; see the file COPYING.LIB. If
-not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA. */
-
-
-/* via f2c from Fortran */
-
-#include "f2c.h"
-
-integer G77_lnblnk_0 (char *str, ftnlen str_len)
-{
- integer ret_val;
- integer i_len();
-
- for (ret_val = str_len; ret_val >= 1; --ret_val) {
- if (*(unsigned char *)&str[ret_val - 1] != ' ') {
- return ret_val;
- }
- }
- return ret_val;
-}
diff --git a/gcc/f/runtime/libU77/lstat_.c b/gcc/f/runtime/libU77/lstat_.c
deleted file mode 100644
index e3efce7c55b..00000000000
--- a/gcc/f/runtime/libU77/lstat_.c
+++ /dev/null
@@ -1,87 +0,0 @@
-/* Copyright (C) 1995, 1997 Free Software Foundation, Inc.
-This file is part of GNU Fortran libU77 library.
-
-This library is free software; you can redistribute it and/or modify it
-under the terms of the GNU Library General Public License as published
-by the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-GNU Fortran 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
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with GNU Fortran; see the file COPYING.LIB. If
-not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA. */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-#include <stdio.h>
-#if HAVE_STDLIB_H
-# include <stdlib.h>
-#endif
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <errno.h> /* for ENOSYS */
-#include "f2c.h"
-
-/* lstat isn't posix */
-
-#ifdef KR_headers
-void g_char();
-
-integer G77_lstat_0 (name, statb, Lname)
- char *name;
- integer statb[13];
- ftnlen Lname;
-#else
-void g_char(const char *a, ftnlen alen, char *b);
-
-integer G77_lstat_0 (const char *name, integer statb[13], const ftnlen Lname)
-#endif
-{
-#if HAVE_LSTAT
- char *buff;
- char *bp, *blast;
- int err;
- struct stat buf;
-
- buff = malloc (Lname+1);
- if (buff == NULL) return -1;
- g_char (name, Lname, buff);
- err = lstat (buff, &buf);
- free (buff);
- statb[0] = buf.st_dev;
- statb[1] = buf.st_ino;
- statb[2] = buf.st_mode;
- statb[3] = buf.st_nlink;
- statb[4] = buf.st_uid;
- statb[5] = buf.st_gid;
-#if HAVE_ST_RDEV
- statb[6] = buf.st_rdev;
-#else
- statb[6] = 0;
-#endif
- statb[7] = buf.st_size;
- statb[8] = buf.st_atime;
- statb[9] = buf.st_mtime;
- statb[10] = buf.st_ctime;
- statb[6] = 0;
-#if HAVE_ST_BLKSIZE
- statb[11] = buf.st_blksize;
-#else
- statb[11] = -1;
-#endif
-#if HAVE_ST_BLOCKS
- statb[12] = buf.st_blocks;
-#else
- statb[12] = -1;
-#endif
- return err;
-#else /* !HAVE_LSTAT */
- return errno = ENOSYS;
-#endif /* !HAVE_LSTAT */
-}
diff --git a/gcc/f/runtime/libU77/ltime_.c b/gcc/f/runtime/libU77/ltime_.c
deleted file mode 100644
index 151ac6c9b55..00000000000
--- a/gcc/f/runtime/libU77/ltime_.c
+++ /dev/null
@@ -1,54 +0,0 @@
-/* Copyright (C) 1995 Free Software Foundation, Inc.
-This file is part of GNU Fortran libU77 library.
-
-This library is free software; you can redistribute it and/or modify it
-under the terms of the GNU Library General Public License as published
-by the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-GNU Fortran 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
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with GNU Fortran; see the file COPYING.LIB. If
-not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA. */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-/* fixme: do we need to use TM_IN_SYS_TIME? */
-#if TIME_WITH_SYS_TIME
-# include <sys/time.h>
-# include <time.h>
-#else
-# if HAVE_SYS_TIME_H
-# include <sys/time.h>
-# else
-# include <time.h>
-# endif
-#endif
-#include "f2c.h"
-
-#ifdef KR_headers
-/* Subroutine */ int G77_ltime_0 (stime, tarray)
- integer *stime, tarray[9];
-#else
-/* Subroutine */ int G77_ltime_0 (const integer * stime, integer tarray[9])
-#endif
-{
- struct tm *lt;
- lt = localtime ((time_t *) stime);
- tarray[0] = lt->tm_sec;
- tarray[1] = lt->tm_min;
- tarray[2] = lt->tm_hour;
- tarray[3] = lt->tm_mday;
- tarray[4] = lt->tm_mon;
- tarray[5] = lt->tm_year;
- tarray[6] = lt->tm_wday;
- tarray[7] = lt->tm_yday;
- tarray[8] = lt->tm_isdst;
- return 0;
-}
diff --git a/gcc/f/runtime/libU77/mclock_.c b/gcc/f/runtime/libU77/mclock_.c
deleted file mode 100644
index 6b7e81b1e04..00000000000
--- a/gcc/f/runtime/libU77/mclock_.c
+++ /dev/null
@@ -1,47 +0,0 @@
-/* Copyright (C) 1996 Free Software Foundation, Inc.
-This file is part of GNU Fortran libU77 library.
-
-This library is free software; you can redistribute it and/or modify it
-under the terms of the GNU Library General Public License as published
-by the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-GNU Fortran 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
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with GNU Fortran; see the file COPYING.LIB. If
-not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA. */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-#if TIME_WITH_SYS_TIME
-# include <sys/time.h>
-# include <time.h>
-#else
-# if HAVE_SYS_TIME_H
-# include <sys/time.h>
-# else
-# include <time.h>
-# endif
-#endif
-#include "f2c.h"
-
-/* Reported by wd42ej@sgi83.wwb.noaa.gov (Russ Jones AUTO-Sun3) on AIX. */
-
-#ifdef KR_headers
-longint G77_mclock_0 ()
-#else
-longint G77_mclock_0 (void)
-#endif
-{
-#if HAVE_CLOCK
- return clock ();
-#else
- return -1;
-#endif
-}
diff --git a/gcc/f/runtime/libU77/perror_.c b/gcc/f/runtime/libU77/perror_.c
deleted file mode 100644
index 26d8582dbcc..00000000000
--- a/gcc/f/runtime/libU77/perror_.c
+++ /dev/null
@@ -1,48 +0,0 @@
-/* Copyright (C) 1995 Free Software Foundation, Inc.
-This file is part of GNU Fortran libU77 library.
-
-This library is free software; you can redistribute it and/or modify it
-under the terms of the GNU Library General Public License as published
-by the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-GNU Fortran 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
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with GNU Fortran; see the file COPYING.LIB. If
-not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA. */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-#include <stdio.h>
-#include <errno.h>
-#if HAVE_STRING_H
-# include <string.h>
-#else
-# include <strings.h>
-#endif
-#include "f2c.h"
-
-#ifdef KR_headers
-/* Subroutine */ int G77_perror_0 (str, Lstr)
- char *str; ftnlen Lstr;
-#else
-/* Subroutine */ int G77_perror_0 (const char *str, const ftnlen Lstr)
-#endif
-{
- char buff[1000];
- char *bp, *blast;
-
- /* same technique as `system' -- what's wrong with malloc? */
- blast = buff + (Lstr < 1000 ? Lstr : 1000);
- for (bp = buff ; bp<blast && *str!='\0' ; )
- *bp++ = *str++;
- *bp = '\0';
- perror (buff);
- return 0;
-}
diff --git a/gcc/f/runtime/libU77/rand_.c b/gcc/f/runtime/libU77/rand_.c
deleted file mode 100644
index 165aee1220c..00000000000
--- a/gcc/f/runtime/libU77/rand_.c
+++ /dev/null
@@ -1,54 +0,0 @@
-/* Copyright (C) 1995 Free Software Foundation, Inc.
-This file is part of GNU Fortran libU77 library.
-
-This library is free software; you can redistribute it and/or modify it
-under the terms of the GNU Library General Public License as published
-by the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-GNU Fortran 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
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with GNU Fortran; see the file COPYING.LIB. If
-not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA. */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-#if HAVE_STDLIB_H
-# include <stdlib.h>
-#endif
-#include "f2c.h"
-#ifndef RAND_MAX
-# define RAND_MAX 2147483647 /* from SunOS */
-#endif
-
-/* We could presumably do much better than the traditional libc
- version, though at least the glibc one is reasonable, it seems.
- For the sake of the innocent, I'm not sure we should really do
- this... */
-
-/* Note this is per SunOS -- other s may have no arg. */
-
-#ifdef KR_headers
-double G77_rand_0 (flag)
- integer *flag;
-#else
-double G77_rand_0 (integer *flag)
-#endif
-{
- switch (*flag) {
- case 0:
- break;
- case 1:
- srand (0); /* Arbitrary choice of initialiser. */
- break;
- default:
- srand (*flag);
- }
- return (float) rand () / RAND_MAX;
-}
diff --git a/gcc/f/runtime/libU77/rename_.c b/gcc/f/runtime/libU77/rename_.c
deleted file mode 100644
index e8a4bf6523c..00000000000
--- a/gcc/f/runtime/libU77/rename_.c
+++ /dev/null
@@ -1,53 +0,0 @@
-/* Copyright (C) 1995, 1997 Free Software Foundation, Inc.
-This file is part of GNU Fortran libU77 library.
-
-This library is free software; you can redistribute it and/or modify it
-under the terms of the GNU Library General Public License as published
-by the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-GNU Fortran 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
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with GNU Fortran; see the file COPYING.LIB. If
-not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA. */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-#if HAVE_STDLIB_H
-# include <stdlib.h>
-#endif
-#include <stdio.h>
-#include <errno.h>
-#include "f2c.h"
-
-#ifdef KR_headers
-void g_char ();
-
-integer G77_rename_0 (path1, path2, Lpath1, Lpath2)
- char *path1, *path2; ftnlen Lpath1, Lpath2;
-#else
-void g_char(const char *a, ftnlen alen, char *b);
-
-integer G77_rename_0 (const char *path1, const char *path2, const ftnlen Lpath1, const ftnlen Lpath2)
-#endif
-{
- char *buff1, *buff2;
- char *bp, *blast;
- int i;
-
- buff1 = malloc (Lpath1+1);
- if (buff1 == NULL) return -1;
- g_char (path1, Lpath1, buff1);
- buff2 = malloc (Lpath2+1);
- if (buff2 == NULL) return -1;
- g_char (path2, Lpath2, buff2);
- i = rename (buff1, buff2);
- free (buff1); free (buff2);
- return i ? errno : 0;
-}
diff --git a/gcc/f/runtime/libU77/secnds_.c b/gcc/f/runtime/libU77/secnds_.c
deleted file mode 100644
index 1942528530f..00000000000
--- a/gcc/f/runtime/libU77/secnds_.c
+++ /dev/null
@@ -1,51 +0,0 @@
-/* Copyright (C) 1995 Free Software Foundation, Inc.
-This file is part of GNU Fortran libU77 library.
-
-This library is free software; you can redistribute it and/or modify it
-under the terms of the GNU Library General Public License as published
-by the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-GNU Fortran 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
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with GNU Fortran; see the file COPYING.LIB. If
-not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA. */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-#include <stdio.h>
-#if TIME_WITH_SYS_TIME
-# include <sys/time.h>
-# include <time.h>
-#else
-# if HAVE_SYS_TIME_H
-# include <sys/time.h>
-# else
-# include <time.h>
-# endif
-#endif
-#include <sys/types.h>
-
-#include "f2c.h"
-
-/* This is a VMS intrinsic. */
-
-double G77_secnds_0 (real *r)
-{
- struct tm *lt;
- time_t clock;
- float f;
-
- clock = time (NULL);
- lt = localtime (&clock);
- f= (3600.0*((real)lt->tm_hour) + 60.0*((real)lt->tm_min) +
- (real)lt->tm_sec - *r);
- return f;
-}
-
diff --git a/gcc/f/runtime/libU77/second_.c b/gcc/f/runtime/libU77/second_.c
deleted file mode 100644
index 41bb5a90a92..00000000000
--- a/gcc/f/runtime/libU77/second_.c
+++ /dev/null
@@ -1,26 +0,0 @@
-/* Copyright (C) 1996 Free Software Foundation, Inc.
-This file is part of GNU Fortran libU77 library.
-
-This library is free software; you can redistribute it and/or modify it
-under the terms of the GNU Library General Public License as published
-by the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-GNU Fortran 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
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with GNU Fortran; see the file COPYING.LIB. If
-not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA. */
-
-#include "f2c.h"
-
-double G77_second_0 () {
- extern double G77_etime_0 ();
- real tarray[2];
-
- return G77_etime_0 (tarray);
-}
diff --git a/gcc/f/runtime/libU77/sleep_.c b/gcc/f/runtime/libU77/sleep_.c
deleted file mode 100644
index 36e1b8d9a7b..00000000000
--- a/gcc/f/runtime/libU77/sleep_.c
+++ /dev/null
@@ -1,37 +0,0 @@
-/* Copyright (C) 1995 Free Software Foundation, Inc.
-This file is part of GNU Fortran libU77 library.
-
-This library is free software; you can redistribute it and/or modify it
-under the terms of the GNU Library General Public License as published
-by the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-GNU Fortran 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
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with GNU Fortran; see the file COPYING.LIB. If
-not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA. */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-#if HAVE_UNISTD_H
-# include <unistd.h>
-#endif
-#include "f2c.h"
-
-/* Subroutine */
-#ifdef KR_headers
-int G77_sleep_0 (seconds)
- integer *seconds;
-#else
-int G77_sleep_0 (const integer *seconds)
-#endif
-{
- (void) sleep ((unsigned int) *seconds);
- return 0;
-}
diff --git a/gcc/f/runtime/libU77/srand_.c b/gcc/f/runtime/libU77/srand_.c
deleted file mode 100644
index 8edc62e4fe0..00000000000
--- a/gcc/f/runtime/libU77/srand_.c
+++ /dev/null
@@ -1,37 +0,0 @@
-/* Copyright (C) 1995 Free Software Foundation, Inc.
-This file is part of GNU Fortran libU77 library.
-
-This library is free software; you can redistribute it and/or modify it
-under the terms of the GNU Library General Public License as published
-by the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-GNU Fortran 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
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with GNU Fortran; see the file COPYING.LIB. If
-not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA. */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-#if STDC_HEADERS
-# include <stdlib.h>
-#endif
-#include "f2c.h"
-
-/* Subroutine */
-#ifdef KR_headers
-int G77_srand_0 (seed)
- integer *seed;
-#else
-int G77_srand_0 (const integer *seed)
-#endif
-{
- srand ((unsigned int) *seed);
- return 0;
-}
diff --git a/gcc/f/runtime/libU77/stat_.c b/gcc/f/runtime/libU77/stat_.c
deleted file mode 100644
index b24f3892221..00000000000
--- a/gcc/f/runtime/libU77/stat_.c
+++ /dev/null
@@ -1,79 +0,0 @@
-/* Copyright (C) 1995, 1997 Free Software Foundation, Inc.
-This file is part of GNU Fortran libU77 library.
-
-This library is free software; you can redistribute it and/or modify it
-under the terms of the GNU Library General Public License as published
-by the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-GNU Fortran 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
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with GNU Fortran; see the file COPYING.LIB. If
-not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA. */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-#include <stdio.h>
-#if HAVE_STDLIB_H
-# include <stdlib.h>
-#endif
-#include <sys/types.h>
-#include <sys/stat.h>
-#include "f2c.h"
-
-#ifdef KR_headers
-void g_char ();
-
-integer G77_stat_0 (name, statb, Lname)
- char *name;
- integer statb[13];
- ftnlen Lname;
-#else
-void g_char(const char *a, ftnlen alen, char *b);
-
-integer G77_stat_0 (const char *name, integer statb[13], const ftnlen Lname)
-#endif
-{
- char *buff;
- char *bp, *blast;
- int err;
- struct stat buf;
-
- buff = malloc (Lname+1);
- if (buff == NULL) return -1;
- g_char (name, Lname, buff);
- err = stat (buff, &buf);
- free (buff);
- statb[0] = buf.st_dev;
- statb[1] = buf.st_ino;
- statb[2] = buf.st_mode;
- statb[3] = buf.st_nlink;
- statb[4] = buf.st_uid;
- statb[5] = buf.st_gid;
-#if HAVE_ST_RDEV
- statb[6] = buf.st_rdev; /* not posix */
-#else
- statb[6] = 0;
-#endif
- statb[7] = buf.st_size;
- statb[8] = buf.st_atime;
- statb[9] = buf.st_mtime;
- statb[10] = buf.st_ctime;
-#if HAVE_ST_BLKSIZE
- statb[11] = buf.st_blksize; /* not posix */
-#else
- statb[11] = -1;
-#endif
-#if HAVE_ST_BLOCKS
- statb[12] = buf.st_blocks; /* not posix */
-#else
- statb[12] = -1;
-#endif
- return err;
-}
diff --git a/gcc/f/runtime/libU77/symlnk_.c b/gcc/f/runtime/libU77/symlnk_.c
deleted file mode 100644
index d15e4528758..00000000000
--- a/gcc/f/runtime/libU77/symlnk_.c
+++ /dev/null
@@ -1,62 +0,0 @@
-/* Copyright (C) 1995, 1997 Free Software Foundation, Inc.
-This file is part of GNU Fortran.
-
-GNU Fortran is free software; you can redistribute it and/or modify it
-under the terms of the GNU Library General Public License as published
-by the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-GNU Fortran 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
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with GNU Fortran; see the file COPYING.LIB. If
-not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA. */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-#if HAVE_STDLIB_H
-# include <stdlib.h>
-#else
-# include <stdio.h>
-#endif
-#if HAVE_UNISTD_H
-# include <unistd.h>
-#endif
-#include <errno.h>
-#include <sys/param.h>
-#include "f2c.h"
-
-#ifdef KR_headers
-void g_char ();
-
-integer G77_symlnk_0 (path1, path2, Lpath1, Lpath2)
- char *path1, *path2; ftnlen Lpath1, Lpath2;
-#else
-void g_char(const char *a, ftnlen alen, char *b);
-
-integer G77_symlnk_0 (const char *path1, const char *path2, const ftnlen Lpath1, const ftnlen Lpath2)
-#endif
-{
-#if HAVE_SYMLINK
- char *buff1, *buff2;
- char *bp, *blast;
- int i;
-
- buff1 = (char *) malloc (Lpath1+1);
- if (buff1 == NULL) return -1;
- g_char (path1, Lpath1, buff1);
- buff2 = (char *) malloc (Lpath2+1);
- if (buff2 == NULL) return -1;
- g_char (path2, Lpath2, buff2);
- i = symlink (buff1, buff2);
- free (buff1); free (buff2);
- return i ? errno : 0;
-#else /* !HAVE_SYMLINK */
- return errno = ENOSYS;
-#endif /* !HAVE_SYMLINK */
-}
diff --git a/gcc/f/runtime/libU77/system_clock_.c b/gcc/f/runtime/libU77/system_clock_.c
deleted file mode 100644
index d5cbaac0608..00000000000
--- a/gcc/f/runtime/libU77/system_clock_.c
+++ /dev/null
@@ -1,64 +0,0 @@
-/* Copyright (C) 1996 Free Software Foundation, Inc.
-This file is part of GNU Fortran libU77 library.
-
-This library is free software; you can redistribute it and/or modify it
-under the terms of the GNU Library General Public License as published
-by the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-GNU Fortran 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
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with GNU Fortran; see the file COPYING.LIB. If
-not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA. */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-#if TIME_WITH_SYS_TIME
-# include <sys/time.h>
-# include <time.h>
-#else
-# if HAVE_SYS_TIME_H
-# include <sys/time.h>
-# else
-# include <time.h>
-# endif
-#endif
-#include <sys/times.h>
-#include <limits.h>
-#if HAVE_UNISTD_H
-# include <unistd.h>
-#endif
-#include "f2c.h"
-
-#ifdef KR_headers
-int G77_system_clock_0 (count, count_rate, count_max)
- integer *count, *count_rate, *count_max;
-#else
-int G77_system_clock_0 (integer *count, integer *count_rate, integer *count_max)
-#endif
-{
- struct tms buffer;
- unsigned long cnt;
-#ifdef _SC_CLK_TCK
- *count_rate = sysconf(_SC_CLK_TCK);
-#elif defined CLOCKS_PER_SECOND
- *count_rate = CLOCKS_PER_SECOND;
-#elif defined CLK_TCK
- *count_rate = CLK_TCK;
-#else
- #error Dont know clock tick length
-#endif
- *count_max = INT_MAX; /* dubious */
- cnt = times (&buffer);
- if (cnt > (unsigned long) (*count_max))
- *count = *count_max; /* also dubious */
- else
- *count = cnt;
- return 0;
-}
diff --git a/gcc/f/runtime/libU77/time_.c b/gcc/f/runtime/libU77/time_.c
deleted file mode 100644
index 73894b0b413..00000000000
--- a/gcc/f/runtime/libU77/time_.c
+++ /dev/null
@@ -1,46 +0,0 @@
-/* Copyright (C) 1995 Free Software Foundation, Inc.
-This file is part of GNU Fortran libU77 library.
-
-This library is free software; you can redistribute it and/or modify it
-under the terms of the GNU Library General Public License as published
-by the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-GNU Fortran 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
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with GNU Fortran; see the file COPYING.LIB. If
-not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA. */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-#include <stdio.h>
-#if TIME_WITH_SYS_TIME
-# include <sys/time.h>
-# include <time.h>
-#else
-# if HAVE_SYS_TIME_H
-# include <sys/time.h>
-# else
-# include <time.h>
-# endif
-#endif
-#include "f2c.h"
-
-/* As well as this external function some compilers have an intrinsic
- subroutine which fills a character argument (which is the VMS way)
- -- caveat emptor. */
-#ifdef KR_headers
-longint G77_time_0 ()
-#else
-longint G77_time_0 (void)
-#endif
-{
- /* There are potential problems with the cast of the time_t here. */
- return time (NULL);
-}
diff --git a/gcc/f/runtime/libU77/ttynam_.c b/gcc/f/runtime/libU77/ttynam_.c
deleted file mode 100644
index f69aa43f564..00000000000
--- a/gcc/f/runtime/libU77/ttynam_.c
+++ /dev/null
@@ -1,57 +0,0 @@
-/* Copyright (C) 1995, 1996 Free Software Foundation, Inc.
-This file is part of GNU Fortran libU77 library.
-
-This library is free software; you can redistribute it and/or modify it
-under the terms of the GNU Library General Public License as published
-by the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-GNU Fortran 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
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with GNU Fortran; see the file COPYING.LIB. If
-not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA. */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-#if STDC_HEADERS
-# include <stdlib.h>
-#endif
-#if HAVE_UNISTD_H
-# include <unistd.h> /* POSIX for ttyname */
-#endif
-#include <stdio.h>
-#if HAVE_STRING_H
-# include <string.h>
-#else
-# include <strings.h>
-#endif
-#include "f2c.h"
-
-#ifdef KR_headers
-extern void s_copy ();
-extern integer G77_fnum_0 ();
-/* Character */ void G77_ttynam_0 (ret_val, ret_val_len, lunit)
- char *ret_val; ftnlen ret_val_len; integer *lunit
-#else
-extern integer G77_fnum_0 (integer *lunit);
-extern void s_copy(register char *a, register char *b, ftnlen la, ftnlen lb);
-/* Character */ void G77_ttynam_0 (char *ret_val, ftnlen ret_val_len, integer *lunit)
-#endif
-{
- size_t i;
- char *p;
-
- p = ttyname (G77_fnum_0 (lunit));
- if (p != NULL) {
- i = strlen (p);
- s_copy (ret_val, p, ret_val_len, i);
- } else {
- s_copy (ret_val, " ", ret_val_len, 1);
- }
-}
diff --git a/gcc/f/runtime/libU77/u77-test.f b/gcc/f/runtime/libU77/u77-test.f
deleted file mode 100644
index 11c5ecae449..00000000000
--- a/gcc/f/runtime/libU77/u77-test.f
+++ /dev/null
@@ -1,178 +0,0 @@
-*** Some random stuff for testing libU77. Should be done better. It's
-* hard to test things where you can't guarantee the result. Have a
-* good squint at what it prints, though detected errors will cause
-* starred messages.
-
- integer i, j, k, ltarray (9), idat (3), count, rate, count_max,
- + pid
- real tarray1(2), tarray2(2), r1, r2, etime
- intrinsic getpid, getuid, getgid, ierrno, gerror,
- + fnum, isatty, getarg, access, unlink, fstat,
- + stat, lstat, getcwd, gmtime, hostnm, etime, chmod,
- + chdir, fgetc, fputc, system_clock, second, idate, secnds,
- + time, ctime, fdate, ttynam
- external lenstr
- logical l
- character gerr*80, c*1
- character ctim*25, line*80, lognam*20, wd*100, line2*80
- integer fstatb (13), statb (13)
- integer *2 i2zero
-
- ctim = ctime(time())
- WRITE (6,'(A/)') '1 GNU libU77 test at: ' // ctim
- write (6,'(A,I3,'', '',I3)')
- + ' Logical units 5 and 6 correspond (FNUM) to'
- + // ' Unix i/o units ', fnum(5), fnum(6)
- if (lnblnk('foo ').ne.3 .or. len_trim('foo ').ne.3) then
- print *, 'LNBLNK or LEN_TRIM failed'
- call exit(1)
- end if
- l= isatty(6)
- line2 = ttynam(6)
- if (l) then
- line = 'and 6 is a tty device (ISATTY) named '//line2
- else
- line = 'and 6 isn''t a tty device (ISATTY)'
- end if
- write (6,'(1X,A)') line(:lenstr(line))
- pid = getpid()
- WRITE (6,'(A,I10)') ' Process id (GETPID): ', pid
- WRITE (6,'(A,I10)') ' User id (GETUID): ', GETUID ()
- WRITE (6,'(A,I10)') ' Group id (GETGID): ', GETGID ()
- WRITE (6,*) 'If you have the `id'' program, the following call of'
- + // ' SYSTEM should agree with the above'
- call flush(6)
- CALL SYSTEM ('echo " " `id`')
- call flush
- call getlog (lognam)
- write (6,*) 'Login name (GETLOG): ', lognam
- call umask(0, mask)
- write(6,*) 'UMASK returns', mask
- call umask(mask)
- ctim = fdate()
- write (6,*) 'FDATE returns: ', ctim
- j=time()
- call ltime (j, ltarray)
- write (6,'(1x,a,9i4)') 'LTIME returns:', ltarray
- call gmtime (j, ltarray)
- write (6,'(1x,a,9i4)') 'GMTIME returns:', ltarray
- call system_clock(count, rate, count_max)
- write(6,*) 'SYSTEM_CLOCK returns: ', count, rate, count_max
- write (6,*) 'Sleeping for 1 second (SLEEP) ...'
- call sleep (1)
- write (6,*) 'Looping 10,000,000 times ...'
- do i=1,10*1000*1000
- end do
- r1= etime (tarray1)
- if (r1.ne.tarray1(1)+tarray1(2))
- + write (6,*) '*** ETIME didn''t return sum of the array: ',
- + r1, ' /= ', tarray1
- r2= dtime (tarray2)
- if (abs (r1-r2).gt.1.0) write (6,*)
- + 'Results of ETIME and DTIME differ by more than a second:',
- + i, j
- write (6,'(A,3F10.3)')
- + ' Elapsed total, user, system time (ETIME): ',
- + r1, tarray1
- call idate(i,j,k)
- call idate (idat)
- write (6,*) 'IDATE d,m,y: ',idat
- print *, '... and the VXT version: ', i,j,k
- call time(line(:8))
- print *, line(:8)
- write (6,*) 'SECNDS(0.0) returns: ',secnds(0.0)
- write (6,*) 'SECOND returns: ', second()
- call dumdum(r1)
- call second(r1)
- write (6,*) 'CALL SECOND returns: ', r1
- i = getcwd(wd)
- if (i.ne.0) then
- call perror ('*** getcwd')
- else
- write (6,*) 'Current directory is "'//wd(:lenstr(wd))//'"'
- end if
- call chdir ('.',i)
- if (i.ne.0) write (6,*) '***CHDIR to ".": ', i
- i=hostnm(wd)
- if(i.ne.0) then
- call perror ('*** hostnm')
- else
- write (6,*) 'Host name is ', wd(:lenstr(wd))
- end if
- i = access('/dev/null ', 'rw')
- if (i.ne.0) write (6,*) '***Read/write ACCESS to /dev/null: ', i
- write (6,*) 'Creating file "foo" for testing...'
- open (3,file='foo',status='UNKNOWN')
- rewind 3
- call fputc(3, 'c',i)
- call fputc(3, 'd',j)
- if (i+j.ne.0) write(6,*) '***FPUTC: ', i
-C why is it necessary to reopen?
- close(3)
- open(3,file='foo',status='old')
- call fseek(3,0,0,*10)
- go to 20
- 10 write(6,*) '***FSEEK failed'
- 20 call fgetc(3, c,i)
- if (i.ne.0) write(6,*) '***FGETC: ', i
- if (c.ne.'c') write(6,*) '***FGETC read the wrong thing: ',
- + ichar(c)
- i= ftell(3)
- if (i.ne.1) write(6,*) '***FTELL offset: ', i
- call chmod ('foo', 'a+w',i)
- if (i.ne.0) write (6,*) '***CHMOD of "foo": ', i
- i = fstat (3, fstatb)
- if (i.ne.0) write (6,*) '***FSTAT of "foo": ', i
- i = stat ('foo', statb)
- if (i.ne.0) write (6,*) '***STAT of "foo": ', i
- write (6,*) ' with stat array ', statb
- if (statb(5).ne.getuid () .or. statb(6).ne.getgid() .or. statb(4)
- + .ne. 1) write (6,*) '*** FSTAT uid, gid or nlink is wrong'
- do i=1,13
- if (fstatb (i) .ne. statb (i))
- + write (6,*) '*** FSTAT and STAT don''t agree on '// '
- + array element ', i, ' value ', fstatb (i), statb (i)
- end do
- i = lstat ('foo', fstatb)
- do i=1,13
- if (fstatb (i) .ne. statb (i))
- + write (6,*) '*** LSTAT and STAT don''t agree on '// '
- + array element ', i, ' value ', fstatb (i), statb (i)
- end do
-
-C in case it exists already:
- call unlink ('bar',i)
- call link ('foo ', 'bar ',i)
- if (i.ne.0)
- + write (6,*) '***LINK "foo" to "bar" failed: ', i
- call unlink ('foo',i)
- if (i.ne.0) write (6,*) '***UNLINK "foo" failed: ', i
- call unlink ('foo',i)
- if (i.eq.0) write (6,*) '***UNLINK "foo" again: ', i
- call gerror (gerr)
- i = ierrno()
- write (6,'(A,I3,A/1X,A)') ' The current error number is: ',
- + i,
- + ' and the corresponding message is:', gerr(:lenstr(gerr))
- write (6,*) 'This is sent to stderr prefixed by the program name'
- call getarg (0, line)
- call perror (line (:lenstr (line)))
- call unlink ('bar')
- WRITE (6,*) 'You should see exit status 1'
- CALL EXIT(1)
- 99 END
-
- integer function lenstr (str)
-C return length of STR not including trailing blanks, but always
-C return >0
- character *(*) str
- if (str.eq.' ') then
- lenstr=1
- else
- lenstr = lnblnk (str)
- end if
- end
-* just make sure SECOND() doesn't "magically" work the second time.
- subroutine dumdum(r)
- r = 3.14159
- end
diff --git a/gcc/f/runtime/libU77/umask_.c b/gcc/f/runtime/libU77/umask_.c
deleted file mode 100644
index 203acfa916f..00000000000
--- a/gcc/f/runtime/libU77/umask_.c
+++ /dev/null
@@ -1,34 +0,0 @@
-/* Copyright (C) 1996 Free Software Foundation, Inc.
-This file is part of GNU Fortran libU77 library.
-
-This library is free software; you can redistribute it and/or modify it
-under the terms of the GNU Library General Public License as published
-by the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-GNU Fortran 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
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with GNU Fortran; see the file COPYING.LIB. If
-not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA. */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-#include <sys/types.h>
-#include <sys/stat.h>
-#include "f2c.h"
-
-#ifdef KR_headers
-integer G77_umask_0 (mask)
- integer *mask;
-#else
-integer G77_umask_0 (integer *mask)
-#endif
-{
- return umask ((mode_t) *mask);
-}
diff --git a/gcc/f/runtime/libU77/unlink_.c b/gcc/f/runtime/libU77/unlink_.c
deleted file mode 100644
index 5e7edf213bc..00000000000
--- a/gcc/f/runtime/libU77/unlink_.c
+++ /dev/null
@@ -1,55 +0,0 @@
-/* Copyright (C) 1995, 1997 Free Software Foundation, Inc.
-This file is part of GNU Fortran libU77 library.
-
-This library is free software; you can redistribute it and/or modify it
-under the terms of the GNU Library General Public License as published
-by the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-GNU Fortran 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
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with GNU Fortran; see the file COPYING.LIB. If
-not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA. */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-#if HAVE_STDLIB_H
-# include <stdlib.h>
-#else
-# include <stdio.h>
-#endif
-#if HAVE_UNISTD_H
-# include <unistd.h>
-#endif
-#include <errno.h>
-#include <sys/param.h>
-#include "f2c.h"
-
-#ifdef KR_headers
-void g_char ();
-
-integer G77_unlink_0 (str, Lstr)
- char *str; ftnlen Lstr;
-#else
-void g_char(const char *a, ftnlen alen, char *b);
-
-integer G77_unlink_0 (const char *str, const ftnlen Lstr)
-#endif
-{
- char *buff;
- char *bp, *blast;
- int i;
-
- buff = malloc (Lstr+1);
- if (buff == NULL) return -1;
- g_char (str, Lstr, buff);
- i = unlink (buff);
- free (buff);
- return i ? errno : 0; /* SGI version returns -1 on failure. */
-}
diff --git a/gcc/f/runtime/libU77/vxtidate_.c b/gcc/f/runtime/libU77/vxtidate_.c
deleted file mode 100644
index c517f29419e..00000000000
--- a/gcc/f/runtime/libU77/vxtidate_.c
+++ /dev/null
@@ -1,55 +0,0 @@
-/* Copyright (C) 1995, 1996 Free Software Foundation, Inc.
-This file is part of GNU Fortran libU77 library.
-
-This library is free software; you can redistribute it and/or modify it
-under the terms of the GNU Library General Public License as published
-by the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-GNU Fortran 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
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with GNU Fortran; see the file COPYING.LIB. If
-not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA. */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-#include <stdio.h>
-#if TIME_WITH_SYS_TIME
-# include <sys/time.h>
-# include <time.h>
-#else
-# if HAVE_SYS_TIME_H
-# include <sys/time.h>
-# else
-# include <time.h>
-# endif
-#endif
-#include "f2c.h"
-
-/* VMS and Irix versions (at least) differ from libU77 elsewhere */
-
-/* VMS style: */
-
-/* Subroutine */
-#ifdef KR_headers
-int G77_vxtidate_0 (m, d, y)
- integer *y, *m, *d;
-#else
-int G77_vxtidate_0 (integer *m, integer *d, integer *y)
-#endif
-{
- struct tm *lt;
- time_t tim;
- tim = time(NULL);
- lt = localtime(&tim);
- *y = lt->tm_year;
- *m = lt->tm_mon+1;
- *d = lt->tm_mday;
- return 0;
-}
diff --git a/gcc/f/runtime/libU77/vxttime_.c b/gcc/f/runtime/libU77/vxttime_.c
deleted file mode 100644
index 054bb45a89a..00000000000
--- a/gcc/f/runtime/libU77/vxttime_.c
+++ /dev/null
@@ -1,54 +0,0 @@
-/* Copyright (C) 1995 Free Software Foundation, Inc.
-This file is part of GNU Fortran libU77 library.
-
-This library is free software; you can redistribute it and/or modify it
-under the terms of the GNU Library General Public License as published
-by the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-GNU Fortran 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
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with GNU Fortran; see the file COPYING.LIB. If
-not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA. */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-#include <stdio.h>
-#if TIME_WITH_SYS_TIME
-# include <sys/time.h>
-# include <time.h>
-#else
-# if HAVE_SYS_TIME_H
-# include <sys/time.h>
-# else
-# include <time.h>
-# endif
-#endif
-#if HAVE_STRING_H
-# include <string.h>
-#else
-# include <strings.h>
-#endif
-#include "f2c.h"
-
-/* Subroutine */
-#ifdef KR_headers
-void G77_vxttime_0 (chtime, Lchtime)
- char chtime[8];
- ftnlen Lchtime;
-#else
-void G77_vxttime_0 (char chtime[8], const ftnlen Lchtime)
-#endif
-{
- time_t tim;
- char *ctim;
- tim = time(NULL);
- ctim = ctime (&tim);
- strncpy (chtime, ctim+11, 8);
-}
diff --git a/gcc/f/runtime/permission.netlib b/gcc/f/runtime/permission.netlib
deleted file mode 100644
index 261b719bc57..00000000000
--- a/gcc/f/runtime/permission.netlib
+++ /dev/null
@@ -1,23 +0,0 @@
-/****************************************************************
-Copyright 1990 - 1997 by AT&T, Lucent Technologies and Bellcore.
-
-Permission to use, copy, modify, and distribute this software
-and its documentation for any purpose and without fee is hereby
-granted, provided that the above copyright notice appear in all
-copies and that both that the copyright notice and this
-permission notice and warranty disclaimer appear in supporting
-documentation, and that the names of AT&T, Bell Laboratories,
-Lucent or Bellcore or any of their entities not be used in
-advertising or publicity pertaining to distribution of the
-software without specific, written prior permission.
-
-AT&T, Lucent and Bellcore disclaim all warranties with regard to
-this software, including all implied warranties of
-merchantability and fitness. In no event shall AT&T, Lucent or
-Bellcore be liable for any special, indirect or consequential
-damages or any damages whatsoever resulting from loss of use,
-data or profits, whether in an action of contract, negligence or
-other tortious action, arising out of or in connection with the
-use or performance of this software.
-****************************************************************/
-
diff --git a/gcc/f/runtime/readme.netlib b/gcc/f/runtime/readme.netlib
deleted file mode 100644
index 5d2ac98226f..00000000000
--- a/gcc/f/runtime/readme.netlib
+++ /dev/null
@@ -1,590 +0,0 @@
-
-====== old index for f2c, now "readme from f2c" ============
-
-FILES:
-
-f2c.h Include file necessary for compiling output of the converter.
- See the second NOTE below.
-
-f2c.1 Man page for f2c.
-
-f2c.1t Source for f2c.1 (to be processed by troff -man or nroff -man).
-
-libf77 Library of non I/O support routines the generated C may need.
- Fortran main programs result in a C function named MAIN__ that
- is meant to be invoked by the main() in libf77.
-
-libi77 Library of Fortran I/O routines the generated C may need.
- Note that some vendors (e.g., BSD, Sun and MIPS) provide a
- libF77 and libI77 that are incompatible with f2c -- they
- provide some differently named routines or routines with the
- names that f2c expects, but with different calling sequences.
- On such systems, the recommended procedure is to merge
- libf77 and libi77 into a single library, say libf2c, and to
- install it where you can access it by specifying -lf2c . The
- definition of link_msg in sysdep.c assumes this arrangement.
-
- Both libf77 and libi77 are bundles, meant to be unpacked by the
- Bourne (or Korn) shell. MS-DOS users can use the MKS Toolkit
- to unpack libf77 and libi77.
-
-libf2c.zip
- Only available by ftp: combination of libf77 and libi77, with
- Unix and PC makefiles.
-
-f2c.ps Postscript for a technical report on f2c. After you strip the
- mail header, the first line should be "%!PS".
-
-fixes The complete change log, reporting bug fixes and other changes.
- (Some recent change-log entries are given below).
-
-fc A shell script that uses f2c and imitates much of the behavior
- of commonly found f77 commands. You will almost certainly
- need to adjust some of the shell-variable assignments to make
- this script work on your system.
-
-
-SUBDIRECTORY:
-
-f2c/src Source for the converter itself, including a file of checksums
- and source for a program to compute the checksums (to verify
- correct transmission of the source), is available: ask netlib
- (e.g., netlib@netlib.bell-labs.com) to
- send all from f2c/src
- If the checksums show damage to just a few source files, or if
- the change log file (see "fixes" below) reports corrections to
- some source files, you can request those files individually
- "from f2c/src". For example, to get defs.h and xsum0.out, you
- would ask netlib to
- send defs.h xsum0.out from f2c/src
- "all from f2c/src" is about 640 kilobytes long; for convenience
- (and checksums), it includes copies of f2c.h, f2c.1, and f2c.1t.
-
- Tip: if asked to send over 99,000 bytes in one request, netlib
- breaks the shipment into 1000 line pieces and sends each piece
- separately (since otherwise some mailers might gag). To avoid
- the hassle of reassembling the pieces, try to keep each request
- under 99,000 bytes long. The final number in each line of
- xsum0.out gives the length of each file in f2c/src. For
- example,
- send exec.c expr.c from f2c/src
- send format.c format_data.c from f2c/src
- will give you slightly less hassle than
- send exec.c expr.c format.c format_data.c from f2c/src
- Alternatively, if all the mailers in your return path allow
- long messages, you can supply an appropriate mailsize line in
- your netlib request, e.g.
- mailsize 200k
- send exec.c expr.c format.c format_data.c from f2c/src
-
- If you have trouble generating gram.c, you can ask netlib to
- send gram.c from f2c/src
- Then `xsum gram.c` should report
- gram.c 5529f4f 58745
- Alternatively, if you have bison, you might get a working
- gram.c by saying
- make gram.c YACC=bison YFLAGS=-y
- (but please do not complain if this gives a bad gram.c).
-
-NOTE: For now, you may exercise f2c by sending netlib a message whose
- first line is "execute f2c" and whose remaining lines are
- the Fortran 77 source that you wish to have converted.
- Return mail brings you the resulting C, with f2c's error
- messages between #ifdef uNdEfInEd and #endif at the end.
- (To understand line numbers in the error messages, regard
- the "execute f2c" line as line 0. It is stripped away by
- the netlib software before f2c sees your Fortran input.)
- Options described in the man page may be transmitted to
- netlib by having the first line of input be a comment
- whose first 6 characters are "c$f2c " and whose remaining
- characters are the desired options, e.g., "c$f2c -R -u".
-
- You may say "execute f2c" in the Subject line instead of (but
- *not* in addition to) in the first line of the message body.
-
- The incoming Fortran is saved, at least for a while. Don't
- send any secrets!
-
-
-BUGS: Please send bug reports (including the shortest example
- you can find that illustrates the bug) to research!dmg
- or dmg@bell-labs.com . You might first check whether
- the bug goes away when you turn optimization off.
-
-
-NOTE: f2c.h defines several types, e.g., real, integer, doublereal.
- The definitions in f2c.h are suitable for most machines, but if
- your machine has sizeof(double) > 2*sizeof(long), you may need
- to adjust f2c.h appropriately. f2c assumes
- sizeof(doublecomplex) = 2*sizeof(doublereal)
- sizeof(doublereal) = sizeof(complex)
- sizeof(doublereal) = 2*sizeof(real)
- sizeof(real) = sizeof(integer)
- sizeof(real) = sizeof(logical)
- sizeof(real) = 2*sizeof(shortint)
- EQUIVALENCEs may not be translated correctly if these
- assumptions are violated.
-
- On machines, such as those using a DEC Alpha processor, on
- which sizeof(short) == 2, sizeof(int) == sizeof(float) == 4,
- and sizeof(long) == sizeof(double) == 8, it suffices to
- modify f2c.h by removing the first occurrence of "long "
- on each line containing "long ", e.g., by issuing the
- commands
- mv f2c.h f2c.h0
- sed 's/long //' f2c.h0 >f2c.h
- On such machines, one can enable INTEGER*8 by uncommenting
- the typedef of longint in f2c.h, so it reads
- typedef long longint;
- by compiling libI77 with -DAllow_TYQUAD, and by adjusting
- libF77/makefile as described in libF77/README.
-
- Some machines may have sizeof(int) == 4 and
- sizeof(long long) == 8. On such machines, adjust f2c.h
- by changing "long int " to "long long ", e.g., by saying
- mv f2c.h f2c.h0
- sed 's/long int /long long /' f2c.h0 >f2c.h
- One can enable INTEGER*8 on such machines as described
- above, but with
- typedef long long longint;
-
- There exists a C compiler that objects to the lines
- typedef VOID C_f; /* complex function */
- typedef VOID H_f; /* character function */
- typedef VOID Z_f; /* double complex function */
- in f2c.h . If yours is such a compiler, do two things:
- 1. Complain to your vendor about this compiler bug.
- 2. Find the line
- #define VOID void
- in f2c.h and change it to
- #define VOID int
- (For readability, the f2c.h lines shown above have had two
- tabs inserted before their first character.)
-
-FTP: All the material described above is now available by anonymous
- ftp from netlib.bell-labs.com (login: anonymous; Password: your
- E-mail address; cd netlib/f2c). Note that you can say, e.g.,
-
- cd /netlib/f2c/src
- binary
- prompt
- mget *.Z
-
- to get all the .Z files in src. You must uncompress the .Z
- files once you have a copy of them, e.g., by
-
- uncompress *.Z
-
- Subdirectory msdos contains two PC versions of f2c,
- f2c.exe.Z and f2cx.exe.Z; the latter uses extended memory.
- The README in that directory provides more details.
-
- Changes appear first in the f2c files available by E-mail
- from netlib@netlib.bell-labs.com. If the deamons work right,
- changed files are available the next day by ftp from
- netlib.bell-labs.com. In due course, they reach other netlib servers.
-
-CHANGE NOTIFICATION:
- Send the E-mail message
- subscribe f2c
- to netlib@netlib.bell-labs.com to request notification of new and
- changed f2c files. (Beware that automatically sent change
- notifications may reach you before changes have reached
- ftp://netlib.bell-labs.com/netlib/f2c or to other netlib servers.)
- Send the E-mail message
- unsubscribe f2c
- to recant your notification request.
-
------------------
-Recent change log (partial)
------------------
-
-Mon May 13 23:35:26 EDT 1996
- Recognize Fortran 90's /= as a synonym for .NE.. (<> remains a
-synonym for .NE..)
- Emit an empty int function of no arguments to supply an external
-name to named block data subprograms (so they can be called somewhere
-to force them to be loaded from a library).
- Fix bug (memory fault) in handling the following illegal Fortran:
- parameter(i=1)
- equivalence(i,j)
- end
- Treat cdabs, cdcos, cdexp, cdlog, cdsin, and cdsqrt as synonyms for
-the double complex intrinsics zabs, zcos, zexp, zlog, zsin, and zsqrt,
-respectively, unless -cd is specified.
- Recognize the Fortran 90 bit-manipulation intrinsics btest, iand,
-ibclr, ibits, ibset, ieor, ior, ishft, and ishftc, unless -i90 is
-specified. Note that iand, ieor, and ior are thus now synonyms for
-"and", "xor", and "or", respectively.
- Add three macros (bit_test, bit_clear, bit_set) to f2c.h for use
-with btest, ibclr, and ibset, respectively. Add new functions
-[lq]bit_bits, [lq]bit_shift, and [lq]_bit_cshift to libF77 for
-use with ibits, ishft, and ishftc, respectively.
- Add integer function ftell(unit) (returning -1 on error) and
-subroutine fseek(unit, offset, whence, *) to libI77 (with branch to
-label * on error).
-
-Tue May 14 23:21:12 EDT 1996
- Fix glitch (possible memory fault, or worse) in handling multiple
-entry points with names over 28 characters long.
-
-Mon Jun 10 01:20:16 EDT 1996
- Update netlib E-mail and ftp addresses in f2c/readme and
-f2c/src/readme (which are different files) -- to reflect the upcoming
-breakup of AT&T.
- libf77: trivial tweaks to F77_aloc.c and system_.c; Version.c not
-changed.
- libi77: Adjust rsli.c and lread.c so internal list input with too
-few items in the input string will honor end= .
-
-Mon Jun 10 22:59:57 EDT 1996
- Add Bits_per_Byte to sysdep.h and adjust definition of Table_size
-to depend on Bits_per_Byte (forcing Table_size to be a power of 2); in
-lex.c, change "comstart[c & 0xfff]" to "comstart[c & (Table_size-1)]"
-to avoid an out-of-range subscript on end-of-file.
-
-Wed Jun 12 00:24:28 EDT 1996
- Fix bug in output.c (dereferencing a freed pointer) revealed in
- print * !np in out_call in output.c clobbered by free
- end !during out_expr.
-
-Wed Jun 19 08:12:47 EDT 1996
- f2c.h: add types uinteger, ulongint (for libF77); add qbit_clear
-and qbit_set macros (in a commented-out section) for integer*8.
- For integer*8, use qbit_clear and qbit_set for ibclr and ibset.
- libf77: add casts to unsigned in [lq]bitshft.c.
-
-Thu Jun 20 13:30:43 EDT 1996
- Complain at character*(*) in common (rather than faulting).
- Fix bug in recognizing hex constants that start with "16#" (e.g.,
-16#1234abcd, which is a synonym for z'1234abcd').
- Fix bugs in constant folding of expressions involving btest, ibclr,
-and ibset.
- Fix bug in constant folding of rshift(16#80000000, -31) (on a 32-bit
-machine; more generally, the bug was in constant folding of
-rshift(ibset(0,NBITS-1), 1-NBITS) when f2c runs on a machine with
-long ints having NBITS bits.
-
-Mon Jun 24 07:58:53 EDT 1996
- Adjust struct Literal and newlabel() function to accommodate huge
-source files (with more than 32767 newlabel() invocations).
- Omit .c file when the .f file has a missing final end statement.
-
-Wed Jun 26 14:00:02 EDT 1996
- libi77: Add discussion of MXUNIT (highest allowed Fortran unit number)
-to libI77/README.
-
-Fri Jun 28 14:16:11 EDT 1996
- Fix glitch with -onetrip: the temporary variable used for nonconstant
-initial loop variable values was recycled too soon. Example:
- do i = j+1, k
- call foo(i+1) ! temp for j+1 was reused here
- enddo
- end
-
-Tue Jul 2 16:11:27 EDT 1996
- formatdata.c: add a 0 to the end of the basetype array (for TYBLANK)
-(an omission that was harmless on most machines).
- expr.c: fix a dereference of NULL that was only possible with buggy
-input, such as
- subroutine $sub(s) ! the '$' is erroneous
- character s*(*)
- s(1:) = ' '
- end
-
-Sat Jul 6 00:44:56 EDT 1996
- Fix glitch in the intrinsic "real" function when applied to a
-complex (or double complex) variable and passed as an argument to
-some intrinsic functions. Example:
- complex a
- b = sqrt(real(a))
- end
- Fix glitch (only visible if you do not use f2c's malloc and the
-malloc you do use is defective in the sense that malloc(0) returns 0)
-in handling include files that end with another include (perhaps
-followed by comments).
- Fix glitch with character*(*) arguments named "h" and "i" when
-the body of the subroutine invokes the intrinsic LEN function.
- Arrange that after a previous "f2c -P foo.f" has produced foo.P,
-running "f2c foo.P foo.f" will produce valid C when foo.f contains
- call sub('1234')
- end
- subroutine sub(msg)
- end
-Specifically, the length argument in "call sub" is now suppressed.
-With or without foo.P, it is also now suppressed when the order of
-subprograms in file foo.f is reversed:
- subroutine sub(msg)
- end
- call sub('1234')
- end
- Adjust copyright notices to reflect AT&T breakup.
-
-Wed Jul 10 09:25:49 EDT 1996
- Fix bug (possible memory fault) in handling erroneously placed
-and inconsistent declarations. Example that faulted:
- character*1 w(8)
- call foo(w)
- end
- subroutine foo(m)
- data h /0.5/
- integer m(2) ! should be before data
- end
- Fix bug (possible fault) in handling illegal "if" constructions.
-Example (that faulted):
- subroutine foo(i,j)
- if (i) then ! bug: i is integer, not logical
- else if (j) then ! bug: j is integer, not logical
- endif
- end
- Fix glitch with character*(*) argument named "ret_len" to a
-character*(*) function.
-
-Wed Jul 10 23:04:16 EDT 1996
- Fix more glitches in the intrinsic "real" function when applied to a
-complex (or double complex) variable and passed as an argument to
-some intrinsic functions. Example:
- complex a, b
- r = sqrt(real(conjg(a))) + sqrt(real(a*b))
- end
-
-Thu Jul 11 17:27:16 EDT 1996
- Fix a memory fault associated with complicated, illegal input.
-Example:
- subroutine goo
- character a
- call foo(a) ! inconsistent with subsequent def and call
- end
- subroutine foo(a)
- end
- call foo(a)
- end
-
-Wed Jul 17 19:18:28 EDT 1996
- Fix yet another case of intrinsic "real" applied to a complex
-argument. Example:
- complex a(3)
- x = sqrt(real(a(2))) ! gave error message about bad tag
- end
-
-Mon Aug 26 11:28:57 EDT 1996
- Tweak sysdep.c for non-Unix systems in which process ID's can be
-over 5 digits long.
-
-Tue Aug 27 08:31:32 EDT 1996
- Adjust the ishft intrinsic to use unsigned right shifts. (Previously,
-a negative constant second operand resulted in a possibly signed shift.)
-
-Thu Sep 12 14:04:07 EDT 1996
- equiv.c: fix glitch with -DKR_headers.
- libi77: fmtlib.c: fix bug in printing the most negative integer.
-
-Fri Sep 13 08:54:40 EDT 1996
- Diagnose some illegal appearances of substring notation.
-
-Tue Sep 17 17:48:09 EDT 1996
- Fix fault in handling some complex parameters. Example:
- subroutine foo(a)
- double complex a, b
- parameter(b = (0,1))
- a = b ! f2c faulted here
- end
-
-Thu Sep 26 07:47:10 EDT 1996
- libi77: fmt.h: for formatted writes of negative integer*1 values,
-make ic signed on ANSI systems. If formatted writes of integer*1
-values trouble you when using a K&R C compiler, switch to an ANSI
-compiler or use a compiler flag that makes characters signed.
-
-Tue Oct 1 14:41:36 EDT 1996
- Give a better error message when dummy arguments appear in data
-statements.
-
-Thu Oct 17 13:37:22 EDT 1996
- Fix bug in typechecking arguments to character and complex (or
-double complex) functions; the bug could cause length arguments
-for character arguments to be omitted on invocations appearing
-textually after the first invocation. For example, in
- subroutine foo
- character c
- complex zot
- call goo(zot(c), zot(c))
- end
-the length was omitted from the second invocation of zot, and
-there was an erroneous error message about inconsistent calling
-sequences.
-
-Wed Dec 4 13:59:14 EST 1996
- Fix bug revealed by
- subroutine test(cdum,rdum)
- complex cdum
- rdum=cos(real(cdum)) ! "Unexpected tag 3 in opconv_fudge"
- end
- Fix glitch in parsing "DO 10 D0 = 1, 10".
- Fix glitch in parsing
- real*8 x
- real*8 x ! erroneous "incompatible type" message
- call foo(x)
- end
- lib[FI]77/makefile: add comment about omitting -x under Solaris.
-
-Mon Dec 9 23:15:02 EST 1996
- Fix glitch in parameter adjustments for arrays whose lower
-bound depends on a scalar argument. Example:
- subroutine bug(p,z,m,n)
- integer z(*),m,n
- double precision p(z(m):z(m) + n) ! p_offset botched
- call foo(p(0), p(n))
- end
- libi77: complain about non-positive rec= in direct read and write
-statements.
- libf77: trivial adjustments; Version.c not changed.
-
-Wed Feb 12 00:18:03 EST 1997
- output.c: fix (seldom problematic) glitch in out_call: put parens
-around the ... in a test of the form "if (q->tag == TADDR && ...)".
- vax.c: fix bug revealed in the "psi_offset =" assignment in the
-following example:
- subroutine foo(psi,m)
- integer z(100),m
- common /a/ z
- double precision psi(z(m):z(m) + 10)
- call foo(m+1, psi(0),psi(10))
- end
-
-Mon Feb 24 23:44:54 EST 1997
- For consistency with f2c's current treatment of adjacent character
-strings in FORMAT statements, recognize a Hollerith string following
-a string (and merge adjacent strings in FORMAT statements).
-
-Wed Feb 26 13:41:11 EST 1997
- New libf2c.zip, a combination of the libf77 and libi77 bundles (and
-available only by ftp).
- libf77: adjust functions with a complex output argument to permit
-aliasing it with input arguments. (For now, at least, this is just
-for possible benefit of g77.)
- libi77: tweak to ftell_.c for systems with strange definitions of
-SEEK_SET, etc.
-
-Tue Apr 8 20:57:08 EDT 1997
- libf77: [cz]_div.c: tweaks invisible on most systems (that may
-improve things slightly with optimized compilation on systems that use
-gratuitous extra precision).
- libi77: fmt.c: adjust to complain at missing numbers in formats
-(but still treat missing ".nnn" as ".0").
-
-Fri Apr 11 14:05:57 EDT 1997
- libi77: err.c: attempt to make stderr line buffered rather than
-fully buffered. (Buffering is needed for format items T and TR.)
-
-Thu Apr 17 22:42:43 EDT 1997
- libf77: add F77_aloc.o to makefile (and makefile.u in libf2c.zip).
-
-Fri Apr 25 19:32:09 EDT 1997
- libf77: add [de]time_.c (which may give trouble on some systems).
-
-Tue May 27 09:18:52 EDT 1997
- libi77: ftell_.c: fix typo that caused the third argument to be
-treated as 2 on some systems.
-
-Mon Jun 9 00:04:37 EDT 1997
- libi77 (and libf2c.zip): adjust include order in err.c lread.c wref.c
-rdfmt.c to include fmt.h (etc.) after system includes. Version.c not
-changed.
-
-Mon Jun 9 14:29:13 EDT 1997
- src/gram.c updated; somehow it did not reflect the change of
-19961001 to gram.dcl.
-
-Mon Jul 21 16:04:54 EDT 1997
- proc.c: fix glitch in logic for "nonpositive dimension" message.
- libi77: inquire.c: always include string.h (for possible use with
--DNON_UNIX_STDIO); Version.c not changed.
-
-Thu Jul 24 17:11:23 EDT 1997
- Tweak "Notice" to reflect the AT&T breakup -- we missed it when
-updating the copyright notices in the source files last summer.
- Adjust src/makefile so malloc.o is not used by default, but can
-be specified with "make MALLOC=malloc.o".
- Add comments to src/README about the "CRAY" T3E.
-
-Tue Aug 5 14:53:25 EDT 1997
- Add definition of calloc to malloc.c; this makes f2c's malloc
-work on some systems where trouble hitherto arose because references
-to calloc brought in the system's malloc. (On sensible systems,
-calloc is defined separately from malloc. To avoid confusion on
-other systems, f2c/malloc.c now defines calloc.)
- libi77: lread.c: adjust to accord with a change to the Fortran 8X
-draft (in 1990 or 1991) that rescinded permission to elide quote marks
-in namelist input of character data; to get the old behavior, compile
-with F8X_NML_ELIDE_QUOTES #defined. wrtfmt.o: wrt_G: tweak to print
-the right number of 0's for zero under G format.
-
-Sat Aug 16 05:45:32 EDT 1997
- libI77: iio.c: fix bug in internal writes to an array of character
-strings that sometimes caused one more array element than required by
-the format to be blank-filled. Example: format(1x).
-
-Current timestamps of files in "all from f2c/src", sorted by time,
-appear below (mm/dd/year hh:mm:ss). To bring your source up to date,
-obtain source files with a timestamp later than the time shown in your
-version.c. Note that the time shown in the current version.c is the
-timestamp of the source module that immediately follows version.c below:
-
- 8/05/1997 14:51:56 xsum0.out
- 8/05/1997 14:42:48 version.c
- 8/05/1997 10:31:26 malloc.c
- 7/24/1997 17:10:55 README
- 7/24/1997 17:00:57 makefile
- 7/24/1997 16:06:19 Notice
- 7/21/1997 12:58:44 proc.c
- 2/19/1997 13:34:09 lex.c
- 2/11/1997 23:39:14 vax.c
-12/22/1996 11:51:22 output.c
-12/04/1996 13:07:53 gram.exec
-10/17/1996 13:10:40 putpcc.c
-10/01/1996 14:36:18 gram.dcl
-10/01/1996 14:36:18 init.c
-10/01/1996 14:36:18 defs.h
-10/01/1996 14:36:17 data.c
- 9/17/1996 17:29:44 expr.c
- 9/12/1996 12:12:46 equiv.c
- 8/27/1996 8:30:32 intr.c
- 8/26/1996 9:41:13 sysdep.c
- 7/09/1996 10:41:13 format.c
- 7/09/1996 10:40:45 names.c
- 7/04/1996 9:58:31 formatdata.c
- 7/04/1996 9:55:45 sysdep.h
- 7/04/1996 9:55:43 put.c
- 7/04/1996 9:55:41 pread.c
- 7/04/1996 9:55:40 parse_args.c
- 7/04/1996 9:55:40 p1output.c
- 7/04/1996 9:55:38 niceprintf.c
- 7/04/1996 9:55:37 misc.c
- 7/04/1996 9:55:36 memset.c
- 7/04/1996 9:55:36 mem.c
- 7/04/1996 9:55:35 main.c
- 7/04/1996 9:55:33 io.c
- 7/04/1996 9:55:30 exec.c
- 7/04/1996 9:55:29 error.c
- 7/04/1996 9:55:27 cds.c
- 7/03/1996 15:47:49 xsum.c
- 6/19/1996 7:04:27 f2c.h
- 6/19/1996 2:52:05 defines.h
- 5/13/1996 0:40:32 gram.head
- 5/12/1996 23:37:11 f2c.1
- 5/12/1996 23:37:02 f2c.1t
- 2/25/1994 2:07:19 parse.h
- 2/22/1994 19:07:20 iob.h
- 2/22/1994 18:56:53 p1defs.h
- 2/22/1994 18:53:46 output.h
- 2/22/1994 18:51:14 names.h
- 2/22/1994 18:30:41 format.h
- 1/18/1994 18:12:52 tokens
- 3/06/1993 14:13:58 gram.expr
- 1/28/1993 9:03:16 ftypes.h
- 4/06/1990 0:00:57 gram.io
- 2/03/1990 0:58:26 niceprintf.h
- 1/07/1990 1:20:01 usignal.h
-11/27/1989 8:27:37 machdefs.h
- 7/01/1989 11:59:44 pccdefs.h
diff --git a/gcc/f/src.c b/gcc/f/src.c
index 095c0481af9..fe39961daa2 100644
--- a/gcc/f/src.c
+++ b/gcc/f/src.c
@@ -234,10 +234,12 @@ ffesrc_strcmp_1ns2i (ffeCase mcase, const char *var, int len,
c = ffesrc_toupper (c); /* Upcase source. */
d = ffesrc_toupper (*str_ic); /* Upcase InitialCaps char. */
if (c != d)
- if ((d != '\0') && (c < d))
- return -1;
- else
- return 1;
+ {
+ if ((d != '\0') && (c < d))
+ return -1;
+ else
+ return 1;
+ }
}
break;
@@ -247,10 +249,12 @@ ffesrc_strcmp_1ns2i (ffeCase mcase, const char *var, int len,
c = ffesrc_char_source (*var); /* Transform source. */
d = ffesrc_toupper (*str_ic); /* Transform InitialCaps char. */
if (c != d)
- if ((d != '\0') && (c < d))
- return -1;
- else
- return 1;
+ {
+ if ((d != '\0') && (c < d))
+ return -1;
+ else
+ return 1;
+ }
}
break;
@@ -260,10 +264,12 @@ ffesrc_strcmp_1ns2i (ffeCase mcase, const char *var, int len,
c = ffesrc_char_source (*var); /* Transform source. */
d = ffesrc_tolower (*str_ic); /* Transform InitialCaps char. */
if (c != d)
- if ((d != '\0') && (c < d))
- return -1;
- else
- return 1;
+ {
+ if ((d != '\0') && (c < d))
+ return -1;
+ else
+ return 1;
+ }
}
break;
@@ -320,10 +326,12 @@ ffesrc_strcmp_2c (ffeCase mcase, const char *var, const char *str_uc,
{
c = ffesrc_toupper (*var); /* Upcase source. */
if (c != *str_uc)
- if ((*str_uc != '\0') && (c < *str_uc))
- return -1;
- else
- return 1;
+ {
+ if ((*str_uc != '\0') && (c < *str_uc))
+ return -1;
+ else
+ return 1;
+ }
}
if (*str_uc == '\0')
return 0;
@@ -388,10 +396,12 @@ ffesrc_strncmp_2c (ffeCase mcase, const char *var, const char *str_uc,
{
c = ffesrc_toupper (*var); /* Upcase source. */
if (c != *str_uc)
- if (c < *str_uc)
- return -1;
- else
- return 1;
+ {
+ if (c < *str_uc)
+ return -1;
+ else
+ return 1;
+ }
}
return 0;
diff --git a/gcc/f/sta.c b/gcc/f/sta.c
index 328bfd0f662..281ca936133 100644
--- a/gcc/f/sta.c
+++ b/gcc/f/sta.c
@@ -1792,9 +1792,11 @@ ffesta_ffebad_2t (ffebad errnum, ffelexToken t1, ffelexToken t2)
}
}
-/* ffesta_set_outpooldisp -- Set disposition of statement output pool
-
- ffesta_set_outpooldisp(FFESTA_pooldispPRESERVE); */
+ffestaPooldisp
+ffesta_outpooldisp ()
+{
+ return ffesta_outpooldisp_;
+}
void
ffesta_set_outpooldisp (ffestaPooldisp d)
diff --git a/gcc/f/sta.h b/gcc/f/sta.h
index 132d0e84d4b..26e78c412ce 100644
--- a/gcc/f/sta.h
+++ b/gcc/f/sta.h
@@ -98,6 +98,7 @@ void ffesta_ffebad_2st (ffebad msg, char *s, ffelexToken t1, ffelexToken t2);
void ffesta_ffebad_2t (ffebad msg, ffelexToken t1, ffelexToken t2);
ffelexHandler ffesta_zero (ffelexToken t);
ffelexHandler ffesta_two (ffelexToken first, ffelexToken second);
+ffestaPooldisp ffesta_outpooldisp (void);
void ffesta_set_outpooldisp (ffestaPooldisp d);
/* Define macros. */
diff --git a/gcc/f/stb.c b/gcc/f/stb.c
index 2bee98a9fa5..90ae83d5637 100644
--- a/gcc/f/stb.c
+++ b/gcc/f/stb.c
@@ -3773,10 +3773,12 @@ ffestb_halt1_ (ffelexToken ft, ffebld expr, ffelexToken t)
case FFELEX_typeSEMICOLON:
ffesta_confirmed ();
if (!ffesta_is_inhibited ())
- if (ffesta_first_kw == FFESTR_firstSTOP)
- ffestc_R842 (expr, ft);
- else
- ffestc_R843 (expr, ft);
+ {
+ if (ffesta_first_kw == FFESTR_firstSTOP)
+ ffestc_R842 (expr, ft);
+ else
+ ffestc_R843 (expr, ft);
+ }
return (ffelexHandler) ffesta_zero (t);
default:
@@ -9212,14 +9214,14 @@ ffestb_R10014_ (ffelexToken t)
}
if (ffestb_local_.format.sign)
{
- for (i = 0; i < ffelex_token_length (t); ++i)
+ for (i = ffelex_token_length (t) + 1; i > 0; --i)
ffestb_local_.format.pre.u.signed_val *= 10;
ffestb_local_.format.pre.u.signed_val += strtoul (ffelex_token_text (t),
NULL, 10);
}
else
{
- for (i = 0; i < ffelex_token_length (t); ++i)
+ for (i = ffelex_token_length (t) + 1; i > 0; --i)
ffestb_local_.format.pre.u.unsigned_val *= 10;
ffestb_local_.format.pre.u.unsigned_val += strtoul (ffelex_token_text (t),
NULL, 10);
@@ -10103,7 +10105,7 @@ ffestb_R10016_ (ffelexToken t)
ffebad_finish ();
return (ffelexHandler) ffestb_R10016_;
}
- for (i = 0; i < ffelex_token_length (t); ++i)
+ for (i = ffelex_token_length (t) + 1; i > 0; --i)
ffestb_local_.format.post.u.unsigned_val *= 10;
ffestb_local_.format.post.u.unsigned_val += strtoul (ffelex_token_text (t),
NULL, 10);
@@ -10203,7 +10205,7 @@ ffestb_R10018_ (ffelexToken t)
ffebad_finish ();
return (ffelexHandler) ffestb_R10018_;
}
- for (i = 0; i < ffelex_token_length (t); ++i)
+ for (i = ffelex_token_length (t) + 1; i > 0; --i)
ffestb_local_.format.dot.u.unsigned_val *= 10;
ffestb_local_.format.dot.u.unsigned_val += strtoul (ffelex_token_text (t),
NULL, 10);
@@ -10330,7 +10332,7 @@ ffestb_R100110_ (ffelexToken t)
ffebad_finish ();
return (ffelexHandler) ffestb_R100110_;
}
- for (i = 0; i < ffelex_token_length (t); ++i)
+ for (i = ffelex_token_length (t) + 1; i > 0; --i)
ffestb_local_.format.exp.u.unsigned_val *= 10;
ffestb_local_.format.exp.u.unsigned_val += strtoul (ffelex_token_text (t),
NULL, 10);
@@ -15553,11 +15555,13 @@ ffestb_R90910_ (ffelexToken ft, ffebld expr, ffelexToken t)
case FFELEX_typeCOMMA:
case FFELEX_typeCLOSE_PAREN:
if (expr == NULL)
- if (ffestb_local_.read.context == FFEEXPR_contextFILEFORMAT)
- ffestp_file.read.read_spec[ffestb_local_.read.ix]
- .value_is_label = TRUE;
- else
- break;
+ {
+ if (ffestb_local_.read.context == FFEEXPR_contextFILEFORMAT)
+ ffestp_file.read.read_spec[ffestb_local_.read.ix]
+ .value_is_label = TRUE;
+ else
+ break;
+ }
ffestp_file.read.read_spec[ffestb_local_.read.ix].value_present
= TRUE;
ffestp_file.read.read_spec[ffestb_local_.read.ix].value
@@ -16169,11 +16173,13 @@ ffestb_R9109_ (ffelexToken ft, ffebld expr, ffelexToken t)
case FFELEX_typeCOMMA:
case FFELEX_typeCLOSE_PAREN:
if (expr == NULL)
- if (ffestb_local_.write.context == FFEEXPR_contextFILEFORMAT)
- ffestp_file.write.write_spec[ffestb_local_.write.ix]
- .value_is_label = TRUE;
- else
- break;
+ {
+ if (ffestb_local_.write.context == FFEEXPR_contextFILEFORMAT)
+ ffestp_file.write.write_spec[ffestb_local_.write.ix]
+ .value_is_label = TRUE;
+ else
+ break;
+ }
ffestp_file.write.write_spec[ffestb_local_.write.ix].value_present
= TRUE;
ffestp_file.write.write_spec[ffestb_local_.write.ix].value
diff --git a/gcc/f/stc.c b/gcc/f/stc.c
index ef91d7188dd..872b81756ad 100644
--- a/gcc/f/stc.c
+++ b/gcc/f/stc.c
@@ -8238,16 +8238,18 @@ ffestc_R544_equiv_ (ffebld expr, ffelexToken t)
/* See if symbol has an equivalence object already. */
if (ffesymbol_equiv (s) != NULL)
- if (ffestc_local_.equiv.eq == NULL)
- ffestc_local_.equiv.eq = ffesymbol_equiv (s); /* New equiv obj. */
- else if (ffestc_local_.equiv.eq != ffesymbol_equiv (s))
- {
- ffestc_local_.equiv.eq = ffeequiv_merge (ffesymbol_equiv (s),
- ffestc_local_.equiv.eq,
- t);
- if (ffestc_local_.equiv.eq == NULL)
- ffestc_local_.equiv.ok = FALSE; /* Couldn't merge. */
- }
+ {
+ if (ffestc_local_.equiv.eq == NULL)
+ ffestc_local_.equiv.eq = ffesymbol_equiv (s); /* New equiv obj. */
+ else if (ffestc_local_.equiv.eq != ffesymbol_equiv (s))
+ {
+ ffestc_local_.equiv.eq = ffeequiv_merge (ffesymbol_equiv (s),
+ ffestc_local_.equiv.eq,
+ t);
+ if (ffestc_local_.equiv.eq == NULL)
+ ffestc_local_.equiv.ok = FALSE; /* Couldn't merge. */
+ }
+ }
if (ffesymbol_is_save (s))
ffestc_local_.equiv.save = TRUE;
diff --git a/gcc/f/std.c b/gcc/f/std.c
index ea497425d9c..dac22817dab 100644
--- a/gcc/f/std.c
+++ b/gcc/f/std.c
@@ -546,6 +546,7 @@ static void ffestd_R1001dump_1010_4_ (ffests s, ffesttFormatList f,
static void ffestd_R1001dump_1010_5_ (ffests s, ffesttFormatList f,
char *string);
static void ffestd_R1001error_ (ffesttFormatList f);
+static void ffestd_R1001rtexpr_ (ffests s, ffesttFormatList f, ffebld expr);
/* Internal macros. */
@@ -661,9 +662,10 @@ ffestd_stmt_pass_ ()
{
ffestdStmt_ stmt;
ffestdExprItem_ expr; /* For traversing lists. */
+ bool okay = (TREE_CODE (current_function_decl) != ERROR_MARK);
#if FFECOM_targetCURRENT == FFECOM_targetGCC
- if (ffestd_2pass_entrypoints_ != 0)
+ if ((ffestd_2pass_entrypoints_ != 0) && okay)
{
tree which = ffecom_which_entrypoint_decl ();
tree value;
@@ -717,83 +719,97 @@ ffestd_stmt_pass_ ()
{
case FFESTD_stmtidENDDOLOOP_:
ffestd_subr_line_restore_ (stmt);
- ffeste_do (stmt->u.enddoloop.block);
+ if (okay)
+ ffeste_do (stmt->u.enddoloop.block);
ffestw_kill (stmt->u.enddoloop.block);
break;
case FFESTD_stmtidENDLOGIF_:
ffestd_subr_line_restore_ (stmt);
- ffeste_end_R807 ();
+ if (okay)
+ ffeste_end_R807 ();
break;
case FFESTD_stmtidEXECLABEL_:
- ffeste_labeldef_branch (stmt->u.execlabel.label);
+ if (okay)
+ ffeste_labeldef_branch (stmt->u.execlabel.label);
break;
case FFESTD_stmtidFORMATLABEL_:
- ffeste_labeldef_format (stmt->u.formatlabel.label);
+ if (okay)
+ ffeste_labeldef_format (stmt->u.formatlabel.label);
break;
case FFESTD_stmtidR737A_:
ffestd_subr_line_restore_ (stmt);
- ffeste_R737A (stmt->u.R737A.dest, stmt->u.R737A.source);
+ if (okay)
+ ffeste_R737A (stmt->u.R737A.dest, stmt->u.R737A.source);
malloc_pool_kill (stmt->u.R737A.pool);
break;
case FFESTD_stmtidR803_:
ffestd_subr_line_restore_ (stmt);
- ffeste_R803 (stmt->u.R803.expr);
+ if (okay)
+ ffeste_R803 (stmt->u.R803.expr);
malloc_pool_kill (stmt->u.R803.pool);
break;
case FFESTD_stmtidR804_:
ffestd_subr_line_restore_ (stmt);
- ffeste_R804 (stmt->u.R804.expr);
+ if (okay)
+ ffeste_R804 (stmt->u.R804.expr);
malloc_pool_kill (stmt->u.R804.pool);
break;
case FFESTD_stmtidR805_:
ffestd_subr_line_restore_ (stmt);
- ffeste_R805 ();
+ if (okay)
+ ffeste_R805 ();
break;
case FFESTD_stmtidR806_:
ffestd_subr_line_restore_ (stmt);
- ffeste_R806 ();
+ if (okay)
+ ffeste_R806 ();
break;
case FFESTD_stmtidR807_:
ffestd_subr_line_restore_ (stmt);
- ffeste_R807 (stmt->u.R807.expr);
+ if (okay)
+ ffeste_R807 (stmt->u.R807.expr);
malloc_pool_kill (stmt->u.R807.pool);
break;
case FFESTD_stmtidR809_:
ffestd_subr_line_restore_ (stmt);
- ffeste_R809 (stmt->u.R809.block, stmt->u.R809.expr);
+ if (okay)
+ ffeste_R809 (stmt->u.R809.block, stmt->u.R809.expr);
malloc_pool_kill (stmt->u.R809.pool);
break;
case FFESTD_stmtidR810_:
ffestd_subr_line_restore_ (stmt);
- ffeste_R810 (stmt->u.R810.block, stmt->u.R810.casenum);
+ if (okay)
+ ffeste_R810 (stmt->u.R810.block, stmt->u.R810.casenum);
malloc_pool_kill (stmt->u.R810.pool);
break;
case FFESTD_stmtidR811_:
ffestd_subr_line_restore_ (stmt);
- ffeste_R811 (stmt->u.R811.block);
+ if (okay)
+ ffeste_R811 (stmt->u.R811.block);
malloc_pool_kill (ffestw_select (stmt->u.R811.block)->pool);
ffestw_kill (stmt->u.R811.block);
break;
case FFESTD_stmtidR819A_:
ffestd_subr_line_restore_ (stmt);
- ffeste_R819A (stmt->u.R819A.block, stmt->u.R819A.label,
- stmt->u.R819A.var,
- stmt->u.R819A.start, stmt->u.R819A.start_token,
- stmt->u.R819A.end, stmt->u.R819A.end_token,
- stmt->u.R819A.incr, stmt->u.R819A.incr_token);
+ if (okay)
+ ffeste_R819A (stmt->u.R819A.block, stmt->u.R819A.label,
+ stmt->u.R819A.var,
+ stmt->u.R819A.start, stmt->u.R819A.start_token,
+ stmt->u.R819A.end, stmt->u.R819A.end_token,
+ stmt->u.R819A.incr, stmt->u.R819A.incr_token);
ffelex_token_kill (stmt->u.R819A.start_token);
ffelex_token_kill (stmt->u.R819A.end_token);
if (stmt->u.R819A.incr_token != NULL)
@@ -803,269 +819,342 @@ ffestd_stmt_pass_ ()
case FFESTD_stmtidR819B_:
ffestd_subr_line_restore_ (stmt);
- ffeste_R819B (stmt->u.R819B.block, stmt->u.R819B.label,
- stmt->u.R819B.expr);
+ if (okay)
+ ffeste_R819B (stmt->u.R819B.block, stmt->u.R819B.label,
+ stmt->u.R819B.expr);
malloc_pool_kill (stmt->u.R819B.pool);
break;
case FFESTD_stmtidR825_:
ffestd_subr_line_restore_ (stmt);
- ffeste_R825 ();
+ if (okay)
+ ffeste_R825 ();
break;
case FFESTD_stmtidR834_:
ffestd_subr_line_restore_ (stmt);
- ffeste_R834 (stmt->u.R834.block);
+ if (okay)
+ ffeste_R834 (stmt->u.R834.block);
break;
case FFESTD_stmtidR835_:
ffestd_subr_line_restore_ (stmt);
- ffeste_R835 (stmt->u.R835.block);
+ if (okay)
+ ffeste_R835 (stmt->u.R835.block);
break;
case FFESTD_stmtidR836_:
ffestd_subr_line_restore_ (stmt);
- ffeste_R836 (stmt->u.R836.label);
+ if (okay)
+ ffeste_R836 (stmt->u.R836.label);
break;
case FFESTD_stmtidR837_:
ffestd_subr_line_restore_ (stmt);
- ffeste_R837 (stmt->u.R837.labels, stmt->u.R837.count,
- stmt->u.R837.expr);
+ if (okay)
+ ffeste_R837 (stmt->u.R837.labels, stmt->u.R837.count,
+ stmt->u.R837.expr);
malloc_pool_kill (stmt->u.R837.pool);
break;
case FFESTD_stmtidR838_:
ffestd_subr_line_restore_ (stmt);
- ffeste_R838 (stmt->u.R838.label, stmt->u.R838.target);
+ if (okay)
+ ffeste_R838 (stmt->u.R838.label, stmt->u.R838.target);
malloc_pool_kill (stmt->u.R838.pool);
break;
case FFESTD_stmtidR839_:
ffestd_subr_line_restore_ (stmt);
- ffeste_R839 (stmt->u.R839.target);
+ if (okay)
+ ffeste_R839 (stmt->u.R839.target);
malloc_pool_kill (stmt->u.R839.pool);
break;
case FFESTD_stmtidR840_:
ffestd_subr_line_restore_ (stmt);
- ffeste_R840 (stmt->u.R840.expr, stmt->u.R840.neg, stmt->u.R840.zero,
- stmt->u.R840.pos);
+ if (okay)
+ ffeste_R840 (stmt->u.R840.expr, stmt->u.R840.neg, stmt->u.R840.zero,
+ stmt->u.R840.pos);
malloc_pool_kill (stmt->u.R840.pool);
break;
case FFESTD_stmtidR841_:
ffestd_subr_line_restore_ (stmt);
- ffeste_R841 ();
+ if (okay)
+ ffeste_R841 ();
break;
case FFESTD_stmtidR842_:
ffestd_subr_line_restore_ (stmt);
- ffeste_R842 (stmt->u.R842.expr);
- malloc_pool_kill (stmt->u.R842.pool);
+ if (okay)
+ ffeste_R842 (stmt->u.R842.expr);
+ if (stmt->u.R842.pool != NULL)
+ malloc_pool_kill (stmt->u.R842.pool);
break;
case FFESTD_stmtidR843_:
ffestd_subr_line_restore_ (stmt);
- ffeste_R843 (stmt->u.R843.expr);
+ if (okay)
+ ffeste_R843 (stmt->u.R843.expr);
malloc_pool_kill (stmt->u.R843.pool);
break;
case FFESTD_stmtidR904_:
ffestd_subr_line_restore_ (stmt);
- ffeste_R904 (stmt->u.R904.params);
+ if (okay)
+ ffeste_R904 (stmt->u.R904.params);
malloc_pool_kill (stmt->u.R904.pool);
break;
case FFESTD_stmtidR907_:
ffestd_subr_line_restore_ (stmt);
- ffeste_R907 (stmt->u.R907.params);
+ if (okay)
+ ffeste_R907 (stmt->u.R907.params);
malloc_pool_kill (stmt->u.R907.pool);
break;
case FFESTD_stmtidR909_:
ffestd_subr_line_restore_ (stmt);
- ffeste_R909_start (stmt->u.R909.params, stmt->u.R909.only_format,
- stmt->u.R909.unit, stmt->u.R909.format,
- stmt->u.R909.rec, stmt->u.R909.key);
+ if (okay)
+ ffeste_R909_start (stmt->u.R909.params, stmt->u.R909.only_format,
+ stmt->u.R909.unit, stmt->u.R909.format,
+ stmt->u.R909.rec, stmt->u.R909.key);
for (expr = stmt->u.R909.list; expr != NULL; expr = expr->next)
{
- ffeste_R909_item (expr->expr, expr->token);
+ if (okay)
+ ffeste_R909_item (expr->expr, expr->token);
ffelex_token_kill (expr->token);
}
- ffeste_R909_finish ();
+ if (okay)
+ ffeste_R909_finish ();
malloc_pool_kill (stmt->u.R909.pool);
break;
case FFESTD_stmtidR910_:
ffestd_subr_line_restore_ (stmt);
- ffeste_R910_start (stmt->u.R910.params, stmt->u.R910.unit,
- stmt->u.R910.format, stmt->u.R910.rec);
+ if (okay)
+ ffeste_R910_start (stmt->u.R910.params, stmt->u.R910.unit,
+ stmt->u.R910.format, stmt->u.R910.rec);
for (expr = stmt->u.R910.list; expr != NULL; expr = expr->next)
{
- ffeste_R910_item (expr->expr, expr->token);
+ if (okay)
+ ffeste_R910_item (expr->expr, expr->token);
ffelex_token_kill (expr->token);
}
- ffeste_R910_finish ();
+ if (okay)
+ ffeste_R910_finish ();
malloc_pool_kill (stmt->u.R910.pool);
break;
case FFESTD_stmtidR911_:
ffestd_subr_line_restore_ (stmt);
- ffeste_R911_start (stmt->u.R911.params, stmt->u.R911.format);
+ if (okay)
+ ffeste_R911_start (stmt->u.R911.params, stmt->u.R911.format);
for (expr = stmt->u.R911.list; expr != NULL; expr = expr->next)
{
- ffeste_R911_item (expr->expr, expr->token);
+ if (okay)
+ ffeste_R911_item (expr->expr, expr->token);
ffelex_token_kill (expr->token);
}
- ffeste_R911_finish ();
+ if (okay)
+ ffeste_R911_finish ();
malloc_pool_kill (stmt->u.R911.pool);
break;
case FFESTD_stmtidR919_:
ffestd_subr_line_restore_ (stmt);
- ffeste_R919 (stmt->u.R919.params);
+ if (okay)
+ ffeste_R919 (stmt->u.R919.params);
malloc_pool_kill (stmt->u.R919.pool);
break;
case FFESTD_stmtidR920_:
ffestd_subr_line_restore_ (stmt);
- ffeste_R920 (stmt->u.R920.params);
+ if (okay)
+ ffeste_R920 (stmt->u.R920.params);
malloc_pool_kill (stmt->u.R920.pool);
break;
case FFESTD_stmtidR921_:
ffestd_subr_line_restore_ (stmt);
- ffeste_R921 (stmt->u.R921.params);
+ if (okay)
+ ffeste_R921 (stmt->u.R921.params);
malloc_pool_kill (stmt->u.R921.pool);
break;
case FFESTD_stmtidR923A_:
ffestd_subr_line_restore_ (stmt);
- ffeste_R923A (stmt->u.R923A.params, stmt->u.R923A.by_file);
+ if (okay)
+ ffeste_R923A (stmt->u.R923A.params, stmt->u.R923A.by_file);
malloc_pool_kill (stmt->u.R923A.pool);
break;
case FFESTD_stmtidR923B_:
ffestd_subr_line_restore_ (stmt);
- ffeste_R923B_start (stmt->u.R923B.params);
+ if (okay)
+ ffeste_R923B_start (stmt->u.R923B.params);
for (expr = stmt->u.R923B.list; expr != NULL; expr = expr->next)
- ffeste_R923B_item (expr->expr);
- ffeste_R923B_finish ();
+ {
+ if (okay)
+ ffeste_R923B_item (expr->expr);
+ }
+ if (okay)
+ ffeste_R923B_finish ();
malloc_pool_kill (stmt->u.R923B.pool);
break;
case FFESTD_stmtidR1001_:
- ffeste_R1001 (&stmt->u.R1001.str);
+ if (okay)
+ ffeste_R1001 (&stmt->u.R1001.str);
ffests_kill (&stmt->u.R1001.str);
break;
case FFESTD_stmtidR1103_:
- ffeste_R1103 ();
+ if (okay)
+ ffeste_R1103 ();
break;
case FFESTD_stmtidR1112_:
- ffeste_R1112 ();
+ if (okay)
+ ffeste_R1112 ();
break;
case FFESTD_stmtidR1212_:
ffestd_subr_line_restore_ (stmt);
- ffeste_R1212 (stmt->u.R1212.expr);
+ if (okay)
+ ffeste_R1212 (stmt->u.R1212.expr);
malloc_pool_kill (stmt->u.R1212.pool);
break;
case FFESTD_stmtidR1221_:
- ffeste_R1221 ();
+ if (okay)
+ ffeste_R1221 ();
break;
case FFESTD_stmtidR1225_:
- ffeste_R1225 ();
+ if (okay)
+ ffeste_R1225 ();
break;
case FFESTD_stmtidR1226_:
ffestd_subr_line_restore_ (stmt);
if (stmt->u.R1226.entry != NULL)
- ffeste_R1226 (stmt->u.R1226.entry);
+ {
+ if (okay)
+ ffeste_R1226 (stmt->u.R1226.entry);
+ }
break;
case FFESTD_stmtidR1227_:
ffestd_subr_line_restore_ (stmt);
- ffeste_R1227 (stmt->u.R1227.block, stmt->u.R1227.expr);
+ if (okay)
+ ffeste_R1227 (stmt->u.R1227.block, stmt->u.R1227.expr);
malloc_pool_kill (stmt->u.R1227.pool);
break;
#if FFESTR_VXT
case FFESTD_stmtidV018_:
ffestd_subr_line_restore_ (stmt);
- ffeste_V018_start (stmt->u.V018.params, stmt->u.V018.format);
+ if (okay)
+ ffeste_V018_start (stmt->u.V018.params, stmt->u.V018.format);
for (expr = stmt->u.V018.list; expr != NULL; expr = expr->next)
- ffeste_V018_item (expr->expr);
- ffeste_V018_finish ();
+ {
+ if (okay)
+ ffeste_V018_item (expr->expr);
+ }
+ if (okay)
+ ffeste_V018_finish ();
malloc_pool_kill (stmt->u.V018.pool);
break;
case FFESTD_stmtidV019_:
ffestd_subr_line_restore_ (stmt);
- ffeste_V019_start (stmt->u.V019.params, stmt->u.V019.format);
+ if (okay)
+ ffeste_V019_start (stmt->u.V019.params, stmt->u.V019.format);
for (expr = stmt->u.V019.list; expr != NULL; expr = expr->next)
- ffeste_V019_item (expr->expr);
- ffeste_V019_finish ();
+ {
+ if (okay)
+ ffeste_V019_item (expr->expr);
+ }
+ if (okay)
+ ffeste_V019_finish ();
malloc_pool_kill (stmt->u.V019.pool);
break;
#endif
case FFESTD_stmtidV020_:
ffestd_subr_line_restore_ (stmt);
- ffeste_V020_start (stmt->u.V020.params, stmt->u.V020.format);
+ if (okay)
+ ffeste_V020_start (stmt->u.V020.params, stmt->u.V020.format);
for (expr = stmt->u.V020.list; expr != NULL; expr = expr->next)
- ffeste_V020_item (expr->expr);
- ffeste_V020_finish ();
+ {
+ if (okay)
+ ffeste_V020_item (expr->expr);
+ }
+ if (okay)
+ ffeste_V020_finish ();
malloc_pool_kill (stmt->u.V020.pool);
break;
#if FFESTR_VXT
case FFESTD_stmtidV021_:
ffestd_subr_line_restore_ (stmt);
- ffeste_V021 (stmt->u.V021.params);
+ if (okay)
+ ffeste_V021 (stmt->u.V021.params);
malloc_pool_kill (stmt->u.V021.pool);
break;
case FFESTD_stmtidV023_:
ffestd_subr_line_restore_ (stmt);
- ffeste_V023_start (stmt->u.V023.params);
+ if (okay)
+ ffeste_V023_start (stmt->u.V023.params);
for (expr = stmt->u.V023.list; expr != NULL; expr = expr->next)
- ffeste_V023_item (expr->expr);
- ffeste_V023_finish ();
+ {
+ if (okay)
+ ffeste_V023_item (expr->expr);
+ }
+ if (okay)
+ ffeste_V023_finish ();
malloc_pool_kill (stmt->u.V023.pool);
break;
case FFESTD_stmtidV024_:
ffestd_subr_line_restore_ (stmt);
- ffeste_V024_start (stmt->u.V024.params);
+ if (okay)
+ ffeste_V024_start (stmt->u.V024.params);
for (expr = stmt->u.V024.list; expr != NULL; expr = expr->next)
- ffeste_V024_item (expr->expr);
- ffeste_V024_finish ();
+ {
+ if (okay)
+ ffeste_V024_item (expr->expr);
+ }
+ if (okay)
+ ffeste_V024_finish ();
malloc_pool_kill (stmt->u.V024.pool);
break;
case FFESTD_stmtidV025start_:
ffestd_subr_line_restore_ (stmt);
- ffeste_V025_start ();
+ if (okay)
+ ffeste_V025_start ();
break;
case FFESTD_stmtidV025item_:
- ffeste_V025_item (stmt->u.V025item.u, stmt->u.V025item.m,
- stmt->u.V025item.n, stmt->u.V025item.asv);
+ if (okay)
+ ffeste_V025_item (stmt->u.V025item.u, stmt->u.V025item.m,
+ stmt->u.V025item.n, stmt->u.V025item.asv);
break;
case FFESTD_stmtidV025finish_:
- ffeste_V025_finish ();
+ if (okay)
+ ffeste_V025_finish ();
malloc_pool_kill (stmt->u.V025finish.pool);
break;
case FFESTD_stmtidV026_:
ffestd_subr_line_restore_ (stmt);
- ffeste_V026 (stmt->u.V026.params);
+ if (okay)
+ ffeste_V026 (stmt->u.V026.params);
malloc_pool_kill (stmt->u.V026.pool);
break;
#endif
@@ -1105,13 +1194,15 @@ ffestd_subr_copy_easy_ (ffestpInquireIx max)
= ffestp_file.inquire.inquire_spec[ix].kw_or_val_present)
&& (stmt->inquire_spec[ix].value_present
= ffestp_file.inquire.inquire_spec[ix].value_present))
- if ((stmt->inquire_spec[ix].value_is_label
- = ffestp_file.inquire.inquire_spec[ix].value_is_label))
- stmt->inquire_spec[ix].u.label
- = ffestp_file.inquire.inquire_spec[ix].u.label;
- else
- stmt->inquire_spec[ix].u.expr
- = ffestp_file.inquire.inquire_spec[ix].u.expr;
+ {
+ if ((stmt->inquire_spec[ix].value_is_label
+ = ffestp_file.inquire.inquire_spec[ix].value_is_label))
+ stmt->inquire_spec[ix].u.label
+ = ffestp_file.inquire.inquire_spec[ix].u.label;
+ else
+ stmt->inquire_spec[ix].u.expr
+ = ffestp_file.inquire.inquire_spec[ix].u.expr;
+ }
}
return stmt;
@@ -3513,9 +3604,22 @@ ffestd_R842 (ffebld expr)
stmt = ffestd_stmt_new_ (FFESTD_stmtidR842_);
ffestd_stmt_append_ (stmt);
ffestd_subr_line_save_ (stmt);
- stmt->u.R842.pool = ffesta_output_pool;
- stmt->u.R842.expr = expr;
- ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
+ if (ffesta_outpooldisp () == FFESTA_pooldispPRESERVE)
+ {
+ /* This is a "spurious" (automatically-generated) STOP
+ that follows a previous STOP or other statement.
+ Make sure we don't have an expression in the pool,
+ and then mark that the pool has already been killed. */
+ assert (expr == NULL);
+ stmt->u.R842.pool = NULL;
+ stmt->u.R842.expr = NULL;
+ }
+ else
+ {
+ stmt->u.R842.pool = ffesta_output_pool;
+ stmt->u.R842.expr = expr;
+ ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
+ }
}
#endif
@@ -4356,11 +4460,13 @@ ffestd_R1001dump_ (ffests s, ffesttFormatList list)
case FFESTP_formattypeFORMAT:
if (next->u.R1003D.R1004.present)
- if (next->u.R1003D.R1004.rtexpr)
- ffestd_R1001error_ (next);
- else
- ffests_printf_1U (s, "%lu",
- next->u.R1003D.R1004.u.unsigned_val);
+ {
+ if (next->u.R1003D.R1004.rtexpr)
+ ffestd_R1001rtexpr_ (s, next, next->u.R1003D.R1004.u.expr);
+ else
+ ffests_printf_1U (s, "%lu",
+ next->u.R1003D.R1004.u.unsigned_val);
+ }
ffests_putc (s, '(');
ffestd_R1001dump_ (s, next->u.R1003D.format);
@@ -4387,18 +4493,22 @@ ffestd_R1001dump_1005_1_ (ffests s, ffesttFormatList f, char *string)
assert (!f->u.R1005.R1009.present);
if (f->u.R1005.R1004.present)
- if (f->u.R1005.R1004.rtexpr)
- ffestd_R1001error_ (f);
- else
- ffests_printf_1U (s, "%lu", f->u.R1005.R1004.u.unsigned_val);
+ {
+ if (f->u.R1005.R1004.rtexpr)
+ ffestd_R1001rtexpr_ (s, f, f->u.R1005.R1004.u.expr);
+ else
+ ffests_printf_1U (s, "%lu", f->u.R1005.R1004.u.unsigned_val);
+ }
ffests_puts (s, string);
if (f->u.R1005.R1006.present)
- if (f->u.R1005.R1006.rtexpr)
- ffestd_R1001error_ (f);
- else
- ffests_printf_1U (s, "%lu", f->u.R1005.R1006.u.unsigned_val);
+ {
+ if (f->u.R1005.R1006.rtexpr)
+ ffestd_R1001rtexpr_ (s, f, f->u.R1005.R1006.u.expr);
+ else
+ ffests_printf_1U (s, "%lu", f->u.R1005.R1006.u.unsigned_val);
+ }
}
/* ffestd_R1001dump_1005_2_ -- Dump a particular format
@@ -4416,15 +4526,17 @@ ffestd_R1001dump_1005_2_ (ffests s, ffesttFormatList f, char *string)
assert (f->u.R1005.R1006.present);
if (f->u.R1005.R1004.present)
- if (f->u.R1005.R1004.rtexpr)
- ffestd_R1001error_ (f);
- else
- ffests_printf_1U (s, "%lu", f->u.R1005.R1004.u.unsigned_val);
+ {
+ if (f->u.R1005.R1004.rtexpr)
+ ffestd_R1001rtexpr_ (s, f, f->u.R1005.R1004.u.expr);
+ else
+ ffests_printf_1U (s, "%lu", f->u.R1005.R1004.u.unsigned_val);
+ }
ffests_puts (s, string);
if (f->u.R1005.R1006.rtexpr)
- ffestd_R1001error_ (f);
+ ffestd_R1001rtexpr_ (s, f, f->u.R1005.R1006.u.expr);
else
ffests_printf_1U (s, "%lu", f->u.R1005.R1006.u.unsigned_val);
}
@@ -4443,15 +4555,17 @@ ffestd_R1001dump_1005_3_ (ffests s, ffesttFormatList f, char *string)
assert (f->u.R1005.R1006.present);
if (f->u.R1005.R1004.present)
- if (f->u.R1005.R1004.rtexpr)
- ffestd_R1001error_ (f);
- else
- ffests_printf_1U (s, "%lu", f->u.R1005.R1004.u.unsigned_val);
+ {
+ if (f->u.R1005.R1004.rtexpr)
+ ffestd_R1001rtexpr_ (s, f, f->u.R1005.R1004.u.expr);
+ else
+ ffests_printf_1U (s, "%lu", f->u.R1005.R1004.u.unsigned_val);
+ }
ffests_puts (s, string);
if (f->u.R1005.R1006.rtexpr)
- ffestd_R1001error_ (f);
+ ffestd_R1001rtexpr_ (s, f, f->u.R1005.R1006.u.expr);
else
ffests_printf_1U (s, "%lu", f->u.R1005.R1006.u.unsigned_val);
@@ -4459,7 +4573,7 @@ ffestd_R1001dump_1005_3_ (ffests s, ffesttFormatList f, char *string)
{
ffests_putc (s, '.');
if (f->u.R1005.R1007_or_R1008.rtexpr)
- ffestd_R1001error_ (f);
+ ffestd_R1001rtexpr_ (s, f, f->u.R1005.R1007_or_R1008.u.expr);
else
ffests_printf_1U (s, "%lu",
f->u.R1005.R1007_or_R1008.u.unsigned_val);
@@ -4481,21 +4595,23 @@ ffestd_R1001dump_1005_4_ (ffests s, ffesttFormatList f, char *string)
assert (f->u.R1005.R1006.present);
if (f->u.R1005.R1004.present)
- if (f->u.R1005.R1004.rtexpr)
- ffestd_R1001error_ (f);
- else
- ffests_printf_1U (s, "%lu", f->u.R1005.R1004.u.unsigned_val);
+ {
+ if (f->u.R1005.R1004.rtexpr)
+ ffestd_R1001rtexpr_ (s, f, f->u.R1005.R1004.u.expr);
+ else
+ ffests_printf_1U (s, "%lu", f->u.R1005.R1004.u.unsigned_val);
+ }
ffests_puts (s, string);
if (f->u.R1005.R1006.rtexpr)
- ffestd_R1001error_ (f);
+ ffestd_R1001rtexpr_ (s, f, f->u.R1005.R1006.u.expr);
else
ffests_printf_1U (s, "%lu", f->u.R1005.R1006.u.unsigned_val);
ffests_putc (s, '.');
if (f->u.R1005.R1007_or_R1008.rtexpr)
- ffestd_R1001error_ (f);
+ ffestd_R1001rtexpr_ (s, f, f->u.R1005.R1007_or_R1008.u.expr);
else
ffests_printf_1U (s, "%lu", f->u.R1005.R1007_or_R1008.u.unsigned_val);
}
@@ -4514,21 +4630,23 @@ ffestd_R1001dump_1005_5_ (ffests s, ffesttFormatList f, char *string)
assert (f->u.R1005.R1006.present);
if (f->u.R1005.R1004.present)
- if (f->u.R1005.R1004.rtexpr)
- ffestd_R1001error_ (f);
- else
- ffests_printf_1U (s, "%lu", f->u.R1005.R1004.u.unsigned_val);
+ {
+ if (f->u.R1005.R1004.rtexpr)
+ ffestd_R1001rtexpr_ (s, f, f->u.R1005.R1004.u.expr);
+ else
+ ffests_printf_1U (s, "%lu", f->u.R1005.R1004.u.unsigned_val);
+ }
ffests_puts (s, string);
if (f->u.R1005.R1006.rtexpr)
- ffestd_R1001error_ (f);
+ ffestd_R1001rtexpr_ (s, f, f->u.R1005.R1006.u.expr);
else
ffests_printf_1U (s, "%lu", f->u.R1005.R1006.u.unsigned_val);
ffests_putc (s, '.');
if (f->u.R1005.R1007_or_R1008.rtexpr)
- ffestd_R1001error_ (f);
+ ffestd_R1001rtexpr_ (s, f, f->u.R1005.R1007_or_R1008.u.expr);
else
ffests_printf_1U (s, "%lu", f->u.R1005.R1007_or_R1008.u.unsigned_val);
@@ -4536,7 +4654,7 @@ ffestd_R1001dump_1005_5_ (ffests s, ffesttFormatList f, char *string)
{
ffests_putc (s, 'E');
if (f->u.R1005.R1009.rtexpr)
- ffestd_R1001error_ (f);
+ ffestd_R1001rtexpr_ (s, f, f->u.R1005.R1009.u.expr);
else
ffests_printf_1U (s, "%lu", f->u.R1005.R1009.u.unsigned_val);
}
@@ -4568,10 +4686,12 @@ static void
ffestd_R1001dump_1010_2_ (ffests s, ffesttFormatList f, char *string)
{
if (f->u.R1010.val.present)
- if (f->u.R1010.val.rtexpr)
- ffestd_R1001error_ (f);
- else
- ffests_printf_1U (s, "%lu", f->u.R1010.val.u.unsigned_val);
+ {
+ if (f->u.R1010.val.rtexpr)
+ ffestd_R1001rtexpr_ (s, f, f->u.R1010.val.u.expr);
+ else
+ ffests_printf_1U (s, "%lu", f->u.R1010.val.u.unsigned_val);
+ }
ffests_puts (s, string);
}
@@ -4589,7 +4709,7 @@ ffestd_R1001dump_1010_3_ (ffests s, ffesttFormatList f, char *string)
assert (f->u.R1010.val.present);
if (f->u.R1010.val.rtexpr)
- ffestd_R1001error_ (f);
+ ffestd_R1001rtexpr_ (s, f, f->u.R1010.val.u.expr);
else
ffests_printf_1U (s, "%lu", f->u.R1010.val.u.unsigned_val);
@@ -4609,7 +4729,7 @@ ffestd_R1001dump_1010_4_ (ffests s, ffesttFormatList f, char *string)
assert (f->u.R1010.val.present);
if (f->u.R1010.val.rtexpr)
- ffestd_R1001error_ (f);
+ ffestd_R1001rtexpr_ (s, f, f->u.R1010.val.u.expr);
else
ffests_printf_1D (s, "%ld", f->u.R1010.val.u.signed_val);
@@ -4631,7 +4751,7 @@ ffestd_R1001dump_1010_5_ (ffests s, ffesttFormatList f, char *string)
ffests_puts (s, string);
if (f->u.R1010.val.rtexpr)
- ffestd_R1001error_ (f);
+ ffestd_R1001rtexpr_ (s, f, f->u.R1010.val.u.expr);
else
ffests_printf_1U (s, "%lu", f->u.R1010.val.u.unsigned_val);
}
@@ -4651,6 +4771,52 @@ ffestd_R1001error_ (ffesttFormatList f)
ffebad_finish ();
}
+static void
+ffestd_R1001rtexpr_ (ffests s, ffesttFormatList f, ffebld expr)
+{
+ if ((expr == NULL)
+ || (ffebld_op (expr) != FFEBLD_opCONTER)
+ || (ffeinfo_basictype (ffebld_info (expr)) != FFEINFO_basictypeINTEGER)
+ || (ffeinfo_kindtype (ffebld_info (expr)) == FFEINFO_kindtypeINTEGER4))
+ {
+ ffebad_start (FFEBAD_FORMAT_VARIABLE);
+ ffebad_here (0, ffelex_token_where_line (f->t), ffelex_token_where_column (f->t));
+ ffebad_finish ();
+ }
+ else
+ {
+ int val;
+
+ switch (ffeinfo_kindtype (ffebld_info (expr)))
+ {
+#if FFETARGET_okINTEGER1
+ case FFEINFO_kindtypeINTEGER1:
+ val = ffebld_constant_integer1 (ffebld_conter (expr));
+ break;
+#endif
+
+#if FFETARGET_okINTEGER2
+ case FFEINFO_kindtypeINTEGER2:
+ val = ffebld_constant_integer2 (ffebld_conter (expr));
+ break;
+#endif
+
+#if FFETARGET_okINTEGER3
+ case FFEINFO_kindtypeINTEGER3:
+ val = ffebld_constant_integer3 (ffebld_conter (expr));
+ break;
+#endif
+
+ default:
+ assert ("bad INTEGER constant kind type" == NULL);
+ /* Fall through. */
+ case FFEINFO_kindtypeANY:
+ return;
+ }
+ ffests_printf_1D (s, "%ld", val);
+ }
+}
+
/* ffestd_R1102 -- PROGRAM statement
ffestd_R1102(name_token);
diff --git a/gcc/f/ste.c b/gcc/f/ste.c
index a5e9757cca3..f7168f0dfdd 100644
--- a/gcc/f/ste.c
+++ b/gcc/f/ste.c
@@ -395,12 +395,11 @@ ffeste_begin_iterdo_ (ffestw block, tree *xtvar, tree *xtincr,
/* Do the initial assignment into the DO var. */
- expr = ffecom_modify (void_type_node, tvar, tstart);
- expand_expr_stmt (expr);
+ tstart = ffecom_save_tree (tstart);
expr = ffecom_2 (MINUS_EXPR, TREE_TYPE (tvar),
tend,
- TREE_CONSTANT (tstart) ? tstart : tvar);
+ tstart);
if (!ffe_is_onetrip ())
{
@@ -439,6 +438,9 @@ ffeste_begin_iterdo_ (ffestw block, tree *xtvar, tree *xtincr,
expr = ffecom_modify (void_type_node, niters, expr);
expand_expr_stmt (expr);
+ expr = ffecom_modify (void_type_node, tvar, tstart);
+ expand_expr_stmt (expr);
+
if (block == NULL)
expand_start_loop_continue_elsewhere (0);
else
@@ -997,7 +999,6 @@ ffeste_io_cilist_ (bool have_err,
int yes;
tree field;
tree inits, initn;
- tree ignore; /* We ignore the length of format! */
bool constantp = TRUE;
static tree errfield, unitfield, endfield, formatfield, recfield;
tree errinit, unitinit, endinit, formatinit, recinit;
@@ -1084,7 +1085,7 @@ ffeste_io_cilist_ (bool have_err,
break;
case FFESTV_formatCHAREXPR:
- formatexp = ffecom_arg_ptr_to_expr (format_spec->u.expr, &ignore);
+ formatexp = ffecom_arg_ptr_to_expr (format_spec->u.expr, NULL);
if (TREE_CONSTANT (formatexp))
{
formatinit = formatexp;
@@ -1303,7 +1304,6 @@ ffeste_io_icilist_ (bool have_err,
int yes;
tree field;
tree inits, initn;
- tree ignore; /* We ignore the length of format! */
bool constantp = TRUE;
static tree errfield, unitfield, endfield, formatfield, unitlenfield,
unitnumfield;
@@ -1407,7 +1407,7 @@ ffeste_io_icilist_ (bool have_err,
break;
case FFESTV_formatCHAREXPR:
- formatexp = ffecom_arg_ptr_to_expr (format_spec->u.expr, &ignore);
+ formatexp = ffecom_arg_ptr_to_expr (format_spec->u.expr, NULL);
if (TREE_CONSTANT (formatexp))
{
formatinit = formatexp;
@@ -2903,22 +2903,24 @@ ffeste_R840 (ffebld expr, ffelab neg, ffelab zero, ffelab pos)
ffecom_push_calltemps ();
if (neg == zero)
- if (neg == pos)
- expand_goto (gzero);
- else
- { /* IF (expr.LE.0) THEN GOTO neg/zero ELSE
- GOTO pos. */
- texpr = ffecom_expr (expr);
- texpr = ffecom_2 (LE_EXPR, integer_type_node,
- texpr,
- convert (TREE_TYPE (texpr),
- integer_zero_node));
- expand_start_cond (ffecom_truth_value (texpr), 0);
+ {
+ if (neg == pos)
expand_goto (gzero);
- expand_start_else ();
- expand_goto (gpos);
- expand_end_cond ();
- }
+ else
+ { /* IF (expr.LE.0) THEN GOTO neg/zero ELSE
+ GOTO pos. */
+ texpr = ffecom_expr (expr);
+ texpr = ffecom_2 (LE_EXPR, integer_type_node,
+ texpr,
+ convert (TREE_TYPE (texpr),
+ integer_zero_node));
+ expand_start_cond (ffecom_truth_value (texpr), 0);
+ expand_goto (gzero);
+ expand_start_else ();
+ expand_goto (gpos);
+ expand_end_cond ();
+ }
+ }
else if (neg == pos)
{ /* IF (expr.NE.0) THEN GOTO neg/pos ELSE GOTO
zero. */
diff --git a/gcc/f/sts.c b/gcc/f/sts.c
index 769712c1da1..dabb919d566 100644
--- a/gcc/f/sts.c
+++ b/gcc/f/sts.c
@@ -252,19 +252,21 @@ ffests_puttext (ffests s, char *text, ffestsLength length)
newlen = s->len_ + length;
if (newlen > s->max_)
- if (s->text_ == NULL)
- {
- s->max_ = 40;
- s->text_ = malloc_new_ksr (s->pool_, "ffests", s->max_);
- }
- else
- {
- newmax = s->max_ << 1;
- while (newmax < newlen)
- newmax <<= 1;
- s->text_ = malloc_resize_ksr (s->pool_, s->text_, newmax, s->max_);
- s->max_ = newmax;
- }
+ {
+ if (s->text_ == NULL)
+ {
+ s->max_ = 40;
+ s->text_ = malloc_new_ksr (s->pool_, "ffests", s->max_);
+ }
+ else
+ {
+ newmax = s->max_ << 1;
+ while (newmax < newlen)
+ newmax <<= 1;
+ s->text_ = malloc_resize_ksr (s->pool_, s->text_, newmax, s->max_);
+ s->max_ = newmax;
+ }
+ }
memcpy (s->text_ + s->len_, text, length);
s->len_ = newlen;
diff --git a/gcc/f/stu.c b/gcc/f/stu.c
index 239456c0d0b..a11f00c9cd2 100644
--- a/gcc/f/stu.c
+++ b/gcc/f/stu.c
@@ -924,7 +924,7 @@ ffestu_sym_exec_transition (ffesymbol s)
static void
ffestu_list_exec_transition_ (ffebld list)
{
- static in_progress = FALSE;
+ static bool in_progress = FALSE;
ffebld item;
ffesymbol symbol;
@@ -1116,7 +1116,7 @@ tail: /* :::::::::::::::::::: */
static bool
ffestu_dummies_transition_ (ffesymbol (*symfunc) (), ffebld list)
{
- static in_progress = FALSE;
+ static bool in_progress = FALSE;
ffebld item;
ffesymbol symbol;
bool uncertain = FALSE;
diff --git a/gcc/f/symbol.c b/gcc/f/symbol.c
index 0ce998b5314..5e87cf50919 100644
--- a/gcc/f/symbol.c
+++ b/gcc/f/symbol.c
@@ -170,10 +170,12 @@ ffesymbol_check_token_ (ffelexToken t, char *c)
}
if (bad != FFEBAD)
- if (i >= len)
- *c = *(ffelex_token_text (t));
- else
- *c = *p;
+ {
+ if (i >= len)
+ *c = *(ffelex_token_text (t));
+ else
+ *c = *p;
+ }
return bad;
}
diff --git a/gcc/f/target.c b/gcc/f/target.c
index 828e7adcf75..8dfe68d7782 100644
--- a/gcc/f/target.c
+++ b/gcc/f/target.c
@@ -280,6 +280,13 @@ ffetarget_align (ffetargetAlign *updated_alignment,
return min_pad;
}
+/* Always append a null byte to the end, in case this is wanted in
+ a special case such as passing a string as a FORMAT or %REF.
+ Done to save a bit of hassle, nothing more, but it's a kludge anyway,
+ because it isn't a "feature" that is self-documenting. Use the
+ string "FFETARGET-NULL-KLUDGE" to flag anyplace you use this feature
+ in the code. */
+
#if FFETARGET_okCHARACTER1
bool
ffetarget_character1 (ffetargetCharacter1 *val, ffelexToken character,
@@ -290,8 +297,9 @@ ffetarget_character1 (ffetargetCharacter1 *val, ffelexToken character,
val->text = NULL;
else
{
- val->text = malloc_new_kp (pool, "ffetargetCharacter1", val->length);
+ val->text = malloc_new_kp (pool, "ffetargetCharacter1", val->length + 1);
memcpy (val->text, ffelex_token_text (character), val->length);
+ val->text[val->length] = '\0';
}
return TRUE;
@@ -318,7 +326,12 @@ ffetarget_cmp_character1 (ffetargetCharacter1 l, ffetargetCharacter1 r)
#endif
/* ffetarget_concatenate_character1 -- Perform CONCAT op on two constants
- Compare lengths, if equal then use memcmp. */
+ Always append a null byte to the end, in case this is wanted in
+ a special case such as passing a string as a FORMAT or %REF.
+ Done to save a bit of hassle, nothing more, but it's a kludge anyway,
+ because it isn't a "feature" that is self-documenting. Use the
+ string "FFETARGET-NULL-KLUDGE" to flag anyplace you use this feature
+ in the code. */
#if FFETARGET_okCHARACTER1
ffebad
@@ -331,11 +344,12 @@ ffetarget_concatenate_character1 (ffetargetCharacter1 *res,
res->text = NULL;
else
{
- res->text = malloc_new_kp (pool, "ffetargetCharacter1(CONCAT)", *len);
+ res->text = malloc_new_kp (pool, "ffetargetCharacter1(CONCAT)", *len + 1);
if (l.length != 0)
memcpy (res->text, l.text, l.length);
if (r.length != 0)
memcpy (res->text + l.length, r.text, r.length);
+ res->text[*len] = '\0';
}
return FFEBAD;
@@ -501,7 +515,12 @@ ffetarget_ne_character1 (bool *res, ffetargetCharacter1 l,
#endif
/* ffetarget_substr_character1 -- Perform SUBSTR op on three constants
- Compare lengths, if equal then use memcmp. */
+ Always append a null byte to the end, in case this is wanted in
+ a special case such as passing a string as a FORMAT or %REF.
+ Done to save a bit of hassle, nothing more, but it's a kludge anyway,
+ because it isn't a "feature" that is self-documenting. Use the
+ string "FFETARGET-NULL-KLUDGE" to flag anyplace you use this feature
+ in the code. */
#if FFETARGET_okCHARACTER1
ffebad
@@ -519,8 +538,9 @@ ffetarget_substr_character1 (ffetargetCharacter1 *res,
else
{
res->length = *len = last - first + 1;
- res->text = malloc_new_kp (pool, "ffetargetCharacter1(SUBSTR)", *len);
+ res->text = malloc_new_kp (pool, "ffetargetCharacter1(SUBSTR)", *len + 1);
memcpy (res->text, l.text + first - 1, *len);
+ res->text[*len] = '\0';
}
return FFEBAD;
@@ -666,6 +686,13 @@ ffetarget_convert_any_typeless_ (char *res, size_t size,
return FFEBAD;
}
+/* Always append a null byte to the end, in case this is wanted in
+ a special case such as passing a string as a FORMAT or %REF.
+ Done to save a bit of hassle, nothing more, but it's a kludge anyway,
+ because it isn't a "feature" that is self-documenting. Use the
+ string "FFETARGET-NULL-KLUDGE" to flag anyplace you use this feature
+ in the code. */
+
#if FFETARGET_okCHARACTER1
ffebad
ffetarget_convert_character1_character1 (ffetargetCharacter1 *res,
@@ -678,7 +705,7 @@ ffetarget_convert_character1_character1 (ffetargetCharacter1 *res,
res->text = NULL;
else
{
- res->text = malloc_new_kp (pool, "FFETARGET cvt char1", size);
+ res->text = malloc_new_kp (pool, "FFETARGET cvt char1", size + 1);
if (size <= l.length)
memcpy (res->text, l.text, size);
else
@@ -686,12 +713,21 @@ ffetarget_convert_character1_character1 (ffetargetCharacter1 *res,
memcpy (res->text, l.text, l.length);
memset (res->text + l.length, ' ', size - l.length);
}
+ res->text[size] = '\0';
}
return FFEBAD;
}
#endif
+
+/* Always append a null byte to the end, in case this is wanted in
+ a special case such as passing a string as a FORMAT or %REF.
+ Done to save a bit of hassle, nothing more, but it's a kludge anyway,
+ because it isn't a "feature" that is self-documenting. Use the
+ string "FFETARGET-NULL-KLUDGE" to flag anyplace you use this feature
+ in the code. */
+
#if FFETARGET_okCHARACTER1
ffebad
ffetarget_convert_character1_hollerith (ffetargetCharacter1 *res,
@@ -703,7 +739,8 @@ ffetarget_convert_character1_hollerith (ffetargetCharacter1 *res,
res->text = NULL;
else
{
- res->text = malloc_new_kp (pool, "FFETARGET cvt char1", size);
+ res->text = malloc_new_kp (pool, "FFETARGET cvt char1", size + 1);
+ res->text[size] = '\0';
if (size <= l.length)
{
char *p;
@@ -727,7 +764,14 @@ ffetarget_convert_character1_hollerith (ffetargetCharacter1 *res,
}
#endif
-/* ffetarget_convert_character1_integer1 -- Raw conversion. */
+/* ffetarget_convert_character1_integer4 -- Raw conversion.
+
+ Always append a null byte to the end, in case this is wanted in
+ a special case such as passing a string as a FORMAT or %REF.
+ Done to save a bit of hassle, nothing more, but it's a kludge anyway,
+ because it isn't a "feature" that is self-documenting. Use the
+ string "FFETARGET-NULL-KLUDGE" to flag anyplace you use this feature
+ in the code. */
#if FFETARGET_okCHARACTER1
ffebad
@@ -788,7 +832,8 @@ ffetarget_convert_character1_integer4 (ffetargetCharacter1 *res,
res->text = NULL;
else
{
- res->text = malloc_new_kp (pool, "FFETARGET cvt char1", size);
+ res->text = malloc_new_kp (pool, "FFETARGET cvt char1", size + 1);
+ res->text[size] = '\0';
if (((size_t) size) <= size_of)
{
int i = size_of - size;
@@ -813,7 +858,14 @@ ffetarget_convert_character1_integer4 (ffetargetCharacter1 *res,
}
#endif
-/* ffetarget_convert_character1_logical1 -- Raw conversion. */
+/* ffetarget_convert_character1_logical4 -- Raw conversion.
+
+ Always append a null byte to the end, in case this is wanted in
+ a special case such as passing a string as a FORMAT or %REF.
+ Done to save a bit of hassle, nothing more, but it's a kludge anyway,
+ because it isn't a "feature" that is self-documenting. Use the
+ string "FFETARGET-NULL-KLUDGE" to flag anyplace you use this feature
+ in the code. */
#if FFETARGET_okCHARACTER1
ffebad
@@ -874,7 +926,8 @@ ffetarget_convert_character1_logical4 (ffetargetCharacter1 *res,
res->text = NULL;
else
{
- res->text = malloc_new_kp (pool, "FFETARGET cvt char1", size);
+ res->text = malloc_new_kp (pool, "FFETARGET cvt char1", size + 1);
+ res->text[size] = '\0';
if (((size_t) size) <= size_of)
{
int i = size_of - size;
@@ -899,7 +952,14 @@ ffetarget_convert_character1_logical4 (ffetargetCharacter1 *res,
}
#endif
-/* ffetarget_convert_character1_typeless -- Raw conversion. */
+/* ffetarget_convert_character1_typeless -- Raw conversion.
+
+ Always append a null byte to the end, in case this is wanted in
+ a special case such as passing a string as a FORMAT or %REF.
+ Done to save a bit of hassle, nothing more, but it's a kludge anyway,
+ because it isn't a "feature" that is self-documenting. Use the
+ string "FFETARGET-NULL-KLUDGE" to flag anyplace you use this feature
+ in the code. */
#if FFETARGET_okCHARACTER1
ffebad
@@ -960,7 +1020,8 @@ ffetarget_convert_character1_typeless (ffetargetCharacter1 *res,
res->text = NULL;
else
{
- res->text = malloc_new_kp (pool, "FFETARGET cvt char1", size);
+ res->text = malloc_new_kp (pool, "FFETARGET cvt char1", size + 1);
+ res->text[size] = '\0';
if (((size_t) size) <= size_of)
{
int i = size_of - size;
@@ -1101,17 +1162,21 @@ ffetarget_divide_complex2 (ffetargetComplex2 *res, ffetargetComplex2 l,
#endif
/* ffetarget_hollerith -- Convert token to a hollerith constant
- See prototype.
-
- Token use count not affected overall. */
+ Always append a null byte to the end, in case this is wanted in
+ a special case such as passing a string as a FORMAT or %REF.
+ Done to save a bit of hassle, nothing more, but it's a kludge anyway,
+ because it isn't a "feature" that is self-documenting. Use the
+ string "FFETARGET-NULL-KLUDGE" to flag anyplace you use this feature
+ in the code. */
bool
ffetarget_hollerith (ffetargetHollerith *val, ffelexToken integer,
mallocPool pool)
{
val->length = ffelex_token_length (integer);
- val->text = malloc_new_kp (pool, "ffetargetHollerith", val->length);
+ val->text = malloc_new_kp (pool, "ffetargetHollerith", val->length + 1);
memcpy (val->text, ffelex_token_text (integer), val->length);
+ val->text[val->length] = '\0';
return TRUE;
}
@@ -2191,13 +2256,15 @@ ffetarget_real1 (ffetargetReal1 *value, ffelexToken integer,
dotoktxt (exponent);
if (exponent_sign != NULL)
- if (ffelex_token_type (exponent_sign) == FFELEX_typePLUS)
- *p++ = '+';
- else
- {
- assert (ffelex_token_type (exponent_sign) == FFELEX_typeMINUS);
- *p++ = '-';
- }
+ {
+ if (ffelex_token_type (exponent_sign) == FFELEX_typePLUS)
+ *p++ = '+';
+ else
+ {
+ assert (ffelex_token_type (exponent_sign) == FFELEX_typeMINUS);
+ *p++ = '-';
+ }
+ }
dotoktxt (exponent_digits);
@@ -2275,13 +2342,15 @@ ffetarget_real2 (ffetargetReal2 *value, ffelexToken integer,
dotoktxtexp (exponent);
if (exponent_sign != NULL)
- if (ffelex_token_type (exponent_sign) == FFELEX_typePLUS)
- *p++ = '+';
- else
- {
- assert (ffelex_token_type (exponent_sign) == FFELEX_typeMINUS);
- *p++ = '-';
- }
+ {
+ if (ffelex_token_type (exponent_sign) == FFELEX_typePLUS)
+ *p++ = '+';
+ else
+ {
+ assert (ffelex_token_type (exponent_sign) == FFELEX_typeMINUS);
+ *p++ = '-';
+ }
+ }
dotoktxt (exponent_digits);
diff --git a/gcc/f/top.c b/gcc/f/top.c
index 50d596ec82e..641bd39dc4a 100644
--- a/gcc/f/top.c
+++ b/gcc/f/top.c
@@ -175,9 +175,11 @@ ffe_decode_option (char *opt)
{
ffe_is_do_internal_checks_ = 0;
#if BUILT_FOR_270 /* User must have applied patch (circa 2.7.2 and beyond). */
+#if 0
+ flag_rerun_loop_opt = 1;
+#endif
flag_move_all_movables = 1;
flag_reduce_all_givs = 1;
- flag_rerun_loop_opt = 1;
flag_argument_noalias = 2;
#endif
}
diff --git a/gcc/f/zzz.c b/gcc/f/version.c
index 6ac6a1123d0..9cbabbdb590 100644
--- a/gcc/f/zzz.c
+++ b/gcc/f/version.c
@@ -1,5 +1,5 @@
-/* zzz.c -- Implementation File (module.c template V1.0)
- Copyright (C) 1995 Free Software Foundation, Inc.
+/* version.c -- Implementation File (module.c template V1.0)
+ Copyright (C) 1995, 1997 Free Software Foundation, Inc.
Contributed by James Craig Burley (burley@gnu.ai.mit.edu).
This file is part of GNU Fortran.
@@ -29,28 +29,6 @@ the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
Modifications:
*/
-#include "zzz.h"
-
-/* If you want to override the version date/time info with your own
- macros, e.g. for a consistent distribution when bootstrapping,
- go ahead! */
-
-#ifndef FFEZZZ_DATE
-#ifdef __DATE__
-#define FFEZZZ_DATE __DATE__
-#else /* !defined (__DATE__) */
-#define FFEZZZ_DATE "date unknown"
-#endif /* !defined (__DATE__) */
-#endif /* !defined (FFEZZZ_DATE) */
-
-#ifndef FFEZZZ_TIME
-#ifdef __TIME__
-#define FFEZZZ_TIME __TIME__
-#else /* !defined (__TIME__) */
-#define FFEZZZ_TIME "time unknown"
-#endif /* !defined (__TIME__) */
-#endif /* !defined (FFEZZZ_TIME) */
-
-char *ffezzz_version_string = "0.5.21";
-char *ffezzz_date = FFEZZZ_DATE;
-char *ffezzz_time = FFEZZZ_TIME;
+#include "version.h"
+
+char *ffe_version_string = "0.5.22-19970929";
diff --git a/gcc/f/zzz.h b/gcc/f/version.h
index 9414f97f43e..f8dcd327e27 100644
--- a/gcc/f/zzz.h
+++ b/gcc/f/version.h
@@ -1,5 +1,5 @@
-/* zzz.h -- Public #include File (module.h template V1.0)
- Copyright (C) 1995 Free Software Foundation, Inc.
+/* version.h -- Public #include File (module.h template V1.0)
+ Copyright (C) 1995, 1997 Free Software Foundation, Inc.
Contributed by James Craig Burley (burley@gnu.ai.mit.edu).
This file is part of GNU Fortran.
@@ -20,16 +20,14 @@ the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
02111-1307, USA.
Owning Modules:
- zzz.c
+ version.c
Modifications:
*/
-#ifndef _H_f_zzz
-#define _H_f_zzz
+#ifndef _H_f_version
+#define _H_f_version
-extern char *ffezzz_version_string;
-extern char *ffezzz_date;
-extern char *ffezzz_time;
+extern char *ffe_version_string;
#endif