-*- text -*-

Changes in 2.10:

Support for the Motorolla MCore 210 processor added.

A new pseudo-op .intel_syntax has been implemented to allow gas to parse i386 assembly
programs with intel syntax.

New pseudo-ops .func,.endfunc to aid in debugging user-written assembler code.

Full 16-bit mode support for i386.

Greatly improved instruction operand checking for i386.  This change will
produce errors or warnings on incorrect assembly code that previous versions of
gas accepted.  If you get unexpected messages from code that worked with older
versions of gas, please double check the code before reporting a bug.

Weak symbol support added for COFF targets.

Mitsubishi D30V support added.

Texas Instruments c80 (tms320c80) support added.

i960 ELF support added.

Changes in 2.9:

Texas Instruments c30 (tms320c30) support added.

The assembler now optimizes the exception frame information generated by egcs
and gcc 2.8.  The new --traditional-format option disables this optimization.

Added --gstabs option to generate stabs debugging information.

The -a option takes a new suboption, m (e.g., -alm) to expand macros in a
listing.

Added -MD option to print dependencies.

Changes in 2.8:

BeOS support added.

MIPS16 support added.

Motorola ColdFire 5200 support added (configure for m68k and use -m5200).

Alpha/VMS support added.

m68k options --base-size-default-16, --base-size-default-32,
--disp-size-default-16, and --disp-size-default-32 added.

The alignment directives now take an optional third argument, which is the
maximum number of bytes to skip.  If doing the alignment would require skipping
more than the given number of bytes, the alignment is not done at all.

The ELF assembler has a new pseudo-op, .symver, used for symbol versioning.

The -a option takes a new suboption, c (e.g., -alc), to skip false conditionals
in listings.

Added new pseudo-op, .equiv; it's like .equ, except that it is an error if the
symbol is already defined.

Changes in 2.7:

The PowerPC assembler now allows the use of symbolic register names (r0, etc.)
if -mregnames is used.  Symbolic names preceded by a '%' (%r0, etc.) can be
used any time.  PowerPC 860 move to/from SPR instructions have been added.

Alpha Linux (ELF) support added.

PowerPC ELF support added.

m68k Linux (ELF) support added.

i960 Hx/Jx support added.

i386/PowerPC gnu-win32 support added.

