The following information, listed in reverse chronological order, does not necessarily apply to any released version of g77, until such time as the development version is packaged up as an official release!
(Much of the information below is obsolete, but is provided for those interested in browsing g77's history.)
Several proposed patches have been submitted
on the GCC lists
for inclusion in g77
.
Most of them look good to me,
and I've said so,
but I'm leaving actual decisions and committing of the patches
to whoever takes over those roles.
In the meantime, I've added a few new tests from my private test suite to the GCC test suite, so other developers have more opportunity to find and fix bugs.
I'm still adjusting to my new computer keyboard (which is the main reason why I've been so "quiet" lately).
As I catch up with other work, I expect to add explanations regarding my recent decision to stop working on g77, as well as filling out other areas of this web site.
I'm also hoping to write up some more docs on my opinions about how the 0.6 rewrite should be architected, so whoever takes over can make a more informed decision regarding when, and how, to pursue that, vis-a-vis other areas that I think need more attention right now.
Yesterday, after finally building g77 on my UltraSPARC-1
(which is on loan from Lehigh University until August or so),
I noticed that the DATE
intrinsic,
tested during the `make check
' phase of the build,
returned the wrong date.
I've fixed this, and the bug-fix has just been approved for and installed into the forthcoming GCC version 2.95, which includes g77 version 0.5.25.
Also, per an older item below,
GCC version 2.95
will include the latest fixes for NAMELIST
and use of -fno-f2c
with COMPLEX
.
Back from vacation!
I'll be on vacation Friday 1999-07-02 through Monday 07-05, and probably won't check email or update my web pages at all during that time.
Late last night (well, this morning) I wrote up a "prototype" of an "overview" document for the GNU Compiler Collection (GCC), intended for inclusion in the 2.95 release, which is due out quite soon now.
The primary focus of this effort was to document "multilibs",
a feature that many GCC
users will encounter
for the first time in version 2.95,
and for which there seemed to be no existing documentation.
I received some good, basic documentation on this feature from Robert Lipe,
after asking the GCC developers
(or just Robert, I forget)
for some info to work with.
Then I realized that the newly-named GCC product
needed an overview document that referred readers to the
gcc
documentation,
the g77
documentation,
and so on,
and that listed all the components of the "Collection".
This document didn't end up going into 2.95, but at least it's a start, upon which other developers can hang various chunks of documentation, or just rip apart into shreds that they can pull into other documents as appropriate.
Changed
How to Get f2c
to point to new location for
(slightly modified version of)
shell script I use to download f2c,
which used to be called UNPACK-F2C
.
Installed that download script,
as well as two others to do conversions,
in gcc/contrib/
directory
of GCC.
Fixed bug involving -fno-f2c
and COMPLEX
intrinsics this morning.
Integrated latest version of libf2c,
which had a better fix for the NAMELIST
-read problem
that I came up with last week (after having debugged it).
Not yet clear whether these fixes will be accepted into gcc 2.95.
I've been working pretty hard lately, but not on the rewrite. Mostly I've been dealing with EGCS 2.95 (g77 0.5.25) issues, as well as trying to upgrade my systems to Redhat 6.0.
Read about my Alpha problems if you really want to know more of my story of painful attempts at progress.
Thanks to a patch, with analysis, sent in by
watson_ian_a
at-sign lilly.com
,
aka Ian Watson,
in response to a bug report,
BACKSPACE
has been fixed
to no longer lose track of the unit it is working on
at run time.
The fix, to libf2c, has been submitted to the maintainer of libf2c, but will be in gcc version 2.95.
Some confusion regarding how multiple-dimension arrays in Fortran are handled by compilers and debuggers has come to light.
At the moment, there is substantial consensus that g77
is emitting the proper information (in stabs
format),
but gdb is sometimes improperly reversing the order
of subscripts in array declarations.
However, it appears that at least some vendor Fortran compilers
work with gdb,
except possibly its whatis
command,
suggesting that either there are specifications for stabs
we (at GNU) don't know about,
or they've worked around the bug.
If their workaround involves generating incorrect stabs
,
then there could be trouble if gdb is fixed
to honor properly constructed stabs
,
such as those produced by g77.
For more information, review the recent discussions
on the EGCS and bug-gdb
mailing lists.
Richard Henderson has donated a new IA32 "back end", or set of machine descriptions and general optimizations designed to provide improved performance for Intel IA32 processors, primarily those with the Pentium II core.
Assuming this work is integrated in time for gcc version 3.0, this could result in improved performance for code generated by g77 on those processors.
See the EGCS mailing-list archives for more information,
message id 7183
.
The rewrite is proceeding! Starting with the lexer. This is going to be a more thorough rewrite than I'd planned. Hopefully that'll mean an even cleaner product than I'd imagined, with less extra cruft trying to support all sorts of possible extensions, the focus being on only the important, realistic stuff. What that'll do to the schedule, I can't say for sure, but I'm hopeful that it means things will move pretty fast.
To make it easier to watch the g77 0.6 rewrite progress,
I'm temporarily putting the egcs/gcc/f/ffe.texi
file,
which contains, in its first section entitled
"Overview of Translation Process",
the budding architectural document for the new front end,
back on the "mainline" of the development tree.
This automatically causes that version of the file
to be used every 24 hours or so when the
online g77 documentation
is regenerated.
Currently the "Front End" chapter
containing the section on the new design
ends up at
this
URL,
though the precise location might move if preceding portions
of the g77 documentation,
or the method used to convert it to HTML,
change,
so if that latter link does not work,
use the former,
then follow the link to "Front End".
I created a CVS branch
on the EGCS repository
for the 0.6 rewrite of g77.
The branch tag is named g77-0_6-branch
,
and the branchpoint tag is named g77-0_6-branchpoint
.
I've already done some sketching of the new architecture
in egcs/gcc/f/ffe.texi
.
I polished up Toon's improvements
to complex division (see below)
so they wouldn't affect code generation
for front ends other than g77
or for when the -Os
option is specified.
g77 no longer truncates INTEGER(KIND=2)
(usually INTEGER*8
)
subscript expressions when evaluating array references on systems
with pointers widers than INTEGER(KIND=1)
(such as Alphas).
A minor performance improvement to the SqRt
intrinsic
has been introduced.
It consists of eliminating the maintenance of errno
,
which is a requirement of the C, not Fortran, language.
Please help test the upcoming release of g77 by downloading a recent EGCS snapshot, building it, and so on! We've passed the feature-freeze date already. For scheduling and other information, see the GCC web site.
I've expanded the section "Advantages Over f2c
"
in the g77 documentation
to include what I hope is a pretty thorough listing of differences.
It doesn't look too bad for g77 at first glance,
but some of the newly listed disadvantages
are pretty substantial,
such as intrinsics in PARAMETER
statements
and the -r8
option.
I just implemented array bounds-checking (1999-04-23),
pretty much along the lines of how f2c does it,
except g77 checks each subscript,
not just the cumulative offset
(mainly because that's actually easier!),
and it checks CHARACTER
substring references as well.
I rewrote some key portions of g77 code-generation code.
This took a couple of weeks,
and the immediate advantages are not quite evident,
but the long-term advantages should be things like
more easily supporting arbitrary CHARACTER*(*)
concatenation.
Toon Moene has contributed a patch to teach the back end
how to open-code complex division so it handles the larger ranges
of inputs that libf2c handles in its c_div
and z_div
routines.
There are some ongoing unresolved issues revolving around
libg2c, multilibbing, and so on.
If you understand make
files, shell scripts,
configuration issues, and/or cross-compilation,
please consider helping out on this issue
within the EGCS project.
Some pretty interesting performance improvements
seem to be taking place in EGCS
for gcc
version 2.95
that affect the Intel x86 architecture
(which includes the various Pentium processors).
These, as well as other improvements,
seem likely to help g77 performance,
despite being concentrated on gcc,
g++, or whatever.
C ----------------------------------------------------------------------- C ----- GNU Fortran (g77) ----- C ----------------------------------------------------------------------- C PROGRAM G77 C COMMON/QUICKY/QNEWS,QWHAT,QWHO,QHOW,QWHERE,QRLEAS,QSTAT,QWANT, 1 QY2K,QALIGN,QFUND,QF2C,QMAIL C REAL BOF C WHAT() = 2. * 3.14 * QWHAT C READ *,STATUS,NEXT CALL GIMME(FUNDS,*999) PRINT *,'Goodies For Contributors!!' GO TO (999),NEXT CONTINUE INQUIRE (UNIT=99,NAME=WANTED) CALL WHO(CRUNCH) 999 STOP 3HWHY END C C ----------------------------------------------------------------------- C C Copyright (C) 1999 James Craig Burley C C Last modified 2000-04-03 C C -----------------------------------------------------------------------