daemon@caip.UUCP (07/14/86)
From: pipedev@NADC
The -a option causes the default storage class for local variables to be
"auto" (this is normally the default in most other C compilers, but not
for C Power, where the default is "register". Register variables are simu-
lated witha block of page zero "registers". Since this same block of registers
is shared when functions are called, there is a problem when the address of
a local variable of storage class "register" is passed - the address will
not contain the proper value during execution of the function called). Using
the -a option makes the generated object code more compatible with other C
compilers, but at quite a cost in execution speed - better you should explicitly
declare the storage class of all local variables (but traditionally, this has
not been done, and often "auto" is assumed). The -s option causes the default
storage class for local variables to be "static". Technically, this should
produce code slightly faster than "auto" at the cost of the loss of recursion
capability; in actuality, the "register" default is better than both because
of the page zero accesses.
Summary: Avoid using -a and -s options unless the program just plain doesn't
work and appears like it should - then try the -a option: if the program now
works, the best bet (for speed) is to search out places within the program
where "&var" is either passed as a parameter to another function ("var" is
a local scalar declared without explicit storage class) or stuffed into a
pointer which is subsequently passed to another function. Simply
declare such variables "auto", then no longer use the -a option, and the problem
will be solved with the program running as fast as possible. There seems to
be little redeeming value for the -s option.
Frank Prindle
Prindle@NADC.arpa