More on G77 Development Status

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, 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 -----------------------------------------------------------------------
      PROGRAM G77
      REAL BOF
      WHAT() = 2. * 3.14 * QWHAT
      CALL GIMME(FUNDS,*999)
      PRINT *,'Goodies For Contributors!!'
      GO TO (999),NEXT
999   STOP 3HWHY
C -----------------------------------------------------------------------
C Copyright (C) 1999 James Craig Burley
C Last modified 2000-04-03
C -----------------------------------------------------------------------