Recent changes to armcc
=======================

Changes to Version 4.61 (A.R.M.) (Release 1.6.1)
------------------------------------------------

Compiler aborts when compiling a function containing a completely empty loop
(as for example  for (;;) continue;) have been fixed.

When compiling -g, the compiler no longer generates a spurious variable item
for each typedef (as well as the expected type item).

When it encounters a floating point constant too small to have a normalised
value, the compiler no longer generates an error as well as setting the
value to 0, but only warns.


Changes to Version 4.60 (A.R.M.) (Release 1.6)
----------------------------------------------

Accesses to volatile objects are now never optimised away (was broken in
release 1.5).

-zr<n> can be used to limit the number of registers trasferred by a single
LDM or STM instruction.  This can be used to help reduce interrupt latency.

-Ospace can be used to request that optimisations consider making code small
more important than making the the code fast.

-Otime can be used to request that optimisations consider making code fast
more important than making code small.

-via <file> can be used to read further compiler options in from <file>.

The ARMINC environment variable can be used to specify a search path for
system include files.

By default armcc now produces LFM and SFM instructions to preserve floating
point registers.  This requires the new floating point emulator to support
these instructions.  However, armcc can be reconfigured for use with the old
FPE.  See the User Manual for details.


Changes to Version 4.50 (A.R.M.) [Apr 19 1993] (Release 1.5)
------------------------------------------------------------

The storage class specifier __global_reg(n) may be used with the same effect
as #pragma r<n> to declare an integer global register variable.

The storage class specifier __global_freg(n) may be used with the same effect
as #pragma f<n> to declare an floating-point global register variable.

Functions may be defined with the qualifier __irq: such functions are
suitable for direct attachment to the irq vector (they save all registers on
entry, and restore the psr on exit, and return to the address in r14 - 4, not
to r14).

const-qualified static data is now placed in the code area, rather than the
data area.

The -g option causes ASD tables to be generated which are incompatible with
earlier debuggers. If necessary, the compiler may be configured to generate
the old format of table, or it may be invoked with option -zpq128.

A new tag inside the parameter list of a function declaration inside a struct
or union declaration with no declarator no longer causes a compiler abort at
the end of the next declaration with a declarator.

Pure functions with fp arguments no longer cause CSE to produce wrong code
when compiled with fpregargs enabled.

The apcs option /noswst now causes the stack check to be omitted (as well as
freeing SL for allocation as a v-register).


Version 4.41 (A.R.M.) [Aug 26 1992] (Release 1.4)
-------------------------------------------------

[Changes not recorded here]


Version 4.30 (A.R.M.) [Apr 16 1992] (Release 1.3)
-------------------------------------------------

[Changes not recorded here]


Version 4.20 (A.R.M.) [Dec 09 1991] (Release 1.0)
-------------------------------------------------
