-*- text -*-

* In x86 Intel syntax undue mnemonic suffixes are now warned about.  This is
  a first step towards rejecting their use where unjustified.

* Assembler macros as well as the bodies of .irp / .irpc / .rept can now use
  the syntax \+ to access the number of times a given macro has been executed.
  This is similar to the already existing \@ syntax, except that the count is
  maintained on a per-macro basis.
  
* Support the NF feature in Intel APX.

* Remove KEYLOCKER and SHA promotions from EVEX MAP4.

* References to FB and dollar labels, when supported, are no longer permitted
  in a radix other than 10.  (Note that definitions of such labels were already
  thus restricted, except that leading zeroes were permitted.)

* Remove support for RISC-V privileged spec 1.9.1, but linker can still
  recognize it in case of linking old objects.

* Add support for RISC-V Zcmp extension with version 1.0.

* Add support for RISC-V Zfbfmin extension with version 1.0.

* Add support for RISC-V Zvfbfmin extension with version 1.0.

* Add support for RISC-V Zvfbfwma extension with version 1.0.

* Add support for RISC-V Smcsrind/Sscsrind extension with version 1.0.

* The base register operand in D(X,B) and D(L,B) may be explicitly omitted
  in assembly on s390. It can now be coded as D(X,) or D(L,) instead of D(X,0)
  D(X,%r0), D(L,0), and D(L,%r0).

* Warn when a register name type does not match the operand type on s390.
  Add support for s390-specific option "warn-regtype-mismatch=[strict|relaxed|
  no]" to override the register name type check behavior. The default
  is "relaxed", which allows floating-point and vector register names to be
  used interchangeably.

* Add support for 'armv9.5-a' for -march in Arm GAS.

* Add support for the AArch64 Lookup Table Extension (LUT).

Changes in 2.42:

* Add support for AMD znver5 processor.

* Add support for the AArch64 Reliability, Availability and Serviceability
  extension v2 (RASv2).

* Add support for the AArch64 128-bit Atomic Instructions (LSE128).

* Add support for the AArch64 Guarded Control Stack (GCS).

* Add support for the AArch64 Check Feature Status Extension (CHK).

* Add support for the AArch64 Enhanced Speculation Restriction Instructions
  (SPECRES2).

* Add support for the AArch64 Load-Acquire RCpc instructions version 3 (LRCPC3).

* Add support for the AArch64 Translation Hardening Extension (THE).

* Add support for the AArch64 Instruction Trace Extension (ITE).

* Add support for the AArch64 Translation Hardening Extension (THE).

* Add support for the AArch64 128-bit page table descriptors (D128).

* Add support for the AArch64 XS memory attribute (XS).

* Add support for '+fcma', '+jscvt', '+frintts', '+flagm2', '+rcpc2' and
  '+wfxt' flags to enable existing AArch64 instructions.

* Add support for 'armv8.9-a' and 'armv9.4-a' for -march in AArch64 GAS.

* Add support for 'armv8.9-a' and 'armv9.4-a' for -march in Arm GAS.

* Add support for Cortex-A520, Cortex-A720, Cortex-X3 and Cortex-X4 for
  AArch64.

* Experimental support in GAS to synthesize CFI for ABI-conformant,
  hand-written asm using the new command line option --scfi=experimental on
  x86-64.  Only System V AMD64 ABI is supported.

* Initial support for Intel APX: 32 GPRs, NDD, PUSH2/POP2 and PUSHP/POPP.

* Add support for Intel USER_MSR instructions.

* Add support for Intel AVX10.1.

* Add support for Intel PBNDKB instructions.

* Add support for Intel SM4 instructions.

* Add support for Intel SM3 instructions.

* Add support for Intel SHA512 instructions.

* Add support for Intel AVX-VNNI-INT16 instructions.

* On RISC-V macro instructions expanding to AUIPC and a load, store, or branch
  no longer accept x0 as an intermediate and/or destination register.

