[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

C compilers on sparcs

I have received a good deal of mail about the reliability of various
compilers on the sparcs for compilation with AKCL.

I have tested the following compilers on sparcs.  My main concern has
been the correctness of the resulting code.   After Sun OS release 4.03,
Sun has been distributing the normal compiler with the release and a
second version for which they charge extra money.

Unfortunately their having to test and release two compilers seems to
have lowered the quality of both.  It certainly has doubled our work
in testing releases since we now must test with both compilers (of
course it is many times more than double if they are flaky).


           Compile AKCL    | Compile NQTHM | Run NQTHM lisp files
cc-4.03       YES               YES              YES
cc-4.1.1       NO                 ?                ?
cc-money      YES(not -O4)     YES               YES
gcc-1.39      YES               NO             run with .o by cc-4.03

Recommend: Use cc-4.03

Explanation of abbreviations:

cc-4.03  [ Best Buy ]
   If running OS 4.1 or 4.1.1, install in  /usr/local/lib/cc-4.03 the 3 files
   /lib/{ccom,cg,iropt} which are on rascal in cc-4.03.tar.Z  If not
   under utexas sun license you must have permission from sun
   to copy these--they are from the sun OS version 4.03.
   Then instead of cc use 
   cc -Qpath /usr/local/lib/cc-4.03 -U__BUILTIN_VA_ARG_INCR
   standard C compiler supplied by sun from 4.1.1 or 4.1
   Optional unbundled C compiler available from sun.   Does not seem
   to understand correct volatile declarations, but does not need them.
   use -DVOL=.   This compiler seems fine if you use -O not -O4.
   [see note on size below!]
   gcc version 1.39.   Make sure you have installed
   /usr/local/lib/gcc-include/varargs.h ->  gcc-1.39/gvarargs.h
   /usr/local/lib/gcc-include/stdarg.h ->  gcc-1.39/stdarg.h
   and that when you use gcc -E it is really getting those versions!
   gcc is very close to working, but there is still some bug.
   It is very much faster at compiling, and has the big advantage
   of allowing debugging info in optimized code. [note that gcc would
   not compile the base system before akcl-1-592 because some volatile
   declarations were missing].

Additional Remarks:

0) cc-4.03 is the only compiler which produced correct code under all
optimizations (ie on -O4).  The code is reasonably small.  The 3 extra
compiler files only take up 1/2 MB.  You will save a great deal of
time by taking the trouble to obtain these.

1) Clearly one needs to avoid cc-4.1.1 and hope they correct the
problems in the next release.  Even with optimize off, it did not
produce code which ran reliably.  The errors produced caused RANDOM
failure.  Code compiled with it would work ten times and fail the
11'th.   This makes finding the bug almost impossible.  Steer clear
of it.

2) I used -O4 on all files but format.c.  If used there the lisp
format did not work correctly (sometimes dropped args--users will
notice this the first time they try to compile a file, since the
pathname gets dropped when format is used to build the command to
invoke the compiler).  Here are text sizes of some of o/format.o
compiled with various compiler flags.

CODE SIZE of o/format.o
==== ====
   cc-money -O4   74032
   cc-money -O    28736
   cc-4.03  -O4   29072
   cc-4.1.1 -O4   29240
   gcc-1.39 -O    29216

As you can see cc-money -O4 is a loser from the point of view of size.
I guess the huge extra size with -O4 somehow introduces a bug.
I did not find errors in other files compiled by cc-money.

Bill Schelter