TODO for coalesced symbols:
- Should external relocation entries for defined coalesced symbols only be
  created with -dynamic and not -static?

TODO:
- Add MacOS line termination \r .

Known bugs:
- The assembly line:
	bl ""foo""
  causes the symbol name "" to be used.
- cmpwi seems to be the same as cmpi for PowerPC.
- Can't optimize because of compiler bug #50416 prevents line 235 in symbols.c
  from working (currently has #pragma CC_OPT_OFF and  #pragma CC_OPT_RESUME
  around that routine).
- The m88k instruction "tb0 0,r0,undef" trashes the instruction because of
  the undefined.
- 68k does not handle packed immediates (the tables have been changed to dis-
  allow this) because there is no routine to convert a flonum to a 68k packed
  form.
- The logical operators && and || are not implemented.

Bugs to be fixed:
- The m68k "jmp @(_foo)" is not legal and needs to be flaged.
- The PowerPC extended branch mnemonic like beqlrl need to take a CRFONLY or
  a number shifted over by 2 (like the fcmpu instruction).

Changes for the 5.33 release (the cctools-840 release):
- Added the environment variable AS_INTEGRATED_ASSEMBLER to be like the -q flag
  and use clang(1) with -integrated-as when -Q is not used and the targeted
  architecture is supported by clang(1).  Radar bug #12671669.
- Added support for new archs: armv6m / armv7m / armv7em and updated main() in
  as.c . Radar bug #11314463.

Changes for the 5.32 release (the cctools-832 release):
- Fixed command line parsing problems in the driver that was not skiping the
  parsing the characters after multiple character options.  Radar bug #11754204.

Changes for the 5.32 release (the cctools-830 release):
- Added parsing and ignoring the .data_region and .end_data_region directives.
  Radar bug #11459770.

Changes for the 5.31 release (the cctools-828 release):
- Back out the change below in relax_immediate() in arm.c that was done as
  an attempt to fix Radar bug #11215603 as it is causing problems.  Radar bug
  #11403124.

Changes for the 5.31 release (the cctools-827 release):
- Fixed relax_immediate() in arm.c to correctly handle a negative immediate
  to see that it fits in the instruction.  Radar bug #11215603.

Changes for the 5.31 release (the cctools-825 release):
- Added the -Q flag and tweaked handling the running of clang as the assembler
  to the driver.  Cleaned up a bit of the code in there.  Radar bug #11139995.
- Added a missing extern to subsections_via_symbols in as.h, and to 
  dwarf2_loc_mark_labels in dwarf2dbg.h and to now_subseg in arm.c . Radar bug
  #11136207.

Changes for the 5.31 release (the cctools-824 release):
- Added a check in do_neon_ld_st_interleave() in arm.c to check that the size
  of 64 is only used with VLD1/VST1.  Radar bug #11024563.

Changes for the 5.31 release (the cctools-823 release):
- Added the -q option to the assembler driver to run clang(1) for x86_64.
  Basis for Radar bug #9801003.

Changes for the 5.30 release (the cctools-820 release):
- Removed creating the apple_version.c file from the Makefile and now use the
  new one created in libstuff.  Radar bug #10596469.
- Another change to out_debug_info() in dwarf2dbg.c for Radar bug #10466662.
  For the AT_high_pc, needed to the next symbol with different address or
  the end of the section.

Changes for the 5.30 release (the cctools-819 release):
- Changed out_debug_info() in dwarf2dbg.c to check if the previous symbol in
  the list of subprogram's info has the same address and to not emit it so
  there aren't subprograms with zero lengths.  Radar bug #10466662.
- Added AT_prototyped with a value of 0 to the TAG_subprogram when producing
  dwarf for assembly source and added the TAG_unspecified_parameters after the
  TAG_subprogram.  The changes are in out_debug_abbrev() and out_debug_info() in
  dwarf2dbg.c . Radar bug #10537250.

Changes for the 5.30 release (the cctools-816 release):
- Changed the arm assembler so that for the thumb multiply instructions it
  checks that either source register is the same as the destination register
  and uses the 16-bit T1 encoding.  The fix was in arm.c in do_t_mul to change
  this:
          || inst.operands[0].reg != inst.operands[2].reg))
  to this:
          || (inst.operands[0].reg != inst.operands[2].reg &&
              inst.operands[0].reg != inst.operands[1].reg)))
  Radar bug #10433396.
- Fixed a problem with dwarf generated for assembly source with -g for arm
  assembly code.  Symbols marked with .thumb_func would have the low bit set
  for their AT_low_pc value.  The fix was to not use the symbol directly for the
  expression but to create a temporary symbol without the N_ARM_THUMB_DEF bit
  set in make_subprogram_for_symbol() in symbols.c . Radar bug #10409052.

Changes for the 5.30 release (the cctools-815 release):
- Changed the i386 popcnt instructions to not have NoSuf on their entries in
  i386-opcode.h.  Radar bug #10385539.
- Added a check in dwarf2_directive_file() in dwarf2dbg.c to see if the -g flag
  is being used to generate dwarf debug info for assembly code and print
  an error because the input has .file dwarf directives.  Radar bug #9976587.

Changes for the 5.30 release (the cctools-814 release):
- Fixed the .incbin directive so it doesn't require the file to be writable.
  Radar bug #10288224.

Changes for the 5.30 release (the cctools-812 release):
- Fix the encoding of the arm sev instruction.  Radar bug #10133308.

Changes for the 5.30 release (the cctools-809 release):
- Changed the assembler driver to no longer look in ../libexec/gcc/darwin paths
  and to no longer install target assemblers in those paths.  Radar bug
  #9908131.

Changes for the 5.30 release (the cctools-807 release):
- Changed cons() in read.c to call dwarf2_emit_insn() to allow instructions
  that are being assembled with things like .long to trigger and outstanding
  .loc line number creation.  Radar bug #9811389.

Changes for the 5.29 release (the cctools-806.2 release):
- Changed so that the target assembler get installed both in ../libexec/as and
  in ../libexec/gcc/darwin and changed the driver to look in the first path then
  fall back to the second path.  Radar bug #9661352.

Changes for the 5.29 release (the cctools-800.7 release):
- Added -gdwarf-2 to be the same as -g and --gwarf2 in main() in as.c .
  Radar bug #9249853.

Changes for the 5.29 release (the cctools-800.4 release):
- Added missing support for -arch armv7[fsk] for md_begin() in arm.c . Radar
  bug #9055988.

Changes for the 5.29 release (the cctools-800.3 release):
- Added support for -arch armv7[fsk] for main() in as.c and in s_align() in
  read.c . Radar bug #8987684.

Changes for the 5.29 release (the cctools-800 release):
- Fixed the arm VCVT (between half-precision and single-precision) instructions
  encodings.  Had the op bit inverted in the table.  It should have been:
    VCVT<c><q>.F32.F16 <Qd>, <Dm> Encoded as op = 1 (aka fcvtshp)
    VCVT<c><q>.F16.F32 <Dd>, <Qm> Encoded as op = 0 (aka fcvthps)
  Radar bug #8951023.
- Added the .incbin directive.  Radar bug #8945167.
- Changed the Makefile to install the ppc and ppc64 assembler in LOCLIBDIR.
  Radar bug #8828970.

Changes for the 5.28 release (the cctools-799 release):
- Found another path that -g was not checking to produce dwarf line table
  entries only for the text section.  That was in dwarf2_emit_insn() in
  dwarf2dbg.c.  Radar bug #8792738.
- Fixed the mishanding of the thumb2 tst instruction.  Changed do_t_mvn_tst()
  in arm.c.  Normally, the versions of the instructions that set condition flags
  aren't allowed inside IT blocks, so it's checking that.  TST<c>, however, is
  allowed and isn't accounted for.  Radar bug #8783763.
- Changed the arm assembler for ADD/SUB (immediate, Thumb) to correctly follow
  the manual's note about these instructions:
    encoding T1 is to be preferred if Rd is specified, and T2 is preferred if
    it is not.
  To do this do_t_add_sub() sets the unused 0x0100 in inst.instruction when
  using BFD_RELOC_ARM_THUMB_ADD to communicate to md_apply_fix() that two
  operands were present in assembly code.  Then md_apply_fix() uses this bit
  and checks the size of the immediate to see if the 3-bit immediate form can
  be uses as it should be preferred in that case.  Radar bug #8756030.

Changes for the 5.28 release (the cctools-798 release):
- Changed to error messages in arm.c which were:
    "invalid constant (%x) after fixup"
  to have 0x in front of the hex value.  Radar bug #8772178.
- Changed do_t_mul() in arm.c .  The problem is that the assembler didn't take
  into account that the "mul" mnemonic (w/o the 's' suffix) is valid for the
  16-bit wide encoding when in an IT block.  Radar bug #8755919.
- Added support for make aarm_test .
  - Added a arm-check.c that currently only does arm ALU instructions can set
  into account that the "mul" mnemonic (w/o the 's' suffix) is valid for the
  16-bit wide encoding when in an IT block.  Radar bug #8755919.
- Added support for make aarm_test .
  - Added a arm-check.c that currently only does arm ALU instructions can set
    the condition codes.
  - Added #ifndef INSNS_TABLE_ONLY to arm.c so that can be #defined and included
    in arm-check.c .
  - Made the needed changes in the Makefile to add support for aarm_test .

Changes for the 5.28 release (the cctools-797 release):
- Changed the code that was adding the NULL DIE terminating the Compile Unit
  DIE's when producing dwarf debuging info for assembly files to not be
  conditional on if dwarf2_subprograms_info != NULL.  The change is at the end
  of out_debug_info() in dwarf2dbg.c . Radar bug #8441990 and #8443177.

Changes for the 5.28 release (the cctools-796 release):
- Changed the x86-64 assembler to allow immediate expressions of the form:
    movq $(xxx-L$y),%rax
  by changing output_imm() to look for 4 byte signed 32-bit expression and use
  the same trick in output_disp() to call fix_new() so it will use two
  relocation entries pointing at the same 32-bits.  Radar bug #7081262.
- Added the OpenSourceURL key to the cctools.plist file as:
    <key>OpenSourceURL</key>
    <string>http://ftp.gnu.org/gnu/binutils/binutils-1.38.1.tar.gz</string>
  Radar bug #8569655.

Changes for the 5.28 release (the cctools-795 release):
- Added checks or overlowing the 24-bits of the r_address relocation entry in
  fix_to_relocation_entries() in write_object.c  .  Radar bug #8348673.

Changes for the 5.28 release (the cctools-794 release):
- Added the NULL DIE terminating the Compile Unit DIE's when producing dwarf
  debuging info for assembly files.  The change is at the end of
  out_debug_info() in dwarf2dbg.c . Radar bug #8453745.

Changes for the 5.28 release (the cctools-793 release):
- Fixed more problems with support for generating dwarf debugging information
  for assembly source, with symbols in other sections besides .text .
  - The routine make_subprogram_for_symbol() in symbols.c was not ignoring
    symbols not in the .text section.  Also the calls to 
  - Generation of the .loc directive done in md_assemble() in i386.c and in
    arm.c by calling dwarf2_loc() also needed to check that the section was
    the .text section.
  Radar bug #8425965.
- Fixed problems with support for generating dwarf debugging information for
  assembly source.  The routine make_subprogram_for_symbol() in symbols.c was
  not updating last_dwarf2_subprogram_info when dwarf2_subprograms_info != NULL
  and it was not ignoring symbols that stared with 'L'.  Radar bug #8387908.

Changes for the 5.28 release (the cctools-790 release):
- Added the arm Media and VFP Feature Registers 1 and 0 to arm.c as mvfr0,
  MVFR0, mvfr1 and MVFR1.  Radar bug #8246341.

Changes for the 5.28 release (the cctools-788 release):
- Remove the use of -mdynamic-no-pic from the Makefile.  Radar bug #8207834.

Changes for the 5.28 release (the cctools-787 release):
- Added support for the .symbol_resolver directive.  Added s_symbol_resolver()
  in read.c and an entry for it in pseudo_table[].  Also added N_SYMBOL_RESOLVER
  in the conditional test in colon() in symbols.c to allow it to be set first
  then the symbol defined.  Radar bug #7901954.

Changes for the 5.28 release (the cctools-786 release):
- Fixed the incorrect trigger for outputing dwarf info in dwarf2_finish() in
  dwarf2dbg.c .  The change was to make sure that all_segs was not NULL and the
  either all_segs->next was not NULL or debug_type == DEBUG_DWARF2.
  Radar bug #8154276.

Changes for the 5.28 release (the cctools-785 release):
- Fixed a bug with support for thread local variables in fixup_section() in
  layout.c that did not include the address of the fragment when calculating
  the "pc" value.  Radar bug #8113809.
- Added support for generating dwarf debugging information for assembly source
  files when the --gdwarf2 or -g flag is specified.  Radar bug #7580966.
  - main() in as.c was changed to make -g the same as --gdwarf2.
  - The declaration of apple_version[] was moved to as.h out of as.c.
  - The variable version_string[] in as.c was made global and the declaration 
    was added to as.h.
  - The macro APPLE_INC_VERSION was added to as.h for print the version string
    in main() in as.c
  - The global varaible apple_flags was added to as.[ch] and set in main() when
    the environment variable RC_DEBUG_OPTIONS is set.
  - The global variable dwarf_file_number was added to dwarf2dbg.[ch] .
  - Generation of the .file directive is done in read_a_source_file() in read.c
    by calling dwarf2_file() which was added in dwarf2dbg.c .  The call uses
    global variable dwarf_file_number and increments it.
  - Generation of the .loc directive is done in md_assemble() in i386.c and in
    arm.c by calling dwarf2_loc() which was added in dwarf2dbg.c .
  - The struct dwarf2_subprogram_info and global variable
    dwarf2_subprograms_info was added to dwarf2dbg.h to collect info and use it
    for the subprogram entires.
  - Collecting information for the symbols to make dwarf2 subprogram entires
    is done by calling the new routine, make_subprogram_for_symbol(), added
    to symbols.c called from colon() in symbols.c .
  - out_debug_abbrev() in dwarf2dbg.c was change to add the DW_TAG_subprogram
    DIE as #2 and changed to DW_CHILDREN_yes for the DW_TAG_compile_unit DIE.
    Also the AT_APPLE_flags is added when apple_flags is set.
  - In out_debug_info() in dwarf2dbg.c it was change to output the subprograms
    and the DW_AT_producer was changed to use the version information so it
    matches what as(1) -v would print.  Also the AT_APPLE_flags added to the
    output when apple_flags is set.
  - The trigger for calling the out_debug_*() routines at the end of
    dwarf2_finish() in dwarf2dbg.c was change to include a test of
    debug_type == DEBUG_DWARF2 (when --gdwarf2 is specified).

Changes for the 5.28 release (the cctools-784 release):
- Changed the arm assembler to not used the thumb2 opcode when targetting armv6
  and unified syntax.  The fix was in do_t_nop() in arm.c to add a check in
  additiona to unified syntax to make sure the cpu_variant core specified also
  supports thumb2.  Radar bug #7876935.
- Add a check for too many sections being created in sections.c .  Radar bug
  #7920267.

Changes for the 5.28 release (the cctools-783 release):
- Added control register names as %ecr0 and %rcr0 in i386-opcode.h that is the
  names llvm-mc uses.  And added $(LLVM_MC) to the otool command lines in the
  Makefile.
- Added the -llvm-mc option to the driver to run llvm-mc.  Radar bug #7837868.
- Added the support for thread local variables.
  - Changed the _i386_insn in i386.c to include a reloc[] array like for ARCH64
    so it can hold a GENERIC_RELOC_TLV.
  - Changed md_assemble() in i386.c to zero out reloc[] without the #ifdef
    ARCH64.
  - Changed the call for fix_new() in output_disp() in i386.c to pass i.reloc[n]
    as the last argument in the #if !ARCH64 case.
  - Changed the #if expression around lex_got() and removed the !defined(ARCH64)
    part of the condition.
  - Inside lex_got() in i386 changed gotrel[] initialization on the #ifdef
    NeXT_MOD side. Wrapped that in #ifdef ARCH64 and added the TLVP to the table
    and added an #else side for 32-bit with the entry for the TLVP.
  - In layout_addresses() in layout.c made changes to test for
    S_THREAD_LOCAL_ZEROFILL when testing for S_ZEROFILL.
  - In fixup_section() in layout.c added code that is
    #if defined(I386) && !defined(ARCH64)
    - To test GENERIC_RELOC_TLV relocation type when sub_symbolP is not NULL
      and adjust the value to have to be the difference of the end of the
      relocated item and the symbol. Then clear the fx_subsy field and set the
      fx_pcrel to get the proper TVL relocation entry.  This is done in two
      places, one where both symbols are in a section and one when the
      add symbol is undefined.
    - Added a check of fixP->fx_r_type != GENERIC_RELOC_TLV where it would
      add in the symbol value so it does not do that (it will be an external
      reloc in this case even if the symbol is defined).
  - In read.c added the new section type names thread_local_regular,
    thread_local_variables and thread_local_init_function_pointers to
    type_names[].
  - In read.c added the new built in section directives tdata, tlv and
    thread_init_func to builtin_sections[].
  - In read.c changed s_zerofill() and passed the section type as the value
    parameter and added the tbss directive to use s_zerofill. And changed the
    zerofill directive to pass S_ZEROFILL as the value.  In s_zerofill() it
    checks for the value passes as S_THREAD_LOCAL_ZEROFILL and creates the
    (__DATA, __thread_bss) section with that type.
  - In fix_to_relocation_entries() in write_object.c added a test of
      ((symbolP->sy_type & N_TYPE) == N_SECT &&
       fixP->fx_r_type == GENERIC_RELOC_TLV)
    that is 
      #if defined(I386) && !defined(ARCH64)
    to where it sets the r_extern bit and the r_symbolnum to the symbol index
    as @TLVP that are defined get external relocation entries.
  - In sections.c changed section_new() and in write_object.c in write_object()
    to also test for S_THREAD_LOCAL_ZEROFILL when it is testing for S_ZEROFILL.
  Radar bug #7796734.

Changes for the 5.28 release (the cctools-782 release):
- Added the .weak_def_can_be_hidden to read.c and changed colon() in symbols.c
  to also preserve N_WEAK_DEF bit.  Radar bug #5021217.
- Fixed the arm assembler to correctly detect errors with floating point to
  integer conversion instruction that use the rounding mode (vcvtr.*) when they
  are not valid and generate an error.  The fix was in do_vfp_nsyn_cvtr() in
  arm.c to cause an error if one has not already be caught by checking that
  the flavour index into the static arrary enc[] does not have a null value.
  Radar bug #7719236.
- Added the Intel aes instructions.  Radar bug #7709572.

Changes for the 5.28 release (the cctools-780 release):
- Changed the Makefile to use -Os for OFLAG in building the driver.
- Fixed a bug in parse_neon_mov() in arm.c that caused assembling:
    vmov.f32 s2, s1
  to end up with an undefined symbol named "s1" in the output file.  This was
  caused by the call to parse_big_immediate().  Which was incorrectly called
  before trying arm_typed_reg_parse().  The call to parse_big_immediate()
  failed but as a side effect created the undefined symbol and then the later
  call to arm_typed_reg_parse() did not fail.  Reversing the two removes the
  problem and then in the case when parse_big_immediate() fails it causes an
  error.  Radar bug #7567713.
- Fixed arm.c that incorrectly had an ARM_VARIANT set for the Thumb only
  instructions cbnz and cbz.  Also fixed do_neon_mov() in arm.c when it was
  called for something like "vshr q0,d0,#0" to not abort() in the switch(rs)
  case for default if a inst.error and just return and let the error get
  reported.  Radar bug #7559323.

Changes for the 5.28 release (the cctools-779 release):
- Changed the test in encode_thumb2_ldmstm() for the warning of the value
  stored is UNPREDICTABLE to check that writeback is set before the rest of the
  checks such as the base is in the list and is also not the lowest register
  in the mask.  Radar bug #7528057.

Changes for the 5.28 release (the cctools-777 release):
- Changed round() to rnd() and stuff/round.h to stuff/rnd.h in all files and
  removed -fno-builtin-round from the Makefile.  Radar bug #7475139.
- Changed the Makefile to use -Os for OFLAG.  Radar bug #7475093.

Changes for the 5.28 release (the cctools-775 release):
- Added support for the new arm ARM_RELOC_HALF and ARM_RELOC_HALF_SECTDIFF
  relocation entries used with the movw and movt instruction immediates.
  - Added a new file arm_reloc.h to have internal #defines for
    ARM_{,THUMB_}RELOC_{LO16,HI16} with notes about the encodings for the
    reloc entries in <mach-o/arm/reloc.h> .
  - In arm.c assigned the enum BFD_RELOC_{ARM,THUMB}_MOV{W,T} values
    ARM_{,THUMB_}RELOC_{LO16,HI16} from arm_reloc.h .
  - Fixed the code in md_apply_fix() for the BFD_RELOC_{ARM,THUMB}_MOV{W,T}
    case values so the *_MOVT values would have high 16 bits of the value used.
  - Fixed the code in write_object.c to correctly deal with the ARM relocs.
    - In nrelocs_for_fix() added the #ifdef ARM code for the paired relocs.
    - In fix_to_relocation_entries() added the #ifdef ARM code for the handling
      of the LO16,HI16 and SECTDIFF ARM relocs.
  Radar bug #7421496.

Changes for the 5.28 release (the cctools-774 release):
- Added the invvpid and invept instructions to i386-opcode.h .
  Radar bug #7383743.
- Fixed x86_64 instructions that have a 0xf2, 0xf3, etc. "mandatory" prefixes to
  follow optional prefixes.   This is done by adding a entry in the i.prefix[]
  array, increasing MAX_PREFIXES in i386.h by one and adding MAN_PREFIX just
  before REX_PREFIX.  Then add_prefix() in i386.c had the parameter mandatory
  added to it which was passed MAN_PREFIX when called with a mandatory prefix or
  0 otherwise.  Then add_prefix() had code added to it to place the passed
  prefix into i.prefix[mandatory] when mandatory was not zero and return 1
  to indicate a prefix was added but was not a REP prefix.  Radar bug #7403143.
- Fixed the i386 bound instruction to take WordMem, WordReg not WordReg,
  WordMem . Radar bug #7394709.
- Update the i386-check.c program to work for both i386 and x86_64 and added in
  the Makefile an ax86_64_test target.

Changes for the 5.27 release (the cctools-772 release):
- Fixed the arm's assembler's vmls.f32 and vmls.f64 encodings, the changes were
  in do_vfp_nsyn_mla_mls() in arm.c to use "fnmacs" instead of "fmscs" and
  "fnmacd" instead of "fmscd".  Fixed the arm's assembler's vnmla.f32, vnmls.f32
  and vnmla.f64, vnmls.f64 encoding in their respective table entries.
  Radar bug #7331301.
- Changed the arm assembler to make the vcvt.* forms match the manual the same
  as what was the vcvtz.* forms.  And removed the vcvtz.* forms.  Then added
  the vcvtr.* forms as in the manual as what was the old vcvt.* forms.  Changes
  were in do_vfp_nsyn_cvt() in arm.c in the last enc[] array entries and a
  change to the "if (rs == NS_FF" to add "&& (flavour == 18 || flavour == 19))".
  Then changed do_vfp_nsyn_cvtz() to do_vfp_nsyn_cvtr() and changed the entries
  in the enc[] array in there.  And also changed the vcvt entry to use
  vfp_nsyn_cvtr . Radar bug #7329319 & #7329326.
- Changed the arm assembler to allow "vmrs APSR_nzcv, FPSCR" by adding the
  routine do_vmrs() in arm.c and changing the table entry for "vmrs" to allow
  ASPR_RR for the first argument and use the new routine.  Radar bug #7327031.
- Changed i386_displacement() in i386.c and turned on the GCC_ASM_O_HACK to
  allow displacements like "4+(%esp)".  Radar bug #5828463.

Changes for the 5.27 release (the cctools-771 release):
- Changed fixup_section() in layout.c for the first #if ARM case and removed the
  check for the add symbol not being weak to set the low bit of the value.
  Radar bug #7262421.
- Changed the test in encode_thumb2_ldmstm() for the warning of the value
  stored is UNPREDICTABLE to check that the base is also not the lowest register
  in the mask.  Radar bug #7268941.

Changes for the 5.27 release (the cctools-769 release):
- Fixed a bug in s_zerofill() in read.c that did not allow zerofill sizes
  greater than 32-bits.  In s_zerofill() in read.c changed the local variable 
  "size" to a uint64_t type.  Changed the type of the field "fr_address"
  in the frag struct in frags.h to a uint64_t type.  And fixed types for
  relax_addressT in relax.h which were reversed in the #ifdef ARCH64.
  Radar bug #7245879.

Changes for the 5.27 release (the cctools-767 release):
- Added an error check for the call to realpath(3) in driver.c in main().
  Radar bug #7201696.

Changes for the 5.27 release (the cctools-766 release):
- Picked up the change that never made it in the sources from cctools-685 but
  made in in the notes below.  Changed relax_section() in layout.c in two plaves
  #ifdef'ed ARM.  In the first look it now sets frag's relax_marker field to 
  zero.  In the "Do relax" loop it flips the relax_marker field with an "^= 1".
  This is to fix a problem in relaxed_symbol_addr() so it knows to add the
  stretch amount to the addr it is returning.  Radar bug #7141908.

Changes for the 5.27 release (the cctools-765 release):
- Fixed a problem with the mask used for checking overflow of 2 byte values
  in fixup_section() in layout.c that was 0xffff8000 which should have been
  0xffff0000.  Also fixed the resulting error message so it would print the
  source line number.  Radar bug #7114412.
- Added the assembly for the orn (immediate) instructions to arm.c in
  t_do_orn().  Radar bug #7096522.

Changes for the 5.27 release (the cctools-763 release):
- Added the assembly for the orn instructions to arm.c .  Radar bug #7096522.
- Added the assembly for the rrx instructions to arm.c .  Radar bug #7098328.

Changes for the 5.27 release (the cctools-762 release):
- Changed the Makefile to set CC when when SDKROOT is set.  Radar bug #7078805.
- Changed output_relax_insn() in arm.c to allow symbols that are just an
  absolute symbol.  As this occurs when using a symbol from .set for an
  immediate value.  Radar bug #7069304.

Changes for the 5.27 release (the cctools-760 release):
- Changed the sources so the armv7 stuff is a no longer #ifndef __OPEN_SOURCE__
  Radar bug #7016121.
  - Changed the Makefile and removed the #ifndef __OPEN_SOURCE__
    build.
  - Removed the #ifndef __OPEN_SOURCE__
    the reference.

Changes for the 5.27 release (the cctools-759 release):
- Added the assembly for the pldw, vcvt.f32.f16, vcvt.f16.f32, vcvtt and
  vcvtb instructions to arm.c .  Radar bug #6959129.
- Added the memory barrior options ish, ishst, osh, oshst, nsh and nshst
  to arm.c . Radar bug #6982242.
- Changed the Makefile to add -isysroot $(SDKROOT) to compile and link lines
  when SDKROOT is set.  Radar bug #6965029.

Changes for the 5.27 release (the cctools-758 release):
- Backed out the change in Radar bug #6511482 in the arm assembler to put out a
  relocation entry for 32-bit thumb branches using the ARM_THUMB_32BIT_BRANCH
  relocation type.
  - Changed arm.c to no longer assign the enum type
    BFD_RELOC_THUMB_PCREL_BRANCH20 to the ARM_THUMB_32BIT_BRANCH relocation
    type's value.
  - Changed nrelocs_for_fix() and fix_to_relocation_entries() in write_object.c
    and removed the #ifdef ARM and tests for the ARM_THUMB_32BIT_BRANCH
    relocation type when archflag_cpusubtype == CPU_SUBTYPE_ARM_V7.  That code
    use to count 1 for the fixes in nrelocs_for_fix() and to put out a
    relocation entry in fix_to_relocation_entries() for the type
    ARM_THUMB_32BIT_BRANCH.  The relocation entry put out was a local relocation
    entry that was pcrel, length of long and an symbolnum of R_ABS (0).
    Also in fix_to_relocation_entries() it was setting fr_type to
    ARM_THUMB_32BIT_BRANCH so that BFD_RELOC_THUMB_PCREL_BRANCH20 versions with
    no symbol were geting set correctly.
  Radar bug #6945428.

Changes for the 5.27 release (the cctools-757 release):
- Fixed the arm assembler to correctly place Rm in the rbit instruction in
  both halfs of the 16 bit opcode.  The fix was is do_t_rbit() in arm.c .
  Radar bug #6915130.

Changes for the 5.27 release (the cctools-754 release):
- Changed the arm assembler to allow -arch armv7 to accept ARMv7M special
  registers.  The change was in md_begin() in arm.c for the case statement
  CPU_SUBTYPE_ARM_V7. Radar bug #6782055.

Changes for the 5.27 release (the cctools-752 release):
- Ported to build with clang.
  - Changed Makefile to work around bugs 6761248, 6756531 and 6756295.
  - Added a (void) cast in the SKIP_WHITESPACE macro in read.h .
  - Added (void) casts in the obstack_finish macro in obstack.h .
  - Added (void) cast before obstack_finish() in:
      frag_new() in frags.c
      two places add_last_frags_to_sections() and two places in
	layout_addresses() in layout.c 
      section_new() in sections.c
  - Added (void) case before obstack_1grow() in:
      demand_copy_string(), s_macro(), s_endmacro(), add_to_macro_definition(),
      expand_macro() and s_load() in read.c .
  - Changed decode_local_label_name() in symbols.c so to use a literal string
    instead of a pointer to a string to get rid of a "potentially insecure"
    warning.
  - Changed ppc.c and the use and setting of error_param_message so it is just
    a string and not a format string to get rid of a "potentially insecure"
    warning.  Workaround for 6765807.
  - Fixed warnings about extra tokens at end of #endif directive in ofile.c
    by putting them in a comment.

- Changed input_file_give_next_buffer() in input-file.[ch] to also return the
  size of the buffer it will give.  Then changed input_scrub_next_buffer() in
  input-scrub.c to use this to know when it didn't need to reallocate the
  buffer to fix it from needlessly running out of memory.  Radar bug #6720994.
- Changed md_number_to_imm() in arm.c to have a case for 8 so .quad with a non-
  relocatable expression would work.  Radar bug #6731807.

Changes for the 5.27 release (the cctools-751 release):
- Fixed a problem with the arm assembler not accepting the sdiv instruction with
  armv7. Radar bug #6697528.
- Fixed an initialization problem in fix_new_internal() in fixes.c that was not
  initializing the fx_sectdiff_divide_by_two field.  Radar bug #5930362.

Changes for the 5.26 release (the cctools-747 release):
- Changed the assembler to put out a line table if no .loc directives are
  used but a .file directive to be used.  This was causing a bad dwarf for data
  only files that used .file and had no .loc directives.  The fix is in
  dwarf2_finish() in dwarf2dbg.c to add to the test to see we have seen any
  line number segs or .file was used before calling out_debug_line().  Radar
  bug #6593344.

Changes for the 5.26 release (the cctools-746 release):
- Added the support for the .sleb128 and .uleb128 directives.  Radar bug
  #4545225.
  - Added rs_leb128 to the relax_stateT enum in relax.h .
  - Added the fields has_rs_leb128s and layout_pass to the frchain struct in
    sections.h .
  - Added entry for sleb128 and uleb128 to pseudo_table[] in read.c .
  - Added s_leb128(), sizeof_uleb128, emit_leb128_expr() to read.c .
    Where emit_leb128_expr() is heavily hacked from the original due to
    differences in expressions.  In emit_leb128_expr() after the call to
    frag_var() for a rs_leb128 frchain_now->has_rs_leb128s is set to TRUE to
    mark the section as containing an rs_leb128 frag.
  - Added a case label for rs_leb128 in the first loop in relax_section()
    in layout.c with a line of code:
	address += fragP->fr_offset = 1;
  - Also added a case label for rs_leb128 in the second loop in relax_section()
    in layout.c to get the value of the symbol's expression and call
    sizeof_leb128() to get the current size, adjust the growth and save the new
    size in the fr_offset field of the frag.
  - Added code in layout_addresses() in layout.c to make three layout passes
    over the frags.  Doing the debug sections last, ones with containing
    rs_leb128 frags before that and all other sections first.
  - Added a loop in the layout pass if relax_section() changes things.  To do
    that the new field last_fr_address to the frag struct in frags.h, then
    changed relax_section() in layout.c to return non-zero if the things change
    by setting and testing the last_fr_address feild in each of the frags.
  - Added a case label for rs_leb128 in layout_addresses() in layout.c and
    code to get the value of the symbol's expression, then call output_leb128()
    to place that value in the frag and finally convert the frag to an rs_fill
    of the size of the bytes put in the frag.

Changes for the 5.26 release (the cctools-745 release):
- Changed the assembler to not put out a line table if no .loc directives are
  used.  This was causing a second line table in the output with older compilers
  causing bad dSYM files to be created.  The fix is in dwarf2_finish() in 
  dwarf2dbg.c to test to see we have seen any line number segs before calling
  out_debug_line().  Radar bug #6589056.

Changes for the 5.26 release (the cctools-744 release):
- Fixed a problem with the code to support .file/.loc which was incorrectly
  putting out a Compile Unit into the debug_info section when it shouldn't.
  The code in dwarf2_finish() in dwarf2dbg.c was not ported correctly for
  checking if the debug_info section was empty.  It was testing the section
  size for zero but that is not valid at that point in the code and needed
  to look for fragments in the section.  So a version of the routine
  seg_not_empty_p() was ported and added to sections.[ch] .  Radar bug #6573528.

Changes for the 5.26 release (the cctools-741 release):
- Fixed the encoding of the armv7 thumb2 instructions for where it places Rd in
  qadd, qdadd, qsub and qdsub.  Added the do_t_rd_rm_rn() routine and changed
  the opcode entries for these instructions to use them.  Radar bug #6522202.

Changes for the 5.26 release (the cctools-740 release):
- Removed the last abort() call in the reloc() routine in i386.c so user errors
  do not appear like assembler crashes.  Radar bug #6516397.

Changes for the 5.26 release (the cctools-739 release):
- Changed the arm assembler to use 0x46c0 as the thumb1 nop pad for sections
  with pure instructions.  The change was in s_align() in read.c.  Radar bug
  #6517544.

Changes for the 5.26 release (the cctools-738 release):
- Removed the code and files for the old ProjectBuilder interface including the
  use of mig(1) in the Makefile.  The files make.defs make_defs.h were removed
  and the code in as.c and messages.[ch] with the OLD_PROJECTBUILDER_INTERFACE
  #ifdef was removed.  Radar bug #6457206.
- Changed the arm assembler to put out a relocation entry for 32-bit thumb
  branches using the new ARM_THUMB_32BIT_BRANCH relocation type.  Radar bug
  #6511482.
  - Changed arm.c to assign the enum type BFD_RELOC_THUMB_PCREL_BRANCH20 to
    the new ARM_THUMB_32BIT_BRANCH relocation type's value.
  - Changed nrelocs_for_fix() and fix_to_relocation_entries() in write_object.c
    so there is an #ifdef ARM and tests for the new ARM_THUMB_32BIT_BRANCH
    relocation type when archflag_cpusubtype == CPU_SUBTYPE_ARM_V7.  To count 1
    for the fixes in nrelocs_for_fix() and to put out a relocation entry in
    fix_to_relocation_entries() for the type ARM_THUMB_32BIT_BRANCH.  The
    relocation entry put out is a local relocation entry that is pcrel, length
    of long and an symbolnum of R_ABS (0).  Also in fix_to_relocation_entries()
    it sets fr_type to ARM_THUMB_32BIT_BRANCH so that
    BFD_RELOC_THUMB_PCREL_BRANCH20 versions with no symbol gets set correctly.

Changes for the 5.26 release (the cctools-737 release):
- Changed the logic in fixup_section() in layout.c to correctly not add the
  value of the symbol into the item to be relocated if it is an external
  coalesced symbol or weak symbol.  Radar bug #6505278.
- Changed frag_grow() in frags.c to not reduce the frags.chunk_size if 2 times
  the number of bytes needed is less than that.  Radar bug #6490903.
- Changed the arm assembler to pad sections with pure instructions with nop's
  other than zero bytes.  Radar bug #6492867.
  - Changed arm.c and made the variable thumb_mode global and not static.
  - Changed s_align() and added #ifdef ARM code to use specific nop values.

Changes for the 5.26 release (the cctools-736 release):
- Fixed misspelling of "can not" to "cannot" in 4 error messages in i386.c .
  Radar bug #6447059.
- Fixed bugs in dwarf support:
  - Changed layout_addresses() in layout.c to make two loops for calling
    relax_section().  The first for non-debug sections so the sizes of their
    sections are set before the second loop of the debug sections which might
    have line number sections.  Radar bug #6460301.
  - To get the old .file and dwarf .file to both work the trick is that
    dwarf2_directive_file() parse the old .file directive stuff and pass
    it to s_app_file() to make this work.
     - This requires that dwarf2_directive_file is in md_pseudo_table[].
     - Changed s_file() in read.[ch] to s_app_file().
     - Changed the entry in the pseudo_table[] table from "file" to "appfile"
       in read.c
  - Changed process_entries() to return a non-zero value if it output something.
  - Changed out_debug_line() to check the return value of process_entries() and
    if nothing was outputted then output the a DW_LNE_set_address sequence to
    set the address to zero and the DW_LNE_end_sequence.
  - Changed dwarf2_finish() to also test files_in_use == 0 as part of its check
    that there is no line information and no non-empty .debug_info section. Then
    also added a check of all_segs == NULL before the check of
    all_segs->next == NULL, and added this same set of checks before calling
    out_debug_*() routines at the end.  This is need so the file table in the
    line section is put out for something that has only data and no line
    numbers.
  - Changed fixup_section() in layout.c for x86_64 in debug sections to actually
    set the value of the expression.
  - Changed section_new() in sections.c to not set now_seg for section types
    of S_ZEROFILL.
  - Added the routine add_last_frags_to_sections() to layout.[ch] so that the
    hacks in get_frag_fix() will work.  As get_frag_fix() will return 0 as the
    size of the last frag in a section.
  - Changed is_assembly_time_constant_subtraction_expression() in layout.c
    to treat expression with symbols from a debug section with FAKE_LABEL_NAMEs
    to be constant.
  - Changed fixup_section() in layout.c when it has a section difference
    relocatable subtraction where a symbol is at the end of a section and
    the section it is relocating is a debug section as an assembly time constant
    section if both symbols have FAKE_LABEL_NAMEs.
  - Changed section_set() in sections.c to simply call section_new() to fix
    the problems that it was not correctly setting frag_now and dropping the
    the fragments from the sections frag chain.
  - Fixed using basename() back to using lbasename() and added an lbasename()
    routine just before get_filenum() which returns a pointer into the path
    as expected by get_filenum().
  - Fixed section_symbol() in symbols.c that was incorrectly testing
    frcP->section_symbol != NULL when it should have been == NULL.
  - Fixed the call to frag_align() in out_debug_aranges() in to pass the
    fill prameters correctly so it does not crash.
  - In read.c changed these routines:
	sizeof_sleb128()
	sizeof_uleb128()
    to be two routines:
	sizeof_sleb128_32() and sizeof_sleb128_64()
	sizeof_uleb128_32() and sizeof_uleb128_64()
    which has parameters of proper 32 and 64 bit signed types so when values of 
    different types get passed they are correctly converted.  Without this it
    will cause hangs as a shift of a negative value will be an arithmetic
    shift and will never become zero.
    - And added new sizeof_leb128() and sizeof_uleb128() routines that are
      #ifdef'ed ARCH64 to call the correct sized and typed new routines.
  - Changed relax_inc_line_addr() to not use make_expr_symbol() which is
    ifdef'ed to abort, and changed it to use symbol_temp_new() and create a
    SECT_DIFF expression in that symbol.
  - Changed dwarf2dbg_estimate_size_before_relax() to match what
    relax_inc_line_addr() creates and evaluate the symbol's expression before
    the symbol values are set using their frag values.
  - Changed dwarf2dbg_convert_frag() to match what relax_inc_line_addr() creates
    and evaluate the symbol's expression after the symbol values are set.
- Hooked up the dwarf support for .loc and .file in the i386, ppc and arm
  assemblers.  Radar bug #4298593.
  - Removed the #ifndef NeXT_MOD in the md_pseudo_table[] in i386.c around the
    .file and .loc directives that use dwarf2_directive_file() and
    dwarf2_directive_loc() respectively.
  - Removed the #ifdef OBJ_ELF in the md_pseudo_table[] in arm.c around the
    .file, .loc and .loc_mark_labels directives that use dwarf2_directive_file()
    dwarf2_directive_loc() and dwarf2_directive_loc_mark_labels() respectfully.
  - Removed the #ifndef NeXT_MOD in output_insn() in i386.c around the call to
    dwarf2_emit_insn() at the beginning of the routine.
  - Removed the #ifdef OBJ_ELF in output_inst() in arm.c around the call to
    dwarf2_emit_insn() at the end of the routine.
  - Removed the #ifdef OBJ_ELF in output_relax_insn() in arm.c around the call
    to dwarf2_emit_insn() at the beginning of the routine.
  - Removed the #ifdef OBJ_ELF in arm_frob_label() in arm.c at the end of the
    routine.
  - Added a call to dwarf2_emit_insn() in md_assemble() in ppc.c after the
    call to md_number_to_chars().
  - Added a call to dwarf2_finish() in main() in as.c after the call to
    perform_an_assembly_pass().
  - Added a case label for rs_dwarf2dbg in layout_addresses() in layout.c 
    with a line of code:
	dwarf2dbg_convert_frag(fragP);
  - Added a case label for rs_dwarf2dbg in the first loop in relax_section()
    in layout.c with a line of code:
	address += dwarf2dbg_estimate_size_before_relax(fragP);
  - Added a case label for rs_dwarf2dbg in the second loop in relax_section()
    in layout.c with a line of code:
	growth = dwarf2dbg_relax_frag(fragP);

Changes for the 5.26 release (the cctools-733 release):
- Changed s_weak_definition() in read.c, colon() in symbols.c and
  layout_symbols() in write_object.c to not check for the symbol defined as
  not being in a coalesced section.  Then changed fix_to_relocation_entries()
  in write_object.c to produce an external relocation entry if is is an external
  coalesced symbol or weak symbol. And changed fixup_section() in layout.c to
  not add the value of the symbol into the item to be relocated if it is an
  external coalesced symbol or weak symbol.  Radar bug #6422713.

Changes for the 5.26 release (the cctools-731 release):
- Fixed s_thumb_set() in arm.c to set the N_ARM_THUMB_DEF bit in the sy_desc
  field of the symbol.  Radar bug #6366869

Changes for the 5.26 release (the cctools-729 release):
- Put back in the change below and removed the #ifdef CHANGE_FOR_6233320 in
  driver.c .  Radar bug #6233320.

Changes for the 5.26 release (the cctools-728 release):
- Changed arm_force_relocation() in arm.c so the the first if() conditional
  includes the check for the relocation type BFD_RELOC_THUMB_PCREL_BRANCH25 to
  cause it to generate a relocation entry for thumb2 b.w version of the branch.
  Radar bug #6297258.
- Changed md_apply_fix() in arm.c in the BFD_RELOC_ARM_SWI case if conditonal
  from this:
	if (fixP->tc_fix_data != 0)
  to:
	if (*((int*)fixP->tc_fix_data) != 0)
  Radar bug #6337904.
- Backed out the change below with an #ifdef CHANGE_FOR_6233320 in driver.c
  for now.  Radar bug #6233320.

Changes for the 5.26 release (the cctools-727 release):
- Put back in the change below and removed the #ifdef CHANGE_FOR_6233320 in
  driver.c .  Radar bug #6233320.

Changes for the 5.26 release (the cctools-724 release):
- Backed out the change below with an #ifdef CHANGE_FOR_6233320 in driver.c
  for now.  Radar bug #6233320.

Changes for the 5.26 release (the cctools-723 release):
- Changed the assember driver, /usr/bin/as , when running on an Intel x86_64
  host to default to -arch x86_64 instead of -arch i386.  The change was in
  driver.c in main() after it finds no arch_name set and calls
  get_arch_from_host().  A test for cputype == CPU_TYPE_I386 is made and if
  true the arch_flag gets set to the family flag for CPU_TYPE_X86_64.  Radar
  bug #6233320.
- radr://4545225 assembler should implement all dwarf-related GAS pseudo-ops
  This is NOT yet hooked up as of cctools-723, but the code changes are put in
  to top of tree to since they build and do not effect the operation of the
  assembler's existing functionality.
  - Moved now_seg definition from layout.c to sections.c and added the
    definition of now_subseg to sections.c.  Added their declrations to
    sections.h .
  - Changed section_new() sections.c to always set now_seg as the value from
    the frch_nsect field in the struct frchain for the current section.
    now_subseg is always left with a value of zero.
    - This is done so now_seg can be used dwarf2dbg.c for the seg field
      of the struct line_seg. And letting now_subseg remain zero so there are
      just one line_subseg per line_seg.
  - Added the new routines get_section_by_nsect(), get_section_by_name() and
    section_set() to sections.[ch] .
  - Added dwarf2dbg.c from GAS and ported it:
    - The routine dwarf2_finish() got a bit of a rewrite to deal with Mach-O
      objects.  And now uses section_new() and get_section_by_name() to see if
      it exists to replace the bfd_get_section_by_name() test.
    - Changed the three uses of seg_info() to get_section_by_nsect() and
      modified the code to use the returned struct frchain pointer.
    - The routines to emit the dwarf sections: out_debug_line(),
      out_debug_ranges(), out_debug_aranges(), out_debug_abbrev(),
      out_debug_info() were changes to instead take segT parameters to take
      struct frchain * parameters and there names changed to XXX_section from
      XXX_seg.
    - Changed subseg_set() to a new routine section_set() that was added to
      change sections.
    - Changed the call to resolve_symbol_value() in both
      dwarf2dbg_estimate_size_before_relax() and dwarf2dbg_convert_frag()
      to use the frag's values to calculate this.
  - The use of O_subtract with expressionS and use of the X_op_symbol field for
    the symbol value to subtract were change to use SEG_DIFFSECT and
    X_subtract_symbol instead.
  - Added rs_dwarf2dbg to relax_stateT enum in relax.h .
  - Added a definition and declration of debug_type and enum debug_info_type
    to as.[ch] and changed main() to set set debug_type to DEBUG_DWARF2 when
    the argument --gdwarf2 is specified.
  - Added an emit_expr() routine to dwarf2dbg.c based on the functionality of
    the one in GAS's read.c but just for the ported uses in dwarf2dbg.c .
  - Added to symbols.[ch] the routines: symbol_temp_new(),symbol_temp_new_now(),
    symbol_temp_make() and symbol_set_value_now() needed in dwarf2dbg.c .
  - Added a section_symbol field to the frchain struct in sections.h .
  - Added to sections.[ch] section_symbol() to create and set a symbol at the
    start of the section.
- Changed all the routines used in the poc_handler field of a pseudo_typeS to
  change its parameter from int to uintptr_t to get rid of warnings.  See
  Radar bug #6219587 below.

Changes for the 5.26 release (the cctools-722 release):
- Changed s_fill() in read.c to allow .fill with a size of 8.  Radar bug
  #5783217.

Changes for the 5.26 release (the cctools-718 release):
- Fixed a bug in read.h which had an incorrect prameter type for the poc_handler
  function pointer field of the pseudo_typeS typedef. The poc_val parameter was
  an int type but is used to hold pointers so it needs to be a uintptr_t type.
  Radar bug #6219587.

Changes for the 5.26 release (the cctools-716 release):
- Fixed a bug in s_zerofill() in read.c caused by the change in Radar bug
  #6159238 where it needed to change to handle the case of an extra space after
  the segment name before a comma in the parsing.  Radar bug #6195283.
- Fixed a bug in parse_neon_el_struct_list() in arm.c where it was loosing
  the information about the index used for things like "d0[]" and making it
  look like "d0".  In the loop to parse the argument list, in the is case
  "{d0[]-d1[0]}" it called parse_typed_reg_or_scalar() which was passed 
  pointer to a neon_typed_alias struct, atype, to fill in.  Then when it gets to
  parsing the "-" it does not look at the atype.defined like the code after
  the parsing of "-".  So that same bit of code which looks like:
	  if ((atype.defined & NTA_HASINDEX) != 0)
	    {
	      if (lane == -1)
		lane = atype.index;
	      else if (lane != atype.index)
		{
		  first_error (_(type_error));
		  return FAIL;
		}
	    }
	  else if (lane == -1)
	    ...
  to match what is done after the the parsing of "-" so it does not lose the
  information about the index of "d0[]".  What was happening for example was
  this instruction:
	vld1.f32 {d0[]-d1[]}, [r0]
  was ending up as this instruction:
	vld1.32 {d0-d1}, [r0]
  Radar bug #6185952.

Changes for the 5.26 release (the cctools-715 release):
- Fixed the .thumb_set directive fails which was failing to parse its second
  operand.  The fix was in s_thumb_set() to include the call to pseudo_set()
  outside the #ifdef.  And to change pseudo_set() in read.[ch] to not be
  static.  Radar bug #6182961.
- Fixed the handling of -force_cpusubtype_ALL for the arm assembler.  The code
  near the end of md_begin() that tested for force_cpusubtype_ALL needed to
  be changed to set the cpu_variant variable to allow everything and to set
  archflag_cpusubtype to CPU_SUBTYPE_ARM_ALL as that is what will get set into
  the resulting object file (not md_cpusubtype).  Radar bug #6150777.
- Fixed a problem with the change to Radar bug #4141844 where it was trying to
  allow a prefix on the same line as the instruction without a separating shash,
  '/', character.  The original change added a new "substate" variable to app.c.
  But there were cases that it did not get set back it its initial value of zero
  at the start of each line (state 0).  So to make this a bit more robust all
  places where the state gets set back to zero the substate is also set to zero.
  Radar bug #6159238.

Changes for the 5.26 release (the cctools-714 release):
- Added the arm instructions vmrs and vmsr to be the same as fmrx and fmxr in
  arm.c .  Radar bug #6152739.
- Fixed a bug where the field sy_has_been_resolved in the symbol struct was
  being used uninitialized.  The fix is in symbol_new() in symbols.c .
  Radar bug #6163385.

Changes for the 5.26 release (the cctools-713 release):
- Changed an error message in md_apply_fix() for the BFD_RELOC_ARM_OFFSET_IMM8
  case to use as_bad_where() not as_bad() so a file and line number gets 
  printed.  Radar bug #5890008.

Changes for the 5.26 release (the cctools-711 release):
- Fixed a problem with getting the correct value of a difference of two symbols
  that it was divided by 2 for 32-bit targets.  As the resulting value was
  being calculated into a 64-bit signed type, signed_expr_t, with a += of an
  expression of 2 32-bit unsigned types in fixup_section() in layout.c .
  Radar bug #6096697.

Changes for the 5.26 release (the cctools-709 release):
- Fixed a problem with .quad expression values getting assembled with constants
  larger than 32-bits being added to symbols.  Two places were using 32-bit
  types, the offset field in the fix struct in fixes.h and the local variable
  value in fixup_section() in layout.c .  Radar bug #5955044.
- Removed the call to abort() in reloc() in i386.c that should not be there
  after a call to as_bad() to generate an error message.  Radar bug #6029941.

Changes for the 5.26 release (the cctools-706 release):
- Fixed a problem with the ported to run on 64-bit hosts, where changes to
  atof-generic.c had 3 places change to uint32_t which should have been int32_t.

Changes for the 5.26 release (the cctools-705 release):
- Ported to run on 64-bit hosts.  Radar bug #6022298

Changes for the 5.26 release (the cctools-703 release):
- Added the .inlineasmstart and .inlineasmend directives to check that only
  numeric lables are defined between them.  And if not generate an error message
  from the arguments of the .inlineasmstart directive.  Radar bug #5896375.
  - In read.c added the new routine s_inlineasm() and added it to the
    pseudo_table[].  For the .inlineasmstart directive, s_inlineasm() is passed
    a value of 1 and parses out the optional file_name, line_number and
    column_number arguments.  When the .inlineasmstart directive is see it sets
    the new inlineasm_checks variable and fills in the new variables
    inlineasm_file_name, inlineasm_line_number and inlineasm_column_number with
    the arguments.  And when the .inlineasmend directive is seen it clears
    the new variables.  The new variables are defined in read.[ch].
  - The routine colon(), in symbols.[ch], was changed to take a new parameter
    local_colon that is set when called by local_colon.  And a test was added
    if inlineasm_checks is set and local_colon() is not to cause an error.
    If inlineasm_file_name is set then the new routine, in messages.[ch],
    as_warn_where_with_column() is called else as_bad() is called to generate
    the error message.
  - The two plaves in read.c that call colon() had a 0 second argument added and
    the call to colon() from local_colon() in symbols.c had a 1 second argument
    added.
- Improved the x86_64 assembly time by caching the value of the linked list
  search of x86_64_resolve_local_symbol() in i386.c.  Added two fields,
  sy_has_been_resolved and sy_prev_resolved, to the symbol structure in
  struc-symbol.h.  Radar bug #5902686.

Changes for the 5.26 release (the cctools-701 release):
- Fixed a problem in expr() in expr.c when it is combining a symbol that is a
  set to a substract expression, SEG_DIFFSECT, with a constant.  In that case
  it gets incorrectly combined to a SEG_ABSOLUTE instead of retaining the
  SEG_DIFFSECT expression type.  Also Changed the x86_64 assembler to allow a
  32-bit displacement operand as a symbol set to the subtraction of two
  instructions.  Code was added in output_disp() in i386.c to test for this
  specific case and create the needed fix for it.  Radar bug #5683920.
- Fixed a problem in pseudo_set() in read.c when it is setting a symbol to
  another symbol that was already a section difference expression.  In that case
  expression() returns an expression of just one symbol and a type of
  SEG_DIFFSECT.  Code at the case for SEG_DIFFSECT needed to be added to handle
  this case and copy the expression of the symbol in to the new symbol being
  set.  Radar bug #5684077.
- Changed the x86_64 assembler to allow a 32-bit displacement operand as a
  subtraction of two instructions.  Code was added in output_disp() in i386.c
  to test for this specific case and create the needed relocation entries for
  it.  Radar bug #5622258.

Changes for the 5.25 release (the cctools-697 release):
- Changed the sources so the arm assembler is not in the open source version.
  Radar bug #5844124.
  - Changed the Makefile to #ifndef __OPEN_SOURCE__
  - Added #ifndef __OPEN_SOURCE__

Changes for the 5.25 release (the cctools-689 release):
- Fixed a place that needed force_cpusubtype_ALL tested in md_assemble() in
  arm.c . Radar bug #5817558.
- Added support for the special assembly time constant expression of the diff-
  erence of two symbols defined in the same section then divided by exactly 2.
  Radar bug #5819903.
  - Added the field X_sectdiff_divide_by_two to the expressionS typedef in
    expr.h .
  - In expr() in expr.c added code to look for an expression with a SEG_DIFFSECT
    and a left side with an SEG_ABSOLUTE X_add_number == 2 and a O_divide right
    side and if so set the new X_sectdiff_divide_by_two field.
  - Added the field fx_sectdiff_divide_by_two to the struct fix.
  - Changed cons() in read.c to save the fix for a SEG_DIFFSECT and to copy the
    the new X_sectdiff_divide_by_two field from the expression to the new
    fx_sectdiff_divide_by_two field in the fix.
  - In fixup_section() in layout.c added code to test the news
    fx_sectdiff_divide_by_two field and if so divide the value by 2.  And check
    to see that the expression is an assembly time constant.

Changes for the 5.25 release (the cctools-686 release):
- Changed arm_relax_frag() in arm.c to take a section number for the section it
  is operating on.  That is in turn now passed to relax_branch() in arm.c and
  in there if the symbol that is being branched to is not for that section it
  returns 4 for the size of the instruction.
- In md_apply_fix() for BFD_RELOC_THUMB_PCREL_BRANCH25 the fx_r_type type is
  set to BFD_RELOC_THUMB_PCREL_BRANCH23 so it can be output as a known
  relocation type (ARM_THUMB_RELOC_BR22).

Changes for the 5.25 release (the cctools-685 release):
- Changed relaxed_symbol_addr() in arm.c to also add in
  fragp->fr_symbol->sy_nlist.n_value when calculating the addr.  Without this
  it can some times get "branch out of range" errors since it appears this
  to have the address of the symbol from the start of the fragment.
- Changed the check in md_assemble() in arm.c for "width suffixes are invalid
  in ARM mode" to allow them with unified syntax.
- Changed the arm APPLE LOCAL trap instruction opcode entry in arm.c from this:
	CE(trap,	7ffdefe,  0, (), noargs),
  to this:
	TUE(trap,      7ffdefe, defe, 0, (), noargs, noargs),
  which allows it to work with thumb mode.
- Changed relax_section() in layout.c in two plaves #ifdef'ed ARM.  In the first
  look it now sets frag's relax_marker field to zero.  In the "Do relax" loop
  it flips the relax_marker field with an "^= 1".  This is to fix a problem in
  relaxed_symbol_addr() so it knows to add the stretch amount to the addr it
  is returning.
- Added a second call to as_file_and_line() in frag_var() in frags.c which was
  #ifdef ARM at the top of the file to set the fr_file and fr_line fields of
  the current frag before creating a new frag.  This is needed because as the
  line number of the last instruction which is the "relaxable" instruction is
  the line number that is needed (not the first one).  So when relax_section()
  calls arm_relax_frag() which calls md_convert_frag() it will call
  fix_new_exp() and fix_new_internal() so a new fix may be created after all
  code is read for the last instruction in the frag.  So md_convert_frag()
  copies the fr_file and fr_line fields of the frag into the fx_file and fx_line
  fields of the fix so line numbers can be reported.

Changes for the 5.25 release (the cctools-684 release):
- Changed relaxed_symbol_addr() in arm.c to not use the hack ported
  S_GET_VALUE() as at that point the symbol does not have the value set.  The
  code was #ifdef NOTYET to use fragp->fr_symbol->sy_frag->fr_address to get
  the address from the symbol's frag.  The hack ported S_GET_VALUE() routine
  was removed from symbols.[ch].
- Changed relax_addsub() where it had a memcpy() hack in place of the
  #ifdef NOTYET out call to bfd_get_16() to a call to a call to 
  md_chars_to_number() to retrive the old thumb opcode into op that
  output_relax_insn() put into the frag.
- Added a call to as_file_and_line() in frag_var() in frags.c which was #ifdef
  ARM to set the fr_file and fr_line fields of the frag.  This is needed because
  when relax_section() calls arm_relax_frag() which calls md_convert_frag()
  it will call fix_new_exp() and fix_new_internal() so a new fix will be created
  after all code is read.  So md_convert_frag() copies the fr_file and fr_line
  fields of the frag into the fx_file and fx_line fields of the fix so line
  numbers can be reported.

Changes for the 5.25 release (the cctools-683 release):
- Fixed a bug in fix_new_arm() in arm.c after the call to fix_new_exp() before
  the default: case label as missing a break; statement.
- Fixed a bug in relax_section() in layout.c for the "Do relax" loop where
  the call to arm_relax_frag() should have set the variable growth not
  incremented.  The "+=" was change to just an assignment, "=".

Changes for the 5.25 release (the cctools-682 release):
- Changed relax_section() in layout.c for the "Do relax" loop and #ifdef'ed
  ARM the rs_machine_dependent case to call arm_relax_frag().
- Changed md_convert_frag() where it had a memcpy() hack in place of the
  #ifdef NOTYET out call to bfd_get_16() to a call to a call to 
  md_chars_to_number() to retrive the old thumb opcode into old_op that
  output_relax_insn() put into the frag.

Changes for the 5.25 release (the cctools-681 release):
- Removed all __OPEN_SOURCE__ references in Makefile, notes, as.c, layout.c, 
  messages.c, symbols.c, write_object.c, frags.h and symbols.h .
- Fixed a bug in the table entries for the pextrq and pinsrq instructions as
  they should have had Size64 to force the REX.W byte.
- Fixed a bug in the table entries for the i386 SSE4.1 instruction insertps
  where it had the second parameter as a general register not a xmm register.
  The change was in i386-opcode.h to change Reg32 and Reg64 to RegXMM.
  Radar bug #5650346.
- Changed it so -arch armv7 includes neon.  The change was in md_begin() at the
  end case statement for armv7 to or in FPU_NEON_EXT_V1.
- Changed output_relax_insn() in arm.c to just used the undefined symbol instead
  of calling make_expr_symbol() if the expression is a just an undefined symbol
  and no subtract symbol.

Changes for the 5.25 release (the cctools-680 release):
- Added support for ARMv7. Changes were made to arm.c picked up from the last v2
  GNU binutils gas/config/tc-arm.c . Radar bug #5490815.
  - The updated header opcode/arm.h was picked up in the include directory.
  - arm.h has a struct arm_feature_set instead of an unsigned long to hold cpu
    features and coprocessor features, and macros for accessing and testing.
  - New variables of arm_feature_set were added for the various processors.  And
    the variable cpu_variant changed to a arm_feature_set type.  And updated
    cpu_variant to set it using the new macro ARM_FEATURE.
  - Left out many varibles that are used parsing flags for cpus and ELF objects
    including: uses_apcs_26, atpcs, support_interwork, uses_apcs_float,pic_code,
    legacy_*, mcpu_*, march_*, mfpu_opt, object_arch, fpu_* and mfloat_abi_opt.
  - Also left out CPU_DEFAULT, FPU_DEFAULT, selected_cpu and selected_cpu_name[]
    as we directly set cpu_variant from -arch options.
  - Left out #ifdef OBJ_ELF stuff: *eabi* and GOT_symbol.
  - The new boolean variable unified_syntax was picked up.
  - The arm_fix_data typedef was removed.
  - The tc_fix_data field of a fixS is now directly used to store and test
    thumb_mode.
  - The new enum neon_el_type, struct neon_type_el, macro NEON_MAX_TYPE_ELS, 
    struct neon_type were picked up.
  - Picked up all the new fields of the arm_it structure.  And made the inst
    arm_it struct variable static.
  - These macros were removed: CP_WB_OK and CP_NO_WB.
  - These macros were remamed: CP_T_Pre, CP_T_UD, and CP_T_WB to: PRE_INDEX,
    INDEX_UP WRITE_BACK.
  - The macro COND_ALWAYS was changed to 0xE from 0xe0000000 and the macro
    COND_MASK was removed.  As the conditional field is now stored separately
    in the arm_it structure in the new cond field instead as part of the
    bits in the instruction field.
  - The value field of the conds[] have been change to 1-nibble values from
    a 32-bit value with the high nibble value set.
  - The cpsr field of the asm_psr structure was removed.  And the psrs[] table
    template fields have changed.
  - The asm_barrier_opt struct was added.
  - The mactro PSR_SHIFT was removed and the PSR_* macros shift values were
    changed.
  - Added the struct reloc_entry which is only used with OBJ_ELF but is picked
    up so parse_reloc() can use it.  arm_reloc_hsh will end up empty when
    OBJ_ELF is not defined so things work.
  - The enums vfp_dp_reg_pos and vfp_sp_reg_pos were removed and vfp_reg_pos is
    now used for both.
  - The enum wreg_type, and iwmmxt_insn_type were removed along with the
    vfp_reg structure and vfp_regs[] array were removed for the VFP system
    registers.  All registers were moved into the reg_names[] array of
    reg_entry structs.
  - Macros for neon_typed_alias and the structure was added.
  - Updated the enum arm_reg_type and added the type and neon fields to the
    reg_entry struct.
  - The macro INSN_SIZE was move up in the arm.c source.
  - The thumb_opcode structure was merged into asm_opcode struct. The operands[]
    field was added, the value, cond_offset and size fields were replace with
    the tag, avalue and tvalue fields, the variant field was replaced with the
    avariant and tvariant fields, the parms field was replaced with the aencode 
    and tencode fields.
  - Removed the macros wr_register, wc_register and wcg_register.
  - Replace the all the *_table[] register arrays with the merged reg_names[]
    array.
  - Removed WR_PREFIX and WC_PREFIX macros.
  - Removed the reg_map structure and replaced the all_reg_maps[] array with the
    reg_expected_msgs[] array.
  - Removed the MAV_MODE* macros.
  - Updated the macro defines for various bits like HWOFFSET_IMM to BAD_FPU.
  - The hash_control struct for arm_tops_hsh was removed and the ones for
    arm_v7m_psr_hsh, arm_reg_hsh, arm_reloc_hsh and arm_barrier_opt_hsh were
    added.
  - The last_label_seen symbolS pointer was added for needed to resolve the
    label ambiguity.
  - The state variables for IT block handling, current_it_mask and current_cc
    were added.
  - The skip_past_char() routine was added and skip_past_comma was maded into a
    simple macro from a function and the skip_whitespace macro had a do{} added
    to it.
  - Note walk_no_bignums() is still NOTYET #ifdef out it was in the old Apple
    version.
  - A third argument, prefix_mode, was added to my_get_expression() to allow
    unified syntax where all prefixes are optional.
  - The md_atof() routine was updated for big an little arm fp constants.
  - The md_operand() routine was updated and now does not set the inst.error.
  - New register parsing routines were added arm_reg_parse_multi() and
    arm_reg_alt_syntax().  And the arm_reg_parse() routine was updated to use
    the new routines.
  - The new routines parse_neon_type(), first_error(), parse_neon_operand_type()
    parse_typed_reg_or_scalar(), arm_typed_reg_parse(), parse_scalar(),
    parse_reg_list(), parse_vfp_reg_list(), neon_alias_types_same() and
    parse_neon_el_struct_list() were added to support register parsing.
    One modification to parse_vfp_reg_list() was made to HACK out its call
    to gettext() around the use of the reg_expected_msgs[] array.  And a TOLOWER
    macro was added as tolower.
  - The routine parse_reloc() was added.  It does nothing since OBJ_ELF is not
    defined and arm_reloc_hsh contains no entries.  But makes the port cleaner
    if the routine is there.
  - The routines for register aliases directives were added: insert_reg_alias(),
    insert_neon_reg_alias(), create_register_alias(), create_neon_reg_alias(),
    s_req(), s_dn() s_qn() and s_unreq().
  - The routine find_real_start() to find the real, Thumb encoded start of a
    Thumb function was updated, preserving the previous #ifdef NOTYET around the
    test of the new_target being NULL and calling as_warn() and then using
    symbolP.
  - The routine opcode_select() was updated preserving the previous
    #ifdef NOTYET's around the code to force alignment.
  - The new routine s_force_thumb() was added.  And #ifdef NOTYET was then
    added around the record_alignment() to match opcode_select().
  - The new routine s_thumb_set() was added.  Then NO_LISTING was defined as a
    HACK, zeros were added for the other and desc parameters to the symbol_new()
    call and then #ifdef NOTYET out the already defined test as well as the
    call to pseudo_set().
  - The new routine s_syntax() was added to select from the unified syntax or
    the old divided syntax.
  - The new routine s_align() and s_even() were added. Then the test of
    need_pass_2 was #ifdef NOTYET out, and the frag_align() call had a 0
    argument added for the max_bytes_to_fill 4th parameter.  And like the other
    calls to record_alignment() they too were #ifdef NOTYET out.
  - The new routine s_bss() was added but fully #ifdef NOTYET out and replaced
    with an error message to use .zerofill
  - Updated the routines find_literal_pool(), find_or_make_literal_pool() and
    add_to_lit_pool().  There are two local changes that were kept, one at the
    end of add_to_lit_pool() where inst.reloc.exp.X_add_number as a -8, and one
    #ifdef NOTYET with a test for X_unsigned.
  - The routines symbol_locate() and s_ltorg() were added.  Then the test of
    need_pass_2 was #ifdef NOTYET out, and the frag_align() call had a 0
    argument added for the max_bytes_to_fill 4th parameter.  And the call to
    record_alignment() was #ifdef NOTYET out.
  - Updated the md_pseudo_table[] with the machine specific pseudo-ops. With the
    #ifdef OBJ_ELF and #ifdef TE_PE entries removed and the dwarf2 ones #ifdef
    NOTYET out.  Also the s_arm_{cpu,arch,object_arch,fpu} were #ifdef NOTYET
    out.
  - The routines parse_immediate(), parse_big_immediate(), parse_fpa_immediate()
    is_quarter_float(), and parse_qfloat_immediate() were added.  The array
    reference to is_end_of_line[] was changed to a function call in
    parse_fpa_immediate() in two places.
  - The support for parsing shifts was changed.  So these were removed:
    asm_shift_index, asm_shift_properties, shift_properties[], asm_shift_name,
    shift_names and *SHIFT* macros.  And were replaced with shift_kind,
    asm_shift_name, parse_shift_mode, parse_shift() and parse_shifter_operand().
  - The the Group relocation information stuff: group_reloc_table_entry,
    group_reloc_type, group_reloc_table[], find_group_reloc_table_entry() and
    values to the enum HACK for BFD_RELOC_ARM_* plus parse_operand_result and
    the routine parse_shifter_operand_group_reloc() which uses them.
  - The routines parse_address_main(), parse_address() and
    parse_address_group_reloc() were added.
  - The routine parse_half() and BFD_RELOC_ARM_MOV{W,T} values were added to the
    enum HACK for BFD_RELOC_ARM_* .
  - The routines parse_psr(), parse_cps_flags(), parse_endian_specifier(),
    parse_ror(), parse_cond(), parse_barrier(), parse_tb() and parse_neon_mov()
    were added.  And the old routines arm_psr_parse() and psr_required_here()
    were removed.
  - The enum operand_parse_code and routine parse_operands() was added.
  - The constraint() and rotate_left() macros plus the encode_arm_immediate()
    [which is the renamed old validate_immediate() routine],
    encode_thumb32_immediate(), encode_arm_vfp_reg(), encode_arm_shift(),
    encode_arm_shifter_operand(), encode_arm_addr_mode_common(), 
    encode_arm_addr_mode_2(), encode_arm_addr_mode_3() and
    encode_arm_cp_address() routines as well as BFD_RELOC_ARM_T32_CP_OFF_IMM
    to the enum HACK for BFD_RELOC_ARM_* all were added.
  - The routine move_or_literal_pool() was added.
  - Routines for instruction encoding: do_noargs(), do_rd(), do_rd_rm(),
    do_rd_rn(), do_rn_rd(), do_rd_rm_rn(), do_rd_rn_rm(),do_rm_rd_rn(),
    do_imm0() and do_rd_cpaddr() were added.
  - The ARM instruction encoding routines:  do_adr(), do_adrl(), do_arit(),
    do_barrier(), do_bfc(), do_bfi(), do_bfx(), do_bkpt(), encode_branch(),
    do_branch(), do_bl(), do_blx(), do_bx(), do_bxj(), do_cdp(), do_cmp(), 
    do_co_reg(), do_co_reg2c(), do_cpsi(), do_dbg(), do_it(), do_ldmstm(),
    do_ldrd(), do_ldrex(), do_ldrexd(), do_ldst(), do_ldstt(), do_ldstv4(),
    do_ldsttv4(), do_lstc(), do_mlas(), do_mov(), do_mov16(), do_vfp_nsyn_mrs(),
    do_vfp_nsyn_msr(), do_mrs(), do_msr(), do_mul(), do_mull(), do_nop(),
    do_pkhbt(), do_pkhtb(), do_pld(), do_pli(), do_push_pop(), do_rfe(),
    do_ssat(), do_usat(), do_ssat16(), do_usat16(), do_setend(), do_shift(),
    do_smc(), do_swi(), do_smla(), do_smlal(), do_smul(), do_srs(), do_strex(),
    do_strexd(), do_sxtah(), do_sxth(), do_vfp_sp_monadic(), do_vfp_sp_dyadic(),
    do_vfp_sp_compare_z(), do_vfp_dp_sp_cvt(), do_vfp_sp_dp_cvt(),
    do_vfp_reg_from_sp(), do_vfp_reg2_from_sp2(), do_vfp_sp_from_reg(),
    do_vfp_sp2_from_reg2(), do_vfp_sp_ldst(), do_vfp_dp_ldst(), vfp_sp_ldstm(),
    do_vfp_sp_ldstmia(), do_vfp_sp_ldstmdb, do_vfp_dp_ldstmia(),
    do_vfp_dp_ldstmdb(), do_vfp_xp_ldstmia(), do_vfp_xp_ldstmdb(),
    do_vfp_dp_rd_rm(), do_vfp_dp_rn_rd(), do_vfp_dp_rd_rn(),
    do_vfp_dp_rd_rn_rm(), do_vfp_dp_rd(), do_vfp_dp_rm_rd_rn(),
    do_vfp_sp_const(), do_vfp_dp_const(), vfp_conv(), do_vfp_sp_conv_16(),
    do_vfp_dp_conv_16(), do_vfp_sp_conv_32() and do_vfp_dp_conv_32 were added or
    updated.  Also BFD_RELOC_ARM_PLT32 and BFD_RELOC_ARM_SMC were added to the
    enum HACK for BFD_RELOC_ARM_* .
  - For do_mull(), do_mul() and do_mlas() the updated routines were modified as
    per Radar bug #4474226 to match the old routine and only restrict on pre-V4
    architectures. This is based on cpu_variant and not selected_cpu.
  - The FPA instructions encoding routines: do_fpa_cmp() and do_fpa_ldmstm()
    were added or updated.
  - The iWMMXt instructions encoding routines: do_iwmmxt_tandorc(),
    do_iwmmxt_textrc(), do_iwmmxt_textrm(), do_iwmmxt_tinsr(), do_iwmmxt_tmia(),
    do_iwmmxt_waligni(), do_iwmmxt_wmerge(), do_iwmmxt_wmov(),
    do_iwmmxt_wldstbh(), do_iwmmxt_wldstw(), do_iwmmxt_wldstd(),
    do_iwmmxt_wshufh(), do_iwmmxt_wzero() and do_iwmmxt_wrwrwr_or_imm5()
    were added or updated.  Also BFD_RELOC_ARM_T32_CP_OFF_IMM_S2 was added to
    the enum HACK for BFD_RELOC_ARM_* .
  - The Cirrus Maverick instructions encoding routines: do_mav_triple(),
    do_mav_quad(), do_mav_dspsc() and do_mav_shift() were added or updated.
  - The XScale instructions encoding routines: do_xsc_mia(), do_xsc_mar()
    and do_xsc_mra() were added or updated.
  - The encoding functions relevant only to Thumb:
    encode_thumb32_shifted_operand() and encode_thumb32_addr_mode() were added
    or updated.
  - The Table of Thumb instructions, the T16_32_TAB() and X(), macros and the
    enum t16_32_codes, the thumb_op16[] and thumb_op32[] arrays were added. Also
    BFD_RELOC_ARM_T32_OFFSET_IMM was added to the enum HACK for BFD_RELOC_ARM_*.
  - The Thumb instruction encoding routines: do_t_add_sub_w(), do_t_add_sub(),
    do_t_adr(), do_t_arit3(), do_t_arit3c(), do_t_barrier(), do_t_bfc(),
    do_t_bfi(), do_t_bfx(), do_t_blx(), do_t_branch(), do_t_bkpt(),
    do_t_branch23(), do_t_bx(), do_t_bxj(), do_t_clz(), do_t_cps(), do_t_cpsi(),
    do_t_cpy(), do_t_cbz(), do_t_dbg(), do_t_div(), do_t_hint(), do_t_it(),
    encode_thumb2_ldmstm(), do_t_ldmstm(), do_t_ldrex(), do_t_ldrexd(),
    do_t_ldst(), do_t_ldstd(), do_t_ldstt(), do_t_mla(), do_t_mov_cmp(),
    do_t_mov16(), do_t_mvn_tst(), do_t_mrs(), do_t_msr(), do_t_mul(),
    do_t_mull(), do_t_nop(), do_t_neg(), do_t_pkhbt(), do_t_pld(),
    do_t_push_pop(), do_t_rbit(), do_t_rev(), do_t_rsb(), do_t_setend(),
    do_t_shift(), do_t_simd(), do_t_smc(), do_t_ssat(), do_t_ssat16(),
    do_t_strex(), do_t_strexd(), do_t_sxtah(), do_t_sxth(), do_t_swi(),
    do_t_tb(), do_t_usat() and do_t_usat16 were added or updated.  Also
    BFD_RELOC_ARM_T32_IMM12, BFD_RELOC_ARM_T32_IMMEDIATE,
    BFD_RELOC_ARM_T32_ADD_IMM, BFD_RELOC_ARM_T32_ADD_PC12,
    BFD_RELOC_THUMB_PCREL_BRANCH25, BFD_RELOC_THUMB_PCREL_BRANCH20,
    BFD_RELOC_THUMB_PCREL_BRANCH7, BFD_RELOC_ARM_T32_OFFSET_U8, 
    BFD_RELOC_ARM_THUMB_MOVW and BFD_RELOC_ARM_THUMB_MOVT were added to the enum
    HACK for BFD_RELOC_ARM_* .
Can't figure out for do_t_arit() how the updated routine would be modified as
per Radar bug #4474226 to match the old routine and only restrict on pre-V4
architectures. This is would based on cpu_variant and not selected_cpu.
  - The Neon instruction tables, macros and routines were added:  N_INV,
    neon_tab_entry structure, NEON_ENC_TAB, neon_opc enum, X macros,
    neon_enc_tab[] array, NEON_*, S* macros, neon_shape and neon_shape_class
    enums, neon_shape_class[] array, neon_shape_el enum, neon_shape_el_size[]
    array, neon_shape_info struct, neon_shape_tab[] array, neon_type_mask enum,
    N_* macros, neon_select_shape(), neon_quad(), neon_modify_type_size(),
    neon_quad(), neon_modify_type_size(), neon_type_promote(),
    type_chk_of_el_type(), el_type_of_type_chk(), modify_types_allowed(),
    neon_check_type(), do_vfp_cond_or_thumb(), do_vfp_nsyn_opcode(),
    do_vfp_nsyn_add_sub(), try_vfp_nsyn(), do_vfp_nsyn_mla_mls(),
    do_vfp_nsyn_mul(), do_vfp_nsyn_abs_neg(), do_vfp_nsyn_ldm_stm(),
    do_vfp_nsyn_sqrt(), do_vfp_nsyn_div(), do_vfp_nsyn_nmul(),
    do_vfp_nsyn_cmp(), nsyn_insert_sp(), do_vfp_nsyn_push(), do_vfp_nsyn_pop(),
    neon_dp_fixup(), neon_logbits(), neon_three_same(), neon_two_same(),
    do_neon_dyadic_i_su(), do_neon_dyadic_i64_su(), neon_imm_shift(),
    do_neon_shl_imm(), do_neon_qshl_imm(), do_neon_rshl(),
    neon_cmode_for_logic_imm(), neon_bits_same_in_bytes(), neon_squash_bits(),
    neon_qfloat_bits(), neon_cmode_for_move_imm(), neon_write_immbits(),
    neon_invert_size(), do_neon_logic(), do_neon_bitfield(), neon_dyadic_misc(),
    do_neon_dyadic_if_su(), do_neon_dyadic_if_su_d(), do_neon_dyadic_if_i_d(),
    vfp_or_neon_is_neon(), do_neon_addsub_if_i(), neon_exchange_operands(),
    neon_compare(), do_neon_cmp(), do_neon_cmp_inv(), neon_scalar_for_mul(),
    neon_mul_mac(), do_neon_mac_maybe_scalar(), do_neon_tst(), do_neon_mul(),
    do_neon_qdmulh(), do_neon_fcmp_absolute(), do_neon_fcmp_absolute_inv(),
    do_neon_step(), do_neon_abs_neg(), do_neon_sli(), do_neon_sri(),
    do_neon_qshlu_imm(), do_neon_qmovn(), do_neon_qmovun(),
    do_neon_rshift_sat_narrow(), do_neon_rshift_sat_narrow_u(), do_neon_movn(),
    do_neon_rshift_narrow(), do_neon_shll(), neon_cvt_flavour(),
    do_vfp_nsyn_cvt(), do_vfp_nsyn_cvtz, do_neon_cvt(), neon_move_immediate(),
    do_neon_mvn(), neon_mixed_length(), do_neon_dyadic_long(), do_neon_abal(),
    neon_mac_reg_scalar_long(), do_neon_mac_maybe_scalar_long(),
    do_neon_dyadic_wide(), do_neon_dyadic_narrow(),
    do_neon_mul_sat_scalar_long(), do_neon_vmull(), do_neon_ext(),
    do_neon_rev(), do_neon_dup(), do_neon_mov(), do_neon_rshift_round_imm(),
    do_neon_movl(), do_neon_trn(), do_neon_zip_uzp(), do_neon_sat_abs_neg(),
    do_neon_pair_long(), do_neon_recip_est(), do_neon_cls(), do_neon_clz(),
    do_neon_cnt(), do_neon_swp(), do_neon_tbl_tbx(), do_neon_ldm_stm(),
    do_neon_ldr_str(), do_neon_ld_st_interleave(), neon_alignment_bit(),
    do_neon_ld_st_lane(), do_neon_ld_dup() and do_neon_ldx_stx().
  - Updated fix_new_arm() where the tc_fix_data field of a fixS is now directly
    used to store and test thumb_mode without the allocated arm_fix_data.
    Then it was modified to match the old routine adding the pcrel_reloc
    parameter HACK_GUESS, #ifdef NOTYET out O_constant, O_add and O_subtract,
    added the pcrel_reloc argument to fix_new_exp() and #ifdef NOTYET out the
    fix_new() call and replaced it with one where the 3 expression field are
    passed as well as pcrel_reloc.
  - The routines output_relax_insn(), put_thumb32_insn() and output_inst()
    were added or updated.  In output_inst the call to output_inst() had the
    inst.reloc.pcrel_reloc parameter added.  And in both output_inst() and
    output_relax_insn() the call to dwarf2_emit_insn() was #ifdef OBJ_ELF.
  - The opcode_tag enum was added.
  - The subroutine of md_assemble(), opcode_lookup() was added.
  - The routine md_assemble() was updated.  Then modified as per the old
    routine, the code to align the previous label if needed was #ifdef NOTYET
    out, added !force_cpusubtype_ALL as part of the conditional before the
    selected processor does not support error, at the end of the routine after
    the call to output_inst() the code from the Mac OS X port for -g was added
    and after that the code to or in S_ATTR_SOME_INSTRUCTIONS in to the section
    flags.
  - The routine arm_start_line_hook() was added and arm_frob_label() was
    updated and modified as per the old routine, the first part of the routine
    was #ifdef NOTYET out, the sym name is checked for just 'L' not ".L",
    the test for bfd_get_section_flags() & SEC_CODE was changed to test
    frchain_now->frch_nsect == text_nsect, code to or in N_ARM_THUMB_DEF into
    sym->sy_desc was added, and the call to dwarf2_emit_label() was #ifdef
    NOTYET out.
  - The routines arm_data_in_code() and arm_canonicalize_symbol_name() were
    added.
  - The a single table of all register names was added: REG* macros and
    reg_names[] array.
  - The updated tables of all PSR suffixes was added: psrs[] array and
    v7m_psrs[].
  - The updated table of shift-in-operand names was added: shift_names[] array.
  - The table of explicit relocation names, the reloc_names[] array, that was
    #ifdef OBJ_ELF was not added.
  - The updated table of all conditional affixes, conds[] array was added.
  - The barrier_opt_names[] array was added.
  - The updated table of ARM-format instructions was added: macros OPS*, T*C*,
    plus may others, and the insns[] array.
  - Updated the md_number_to_chars() and modified as per the old routine, so
    that the val parameter is a signed_expr_t type.
  - Updated the md_estimate_size_before_relax() and md_convert_frag() routines.
    Then modified as per the old routine, the segtype parameter of
    md_estimate_size_before_relax() was changed to an int.  And the abfd and
    asec parameters of md_convert_frag() were commented out, the call to
    bfd_get_16() was hacked out with an #ifdef NOTYET and replaced by a
    memcpy() a GUESS, this has a FIXME as it may still need some byte swapping
    too, the call to fix_new_exp() had a FALSE added for the pcrel_reloc
    parameter, also a GUESS.
    To make these work the frag struct in frags.h had the fields fr_file and
    fr_line added to it.
  - The md_relax_table[] was kept with a FIXME, as some new way to drive
    "relaxation" as done in relax_section() in layout.c will likely need to be
    added to drive the arm "relaxation".
  - The new routines relax_immediate(), relaxed_symbol_addr(), relax_adr(),
    relax_addsub(), relax_branch(), arm_relax_frag() and md_section_align()
    were added.  Also arm_handle_align(), arm_frag_align_code() and
    arm_init_frag() were added but fully #ifdef NOTYET out.
    To make relaxed_symbol_addr() work the frag struct in frags.h had the field 
    relax_marker added to it.  These routines were also modified as follows:
    - All the asection *sec parameters were HACK commented out.
    - In arm_relax_frag() the call to md_convert_frag() had its first two
      parameters commented out.
    - In relax_addsub() the call to bfd_get_16() was hacked out with an #ifdef
      NOTYET and replaced by a memcpy() a GUESS.  This has a FIXME as it may
      still need some byte swapping too.
    - In relax_branch() and relax_adr() the tests of sec !=
      S_GET_SEGMENT(fragp->fr_symbol) was hacked out with an #ifdef NOTYET.
  - The routines arm_elf_change_section() and arm_elf_section_type() and the 
    code to deal with unwinding tables: flush_pending_unwind(),
    add_unwind_opcode(), add_unwind_adjustsp() and finish_unwind_opcodes() as
    well as the code for exception tables: start_unwind_section(),
    create_unwind_entry() and tc_arm_frame_initial_instructions() which were
    #ifdef OBJ_ELF were not added.  The routines tc_arm_regname_to_dw2regnum()
    and tc_pe_dwarf2_emit_offset() were also not added.
  - The new routine md_pcrel_from_section() replaced the old md_pcrel_from()
    routine.  Also BFD_RELOC_ARM_PCREL_CALL and ELOC_ARM_PCREL_CALL_JUMP
    were added to the enum HACK for BFD_RELOC_ARM_* .
  - The routine md_undefined_symbol() was updated (with the #ifdef OBJ_ELF
    as in the new routine, such that it does nothing).  Also a forward
    declaration at the top of the file was added for this ARM only md_* symbol.
  - The routine negate_data_op() was updated, the calles to the old subroutine
    validate_immediate() which was changed to encode_arm_immediate() was the
    update.
  - The new routines thumb32_negate_data_op(), get_thumb32_insn() and
    arm_optimize_expr() were added.  The contents of arm_optimize_expr() were
    #ifdef NOTDEF out as with the other use of O_subtract in fix_new_arm().
  - The new routine md_apply_fix() replaced the old md_apply_fix3() routine.
    Then it was modified as per the old routine:
    - The BFD_RELOC_NONE case was #ifdef NOTYET out.
    - The uses of seg->use_rela_p where #ifdef NOTYET to be 0.
    - For the BFD_RELOC_ARM_PCREL_BLX case code was added, #ifndef NOTYET in,
      to set the fixP->fx_r_type to BFD_RELOC_ARM_PCREL_BRANCH.
    - For the BFD_RELOC_THUMB_PCREL_BLX case code was added, #ifndef NOTYET in,
      to set the fixP->fx_r_type to BFD_RELOC_THUMB_PCREL_BRANCH23.
    - The cases for BFD_RELOC_VTABLE_INHERIT and BFD_RELOC_VTABLE_ENTRY were
      #ifdef NOTYET out.
    - Added code at the end of the routine to not allow relocations to escape
      if they are not ARM_THUMB_RELOC_BR22 or ARM_RELOC_BR24 which is #ifndef
      NOTYET in.
    - Also BFD_RELOC_8, BFD_RELOC_16, BFD_RELOC_RVA, BFD_RELOC_32,
      BFD_RELOC_ARM_TARGET1, BFD_RELOC_ARM_ROSEGREL32, BFD_RELOC_ARM_SBREL32 and
      BFD_RELOC_32_PCREL were added to the enum HACK for BFD_RELOC_ARM_* .
  - The new routine tc_gen_reloc() was NOT added.  It looks like it is for BFD
    target format (looks like has checks for relocs that can't be represented in
    the target object file).
  - The new routine cons_fix_new_arm() was not added.  The comment says it is
    used via TC_CONS_FIX_NEW which is not defined in the old assembler.
  - The new routines that are #if defined OBJ_COFF || defined OBJ_ELF,
    arm_validate_fix(), arm_fix_adjustable(), elf32_arm_target_format(),
    armelf_frob_symbol() and arm_adjust_symtab() were NOT added.
  - The routine arm_force_relocation() was updated.  And was modified based on
    the old routine such that the #ifdef NeXT_MOD code for 4 relocation types
    with non assembler temporary lables was added in.  Also the last bit of
    the new routine so always generate relocations against function symbols and
    call generic_force_reloc() was #ifdef NOTYET out.
  - The new arm_cleanup() routine was added.  Not sure how this gets called, 
    maybe it should be added to the old md_end() which is empty.
  - The new routine arm_adjust_symtab() was not added as its two bodies are
    #ifdef OBJ_COFF and #ifdef OBJ_ELF.
  - The new sub routines of md_begin, set_constant_flonums() and
    autoselect_thumb_from_cpu_variant() were added.
  - The routine md_begin() was updated.  Then following modificatations were
    made:
    - The code to set the cpu variant based on the command-line options,
      and all of the rest of the routine dealing with cpu_variant was
      #ifdef NOTYET out.
    - Code from the end of the old routine to switch on archflag_cpusubtype was
      added back in and changed to set cpu_variant by adding a local constant
      set with ARM_FEATURE for the now struct assignment.
  - The old md_parse_option() was NOT updated with the new routine.  And many
    new variables and routines were left out: md_shortopts, md_longopts,
    md_longopts_size, arm_option_table, arm_opts[], arm_legacy_option_table,
    arm_legacy_opts[], arm_cpu_option_table, arm_cpus[], arm_arch_option_table,
    arm_archs[], arm_option_cpu_value_table, arm_extensions[], arm_fpus[],
    arm_option_value_table, arm_float_abis[], arm_eabis[],arm_long_option_table,
    arm_parse_extension(), arm_parse_cpu(), arm_parse_arch(), arm_parse_fpu(),
    arm_parse_float_abi(), arm_parse_eabi(), arm_long_opts[] and md_show_usage()
  - All the old parsing routines and things like end_of_line() were removed.
  - Changed the call md_number_to_imm() from calling the old md_apply_fix3() to
    the new md_apply_fix().
  - The new processor selection directives routines: s_arm_cpu(), s_arm_arch(),
    s_arm_object_arch() and s_arm_fpu() were NOT added.
  - The new routine arm_copy_symbol_attributes() was also NOT added.
  - Added S_GET_VALUE(), S_IS_LOCAL() and symbol_get_frag() to symbols.[ch] .
  - Added hash_find_n() to hash.[ch] .
  - To get things to link and remove many undefined symbol problems:
    s_ltorg(), symbol_locate() and arm_cleanup() were #ifdef NOTYET out.
    Also the call to frag_align_code() in s_align() was also #ifdef NOTYET out.

I have the last set of sources in /Volumes/Untitled 1/src/
This comes from gas/config/tc-arm.c (in cctools this in in as/arm.c)

Other parts seem to come from include/opcode/arm.h (in cctools it is in
include/opcode/arm.h not in the as directory as otool uses it).

Changes for the 5.25 release (the cctools-678 release):
- Fixed a problem with the change for Radar bug #5122861, where the x86_64
  assembler was incorrectly assembling rip-relative references.  The change was
  to x86_64_fixup_symbol() in i386.c to change the offset if the symbol being
  referenced is defined in a section other than the one making the reference
  when it is PC-relative.  Radar bug #5584168.

Changes for the 5.25 release (the cctools-677 release):
- Changed the Makefile to not use -Wno-long-double and -no-cpp-precomp .
  Radar bug #5563553.
- Fixed a problem with the #ifndef __OPEN_SOURCE__
  #5326431 in layout.c in fixup_section().  Where the non __OPEN_SOURCE__
  defined else clause was missing the needed #ifdef for x86_64.
  Radar bug #5575380.

Changes for the 5.25 release (the cctools-676 release):
- Added the "logical and" and "logical or" operators in assembler to expr.c .
  Radar bug #4110102.
  - Added the O_logical_and and O_logical_or enum values to operatorT .
  - Added entries to op_size[] for O_logical_and and O_logical_or .
  - Changed op_rank[] and bumped up all of the existing ranks by 2 to add
    "logical and" and "logical or" at the end with lowest precedence.
  - Changed op_encoding[] for the '&' (38) index O_bit_and to two_char_operator 
    and for the '|' (124) index O_bit_inclusive_or to two_char_operator.
  - Changed two_char_op_encoding() adding cases for '&' and '|' and looking at
    the next character to return the correct operator.
  - Changed expr() to add cases for O_logical_and and O_logical_or .
- Added the .balign, .balignw and .balignl directives.  Radar bug #4409433
  - The s_align() routine in read.c was changed to add the bytes_p argument
    which when non-zero cause the alignment value to be interpreted as a byte
    boundary, rather than a power of 2.
  - The two routines s_align_bytes() and s_align_ptwo() were added to read.c
    to pass the extra argument to s_align().
  - The existing align directives in the pseudo_table[] in read.c were change
    to use s_align_ptwo().
  - The new .balign, .balignw and .balignl directives were added to the
    pseudo_table[] in read.c using s_align_bytes().
- Changed the assembler to treat carriage returns as whitespace.  The fix was
  in do_scrub_begin() in app.c to or in LEX_IS_WHITESPACE to lex['\r'].
  Radar bug #4372927.
- Added support for local labels beyond 9 in the assembler.  Radar 5256532.
  - The routine local_label_name() in symbols.c was replace with fb_label_name()
    from the current version of GAS.  The use of local_label_counter[] was
    removed and replace with a call to fb_label_instance_inc().
  - The support routines fb_label_init(), fb_label_instance_inc(),
    fb_label_instance(), decode_local_label_name(), and data structures fb_*
    and macros FB_* were also added to symbols.c
  - A call to fb_label_init() was added to the end of symbol_begin() in
    symbols.c .
  - Changed the two calls to local_label_name() in operand() in expr.c to
    fb_label_name().  And removed the test for number < 10 before dropping into
    the code to check for a nf or nb.
  - parse_a_buffer() in read.c was changed where it parses out a "n:" to read
    the whole number.  
- Added the i386 instruction forms for blendvpd, blendvps and pblendvb to allow
  the implicit xmm0 first register.  Radar bug #5268692.
  - Added entries in i386-opcode.h for these with the regKludge opcode modifier.
  - Added code in process_operands() in i386.c after the test for the regKludge
    opcode modifier to deal with the implicit register for these instructions.
- Fixed a problem in pseudo_set() in read.c if a symbol is reset to an absolute
  symbol after being section difference.  Needed to clear the expression in the
  symbol.  So the case of SEG_DIFFSECT can't just fall through to the case of
  SEG_ABSOLUTE as it must set expression to NULL.  Radar bug #4433066.
- Changed "Apple Computer, Inc." to "Apple Inc." in main() in as.c for the -v
  flag.  Radar bug #5197757.
- Changed the assembler to allow a section difference subtraction expression
  when one of the symbols is at the end of a section if the expression is an
  assembly time constant.  The change is in fixup_section() in layout.c and is
  done by using the new is_assembly_time_constant_subtraction_expression()
  routine.  If that routine returns TRUE then no relocation entry is created.
  Radar bug #4515996.
- Fixed a bug with the PowerPC assembler putting out debugging information and
  getting the address of the line information wrong.  The fix was to move the
  generation of the SLINE stabs before the bytes of the instruction were
  allocated so it would have the correct address in md_assemble() in ppc.c .
  Radar bug #4521858.
- Added an ".endm" directive to be the same as ".endmacro" by adding an entry
  in pseudo_table[] in read.c for it.  Radar bug #4361968.
- Added back pushfd and popfd as the same as pushf and popf for the i386
  assembler in i386-opcode.h.  Radar bug #4676279.
- Changed the x86_64 assembler so that a PC-relative call instruction in a
  section with no assembler temporary label before it gets relocated correctly.
  The change was in x86_64_fixup_symbol() in i386.c to not change the offset
  if there is no previous symbol even in the PC-relative case (removing that
  line of code).  Radar bug #5122861.
- Changed the x86_64 assembler to generate the generate the REX.W + A1 mov by
  picking up the patch http://sourceware.org/ml/binutils/2005-06/msg00463.html
  Radar bug #4534958.
  - In md_assemble() in i386.c changed it to not call optimize_disp() on movabs.
  - In optimize_disp() in i386.c changed to optimize only if possible. Don't
    use 64bit displacement on non-constants and do same on constants if
    possible.
  - In i386-opcode.h for i386_optab[] Update comments for 64bit addressing on
    mov.  Allow 64bit addressing for mov.
- Added the simplified mnemonic "mtvrsave" to ppc_macros[] in ppc.c .
  Radar bug #4955676.
- Changed .machine to allow an argument of "all" to be the family type of the
  architecture.  The change was in s_machine() in read.c . Radar bug #4512478.
- Removed the unused static symbol_count variable in symbols.c .

Changes for the 5.25 release (the cctools-673 release):
- Changed the sources so the arm stuff is not in the open source version.
  Radar bug #5326431.
  - Changed the Makefile to #ifndef __OPEN_SOURCE__
  - Added #ifndef __OPEN_SOURCE__
    as.c, layout.c, messages.c, write_object.c, symbols.c, symbols.h and
    write_object.c .

Changes for the 5.25 release (the cctools-672 release):
- Fixed a bug in the change below, Radar bug #5259877. Both places needed to
  test for the symbol not being undefined (or common) by checking the N_TYPE of
  the symbol not being N_UNDF.

Changes for the 5.25 release (the cctools-671 release):
- Changed x86_64 relocation entries, so that for references from a debug section
  to a external symbol that is defined creates a local relocation entry.
  Radar bug #5259877.
  - In fixup_section() in layout.c under the N_SECT case inside the #if for
    x86_64, where it is dealing with "Symbol offsets are not part of fixups for
    external symbols for x86_64" the expression for the if conditonal was
    changed from:
	if(add_symbol_N_TYPE == N_SECT &&
	   is_local_symbol(add_symbolP) &&
	   !is_section_cstring_literals(add_symbol_nsect))
    to:
	if(is_section_debug(nsect) ||
	   (add_symbol_N_TYPE == N_SECT &&
	    is_local_symbol(add_symbolP) &&
	    !is_section_cstring_literals(add_symbol_nsect)) )
  - Changed fix_to_relocation_entries() in write_object.c to pass another
    parameter, debug_section.  And changed the call to it from write_object()
    to pass debug_section as frchainP->frch_section.flags & S_ATTR_DEBUG.
  - In fix_to_relocation_entries() in write_object.c where it is dealing with
    "For undefined symbols this will be an external relocation entry" inside
    the #if for x86_64 the expression for the if conditonal was changed from:
	if (fixP->fx_subsy == NULL && (!is_local_symbol(symbolP) ||
	    ((symbolP->sy_type & N_TYPE) == N_SECT &&
	     is_section_cstring_literals(symbolP->sy_other)))) {
    to:
        if(fixP->fx_subsy == NULL &&
           !debug_section &&
           (!is_local_symbol(symbolP) ||
            ((symbolP->sy_type & N_TYPE) == N_SECT &&
             is_section_cstring_literals(symbolP->sy_other)) ) ) {

Changes for the 5.25 release (the cctools-669 release):
- Changed s_endmacro() in read.c to only cause a warning when a macro is
  is already defined.

Changes for the 5.25 release (the cctools-665 release):
- Added the SSE4 instructions to the i386 assembler.  The table entry for
  crc32b is done with the suffix, because the b_Suf won't allow the second
  parameter to be a Reg32 or Reg64 the 'b' suffix is part of the name for
  crc32 with a first parameter of Reg8|ByteMem.  The changes are in
  i386-opcode.h, i386.c and i386.h .  Radar bug #4943015.

Changes for the 5.24 release (the cctools-662 release):
- Changed the assembler to allow .mod_init_func in -static x86_64 .s files.
  The change was in s_builtin_section() in read.c to add an #if around the
  check for the S_MOD_INIT_FUNC_POINTERS section type.  Radar bug #5127668.

Changes for the 5.24 release (the cctools-649 release):
- Added a cctools.plist and changed the Makefile to install it into
  /usr/local/OpenSourceVersions/cctools.plist and copied the COPYING file to
  /usr/local/OpenSourceLicenses/cctools.txt . Radar bug #4898129.

Changes for the 5.24 release (the cctools-646 release):
- Change the assembler driver to construct the paths to the assembler
  relative to the path of the driver.  Radar bug #4841943.

Changes for the 5.24 release (the cctools-642 release):
- Fixed a problem with the .lcomm directive not correctly handling a value
  greater than would fix in a 32-bit value.  The problem was the type of the
  local variable size was declared as an int not a signed_target_addr_t.
  Radar bug #4098028.

Changes for the 5.24 release (the cctools-641 release):
- Changed the x86_64 assembler to always keep assembler temporary symbol
  (starting with 'L') in literal cstring sections.  And make relocation entries
  to them use external relocation entries.  To do this the new routine
  is_section_cstring_literals() was added to section.[ch]. Then layout_symbols()
  in write_object.c was changed to call this to make it save symbols starting
  with 'L'.  And fix_to_relocation_entries() in write_object.c was changed to
  also call this as part of the test for making a external relocation entry.
  Also fixup_section() in layout.c and x86_64_fixup_symbol() in i386.c were
  each changed in one place to make this new call.  Radar bug #4765733.

Changes for the 5.24 release (the cctools-638 release):
- Changed x86_64_fixup_symbol() in i386.c to force a relocation entry when
  generating a PC-relative with a @GOTPCREL relocation type.  Radar bug
  #4742404.
- Fixed a problem using .org with the i386 assembler caused by the changes to
  use optimal nops for padding .align for i386 architectures in Radar bug
  #4096964.  The fix was in layout_addresses() in layout.c to save the
  fragment's type before changing rs_org and rs_align flags to rs_fill.  Then
  added a check to see that the fragment type was rs_align as part of the tests
  before calling i386_align_code().  Radar bug #4750873.

Changes for the 5.24 release (the cctools-637 release):
- Changed s_comm() in read.c to take an optional alignment value after the size
  of the common symbol.  It is stored in the nlist struct in the n_desc field
  using the new SET_COMM_ALIGN() macro in <mach-o/nlist.h>.  Radar bug #4597166.

Changes for the 5.24 release (the cctools-635 release):
- Fixed a problem with macro expansion and the interaction with the fix to
  radar bug #4141844.  The fix was to add a SKIP_WHITESPACE() call in
  expand_macro() in read.c .  Radar bug #4729012

Changes for the 5.24 release (the cctools-633 release):
- Changed write_object.c to deal with the change of type for indirect symbols
  to uint32_t * when ported to 64-bit. Radar bug #4407440.

Changes for the 5.24 release (the cctools-632 release):
- Fixed problems with the use of -static and the i386 code for multi-byte nops.
  One problem was S_ATTR_SOME_INSTRUCTIONS can be set at any point in the first
  pass so its use it in frag_align() may not match it use in layout_addresses().
  Changed this so multi-byte nops are only generated with -dynamic is used.
  Radar bug #4700558.
  - Made changes in read.c in how S_ATTR_PURE_INSTRUCTIONS is set for the .text
    section.  Removing the very old code that was not setting this with -static.
    - Changed builtin_sections[] for the text section to set the
      S_ATTR_PURE_INSTRUCTIONS attribute and removed the comment about how
      s_builtin_section() sets this.
    - Changed s_builtin_section() for the test of incompatible features to allow
      S_ATTR_PURE_INSTRUCTIONS without -dyanmic. And changed the code to just
      call section_new() and removed the very old code that was only setting
      S_ATTR_PURE_INSTRUCTIONS when -dynamic was set.
   - Changed frag_align() in frags.c and layout_addresses() in layout.c to no
     longer test for the attribute S_ATTR_SOME_INSTRUCTIONS and added a test
     for flagseen['k'] == TRUE (that is -dynamic) before allocating space for
     multi-byte nops or calling i386_align_code() to create them.

Changes for the 5.24 release (the cctools-631 release):
- Fixed a bug in frag_align() in frags.c which was not allocating bytes for the
  I386 nops when the align value was more than 2^4.  Then if the alignment
  needed turned out to be less than 16 bytes it would write the nops over the
  end of the frag causing a crash.  Radar bug #4685058.

Changes for the 5.24 release (the cctools-630 release):
- Fixed a bug in layout_addresses() in layout.c introduced when the code was
  changed for bug #4096964.  The assignment statement to set the variable
  fill_size got incorrectly moved right after the statement it was used.
  Radar bug #4678285.
- Changed all but one as_warn() calls in main() in as.c to as_fatal().
  Radar bug #4674902.
- Picked up the changes that got dropped from the cctools-622.5 release:
  - Support the new x86-64 relocation entry types for signed relocations
    with offsets.  Radar bug #4664658.
  Radar bug #4678307.

Changes for the 5.24 release (the cctools-629 release):
- Corrected an error message in the assembler driver which was "known host
  architecture" to "unknown host architecture" in main() in driver.c .
  Radar bug #4666302.
- Added the line #include "i386.h" with the #if defined(I386) && defined(ARCH64)
  to write_object.c around it to remove the warning about implicit declaration
  of function 'is_local_symbol'.  Radar bug #4504314.
- Changed to use optimal nops for padding .align for i386 architectures.  Radar
  bug #4096964.
  - Changed frag_align() in frags.c to allocate the maximum number of needed
    bytes when padding a section containing instruction with nops for the I386.
  - Changed layout_addresses() in layout.c in the loop that changes rs_align
    frags to rs_fill frags in the I386 case.  If it is an align of a section
    containing instructions being padded with nops then the routine
    i386_align_code() is called to fill in the frag's fr_literal bytes.
  - Changed i386_align_code() in i386 to use 2-9 byte nops sequences as given
    from Intel for Yonah/Merom.
  - Added the memory nop in i386-opcode.h and updated the comment for the
    single byte nop.

Changes for the 5.24 release (the cctools-628 release):
- Changed do_scrub_next_char() in app.c for I386 to leave one white space after
  the second token as well as the first token on a line.  This allows i386
  prefixes to be parsed out with just a space between them and the instruction
  mnemonic. This reqires some other assembly parsing to change to work
  correctly.  In s_zerofill() and s_section() in read.c an extra call to
  SKIP_WHITESPACE() was added before setting the sectname variable.  Radar bug
  #4141844.

Changes for the 5.24 release (the cctools-627 release):
- Changed the uses of "stuff/target_arch.h" to "arch64_32.h" as the last tool
  was ported to work with 32-bit and 64-bit object files.  This leaves only the
  assembler that is compiled to different binaries for different architectures.
  Radar bug #3903136.

Changes for the 5.23 release (the cctools-622.2 release):
- Track symbols by definition order, not value.  Radar bug #4501115.
- Add in a few lines which were approved but not checked in for 4577120.
  Radar bug #4577120.

Changes for the 5.23 release (the cctools-622.1 release):
- Add S_16BYTE_LITERALS as a fixed-size data section.  Radar bug #4610297.

Changes for the 5.23 release (the cctools-622 release):
- In x86-64 code, synthesize a symbol for each fixup, which allows the
  assembler to determine later whether to require a relocation entry for that
  fixup.  Radar bug #4577120.

Changes for the 5.23 release (the cctools-621 release):
- Changed symbol_list_sort_by_value to perform a stable sort.  Radar bug
  #4598955.

Changes for the 5.23 release (the cctools-620 release):
- Added symbol_list_sort_by_value, which we use to sort the sy_prev_by_value
  list of symbols for x86-64 code.  Radar bug #4501115.

Changes for the 5.23 release (the cctools-619 release):
- Changed output_jump() in i386.c to used is_local_symbol() and not test
  sy_name[0] != 'L' so it would not crash when sy_name is NULL.  Radar bug
  #4523898.
- Emit an X86_64_RELOC_BRANCH fixup for branches to local labels in x86-64
  code.  Radar bug #4581768.

Changes for the 5.23 release (the cctools-618 release):
- Changed lex_got() in i386.c so that the symbol _GLOBAL_OFFSET_TABLE_ is not
  created if it does not already exist.  Radar bug #4534951.
- Add support for .literal16 sections.  Radar bug #4555162.

Changes for the 5.23 release (the cctools-616 release):
- Don't fix up internal relocations into external relocations in DWARF debug
  sections in x86-64 code.  Radar bug #4498034.

Changes for the 5.23 release (the cctools-615 release):
- Added support for the GOT_LOAD relocation entry type to the x86-64 assembler.
  Radar bug #4486815.
- Fixed a problem with the .comm directive not correctly handling a value
  greater than would fix in a 32-bit value.  The problem was the return type of 
  get_absolute_expression() in read.[ch] was declared to return a long instead
  of a signed_target_addr_t. Causing the value in the expression to be truncated
  before the code in s_comm() in read.c could use it.  Radar bug #4177397.

Changes for the 5.23 release (the cctools-613 release):
- Changed as.h to #include <stdint.h> first so it does not get compile errors
  on Mac OS X 10.3.9.  Radar bug #4508798.

Changes for the 5.23 release (the cctools-613 release):
- In some circumstances, the assembler would create an x86-64 fixup which was
  PC-relative but not marked as having a PC-relative relocation entry, which
  allowed fixup_section to optimize out the fixup.  For x86-64 we need to
  create a relocation entry in that case when we're fixing up a non-local
  symbol, so x86_64_fixup_symbol was changed to mark the fixup as having a
  PC-relative relocation entry.  Radar bug #4545597.

Changes for the 5.23 release (the cctools-611 release):
- Fixed a regression introduced in cctools-590.37.3 (Radar bug #4486817) which
  caused x86-64 non-PC-relative relocation entries in fixed-size-data sections
  to be fixed up like relocation entries in non-fixed-size-data sections.
  Radar bug #4536738.

Changes for the 5.23 release taken from cctools-590.43 (the cctools-610
release):
- Added support for assembling the Vanderpool instructions to the i386
  assembler.  Was Radar bug #4427573 in cctools-590.43.  Radar bug #4534436.

Changes for the 5.22 release (the cctools-590.38.3 release):
- Force GOT and GOT_LOAD relocations to be PC-relative, as they always should
  be, so we don't eliminate them later in the assembler. Radar bug #4500790.
- Support 64-bit constants in .code64 blocks in x86-64 assembly. Radar bug
  #4439905.
- Ignore stabs when fixing up x86-64 symbols in the assembler. Radar bug
  #4502759.
- Accept 'LL' and 'ULL' as suffixes for constants in assembly code. Radar bug
  #4496022.
- Get RIP-relative relocations correct for local symbols in non-fixed-size-data
  sections. Radar bug #4497536.

Changes for the 5.22 release (the cctools-590.37.3 release):
- Get offsets right for RIP-relative non-external relocations in x86-64 code.
  Radar bug #4486817.
- Handle symbols with NULL names when fixing up x86-64 symbols. Radar bug
  #4475602.
- Fix a regression in the assembler which prevented it from reading 8-bit
  characters. Radar bug #4488556.

Changes for the 5.22 release (the cctools-590.37.2 release):
- Don't go down the scattered relocation code path in the assembler for x86-64
  relocation entries. Radar bug #4486807.
- Don't allow illegal section types for x86-64 assembly. Radar bug #4475470.
- Support 32-bit difference GOTPCREL syntax in x86-64 assembly. Radar bug
  #4485082.
- Generate the right relocation entry type for .long GOTPCREL expressions.
  Radar bug #4486764.
- Cleaned up some binutils merge issues in as/i386.c. Radar bug #4422698.

Changes for the 5.22 release (the cctools-590.37.1 release):
- Don't allow illegal section types in x86-64 assembly. Radar bug #4475470.

Changes for the 5.22 release (the cctools-590.36.3 release):
- Add support for the new relocation entry types for x86-64. Radar bug
  #4475165.
- Don't include symbol offsets in fixups for external symbols for x86-64 and
  don't fix up x86_64 symbols in sections that always contain fixed-size data.
  Also, rename i386_fixup_symbol to x86_64_fixup_symbol because it's only used
  for x86_64 code. Radar bug #4475152.

Changes for the 5.22 release (the cctools-590.34.1 release):
- Improve the message that appears when we try to assemble 32-bit signed
  static relocations in x86-64 code. Radar bug #4434039.
- Fixed addends for relocation entries for RIP-relative x86-64
  instructions. Radar bug #4440315.

Changes for the 5.22 release (the cctools-590.31.4 release):
- Converted more warnings in read.c to errors, as required by the as_warn
  changes in cctools-590.31.1. Radar bug #4429135.
- Correctly generate x86_64 relocation entries for files containing common
  symbols and for local symbols that resolve to the same non-local symbol.
  Radar bug #4427629.

Changes for the 5.22 release (the cctools-590.31.2 release):
- Fixed an incorrect merge of i386 relocation entry generation
  for intersegment jumps. Radar bug #4421123.

Changes for the 5.22 release (the cctools-590.31.1 release):
- Added support for the x86_64 architecture.  Radar bug #4345090.
- Added support for the Merom New Instructions.  Radar bug #4407298.
- Merged the i386 assembler from GNU binutils 2.16.1 into the i386
  assembler sources.
- Changed as_warn to be a warning rather than an error, removed as_warning,
  changed as_warning calls to as_warn, and changed as_warn calls which
  expected to be errors to as_bad or as_fatal as appropriate. This matches
  GNU binutils.

Changes for the 5.21 release (the cctools-590.39 release):
- Removed the -I flag for private headers as it would no longer compile with it.

Changes for the 5.21 release (the cctools-590.37 release):
- Changed the assembler to allow a single quote character in a string to be
  escaped with a leading back slash.  Added a case statement entry for this in
  do_scrub_next_char() in app.c and next_char_of_string() in read.c.  Radar bug
  #4391495.
- Added the i386 instruction synonym fisttp for fisttps .  This is done with
  table entry:
    {"fisttp", 1, 0xdf, 1, Modrm, {Mem, 0, 0},"O"},
  in i386-opcode.h . Radar bug #4462289.
- Fixed another problem with 32-bit assembler having their expression evaluated
  as 64-bit expressions.  When a symbol's value is used in an expression it was
  not being signed extended since it is strored as a 32-bit unsigned value.  The
  fix was in operand() in expr.c to cast the value to a long before assigning
  it to the expression's value.   Radar bug #4461836.
- Fixed a problem with .set symbols that used expressions with "a+constant-b"
  in relocatable items.  The constant was not being added into the relocatable
  expression in fixup_section() in layout.c in the case add_symbol_N_TYPE is
  N_ABS and add_symbolP->expression is not NULL.  The fix was to add in
  exp->X_add_number to the value being calculated.  Radar bug #4473241.

Changes for the 5.21 release (the cctools-590.34 release):
- Fixed problems where numbers were not being correctly treated as 64-bit
  expressions.  Radar bug #4434572.
  - Changed the type of the variable number in operand() in expr.c from a valueT
    to a signed_expr_t so it will be 64-bit even for 32-bit assemblers.  Also in
    there removed the #define for NUMBER_FMT and just used %lld in the one place
    it was used.
  - Fixed the error message in cons() in read.c so it was correctly using %llx
    and not casting the values to unsigned ints.

Changes for the 5.21 release (the cctools-590.32 release):
- Changed the assembler to allow .quad for all architectures. Radar bug
  #4227961.
  - Changed read.c were an #if defined(ARCH64) was removed around the "quad"
    entry in the pseudo_table[] array.
  - Added the typedef signed_expr_t as a int64_t to expr.h to replace the use of
    signed_target_addr_t in places for expression values.
  - Changed the prototypes of md_number_to_chars() and md_number_to_imm() in
    md.h so the second prarameter, val, now has a type of signed_expr_t .
  - For the md_number_to_chars() and md_number_to_imm() routines changed the
    second prarameter so it now has a type of signed_expr_t.  These changes were
    made in i386.c, ppc.c, m68k.c, m88k.c, i860.c, hppa.c and sparc.c .  And for
    i386.c added code for 8 byte values and for ppc.c the #if defined(ARCH64)
    around the code for 8 byte values was just removed.  Also for code in ppc.c,
    m68k, i860.c, hppa.c and sparc.c changed from using TA_DFMT to print an
    expression's value to %lld.
  - Changed cons() in read.c and removed the #if defined(ARCH64) around the
    setting in the mask and the SEG_BIG case statement.  And changed
    signed_target_addr_t to signed_expr_t.

Changes for the 5.21 release (the cctools-590.27 release):
- Changed the way ".set r,a-b" is handled so that when the directive is
  encountered the symbols a or b do not have to be defined at that point.
  Radar bug #4390251.
  - The first part of the fix was in pseudo_set() in read.c in the SEG_DIFFSECT
    case to not require the section numbers of the two symbols to be the same.
    Allowing an expression to be created for the symbol.
  - The second part of the fix was to add error checking in write_object() in
    write_object.c where it sets the value of the symbols with expressions
    in the symbol table.

Changes for the 5.21 release (the cctools-590.24 release):
- Added support for DWARF.  Radar bug #4367423.
  - Added the attribute "debug" to the attribute_names[] array in read.c with
    the new constant S_ATTR_DEBUG.
  - Added .debug_note to pseudo_table[] in read.c as the same for .stabs .

Changes for the 5.20 release (the cctools-590.20 release):
- Removed the warnings when building. Radar bug #4340147.
  - Added -fno-builtin-round to the Makefile.
  - Added two casts to (unsigned int *) for the second argument of getval() in
    parse_cst() in m88k.c . 

Changes for the 5.19 release (the cctools-590.12 release):
- Added support for the new assembler directives, .secure_log_unique and
  .secure_log_reset . Radar bug #4291741.
  - Added the global char * variable secure_log_file to as.[ch] which is set
    by code in main() in as.c to the value of the AS_SECURE_LOG_FILE
    environment variable.
  - Added the new routines s_secure_log_unique() and s_secure_log_reset() to
    read.c to implement the new directives.

Changes for the 5.19 release (the cctools-590.10 release):
- Added the attribute "self_modifying_code" to the attribute_names[] array 
  in read.c with the new constant S_ATTR_SELF_MODIFYING_CODE.  Radar bug
  #4202415.
- Fixed a bug in the PowerPC branch conditional to count register or to link
  registers instructions that are predicted causing them to have the wrong
  opcode.  The fix was in calcop() in ppc.c that incorrectly assumed all branch
  conditional instructions have a PPC_RELOC_BR14 relocation entry and always
  changed it to PPC_RELOC_BR14_predicted when a branch conditional has
  prediction.  Doing this then later caused md_number_to_imm() to incorrectly
  change the opcode.  The fix was to change calcop() to test insn->reloc to
  see if it is PPC_RELOC_BR14 before setting it to PPC_RELOC_BR14_predicted,
  because it may be NO_RELOC for the branch conditional to register forms.
  Radar bug #4274713.
- Added the i386 instructions as synonyms pushfd for pushf and popfd for popf .
  This is done with table entries:
    {"pushfd", 0, 0x9c, _, NoModrm, {0, 0, 0} },
    {"popfd", 0, 0x9d, _, NoModrm, {0, 0, 0} },
  in i386-opcode.h . Radar bug #4272274

Changes for the 5.19 release (the cctools-590.4 release):
- Changed the PowerPC dcbzl instruction to not mark it as optional so it is
  allowed without -force_cpusubtype_ALL or -arch ppc64.  The change was in
  ppc-opcode.h to change this:
  { 0x7c2007ec, "dcbzl",   {{16,5,G0REG}, {11,5,GREG}}, IMPL64|OPTIONAL },
  to this:
  { 0x7c2007ec, "dcbzl",   {{16,5,G0REG}, {11,5,GREG}} },
  Radar bug #4181833.
- Fixed using the -n flag with the i386 assembler so it does not crash when
  assembling a file that does not have a .section directive before the first
  instruction.  The fix is in md_assemble() in i386.c to check to see if
  frchain_now is NULL the -n flag is seen, then to print an error message saying
  a section directive must be seen before assembly can begin.  Radar bug
  #4192255.
- Fixed the "outw %ax,$10" and "inw $10,%ax" forms of the i386 instructions so
  that they correctly have an 8-bit immediate for the port number even though
  the instruction operates on 16-bit words.  The fix is in md_assemble() where
  it would normally force the immediate to 16-bits if it has a word prefix.  An
  safe fix was made there to check for the opcodes of "out" and "in" and not
  do that in that case.  Radar bug #4110183.
- Fixed the "fsubrp %st(i)" form of this instruction so it would assemble
  correctly.  The fix was to i386-opcode.h where this:
    {"fsubrp", 1, 0xdae8, _, ShortForm, {FloatReg, 0, 0} },
    {"fsubrp", 2, 0xdae8, _, ShortForm, {FloatReg, FloatAcc, 0} },
  was changed to this:
    {"fsubrp", 1, 0xdee8, _, ShortForm, {FloatReg, 0, 0} },
    {"fsubrp", 2, 0xdee8, _, ShortForm, {FloatReg, FloatAcc, 0} },
  Radar bug #4182849.

Changes for the 5.19 release (the cctools-590.3 release):
- as(1) added a new function set_BINCL_checksums().  It is only called from
  layout_symbols() if a BINCL stab exisits.  It sets the n_value field
  of BINCL stabs.  Radar bug #4181871.

Changes for the 5.19 release (the cctools-590.1 release):
- Fixed a bug in s_zerofill() in read.c that was not preserving the N_PEXT bit
  if it previously was set for the symbol.  Radar bug #4156921.

Changes for the 5.18 release (the cctools-589 release):
- Added support for the CPU_SUBTYPE_PENTIUM_4 cpusubtype.  Radar bug #4115802
  - Added code in main() in as.c for the -arch pentium4 flag.
  - Added a if clause in md_assemble() in i386.c for CPU_SUBTYPE_PENTIUM_4.

Changes for the 5.18 release (the cctools-584 release):
- Fixed the i386 opcode entry for the movd opcode which takes mm,r/m32 operands
  which had the encoding switched for the reg and r_m bits of the ModR/M byte.
  It was:
  {"movd", 2, 0x0f7e, _, RR|Modrm, {mm, r32|m32, 0},"O"},
  and was changed to:
  {"movd", 2, 0x0f7e, _, Modrm, {mm, r32|m32, 0},"O"},
  (Radar bug #4098884 aka #4100636).

Changes for the 5.18 release (the cctools-583 release):
- Changed the Makefile so that when RC_XBS is set to YES then the compiler
  options -MD and -dependency-file as well as the md(1) program are not used.
  Radar bug #4029936.

Changes for the 5.18 release (the cctools-582 release):
- Changed md_assemble() in ppc.c to cause the check for instructions marked with
  CPU970 needing the -force_cpusubtype_ALL to not be compiled in for the ppc64
  assembler.  Radar bug #4092588.

Changes for the 5.18 release (the cctools-581 release):
- Changed the order of the i386 movq opcodes that assembler register to register
  operands to fix the problem of this not assembling correctly.  Radar bug
  #4089432.

Changes for the 5.18 release (the cctools-580 release):
- Fixed the i386 opcode for the ud2 instruction.  It was assembled as 0x0f 0xff.
  And should be assembled as 0x0f 0x0b according to the Intel manual.  The
  change was in i386-opcode.h . Radar bug #4085845.
- For the PowerPC assembler added "mtocrf" as a synonym for "mtcrf" and
  "mfocrf" as a synonym for "mfcr" in ppc-opcode.h.  Radar bug #4034280.

Changes for the 5.18 release (the cctools-578 release):
- Added the sse3 instructions to i386-opcode.h:
  {"addsubpd", 2, 0x660fd0, _, RR|Modrm, {xmm|m128, xmm, 0},"O"},
  {"addsubps", 2, 0xf20fd0, _, RR|Modrm, {xmm|m128, xmm, 0},"O"},
  {"fisttps", 1, 0xdf, 1, Modrm, {Mem, 0, 0},"O"},
  {"fisttpl", 1, 0xdb, 1, Modrm, {Mem, 0, 0},"O"},
  {"fisttpll", 1, 0xdd, 1, Modrm, {Mem, 0, 0},"O"},
  {"haddpd", 2, 0x660f7c, _, RR|Modrm, {xmm|m128, xmm, 0},"O"},
  {"haddps", 2, 0xf20f7c, _, RR|Modrm, {xmm|m128, xmm, 0},"O"},
  {"hsubpd", 2, 0x660f7d, _, RR|Modrm, {xmm|m128, xmm, 0},"O"},
  {"hsubps", 2, 0xf20f7d, _, RR|Modrm, {xmm|m128, xmm, 0},"O"},
  {"lddqu", 2, 0xf20ff0, _, RR|Modrm, {m128, xmm, 0},"O"},
  /* We only support the 0-operand version of monitor right now */
  /* TBD: Support monitor %eax, %ecx, %edx */
  {"monitor", 0, 0x0f01c8, _, NoModrm, {0, 0, 0},"O"},
  {"movddup", 2, 0xf20f12, _, RR|Modrm, {xmm|m64, xmm, 0},"O"},
  {"movshdup", 2, 0xf30f16, _, RR|Modrm, {xmm|m128, xmm, 0},"O"},
  {"movsldup", 2, 0xf30f12, _, RR|Modrm, {xmm|m128, xmm, 0},"O"},
  /* We only support the 0-operand version of mwait right now */
  /* TBD: Support mwait %eax, %ecx */
  {"mwait", 0, 0x0f01c9, _, NoModrm, {0, 0, 0},"O"},
  Radar bug #4014327.

Changes for the 5.17 release (the cctools-574 release):
- Changed as.c and to set force_cpusubtype_ALL for the i386 assembler by calling
  the new function force_cpusubtype_ALL_for_cputype().  Radar bug #4002758.

Changes for the 5.17 release (the cctools-572 release):
- Fixed some bugs with the assembler not quite being 8-bit clean.  The problem
  is that the assembler was accessing random memory, because 'char' is signed on
  Darwin.  So the is_end_of_line table in read.c and the access to it needed
  to be modified in a number of places.  Radar bug #3943609.
- Fixed a bug so that if /dev/null is used as the output file it is not unlinked
  since it is not a regular file.  The change was in write_object() in
  write_object.c to stat(2) the output file first and check to see that it is a
  regular file before doing the unlink(2). Radar bug #4007180.


Changes for the 5.17 release (the cctools-570 release):
- Fixed a bug in the assembler if the .desc directive was used to set the
  REFERENCED_DYNAMICALLY bit before the label was defined it would cause an
  error that it should not have.  The fix was in colon() in symbols.c where it
  needed to include REFERENCED_DYNAMICALLY in its conditional of known allowable
  bits in the n_desc field.  Radar bug #3975121.

Changes for the 5.17 release (the cctools-568 release):
- Added an entry to the type_names[] array in read.c for the interposing
  section type (S_INTERPOSING).  Radar bug #3965794.

Changes for the 5.17 release (the cctools-567 release):
- Changed the Makefile to not build and install /usr/bin/as64. Radar bug
  #3953127

Changes for the 5.17 release (the cctools-558 release):
- Changed the check in md_assemble() in ppc.c and ifdef'ed out the check for
  vector instructions when ARCH64 is set.  Radar bug #3906004.

Changes for the 5.17 release (the cctools-557 release):
- Removed support for the INTERIM_PPC64.  The changes were to remove the
  #ifdef INTERIM_PPC64 source changes in as.c, expr.c, expr.h, fixes.c, fixes.h,
  md.h, notes, ppc.c, read.c and write_object.c .  Radar bug #3600419.

Changes for the 5.17 release (the cctools-551 release):
- Changed the PowerPC assembler to not mark the stfiwx instruction as optional.
  Radar bug #3841472.

Changes for the 5.17 release (the cctools-549 release):
- Fixed a bug in the .machine directive that would not take a dash in the
  architecure name in s_machine() in read.c. Radar bug #3856997.

Changes for the 5.17 release (the cctools-536 release):
- Changed all places where it was using the type target_addr_t to
  signed_target_addr_t.  This is need because in i386_operand() in i386.c in
  its use of the macro SMALLEST_IMM_TYPE that expected the operand to be signed.
  This caused some instructions like "adc $0, (%ebp)" to not assemble with a
  error:
 	no opcode suffix given; can't determine immediate size
  And for the assembler to pick big instructions that make the code bigger.
  Radar bug #3813924.

Changes for the 5.17 release (the cctools-533 release):
- Changes to support 32-bit & 64-bit tools in the same binary.  Radar bug
  #3793394.
  - Changed the code in write_object.c to use the swap_*_t new macros from
    "stuff/target_arch.h".

Changes for the 5.16 release (the cctools-529 release):
- Take out a mistaken line affecting ppc64 interpretation of constants.
  Radar bug #3757398.
- Made changes to support 64-bit tools. Radar bug #3600431.
  - Changed the Makefile's build of ppc64 to nolonger build with -DINTERIM_PPC64
    but to build with -DARCH64 and link with libstuff64 .
  - Added the include "stuff/target_arch.h" to the following files:
      hppa-aux.h
      sections.h
      struc-symbol.h
      i860.c
      read.c
      sparc.c
      write_object.c
    and changed the uses of structs, constants and names that are different for
    64-bit files to the typedefs in "stuff/target_arch.h".
  - Changed main() in as.c to allow "-arch ppc64" and "-arch ppc970-64" with
    the ppc64 assembler.
  - Changed the code around the INTERIM_PPC64 ifdefs to use target_addr_t from
    "stuff/target_arch.h" in
      md.h
      expr.h
      expr.c
      fixes.h
      fixes.c
      ppc.c
      read.c
      write_object.c
    And changed some of the INTERIM_PPC64 ifdefs to include ARCH64.
- Fixed a bunch of places that were getting warnings when using the new hash
  stuff and added const to the varaible being assigned to.

Changes for the 5.17 release (the cctools-528.5 release):
- Fixed a bug in s_machine() in read.c which was setting md_cpusubtype not
  archflag_cpusubtype.  This caused later checks for use of instructions, like
  altivec instructions, to get an erro when .machine ppc7400 was used.   Radar
  bug #3492132.

Changes for the 5.17 release (the cctools-528.4 release):
- Maded a change to not generate the RELOC_LOCAL_SECTDIFF when -static is
  specified.  Radar bug #3753904.

Changes for the 5.17 release (the cctools-528 release):
- Generate the GENERIC_RELOC_LOCAL_SECTDIFF reloc on m68k, i386.
  Properly clear sri.r_address of the PAIR of a PPC_RELOC_LOCAL_SECTDIFF.

Changes for the 5.17 release (the cctools-527 release):
- Generate the PPC_RELOC_LOCAL_SECTDIFF reloc on ppc.
- More performance improvements.  Replaced the old hash.[ch], which
  come from an ancient version of GNU binutils, with the current GNU
  binutils version of hash.[ch].  Changes required to use the new
  binutils version of hash.[ch]: (1) the GNU binutils version of
  hash.[ch] uses some things that are defined in ansidecl.h, and our
  cctools doesn't have that header, so those declarations were added
  to hash.h.  (2) The hash interface has changed in a few minor ways.
  The traversal interface now uses void* instead of char*, it now
  takes more pains to be const correct, and some of the lookup
  functions changed from returning "" upon success to returning NULL.
  Files affected by those interface changes were modified.  Radar bug
  #3739375.

Changes for the 5.17 release (the cctools-526 release):
- Fixed a warnings for the changes in mach-o types from unsigned long to
  uint32_t.  Radar bug #3744082.
  - Change an "%ld" to "%d" in s_comm() in read.c.
  - Change an "%ld" to "%d" in colon() in symbols.c.
  - Added a NUMBER_FMT to operand() in expr.c as "%llu" for INTERIM_PPC64 and
    "%d" otherwise and used it in one place in that routine.
- Changed the internal representation of integers to be "long long" if
  the INTERIM_PPC64 ppc64 assembler is being built.  Radar bug #3581557.
  - In expr.h, make X_add_number field of the expressionS type a long long.
  - In expr.c, double the number of digits considered to fit in a value.
  - Make address arguments of fix_new(), parse_displacement(), parse_spreg(),
    parse_crf(), parse_num(), parse_mbe(), parse_sh(), parse_mb() into
   "long long" so address arithmetic will work right.
- Performance improvements.  Radar bug #3739375.
  - Changed the Makefile's OFLAG to Os and added -mdynamic-no-pic to GCC_FLAGS.
  - Replaced all uses of getc with getc_unlocked.
  - Eliminated the use of indirection through a function pointer when
    do_scrub_next_char invokes getc_unlocked.  Created
    do_scrub_next_char_from_string as a clone of do_scrub_next_char.
  - Inlined function 'hash_code' in hash.c.
- Added support for 3DNow! instructions.  Changes to i386-opcode.h, i386.c and
  i386.h . Radar bug #3737535.

Changes for the 5.16 release (the cctools-523 release):
- Fixed a bug in the handing of PPC_RELOC_LO14 relocs in md_number_to_imm() in
  ppc.c which needed to mask in the low byte of a PPC_RELOC_LO14 instead of
  assigning it.  Radar bug #3687246

Changes for the 5.16 release (the cctools-522 release):
- Fix the positioning of the INTERIM_PPC64 ifdef in cons() so it doesn't
  fall through and make bogus complaints. Radar bug #3682374.

Changes for the 5.16 release (the cctools-520 release):
- Added the cmovnz instruction to the i386 assembler to be the same as cmovne.
  Radar bug #3345900.
- Changed the PowerPC assembler to not mark the fsqrte and fres as optional.
  Radar bug #3519365.
- Changed the i386 assembler to not mark the following instructions as
  optional: prefetcht0, prefetcht1, prefetcht2 and prefetchnta.  Radar bug
  #3500323.
- Changed the assembler to not create scattered relocation entries when the
  r_address field would overflow its 24 bit field.  This can still cause
  problems if the offset to the symbol reaches outside of the block and ld(1)
  is asked to order this section.  The change is in fix_to_relocation_entries()
  in write_objects.c to test if the r_address field has any of the 0xff000000
  bits set and then does not create a scattered relocation entry.  Radar bug
  #3604972.
- Changed the PowerPC Data cache block touch with hint instruction, dcbt with
  the TH third argument as to not be optional or 64-bit only.  So it will now
  assemble without the -force_cpusubtype_ALL or -arch ppc970.  The change was
  in ppc-opcode.h to change this line:
     { 0x7c00022c, "dcbt",    {{16,5,G0REG}, {11,5,GREG}, {21,4,NUM}},
       IMPL64|OPTIONAL },
  to this:
     { 0x7c00022c, "dcbt",    {{16,5,G0REG}, {11,5,GREG}, {21,4,NUM}}, },
  Radar bug #3468847.
- Added the .machine directive which takes the same arguments as the command
  line -arch <arch_name> flag.  The routine s_machine() was added to read.c and
  the local variable program in main() in as.c was made global.  Radar bug
  3492132.
- Fixed a bug in pseudo_set() in read.c that did not correctly preserve the
  private extern bit (N_PEXT).  Radar bug #3660818.

Changes for the 5.16 release (the cctools-515 release):
- Added the installGASsrc and fromGASsrc Makefile targets to install and build
  just the PowerPC assembler from the GAS sources.  Radar bug #3657295.

Changes for the 5.16 release (the cctools-509 release):
- Added #ifdef INTERIM_PPC64 to the source changes to support the interim ppc64
  file format.  And added -DINTERIM_PPC64 to the Makefile for the appc64_build
  target and removed -DPPC64.
- Changed main() in as.c to handle "-arch ppc64" only when INTERIM_PPC64 is
  defined.  And to handle the ppc arch flags only when PPC is defined and
  INTERIM_PPC64 is not defined.
- #ifdef INTERIM_PPC64 the changed to md_number_to_chars() and
  md_number_to_imm() second argument 'val' in mh.h from long to long long .
- Backed out the changed of the definition of md_number_to_chars() andi
  md_number_to_imm() in the machine dependent files i386.c, hppa.c, i860.c,
  m68k.c, m88k,c and sparc.c for the type of the argument 'val' from long long
  back to long.
- Backed out the change to md_cputype in md.h and added back the const qualifer.
  Backed out this change in the machine dependent files ppc.c, i386.c, hppa.c,
  i860.c, m68k.c, m88k,c and sparc.c .
- Changed ppc.c to set md_cpusubtype to CPU_SUBTYPE_POWERPC64_ALL when
  #ifdef INTERIM_PPC64.

Changes for the 5.16 release (the cctools-501 release):
- Added the variable subsections_via_symbols as a boolean value to as.[ch].
- Added the .subsections_via_symbols directive in read.c with the new routine
  s_subsections_via_symbols() which sets the variable subsections_via_symbols
  to TRUE.
- Changed write_object() in write_object.c to set the MH_SUBSECTIONS_VIA_SYMBOLS
  bit in the mach_header if variable subsections_via_symbols is TRUE.
- Fixed a bug in s_comm() in read.c that caused it to generate a re-definition
  symbol error if a .no_dead_strip directive is seen before a .comm directive.

Changes for the 5.16 release (the cctools-500 release):
- Added the no_dead_strip attribute and live_support to attribute_names[] in
  read.c that sets S_ATTR_NO_DEAD_STRIP and S_ATTR_LIVE_SUPPORT.  Also updated
  the logic in colon() in symbols.s to allow N_NO_DEAD_STRIP in the n_desc field
  when checking for a weak symbol. Radar bug #2284500.
- Added S_ATTR_NO_DEAD_STRIP to all the builtin Objective-C sections in the
  __OBJC segment to builtin_sections[] in read.c .  Radar bug #2284500.
- Added setting the N_NO_DEAD_STRIP bit for the .reference and .lazy_reference
  directives.  The changes were in read.c in s_reference() and
  s_lazy_reference().  Radar bug #2284500.
- Added setting the N_NO_DEAD_STRIP bit for .set and assignments for absolute
  symbols.  The changes were in read.c in s_equals() and s_set().  Radar bug
  #2284500.
- Added the .no_dead_strip directive, which takes a symbol name and sets the
  N_NO_DEAD_STRIP bit.  Radar bug #2284500.

Changes for the 5.16 release (the cctools-499.3 release):
- Fix i386 hosting bug with longs by using ~0ULL in cons().
  Radar bug #3591543.

Changes for the 5.16 release (the cctools-499.1 release):
- Added support for the ppc64 architecture, using the interim file format.
  A new assembler is built with the cpp macro PPC64 and the cpp macro PPC
  defined.  Radar bug #3562232.
  - Added the appc64_build target the Makefile which compiles the code
    with -DPPC64 and installs it in $(DSTROOT)$(LIBDIR)/ppc64/as .
  - Changed main() in as.c to handle "-arch ppc64" for PPC64.
  - Added support for the .quad directive for relocatable 8-byte quantities.
    - Added the following entry to pseudo_table[] in read.c:
      { "quad",    cons,        8    },
    - In cons() in read.c made the following changes:
      - The types of the parameters mask, unmask, get, and use changed from long
        to long long.
      - The test of (nbytes >= (int)sizeof(long int)) changed to
        (nbytes >= (int)sizeof(long long) .
      - In the case for SEG_BIG code was added to handle bignums small enough
        to fit in a long long then passed to md_number_to_chars().
    - In fix_to_relocation_entries() in write_object.c code ifdef'ed PPC64 was
      added for the fx_size value of 8 which sets the r_length to 3 to  indicate
      a 64-bit item to be relocated.
  - Changed md_number_to_chars() and md_number_to_imm() second argument 'val'
    in mh.h from long to long long.
    - Changed the definition of md_number_to_chars() and  md_number_to_imm()
      in the machine dependent files ppc.c, i386.c, hppa.c, i860.c, m68k.c,
      m88k,c and sparc.c .  And for md_number_to_chars() and md_number_to_imm()
      in ppc.c added a case when nbytes is 8.  Also the as_warn() formatting
      string was chaged from using %ld to %lld when using 'val'.
  - Changed the initialization of md_cputype in ppc.c to be CPU_TYPE_POWERPC64
    when PPC64 is defined.
  - In md_assemble() in ppc.c ifndef'ed PPC64 out the check for 64-bit compare
    instructions without the -force_cpusubtype_ALL option.
  - In md_assemble() in ppc.c changed the check for instructions marked with
    IMPL64 to be flagged only when md_cputype == CPU_TYPE_POWERPC.
  - In layout_indirect_symbols() in write_object.c the stride for symbol
    pointers was changed to be conditional on CPU_TYPE_POWERPC64 where it is 8
    otherwise 4.

Changes for the 5.14 release (the cctools-498 release):
- Added the PowerPC pseudo-instruction 'jmp' as the non-linking form of 'jbsr'.
  The following entry was added to ppc-opcode.h :
    { 0x48000000, "jmp",     {{0,0,JBSR}, {2,24,PCREL}} },
  Radar bug #3458928.

Changes for the 5.14 release (the cctools-497 release):
- Added the --gstabs option to be like -g and to treat the --gdwarf2 option as
  an unknown option.  Radar bug #3411071.

Changes for the 5.14 release (the cctools-496 release):
- Added the file COPYING from FSF.  Radar bug #3443583.

Changes for the 5.13 release (the cctools-487 release):
- Fixed a bug that should have allow the 64-bit compare instructions and other
  optional instructions when -arch ppc970 was used.  The fix was to add the
  constant CPU970 in ppc-opcode.h and mark the optional instructions that the
  970 implements.  The other part of this change was in md_assemble() in ppc.c
  where it checks for 64-bit compare instructions and for optional instructions.
  The error messages were also updated to include the instruction name.  Radar
  bug #3364523.

Changes for the 5.12 release (the cctools-475 release):
- Fixed ppc-check.c to not produce illegal operands.

Changes for the 5.12 release (the cctools-472 release):
- Fixed a bug in the movq SSE2 instruction opcodes.  The opcodes for register
  to memory and memory to register were switch.  The old ones were:
   {"movq", 2, 0x660fd6, _, RR|Modrm, {xmm|m64, xmm, 0},"O"},
   {"movq", 2, 0xf30f7e, _, RR|Modrm, {xmm, xmm|m64, 0},"O"},
  The corrected ones were:
   {"movq", 2, 0x660fd6, _, RR|Modrm, {xmm, xmm|m64, 0},"O"},
   {"movq", 2, 0xf30f7e, _, RR|Modrm, {xmm|m64, xmm, 0},"O"},
  Radar bug #3250086.

Changes for the 5.12 release (the cctools-469 release):
- Fixed the handling of the .p2align directive to correctly allow the fill value
  (the second argument) to be omitted by using two commas after the required
  alignment. This is used by the compiler to get the alignment to be filled with
  no-op instructions when appropriate.  The change in in s_align() in read.c .
  Radar bug #3227897.

Changes for the 5.12 release (the cctools-468 release):
- Changed the setting of the r_length field of PPC_RELOC_BR14_predicted to 3
  instead of 4 to tell the static link editor this is a Y-bit predicted branch.
  Radar bug #3223045.
  - Changed PPC_RELOC_BR14_predicted in ppc.c to be PPC_RELOC_BR14 or'ed with a
    bit out of the 4-bit range of r_type in a relocation entry.  So when it
    later gets assigned to r_type it has the right value and gets carried thru
    to the code that creates the relocation entries.
  - Changed a few error messages in md_number_to_imm() in ppc.c and one in
    fix_to_relocation_entries() in write_object.c dealing with fix stuctures to
    set the the layout_file and layout_line variables from the file and line
    fields of the fix stucture to produce error messages that contain the
    correct file and line number.
  - Changed fix_to_relocation_entries() in write_object.c to set the r_length to
    3 for PPC_RELOC_BR14_predicted relocation types.

Changes for the 5.12 release (the cctools-467 release):
- Changed the handing of mismatching section attributes so they do not cause an
  error but are simply or in with the previous attributes.  The change is in
  section_new() in sections.c . Radar bug #3218644.
- Added support for the PPC_RELOC_LO14_SECTDIFF relocation type used with
  double word load/store instructions. Radar bug #3218027.
  - Changed the error message in fix_to_relocation_entries() in write_object.c
    where it gets a fix struct with a non-zero fx_subsy and has a relocation
    entry it does not have a matching SECTDIFF type.  Now the error causes the
    file and line number to be printed and includes "Internal error".
  - Changed fix_to_relocation_entries() in write_object.c and added a if case
    for PPC_RELOC_LO14 to set the sectdiff to PPC_RELOC_LO14_SECTDIFF.  And
    later in there set sri.r_address the same as the PPC_RELOC_LO16_SECTDIFF
    case with the high part of the address.

Changes for the 5.12 release (the cctools-465 release):
- Added the following directives:
    .p2align[wl] align, [fill[, max_bytes_to_fill]]
  as well as now allow max_bytes_to_fill with:
    .align align, [fill[, max_bytes_to_fill]]
    .align32 align, [fill[, max_bytes_to_fill]]
  Radar bug #3207027.
  - Added entries for .p2align, p2alignw and p2lalignl in the array
    pseudo_table[] in read.c .
  - Changed s_align() in read.c to parse out the option max_bytes_to_fill
    argument.  Then passed the max_bytes_to_fill as a new fourth argument to
    frag_align().  And not set the section's alignment if max_bytes_to_fill is
    non-zero.
  - Changed the call to frag_align() in s_even() in m68k.c and s_align() in
    i860.c to pass 0 as the new fourth argument to frag_align().
  - Changed frag_align() in frags.c and frags.h to take a new fourth argument
    max_bytes_to_fill.  This is saved in the frag struct field fr_subtype.
  - Changed relax_section() in layout.c to not do the alignment if it takes more
    than max_bytes_to_fill bytes (if non-zero).  If max_bytes_to_fill is
    non-zero and the alignment is done then the section's alignment is set.
- Fixed a bug in the .fill directive:
	.fill repeat_expression , fill_size , fill_expression
  for a fill_size of anything but 1 was broken.  Radar bug #3201031.
  - Also fixed two error messages in s_fill() in read.c to correctly indicate
    which argument (the repeat_expression or fill_size) was in error.
  - Changed write_object() in write_object.c where it writes out the section
    contents of the variable repeated part of a frag.  The fill_size is stored
    in an rs_fill frag in the fr_var field, the repeat_expression is in the
    fr_offset field and the fill_expression are in the bytes at fr_literal.
  - The above change to write_object() in write_object.c uncovered bugs with
    how rs_align frags were created in frag_align() in frags.c and handled in
    layout_addresses() in layout.c due to the partial bytes needed before the
    fill_expression of the fill_size.
    - frag_align() in frags.c now calls frag_var() with max_chars parameter
      large enough to hold the fill_expression of fill_size plus the maximum
      number of partial bytes that may be needed to be zeroed before the fill.
    - The second argument to frag_align() was change to a char * from an int
      so the the caller can properly convert the fill expression to the target
      byte sex.  This change was maded in both frags.c and frags.h .
    - s_align() in read.c, s_even() in m68k.c and s_align() in i860.c were
      change to call md_number_to_chars() on the fill expression and convert it
      to a char (or array of chars).  A pointer to this char is then passed to
      frag_align().  Other changes were made to add comments and change
      variable names to make things more understandable to the reader.

Changes for the 5.12 release (the cctools-464 release):
- Made changes to build cleanly with gcc3.3
  - Removed -Wno-precomp from the Makefile
  - Fixed warnings for "comparison between signed and unsigned" in driver.c,
    expr.c, frags.c, layout.c, read.c, write_object.c, m68k.c, m88k.c, i386.c
    i860.c, ppc.c, hppa.c and sparc.c .

Changes for the 5.12 release (the cctools-461 release):
- Changed the assembler to support the code gen for fix-n-continue where the
  compiler generates indirection for static data references.  The assembly
  for a non-lazy pointer to a local symbol looks like this:

	.non_lazy_symbol_pointer
	L_i$non_lazy_ptr:
	.indirect_symbol _i            
	.long   _i

  With the difference between this and a non-lazy pointer to a global symbol
  being the ".long 0" for a global symbol.  The initialization allows the value
  of the symbol to be set into the pointer.  Code was added in fixup_section()
  in layout.c to not cause the relocation entry to be created.  Code was also
  added in write_object() in write_object.c that changes the indirect symbol
  table entry to INDIRECT_SYMBOL_LOCAL when the symbol is local.  This is what
  the static and dynamic linkers expect and will then cause the pointer to be
  correctly relocated.  

  The routine is_section_non_lazy_symbol_pointers() was added in sections.[ch]
  for fixup_section() to use.

  Radar bug #3182683.

Changes for the 5.12 release (the cctools-458 release):
- Changed the i386 pause instruction so that it is not marked Optional (in
  i386-opcode.h) so it does not require the -force_cpusubtype_ALL option.
  Radar bug #3173226.
 
Changes for the 5.12 release (the cctools-454 release):
- Fixed a problem with .include not finding the included file if the included
  file is in the same directory as the source file but the source file is not
  assembled from the directory containing the source file.  Radar bug #3139454.
  - Added the varable input_dir to input-scrub.c and set its value to the
    directory part of the file name in input_scrub_new_file().
  - Changed read_an_include_file() to check if the include file does not start
    with a '/' and if so look for the file with the input_dir first.
- Changed input_scrub_next_buffer() in input-scrub.c where it previously
  caused a error message for "Source line too long." to now reallocate the
  buffer and adjust things to read more from the input.  Also added saving
  and restoring buffer_length in read_an_include_file().  Radar bug #3138898.

Changes for the 5.12 release (the cctools-450 release):
- Fixed the i386 opcode entry for the movd opcode which takes xmm,r/m32 operands
  which had the encoding switched for the reg and r_m bits of the ModR/M byte.
  It was:
  {"movd", 2, 0x660f7e, _, RR|Modrm, {xmm, r32|m32, 0},"O"},
  and was changed to:
  {"movd", 2, 0x660f7e, _, Modrm, {xmm, r32|m32, 0},"O"},
  (Radar bug #3117280).
- Fixed a bug in is_end_section_address() to sections.c so that it alwasy
  returns FALSE when the section is a zerofill section.  Radar bug #3123561.
- Fixed the i386 opcode entry for the mov opcode which took segment registers
  to take a Reg not just a Reg16.  It was:
  { "mov", 2, 0x8c, _, D|Modrm,  {SReg3|SReg2, Reg16|Mem, 0} },
  and was changed to:
  { "mov", 2, 0x8c, _, D|Modrm,  {SReg3|SReg2, Reg|Mem, 0} },
  (Radar bug #3114720).

Changes for the 5.12 release (the cctools-449 release):
- Removed the specific cpusubtype markings on all i386 instructions.  Also added
  -arch i686 to as.c to be the same as -arch pentpro. Radar bug #3111977.
- Changed the error message for non-relocatable subtraction expression so that
  it would indicate the source file and line and which of the symbols were
  undefined (Radar bug #2254439).
  - Changed the fix struct in fixes.h to have a file and line fields for the
    file name and line number.
  - Added as_file_and_line() to input-scrub.c to return the current file
    name and line number.
  - Added the variables layout_file and layout_line to input-scrub.[ch] and
    changed as_warn() to use them if no input_file_is_open and layout_line is
    not zero.
  - Changed fix_new() in fixes.c to call as_file_and_line() and fill in the
    file and line fields of the fix struct it creates.
  - Changed the error message generated in fixup_section() in layout.c at the
    point it has something that it can't generate a relocation entry when there
    is a subtraction expression.  This also sets layout_file and layout_line
    from the file and line fields in the fix struct before calling as_warn().
- Added an error message for a relocatable subtraction expression when one of
  the symbols is at the end of a section (Radar bug #2259427).
  - Added is_end_section_address() to section.[ch] which returns a boolean
    value if the address passed for the section number passed is at the end of
    the section.
  - Added code in fixup_section() in layout.c when processing a section
    difference to check the symbol address using is_end_section_address() and
    generating an error message is either address is at the end of the section.

Changes for the 5.12 release (the cctools-448 release):
- Fixed the i386 opcode entry for the cmpxchg8b opcode which had None, _, in the
  extension_opcode field which should have been a 1.  It was:
  {"cmpxchg8b",	1, 0x0fc7, _,       Modrm,    {Mem,           0, 0}, "5" },
  and was changed to:
  {"cmpxchg8b",	1, 0x0fc7, 1,       Modrm,    {Mem,           0, 0}, "5" },
  (Radar bug #3099684).

Changes for the 5.12 release (the cctools-447 release):
- Changed s_align() in read.c to put out nops if the section has machine
  instructions.  Also changed frag_align() in frags.c to allow a size of 2 for
  m68k nop padding.  Did not change the i860 stuff as it pads just the text
  section (Radar bug #3073763).

Changes for the 5.11 release (the cctools-446 release):
- Changed the i386 assembler opcode table entry for cmpxchg8b (in i386-opcode.h)
  from taking just a Mem32:
  {"cmpxchg8b",	1, 0x0fc7, _,       Modrm,  {Mem32,           0, 0}, "5" },
  to taking a Mem:
  {"cmpxchg8b",	1, 0x0fc7, _,       Modrm,    {Mem,           0, 0}, "5" },
  (Radar bug #3089041).

Changes for the 5.11 release (the cctools-442 release):
- Moved the i386 assembler to not be installed as a local assembler.
  Radar bug #3074138.
- Added the missing i386 opcode table entry for the an fxch with no operands:
 {"fxch", 0, 0xd9c9, _, ShortForm, {0, 0, 0} }, /* exchange %st0, %st1 */
 Radar bug #3073760.

Changes for the 5.11 release (the cctools-440 release):
- Fixed the warnings about extra tokens at end of #endif directive in
  m68k-check.c, m68k.c, m88k.c, sparc.c, m68k-opcode.h, make_defs.h,
  atof-ieee.c and m88k-opcode.h (Radar bug #3072042).

Changes for the 5.11 release (the cctools-439 release):
- Picked up the changes for the .align32 directive.  The changes were in frags.c
  and frags.h in frag_align(), read.c in s_align() and the pseudo_table[] array,
  write_object.c in write_object().  And calls to frag_align() in m68k.c and
  i860.c . Radar bug #2680692.
- Changed all the SSE2 instructions an marked them as "optional" so that the
  -force_cpusubtype_ALL must be used.  Radar bug #2972486.
- Changed back way instructions such fcmovb are marked so they were marked i686 
  instructions as in the fix to Radar bug #2928507 (this change was lost in the
  changes to cctools-437 in intergrating the partial fixes to Radar bug
  #2972486).
- Updated i386-check.c to allow it be used with otool's disassembler to check
  opcodes.  Cases for RegMM and RegXMM were added as well as tables for each.
  Radar bug #2972486.
- Because of the added i386 opcode "fildll" to be the same as "fildq" and
  "fistpll" to be the same as "fistpq" (done for Radar bug #2909568) code in
  i386-check.c was added to not add the 'l' suffix to "fildl" and "fistpl".
- Added built in macros to the i386 assembler for the two-operand SSE2 compare
  pseudo-ops in i386.c and loaded them in md_begin(). Radar bug #2972486.
- To allow a literal '$' to be used in a macro, expand_macro() in read.c was
  changed to output a single '$' when the macro contains two "$$" in a row.
  Radar bug #2972486.
- Fixed the bugs in the following instruction opcodes:
  {"sysenter", 0, 0x0f34, _, NoModrm, {0, 0, 0}},
  {"sysexit", 0, 0x0f35, _, NoModrm, {0, 0, 0}},
  where originally they had Modrm which should have been NoModrm as these
  instructions have no operands.  This cause these instructions to be assembled
  with a trailing 0x00 byte. Radar bug #2972486.
- Fixed a bug in the following SSE2 instruction opcode
  {"pinsrw", 3, 0x0fc4, _, RR|Modrm, {Imm8, r32|m16, mm}},
  where the "mm" was "0" which caused the following two legal instructions to
  not assemble at all:
	pinsrw $0x1,(%ecx),%mm1
	pinsrw $0x2,%edx,%mm2
  Radar bug #2972486.
- Fixed a bug in the movq SSE2 instruction opcodes.  The opcodes for register
  to memory and memory to register were switch.  The old ones were:
   {"movq", 2, 0x660fd6, _, RR|Modrm, {xmm, xmm|m64, 0}},
   {"movq", 2, 0xf30f7e, _, RR|Modrm, {xmm|m64, xmm, 0}},
  The corrected ones were:
   {"movq", 2, 0x660fd6, _, RR|Modrm, {xmm|m64, xmm, 0}},
   {"movq", 2, 0xf30f7e, _, RR|Modrm, {xmm, xmm|m64, 0}},
  Which made these instructions:
	movq 0x93939393(%eax),%xmm3
	movq %xmm4,0x94949494(%eax)
  assemble as:
	movq %xmm3,0x93939393(%eax)
	movq 0x94949494(%eax),%xmm4
  Radar bug #2972486.
- Fixed a bug in the following SSE2 instruction opcode:
  {"pcmpeqw", 2, 0x660f75, _, RR|Modrm, {xmm|m128, xmm, 0}},
  the trailing 75 was incorrectly a 74 making the following instruction:
	pcmpeqw 0x90909090(%eax),%xmm2
  assemble as ('b'-byte not 'w'-word):
	pcmpeqb 0x90909090(%eax),%xmm2
  Radar bug #2972486.
- Fixed a bug in the following SSE2 instruction opcode:
  {"pcmpgtw", 2, 0x660f65, _, RR|Modrm, {xmm|m128, xmm, 0}},
  the trailing 65 was incorrectly a 64 making the following instruction:
	pcmpgtw 0x90909090(%eax),%xmm2
  assemble as ('b'-byte not 'w'-word):
	pcmpgtb 0x90909090(%eax),%xmm2
  Radar bug #2972486.

Changes for the 5.11 release (the cctools-437 release):
- Picked up the changes to assembler the i386 SSE2/SSE/MMX instructions.
  This is not yet complete.  The changes include changing the way instructions
  such fcmovb should are marked.  They were marked i686 instructions as in the
  fix to Radar bug #2928507 but now are unmarked.  Also the pseudo-ops like
  cmpeqps are not yet supported.  Radar bug #2972486.
- Fixed a bug in fix_to_relocation_entries() in write_object.c where it sets
  the "true target address" into the r_address field of the PAIR relocation
  entry for a PPC_RELOC_JBSR.  In the case the symbol is not undefined then
  r_address should be set to the absolute address of the "true target address".
  The bug was the code was subtracting sect_addr which was the section address
  of the section that the relocation entry is in (nothing to do with the target
  of the relocation which is fixP->fx_value). The change makes the undefined
  symbol case and the defined symbol case the same as both are storing
  fixP->fx_value in the "other_part" of the PAIR relocation entry.  For an
  external relocation entry this is the offset from the symbol and for a local
  relocation entry this the "true target address".  The other change is to use
  a scattered relocation entry for the PAIR if it is a local relocation entry
  and the "true target address" has the high bit set or if it is an external
  relocation entry and the offset has the high bit set.  As a non-scattered
  relocation entry limits the "other_part" to 31 bits when stored in the
  r_address field.  Radar bug #3046962.

Changes for the 5.10 release (the cctools-422 release):
- Added some pentium pro instructions.  Radar bug #2928507.
- Added the strip_static_syms section attribute.  Radar bug #2945659.

Changes for the 5.10 release (the cctools-418 release):
- Changed s_section() in read.c to not cause an error if a section attribute
  is used with out -dynamic.  Radar bug #2929120.

Changes for the 5.10 release (the cctools-416 release):
- Added the .weak_definition directive to read.c in the routine
  s_weak_definition().  An error check was also added in colon() of symbols.c,
  and error checks were added to layout_symbols() in write_object.c .
- Removed the weak_definitions attribute from the attribute_names[] array in
  read.c.  Also removed the check in s_section() in read.c to only allow
  S_ATTR_WEAK_DEFS with a coalesced section type.
- Fixed a bug in the PowerPC assembler that did not detect instructions with
  more than 5 parameters as an error.  The fix is in calcop() in ppc.c.
  Radar bug #2911611.

Changes for the 5.10 release (the cctools-415 release):
- Added i386 opcode "fildll" to be the same as "fildq" and "fistpll" to be the
  same as "fistpq".  Radar bug #2909568.

Changes for the 5.10 release (the cctools-414 release):
- Added the weak_definitions attribute to the attribute_names[] array in read.c.
  Also added a check in s_section() in read.c to only allow S_ATTR_WEAK_DEFS
  with a coalesced section type. Radar bug #2898558.
- Fixed two places in md_number_to_imm() in ppc.c that was checking to make sure
  the value used for a branch displacement was in range but the check was made
  before the final adjustment of the value by 4.  Radar bug #2890217.
  
Changes for the 5.10 release (the cctools-400 release):
- Added the i386 instruction fistp to be the same as fistps.  Radar bug
  #2851846.

Changes for the 5.10 release (the cctools-400 release):
- Changed the Makefile back to again use the -dependency-file with gcc.

Changes for the 5.10 release (the cctools-399 release):
- Changed BUFFER_SIZE in input-file.c from 32k to 64k as gcc3 is puting out
  single stab lengths that are longer than 32k.  Radar bug #2840883.

Changes for the 5.10 release (the cctools-396 release):
- Added the .weak_reference directive to read.c.  A change was also needed in
  colon() of symbols.c.
- Fixed a bad line of code in md_number_to_imm() in sparc.c that was:
    val = (val >>= 2) + 1;
  where it should have been:
    val = (val >> 2) + 1;
- Changed the Makefile to not use the -dependency-file with gcc as well as
  mwccppc.
- Added an include for <stdlib.h> in obstack.c, m88k.c, i860.c, ppc.c and
  hppa.c to pick up the prototype for abort().
- Added an include for <stdlib.h> in as.c and i860.c to pick up the prototype
  for exit().
- Added guards for the header files read.h, expr.h, struc-symbol.h, flonum.h,
  frags.h, fixes.h, hash.h

Changes for the 5.10 release (the cctools-389 release):
- Changed the PowerPC fsel instruction to not be marked as optional.

Changes for the 5.9 release (the cctools-375 release):
- Picked up patches to add ()'s around builtin ppc macros.  Radar bug #2717461.
- Removed the references to libstreams by removing the use of the old
  project builder interfaces with the ifdef OLD_PROJECTBUILDER_INTERFACE.  This
  appears in messages.c and as.c .

Changes for the 5.9 release (the cctools-364 release):
- Fixed a bug in the assembler when a ".=value" was past the value of the
  current location counter and caused the assembler to crash.  The fix is in
  layout_addresses() in layout.c in the case for rs_org to test the value of
  fragP->fr_offset for being less than 0.  Radar bug #2682911.
- Picked up a change to the PowerPC assembler adds the 4-arg option to rlwinm
  and friends, and uses mask->mb/me conversion code that was lifted from
  current GNU as.  Radar bug #2684824.

Changes for the 5.9 release (the cctools-363 release):
- Fixed a bug in the PowerPC assembler that incorrectly changed the Y bit of a
  branch conditional when no prediction was specified.  The book on Page F-10
  says "assemblers should clear this bit unless otherwise directed".  Radar bug
  #2665165.
- Changed the ppc assembler to allow VMX instructions when -arch ppc7400 or
  -arch ppc7450 is specified.

Changes for the 5.9 release (the cctools-359 release):
- Added -Wno-long-double to shutup the compiler for
  <architecture/m88k/fp_regs.h>.

Changes for the 5.8 release (the cctools-357 release):
- Added support for the CPU_SUBTYPE_POWERPC_7450 in as.c. Radar bug #2599869.

Changes for the 5.8 release (the cctools-355 release):
- Changed the syntax of the .section directive to allow the attribute field to
  contain attributes such as "no_toc+pure_instructions" so more than one
  attribute can be specified.  The change is in s_section() in read.c.  Radar
  bug #2580298.

Changes for the 5.8 release (the cctools-353 release):
- Changed where the assembler gets installed and the assembler driver looks for
  it.  The new location for Cheetah and beyond is
  /usr/libexec/gcc/darwin/<arch>/as for the ppc assembler and
  /usr/local/libexec/gcc/darwin/<arch>/as for the local assemblers.
  Radar bug #2574173.
 
- Fixed a problem similar to the one below with using:
	.set x,a-b
	.long x
  where the value of the symbol x and the long do not get set correctly if the
  symbols a and b are not in the same frag.  This showed up in the code for
  zero overhead exceptions as the way the size of the unwind table entries are
  calculated.  The fix was to use the same pointer to the expression that the
  routine pseudo_set() uses in the fix below.  The routine operand() in expr.c
  looks for a non-NULL value of the expression field of the symbol before
  assuming it is an absolute symbol and if so returns an expression with the
  symbol and a segment type of SEG_DIFFSECT.  Then fixup_section() in layout.c
  also looks for a non-NULL value of the expression field of the symbol before
  assuming it is an absolute symbol and if so evaluates the expression as an
  absolute value as the differnce between the values of the symbols in the
  expression.  The code in pseudo_set() in read.c for the case statement of
  of SEG_DIFFSECT also had to be tweaked as the test to save the expression
  into the symbol was base only symbol not being in the same frag.  This test
  also needed to include if either symbol was undefined.  Radar bug #2573260.

Changes for the 5.7 release (the cctools-338 release):
- Fixed the problem with the trailing N_FUN function stab not having its value
  set correctly for large functions.  The stab in question is:
	 .stabs "",36,0,0,Lscope0-_function
  The change is a bit of a hack as we are at the end of the Public User Beta
  cycle.  The problem is that pseudo_set() in read.c for the case statement of
  SEG_DIFFSECT does not take into account that the two symbols may not be in
  the same fragment so that using their sy_value feilds in the first pass will
  not work.  So the safest hack was to add a pointer to an expresion in the
  symbol struct (struc-symbol.h) and save it away in pseudo_set().  Then have
  write_object() in write_object.c look for it and evaluate then.  Radar bug
  #2504182.

Changes for the 5.7 release (the cctools-336 release):
- Added the no_toc attribute to the attribute_names array in read.c.  Radar
  bug #2494286.

Changes for the 5.7 release (the cctools-330 release):
- Changed the call to netname_look_up() in check_for_ProjectBuilder() in
  messages.c to bootstrap_look_up() when __OPENSTEP__ and
  __GONZO_BUNSEN_BEAKER__ is not defined (Radar bug #2473864).

Changes for the 5.7 release (the cctools-329 release):
- Added a fix for checking the range of a PPC_RELOC_BR14 and PPC_RELOC_BR24
  relocation entry in ppc.c in md_number_to_imm() to make sure they do not
  overflow and generating an error if they do. (Radar bug #2469441).

Changes for the 5.7 release (the cctools-327 release):
- Changed back where as(1) picks up its the System Framework's private headers.
  It will continue to look in
  /System/Library/Frameworks/System.framework/PrivateHeaders and may someday
  will lookin in
  /MacOSX/System/Frameworks/System.framework/PrivateHeaders in some post-DP4
  release.

Changes for the 5.6 release (the cctools-323 release):
- Changed back where the assembler picks up its the System Framework's private 
  headers back to /System/Library/Frameworks/System.framework/PrivateHeaders
  from /MacOSX/System/Frameworks/System.framework/PrivateHeaders for the Space
  release.  This won't change till post-DP4.

Changes for the 5.6 release (the cctools-321 release):
- Changed the built in section directives .objc_class_names,
  .objc_meth_var_types, .objc_meth_var_names to be the (__TEXT,__cstring)
  section.  Radar bug #2447117.

Changes for the 5.6 release (the cctools-319 release):
- Removed support of the GNU source and MW source targets in the Makefiles as
  Darwin takes care of this.  This is done at this time because the new
  directory layout with Gonzo1G has /System/Developer moving to
  /Startup/Developer which would have effected /System/Developer/Source/GNU.

Changes for the 5.5 release (the cctools-307 release):
- Added the i386 opcode "fild" to be the same as "filds" and the opcode "fist"
  to be the same as "fists".  Radar bug #2410226.
- Additions to support coalesced symbols and external relocation entries for
  defined coalesced symbols.  Radar bug #2411273.
  - Changed fix_to_relocation_entries() in write_object.c to create an
    external relocation entry for defined external coalesced symbols.
  - Changed relax_section() in layout.c to not added the value of a defined
    external coalesced symbol to the item being relocated.
  - Added the routine is_section_coalesced() to sections.c and its prototype
    to sections.h.
- Added support for the CPU_SUBTYPE_POWERPC_7400 in as.c.  Radar bug #2397523.
- Fixed a bug where the assembler would treat the next line after a line
  containing only a '#' as a comment.  Radar bug #2393418.

Changes the 5.4 release (the cctools-302 release):
- Added the i386 instruction setc which is the same as setb and setnae.  Radar
  bug #2374684.

Changes the 5.4 release (the cctools-300 release):
- Fix a bug where the assembler does not catch the error case of an unterminated
  .macro. The fix is in read_a_source_file() on line 705 in read.c (Radar bug
  #2368659).
- Fixed a bug with parsing signed numbers in the PowerPC assembler that showed
  up in assembling:
	vspltisb v1,-1
  where the -1 over wrote the high bits of the opcode.
- Added support for the coalesced section type.

Changes the 5.3 release (the cctools-292 release):
- Moved the i386 assembler to /usr/local/libexec/i386/as for MacOS X.
- Added -I$(NEXT_ROOT)/System/Library/Frameworks/System.framework/PrivateHeaders
  to the Makefile as the egcs compiler's cpp no longer searches this by default.
  This is needed to pick up <streams/streams.h> for use with the PB interface.
- Added the int type to state, old_state and add_newlines in app.c to remove
  a warning from the egcs compiler.
- Changed the return type of main() in driver.c and as.c from void to int to
  remove a warning from the egcs compiler.  Also changed the exit() call at the
  end to return().

Changes the 5.3 release (the cctools-286 release):
- Added the support for the module termination section.

Changes the 5.3 release (the cctools-285 release):
- Fixed the i386 opcode of cmpxchg from 0x0fa6 (as it is in the i486 manual) to
  0x0fb0 which is correct (as it is in the Pentium manual).
- Changed all #ifdef NeXT to #ifdef NeXT_MOD and added a -DNeXT_MOD to the
  Makefile.  This is because -DNeXT will nolonger be defined for MacOS X builds. 
Changes for the the 5.3 release, MacOS X bring up (the cctools-282 release):
- Changed task_self() to mach_task_self() for MacOS X in writeout.c.  Also
  included "stuff/openstep_mach.h" for macros to allow it to still build on
  Openstep.  Also changed ifdef's __SLICK__ to __OPENSTEP__.
- Changed task_self() to mach_task_self() in 
- Ifdef'ed __MACH30__ make.defs for mach_port_t vs mach_port.  Also ifdef'ed out
  netname_look_up() call and #include <servers/netname.h> for __MACH30__ in
  messages.c (these are not yet in the SDK).
- Changed the Makefile to allow for RC_OS=macos for MacOS X builds.
- Added a few casts in places to get it to compile with the MetroWerks compiler
  without -relax_pointers.
- Changed the assignment of macro_name = FALSE; to  macro_name = NULL in 
  s_endmacro() in read.c to make it compile with the MetroWerks compiler.
- Added some void casts before some zeroes in macros in obstack.h to make it
  compile with the MetroWerks compiler.
- Changed the Makefile for the driver_build not to pass GCC flags (-Wall and
  -Wno-precomp flags) down when using the MetroWerks compiler.

Changes for the 5.2 release (the cctools-274 release):
- Removed the #ifndef REMOVE_VMX stuff and the unifdef and sed lines from the
  Makefile.  Radar bug #2237908.
- Removed all uses of CPU_SUBTYPE_586SX in as.c.  Added the pentium, pentpro,
  pentIIm3 and pentIIm5 -arch flags to as.c.  Updated md_assemble() in i386.c
  to deal with the new subtypes. Radar bug #2231830.

Changes for the 5.2 release (the cctools-267 release):
- Added #ifndef REMOVE_VMX around the VMX stuff.  Added unifdef and sed lines
  in the Makefile for removing this from the GNU source.  Also removed this
  notes file from the GNU source.  Radar bug #2227999.

Changes for the 5.1 release (the cctools-261 release):
- Moved the assemblers into /usr/libexec and /usr/local/libexec and changed the
  assembler driver to look there. (Radar 2213838)
- Change the PowerPC instructions tlbld and tlbli to marked as OPTIONAL rather
  than 603 specific.  This leaves only 601 specific instructions and the code
  for 603 subtypes was removed from md_assemble() in ppc.c. (Radar 2213821)
- Added a check for VMX tagged instructions in md_assemble() in ppc.c to
  require the -force_cpusubtype_ALL flag. (Radar 2213821)
- Added the -ppc603e, -ppc603ev and -ppc750 to as.c for PowerPC. (Radar 2213821)
- Added the ppc750 special register names (Radar 2212878):
    { 936, "ummcr0" },/* 750 only */
    { 937, "upmc1" }, /* 750 only */
    { 938, "upmc2" }, /* 750 only */
    { 939, "usia" },  /* 750 only */
    { 940, "ummcr1" },/* 750 only */
    { 941, "upmc3" }, /* 750 only */
    { 942, "upmc4" }, /* 750 only */
    { 1017,"l2cr" }, /* 750 only */
    { 1019,"ictc" }, /* 750 only */
    { 1020,"thrm1" },/* 750 only */
    { 1021,"thrm2" },/* 750 only */
    { 1022,"thrm3" },/* 750 only */
- Added the dcba PowerPC optional instruction.

Changes for the 5.1 release (the cctools-260 release):
- Added -c to all the install commands in the Makefile.

Changes for the 5.1 release (the cctools-259 release):
- Fixed a bug where .stabd have their name incorrectly set.  Fixed this in
  layout_symbols() in write_object.c in line 779 and assign
  symbolP->sy_name_offset to 0 not *string_byte_count;

Changes for the 5.1 release (the cctools-255 release):
- Added the VMX opcodes and other needed support. Radar bug 2004760.

Changes for the 5.1 release (the cctools-253 release):
- Changed the Makefile to only create the needed dst directories.
- Removed the default search path for headers because of the new directory
  layout for Preimer.

Changes for the 5.1 release (the cctools-250 release):
- Added taking -arch ppc604 and -arch ppc604e for the ppc assembler.
- Changed printing the cctools version from NeXT version to Apple version.
  Changes were in as.c and in the Makefile.

Changes for the 5.1 release (the cctools-247 release):
- Added MKDIRS if code to the Makefile to build native on Rhapsody.
- Changed the Makefile to use gnutar instead of tar because it works on Rhapsody
  where tar does not.
- Changed the Makefile to install the driver only in /usr/bin for RC_OS teflon
  and in /bin for RC_OS nextstep. Removed the creation of symbolic links
  (Radar 1672088).
- Changed the Makefile to install ppc and i386 assemblers in /lib for RC_OS
  teflon with the rest in /local/lib.  And to install m68k, i386 and sparc
  assemblers /lib for RC_OS nextstep the the rest in /local/lib.
- Changed the code ifdef __TEFLON__ to ifndef __SLICK__ (where __TEFLON__ will
  nolonger be defined for Rhapsody builds) so the default builds will be native
  Rhapsody builds.  The changes were to input-file.c and i386.h .

Changes for the 5.0 release (the cctools-245 release):
- Fixed the symbolic link from /usr/bin/as to ../../bin/as (Radar 1672088).

Changes for the 5.0 release (the cctools-243 release):
- Added a symbolic link from /usr/bin/as to $(DSTROOT)/bin/as (Radar 1672088).

Changes for the 5.0 release (the cctools-242 release):
- Removed the following builtin macros which the compiler once used which had
  been ifdef'ed out:
    #undef POWER_MNEMONICS
    #ifdef POWER_MNEMONICS
	{ "ai\n",	   "addic $0,$1,$2\n"},
	{ "ai.\n",	   "addic. $0,$1,$2\n"},
    #endif /* POWER_MNEMONICS */
- Removed the following builtin macros which was a typo:
    { "clrlsdi\n", "rldic $0,$1,$3,$2-$3\n"},
  the correct macro name is clrlsldi which was already in the table.
- Removed the following builtin macros left over from the NRW port:
    { "mtrtcd\n",  "mtspr 281,$0\n"},
    { "mfrtcd\n",  "mfspr $0,281\n"},
    { "mtrtci\n",  "mtspr 282,$0\n"},
    { "mfrtci\n",  "mfspr $0,282\n"},
    { "mtbatu\n",  "mtspr 528+2*$0,$1\n"},
    { "mfbatu\n",  "mfspr $0,528+2*$1\n"},
    { "mtbatl\n",  "mtspr 529+2*$0,$1\n"},
    { "mfbatl\n",  "mfspr $0,529+2*$1\n"},
- Marked the instruction "eciwx" as optional.
- Removed the non-existant instructions "stmd", "mtpmr" and "mfpmr".
- Changed the 601 mtrctu and mtrctl from
    mtrtcu Rx	equivalent to	mtspr rtcu,Rx
    mtrtcl Rx	equivalent to	mtspr rtcl,Rx
  to:
    mtrtcu Rx	equivalent to	mtspr 20,Rx
    mtrtcl Rx	equivalent to	mtspr 21,Rx
  because the move to and move from use different register numbers for rtcu
  (20 vs. 4) and rtcl (21 vs. 5).

Changes for the 5.0 release (the cctools-240 release):
- Turned off the ifdef NRW_COMPILER so the instructions mull[o][.] and mulwd[.]
  are no longer supported.
- Added the 604 & 604e  special register names with the following numbers:
    { 952, "mmcr0" }, /* 604 & 604e only */
    { 953, "pmc1" },  /* 604 & 604e only */
    { 954, "pmc2" },  /* 604 & 604e only */
    { 955, "sia" },   /* 604 & 604e only */
    { 956, "mmcr1" }, /* 604e only */
    { 957, "pmc3" },  /* 604e only */
    { 958, "pmc4" },  /* 604e only */
    { 959, "sda" },   /* 604 & 604e only */
- Added the 603 special register names with the following numbers:
    { 976, "dmiss" }, /* 603 only */
    { 977, "dcmp" },  /* 603 only */
    { 978, "hash1" }, /* 603 only */
    { 979, "hash2" }, /* 603 only */
    { 980, "imiss" }, /* 603 only */
    { 981, "icmp" },  /* 603 only */
    { 982, "rpa" },   /* 603 only */
- Removed the "bat[0123][ul]" 601 special register names left over from the NRW
  port.  The names with "ibat[0123][ul]" are to be used.
- Changed the name of the 601 special register "pid" to "pir" and added an entry
  for the name "hid15" also with the number 1023.
- Removed the special register entries in the special_registers for {281,"rtcd"}
  {282,"rtci"} and {1022,"fpecr"} which appear to be left over from the NRW
  port but nolonger exist.
- Added the special register {282,"ear"} which is optional in the PowerPC
  architecure.
- Added the special registers {284,"tbl"} and {285,"tbu"} which were missing.
- Fixed the clrrdi simplified mnemonics to use rldicr not rldicl which they were
  using.
- Added the simplified mnemonic:
    { "clrlsdi\n", "rldic $0,$1,$3,$2-$3\n"},
- Added the missing multiply low double word (mulld) 64-bit instruction.
- Added tests for invalid forms of branch conditional instructions where
  reserved bits of the BO field are not zero when -force_cpusubtype_ALL is not
  specified.
- Changed the test for the BO's branch always encoding to include the any value
  for the z bits in the 1z1zz encoding.  This test is used to set the Y bit in
  branch conditional instructions.
- Added code in ppc.c to flag 64-bit compares if -force_cpusubtype_ALL is not
  specified.  Note none of the 64-bit compares are marked with IMPL64.
- Added IMPL64 for 64-bit instructions.  Added code in ppc.c to not allow them
  unless -force_cpusubtype_ALL is specified.  Marked the following instructions
  as 64-bit instructions: cntlzd, divd, divdu, extsw, fcfid, fctid, fctidz, ld,
  ldarx, ldu, ldux, ldx, lwa, lwaux, lwax, mulhd, mulhdu, mulld, rldcl, rldcr,
  rldic, rldicl, rldicr, rldimi, slbia, slbie, sld, srad, sradi, srd, std,
  stdcx., stdu, stdux, stdx, td, tdi,
- Added OPTIONAL for optional instructions.  Added code in ppc.c to not allow
  them -force_cpusubtype_ALL is not specified.  Marked the following
  instructions as optional: ecowx, fres, frsqrte, fsel, fsqrt, fsqrts, slbia,
  slbie, stfiwx, tlbia, tlbie, tlbsync
- Added an #ifdef POWER_MNEMONICS to ppc.c for the following Power mnemonics:
    { "ai\n",	   "addic $0,$1,$2\n"},
    { "ai.\n",	   "addic. $0,$1,$2\n"},
- Removed the non-existant instruction "lmd".  This appeared in the opcode
  table and in ppc.c for a check for invalid forms.
- Fixed a bug in the checking of ldu invalid form where the mask was 0xfc000001
  and should have been 0xfc000003, which also picked up lwa by mistake.
- Added the error messages and tests for load multiple instructions (lmw, lswi
  and lswx) for invalid forms.
- Fixed a bug where "ld r1,0(0)" was being flagged invalid because rA == 0.
  This was trying to get "ldu r1,0(r0)" which had the low bit set and "ld" does
  not.  The mask and opcode were changed in the checking code in ppc.c.
- Changed the rA parameter of lhax, lfsx, lfdx, ldx, lbzx, lhbrx, lhzx, lwax,
  lwbrx, stbx, stdcx., stdx, stfdx, stfiwx, stfsx, sthbrx, sthx, stwbrx, stwx,
  eciwx, ecowx from rA to (rA|0) to match the book.  These are the same as the
  Radar #1653885 for lwzx.
- Changed the rA parameter of lfdu, lfsu, lhau, ldu, lwzu, stbu, stdu, stfdu,
  stfsu, sthu and stwu from (rA|0) to rA to match the book.
  This is odd as most of the interger load with updates use (rA|0) and the
  floating point load with updates use rA.  For both when rA == 0 they are
  invalid.  This also required a change to parse_displacement() to allow GREG
  as the third parameter as well as G0REG.
- Put in a test for the "branch conditional to count register" (bcctr and
  bcctrl) that can't use the "decrement and test CTR" option to be flagged as
  invalid.
- Removed a warning about 'reference' might be used uninitialized in ppc.c .

Changes for the 5.0 release (the cctools-236 release):
- Changed the immediate shifted instructions (addis and lis) to not check the
  sign of the immediate just out of 16 bit range (signed or unsigned).  The new
  parameter type HI, for high immediate was added.
- Fixed the built in macro (added in cctools-235):
    { "crmove\n",  "cror $0,$1,$1\n"}, was "crxor"
- Fixed a bug in "cmpldi" so that the immediate value is unsigned.
- Added forms of "cmpd", "cmpdi", "cmpld", "cmpldi", "cmpw", "cmpwi", "cmplw",
  "cmplwi" that take a number as their first parameter (previously they only
  took a cr register).
- Added code to allow "tw 31,0,0" where the last two parameters rA and rB are
  allowed to be coded as 0.  The new parameter type ZERO was added.  Also allow
  the instruction "ori 0,0,0" to be coded where the first two parameters rA and
  rS are allowed to be zero when the third is zero.
- Added the PowerPC instruction:
    mttbl rS    equivalent to   mtspr 284,rS
- Fixed the opcode of "mttbu rS" "Move to time base upper" to be equivalent to 
  "mtspr 285,rS"
- Removed the PowerPC instruction mttb "Move to time base".
- Fixed a bug in the PowerPC instruction "lwzx rD,rA,rB" where rA should have
  been (rA|0) that is encoded as G0REG.  It was GREG (Radar #1653885).

Changes for the 5.0 release (the cctools-235 release):
- Added the PowerPC pseudo instruction "jbsr symbol,lable".  This involved
  adding a JBSR operand type in ppc-opcode.h, a parse_jbsr() routine in ppc.c.
  The addition of the PPC_RELOC_JBSR was handled by adding a jbsr_exp to the
  ppc_insn struct and code in md_assemble() to call fix_new() for it.  Then
  code was added in write_object.c to write this reloc out.
- Added extended mnemonics:
    mtrtcu Rx	equivalent to	mtspr rtcu,Rx
    mtrtcl Rx	equivalent to	mtspr rtcl,Rx
    mtmq Rx	equivalent to 	mtspr mq,Rx
    mfrtcu Rx	equivalent to	mfspr Rx,rtcu
    mfrtcl Rx	equivalent to	mfspr Rx,rtcl
    mfmq Rx	equivalent to	mfspr Rx,mq
    bctr BO,BI	equivalent to	bcctr BO,BI
    bctrl BO,BI	equivalent to	bcctrl BO,BI
- Added the built in macros:
    { "crmove\n",  "crxor $0,$1,$1\n"},
    { "crnot\n",   "crnor $0,$1,$1\n"},
    { "mfear\n",   "mfspr $0,282\n"},
    { "mtear\n",   "mtspr 282,$0\n"},
    { "mtfs\n",    "mtfsf 0xff,$0\n"},
    { "mtfs.\n",   "mtfsf. 0xff,$0\n"},
- Added the following instructions:
 { 0x7c00026c, "eciwx",   {{21,5,GREG},  {16,5,GREG}, {11,5,GREG}} },
 { 0x7c00036c, "ecowx",   {{21,5,GREG},  {16,5,GREG}, {11,5,GREG}} },
 { 0xec000030, "fres",    {{21,5,FREG}, {11,5,FREG}} },
 { 0xec000031, "fres.",   {{21,5,FREG}, {11,5,FREG}} },
 { 0xfc000034, "frsqrte", {{21,5,FREG}, {11,5,FREG}} },
 { 0xfc000035, "frsqrte.",{{21,5,FREG}, {11,5,FREG}} },
 { 0xfc00002e, "fsel",
	{{21,5,FREG}, {16,5,FREG}, {6,5,FREG}, {11,5,FREG}} },
 { 0xfc00002f, "fsel.",
	{{21,5,FREG}, {16,5,FREG}, {6,5,FREG}, {11,5,FREG}} },
 { 0xfc00002c, "fsqrt",   {{21,5,FREG}, {11,5,FREG}} },
 { 0xfc00002d, "fsqrt.",  {{21,5,FREG}, {11,5,FREG}} },
 { 0xec00002c, "fsqrts",  {{21,5,FREG}, {11,5,FREG}} },
 { 0xec00002d, "fsqrts.", {{21,5,FREG}, {11,5,FREG}} },
 { 0x38000000, "la",      {{21,5,GREG}, {0,16,D},     {16,5,G0REG}} },
	"la rT,d(rA)" equivalent to "addi rT,rA,d"
 { 0x7c0007ae, "stfiwx",  {{21,5,FREG}, {16,5,GREG}, {11,5,GREG}} },
 { 0x7c00046c, "tlbsync", },
 { 0xfc000080, "mcrfs",   {{21,5,CRFONLY},{18,5,NUM}} },
	Allows a crf as the first operand (previously only a number)
 { 0x7c000400, "mcrxr",   {{21,5,CRFONLY}}  },
	Allows a crf as the operand (previously only a number)
  As opcodes in ppc-opcode.h
- Added the "mftb rT,TBR" opcode form to specify the timer base register as an
  opcode in ppc-opcode.h
- Added the archaic forms of compares:
	"cmp   crT,rA,rB"  equivalent to "cmp   crT,0,rA,rB"
	"cmp   num,rA,rB"  equivalent to "cmp   num,0,rA,rB"
	"cmpi  crT,rA,s16" equivalent to "cmpi  crT,0,rA,s16"
	"cmpi  num,rA,s16" equivalent to "cmpi  num,0,rA,s16"
	"cmpl  crT,rA,rB"  equivalent to "cmpl  crT,0,rA,rB"
	"cmpl  num,rA,rB"  equivalent to "cmpl  num,0,rA,rB"
	"cmpli crT,rA,s16" equivalent to "cmpli crT,0,rA,u16"
	"cmpli num,rA,s16" equivalent to "cmpli num,0,rA,u16"
  As opcodes in ppc-opcode.h
  Also fixed the existing 4 parameter forms of cmpli, and cmplwi to take an
  unsigned immediate not a signed immediate.
- Fixed the clrlslwi macros which were:
    { "clrlslwi\n","rlwinm $0,$1,$3,$2-$3,31-$2\n" },
    { "clrlslwi.\n","rlwinm. $0,$1,$3,$2-$3,31-$2\n" },
  to:
    { "clrlslwi\n","rlwinm $0,$1,$3,$2-$3,31-$3\n" },
    { "clrlslwi.\n","rlwinm. $0,$1,$3,$2-$3,31-$3\n" },
  where the 31-$2 should have been 31-$3

Changes for the 5.0 release (the cctools-229 release):
- The change to cctools-228 broke -static that had x-y relocation when used
  with -static.  The code in fix_to_relocation_entries() in write_output.c
  Also needed it's testing of the -k flag removed.

Changes for the 5.0 release (the cctools-228 release):
- Changed the code in fixup_section() in layout.c to use the section differnce
  relocations even if -static (the -k flag not set) is used.  It was there
  because it was incompatible with 3.2.

Changes for the 5.0 release (the cctools-227 release):
- Added the PowerPC built in macros:
    { "ai\n",	   "addic $0,$1,$2\n"},
    { "ai.\n",	   "addic. $0,$1,$2\n"},

Changes for the 5.0 release (the cctools-223 release):
- Added the PowerPC built in macros:
    { "crset\n",   "creqv $0,$0,$0\n"},
    { "crclr\n",   "crxor $0,$0,$0\n"},
    { "mtcr\n",    "mtcrf 0xff,$0\n"},
- Fixed the Makefile to pass OFLAG through to lower makes for development
  builds.

Changes for the 5.0 release (the cctools-222 release):
- Added s_include() as in ppcasm_pseudo_table[] in read.c.
- Changed do_scrub_next_char() in app.c to handle strings in single quotes
  for ppcasm.
- Changed next_char_of_string() and demand_copy_string() to use single quotes
  for strings with ppcasm instead of double quotes.
- Added code in do_scrub_begin() in app.c n ifdef'ed PPC and if'ed 
  flagseen[(int)'p'] to not use '@' as a LEX_IS_LINE_SEPERATOR.  Also '\r'
  is used as a LEX_IS_LINE_SEPERATOR for -ppcasm.
- Changed do_scrub_next_char() after the label flushchar: ifdef'ed PPC and
  flagseen[(int)'p'] and in state 3 (3: after second white on normal line
  (flush white)) to return a space.  This is so that labels without colons
  don't have spaces removed on their lines and mess up the parsing.
- Added ppcasm_parse_a_buffer() to read.c which will drive the parsing of
  the syntax for the ppcasm flavor of the assembler.  Many other changes in
  read.c for parsing are also added.
- Moved all the calls to initialization routines in main() to after the
  command line flags are parsed.  This is so that -ppcasm can effect the
  initialization routines where needed.
- Added the -ppcasm flag for PowerPC.  This is to be used to make the PowerPC
  assembler more like the Apple ppcasm assembler.  The goal of this hack is to
  to allow the assembler source for the Apple's blue box to assemble so they
  can build it under Rhapsody.

Changes for the 5.0 release (the cctools-216 release):
- Changed the size of the standard PowerPC symbol stubs in read.c to 20 and 36
  to be used with the super-scaler symbol stubs.

Changes for the 5.0 release (the cctools-215 release):
- Removed bsd fron <bsd/libc.h> in write_object.c so it will build under the
  Teflon SDK.
- Fixed the mftb and mftbu (move from time base/upper) opcodes to be correct.
- Added the sizes to the standard symbol stubs in read.c for PowerPC.
- Fixed a bug in try_to_make_absolute() in expr.c which was making expresions
  absolute and not using section difference when -dyanamic (flagseen['k']) was
  set.  This caused some expressions like a-b when a and b were previously been
  defined to turn into absolute when they should be SECTDIFF.

Changes for the 5.0 release (the cctools-214 release):
- Added the PPC_RELOC_HI16_SECTDIFF, PPC_RELOC_LO16_SECTDIFF and
  PPC_RELOC_HA16_SECTDIFF relocation types.
- Fixed a bug where the comment character ';' in the PowerPC assembler was
  acting like a statement seporator.
- Allowed -arch m98k for PowerPC assembler.

Changes for the 5.0 release (the cctools-213 release):
- Added macros for "not" and "not." .

Changes for the 5.0 release (the cctools-212 release):
- Changed tlbiex to tlbie and slbiex to slbie (also set correct opcodes for
  slbie and slbia).
- Fixed a bug in the assembler that it exits with a zero status if it can't open
  it's input file and creates an output file.
- Added .flag_reg and .noflag_reg ppc directives to cause flaging of registers
  that should not be used as a real warning (that is still create an output
  file).
- Added the -no_ppc601 flag and the .no_ppc601 directive to flag 601 uses (again
  as real warnings).
- Added the 603 instructions "tlbld rB" and "tlbli rB".
- Added the 601 instruction "clcs rD,rA".
- Added marking the 601 & 603 instructions in the ppc assembler.

Changes for the 5.0 release (the cctools-210 release):
- Changed to allow $ as the same as . (dot) for the ppc assembler.
- Changed the third parameter of stswi and lswi to a NUM0 so that 32 means 0.
- Changed mulwd to mulhw along with mulwd. to mulhw.  .
- Changed mull  to mullw  along with mull. to  mullw.  .
- Changed mullo to mullwo along with mullo. to mullwo.  .
- Fixed mr (it was "ori rA,rS,0" not "or rA,rS,rS" as it should have been).
  To do the fix it was removed as an opcode and added a as a builtin macro.
  Also I added the mr. instruction (again as a macro).
- Fixed a bug in the ppc assembler instruction for dcbi first parameter.  It
  should be (rA|0) not (rA).  Changed GREG to G0REG.
- Changed lis to take an unsigned operand to force it not to check the sign.
  This is the same "add rD,0,value" who's operand was treated as unsigned.  This
  allows "lis rD,0x8000" not to get an error flagged.
- Changed m98k to ppc.

Changes for the 4.1 release (the cctools-202 release):
- Fixed a bug in the assembler's handling of signals so that only one signal
  needs to be generated to cause it to exit non-zero.  The change is in as.c
  in got_sig() (bug #67606).
- Fixed a bug in the assembler such that when it gets an error in the second
  pass it does not create the output file.  The change is in write_object.c
  in write_object() (bug #67607).

Changes for the 4.0 release (the cctools-182 release):
- Ifdef'ed !defined(__TEFLON__) out a free() call to the internal stdio buffer
  as has changed in 4.4BSD.  This change was in input-file.c in
  input_file_give_next_buffer().
- Ifdef'ed !defined(__TEFLON__) out a typedef of uint in i386.h:
    #ifndef __TEFLON__
    typedef unsigned int uint;
    #endif
  as this is defined in <sys/types.h>.

Changes for the 4.0 release (the cctools-178 release):
- Changed the work around for compiler optimizer bug #50416. The change is
  to symbols.c in the routine colon().  The expression the compiler was having
  trouble with was:
	((symbolP->sy_desc) & (~REFERENCE_TYPE)) == 0
  so symbolP->sy_desc was assigned to a volatile unsigned int temporary and
  the expression was re-written to:
	(temp & (~REFERENCE_TYPE)) == 0
  which seems to work.  The reason for no longer using the #pragma CC_OPT_OFF
  as a work around is that the sparc compiler for -dynamic does not work for
  non-optimized code (bug #58804).

Changes for the 4.0 release (the cctools-173 release):
- Picked up a fis to the sparc assembler that was ifdef'ed sparc instead of
  SPARC in layout.c .
- Picked up a fix to the i386 assembler which allows lables to have double
  quotes around them as in: call "foo".  This was a one expression change to
  an if statement in i386_operand() in i386.c when looking for a memory
  reference.

Changes for the 4.0 release (the cctools-172 release):
- Picked up the sparc changes to symbols.c that ifdef's the #pragma CC_OPT_OFF
  so that it is not turned off for sparc and the sparc compiler fails.

Changes for the 4.0 release (the cctools-170 release):
- Picked up the sparc changes to layout.c for dealing with sparc relocation
  entries which have (symbol1 - symbol2 + constant) that must be treated as
  absolute (too small for sectdiff).

Changes for the 4.0 release (the cctools-168 release):
- Picked up the sparc changes to sparc.c for the changes to internal relocation
  entries used by only the assembler.
- Picked up the sparc changes to the sizes of the symbol_stub section (32) and
  the picsymbol_stub section (60) in read.c .
- Fixed a bug in the .zerofill directive that did not propagate the align
  expresion into the section header.

Changes for the 4.0 PR1 release (the cctools-166.1 and cctools-167 releases):
- Changed it so that if -static is seen twice no complaint is printed (bug
  #53307).

Changes for the 4.0 release (the cctools-166 release):
- Added the .const_data directive for the (__DATA,__const) section (bug #53067).
- For the m68k assembler removed the -l flag which made a2@(undef) 32 bit
  offsets rather than 16 bit offsets.  Now they are always 32 bit offsets.
  This had one change in m68_ip() in m68k.c in the AOFF case when the
  expression was not a constant.  This condition was removed.  It was also
  incorrect. It was:
	if(!flagseen['l'] && flagseen['k'] && seg(opP->con1) != SEG_DIFFSECT)
  and should have been:
	if(!flagseen['l'] && (flagseen['k'] || seg(opP->con1) != SEG_DIFFSECT))
  Also in md_parse_option() the 'l' case was removed for completeness.
  This case caused bug #53010 when -dynamic was changed to the default.
- Changed the directive .mod_init_func to be in the __DATA section as it may
  will have relocation entries and may be written on by dyld.
  
Changes for the 4.0 release (the cctools-163 release):
- Changed the default to -dynamic.  This is done in as.c by setting
	flagseen[(int)'k'] = TRUE;
  which is TRUE for -dynamic and FALSE for -static.

Changes for the 4.0 release (the cctools-162 release):
- For the fix below in cctools-159 missed clearing the lazy bound bit in
  indirect_symbol_new() when the section was S_NON_LAZY_SYMBOL_POINTERS.  So
  This was added to symbols.c .

Changes for the 4.0 release (the cctools-160 release):
- Put back in the -O flag and for bug #50416 which prevents line 235 in
  symbols.c from working added has #pragma CC_OPT_OFF and  #pragma CC_OPT_RESUME
  around that routine.

Changes for the 4.0 release (the cctools-159 release):
- Fixed a problem the fix below and jbsr's on hppa which caused them to all
  be non-lazy.

Changes for the 4.0 release (the cctools-158 release):
- Fixed a bug that caused a symbol that was used both lazy and non-lazy to be
  incorrectly marked as lazy.  This happened in gmon.c for _moninitrld which
  caused the dynamic libsys not to work with profiling as it would crash as
  the call to moninitrld would jump to the common symbol moninitrld.

Changes for the 4.0 release (the cctools-154 release):
- Changed it so that if -dyanmic is seen twice no complaint is printed.
- Removed the use of nmedit now that libstuff has __private_extern__'s.

Changes for the 4.0 release (the cctools-150 release):
- Changed to allow .private_extern without -dynamic.

Changes for the 4.0 release (the cctools-149 release):
- Added setting of the S_ATTR_SOME_INSTRUCTIONS section attribute in the
  md_assemble() routines (except the i860) to mark those sections that contain
  some instructions.
- Removed the section attribute relocate at launch (S_ATTR_RELOC_AT_LAUNCH).

Changes for the 4.0 release (the cctools-138 release):
- Picked up sparc.c & sparc-opcode.h.

Changes for the 4.0 release (the cctools-137 release):
- Picked up sparc.c.

Changes for the 4.0 release (the cctools-136 release):
- Change for sparc.c which cause relocation entries for call instructions to
  localy defined symbols to be emitted.

Changes for the 4.0 release (the cctools-135 release):
- Fix for Tracker 41317 [as(hppa) : does not support cache control hints.]
  as/hppa.c and as/hppa-opcode.h changed to add new parsing rule characters
  for cache control hints. The general format of the insruction supporting
  cache control hints is :
    <opcode>, cmpltr,cc  <operands>
 Here cmpltr can be <none>, in which case the formats supported are :
    <opcode>,,cc  <operands> or
    <opcode>,cc  <operands>
 The parser will take care of both.

Changes for the 4.0 release (the cctools-134 release):
- Picked up the sparc changes to the sparc.c.

Changes for the 4.0 release (the cctools-133 release):
- Picked up the sparc changes to the sparc.c and sparc-check.c.

Changes for the 4.0 release (the cctools-132 release):
- Picked up the sparc changes to the sparc.c.
- Picked up the sparc changes to the write_object.c for putting out the
  relocation entries.
- Picked up the sparc changes to the comments in fixup_section() in layout.c.
- Picked up the sparc s_seg() routine in read.c.
- Picked up the sparc-check stuff in the Makefile and sparc-check.c.
- Made the assembler ProjectBuilder aware and send its error and warning
  messages to ProjectBuilder (bug #40745).
- Added -dynamic to eventually replace -NEXTSTEP-deployment-target 3.3 and
  -static to eventually replace -NEXTSTEP-deployment-target 3.2.  Changed all
  the incompatiblity error messages to use -dynamic.

Changes for the 3.3 release (the cctools-131 release):
- Fixed a bug in md_estimate_size_before_relax() in i386.c that caused all
  branches to be long.  The problem was with the change ti a full Mach-O
  assembler the test for symbols in the section changed and the code was not
  changed (bug #43745).

Changes for the 3.3 release (the cctools-128 release):
- Picked up the bug fix for 42587 made in cctools-119.1 for the 3.2hp release.
  "Hangs if tried to enter a register number in hex format".  The test case
  is the instruction "ldcwx 0xc(0,%r1),%r2".

Changes for the 3.3 release (the cctools-127 release):
- Changed the hppa picsymbol_stub size to 32 bytes.
- Changed the order of the output of the assembler's symbolic info to this:
    relocation entries (by section)
    indirect symbol table
    symbol table
    string table
- Moved the sparc assember to /usr/local/bin for now (bug #42033).

Changes for the 3.3 release (the cctools-122 release):
- Had to give up on checking indirect symbol because the m68k pic symbol stubs
  generate machine dependent frags that get relaxed later.  The code in symbol.c
  in indirect_symbol_new() was ifdef'ed CHECK_INDIRECTS which is off.
- Fixed another bug in the m68k assembler when trying to parse '#L0-"x:y:z"'
  in crack_operand() in m68k.c.  It needed to know about "'ed symbol names to
  correctly step over them.
- Fixed a bug that showed up in the m68k assembler when trying to assemble the
  expression in the instruction: 'addl #L0-"L1",a1' .  This is a problem in the
  way get_symbol_end() works and is used.  get_symbol_end() writes a '\0' on the
  symbol's trailing " which does not get replaced with a " later.  So I fixed
  This on in operand() when it calls get_symbol_end() and it knows the name
  started with a ".  Later when it is replacing the character returned from
  get_symbol_end() back into input_line_pointer it also replaces the " if the
  name started with a ".  This a may have to be done in other places some day.
- Fixed a bug in indirect_symbol_new() where we first see if the last frag
  recorded for an indirect symbol turned out to be zero sized then changed that
  recorded frag to the next non-zero frag in the list.  I think this happens
  because we record the frag before we fill it and if we run out of space that
  frag gets a zero size and a new one is created.
- Added the flag -NEXTSTEP-deployment-target which takes either 3.2 or 3.3 as
  arguments.  With 3.3 it turns on the -k flag.  Also the warnings about
  incompatible features that printed -k were changed.

Changes for the 3.3 release (the cctools-120 release):
- Fixed a bug in that caused the symbol table to be trashed when -L was used and
  the input file had a global symbol that started with 'L'.  The fix was in
  layout_symbols() in write_object.c that corrected the assumption that all 'L'
  symbols were non-external.
- Fixed a bug in the i386 assembler that did not allow symbols like "[Foo bar:]"
  to be parsed as operands.  This fix was made in i386.c, first was to add "
  to operand_special_chars[] array, second was to add some code in md_assemble()
  in the loop that parses operands to scan for the ending " if an operand has
  one.
- Set the sizes for the i386 .symbol_stub and .picsymbol_stub to 24 and 26.

Changes for the 3.3 release (the cctools-119 release):
- Picked up first round of changes for the sparc target.  This work is
  incomplete.

Changes for the 3.3 release (the cctools-116 release):
- Fixed a bug when -n is used on a file containing just a .zerofill directive
  the assembler core dumped indirecting through frag_now in layout_addresses()
  in layout.c.  A check for frag_now being NULL was added.
  
Changes for the 3.3 release (the cctools-115 release):
- Changed the way the m68k assembler handles the operand "pc@(symbol-.)" to
  make the value of "." the value of the instruction after the opcode.  This
  is needed so that when this operand is used in a symbol stub to reference the
  lazy pointer an any offset in the expression "symbol1-symbol2+offset" will
  correctly apply to symbol1 and the check in the link editor can figure out
  which lazy pointer is being referenced by the relocation entry.
- Fixed a bug in indirect_symbol_new() when a section changed occured between
  .indirect_symbol directives it thought it was a bad or missing indirect
  symbol.  This was because there were zero length frags created on the section
  change.  Code was added to find the last real frag by skiping the zero length
  frags at the end.

Changes for the 3.3 release (the cctools-112 also 111.1 release):
- Picked up a fix for the hppa assembler that caused (bug #39710):
	comib,<> 0,%r19,LBE2
	nop
	nop
	nop
	nop
    LBE2:
	nop
  Not to assemble correctly as it didn't do the relocation.  The fix was in
  hppa.c where the following constant was stuff in char field which it does not
  fit:
    32c32
    < #define HPPA_RELOC_12BRANCH (127) /* only used internal in here */
    ---
    > #define HPPA_RELOC_12BRANCH (1000) /* only used internal in here */
- Fix a bug in the hppa assembler (bug 40043) that did not assemble 
  "ble R`0xc0000004(%sr4,%r1)" correctly.  The code noticed that the expression
  was absolute but failed to remember the instruction takes a word (not a byte)
  displacement.  In hppa.c:
    804c804
    <                                       dis_assemble_17(im14>>2,&w1,&w2,&w);
    ---
    >                                       dis_assemble_17(im14,&w1,&w2,&w);

Changes for the 3.3 release (the cctools-111 release):
- Fixed a bug in parsing octal characters \ooo out of strings that would not
  stop after picking up at most 3 characters and not stop if the digit was not
  an octal digit.  The fix was in next_char_of_string() in read.c (bug #39363).
- Fixed a bug in the i386 assember that the instruction "call 0" caused the
  assembler to core dump.  The fix was to md_assemble() in i386.c at line 1352
  where an SEG_ABSOLUTE has a NULL i.disps[0]->X_add_symbol which was not tested
  for.  This was in the code that caused relocation entries for calls to be
  generated for scattered loading.
- Fixed a bug when an unlink() was needed before the creation of the output
  file so that clones are handled correctly.  The fix was in write_object()
  at the end just before the call to open().
- Fixed a bug in the native hppa assembler that put an extra 4 bytes of zero in
  the text section.  The problem was caused by frags being aligned to the
  default which turns out to be 8 on the hppa in the obstack code.  The fix was
  to change the obstack_begin() call in section_new() in sections.c to use
  _obstack_begin() and specifiy a 4 byte alignment.

Changes for the 3.3 release (the cctools-108 release):
- Fixed a bug for the i386 which caused scattered loading not to work because
  it did not create a relocation entry for local calls to symbols that were in
  the output file.  The change is at line 1352 in i386.c in md_assemble().

Changes for the 3.3 release (the cctools-104 release):
- Changed the code from using COMPAT_NeXT3_2 ifdef's to using flagseen['k'] and
  requiring -k when the new incompatable features are being used.
- Fixed a bug in the JBSR relocation type for non-external relocation types
  where the other_part (stored in the r_address of the pair) which is an offset
  from the start of the section address had the base address of the section in
  it (the fix was to subtract sect_addr in this case in at the end of 
  fix_to_relocation_entries() in write_object.c in the JBSR case).
 - Fixed a 3.2 compatiblity problem introduced with putting the symbol table
  before the relocation entries which caused strip not to work since the
  symbol table and string table were not at the end of the file.  A set of
  #ifdef COMPAT_NeXT3_2 were added to write_object.c when assigning the 
  offset to the symbol table.
- Added the use of the reserved1 field in the section header for indirect
  sections to be the index into the indirect symbol table for that section.
  One line change in layout_indirect_symbols() in write_object.c.

Changes for the 3.3 release (the cctools-103 release):
- Fixed a bug in s_lcomm() in read.c that did not propagate the alignment to
  the section header leaving the bss section with an alignment of 0 and failing
  to align the starting address of the section.

Changes for the 3.3 release (the cctools-102 release):
- Integrated in the hppa support.
  * Added the SECTDIFF support for the hppa with the HI21 and LO14 SECTDIFF
    relocation types.
  * Fixed the use of calc_hppa_HILO() in md_number_to_imm() in hppa.c to
    correctly pass the symbol value and offset value as the two first
    parameters.
different as/Mach-O.c (integrated for cctools-102, logicly into write_object.c)
     Using cctoolshppa-37 with diffs minimized for format changes.  New stuff
     for hppa relocation entries.
different as/Makefile (integrated for cctools-102)
     Using cctoolshppa-37 with diffs minimized for format changes.  New stuff
     for hppa assembler and new hppa files.
  Changes for cctools-102
     Added -DNEW_FORMAT to ahppa_test target's COPTS.  Removed ASFLAGS=-W from
     ahppa_test target.
different as/app.c (started integrating for cctools-102)
     Using cctoolshppa-37. Has a bunch of code to deal with field selectors
     (of the form L'expression) the code has comments about a BUG to be fixed.
  Changes for cctools-102
     Picked up 4 additional "#if ... defined(HPPA)" so '@' can be used as a
     statement separator and // used as a comment.
     Not picked up: the field selectors stuff.  In talking to Umesh he said this
     was no longer needed as they changed from L' to L` for field selectors.
different as/as.c (integrated for cctools-102)
     Using cctoolshppa-37. New stuff for hppa cputype, CPU_SUBTYPE_HPPA_ALL and
     -arch hppa.
different as/read.c (no changes for cctools-102)
     Two real changes plucked from cctoolshppa-37:
     1) Add the include hppa.h ifdef'ed HPPA
     2) Also there is an issue with the completer ",=" not being treated as an
	assignment.  The cctools-100 changes appear to also fix this.
     There still is a bug with spaces around "=" for assignments.
     The cctools-100 changes have fixed this.
different as/write.c (integrated for cctools-102, this now in write_object.c)
     One real changes plucked from cctoolshppa-37:
     1) Add the include hppa.h ifdef'ed HPPA
Only in cctoolshppa-37/as: hppa-aux.c (picked up for cctools-102)
    Pick up cctoolshppa-37/as/hppa-aux.c from cctoolshppa-37.
Only in cctoolshppa-37/as: hppa-aux.h (picked up for cctools-102)
    Pick up cctoolshppa-37/as/hppa-aux.h from cctoolshppa-37.
Only in cctoolshppa-37/as: hppa-check.c (picked up for cctools-102)
    Pick up cctoolshppa-37/as/hppa-check.c from cctoolshppa-37.
Only in cctoolshppa-37/as: hppa-ctrl-func.c (picked up for cctools-102)
    Pick up cctoolshppa-37/as/hppa-ctrl-func.c from cctoolshppa-37.
Only in cctoolshppa-37/as: hppa-ctrl-func.h (picked up for cctools-102)
    Pick up cctoolshppa-37/as/hppa-ctrl-func.h from cctoolshppa-37.
Only in cctoolshppa-37/as: hppa-opcode.h (picked up for cctools-102)
    Pick up cctoolshppa-37/as/hppa-opcode.h from cctoolshppa-37.
Only in cctoolshppa-37/as: hppa.c (picked up for cctools-102)
    Pick up cctoolshppa-37/as/hppa.c from cctoolshppa-37 and changed
    HPPA_RELOC_NORELOC to NO_RELOC in three places.
  Changes for cctools-102 to allow hppa.h to be removed:
	were to add these lines:
	#include <mach-o/hppa/reloc.h>
	#define HPPA_RELOC_12BRANCH (1000) /* only used internal in here */
Only in cctoolshppa-37/as: hppa.h (NOT picked up for cctools-102)
    Pick up cctoolshppa-37/as/hppa.h from cctoolshppa-37 and change:
    Changed lines 33 and 34 from:
	#define    NO_RELOC             HPPA_RELOC_NORELOC
	#define    HPPA_RELOC_12BRANCH  (HPPA_RELOC_NORELOC + 1000)
    to:
	#define    NO_RELOC             0x10 /* out side the range of r_type:4*/
	#define    HPPA_RELOC_12BRANCH  (NO_RELOC + 1000)
    So HPPA_RELOC_NORELOC could be removed from mach-o/hppa/reloc.h .

    Removed line 38 which was:
	extern int next_char_of_string();
    It is static in read.c and was changed for no apperent reason.

Changes for the 3.3 release (the cctools-101 release):
- Second major round of changes for the new shlib stuff.
  1) Added the LC_DYSYMTAB load command to the object file format and
     organization of the symbol table and string table as well as the layout
     of the relocation entries.
  2) Added the support for the indirect symbol sections and stub sections.  This
     added 3 new types of sections, some new section directives, and indirect
     symbols and the creation of the indirect symbol table and marking of
     symbols as lazy bound undefined.
- For the m68k fixed the code in m68k_ip() for the "Bg", "Bw", and "Bc" branches
  as many parts did not work.  Now things like "bra foo:w" works.  To make this
  work m68k_ip_op() was changed to not strip off the ":w" and not set the 
  opP->isiz field but to use get_num() and use the e_siz field.  This only
  effected the ABSL case.
- Made a bit of an ugly fix for "jbsr foo:w" and "jra foo:w" which is trying to
  force the word from.  So to make this always work when foo is an absolute
  number that fits in a word the instruction is changed from the "bsr" form to
  the "jsr" form (or from the "bra" to "jmp") which does not use a displacement
  and is not effected by the address of the instruction.

Changes for the 3.3 release (the cctools-100 release):
- First major round of changes for the new shlib stuff.
  1) Major restructuring and clean up for support of a true Mach-O assembler
     which includes .section and .zerofill directives for arbitrary sections.
  2) Support for possition-independent code through the SECTDIFF relocataion
     type (these changes are ifdef'ed COMPAT_NeXT_3_2 as the will produce
     object files that are incompatible with the 3.2 release).
  3) Support for .private_extern directive (again ifdef'ed COMPAT_NeXT_3_2).
- Fixed a bug in try_to_make_absolute() which when changing an expression to
  absolute did not set the add_symbol and subtract_symbol fields to NULL which
  caused the wrong fixup to be done that used the expression with a fixup
  (bug #37382).

Changes for the 3.2 release (the cctools-25 release):
- Added forms of shld and shrd with two operands that imply the cl register.
- Added missing opcode table entries for the i386 instructions fcom and fcomp
  with no arguments in i386-opcode.h.
- Fixed "0: jmp 0b" which did not work, 0 was the problem in the 0b (1-9 work).
  This was a problem in operand() in expr.c when 0b... expressions were added
  (bug #8331) and the fix was to look to see of the next character was the end
  of the line or not a hex digit.

Changes for the 3.1 release (the cctools-20 release):
- Fixed a bug for the m98k that did not correctly check for too few parameters.
  Two bugs here one in calcomp that was testing != NONE which should have been
  == NONE and a bug in md_assemble in advanceing past the '+' or '-' when it
  did not exist and there was nothing but a '\0' after the op it advanced past
  it.

Changes for the 3.1 release (the cctools-16 release):
- Fixed a bug with the m98k opcodes for stwcx. stdcx. where bit 0 was not set
  to a 1.
- Changed the following instructions so that for the SH field the value 32 (or
  64) assembles as 0: rldicl rldicl.  rldicr rldicr.  rldic rldic.  rldimi
  rldimi.  rlwinm rlwinm.  rlwimi rlwimi.
- Fixed a bug in the m98k assembler where the value of exprressions which was
  exactly (1 << width) was not treated as an error (4 places > was changed to
  >= in m98k.c).

Changes for the 3.1 release (the cctools-15 release):
- Moved the m88k and m98k to be install in /usr/local/lib not /lib.
- Fixed a bug in the m98k assembler that did not detect instructions with too
  many parameters.
- Added macros and register names for batX[ul] the same as ibatX[ul] since the
  601 does not have split i and d for these.
- Changed the m98k instruction's "icbi" first paramenter to G0REG from GREG.
- Back out the below fix and added new code in try_to_make_absolute() that
  walked the frags between the the symbols L0 and L1 to calculate the absolute
  value.
- Fixed a bug where the expression L1-L0 was not coming up right when it had a
  .align between L0 and L1.  A hack was removed from try_to_make_absolute() in
  expr.c that had the code ifdef out that was trying to say the expresion could 
  change due to relaxation.  The the routine s_align() in read.c was ifdef
  RISC to do the alignment instead of creating an align frag.

Changes for the 3.1 release (the cctools-14 release):
- Added a form of fcmpu and fcmpo that takes a crX as it's first argument.
- Added the opcodes for tlbiex (31,338) and tlbia (31,370).
- Fixed a bug in the m68k assembler where the code to handle implementation
  specific instructions had || in two places where && was supposed to be.
  The change was on lines 2693 and 2706 in md_assemble() in m68k.c .
- Changed the m98k instructions: lwarx, ldarx, stwcx. and stdcx. second arg from
  GREG to G0REG.
- Fixed the Makefile to install the m98k assembler it built.

Changes for the 3.1 release (the cctools-13 release):
- Added the m98k (PowerPC) architecture.

Changes for the 3.1 release (the cctools-10 release):
- Changed the default .include directories to /NextDeveloper/Headers and
  /LocalDeveloper/Headers in as.c and made them work (the default never
  worked).
- Corrected the following table entries for i386 floating point instructions
  which had a FloatD or'ed into them which was wrong: faddp, fmulp.
- Fixed a bug that caused an error message that a segment override was specified
  more than once for string instructions for the i386.  The fix was in i386.c
  where i.seg was need to be set to zero after the string instruction operands
  were parsed (bug #29867).
- Fixed the assembler driver /bin/as to take machine specific architecture
  flags and run the family architecture named assembler.  So "as -arch m68040"
  will run /lib/m68k/as and not /lib/m68040/as.
- Changed the handling of the cpusubtypes to support this design:
    The design allows each architecture family (m68k, m88k, i386) to have a
    cpusubtype that will run on all implementations of that architecture and
    have cpusubtypes that will run only on specific implementations of an
    architecture.  The design also gives the programmer the option to force the
    cpusubtype indicating all implementations (at build time with a flag) when
    using instructions that are implementation specific leaving it up to the
    program to runtime select the correct code to execute.
  The assemblers implementation of this design is:
    By default the assembler will produce the cpusubtype ALL for the object file
    it is assembling if it finds no implementation specific instructions.  Again
    by default the assembler will allow implementation specific instructions for
    implementations and combine the cpusubtype for those specific
    implementations.  The combining of specific implementations is architecture
    dependent and may not be allowed for some architectures and are flagged as
    an error.  With the optional -force_cpusubtype_ALL flag all instructions
    are allowed and the object file's cpusubtype will be ALL.
    If an -arch flag for a specific implementation (ie. -arch m68040 or -arch
    i586) is used the assembler will flag as errors instructions that are not
    supported on that architecture and produce the cpusubtype for that specific
    implementation in the object file (even if no specific instructions are
    used).
  This effected as.c, as.h, Mach-O.c, m68k.c, m68k-opcode.h, i386.c, i386.h, and
  i386-opcode.h.  The m88k and i860 assemblers had no machine specific
  modifications.

Changes for the 3.1 release (the cctools-9 release):
- Fixed a bug that caused the .include feature to fail in some cases.  The value
  of the stuff saved by save_scrub_context() in app.c was not reset which caused
  the app preprecessor to start parsing the included file and think it was in
  the case of a string.

Changes for the 3.1 release (the cctools-8 release):
- Fixed a bug the did not cause m68k floating point branchs to undefined symbols
  to have relocation entries that make it to the object file to work with
  scattered loading.  On line 3299 in m68k.c was:
	fix_new(fragP,(int)(fragP->fr_fix),4,fragP->fr_symbol,
		(symbolS *)0,fragP->fr_offset+4,1);
  changed to:
	fix_new(fragP,(int)(fragP->fr_fix),4,fragP->fr_symbol,
		(symbolS *)0,fragP->fr_offset+4,1+2);
- Fixed a bug in the i386 assembler for these two instructions where the segment
  override did not get picked up from:
	mov	%eax,%gs:sr_mem_offset
	jmp	%gs:sr_mem_offset
  The first is bug #29555 the second is just another form of the same logic bug
  in another place.  There maybe more of this same logic bug.  The fixes are in
  i386.c in md_assemble() when putting out the opcode.
- Fixed a bug in the string instructions where segment overrides in the operand
  fields were not picked up.  To do this the kludge that ignored the operands
  of string instructions had to be removed as special case table entries and
  matching checking had to be added (bug #26409).
- Fixed a bug in the i386 assembler where the invlpg instruction did not take
  a Mem operand (it was Mem32).  The fix was in the table entry for invlpg in
  i386-opcode.h (change requested by the Lono group).  The manual is confusing
  on this instruction.
- Fixed a bug in the i386 assembler where a call or jmp instruction to an
  absolute address was not getting put out pc relitive and no relocation entry
  was produced (line 1050 and line 1155 in i386.c).
- Fixed the problem of getting alignment correct for .align directives that are
  greater than the default alignment.  This effected the struct frchain in
  subsegs.h, the routine set_section_align() in Mach-O.c and the routine
  write_object_file() in write.c and the initialization of the new field in
  subsegs.c (bug #29432).
- Changed the I386 bound instruction such that the parameters are consistant
  with gas (reversed them).  Also fixed the boundw so it only put out one '0x66'
  data16 prefix byte.
- Fixed a bug for the I386 that padded the text section with zeros (changed to
  pad with nops) in write.c.
- Added the wait (0x9b) prefix to the following instructions: "finit", "fstcw",
  "fstsw", "fclex", "fstenv" and "fsave" the "XnXXX" form does not have the
  wait prefix.
- Added "fucom" as an alias for "fucom %st(1)"
- Added "fucomp" as an alias for "fucomp %st(1)"

Changes for the 3.1 release (the cctools-7 release):
- Added the i486 and i586 specific stuff to i386-opcode.h (bug #27475).  The
  changes are ifdef'ed i486 and i586 and these are turned in in the Makefile.
  Also the define STRICT_i586 is ifdef'ed (but not defined) where the i586 does
  not allow certian things (test register instructions).
- Fixed a bug in md_assemble() in i386.c where the instruction "mov %ah,%al"
  would assemble wrong.  The problem was when the suffix was selected based
  on the register type the "i.types[o]" needed to and'ed with `Reg' because
  %al and %ax have `Acc' in their types and they were coming up with a 'l'
  suffix.  This is ifdefed NeXT.
- Fixed a bug in m68k_reg_parse() in m68k.c where the registers "ic", dc" and
  "bc" were incorrectly parsed because of an "if (c2 = 'c')" (bug #27954).
- Added an ifdef CHECK_WORD_IMMEDIATES in m68k.c and code to make checking of
  16-bit immediates consistant in the m68k assembler (bug #26863).  Also to make
  this work the "link" (no suffix) for an immediate word entry in m68k-opcode.h
  had a new "place" character created for it (#z for #w) and code was added to
  m68k.c to handle it.  The define CHECK_WORD_IMMEDIATES is left off to cause
  truncation of too large immediate words.
- Fixed a bug that did not allow -arch and -arch_multiple (as.c).  This was
  put in to the NRW cctools-6 but not into lono's.

Changes for the 3.1 release (the cctools-6 release):
- Added the -arch_multiple flag that will cause one line to printed before all
  error messages which will contain the architecture name.
- Fixed the m88k pmul and punpk instructions where the last register is not
  required to be an even register.
- Fixed a bug in atof-ieee.c in gen_to_words() that did not round IEEE denorms
  correctly and caused the smallest denorm to become zero (bug #23178).

Changes for the 3.1 release (the cctools-5 release):
- Picked up the lono team's cctools-4_2 i386-opcode.h .
- Added the pseudo op for the m88k assembler ".dot symbol" that sets the value
  of the location counter into the value of the symbol.
- Removed the trnc.x mnemonic as it is not legal "trnc.sx" is the correct form
  which remains in m88k-opcode.h
 { 0x8400d900, "trnc.x",      { {21,5,REG},      {0,5,XREG},   {0,0,NIL}   } },

Changes for the 3.1 release (the cctools-4 release):
- Fixed a bug in parse_cst() in m88k.c that did not allow expressions for
  constant operands.  This bug was found with "tb0 0,r0,(129)" where the
  ()'s caused the problem. (bug #21052)
- Changed installing the i386 assembler into /lib/i386/as from ix86 (and changed
  the -arch name to i386).
- Changed CPU_TYPE_I80x86 to CPU_TYPE_I386 in Mach-O.c
- Picked up the changes for the i386 assembler to allow scattered loading from
  the lono team.

Changes for the 3.0 release (the -57 compiler release)
- Removed the following opcodes from m88k-opcode.h as siff(1) and the newest
  110 manual says they are not valid.
 { 0X840008A0, "fcvt.dd",     { {21,5,REG},      {0,5,REG},    {0,0,NIL}   } },
 { 0X840088A0, "fcvt.dd",     { {21,5,XREG},     {0,5,XREG},   {0,0,NIL}   } },
 { 0X84000800, "fcvt.ss",     { {21,5,REG},      {0,5,REG},    {0,0,NIL}   } },
 { 0X84008800, "fcvt.ss",     { {21,5,XREG},     {0,5,XREG},   {0,0,NIL}   } },
 { 0X84000800, "fcvt.ss",     { {21,5,REG},      {0,5,REG},    {0,0,NIL}   } },
 { 0X84008800, "fcvt.ss",     { {21,5,XREG},     {0,5,XREG},   {0,0,NIL}   } },
  (bug #20021)
- Fixed a bug introduced with the change of the SUB_SEGMENT_ALIGN.  It turns
  out it broke the objective-C runtime that assumed that the __protocol section
  (amoung others) can be indexed like an array of structs which are not
  multiples of 8 bytes.  The fix was to align all objective-C sections to 4
  bytes.  Again the change was in write_object_file() in write.c (bug #20022).

Changes for the 3.0 release (the -56 compiler release) (performance month):
- Changed the order of the objective-C sections.  The message_refs and the
  cls_refs section were switched.  The meta_cls_refs section was removed.
  This change effected Mach-O.c, write.c and read.c.
- Changed write_object_file() in write.c to used the normal subsegment
  alignment:
    #ifdef RISC
    #define SUB_SEGMENT_ALIGN (3)
    #else
    #define SUB_SEGMENT_ALIGN (2)
    #endif
  and handle the literal pointer sections special (by knowing their subsegment
  values).  This fixes a problem on the m88k where the const section had a
  .align 3 directive but started on a align of 2 boundary.  This still has
  the problem if a section has an align greater 3 the data in the output file
  will end up aligned correctly but the section start will not resulting in
  the link edited object to having the data not aligned correctly. (bug #19492)

Changes for the 3.0 release (the -55 compiler release) (performance month):
- Changed the Makefile to install the driver in /usr/local/bin and the 68k
  assembler in /bin/as and all other assemblers in /usr/local/lib/* .
- Changed the as driver (driver.c) to look in /lib and in /usr/local/lib for
  assemblers.
- Changed the order of the objective-C setions to:
    2  (__OBJC,__class)
    3  (__OBJC,__meta_class)
    4  (__OBJC,__string_object)
    5  (__OBJC,__protocol)
    6  (__OBJC,__cat_cls_meth)
    7  (__OBJC,__cat_inst_meth)
    8  (__OBJC,__cls_meth)
    9  (__OBJC,__inst_meth)
    10 (__OBJC,__cls_refs)
    11 (__OBJC,__meta_cls_refs)
    12 (__OBJC,__message_refs)
    13 (__OBJC,__class_names)
    14 (__OBJC,__module_info)
    15 (__OBJC,__symbols)
    16 (__OBJC,__category)
    17 (__OBJC,__meth_var_types)
    18 (__OBJC,__class_vars)
    19 (__OBJC,__instance_vars)
    20 (__OBJC,__meth_var_names)
    21 (__OBJC,__selector_strs)
  Also the special casing of the objective-C section in determing to created a
  scatter or non-scattered relocation entry was removed for all but the
  (__OBJC,__selector_strs) section.  The directive ".objc_selector_refs"
  is still there and the cc-55 compiler will be changed to use the correct
  directive ".objc_message_refs" and then this can be removed.  These changes
  effected read.c and Mach-O.c

Changes for the 3.0 release (the -54 compiler release) (performance fortnight):
- Added three string sections to the Objective-C segment:
	.objc_class_names,	__OBJC __class_names
	.objc_meth_var_names,	__OBJC __meth_var_names
	.objc_meth_var_types,	__OBJC __meth_var_types
  This effected read.c and Mach-O.c.
- Added the following lines to i386-opcode.h at the request of the lono guys:
    {"repz", 0, 0xf3, _, NoModrm, 0, 0, 0},
    { "repnz", 0, 0xf2, _, NoModrm, 0, 0, 0},
  Plus allow .word on the ix86 (ifdef added in read.c).
- Added const to lex_type, is_end_of_line, potable in read.c to make read-only.
- Added const to op_encoding in expr.c to make read-only.
- Added const to m68k_opcodes and endop in m68k-opcode.h to make read-only.
- Changed in_buf in input-file.c to allways be malloc()'ed.
- Added const to the Makefile for the next_version.c echo line.

Changes for the 3.0 release (the -51 compiler release):
- Changed Mach-O.c to pad out the string table to a multiple of 4 and set the
  padded bytes to '\0'.

Changes for the 3.0 release (the -50 compiler release):
- Changed the instructions f[sd]sqrtx for operands FPm,FPn and FPm to f[sd]sqrt
  (without the trailing 'x').  This was just wrong (but the moto opcode is
  inconsistant with all others in this case).
- Fixed a bug in the fsincos instruction where the FPc and FPs registers were
  switched in the instruction.
- Changed the order of the objective-C classes to:
__class		- always written on
__meta_class	- always written on
__string_object	- always written on
__protocol	- always written on
__cls_meth	- sometimes written on
__inst_meth	- sometimes written on
__cat_cls_meth	- sometimes written on <these will not be used soon>
__cat_inst_meth	- sometimes written on <these will not be used soon>
__cls_refs	- sometimes written on (uniqued) <these are not used now>
__meta_cls_refs	- sometimes written on (uniqued) <these are not used now>
__message_refs	- sometimes written on (uniqued)
__symbols	- never written on
__category	- never written on
__class_vars	- never written on
__instance_vars	- never written on
__module_info	- never written on
__selector_strs	- never written on (uniqued)
  The six sections starting from the __string_object section were effected.
  The change was made in read.c and Mach-O.c .

Changes for the 3.0 release (the -49 compiler release):
- Fixed a bug where the assembler was padding literal pointer sections with a
  zero for RISC machines and causing the link editor to complain.  The fix was
  to change the macro SUB_SEGMENT_ALIGN from 3 to 2 in write.c and to set the
  alignment of S_LITERAL_POINTER sections in Mach_O.c to 2.
- Fixed the passing and using of RC_CFLAGS correctly in the Makefile.

Changes for the 3.0 release (the -49 compiler release):
- Changed the Makefile to meet the RC api.

Changes for the 3.0 release (the -47 compiler release):
- Added the missing 040 "ptest[rw] An@" instructions.
- Changed the constant CPU_TYPE_I386 to CPU_TYPE_I80x86 to match header file.
- Changed the behavior so if warning message is produced (with as_warn()) that
  an object is not produced.  The change was in as_warn() in messages.c and is
  ifdef'ed NeXT which sets bad_error to 1 just like as_bad(). (bug #16137 and
  #16044)
- Added the (__OBJC,__string_object) section with the directive
  .objc_string_object (read.c and Mach-O.c where changed).

Changes for the 3.0 release (the -44 compiler release):
- Created an assembler driver to be placed in /bin/as and the assemblers are
  then moved to /lib/<arch_flag>/as .   The Makefile was updated to build and
  install this way.  as.c was changed to take "-arch <arch_flag>" and check it
  against the type of assembler it is.
- Switch over to the new header file organization.

Changes for the 3.0 release (the -43 compiler release):
- Changed the Makefile to install the i860 assembler in /usr/local/bin/as860 .
- Picked up md.h from 1.38.1 which added const to md_pseudo_table and
  md_relax_table so i860.c, m68k.c and m88k.c were all updated as were the
  uses in read.c and write.c.
- Picked up the files: i386.c, i386.h and i386-opcode.h from the 1.38.1 release.

Changes for the 3.0 release (the -39 compiler release):
- Fixed so that strings can have characters with the 8th bit set in them. This
  involved adding the lines in next_char_of_string() in read.c:
    #ifdef NeXT /* allow 8 bit chars in strings */
      c = (c & MASK_CHAR); /* to make sure the 0xff char is not returned as -1*/
    #endif NeXT
  so that the high bit does not get sign extened and the -1 return code that is
  tested for at the call sites as >= 0 is not tripped over.
  Second changed all 8th bit set chars in lex_type[] in read.c to be allowed in
  names.  Also had to change the macros in read.h
    #define is_name_beginner(c)     ( lex_type[(c) & 0xff] & LEX_BEGIN_NAME )
    #define is_part_of_name(c)      ( lex_type[(c) & 0xff] & LEX_NAME       )
  to add the "& 0xff" because of the sign extension of chars (bug #15597).

Changes for the 3.0 release (the -37 compiler release):
- Fixed the relocation entries for the 88k so that 88k objects can be scatter
  loaded by the link editor.  This involves adding a PAIR relocation entry for
  the LO16 type (as well as having one for the HI16 type) and moving the place
  in the relocation entry where the other half of the relocatable expression is
  store from the r_symbolnum field to the r_address field (so that a scattered
  relocation can be used, since it does not have an r_symbolnum field).  Also
  removed all support for signed immediates on the 88110 since NeXT will not
  use this feature.  Also to be consistant the i860's PAIR's will also use the
  r_address field even though they will not use scattered relocation entries.
  These changes were made in Mach-O.c .
  Also required forcing relocation entries for non-local labels for 88k branch
  instructions which was done with the same kludge as the 68k by setting the
  0x2 bit in the fx_pcrel fix structure when it is created in m88k.c in
  md_assemble().  This also required an extra ifdef M68k in Mach-O.c in 
  fix_to_relocation_info() when choosing to put out a scattered relocation
  entry because of the way 68 branch instructions work.

Changes for the 3.0 release (the -36f compiler release):
- Fixed a bug that did not catch a bit field expression error between the <>'s.
  A check for the trailing '<' was missing.  This was added in parse_bf() in 
  m88k.c .
- Fixed the .abs directive for 88k registers.  The fix was for it to handle
  scaled register expressions and also not generate an undefined symbol for the
  register name "U r1".  The changes were to m88k.c adding s_m88k_abs() for the
  .abs pseudo-op and to read.c to leave s_abs() but to ifdef it out of the
  table for the 88k as s_m88k_abs() uses s_abs().
- Corrected the lex_type table in read.c to not allow the character '[' as
  part of a name.
- Added '@' as a statement separator for the 88k (change the "# <line> <file>
  <level>" stuff to use it when generating ".line <line> @ .file <file>" ).
  Changed app.c and read.c ifdef'ed M88K.  Also s_reg(), s_scaled() and
  no_delay() in m88k.c also need this because they can't use the macros in
  read.c .
- Added the .no_delay 88k pseudo-op.  Changed m88k.c and m88k-opcode.h to add
  the delay_slot field to the instruction table and a static variable,
  in_delay_slot, that gets set each time an instruction is assembled.
- Fixed a bug not allowing macro names to start with '.' .  The fix was in
  read.c in parse_a_buffer() right before it detects an unknown pseudo-op.
  Also change it so the unknown pseudo-op is printed when an error happens.
  Also changed s_macro() in read.c to print a warning if a known pseudo-op name
  is used a macro name.

Changes for the 3.0 release (the -36e compiler release):
- Fixed a bug where the operand "pc@" did not assemble correctly.  The fix was
  in m68_ip() in m68k.c on linr 1604 for the "case AINDR" which can be set with
  PC in the opP->reg.  In this case the mode pc@(d16) is used.  This is ifdef'ed
  NeXT.
- Fixed a bug where "foo :" did not recognize "foo" as a label.  The fix was in
  app.c in do_scrub_begin() where the line:
	lex [':'] |= LEX_IS_LINE_SEPERATOR;
  was ifdef'ed out since ':' did not work.  But ...  This DOES not cause ':' to
  be a LINE SEPERATOR but does make the second if logic after flushchar: in
  do_scrub_next_char() to handle "foo :" and strip the blanks.  This is the way
  has always been and must be this way to work.

Changes for the 3.0 release (the -36d compiler release):
- Fixed a bug in the 88k assember that did not handle "# <line> <file> <level>"
  comments correctly because it uses ";" which is a comment and the .file gets
  ignored.  The fix was ugly.  The change was to app.c and read.c ifdef'ed M88K
  to allow '\001' as a statement seporator (CHANGED IN -36f see above).
- Changed the marking of literal sections from not marking them for RISC to
  not marking them for only the I860.  This change is since the 88k compiler
  will ALLWAYS make a 32 bit reference to an item and leave it to the link
  editor to find ways to make 16 bit references these sections can marked for
  uniqueing for the 88k.
- Added the following directives for the following new sections:
    .constructor for __TEXT, __constructor
    .destructor for __TEXT, __destructor
    .objc_protocol for __OBJC, __protocol
    .objc_cls_refs for __OBJC, __cls_refs (S_LITERAL_POINTERS)
    .objc_meta_cls_refs for __OBJC, __meta_cls_refs (S_LITERAL_POINTERS)

Changes for the 3.0 release (the -36c compiler release):
- Fixed a bug involving expressions with unknown symbols for operators other
  than '+' or '-'.  The problem is that in expr() in expr.c if an expression
  operator is something other than '+' or '-' then it sets the need_pass_2
  flag and no other "frags" (bytes of output) are generated.  You would think
  it would want to run another pass but the code doesn't do that (major bug)!
  So now it just does what it would in the case the symbol is known which is
  report the expression can't be relocated.
- Fixed m88k.c to use LO16 relocation types not LO16EXT types.

Changes for the 3.0 release (the -36b compiler release):
- Added the m88k directive .scaled as requested by the OS group.
- Allow expressions for the bit number, parse_cmp() like in bb0, condition
  match, parse_cnd() like in bcnd, and even 4 bit rotation, parse_e4rot like
  in prot.

Changes for the 3.0 release (the -36a compiler release):
- Added the opcodes "illop[123]" as per the version 3.0 88110 spec.
- Removed the "lda.b rD,rS1[rS2]" instruction and replaced that opcode with
  "lda.x rD,rS1[rS2]" as per the version 3.0 88110 spec.
- Corrected "nint.[sdx]" to be "nint.s[sdx]" and "int.[sdx]" to be "int.s[sdx]"
  which was just wrong in the GNU assembler (trnc was previous corrected but
  flaged as an 88110 versrion 3 change but that was incorrect as the assembler
  was just wrong (even for the 88100)).
- Corrected "mov.s xD,xS2" to be "mov xD,xS2" as per the version 3.0 88110 spec.
- Removed the old (version 2.0 of the 88110) opcodes: "mov.t xrD,rD2" and
  "mov.t rD,xrS2" which used blank instead of .s for single.
- Removed the old (version 2.0 of the 88110) opcodes: "trnc.t rD,xrs2" and
  "trnc.t rD,rS2" (where t is the type of the result) which used only the type
  of the result and implied the .s for single.
- Removed the "ppack.8.b", "ppack.8.h", and "ppack.16.b" opcodes from the m88k
  opcode table.  These operations are undefined.

Changes for the 3.0 release (the -35 compiler release):
- Fixed a bug in parse_bf() when expressions were added expressions that did
  not start with a digit (for example a '(', '+', '-', '~' or '!') were not
  recognized.
- Changed the action for .abort to print the remaining line as part of the
  error message.  Feature request by the OS group.
- Added an option [,alignment] expression to the end of the .lcomm directive
  which aligns the symbol to the power of 2 alignment expression (same as the
  .align directive).  This is ifdef'ed NeXT in s_lcomm() in read.c .
- Changed which directives are allowed on which machines
	.word	68k and i860 only (machine specific) NOT 88k
	.long	68k and i860 only NOT 88k
	.quad	68k only
	.octa	68k only
	.float	68k and i860 only NOT 88k
  These changes are in read.c, m68k.c and i860.c .  Feature request by the OS
  group and removal of .quad and .octa for the i860 approved by the NeXT
  Dimension group.
- Added the directive .elseif .  This involed a bit of reworking the .if, .else
  and .endif stuff in read.c .  Feature request by the OS group.
- Fixed a bug that would allow you to use the macro in a macro definition
  and cause the assember to core dump.  A limit, MAX_MACRO_DEPTH of 20, is
  used to avoid this.
- Added the directives .macros_on .macros_off.  This is to allow macros to be
  turned off, which allows macros to override a machine instruction and still
  use the machine instruction.  This is in read.c and toggles the variable 
  macros_on in s_macros_on() and s_macros_off() which is tested in
  parse_a_buffer().  Feature request by the OS group.
- Added s_abs() in read.c to implement ".abs symbol,exp" which set symbol to 1
  or 0 depending on if the expression is an absolute expression.  This is
  intended for use in macros.  Feature request by the OS group.
- Added s_reg() to m88k.c to implement ".greg symbol,exp" and ".xreg symbol,exp"
  which set symbol to 1 or 0 depending on if the expression is a general
  register or extended register respectfully.  These are intended for use in
  macros.  Feature request by the OS group.
- Added $n in expand_macro() in read.c to substitute the number of actual
  arguments for the macro.  Feature request by the OS group.
- Changed the code for setting the line separator's (character for multiple
  statements on a line) in do_scrub_begin() in app.c .  The character '/'
  tried to be a separator for the 88k but code down stream prevented it from
  working so it was removed and the 88k does not allow multiple statements on
  a line.  Also removed the NeXT ifdef for the ':' character which also did
  not work.

Changes for the 3.0 release (the -34 compiler release):
- Fixed a bug that for all floating-point branches it did not generate a
  relocation entry.  The fix is in md_estimate_size_before_relax() in m68k.c
  where the case of 'TAB(FBRANCH,SZ_UNDEF)' was not handled in the first
  switch and code to generate the relocation entry (a call to add_fix) was
  not done.  This is ifdef'ed NeXT.
- Fixed a bug for branches that use displacements to absolute addresses which
  produced a displacement off by -4.  This is ifdef'ed NeXT in m68_ip() in
  m68k.c in the second main switch statement that sets the bits in the
  instruction for the 'B' case.  There are two ifdef's, one for 'g' sub case
  (normal branches) and one for the 'c' sub case (floating-point branches).
- Disallow all floating-point packed immediates for the 68k assembler because
  the gen_to_words() routine in atof-ieee.c does not produce the correct 68k
  packed decimal format.  This simply disallows this but does not fix it.
  So "fmovep #0r1.0,fp0" will no longer assemble instead of assemble wrong.
  This is ifdef'ed PACKED_IMMEDIATE in m68k-opcode.h and m68k.c in m68_ip().
  (internal bug #5)
- Fixed a bug in the assembler which matched the "fmoveml #1,fpc" where the
  immediate #1 cause an internal FATAL error because it can't decode the mode
  "*s".  The fix is in m68_ip() in m68k.c where the case for 's' was ifdef'ed
  NeXT in just like the long case.  This is legal but the instruction
  "fmoveml #1,fpc/fpi" is not and the assembler STILL accepts it.
  (internal bug #4).
- Fixed a bug in the assembler which matched the "movec	sfc,#1" where the
  immediate #1 cause an internal FATAL error because it can't decode the mode
  "#j". The fix in m68_ip() in m68k.c in the loop to install the operand bits
  for the '#' case was missing the second sub case for 'j' that check the
  range of the value and installed the operand.  If the immediate is a variable
  my guess this will still fail but in a different way.
  (internal bug #3).
- Fixed a bug that caused the assembler to call abort with no error message
  when assembling "andiw #0x8001,fpir/fpcr/fpsr".  In get_num() in m68k.c
  the case for a SEG_PASS1 was missing from the switch statement from the
  type of the expression() call.  It was ifdef'ed NeXT in and handled like
  SEG_UNKNOWN and a bunch of others that just print out it can't handle the
  expression.
STILL BROKEN!
  (internal bug #2).
- Fixed a bug that the operand of the form "zpc@(0)" was trying to use the
  pc@(16) (AOFF) form which does not allow the base register to be suppressed
  which is what zpc is.  So this now uses the pc@(bd,Xn) form (AINDX).  The
  bug caused "zpc@(0)" to generate garbage, namely "d1".  The change is in 
  m68k_ip_op() in m68k.c and ifdef'ed NeXT with a comment like above.
  (internal bug #1).
- Ifdef'ed out the turning operands into PC relative in m68_ip() in m68k.c (this
  is a 1.36 feature) because it breaks scattered loading.
- Fixed a bug in the 1.36 version of GAS where the table of fmovem instructions
  were reordered.  See the comment in m68k-opcode.h with the header "REGISTER 
  LIST BUG:".  The fix was to put the list back in the previous order.  There
  is a design bug here that needs to be fixed.
- Fixed a bug where the .align directives were not propagated into the section
  headers of the object file.  A new routine, set_section_align() in Mach_O.c,
  is called from s_align() in read.c .
- Put the change in atof-ieee() in atof-ieee.c that creates infinities on
  overflows.  This fixes bug #13409.
- Picked up a change in i860_ip() in i860.c from the NDTools-6 version.
  Having to do with constant offset alignments.
- Added expressions to the width and <offset> bit field instructions.  Since the
  parameter syntax is width<offset> and offset may be a two character 'cmp' bit
  designator, the width expression may not contain the character '<' and the
  offset expression must start with a digit.
- Changed "mov.t xrD,rD2" and "mov.t rD,xrS2" to use .s for single instead
  of blank. (version 3.0 of 88110 spec).
- Changed "trnc.t rD,xrs2" and "trnc.t rD,rS2" (where t is the type of the 
  result) to use .st where the s is for single and t is the type of the result.
  (version 3.0 of 88110 spec).
- Changed the pflusha instruction to pflusha030 and pflusha040 because there is
  no way to tell them apart.
- Added automatic creation of stabs for assembly code debugging with -g.  The
  comment that explains in detail how this is done is in read_a_source_file()
  in read.c, The other changes are in make_stab_for_symbol() in symbols.c,
  s_include(), s_line() in read.c, and md_assemble() in m68k.c and m88k.c also
  two static declarations were removed from input-scrub.c.  These changes are
  marked with pairs of:
    #ifdef NeXT	/* generate stabs for debugging assembly code */
    ...
    #endif NeXT	/* generate stabs for debugging assembly code */
- Added the MMU instructions for the 030 and 040 (ifdef'ed BUILTIN_MMUS) and
  turned off the m68851 define for that set of MMU instructions.  The reason to
  turn it off is because of the register names it must recognize (see bug #7525
  why we don't want to do this).  This change is not ifdef'ed NeXT because it
  is very intertwined with the 68851 stuff.  Also with this change the "MMU
  status register" correct name of "mmusr" was added but the old name of "psr"
  was retained for compatiblity because of assembler code that might use it.
- Added installsrc, installIBMsrc and installGNUsrc targets to the Makefile.
- Bug #8331, feature request for hex immediate bit-patterns for floating-point
  immediates.  Added the constant radix 0b... like 0x... except that it would be
  assumed to be a "bignum" and then a binary bit pattern for a hex immediate.
  This effected the routines operand() in expr.c, get_num() in m68k.c and
  m68_ip() in m68k.c .  All of these are ifdef'ed NeXT with the comment
  /* fix for bug #8331 */ .
- Bug #13017, this is where ".fill x,3,x" would cause the assembler to call
  abort because the repeat size is 3 bytes.  This is now dissallowed in s_fill()
  in read.c and only repeat sizes of 0,1,2 and 4 are allowed.
- Bug #11209,  this is where if the file system fills up or something and the
  file can't be closed the object file was left and would confuse later
  make(1)'s because the object file would be present but would then just hand
  this off to the link editor and it would complain about a bad object file.
  The fix in output_file_close() in output-file.c was to remove the file in this
  case because it might be bad.
- Bug #8920, where s file containing just "bra L1" would produce a bad object
  file because the undefined local lable L1 was not defined is fixed.  The fix
  is in write_object_file() in write.c (and one line in write_Mach_O() in
  Mach-O.c to test bad_error).  The undefined local symbols are printed with an
  error message in this case and then the object file is not written.
- Bug #8918, where a line of the form "# 40 MP1 = M + 1" gets confused with a
  line of the form "# 1 "hello.c" 1" and causes a bug that ignores the rest of
  the file.  This was fixed in app.c when in state 4 (after putting out a .line,
  put out digits) and then not finding an expected '"' for the name of the file
  it ignores the rest of the line but forgets to set the state to 0 (begining of
  a line).  This is ifdef'ed NeXT.
- Bug #7525 (second part), where "bfffo d0{#2,#32},d1" would not work with the
  field width of 32 is now fixed.  (I'm not sure exactly what the fix was it
  probably came from the 1.36 version of GNU).
- Bug #5384, where if a ".globl foo" precedes "foo=1" foo does not end up global
  has been verfied to be fixed (I'm not sure exactly what the fix was it
  probably came from the 1.36 version of GNU).
- Changed the default alignment of sections to 3 (8) for RISC machines from 2
  (4) in both write.c and MachO.c.
- Print a warning for -R (make data text) to used .const and not put the data
  in the text.
- Cleaned up Mach-O.c and read.c by changing/adding message_refs where
  selector_refs was used.
--- Changes to merge in John Anderson's (DJA) version of GAS ---
- added relational binary operators (<, ==, >, <= and >=) and modified the
  precedence to conform to 'C'.  The code is marked with pairs of:
    #ifdef NeXT	/* added relational ops, changed precedence to be same as C */
    ...
    #endif NeXT	/* added relational ops, changed precedence to be same as C */
  and is contained in the file expr.c and is the DJA version with a few bug
  fixes to make it work.  Found a logic bug when "<>" was used as an operator
  it was recognized as a "<".  This "operator" appears in the WriteNow source
  so I added "<>" as a form of "!=".
- added logical negation unary operator (!).  The code is marked with pairs of:
    #ifdef NeXT	/* logical negation feature */
    ...
    #endif NeXT	/* logical negation feature */
  and is contained in the file expr.c and is exactly the DJA version.
- added code to try to make expresions absolute.  The code is marked with
  pairs of:
    #ifdef NeXT	/* feature to try to make expressions absolute */
    ...
    #endif NeXT	/* feature to try to make expressions absolute */
  and is contained in the files expr.c and m68k.c (the code is exactly the DJA
  version).
- added the .dump/.load feature (this is based on top of the .include and
  .macro features).  The code is marked with pairs of:
    #ifdef NeXT	/* the .dump/.load feature */
    ...
    #endif NeXT	/* the .dump/.load feature */
  and is in read.c (and one line in symbols.c) and is the DJA version.  Fixed
  a bug in write_symbol() in read.c where the symbol's n_type field needed to
  be and'ed with the N_TYPE macro before checking for equal to N_ABS.
  not checked
- added the conditional assembly feature (pseudo ops .if .else .endif) and the
  macro feature (pseudo ops .macro and .endmacro).  This is all contined read.c
  and required a major rewrite of the main parsing routine read_a_source_file().
  This was replaced by three routines read_a_source_file(), parse_a_buffer() and
  parse_line_comment().  Since the their was no way to ifdef the old code it was
  removed.  Where possible the conditional assembly feature code is marked with
  pairs of:
    #ifdef NeXT	/* the conditional assembly feature (.if, .else, and .endif) */
    ...
    #endif NeXT	/* the conditional assembly feature (.if, .else, and .endif) */
  and the macro feature code is marked with pairs of:
    #ifdef NeXT	/* the .macro feature */
    ...
    #endif NeXT	/* the .macro feature */
  All of these changes are in read.c and except for the rewrite
  read_a_source_file() the changes are the DJA version.
- added the .include "filename" pseudo op.  This is marked with pairs of:
	#ifdef NeXT	/* .include feature */
	...
	#endif NeXT	/* .include feature */
  the code in in read.c, as.c, app.c, as.h and input-scrub.c.  Except for the
  code in app.c and the typedef scrub_context_data in as.h (related to the
  major changes in the app.c code from the DJA version) it is exactly what
  was in the DJA version.  Fixed a bug in input_file_open() in input-file.c
  where it was doing a setbuffer() call using a staticly allocated buffer for
  all the file's in read.  This was changed to use a dynamicly allocated buffer
  when processing an include file so the buffer does not get reused by include
  files.

Changes for the 3.0 release (the -33 compiler release):
- Fixed trap*.w and trap*.l to take one immediate operand of word or long
  (this was just wrong in GAS).
--- Changes to merged in the 1.36 version of GAS ---
app.c: (1.36 version picked up)
  - This deals with the "# <number> <filename> <garbage>" in the state
    machine (the NeXT fix in s_line() was much cleaner).
  - Picked up the 1.36 version.  The only odd difference is that ':' was
    ifdef'ed OUT in the 1.36 version and IN the the NeXT 1.28 version.
	#ifdef DONTDEF <- 1.36
	#ifndef DONTDEF <- NeXT 1.28
		lex [':']		|= LEX_IS_LINE_SEPERATOR;
	#endif
    I did the NeXT thing in fear of breaking something.  Done with:
	#if defined(DONTDEF) || defined(NeXT)
append.c: (1.36 version picked up)
  - Only Copyright comment changed
as.c: (1.36 version picked up)
  - The machine specific command line options have been moved to routines
    named md_parse_option() in the machine specific files.
  - The handling of assembly errors has changed from using as_warn() to the
    new routine as_bad() which if called sets bad_error and will not produce
    an output file if that gets set (see the file messages.c for
    definitions).
  - Handling of signals has changed to an array of signal numbers and a
    routine that catches them and prints out the signal number.
messages.c: (1.36 version picked up)
  - The addition of the routine as_bad() and the variable bad_error.  If
    as_bad() is called then bad_error gets set and the output file does not
    get produced (see main() in as.c).
as.h: (1.36 version picked up)
  - The following macros had ()'s added around their parameters:
	#define bzero(s,n) memset((s),0,(n))
	#define bcopy(from,to,n) memcpy((to),(from),(n))
atof-generic.c: (1.36 version picked up)
  - Macro for alloca ifdef'ed __GNUC__ added:
	#ifdef __GNUC__
	#define alloca __builtin_alloca
	#else
	#ifdef sparc
	#include <alloca.h>
	#endif
	#endif
  - Macros for bzero and index ifdef'ed USG added:
	#ifdef USG
	#define bzero(s,n) memset(s,0,n)
	#define index strchr
	#endif
  - The strings "nan", "inf" or "infinity" (in either case) are recognized
    first and NaN's get the sign set to 0, +infinity gets the sign set to
    'P' and -infinity gets the sign set to 'N' (see flonum.h).  They used to
    be caught at the end and the strings "Infinity", "infinity", "NaN",
    "nan", "SNan", or "snan" had been recognized and some note about
    see atof-m68k.c was there (this file was removed and atof-ieee.c was
    added).
  - A loop was added to strip leading '0' characters:
	while(number_of_digits_after_decimal &&
	     first_digit[number_of_digits_before_decimal +
			 number_of_digits_after_decimal] == '0')
		--number_of_digits_after_decimal;
    After they were picked up.
  - Looks like the extra precision was move into two extra littlenums worth
    in the implementation of converting digit strings into flonum's.
flonum-const.c:  (1.36 version picked up)
  - Comment changes.
flonum-copy.c: (1.36 version picked up)
  - Copyright comment changed.
flonum-mult.c: (1.36 version picked up)
  - Added a check if the signs of the two numbers are one of '+' or  '-' it
    is an error and returns zero.  This happens with infinities as the sign
    is set to 'P' or 'M' or NaNs and the sign is set to zero ('\0' or 0).
  - Also some extra term in an if statement:
	146c141
	<       if (significant || P<0)
	---
	>       if (significant)
    I did figure out what it was.
flonum.h: (1.36 version picked up)
  - Comment about NaN and infinities was added:
	/* JF:  A sign value of 0 means we have been asked to assemble NaN
	   A sign value of 'P' means we've been asked to assemble +Inf
	   A sign value of 'N' means we've been asked to assemble -Inf
	 */
atof-ieee.c: (1.36 version picked up)
  - Replaces atof-m68k.c
bignum-copy.c: (1.36 version picked up)
  - The addtion of the explit return type of 'int' was added to the routine
    bignum_copy().
  - Copyright comment changed
bignum.h: (1.36 version picked up)
  - The commented out extra digits of LOG_TO_BASE_2_OF_10 were uncommented.
    the comment above this was that this was done to get around a problem
    in GCC (I'm assuming that has been fixed).
     < #define LOG_TO_BASE_2_OF_10 (3.3219280948873623478703194294893901758651)
     ---
     > #define LOG_TO_BASE_2_OF_10 (3.321928
				   /* 0948873623478703194294893901758651 */)
  - Copyright comment changed.
expr.c: (1.36 version picked up with Mach_O and NeXT ifdef's merged in)
  - Copyright comment changed and top comment removed.
  - A hack was changed with respect to the variable generic_bignum[].
    The comment explains:
     /* Seems atof_machine can backscan through generic_bignum and hit
	whatever happens to be loaded before it in memory.  And its way
	too complicated for me to fix right.  Thus a hack.  JF:  Just make
	generic_bignum bigger, and never write into the early words, thus
	they'll always be zero.  I hate Dean's floating-point code.  Bleh.
      */
  - This varable and comment was added but no one uses it.  See flonum.h
    for how NaNs and infinities are handled.
	/* If nonzero, we've been asked to assemble nan, +inf or -inf */
	int generic_floating_point_magic;
  - Changes to allow d$ where d is a digit has been added ifdef'ed
    SUN_ASM_SYNTAX.  But according to the Sun assembler manual, page 10
    section 2.4, the local labels are n$ where n is any integer (I wounder
    if it really supports negitive integers).  There is also code in expr.c,
    symbols.c and read.c to support this.
expr.h: (1.36 version picked up)
  - Copyright comment changed.
frags.h: (1.36 version picked up)
  - Copyright comment changed.
hash.c: (1.36 version picked up with error() calls ifdef NeXT to as_fatal)
  - Copyright comment changed and two /* in comments changed to / *
  - A change from:
	newsize = handle->hash_stat[STAT_SIZE] <<= 1;
    to 
	handle->hash_stat[STAT_SIZE] <<= 1;
	newsize = handle->hash_stat[STAT_SIZE];
    in hash_grow();
hash.h: (1.36 version picked up)
  - Copyright comment changed.
  - The following line removed:
	static char * hash_grow(); /* error text (internal)  */
hex-value.c: (1.36 version picked up)
  - Copyright comment changed.
  - The following routine was added:
	#ifdef VMS
	dummy2()
	{
	}
	#endif
input-file.c: (1.36 version picked up)
  - Copyright comment changed.
  - The commented out declaration was removed (but not the comment out code)
	/* static int	file_handle;	/* <0 === not open */
  - The explict declaration of the pre prameter was added to the routine
    input_file_open().
  - The explict declaration of the routine do_scrub_next_char() was added
    inside the routine input_file_give_next_buffer() in a local scope.
input-file.h: (1.36 version picked up)
  - Copyright comment changed.
input-scrub.c: (1.36 version picked up)
  - Copyright comment changed.
  - The macro AFTER_STRING was changed from:
	#define AFTER_STRING (" ")	/* bcopy of 0 chars might choke. */
    to:
	#define AFTER_STRING ("\0")	/* bcopy of 0 chars might choke. */
  - The varables used by the ifdef'ed DONTDEF code was removed (why not just
    also ifdef'ed?):
	char *p;
	char *out_string;
	int out_length;
	static char *save_buffer = 0;
	extern int preprocess;
m68k-opcode.h: (1.36 version merged in)
  - Copyright comment changed.
  - The bras and bsrs were ifdef'ed NeXT to not use word displacements.
  - some reordering of the movem and fmovem type instructions.
  - all m68851 stuff pulled in (comments and opcodes), pmmu.h was removed.
m68k.c: (1.36 version merged in)
  - Copyright comment changed
  - Lots of changes related to the DBCC and DBCC68000 with jumps to jumps (see
    GAS 1.36 version change log).
  - The characters 'e' and 'E' were added to FLT_CHARS[]
  - In the md_relax_table the long branches (BRANCH,FBRANCH & PCREL) had their
    forward and backward reach changed by 2 where (the 2 was removed from the
    expression).
  - Constants for the BCC68000 and DBCC branch types were added as well as
    entries in the md_relax_table.
  - The .proc pseudo op was added
  - The register defines for m68851 were added to m68k.c and pmmu.h was removed.
  - Fixed a bunch of the macros like add_fix which did NOT have ()'s around the
    parameters which was the source of a nasty bug NeXT tracked down.
  - The routine m68k_reg_parse() takes something of the form fp0: and turns
    the ':'  into a ',' .
  - A fix to handling big numbers (greater than 32 bits) as a floating-point
    bit pattern was made to put the bits out in the correct order.  The loop
    was changed from:
	for(wordp=generic_bignum;offs(opP->con1)--;wordp++)
    to:
	for(wordp=generic_bignum+offs(opP->con1)-1;offs(opP->con1)--;--wordp)
  - The the routine md_atof() was changed to use atof_ieee() from atof_m68k().
  - Picked up the md_parse_option() routine.

  - The NeXT made change to allow hex immediates for floating-point (which
    broke decimal immediates like #1 and did not work for doubles) was removed.
    Also see bug #8331 in bug tracker.
	This change is in the routine m68_ip() (which converts a string into a
	68k instruction) in the code for handling immediates which are some
	type of floating point number that is not a SEG_BIG.
	This next #if 0 #endif pair comments out these two lines:
				    int_to_gen(nextword);
				    gen_to_words(words,baseo,(long int)outro);
	and replaces it with this line:
			    /* modified by mself to support hex immediates. */
					*(int *)words = nextword;
	The effect is that the non SEG_BIG expression (which is just an integer,
	not a floating point value) is not converted to a float but just used
	as a bit pattern for the floating point number.  This fails for doubles
	since some random bits left in the local array words[] get stuffed into
	the 64 bit double value and of course breaks the common case of #1 for
	decimal numbers.

  - The NeXT use of atof_m68k was removed in the case of getting a floating
    point immediate and the code to call gen_to_words() was put back.
  - The NeXT change of #if 0'ing out the line: (I don't know why):
		gen_to_words(words,2,8L);/* These numbers are magic! */
    was removed the the #if removed and the code left in.
obstack.c: (1.36 version picked up)
  - Lots of changes but diffed with the same file in the cc directory (which
    is based on 1.36) it looks very close to the same.  Since the NeXT 2.0
    compiler uses it it is picked up here on faith.
obstack.h: (1.36 version picked up)
  - Lots of changes but diffed with the same file in the cc directory (which
    is based on 1.36) it looks very close to the same.  Since the NeXT 2.0
    compiler uses it it is picked up here on faith.
output-file.c: (1.36 version picked up with NeXT and Mach_O ifdef's put in)
  - Copyright comment changed.
  - The NeXT ifdef is to unlink the file before doing a create on it.
  - The Mach_O ifdef is for the routine output_write().
pmmu.h: removed (1.36 has this stuff moved into m68k-opcode.h and m68k.c)
read.c: (1.36 version picked up with NeXT, Mach_O and I860 ifdefs added)
  - Copyright comment changed.
  - There is a differing set of changes related to the bumping of the line
    counters with respect to #NO_APP and #APP.  One in the 1.28 version
    ifdef'ed NeXT and the other in the 1.36 version.  The 1.36 set of
    changes were picked up.
  - A bunch of changes to the s_set routine (not use in the NeXT compiler
    suite).
read.h: (1.36 version picked up)
  - Copyright comment changed.
strstr.c: (1.36 version picked up with NeXT ifdef code added)
  - Only Copyright comment changed
  - The routine strstrn() apperently was added by NeXT and is used in read.c
    for searching for "#NO_APP\n".
struc-symbol.h: (1.36 version picked up with NeXT ifdef code added)
  - Only Copyright comment changed
  - The ifdef NeXT code is to the sy_other macro to refer to the n_sect
    field instead of the n_other field.
subsegs.c: (1.36 version picked up)
  - Only Copyright comment changed
subsegs.h: (1.36 version picked up)
  - Only Copyright comment changed
symbols.c: (1.36 version picked up with Mach_O ifdef code added)
  - Only Copyright comment changed
  - Changes to allow d$ where d is a digit has been added ifdef'ed
    SUN_ASM_SYNTAX.  But according to the Sun assembler manual, page 10
    section 2.4, the local labels are n$ where n is any integer (I wounder
    if it really supports negitive integers).  There is also code in expr.c,
    symbols.c and read.c to support this.
  - The ifdef Mach_O code is to set the n_sect field.
symbols.h: (1.36 version picked up)
  - Only Copyright comment changed
version.c: (1.36 version picked up)
  - The comments were removed and place in a file ChangeLog
write.c: (1.36 version picked up with NeXT, M68K, Mach_O and I860 ifdefs added)
write.h: (1.36 version picked up with the NeXT ifdef added)
xmalloc.c: (1.36 version picked up with NeXT ifdef code added)
  - Only Copyright comment changed
  - The NeXT ifdefs are changing the call to error() to as_fatal() so the
    macro -Derror=as_fatal does not have to be used (since it could
    substitue in places where it shouldn't.
xrealloc.c: (1.36 version picked up with NeXT ifdef code added)
  - Only Copyright comment changed
  - The NeXT ifdefs are changing the call to error() to as_fatal() so the
    macro -Derror=as_fatal does not have to be used (since it could
    substitue in places where it shouldn't.

--- Changes to merged in the i860 version of GAS by NeXT Dimension team ---
    (NDTools-4)
  - i860.h:
    This contained the i860 relocation stuff.  This was moved into reloc.h
	Also there was a bug in the GNU version of ld that relocated the
	RELOC_HIGHADJ wrong.  The adjustment was always done out of the
	assembler and should have been taken out and put back everytime.
	This is now the case in the NeXT Mach-O link editor in i860_reloc.c .

  - I860 changes to read.c:
    big_cons(), get_known_segmented_expression() and stringer() no longer static

    Mike changed s_file() and s_line() to handle the cpp line directive nesting
    level by adding discard_rest_of_line() to it.  The complier group's version
    just recognized the extra digits in s_file().  The compiler group's version
     was retained and Mike's changes were left out.

    The i860 has it's own align syntax and the "align" pseudo-op is ifdef'ed out
    for the i860 (what is this symtax?).

    The i860 has the "org" and "quad" pseudo-op's ifdef'ed out.

    The as_fatal() call in pobegin() has "... (%s)", errtxt ); added to it.

    An Intel "lable::" crock, which also makes the symbol global

    The fix_new() call in cons() has an extra RELOC_VANILLA argument added to it
    that is ifdef'ed I860.  This also requires i860.h to be included which
    defines RELOC_VANILLA to be added at line 37:
	#if defined(I860)
	#include <i860.h>
	#endif

  - I860 changes to write.c:
    Added at line 50 (for the NO_RELOC relocation r_type)
	#if defined(I860)
	#include "i860.h"
	#endif

    The variable next_object_file_charP is not static for the i860 (ifdef'ed
    I860).

    fix_new has an extra prameter r_type (ifdef'ed I860) and it is set in to the
    fixP struct via:
	fixP->fx_r_type = r_type;
    also ifdef'ed I860.

    In write_object_file() after the relax segment calls the text alignment is
    forced to 32 byte alignment, the data and bss to 16 byte alignment.  The
    code for text at line 316 is:
	 /* Check/force alignment here! */
	#if defined(I860)
	  text_siz = (text_siz + 0x1F) & (~0x1F);/* Keep 32 byte alignment (most
						    restrictive) */
	  text_last_frag->fr_address = text_siz; /* and pad the last fragment.*/
	#endif
    for data at line 388 is:
	#if defined(I860)
	      data_siz += (16 - (data_siz % 16)) % 16; /* Pad data seg to
							  preserve alignment */
	      data_last_frag->fr_address = data_siz;   /* to quad-word
							  boundries */
	#endif
    and for bss at line 361 is:
	#if defined(I860)
	  local_bss_counter=(local_bss_counter+0xF)&(~0xF); /* Pad BSS to
							preserve alignment */
	#endif

    The call to fix_new() in write_object_file() has an extra parameter added
    to it, NO_RELOC, which is ifdef'ed I860.  At line 522:
    #if defined(I860)
	      fix_new(lie->frag,lie->word_goes_here - lie->frag->fr_literal,2,
		      lie->add,lie->sub,lie->addnum,0,NO_RELOC);
    #else
	      fix_new(lie->frag,lie->word_goes_here - lie->frag->fr_literal,2,
		      lie->add,lie->sub,lie->addnum,0);
    #endif

    In write_object_file() a bunch of checks were added.  Just before emitting
    relocations at line 675:
	know(next_object_file_charP==
	(the_object_file+(N_TXTOFF(the_exec)+the_exec.a_text+the_exec.a_data)));
    Just before emiting the symbols at line 684:
	know(next_object_file_charP == (the_object_file + N_SYMOFF(the_exec)) );
    Just before emiting the strings at line 710:
	know(next_object_file_charP == (the_object_file + N_STROFF(the_exec)) );

    In fixup_segment() the switch statement for immediate displacement types for
    case 0 is ifdef'ed I860 with this change (at line 1209):
	#if defined(I860)
	      fixP->fx_addnumber = add_number;
	      /*
	       * fixup_segment is expected to return a count of the number of 
	       * relocation_info structures needed for an object module.
	       * Two specific relocation types encode only the high half
	       * of an address, and so are followed by a second relocation_info
	       * structure which encodes the low half.  We allow for this
	       * by bumping seg_reloc_count an extra time here.
	       *
	       * The extra item is generated in emit_relocations().
	       */
	      if ( fixP->fx_addsy && 
		    (fixP->fx_r_type==RELOC_HIGH ||
		     fixP->fx_r_type==RELOC_HIGHADJ))
	      {
		++seg_reloc_count;
	      }
	      md_number_to_imm (place, add_number, size,fixP,this_segment_type);
	#else
	      md_number_to_imm (place, add_number, size);
	#endif
    and for case 1 the comment was added (at line 1232):
	    case 1:		/* Not used in i860 version */

    In emit_relocations() the following line was ifdef'ed in the other two were
    else'ed out (at line 1276):
	#if defined(I860)
		  ri . r_type		= fixP -> fx_r_type;
	#else /* I860 */
			/* These two 'cuz of NS32K */
		  ri . r_bsr		= fixP -> fx_bsr;
		  ri . r_disp		= fixP -> fx_im_disp;
	#endif /* I860 */

    In emit_relocations() at the end of the loop processing the fixS structures
    the following lines were added to handle split relocations (at line 1425):
    #if defined(I860)
	  /* Whenever we have a relocation item using the high half of an
	   * address, we also emit a relocation item describing the low
	   * half of the address, so the linker can reconstruct the address
	   * being relocated in a reasonable manner.
	   *
	   * We set r_extern to 0, so other apps won't try to use r_symbolnum
	   * as a symbol table indice.  We OR in some bits in bits 16-23 of
	   * r_symbolnum so it is guaranteed to be outside the range we use
	   * for non-external types to denote what segment the relocation is in.
	   */
	  if ( fixP->fx_r_type == RELOC_HIGH ||
	       fixP->fx_r_type == RELOC_HIGHADJ )
	  {
	  	ri.r_length	= nbytes_r_length [fixP->fx_size];
	  	ri.r_pcrel	= fixP->fx_pcrel;
	  	ri.r_address	= fixP -> fx_frag->fr_address + fixP->fx_where
	      			  - segment_address_in_file;
		ri.r_extern	= 0;
		ri.r_type	= RELOC_PAIR;
		/* Hide the low half of the addr in r_symbolnum.  More
		   overloading...*/
		ri.r_symbolnum	= (fixP->fx_addnumber & 0xFFFF) | 0x7F0000;
		md_ri_to_chars((char *) &ri, ri); 
		append(&next_object_file_charP, (char *)&ri,
		       (unsigned long)sizeof(ri));
	  }
    #endif

--- Changes made to do the merges of 1.36 and i860 versions ---
- Removed the cpp macro "error" which was set on the compiler line to 
  -Derror=as_fatal and changed the 4 uses in hash.c, xmalloc.c and xrealloc.c
  to just use as_fatal.
- Added the cpp macro M68K for 68k specific ifdef that are needed (like in
  Mach-O.c).  This is instead of the "default case" without a target processor
  macro meaning that it is the 68k case.  This is set in the Makefile as the
  target processor that the assembler is for in the make macro COPTS.
- Changed the only use of the cpp macro CROSS in output-file.c to use NeXT to
  get rid of this macro.  The line of code that is ifdef'ed is is the unlink of
  "name" in output_file_create().
- Removed a.out.h and letting the one in ../include get used which is a merge
  of the original and includes NeXT's files (nlist.h and reloc.h).
- Removed the file atom.c since Mach-O.c replaces it (also removed all the
  code in write.c that used it).
- Removed all machine specific files except for the target processors that
  NeXT uses.  The remaining code that used this stuff has been ifdef'ed where
  needed to preserved the code in the files we use.
- Removed the files gdb.c, gdb-file.c, gdb-symbols.c, gdb-blocks.c and
  gdb-lines.c and ifdef'ed DONTDEF the code in as.c, read.c and write.c that
  used this stuff since the GNU 1.36 version of GAS did the same.
- Removed the files m-68k.h, m-sun3.h, m-hpux and m-generic and ifndef'ed the
  include of m-68k.h out of m-68k.c.
- Removed the files atof-m68k.c atof-m68k-assist.s since they are no longer
  used (see the change below for the -27 compiler release).  And replaced the
  the file atof-m68k.c with the 1.36 atof-ieee.c .

The 2.0 Release (the -32 compiler release)

Changes for the Warp ?? release (the -27 compiler release):
- Fixed m68_ip() to handle hex immediate operands to floating point insn's.
  Now fadds #0xffffffff,fp0 works correctly.  The fix only works for .s, not
  for .d or .x.  This orignally worked, but was broken by NeXT's mods to
  atof-m68k.c. (mself)
- Added new 68040 floating-point instructions to m68k-opcode.h (mself)
- Changed the name of the the section generated by the .objc_selector_refs
  directive from __selector_refs to __message_refs and set the flags field of
  this section to S_LITERAL_POINTERS.  This change requires a link editor that
  knows how to handle a S_LITERAL_POINTERS section.
- Changed m68k.c to use the reguar atof (actually strtod) instead of using
  atof-m68k.c and atof-m68k-assist.s, since these instructions will be
  emulated on th '040. (mself)

Changes for the Warp ?? release (the -26 compiler release):
- Added the file Mach-O.c and the ablity to have a subset of a fixed number of
  sections.  All changes ifdef'ed MACH_O.  This removes atom.c (ifdef'ed out).
  New sections include const, literal4, literal8, 11 new objc sections, etc.
  Basicly a lot of changes.

Changes for the Warp 3 (OS update) release (the -25 compiler release):
- Added scattered relocation entries to the assembler in emit_relocation() in
  write.c (see extensive comments in there and in <reloc.h>).
- Changed fixup_segment() in write.c and md_estimate_size_before_relax() in
  m68k.c to make branches to lables that persist on output to be long in length
  and have a relocation entry (to make scattered loading in the link editor
  work).  This was done by using the value of 3 in fx_pcrel (see the comment in
  write.h) for force this to happen.

Changes for the Warp ?? release (the -24 compiler release):
- Fixed the bug that would not assemble the following instruction:
	L2:movl #1,@(_down:l,d7:l:4)
  The fix was a bug in the macro use in m68k.c for add_fix() which the macro
  did not put ()'s around it's arguments (bugs 5207 and 5270).
  assembler's preprecessor inserts) to optionally recognize this new number.
- Changed the section alignment of the text section to 2 byte alignment so that
  scattered loading will work (the branch table of the shlibs will not move).

Changes for the 2.0 impulse X.X release (the -23 compiler release):
- Now is linked with libsys.

Changes for the 2.0 impulse X.X release (the -22 compiler release):
- Allow symbol names to appear in ""'s .  This is so that the symbol names for
  methods can be "+[Class(category) method:name:]" and tools will not have to
  go through the objective-C section to get these names. Changes how
  get_symbol_end() works and how the callers of it use it.

Changes for the 2.0 impulse X.X release (the -19 compiler release):
- as is no longer installed as as-<version_number> to match the rest of the
  project.
- Updated atom.c to the changes to CPU_TYPE and CPU_SUBTYPE with the changes to
  <sys/machine.h>

Changes for the 0.91 release (the -10 compiler release):
* s.stone fixed a bug in `#APP', `#NO_APP' that affected read.c & strstr.c.
+ Fixed a bug in converting to Mach-O object files with the new sections
  for the objective-C runtime.  The bug was if a local relocation item refered
  to a symbol plus an offset the incorrect section number could be assigned if
  the value of the symbol plus offset was in a different section than the value
  of the symbol.  This is an un fixable bug in atom(1) but fixed in here by
  moving the assignment of the section number into the r_symbolnum field into
  the assembler and using just the symbol's value (not plus the offset) to pick
  the section number.  The fix is in write.c in emit_relocation() (plus a call
  to a new function get_objc_section_bounds() before calling emit_relocation).
+ Fixed a bug where a file had no symbols and the result was a Mach-O file.
  What would happen was a 4 (the size of the string table) was written at offset
  0 in the output file (overwriting the magic number).  Also did some major
  clean up of atom.c and removed all the garbage that did not apply (about half
  of what was there).
+ Added the .reference pseudo op to read.c.  This was added for the new
  objective-C runtime to use so that archive semantaic could be maintained but
  no globals (that 'C' could use) are created.
+ Fixed the exponent overflow handling in atof-m68k.c to not print a warning
  (ifdef NeXT) and to get the right answer (a bzero of the 'words' as added,
  and corrected the reversed sign for infinities).

New notes go at the TOP of this file.