* Add support for RISC-V T-Head extensions (XTheadVector, XTheadZvlsseg
  and XTheadZvamo) from version 2.3.0 of the T-Head ISA manual.

* Add support for RISC-V CORE-V extensions (XCVmac, XCValu) with version 1.0.

* Add support for RISC-V SiFive VCIX extension (XSfVcp) with version 1.0.

* The BPF assembler now uses semi-colon (;) to separate statements, and
  therefore they cannot longer be used to begin line comments. This matches the
  behavior of the clang/LLVM BPF assembler.

* The BPF assembler now allows using both hash (#) and double slash (//) to
  begin line comments.

* Add support for LoongArch v1.10 new instructions: estimated reciprocal
  instructions, sub-word atomic instructions, atomic CAS instructions,
  16-byte store-conditional instruction, load-linked instructions with
  acquire semantics, and store-conditional instructions with release
  semantics.

* The %call36 relocation operator, along with the pseudo-instructions
  call36 and tail36, are now usable with the LoongArch "medium" code
  model, allowing text sections up to 128 GiB.

* TLS descriptors (TLSDESC) are now supported on LoongArch. This includes
  the following new relocation operators: %desc_pc_hi20, %desc_pc_lo12,
  %desc_ld, and %desc_call, and the la.tls.desc pseudo-instruction.

* TLS LE relaxation is now supported on LoongArch. New relocation
  operators %le_hi20_r, %le_lo12r, and %le_add_r are now available.

* Add support for LoongArch branch relaxation: a conditional branch with
  destination out of its immediate operand range, but still within
  a "b"'s range, is now assembled as an inverted branch and a "b". This
  works around the unreliable branch offset estimation of the compiler
  when .align directive is encoded into a long NOP sequence with an
  R_LARCH_RELAX by the assembler.

* Symbol or label names in LoongArch assembly can now be spelled with
  double-quotes.

Changes in 2.41:

* Add support for the KVX instruction set.

* Add support for Intel FRED instructions.

* Add support for Intel LKGS instructions.

* Add support for Intel AMX-COMPLEX instructions.

* Add SME2 support to the AArch64 port.

* A new .insn directive is recognized by x86 gas.

* Add support for LoongArch LSX instructions.

* Add support for LoongArch LASX instructions.

* Add support for LoongArch LVZ instructions.

* Add support for LoongArch LBT instructions.

* Initial LoongArch support for linker relaxation has been added.

* Deprecate the LoongArch register aliases $v0, $v1, $x, $fv0 and $fv1.

Changes in 2.40:

* Add support for Intel RAO-INT instructions.

* Add support for Intel AVX-NE-CONVERT instructions.

* Add support for Intel MSRLIST instructions.

* Add support for Intel WRMSRNS instructions.

* Add support for Intel CMPccXADD instructions.

* Add support for Intel AVX-VNNI-INT8 instructions.

* Add support for Intel AVX-IFMA instructions.

* Add support for Intel PREFETCHI instructions.

* Add support for Intel AMX-FP16 instructions.

* gas now supports --compress-debug-sections=zstd to compress
  debug sections with zstd.

* Add --enable-default-compressed-debug-sections-algorithm={zlib,zstd}
  that selects the default compression algorithm
  for --enable-compressed-debug-sections.

* Add support for various T-Head extensions (XTheadBa, XTheadBb, XTheadBs,
  XTheadCmo, XTheadCondMov, XTheadFMemIdx, XTheadFmv, XTheadInt, XTheadMemIdx,
  XTheadMemPair, XTheadMac, and XTheadSync) from version 2.0 of the T-Head
  ISA manual, which are implemented in the Allwinner D1.

* Add support for the RISC-V Zawrs extension, version 1.0-rc4.

* Add support for Cortex-X1C for Arm.

* New command line option --gsframe to generate SFrame unwind information
  on x86_64 and aarch64 targets.

Changes in 2.39:

* Remove (rudimentary) support for the x86-64 sub-architectures Intel L1OM and
  Intel K1OM.

* Add support for the RISC-V Zicbop, Zicbom, and Zicboz extensions, version
  1.0-fd39d01.

* Add support for the RISC-V Zfh extension, version 1.0.

* Add support for the Zhinx extension, version 1.0.0-rc.

* Add support for the RISC-V H extension.

* Add support for the RISC-V Zfhmin extension, version 1.0, and Zhinxmin
  extension, version 1.0.0-rc.

Changes in 2.38:

* Add support for AArch64 system registers that were missing in previous
  releases.

* Add support for the LoongArch instruction set.

* Add a command-line option, -muse-unaligned-vector-move, for x86 target
  to encode aligned vector move as unaligned vector move.

* Add support for Cortex-R52+ for Arm.

* Add support for Cortex-A510, Cortex-A710, Cortex-X2 for AArch64.

* Add support for Cortex-A710 for Arm.

* Add support for Scalable Matrix Extension (SME) for AArch64.

* The --multibyte-handling=[allow|warn|warn-sym-only] option tells the
  assembler what to when it encoutners multibyte characters in the input.  The
  default is to allow them.  Setting the option to "warn" will generate a
  warning message whenever any multibyte character is encountered.  Using the
  option to "warn-sym-only" will make the assembler generate a warning whenever a
  symbol is defined containing multibyte characters.  (References to undefined
  symbols will not generate warnings).

* Outputs of .ds.x directive and .tfloat directive with hex input from
  x86 assembler have been reduced from 12 bytes to 10 bytes to match the
  output of .tfloat directive.

* Add support for 'armv8.8-a', 'armv9-a', 'armv9.1-a', 'armv9.2-a' and
  'armv9.3-a' for -march in AArch64 GAS.

* Add support for 'armv8.7-a', 'armv8.8-a', 'armv9-a', 'armv9.1-a',
  'armv9.2-a' and 'armv9.3-a' for -march in Arm GAS.

* Add support for Intel AVX512_FP16 instructions.

* Add support for the RISC-V scalar crypto extension, version 1.0.0.

* Add support for the RISC-V vector extension, version 1.0.

* Add support for the Z{f,d,q}inx extensions, version 1.0.0-rc.

* Add support for the RISC-V svinval extension, version 1.0.

* Add support for the RISC-V hypervisor extension, as defined by Privileged
  Specification 1.12.

Changes in 2.37:

* arm-symbianelf support removed.

* Add support for Realm Management Extension (RME) for AArch64.

* Add support for the Zba, Zbb, Zbc, and Zbs subsets of the RISC-V
  bit manipulation extension, version 0.93.

Changes in 2.36:

* Add support for Intel AVX VNNI instructions.

* Add support for Intel HRESET instruction.

* Add support for Intel UINTR instructions.

* Support non-absolute segment values for i386 lcall and ljmp.

* When setting the link order attribute of ELF sections, it is now possible to
  use a numeric section index instead of symbol name.

* Add support for Cortex-A78, Cortex-A78AE, Cortex-A78C and Cortex-X1 for
  AArch64 and ARM.
  Add support for Cortex-R82, Neoverse V1, and Neoverse N2 for ARM.

* Add support for ETMv4 (Embedded Trace Macrocell), ETE (Embedded Trace
  Extension), TRBE (Trace Buffer Extension)and BRBE (Branch Record Buffer
  Extension) system registers for AArch64.

* Add support for Armv8-R and Armv8.7-A AArch64.

* Add support for DSB memory nXS barrier, WFET and WFIT instruction for Armv8.7
  AArch64.

* Add support for +flagm feature for -march in Armv8.4 AArch64.

* Add support for +ls64 feature for -march in Armv8.7 AArch64. Add atomic
  64-byte load/store instructions for this feature.

* Add support for +pauth (Pointer Authentication) feature for -march in
  AArch64.

* Add support for Intel TDX instructions.

* Add support for Intel Key Locker instructions.

* Added a .nop directive to generate a single no-op instruction in a target
  neutral manner.  This instruction does have an effect on DWARF line number
  generation, if that is active.

* Removed --reduce-memory-overheads and --hash-size as gas now
  uses hash tables that can be expand and shrink automatically.

* Add {disp16} pseudo prefix to x86 assembler.

* Add support for Intel AMX instructions.

* Configure with --enable-x86-used-note by default for Linux/x86.

* Add support for the SHF_GNU_RETAIN flag, which can be applied to
  sections using the 'R' flag in the .section directive.
  SHF_GNU_RETAIN specifies that the section should not be garbage
  collected by the linker.  It requires the GNU or FreeBSD ELF OSABIs.

* Add support for the RISC-V Zihintpause extension.

Changes in 2.35:

* X86 NaCl target support is removed.

* Extend .symver directive to update visibility of the original symbol
  and assign one original symbol to different versioned symbols.

* Add support for Intel SERIALIZE and TSXLDTRK instructions.

* Add -mlfence-after-load=, -mlfence-before-indirect-branch= and
  -mlfence-before-ret= options to x86 assembler to help mitigate
  CVE-2020-0551.

* Add --gdwarf-5 option to the assembler to generate DWARF 5 debug output
  (if such output is being generated).  Added the ability to generate
  version 5 .debug_line sections.

* Add -mbig-obj support to i386 MingW targets.

* Add support for the -mriscv-isa-version argument, to select the version of
  the RISC-V ISA specification used when assembling.

* Remove support for the RISC-V privileged specification, version 1.9.

Changes in 2.34:

* Add -malign-branch-boundary=NUM, -malign-branch=TYPE[+TYPE...],
  -malign-branch-prefix-size=NUM and -mbranches-within-32B-boundaries
  options to x86 assembler to align branches within a fixed boundary
  with segment prefixes or NOPs.

* Add support for Zilog eZ80 and Zilog Z180 CPUs.

* Add support for z80-elf target.

* Add support for relocation of each byte or word of multibyte value to Z80
  targets (just use right shift to 0, 8, 16, or 24 bits or AND operation
  with 0xff/0xffff mask): ld a, label >> 16 \ ld hl, label & 0xffff

* Add SDCC support for Z80 targets.

Changes in 2.33:

* Add support for the Arm Scalable Vector Extension version 2 (SVE2)
  instructions.

* Add support for the Arm Transactional Memory Extension (TME)
  instructions.

* Add support for the Armv8.1-M Mainline and M-profile Vector Extension (MVE)
  instructions.

* For MIPS, Add -m[no-]fix-loongson3-llsc option to fix (or not) Loongson3
  LLSC Errata.  Add a --enable-mips-fix-loongson3-llsc=[yes|no] configure
  time option to set the default behavior. Set the default if the configure
  option is not used to "no".

* Add support for the Arm Cortex-A76AE, Cortex-A77 and Cortex-M35P
  processors.

* Add support for the AArch64 Cortex-A34, Cortex-A65, Cortex-A65AE,
  Cortex-A76AE, and Cortex-A77 processors.

* Add .float16 directive for both Arm and AArch64 to allow encoding of 16-bit
  floating point literals.  Add .float16_format directive and
  -mfp16-format=[ieee|alternative] option for Arm to control the format of the
  encoding.

* Add --gdwarf-cie-version command line flag.  This allows control over which
  version of DWARF CIE the assembler creates.

Changes in 2.32:

* Add -mvexwig=[0|1] option to x86 assembler to control encoding of
  VEX.W-ignored (WIG) VEX instructions.

* Add -mx86-used-note=[yes|no] option to generate (or not) x86 GNU property
  notes.  Add a --enable-x86-used-note configure time option to set the
  default behavior.  Set the default if the configure option is not used
  to "no".

* Add support for the MIPS Loongson EXTensions R2 (EXT2) instructions.

* Add support for the MIPS Loongson EXTensions (EXT) instructions.

* Add support for the MIPS Loongson Content Address Memory (CAM) ASE.

* Add support for the C-SKY processor series.

* Add support for the MIPS Loongson MultiMedia extensions Instructions (MMI)
  ASE.

Changes in 2.31:

* The ADR and ADRL pseudo-instructions supported by the ARM assembler
  now only set the bottom bit of the address of thumb function symbols
  if the -mthumb-interwork command line option is active.

* Add support for the MIPS Global INValidate (GINV) ASE.

* Add support for the MIPS Cyclic Redudancy Check (CRC) ASE.

* Add support for the Freescale S12Z architecture.

* Add --generate-missing-build-notes=[yes|no] option to create (or not) GNU
  Build Attribute notes if none are present in the input sources.  Add a
  --enable-generate-build-notes=[yes|no] configure time option to set the
  default behaviour.  Set the default if the configure option is not used
  to "no".

* Remove -mold-gcc command-line option for x86 targets.

* Add -O[2|s] command-line options to x86 assembler to enable alternate
  shorter instruction encoding.

* Add support for .nops directive.  It is currently supported only for
  x86 targets.

* Add support for the .insn directive on RISC-V targets.

Changes in 2.30:

* Add support for loaction views in DWARF debug line information.

Changes in 2.29:

* Add support for ELF SHF_GNU_MBIND.

* Add support for the WebAssembly file format and wasm32 ELF conversion.

* PowerPC gas now checks that the correct register class is used in
  instructions.  For instance, "addi %f4,%cr3,%r31" warns three times
  that the registers are invalid.

* Add support for the Texas Instruments PRU processor.

* Support for the ARMv8-R architecture and Cortex-R52 processor has been
  added to the ARM port.

Changes in 2.28:

* Add support for the RISC-V architecture.

* Add support for the ARM Cortex-M23 and Cortex-M33 processors.

Changes in 2.27:

* Default to --enable-compressed-debug-sections=gas for Linux/x86 targets.

* Add --no-pad-sections to stop the assembler from padding the end of output
  sections up to their alignment boundary.

* Support for the ARMv8-M architecture has been added to the ARM port.  Support
  for the ARMv8-M Security and DSP Extensions has also been added to the ARM
  port.

* ARC backend accepts .extInstruction, .extCondCode, .extAuxRegister, and
  .extCoreRegister pseudo-ops that allow an user to define custom
  instructions, conditional codes, auxiliary and core registers.

* Add a configure option --enable-elf-stt-common to decide whether ELF
  assembler should generate common symbols with the STT_COMMON type by
  default.  Default to no.

* New command-line option --elf-stt-common= for ELF targets to control
  whether to generate common symbols with the STT_COMMON type.

* Add ability to set section flags and types via numeric values for ELF
  based targets.

* Add a configure option --enable-x86-relax-relocations to decide whether
  x86 assembler should generate relax relocations by default.  Default to
  yes, except for x86 Solaris targets older than Solaris 12.

* New command-line option -mrelax-relocations= for x86 target to control
  whether to generate relax relocations.

* New command-line option -mfence-as-lock-add=yes for x86 target to encode
  lfence, mfence and sfence as "lock addl $0x0, (%[re]sp)".

* Add assembly-time relaxation option for ARC cpus.

* Add --with-cpu=TYPE configure option for ARC gas.  This allows the default
  cpu type to be adjusted at configure time.

Changes in 2.26:

* Add a configure option --enable-compressed-debug-sections={all,gas} to
  decide whether DWARF debug sections should be compressed by default.

* Add support for the ARC EM/HS, and ARC600/700 architectures.  Remove
  assembler support for Argonaut RISC architectures.

* Symbol and label names can now be enclosed in double quotes (") which allows
  them to contain characters that are not part of valid symbol names in high
  level languages.

* Added the correctly spelled -march=armv6kz, for ARMv6KZ support.  The
  previous spelling, -march=armv6zk, is still accepted.

* Support for the ARMv8.1 architecture has been added to the Aarch64 port.
  Support for the individual ARMv8.1 Adv.SIMD, LOR and PAN architecture
  extensions has also been added to the Aarch64 port.

* Support for the ARMv8.1 architecture has been added to the ARM port.  Support
  for the individual ARMv8.1 Adv.SIMD and PAN architecture extensions has also
  been added to the ARM port.

* Extend --compress-debug-sections option to support
  --compress-debug-sections=[none|zlib|zlib-gnu|zlib-gabi] for ELF
  targets.

* --compress-debug-sections is turned on for Linux/x86 by default.

Changes in 2.25:

* Add support for the AVR Tiny microcontrollers.

* Replace support for openrisc and or32 with support for or1k.

* Enhanced the ARM port to accept the assembler output from the CodeComposer
  Studio tool.  Support is enabled via the new command-line option -mccs.

* Add support for the Andes NDS32.

Changes in 2.24:

* Add support for the Texas Instruments MSP430X processor.

* Add -gdwarf-sections command-line option to enable per-code-section
  generation of DWARF .debug_line sections.

* Add support for Altera Nios II.

* Add support for the Imagination Technologies Meta processor.

* Add support for the v850e3v5.

* Remove assembler support for MIPS ECOFF targets.

Changes in 2.23:

* Add support for the 64-bit ARM architecture: AArch64.

* Add support for S12X processor.

* Add support for the VLE extension to the PowerPC architecture.

* Add support for the Freescale XGATE architecture.

* Add support for .bundle_align_mode, .bundle_lock, and .bundle_unlock
  directives.  These are currently available only for x86 and ARM targets.

* Add support for the Renesas RL78 architecture.

* Add support for the Adapteva EPIPHANY architecture.

* For x86, allow 'rep bsf', 'rep bsr', and 'rep ret' syntax.

Changes in 2.22:

* Add support for the Tilera TILEPro and TILE-Gx architectures.

Changes in 2.21:

* Gas no longer requires doubling of ampersands in macros.

* Add support for the TMS320C6000 (TI C6X) processor family.

* GAS now understands an extended syntax in the .section directive flags
  for COFF targets that allows the section's alignment to be specified.  This
  feature has also been backported to the 2.20 release series, starting with
  2.20.1.

* Add support for the Renesas RX processor.

* New command-line option, --compress-debug-sections, which requests
  compression of DWARF debug information sections in the relocatable output
  file.  Compressed debug sections are supported by readelf, objdump, and
  gold, but not currently by Gnu ld.

Changes in 2.20:

* Added support for v850e2 and v850e2v3.

* GNU/Linux targets now supports "gnu_unique_object" as a value in the .type
  pseudo op.  It marks the symbol as being globally unique in the entire
  process.

* ARM assembler now supports .inst[.nw] pseudo-ops to insert opcodes specified
  in binary rather than text.

* Add support for common symbol alignment to PE formats.

* Add support for the new discriminator column in the DWARF line table,
  with a discriminator operand for the .loc directive.

* Add support for Sunplus score architecture.

* The .type pseudo-op now accepts a type of STT_GNU_IFUNC which can be used to
  indicate that if the symbol is the target of a relocation, its value should
  not be use.  Instead the function should be invoked and its result used as
  the value.

* Add support for Lattice Mico32 (lm32) architecture.

* Add support for Xilinx MicroBlaze architecture.

Changes in 2.19:

* New pseudo op .cfi_val_encoded_addr, to record constant addresses in unwind
  tables without runtime relocation.

* New command-line option, -h-tick-hex, for sh, m32c, and h8/300 targets, which
  adds compatibility with H'00 style hex constants.

* New command-line option, -msse-check=[none|error|warning], for x86
  targets.

* New sub-option added to the assembler's -a command-line switch to
  generate a listing output.  The 'g' sub-option will insert into the listing
  various information about the assembly, such as assembler version, the
  command-line options used, and a time stamp.

* New command-line option -msse2avx for x86 target to encode SSE
  instructions with VEX prefix.

* Add Intel XSAVE, EPT, MOVBE, AES, PCLMUL, AVX/FMA support for x86 target.

* New command-line options, -march=CPU[,+EXTENSION...], -mtune=CPU,
  -mmnemonic=[att|intel], -msyntax=[att|intel], -mindex-reg,
  -mnaked-reg and -mold-gcc, for x86 targets.

* Support for generating wide character strings has been added via the new
  pseudo ops: .string16, .string32 and .string64.

* Support for SSE5 has been added to the i386 port.

Changes in 2.18:

* The GAS sources are now released under the GPLv3.

* Support for the National Semiconductor CR16 target has been added.

* Added gas .reloc pseudo.  This is a low-level interface for creating
  relocations.

* Add support for x86_64 PE+ target.

* Add support for Score target.

Changes in 2.17:

* Support for the Infineon XC16X has been added by KPIT Cummins Infosystems.

* Support for ms2 architecture has been added.

* Support for the Z80 processor family has been added.

* Add support for the "@<file>" syntax to the command line, so that extra
  switches can be read from <file>.

* The SH target supports a new command-line switch --enable-reg-prefix which,
  if enabled, will allow register names to be optionally prefixed with a $
  character.  This allows register names to be distinguished from label names.

* Macros with a variable number of arguments are now supported. See the
  documentation for how this works.

* Added --reduce-memory-overheads switch to reduce the size of the hash
  tables used, at the expense of longer assembly times, and
  --hash-size=<NUMBER> to set the size of the hash tables used by gas.

* Macro names and macro parameter names can now be any identifier that would
  also be legal as a symbol elsewhere. For macro parameter names, this is
  known to cause problems in certain sources when the respective target uses
  characters inconsistently, and thus macro parameter references may no longer
  be recognized as such (see the documentation for details).

* Support the .f_floating, .d_floating, .g_floating and .h_floating directives
  for the VAX target in order to be more compatible with the VAX MACRO
  assembler.

* New command-line option -mtune=[itanium1|itanium2] for IA64 targets.

Changes in 2.16:

* Redefinition of macros now results in an error.

* New command-line option -mhint.b=[ok|warning|error] for IA64 targets.

* New command-line option -munwind-check=[warning|error] for IA64
  targets.

* The IA64 port now uses automatic dependency violation removal as its default
  mode.

* Port to MAXQ processor contributed by HCL Tech.

* Added support for generating unwind tables for ARM ELF targets.

* Add a -g command-line option to generate debug information in the target's
  preferred debug format.

* Support for the crx-elf target added.

* Support for the sh-symbianelf target added.

* Added a pseudo-op (.secrel32) to generate 32 bit section relative relocations
  on pe[i]-i386; required for this target's DWARF 2 support.

* Support for Motorola MCF521x/5249/547x/548x added.

* Support for ColdFire EMAC instructions added and Motorola syntax for MAC/EMAC
  instrucitons.

* New command-line option -mno-shared for MIPS ELF targets.

* New command-line option --alternate and pseudo-ops .altmacro and .noaltmacro
  added to enter (and leave) alternate macro syntax mode.

Changes in 2.15:

* The MIPS -membedded-pic option (Embedded-PIC code generation) is
  deprecated and will be removed in a future release.

* Added PIC m32r Linux (ELF) and support to M32R assembler.

* Added support for ARM V6.

* Added support for sh4a and variants.

* Support for Renesas M32R2 added.

* Limited support for Mapping Symbols as specified in the ARM ELF
  specification has been added to the arm assembler.

* On ARM architectures, added a new gas directive ".unreq" that undoes
  definitions created by ".req".

* Support for Motorola ColdFire MCF528x added.

* Added --gstabs+ switch to enable the generation of STABS debug format
  information with GNU extensions.

* Added support for MIPS64 Release 2.

* Added support for v850e1.

* Added -n switch for x86 assembler.  By default, x86 GAS replaces
  multiple nop instructions used for alignment within code sections
  with multi-byte nop instructions such as leal 0(%esi,1),%esi.  This
  switch disables the optimization.

* Removed -n option from MIPS assembler.  It was not useful, and confused the
  existing -non_shared option.

Changes in 2.14:

* Added support for MIPS32 Release 2.

* Added support for Xtensa architecture.

* Support for Intel's iWMMXt processor (an ARM variant) added.

* An assembler test generator has been contributed and an example file that
  uses it (gas/testsuite/gas/all/test-gen.c and test-exmaple.c).

* Support for SH2E added.

* GASP has now been removed.

* Support for Texas Instruments TMS320C4x and TMS320C3x series of
  DSP's contributed by Michael Hayes and Svein E. Seldal.

* Support for the Ubicom IP2xxx microcontroller added.

Changes in 2.13:

* Support for the Fujitsu FRV architecture added by Red Hat. Models for FR400
  and FR500 included.

* Support for DLX processor added.

* GASP has now been deprecated and will be removed in a future release.  Use
  the macro facilities in GAS instead.

* GASP now correctly parses floating point numbers. Unless the base is
  explicitly specified, they are interpreted as decimal numbers regardless of
  the currently specified base.

Changes in 2.12:

* Support for Don Knuth's MMIX, by Hans-Peter Nilsson.

* Support for the OpenRISC 32-bit embedded processor by OpenCores.

* The ARM assembler now accepts -march=..., -mcpu=... and -mfpu=... for
  specifying the target instruction set.  The old method of specifying the
  target processor has been deprecated, but is still accepted for
  compatibility.

* Support for the VFP floating-point instruction set has been added to
  the ARM assembler.

* New psuedo op: .incbin to include a set of binary data at a given point
  in the assembly.  Contributed by Anders Norlander.

* The MIPS assembler now accepts -march/-mtune. -mcpu has been deprecated
  but still works for compatability.

* The MIPS assembler no longer issues a warning by default when it
  generates a nop instruction from a macro. The new command-line option
  -n will turn on the warning.

Changes in 2.11:

* Support for PDP-11 and 2.11BSD a.out format, by Lars Brinkhoff.

* x86 gas now supports the full Pentium4 instruction set.

* Support for AMD x86-64 architecture, by Jan Hubicka, SuSE Labs.

* Support for Motorola 68HC11 and 68HC12.

* Support for Texas Instruments TMS320C54x (tic54x).

* Support for IA-64.

* Support for i860, by Jason Eckhardt.

* Support for CRIS (Axis Communications ETRAX series).

* x86 gas has a new .arch pseudo op to specify the target CPU architecture.

* x86 gas -q command-line option quietens warnings about register size changes
  due to suffix, indirect jmp/call without `*', stand-alone prefixes, and
  translating various deprecated floating point instructions.

Changes in 2.10:

* Support for the ARM msr instruction was changed to only allow an immediate
  operand when altering the flags field.

* Support for ATMEL AVR.

* Support for IBM 370 ELF.  Somewhat experimental.

* Support for numbers with suffixes.

* Added support for breaking to the end of repeat loops.

* Added support for parallel instruction syntax (DOUBLEBAR_PARALLEL).

* New .elseif pseudo-op added.

* New --fatal-warnings option.

* picoJava architecture support added.

* Motorola MCore 210 processor support 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.

* Added -gdwarf2 option to generate DWARF 2 debugging information.

* 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.

* ARM 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.


Copyright (C) 2012-2024 Free Software Foundation, Inc.

Copying and distribution of this file, with or without modification,
are permitted in any medium without royalty provided the copyright
notice and this notice are preserved.

Local variables:
fill-column: 79
End:
