* configure.in: Add CRIS support.
authorHans-Peter Nilsson <hp@axis.com>
Thu, 20 Jul 2000 17:45:28 +0000 (17:45 +0000)
committerHans-Peter Nilsson <hp@axis.com>
Thu, 20 Jul 2000 17:45:28 +0000 (17:45 +0000)
* configure: Regenerate.
* Makefile.am: (CPU_TYPES): Add cris.
(CPU_OBJ_VALID) [aout]: Add cris.
(MULTI_CPU_TYPES): Add cris.
(MULTI_CPU_OBJ_VALID) [aout]: Add cris.
  [coff]: Only i386 and mips are valid.
(TARGET_CPU_CFILES): Add config/tc-cris.c.
(TARGET_CPU_HFILES): Add config/tc-cris.h.
(MULTI_CFILES): Add config/e-crisaout.c and config/e-criself.c.
Regenerate dependencies.
* Makefile.in: Regenerate.
* aclocal.m4: Regenerate.
* as.c: Declare crisaout, criself.
* config/tc-cris.h, config/tc-cris.c: New.
* config/e-criself.c, config/e-crisaout.c: New.
* po/POTFILES.in, po/gas.pot: Regenerate.

13 files changed:
gas/ChangeLog
gas/Makefile.am
gas/Makefile.in
gas/aclocal.m4
gas/as.c
gas/config/e-crisaout.c [new file with mode: 0644]
gas/config/e-criself.c [new file with mode: 0644]
gas/config/tc-cris.c [new file with mode: 0644]
gas/config/tc-cris.h [new file with mode: 0644]
gas/configure
gas/configure.in
gas/po/POTFILES.in
gas/po/gas.pot

index bd57f3681746212fae24f996c7aa512cac4a5dd3..eabfbf6c7104cbb6e73a1fb12a3ef35f819122c7 100644 (file)
@@ -1,3 +1,23 @@
+2000-07-20  Hans-Peter Nilsson  <hp@axis.com>
+
+       * configure.in: Add CRIS support.
+       * configure: Regenerate.
+       * Makefile.am: (CPU_TYPES): Add cris.
+       (CPU_OBJ_VALID) [aout]: Add cris.
+       (MULTI_CPU_TYPES): Add cris.
+       (MULTI_CPU_OBJ_VALID) [aout]: Add cris.
+       [coff]: Only i386 and mips are valid.
+       (TARGET_CPU_CFILES): Add config/tc-cris.c.
+       (TARGET_CPU_HFILES): Add config/tc-cris.h.
+       (MULTI_CFILES): Add config/e-crisaout.c and config/e-criself.c.
+       Regenerate dependencies.
+       * Makefile.in: Regenerate.
+       * aclocal.m4: Regenerate.
+       * as.c: Declare crisaout, criself.
+       * config/tc-cris.h, config/tc-cris.c: New.
+       * config/e-criself.c, config/e-crisaout.c: New.
+       * po/POTFILES.in, po/gas.pot: Regenerate.
+
 2000-07-20  Kazu Hirata  <kazu@hxi.com>
        
        * read.c: Fix formatting.
index 03dacba7163511b3be5fc25d06ca342562b895bf..45675ed6b07222d3f0a5295baa8d3d725a388f30 100644 (file)
@@ -42,6 +42,7 @@ CPU_TYPES = \
        arc \
        arm \
        avr \
+       cris \
        d10v \
        d30v \
        fr30 \
@@ -99,7 +100,7 @@ CPU_OBJ_VALID = \
        case $$o in \
        aout) \
          case $$c in \
-         a29k | arm | i386 | i860 | m68k | mips | ns32k | sparc | tahoe | tic30 | vax) \
+         a29k | arm | cris | i386 | i860 | m68k | mips | ns32k | sparc | tahoe | tic30 | vax) \
            valid=yes ;; \
          esac ;; \
        bout) \
@@ -128,16 +129,19 @@ CPU_OBJ_VALID = \
 
 # These are like CPU_TYPES and CPU_OBJ_VALID, for the obj=multi case.
 
-MULTI_CPU_TYPES = i386 mips
+MULTI_CPU_TYPES = i386 mips cris
 
 MULTI_CPU_OBJ_VALID = \
        valid= ; \
        case $$o in \
        aout) \
          case $$c in \
-         i386) valid=yes ;; \
+         i386 | cris) valid=yes ;; \
+         esac ;; \
+       coff) \
+         case $$c in \
+         i386 | mips) valid=yes ;; \
          esac ;; \
-       coff) valid=yes ;; \
        ecoff) \
          case $$c in \
          mips) valid=yes ;; \
@@ -215,6 +219,7 @@ TARGET_CPU_CFILES = \
        config/tc-arc.c \
        config/tc-arm.c \
        config/tc-avr.c \
+       config/tc-cris.c \
        config/tc-d10v.c \
        config/tc-d30v.c \
        config/tc-fr30.c \
@@ -254,6 +259,7 @@ TARGET_CPU_HFILES = \
        config/tc-arc.h \
        config/tc-arm.h \
        config/tc-avr.h \
+       config/tc-cris.h \
        config/tc-d10v.h \
        config/tc-d30v.h \
        config/tc-fr30.h \
@@ -349,6 +355,8 @@ TARG_ENV_HFILES = \
 # Multi files in config
 
 MULTI_CFILES = \
+       config/e-crisaout.c \
+       config/e-criself.c \
        config/e-i386aout.c \
        config/e-i386coff.c \
        config/e-i386elf.c \
@@ -544,6 +552,10 @@ e-i386coff.o: $(srcdir)/config/e-i386coff.c
        $(COMPILE) -c $(srcdir)/config/e-i386coff.c
 e-i386elf.o: $(srcdir)/config/e-i386elf.c
        $(COMPILE) -c $(srcdir)/config/e-i386elf.c
+e-crisaout.o: $(srcdir)/config/e-crisaout.c
+       $(COMPILE) -c $(srcdir)/config/e-crisaout.c
+e-criself.o: $(srcdir)/config/e-criself.c
+       $(COMPILE) -c $(srcdir)/config/e-criself.c
 
 # The m68k operand parser.
 
@@ -952,6 +964,16 @@ DEPTC_avr_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
   $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
   $(INCDIR)/bfdlink.h $(srcdir)/config/tc-avr.h subsegs.h \
   $(INCDIR)/obstack.h $(INCDIR)/opcode/avr.h
+DEPTC_cris_aout = $(srcdir)/config/obj-aout.h $(srcdir)/config/tc-cris.h \
+  $(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h subsegs.h $(INCDIR)/obstack.h \
+  $(INCDIR)/opcode/cris.h
+DEPTC_cris_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-cris.h \
+  $(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h \
+  subsegs.h $(INCDIR)/obstack.h $(INCDIR)/opcode/cris.h
+DEPTC_cris_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+  $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+  $(INCDIR)/bfdlink.h $(srcdir)/config/tc-cris.h subsegs.h \
+  $(INCDIR)/obstack.h $(INCDIR)/opcode/cris.h
 DEPTC_d10v_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-d10v.h \
   $(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h \
   subsegs.h $(INCDIR)/obstack.h $(INCDIR)/opcode/d10v.h \
@@ -995,13 +1017,12 @@ DEPTC_h8500_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
   $(INCDIR)/obstack.h $(srcdir)/../opcodes/h8500-opc.h
 DEPTC_hppa_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-hppa.h \
   $(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h \
-  subsegs.h $(INCDIR)/obstack.h $(BFDDIR)/libhppa.h $(BFDDIR)/libbfd.h \
-  $(INCDIR)/opcode/hppa.h
+  subsegs.h $(INCDIR)/obstack.h $(BFDDIR)/libhppa.h $(INCDIR)/opcode/hppa.h
 DEPTC_hppa_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
   $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
   $(INCDIR)/bfdlink.h $(srcdir)/config/tc-hppa.h $(BFDDIR)/elf32-hppa.h \
   $(BFDDIR)/libhppa.h $(INCDIR)/elf/hppa.h $(INCDIR)/elf/reloc-macros.h \
-  subsegs.h $(INCDIR)/obstack.h $(BFDDIR)/libbfd.h $(INCDIR)/opcode/hppa.h \
+  subsegs.h $(INCDIR)/obstack.h $(INCDIR)/opcode/hppa.h \
   dwarf2dbg.h
 DEPTC_ia64_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-ia64.h \
   $(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h \
@@ -1254,6 +1275,7 @@ DEPTC_i386_multi = $(DEPTC_i386_aout) $(DEPTC_i386_coff) \
   $(DEPTC_i386_elf)
 DEPTC_mips_multi = $(DEPTC_mips_coff) $(DEPTC_mips_ecoff) \
   $(DEPTC_mips_elf)
+DEPTC_cris_multi = $(DEPTC_cris_aout) $(DEPTC_cris_elf)
 DEPOBJ_a29k_aout = $(srcdir)/config/obj-aout.h $(srcdir)/config/tc-a29k.h \
   $(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h $(INCDIR)/aout/aout64.h \
   $(INCDIR)/obstack.h
@@ -1302,6 +1324,16 @@ DEPOBJ_avr_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
   $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
   $(INCDIR)/bfdlink.h $(srcdir)/config/tc-avr.h subsegs.h \
   $(INCDIR)/obstack.h $(INCDIR)/aout/aout64.h
+DEPOBJ_cris_aout = $(srcdir)/config/obj-aout.h $(srcdir)/config/tc-cris.h \
+  $(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h $(INCDIR)/aout/aout64.h \
+  $(INCDIR)/obstack.h
+DEPOBJ_cris_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-cris.h \
+  $(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h \
+  $(INCDIR)/obstack.h subsegs.h
+DEPOBJ_cris_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+  $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+  $(INCDIR)/bfdlink.h $(srcdir)/config/tc-cris.h subsegs.h \
+  $(INCDIR)/obstack.h $(INCDIR)/aout/aout64.h
 DEPOBJ_d10v_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-d10v.h \
   $(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h \
   $(INCDIR)/obstack.h subsegs.h
@@ -1576,6 +1608,7 @@ DEPOBJ_i386_multi = $(DEPOBJ_i386_aout) $(DEPOBJ_i386_coff) \
   $(DEPOBJ_i386_elf)
 DEPOBJ_mips_multi = $(DEPOBJ_mips_coff) $(DEPOBJ_mips_ecoff) \
   $(DEPOBJ_mips_elf)
+DEPOBJ_cris_multi = $(DEPOBJ_cris_aout) $(DEPOBJ_cris_elf)
 DEP_a29k_aout = $(srcdir)/config/obj-aout.h $(srcdir)/config/tc-a29k.h \
   $(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h
 DEP_a29k_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-a29k.h \
@@ -1610,6 +1643,13 @@ DEP_avr_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-avr.h \
 DEP_avr_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
   $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
   $(INCDIR)/bfdlink.h $(srcdir)/config/tc-avr.h
+DEP_cris_aout = $(srcdir)/config/obj-aout.h $(srcdir)/config/tc-cris.h \
+  $(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h
+DEP_cris_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-cris.h \
+  $(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h
+DEP_cris_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+  $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+  $(INCDIR)/bfdlink.h $(srcdir)/config/tc-cris.h
 DEP_d10v_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-d10v.h \
   $(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h
 DEP_d10v_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
@@ -1818,6 +1858,7 @@ DEP_i386_multi = $(DEP_i386_aout) $(DEP_i386_coff) \
   $(DEP_i386_elf)
 DEP_mips_multi = $(DEP_mips_coff) $(DEP_mips_ecoff) \
   $(DEP_mips_elf)
+DEP_cris_multi = $(DEP_cris_aout) $(DEP_cris_elf)
 BMKDEP = #DO NOT PUT ANYTHING BETWEEN THIS LINE AND THE MATCHING WARNING ABOVE.
 #MKDEP    DO NOT PUT ANYTHING BETWEEN THIS LINE AND THE MATCHING WARNING BELOW.
 app.o: app.c
@@ -1855,6 +1896,8 @@ symbols.o: symbols.c $(INCDIR)/obstack.h subsegs.h \
 write.o: write.c subsegs.h $(INCDIR)/obstack.h output-file.h
 gasp.o: gasp.c sb.h macro.h
 itbl-ops.o: itbl-ops.c itbl-ops.h
+e-crisaout.o: $(srcdir)/config/e-crisaout.c emul-target.h
+e-criself.o: $(srcdir)/config/e-criself.c emul-target.h
 e-i386aout.o: $(srcdir)/config/e-i386aout.c emul-target.h
 e-i386coff.o: $(srcdir)/config/e-i386coff.c emul-target.h
 e-i386elf.o: $(srcdir)/config/e-i386elf.c emul-target.h
index 41040852c27e63e3d02df4dca55da9ade573bbd3..edfed7d2553466b338d9e3954e63cc06fe62ecc6 100644 (file)
@@ -147,6 +147,7 @@ CPU_TYPES = \
        arc \
        arm \
        avr \
+       cris \
        d10v \
        d30v \
        fr30 \
@@ -206,7 +207,7 @@ CPU_OBJ_VALID = \
        case $$o in \
        aout) \
          case $$c in \
-         a29k | arm | i386 | i860 | m68k | mips | ns32k | sparc | tahoe | tic30 | vax) \
+         a29k | arm | cris | i386 | i860 | m68k | mips | ns32k | sparc | tahoe | tic30 | vax) \
            valid=yes ;; \
          esac ;; \
        bout) \
@@ -236,16 +237,19 @@ CPU_OBJ_VALID = \
 
 # These are like CPU_TYPES and CPU_OBJ_VALID, for the obj=multi case.
 
-MULTI_CPU_TYPES = i386 mips
+MULTI_CPU_TYPES = i386 mips cris
 
 MULTI_CPU_OBJ_VALID = \
        valid= ; \
        case $$o in \
        aout) \
          case $$c in \
-         i386) valid=yes ;; \
+         i386 | cris) valid=yes ;; \
+         esac ;; \
+       coff) \
+         case $$c in \
+         i386 | mips) valid=yes ;; \
          esac ;; \
-       coff) valid=yes ;; \
        ecoff) \
          case $$c in \
          mips) valid=yes ;; \
@@ -326,6 +330,7 @@ TARGET_CPU_CFILES = \
        config/tc-arc.c \
        config/tc-arm.c \
        config/tc-avr.c \
+       config/tc-cris.c \
        config/tc-d10v.c \
        config/tc-d30v.c \
        config/tc-fr30.c \
@@ -366,6 +371,7 @@ TARGET_CPU_HFILES = \
        config/tc-arc.h \
        config/tc-arm.h \
        config/tc-avr.h \
+       config/tc-cris.h \
        config/tc-d10v.h \
        config/tc-d30v.h \
        config/tc-fr30.h \
@@ -465,6 +471,8 @@ TARG_ENV_HFILES = \
 # Multi files in config
 
 MULTI_CFILES = \
+       config/e-crisaout.c \
+       config/e-criself.c \
        config/e-i386aout.c \
        config/e-i386coff.c \
        config/e-i386elf.c \
@@ -671,6 +679,19 @@ DEPTC_avr_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
   $(INCDIR)/bfdlink.h $(srcdir)/config/tc-avr.h subsegs.h \
   $(INCDIR)/obstack.h $(INCDIR)/opcode/avr.h
 
+DEPTC_cris_aout = $(srcdir)/config/obj-aout.h $(srcdir)/config/tc-cris.h \
+  $(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h subsegs.h $(INCDIR)/obstack.h \
+  $(INCDIR)/opcode/cris.h
+
+DEPTC_cris_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-cris.h \
+  $(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h \
+  subsegs.h $(INCDIR)/obstack.h $(INCDIR)/opcode/cris.h
+
+DEPTC_cris_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+  $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+  $(INCDIR)/bfdlink.h $(srcdir)/config/tc-cris.h subsegs.h \
+  $(INCDIR)/obstack.h $(INCDIR)/opcode/cris.h
+
 DEPTC_d10v_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-d10v.h \
   $(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h \
   subsegs.h $(INCDIR)/obstack.h $(INCDIR)/opcode/d10v.h \
@@ -724,14 +745,13 @@ DEPTC_h8500_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
 
 DEPTC_hppa_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-hppa.h \
   $(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h \
-  subsegs.h $(INCDIR)/obstack.h $(BFDDIR)/libhppa.h $(BFDDIR)/libbfd.h \
-  $(INCDIR)/opcode/hppa.h
+  subsegs.h $(INCDIR)/obstack.h $(BFDDIR)/libhppa.h $(INCDIR)/opcode/hppa.h
 
 DEPTC_hppa_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
   $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
   $(INCDIR)/bfdlink.h $(srcdir)/config/tc-hppa.h $(BFDDIR)/elf32-hppa.h \
   $(BFDDIR)/libhppa.h $(INCDIR)/elf/hppa.h $(INCDIR)/elf/reloc-macros.h \
-  subsegs.h $(INCDIR)/obstack.h $(BFDDIR)/libbfd.h $(INCDIR)/opcode/hppa.h \
+  subsegs.h $(INCDIR)/obstack.h $(INCDIR)/opcode/hppa.h \
   dwarf2dbg.h
 
 DEPTC_ia64_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-ia64.h \
@@ -1053,6 +1073,7 @@ DEPTC_i386_multi = $(DEPTC_i386_aout) $(DEPTC_i386_coff) \
 DEPTC_mips_multi = $(DEPTC_mips_coff) $(DEPTC_mips_ecoff) \
   $(DEPTC_mips_elf)
 
+DEPTC_cris_multi = $(DEPTC_cris_aout) $(DEPTC_cris_elf)
 DEPOBJ_a29k_aout = $(srcdir)/config/obj-aout.h $(srcdir)/config/tc-a29k.h \
   $(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h $(INCDIR)/aout/aout64.h \
   $(INCDIR)/obstack.h
@@ -1114,6 +1135,19 @@ DEPOBJ_avr_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
   $(INCDIR)/bfdlink.h $(srcdir)/config/tc-avr.h subsegs.h \
   $(INCDIR)/obstack.h $(INCDIR)/aout/aout64.h
 
+DEPOBJ_cris_aout = $(srcdir)/config/obj-aout.h $(srcdir)/config/tc-cris.h \
+  $(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h $(INCDIR)/aout/aout64.h \
+  $(INCDIR)/obstack.h
+
+DEPOBJ_cris_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-cris.h \
+  $(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h \
+  $(INCDIR)/obstack.h subsegs.h
+
+DEPOBJ_cris_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+  $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+  $(INCDIR)/bfdlink.h $(srcdir)/config/tc-cris.h subsegs.h \
+  $(INCDIR)/obstack.h $(INCDIR)/aout/aout64.h
+
 DEPOBJ_d10v_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-d10v.h \
   $(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h \
   $(INCDIR)/obstack.h subsegs.h
@@ -1468,6 +1502,7 @@ DEPOBJ_i386_multi = $(DEPOBJ_i386_aout) $(DEPOBJ_i386_coff) \
 DEPOBJ_mips_multi = $(DEPOBJ_mips_coff) $(DEPOBJ_mips_ecoff) \
   $(DEPOBJ_mips_elf)
 
+DEPOBJ_cris_multi = $(DEPOBJ_cris_aout) $(DEPOBJ_cris_elf)
 DEP_a29k_aout = $(srcdir)/config/obj-aout.h $(srcdir)/config/tc-a29k.h \
   $(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h
 
@@ -1515,6 +1550,16 @@ DEP_avr_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
   $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
   $(INCDIR)/bfdlink.h $(srcdir)/config/tc-avr.h
 
+DEP_cris_aout = $(srcdir)/config/obj-aout.h $(srcdir)/config/tc-cris.h \
+  $(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h
+
+DEP_cris_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-cris.h \
+  $(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h
+
+DEP_cris_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+  $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+  $(INCDIR)/bfdlink.h $(srcdir)/config/tc-cris.h
+
 DEP_d10v_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-d10v.h \
   $(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h
 
@@ -1801,6 +1846,7 @@ DEP_i386_multi = $(DEP_i386_aout) $(DEP_i386_coff) \
 DEP_mips_multi = $(DEP_mips_coff) $(DEP_mips_ecoff) \
   $(DEP_mips_elf)
 
+DEP_cris_multi = $(DEP_cris_aout) $(DEP_cris_elf)
 BMKDEP = #DO NOT PUT ANYTHING BETWEEN THIS LINE AND THE MATCHING WARNING ABOVE.
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 mkinstalldirs = $(SHELL) $(top_srcdir)/../mkinstalldirs
@@ -1843,7 +1889,7 @@ configure configure.in gdbinit.in itbl-lex.c itbl-parse.c
 
 DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
 
-TAR = gtar
+TAR = tar
 GZIP_ENV = --best
 SOURCES = $(itbl_test_SOURCES) $(as_new_SOURCES) $(EXTRA_as_new_SOURCES) $(gasp_new_SOURCES)
 OBJECTS = $(itbl_test_OBJECTS) $(as_new_OBJECTS) $(gasp_new_OBJECTS)
@@ -2319,6 +2365,10 @@ e-i386coff.o: $(srcdir)/config/e-i386coff.c
        $(COMPILE) -c $(srcdir)/config/e-i386coff.c
 e-i386elf.o: $(srcdir)/config/e-i386elf.c
        $(COMPILE) -c $(srcdir)/config/e-i386elf.c
+e-crisaout.o: $(srcdir)/config/e-crisaout.c
+       $(COMPILE) -c $(srcdir)/config/e-crisaout.c
+e-criself.o: $(srcdir)/config/e-criself.c
+       $(COMPILE) -c $(srcdir)/config/e-criself.c
 
 # If m68k-parse.y is in a different directory, then ylwrap will use an
 # absolute path when it invokes yacc, which will cause yacc to put the
@@ -2684,6 +2734,8 @@ symbols.o: symbols.c $(INCDIR)/obstack.h subsegs.h \
 write.o: write.c subsegs.h $(INCDIR)/obstack.h output-file.h
 gasp.o: gasp.c sb.h macro.h
 itbl-ops.o: itbl-ops.c itbl-ops.h
+e-crisaout.o: $(srcdir)/config/e-crisaout.c emul-target.h
+e-criself.o: $(srcdir)/config/e-criself.c emul-target.h
 e-i386aout.o: $(srcdir)/config/e-i386aout.c emul-target.h
 e-i386coff.o: $(srcdir)/config/e-i386coff.c emul-target.h
 e-i386elf.o: $(srcdir)/config/e-i386elf.c emul-target.h
index 2ae06cf088a4e21a032b19e6e5acd4f9b7d357d0..4b4ca84b06c19a6ed78672b51be9e5a7ed58a7b7 100644 (file)
@@ -173,7 +173,7 @@ LD="$LD" LDFLAGS="$LDFLAGS" LIBS="$LIBS" \
 LN_S="$LN_S" NM="$NM" RANLIB="$RANLIB" \
 DLLTOOL="$DLLTOOL" AS="$AS" OBJDUMP="$OBJDUMP" \
 ${CONFIG_SHELL-/bin/sh} $ac_aux_dir/ltconfig --no-reexec \
-$libtool_flags --no-verify $ac_aux_dir/ltmain.sh $host \
+$libtool_flags --no-verify $ac_aux_dir/ltmain.sh $lt_target \
 || AC_MSG_ERROR([libtool configure failed])
 
 # Reload cache, that may have been modified by ltconfig
@@ -205,6 +205,11 @@ AC_REQUIRE([AC_PROG_NM])dnl
 AC_REQUIRE([AC_PROG_LN_S])dnl
 dnl
 
+case "$target" in
+NONE) lt_target="$host" ;;
+*) lt_target="$target" ;;
+esac
+
 # Check for any special flags to pass to ltconfig.
 libtool_flags="--cache-file=$cache_file"
 test "$enable_shared" = no && libtool_flags="$libtool_flags --disable-shared"
@@ -223,7 +228,7 @@ test x"$silent" = xyes && libtool_flags="$libtool_flags --silent"
 
 # Some flags need to be propagated to the compiler or linker for good
 # libtool support.
-case "$host" in
+case "$lt_target" in
 *-*-irix6*)
   # Find out which ABI we are using.
   echo '[#]line __oline__ "configure"' > conftest.$ac_ext
@@ -490,7 +495,7 @@ AC_MSG_RESULT([$NM])
 AC_DEFUN(AC_CHECK_LIBM,
 [AC_REQUIRE([AC_CANONICAL_HOST])dnl
 LIBM=
-case "$host" in
+case "$lt_target" in
 *-*-beos* | *-*-cygwin*)
   # These system don't have libm
   ;;
index db21815035663b37c563af920679f96a037b3809..644c898d7deae90b32593fc9ccbb919acad56cfc 100644 (file)
--- a/gas/as.c
+++ b/gas/as.c
@@ -117,6 +117,7 @@ static struct itbl_file_list *itbl_files;
 extern struct emulation mipsbelf, mipslelf, mipself;
 extern struct emulation mipsbecoff, mipslecoff, mipsecoff;
 extern struct emulation i386coff, i386elf, i386aout;
+extern struct emulation crisaout, criself;
 
 static struct emulation *const emulations[] = { EMULATIONS };
 static const int n_emulations = sizeof (emulations) / sizeof (emulations[0]);
diff --git a/gas/config/e-crisaout.c b/gas/config/e-crisaout.c
new file mode 100644 (file)
index 0000000..b10bb2c
--- /dev/null
@@ -0,0 +1,17 @@
+#include "as.h"
+#include "emul.h"
+
+static const char *
+crisaout_bfd_name ()
+{
+  abort ();
+  return NULL;
+}
+
+#define emul_bfd_name  crisaout_bfd_name
+#define emul_format    &aout_format_ops
+
+#define emul_name      "crisaout"
+#define emul_struct_name crisaout
+#define emul_default_endian 0
+#include "emul-target.h"
diff --git a/gas/config/e-criself.c b/gas/config/e-criself.c
new file mode 100644 (file)
index 0000000..e1826a1
--- /dev/null
@@ -0,0 +1,17 @@
+#include "as.h"
+#include "emul.h"
+
+static const char *
+criself_bfd_name ()
+{
+  abort ();
+  return NULL;
+}
+
+#define emul_bfd_name  criself_bfd_name
+#define emul_format    &elf_format_ops
+
+#define emul_name      "criself"
+#define emul_struct_name criself
+#define emul_default_endian 0
+#include "emul-target.h"
diff --git a/gas/config/tc-cris.c b/gas/config/tc-cris.c
new file mode 100644 (file)
index 0000000..5a73bb1
--- /dev/null
@@ -0,0 +1,2789 @@
+/* tc-cris.c -- Assembler code for the CRIS CPU core.
+   Copyright (C) 2000 Free Software Foundation, Inc.
+
+   Contributed by Axis Communications AB, Lund, Sweden.
+   Originally written for GAS 1.38.1 by Mikael Asker.
+   Updated, BFDized and GNUified by Hans-Peter Nilsson.
+
+   This file is part of GAS, the GNU Assembler.
+
+   GAS is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+
+   GAS is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with GAS; see the file COPYING.  If not, write to the
+   Free Software Foundation, 59 Temple Place - Suite 330, Boston,
+   MA 02111-1307, USA. */
+
+#include <stdio.h>
+#include <ctype.h>
+#include "as.h"
+#include "subsegs.h"
+#include "opcode/cris.h"
+
+/* Conventions used here:
+   Generally speaking, pointers to binutils types such as "fragS" and
+   "expressionS" get parameter and variable names ending in "P", such as
+   "fragP", to harmonize with the rest of the binutils code.  Other
+   pointers get a "p" suffix, such as "bufp".  Any function or type-name
+   that could clash with a current or future binutils or GAS function get
+   a "cris_" prefix.  */
+
+/* This might be CRIS_INSN_NONE if we're assembling a prefix-insn only.
+   Note that some prefix-insns might be assembled as CRIS_INSN_NORMAL.  */
+enum cris_insn_kind
+{
+  CRIS_INSN_NORMAL, CRIS_INSN_NONE, CRIS_INSN_BRANCH
+};
+
+/* An instruction will have one of these prefixes.
+   Although the same bit-pattern, we handle BDAP with an immediate
+   expression (eventually quick or [pc+]) different from when we only have
+   register expressions.  */
+enum prefix_kind
+{
+  PREFIX_NONE, PREFIX_BDAP_IMM, PREFIX_BDAP, PREFIX_BIAP, PREFIX_DIP,
+  PREFIX_PUSH
+};
+
+/* The prefix for an instruction.  */
+struct cris_prefix
+{
+  enum prefix_kind        kind;
+  int                     base_reg_number;
+  unsigned int            opcode;
+
+  /* There might be an expression to be evaluated, like I in [rN+I].  */
+  expressionS             expr;
+
+  /* If there's an expression, we might need a relocation.  Here's the
+     type of what relocation to start relaxaton with.
+     The relocation is assumed to start immediately after the prefix insn,
+     so we don't provide an offset.  */
+  enum bfd_reloc_code_real reloc;
+};
+
+/* The description of the instruction being assembled. */
+struct cris_instruction
+{
+  /* If CRIS_INSN_NONE, then this insn is of zero length.  */
+  enum cris_insn_kind       insn_type;
+
+  /* If a special register was mentioned, this is its description, else
+     it is NULL. */
+  const struct cris_spec_reg *spec_reg;
+
+  unsigned int              opcode;
+
+  /* An insn may have at most one expression; theoretically there could be
+     another in its prefix (but I don't see how that could happen). */
+  expressionS               expr;
+
+  /* The expression might need a relocation.  Here's one to start
+     relaxation with.  */
+  enum bfd_reloc_code_real   reloc;
+
+  /* The size in bytes of an immediate expression, or zero in
+     nonapplicable.  */
+  int                       imm_oprnd_size;
+};
+
+static void cris_process_instruction PARAMS ((char *,
+                                             struct cris_instruction *,
+                                             struct cris_prefix *));
+static int get_bwd_size_modifier PARAMS ((char **, int *));
+static int get_bw_size_modifier PARAMS ((char **, int *));
+static int get_gen_reg PARAMS ((char **, int *));
+static int get_spec_reg PARAMS ((char **,
+                                const struct cris_spec_reg **));
+static int get_autoinc_prefix_or_indir_op PARAMS ((char **,
+                                                  struct cris_prefix *,
+                                                  int *, int *, int *,
+                                                  expressionS *));
+static int get_3op_or_dip_prefix_op PARAMS ((char **,
+                                            struct cris_prefix *));
+static int cris_get_expression PARAMS ((char **, expressionS *));
+static int get_flags PARAMS ((char **, int *));
+static void gen_bdap PARAMS ((int, expressionS *));
+static int branch_disp PARAMS ((int));
+static void gen_cond_branch_32 PARAMS ((char *, char *, fragS *,
+                                       symbolS *, symbolS *, long int));
+static void cris_number_to_imm PARAMS ((char *, long, int, fixS *));
+static void cris_create_short_jump PARAMS ((char *, addressT, addressT,
+                                           fragS *, symbolS *));
+/* Handle to the opcode hash table.  */
+static struct hash_control *op_hash = NULL;
+
+const pseudo_typeS md_pseudo_table[] =
+{
+  {"dword", cons, 4},
+  {NULL, 0, 0}
+};
+
+static int warn_for_branch_expansion = 0;
+
+const char cris_comment_chars[] = ";";
+
+/* This array holds the chars that only start a comment at the beginning of
+   a line.  If the line seems to have the form '# 123 filename'
+   .line and .file directives will appear in the pre-processed output */
+/* Note that input_file.c hand-checks for '#' at the beginning of the
+   first line of the input file.  This is because the compiler outputs
+   #NO_APP at the beginning of its output. */
+/* Also note that slash-star will always start a comment */
+const char line_comment_chars[] = "#";
+const char line_separator_chars[] = "@";
+
+/* Now all floating point support is shut off.  See md_atof.  */
+const char EXP_CHARS[] = "";
+const char FLT_CHARS[] = "";
+
+
+/* For CRIS, we encode the relax_substateTs (in e.g. fr_substate) as:
+                      2                 1                 0
+      ---/ /--+-----------------+-----------------+-----------------+
+             |  what state ?   |            how long ?             |
+      ---/ /--+-----------------+-----------------+-----------------+
+
+   The "how long" bits are 00 = byte, 01 = word, 10 = dword (long).
+   This is a Un*x convention.
+   Not all lengths are legit for a given value of (what state).
+
+   Groups for CRIS address relaxing:
+
+   1. Bcc
+      length: byte, word, 10-byte expansion
+
+   2. BDAP
+      length: byte, word, dword */
+
+#define STATE_CONDITIONAL_BRANCH    (1)
+#define STATE_BASE_PLUS_DISP_PREFIX (2)
+
+#define STATE_LENGTH_MASK          (3)
+#define STATE_BYTE                 (0)
+#define STATE_WORD                 (1)
+#define STATE_DWORD                (2)
+/* Symbol undefined.  */
+#define STATE_UNDF                 (3)
+#define STATE_MAX_LENGTH           (3)
+
+
+/* These displacements are relative to the adress following the opcode
+   word of the instruction.  The first letter is Byte, Word.  The 2nd
+   letter is Forward, Backward.  */
+
+#define BRANCH_BF ( 254)
+#define BRANCH_BB (-256)
+#define BRANCH_WF (2+ 32767)
+#define BRANCH_WB (2+-32768)
+
+#define BDAP_BF          ( 127)
+#define BDAP_BB          (-128)
+#define BDAP_WF          ( 32767)
+#define BDAP_WB          (-32768)
+
+#define ENCODE_RELAX(what, length) (((what) << 2) + (length))
+
+const relax_typeS md_cris_relax_table[] =
+{
+  /* Error sentinel (0, 0).  */
+  {1,        1,         0,  0},
+
+  /* Unused (0, 1).  */
+  {1,        1,         0,  0},
+
+  /* Unused (0, 2).  */
+  {1,        1,         0,  0},
+
+  /* Unused (0, 3).  */
+  {1,        1,         0,  0},
+
+  /* Bcc o (1, 0).  */
+  {BRANCH_BF, BRANCH_BB, 0,  ENCODE_RELAX (1, 1)},
+
+  /* Bcc [PC+] (1, 1). */
+  {BRANCH_WF, BRANCH_WB, 2,  ENCODE_RELAX (1, 2)},
+
+  /* BEXT/BWF, BA, JUMP (external), JUMP (always), Bnot_cc, JUMP (default)
+     (1, 2).  */
+  {0,        0,         10, 0},
+
+  /* Unused (1, 3).  */
+  {1,        1,         0,  0},
+
+  /* BDAP o (2, 0).  */
+  {BDAP_BF,   BDAP_BB,  0,  ENCODE_RELAX (2, 1)},
+
+  /* BDAP.[bw] [PC+] (2, 1).  */
+  {BDAP_WF,   BDAP_WB,  2,  ENCODE_RELAX (2, 2)},
+
+  /* BDAP.d [PC+] (2, 2).  */
+  {0,        0,         4,  0}
+};
+
+#undef BRANCH_BF
+#undef BRANCH_BB
+#undef BRANCH_WF
+#undef BRANCH_WB
+#undef BDAP_BF
+#undef BDAP_BB
+#undef BDAP_WF
+#undef BDAP_WB
+
+
+/* Target-specific multicharacter options, not const-declared at usage
+   in 2.9.1 and CVS of 2000-02-16.  */
+struct option md_longopts[] =
+{
+  {NULL, no_argument, NULL, 0}
+};
+
+/* Not const-declared at usage in 2.9.1.  */
+size_t md_longopts_size = sizeof (md_longopts);
+const char *md_shortopts = "hHN";
+
+
+/* At first glance, this may seems wrong and should be 4 (ba + nop); but
+   since a short_jump must skip a *number* of long jumps, it must also be
+   a long jump.  Here, we hope to make it a "ba [16bit_offs]" and a "nop"
+   for the delay slot and hope that the jump table at most needs
+   32767/4=8191 long-jumps.  A branch is better than a jump, since it is
+   relative; we will not have a reloc to fix up somewhere.
+
+   Note that we can't add relocs, because relaxation uses these fixed
+   numbers, and md_create_short_jump is called after relaxation.  */
+
+const int md_short_jump_size = 6;
+const int md_long_jump_size = 6;
+
+
+/* Report output format.  */
+const char *
+cris_target_format ()
+{
+  switch (OUTPUT_FLAVOR)
+    {
+    case bfd_target_aout_flavour:
+      return "a.out-cris";
+
+    case bfd_target_elf_flavour:
+      return "elf32-cris";
+
+    default:
+      abort ();
+      return NULL;
+    }
+}
+
+/* Prepare machine-dependent frags for relaxation.
+
+   Called just before relaxation starts. Any symbol that is now undefined
+   will not become defined.
+
+   Return the correct fr_subtype in the frag.
+
+   Return the initial "guess for fr_var" to caller.  The guess for fr_var
+   is *actually* the growth beyond fr_fix. Whatever we do to grow fr_fix
+   or fr_var contributes to our returned value.
+
+   Although it may not be explicit in the frag, pretend
+   fr_var starts with a value. */
+
+int
+md_estimate_size_before_relax (fragP, segment_type)
+     fragS *fragP;
+     /* The segment is either N_DATA or N_TEXT.  */
+     segT    segment_type;
+{
+  int  old_fr_fix;
+
+  old_fr_fix = fragP->fr_fix;
+
+  switch (fragP->fr_subtype)
+    {
+    case ENCODE_RELAX (STATE_CONDITIONAL_BRANCH, STATE_UNDF):
+      if (S_GET_SEGMENT (fragP->fr_symbol) == segment_type)
+       {
+         /* The symbol lies in the same segment - a relaxable case.  */
+         fragP->fr_subtype
+           = ENCODE_RELAX (STATE_CONDITIONAL_BRANCH, STATE_BYTE);
+       }
+      else
+       {
+         /* Unknown or not the same segment, so not relaxable.  */
+         char *writep;
+
+         /* A small branch-always (2 bytes) to the "real" branch
+            instruction, plus a delay-slot nop (2 bytes), plus a
+            jump (2 plus 4 bytes).  See gen_cond_branch_32.  */
+         fragP->fr_fix += 2 + 2 + 2 + 4;
+         writep = fragP->fr_literal + old_fr_fix;
+         gen_cond_branch_32 (fragP->fr_opcode, writep, fragP,
+                             fragP->fr_symbol, (symbolS *)NULL,
+                             fragP->fr_offset);
+         frag_wane (fragP);
+       }
+      break;
+
+    case ENCODE_RELAX (STATE_CONDITIONAL_BRANCH, STATE_BYTE):
+    case ENCODE_RELAX (STATE_CONDITIONAL_BRANCH, STATE_WORD):
+      /* We *might* give a better initial guess if we peek at offsets
+        now, but the caller will relax correctly and without this, so
+        don't bother.  */
+      break;
+
+    case ENCODE_RELAX (STATE_BASE_PLUS_DISP_PREFIX, STATE_UNDF):
+      /* Note that we can not do anything sane with relaxing
+        [rX + a_known_symbol_in_text], it will have to be a 32-bit
+        value.
+
+        We could play tricks with managing a constant pool and make
+        a_known_symbol_in_text a "bdap [pc + offset]" pointing there, but
+        that's pointless, it can only be longer and slower.
+
+        Off-topic: If PIC becomes *really* important, and has to be done
+        in the assembler and linker only (which would be weird or
+        clueless), we can so something.  Imagine:
+          move.x [r + 32_bit_symbol],r
+          move.x [32_bit_symbol],r
+          move.x 32_bit_symbol,r
+        can be shortened by a word (8-bit offset) if we are close to the
+        symbol or keep its length (16-bit offset) or be a word longer
+        (32-bit offset).  Then change the 32_bit_symbol into a "bdap [pc
+        + offset]", and put the offset to the 32_bit_symbol in "offset".
+        Weird, to say the least, and we still have to add support for a
+        PC-relative relocation in the loader (shared libraries).  But
+        it's an interesting thought.  */
+
+      if (S_GET_SEGMENT (fragP->fr_symbol) != absolute_section)
+       {
+         /* Go for dword if not absolute or same segment.  */
+         fragP->fr_subtype
+           = ENCODE_RELAX (STATE_BASE_PLUS_DISP_PREFIX, STATE_DWORD);
+         fragP->fr_var += 4;
+       }
+      else
+       {
+         /* Absolute expression.  */
+         long int value;
+         value = S_GET_VALUE (fragP->fr_symbol) + fragP->fr_offset;
+
+         if (value >= -128 && value <= 127)
+           {
+             /* Byte displacement.  */
+             (fragP->fr_opcode)[0] = value;
+           }
+         else
+           {
+             /* Word or dword displacement.  */
+             int pow2_of_size = 1;
+             char *writep;
+
+             if (value < -32768 || value > 32767)
+               {
+                 /* Outside word range, make it a dword.  */
+                 pow2_of_size = 2;
+               }
+
+             /* Modify the byte-offset BDAP into a word or dword offset
+                BDAP.  Or really, a BDAP rX,8bit into a
+                BDAP.[wd] rX,[PC+] followed by a and a word or dword.  */
+             (fragP->fr_opcode)[0] = BDAP_PC_LOW + pow2_of_size * 16;
+
+             /* Keep the register number in the highest four bits.  */
+             (fragP->fr_opcode)[1] &= 0xF0;
+             (fragP->fr_opcode)[1] |= BDAP_INCR_HIGH;
+
+             /* It grew by two or four bytes.  */
+             fragP->fr_fix += 1 << pow2_of_size;
+             writep = fragP->fr_literal + old_fr_fix;
+             md_number_to_chars (writep, value, 1 << pow2_of_size);
+           }
+         frag_wane (fragP);
+       }
+      break;
+
+    default:
+      BAD_CASE (fragP->fr_subtype);
+    }
+
+  return fragP->fr_var + (fragP->fr_fix - old_fr_fix);
+}
+
+
+/* Perform post-processing of machine-dependent frags after relaxation.
+   Called after relaxation is finished.
+   In: Address of frag.
+       fr_type == rs_machine_dependent.
+       fr_subtype is what the address relaxed to.
+
+   Out: Any fixS:s and constants are set up.
+
+   The caller will turn the frag into a ".space 0".  */
+
+void
+md_convert_frag (abfd, sec, fragP)
+     bfd *abfd ATTRIBUTE_UNUSED;
+     segT sec ATTRIBUTE_UNUSED;
+     fragS *fragP;
+{
+  /* Pointer to first byte in variable-sized part of the frag. */
+  char *var_partp;
+
+  /* Pointer to first opcode byte in frag.  */
+  char *opcodep;
+
+  /* Used to check integrity of the relaxation.
+     One of 2 = long, 1 = word, or 0 = byte.  */
+  int length_code;
+
+  /* Size in bytes of variable-sized part of frag.  */
+  int var_part_size = 0;
+
+  /* This is part of *fragP.  It contains all information about addresses
+     and offsets to varying parts.  */
+  symbolS *symbolP;
+  unsigned long var_part_offset;
+
+  /* Where, in file space, is _var of *fragP?  */
+  unsigned long address_of_var_part = 0;
+
+  /* Where, in file space, does addr point?  */
+  unsigned long target_address;
+
+  know (fragP->fr_type == rs_machine_dependent);
+
+  length_code = fragP->fr_subtype & STATE_LENGTH_MASK;
+  know (length_code >= 0 && length_code < STATE_MAX_LENGTH);
+
+  var_part_offset = fragP->fr_fix;
+  var_partp = fragP->fr_literal + var_part_offset;
+  opcodep = fragP->fr_opcode;
+
+  symbolP = fragP->fr_symbol;
+  target_address
+    = (symbolP
+       ? S_GET_VALUE (symbolP) + symbol_get_frag(fragP->fr_symbol)->fr_address
+       : 0 ) + fragP->fr_offset;
+  address_of_var_part = fragP->fr_address + var_part_offset;
+
+  switch (fragP->fr_subtype)
+  {
+  case ENCODE_RELAX (STATE_CONDITIONAL_BRANCH, STATE_BYTE):
+    opcodep[0] = branch_disp ((target_address - address_of_var_part));
+    var_part_size = 0;
+    break;
+
+  case ENCODE_RELAX (STATE_CONDITIONAL_BRANCH, STATE_WORD):
+    /* We had a quick immediate branch, now turn it into a word one i.e. a
+       PC autoincrement.  */
+    opcodep[0] = BRANCH_PC_LOW;
+    opcodep[1] &= 0xF0;
+    opcodep[1] |= BRANCH_INCR_HIGH;
+    md_number_to_chars (var_partp,
+                       (long) (target_address - (address_of_var_part + 2)),
+                       2);
+    var_part_size = 2;
+    break;
+
+  case ENCODE_RELAX (STATE_CONDITIONAL_BRANCH, STATE_DWORD):
+    gen_cond_branch_32 (fragP->fr_opcode, var_partp, fragP,
+                       fragP->fr_symbol, (symbolS *)NULL,
+                       fragP->fr_offset);
+    /* Ten bytes added: a branch, nop and a jump.  */
+    var_part_size = 2 + 2 + 4 + 2;
+    break;
+
+  case ENCODE_RELAX (STATE_BASE_PLUS_DISP_PREFIX, STATE_BYTE):
+    var_partp[0] = target_address - (address_of_var_part + 1);
+    var_part_size = 0;
+    break;
+
+  case ENCODE_RELAX (STATE_BASE_PLUS_DISP_PREFIX, STATE_WORD):
+    /* We had a BDAP 8-bit "quick immediate", now turn it into a 16-bit
+       one that uses PC autoincrement. */
+    opcodep[0] = BDAP_PC_LOW + (1 << 4);
+    opcodep[1] &= 0xF0;
+    opcodep[1] |= BDAP_INCR_HIGH;
+    md_number_to_chars (var_partp, (long)(target_address), 2);
+    var_part_size = 2;
+    break;
+
+  case ENCODE_RELAX (STATE_BASE_PLUS_DISP_PREFIX, STATE_DWORD):
+    /* We had a BDAP 16-bit "word", change the offset to a dword.  */
+    opcodep[0] = BDAP_PC_LOW + (2 << 4);
+    opcodep[1] &= 0xF0;
+    opcodep[1] |= BDAP_INCR_HIGH;
+    if (fragP->fr_symbol == NULL)
+      md_number_to_chars (var_partp, fragP->fr_offset, 4);
+    else
+      fix_new (fragP, var_partp - fragP->fr_literal, 4, fragP->fr_symbol,
+              fragP->fr_offset, 0, BFD_RELOC_32);
+    var_part_size = 4;
+    break;
+
+  default:
+    BAD_CASE (fragP->fr_subtype);
+    break;
+  }
+
+  fragP->fr_fix += var_part_size;
+
+}
+
+/* Generate a short jump around a secondary jump table.
+   Used by md_create_long_jump.
+
+   This used to be md_create_short_jump, but is now called from
+   md_create_long_jump instead, when sufficient.
+   since the sizes of the jumps are the same.  It used to be brittle,
+   making possibilities for creating bad code. */
+
+static void
+cris_create_short_jump (storep, from_addr, to_addr, fragP, to_symbol)
+     char *storep;
+     addressT from_addr;
+     addressT to_addr;
+     fragS *fragP ATTRIBUTE_UNUSED;
+     symbolS *to_symbol ATTRIBUTE_UNUSED;
+{
+  long int distance;
+
+  distance = to_addr - from_addr;
+
+  if (-254 <= distance && distance <= 256)
+    {
+      /* Create a "short" short jump: "BA distance - 2".  */
+      storep[0] = branch_disp (distance-2);
+      storep[1] = BA_QUICK_HIGH;
+
+      /* A nop for the delay slot.  */
+      md_number_to_chars (storep+2, NOP_OPCODE, 2);
+
+      /* The extra word should be filled with something sane too.  Make it
+        a nop to keep disassembly sane.  */
+      md_number_to_chars (storep+4, NOP_OPCODE, 2);
+    }
+  else
+    {
+      /* Make it a "long" short jump: "BA (PC+)".  */
+      md_number_to_chars (storep, BA_PC_INCR_OPCODE, 2);
+
+      /* ".WORD distance - 4". */
+      md_number_to_chars (storep + 2, (long) (distance - 4), 2);
+
+      /* A nop for the delay slot.  */
+      md_number_to_chars (storep+4, NOP_OPCODE, 2);
+    }
+}
+
+
+/* Generate a long jump in a secondary jump table.
+
+   storep  Where to store the jump instruction.
+   from_addr  Address of the jump instruction.
+   to_addr    Destination address of the jump.
+   fragP      Which frag the destination address operand
+             lies in.
+   to_symbol  Destination symbol.  */
+
+void
+md_create_long_jump (storep, from_addr, to_addr, fragP, to_symbol)
+     char *storep;
+     addressT from_addr;
+     addressT to_addr;
+     fragS *fragP;
+     symbolS *to_symbol;
+{
+  long int distance;
+
+  distance = to_addr - from_addr;
+
+  if (-32763 <= distance && distance <= 32772)
+    {
+      /* Then make it a "short" long jump.  */
+      cris_create_short_jump (storep, from_addr, to_addr, fragP,
+                             to_symbol);
+    }
+  else
+    {
+      /* We have a "long" long jump: "JUMP (PC+)".  */
+      md_number_to_chars (storep, JUMP_PC_INCR_OPCODE, 2);
+
+      /* Follow with a ".DWORD to_addr".  */
+      fix_new (fragP, storep + 2 - fragP->fr_literal, 4, to_symbol,
+              0, 0, BFD_RELOC_32);
+    }
+}
+
+
+/* Port-specific assembler initialization.  */
+void
+md_begin ()
+{
+  const char *hashret = NULL;
+  int i = 0;
+
+  /* Set up a hash table for the instructions. */
+  op_hash = hash_new ();
+  if (op_hash == NULL)
+    as_fatal (_("Virtual memory exhausted"));
+
+  while (cris_opcodes[i].name != NULL)
+    {
+      const char *name = cris_opcodes[i].name;
+      hashret = hash_insert (op_hash, name, (PTR) &cris_opcodes[i]);
+
+      if (hashret != NULL && *hashret != '\0')
+       as_fatal (_("Can't hash `%s': %s\n"), cris_opcodes[i].name,
+                   *hashret == 0 ? _("(unknown reason)") : hashret);
+      do
+       {
+         if (cris_opcodes[i].match & cris_opcodes[i].lose)
+           as_fatal (_("Buggy opcode: `%s' \"%s\"\n"), cris_opcodes[i].name,
+                     cris_opcodes[i].args);
+
+         ++i;
+       } while (cris_opcodes[i].name != NULL
+                && strcmp (cris_opcodes[i].name, name) == 0);
+    }
+}
+
+
+/* Assemble a source line.  */
+void
+md_assemble (str)
+     char *str;
+{
+  struct cris_instruction output_instruction;
+  struct cris_prefix prefix;
+  char *opcodep;
+  char *p;
+
+  know (str);
+
+  /* Do the low-level grunt - assemble to bits and split up into a prefix
+     and ordinary insn.  */
+  cris_process_instruction (str, &output_instruction, &prefix);
+
+  /* Handle any prefixes to the instruction.  */
+  switch (prefix.kind)
+    {
+    case PREFIX_NONE:
+      break;
+
+      /* When the expression is unknown for a BDAP, it can need 0, 2 or 4
+        extra bytes, so we handle it separately.  */
+    case PREFIX_BDAP_IMM:
+      gen_bdap (prefix.base_reg_number, &prefix.expr);
+      break;
+
+    case PREFIX_BDAP:
+    case PREFIX_BIAP:
+    case PREFIX_DIP:
+      opcodep = frag_more (2);
+
+      /* Output the prefix opcode.  */
+      md_number_to_chars (opcodep, (long) prefix.opcode, 2);
+
+      /* This only happens for DIP, but is ok for the others as they have
+        no reloc.  */
+      if (prefix.reloc != BFD_RELOC_NONE)
+       {
+         /* Output an absolute mode address. */
+         p = frag_more (4);
+         fix_new_exp (frag_now, (p - frag_now->fr_literal), 4,
+                      &prefix.expr, 0, prefix.reloc);
+       }
+      break;
+
+    case PREFIX_PUSH:
+      opcodep = frag_more (2);
+
+      /* Output the prefix opcode.  Being a "push", we add the negative
+        size of the register to "sp".  */
+      if (output_instruction.spec_reg != NULL)
+       {
+         /* Special register.  */
+         opcodep[0] = -output_instruction.spec_reg->reg_size;
+       }
+      else
+       {
+         /* General register.  */
+         opcodep[0] = -4;
+       }
+      opcodep[1] = (REG_SP << 4) + (BDAP_QUICK_OPCODE >> 8);
+      break;
+
+    default:
+      BAD_CASE (prefix.kind);
+    }
+
+  /* If we only had a prefix insn, we're done.  */
+  if (output_instruction.insn_type == CRIS_INSN_NONE)
+    return;
+
+  /* Done with the prefix.  Continue with the main instruction.  */
+  opcodep = frag_more (2);
+
+  /* Output the instruction opcode.  */
+  md_number_to_chars (opcodep, (long)(output_instruction.opcode), 2);
+
+  /* Output the symbol-dependent instruction stuff.  */
+  if (output_instruction.insn_type == CRIS_INSN_BRANCH)
+    {
+      segT to_seg = absolute_section;
+      int is_undefined = 0;
+      int length_code;
+
+      if (output_instruction.expr.X_op != O_constant)
+       {
+         to_seg = S_GET_SEGMENT (output_instruction.expr.X_add_symbol);
+
+         if (to_seg == undefined_section)
+           is_undefined = 1;
+       }
+
+      if (output_instruction.expr.X_op == O_constant
+         || to_seg == now_seg || is_undefined)
+       {
+         /* If is_undefined, then the expression may BECOME now_seg.  */
+         length_code = is_undefined ?  STATE_UNDF :  STATE_BYTE;
+
+         /* Make room for max ten bytes of variable length.  */
+         frag_var (rs_machine_dependent, 10, 0,
+                   ENCODE_RELAX (STATE_CONDITIONAL_BRANCH, length_code),
+                   output_instruction.expr.X_add_symbol,
+                   output_instruction.expr.X_add_number,
+                   opcodep);
+       }
+      else
+       {
+         /* We have: to_seg != now_seg && to_seg != undefined_section.
+            This means it is a branch to a known symbol in another
+            section.  Code in data?  Weird but valid.  Emit a 32-bit
+            branch.  */
+         gen_cond_branch_32 (opcodep, frag_more (10), frag_now,
+                             output_instruction.expr.X_add_symbol,
+                             (symbolS *)NULL,
+                             output_instruction.expr.X_add_number);
+       }
+    }
+  else
+    {
+      if (output_instruction.imm_oprnd_size > 0)
+       {
+         /* The intruction has an immediate operand.  */
+         enum bfd_reloc_code_real reloc = 0;
+
+         switch (output_instruction.imm_oprnd_size)
+           {
+             /* Any byte-size immediate constants are treated as
+                word-size.  FIXME: Thus overflow check does not work
+                correctly.  */
+
+           case 2:
+             reloc = BFD_RELOC_16;
+             break;
+
+           case 4:
+             reloc = BFD_RELOC_32;
+             break;
+
+           default:
+             BAD_CASE (output_instruction.imm_oprnd_size);
+           }
+
+         p = frag_more (output_instruction.imm_oprnd_size);
+         fix_new_exp (frag_now, (p - frag_now->fr_literal),
+                      output_instruction.imm_oprnd_size,
+                      &output_instruction.expr, 0, reloc);
+       }
+      else if (output_instruction.reloc != BFD_RELOC_NONE)
+       {
+         /* An immediate operand that has a relocation and needs to be
+            processed further. */
+
+         /* It is important to use fix_new_exp here and everywhere else
+            (and not fix_new), as fix_new_exp can handle "difference
+            expressions" - where the expression contains a difference of
+            two symbols in the same segment.  */
+         fix_new_exp (frag_now, (opcodep - frag_now->fr_literal), 2,
+                      &output_instruction.expr, 0,
+                      output_instruction.reloc);
+       }
+    }
+}
+
+
+/* Low level text-to-bits assembly.  */
+static void
+cris_process_instruction (insn_text, out_insnp, prefixp)
+     char *insn_text;
+     struct cris_instruction  *out_insnp;
+     struct cris_prefix *prefixp;
+{
+  char              *s;
+  char              modified_char = 0;
+  const char        *args;
+  struct cris_opcode *instruction;
+  char              *operands;
+  int               match = 0;
+  int               mode;
+  int               regno;
+  int               size_bits;
+
+  /* Reset these fields to a harmless state in case we need to return in
+     error.  */
+  prefixp->kind = PREFIX_NONE;
+  prefixp->reloc = BFD_RELOC_NONE;
+  out_insnp->insn_type = CRIS_INSN_NORMAL;
+  out_insnp->imm_oprnd_size = 0;
+
+  /* Find the end of the opcode mnemonic.  We assume (true in 2.9.1)
+     that the caller has translated the opcode to lower-case, up to the
+     first non-letter. */
+  for (operands = insn_text;
+       islower (*operands);
+       ++operands)
+    ;
+
+  /* Terminate the opcode after letters, but save the character there if
+     it was of significance.  */
+  switch (*operands)
+    {
+    case '\0':
+      break;
+
+    case '.':
+      /* Put back the modified character later */
+      modified_char = *operands;
+      /* FALLTHROUGH.  */
+
+    case ' ':
+      /* Consume the character after the mnemonic and replace */
+      /* it with '\0'.                                       */
+      *operands++ = '\0';
+      break;
+
+    default:
+      as_bad (_("Unknown opcode: `%s'"), insn_text);
+      return;
+    }
+
+  /* Find the instruction.  */
+  instruction = (struct cris_opcode *) hash_find (op_hash, insn_text);
+  if (instruction == NULL)
+    {
+      as_bad (_("Unknown opcode: `%s'"), insn_text);
+      return;
+    }
+
+  /* Put back the modified character.  */
+  switch (modified_char)
+    {
+    case 0:
+      break;
+
+    default:
+      *--operands = modified_char;
+    }
+
+
+  /* Try to match an opcode table slot.  */
+  for (s = operands;
+       ;
+       )
+    {
+      int  imm_expr_found;
+
+      /* Initialize *prefixp, perhaps after being modified for a
+        "near match".  */
+      prefixp->kind = PREFIX_NONE;
+      prefixp->reloc = BFD_RELOC_NONE;
+
+      /* Initialize *out_insnp.  */
+      memset (out_insnp, 0, sizeof (*out_insnp));
+      out_insnp->opcode = instruction->match;
+      out_insnp->reloc = BFD_RELOC_NONE;
+      out_insnp->insn_type = CRIS_INSN_NORMAL;
+      out_insnp->imm_oprnd_size = 0;
+
+      imm_expr_found = 0;
+
+      /* Build the opcode, checking as we go to make sure that the
+        operands match.  */
+      for (args = instruction->args;
+          ;
+          ++args)
+       {
+         switch (*args)
+           {
+           case '\0':
+             /* If we've come to the end of arguments, we're done.  */
+             if (*s == '\0')
+               match = 1;
+             break;
+
+           case '!':
+             /* Non-matcher character for disassembly.
+                Ignore it here.  */
+             continue;
+
+           case ',':
+           case ' ':
+             /* These must match exactly.  */
+             if (*s++ == *args)
+               continue;
+             break;
+
+           case 'B':
+             /* This is not really an operand, but causes a "BDAP
+                -size,SP" prefix to be output, for PUSH instructions.  */
+             prefixp->kind = PREFIX_PUSH;
+             continue;
+
+           case 'b':
+             /* This letter marks an operand that should not be matched
+                in the assembler. It is a branch with 16-bit
+                displacement.  The assembler will create them from the
+                8-bit flavor when necessary.  The assembler does not
+                support the [rN+] operand, as the [r15+] that is
+                generated for 16-bit displacements.  */
+             break;
+
+           case 'c':
+             /* A 5-bit unsigned immediate in bits <4:0>.  */
+             if (! cris_get_expression (&s, &out_insnp->expr))
+               break;
+             else
+               {
+                 if (out_insnp->expr.X_op == O_constant
+                     && (out_insnp->expr.X_add_number < 0
+                         || out_insnp->expr.X_add_number > 31))
+                   as_bad (_("Immediate value not in 5 bit unsigned range: %ld"),
+                           out_insnp->expr.X_add_number);
+
+                 out_insnp->reloc = BFD_RELOC_CRIS_UNSIGNED_5;
+                 continue;
+               }
+
+           case 'C':
+             /* A 4-bit unsigned immediate in bits <3:0>.  */
+             if (! cris_get_expression (&s, &out_insnp->expr))
+               break;
+             else
+               {
+                 if (out_insnp->expr.X_op == O_constant
+                     && (out_insnp->expr.X_add_number < 0
+                         || out_insnp->expr.X_add_number > 15))
+                   as_bad (_("Immediate value not in 4 bit unsigned range: %ld"),
+                           out_insnp->expr.X_add_number);
+
+                 out_insnp->reloc = BFD_RELOC_CRIS_UNSIGNED_4;
+                 continue;
+               }
+
+           case 'D':
+             /* General register in bits <15:12> and <3:0>.  */
+             if (! get_gen_reg (&s, &regno))
+               break;
+             else
+               {
+                 out_insnp->opcode |= regno /* << 0 */;
+                 out_insnp->opcode |= regno << 12;
+                 continue;
+               }
+
+           case 'f':
+             /* Flags from the condition code register.  */
+             {
+               int flags = 0;
+
+               if (! get_flags (&s, &flags))
+                 break;
+
+               out_insnp->opcode
+                 |= ((flags & 0xf0) << 8) | (flags & 0xf);
+               continue;
+             }
+
+           case 'i':
+             /* A 6-bit signed immediate in bits <5:0>.  */
+             if (! cris_get_expression (&s, &out_insnp->expr))
+               break;
+             else
+               {
+                 if (out_insnp->expr.X_op == O_constant
+                     && (out_insnp->expr.X_add_number < -32
+                         || out_insnp->expr.X_add_number > 31))
+                   as_bad (_("Immediate value not in 6 bit range: %ld"),
+                           out_insnp->expr.X_add_number);
+                 out_insnp->reloc = BFD_RELOC_CRIS_SIGNED_6;
+                 continue;
+               }
+
+           case 'I':
+             /* A 6-bit unsigned immediate in bits <5:0>.  */
+             if (! cris_get_expression (&s, &out_insnp->expr))
+               break;
+             else
+               {
+                 if (out_insnp->expr.X_op == O_constant
+                     && (out_insnp->expr.X_add_number < 0
+                         || out_insnp->expr.X_add_number > 63))
+                   as_bad (_("Immediate value not in 6 bit unsigned range: %ld"),
+                           out_insnp->expr.X_add_number);
+                 out_insnp->reloc = BFD_RELOC_CRIS_UNSIGNED_6;
+                 continue;
+               }
+
+           case 'M':
+             /* A size modifier, B, W or D, to be put in a bit position
+                suitable for CLEAR instructions (i.e. reflecting a zero
+                register).  */
+             if (! get_bwd_size_modifier (&s, &size_bits))
+               break;
+             else
+               {
+                 switch (size_bits)
+                   {
+                   case 0:
+                     out_insnp->opcode |= 0 << 12;
+                     break;
+
+                   case 1:
+                     out_insnp->opcode |= 4 << 12;
+                     break;
+
+                   case 2:
+                     out_insnp->opcode |= 8 << 12;
+                     break;
+                   }
+                 continue;
+               }
+
+           case 'm':
+             /* A size modifier, B, W or D, to be put in bits <5:4>.  */
+             if (! get_bwd_size_modifier (&s, &size_bits))
+               break;
+             else
+               {
+                 out_insnp->opcode |= size_bits << 4;
+                 continue;
+               }
+
+           case 'o':
+             /* A branch expression.  */
+             if (! cris_get_expression (&s, &out_insnp->expr))
+               break;
+             else
+               {
+                 out_insnp->insn_type = CRIS_INSN_BRANCH;
+                 continue;
+               }
+
+           case 'O':
+             /* A BDAP expression for any size, "expr,r".  */
+             if (! cris_get_expression (&s, &prefixp->expr))
+               break;
+             else
+               {
+                 if (*s != ',')
+                   break;
+
+                 s++;
+
+                 if (!get_gen_reg (&s, &prefixp->base_reg_number))
+                   break;
+
+                 /* Since 'O' is used with an explicit bdap, we have no
+                    "real" instruction. */
+                 prefixp->kind = PREFIX_BDAP_IMM;
+                 out_insnp->insn_type = CRIS_INSN_NONE;
+                 continue;
+               }
+
+           case 'P':
+             /* Special register in bits <15:12>.  */
+             if (! get_spec_reg (&s, &out_insnp->spec_reg))
+               break;
+             else
+               {
+                 /* Use of some special register names come with a
+                    specific warning.  Note that we have no ".cpu type"
+                    pseudo yet, so some of this is just unused
+                    framework.  */
+                 if (out_insnp->spec_reg->warning)
+                   as_warn (out_insnp->spec_reg->warning);
+                 else if (out_insnp->spec_reg->applicable_version
+                          == cris_ver_warning)
+                   /* Others have a generic warning.  */
+                   as_warn (_("Unimplemented register `%s' specified"),
+                            out_insnp->spec_reg->name);
+
+                 out_insnp->opcode
+                   |= out_insnp->spec_reg->number << 12;
+                 continue;
+               }
+
+           case 'p':
+             /* This character is used in the disassembler to
+                recognize a prefix instruction to fold into the
+                addressing mode for the next instruction.  It is
+                ignored here.  */
+             continue;
+
+           case 'R':
+             /* General register in bits <15:12>.  */
+             if (! get_gen_reg (&s, &regno))
+               break;
+             else
+               {
+                 out_insnp->opcode |= regno << 12;
+                 continue;
+               }
+
+           case 'r':
+             /* General register in bits <3:0>.  */
+             if (! get_gen_reg (&s, &regno))
+               break;
+             else
+               {
+                 out_insnp->opcode |= regno /* << 0 */;
+                 continue;
+               }
+
+           case 'S':
+             /* Source operand in bit <10> and a prefix; a 3-operand
+                prefix.  */
+             if (! get_3op_or_dip_prefix_op (&s, prefixp))
+               break;
+             else
+               continue;
+
+           case 's':
+             /* Source operand in bits <10>, <3:0> and optionally a
+                prefix; i.e. an indirect operand or an side-effect
+                prefix.  */
+             if (! get_autoinc_prefix_or_indir_op (&s, prefixp, &mode,
+                                                   &regno,
+                                                   &imm_expr_found,
+                                                   &out_insnp->expr))
+               break;
+             else
+               {
+                 if (prefixp->kind != PREFIX_NONE)
+                   {
+                     /* A prefix, so it has the autoincrement bit
+                        set.  */
+                     out_insnp->opcode |= (AUTOINCR_BIT << 8);
+                   }
+                 else
+                   /* No prefix.  The "mode" variable contains bits like
+                      whether or not this is autoincrement mode.  */
+                   out_insnp->opcode |= (mode << 10);
+
+                 out_insnp->opcode |= regno /* << 0 */ ;
+                 continue;
+               }
+
+           case 'x':
+             /* Rs.m in bits <15:12> and <5:4>.  */
+             if (! get_gen_reg (&s, &regno)
+                 || ! get_bwd_size_modifier (&s, &size_bits))
+               break;
+             else
+               {
+                 out_insnp->opcode |=
+                   (regno << 12) | (size_bits << 4);
+                 continue;
+               }
+
+           case 'y':
+             /* Source operand in bits <10>, <3:0> and optionally a
+                prefix; i.e. an indirect operand or an side-effect
+                prefix.
+
+                The difference to 's' is that this does not allow an
+                "immediate" expression. */
+             if (! get_autoinc_prefix_or_indir_op (&s, prefixp,
+                                                   &mode, &regno,
+                                                   &imm_expr_found,
+                                                   &out_insnp->expr)
+                 || imm_expr_found)
+               break;
+             else
+               {
+                 if (prefixp->kind != PREFIX_NONE)
+                   {
+                     /* A prefix, and those matched here always have
+                        side-effects (see 's' case).  */
+                     out_insnp->opcode |= (AUTOINCR_BIT << 8);
+                   }
+                 else
+                   {
+                     /* No prefix.  The "mode" variable contains bits
+                        like whether or not this is autoincrement
+                        mode.  */
+                     out_insnp->opcode |= (mode << 10);
+                   }
+
+                 out_insnp->opcode |= regno /* << 0 */;
+                 continue;
+               }
+
+           case 'z':
+             /* Size modifier (B or W) in bit <4>.  */
+             if (! get_bw_size_modifier (&s, &size_bits))
+               break;
+             else
+               {
+                 out_insnp->opcode |= size_bits << 4;
+                 continue;
+               }
+
+           default:
+             BAD_CASE (*args);
+           }
+
+         /* We get here when we fail a match above or we found a
+            complete match.  Break out of this loop.  */
+         break;
+       }
+
+      /* Was it a match or a miss?  */
+      if (match == 0)
+       {
+         /* If it's just that the args don't match, maybe the next
+            item in the table is the same opcode but with
+            matching operands.  */
+         if (instruction[1].name != NULL
+             && ! strcmp (instruction->name, instruction[1].name))
+           {
+             /* Yep.  Restart and try that one instead.  */
+             ++instruction;
+             s = operands;
+             continue;
+           }
+         else
+           {
+             /* We've come to the end of instructions with this
+                opcode, so it must be an error.  */
+             as_bad (_("Illegal operands"));
+             return;
+           }
+       }
+      else
+       {
+         /* We have a match.  Check if there's anything more to do.  */
+         if (imm_expr_found)
+           {
+             /* There was an immediate mode operand, so we must check
+                that it has an appropriate size.  */
+
+             switch (instruction->imm_oprnd_size)
+               {
+               default:
+               case SIZE_NONE:
+                 /* Shouldn't happen; this one does not have immediate
+                    operands with different sizes.  */
+                 BAD_CASE (instruction->imm_oprnd_size);
+                 break;
+
+               case SIZE_FIX_32:
+                 out_insnp->imm_oprnd_size = 4;
+                 break;
+
+               case SIZE_SPEC_REG:
+                 switch (out_insnp->spec_reg->reg_size)
+                   {
+                   case 1:
+                     if (out_insnp->expr.X_op == O_constant
+                         && (out_insnp->expr.X_add_number < -128
+                             || out_insnp->expr.X_add_number > 255))
+                       as_bad (_("Immediate value not in 8 bit range: %ld"),
+                               out_insnp->expr.X_add_number);
+                     /* FALLTHROUGH.  */
+                   case 2:
+                     /* FIXME:  We need an indicator in the instruction
+                        table to pass on, to indicate if we need to check
+                        overflow for a signed or unsigned number.  */
+                     if (out_insnp->expr.X_op == O_constant
+                         && (out_insnp->expr.X_add_number < -32768
+                             || out_insnp->expr.X_add_number > 65535))
+                       as_bad (_("Immediate value not in 16 bit range: %ld"),
+                               out_insnp->expr.X_add_number);
+                     out_insnp->imm_oprnd_size = 2;
+                     break;
+
+                   case 4:
+                     out_insnp->imm_oprnd_size = 4;
+                     break;
+
+                   default:
+                     BAD_CASE (out_insnp->spec_reg->reg_size);
+                   }
+                 break;
+
+               case SIZE_FIELD:
+                 switch (size_bits)
+                   {
+                   case 0:
+                     if (out_insnp->expr.X_op == O_constant
+                         && (out_insnp->expr.X_add_number < -128
+                             || out_insnp->expr.X_add_number > 255))
+                       as_bad (_("Immediate value not in 8 bit range: %ld"),
+                               out_insnp->expr.X_add_number);
+                     /* FALLTHROUGH.  */
+                   case 1:
+                     if (out_insnp->expr.X_op == O_constant
+                         && (out_insnp->expr.X_add_number < -32768
+                             || out_insnp->expr.X_add_number > 65535))
+                       as_bad (_("Immediate value not in 16 bit range: %ld"),
+                               out_insnp->expr.X_add_number);
+                     out_insnp->imm_oprnd_size = 2;
+                     break;
+
+                   case 2:
+                     out_insnp->imm_oprnd_size = 4;
+                     break;
+
+                   default:
+                     BAD_CASE (out_insnp->spec_reg->reg_size);
+                   }
+               }
+           }
+       }
+      break;
+    }
+}
+
+
+/* Get a B, W, or D size modifier from the string pointed out by *cPP,
+   which must point to a '.' in front of the modifier. On successful
+   return, *cPP is advanced to the character following the size
+   modifier, and is undefined otherwise.
+
+   cPP         Pointer to pointer to string starting
+               with the size modifier.
+
+   size_bitsp  Pointer to variable to contain the size bits on
+               successful return.
+
+   Return 1 iff a correct size modifier is found, else 0.  */
+
+static int
+get_bwd_size_modifier (cPP, size_bitsp)
+     char **cPP;
+     int *size_bitsp;
+{
+  if (**cPP != '.')
+    return 0;
+  else
+    {
+      /* Consume the '.' */
+      (*cPP)++;
+
+      switch (**cPP)
+       {
+       case 'B':
+       case 'b':
+         *size_bitsp = 0;
+         break;
+
+       case 'W':
+       case 'w':
+         *size_bitsp = 1;
+         break;
+
+       case 'D':
+       case 'd':
+         *size_bitsp = 2;
+         break;
+
+       default:
+         return 0;
+       }
+
+      /* Consume the size letter.  */
+      (*cPP)++;
+      return 1;
+    }
+}
+
+
+/* Get a B or W size modifier from the string pointed out by *cPP,
+   which must point to a '.' in front of the modifier. On successful
+   return, *cPP is advanced to the character following the size
+   modifier, and is undefined otherwise.
+
+   cPP         Pointer to pointer to string starting
+               with the size modifier.
+
+   size_bitsp  Pointer to variable to contain the size bits on
+               successful return.
+
+   Return 1 iff a correct size modifier is found, else 0.  */
+
+static int
+get_bw_size_modifier (cPP, size_bitsp)
+     char **cPP;
+     int *size_bitsp;
+{
+  if (**cPP != '.')
+    return 0;
+  else
+    {
+      /* Consume the '.' */
+      (*cPP)++;
+
+      switch (**cPP)
+       {
+       case 'B':
+       case 'b':
+         *size_bitsp = 0;
+         break;
+
+       case 'W':
+       case 'w':
+         *size_bitsp = 1;
+         break;
+
+       default:
+         return 0;
+       }
+
+      /* Consume the size letter.  */
+      (*cPP)++;
+      return 1;
+    }
+}
+
+
+/* Get a general register from the string pointed out by *cPP. The
+   variable *cPP is advanced to the character following the general
+   register name on a successful return, and has its initial position
+   otherwise.
+
+   cPP     Pointer to pointer to string, beginning with a general
+           register name.
+
+   regnop   Pointer to int containing the register number.
+
+   Return 1 iff a correct general register designator is found,
+           else 0.  */
+
+static int
+get_gen_reg (cPP, regnop)
+     char **cPP;
+     int *regnop;
+{
+  char *oldp;
+  oldp = *cPP;
+
+  switch (**cPP)
+    {
+    case 'P':
+    case 'p':
+      /* "P" as in "PC"?  Consume the "P".  */
+      (*cPP)++;
+
+      if ((**cPP == 'C' || **cPP == 'c')
+         && ! isalnum ((*cPP)[1]))
+       {
+         /* It's "PC": consume the "c" and we're done.  */
+         (*cPP)++;
+         *regnop = REG_PC;
+         return 1;
+       }
+      break;
+
+    case 'R':
+    case 'r':
+      /* Hopefully r[0-9] or r1[0-5].  Consume 'R' or 'r' */
+      (*cPP)++;
+
+      if (isdigit (**cPP))
+       {
+         /* It's r[0-9].  Consume and check the next digit.  */
+         *regnop = **cPP - '0';
+         (*cPP)++;
+
+         if (! isalnum (**cPP))
+           {
+             /* No more digits, we're done. */
+             return 1;
+           }
+         else
+           {
+             /* One more digit.  Consume and add.  */
+             *regnop = *regnop*10 + (**cPP - '0');
+
+             /* We need to check for a valid register number; Rn,
+                0 <= n <= MAX_REG.  */
+             if (*regnop <= MAX_REG)
+               {
+                 /* Consume second digit.  */
+                 (*cPP)++;
+                 return 1;
+               }
+           }
+       }
+      break;
+
+    case 'S':
+    case 's':
+      /* "S" as in "SP"?  Consume the "S".  */
+      (*cPP)++;
+      if (**cPP == 'P' || **cPP == 'p')
+       {
+         /* It's "SP": consume the "p" and we're done.  */
+         (*cPP)++;
+         *regnop = REG_SP;
+         return 1;
+       }
+      break;
+
+    default:
+      /* Just here to silence compilation warnings.  */
+      ;
+    }
+
+  /* We get here if we fail.  Restore the pointer.  */
+  *cPP = oldp;
+  return 0;
+}
+
+
+/* Get a special register from the string pointed out by *cPP. The
+   variable *cPP is advanced to the character following the special
+   register name if one is found, and retains its original position
+   otherwise.
+
+   cPP     Pointer to pointer to string starting with a special register
+           name.
+
+   sregpp   Pointer to Pointer to struct spec_reg, where a pointer to the
+           register description will be stored.
+
+   Return 1 iff a correct special register name is found.  */
+
+static int
+get_spec_reg (cPP, sregpp)
+     char **cPP;
+     const struct cris_spec_reg **sregpp;
+{
+  char *s1;
+  const char *s2;
+
+  const struct cris_spec_reg *sregp;
+
+  /* Loop over all special registers.  */
+  for (sregp = cris_spec_regs;
+       sregp->name != NULL;
+       sregp++)
+    {
+
+      /* Start over from beginning of the supposed name.  */
+      s1 = *cPP;
+      s2 = sregp->name;
+
+      while (*s2 != '\0'
+            && (isupper (*s1) ? tolower (*s1) == *s2 : *s1 == *s2))
+       {
+         s1++;
+         s2++;
+       }
+
+      /* For a match, we must have consumed the name in the table, and we
+        must be outside what could be part of a name.  Assume here that a
+        test for alphanumerics is sufficient for a name test.  */
+      if (*s2 == 0 && ! isalnum (*s1))
+       {
+         /* We have a match.  Update the pointer and be done.  */
+         *cPP = s1;
+         *sregpp = sregp;
+         return 1;
+       }
+    }
+
+  /* If we got here, we did not find any name. */
+  return 0;
+}
+
+
+/* Get an unprefixed or side-effect-prefix operand from the string pointed
+   out by *cPP.  The pointer *cPP is advanced to the character following
+   the indirect operand if we have success, else it contains an undefined
+   value.
+
+   cPP          Pointer to pointer to string beginning with the first
+                character of the supposed operand.
+
+   prefixp      Pointer to structure containing an optional instruction
+                prefix.
+
+   is_autoincp  Pointer to int indicating the indirect or autoincrement
+                bits.
+
+   src_regnop   Pointer to int containing the source register number in
+                the instruction.
+
+   imm_foundp   Pointer to an int indicating if an immediate expression
+                is found.
+
+   imm_exprP    Pointer to a structure containing an immediate
+                expression, if success and if *imm_foundp is nonzero.
+
+   Return 1 iff a correct indirect operand is found.  */
+
+static int
+get_autoinc_prefix_or_indir_op (cPP, prefixp, is_autoincp, src_regnop,
+                               imm_foundp, imm_exprP)
+     char               **cPP;
+     struct cris_prefix         *prefixp;
+     int                *is_autoincp;
+     int                *src_regnop;
+     int                *imm_foundp;
+     expressionS        *imm_exprP;
+{
+  /* Assume there was no immediate mode expression.  */
+  *imm_foundp = 0;
+
+  if (**cPP == '[')
+    {
+      /* So this operand is one of:
+        Indirect: [rN]
+        Autoincrement: [rN+]
+        Indexed with assign: [rN=rM+rO.S]
+        Offset with assign: [rN=rM+I], [rN=rM+[rO].s], [rN=rM+[rO+].s]
+
+        Either way, consume the '['.  */
+      (*cPP)++;
+
+      /* Get the rN register.  */
+      if (! get_gen_reg (cPP, src_regnop))
+       /* If there was no register, then this cannot match.  */
+       return 0;
+      else
+       {
+         /* We got the register, now check the next character.  */
+         switch (**cPP)
+           {
+           case ']':
+             /* Indirect mode.  We're done here.  */
+             prefixp->kind = PREFIX_NONE;
+             *is_autoincp = 0;
+             break;
+
+           case '+':
+             /* This must be an auto-increment mode, if there's a
+                match.  */
+             prefixp->kind = PREFIX_NONE;
+             *is_autoincp = 1;
+
+             /* We consume this character and break out to check the
+                closing ']'.  */
+             (*cPP)++;
+             break;
+
+           case '=':
+             /* This must be indexed with assign, or offset with assign
+                to match.  */
+             (*cPP)++;
+
+             /* Either way, the next thing must be a register.  */
+             if (! get_gen_reg (cPP, &prefixp->base_reg_number))
+               /* No register, no match.  */
+               return 0;
+             else
+               {
+                 /* We've consumed "[rN=rM", so we must be looking at
+                    "+rO.s]" or "+I]", or "-I]", or "+[rO].s]" or
+                    "+[rO+].s]".  */
+                 if (**cPP == '+')
+                   {
+                     int index_reg_number;
+                     (*cPP)++;
+
+                     if (**cPP == '[')
+                       {
+                         int size_bits;
+                         /* This must be [rx=ry+[rz].s] or
+                            [rx=ry+[rz+].s] or no match.  We must be
+                            looking at rz after consuming the '['.  */
+                         (*cPP)++;
+
+                         if (!get_gen_reg (cPP, &index_reg_number))
+                           return 0;
+
+                         prefixp->kind = PREFIX_BDAP;
+                         prefixp->opcode
+                           = (BDAP_INDIR_OPCODE
+                              + (prefixp->base_reg_number << 12)
+                              + index_reg_number);
+
+                         if (**cPP == '+')
+                           {
+                             /* We've seen "[rx=ry+[rz+" here, so now we
+                                know that there must be "].s]" left to
+                                check.  */
+                             (*cPP)++;
+                             prefixp->opcode |= AUTOINCR_BIT << 8;
+                           }
+
+                         /* If it wasn't autoincrement, we don't need to
+                            add anything.  */
+
+                         /* Check the next-to-last ']'.  */
+                         if (**cPP != ']')
+                           return 0;
+
+                         (*cPP)++;
+
+                         /* Check the ".s" modifier.  */
+                         if (! get_bwd_size_modifier (cPP, &size_bits))
+                           return 0;
+
+                         prefixp->opcode |= size_bits << 4;
+
+                         /* Now we got [rx=ry+[rz+].s or [rx=ry+[rz].s.
+                            We break out to check the final ']'.  */
+                         break;
+                       }
+                     else
+                       /* It wasn't an idirection.  Check if it's a
+                          register.  */
+                       if (get_gen_reg (cPP, &index_reg_number))
+                         {
+                           int size_bits;
+
+                           /* Indexed with assign mode: "[rN+rM.S]".  */
+                           prefixp->kind = PREFIX_BIAP;
+                           prefixp->opcode
+                             = (BIAP_OPCODE + (index_reg_number << 12)
+                                + prefixp->base_reg_number /* << 0 */);
+
+                           if (! get_bwd_size_modifier (cPP, &size_bits))
+                             /* Size missing, this isn't a match.  */
+                             return 0;
+                           else
+                             {
+                               /* Size found, break out to check the
+                                  final ']'.  */
+                               prefixp->opcode |= size_bits << 4;
+                               break;
+                             }
+                         }
+                       else
+                         /* Not a register.  Then this must be "[rN+I]".  */
+                         if (cris_get_expression (cPP, &prefixp->expr))
+                           {
+                             /* We've got offset with assign mode.  Fill
+                                in the blanks and break out to match the
+                                final ']'.  */
+                             prefixp->kind = PREFIX_BDAP_IMM;
+                             break;
+                           }
+                         else
+                           /* Neither register nor expression found, so
+                              this can't be a match.  */
+                           return 0;
+                   }
+                 else
+                   /* Not "[rN+" but perhaps "[rN-"? */
+                   if (**cPP == '-')
+                     {
+                       /* We must have an offset with assign mode.  */
+                       if (! cris_get_expression (cPP, &prefixp->expr))
+                         /* No expression, no match.  */
+                         return 0;
+                       else
+                         {
+                           /* We've got offset with assign mode.  Fill
+                              in the blanks and break out to match the
+                              final ']'.  */
+                           prefixp->kind = PREFIX_BDAP_IMM;
+                           break;
+                         }
+                     }
+                   else
+                     /* Neither '+' nor '-' after "[rN=rM".  Lose.  */
+                     return 0;
+               }
+           default:
+             /* Neither ']' nor '+' nor '=' after "[rN".  Lose.  */
+             return 0;
+           }
+       }
+
+      /* When we get here, we have a match and will just check the closing
+        ']'.  We can still fail though.  */
+      if (**cPP != ']')
+       return 0;
+      else
+       {
+         /* Don't forget to consume the final ']'.
+            Then return in glory.  */
+         (*cPP)++;
+         return 1;
+       }
+    }
+  else
+    /* No indirection. Perhaps a constant?  */
+    if (cris_get_expression (cPP, imm_exprP))
+      {
+       /* Expression found, this is immediate mode.  */
+       prefixp->kind = PREFIX_NONE;
+       *is_autoincp = 1;
+       *src_regnop = REG_PC;
+       *imm_foundp = 1;
+       return 1;
+      }
+
+  /* No luck today.  */
+  return 0;
+}
+
+
+/* This function gets an indirect operand in a three-address operand
+   combination from the string pointed out by *cPP.  The pointer *cPP is
+   advanced to the character following the indirect operand on success, or
+   has an unspecified value on failure.
+
+   cPP      Pointer to pointer to string begining
+            with the operand
+
+   prefixp   Pointer to structure containing an
+            instruction prefix
+
+   Returns 1 iff a correct indirect operand is found.  */
+
+static int
+get_3op_or_dip_prefix_op (cPP, prefixp)
+     char **cPP;
+     struct cris_prefix *prefixp;
+{
+  if (**cPP != '[')
+    /* We must have a '[' or it's a clean failure.  */
+    return 0;
+  else
+    {
+      int reg_number;
+
+      /* Eat the first '['.  */
+      (*cPP)++;
+
+      if (**cPP == '[')
+       {
+         /* A second '[', so this must be double-indirect mode.  */
+         (*cPP)++;
+         prefixp->kind = PREFIX_DIP;
+         prefixp->opcode = DIP_OPCODE;
+
+         /* Get the register or fail entirely.  */
+         if (! get_gen_reg (cPP, &reg_number))
+           return 0;
+         else
+           {
+             prefixp->opcode |= reg_number /* << 0 */ ;
+             if (**cPP == '+')
+               {
+                 /* Since we found a '+', this must be double-indirect
+                    autoincrement mode.  */
+                 (*cPP)++;
+                 prefixp->opcode |= AUTOINCR_BIT << 8;
+               }
+
+             /* There's nothing particular to do, if this was a
+                double-indirect *without* autoincrement.  */
+           }
+
+         /* Check the first ']'.  The second one is checked at the end.  */
+         if (**cPP != ']')
+           return 0;
+
+         /* Eat the first ']', so we'll be looking at a second ']'.  */
+         (*cPP)++;
+       }
+      else
+       /* No second '['.  Then we should have a register here, making
+          it "[rN".  */
+       if (get_gen_reg (cPP, &prefixp->base_reg_number))
+         {
+           /* This must be indexed or offset mode: "[rN+I]" or
+              "[rN+rM.S]" or "[rN+[rM].S]" or "[rN+[rM+].S]".  */
+           if (**cPP == '+')
+             {
+               /* Not the first alternative, must be one of the last
+                  three.  */
+               int index_reg_number;
+
+               (*cPP)++;
+
+               if (**cPP == '[')
+                 {
+                   /* This is "[rx+["...  Expect a register next.  */
+                   int size_bits;
+                   (*cPP)++;
+
+                   if (!get_gen_reg (cPP, &index_reg_number))
+                     return 0;
+
+                   prefixp->kind = PREFIX_BDAP;
+                   prefixp->opcode
+                     = (BDAP_INDIR_OPCODE
+                        + (prefixp->base_reg_number << 12)
+                        + index_reg_number);
+
+                   /* We've seen "[rx+[ry", so check if this is
+                      autoincrement.  */
+                   if (**cPP == '+')
+                     {
+                       /* Yep, now at "[rx+[ry+".  */
+                       (*cPP)++;
+                       prefixp->opcode |= AUTOINCR_BIT << 8;
+                     }
+                   /* If it wasn't autoincrement, we don't need to
+                      add anything.  */
+
+                   /* Check a first closing ']': "[rx+[ry]" or
+                      "[rx+[ry+]".  */
+                   if (**cPP != ']')
+                     return 0;
+                   (*cPP)++;
+
+                   /* Now expect a size modifier ".S".  */
+                   if (! get_bwd_size_modifier (cPP, &size_bits))
+                     return 0;
+
+                   prefixp->opcode |= size_bits << 4;
+
+                   /* Ok, all interesting stuff has been seen:
+                      "[rx+[ry+].S" or "[rx+[ry].S".  We only need to
+                      expect a final ']', which we'll do in a common
+                      closing session.  */
+                 }
+               else
+                 /* Seen "[rN+", but not a '[', so check if we have a
+                    register.  */
+                 if (get_gen_reg (cPP, &index_reg_number))
+                   {
+                     /* This is indexed mode: "[rN+rM.S]" or
+                        "[rN+rM.S+]".  */
+                     int size_bits;
+                     prefixp->kind = PREFIX_BIAP;
+                     prefixp->opcode
+                       = (BIAP_OPCODE
+                          | prefixp->base_reg_number /* << 0 */
+                          | (index_reg_number << 12));
+
+                     /*  */
+                     if (! get_bwd_size_modifier (cPP, &size_bits))
+                       /* Missing size, so fail.  */
+                       return 0;
+                     else
+                         /* Size found.  Add that piece and drop down to
+                            the common checking of the closing ']'.  */
+                         prefixp->opcode |= size_bits << 4;
+                   }
+                 else
+                   /* Seen "[rN+", but not a '[' or a register, so then
+                      it must be a constant "I".  */
+                   if (cris_get_expression (cPP, &prefixp->expr))
+                     {
+                       /* Expression found, so fill in the bits of offset
+                          mode and drop down to check the closing ']'.  */
+                       prefixp->kind = PREFIX_BDAP_IMM;
+                     }
+                   else
+                     /* Nothing valid here: lose.  */
+                     return 0;
+             }
+           else
+             /* Seen "[rN" but no '+', so check if it's a '-'.  */
+             if (**cPP == '-')
+               {
+                 /* Yep, we must have offset mode.  */
+                 if (! cris_get_expression (cPP, &prefixp->expr))
+                   /* No expression, so we lose.  */
+                   return 0;
+                 else
+                   {
+                     /* Expression found to make this offset mode, so
+                        fill those bits and drop down to check the
+                        closing ']'.  */
+                     prefixp->kind = PREFIX_BDAP_IMM;
+                   }
+               }
+             else
+               {
+                 /* We've seen "[rN", but not '+' or '-'; rather a ']'.
+                    Hmm.  Normally this is a simple indirect mode that we
+                    shouldn't match, but if we expect ']', then we have a
+                    zero offset, so it can be a three-address-operand,
+                    like "[rN],rO,rP", thus offset mode.
+
+                    Don't eat the ']', that will be done in the closing
+                    ceremony.  */
+                 prefixp->expr.X_op = O_constant;
+                 prefixp->expr.X_add_number = 0;
+                 prefixp->expr.X_add_symbol = NULL;
+                 prefixp->expr.X_op_symbol = NULL;
+                 prefixp->kind = PREFIX_BDAP_IMM;
+               }
+         }
+       else
+         {
+           /* A '[', but no second '[', and no register.  Check if we
+              have an expression, making this "[I]" for a double-indirect
+              prefix.  */
+           if (cris_get_expression (cPP, &prefixp->expr))
+             {
+               /* Expression found, the so called absolute mode for a
+                  double-indirect prefix on PC.  */
+               prefixp->kind = PREFIX_DIP;
+               prefixp->opcode
+                 = DIP_OPCODE | (AUTOINCR_BIT << 8) | REG_PC;
+               prefixp->reloc = BFD_RELOC_32;
+             }
+           else
+             /* Neither '[' nor register nor expression.  We lose.  */
+             return 0;
+         }
+    }
+
+  /* We get here as a closing ceremony to a successful match.  We just
+     need to check the closing ']'.  */
+  if (**cPP != ']')
+    /* Oops.  Close but no air-polluter.  */
+    return 0;
+
+  /* Don't forget to consume that ']', before returning in glory.  */
+  (*cPP)++;
+  return 1;
+}
+
+
+/* Get an expression from the string pointed out by *cPP.
+   The pointer *cPP is advanced to the character following the expression
+   on a success, or retains its original value otherwise.
+
+   cPP    Pointer to pointer to string beginning with the expression.
+
+   exprP   Pointer to structure containing the expression.
+
+   Return 1 iff a correct expression is found. */
+
+static int
+cris_get_expression (cPP, exprP)
+     char        **cPP;
+     expressionS  *exprP;
+{
+  char *saved_input_line_pointer;
+  segT exp;
+
+  /* The "expression" function expects to find an expression at the
+     global variable input_line_pointer, so we have to save it to give
+     the impression that we don't fiddle with global variables.  */
+  saved_input_line_pointer = input_line_pointer;
+  input_line_pointer = *cPP;
+
+  exp = expression (exprP);
+  if (exprP->X_op == O_illegal || exprP->X_op == O_absent)
+    {
+      input_line_pointer = saved_input_line_pointer;
+      return 0;
+    }
+
+  /* Everything seems to be fine, just restore the global
+     input_line_pointer and say we're successful.  */
+  *cPP = input_line_pointer;
+  input_line_pointer = saved_input_line_pointer;
+  return 1;
+}
+
+
+/* Get a sequence of flag characters from *spp.  The pointer *cPP is
+   advanced to the character following the expression. The flag
+   characters are consecutive, no commas or spaces.
+
+   cPP      Pointer to pointer to string beginning with the expression.
+
+   flagp     Pointer to int to return the flags expression.
+
+   Return 1 iff a correct flags expression is found.  */
+
+static int
+get_flags (cPP, flagsp)
+     char **cPP;
+     int *flagsp;
+{
+  for (;;)
+    {
+      switch (**cPP)
+       {
+       case 'd':
+       case 'D':
+       case 'm':
+       case 'M':
+         *flagsp |= 0x80;
+         break;
+
+       case 'e':
+       case 'E':
+       case 'b':
+       case 'B':
+         *flagsp |= 0x40;
+         break;
+
+       case 'i':
+       case 'I':
+         *flagsp |= 0x20;
+         break;
+
+       case 'x':
+       case 'X':
+         *flagsp |= 0x10;
+         break;
+
+       case 'n':
+       case 'N':
+         *flagsp |= 0x8;
+         break;
+
+       case 'z':
+       case 'Z':
+         *flagsp |= 0x4;
+         break;
+
+       case 'v':
+       case 'V':
+         *flagsp |= 0x2;
+         break;
+
+       case 'c':
+       case 'C':
+         *flagsp |= 1;
+         break;
+
+       default:
+         /* We consider this successful if we stop at a comma or
+            whitespace.  Anything else, and we consider it a failure.  */
+         if (**cPP != ','
+             && **cPP != 0
+             && ! isspace (**cPP))
+           return 0;
+         else
+           return 1;
+       }
+
+      /* Don't forget to consume each flag character.  */
+      (*cPP)++;
+    }
+}
+
+
+/* Generate code and fixes for a BDAP prefix.
+
+   base_regno  Int containing the base register number.
+
+   exprP       Pointer to structure containing the offset expression.  */
+
+static void
+gen_bdap (base_regno, exprP)
+     int         base_regno;
+     expressionS  *exprP;
+{
+  unsigned int opcode;
+  char *opcodep;
+
+  /* Put out the prefix opcode; assume quick immediate mode at first.  */
+  opcode = BDAP_QUICK_OPCODE | (base_regno << 12);
+  opcodep = frag_more (2);
+  md_number_to_chars (opcodep, opcode, 2);
+
+  if (exprP->X_op == O_constant)
+    {
+      /* We have an absolute expression that we know the size of right
+        now. */
+      long int value;
+      int size;
+
+      value = exprP->X_add_number;
+      if (value < -32768 || value > 32767)
+       /* Outside range for a "word", make it a dword.  */
+       size = 2;
+      else
+       /* Assume "word" size.  */
+       size = 1;
+
+      /* If this is a signed-byte value, we can fit it into the prefix
+        insn itself.  */
+      if (value >= -128 && value <= 127)
+       opcodep[0] = value;
+      else
+       {
+         /* This is a word or dword displacement, which will be put in a
+            word or dword after the prefix.  */
+         char *p;
+
+         opcodep[0] = BDAP_PC_LOW + (size << 4);
+         opcodep[1] &= 0xF0;
+         opcodep[1] |= BDAP_INCR_HIGH;
+         p = frag_more (1 << size);
+         md_number_to_chars (p, value, 1 << size);
+       }
+    }
+  else
+    /* The expression is not defined yet but may become absolute.  We make
+       it a relocation to be relaxed.  */
+      frag_var (rs_machine_dependent, 4, 0,
+               ENCODE_RELAX (STATE_BASE_PLUS_DISP_PREFIX, STATE_UNDF),
+               exprP->X_add_symbol, exprP->X_add_number, opcodep);
+}
+
+
+/* Encode a branch displacement in the range -256..254 into the form used
+   by CRIS conditional branch instructions.
+
+   offset  The displacement value in bytes.  */
+
+static int
+branch_disp (offset)
+     int offset;
+{
+  int disp;
+
+  disp = offset & 0xFE;
+
+  if (offset < 0)
+    disp |= 1;
+
+  return disp;
+}
+
+
+/* Generate code and fixes for a 32-bit conditional branch instruction
+   created by "extending" an existing 8-bit branch instruction.
+
+   opcodep    Pointer to the word containing the original 8-bit branch
+             instruction.
+
+   writep     Pointer to "extension area" following the first instruction
+             word.
+
+   fragP      Pointer to the frag containing the instruction.
+
+   add_symP,  Parts of the destination address expression.
+   sub_symP,
+   add_num.  */
+
+static void
+gen_cond_branch_32 (opcodep, writep, fragP, add_symP, sub_symP, add_num)
+     char *opcodep;
+     char *writep;
+     fragS *fragP;
+     symbolS *add_symP;
+     symbolS *sub_symP;
+     long int add_num;
+{
+  if (warn_for_branch_expansion)
+    {
+      /* FIXME: Find out and change to as_warn_where.  Add testcase.  */
+      as_warn (_("32-bit conditional branch generated"));
+    }
+
+  /* Here, writep points to what will be opcodep + 2.  First, we change
+     the actual branch in opcodep[0] and opcodep[1], so that in the
+     final insn, it will look like:
+       opcodep+10: Bcc .-6
+
+     This means we don't have to worry about changing the opcode or
+     messing with te delay-slot instruction.  So, we move it to last in
+     the "extended" branch, and just change the displacement.  Admittedly,
+     it's not the optimal extended construct, but we should get this
+     rarely enough that it shouldn't matter.  */
+
+  writep[8] = branch_disp (-2-6);
+  writep[9] = opcodep[1];
+
+  /* Then, we change the branch to an unconditional branch over the
+     extended part, to the new location of the Bcc:
+       opcodep:          BA .+10
+       opcodep+2: NOP
+
+     Note that these two writes are to currently different locations,
+     merged later.  */
+
+  md_number_to_chars (opcodep, BA_QUICK_OPCODE + 8, 2);
+  md_number_to_chars (writep, NOP_OPCODE, 2);
+
+  /* Then the extended thing, the 32-bit jump insn.
+       opcodep+4: JUMP [PC+]  */
+
+  md_number_to_chars (writep + 2, JUMP_PC_INCR_OPCODE, 2);
+
+  /* We have to fill in the actual value too.
+       opcodep+6: .DWORD
+     This is most probably an expression, but we can cope with an absolute
+     value too.  FIXME: Testcase needed.  */
+
+  if (add_symP == NULL && sub_symP == NULL)
+    /* An absolute address.  */
+    md_number_to_chars (writep + 4, add_num, 4);
+  else
+    {
+      /* Not absolute, we have to make it a frag for later evaluation. */
+      know (sub_symP == 0);
+
+      fix_new (fragP, writep + 4 - fragP->fr_literal, 4, add_symP,
+              add_num, 0, BFD_RELOC_32);
+    }
+}
+
+
+/* This *could* be:
+
+   Turn a string in input_line_pointer into a floating point constant of
+   type type, and store the appropriate bytes in *litp.  The number of
+   LITTLENUMS emitted is stored in *sizep.
+
+   type          A character from FLTCHARS that describes what kind of
+         floating-point number is wanted.
+
+   litp          A pointer to an array that the result should be stored in.
+
+   sizep  A pointer to an integer where the size of the result is stored.
+
+   But we don't support floating point constants in assembly code *at all*,
+   since it's suboptimal and just opens up bug opportunities.  GCC emits
+   the bit patterns as hex.  All we could do here is to emit what GCC
+   would have done in the first place. *Nobody* writes floating-point
+   code as assembly code, but if they do, they should be able enough to
+   find out the correct bit patterns and use them.  */
+
+char *
+md_atof (type, litp, sizep)
+     char type ATTRIBUTE_UNUSED;
+     char *litp ATTRIBUTE_UNUSED;
+     int  *sizep ATTRIBUTE_UNUSED;
+{
+  /* FIXME:  Is this function mentioned in the internals.texi manual?  If
+     not, add it.  */
+  return  _("Bad call to md_atof () - floating point formats are not supported");
+}
+
+
+/* Turn a number as a fixS * into a series of bytes that represents the
+   number on the target machine.  The purpose of this procedure is the
+   same as that of md_number_to_chars but this procedure is supposed to
+   handle general bit field fixes and machine-dependent fixups.
+
+   bufp               Pointer to an array where the result should be stored.
+
+   val       The value to store.
+
+   n         The number of bytes in "val" that should be stored.
+
+   fixP              The fix to be applied to the bit field starting at bufp.  */
+
+static void
+cris_number_to_imm (bufp, val, n, fixP)
+     char *bufp;
+     long val;
+     int n;
+     fixS *fixP;
+{
+  segT sym_seg;
+
+  know (n <= 4);
+  know (fixP);
+
+  /* We put the relative "vma" for the other segment for inter-segment
+     relocations in the object data to stay binary "compatible" (with an
+     uninteresting old version) for the relocation.
+     Maybe delete some day.  */
+  if (fixP->fx_addsy
+      && (sym_seg = S_GET_SEGMENT (fixP->fx_addsy)) != now_seg)
+    val += sym_seg->vma;
+
+  switch (fixP->fx_r_type)
+    {
+      /* Ditto here, we put the addend into the object code as
+        well as the reloc addend.  Keep it that way for now, to simplify
+        regression tests on the object file contents.  FIXME:  Seems
+        uninteresting now that we have a test suite.  */
+
+    case BFD_RELOC_32:
+      /* No use having warnings here, since most hosts have a 32-bit type
+        for "long" (which will probably change soon, now that I wrote
+        this).  */
+      bufp[3] = (val >> 24) & 0xFF;
+      bufp[2] = (val >> 16) & 0xFF;
+      bufp[1] = (val >> 8) & 0xFF;
+      bufp[0] = val & 0xFF;
+      break;
+
+      /* FIXME: The 16 and 8-bit cases should have a way to check
+        whether a signed or unsigned (or any signedness) number is
+        accepted.
+        FIXME: Does the as_bad calls find the line number by themselves,
+        or should we change them into as_bad_where?  */
+
+    case BFD_RELOC_16:
+      if (val > 0xffff || val < -32768)
+       as_bad (_("Value not in 16 bit range: %ld"), val);
+      if (! fixP->fx_addsy)
+       {
+         bufp[1] = (val >> 8) & 0xFF;
+         bufp[0] = val & 0xFF;
+       }
+      break;
+
+    case BFD_RELOC_8:
+      if (val > 255 || val < -128)
+       as_bad (_("Value not in 8 bit range: %ld"), val);
+      if (! fixP->fx_addsy)
+       bufp[0] = val & 0xFF;
+      break;
+
+    case BFD_RELOC_CRIS_UNSIGNED_4:
+      if (val > 15 || val < 0)
+       as_bad (_("Value not in 4 bit unsigned range: %ld"), val);
+      if (! fixP->fx_addsy)
+       bufp[0] |= val & 0x0F;
+      break;
+
+    case BFD_RELOC_CRIS_UNSIGNED_5:
+      if (val > 31 || val < 0)
+       as_bad (_("Value not in 5 bit unsigned range: %ld"), val);
+      if (! fixP->fx_addsy)
+       bufp[0] |= val & 0x1F;
+      break;
+
+    case BFD_RELOC_CRIS_SIGNED_6:
+      if (val > 31 || val < -32)
+       as_bad (_("Value not in 6 bit range: %ld"), val);
+      if (! fixP->fx_addsy)
+       bufp[0] |= val & 0x3F;
+      break;
+
+    case BFD_RELOC_CRIS_UNSIGNED_6:
+      if (val > 63 || val < 0)
+       as_bad (_("Value not in 6 bit unsigned range: %ld"), val);
+      if (! fixP->fx_addsy)
+       bufp[0] |= val & 0x3F;
+      break;
+
+    case BFD_RELOC_CRIS_BDISP8:
+      if (! fixP->fx_addsy)
+       bufp[0] = branch_disp (val);
+      break;
+
+    case BFD_RELOC_NONE:
+      /* May actually happen automatically.  For example at broken
+        words, if the word turns out not to be broken.
+        FIXME: When?  Which testcase?  */
+      if (! fixP->fx_addsy)
+       md_number_to_chars (bufp, val, n);
+      break;
+
+    case BFD_RELOC_VTABLE_INHERIT:
+      /* This borrowed from tc-ppc.c on a whim.  */
+      if (fixP->fx_addsy
+         && !S_IS_DEFINED (fixP->fx_addsy)
+         && !S_IS_WEAK (fixP->fx_addsy))
+       S_SET_WEAK (fixP->fx_addsy);
+      /* FALLTHROUGH.  */
+    case BFD_RELOC_VTABLE_ENTRY:
+      /* FIXME: I'm not sure why we do this (as does other ports), but it
+        might be that this relocation can only be finished at link time.  */
+      fixP->fx_done = 0;
+      break;
+
+    default:
+      BAD_CASE (fixP->fx_r_type);
+    }
+}
+
+
+/* Processes machine-dependent command line options.  Called once for
+   each option on the command line that the machine-independent part of
+   GAS does not understand.  */
+int
+md_parse_option (arg, argp)
+     int arg;
+     char *argp ATTRIBUTE_UNUSED;
+{
+  switch (arg)
+    {
+    case 'H':
+    case 'h':
+      md_show_usage (stdout);
+      exit (0);         /* Don't continue */
+
+    case 'N':
+      warn_for_branch_expansion = 1;
+      return 1;
+
+    default:
+      return 0;
+  }
+}
+
+/* Round up a section size to the appropriate boundary.  */
+valueT
+md_section_align (segment, size)
+     segT segment;
+     valueT size;
+{
+  /* Round all sects to multiple of 4, except the bss section, which
+     we'll round to word-size.
+
+     FIXME: Check if this really matters.  All sections should be
+     rounded up, and all sections should (optionally) be assumed to be
+     dword-aligned, it's just that there is actual usage of linking to a
+     multiple of two.  */
+  if (OUTPUT_FLAVOR == bfd_target_aout_flavour)
+    {
+      if (segment == bss_section)
+       return (size + 1) & ~1;
+      return (size + 3) & ~3;
+    }
+  else
+    {
+      /* FIXME: Is this wanted?  It matches the testsuite, but that's not
+        really a valid reason.  */
+      if (segment == text_section)
+       return (size + 3) & ~3;
+    }
+
+  return size;
+}
+
+
+/* Generate a machine-dependent relocation.  */
+arelent *
+tc_gen_reloc (section, fixP)
+     asection *section ATTRIBUTE_UNUSED;
+     fixS *fixP;
+{
+  arelent *relP;
+  bfd_reloc_code_real_type code;
+
+  switch (fixP->fx_r_type)
+    {
+    case BFD_RELOC_32:
+    case BFD_RELOC_16:
+    case BFD_RELOC_8:
+    case BFD_RELOC_VTABLE_INHERIT:
+    case BFD_RELOC_VTABLE_ENTRY:
+      code = fixP->fx_r_type;
+      break;
+    default:
+      as_bad_where (fixP->fx_file, fixP->fx_line,
+                   _("Semantics error.  This type of operand can not be relocated, it must be an assembly-time constant"));
+      return 0;
+    }
+
+  relP = (arelent *) xmalloc (sizeof (arelent));
+  assert (relP != 0);
+  relP->sym_ptr_ptr = (asymbol **) xmalloc (sizeof (asymbol *));
+  *relP->sym_ptr_ptr = symbol_get_bfdsym (fixP->fx_addsy);
+  relP->address = fixP->fx_frag->fr_address + fixP->fx_where;
+
+  if (fixP->fx_pcrel)
+    /* FIXME: Is this correct? */
+    relP->addend = fixP->fx_addnumber;
+  else
+    /* At least *this one* is correct. */
+    relP->addend = fixP->fx_offset;
+
+  /* This is the standard place for KLUDGEs to work around bugs in
+     bfd_install_relocation (first such note in the documentation
+     appears with binutils-2.8).
+
+     That function bfd_install_relocation does the wrong thing with
+     putting stuff into the addend of a reloc (it should stay out) for a
+     weak symbol.  The really bad thing is that it adds the
+     "segment-relative offset" of the symbol into the reloc.  In this
+     case, the reloc should instead be relative to the symbol with no
+     other offset than the assembly code shows; and since the symbol is
+     weak, any local definition should be ignored until link time (or
+     thereafter).
+     To wit:  weaksym+42  should be weaksym+42 in the reloc,
+     not weaksym+(offset_from_segment_of_local_weaksym_definition)
+
+     To "work around" this, we subtract the segment-relative offset of
+     "known" weak symbols.  This evens out the extra offset.
+
+     That happens for a.out but not for ELF, since for ELF,
+     bfd_install_relocation uses the "special function" field of the
+     howto, and does not execute the code that needs to be undone.  */
+
+  if (OUTPUT_FLAVOR == bfd_target_aout_flavour
+      && fixP->fx_addsy && S_IS_WEAK (fixP->fx_addsy)
+      && ! bfd_is_und_section (S_GET_SEGMENT (fixP->fx_addsy)))
+  {
+    relP->addend -= S_GET_VALUE (fixP->fx_addsy);
+  }
+
+  relP->howto = bfd_reloc_type_lookup (stdoutput, code);
+  if (! relP->howto)
+    {
+      const char *name;
+
+      name = S_GET_NAME (fixP->fx_addsy);
+      if (name == NULL)
+       name = _("<unknown>");
+      as_fatal (_("Cannot generate relocation type for symbol %s, code %s"),
+               name, bfd_get_reloc_code_name (code));
+    }
+
+  return relP;
+}
+
+
+/* Machine-dependent usage-output.  */
+void
+md_show_usage (stream)
+     FILE *stream;
+{
+  fprintf (stream, _("\n--  GNU as for CRIS\n"));
+  fprintf (stream, "\n");
+  fprintf (stream,
+          _("*** Usage: as-cris [switches] [-o objectfile] [files...]\n"));
+  fprintf (stream, _("Target-specific switches:\n"));
+  fprintf (stream, _("  -h, -H : Don't execute, print this help text.\n"));
+  fprintf (stream,
+          _("  -N     : Warn when branches are expanded to jumps.\n\n"));
+  fprintf (stream, _("Use as-cris --help to see more options.\n"));
+  fprintf (stream, _("objectfile       : Output file in the a.out format %s"),
+          _("described in the users manual.\n"));
+  fprintf (stream, _("           Default output file is \"a.out\".\n"));
+  fprintf (stream, _("files ...        : Input files in the source format %s"),
+          _(" described in the users manual.\n"));
+  fprintf (stream, _("           Default input file is standard input.\n"));
+  fprintf (stream, _("Description      : Assembler for the CRIS processor.\n"));
+}
+
+
+/* Apply a fixS (fixup of an instruction or data that we didn't have
+   enough info to complete immediately) to the data in a frag. */
+
+int
+md_apply_fix (fixP, valP)
+     fixS *fixP;
+     valueT *valP;
+{
+  long val = *valP;
+
+  char *buf = fixP->fx_where + fixP->fx_frag->fr_literal;
+
+  if (fixP->fx_addsy == 0 && !fixP->fx_pcrel)
+    fixP->fx_done = 1;
+
+  if (fixP->fx_bit_fixP || fixP->fx_im_disp != 0)
+    {
+      as_bad_where (fixP->fx_file, fixP->fx_line, _("Invalid relocation"));
+      fixP->fx_done = 1;
+    }
+  else
+  {
+    /* I took this from tc-arc.c, since we used to not support
+       fx_subsy != NULL.  I'm not totally sure it's TRT.  */
+    if (fixP->fx_subsy != (symbolS *) NULL)
+      {
+       if (S_GET_SEGMENT (fixP->fx_subsy) == absolute_section)
+         val -= S_GET_VALUE (fixP->fx_subsy);
+       else
+         {
+           /* We can't actually support subtracting a symbol.  */
+           as_bad_where (fixP->fx_file, fixP->fx_line,
+                         _("expression too complex"));
+         }
+      }
+
+    cris_number_to_imm (buf, val, fixP->fx_size, fixP);
+  }
+
+  return 1;
+}
+
+
+/* All relocations are relative to the location just after the fixup;
+   the address of the fixup plus its size.  */
+
+long
+md_pcrel_from (fixP)
+     fixS *fixP;
+{
+  valueT addr = fixP->fx_where + fixP->fx_frag->fr_address;
+
+  /* FIXME:  We get here only at the end of assembly, when X in ".-X" is
+     still unknown.  Since we don't have pc-relative relocations, this
+     is invalid.  What to do if anything for a.out, is to add
+     pc-relative relocations everywhere including the elinux program
+     loader.  */
+  as_bad_where (fixP->fx_file, fixP->fx_line,
+               _("Invalid pc-relative relocation"));
+  return fixP->fx_size + addr;
+}
+
+
+/* We have no need to give defaults for symbol-values. */
+symbolS *
+md_undefined_symbol (name)
+     char *name ATTRIBUTE_UNUSED;
+{
+  return 0;
+}
+
+
+/* Definition of TC_FORCE_RELOCATION.
+   FIXME: Unsure of this.  Can we omit it?  Just copied from tc-i386.c
+   when doing multi-object format with ELF, since it's the only other
+   multi-object-format target with a.out and ELF.  */
+int
+md_cris_force_relocation (fixp)
+     struct fix *fixp;
+{
+  if (fixp->fx_r_type == BFD_RELOC_VTABLE_INHERIT
+      || fixp->fx_r_type == BFD_RELOC_VTABLE_ENTRY)
+    return 1;
+  return 0;
+}
+
+/* Check and emit error if broken-word handling has failed to fix up a
+   case-table. This is called from write.c, after doing everything it
+   knows about how to handle broken words.  */
+
+void
+tc_cris_check_adjusted_broken_word (new_offset, brokwP)
+     offsetT new_offset;
+     struct broken_word *brokwP;
+{
+  if (new_offset > 32767 || new_offset < -32768)
+    /* We really want a genuine error, not a warning, so make it one. */
+    as_bad_where (brokwP->frag->fr_file, brokwP->frag->fr_line,
+                 _("Adjusted signed .word (%ld) overflows: `switch'-statement too large."),
+                 (long) new_offset);
+}
+
+
+/*
+ * Local variables:
+ * eval: (c-set-style "gnu")
+ * indent-tabs-mode: t
+ * End:
+ */
diff --git a/gas/config/tc-cris.h b/gas/config/tc-cris.h
new file mode 100644 (file)
index 0000000..85be242
--- /dev/null
@@ -0,0 +1,135 @@
+/* tc-cris.h -- Header file for tc-cris.c, the CRIS GAS port.
+   Copyright (C) 2000 Free Software Foundation, Inc.
+
+   Contributed by Axis Communications AB, Lund, Sweden.
+   Originally written for GAS 1.38.1 by Mikael Asker.
+   Updated, BFDized and GNUified by Hans-Peter Nilsson.
+
+   This file is part of GAS, the GNU Assembler.
+
+   GAS is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+
+   GAS is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with GAS; see the file COPYING.  If not, write to the
+   Free Software Foundation, 59 Temple Place - Suite 330, Boston,
+   MA 02111-1307, USA.  */
+
+/* See the GAS "internal" document for general documentation on this.
+   It is called internals.texi (internals.info when makeinfo:d), but is
+   not installed or makeinfo:d by "make info".  */
+
+/* Functions and variables that aren't declared in tc.h are declared here,
+   with the type/prototype that is used in the local extern-declaration of
+   their usage.  */
+
+#ifndef TC_CRIS
+#define TC_CRIS
+
+/* Multi-target support is always on.  */
+extern const char *cris_target_format PARAMS ((void));
+#define TARGET_FORMAT cris_target_format ()
+
+#define TARGET_ARCH bfd_arch_cris
+
+#define TARGET_BYTES_BIG_ENDIAN 0
+
+extern const char *md_shortopts;
+extern struct option md_longopts[];
+extern size_t md_longopts_size;
+
+extern const pseudo_typeS md_pseudo_table[];
+
+#define tc_comment_chars cris_comment_chars
+extern const char cris_comment_chars[];
+extern const char line_comment_chars[];
+extern const char line_separator_chars[];
+extern const char EXP_CHARS[];
+extern const char FLT_CHARS[];
+
+/* This should be optional, since it is ignored as an escape (assumed to
+   be itself) if it is not recognized.  */
+#define ONLY_STANDARD_ESCAPES
+
+/* Note that we do not define TC_EQUAL_IN_INSN, since its current use is
+   in the instruction rather than the operand, and thus does not come to
+   use for side-effect assignments such as "and.d [r0 = r1 + 42], r3".  */
+#define md_operand(x)
+
+#define md_number_to_chars number_to_chars_littleendian
+
+extern const int md_short_jump_size;
+extern const int md_long_jump_size;
+
+/* There's no use having different functions for this; the sizes are the
+   same.  Note that we can't #define md_short_jump_size here.  */
+#define md_create_short_jump md_create_long_jump
+
+extern const struct relax_type md_cris_relax_table[];
+#define TC_GENERIC_RELAX_TABLE md_cris_relax_table
+
+#define TC_HANDLES_FX_DONE
+
+#define TC_FORCE_RELOCATION(fixp) md_cris_force_relocation (fixp)
+extern int md_cris_force_relocation PARAMS ((struct fix *));
+
+/* This is really a workaround for a bug in write.c that resolves relocs
+   for weak symbols - it should be postponed to the link stage or later.
+   */
+#define tc_fix_adjustable(X)                           \
+ ((! (X)->fx_addsy || ! S_IS_WEAK((X)->fx_addsy))      \
+  && (X)->fx_r_type != BFD_RELOC_VTABLE_INHERIT                \
+  && (X)->fx_r_type != BFD_RELOC_VTABLE_ENTRY)
+
+/* When we have fixups against constant expressions, we get a GAS-specific
+   section symbol at no extra charge for obscure reasons in
+   adjust_reloc_syms.  Since ELF outputs section symbols, it gladly
+   outputs this "*ABS*" symbol in every object.  Avoid that.  */
+#define tc_frob_symbol(symp, punt)                     \
+ do {                                                  \
+  if (OUTPUT_FLAVOR == bfd_target_elf_flavour          \
+      && (symp) == section_symbol (absolute_section))  \
+    (punt) = 1;                                                \
+ } while (0)
+
+#define LISTING_HEADER "GAS for CRIS"
+
+#if 0
+/* The testsuite does not let me define these, although they IMHO should
+   be preferred over the default.  */
+#define LISTING_WORD_SIZE 2
+#define LISTING_LHS_WIDTH 4
+#define LISTING_LHS_WIDTH_SECOND 4
+#endif
+
+/* END of declaration and definitions described in the "internals"
+   document.  */
+
+/* Do this, or we will never know what hit us when the
+   broken-word-fixes break.  Do _not_ use WARN_SIGNED_OVERFLOW_WORD,
+   it is only for use with WORKING_DOT_WORD and warns about most stuff.
+   (still in 2.9.1).  */
+struct broken_word;
+extern void tc_cris_check_adjusted_broken_word PARAMS ((offsetT,
+                                                       struct
+                                                       broken_word *));
+#define TC_CHECK_ADJUSTED_BROKEN_DOT_WORD(new_offset, brokw) \
+ tc_cris_check_adjusted_broken_word ((offsetT) (new_offset), brokw)
+
+/* We don't want any implicit alignment, so we do nothing.  */
+#define TC_IMPLICIT_LCOMM_ALIGNMENT(SIZE, P2VAR)
+
+#endif /* TC_CRIS */
+/*
+ * Local variables:
+ * eval: (c-set-style "gnu")
+ * indent-tabs-mode: t
+ * End:
+ */
index 5f6592b22a26bca6669cb5780ffc90a9d3e60911..f081b55e287ec7e40234333805fa0f4eb94816c8 100755 (executable)
@@ -1369,6 +1369,11 @@ else
 fi
 
 
+case "$target" in
+NONE) lt_target="$host" ;;
+*) lt_target="$target" ;;
+esac
+
 # Check for any special flags to pass to ltconfig.
 libtool_flags="--cache-file=$cache_file"
 test "$enable_shared" = no && libtool_flags="$libtool_flags --disable-shared"
@@ -1389,11 +1394,11 @@ test x"$silent" = xyes && libtool_flags="$libtool_flags --silent"
 
 # Some flags need to be propagated to the compiler or linker for good
 # libtool support.
-case "$host" in
+case "$lt_target" in
 *-*-irix6*)
   # Find out which ABI we are using.
-  echo '#line 1396 "configure"' > conftest.$ac_ext
-  if { (eval echo configure:1397: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+  echo '#line 1401 "configure"' > conftest.$ac_ext
+  if { (eval echo configure:1402: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
     case "`/usr/bin/file conftest.o`" in
     *32-bit*)
       LD="${LD-ld} -32"
@@ -1414,19 +1419,19 @@ case "$host" in
   SAVE_CFLAGS="$CFLAGS"
   CFLAGS="$CFLAGS -belf"
   echo $ac_n "checking whether the C compiler needs -belf""... $ac_c" 1>&6
-echo "configure:1418: checking whether the C compiler needs -belf" >&5
+echo "configure:1423: checking whether the C compiler needs -belf" >&5
 if eval "test \"`echo '$''{'lt_cv_cc_needs_belf'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 1423 "configure"
+#line 1428 "configure"
 #include "confdefs.h"
 
 int main() {
 
 ; return 0; }
 EOF
-if { (eval echo configure:1430: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:1435: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   lt_cv_cc_needs_belf=yes
 else
@@ -1504,7 +1509,7 @@ LD="$LD" LDFLAGS="$LDFLAGS" LIBS="$LIBS" \
 LN_S="$LN_S" NM="$NM" RANLIB="$RANLIB" \
 DLLTOOL="$DLLTOOL" AS="$AS" OBJDUMP="$OBJDUMP" \
 ${CONFIG_SHELL-/bin/sh} $ac_aux_dir/ltconfig --no-reexec \
-$libtool_flags --no-verify $ac_aux_dir/ltmain.sh $host \
+$libtool_flags --no-verify $ac_aux_dir/ltmain.sh $lt_target \
 || { echo "configure: error: libtool configure failed" 1>&2; exit 1; }
 
 # Reload cache, that may have been modified by ltconfig
@@ -1721,6 +1726,8 @@ for this_target in $target $canon_targets ; do
 
       avr-*-*)             fmt=elf bfd_gas=yes ;;
 
+      cris-*-*)                    fmt=multi bfd_gas=yes ;;
+
       d10v-*-*)                    fmt=elf bfd_gas=yes ;;
       d30v-*-*)                    fmt=elf bfd_gas=yes ;;
 
@@ -2117,6 +2124,9 @@ EOF
       i386-*-aout)     emulation="i386aout" ;;
       i386-*-coff)     emulation="i386coff" ;;
       i386-*-elf)      emulation="i386elf" ;;
+
+      # Always all formats.  Having a.out first makes it the default.
+      cris-*-*)                emulation="crisaout criself" ;;
     esac
 
     emulations="$emulations $emulation"
@@ -2435,7 +2445,7 @@ EOF
 # Extract the first word of "gcc", so it can be a program name with args.
 set dummy gcc; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2439: checking for $ac_word" >&5
+echo "configure:2449: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2465,7 +2475,7 @@ if test -z "$CC"; then
   # Extract the first word of "cc", so it can be a program name with args.
 set dummy cc; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2469: checking for $ac_word" >&5
+echo "configure:2479: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2516,7 +2526,7 @@ fi
       # Extract the first word of "cl", so it can be a program name with args.
 set dummy cl; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2520: checking for $ac_word" >&5
+echo "configure:2530: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2548,7 +2558,7 @@ fi
 fi
 
 echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
-echo "configure:2552: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
+echo "configure:2562: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
 
 ac_ext=c
 # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
@@ -2559,12 +2569,12 @@ cross_compiling=$ac_cv_prog_cc_cross
 
 cat > conftest.$ac_ext << EOF
 
-#line 2563 "configure"
+#line 2573 "configure"
 #include "confdefs.h"
 
 main(){return(0);}
 EOF
-if { (eval echo configure:2568: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2578: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   ac_cv_prog_cc_works=yes
   # If we can't run a trivial program, we are probably using a cross compiler.
   if (./conftest; exit) 2>/dev/null; then
@@ -2590,12 +2600,12 @@ if test $ac_cv_prog_cc_works = no; then
   { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; }
 fi
 echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
-echo "configure:2594: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
+echo "configure:2604: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
 echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6
 cross_compiling=$ac_cv_prog_cc_cross
 
 echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
-echo "configure:2599: checking whether we are using GNU C" >&5
+echo "configure:2609: checking whether we are using GNU C" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2604,7 +2614,7 @@ else
   yes;
 #endif
 EOF
-if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:2608: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
+if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:2618: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
   ac_cv_prog_gcc=yes
 else
   ac_cv_prog_gcc=no
@@ -2623,7 +2633,7 @@ ac_test_CFLAGS="${CFLAGS+set}"
 ac_save_CFLAGS="$CFLAGS"
 CFLAGS=
 echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
-echo "configure:2627: checking whether ${CC-cc} accepts -g" >&5
+echo "configure:2637: checking whether ${CC-cc} accepts -g" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2660,7 +2670,7 @@ do
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2664: checking for $ac_word" >&5
+echo "configure:2674: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_YACC'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2691,7 +2701,7 @@ done
 test -n "$YACC" || YACC="yacc"
 
 echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
-echo "configure:2695: checking how to run the C preprocessor" >&5
+echo "configure:2705: checking how to run the C preprocessor" >&5
 # On Suns, sometimes $CPP names a directory.
 if test -n "$CPP" && test -d "$CPP"; then
   CPP=
@@ -2706,13 +2716,13 @@ else
   # On the NeXT, cc -E runs the code through the compiler's parser,
   # not just through cpp.
   cat > conftest.$ac_ext <<EOF
-#line 2710 "configure"
+#line 2720 "configure"
 #include "confdefs.h"
 #include <assert.h>
 Syntax Error
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2716: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2726: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   :
@@ -2723,13 +2733,13 @@ else
   rm -rf conftest*
   CPP="${CC-cc} -E -traditional-cpp"
   cat > conftest.$ac_ext <<EOF
-#line 2727 "configure"
+#line 2737 "configure"
 #include "confdefs.h"
 #include <assert.h>
 Syntax Error
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2733: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2743: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   :
@@ -2740,13 +2750,13 @@ else
   rm -rf conftest*
   CPP="${CC-cc} -nologo -E"
   cat > conftest.$ac_ext <<EOF
-#line 2744 "configure"
+#line 2754 "configure"
 #include "confdefs.h"
 #include <assert.h>
 Syntax Error
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2750: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2760: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   :
@@ -2776,7 +2786,7 @@ do
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2780: checking for $ac_word" >&5
+echo "configure:2790: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_LEX'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2809,7 +2819,7 @@ test -n "$LEX" || LEX=""$missing_dir/missing flex""
 # Extract the first word of "flex", so it can be a program name with args.
 set dummy flex; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2813: checking for $ac_word" >&5
+echo "configure:2823: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_LEX'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2843,7 +2853,7 @@ then
   *) ac_lib=l ;;
   esac
   echo $ac_n "checking for yywrap in -l$ac_lib""... $ac_c" 1>&6
-echo "configure:2847: checking for yywrap in -l$ac_lib" >&5
+echo "configure:2857: checking for yywrap in -l$ac_lib" >&5
 ac_lib_var=`echo $ac_lib'_'yywrap | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -2851,7 +2861,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-l$ac_lib  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 2855 "configure"
+#line 2865 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -2862,7 +2872,7 @@ int main() {
 yywrap()
 ; return 0; }
 EOF
-if { (eval echo configure:2866: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2876: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -2885,7 +2895,7 @@ fi
 fi
 
 echo $ac_n "checking lex output file root""... $ac_c" 1>&6
-echo "configure:2889: checking lex output file root" >&5
+echo "configure:2899: checking lex output file root" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_lex_root'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2906,7 +2916,7 @@ echo "$ac_t""$ac_cv_prog_lex_root" 1>&6
 LEX_OUTPUT_ROOT=$ac_cv_prog_lex_root
 
 echo $ac_n "checking whether yytext is a pointer""... $ac_c" 1>&6
-echo "configure:2910: checking whether yytext is a pointer" >&5
+echo "configure:2920: checking whether yytext is a pointer" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_lex_yytext_pointer'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2918,14 +2928,14 @@ echo 'extern char *yytext;' >>$LEX_OUTPUT_ROOT.c
 ac_save_LIBS="$LIBS"
 LIBS="$LIBS $LEXLIB"
 cat > conftest.$ac_ext <<EOF
-#line 2922 "configure"
+#line 2932 "configure"
 #include "confdefs.h"
 `cat $LEX_OUTPUT_ROOT.c`
 int main() {
 
 ; return 0; }
 EOF
-if { (eval echo configure:2929: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2939: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   ac_cv_prog_lex_yytext_pointer=yes
 else
@@ -2949,7 +2959,7 @@ fi
 
 ALL_LINGUAS=
 echo $ac_n "checking for POSIXized ISC""... $ac_c" 1>&6
-echo "configure:2953: checking for POSIXized ISC" >&5
+echo "configure:2963: checking for POSIXized ISC" >&5
 if test -d /etc/conf/kconfig.d &&
   grep _POSIX_VERSION /usr/include/sys/unistd.h >/dev/null 2>&1
 then
@@ -2970,12 +2980,12 @@ else
 fi
 
 echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6
-echo "configure:2974: checking for ANSI C header files" >&5
+echo "configure:2984: checking for ANSI C header files" >&5
 if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 2979 "configure"
+#line 2989 "configure"
 #include "confdefs.h"
 #include <stdlib.h>
 #include <stdarg.h>
@@ -2983,7 +2993,7 @@ else
 #include <float.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2987: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2997: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -3000,7 +3010,7 @@ rm -f conftest*
 if test $ac_cv_header_stdc = yes; then
   # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
 cat > conftest.$ac_ext <<EOF
-#line 3004 "configure"
+#line 3014 "configure"
 #include "confdefs.h"
 #include <string.h>
 EOF
@@ -3018,7 +3028,7 @@ fi
 if test $ac_cv_header_stdc = yes; then
   # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
 cat > conftest.$ac_ext <<EOF
-#line 3022 "configure"
+#line 3032 "configure"
 #include "confdefs.h"
 #include <stdlib.h>
 EOF
@@ -3039,7 +3049,7 @@ if test "$cross_compiling" = yes; then
   :
 else
   cat > conftest.$ac_ext <<EOF
-#line 3043 "configure"
+#line 3053 "configure"
 #include "confdefs.h"
 #include <ctype.h>
 #define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
@@ -3050,7 +3060,7 @@ if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2);
 exit (0); }
 
 EOF
-if { (eval echo configure:3054: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:3064: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   :
 else
@@ -3074,12 +3084,12 @@ EOF
 fi
 
 echo $ac_n "checking for working const""... $ac_c" 1>&6
-echo "configure:3078: checking for working const" >&5
+echo "configure:3088: checking for working const" >&5
 if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 3083 "configure"
+#line 3093 "configure"
 #include "confdefs.h"
 
 int main() {
@@ -3128,7 +3138,7 @@ ccp = (char const *const *) p;
 
 ; return 0; }
 EOF
-if { (eval echo configure:3132: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3142: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_c_const=yes
 else
@@ -3149,21 +3159,21 @@ EOF
 fi
 
 echo $ac_n "checking for inline""... $ac_c" 1>&6
-echo "configure:3153: checking for inline" >&5
+echo "configure:3163: checking for inline" >&5
 if eval "test \"`echo '$''{'ac_cv_c_inline'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   ac_cv_c_inline=no
 for ac_kw in inline __inline__ __inline; do
   cat > conftest.$ac_ext <<EOF
-#line 3160 "configure"
+#line 3170 "configure"
 #include "confdefs.h"
 
 int main() {
 } $ac_kw foo() {
 ; return 0; }
 EOF
-if { (eval echo configure:3167: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3177: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_c_inline=$ac_kw; break
 else
@@ -3189,12 +3199,12 @@ EOF
 esac
 
 echo $ac_n "checking for off_t""... $ac_c" 1>&6
-echo "configure:3193: checking for off_t" >&5
+echo "configure:3203: checking for off_t" >&5
 if eval "test \"`echo '$''{'ac_cv_type_off_t'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 3198 "configure"
+#line 3208 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #if STDC_HEADERS
@@ -3222,12 +3232,12 @@ EOF
 fi
 
 echo $ac_n "checking for size_t""... $ac_c" 1>&6
-echo "configure:3226: checking for size_t" >&5
+echo "configure:3236: checking for size_t" >&5
 if eval "test \"`echo '$''{'ac_cv_type_size_t'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 3231 "configure"
+#line 3241 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #if STDC_HEADERS
@@ -3257,19 +3267,19 @@ fi
 # The Ultrix 4.2 mips builtin alloca declared by alloca.h only works
 # for constant arguments.  Useless!
 echo $ac_n "checking for working alloca.h""... $ac_c" 1>&6
-echo "configure:3261: checking for working alloca.h" >&5
+echo "configure:3271: checking for working alloca.h" >&5
 if eval "test \"`echo '$''{'ac_cv_header_alloca_h'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 3266 "configure"
+#line 3276 "configure"
 #include "confdefs.h"
 #include <alloca.h>
 int main() {
 char *p = alloca(2 * sizeof(int));
 ; return 0; }
 EOF
-if { (eval echo configure:3273: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3283: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   ac_cv_header_alloca_h=yes
 else
@@ -3290,12 +3300,12 @@ EOF
 fi
 
 echo $ac_n "checking for alloca""... $ac_c" 1>&6
-echo "configure:3294: checking for alloca" >&5
+echo "configure:3304: checking for alloca" >&5
 if eval "test \"`echo '$''{'ac_cv_func_alloca_works'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 3299 "configure"
+#line 3309 "configure"
 #include "confdefs.h"
 
 #ifdef __GNUC__
@@ -3323,7 +3333,7 @@ int main() {
 char *p = (char *) alloca(1);
 ; return 0; }
 EOF
-if { (eval echo configure:3327: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3337: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   ac_cv_func_alloca_works=yes
 else
@@ -3355,12 +3365,12 @@ EOF
 
 
 echo $ac_n "checking whether alloca needs Cray hooks""... $ac_c" 1>&6
-echo "configure:3359: checking whether alloca needs Cray hooks" >&5
+echo "configure:3369: checking whether alloca needs Cray hooks" >&5
 if eval "test \"`echo '$''{'ac_cv_os_cray'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 3364 "configure"
+#line 3374 "configure"
 #include "confdefs.h"
 #if defined(CRAY) && ! defined(CRAY2)
 webecray
@@ -3385,12 +3395,12 @@ echo "$ac_t""$ac_cv_os_cray" 1>&6
 if test $ac_cv_os_cray = yes; then
 for ac_func in _getb67 GETB67 getb67; do
   echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:3389: checking for $ac_func" >&5
+echo "configure:3399: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 3394 "configure"
+#line 3404 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -3413,7 +3423,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:3417: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3427: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -3440,7 +3450,7 @@ done
 fi
 
 echo $ac_n "checking stack direction for C alloca""... $ac_c" 1>&6
-echo "configure:3444: checking stack direction for C alloca" >&5
+echo "configure:3454: checking stack direction for C alloca" >&5
 if eval "test \"`echo '$''{'ac_cv_c_stack_direction'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -3448,7 +3458,7 @@ else
   ac_cv_c_stack_direction=0
 else
   cat > conftest.$ac_ext <<EOF
-#line 3452 "configure"
+#line 3462 "configure"
 #include "confdefs.h"
 find_stack_direction ()
 {
@@ -3467,7 +3477,7 @@ main ()
   exit (find_stack_direction() < 0);
 }
 EOF
-if { (eval echo configure:3471: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:3481: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   ac_cv_c_stack_direction=1
 else
@@ -3492,17 +3502,17 @@ for ac_hdr in unistd.h
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:3496: checking for $ac_hdr" >&5
+echo "configure:3506: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 3501 "configure"
+#line 3511 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:3506: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:3516: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -3531,12 +3541,12 @@ done
 for ac_func in getpagesize
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:3535: checking for $ac_func" >&5
+echo "configure:3545: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 3540 "configure"
+#line 3550 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -3559,7 +3569,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:3563: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3573: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -3584,7 +3594,7 @@ fi
 done
 
 echo $ac_n "checking for working mmap""... $ac_c" 1>&6
-echo "configure:3588: checking for working mmap" >&5
+echo "configure:3598: checking for working mmap" >&5
 if eval "test \"`echo '$''{'ac_cv_func_mmap_fixed_mapped'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -3592,7 +3602,7 @@ else
   ac_cv_func_mmap_fixed_mapped=no
 else
   cat > conftest.$ac_ext <<EOF
-#line 3596 "configure"
+#line 3606 "configure"
 #include "confdefs.h"
 
 /* Thanks to Mike Haertel and Jim Avera for this test.
@@ -3732,7 +3742,7 @@ main()
 }
 
 EOF
-if { (eval echo configure:3736: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:3746: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   ac_cv_func_mmap_fixed_mapped=yes
 else
@@ -3760,17 +3770,17 @@ unistd.h values.h sys/param.h
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:3764: checking for $ac_hdr" >&5
+echo "configure:3774: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 3769 "configure"
+#line 3779 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:3774: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:3784: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -3800,12 +3810,12 @@ done
 __argz_count __argz_stringify __argz_next
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:3804: checking for $ac_func" >&5
+echo "configure:3814: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 3809 "configure"
+#line 3819 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -3828,7 +3838,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:3832: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3842: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -3857,12 +3867,12 @@ done
      for ac_func in stpcpy
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:3861: checking for $ac_func" >&5
+echo "configure:3871: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 3866 "configure"
+#line 3876 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -3885,7 +3895,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:3889: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3899: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -3919,19 +3929,19 @@ EOF
 
    if test $ac_cv_header_locale_h = yes; then
     echo $ac_n "checking for LC_MESSAGES""... $ac_c" 1>&6
-echo "configure:3923: checking for LC_MESSAGES" >&5
+echo "configure:3933: checking for LC_MESSAGES" >&5
 if eval "test \"`echo '$''{'am_cv_val_LC_MESSAGES'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 3928 "configure"
+#line 3938 "configure"
 #include "confdefs.h"
 #include <locale.h>
 int main() {
 return LC_MESSAGES
 ; return 0; }
 EOF
-if { (eval echo configure:3935: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3945: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   am_cv_val_LC_MESSAGES=yes
 else
@@ -3952,7 +3962,7 @@ EOF
     fi
   fi
    echo $ac_n "checking whether NLS is requested""... $ac_c" 1>&6
-echo "configure:3956: checking whether NLS is requested" >&5
+echo "configure:3966: checking whether NLS is requested" >&5
         # Check whether --enable-nls or --disable-nls was given.
 if test "${enable_nls+set}" = set; then
   enableval="$enable_nls"
@@ -3972,7 +3982,7 @@ fi
 EOF
 
       echo $ac_n "checking whether included gettext is requested""... $ac_c" 1>&6
-echo "configure:3976: checking whether included gettext is requested" >&5
+echo "configure:3986: checking whether included gettext is requested" >&5
       # Check whether --with-included-gettext or --without-included-gettext was given.
 if test "${with_included_gettext+set}" = set; then
   withval="$with_included_gettext"
@@ -3991,17 +4001,17 @@ fi
 
        ac_safe=`echo "libintl.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for libintl.h""... $ac_c" 1>&6
-echo "configure:3995: checking for libintl.h" >&5
+echo "configure:4005: checking for libintl.h" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 4000 "configure"
+#line 4010 "configure"
 #include "confdefs.h"
 #include <libintl.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:4005: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:4015: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -4018,19 +4028,19 @@ fi
 if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
   echo "$ac_t""yes" 1>&6
   echo $ac_n "checking for gettext in libc""... $ac_c" 1>&6
-echo "configure:4022: checking for gettext in libc" >&5
+echo "configure:4032: checking for gettext in libc" >&5
 if eval "test \"`echo '$''{'gt_cv_func_gettext_libc'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 4027 "configure"
+#line 4037 "configure"
 #include "confdefs.h"
 #include <libintl.h>
 int main() {
 return (int) gettext ("")
 ; return 0; }
 EOF
-if { (eval echo configure:4034: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4044: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   gt_cv_func_gettext_libc=yes
 else
@@ -4046,7 +4056,7 @@ echo "$ac_t""$gt_cv_func_gettext_libc" 1>&6
 
           if test "$gt_cv_func_gettext_libc" != "yes"; then
             echo $ac_n "checking for bindtextdomain in -lintl""... $ac_c" 1>&6
-echo "configure:4050: checking for bindtextdomain in -lintl" >&5
+echo "configure:4060: checking for bindtextdomain in -lintl" >&5
 ac_lib_var=`echo intl'_'bindtextdomain | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -4054,7 +4064,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lintl  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 4058 "configure"
+#line 4068 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -4065,7 +4075,7 @@ int main() {
 bindtextdomain()
 ; return 0; }
 EOF
-if { (eval echo configure:4069: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4079: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -4081,19 +4091,19 @@ fi
 if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
   echo "$ac_t""yes" 1>&6
   echo $ac_n "checking for gettext in libintl""... $ac_c" 1>&6
-echo "configure:4085: checking for gettext in libintl" >&5
+echo "configure:4095: checking for gettext in libintl" >&5
 if eval "test \"`echo '$''{'gt_cv_func_gettext_libintl'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 4090 "configure"
+#line 4100 "configure"
 #include "confdefs.h"
 
 int main() {
 return (int) gettext ("")
 ; return 0; }
 EOF
-if { (eval echo configure:4097: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4107: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   gt_cv_func_gettext_libintl=yes
 else
@@ -4121,7 +4131,7 @@ EOF
              # Extract the first word of "msgfmt", so it can be a program name with args.
 set dummy msgfmt; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:4125: checking for $ac_word" >&5
+echo "configure:4135: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_MSGFMT'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -4155,12 +4165,12 @@ fi
                for ac_func in dcgettext
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:4159: checking for $ac_func" >&5
+echo "configure:4169: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 4164 "configure"
+#line 4174 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -4183,7 +4193,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:4187: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4197: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -4210,7 +4220,7 @@ done
                # Extract the first word of "gmsgfmt", so it can be a program name with args.
 set dummy gmsgfmt; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:4214: checking for $ac_word" >&5
+echo "configure:4224: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_GMSGFMT'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -4246,7 +4256,7 @@ fi
                # Extract the first word of "xgettext", so it can be a program name with args.
 set dummy xgettext; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:4250: checking for $ac_word" >&5
+echo "configure:4260: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_XGETTEXT'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -4278,7 +4288,7 @@ else
 fi
 
                cat > conftest.$ac_ext <<EOF
-#line 4282 "configure"
+#line 4292 "configure"
 #include "confdefs.h"
 
 int main() {
@@ -4286,7 +4296,7 @@ extern int _nl_msg_cat_cntr;
                               return _nl_msg_cat_cntr
 ; return 0; }
 EOF
-if { (eval echo configure:4290: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4300: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   CATOBJEXT=.gmo
                   DATADIRNAME=share
@@ -4318,7 +4328,7 @@ fi
         # Extract the first word of "msgfmt", so it can be a program name with args.
 set dummy msgfmt; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:4322: checking for $ac_word" >&5
+echo "configure:4332: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_MSGFMT'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -4352,7 +4362,7 @@ fi
         # Extract the first word of "gmsgfmt", so it can be a program name with args.
 set dummy gmsgfmt; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:4356: checking for $ac_word" >&5
+echo "configure:4366: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_GMSGFMT'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -4388,7 +4398,7 @@ fi
         # Extract the first word of "xgettext", so it can be a program name with args.
 set dummy xgettext; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:4392: checking for $ac_word" >&5
+echo "configure:4402: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_XGETTEXT'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -4478,7 +4488,7 @@ fi
        LINGUAS=
      else
        echo $ac_n "checking for catalogs to be installed""... $ac_c" 1>&6
-echo "configure:4482: checking for catalogs to be installed" >&5
+echo "configure:4492: checking for catalogs to be installed" >&5
        NEW_LINGUAS=
        for lang in ${LINGUAS=$ALL_LINGUAS}; do
          case "$ALL_LINGUAS" in
@@ -4506,17 +4516,17 @@ echo "configure:4482: checking for catalogs to be installed" >&5
       if test "$CATOBJEXT" = ".cat"; then
         ac_safe=`echo "linux/version.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for linux/version.h""... $ac_c" 1>&6
-echo "configure:4510: checking for linux/version.h" >&5
+echo "configure:4520: checking for linux/version.h" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 4515 "configure"
+#line 4525 "configure"
 #include "confdefs.h"
 #include <linux/version.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:4520: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:4530: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -4579,7 +4589,7 @@ fi
   
 
 echo $ac_n "checking whether to enable maintainer-specific portions of Makefiles""... $ac_c" 1>&6
-echo "configure:4583: checking whether to enable maintainer-specific portions of Makefiles" >&5
+echo "configure:4593: checking whether to enable maintainer-specific portions of Makefiles" >&5
     # Check whether --enable-maintainer-mode or --disable-maintainer-mode was given.
 if test "${enable_maintainer_mode+set}" = set; then
   enableval="$enable_maintainer_mode"
@@ -4602,12 +4612,12 @@ fi
   
 
 echo $ac_n "checking for Cygwin environment""... $ac_c" 1>&6
-echo "configure:4606: checking for Cygwin environment" >&5
+echo "configure:4616: checking for Cygwin environment" >&5
 if eval "test \"`echo '$''{'ac_cv_cygwin'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 4611 "configure"
+#line 4621 "configure"
 #include "confdefs.h"
 
 int main() {
@@ -4618,7 +4628,7 @@ int main() {
 return __CYGWIN__;
 ; return 0; }
 EOF
-if { (eval echo configure:4622: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:4632: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_cygwin=yes
 else
@@ -4635,19 +4645,19 @@ echo "$ac_t""$ac_cv_cygwin" 1>&6
 CYGWIN=
 test "$ac_cv_cygwin" = yes && CYGWIN=yes
 echo $ac_n "checking for mingw32 environment""... $ac_c" 1>&6
-echo "configure:4639: checking for mingw32 environment" >&5
+echo "configure:4649: checking for mingw32 environment" >&5
 if eval "test \"`echo '$''{'ac_cv_mingw32'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 4644 "configure"
+#line 4654 "configure"
 #include "confdefs.h"
 
 int main() {
 return __MINGW32__;
 ; return 0; }
 EOF
-if { (eval echo configure:4651: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:4661: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_mingw32=yes
 else
@@ -4666,7 +4676,7 @@ test "$ac_cv_mingw32" = yes && MINGW32=yes
 
 
 echo $ac_n "checking for executable suffix""... $ac_c" 1>&6
-echo "configure:4670: checking for executable suffix" >&5
+echo "configure:4680: checking for executable suffix" >&5
 if eval "test \"`echo '$''{'ac_cv_exeext'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -4676,7 +4686,7 @@ else
   rm -f conftest*
   echo 'int main () { return 0; }' > conftest.$ac_ext
   ac_cv_exeext=
-  if { (eval echo configure:4680: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then
+  if { (eval echo configure:4690: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then
     for file in conftest.*; do
       case $file in
       *.c | *.o | *.obj | *.ilk | *.pdb) ;;
@@ -4701,17 +4711,17 @@ for ac_hdr in string.h stdlib.h memory.h strings.h unistd.h stdarg.h varargs.h e
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:4705: checking for $ac_hdr" >&5
+echo "configure:4715: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 4710 "configure"
+#line 4720 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:4715: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:4725: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -4741,7 +4751,7 @@ done
 # Put this here so that autoconf's "cross-compiling" message doesn't confuse
 # people who are not cross-compiling but are compiling cross-assemblers.
 echo $ac_n "checking whether compiling a cross-assembler""... $ac_c" 1>&6
-echo "configure:4745: checking whether compiling a cross-assembler" >&5
+echo "configure:4755: checking whether compiling a cross-assembler" >&5
 if test "${host}" = "${target}"; then
   cross_gas=no
 else
@@ -4756,19 +4766,19 @@ echo "$ac_t""$cross_gas" 1>&6
 # The Ultrix 4.2 mips builtin alloca declared by alloca.h only works
 # for constant arguments.  Useless!
 echo $ac_n "checking for working alloca.h""... $ac_c" 1>&6
-echo "configure:4760: checking for working alloca.h" >&5
+echo "configure:4770: checking for working alloca.h" >&5
 if eval "test \"`echo '$''{'ac_cv_header_alloca_h'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 4765 "configure"
+#line 4775 "configure"
 #include "confdefs.h"
 #include <alloca.h>
 int main() {
 char *p = alloca(2 * sizeof(int));
 ; return 0; }
 EOF
-if { (eval echo configure:4772: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4782: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   ac_cv_header_alloca_h=yes
 else
@@ -4789,12 +4799,12 @@ EOF
 fi
 
 echo $ac_n "checking for alloca""... $ac_c" 1>&6
-echo "configure:4793: checking for alloca" >&5
+echo "configure:4803: checking for alloca" >&5
 if eval "test \"`echo '$''{'ac_cv_func_alloca_works'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 4798 "configure"
+#line 4808 "configure"
 #include "confdefs.h"
 
 #ifdef __GNUC__
@@ -4822,7 +4832,7 @@ int main() {
 char *p = (char *) alloca(1);
 ; return 0; }
 EOF
-if { (eval echo configure:4826: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4836: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   ac_cv_func_alloca_works=yes
 else
@@ -4854,12 +4864,12 @@ EOF
 
 
 echo $ac_n "checking whether alloca needs Cray hooks""... $ac_c" 1>&6
-echo "configure:4858: checking whether alloca needs Cray hooks" >&5
+echo "configure:4868: checking whether alloca needs Cray hooks" >&5
 if eval "test \"`echo '$''{'ac_cv_os_cray'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 4863 "configure"
+#line 4873 "configure"
 #include "confdefs.h"
 #if defined(CRAY) && ! defined(CRAY2)
 webecray
@@ -4884,12 +4894,12 @@ echo "$ac_t""$ac_cv_os_cray" 1>&6
 if test $ac_cv_os_cray = yes; then
 for ac_func in _getb67 GETB67 getb67; do
   echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:4888: checking for $ac_func" >&5
+echo "configure:4898: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 4893 "configure"
+#line 4903 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -4912,7 +4922,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:4916: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4926: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -4939,7 +4949,7 @@ done
 fi
 
 echo $ac_n "checking stack direction for C alloca""... $ac_c" 1>&6
-echo "configure:4943: checking stack direction for C alloca" >&5
+echo "configure:4953: checking stack direction for C alloca" >&5
 if eval "test \"`echo '$''{'ac_cv_c_stack_direction'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -4947,7 +4957,7 @@ else
   ac_cv_c_stack_direction=0
 else
   cat > conftest.$ac_ext <<EOF
-#line 4951 "configure"
+#line 4961 "configure"
 #include "confdefs.h"
 find_stack_direction ()
 {
@@ -4966,7 +4976,7 @@ main ()
   exit (find_stack_direction() < 0);
 }
 EOF
-if { (eval echo configure:4970: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:4980: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   ac_cv_c_stack_direction=1
 else
@@ -4988,21 +4998,21 @@ EOF
 fi
 
 echo $ac_n "checking for inline""... $ac_c" 1>&6
-echo "configure:4992: checking for inline" >&5
+echo "configure:5002: checking for inline" >&5
 if eval "test \"`echo '$''{'ac_cv_c_inline'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   ac_cv_c_inline=no
 for ac_kw in inline __inline__ __inline; do
   cat > conftest.$ac_ext <<EOF
-#line 4999 "configure"
+#line 5009 "configure"
 #include "confdefs.h"
 
 int main() {
 } $ac_kw foo() {
 ; return 0; }
 EOF
-if { (eval echo configure:5006: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:5016: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_c_inline=$ac_kw; break
 else
@@ -5032,12 +5042,12 @@ esac
 for ac_func in unlink remove
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:5036: checking for $ac_func" >&5
+echo "configure:5046: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 5041 "configure"
+#line 5051 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -5060,7 +5070,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:5064: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5074: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -5089,12 +5099,12 @@ done
 for ac_func in sbrk
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:5093: checking for $ac_func" >&5
+echo "configure:5103: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 5098 "configure"
+#line 5108 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -5117,7 +5127,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:5121: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5131: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -5146,13 +5156,13 @@ done
 case "${need_libm}" in
 yes) 
   LIBM=
-case "$host" in
+case "$lt_target" in
 *-*-beos* | *-*-cygwin*)
   # These system don't have libm
   ;;
 *-ncr-sysv4.3*)
   echo $ac_n "checking for _mwvalidcheckl in -lmw""... $ac_c" 1>&6
-echo "configure:5156: checking for _mwvalidcheckl in -lmw" >&5
+echo "configure:5166: checking for _mwvalidcheckl in -lmw" >&5
 ac_lib_var=`echo mw'_'_mwvalidcheckl | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -5160,7 +5170,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lmw  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 5164 "configure"
+#line 5174 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -5171,7 +5181,7 @@ int main() {
 _mwvalidcheckl()
 ; return 0; }
 EOF
-if { (eval echo configure:5175: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5185: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -5192,7 +5202,7 @@ else
 fi
 
   echo $ac_n "checking for main in -lm""... $ac_c" 1>&6
-echo "configure:5196: checking for main in -lm" >&5
+echo "configure:5206: checking for main in -lm" >&5
 ac_lib_var=`echo m'_'main | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -5200,14 +5210,14 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lm  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 5204 "configure"
+#line 5214 "configure"
 #include "confdefs.h"
 
 int main() {
 main()
 ; return 0; }
 EOF
-if { (eval echo configure:5211: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5221: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -5230,7 +5240,7 @@ fi
   ;;
 *)
   echo $ac_n "checking for main in -lm""... $ac_c" 1>&6
-echo "configure:5234: checking for main in -lm" >&5
+echo "configure:5244: checking for main in -lm" >&5
 ac_lib_var=`echo m'_'main | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -5238,14 +5248,14 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lm  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 5242 "configure"
+#line 5252 "configure"
 #include "confdefs.h"
 
 int main() {
 main()
 ; return 0; }
 EOF
-if { (eval echo configure:5249: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5259: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -5276,12 +5286,12 @@ esac
 # enough, but on some of those systems, the assert macro relies on requoting
 # working properly!
 echo $ac_n "checking for working assert macro""... $ac_c" 1>&6
-echo "configure:5280: checking for working assert macro" >&5
+echo "configure:5290: checking for working assert macro" >&5
 if eval "test \"`echo '$''{'gas_cv_assert_ok'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 5285 "configure"
+#line 5295 "configure"
 #include "confdefs.h"
 #include <assert.h>
 #include <stdio.h>
@@ -5297,7 +5307,7 @@ assert (a == b
 
 ; return 0; }
 EOF
-if { (eval echo configure:5301: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5311: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   gas_cv_assert_ok=yes
 else
@@ -5338,12 +5348,12 @@ gas_test_headers="
 "
 
 echo $ac_n "checking whether declaration is required for strstr""... $ac_c" 1>&6
-echo "configure:5342: checking whether declaration is required for strstr" >&5
+echo "configure:5352: checking whether declaration is required for strstr" >&5
 if eval "test \"`echo '$''{'gas_cv_decl_needed_strstr'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 5347 "configure"
+#line 5357 "configure"
 #include "confdefs.h"
 $gas_test_headers
 int main() {
@@ -5354,7 +5364,7 @@ x = (f) strstr;
 
 ; return 0; }
 EOF
-if { (eval echo configure:5358: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5368: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   gas_cv_decl_needed_strstr=no
 else
@@ -5375,12 +5385,12 @@ fi
 
 
 echo $ac_n "checking whether declaration is required for malloc""... $ac_c" 1>&6
-echo "configure:5379: checking whether declaration is required for malloc" >&5
+echo "configure:5389: checking whether declaration is required for malloc" >&5
 if eval "test \"`echo '$''{'gas_cv_decl_needed_malloc'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 5384 "configure"
+#line 5394 "configure"
 #include "confdefs.h"
 $gas_test_headers
 int main() {
@@ -5391,7 +5401,7 @@ x = (f) malloc;
 
 ; return 0; }
 EOF
-if { (eval echo configure:5395: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5405: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   gas_cv_decl_needed_malloc=no
 else
@@ -5412,12 +5422,12 @@ fi
 
 
 echo $ac_n "checking whether declaration is required for free""... $ac_c" 1>&6
-echo "configure:5416: checking whether declaration is required for free" >&5
+echo "configure:5426: checking whether declaration is required for free" >&5
 if eval "test \"`echo '$''{'gas_cv_decl_needed_free'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 5421 "configure"
+#line 5431 "configure"
 #include "confdefs.h"
 $gas_test_headers
 int main() {
@@ -5428,7 +5438,7 @@ x = (f) free;
 
 ; return 0; }
 EOF
-if { (eval echo configure:5432: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5442: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   gas_cv_decl_needed_free=no
 else
@@ -5449,12 +5459,12 @@ fi
 
 
 echo $ac_n "checking whether declaration is required for sbrk""... $ac_c" 1>&6
-echo "configure:5453: checking whether declaration is required for sbrk" >&5
+echo "configure:5463: checking whether declaration is required for sbrk" >&5
 if eval "test \"`echo '$''{'gas_cv_decl_needed_sbrk'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 5458 "configure"
+#line 5468 "configure"
 #include "confdefs.h"
 $gas_test_headers
 int main() {
@@ -5465,7 +5475,7 @@ x = (f) sbrk;
 
 ; return 0; }
 EOF
-if { (eval echo configure:5469: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5479: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   gas_cv_decl_needed_sbrk=no
 else
@@ -5486,12 +5496,12 @@ fi
 
 
 echo $ac_n "checking whether declaration is required for environ""... $ac_c" 1>&6
-echo "configure:5490: checking whether declaration is required for environ" >&5
+echo "configure:5500: checking whether declaration is required for environ" >&5
 if eval "test \"`echo '$''{'gas_cv_decl_needed_environ'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 5495 "configure"
+#line 5505 "configure"
 #include "confdefs.h"
 $gas_test_headers
 int main() {
@@ -5502,7 +5512,7 @@ x = (f) environ;
 
 ; return 0; }
 EOF
-if { (eval echo configure:5506: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5516: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   gas_cv_decl_needed_environ=no
 else
@@ -5526,12 +5536,12 @@ fi
 # for it?
 
 echo $ac_n "checking whether declaration is required for errno""... $ac_c" 1>&6
-echo "configure:5530: checking whether declaration is required for errno" >&5
+echo "configure:5540: checking whether declaration is required for errno" >&5
 if eval "test \"`echo '$''{'gas_cv_decl_needed_errno'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 5535 "configure"
+#line 5545 "configure"
 #include "confdefs.h"
 
 #ifdef HAVE_ERRNO_H
@@ -5546,7 +5556,7 @@ x = (f) errno;
 
 ; return 0; }
 EOF
-if { (eval echo configure:5550: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5560: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   gas_cv_decl_needed_errno=no
 else
index 503d9ff6ce775637a9876eb261145439beb23086..1688d11e5423714a3ebe4f6f83bb5d105071bf34 100644 (file)
@@ -189,6 +189,8 @@ changequote([,])dnl
 
       avr-*-*)             fmt=elf bfd_gas=yes ;;
 
+      cris-*-*)                    fmt=multi bfd_gas=yes ;;
+
       d10v-*-*)                    fmt=elf bfd_gas=yes ;;
       d30v-*-*)                    fmt=elf bfd_gas=yes ;;
 
@@ -576,6 +578,9 @@ changequote([,])dnl
       i386-*-aout)     emulation="i386aout" ;;
       i386-*-coff)     emulation="i386coff" ;;
       i386-*-elf)      emulation="i386elf" ;;
+
+      # Always all formats.  Having a.out first makes it the default.
+      cris-*-*)                emulation="crisaout criself" ;;
     esac
 
     emulations="$emulations $emulation"
index 0d00af624b2d048e9d0ea0151c6010eeb7c0ac8f..f0a7cd682680b61d5013d54aac117af13b6bf419 100644 (file)
@@ -13,6 +13,8 @@ bit_fix.h
 cgen.h
 cond.c
 cond.c
+config/e-crisaout.c
+config/e-criself.c
 config/e-i386aout.c
 config/e-i386coff.c
 config/e-i386elf.c
@@ -48,6 +50,8 @@ config/tc-arm.c
 config/tc-arm.h
 config/tc-avr.c
 config/tc-avr.h
+config/tc-cris.c
+config/tc-cris.h
 config/tc-d10v.c
 config/tc-d10v.h
 config/tc-d30v.c
@@ -122,18 +126,18 @@ ecoff.c
 ecoff.h
 ehopt.c
 ehopt.c
-emul.h
 emul-target.h
+emul.h
 expr.c
 expr.c
 expr.h
 flonum-copy.c
 flonum-copy.c
-flonum.h
 flonum-konst.c
 flonum-konst.c
 flonum-mult.c
 flonum-mult.c
+flonum.h
 frags.c
 frags.c
 frags.h
index 8f32d59334412151b312e5c12b9a5665ccae4f5d..66727e7304a57ee73be634b04c45c5255a978b6a 100644 (file)
@@ -6,7 +6,7 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
-"POT-Creation-Date: 2000-07-17 14:23-0700\n"
+"POT-Creation-Date: 2000-07-20 19:36+0200\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -59,31 +59,31 @@ msgstr ""
 msgid "EOF in Comment: Newline inserted"
 msgstr ""
 
-#: as.c:148
+#: as.c:149
 msgid "missing emulation mode name"
 msgstr ""
 
-#: as.c:163
+#: as.c:164
 #, c-format
 msgid "unrecognized emulation name `%s'"
 msgstr ""
 
-#: as.c:210
+#: as.c:211
 #, c-format
 msgid "GNU assembler version %s (%s) using BFD version %s"
 msgstr ""
 
-#: as.c:213
+#: as.c:214
 #, c-format
 msgid "GNU assembler version %s (%s)"
 msgstr ""
 
-#: as.c:222
+#: as.c:223
 #, c-format
 msgid "Usage: %s [option...] [asmfile...]\n"
 msgstr ""
 
-#: as.c:224
+#: as.c:225
 msgid ""
 "Options:\n"
 "  -a[sub-option...]\t  turn on listings\n"
@@ -100,135 +100,135 @@ msgid ""
 "                      \t  =FILE  list to FILE (must be last sub-option)\n"
 msgstr ""
 
-#: as.c:238
+#: as.c:239
 msgid "  -D                      produce assembler debugging messages\n"
 msgstr ""
 
-#: as.c:240
+#: as.c:241
 msgid "  --defsym SYM=VAL        define symbol SYM to given value\n"
 msgstr ""
 
-#: as.c:256
+#: as.c:257
 #, c-format
 msgid "                          emulate output (default %s)\n"
 msgstr ""
 
-#: as.c:260
+#: as.c:261
 msgid "  -f                      skip whitespace and comment preprocessing\n"
 msgstr ""
 
-#: as.c:262
+#: as.c:263
 msgid "  --gstabs                generate stabs debugging information\n"
 msgstr ""
 
-#: as.c:264
+#: as.c:265
 msgid "  --gdwarf2               generate DWARF2 debugging information\n"
 msgstr ""
 
-#: as.c:266
+#: as.c:267
 msgid "  --help                  show this message and exit\n"
 msgstr ""
 
-#: as.c:268
+#: as.c:269
 msgid ""
 "  -I DIR                  add DIR to search list for .include directives\n"
 msgstr ""
 
-#: as.c:270
+#: as.c:271
 msgid "  -J                      don't warn about signed overflow\n"
 msgstr ""
 
-#: as.c:272
+#: as.c:273
 msgid ""
 "  -K                      warn when differences altered for long "
 "displacements\n"
 msgstr ""
 
-#: as.c:274
+#: as.c:275
 msgid "  -L,--keep-locals        keep local symbols (e.g. starting with `L')\n"
 msgstr ""
 
-#: as.c:276
+#: as.c:277
 msgid "  -M,--mri                assemble in MRI compatibility mode\n"
 msgstr ""
 
-#: as.c:278
+#: as.c:279
 msgid ""
 "  --MD FILE               write dependency information in FILE (default "
 "none)\n"
 msgstr ""
 
-#: as.c:280
+#: as.c:281
 msgid "  -nocpp                  ignored\n"
 msgstr ""
 
-#: as.c:282
+#: as.c:283
 msgid ""
 "  -o OBJFILE              name the object-file output OBJFILE (default "
 "a.out)\n"
 msgstr ""
 
-#: as.c:284
+#: as.c:285
 msgid "  -R                      fold data section into text section\n"
 msgstr ""
 
-#: as.c:286
+#: as.c:287
 msgid ""
 "  --statistics            print various measured statistics from execution\n"
 msgstr ""
 
-#: as.c:288
+#: as.c:289
 msgid "  --strip-local-absolute  strip local absolute symbols\n"
 msgstr ""
 
-#: as.c:290
+#: as.c:291
 msgid ""
 "  --traditional-format    Use same format as native assembler when possible\n"
 msgstr ""
 
-#: as.c:292
+#: as.c:293
 msgid "  --version               print assembler version number and exit\n"
 msgstr ""
 
-#: as.c:294
+#: as.c:295
 msgid "  -W  --no-warn           suppress warnings\n"
 msgstr ""
 
-#: as.c:296
+#: as.c:297
 msgid "  --warn                  don't suppress warnings\n"
 msgstr ""
 
-#: as.c:298
+#: as.c:299
 msgid "  --fatal-warnings        treat warnings as errors\n"
 msgstr ""
 
-#: as.c:300
+#: as.c:301
 msgid ""
 "  --itbl INSTTBL          extend instruction set to include instructions\n"
 "                          matching the specifications defined in file "
 "INSTTBL\n"
 msgstr ""
 
-#: as.c:303
+#: as.c:304
 msgid "  -w                      ignored\n"
 msgstr ""
 
-#: as.c:305
+#: as.c:306
 msgid "  -X                      ignored\n"
 msgstr ""
 
-#: as.c:307
+#: as.c:308
 msgid "  -Z                      generate object file even after errors\n"
 msgstr ""
 
-#: as.c:309
+#: as.c:310
 msgid ""
 "  --listing-lhs-width     set the width in words of the output data column "
 "of\n"
 "                          the listing\n"
 msgstr ""
 
-#: as.c:312
+#: as.c:313
 msgid ""
 "  --listing-lhs-width2    set the width in words of the continuation lines\n"
 "                          of the output data column; ignored if smaller "
@@ -236,106 +236,106 @@ msgid ""
 "                          the width of the first line\n"
 msgstr ""
 
-#: as.c:316
+#: as.c:317
 msgid ""
 "  --listing-rhs-width     set the max width in characters of the lines from\n"
 "                          the source file\n"
 msgstr ""
 
-#: as.c:319
+#: as.c:320
 msgid ""
 "  --listing-cont-lines    set the maximum number of continuation lines used\n"
 "                          for the output data column of the listing\n"
 msgstr ""
 
-#: as.c:326 gasp.c:3554
+#: as.c:327 gasp.c:3554
 #, c-format
 msgid "Report bugs to %s\n"
 msgstr ""
 
 #. This output is intended to follow the GNU standards document.
-#: as.c:521
+#: as.c:522
 #, c-format
 msgid "GNU assembler %s\n"
 msgstr ""
 
-#: as.c:522
+#: as.c:523
 msgid "Copyright 2000 Free Software Foundation, Inc.\n"
 msgstr ""
 
-#: as.c:523 gasp.c:3648
+#: as.c:524 gasp.c:3648
 msgid ""
 "This program is free software; you may redistribute it under the terms of\n"
 "the GNU General Public License.  This program has absolutely no warranty.\n"
 msgstr ""
 
-#: as.c:526
+#: as.c:527
 #, c-format
 msgid "This assembler was configured for a target of `%s'.\n"
 msgstr ""
 
-#: as.c:533
+#: as.c:534
 msgid "multiple emulation names specified"
 msgstr ""
 
-#: as.c:535
+#: as.c:536
 msgid "emulations not handled in this configuration"
 msgstr ""
 
-#: as.c:540
+#: as.c:541
 #, c-format
 msgid "alias = %s\n"
 msgstr ""
 
-#: as.c:541
+#: as.c:542
 #, c-format
 msgid "canonical = %s\n"
 msgstr ""
 
-#: as.c:542
+#: as.c:543
 #, c-format
 msgid "cpu-type = %s\n"
 msgstr ""
 
-#: as.c:544
+#: as.c:545
 #, c-format
 msgid "format = %s\n"
 msgstr ""
 
-#: as.c:547
+#: as.c:548
 #, c-format
 msgid "bfd-target = %s\n"
 msgstr ""
 
-#: as.c:560
+#: as.c:561
 msgid "bad defsym; format is --defsym name=value"
 msgstr ""
 
-#: as.c:584
+#: as.c:585
 msgid "No file name following -t option\n"
 msgstr ""
 
-#: as.c:600
+#: as.c:601
 #, c-format
 msgid "Failed to read instruction table %s\n"
 msgstr ""
 
-#: as.c:717
+#: as.c:718
 #, c-format
 msgid "invalid listing option `%c'"
 msgstr ""
 
-#: as.c:911
+#: as.c:912
 #, c-format
 msgid "%d warnings, treating warnings as errors"
 msgstr ""
 
-#: as.c:942
+#: as.c:943
 #, c-format
 msgid "%s: total time in assembly: %ld.%06ld\n"
 msgstr ""
 
-#: as.c:945
+#: as.c:946
 #, c-format
 msgid "%s: data size %ld\n"
 msgstr ""
@@ -424,17 +424,17 @@ msgstr ""
 msgid "Attempt to put an undefined symbol into set %s"
 msgstr ""
 
-#: config/obj-aout.c:198 config/obj-coff.c:1211 config/obj-elf.c:1706
+#: config/obj-aout.c:198 config/obj-coff.c:1217 config/obj-elf.c:1706
 #: ecoff.c:3668
 #, c-format
 msgid "Symbol `%s' can not be both weak and common"
 msgstr ""
 
-#: config/obj-aout.c:256 config/obj-coff.c:1952
+#: config/obj-aout.c:256 config/obj-coff.c:1958
 msgid "unresolved relocation"
 msgstr ""
 
-#: config/obj-aout.c:258 config/obj-coff.c:1954
+#: config/obj-aout.c:258 config/obj-coff.c:1960
 #, c-format
 msgid "bad relocation: symbol `%s' not in symbol table"
 msgstr ""
@@ -444,7 +444,7 @@ msgstr ""
 msgid "%s: bad type for weak symbol"
 msgstr ""
 
-#: config/obj-aout.c:459 config/obj-coff.c:2885 write.c:1833
+#: config/obj-aout.c:459 config/obj-coff.c:2891 write.c:1833
 #, c-format
 msgid "%s: global symbols not supported in common sections"
 msgstr ""
@@ -473,7 +473,7 @@ msgstr ""
 msgid "Line numbers must be positive integers\n"
 msgstr ""
 
-#: config/obj-coff.c:484 config/obj-coff.c:2299
+#: config/obj-coff.c:484 config/obj-coff.c:2305
 msgid ".ln pseudo-op inside .def/.endef: ignored."
 msgstr ""
 
@@ -485,11 +485,11 @@ msgstr ""
 msgid ".loc pseudo-op inside .def/.endef: ignored."
 msgstr ""
 
-#: config/obj-coff.c:622 config/obj-coff.c:2356
+#: config/obj-coff.c:622 config/obj-coff.c:2362
 msgid ".def pseudo-op used inside of .def/.endef: ignored."
 msgstr ""
 
-#: config/obj-coff.c:668 config/obj-coff.c:2409
+#: config/obj-coff.c:668 config/obj-coff.c:2415
 msgid ".endef pseudo-op used outside of .def/.endef: ignored."
 msgstr ""
 
@@ -498,141 +498,141 @@ msgstr ""
 msgid "`%s' symbol without preceding function"
 msgstr ""
 
-#: config/obj-coff.c:760 config/obj-coff.c:2484
+#: config/obj-coff.c:760 config/obj-coff.c:2490
 #, c-format
 msgid "unexpected storage class %d"
 msgstr ""
 
-#: config/obj-coff.c:873 config/obj-coff.c:2591
+#: config/obj-coff.c:873 config/obj-coff.c:2597
 msgid ".dim pseudo-op used outside of .def/.endef: ignored."
 msgstr ""
 
-#: config/obj-coff.c:893 config/obj-coff.c:2611
+#: config/obj-coff.c:893 config/obj-coff.c:2617
 msgid "badly formed .dim directive ignored"
 msgstr ""
 
-#: config/obj-coff.c:944 config/obj-coff.c:2674
+#: config/obj-coff.c:944 config/obj-coff.c:2680
 msgid ".size pseudo-op used outside of .def/.endef ignored."
 msgstr ""
 
-#: config/obj-coff.c:960 config/obj-coff.c:2690
+#: config/obj-coff.c:960 config/obj-coff.c:2696
 msgid ".scl pseudo-op used outside of .def/.endef ignored."
 msgstr ""
 
-#: config/obj-coff.c:978 config/obj-coff.c:2708
+#: config/obj-coff.c:978 config/obj-coff.c:2714
 msgid ".tag pseudo-op used outside of .def/.endef ignored."
 msgstr ""
 
-#: config/obj-coff.c:997 config/obj-coff.c:2726
+#: config/obj-coff.c:997 config/obj-coff.c:2732
 #, c-format
 msgid "tag not found for .tag %s"
 msgstr ""
 
-#: config/obj-coff.c:1012 config/obj-coff.c:2741
+#: config/obj-coff.c:1012 config/obj-coff.c:2747
 msgid ".type pseudo-op used outside of .def/.endef ignored."
 msgstr ""
 
-#: config/obj-coff.c:1034 config/obj-coff.c:2763
+#: config/obj-coff.c:1034 config/obj-coff.c:2769
 msgid ".val pseudo-op used outside of .def/.endef ignored."
 msgstr ""
 
-#: config/obj-coff.c:1172 config/obj-coff.c:2958
+#: config/obj-coff.c:1178 config/obj-coff.c:2964
 msgid "mismatched .eb"
 msgstr ""
 
-#: config/obj-coff.c:1190 config/obj-coff.c:2998
+#: config/obj-coff.c:1196 config/obj-coff.c:3004
 msgid "C_EFCN symbol out of scope"
 msgstr ""
 
 #. STYP_INFO
 #. STYP_LIB
 #. STYP_OVER
-#: config/obj-coff.c:1412
+#: config/obj-coff.c:1418
 #, c-format
 msgid "unsupported section attribute '%c'"
 msgstr ""
 
-#: config/obj-coff.c:1417 config/obj-coff.c:3704 config/tc-ppc.c:3917
+#: config/obj-coff.c:1423 config/obj-coff.c:3710 config/tc-ppc.c:3917
 #, c-format
 msgid "unknown section attribute '%c'"
 msgstr ""
 
-#: config/obj-coff.c:1447 config/tc-ppc.c:3935 read.c:2502
+#: config/obj-coff.c:1453 config/tc-ppc.c:3935 read.c:2509
 #, c-format
 msgid "error setting flags for \"%s\": %s"
 msgstr ""
 
-#: config/obj-coff.c:1458 config/obj-elf.c:727
+#: config/obj-coff.c:1464 config/obj-elf.c:727
 #, c-format
 msgid "Ignoring changed section attributes for %s"
 msgstr ""
 
-#: config/obj-coff.c:1594
+#: config/obj-coff.c:1600
 #, c-format
 msgid "0x%lx: \"%s\" type = %ld, class = %d, segment = %d\n"
 msgstr ""
 
-#: config/obj-coff.c:1779 config/obj-ieee.c:69
+#: config/obj-coff.c:1785 config/obj-ieee.c:69
 msgid "Out of step\n"
 msgstr ""
 
-#: config/obj-coff.c:2214
+#: config/obj-coff.c:2220
 msgid "bfd_coff_swap_scnhdr_out failed"
 msgstr ""
 
-#: config/obj-coff.c:2441
+#: config/obj-coff.c:2447
 msgid "`.bf' symbol without preceding function\n"
 msgstr ""
 
-#: config/obj-coff.c:3401 config/obj-ieee.c:522 output-file.c:52
+#: config/obj-coff.c:3407 config/obj-ieee.c:522 output-file.c:52
 #: output-file.c:119
 #, c-format
 msgid "FATAL: Can't create %s"
 msgstr ""
 
-#: config/obj-coff.c:3578
+#: config/obj-coff.c:3584
 #, c-format
 msgid "Can't close %s: %s"
 msgstr ""
 
-#: config/obj-coff.c:3612
+#: config/obj-coff.c:3618
 #, c-format
 msgid "Too many new sections; can't add \"%s\""
 msgstr ""
 
-#: config/obj-coff.c:4022 config/tc-m88k.c:1260 config/tc-sparc.c:3454
+#: config/obj-coff.c:4028 config/tc-m88k.c:1260 config/tc-sparc.c:3454
 msgid "Expected comma after name"
 msgstr ""
 
-#: config/obj-coff.c:4028 read.c:1965
+#: config/obj-coff.c:4034 read.c:1953
 msgid "Missing size expression"
 msgstr ""
 
-#: config/obj-coff.c:4034
+#: config/obj-coff.c:4040
 #, c-format
 msgid "lcomm length (%d.) <0! Ignored."
 msgstr ""
 
-#: config/obj-coff.c:4062 read.c:2186
+#: config/obj-coff.c:4068 read.c:2187
 #, c-format
 msgid "Symbol %s already defined"
 msgstr ""
 
-#: config/obj-coff.c:4156 config/tc-i960.c:3255
+#: config/obj-coff.c:4162 config/tc-i960.c:3255
 #, c-format
 msgid "No 'bal' entry point for leafproc %s"
 msgstr ""
 
-#: config/obj-coff.c:4235 write.c:2535
+#: config/obj-coff.c:4241 write.c:2535
 #, c-format
 msgid "Negative of non-absolute symbol %s"
 msgstr ""
 
-#: config/obj-coff.c:4256 write.c:2549
+#: config/obj-coff.c:4262 write.c:2549
 msgid "callj to difference of 2 symbols"
 msgstr ""
 
-#: config/obj-coff.c:4302
+#: config/obj-coff.c:4308
 #, c-format
 msgid "Can't emit reloc {- %s-seg symbol \"%s\"} @ file address %ld."
 msgstr ""
@@ -640,16 +640,16 @@ msgstr ""
 #. This is a COBR instruction.  They have only a 13-bit
 #. displacement and are only to be used for local branches:
 #. flag as error, don't generate relocation.
-#: config/obj-coff.c:4392 config/tc-i960.c:3275 write.c:2693
+#: config/obj-coff.c:4398 config/tc-i960.c:3275 write.c:2693
 msgid "can't use COBR format with external label"
 msgstr ""
 
-#: config/obj-coff.c:4472
+#: config/obj-coff.c:4478
 #, c-format
 msgid "Value of %ld too large for field of %d bytes at 0x%lx"
 msgstr ""
 
-#: config/obj-coff.c:4486 write.c:2792
+#: config/obj-coff.c:4492 write.c:2792
 #, c-format
 msgid "Signed .word overflow; switch may be too large; %ld at 0x%lx"
 msgstr ""
@@ -984,8 +984,9 @@ msgstr ""
 msgid "missing operand"
 msgstr ""
 
-#: config/tc-a29k.c:415 config/tc-hppa.c:1563 config/tc-i860.c:407
-#: config/tc-i860.c:423 config/tc-sparc.c:1369 config/tc-sparc.c:1375
+#: config/tc-a29k.c:415 config/tc-cris.c:878 config/tc-cris.c:886
+#: config/tc-hppa.c:1563 config/tc-i860.c:407 config/tc-i860.c:423
+#: config/tc-sparc.c:1369 config/tc-sparc.c:1375
 #, c-format
 msgid "Unknown opcode: `%s'"
 msgstr ""
@@ -1052,7 +1053,7 @@ msgstr ""
 
 #: config/tc-alpha.c:1025 config/tc-arm.c:5343 config/tc-h8300.c:1373
 #: config/tc-h8500.c:1201 config/tc-hppa.c:4002 config/tc-i860.c:813
-#: config/tc-m68hc11.c:486 config/tc-m68k.c:4125 config/tc-m88k.c:1106
+#: config/tc-m68hc11.c:480 config/tc-m68k.c:4125 config/tc-m88k.c:1106
 #: config/tc-ns32k.c:1590 config/tc-sparc.c:2757 config/tc-z8k.c:1354
 msgid "Bad call to MD_ATOF()"
 msgstr ""
@@ -1196,11 +1197,11 @@ msgstr ""
 msgid "macro requires $at while $at in use"
 msgstr ""
 
-#: config/tc-alpha.c:3075 expr.c:86 read.c:3158
+#: config/tc-alpha.c:3075 expr.c:86 read.c:3161
 msgid "bignum invalid; zero assumed"
 msgstr ""
 
-#: config/tc-alpha.c:3077 expr.c:88 read.c:3160 read.c:3496 read.c:4394
+#: config/tc-alpha.c:3077 expr.c:88 read.c:3163 read.c:3496 read.c:4393
 msgid "floating point number invalid; zero assumed"
 msgstr ""
 
@@ -1218,13 +1219,13 @@ msgid "bad instruction format for lda !%s!%d"
 msgstr ""
 
 #: config/tc-alpha.c:4291 config/tc-ppc.c:1463 config/tc-ppc.c:3681
-#: read.c:1385
+#: read.c:1366
 #, c-format
 msgid ".COMMon length (%ld.) <0! Ignored."
 msgstr ""
 
 #: config/tc-alpha.c:4329 config/tc-alpha.c:4338 config/tc-ppc.c:3718
-#: read.c:1406
+#: read.c:1390
 #, c-format
 msgid "Length of .comm \"%s\" is already %ld. Not changed to %ld."
 msgstr ""
@@ -1314,7 +1315,7 @@ msgstr ""
 msgid "Bad .fmask directive"
 msgstr ""
 
-#: config/tc-alpha.c:5169 config/tc-arm.c:1454 read.c:2149 read.c:2729
+#: config/tc-alpha.c:5169 config/tc-arm.c:1454 read.c:2147 read.c:2734
 #: stabs.c:459
 #, c-format
 msgid "Expected comma after name \"%s\""
@@ -1466,9 +1467,9 @@ msgid "expression too complex for %%st"
 msgstr ""
 
 #: config/tc-arc.c:1326 config/tc-arm.c:3318 config/tc-avr.c:857
-#: config/tc-d10v.c:1532 config/tc-d30v.c:1837 config/tc-mips.c:3264
-#: config/tc-mips.c:4196 config/tc-mips.c:4981 config/tc-mips.c:5527
-#: config/tc-ppc.c:4846 config/tc-v850.c:2341
+#: config/tc-cris.c:2713 config/tc-d10v.c:1532 config/tc-d30v.c:1837
+#: config/tc-mips.c:3264 config/tc-mips.c:4196 config/tc-mips.c:4981
+#: config/tc-mips.c:5527 config/tc-ppc.c:4846 config/tc-v850.c:2341
 msgid "expression too complex"
 msgstr ""
 
@@ -1489,16 +1490,16 @@ msgstr ""
 msgid "Invalid syntax for .req directive."
 msgstr ""
 
-#: config/tc-arm.c:1364 config/tc-mips.c:10009 read.c:2038
+#: config/tc-arm.c:1364 config/tc-mips.c:10009 read.c:2032
 #, c-format
 msgid "Alignment too large: %d. assumed."
 msgstr ""
 
-#: config/tc-arm.c:1367 read.c:2043
+#: config/tc-arm.c:1367 read.c:2037
 msgid "Alignment negative. 0 assumed."
 msgstr ""
 
-#: config/tc-arm.c:1503 config/tc-m32r.c:418 read.c:2788 read.c:4865
+#: config/tc-arm.c:1503 config/tc-m32r.c:418 read.c:2792 read.c:4853
 #, c-format
 msgid "symbol `%s' already defined"
 msgstr ""
@@ -1850,7 +1851,7 @@ msgstr ""
 msgid "invalid register list to push/pop instruction"
 msgstr ""
 
-#: config/tc-arm.c:5172
+#: config/tc-arm.c:5172 config/tc-cris.c:638
 msgid "Virtual memory exhausted"
 msgstr ""
 
@@ -1971,7 +1972,8 @@ msgstr ""
 msgid "Internal_relocation (type %d) not fixed up (OFFSET_IMM)"
 msgstr ""
 
-#: config/tc-arm.c:6187 config/tc-mcore.c:2110 config/tc-ns32k.c:2284
+#: config/tc-arm.c:6187 config/tc-cris.c:2648 config/tc-mcore.c:2110
+#: config/tc-ns32k.c:2284
 msgid "<unknown>"
 msgstr ""
 
@@ -2261,6 +2263,185 @@ msgstr ""
 msgid "illegal %srelocation size: %d"
 msgstr ""
 
+#: config/tc-cris.c:646
+#, c-format
+msgid "Can't hash `%s': %s\n"
+msgstr ""
+
+#: config/tc-cris.c:647
+msgid "(unknown reason)"
+msgstr ""
+
+#: config/tc-cris.c:651
+#, c-format
+msgid "Buggy opcode: `%s' \"%s\"\n"
+msgstr ""
+
+#: config/tc-cris.c:972
+#, c-format
+msgid "Immediate value not in 5 bit unsigned range: %ld"
+msgstr ""
+
+#: config/tc-cris.c:988
+#, c-format
+msgid "Immediate value not in 4 bit unsigned range: %ld"
+msgstr ""
+
+#: config/tc-cris.c:1028
+#, c-format
+msgid "Immediate value not in 6 bit range: %ld"
+msgstr ""
+
+#: config/tc-cris.c:1043
+#, c-format
+msgid "Immediate value not in 6 bit unsigned range: %ld"
+msgstr ""
+
+#. Others have a generic warning.
+#: config/tc-cris.c:1130
+#, c-format
+msgid "Unimplemented register `%s' specified"
+msgstr ""
+
+#. We've come to the end of instructions with this
+#. opcode, so it must be an error.
+#: config/tc-cris.c:1281 config/tc-i860.c:725
+msgid "Illegal operands"
+msgstr ""
+
+#: config/tc-cris.c:1313 config/tc-cris.c:1344
+#, c-format
+msgid "Immediate value not in 8 bit range: %ld"
+msgstr ""
+
+#: config/tc-cris.c:1323 config/tc-cris.c:1351
+#, c-format
+msgid "Immediate value not in 16 bit range: %ld"
+msgstr ""
+
+#. FIXME: Find out and change to as_warn_where.  Add testcase.
+#: config/tc-cris.c:2303
+msgid "32-bit conditional branch generated"
+msgstr ""
+
+#. FIXME:  Is this function mentioned in the internals.texi manual?  If
+#. not, add it.
+#: config/tc-cris.c:2383
+msgid "Bad call to md_atof () - floating point formats are not supported"
+msgstr ""
+
+#: config/tc-cris.c:2445
+#, c-format
+msgid "Value not in 16 bit range: %ld"
+msgstr ""
+
+#: config/tc-cris.c:2455
+#, c-format
+msgid "Value not in 8 bit range: %ld"
+msgstr ""
+
+#: config/tc-cris.c:2462
+#, c-format
+msgid "Value not in 4 bit unsigned range: %ld"
+msgstr ""
+
+#: config/tc-cris.c:2469
+#, c-format
+msgid "Value not in 5 bit unsigned range: %ld"
+msgstr ""
+
+#: config/tc-cris.c:2476
+#, c-format
+msgid "Value not in 6 bit range: %ld"
+msgstr ""
+
+#: config/tc-cris.c:2483
+#, c-format
+msgid "Value not in 6 bit unsigned range: %ld"
+msgstr ""
+
+#: config/tc-cris.c:2595
+msgid ""
+"Semantics error.  This type of operand can not be relocated, it must be an "
+"assembly-time constant"
+msgstr ""
+
+#: config/tc-cris.c:2649
+#, c-format
+msgid "Cannot generate relocation type for symbol %s, code %s"
+msgstr ""
+
+#: config/tc-cris.c:2662
+msgid ""
+"\n"
+"--  GNU as for CRIS\n"
+msgstr ""
+
+#: config/tc-cris.c:2665
+msgid "*** Usage: as-cris [switches] [-o objectfile] [files...]\n"
+msgstr ""
+
+#: config/tc-cris.c:2666
+msgid "Target-specific switches:\n"
+msgstr ""
+
+#: config/tc-cris.c:2667
+msgid "  -h, -H : Don't execute, print this help text.\n"
+msgstr ""
+
+#: config/tc-cris.c:2669
+msgid ""
+"  -N     : Warn when branches are expanded to jumps.\n"
+"\n"
+msgstr ""
+
+#: config/tc-cris.c:2670
+msgid "Use as-cris --help to see more options.\n"
+msgstr ""
+
+#: config/tc-cris.c:2671
+#, c-format
+msgid "objectfile\t: Output file in the a.out format %s"
+msgstr ""
+
+#: config/tc-cris.c:2672
+msgid "described in the users manual.\n"
+msgstr ""
+
+#: config/tc-cris.c:2673
+msgid "\t\t  Default output file is \"a.out\".\n"
+msgstr ""
+
+#: config/tc-cris.c:2674
+#, c-format
+msgid "files ...\t: Input files in the source format %s"
+msgstr ""
+
+#: config/tc-cris.c:2675
+msgid " described in the users manual.\n"
+msgstr ""
+
+#: config/tc-cris.c:2676
+msgid "\t\t  Default input file is standard input.\n"
+msgstr ""
+
+#: config/tc-cris.c:2677
+msgid "Description\t: Assembler for the CRIS processor.\n"
+msgstr ""
+
+#: config/tc-cris.c:2698
+msgid "Invalid relocation"
+msgstr ""
+
+#: config/tc-cris.c:2739
+msgid "Invalid pc-relative relocation"
+msgstr ""
+
+#: config/tc-cris.c:2779
+#, c-format
+msgid "Adjusted signed .word (%ld) overflows: `switch'-statement too large."
+msgstr ""
+
 #: config/tc-d10v.c:235
 msgid ""
 "D10V options:\n"
@@ -3034,12 +3215,12 @@ msgstr ""
 msgid "Out of memory: could not allocate new subspace chain entry: %s\n"
 msgstr ""
 
-#: config/tc-hppa.c:8522
+#: config/tc-hppa.c:8523
 #, c-format
 msgid "Symbol '%s' could not be created."
 msgstr ""
 
-#: config/tc-hppa.c:8526
+#: config/tc-hppa.c:8527
 msgid "No memory for symbol name."
 msgstr ""
 
@@ -3395,10 +3576,6 @@ msgstr ""
 msgid "5-bit immediate too large"
 msgstr ""
 
-#: config/tc-i860.c:725
-msgid "Illegal operands"
-msgstr ""
-
 #: config/tc-i860.c:749 config/tc-sparc.c:2660
 msgid "bad segment"
 msgstr ""
@@ -3860,7 +4037,7 @@ msgid ""
 "is this intentional ?"
 msgstr ""
 
-#: config/tc-m32r.c:1235 config/tc-ppc.c:1455 config/tc-ppc.c:3673 read.c:1376
+#: config/tc-m32r.c:1235 config/tc-ppc.c:1455 config/tc-ppc.c:3673 read.c:1355
 msgid "Expected comma after symbol-name: rest of line ignored."
 msgstr ""
 
@@ -3874,8 +4051,8 @@ msgstr ""
 msgid "ignoring bad alignment"
 msgstr ""
 
-#: config/tc-m32r.c:1284 config/tc-ppc.c:1488 config/tc-ppc.c:3709 read.c:1396
-#: read.c:2109
+#: config/tc-m32r.c:1284 config/tc-ppc.c:1488 config/tc-ppc.c:3709 read.c:1379
+#: read.c:2105
 #, c-format
 msgid "Ignoring attempt to re-define symbol `%s'."
 msgstr ""
@@ -3889,7 +4066,7 @@ msgstr ""
 msgid "Unmatched high/shigh reloc"
 msgstr ""
 
-#: config/tc-m68hc11.c:312
+#: config/tc-m68hc11.c:307
 #, c-format
 msgid ""
 "Motorola 68HC11/68HC12 options:\n"
@@ -3905,55 +4082,55 @@ msgid ""
 "                          (used for testing)\n"
 msgstr ""
 
-#: config/tc-m68hc11.c:353
+#: config/tc-m68hc11.c:348
 #, c-format
 msgid "Default target `%s' is not supported."
 msgstr ""
 
 #. Dump the opcode statistics table.
-#: config/tc-m68hc11.c:372
+#: config/tc-m68hc11.c:367
 msgid "Name   # Modes  Min ops  Max ops  Modes mask  # Used\n"
 msgstr ""
 
-#: config/tc-m68hc11.c:422
+#: config/tc-m68hc11.c:417
 #, c-format
 msgid "Option `%s' is not recognized."
 msgstr ""
 
-#: config/tc-m68hc11.c:646
+#: config/tc-m68hc11.c:638
 msgid "#<imm8>"
 msgstr ""
 
-#: config/tc-m68hc11.c:655
+#: config/tc-m68hc11.c:647
 msgid "#<imm16>"
 msgstr ""
 
-#: config/tc-m68hc11.c:664 config/tc-m68hc11.c:673
+#: config/tc-m68hc11.c:656 config/tc-m68hc11.c:665
 msgid "<imm8>,X"
 msgstr ""
 
-#: config/tc-m68hc11.c:691
+#: config/tc-m68hc11.c:683
 msgid "*<abs8>"
 msgstr ""
 
-#: config/tc-m68hc11.c:703
+#: config/tc-m68hc11.c:695
 msgid "#<mask>"
 msgstr ""
 
-#: config/tc-m68hc11.c:713
+#: config/tc-m68hc11.c:705
 #, c-format
 msgid "symbol%d"
 msgstr ""
 
-#: config/tc-m68hc11.c:715
+#: config/tc-m68hc11.c:707
 msgid "<abs>"
 msgstr ""
 
-#: config/tc-m68hc11.c:734
+#: config/tc-m68hc11.c:726
 msgid "<label>"
 msgstr ""
 
-#: config/tc-m68hc11.c:751
+#: config/tc-m68hc11.c:742
 #, c-format
 msgid ""
 "# Example of `%s' instructions\n"
@@ -3961,246 +4138,246 @@ msgid ""
 "_start:\n"
 msgstr ""
 
-#: config/tc-m68hc11.c:801
+#: config/tc-m68hc11.c:790
 #, c-format
 msgid "Instruction `%s' is not recognized."
 msgstr ""
 
-#: config/tc-m68hc11.c:806
+#: config/tc-m68hc11.c:795
 #, c-format
 msgid "Instruction formats for `%s':"
 msgstr ""
 
-#: config/tc-m68hc11.c:944
+#: config/tc-m68hc11.c:928
 #, c-format
 msgid "Immediate operand is not allowed for operand %d."
 msgstr ""
 
-#: config/tc-m68hc11.c:970
+#: config/tc-m68hc11.c:954
 msgid "Indirect indexed addressing is not valid for 68HC11."
 msgstr ""
 
-#: config/tc-m68hc11.c:990
+#: config/tc-m68hc11.c:974
 msgid "Spurious `,' or bad indirect register addressing mode."
 msgstr ""
 
-#: config/tc-m68hc11.c:1006
+#: config/tc-m68hc11.c:990
 msgid "Missing second register or offset for indexed-indirect mode."
 msgstr ""
 
-#: config/tc-m68hc11.c:1016
+#: config/tc-m68hc11.c:1000
 msgid "Missing second register for indexed-indirect mode."
 msgstr ""
 
-#: config/tc-m68hc11.c:1032
+#: config/tc-m68hc11.c:1016
 msgid "Missing `]' to close indexed-indirect mode."
 msgstr ""
 
-#: config/tc-m68hc11.c:1076
+#: config/tc-m68hc11.c:1060
 msgid "Illegal operand."
 msgstr ""
 
-#: config/tc-m68hc11.c:1081
+#: config/tc-m68hc11.c:1065
 msgid "Missing operand."
 msgstr ""
 
-#: config/tc-m68hc11.c:1104
+#: config/tc-m68hc11.c:1088
 msgid "Pre-decrement mode is not valid for 68HC11"
 msgstr ""
 
-#: config/tc-m68hc11.c:1111
+#: config/tc-m68hc11.c:1095
 msgid "Pre-increment mode is not valid for 68HC11"
 msgstr ""
 
-#: config/tc-m68hc11.c:1130
+#: config/tc-m68hc11.c:1114
 msgid "Wrong register in register indirect mode."
 msgstr ""
 
-#: config/tc-m68hc11.c:1138
+#: config/tc-m68hc11.c:1122
 msgid "Missing `]' to close register indirect operand."
 msgstr ""
 
-#: config/tc-m68hc11.c:1155
+#: config/tc-m68hc11.c:1139
 msgid "Post-decrement mode is not valid for 68HC11."
 msgstr ""
 
-#: config/tc-m68hc11.c:1163
+#: config/tc-m68hc11.c:1147
 msgid "Post-increment mode is not valid for 68HC11."
 msgstr ""
 
-#: config/tc-m68hc11.c:1180
+#: config/tc-m68hc11.c:1164
 msgid "Invalid indexed indirect mode."
 msgstr ""
 
-#: config/tc-m68hc11.c:1281
+#: config/tc-m68hc11.c:1258
 #, c-format
 msgid "Trap id `%ld' is out of range."
 msgstr ""
 
-#: config/tc-m68hc11.c:1285
+#: config/tc-m68hc11.c:1262
 msgid "Trap id must be within [0x30..0x39] or [0x40..0xff]."
 msgstr ""
 
-#: config/tc-m68hc11.c:1292
+#: config/tc-m68hc11.c:1269
 #, c-format
 msgid "Operand out of 8-bit range: `%ld'."
 msgstr ""
 
-#: config/tc-m68hc11.c:1299
+#: config/tc-m68hc11.c:1276
 msgid "The trap id must be a constant."
 msgstr ""
 
-#: config/tc-m68hc11.c:1324
+#: config/tc-m68hc11.c:1301
 #, c-format
 msgid "Operand `%x' not recognized in fixup8."
 msgstr ""
 
-#: config/tc-m68hc11.c:1344
+#: config/tc-m68hc11.c:1321
 #, c-format
 msgid "Operand out of 16-bit range: `%ld'."
 msgstr ""
 
-#: config/tc-m68hc11.c:1365
+#: config/tc-m68hc11.c:1342
 #, c-format
 msgid "Operand `%x' not recognized in fixup16."
 msgstr ""
 
-#: config/tc-m68hc11.c:1384
+#: config/tc-m68hc11.c:1360
 #, c-format
 msgid "Unexpected branch conversion with `%x'"
 msgstr ""
 
-#: config/tc-m68hc11.c:1480 config/tc-m68hc11.c:1609
+#: config/tc-m68hc11.c:1456 config/tc-m68hc11.c:1585
 #, c-format
 msgid "Operand out of range for a relative branch: `%ld'"
 msgstr ""
 
-#: config/tc-m68hc11.c:1577
+#: config/tc-m68hc11.c:1553
 msgid "Invalid register for dbcc/tbcc instruction."
 msgstr ""
 
-#: config/tc-m68hc11.c:1668
+#: config/tc-m68hc11.c:1644
 #, c-format
 msgid "Increment/decrement value is out of range: `%ld'."
 msgstr ""
 
-#: config/tc-m68hc11.c:1679
+#: config/tc-m68hc11.c:1655
 msgid "Expecting a register."
 msgstr ""
 
-#: config/tc-m68hc11.c:1694
+#: config/tc-m68hc11.c:1670
 msgid "Invalid register for post/pre increment."
 msgstr ""
 
-#: config/tc-m68hc11.c:1724
+#: config/tc-m68hc11.c:1700
 msgid "Invalid register."
 msgstr ""
 
-#: config/tc-m68hc11.c:1731
+#: config/tc-m68hc11.c:1707
 #, c-format
 msgid "Offset out of 16-bit range: %ld."
 msgstr ""
 
-#: config/tc-m68hc11.c:1736
+#: config/tc-m68hc11.c:1712
 msgid "Offset out of 5-bit range for movw/movb insn."
 msgstr ""
 
-#: config/tc-m68hc11.c:1789
+#: config/tc-m68hc11.c:1766
 msgid "Expecting register D for indexed indirect mode."
 msgstr ""
 
-#: config/tc-m68hc11.c:1791
+#: config/tc-m68hc11.c:1768
 msgid "Indexed indirect mode is not allowed for movb/movw."
 msgstr ""
 
-#: config/tc-m68hc11.c:1808
+#: config/tc-m68hc11.c:1785
 msgid "Invalid accumulator register."
 msgstr ""
 
-#: config/tc-m68hc11.c:1833
+#: config/tc-m68hc11.c:1810
 msgid "Invalid indexed register."
 msgstr ""
 
-#: config/tc-m68hc11.c:1841
+#: config/tc-m68hc11.c:1818
 msgid "Addressing mode not implemented yet."
 msgstr ""
 
-#: config/tc-m68hc11.c:1856
+#: config/tc-m68hc11.c:1833
 msgid "Invalid source register for this instruction, use 'tfr'."
 msgstr ""
 
-#: config/tc-m68hc11.c:1858
+#: config/tc-m68hc11.c:1835
 msgid "Invalid source register."
 msgstr ""
 
-#: config/tc-m68hc11.c:1863
+#: config/tc-m68hc11.c:1840
 msgid "Invalid destination register for this instruction, use 'tfr'."
 msgstr ""
 
-#: config/tc-m68hc11.c:1865
+#: config/tc-m68hc11.c:1842
 msgid "Invalid destination register."
 msgstr ""
 
-#: config/tc-m68hc11.c:1954
+#: config/tc-m68hc11.c:1931
 msgid "Invalid indexed register, expecting register X."
 msgstr ""
 
-#: config/tc-m68hc11.c:1956
+#: config/tc-m68hc11.c:1933
 msgid "Invalid indexed register, expecting register Y."
 msgstr ""
 
-#: config/tc-m68hc11.c:2251
+#: config/tc-m68hc11.c:2222
 msgid "No instruction or missing opcode."
 msgstr ""
 
-#: config/tc-m68hc11.c:2316
+#: config/tc-m68hc11.c:2287
 #, c-format
 msgid "Opcode `%s' is not recognized."
 msgstr ""
 
-#: config/tc-m68hc11.c:2338
+#: config/tc-m68hc11.c:2309
 #, c-format
 msgid "Garbage at end of instruction: `%s'."
 msgstr ""
 
-#: config/tc-m68hc11.c:2361
+#: config/tc-m68hc11.c:2332
 #, c-format
 msgid "Invalid operand for `%s'"
 msgstr ""
 
-#: config/tc-m68hc11.c:2420
+#: config/tc-m68hc11.c:2389
 #, c-format
 msgid "Relocation %d is not supported by object file format."
 msgstr ""
 
-#: config/tc-m68hc11.c:2575
+#: config/tc-m68hc11.c:2544
 msgid "bra or bsr with undefined symbol."
 msgstr ""
 
-#: config/tc-m68hc11.c:2683
+#: config/tc-m68hc11.c:2652
 #, c-format
 msgid "Subtype %d is not recognized."
 msgstr ""
 
-#: config/tc-m68hc11.c:2720
+#: config/tc-m68hc11.c:2689
 msgid "Expression too complex."
 msgstr ""
 
-#: config/tc-m68hc11.c:2749
+#: config/tc-m68hc11.c:2718
 msgid "Value out of 16-bit range."
 msgstr ""
 
-#: config/tc-m68hc11.c:2768
+#: config/tc-m68hc11.c:2741
 #, c-format
 msgid "Value %ld too large for 8-bit PC-relative branch."
 msgstr ""
 
-#: config/tc-m68hc11.c:2775
+#: config/tc-m68hc11.c:2748
 #, c-format
 msgid "Auto increment/decrement offset '%ld' is out of range."
 msgstr ""
 
-#: config/tc-m68hc11.c:2786
+#: config/tc-m68hc11.c:2759
 #, c-format
 msgid "Line %d: unknown relocation type: 0x%x."
 msgstr ""
@@ -4648,7 +4825,7 @@ msgstr ""
 msgid "Relaxation should never occur"
 msgstr ""
 
-#: config/tc-m88k.c:1267 config/tc-sparc.c:3463 read.c:1971
+#: config/tc-m88k.c:1267 config/tc-sparc.c:3463 read.c:1959
 #, c-format
 msgid "BSS length (%d.) <0! Ignored."
 msgstr ""
@@ -5760,7 +5937,7 @@ msgstr ""
 msgid "The XCOFF file format does not support arbitrary sections"
 msgstr ""
 
-#: config/tc-ppc.c:2772 config/tc-ppc.c:3297 read.c:2983
+#: config/tc-ppc.c:2772 config/tc-ppc.c:3297 read.c:2989
 msgid "missing value"
 msgstr ""
 
@@ -7763,58 +7940,58 @@ msgstr ""
 msgid "Character constant too large"
 msgstr ""
 
-#: expr.c:956
+#: expr.c:962
 #, c-format
 msgid "expr.c(operand): bad atof_generic return val %d"
 msgstr ""
 
-#: expr.c:1019
+#: expr.c:1025
 #, c-format
 msgid "Missing '%c' assumed"
 msgstr ""
 
-#: expr.c:1031 read.c:3864
+#: expr.c:1037 read.c:3865
 msgid "EBCDIC constants are not supported"
 msgstr ""
 
-#: expr.c:1101
+#: expr.c:1107
 #, c-format
 msgid "Unary operator %c ignored because bad operand follows"
 msgstr ""
 
-#: expr.c:1147 expr.c:1172
+#: expr.c:1153 expr.c:1178
 msgid "syntax error in .startof. or .sizeof."
 msgstr ""
 
-#: expr.c:1322
+#: expr.c:1328
 msgid "Bad expression"
 msgstr ""
 
-#: expr.c:1690
+#: expr.c:1696
 msgid "missing operand; zero assumed"
 msgstr ""
 
-#: expr.c:1723
+#: expr.c:1729
 msgid "operation combines symbols in different segments"
 msgstr ""
 
-#: expr.c:1739
+#: expr.c:1745
 msgid "left operand is a bignum; integer 0 assumed"
 msgstr ""
 
-#: expr.c:1741
+#: expr.c:1747
 msgid "left operand is a float; integer 0 assumed"
 msgstr ""
 
-#: expr.c:1750
+#: expr.c:1756
 msgid "right operand is a bignum; integer 0 assumed"
 msgstr ""
 
-#: expr.c:1752
+#: expr.c:1758
 msgid "right operand is a float; integer 0 assumed"
 msgstr ""
 
-#: expr.c:1807 symbols.c:1109
+#: expr.c:1813 symbols.c:1109
 msgid "division by zero"
 msgstr ""
 
@@ -8332,100 +8509,100 @@ msgstr ""
 msgid "Can't continue"
 msgstr ""
 
-#: read.c:452
+#: read.c:451
 #, c-format
 msgid "error constructing %s pseudo-op table: %s"
 msgstr ""
 
-#: read.c:817
+#: read.c:801
 #, c-format
 msgid "Unknown pseudo-op:  `%s'"
 msgstr ""
 
-#: read.c:950
+#: read.c:933
 #, c-format
 msgid "label \"%d$\" redefined"
 msgstr ""
 
-#: read.c:1167
+#: read.c:1144
 msgid ".abort detected.  Abandoning ship."
 msgstr ""
 
-#: read.c:1258 read.c:2031
+#: read.c:1235 read.c:2024
 msgid "Alignment not a power of 2"
 msgstr ""
 
-#: read.c:1266
+#: read.c:1244
 #, c-format
 msgid "Alignment too large: %u assumed"
 msgstr ""
 
-#: read.c:1298
+#: read.c:1276
 msgid "expected fill pattern missing"
 msgstr ""
 
-#: read.c:1495
+#: read.c:1480
 #, c-format
 msgid "attempt to re-define symbol `%s'"
 msgstr ""
 
 #. Some of the back ends can't deal with non-positive line numbers.
 #. Besides, it's silly.
-#: read.c:1619
+#: read.c:1604
 #, c-format
 msgid "Line numbers must be positive; line number %d rejected."
 msgstr ""
 
-#: read.c:1646
+#: read.c:1632
 msgid "start address not supported"
 msgstr ""
 
-#: read.c:1656
+#: read.c:1642
 msgid ".err encountered"
 msgstr ""
 
-#: read.c:1675 read.c:1677
+#: read.c:1661 read.c:1663
 #, c-format
 msgid ".fail %ld encountered"
 msgstr ""
 
-#: read.c:1714
+#: read.c:1700
 #, c-format
 msgid ".fill size clamped to %d."
 msgstr ""
 
-#: read.c:1719
+#: read.c:1705
 msgid "Size negative: .fill ignored."
 msgstr ""
 
-#: read.c:1725
+#: read.c:1711
 msgid "Repeat < 0, .fill ignored"
 msgstr ""
 
-#: read.c:1883
+#: read.c:1871
 #, c-format
 msgid "unrecognized .linkonce type `%s'"
 msgstr ""
 
-#: read.c:1896 read.c:1922
+#: read.c:1884 read.c:1910
 msgid ".linkonce is not supported for this object file format"
 msgstr ""
 
-#: read.c:1918
+#: read.c:1906
 #, c-format
 msgid "bfd_set_section_flags: %s"
 msgstr ""
 
-#: read.c:1987
+#: read.c:1975
 #, c-format
 msgid "error setting flags for \".sbss\": %s"
 msgstr ""
 
-#: read.c:2009
+#: read.c:1998
 msgid "Expected comma after size"
 msgstr ""
 
-#: read.c:2017
+#: read.c:2008
 msgid "Missing alignment"
 msgstr ""
 
@@ -8433,95 +8610,95 @@ msgstr ""
 msgid "bad expression"
 msgstr ""
 
-#: read.c:2290
+#: read.c:2296
 #, c-format
 msgid "attempt to redefine pseudo-op `%s' ignored"
 msgstr ""
 
-#: read.c:2356
+#: read.c:2362
 #, c-format
 msgid "invalid segment \"%s\"; segment \"%s\" assumed"
 msgstr ""
 
-#: read.c:2362
+#: read.c:2368
 msgid "ignoring fill value in absolute section"
 msgstr ""
 
-#: read.c:2365
+#: read.c:2371
 msgid "only constant offsets supported in absolute section"
 msgstr ""
 
-#: read.c:2397
+#: read.c:2403
 msgid "MRI style ORG pseudo-op not supported"
 msgstr ""
 
-#: read.c:2485
+#: read.c:2492
 msgid "unrecognized section type"
 msgstr ""
 
-#: read.c:2553
+#: read.c:2560
 #, c-format
 msgid "unrecognized section type `%s'"
 msgstr ""
 
-#: read.c:2567
+#: read.c:2574
 msgid "absolute sections are not supported"
 msgstr ""
 
-#: read.c:2582
+#: read.c:2589
 #, c-format
 msgid "unrecognized section command `%s'"
 msgstr ""
 
-#: read.c:2670
+#: read.c:2677
 #, c-format
 msgid "%s without %s"
 msgstr ""
 
-#: read.c:2874
+#: read.c:2878
 msgid "Unsupported variable size or fill value"
 msgstr ""
 
-#: read.c:2899
+#: read.c:2903
 msgid ".space repeat count is zero, ignored"
 msgstr ""
 
-#: read.c:2901
+#: read.c:2905
 msgid ".space repeat count is negative, ignored"
 msgstr ""
 
-#: read.c:2930
+#: read.c:2934
 msgid "space allocation too complex in absolute section"
 msgstr ""
 
-#: read.c:2935
+#: read.c:2940
 msgid "space allocation too complex in common section"
 msgstr ""
 
-#: read.c:3022 read.c:4111
+#: read.c:3028 read.c:4110
 #, c-format
 msgid "Bad floating literal: %s"
 msgstr ""
 
-#: read.c:3098
+#: read.c:3101
 #, c-format
 msgid "Rest of line ignored. First ignored character is `%c'."
 msgstr ""
 
-#: read.c:3101
+#: read.c:3104
 #, c-format
 msgid "Rest of line ignored. First ignored character valued 0x%x."
 msgstr ""
 
-#: read.c:3152
+#: read.c:3155
 msgid "illegal expression; zero assumed"
 msgstr ""
 
-#: read.c:3154
+#: read.c:3157
 msgid "missing expression; zero assumed"
 msgstr ""
 
-#: read.c:3327
+#: read.c:3328
 msgid "rva without symbol"
 msgstr ""
 
@@ -8529,11 +8706,11 @@ msgstr ""
 msgid "attempt to store value in absolute section"
 msgstr ""
 
-#: read.c:3490 read.c:4388
+#: read.c:3490 read.c:4387
 msgid "zero assumed for missing expression"
 msgstr ""
 
-#: read.c:3502 read.c:4400
+#: read.c:3502 read.c:4399
 msgid "register value used as expression"
 msgstr ""
 
@@ -8553,85 +8730,85 @@ msgstr ""
 msgid "unsupported BFD relocation size %u"
 msgstr ""
 
-#: read.c:3774
+#: read.c:3775
 msgid "using a bit field width of zero"
 msgstr ""
 
-#: read.c:3782
+#: read.c:3783
 #, c-format
 msgid "field width \"%s\" too complex for a bitfield"
 msgstr ""
 
-#: read.c:3790
+#: read.c:3791
 #, c-format
 msgid "field width %lu too big to fit in %d bytes: truncated to %d bits"
 msgstr ""
 
-#: read.c:3811
+#: read.c:3812
 #, c-format
 msgid "field value \"%s\" too complex for a bitfield"
 msgstr ""
 
-#: read.c:3935
+#: read.c:3938
 msgid "Unresolvable or nonpositive repeat count; using 1"
 msgstr ""
 
-#: read.c:3986
+#: read.c:3989
 #, c-format
 msgid "Unknown floating type type '%c'"
 msgstr ""
 
-#: read.c:4008
+#: read.c:4011
 msgid "Floating point constant too large"
 msgstr ""
 
-#: read.c:4133
+#: read.c:4132
 msgid "unresolvable or nonpositive repeat count; using 1"
 msgstr ""
 
-#: read.c:4537
+#: read.c:4530
 msgid "Expected <nn>"
 msgstr ""
 
 #. To be compatible with BSD 4.2 as: give the luser a linefeed!!
-#: read.c:4570 read.c:4653
+#: read.c:4563 read.c:4649
 msgid "Unterminated string: Newline inserted."
 msgstr ""
 
-#: read.c:4661
+#: read.c:4657
 msgid "Bad escaped character in string, '?' assumed"
 msgstr ""
 
-#: read.c:4687
+#: read.c:4683
 msgid "expected address expression; zero assumed"
 msgstr ""
 
-#: read.c:4707
+#: read.c:4703
 #, c-format
 msgid "symbol \"%s\" undefined; zero assumed"
 msgstr ""
 
-#: read.c:4710
+#: read.c:4706
 msgid "some symbol undefined; zero assumed"
 msgstr ""
 
-#: read.c:4728
+#: read.c:4724
 msgid "bad or irreducible absolute expression; zero assumed"
 msgstr ""
 
-#: read.c:4766
+#: read.c:4759
 msgid "This string may not contain '\\0'"
 msgstr ""
 
-#: read.c:4805
+#: read.c:4796
 msgid "Missing string"
 msgstr ""
 
-#: read.c:5034
+#: read.c:5027
 msgid "missing .func"
 msgstr ""
 
-#: read.c:5051
+#: read.c:5044
 msgid ".endfunc missing for previous .func"
 msgstr ""