ARM Software Development Toolkit

Release 1.6, 31st October 1993.

Differences between Release 1.6 and Release 1.5

--------------------------------------------------------------------------
Advanced RISC Machines Limited,
    Park End, Swaffham Bulbeck, Cambridge, CB5 0NA, England.
        Tel: +44 223 813000  Fax: +44 223 812800
--------------------------------------------------------------------------

Copyright (C) 1993 Advanced RISC Machines Limited. All rights reserved.


Changes to armasm
-----------------

User visible changes:

 *  Previously some floating point data operation mnemonics with incorrect
    rounding and precision modes would be accepted.  armasm now reports all
    incorrect sufficies.

 *  Labels on the same line as a NOP instruction are now recognised.

 *  ARM7M long multiply instructions are now supported.  See the appropriate
    datasheet for details of their format.  In addition, decaof, armsd and
    armwd can now disassemble these instructions.

 *  A new -CPU target option has been added to inform armasm of the target
    CPU.  target may currently be one of ARM6, ARM7 or ARM7M.  If
    instructions are used which are not supported by the selected target CPU
    then armasm issues a warning to that effect.  This option is
    configurable.

 *  The '\' character, which can be used as the last character on a line to
    split long logical lines across several physical lines previously made
    the line number in diagnostic messages out of step.  This has been fixed.
 
 *  Under SunOS armasm would core dump when given the valid line:

        EXPORT  a_leaf_function[LEAF]

    This has now been fixed and works as expected.


Changes to armcc
----------------

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 armlink
------------------

User visible changes:

 -  Armlink no longer warns about use of the FP3 floating point instruction
    set, now that this is the preferred standard. The warning can be
    reinstated (for last-ditch debugging) by using the command line option:
        -MATCH 32

 -  Symbols defined in unused AREAs eliminated by armlink are no longer
    listed by the -Symbols command line options.

 -  Fix the cache mismanagement problem which arises when there is
    insufficient memory. Fixed by introducing lock_in_cache() and
    unlock_cache_block(), used to bracket calls from load1() and load_lib().

Sharable library format and help text improvements:

 -  Added a -SPLIT option, currently only effective for -BIN and -IHF output
    formats, which allows the read-only and read-write sections to be
    generated in two separate files. If the output file given to -Output is
    called 'image', then the output segment file names used are as follows:

      armlink command line options            read-only       read-write

      -Base N     -DATA M    -SPLIT           image           image.dat
      -Base N     -RW-base M -SPLIT           image           image.rw
      -RO-base N  -RW-base M -SPLIT           image.ro        image.rw

    Without -SPLIT, the 2 segments will be concatenated in a single output
    file, as before. For now, there is no diagnosis of invalid option
    combinations.

 -  Diagnose the incompatibility of -DATA/RW_base with -IHF (unless -SPLIT is
    used).

 -  Add an option to output a shared library binary into a separate chunk of
    the stub AOF file rather than to a separate file. This enabled via the
    shl file control line:

      > library_name(-)

    That is, "-" as the shared library binary file name denotes a
    deliberately omitted name and that the shared library binary should be
    written to the SHL_LIBY chunk of the stub.

 -  Relocation of LDR/STR (only used in reentrant code) has been fixed -
    previously instr_offset() set the LDR/STR offset to 0 always (fault
    probably introduced in version 4.33).

 -  *** Incompatible changes to unpublished behaviour ***

    The symbols EFT$$Offset EFT$$Params are no longer present in the stub;
    they are internal symbols for use while building a sharable library.

    Input areas of type SHL_DATA (other stub data areas) are no longer
    copied to the output stub.

    These changes support working with multiple sharable libraries.

 -  Sharable libraries now support a data in library option (with a zero-
    initialised place holder in the stub, filled at run time by dynamic
    linking or library initialisation code).

 -  Sharable library description files now permit comments more freely.

 -  Help text now includes -RO-base, -RW-base and -SPLIT.

The internal changes are:

 -  On the Macintosh, armlink now allocates 'temporary memory' rather than
    requiring a very large MPW memory partition to run in.

 -  Hash table sizes have been adjusted to be kinder to large link steps. A
    small amount more memory is used as a result. A small improvement in
    performance may be seen in very large link steps.

 -  While reading of an object file, area names are hashed rather than
    looked up by linear search. This gives usefully better performance if
    objects have been compiled one AREA per function (-zO). It has no effect
    on 'traditional' 3 AREAs/object objects. The impact on memory usage is
    negligible.

 -  Improved PC hosting by introducing BINARY_OPEN_MODE into hostdep.h.

 -  Prevented instruction sequence relocation being appliced to AREAs from
    objects whose AOF version number is less than 310. Similarly, removed
    the inference that pcrel => len=3 if the AOF version number is >= 310
    (this obsoletes the configurability introduced in armlink Version 4.33
    [Mar 29 1993]).

 -  There has also been an internal reorganisation of messages to better
    support native languages and the separation of message text into an
    application resource.

Internal changes to support a future scatter-load image format based on
overlays:

 -  Use of overfile != NULL to mean overflag has been reworked into
    scatterflag == OVERLAY.
                           
 -  There is a new, hidden command-line option -SCATTER. When used, overlay
    segments <must> have a base address specified in the overlay file. These
    features have not ben released.


Changes to armsd
----------------

The Comment and Pause commands have been added.

Source-level expressions are now permitted to contain function calls.

Assorted reported problems with armsd commands have been fixed.

The serial driver has been split out of the debugger library supplied, in the
release, and source for the serial driver is provided.


Changes to armul (The ARMulator)
----------------

Improvement: ARMul_SelectProcessor now supports many more processor types.

Addition: When emulating appropriate processors, ARM7M 64-bit
multiplies are supported. In addition, ARM7M timings for the 32-bit
MUL instruction are given.

Addition: The clearAborts flag in ARMul_State has been added to
allow an increase in the efficiency of memory models. (The supplied
models do not yet take advantage of this.)

Addition: The ModeChange upcall pointer has been added so that
claimants of the upcall can be told when the processor has changed
mode.

Improvement: Demon 1.2 emulation has been installed in armos.c . This
supports the new FPE, and re-maps the layout of the various stacks.


Changes to topcc
----------------

#line directives are now added to the translated source so that when
subsequently compiling the output from topcc, diagnostic messages will refer
to the original source rather than the output of topcc.

-l inhibits the production of #line directives.


Changes to the Floating Point Emulator
--------------------------------------

The version of the Floating Point Emulator (FPE) released with the ARM
Software Cross Development Toolkit release 1.5 and earlier, has been
superceded in release 1.6 by a new FPA10-compatible floating point emulator.

There are several major changes in this version of the FPE of which users
should be aware:

 *  Extended precision is now an IEEE-754 double-extended format.  This means
    that an STF may now cause an exception if the value being stored is a
    NaN ("Not a Number", an IEEE-754 term), thus LDF and STF are no longer
    safe instructions to use for preserving floating point register contents
    across a function call. Instead the new Load Floating Multiple (LFM) and
    Store Floating Multiple (SFM) instructions should be used.

 *  New Load Floating Multiple (LFM) and Store Floating Multiple (SFM) 
    instructions have been implemented and are generated by the compiler in
    its shipped state.  They are also used by the ARM C Libraries shipped
    with this release.

 *  There are further instruction set extensions, which are only likely to be
    of interest to users interested in writing floating point code in ARM
    assembly language, or in making full use of the FPA10.  Full details are
    given in the FPA10 datasheet.

The consequences of the FPE on the ARM Software Tools and details of the new
LFM and SFM instructions are detailed in notes/fpe.


Changes to the ARM C Libraries
------------------------------

The pre-built C Libraries have changed to use LFM and SFM instructions are to
preserve floating point registers across function calls and, thus use of the
new floating point emulator is required.  The library must be rebuilt
(changing FPIS=3 to FPIS=2 in the makedefs file) if the old FPE is to be
used.  For more information about the new FPE see notes/fpe.

The makedefs file allows C libraries to be built with a limit to the number
of registers transferred by any single LDM or STM instruction.  The LDMLIMIT
macro in makedefs can be set to any value from 3 to 16 inclusive.  This can
be used to help reduce interrupt latency.