SCO ELF support added.  For OpenServer 5 targets (i386-unknown-sco3.2v5) the
default is to build COFF-only support.  To get a set of tools that generate ELF
(they'll understand both COFF and ELF), you must configure with
target=i386-unknown-sco3.2v5elf.

m88k-motorola-sysv3* support added.

Changes in 2.6:

Gas now directly supports macros, without requiring GASP.

Gas now has an MRI assembler compatibility mode.  Use -M or --mri to select MRI
mode.  The pseudo-op ``.mri 1'' will switch into the MRI mode until the ``.mri
0'' is seen; this can be convenient for inline assembler code.

Added --defsym SYM=VALUE option.

Added -mips4 support to MIPS assembler.

Added PIC support to Solaris and SPARC SunOS 4 assembler.

Changes in 2.4:

Converted this directory to use an autoconf-generated configure script.

ARM support, from Richard Earnshaw.

Updated VMS support, from Pat Rankin, including considerably improved debugging
support.

Support for the control registers in the 68060.

Handles (ignores) a new directive ".this_GCC_requires_the_GNU_assembler", to
provide for possible future gcc changes, for targets where gas provides some
features not available in the native assembler.  If the native assembler is
used, it should become obvious pretty quickly what the problem is.

Usage message is available with "--help".

The GNU Assembler Preprocessor (gasp) is included.  (Actually, it was in 2.3
also, but didn't get into the NEWS file.)

Weak symbol support for a.out.

A bug in the listing code which could cause an infinite loop has been fixed.
Bugs in listings when generating a COFF object file have also been fixed.

Initial i386-svr4 PIC implementation from Eric Youngdale, based on code by Paul
Kranenburg.

Improved Alpha support.  Immediate constants can have a much larger range now.
Support for the 21164 has been contributed by Digital.

Updated ns32k (pc532-mach, netbsd532) support from Ian Dall.

Changes in 2.3:

Mach i386 support, by David Mackenzie and Ken Raeburn.

RS/6000 and PowerPC support by Ian Taylor.

VMS command scripts (make-gas.com, config-gas.com) have been worked on a bit,
based on mail received from various people.  The `-h#' option should work again
too.

HP-PA work, by Jeff Law.  Note, for the PA, gas-2.3 has been designed to work
with gdb-4.12 and gcc-2.6.  As gcc-2.6 has not been released yet, a special
version of gcc-2.5.8 has been patched to work with gas-2.3.  You can retrieve
this special version of gcc-2.5.8 via anonymous ftp from jaguar.cs.utah.edu
in the "dist" directory.

Vax support in gas fixed for BSD, so it builds and seems to run a couple simple
tests okay.  I haven't put it through extensive testing.  (GNU make is
currently required for BSD 4.3 builds.)

Support for the DEC Alpha, running OSF/1 (ECOFF format).  The gas support is
based on code donated by CMU, which used an a.out-based format.  I'm afraid the
alpha-a.out support is pretty badly mangled, and much of it removed; making it
work will require rewriting it as BFD support for the format anyways.

Irix 5 support.

The test suites have been fixed up a bit, so that they should work with a
couple different versions of expect and dejagnu.

Symbols' values are now handled internally as expressions, permitting more
flexibility in evaluating them in some cases.  Some details of relocation
handling have also changed, and simple constant pool management has been added,
to make the Alpha port easier.

New option "--statistics" for printing out program run times.  This is intended
to be used with the gcc "-Q" option, which prints out times spent in various
phases of compilation.  (You should be able to get all of them printed out with
"gcc -Q -Wa,--statistics", I think.)

----------------------------------------------------------------

Changes in 2.2:

RS/6000 AIX and MIPS SGI Irix 5 support has been added.

Configurations that are still in development (and therefore are convenient to
have listed in configure.in) still get rejected without a minor change to
gas/Makefile.in, so people not doing development work shouldn't get the
impression that support for such configurations is actually believed to be
reliable.

The program name (usually "as") is printed when a fatal error message is
displayed.  This should prevent some confusion about the source of occasional
messages about "internal errors".

ELF support is falling into place.  Support for the 386 should be working.
Support for SPARC Solaris is in.  HPPA support from Utah is being integrated.

Symbol values are maintained as expressions instead of being immediately boiled
down to add-symbol, sub-symbol, and constant.  This permits slightly more
complex calculations involving symbols whose values are not alreadey known.

DBX-style debugging info ("stabs") is now supported for COFF formats.
If any stabs directives are seen in the source, GAS will create two new
sections: a ".stab" and a ".stabstr" section.  The format of the .stab
section is nearly identical to the a.out symbol format, and .stabstr is
its string table.  For this to be useful, you must have configured GCC
to generate stabs (by defining DBX_DEBUGGING_INFO), and must have a GDB
that can use the stab sections (4.11 or later).

LynxOS, on i386 and m68k platforms, is now supported.  SPARC LynxOS
support is in progress.

----------------------------------------------------------------

Changes in 2.1:

Several small fixes for i386-aix (PS/2) support from Minh Tran-Le have been
incorporated, but not well tested yet.

Altered the opcode table split for m68k; it should require less VM to compile
with gcc now.

Some minor adjustments to add (Convergent Technologies') Miniframe support,
suggested by Ronald Cole.

HPPA support (running OSF only, not HPUX) has been contributed by Utah.  This
includes improved ELF support, which I've started adapting for SPARC Solaris
2.x.  Integration isn't completely, so it probably won't work.

HP9000/300 support, donated by HP, has been merged in.

Ian Taylor has finished the MIPS ECOFF (Ultrix, Irix) support.

Better error messages for unsupported configurations (e.g., hppa-hpux).

Test suite framework is starting to become reasonable.

----------------------------------------------------------------

Changes in 2.0:

Mostly bug fixes.

Some more merging of BFD and ELF code, but ELF still doesn't work.

----------------------------------------------------------------

Changes in 1.94:

BFD merge is partly done.  Adventurous souls may try giving configure the
"--with-bfd-assembler" option.  Currently, ELF format requires it, a.out format
accepts it; SPARC CPU accepts it.  It's the default only for OS "elf" or
"solaris".  (ELF isn't really supported yet.  It needs work.  I've got some
code from Utah for HP-PA ELF, and from DG for m88k ELF, but they're not fully
merged yet.)

The 68K opcode table has been split in half.  It should now compile under gcc
without consuming ridiculous amounts of memory.

A couple data structures have been reduced in size.  This should result in
saving a little bit of space at runtime.

Support for MIPS, from OSF and Ralph Campbell, has been merged in.  The OSF
code provided ROSE format support, which I haven't merged in yet.  (I can make
it available, if anyone wants to try it out.)  Ralph's code, for BSD 4.4,
supports a.out format.  We don't have ECOFF support in just yet; it's coming.

Support for the Hitachi H8/500 has been added.

VMS host and target support should be working now, thanks chiefly to Eric
Youngdale.

----------------------------------------------------------------

Changes in 1.93.01:

For m68k, support for more processors has been added: 68040, CPU32, 68851.

For i386, .align is now power-of-two; was number-of-bytes.

For m68k, "%" is now accepted before register names.  For COFF format, which
doesn't use underscore prefixes for C labels, it is required, so variable "a0"
can be distinguished from the register.

Last public release was 1.38.  Lots of configuration changes since then, lots
of new CPUs and formats, lots of bugs fixed.


Local variables:
fill-column: 79
End:
