Remove tic80 support
authorAlan Modra <amodra@gmail.com>
Tue, 17 Dec 2019 03:53:55 +0000 (14:23 +1030)
committerAlan Modra <amodra@gmail.com>
Tue, 17 Dec 2019 06:06:54 +0000 (16:36 +1030)
This is one way of fixing ubsan bug reports, just delete the code.

The assembler support was removed back in 2005 along with other
non-BFD assemblers, but somehow the remainder of the port stayed in.

bfd/
* coff-tic80.c: Delete file.
* cpu-tic80.c: Delete file.
* archures.c: Remove tic80 support.
* coffcode.h: Likewise.
* coffswap.h: Likewise.
* targets.c: Likewise.
* config.bfd: Likewise.
* configure.ac: Likewise.
* Makefile.am: Likewise.
* Makefile.in: Regenerate.
* bfd-in2.h: Regenerate.
* configure: Regenerate.
* po/SRC-POTFILES.in: Regenerate.
binutils/
* testsuite/binutils-all/objcopy.exp: Remove tic80 support.
* testsuite/binutils-all/objdump.exp: Likewise.
gas/
* doc/as.texi: Remove mention of tic80.
include/
* coff/tic80.h: Delete file.
* opcode/tic80.h: Delete file.
ld/
* emulparams/tic80coff.sh: Delete file.
* scripttempl/tic80coff.sc: Delete file.
* configure.tgt: Remove tic80 support.
* Makefile.am: Likewise.
* Makefile.in: Regenerate.
* po/BLD-POTFILES.in: Regenerate.
opcodes/
* tic80-dis.c: Delete file.
* tic80-opc.c: Delete file.
* disassemble.c: Remove tic80 support.
* disassemble.h: Likewise.
* Makefile.am: Likewise.
* configure.ac: Likewise.
* Makefile.in: Regenerate.
* configure: Regenerate.
* po/POTFILES.in: Regenerate.

39 files changed:
bfd/ChangeLog
bfd/Makefile.am
bfd/Makefile.in
bfd/archures.c
bfd/bfd-in2.h
bfd/coff-tic80.c [deleted file]
bfd/coffcode.h
bfd/coffswap.h
bfd/config.bfd
bfd/configure
bfd/configure.ac
bfd/cpu-tic80.c [deleted file]
bfd/po/SRC-POTFILES.in
bfd/targets.c
binutils/ChangeLog
binutils/testsuite/binutils-all/objcopy.exp
binutils/testsuite/binutils-all/objdump.exp
gas/ChangeLog
gas/doc/as.texi
include/ChangeLog
include/coff/tic80.h [deleted file]
include/opcode/tic80.h [deleted file]
ld/ChangeLog
ld/Makefile.am
ld/Makefile.in
ld/configure.tgt
ld/emulparams/tic80coff.sh [deleted file]
ld/po/BLD-POTFILES.in
ld/scripttempl/tic80coff.sc [deleted file]
opcodes/ChangeLog
opcodes/Makefile.am
opcodes/Makefile.in
opcodes/configure
opcodes/configure.ac
opcodes/disassemble.c
opcodes/disassemble.h
opcodes/po/POTFILES.in
opcodes/tic80-dis.c [deleted file]
opcodes/tic80-opc.c [deleted file]

index f1a707d37336c7242362d6271fa92204cdf32ce7..61ef89fa1c7ec76d6d113a148064b39912a65c99 100644 (file)
@@ -1,3 +1,19 @@
+2019-12-17  Alan Modra  <amodra@gmail.com>
+
+       * coff-tic80.c: Delete file.
+       * cpu-tic80.c: Delete file.
+       * archures.c: Remove tic80 support.
+       * coffcode.h: Likewise.
+       * coffswap.h: Likewise.
+       * targets.c: Likewise.
+       * config.bfd: Likewise.
+       * configure.ac: Likewise.
+       * Makefile.am: Likewise.
+       * Makefile.in: Regenerate.
+       * bfd-in2.h: Regenerate.
+       * configure: Regenerate.
+       * po/SRC-POTFILES.in: Regenerate.
+
 2019-12-13  Alan Modra  <amodra@gmail.com>
 
        PR 25237
index e5bd28f03f570eafd3c00df06e88f83d99f6fb28..92c3b367b1bc8b5e1e7b00366ec71156fe8d13c4 100644 (file)
@@ -160,7 +160,6 @@ ALL_MACHINES = \
        cpu-tic4x.lo \
        cpu-tic54x.lo \
        cpu-tic6x.lo \
-       cpu-tic80.lo \
        cpu-tilegx.lo \
        cpu-tilepro.lo \
        cpu-v850.lo \
@@ -246,7 +245,6 @@ ALL_MACHINES_CFILES = \
        cpu-tic4x.c \
        cpu-tic54x.c \
        cpu-tic6x.c \
-       cpu-tic80.c \
        cpu-tilegx.c \
        cpu-tilepro.c \
        cpu-v850.c \
@@ -278,7 +276,6 @@ BFD32_BACKENDS = \
        coff-tic30.lo \
        coff-tic4x.lo \
        coff-tic54x.lo \
-       coff-tic80.lo \
        coff-z80.lo \
        coff-z8k.lo \
        coffgen.lo \
@@ -414,7 +411,6 @@ BFD32_BACKENDS_CFILES = \
        coff-tic30.c \
        coff-tic4x.c \
        coff-tic54x.c \
-       coff-tic80.c \
        coff-z80.c \
        coff-z8k.c \
        coffgen.c \
index 15334f10c55aa7388e7e8c752d272a0895fd9c54..1e172608ac5ef709c18d26dff16ec9c9229869aa 100644 (file)
@@ -584,7 +584,6 @@ ALL_MACHINES = \
        cpu-tic4x.lo \
        cpu-tic54x.lo \
        cpu-tic6x.lo \
-       cpu-tic80.lo \
        cpu-tilegx.lo \
        cpu-tilepro.lo \
        cpu-v850.lo \
@@ -670,7 +669,6 @@ ALL_MACHINES_CFILES = \
        cpu-tic4x.c \
        cpu-tic54x.c \
        cpu-tic6x.c \
-       cpu-tic80.c \
        cpu-tilegx.c \
        cpu-tilepro.c \
        cpu-v850.c \
@@ -703,7 +701,6 @@ BFD32_BACKENDS = \
        coff-tic30.lo \
        coff-tic4x.lo \
        coff-tic54x.lo \
-       coff-tic80.lo \
        coff-z80.lo \
        coff-z8k.lo \
        coffgen.lo \
@@ -839,7 +836,6 @@ BFD32_BACKENDS_CFILES = \
        coff-tic30.c \
        coff-tic4x.c \
        coff-tic54x.c \
-       coff-tic80.c \
        coff-z80.c \
        coff-z8k.c \
        coffgen.c \
@@ -1323,7 +1319,6 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/coff-tic30.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/coff-tic4x.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/coff-tic54x.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/coff-tic80.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/coff-x86_64.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/coff-z80.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/coff-z8k.Plo@am__quote@
@@ -1402,7 +1397,6 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-tic4x.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-tic54x.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-tic6x.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-tic80.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-tilegx.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-tilepro.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-v850.Plo@am__quote@
index 7866c6095b5d06a68da3edc309ecd7f7b72a5f07..e8873d49687a786b3f6b31302ef77f05c2a248b1 100644 (file)
@@ -355,7 +355,6 @@ DESCRIPTION
 .#define bfd_mach_tic4x                40
 .  bfd_arch_tic54x,    {* Texas Instruments TMS320C54X.  *}
 .  bfd_arch_tic6x,     {* Texas Instruments TMS320C6X.  *}
-.  bfd_arch_tic80,     {* TI TMS320c80 (MVP).  *}
 .  bfd_arch_v850,      {* NEC V850.  *}
 .  bfd_arch_v850_rh850,{* NEC V850 (using RH850 ABI).  *}
 .#define bfd_mach_v850         1
@@ -668,7 +667,6 @@ extern const bfd_arch_info_type bfd_tic30_arch;
 extern const bfd_arch_info_type bfd_tic4x_arch;
 extern const bfd_arch_info_type bfd_tic54x_arch;
 extern const bfd_arch_info_type bfd_tic6x_arch;
-extern const bfd_arch_info_type bfd_tic80_arch;
 extern const bfd_arch_info_type bfd_tilegx_arch;
 extern const bfd_arch_info_type bfd_tilepro_arch;
 extern const bfd_arch_info_type bfd_v850_arch;
@@ -756,7 +754,6 @@ static const bfd_arch_info_type * const bfd_archures_list[] =
     &bfd_tic4x_arch,
     &bfd_tic54x_arch,
     &bfd_tic6x_arch,
-    &bfd_tic80_arch,
     &bfd_tilegx_arch,
     &bfd_tilepro_arch,
     &bfd_v850_arch,
index ed91ed27ee7cc8940e00fca3237f435867cbc08f..c6a58018dc141f390d0162d09a33bd7c8dfb7e1c 100644 (file)
@@ -1738,7 +1738,6 @@ enum bfd_architecture
 #define bfd_mach_tic4x         40
   bfd_arch_tic54x,    /* Texas Instruments TMS320C54X.  */
   bfd_arch_tic6x,     /* Texas Instruments TMS320C6X.  */
-  bfd_arch_tic80,     /* TI TMS320c80 (MVP).  */
   bfd_arch_v850,      /* NEC V850.  */
   bfd_arch_v850_rh850,/* NEC V850 (using RH850 ABI).  */
 #define bfd_mach_v850          1
diff --git a/bfd/coff-tic80.c b/bfd/coff-tic80.c
deleted file mode 100644 (file)
index 9e49a16..0000000
+++ /dev/null
@@ -1,711 +0,0 @@
-/* BFD back-end for Texas Instruments TMS320C80 Multimedia Video Processor (MVP).
-   Copyright (C) 1996-2019 Free Software Foundation, Inc.
-
-   Written by Fred Fish (fnf@cygnus.com)
-
-   There is nothing new under the sun. This file draws a lot on other
-   coff files.
-
-   This file is part of BFD, the Binary File Descriptor library.
-
-   This program 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 3 of the License, or
-   (at your option) any later version.
-
-   This program 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 this program; if not, write to the Free Software
-   Foundation, 51 Franklin Street - Fifth Floor,
-   Boston, MA 02110-1301, USA.  */
-
-#include "sysdep.h"
-#include "bfd.h"
-#include "bfdlink.h"
-#include "libbfd.h"
-#ifdef _CONST
-/* Newlib-based hosts define _CONST as a STDC-safe alias for const,
-  but to the tic80 toolchain it means something altogether different.
-  Since sysdep.h will have pulled in stdio.h and hence _ansi.h which
-  contains this definition, we must undef it before including the
-  tic80-specific definition. */
-#undef _CONST
-#endif /* _CONST */
-#include "coff/tic80.h"
-#include "coff/internal.h"
-#include "libcoff.h"
-
-#define COFF_DEFAULT_SECTION_ALIGNMENT_POWER (2)
-#define COFF_ALIGN_IN_SECTION_HEADER 1
-#define COFF_ALIGN_IN_SFLAGS 1
-#define COFF_ENCODE_ALIGNMENT(S,X) ((S).s_flags |= (((unsigned)(X) & 0xf) << 8))
-#define COFF_DECODE_ALIGNMENT(X) (((X) >> 8) & 0xf)
-
-#define GET_SCNHDR_FLAGS H_GET_16
-#define PUT_SCNHDR_FLAGS H_PUT_16
-
-static bfd_reloc_status_type ppbase_reloc
-  (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
-static bfd_reloc_status_type glob15_reloc
-  (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
-static bfd_reloc_status_type glob16_reloc
-  (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
-static bfd_reloc_status_type local16_reloc
-  (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
-
-
-static reloc_howto_type tic80_howto_table[] =
-{
-
-  HOWTO (R_RELLONG,                    /* type */
-        0,                             /* rightshift */
-        2,                             /* size (0 = byte, 1 = short, 2 = long) */
-        32,                            /* bitsize */
-        FALSE,                         /* pc_relative */
-        0,                             /* bitpos */
-        complain_overflow_bitfield,    /* complain_on_overflow */
-        NULL,                          /* special_function */
-        "RELLONG",                     /* name */
-        TRUE,                          /* partial_inplace */
-        0xffffffff,                    /* src_mask */
-        0xffffffff,                    /* dst_mask */
-        FALSE),                        /* pcrel_offset */
-
-  HOWTO (R_MPPCR,                      /* type */
-        2,                             /* rightshift */
-        2,                             /* size (0 = byte, 1 = short, 2 = long) */
-        32,                            /* bitsize */
-        TRUE,                          /* pc_relative */
-        0,                             /* bitpos */
-        complain_overflow_signed,      /* complain_on_overflow */
-        NULL,                          /* special_function */
-        "MPPCR",                       /* name */
-        TRUE,                          /* partial_inplace */
-        0xffffffff,                    /* src_mask */
-        0xffffffff,                    /* dst_mask */
-        TRUE),                         /* pcrel_offset */
-
-  HOWTO (R_ABS,                                /* type */
-        0,                             /* rightshift */
-        2,                             /* size (0 = byte, 1 = short, 2 = long) */
-        32,                            /* bitsize */
-        FALSE,                         /* pc_relative */
-        0,                             /* bitpos */
-        complain_overflow_bitfield,    /* complain_on_overflow */
-        NULL,                          /* special_function */
-        "ABS",                         /* name */
-        TRUE,                          /* partial_inplace */
-        0xffffffff,                    /* src_mask */
-        0xffffffff,                    /* dst_mask */
-        FALSE),                                /* pcrel_offset */
-
-  HOWTO (R_PPBASE,                     /* type */
-        0,                             /* rightshift */
-        2,                             /* size (0 = byte, 1 = short, 2 = long) */
-        32,                            /* bitsize */
-        FALSE,                         /* pc_relative */
-        0,                             /* bitpos */
-        complain_overflow_dont,        /* complain_on_overflow */
-        ppbase_reloc,                  /* special_function */
-        "PPBASE",                      /* name */
-        TRUE,                          /* partial_inplace */
-        0xffffffff,                    /* src_mask */
-        0xffffffff,                    /* dst_mask */
-        FALSE),                        /* pcrel_offset */
-
-  HOWTO (R_PPLBASE,                    /* type */
-        0,                             /* rightshift */
-        2,                             /* size (0 = byte, 1 = short, 2 = long) */
-        32,                            /* bitsize */
-        FALSE,                         /* pc_relative */
-        0,                             /* bitpos */
-        complain_overflow_dont,        /* complain_on_overflow */
-        ppbase_reloc,                  /* special_function */
-        "PPLBASE",                     /* name */
-        TRUE,                          /* partial_inplace */
-        0xffffffff,                    /* src_mask */
-        0xffffffff,                    /* dst_mask */
-        FALSE),                        /* pcrel_offset */
-
-  HOWTO (R_PP15,                       /* type */
-        0,                             /* rightshift */
-        2,                             /* size (0 = byte, 1 = short, 2 = long) */
-        15,                            /* bitsize */
-        FALSE,                         /* pc_relative */
-        6,                             /* bitpos */
-        complain_overflow_dont,        /* complain_on_overflow */
-        glob15_reloc,                  /* special_function */
-        "PP15",                        /* name */
-        TRUE,                          /* partial_inplace */
-        0x1ffc0,                       /* src_mask */
-        0x1ffc0,                       /* dst_mask */
-        FALSE),                        /* pcrel_offset */
-
-  HOWTO (R_PP15W,                      /* type */
-        2,                             /* rightshift */
-        2,                             /* size (0 = byte, 1 = short, 2 = long) */
-        15,                            /* bitsize */
-        FALSE,                         /* pc_relative */
-        6,                             /* bitpos */
-        complain_overflow_dont,        /* complain_on_overflow */
-        glob15_reloc,                  /* special_function */
-        "PP15W",                       /* name */
-        TRUE,                          /* partial_inplace */
-        0x1ffc0,                       /* src_mask */
-        0x1ffc0,                       /* dst_mask */
-        FALSE),                        /* pcrel_offset */
-
-  HOWTO (R_PP15H,                      /* type */
-        1,                             /* rightshift */
-        2,                             /* size (0 = byte, 1 = short, 2 = long) */
-        15,                            /* bitsize */
-        FALSE,                         /* pc_relative */
-        6,                             /* bitpos */
-        complain_overflow_dont,        /* complain_on_overflow */
-        glob15_reloc,                  /* special_function */
-        "PP15H",                       /* name */
-        TRUE,                          /* partial_inplace */
-        0x1ffc0,                       /* src_mask */
-        0x1ffc0,                       /* dst_mask */
-        FALSE),                        /* pcrel_offset */
-
-  HOWTO (R_PP16B,                      /* type */
-        0,                             /* rightshift */
-        2,                             /* size (0 = byte, 1 = short, 2 = long) */
-        16,                            /* bitsize */
-        FALSE,                         /* pc_relative */
-        6,                             /* bitpos */
-        complain_overflow_dont,        /* complain_on_overflow */
-        glob16_reloc,                  /* special_function */
-        "PP16B",                       /* name */
-        TRUE,                          /* partial_inplace */
-        0x3ffc0,                       /* src_mask */
-        0x3ffc0,                       /* dst_mask */
-        FALSE),                        /* pcrel_offset */
-
-  HOWTO (R_PPL15,                      /* type */
-        0,                             /* rightshift */
-        2,                             /* size (0 = byte, 1 = short, 2 = long) */
-        15,                            /* bitsize */
-        FALSE,                         /* pc_relative */
-        0,                             /* bitpos */
-        complain_overflow_dont,        /* complain_on_overflow */
-        NULL,                          /* special_function */
-        "PPL15",                       /* name */
-        TRUE,                          /* partial_inplace */
-        0x7fff,                        /* src_mask */
-        0x7fff,                        /* dst_mask */
-        FALSE),                        /* pcrel_offset */
-
-  HOWTO (R_PPL15W,                     /* type */
-        2,                             /* rightshift */
-        2,                             /* size (0 = byte, 1 = short, 2 = long) */
-        15,                            /* bitsize */
-        FALSE,                         /* pc_relative */
-        0,                             /* bitpos */
-        complain_overflow_dont,        /* complain_on_overflow */
-        NULL,                          /* special_function */
-        "PPL15W",                      /* name */
-        TRUE,                          /* partial_inplace */
-        0x7fff,                        /* src_mask */
-        0x7fff,                        /* dst_mask */
-        FALSE),                        /* pcrel_offset */
-
-  HOWTO (R_PPL15H,                     /* type */
-        1,                             /* rightshift */
-        2,                             /* size (0 = byte, 1 = short, 2 = long) */
-        15,                            /* bitsize */
-        FALSE,                         /* pc_relative */
-        0,                             /* bitpos */
-        complain_overflow_dont,        /* complain_on_overflow */
-        NULL,                          /* special_function */
-        "PPL15H",                      /* name */
-        TRUE,                          /* partial_inplace */
-        0x7fff,                        /* src_mask */
-        0x7fff,                        /* dst_mask */
-        FALSE),                        /* pcrel_offset */
-
-  HOWTO (R_PPL16B,                     /* type */
-        0,                             /* rightshift */
-        2,                             /* size (0 = byte, 1 = short, 2 = long) */
-        16,                            /* bitsize */
-        FALSE,                         /* pc_relative */
-        0,                             /* bitpos */
-        complain_overflow_dont,        /* complain_on_overflow */
-        local16_reloc,                 /* special_function */
-        "PPL16B",                      /* name */
-        TRUE,                          /* partial_inplace */
-        0xffff,                        /* src_mask */
-        0xffff,                        /* dst_mask */
-        FALSE),                        /* pcrel_offset */
-
-  HOWTO (R_PPN15,                      /* type */
-        0,                             /* rightshift */
-        -2,                            /* size (0 = byte, 1 = short, 2 = long) */
-        15,                            /* bitsize */
-        FALSE,                         /* pc_relative */
-        6,                             /* bitpos */
-        complain_overflow_dont,        /* complain_on_overflow */
-        glob15_reloc,                  /* special_function */
-        "PPN15",                       /* name */
-        TRUE,                          /* partial_inplace */
-        0x1ffc0,                       /* src_mask */
-        0x1ffc0,                       /* dst_mask */
-        FALSE),                        /* pcrel_offset */
-
-  HOWTO (R_PPN15W,                     /* type */
-        2,                             /* rightshift */
-        -2,                            /* size (0 = byte, 1 = short, 2 = long) */
-        15,                            /* bitsize */
-        FALSE,                         /* pc_relative */
-        6,                             /* bitpos */
-        complain_overflow_dont,        /* complain_on_overflow */
-        glob15_reloc,                  /* special_function */
-        "PPN15W",                      /* name */
-        TRUE,                          /* partial_inplace */
-        0x1ffc0,                       /* src_mask */
-        0x1ffc0,                       /* dst_mask */
-        FALSE),                        /* pcrel_offset */
-
-  HOWTO (R_PPN15H,                     /* type */
-        1,                             /* rightshift */
-        -2,                            /* size (0 = byte, 1 = short, 2 = long) */
-        15,                            /* bitsize */
-        FALSE,                         /* pc_relative */
-        6,                             /* bitpos */
-        complain_overflow_dont,        /* complain_on_overflow */
-        glob15_reloc,                  /* special_function */
-        "PPN15H",                      /* name */
-        TRUE,                          /* partial_inplace */
-        0x1ffc0,                       /* src_mask */
-        0x1ffc0,                       /* dst_mask */
-        FALSE),                        /* pcrel_offset */
-
-  HOWTO (R_PPN16B,                     /* type */
-        0,                             /* rightshift */
-        -2,                            /* size (0 = byte, 1 = short, 2 = long) */
-        16,                            /* bitsize */
-        FALSE,                         /* pc_relative */
-        6,                             /* bitpos */
-        complain_overflow_dont,        /* complain_on_overflow */
-        glob16_reloc,                  /* special_function */
-        "PPN16B",                      /* name */
-        TRUE,                          /* partial_inplace */
-        0x3ffc0,                       /* src_mask */
-        0x3ffc0,                       /* dst_mask */
-        FALSE),                        /* pcrel_offset */
-
-  HOWTO (R_PPLN15,                     /* type */
-        0,                             /* rightshift */
-        -2,                            /* size (0 = byte, 1 = short, 2 = long) */
-        15,                            /* bitsize */
-        FALSE,                         /* pc_relative */
-        0,                             /* bitpos */
-        complain_overflow_dont,        /* complain_on_overflow */
-        NULL,                          /* special_function */
-        "PPLN15",                      /* name */
-        TRUE,                          /* partial_inplace */
-        0x7fff,                        /* src_mask */
-        0x7fff,                        /* dst_mask */
-        FALSE),                        /* pcrel_offset */
-
-  HOWTO (R_PPLN15W,                    /* type */
-        2,                             /* rightshift */
-        -2,                            /* size (0 = byte, 1 = short, 2 = long) */
-        15,                            /* bitsize */
-        FALSE,                         /* pc_relative */
-        0,                             /* bitpos */
-        complain_overflow_dont,        /* complain_on_overflow */
-        NULL,                          /* special_function */
-        "PPLN15W",                     /* name */
-        TRUE,                          /* partial_inplace */
-        0x7fff,                        /* src_mask */
-        0x7fff,                        /* dst_mask */
-        FALSE),                        /* pcrel_offset */
-
-  HOWTO (R_PPLN15H,                    /* type */
-        1,                             /* rightshift */
-        -2,                            /* size (0 = byte, 1 = short, 2 = long) */
-        15,                            /* bitsize */
-        FALSE,                         /* pc_relative */
-        0,                             /* bitpos */
-        complain_overflow_dont,        /* complain_on_overflow */
-        NULL,                          /* special_function */
-        "PPLN15H",                     /* name */
-        TRUE,                          /* partial_inplace */
-        0x7fff,                        /* src_mask */
-        0x7fff,                        /* dst_mask */
-        FALSE),                        /* pcrel_offset */
-
-  HOWTO (R_PPLN16B,                    /* type */
-        0,                             /* rightshift */
-        -2,                            /* size (0 = byte, 1 = short, 2 = long) */
-        15,                            /* bitsize */
-        FALSE,                         /* pc_relative */
-        0,                             /* bitpos */
-        complain_overflow_dont,        /* complain_on_overflow */
-        local16_reloc,                 /* special_function */
-        "PPLN16B",                     /* name */
-        TRUE,                          /* partial_inplace */
-        0xffff,                        /* src_mask */
-        0xffff,                        /* dst_mask */
-        FALSE)                         /* pcrel_offset */
-};
-\f
-/* Special relocation functions, used when the output file is not
-   itself a COFF TIc80 file.  */
-
-/* This special function is used for the base address type
-   relocations.  */
-
-static bfd_reloc_status_type
-ppbase_reloc (bfd *abfd ATTRIBUTE_UNUSED,
-             arelent *reloc_entry ATTRIBUTE_UNUSED,
-             asymbol *symbol_in ATTRIBUTE_UNUSED,
-             void * data ATTRIBUTE_UNUSED,
-             asection *input_section ATTRIBUTE_UNUSED,
-             bfd *output_bfd ATTRIBUTE_UNUSED,
-             char **error_message ATTRIBUTE_UNUSED)
-{
-  /* FIXME.  */
-  abort ();
-}
-
-/* This special function is used for the global 15 bit relocations.  */
-
-static bfd_reloc_status_type
-glob15_reloc (bfd *abfd ATTRIBUTE_UNUSED,
-             arelent *reloc_entry ATTRIBUTE_UNUSED,
-             asymbol *symbol_in ATTRIBUTE_UNUSED,
-             void * data ATTRIBUTE_UNUSED,
-             asection *input_section ATTRIBUTE_UNUSED,
-             bfd *output_bfd ATTRIBUTE_UNUSED,
-             char **error_message ATTRIBUTE_UNUSED)
-{
-  /* FIXME.  */
-  abort ();
-}
-
-/* This special function is used for the global 16 bit relocations.  */
-
-static bfd_reloc_status_type
-glob16_reloc (bfd *abfd ATTRIBUTE_UNUSED,
-             arelent *reloc_entry ATTRIBUTE_UNUSED,
-             asymbol *symbol_in ATTRIBUTE_UNUSED,
-             void * data ATTRIBUTE_UNUSED,
-             asection *input_section ATTRIBUTE_UNUSED,
-             bfd *output_bfd ATTRIBUTE_UNUSED,
-             char **error_message ATTRIBUTE_UNUSED)
-{
-  /* FIXME.  */
-  abort ();
-}
-
-/* This special function is used for the local 16 bit relocations.  */
-
-static bfd_reloc_status_type
-local16_reloc (bfd *abfd ATTRIBUTE_UNUSED,
-              arelent *reloc_entry ATTRIBUTE_UNUSED,
-              asymbol *symbol_in ATTRIBUTE_UNUSED,
-              void * data ATTRIBUTE_UNUSED,
-              asection *input_section ATTRIBUTE_UNUSED,
-              bfd *output_bfd ATTRIBUTE_UNUSED,
-              char **error_message ATTRIBUTE_UNUSED)
-{
-  /* FIXME.  */
-  abort ();
-}
-\f
-/* Code to turn an external r_type into a pointer to an entry in the howto_table.
-   If passed an r_type we don't recognize the abort rather than silently failing
-   to generate an output file.  */
-
-static void
-rtype2howto (arelent *cache_ptr, struct internal_reloc *dst)
-{
-  unsigned int i;
-
-  for (i = 0; i < sizeof tic80_howto_table / sizeof tic80_howto_table[0]; i++)
-    {
-      if (tic80_howto_table[i].type == dst->r_type)
-       {
-         cache_ptr->howto = tic80_howto_table + i;
-         return;
-       }
-    }
-
-  _bfd_error_handler (_("unsupported relocation type %#x"),
-                     (unsigned int) dst->r_type);
-  cache_ptr->howto = tic80_howto_table + 0;
-}
-
-#define RTYPE2HOWTO(cache_ptr, dst) rtype2howto (cache_ptr, dst)
-#define coff_rtype_to_howto coff_tic80_rtype_to_howto
-
-static reloc_howto_type *
-coff_tic80_rtype_to_howto (bfd *abfd ATTRIBUTE_UNUSED,
-                          asection *sec,
-                          struct internal_reloc *rel,
-                          struct coff_link_hash_entry *h ATTRIBUTE_UNUSED,
-                          struct internal_syment *sym ATTRIBUTE_UNUSED,
-                          bfd_vma *addendp)
-{
-  arelent genrel;
-
-  if (rel -> r_symndx == -1 && addendp != NULL)
-    {
-      /* This is a TI "internal relocation", which means that the relocation
-        amount is the amount by which the current section is being relocated
-        in the output section.  */
-      *addendp = (sec -> output_section -> vma + sec -> output_offset) - sec -> vma;
-    }
-  RTYPE2HOWTO (&genrel, rel);
-  return genrel.howto;
-}
-
-#ifndef BADMAG
-#define BADMAG(x) TIC80BADMAG(x)
-#endif
-\f
-#define coff_relocate_section coff_tic80_relocate_section
-
-/* We need a special relocation routine to handle the PP relocs.  Most
-   of this is a copy of _bfd_coff_generic_relocate_section.  */
-
-static bfd_boolean
-coff_tic80_relocate_section (bfd *output_bfd,
-                            struct bfd_link_info *info,
-                            bfd *input_bfd,
-                            asection *input_section,
-                            bfd_byte *contents,
-                            struct internal_reloc *relocs,
-                            struct internal_syment *syms,
-                            asection **sections)
-{
-  struct internal_reloc *rel;
-  struct internal_reloc *relend;
-
-  rel = relocs;
-  relend = rel + input_section->reloc_count;
-  for (; rel < relend; rel++)
-    {
-      long symndx;
-      struct coff_link_hash_entry *h;
-      struct internal_syment *sym;
-      bfd_vma addend;
-      bfd_vma val;
-      reloc_howto_type *howto;
-      bfd_reloc_status_type rstat;
-      bfd_vma addr;
-
-      symndx = rel->r_symndx;
-
-      if (symndx == -1)
-       {
-         h = NULL;
-         sym = NULL;
-       }
-      else
-       {
-         h = obj_coff_sym_hashes (input_bfd)[symndx];
-         sym = syms + symndx;
-       }
-
-      /* COFF treats common symbols in one of two ways.  Either the
-        size of the symbol is included in the section contents, or it
-        is not.  We assume that the size is not included, and force
-        the rtype_to_howto function to adjust the addend as needed.  */
-
-      if (sym != NULL && sym->n_scnum != 0)
-       addend = - sym->n_value;
-      else
-       addend = 0;
-
-      howto = bfd_coff_rtype_to_howto (input_bfd, input_section, rel, h,
-                                      sym, &addend);
-      if (howto == NULL)
-       return FALSE;
-
-      val = 0;
-
-      if (h == NULL)
-       {
-         asection *sec;
-
-         if (symndx == -1)
-           {
-             sec = bfd_abs_section_ptr;
-             val = 0;
-           }
-         else
-           {
-             sec = sections[symndx];
-             val = (sec->output_section->vma
-                    + sec->output_offset
-                    + sym->n_value);
-             if (! obj_pe (output_bfd))
-               val -= sec->vma;
-           }
-       }
-      else
-       {
-         if (h->root.type == bfd_link_hash_defined
-             || h->root.type == bfd_link_hash_defweak)
-           {
-             asection *sec;
-
-             sec = h->root.u.def.section;
-             val = (h->root.u.def.value
-                    + sec->output_section->vma
-                    + sec->output_offset);
-             }
-
-         else if (! bfd_link_relocatable (info))
-           (*info->callbacks->undefined_symbol)
-             (info, h->root.root.string, input_bfd, input_section,
-              rel->r_vaddr - input_section->vma, TRUE);
-       }
-
-      addr = rel->r_vaddr - input_section->vma;
-
-      /* FIXME: This code assumes little endian, but the PP can
-        apparently be bi-endian.  I don't know if the bi-endianness
-        applies to the instruction set or just to the data.  */
-      switch (howto->type)
-       {
-       default:
-       case R_ABS:
-       case R_RELLONGX:
-       case R_PPL15:
-       case R_PPL15W:
-       case R_PPL15H:
-       case R_PPLN15:
-       case R_PPLN15W:
-       case R_PPLN15H:
-         rstat = _bfd_final_link_relocate (howto, input_bfd, input_section,
-                                           contents, addr, val, addend);
-         break;
-
-       case R_PP15:
-       case R_PP15W:
-       case R_PP15H:
-       case R_PPN15:
-       case R_PPN15W:
-       case R_PPN15H:
-         /* Offset the address so that we can use 4 byte relocations.  */
-         rstat = _bfd_final_link_relocate (howto, input_bfd, input_section,
-                                           contents + 2, addr, val, addend);
-         break;
-
-       case R_PP16B:
-       case R_PPN16B:
-         {
-           /* The most significant bit is stored in bit 6.  */
-           bfd_byte hold;
-
-           hold = contents[addr + 4];
-           contents[addr + 4] &=~ 0x20;
-           contents[addr + 4] |= (contents[addr] >> 1) & 0x20;
-           rstat = _bfd_final_link_relocate (howto, input_bfd, input_section,
-                                             contents + 2, addr,
-                                             val, addend);
-           contents[addr] &=~ 0x40;
-           contents[addr] |= (contents[addr + 4] << 1) & 0x40;
-           contents[addr + 4] &=~ 0x20;
-           contents[addr + 4] |= hold & 0x20;
-           break;
-         }
-
-       case R_PPL16B:
-       case R_PPLN16B:
-         {
-           /* The most significant bit is stored in bit 28.  */
-           bfd_byte hold;
-
-           hold = contents[addr + 1];
-           contents[addr + 1] &=~ 0x80;
-           contents[addr + 1] |= (contents[addr + 3] << 3) & 0x80;
-           rstat = _bfd_final_link_relocate (howto, input_bfd, input_section,
-                                             contents, addr,
-                                             val, addend);
-           contents[addr + 3] &= ~0x10;
-           contents[addr + 3] |= (contents[addr + 1] >> 3) & 0x10;
-           contents[addr + 1] &=~ 0x80;
-           contents[addr + 1] |= hold & 0x80;
-           break;
-         }
-
-       case R_PPBASE:
-         /* Parameter RAM is from 0x1000000 to 0x1000800.  */
-         contents[addr] &=~ 0x3;
-         if (val >= 0x1000000 && val < 0x1000800)
-           contents[addr] |= 0x3;
-         else
-           contents[addr] |= 0x2;
-         rstat = bfd_reloc_ok;
-         break;
-
-       case R_PPLBASE:
-         /* Parameter RAM is from 0x1000000 to 0x1000800.  */
-         contents[addr + 2] &= ~0xc0;
-         if (val >= 0x1000000 && val < 0x1000800)
-           contents[addr + 2] |= 0xc0;
-         else
-           contents[addr + 2] |= 0x80;
-         rstat = bfd_reloc_ok;
-         break;
-       }
-
-      switch (rstat)
-       {
-       default:
-         abort ();
-       case bfd_reloc_ok:
-         break;
-       case bfd_reloc_outofrange:
-         _bfd_error_handler
-           /* xgettext: c-format */
-           (_("%pB: bad reloc address %#" PRIx64 " in section `%pA'"),
-            input_bfd, (uint64_t) rel->r_vaddr, input_section);
-         return FALSE;
-       case bfd_reloc_overflow:
-         {
-           const char *name;
-           char buf[SYMNMLEN + 1];
-
-           if (symndx == -1)
-             name = "*ABS*";
-           else if (h != NULL)
-             name = NULL;
-           else
-             {
-               name = _bfd_coff_internal_syment_name (input_bfd, sym, buf);
-               if (name == NULL)
-                 return FALSE;
-             }
-
-           (*info->callbacks->reloc_overflow)
-             (info, (h ? &h->root : NULL), name, howto->name,
-              (bfd_vma) 0, input_bfd, input_section,
-              rel->r_vaddr - input_section->vma);
-         }
-       }
-    }
-  return TRUE;
-}
-\f
-#define TIC80COFF 1            /* Customize coffcode.h */
-#undef C_AUTOARG               /* Clashes with TIc80's C_UEXT */
-#undef C_LASTENT               /* Clashes with TIc80's C_STATLAB */
-
-#ifndef bfd_pe_print_pdata
-#define bfd_pe_print_pdata     NULL
-#endif
-
-#include "coffcode.h"
-
-CREATE_LITTLE_COFF_TARGET_VEC (tic80_coff_vec, "coff-tic80", D_PAGED, 0, '_', NULL, COFF_SWAP_TABLE)
index 948bb705b0945ff749383a1ee7ffc55bb4221f81..ac5312fdb03cf760629a4380786fe26e72f71bfa 100644 (file)
@@ -2330,12 +2330,6 @@ coff_set_arch_mach_hook (bfd *abfd, void * filehdr)
       break;
 #endif
 
-#ifdef TIC80_ARCH_MAGIC
-    case TIC80_ARCH_MAGIC:
-      arch = bfd_arch_tic80;
-      break;
-#endif
-
 #ifdef MCOREMAGIC
     case MCOREMAGIC:
       arch = bfd_arch_mcore;
@@ -2715,12 +2709,6 @@ coff_set_flags (bfd * abfd,
       return TRUE;
 #endif
 
-#ifdef TIC80_ARCH_MAGIC
-    case bfd_arch_tic80:
-      *magicp = TIC80_ARCH_MAGIC;
-      return TRUE;
-#endif
-
 #ifdef ARMMAGIC
     case bfd_arch_arm:
 #ifdef ARM_WINCE
@@ -2883,7 +2871,7 @@ sort_by_secaddr (const void * arg1, const void * arg2)
 /* Calculate the file position for each section.  */
 
 #define ALIGN_SECTIONS_IN_FILE
-#if defined(TIC80COFF) || defined(TICOFF)
+#ifdef TICOFF
 #undef ALIGN_SECTIONS_IN_FILE
 #endif
 
@@ -3811,9 +3799,6 @@ coff_write_object_contents (bfd * abfd)
      but it doesn't hurt to set it internally.  */
   internal_f.f_target_id = TI_TARGET_ID;
 #endif
-#ifdef TIC80_TARGET_ID
-  internal_f.f_target_id = TIC80_TARGET_ID;
-#endif
 
   /* FIXME, should do something about the other byte orders and
      architectures.  */
@@ -3841,10 +3826,6 @@ coff_write_object_contents (bfd * abfd)
     internal_a.magic = TICOFF_AOUT_MAGIC;
 #define __A_MAGIC_SET__
 #endif
-#ifdef TIC80COFF
-    internal_a.magic = TIC80_ARCH_MAGIC;
-#define __A_MAGIC_SET__
-#endif /* TIC80 */
 
 #if defined(ARM)
 #define __A_MAGIC_SET__
@@ -4775,7 +4756,7 @@ coff_slurp_symbol_table (bfd * abfd)
            case C_ALIAS:       /* Duplicate tag.  */
 #endif
              /* New storage classes for TI COFF.  */
-#if defined(TIC80COFF) || defined(TICOFF)
+#ifdef TICOFF
            case C_UEXT:        /* Tentative external definition.  */
 #endif
            case C_EXTLAB:      /* External load time label.  */
index 60a04d432a2ff10b2badb0f6a1c87de306e37467..a94f817d5fa3cf1e0317b066f87385c487716d79 100644 (file)
@@ -264,9 +264,6 @@ coff_swap_filehdr_in (bfd * abfd, void * src, void * dst)
   filehdr_dst->f_nsyms  = H_GET_32 (abfd, filehdr_src->f_nsyms);
   filehdr_dst->f_opthdr = H_GET_16 (abfd, filehdr_src->f_opthdr);
   filehdr_dst->f_flags  = H_GET_16 (abfd, filehdr_src->f_flags);
-#ifdef TIC80_TARGET_ID
-  filehdr_dst->f_target_id = H_GET_16 (abfd, filehdr_src->f_target_id);
-#endif
 
 #ifdef COFF_ADJUST_FILEHDR_IN_POST
   COFF_ADJUST_FILEHDR_IN_POST (abfd, src, dst);
@@ -289,9 +286,6 @@ coff_swap_filehdr_out (bfd *abfd, void * in, void * out)
   H_PUT_32 (abfd, filehdr_in->f_nsyms, filehdr_out->f_nsyms);
   H_PUT_16 (abfd, filehdr_in->f_opthdr, filehdr_out->f_opthdr);
   H_PUT_16 (abfd, filehdr_in->f_flags, filehdr_out->f_flags);
-#ifdef TIC80_TARGET_ID
-  H_PUT_16 (abfd, filehdr_in->f_target_id, filehdr_out->f_target_id);
-#endif
 
 #ifdef COFF_ADJUST_FILEHDR_OUT_POST
   COFF_ADJUST_FILEHDR_OUT_POST (abfd, in, out);
index 0a96927e0edcea2515229677eab8ba0aadf50fe8..a0ab37ea20c0982af24b4f8813ccb46295bb73a5 100644 (file)
@@ -1333,11 +1333,6 @@ case "${targ}" in
     targ_selvecs="tic6x_elf32_linux_be_vec tic6x_elf32_le_vec tic6x_elf32_be_vec"
     ;;
 
-  tic80*-*-*)
-    targ_defvec=tic80_coff_vec
-    targ_underscore=yes
-    ;;
-
 #ifdef BFD64
   tilegx-*-*)
     targ_defvec=tilegx_elf64_le_vec
index abd7b2a83e596e7090b7848ae383b3b88aad571b..bf95857cdeefa12fae50036594280274c94db51c 100755 (executable)
@@ -14923,7 +14923,6 @@ do
     tic6x_elf32_c6000_le_vec)   tb="$tb elf32-tic6x.lo elf32.lo $elf" ;;
     tic6x_elf32_linux_be_vec)   tb="$tb elf32-tic6x.lo elf32.lo $elf" ;;
     tic6x_elf32_linux_le_vec)   tb="$tb elf32-tic6x.lo elf32.lo $elf" ;;
-    tic80_coff_vec)             tb="$tb coff-tic80.lo $coff" ;;
     tilegx_elf32_be_vec)        tb="$tb elf32-tilegx.lo elfxx-tilegx.lo elf32.lo $elf" ; target_size=32 ;;
     tilegx_elf32_le_vec)        tb="$tb elf32-tilegx.lo elfxx-tilegx.lo elf32.lo $elf" ; target_size=32 ;;
     tilegx_elf64_be_vec)        tb="$tb elf64-tilegx.lo elfxx-tilegx.lo elf64.lo $elf" ; target_size=64 ;;
index 7eee83ae4d4c9456c7b99d03a1bff905729f23c1..c673a29892838780e5814bd75a046eaa83dddf68 100644 (file)
@@ -659,7 +659,6 @@ do
     tic6x_elf32_c6000_le_vec)   tb="$tb elf32-tic6x.lo elf32.lo $elf" ;;
     tic6x_elf32_linux_be_vec)   tb="$tb elf32-tic6x.lo elf32.lo $elf" ;;
     tic6x_elf32_linux_le_vec)   tb="$tb elf32-tic6x.lo elf32.lo $elf" ;;
-    tic80_coff_vec)             tb="$tb coff-tic80.lo $coff" ;;
     tilegx_elf32_be_vec)        tb="$tb elf32-tilegx.lo elfxx-tilegx.lo elf32.lo $elf" ; target_size=32 ;;
     tilegx_elf32_le_vec)        tb="$tb elf32-tilegx.lo elfxx-tilegx.lo elf32.lo $elf" ; target_size=32 ;;
     tilegx_elf64_be_vec)        tb="$tb elf64-tilegx.lo elfxx-tilegx.lo elf64.lo $elf" ; target_size=64 ;;
diff --git a/bfd/cpu-tic80.c b/bfd/cpu-tic80.c
deleted file mode 100644 (file)
index 2fcbd9d..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-/* bfd back-end for TI TMS320C80 (MVP) support
-   Copyright (C) 1996-2019 Free Software Foundation, Inc.
-   Written by Fred Fish at Cygnus support (fnf@cygnus.com)
-
-   This file is part of BFD, the Binary File Descriptor library.
-
-   This program 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 3 of the License, or
-   (at your option) any later version.
-
-   This program 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 this program; if not, write to the Free Software
-   Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
-   MA 02110-1301, USA.  */
-
-#include "sysdep.h"
-#include "bfd.h"
-#include "libbfd.h"
-
-const bfd_arch_info_type bfd_tic80_arch =
-{
-  32,                          /* Bits in a word.  */
-  32,                          /* Bits in an address.  */
-  8,                           /* Bits in a byte.  */
-  bfd_arch_tic80,              /* Architecture number.  */
-  0,                           /* Only 1 machine.  */
-  "tic80",                     /* Architecture name.  */
-  "tic80",                     /* Printable name.  */
-  2,                           /* Section alignment power.  */
-  TRUE,                                /* Default machine.  */
-  bfd_default_compatible,
-  bfd_default_scan,
-  bfd_arch_default_fill,
-  NULL,                                /* Pointer to next in chain.  */
-  0 /* Maximum offset of a reloc from the start of an insn.  */
-};
index 04c4c0754f3e22e890d8f53aff67cadd1ea68907..a84908b61ea956b489bd6fafa29938c29a6cb637 100644 (file)
@@ -32,7 +32,6 @@ coff-stgo32.c
 coff-tic30.c
 coff-tic4x.c
 coff-tic54x.c
-coff-tic80.c
 coff-x86_64.c
 coff-z80.c
 coff-z8k.c
@@ -117,7 +116,6 @@ cpu-tic30.c
 cpu-tic4x.c
 cpu-tic54x.c
 cpu-tic6x.c
-cpu-tic80.c
 cpu-tilegx.c
 cpu-tilepro.c
 cpu-v850.c
index fb0c669e7f7046409a97f16eabdee6671bf3899f..0c84a72b422ceee350355c9a002710d35f135b4a 100644 (file)
@@ -899,7 +899,6 @@ extern const bfd_target tic6x_elf32_c6000_be_vec;
 extern const bfd_target tic6x_elf32_c6000_le_vec;
 extern const bfd_target tic6x_elf32_linux_be_vec;
 extern const bfd_target tic6x_elf32_linux_le_vec;
-extern const bfd_target tic80_coff_vec;
 extern const bfd_target tilegx_elf32_be_vec;
 extern const bfd_target tilegx_elf32_le_vec;
 extern const bfd_target tilegx_elf64_be_vec;
@@ -1306,7 +1305,6 @@ static const bfd_target * const _bfd_target_vector[] =
        &tic54x_coff2_vec,
        &tic6x_elf32_be_vec,
        &tic6x_elf32_le_vec,
-       &tic80_coff_vec,
 
        &tilegx_elf32_be_vec,
        &tilegx_elf32_le_vec,
index 80c7fc32ddb437ddb4b18ae3fd0cecc53f7c864c..b8ae470f836f86c8fb1c60e8a188984f24a504f3 100644 (file)
@@ -1,3 +1,8 @@
+2019-12-17  Alan Modra  <amodra@gmail.com>
+
+       * testsuite/binutils-all/objcopy.exp: Remove tic80 support.
+       * testsuite/binutils-all/objdump.exp: Likewise.
+
 2019-12-11  Alan Modra  <amodra@gmail.com>
 
        * od-xcoff.c (dump_dumpx_core): Adjust for bfd_h_get_8 change.
index 6739ab7de842456cab1ab5506f2355c87b405b19..88f63fee393013d8388d8cbf0e79f986793905b7 100644 (file)
@@ -81,7 +81,6 @@ proc objcopy_test {testname srcfile} {
        setup_xfail "m8*-*"
        setup_xfail "sh-*-coff*"
        setup_xfail "tic54x-*-*"
-       setup_xfail "tic80-*-*"
 
        clear_xfail "hppa*64*-*-hpux*" "hppa*-*-linux*" "hppa*-*-lites*"
        clear_xfail "hppa*-*-*n*bsd*" "hppa*-*-rtems*" "*-*-*elf*"
index 58b66d4bb608f793808acca9dea0a1a0f26fb2e4..5089ea81ff2421c93123026547bef0118c549f90 100644 (file)
@@ -39,7 +39,7 @@ lappend cpus_expected d10v d30v fr30 fr500 fr550 h8 hppa i386 iamcu ip2022
 lappend cpus_expected m16c m32c m32r m68hc11 m68hc12 m68k MCore mep c5 h1 MicroBlaze
 lappend cpus_expected mips mn10200 mn10300 ms1 msp MSP430 nds32 n1h_v3 ns32k
 lappend cpus_expected or1k or1knd pj powerpc pyramid riscv romp rs6000 s390 sh sparc
-lappend cpus_expected tic54x tic80 tilegx tms320c30 tms320c4x tms320c54x
+lappend cpus_expected tic54x tilegx tms320c30 tms320c4x tms320c54x
 lappend cpus_expected v850 vax x86-64 xscale xtensa z8k z8001 z8002
 
 # Make sure the target CPU shows up in the list.
index 48c5430855ca86c0e14e121575a24d6f6678f138..875bcf8fe561e62860835b417ff10f3dfdcb5977 100644 (file)
@@ -1,3 +1,7 @@
+2019-12-17  Alan Modra  <amodra@gmail.com>
+
+       * doc/as.texi: Remove mention of tic80.
+
 2019-12-12  H.J. Lu  <hongjiu.lu@intel.com>
 
        PR gas/25274
index 532ed7acfac0b91a434e566250123e66fda1c9ba..c132f86c2f8b1d9145b47603840751850b97172d 100644 (file)
@@ -4588,7 +4588,7 @@ with no-op instructions when appropriate.
 
 The way the required alignment is specified varies from system to system.
 For the arc, hppa, i386 using ELF, iq2000, m68k, or1k,
-s390, sparc, tic4x, tic80 and xtensa, the first expression is the
+s390, sparc, tic4x and xtensa, the first expression is the
 alignment request in bytes.  For example @samp{.align 8} advances
 the location counter until it is a multiple of 8.  If the location counter
 is already a multiple of 8, no change is needed.  For the tic54x, the
index a9be17a76a9c341ad46b1b3896a5cebec9178fe4..ce3e0496068c32b13f11b04707d68858b80668f6 100644 (file)
@@ -1,3 +1,8 @@
+2019-12-17  Alan Modra  <amodra@gmail.com>
+
+       * coff/tic80.h: Delete file.
+       * opcode/tic80.h: Delete file.
+
 2019-12-16  Alan Modra  <amodra@gmail.com>
 
        * opcode/crx.h (inst <match>): Make unsigned int.
diff --git a/include/coff/tic80.h b/include/coff/tic80.h
deleted file mode 100644 (file)
index 921ee50..0000000
+++ /dev/null
@@ -1,123 +0,0 @@
-/* coff information for TI TMS320C80 (MVP)
-   
-   Copyright (C) 2001-2019 Free Software Foundation, Inc.
-
-   This program 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 3 of the License, or
-   (at your option) any later version.
-   
-   This program 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 this program; if not, write to the Free Software
-   Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
-   MA 02110-1301, USA.  */
-
-#define DO_NOT_DEFINE_FILHDR
-#define DO_NOT_DEFINE_SCNHDR
-#define L_LNNO_SIZE 2
-#include "coff/external.h"
-
-/********************** FILE HEADER **********************/
-
-struct external_filehdr
-  {
-    char f_magic[2];   /* magic number                 */
-    char f_nscns[2];   /* number of sections           */
-    char f_timdat[4];  /* time & date stamp            */
-    char f_symptr[4];  /* file pointer to symtab       */
-    char f_nsyms[4];   /* number of symtab entries     */
-    char f_opthdr[2];  /* sizeof(optional hdr)         */
-    char f_flags[2];   /* flags                        */
-    char f_target_id[2];/* target id (TIc80 specific)  */
-};
-
-#define        TIC80_ARCH_MAGIC        0x0C1   /* Goes in the file header magic number field */
-#define TIC80_TARGET_ID                0x95    /* Goes in the target id field */
-
-#define TIC80BADMAG(x) ((x).f_magic != TIC80_ARCH_MAGIC)
-
-#define        FILHDR  struct external_filehdr
-#define        FILHSZ  22
-
-#define TIC80_AOUTHDR_MAGIC    0x108   /* Goes in the optional file header magic number field */
-
-/********************** SECTION HEADER **********************/
-
-struct external_scnhdr
-{
-       char            s_name[8];      /* section name                 */
-       char            s_paddr[4];     /* physical address, aliased s_nlib */
-       char            s_vaddr[4];     /* virtual address              */
-       char            s_size[4];      /* section size                 */
-       char            s_scnptr[4];    /* file ptr to raw data for section */
-       char            s_relptr[4];    /* file ptr to relocation       */
-       char            s_lnnoptr[4];   /* file ptr to line numbers     */
-       char            s_nreloc[2];    /* number of relocation entries */
-       char            s_nlnno[2];     /* number of line number entries*/
-       char            s_flags[2];     /* flags                        */
-       char            s_reserved[1];  /* reserved (TIc80 specific)    */
-       char            s_mempage[1];   /* memory page number (TIc80)   */
-};
-
-/* Names of "special" sections.  */
-#define _TEXT  ".text"
-#define _DATA  ".data"
-#define _BSS   ".bss"
-#define _CINIT ".cinit"
-#define _CONST ".const"
-#define _SWITCH        ".switch"
-#define _STACK ".stack"
-#define _SYSMEM        ".sysmem"
-
-#define        SCNHDR  struct external_scnhdr
-#define        SCNHSZ  40
-  
-/* FIXME - need to correlate external_auxent with
-   TIc80 Code Generation Tools User's Guide, CG:A-25 */
-
-/********************** RELOCATION DIRECTIVES **********************/
-
-/* The external reloc has an offset field, because some of the reloc
-   types on the h8 don't have room in the instruction for the entire
-   offset - eg the strange jump and high page addressing modes.  */
-
-struct external_reloc
-{
-  char r_vaddr[4];
-  char r_symndx[4];
-  char r_reserved[2];
-  char r_type[2];
-};
-
-#define RELOC struct external_reloc
-#define RELSZ 12
-
-/* TIc80 relocation types. */
-
-#define R_ABS          0x00            /* Absolute address - no relocation */
-#define R_RELLONGX     0x11            /* PP: 32 bits, direct */
-#define R_PPBASE       0x34            /* PP: Global base address type */
-#define R_PPLBASE      0x35            /* PP: Local base address type */
-#define R_PP15         0x38            /* PP: Global 15 bit offset */
-#define R_PP15W                0x39            /* PP: Global 15 bit offset divided by 4 */
-#define R_PP15H                0x3A            /* PP: Global 15 bit offset divided by 2 */
-#define R_PP16B                0x3B            /* PP: Global 16 bit offset for bytes */
-#define R_PPL15                0x3C            /* PP: Local 15 bit offset */
-#define R_PPL15W       0x3D            /* PP: Local 15 bit offset divided by 4 */
-#define R_PPL15H       0x3E            /* PP: Local 15 bit offset divided by 2 */
-#define R_PPL16B       0x3F            /* PP: Local 16 bit offset for bytes */
-#define R_PPN15                0x40            /* PP: Global 15 bit negative offset */
-#define R_PPN15W       0x41            /* PP: Global 15 bit negative offset divided by 4 */
-#define R_PPN15H       0x42            /* PP: Global 15 bit negative offset divided by 2 */
-#define R_PPN16B       0x43            /* PP: Global 16 bit negative byte offset */
-#define R_PPLN15       0x44            /* PP: Local 15 bit negative offset */
-#define R_PPLN15W      0x45            /* PP: Local 15 bit negative offset divided by 4 */
-#define R_PPLN15H      0x46            /* PP: Local 15 bit negative offset divided by 2 */
-#define R_PPLN16B      0x47            /* PP: Local 16 bit negative byte offset */
-#define R_MPPCR15W     0x4E            /* MP: 15 bit PC-relative divided by 4 */
-#define R_MPPCR                0x4F            /* MP: 32 bit PC-relative divided by 4 */
diff --git a/include/opcode/tic80.h b/include/opcode/tic80.h
deleted file mode 100644 (file)
index ac1249f..0000000
+++ /dev/null
@@ -1,283 +0,0 @@
-/* tic80.h -- Header file for TI TMS320C80 (MV) opcode table
-   Copyright (C) 1996-2019 Free Software Foundation, Inc.
-   Written by Fred Fish (fnf@cygnus.com), Cygnus Support
-
-   This file is part of GDB, GAS, and the GNU binutils.
-
-   GDB, GAS, and the GNU binutils are free software; you can redistribute
-   them and/or modify them under the terms of the GNU General Public
-   License as published by the Free Software Foundation; either version 3,
-   or (at your option) any later version.
-
-   GDB, GAS, and the GNU binutils are distributed in the hope that they
-   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 this file; see the file COPYING3.  If not, write to the Free
-   Software Foundation, 51 Franklin Street - Fifth Floor, Boston,
-   MA 02110-1301, USA.  */
-
-#ifndef TIC80_H
-#define TIC80_H
-
-/* The opcode table is an array of struct tic80_opcode.  */
-
-struct tic80_opcode
-{
-  /* The opcode name.  */
-
-  const char *name;
-
-  /* The opcode itself.  Those bits which will be filled in with operands
-     are zeroes.  */
-
-  unsigned long opcode;
-
-  /* The opcode mask.  This is used by the disassembler.  This is a mask
-     containing ones indicating those bits which must match the opcode
-     field, and zeroes indicating those bits which need not match (and are
-     presumably filled in by operands).  */
-
-  unsigned long mask;
-
-  /* Special purpose flags for this opcode. */
-
-  unsigned char flags;
-
-  /* An array of operand codes.  Each code is an index into the operand
-     table.  They appear in the order which the operands must appear in
-     assembly code, and are terminated by a zero.  FIXME: Adjust size to
-     match actual requirements when TIc80 support is complete */
-
-  unsigned char operands[8];
-};
-
-/* The table itself is sorted by major opcode number, and is otherwise in
-   the order in which the disassembler should consider instructions.
-   FIXME: This isn't currently true. */
-
-extern const struct tic80_opcode tic80_opcodes[];
-extern const int tic80_num_opcodes;
-
-\f
-/* The operands table is an array of struct tic80_operand.  */
-
-struct tic80_operand
-{
-  /* The number of bits in the operand.  */
-
-  int bits;
-
-  /* How far the operand is left shifted in the instruction.  */
-
-  int shift;
-
-  /* Insertion function.  This is used by the assembler.  To insert an
-     operand value into an instruction, check this field.
-
-     If it is NULL, execute
-         i |= (op & ((1 << o->bits) - 1)) << o->shift;
-     (i is the instruction which we are filling in, o is a pointer to
-     this structure, and op is the opcode value; this assumes twos
-     complement arithmetic).
-
-     If this field is not NULL, then simply call it with the
-     instruction and the operand value.  It will return the new value
-     of the instruction.  If the ERRMSG argument is not NULL, then if
-     the operand value is illegal, *ERRMSG will be set to a warning
-     string (the operand will be inserted in any case).  If the
-     operand value is legal, *ERRMSG will be unchanged (most operands
-     can accept any value).  */
-
-  unsigned long (*insert)
-    (unsigned long instruction, long op, const char **errmsg);
-
-  /* Extraction function.  This is used by the disassembler.  To
-     extract this operand type from an instruction, check this field.
-
-     If it is NULL, compute
-         op = ((i) >> o->shift) & ((1 << o->bits) - 1);
-        if ((o->flags & TIC80_OPERAND_SIGNED) != 0
-            && (op & (1 << (o->bits - 1))) != 0)
-          op -= 1 << o->bits;
-     (i is the instruction, o is a pointer to this structure, and op
-     is the result; this assumes twos complement arithmetic).
-
-     If this field is not NULL, then simply call it with the
-     instruction value.  It will return the value of the operand.  If
-     the INVALID argument is not NULL, *INVALID will be set to
-     non-zero if this operand type can not actually be extracted from
-     this operand (i.e., the instruction does not match).  If the
-     operand is valid, *INVALID will not be changed.  */
-
-  long (*extract) (unsigned long instruction, int *invalid);
-
-  /* One bit syntax flags.  */
-
-  unsigned long flags;
-};
-
-/* Elements in the table are retrieved by indexing with values from
-   the operands field of the tic80_opcodes table.  */
-
-extern const struct tic80_operand tic80_operands[];
-
-\f
-/* Values defined for the flags field of a struct tic80_operand.
-
-   Note that flags for all predefined symbols, such as the general purpose
-   registers (ex: r10), control registers (ex: FPST), condition codes (ex:
-   eq0.b), bit numbers (ex: gt.b), etc are large enough that they can be
-   or'd into an int where the lower bits contain the actual numeric value
-   that correponds to this predefined symbol.  This way a single int can
-   contain both the value of the symbol and it's type.
- */
-
-/* This operand must be an even register number.  Floating point numbers
-   for example are stored in even/odd register pairs. */
-
-#define TIC80_OPERAND_EVEN     (1u << 0)
-
-/* This operand must be an odd register number and must be one greater than
-   the register number of the previous operand.  I.E. the second register in
-   an even/odd register pair. */
-
-#define TIC80_OPERAND_ODD      (1u << 1)
-
-/* This operand takes signed values.  */
-
-#define TIC80_OPERAND_SIGNED   (1u << 2)
-
-/* This operand may be either a predefined constant name or a numeric value.
-   An example would be a condition code like "eq0.b" which has the numeric
-   value 0x2. */
-
-#define TIC80_OPERAND_NUM      (1u << 3)
-
-/* This operand should be wrapped in parentheses rather than separated
-   from the previous one by a comma.  This is used for various
-   instructions, like the load and store instructions, which want
-   their operands to look like "displacement(reg)" */
-
-#define TIC80_OPERAND_PARENS   (1u << 4)
-
-/* This operand is a PC relative branch offset.  The disassembler prints
-   these symbolically if possible.  Note that the offsets are taken as word
-   offsets. */
-
-#define TIC80_OPERAND_PCREL    (1u << 5)
-
-/* This flag is a hint to the disassembler for using hex as the prefered
-   printing format, even for small positive or negative immediate values.
-   Normally values in the range -999 to 999 are printed as signed decimal
-   values and other values are printed in hex. */
-
-#define TIC80_OPERAND_BITFIELD (1u << 6)
-
-/* This operand may have a ":m" modifier specified by bit 17 in a short
-   immediate form instruction. */
-
-#define TIC80_OPERAND_M_SI     (1u << 7)
-
-/* This operand may have a ":m" modifier specified by bit 15 in a long
-   immediate or register form instruction. */
-
-#define TIC80_OPERAND_M_LI     (1u << 8)
-
-/* This operand may have a ":s" modifier specified in bit 11 in a long
-   immediate or register form instruction. */
-
-#define TIC80_OPERAND_SCALED   (1u << 9)
-
-/* This operand is a floating point value */
-
-#define TIC80_OPERAND_FLOAT    (1u << 10)
-
-/* This operand is an byte offset from a base relocation. The lower
- two bits of the final relocated address are ignored when the value is
- written to the program counter. */
-
-#define TIC80_OPERAND_BASEREL  (1u << 11)
-
-/* This operand is an "endmask" field for a shift instruction.
-   It is treated special in that it can have values of 0-32,
-   where 0 and 32 result in the same instruction.  The assembler
-   must be able to accept both endmask values.  This disassembler
-   has no way of knowing from the instruction which value was 
-   given at assembly time, so it just uses '0'. */
-
-#define TIC80_OPERAND_ENDMASK  (1u << 12)
-
-/* This operand is one of the 32 general purpose registers.
-   The disassembler prints these with a leading 'r'. */
-
-#define TIC80_OPERAND_GPR      (1u << 27)
-
-/* This operand is a floating point accumulator register.
-   The disassembler prints these with a leading 'a'. */
-
-#define TIC80_OPERAND_FPA      (1u << 28)
-
-/* This operand is a control register number, either numeric or
-   symbolic (like "EIF", "EPC", etc).
-   The disassembler prints these symbolically. */
-
-#define TIC80_OPERAND_CR       (1u << 29)
-
-/* This operand is a condition code, either numeric or
-   symbolic (like "eq0.b", "ne0.w", etc).
-   The disassembler prints these symbolically. */
-
-#define TIC80_OPERAND_CC       (1u << 30)
-
-/* This operand is a bit number, either numeric or
-   symbolic (like "eq.b", "or.f", etc).
-   The disassembler prints these symbolically.
-   Note that they appear in the instruction in 1's complement relative
-   to the values given in the manual. */
-
-#define TIC80_OPERAND_BITNUM   (1u << 31)
-
-/* This mask is used to strip operand bits from an int that contains
-   both operand bits and a numeric value in the lsbs. */
-
-#define TIC80_OPERAND_MASK     (TIC80_OPERAND_GPR | TIC80_OPERAND_FPA | TIC80_OPERAND_CR | TIC80_OPERAND_CC | TIC80_OPERAND_BITNUM)
-
-\f
-/* Flag bits for the struct tic80_opcode flags field. */
-
-#define TIC80_VECTOR           01      /* Is a vector instruction */
-#define TIC80_NO_R0_DEST       02      /* Register r0 cannot be a destination register */
-
-\f
-/* The opcodes library contains a table that allows translation from predefined
-   symbol names to numeric values, and vice versa. */
-
-/* Structure to hold information about predefined symbols.  */
-
-struct predefined_symbol
-{
-  char *name;          /* name to recognize */
-  int value;
-};
-
-#define PDS_NAME(pdsp) ((pdsp) -> name)
-#define PDS_VALUE(pdsp) ((pdsp) -> value)
-
-/* Translation array.  */
-extern const struct predefined_symbol tic80_predefined_symbols[];
-/* How many members in the array.  */
-extern const int tic80_num_predefined_symbols;
-
-/* Translate value to symbolic name.  */
-const char *tic80_value_to_symbol (int val, int class);
-
-/* Translate symbolic name to value.  */
-int tic80_symbol_to_value (char *name, int class);
-
-const struct predefined_symbol *tic80_next_predefined_symbol
-  (const struct predefined_symbol *);
-
-#endif /* TIC80_H */
index 4b7e746498e81c76439430c09bec195f7d4a869d..f23d70b043cc816e78219cc58cb42d9fb277e161 100644 (file)
@@ -1,3 +1,12 @@
+2019-12-17  Alan Modra  <amodra@gmail.com>
+
+       * emulparams/tic80coff.sh: Delete file.
+       * scripttempl/tic80coff.sc: Delete file.
+       * configure.tgt: Remove tic80 support.
+       * Makefile.am: Likewise.
+       * Makefile.in: Regenerate.
+       * po/BLD-POTFILES.in: Regenerate.
+
 2019-12-12  H.J. Lu  <hongjiu.lu@intel.com>
 
        * testsuite/ld-i386/align-branch-1.d: New file.
index ddc7a78368f7a476b5223f2ae5e6439ff326a52f..cd2ff301c3ce4bd5d042479573e26d4e2e5936f9 100644 (file)
@@ -379,7 +379,6 @@ ALL_EMULATION_SOURCES = \
        etic3xcoff_onchip.c \
        etic4xcoff.c \
        etic54xcoff.c \
-       etic80coff.c \
        ev850.c \
        ev850_rh850.c \
        evanilla.c \
@@ -869,7 +868,6 @@ $(ALL_EMULATION_SOURCES) $(ALL_64_EMULATION_SOURCES): $(GEN_DEPENDS)
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/etic3xcoff_onchip.Pc@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/etic4xcoff.Pc@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/etic54xcoff.Pc@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/etic80coff.Pc@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ev850.Pc@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ev850_rh850.Pc@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evanilla.Pc@am__quote@
index fdf06128b27ba9b8214d158ee17627c391ca6bdd..d27bafb3640f30f863406ae42fb57998f5cc71fc 100644 (file)
@@ -869,7 +869,6 @@ ALL_EMULATION_SOURCES = \
        etic3xcoff_onchip.c \
        etic4xcoff.c \
        etic54xcoff.c \
-       etic80coff.c \
        ev850.c \
        ev850_rh850.c \
        evanilla.c \
@@ -1490,7 +1489,6 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/etic3xcoff_onchip.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/etic4xcoff.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/etic54xcoff.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/etic80coff.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ev850.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ev850_rh850.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evanilla.Po@am__quote@
@@ -2475,7 +2473,6 @@ $(ALL_EMULATION_SOURCES) $(ALL_64_EMULATION_SOURCES): $(GEN_DEPENDS)
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/etic3xcoff_onchip.Pc@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/etic4xcoff.Pc@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/etic54xcoff.Pc@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/etic80coff.Pc@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ev850.Pc@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ev850_rh850.Pc@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evanilla.Pc@am__quote@
index c0c8a697d6b281967d4868f557e2ece14c269246..1e90d883ef87b06a1f3ac65e6d9f30780369e209 100644 (file)
@@ -901,9 +901,6 @@ tic6x-*-uclinux)    targ_emul=elf32_tic6x_linux_le
                        targ_extra_emuls="elf32_tic6x_linux_be elf32_tic6x_le elf32_tic6x_be"
                        targ_extra_libpath=$targ_extra_emuls
                        ;;
-tic80-*-*)             targ_emul=tic80coff
-                       targ_extra_ofiles=
-                       ;;
 tilegx-*-*)            targ_emul=elf64tilegx
                        targ_extra_emuls="elf64tilegx_be elf32tilegx elf32tilegx_be"
                        targ_extra_libpath=$targ_extra_emuls
diff --git a/ld/emulparams/tic80coff.sh b/ld/emulparams/tic80coff.sh
deleted file mode 100644 (file)
index 5fce934..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-# This file is sourced by the genscripts.sh script.
-# These are shell variables that are used later by either genscripts
-# or on of the scripts that it sources.
-
-# The name of the scripttempl script to use.  In this case, genscripts
-# uses scripttempl/tic80coff.sc
-#
-SCRIPT_NAME=tic80coff
-
-# The name of the emultempl script to use.  If set to "template" then
-# genscripts.sh will use the script emultempl/template.em.  If not set,
-# then the default value is "generic".
-#
-# TEMPLATE_NAME=
-
-# If this is set to an nonempty string, genscripts.sh will invoke the
-# scripttempl script an extra time to create a shared library script.
-#
-# GENERATE_SHLIB_SCRIPT=
-
-# The BFD output format to use.  The scripttempl script will use it in
-# an OUTPUT_FORMAT expression in the linker script.
-#
-OUTPUT_FORMAT="coff-tic80"
-
-# This is normally set to indicate the architecture to use, such as
-# "sparc".  The scripttempl script will normally use it in an OUTPUT_ARCH
-# expression in the linker script.
-#
-ARCH=tic80
-
-# Some scripttempl scripts use this to set the entry address in an ENTRY
-# expression in the linker script.
-#
-# ENTRY=
-
-# The scripttempl script uses this to set the start address of the
-# ".text" section.
-#
-TEXT_START_ADDR=0x2000000
-
-# The genscripts.sh script uses this to set the default value of
-# DATA_ALIGNMENT when running the scripttempl script.
-#
-# SEGMENT_SIZE=
-
-# If SEGMENT_SIZE is not defined, the genscripts.sh script uses this
-# to define it.
-#
-TARGET_PAGE_SIZE=0x1000
index 846f2ab5a9bee20772de83d42c044399447a30a9..d171bb946863a1ea2d69803f64b41d6fc53c61cb 100644 (file)
@@ -292,7 +292,6 @@ etic3xcoff.c
 etic3xcoff_onchip.c
 etic4xcoff.c
 etic54xcoff.c
-etic80coff.c
 ev850.c
 ev850_rh850.c
 evanilla.c
diff --git a/ld/scripttempl/tic80coff.sc b/ld/scripttempl/tic80coff.sc
deleted file mode 100644 (file)
index 692227a..0000000
+++ /dev/null
@@ -1,86 +0,0 @@
-# Linker script for TI TMS320C80 (tic80) COFF.
-#
-# Copyright (C) 2014-2019 Free Software Foundation, Inc.
-#
-# Copying and distribution of this file, with or without modification,
-# are permitted in any medium without royalty provided the copyright
-# notice and this notice are preserved.
-#
-# Besides the shell variables set by the emulparams script, and the LD_FLAG
-# variable, the genscripts.sh script will set the following variables for each
-# time this script is run to generate one of the linker scripts for ldscripts:
-#
-# RELOCATING: Set to a non-empty string when the linker is going to be doing
-# a final relocation.
-#
-# CONSTRUCTING: Set to a non-empty string when the linker is going to be
-# building global constructor and destructor tables.
-#
-# DATA_ALIGNMENT: Set to an ALIGN expression when the output should be page
-# aligned, or to "." when generating the -N script.
-#
-# CREATE_SHLIB: Set to a non-empty string when generating a script for
-# the -shared linker arg.
-
-test -z "$TEXT_START_ADDR" && TEXT_START_ADDR="0x80000 + SIZEOF_HEADERS"
-test -z "$ENTRY" && ENTRY=__start
-
-cat <<EOF
-/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
-
-   Copying and distribution of this script, with or without modification,
-   are permitted in any medium without royalty provided the copyright
-   notice and this notice are preserved.  */
-
-OUTPUT_FORMAT("${OUTPUT_FORMAT}")
-${LIB_SEARCH_DIRS}
-
-${RELOCATING+ENTRY (${ENTRY})}
-
-SECTIONS
-{
-  .text ${RELOCATING+ $TEXT_START_ADDR} : {
-    ${RELOCATING+KEEP (*(SORT_NONE(.init)))
-    KEEP (*(SORT_NONE(.fini)))}
-    *(.text)
-  }
-  .const ALIGN(4) : {
-    *(.const)
-  }
-  .ctors ALIGN(4) : {
-    ${CONSTRUCTING+ . = ALIGN(4);}
-    ${CONSTRUCTING+ ___CTOR_LIST__ = .;}
-    ${CONSTRUCTING+ LONG(-1)}
-    *(.ctors)
-    ${CONSTRUCTING+ ___CTOR_END__ = .;}
-    ${CONSTRUCTING+ LONG(0)}
-  }
-  .dtors ALIGN(4) : {
-    ${CONSTRUCTING+ ___DTOR_LIST__ = .;}
-    ${CONSTRUCTING+ LONG(-1)}
-    ${CONSTRUCTING+ *(.dtors)}
-    ${CONSTRUCTING+ ___DTOR_END__ = .;}
-    ${CONSTRUCTING+ LONG(0)}
-  }
-  ${RELOCATING+ etext  =  .;}
-  .data : {
-    *(.data)
-    ${RELOCATING+ __edata  =  .};
-  }
-  .bss : {
-    ${RELOCATING+ __bss_start = .};
-    *(.bss)
-    *(COMMON)
-     ${RELOCATING+ _end = ALIGN(0x8)};
-     ${RELOCATING+ __end = ALIGN(0x8)};
-  }
-  .stab  0 ${RELOCATING+(NOLOAD)} :
-  {
-    [ .stab ]
-  }
-  .stabstr  0 ${RELOCATING+(NOLOAD)} :
-  {
-    [ .stabstr ]
-  }
-}
-EOF
index 26f25a4ef3082e15de0a3d22769c7b8d066f77f0..744d8f8bfa793879bae566d7fe818202d17ce5a8 100644 (file)
@@ -1,3 +1,15 @@
+2019-12-17  Alan Modra  <amodra@gmail.com>
+
+       * tic80-dis.c: Delete file.
+       * tic80-opc.c: Delete file.
+       * disassemble.c: Remove tic80 support.
+       * disassemble.h: Likewise.
+       * Makefile.am: Likewise.
+       * configure.ac: Likewise.
+       * Makefile.in: Regenerate.
+       * configure: Regenerate.
+       * po/POTFILES.in: Regenerate.
+
 2019-12-17  Alan Modra  <amodra@gmail.com>
 
        * bpf-ibld.c: Regenerate.
index 20a8a8d2c0d2eed6e7d087f1eff4d30250cf9b71..3ef0c48c1d765f0012f5c7a941c622aebaf2cb4c 100644 (file)
@@ -245,8 +245,6 @@ TARGET_LIBOPCODES_CFILES = \
        tic54x-dis.c \
        tic54x-opc.c \
        tic6x-dis.c \
-       tic80-dis.c \
-       tic80-opc.c \
        tilegx-dis.c \
        tilegx-opc.c \
        tilepro-dis.c \
index 74faef85b96abf3f4dc2cd270de18bba73e139d0..6515df0b079be220eaf95438af97036d71197f53 100644 (file)
@@ -635,8 +635,6 @@ TARGET_LIBOPCODES_CFILES = \
        tic54x-dis.c \
        tic54x-opc.c \
        tic6x-dis.c \
-       tic80-dis.c \
-       tic80-opc.c \
        tilegx-dis.c \
        tilegx-opc.c \
        tilepro-dis.c \
@@ -1051,8 +1049,6 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tic54x-dis.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tic54x-opc.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tic6x-dis.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tic80-dis.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tic80-opc.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tilegx-dis.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tilegx-opc.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tilepro-dis.Plo@am__quote@
index 6a0b919d0f9791a44948ae0d5da190173435bfb7..5903fe4fa5fa853e12e46a2527bdb10d7b689baa 100755 (executable)
@@ -12933,7 +12933,6 @@ if test x${all_targets} = xfalse ; then
        bfd_tic4x_arch)         ta="$ta tic4x-dis.lo" ;;
        bfd_tic54x_arch)        ta="$ta tic54x-dis.lo tic54x-opc.lo" ;;
        bfd_tic6x_arch)         ta="$ta tic6x-dis.lo" ;;
-       bfd_tic80_arch)         ta="$ta tic80-dis.lo tic80-opc.lo" ;;
        bfd_tilegx_arch)        ta="$ta tilegx-dis.lo tilegx-opc.lo" ;;
        bfd_tilepro_arch)       ta="$ta tilepro-dis.lo tilepro-opc.lo" ;;
        bfd_v850_arch)          ta="$ta v850-opc.lo v850-dis.lo" ;;
index 500c701a62ba7514a31defb2b0eb08e0ba76e0e2..96fb596a1e0c8a94ef817f3dddf2ee59b830c035 100644 (file)
@@ -324,7 +324,6 @@ if test x${all_targets} = xfalse ; then
        bfd_tic4x_arch)         ta="$ta tic4x-dis.lo" ;;
        bfd_tic54x_arch)        ta="$ta tic54x-dis.lo tic54x-opc.lo" ;;
        bfd_tic6x_arch)         ta="$ta tic6x-dis.lo" ;;
-       bfd_tic80_arch)         ta="$ta tic80-dis.lo tic80-opc.lo" ;;
        bfd_tilegx_arch)        ta="$ta tilegx-dis.lo tilegx-opc.lo" ;;
        bfd_tilepro_arch)       ta="$ta tilepro-dis.lo tilepro-opc.lo" ;;
        bfd_v850_arch)          ta="$ta v850-opc.lo v850-dis.lo" ;;
index 7c919972ee250a553532062de024ffd2556c85e1..cc1de6986e2d3d1d06047aa302fa184d2e469914 100644 (file)
@@ -88,7 +88,6 @@
 #define ARCH_tic4x
 #define ARCH_tic54x
 #define ARCH_tic6x
-#define ARCH_tic80
 #define ARCH_tilegx
 #define ARCH_tilepro
 #define ARCH_v850
@@ -464,11 +463,6 @@ disassembler (enum bfd_architecture a,
       disassemble = print_insn_tic6x;
       break;
 #endif
-#ifdef ARCH_tic80
-    case bfd_arch_tic80:
-      disassemble = print_insn_tic80;
-      break;
-#endif
 #ifdef ARCH_ft32
     case bfd_arch_ft32:
       disassemble = print_insn_ft32;
index ceb2814fe66cc4b7451d735230ace4aeb0d4acd2..945508519a849658601e2d3c026f79dad3bb03b8 100644 (file)
@@ -87,7 +87,6 @@ extern int print_insn_tic30           (bfd_vma, disassemble_info *);
 extern int print_insn_tic4x            (bfd_vma, disassemble_info *);
 extern int print_insn_tic54x           (bfd_vma, disassemble_info *);
 extern int print_insn_tic6x            (bfd_vma, disassemble_info *);
-extern int print_insn_tic80            (bfd_vma, disassemble_info *);
 extern int print_insn_tilegx           (bfd_vma, disassemble_info *);
 extern int print_insn_tilepro          (bfd_vma, disassemble_info *);
 extern int print_insn_v850             (bfd_vma, disassemble_info *);
index eab55fcdb13ef3a0fafefae5d517a95e87028fd3..757220476e57cfbf7e22fc175e8049e5b6ceaf50 100644 (file)
@@ -205,8 +205,6 @@ tic4x-dis.c
 tic54x-dis.c
 tic54x-opc.c
 tic6x-dis.c
-tic80-dis.c
-tic80-opc.c
 tilegx-dis.c
 tilegx-opc.c
 tilepro-dis.c
diff --git a/opcodes/tic80-dis.c b/opcodes/tic80-dis.c
deleted file mode 100644 (file)
index 3bb05c0..0000000
+++ /dev/null
@@ -1,315 +0,0 @@
-/* Print TI TMS320C80 (MVP) instructions
-   Copyright (C) 1996-2019 Free Software Foundation, Inc.
-
-   This file is part of the GNU opcodes library.
-
-   This library 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 3, or (at your option)
-   any later version.
-
-   It 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 this program; if not, write to the Free Software
-   Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
-   MA 02110-1301, USA.  */
-
-#include "sysdep.h"
-#include <stdio.h>
-#include "opcode/tic80.h"
-#include "disassemble.h"
-
-static int length;
-\f
-/* Print an integer operand.  Try to be somewhat smart about the
-   format by assuming that small positive or negative integers are
-   probably loop increment values, structure offsets, or similar
-   values that are more meaningful printed as signed decimal values.
-   Larger numbers are probably better printed as hex values.  */
-
-static void
-print_operand_integer (struct disassemble_info *info, long value)
-{
-  if ((value > 9999 || value < -9999))
-    (*info->fprintf_func) (info->stream, "%#lx", value);
-  else
-    (*info->fprintf_func) (info->stream, "%ld", value);
-}
-\f
-/* FIXME: depends upon sizeof (long) == sizeof (float) and
-   also upon host floating point format matching target
-   floating point format.  */
-
-static void
-print_operand_float (struct disassemble_info *info, long value)
-{
-  union { float f; long l; } fval;
-
-  fval.l = value;
-  (*info->fprintf_func) (info->stream, "%g", fval.f);
-}
-
-static void
-print_operand_control_register (struct disassemble_info *info, long value)
-{
-  const char *tmp;
-
-  tmp = tic80_value_to_symbol (value, TIC80_OPERAND_CR);
-  if (tmp != NULL)
-    (*info->fprintf_func) (info->stream, "%s", tmp);
-  else
-    (*info->fprintf_func) (info->stream, "%#lx", value);
-}
-
-static void
-print_operand_condition_code (struct disassemble_info *info, long value)
-{
-  const char *tmp;
-
-  tmp = tic80_value_to_symbol (value, TIC80_OPERAND_CC);
-  if (tmp != NULL)
-    (*info->fprintf_func) (info->stream, "%s", tmp);
-  else
-    (*info->fprintf_func) (info->stream, "%ld", value);
-}
-
-static void
-print_operand_bitnum (struct disassemble_info *info, long value)
-{
-  int bitnum;
-  const char *tmp;
-
-  bitnum = ~value & 0x1F;
-  tmp = tic80_value_to_symbol (bitnum, TIC80_OPERAND_BITNUM);
-  if (tmp != NULL)
-    (*info->fprintf_func) (info->stream, "%s", tmp);
-  else
-    (*info->fprintf_func) (info->stream, "%d", bitnum);
-}
-\f
-/* Print the operand as directed by the flags.  */
-
-#define M_SI(insn,op) ((((op)->flags & TIC80_OPERAND_M_SI) != 0) && ((insn) & (1 << 17)))
-#define M_LI(insn,op) ((((op)->flags & TIC80_OPERAND_M_LI) != 0) && ((insn) & (1 << 15)))
-#define R_SCALED(insn,op) ((((op)->flags & TIC80_OPERAND_SCALED) != 0) && ((insn) & (1 << 11)))
-
-static void
-print_operand (struct disassemble_info *info,
-              long value,
-              unsigned long insn,
-              const struct tic80_operand *operand,
-              bfd_vma memaddr)
-{
-  if ((operand->flags & TIC80_OPERAND_GPR) != 0)
-    {
-      (*info->fprintf_func) (info->stream, "r%ld", value);
-      if (M_SI (insn, operand) || M_LI (insn, operand))
-       {
-         (*info->fprintf_func) (info->stream, ":m");
-       }
-    }
-  else if ((operand->flags & TIC80_OPERAND_FPA) != 0)
-    (*info->fprintf_func) (info->stream, "a%ld", value);
-
-  else if ((operand->flags & TIC80_OPERAND_PCREL) != 0)
-    (*info->print_address_func) (memaddr + 4 * value, info);
-
-  else if ((operand->flags & TIC80_OPERAND_BASEREL) != 0)
-    (*info->print_address_func) (value, info);
-
-  else if ((operand->flags & TIC80_OPERAND_BITNUM) != 0)
-    print_operand_bitnum (info, value);
-
-  else if ((operand->flags & TIC80_OPERAND_CC) != 0)
-    print_operand_condition_code (info, value);
-
-  else if ((operand->flags & TIC80_OPERAND_CR) != 0)
-    print_operand_control_register (info, value);
-
-  else if ((operand->flags & TIC80_OPERAND_FLOAT) != 0)
-    print_operand_float (info, value);
-
-  else if ((operand->flags & TIC80_OPERAND_BITFIELD))
-    (*info->fprintf_func) (info->stream, "%#lx", value);
-
-  else
-    print_operand_integer (info, value);
-
-  /* If this is a scaled operand, then print the modifier.  */
-  if (R_SCALED (insn, operand))
-    (*info->fprintf_func) (info->stream, ":s");
-}
-\f
-/* Get the next 32 bit word from the instruction stream and convert it
-   into internal format in the unsigned long INSN, for which we are
-   passed the address.  Return 0 on success, -1 on error.  */
-
-static int
-fill_instruction (struct disassemble_info *info,
-                 bfd_vma memaddr,
-                 unsigned long *insnp)
-{
-  bfd_byte buffer[4];
-  int status;
-
-  /* Get the bits for the next 32 bit word and put in buffer.  */
-  status = (*info->read_memory_func) (memaddr + length, buffer, 4, info);
-  if (status != 0)
-    {
-      (*info->memory_error_func) (status, memaddr, info);
-      return -1;
-    }
-
-  /* Read was successful, so increment count of bytes read and convert
-     the bits into internal format.  */
-
-  length += 4;
-  if (info->endian == BFD_ENDIAN_LITTLE)
-    *insnp = bfd_getl32 (buffer);
-
-  else if (info->endian == BFD_ENDIAN_BIG)
-    *insnp = bfd_getb32 (buffer);
-
-  else
-    /* FIXME: Should probably just default to one or the other.  */
-    abort ();
-
-  return 0;
-}
-
-/* We have chosen an opcode table entry.  */
-
-static int
-print_one_instruction (struct disassemble_info *info,
-                      bfd_vma memaddr,
-                      unsigned long insn,
-                      const struct tic80_opcode *opcode)
-{
-  const struct tic80_operand *operand;
-  long value;
-  int status;
-  const unsigned char *opindex;
-  int close_paren;
-
-  (*info->fprintf_func) (info->stream, "%-10s", opcode->name);
-
-  for (opindex = opcode->operands; *opindex != 0; opindex++)
-    {
-      operand = tic80_operands + *opindex;
-
-      /* Extract the value from the instruction.  */
-      if (operand->extract)
-       value = (*operand->extract) (insn, NULL);
-
-      else if (operand->bits == 32)
-       {
-         status = fill_instruction (info, memaddr, (unsigned long *) &value);
-         if (status == -1)
-           return status;
-       }
-      else
-       {
-         value = (insn >> operand->shift) & ((1 << operand->bits) - 1);
-
-         if ((operand->flags & TIC80_OPERAND_SIGNED) != 0
-             && (value & (1 << (operand->bits - 1))) != 0)
-           value -= 1 << operand->bits;
-       }
-
-      /* If this operand is enclosed in parenthesis, then print
-        the open paren, otherwise just print the regular comma
-        separator, except for the first operand.  */
-      if ((operand->flags & TIC80_OPERAND_PARENS) == 0)
-       {
-         close_paren = 0;
-         if (opindex != opcode->operands)
-           (*info->fprintf_func) (info->stream, ",");
-       }
-      else
-       {
-         close_paren = 1;
-         (*info->fprintf_func) (info->stream, "(");
-       }
-
-      print_operand (info, value, insn, operand, memaddr);
-
-      /* If we printed an open paren before printing this operand, close
-        it now. The flag gets reset on each loop.  */
-      if (close_paren)
-       (*info->fprintf_func) (info->stream, ")");
-    }
-
-  return length;
-}
-\f
-/* There are no specific bits that tell us for certain whether a vector
-   instruction opcode contains one or two instructions.  However since
-   a destination register of r0 is illegal, we can check for nonzero
-   values in both destination register fields.  Only opcodes that have
-   two valid instructions will have non-zero in both.  */
-
-#define TWO_INSN(insn) ((((insn) & (0x1F << 27)) != 0) && (((insn) & (0x1F << 22)) != 0))
-
-static int
-print_instruction (struct disassemble_info *info,
-                  bfd_vma memaddr,
-                  unsigned long insn,
-                  const struct tic80_opcode *vec_opcode)
-{
-  const struct tic80_opcode *opcode;
-  const struct tic80_opcode *opcode_end;
-
-  /* Find the first opcode match in the opcodes table.  For vector
-     opcodes (vec_opcode != NULL) find the first match that is not the
-     previously found match.  FIXME: there should be faster ways to
-     search (hash table or binary search), but don't worry too much
-     about it until other TIc80 support is finished.  */
-
-  opcode_end = tic80_opcodes + tic80_num_opcodes;
-  for (opcode = tic80_opcodes; opcode < opcode_end; opcode++)
-    {
-      if ((insn & opcode->mask) == opcode->opcode &&
-         opcode != vec_opcode)
-       break;
-    }
-
-  if (opcode == opcode_end)
-    {
-      /* No match found, just print the bits as a .word directive.  */
-      (*info->fprintf_func) (info->stream, ".word %#08lx", insn);
-    }
-  else
-    {
-      /* Match found, decode the instruction.  */
-      length = print_one_instruction (info, memaddr, insn, opcode);
-      if (opcode->flags & TIC80_VECTOR && vec_opcode == NULL && TWO_INSN (insn))
-       {
-         /* There is another instruction to print from the same opcode.
-            Print the separator and then find and print the other
-            instruction.  */
-         (*info->fprintf_func) (info->stream, "   ||   ");
-         length = print_instruction (info, memaddr, insn, opcode);
-       }
-    }
-
-  return length;
-}
-\f
-int
-print_insn_tic80 (bfd_vma memaddr, struct disassemble_info *info)
-{
-  unsigned long insn;
-  int status;
-
-  length = 0;
-  info->bytes_per_line = 8;
-  status = fill_instruction (info, memaddr, &insn);
-  if (status != -1)
-    status = print_instruction (info, memaddr, insn, NULL);
-
-  return status;
-}
diff --git a/opcodes/tic80-opc.c b/opcodes/tic80-opc.c
deleted file mode 100644 (file)
index 517bf62..0000000
+++ /dev/null
@@ -1,1211 +0,0 @@
-/* Opcode table for TI TMS320C80 (MVP).
-   Copyright (C) 1996-2019 Free Software Foundation, Inc.
-
-   This file is part of the GNU opcodes library.
-
-   This library 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 3, or (at your option)
-   any later version.
-
-   It 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 this file; see the file COPYING.  If not, write to the
-   Free Software Foundation, 51 Franklin Street - Fifth Floor, Boston,
-   MA 02110-1301, USA.  */
-
-#include "sysdep.h"
-#include <stdio.h>
-#include "opcode/tic80.h"
-
-/* This file holds various tables for the TMS320C80 (MVP).
-
-   The opcode table is strictly constant data, so the compiler should
-   be able to put it in the .text section.
-
-   This file also holds the operand table.  All knowledge about
-   inserting operands into instructions and vice-versa is kept in this
-   file.
-
-   The predefined register table maps from register names to register
-   values.  */
-
-\f
-/* Table of predefined symbol names, such as general purpose registers,
-   floating point registers, condition codes, control registers, and bit
-   numbers.
-
-   The table is sorted case independently by name so that it is suitable for
-   searching via a binary search using a case independent comparison
-   function.
-
-   Note that the type of the symbol is stored in the upper bits of the value
-   field, which allows the value and type to be passed around as a unit in a
-   single int.  The types have to be masked off before using the numeric
-   value as a number.
-*/
-
-const struct predefined_symbol tic80_predefined_symbols[] =
-{
-  { "a0",      TIC80_OPERAND_FPA | 0 },
-  { "a1",      TIC80_OPERAND_FPA | 1 },
-  { "alw.b",   TIC80_OPERAND_CC | 7 },
-  { "alw.h",   TIC80_OPERAND_CC | 15 },
-  { "alw.w",   TIC80_OPERAND_CC | 23 },
-  { "ANASTAT", TIC80_OPERAND_CR | 0x34 },
-  { "BRK1",    TIC80_OPERAND_CR | 0x39 },
-  { "BRK2",    TIC80_OPERAND_CR | 0x3A },
-  { "CONFIG",  TIC80_OPERAND_CR | 2 },
-  { "DLRU",    TIC80_OPERAND_CR | 0x500 },
-  { "DTAG0",   TIC80_OPERAND_CR | 0x400 },
-  { "DTAG1",   TIC80_OPERAND_CR | 0x401 },
-  { "DTAG10",  TIC80_OPERAND_CR | 0x40A },
-  { "DTAG11",  TIC80_OPERAND_CR | 0x40B },
-  { "DTAG12",  TIC80_OPERAND_CR | 0x40C },
-  { "DTAG13",  TIC80_OPERAND_CR | 0x40D },
-  { "DTAG14",  TIC80_OPERAND_CR | 0x40E },
-  { "DTAG15",  TIC80_OPERAND_CR | 0x40F },
-  { "DTAG2",   TIC80_OPERAND_CR | 0x402 },
-  { "DTAG3",   TIC80_OPERAND_CR | 0x403 },
-  { "DTAG4",   TIC80_OPERAND_CR | 0x404 },
-  { "DTAG5",   TIC80_OPERAND_CR | 0x405 },
-  { "DTAG6",   TIC80_OPERAND_CR | 0x406 },
-  { "DTAG7",   TIC80_OPERAND_CR | 0x407 },
-  { "DTAG8",   TIC80_OPERAND_CR | 0x408 },
-  { "DTAG9",   TIC80_OPERAND_CR | 0x409 },
-  { "ECOMCNTL",        TIC80_OPERAND_CR | 0x33 },
-  { "EIP",     TIC80_OPERAND_CR | 1 },
-  { "EPC",     TIC80_OPERAND_CR | 0 },
-  { "eq.b",    TIC80_OPERAND_BITNUM  | 0 },
-  { "eq.f",    TIC80_OPERAND_BITNUM  | 20 },
-  { "eq.h",    TIC80_OPERAND_BITNUM  | 10 },
-  { "eq.w",    TIC80_OPERAND_BITNUM  | 20 },
-  { "eq0.b",   TIC80_OPERAND_CC | 2 },
-  { "eq0.h",   TIC80_OPERAND_CC | 10 },
-  { "eq0.w",   TIC80_OPERAND_CC | 18 },
-  { "FLTADR",  TIC80_OPERAND_CR | 0x11 },
-  { "FLTDTH",  TIC80_OPERAND_CR | 0x14 },
-  { "FLTDTL",  TIC80_OPERAND_CR | 0x13 },
-  { "FLTOP",   TIC80_OPERAND_CR | 0x10 },
-  { "FLTTAG",  TIC80_OPERAND_CR | 0x12 },
-  { "FPST",    TIC80_OPERAND_CR | 8 },
-  { "ge.b",    TIC80_OPERAND_BITNUM  | 5 },
-  { "ge.f",    TIC80_OPERAND_BITNUM  | 25 },
-  { "ge.h",    TIC80_OPERAND_BITNUM  | 15 },
-  { "ge.w",    TIC80_OPERAND_BITNUM  | 25 },
-  { "ge0.b",   TIC80_OPERAND_CC | 3 },
-  { "ge0.h",   TIC80_OPERAND_CC | 11 },
-  { "ge0.w",   TIC80_OPERAND_CC | 19 },
-  { "gt.b",    TIC80_OPERAND_BITNUM  | 2 },
-  { "gt.f",    TIC80_OPERAND_BITNUM  | 22 },
-  { "gt.h",    TIC80_OPERAND_BITNUM  | 12 },
-  { "gt.w",    TIC80_OPERAND_BITNUM  | 22 },
-  { "gt0.b",   TIC80_OPERAND_CC | 1 },
-  { "gt0.h",   TIC80_OPERAND_CC | 9 },
-  { "gt0.w",   TIC80_OPERAND_CC | 17 },
-  { "hi.b",    TIC80_OPERAND_BITNUM  | 6 },
-  { "hi.h",    TIC80_OPERAND_BITNUM  | 16 },
-  { "hi.w",    TIC80_OPERAND_BITNUM  | 26 },
-  { "hs.b",    TIC80_OPERAND_BITNUM  | 9 },
-  { "hs.h",    TIC80_OPERAND_BITNUM  | 19 },
-  { "hs.w",    TIC80_OPERAND_BITNUM  | 29 },
-  { "ib.f",    TIC80_OPERAND_BITNUM  | 28 },
-  { "IE",      TIC80_OPERAND_CR | 6 },
-  { "ILRU",    TIC80_OPERAND_CR | 0x300 },
-  { "in.f",    TIC80_OPERAND_BITNUM  | 27 },
-  { "IN0P",    TIC80_OPERAND_CR | 0x4000 },
-  { "IN1P",    TIC80_OPERAND_CR | 0x4001 },
-  { "INTPEN",  TIC80_OPERAND_CR | 4 },
-  { "ITAG0",   TIC80_OPERAND_CR | 0x200 },
-  { "ITAG1",   TIC80_OPERAND_CR | 0x201 },
-  { "ITAG10",  TIC80_OPERAND_CR | 0x20A },
-  { "ITAG11",  TIC80_OPERAND_CR | 0x20B },
-  { "ITAG12",  TIC80_OPERAND_CR | 0x20C },
-  { "ITAG13",  TIC80_OPERAND_CR | 0x20D },
-  { "ITAG14",  TIC80_OPERAND_CR | 0x20E },
-  { "ITAG15",  TIC80_OPERAND_CR | 0x20F },
-  { "ITAG2",   TIC80_OPERAND_CR | 0x202 },
-  { "ITAG3",   TIC80_OPERAND_CR | 0x203 },
-  { "ITAG4",   TIC80_OPERAND_CR | 0x204 },
-  { "ITAG5",   TIC80_OPERAND_CR | 0x205 },
-  { "ITAG6",   TIC80_OPERAND_CR | 0x206 },
-  { "ITAG7",   TIC80_OPERAND_CR | 0x207 },
-  { "ITAG8",   TIC80_OPERAND_CR | 0x208 },
-  { "ITAG9",   TIC80_OPERAND_CR | 0x209 },
-  { "le.b",    TIC80_OPERAND_BITNUM  | 3 },
-  { "le.f",    TIC80_OPERAND_BITNUM  | 23 },
-  { "le.h",    TIC80_OPERAND_BITNUM  | 13 },
-  { "le.w",    TIC80_OPERAND_BITNUM  | 23 },
-  { "le0.b",   TIC80_OPERAND_CC | 6 },
-  { "le0.h",   TIC80_OPERAND_CC | 14 },
-  { "le0.w",   TIC80_OPERAND_CC | 22 },
-  { "lo.b",    TIC80_OPERAND_BITNUM  | 8 },
-  { "lo.h",    TIC80_OPERAND_BITNUM  | 18 },
-  { "lo.w",    TIC80_OPERAND_BITNUM  | 28 },
-  { "ls.b",    TIC80_OPERAND_BITNUM  | 7 },
-  { "ls.h",    TIC80_OPERAND_BITNUM  | 17 },
-  { "ls.w",    TIC80_OPERAND_BITNUM  | 27 },
-  { "lt.b",    TIC80_OPERAND_BITNUM  | 4 },
-  { "lt.f",    TIC80_OPERAND_BITNUM  | 24 },
-  { "lt.h",    TIC80_OPERAND_BITNUM  | 14 },
-  { "lt.w",    TIC80_OPERAND_BITNUM  | 24 },
-  { "lt0.b",   TIC80_OPERAND_CC | 4 },
-  { "lt0.h",   TIC80_OPERAND_CC | 12 },
-  { "lt0.w",   TIC80_OPERAND_CC | 20 },
-  { "MIP",     TIC80_OPERAND_CR | 0x31 },
-  { "MPC",     TIC80_OPERAND_CR | 0x30 },
-  { "ne.b",    TIC80_OPERAND_BITNUM  | 1 },
-  { "ne.f",    TIC80_OPERAND_BITNUM  | 21 },
-  { "ne.h",    TIC80_OPERAND_BITNUM  | 11 },
-  { "ne.w",    TIC80_OPERAND_BITNUM  | 21 },
-  { "ne0.b",   TIC80_OPERAND_CC | 5 },
-  { "ne0.h",   TIC80_OPERAND_CC | 13 },
-  { "ne0.w",   TIC80_OPERAND_CC | 21 },
-  { "nev.b",   TIC80_OPERAND_CC | 0 },
-  { "nev.h",   TIC80_OPERAND_CC | 8 },
-  { "nev.w",   TIC80_OPERAND_CC | 16 },
-  { "ob.f",    TIC80_OPERAND_BITNUM  | 29 },
-  { "or.f",    TIC80_OPERAND_BITNUM  | 31 },
-  { "ou.f",    TIC80_OPERAND_BITNUM  | 26 },
-  { "OUTP",    TIC80_OPERAND_CR | 0x4002 },
-  { "PKTREQ",  TIC80_OPERAND_CR | 0xD },
-  { "PPERROR", TIC80_OPERAND_CR | 0xA },
-  { "r0",      TIC80_OPERAND_GPR | 0 },
-  { "r1",      TIC80_OPERAND_GPR | 1 },
-  { "r10",     TIC80_OPERAND_GPR | 10 },
-  { "r11",     TIC80_OPERAND_GPR | 11 },
-  { "r12",     TIC80_OPERAND_GPR | 12 },
-  { "r13",     TIC80_OPERAND_GPR | 13 },
-  { "r14",     TIC80_OPERAND_GPR | 14 },
-  { "r15",     TIC80_OPERAND_GPR | 15 },
-  { "r16",     TIC80_OPERAND_GPR | 16 },
-  { "r17",     TIC80_OPERAND_GPR | 17 },
-  { "r18",     TIC80_OPERAND_GPR | 18 },
-  { "r19",     TIC80_OPERAND_GPR | 19 },
-  { "r2",      TIC80_OPERAND_GPR | 2 },
-  { "r20",     TIC80_OPERAND_GPR | 20 },
-  { "r21",     TIC80_OPERAND_GPR | 21 },
-  { "r22",     TIC80_OPERAND_GPR | 22 },
-  { "r23",     TIC80_OPERAND_GPR | 23 },
-  { "r24",     TIC80_OPERAND_GPR | 24 },
-  { "r25",     TIC80_OPERAND_GPR | 25 },
-  { "r26",     TIC80_OPERAND_GPR | 26 },
-  { "r27",     TIC80_OPERAND_GPR | 27 },
-  { "r28",     TIC80_OPERAND_GPR | 28 },
-  { "r29",     TIC80_OPERAND_GPR | 29 },
-  { "r3",      TIC80_OPERAND_GPR | 3 },
-  { "r30",     TIC80_OPERAND_GPR | 30 },
-  { "r31",     TIC80_OPERAND_GPR | 31 },
-  { "r4",      TIC80_OPERAND_GPR | 4 },
-  { "r5",      TIC80_OPERAND_GPR | 5 },
-  { "r6",      TIC80_OPERAND_GPR | 6 },
-  { "r7",      TIC80_OPERAND_GPR | 7 },
-  { "r8",      TIC80_OPERAND_GPR | 8 },
-  { "r9",      TIC80_OPERAND_GPR | 9 },
-  { "SYSSTK",  TIC80_OPERAND_CR | 0x20 },
-  { "SYSTMP",  TIC80_OPERAND_CR | 0x21 },
-  { "TCOUNT",  TIC80_OPERAND_CR | 0xE },
-  { "TSCALE",  TIC80_OPERAND_CR | 0xF },
-  { "uo.f",    TIC80_OPERAND_BITNUM  | 30 },
-};
-
-const int tic80_num_predefined_symbols = sizeof (tic80_predefined_symbols) / sizeof (struct predefined_symbol);
-
-/* This function takes a predefined symbol name in NAME, symbol class
-   in CLASS, and translates it to a numeric value, which it returns.
-
-   If CLASS is zero, any symbol that matches NAME is translated.  If
-   CLASS is non-zero, then only a symbol that has symbol_class CLASS is
-   matched.
-
-   If no translation is possible, it returns -1, a value not used by
-   any predefined symbol. Note that the predefined symbol array is
-   presorted case independently by name.
-
-   This function is implemented with the assumption that there are no
-   duplicate names in the predefined symbol array, which happens to be
-   true at the moment.
-
- */
-
-int
-tic80_symbol_to_value (char *name, int symbol_class)
-{
-  const struct predefined_symbol *pdsp;
-  int low = 0;
-  int middle;
-  int high = tic80_num_predefined_symbols - 1;
-  int cmp;
-  int rtnval = -1;
-
-  while (low <= high)
-    {
-      middle = (low + high) / 2;
-      cmp = strcasecmp (name, tic80_predefined_symbols[middle].name);
-      if (cmp < 0)
-       {
-         high = middle - 1;
-       }
-      else if (cmp > 0)
-       {
-         low = middle + 1;
-       }
-      else
-       {
-         pdsp = &tic80_predefined_symbols[middle];
-         if ((symbol_class == 0) || (symbol_class & PDS_VALUE (pdsp)))
-           {
-             rtnval = PDS_VALUE (pdsp);
-           }
-         /* For now we assume that there are no duplicate names */
-         break;
-       }
-    }
-  return (rtnval);
-}
-
-/* This function takes a value VAL and finds a matching predefined
-   symbol that is in the operand symbol_class specified by CLASS.  If CLASS
-   is zero, the first matching symbol is returned. */
-
-const char *
-tic80_value_to_symbol (int val, int symbol_class)
-{
-  const struct predefined_symbol *pdsp;
-  int ival;
-  char *name;
-
-  name = NULL;
-  for (pdsp = tic80_predefined_symbols;
-       pdsp < tic80_predefined_symbols + tic80_num_predefined_symbols;
-       pdsp++)
-    {
-      ival = PDS_VALUE (pdsp) & ~TIC80_OPERAND_MASK;
-      if (ival == val)
-       {
-         if ((symbol_class == 0) || (symbol_class & PDS_VALUE (pdsp)))
-           {
-             /* Found the desired match */
-             name = PDS_NAME (pdsp);
-             break;
-           }
-       }
-    }
-  return (name);
-}
-
-/* This function returns a pointer to the next symbol in the predefined
-   symbol table after PDSP, or NULL if PDSP points to the last symbol.  If
-   PDSP is NULL, it returns the first symbol in the table.  Thus it can be
-   used to walk through the table by first calling it with NULL and then
-   calling it with each value it returned on the previous call, until it
-   returns NULL. */
-
-const struct predefined_symbol *
-tic80_next_predefined_symbol (const struct predefined_symbol *pdsp)
-{
-  if (pdsp == NULL)
-    {
-      pdsp = tic80_predefined_symbols;
-    }
-  else if (pdsp >= tic80_predefined_symbols &&
-          pdsp < tic80_predefined_symbols + tic80_num_predefined_symbols - 1)
-    {
-      pdsp++;
-    }
-  else
-    {
-      pdsp = NULL;
-    }
-  return (pdsp);
-}
-
-
-\f
-/* The operands table.  The fields are:
-
-       bits, shift, insertion function, extraction function, flags
- */
-
-const struct tic80_operand tic80_operands[] =
-{
-
-  /* The zero index is used to indicate the end of the list of operands.  */
-
-#define UNUSED (0)
-  { 0, 0, 0, 0, 0 },
-
-  /* Short signed immediate value in bits 14-0. */
-
-#define SSI (UNUSED + 1)
-  { 15, 0, NULL, NULL, TIC80_OPERAND_SIGNED },
-
-  /* Short unsigned immediate value in bits 14-0 */
-
-#define SUI (SSI + 1)
-  { 15, 0, NULL, NULL, 0 },
-
-  /* Short unsigned bitfield in bits 14-0.  We distinguish this
-     from a regular unsigned immediate value only for the convenience
-     of the disassembler and the user. */
-
-#define SUBF (SUI + 1)
-  { 15, 0, NULL, NULL, TIC80_OPERAND_BITFIELD },
-
-  /* Long signed immediate in following 32 bit word */
-
-#define LSI (SUBF + 1)
-  { 32, 0, NULL, NULL, TIC80_OPERAND_SIGNED },
-
-  /* Long unsigned immediate in following 32 bit word */
-
-#define LUI (LSI + 1)
-  { 32, 0, NULL, NULL, 0 },
-
-  /* Long unsigned bitfield in following 32 bit word.  We distinguish
-     this from a regular unsigned immediate value only for the
-     convenience of the disassembler and the user. */
-
-#define LUBF (LUI + 1)
-  { 32, 0, NULL, NULL, TIC80_OPERAND_BITFIELD },
-
-  /* Single precision floating point immediate in following 32 bit
-     word. */
-
-#define SPFI (LUBF + 1)
-  { 32, 0, NULL, NULL, TIC80_OPERAND_FLOAT },
-
-  /* Register in bits 4-0 */
-
-#define REG_0 (SPFI + 1)
-  { 5, 0, NULL, NULL, TIC80_OPERAND_GPR },
-
-  /* Even register in bits 4-0 */
-
-#define REG_0_E (REG_0 + 1)
-  { 5, 0, NULL, NULL, TIC80_OPERAND_GPR | TIC80_OPERAND_EVEN },
-
-  /* Register in bits 26-22 */
-
-#define REG_22 (REG_0_E + 1)
-  { 5, 22, NULL, NULL, TIC80_OPERAND_GPR },
-
-  /* Even register in bits 26-22 */
-
-#define REG_22_E (REG_22 + 1)
-  { 5, 22, NULL, NULL, TIC80_OPERAND_GPR | TIC80_OPERAND_EVEN },
-
-  /* Register in bits 31-27 */
-
-#define REG_DEST (REG_22_E + 1)
-  { 5, 27, NULL, NULL, TIC80_OPERAND_GPR },
-
-  /* Even register in bits 31-27 */
-
-#define REG_DEST_E (REG_DEST + 1)
-  { 5, 27, NULL, NULL, TIC80_OPERAND_GPR | TIC80_OPERAND_EVEN },
-
-  /* Floating point accumulator register (a0-a3) specified by bit 16 (MSB)
-     and bit 11 (LSB) */
-  /* FIXME!  Needs to use functions to insert and extract the register
-     number in bits 16 and 11. */
-
-#define REG_FPA (REG_DEST_E + 1)
-  { 0, 0, NULL, NULL, TIC80_OPERAND_FPA },
-
-  /* Short signed PC word offset in bits 14-0 */
-
-#define OFF_SS_PC (REG_FPA + 1)
-  { 15, 0, NULL, NULL, TIC80_OPERAND_PCREL | TIC80_OPERAND_SIGNED },
-
-  /* Long signed PC word offset in following 32 bit word */
-
-#define OFF_SL_PC (OFF_SS_PC + 1)
-  { 32, 0, NULL, NULL, TIC80_OPERAND_PCREL | TIC80_OPERAND_SIGNED },
-
-  /* Short signed base relative byte offset in bits 14-0 */
-
-#define OFF_SS_BR (OFF_SL_PC + 1)
-  { 15, 0, NULL, NULL, TIC80_OPERAND_BASEREL | TIC80_OPERAND_SIGNED },
-
-  /* Long signed base relative byte offset in following 32 bit word */
-
-#define OFF_SL_BR (OFF_SS_BR + 1)
-  { 32, 0, NULL, NULL, TIC80_OPERAND_BASEREL | TIC80_OPERAND_SIGNED },
-
-  /* Long signed base relative byte offset in following 32 bit word
-     with optional ":s" modifier flag in bit 11 */
-
-#define OFF_SL_BR_SCALED (OFF_SL_BR + 1)
-  { 32, 0, NULL, NULL, TIC80_OPERAND_BASEREL | TIC80_OPERAND_SIGNED | TIC80_OPERAND_SCALED },
-
-  /* BITNUM in bits 31-27 */
-
-#define BITNUM (OFF_SL_BR_SCALED + 1)
-  { 5, 27, NULL, NULL, TIC80_OPERAND_BITNUM },
-
-  /* Condition code in bits 31-27 */
-
-#define CC (BITNUM + 1)
-  { 5, 27, NULL, NULL, TIC80_OPERAND_CC },
-
-  /* Control register number in bits 14-0 */
-
-#define CR_SI (CC + 1)
-  { 15, 0, NULL, NULL, TIC80_OPERAND_CR },
-
-  /* Control register number in next 32 bit word */
-
-#define CR_LI (CR_SI + 1)
-  { 32, 0, NULL, NULL, TIC80_OPERAND_CR },
-
-  /* A base register in bits 26-22, enclosed in parens */
-
-#define REG_BASE (CR_LI + 1)
-  { 5, 22, NULL, NULL, TIC80_OPERAND_GPR | TIC80_OPERAND_PARENS },
-
-  /* A base register in bits 26-22, enclosed in parens, with optional ":m"
-     flag in bit 17 (short immediate instructions only) */
-
-#define REG_BASE_M_SI (REG_BASE + 1)
-  { 5, 22, NULL, NULL, TIC80_OPERAND_GPR | TIC80_OPERAND_PARENS | TIC80_OPERAND_M_SI },
-
-  /* A base register in bits 26-22, enclosed in parens, with optional ":m"
-   flag in bit 15 (long immediate and register instructions only) */
-
-#define REG_BASE_M_LI (REG_BASE_M_SI + 1)
-  { 5, 22, NULL, NULL, TIC80_OPERAND_GPR | TIC80_OPERAND_PARENS | TIC80_OPERAND_M_LI },
-
-  /* Scaled register in bits 4-0, with optional ":s" modifier flag in bit 11 */
-
-#define REG_SCALED (REG_BASE_M_LI + 1)
-  { 5, 0, NULL, NULL, TIC80_OPERAND_GPR | TIC80_OPERAND_SCALED },
-
-  /* Unsigned immediate in bits 4-0, used only for shift instructions */
-
-#define ROTATE (REG_SCALED + 1)
-  { 5, 0, NULL, NULL, 0 },
-
-  /* Unsigned immediate in bits 9-5, used only for shift instructions */
-#define ENDMASK (ROTATE + 1)
-  { 5, 5, NULL, NULL, TIC80_OPERAND_ENDMASK },
-
-};
-
-const int tic80_num_operands = sizeof (tic80_operands)/sizeof(*tic80_operands);
-
-\f
-/* Macros used to generate entries for the opcodes table. */
-
-#define FIXME 0
-
-/* Short-Immediate Format Instructions - basic opcode */
-#define OP_SI(x)       (((x) & 0x7F) << 15)
-#define MASK_SI                OP_SI(0x7F)
-
-/* Long-Immediate Format Instructions - basic opcode */
-#define OP_LI(x)       (((x) & 0x3FF) << 12)
-#define MASK_LI                OP_LI(0x3FF)
-
-/* Register Format Instructions - basic opcode */
-#define OP_REG(x)      OP_LI(x)        /* For readability */
-#define MASK_REG       MASK_LI         /* For readability */
-
-/* The 'n' bit at bit 10 */
-#define n(x)           ((x) << 10)
-
-/* The 'i' bit at bit 11 */
-#define i(x)           ((x) << 11)
-
-/* The 'F' bit at bit 27 */
-#define F(x)           ((x) << 27)
-
-/* The 'E' bit at bit 27 */
-#define E(x)           ((x) << 27)
-
-/* The 'M' bit at bit 15 in register and long immediate opcodes */
-#define M_REG(x)       ((x) << 15)
-#define M_LI(x)                ((x) << 15)
-
-/* The 'M' bit at bit 17 in short immediate opcodes */
-#define M_SI(x)                ((x) << 17)
-
-/* The 'SZ' field at bits 14-13 in register and long immediate opcodes */
-#define SZ_REG(x)      ((x) << 13)
-#define SZ_LI(x)       ((x) << 13)
-
-/* The 'SZ' field at bits 16-15 in short immediate opcodes */
-#define SZ_SI(x)       ((x) << 15)
-
-/* The 'D' (direct external memory access) bit at bit 10 in long immediate
-   and register opcodes. */
-#define D(x)           ((x) << 10)
-
-/* The 'S' (scale offset by data size) bit at bit 11 in long immediate
-   and register opcodes. */
-#define S(x)           ((x) << 11)
-
-/* The 'PD' field at bits 10-9 in floating point instructions */
-#define PD(x)          ((x) << 9)
-
-/* The 'P2' field at bits 8-7 in floating point instructions */
-#define P2(x)          ((x) << 7)
-
-/* The 'P1' field at bits 6-5 in floating point instructions */
-#define P1(x)          ((x) << 5)
-
-/* The 'a' field at bit 16 in vector instructions */
-#define V_a1(x)                ((x) << 16)
-
-/* The 'a' field at bit 11 in vector instructions */
-#define V_a0(x)                ((x) << 11)
-
-/* The 'm' field at bit 10 in vector instructions */
-#define V_m(x)         ((x) << 10)
-
-/* The 'S' field at bit 9 in vector instructions */
-#define V_S(x)         ((x) << 9)
-
-/* The 'Z' field at bit 8 in vector instructions */
-#define V_Z(x)         ((x) << 8)
-
-/* The 'p' field at bit 6 in vector instructions */
-#define V_p(x)         ((x) << 6)
-
-/* The opcode field at bits 21-17 for vector instructions */
-#define OP_V(x)                ((x) << 17)
-#define MASK_V         OP_V(0x1F)
-
-\f
-/* The opcode table.  Formatted for better readability on a wide screen.  Also, all
- entries with the same mnemonic are sorted so that they are adjacent in the table,
- allowing the use of a hash table to locate the first of a sequence of opcodes that have
- a particular name.  The short immediate forms also come before the long immediate forms
- so that the assembler will pick the "best fit" for the size of the operand, except for
- the case of the PC relative forms, where the long forms come first and are the default
- forms. */
-
-const struct tic80_opcode tic80_opcodes[] = {
-
-  /* The "nop" instruction is really "rdcr 0,r0".  We put it first so that this
-     specific bit pattern will get disassembled as a nop rather than an rdcr. The
-     mask of all ones ensures that this will happen. */
-
-  {"nop",      OP_SI(0x4),     ~0,             0,              {0}                     },
-
-  /* The "br" instruction is really "bbz target,r0,31".  We put it first so that
-     this specific bit pattern will get disassembled as a br rather than bbz. */
-
-  {"br",       OP_SI(0x48),    0xFFFF8000,     0,      {OFF_SS_PC}     },
-  {"br",       OP_LI(0x391),   0xFFFFF000,     0,      {OFF_SL_PC}     },
-  {"br",       OP_REG(0x390),  0xFFFFF000,     0,      {REG_0}         },
-  {"br.a",     OP_SI(0x49),    0xFFFF8000,     0,      {OFF_SS_PC}     },
-  {"br.a",     OP_LI(0x393),   0xFFFFF000,     0,      {OFF_SL_PC}     },
-  {"br.a",     OP_REG(0x392),  0xFFFFF000,     0,      {REG_0}         },
-
-  /* Signed integer ADD */
-
-  {"add",      OP_SI(0x58),    MASK_SI,        0,      {SSI, REG_22, REG_DEST}         },
-  {"add",      OP_LI(0x3B1),   MASK_LI,        0,      {LSI, REG_22, REG_DEST}         },
-  {"add",      OP_REG(0x3B0),  MASK_REG,       0,      {REG_0, REG_22, REG_DEST}       },
-
-  /* Unsigned integer ADD */
-
-  {"addu",     OP_SI(0x59),    MASK_SI,        0,      {SSI, REG_22, REG_DEST}         },
-  {"addu",     OP_LI(0x3B3),   MASK_LI,        0,      {LSI, REG_22, REG_DEST}         },
-  {"addu",     OP_REG(0x3B2),  MASK_REG,       0,      {REG_0, REG_22, REG_DEST}       },
-
-  /* Bitwise AND */
-
-  {"and",      OP_SI(0x11),    MASK_SI,        0,      {SUBF, REG_22, REG_DEST}        },
-  {"and",      OP_LI(0x323),   MASK_LI,        0,      {LUBF, REG_22, REG_DEST}        },
-  {"and",      OP_REG(0x322),  MASK_REG,       0,      {REG_0, REG_22, REG_DEST}       },
-  {"and.tt",   OP_SI(0x11),    MASK_SI,        0,      {SUBF, REG_22, REG_DEST}        },
-  {"and.tt",   OP_LI(0x323),   MASK_LI,        0,      {LUBF, REG_22, REG_DEST}        },
-  {"and.tt",   OP_REG(0x322),  MASK_REG,       0,      {REG_0, REG_22, REG_DEST}       },
-
-  /* Bitwise AND with ones complement of both sources */
-
-  {"and.ff",   OP_SI(0x18),    MASK_SI,        0,      {SUBF, REG_22, REG_DEST}        },
-  {"and.ff",   OP_LI(0x331),   MASK_LI,        0,      {LUBF, REG_22, REG_DEST}        },
-  {"and.ff",   OP_REG(0x330),  MASK_REG,       0,      {REG_0, REG_22, REG_DEST}       },
-
-  /* Bitwise AND with ones complement of source 1 */
-
-  {"and.ft",   OP_SI(0x14),    MASK_SI,        0,      {SUBF, REG_22, REG_DEST}        },
-  {"and.ft",   OP_LI(0x329),   MASK_LI,        0,      {LUBF, REG_22, REG_DEST}        },
-  {"and.ft",   OP_REG(0x328),  MASK_REG,       0,      {REG_0, REG_22, REG_DEST}       },
-
-  /* Bitwise AND with ones complement of source 2 */
-
-  {"and.tf",   OP_SI(0x12),    MASK_SI,        0,      {SUBF, REG_22, REG_DEST}        },
-  {"and.tf",   OP_LI(0x325),   MASK_LI,        0,      {LUBF, REG_22, REG_DEST}        },
-  {"and.tf",   OP_REG(0x324),  MASK_REG,       0,      {REG_0, REG_22, REG_DEST}       },
-
-  /* Branch Bit One - nonannulled */
-
-  {"bbo",      OP_SI(0x4A),    MASK_SI,        0,      {OFF_SS_PC, REG_22, BITNUM}     },
-  {"bbo",      OP_LI(0x395),   MASK_LI,        0,      {OFF_SL_PC, REG_22, BITNUM}     },
-  {"bbo",      OP_REG(0x394),  MASK_REG,       0,      {REG_0, REG_22, BITNUM}         },
-
-  /* Branch Bit One - annulled */
-
-  {"bbo.a",    OP_SI(0x4B),    MASK_SI,        0,      {OFF_SS_PC, REG_22, BITNUM}     },
-  {"bbo.a",    OP_LI(0x397),   MASK_LI,        0,      {OFF_SL_PC, REG_22, BITNUM}     },
-  {"bbo.a",    OP_REG(0x396),  MASK_REG,       0,      {REG_0, REG_22, BITNUM}         },
-
-  /* Branch Bit Zero - nonannulled */
-
-  {"bbz",      OP_SI(0x48),    MASK_SI,        0,      {OFF_SS_PC, REG_22, BITNUM}     },
-  {"bbz",      OP_LI(0x391),   MASK_LI,        0,      {OFF_SL_PC, REG_22, BITNUM}     },
-  {"bbz",      OP_REG(0x390),  MASK_REG,       0,      {REG_0, REG_22, BITNUM}         },
-
-  /* Branch Bit Zero - annulled */
-
-  {"bbz.a",    OP_SI(0x49),    MASK_SI,        0,      {OFF_SS_PC, REG_22, BITNUM}     },
-  {"bbz.a",    OP_LI(0x393),   MASK_LI,        0,      {OFF_SL_PC, REG_22, BITNUM}     },
-  {"bbz.a",    OP_REG(0x392),  MASK_REG,       0,      {REG_0, REG_22, BITNUM}         },
-
-  /* Branch Conditional - nonannulled */
-
-  {"bcnd",     OP_SI(0x4C),    MASK_SI,        0,      {OFF_SS_PC, REG_22, CC} },
-  {"bcnd",     OP_LI(0x399),   MASK_LI,        0,      {OFF_SL_PC, REG_22, CC} },
-  {"bcnd",     OP_REG(0x398),  MASK_REG,       0,      {REG_0, REG_22, CC}     },
-
-  /* Branch Conditional - annulled */
-
-  {"bcnd.a",   OP_SI(0x4D),    MASK_SI,        0,      {OFF_SS_PC, REG_22, CC} },
-  {"bcnd.a",   OP_LI(0x39B),   MASK_LI,        0,      {OFF_SL_PC, REG_22, CC} },
-  {"bcnd.a",   OP_REG(0x39A),  MASK_REG,       0,      {REG_0, REG_22, CC}     },
-
-  /* Branch Control Register */
-
-  {"brcr",     OP_SI(0x6),     MASK_SI,        0,      {CR_SI} },
-  {"brcr",     OP_LI(0x30D),   MASK_LI,        0,      {CR_LI} },
-  {"brcr",     OP_REG(0x30C),  MASK_REG,       0,      {REG_0} },
-
-  /* Branch and save return - nonannulled */
-
-  {"bsr",      OP_SI(0x40),    MASK_SI,        0,      {OFF_SS_PC, REG_DEST}   },
-  {"bsr",      OP_LI(0x381),   MASK_LI,        0,      {OFF_SL_PC, REG_DEST}   },
-  {"bsr",      OP_REG(0x380),  MASK_REG,       0,      {REG_0, REG_DEST}       },
-
-  /* Branch and save return - annulled */
-
-  {"bsr.a",    OP_SI(0x41),    MASK_SI,        0,      {OFF_SS_PC, REG_DEST}   },
-  {"bsr.a",    OP_LI(0x383),   MASK_LI,        0,      {OFF_SL_PC, REG_DEST}   },
-  {"bsr.a",    OP_REG(0x382),  MASK_REG,       0,      {REG_0, REG_DEST}       },
-
-  /* Send command */
-
-  {"cmnd",     OP_SI(0x2),     MASK_SI,        0,      {SUI}   },
-  {"cmnd",     OP_LI(0x305),   MASK_LI,        0,      {LUI}   },
-  {"cmnd",     OP_REG(0x304),  MASK_REG,       0,      {REG_0} },
-
-  /* Integer compare */
-
-  {"cmp",      OP_SI(0x50),    MASK_SI,        0,      {SSI, REG_22, REG_DEST}         },
-  {"cmp",      OP_LI(0x3A1),   MASK_LI,        0,      {LSI, REG_22, REG_DEST}         },
-  {"cmp",      OP_REG(0x3A0),  MASK_REG,       0,      {REG_0, REG_22, REG_DEST}       },
-
-  /* Flush data cache subblock - don't clear subblock preset flag */
-
-  {"dcachec",  OP_SI(0x38),    F(1) | (MASK_SI  & ~M_SI(1)),                   0, {SSI, REG_BASE_M_SI}         },
-  {"dcachec",  OP_LI(0x371),   F(1) | (MASK_LI  & ~M_LI(1))  | S(1) | D(1),    0, {LSI, REG_BASE_M_LI}         },
-  {"dcachec",  OP_REG(0x370),  F(1) | (MASK_REG & ~M_REG(1)) | S(1) | D(1),    0, {REG_0, REG_BASE_M_LI}       },
-
-  /* Flush data cache subblock - clear subblock preset flag */
-
-  {"dcachef",  OP_SI(0x38)   | F(1),   F(1) | (MASK_SI  & ~M_SI(1)),                   0, {SSI, REG_BASE_M_SI}         },
-  {"dcachef",  OP_LI(0x371)  | F(1),   F(1) | (MASK_LI  & ~M_LI(1))   | S(1) | D(1),   0, {LSI, REG_BASE_M_LI}         },
-  {"dcachef",  OP_REG(0x370) | F(1),   F(1) | (MASK_REG & ~M_REG(1)) | S(1) | D(1),    0, {REG_0, REG_BASE_M_LI}       },
-
-  /* Direct load signed data into register */
-
-  {"dld",      OP_LI(0x345)  | D(1),   (MASK_LI  & ~M_REG(1)) | D(1),  0,      {OFF_SL_BR_SCALED, REG_BASE_M_LI, REG_DEST}     },
-  {"dld",      OP_REG(0x344) | D(1),   (MASK_REG & ~M_REG(1)) | D(1),  0,      {REG_SCALED, REG_BASE_M_LI, REG_DEST}           },
-  {"dld.b",    OP_LI(0x341)  | D(1),   (MASK_LI  & ~M_REG(1)) | D(1),  0,      {OFF_SL_BR_SCALED, REG_BASE_M_LI, REG_DEST}     },
-  {"dld.b",    OP_REG(0x340) | D(1),   (MASK_REG & ~M_REG(1)) | D(1),  0,      {REG_SCALED, REG_BASE_M_LI, REG_DEST}           },
-  {"dld.d",    OP_LI(0x347)  | D(1),   (MASK_LI  & ~M_REG(1)) | D(1),  0,      {OFF_SL_BR_SCALED, REG_BASE_M_LI, REG_DEST_E}   },
-  {"dld.d",    OP_REG(0x346) | D(1),   (MASK_REG & ~M_REG(1)) | D(1),  0,      {REG_SCALED, REG_BASE_M_LI, REG_DEST_E}         },
-  {"dld.h",    OP_LI(0x343)  | D(1),   (MASK_LI  & ~M_REG(1)) | D(1),  0,      {OFF_SL_BR_SCALED, REG_BASE_M_LI, REG_DEST}     },
-  {"dld.h",    OP_REG(0x342) | D(1),   (MASK_REG & ~M_REG(1)) | D(1),  0,      {REG_SCALED, REG_BASE_M_LI, REG_DEST}           },
-
-  /* Direct load unsigned data into register */
-
-  {"dld.ub",   OP_LI(0x351)  | D(1),   (MASK_LI  &  ~M_REG(1)) | D(1), 0,      {OFF_SL_BR_SCALED, REG_BASE_M_LI, REG_DEST}     },
-  {"dld.ub",   OP_REG(0x350) | D(1),   (MASK_REG & ~M_REG(1))  | D(1), 0,      {REG_SCALED, REG_BASE_M_LI, REG_DEST}           },
-  {"dld.uh",   OP_LI(0x353)  | D(1),   (MASK_LI  &  ~M_REG(1)) | D(1), 0,      {OFF_SL_BR_SCALED, REG_BASE_M_LI, REG_DEST}     },
-  {"dld.uh",   OP_REG(0x352) | D(1),   (MASK_REG & ~M_REG(1))  | D(1), 0,      {REG_SCALED, REG_BASE_M_LI, REG_DEST}           },
-
-  /* Direct store data into memory */
-
-  {"dst",      OP_LI(0x365)  | D(1),   (MASK_LI  & ~M_REG(1)) | D(1),  0,      {OFF_SL_BR_SCALED, REG_BASE_M_LI, REG_DEST}     },
-  {"dst",      OP_REG(0x364) | D(1),   (MASK_REG & ~M_REG(1)) | D(1),  0,      {REG_SCALED, REG_BASE_M_LI, REG_DEST}           },
-  {"dst.b",    OP_LI(0x361)  | D(1),   (MASK_LI  & ~M_REG(1)) | D(1),  0,      {OFF_SL_BR_SCALED, REG_BASE_M_LI, REG_DEST}     },
-  {"dst.b",    OP_REG(0x360) | D(1),   (MASK_REG & ~M_REG(1)) | D(1),  0,      {REG_SCALED, REG_BASE_M_LI, REG_DEST}           },
-  {"dst.d",    OP_LI(0x367)  | D(1),   (MASK_LI  & ~M_REG(1)) | D(1),  0,      {OFF_SL_BR_SCALED, REG_BASE_M_LI, REG_DEST_E}   },
-  {"dst.d",    OP_REG(0x366) | D(1),   (MASK_REG & ~M_REG(1)) | D(1),  0,      {REG_SCALED, REG_BASE_M_LI, REG_DEST_E}         },
-  {"dst.h",    OP_LI(0x363)  | D(1),   (MASK_LI  & ~M_REG(1)) | D(1),  0,      {OFF_SL_BR_SCALED, REG_BASE_M_LI, REG_DEST}     },
-  {"dst.h",    OP_REG(0x362) | D(1),   (MASK_REG & ~M_REG(1)) | D(1),  0,      {REG_SCALED, REG_BASE_M_LI, REG_DEST}           },
-
-  /* Emulation stop */
-
-  {"estop",    OP_LI(0x3FC),   MASK_LI,        0,              {0}     },
-
-  /* Emulation trap */
-
-  {"etrap",    OP_SI(0x1)    | E(1),   MASK_SI  | E(1),        0,      {SUI}   },
-  {"etrap",    OP_LI(0x303)  | E(1),   MASK_LI  | E(1),        0,      {LUI}   },
-  {"etrap",    OP_REG(0x302) | E(1),   MASK_REG | E(1),        0,      {REG_0} },
-
-  /* Floating-point addition */
-
-  {"fadd.ddd", OP_REG(0x3E0) | PD(1) | P2(1) | P1(1),  MASK_REG | PD(3) | P2(3) | P1(3), 0,     {REG_0_E, REG_22_E, REG_DEST_E}        },
-  {"fadd.dsd", OP_REG(0x3E0) | PD(1) | P2(0) | P1(1),  MASK_REG | PD(3) | P2(3) | P1(3), 0,     {REG_0_E, REG_22, REG_DEST_E}  },
-  {"fadd.sdd", OP_LI(0x3E1)  | PD(1) | P2(1) | P1(0),  MASK_LI  | PD(3) | P2(3) | P1(3), 0,     {SPFI, REG_22_E, REG_DEST_E}   },
-  {"fadd.sdd", OP_REG(0x3E0) | PD(1) | P2(1) | P1(0),  MASK_REG | PD(3) | P2(3) | P1(3), 0,     {REG_0, REG_22_E, REG_DEST_E}  },
-  {"fadd.ssd", OP_LI(0x3E1)  | PD(1) | P2(0) | P1(0),  MASK_LI  | PD(3) | P2(3) | P1(3), 0,     {SPFI, REG_22, REG_DEST_E}     },
-  {"fadd.ssd", OP_REG(0x3E0) | PD(1) | P2(0) | P1(0),  MASK_REG | PD(3) | P2(3) | P1(3), 0,     {REG_0, REG_22, REG_DEST_E}    },
-  {"fadd.sss", OP_LI(0x3E1)  | PD(0) | P2(0) | P1(0),  MASK_LI  | PD(3) | P2(3) | P1(3), 0,     {SPFI, REG_22, REG_DEST}       },
-  {"fadd.sss", OP_REG(0x3E0) | PD(0) | P2(0) | P1(0),  MASK_REG | PD(3) | P2(3) | P1(3), 0,     {REG_0, REG_22, REG_DEST}      },
-
-  /* Floating point compare */
-
-  {"fcmp.dd",  OP_REG(0x3EA) | PD(0) | P2(1) | P1(1),  MASK_REG | PD(3) | P2(3) | P1(3),  0,    {REG_0_E, REG_22_E, REG_DEST}  },
-  {"fcmp.ds",  OP_REG(0x3EA) | PD(0) | P2(0) | P1(1),  MASK_REG | PD(3) | P2(3) | P1(3),  0,    {REG_0_E, REG_22, REG_DEST}    },
-  {"fcmp.sd",  OP_LI(0x3EB)  | PD(0) | P2(1) | P1(0),  MASK_LI  | PD(3) | P2(3) | P1(3),  0,    {SPFI, REG_22_E, REG_DEST}     },
-  {"fcmp.sd",  OP_REG(0x3EA) | PD(0) | P2(1) | P1(0),  MASK_REG | PD(3) | P2(3) | P1(3),  0,    {REG_0, REG_22_E, REG_DEST}    },
-  {"fcmp.ss",  OP_LI(0x3EB)  | PD(0) | P2(0) | P1(0),  MASK_LI  | PD(3) | P2(3) | P1(3),  0,    {SPFI, REG_22, REG_DEST}       },
-  {"fcmp.ss",  OP_REG(0x3EA) | PD(0) | P2(0) | P1(0),  MASK_REG | PD(3) | P2(3) | P1(3),  0,    {REG_0, REG_22, REG_DEST}      },
-
-  /* Floating point divide */
-
-  {"fdiv.ddd", OP_REG(0x3E6) | PD(1) | P2(1) | P1(1),  MASK_REG | PD(3) | P2(3) | P1(3), 0,     {REG_0_E, REG_22_E, REG_DEST_E}        },
-  {"fdiv.dsd", OP_REG(0x3E6) | PD(1) | P2(0) | P1(1),  MASK_REG | PD(3) | P2(3) | P1(3), 0,     {REG_0_E, REG_22, REG_DEST_E}  },
-  {"fdiv.sdd", OP_LI(0x3E7)  | PD(1) | P2(1) | P1(0),  MASK_LI  | PD(3) | P2(3) | P1(3), 0,     {SPFI, REG_22_E, REG_DEST_E}   },
-  {"fdiv.sdd", OP_REG(0x3E6) | PD(1) | P2(1) | P1(0),  MASK_REG | PD(3) | P2(3) | P1(3), 0,     {REG_0, REG_22_E, REG_DEST_E}  },
-  {"fdiv.ssd", OP_LI(0x3E7)  | PD(1) | P2(0) | P1(0),  MASK_LI  | PD(3) | P2(3) | P1(3), 0,     {SPFI, REG_22, REG_DEST_E}     },
-  {"fdiv.ssd", OP_REG(0x3E6) | PD(1) | P2(0) | P1(0),  MASK_REG | PD(3) | P2(3) | P1(3), 0,     {REG_0, REG_22, REG_DEST_E}    },
-  {"fdiv.sss", OP_LI(0x3E7)  | PD(0) | P2(0) | P1(0),  MASK_LI  | PD(3) | P2(3) | P1(3), 0,     {SPFI, REG_22, REG_DEST}       },
-  {"fdiv.sss", OP_REG(0x3E6) | PD(0) | P2(0) | P1(0),  MASK_REG | PD(3) | P2(3) | P1(3), 0,     {REG_0, REG_22, REG_DEST}      },
-
-  /* Floating point multiply */
-
-  {"fmpy.ddd", OP_REG(0x3E4) | PD(1) | P2(1) | P1(1),  MASK_REG | PD(3) | P2(3) | P1(3), 0,     {REG_0_E, REG_22_E, REG_DEST_E}        },
-  {"fmpy.dsd", OP_REG(0x3E4) | PD(1) | P2(0) | P1(1),  MASK_REG | PD(3) | P2(3) | P1(3), 0,     {REG_0_E, REG_22, REG_DEST_E}  },
-  {"fmpy.iii", OP_LI(0x3E5)  | PD(2) | P2(2) | P1(2),  MASK_LI  | PD(3) | P2(3) | P1(3), 0,     {LSI, REG_22, REG_DEST}        },
-  {"fmpy.iii", OP_REG(0x3E4) | PD(2) | P2(2) | P1(2),  MASK_REG | PD(3) | P2(3) | P1(3), 0,     {REG_0, REG_22, REG_DEST}      },
-  {"fmpy.sdd", OP_LI(0x3E5)  | PD(1) | P2(1) | P1(0),  MASK_LI  | PD(3) | P2(3) | P1(3), 0,     {SPFI, REG_22_E, REG_DEST_E}   },
-  {"fmpy.sdd", OP_REG(0x3E4) | PD(1) | P2(1) | P1(0),  MASK_REG | PD(3) | P2(3) | P1(3), 0,     {REG_0, REG_22_E, REG_DEST_E}  },
-  {"fmpy.ssd", OP_LI(0x3E5)  | PD(1) | P2(0) | P1(0),  MASK_LI  | PD(3) | P2(3) | P1(3), 0,     {SPFI, REG_22, REG_DEST_E}     },
-  {"fmpy.ssd", OP_REG(0x3E4) | PD(1) | P2(0) | P1(0),  MASK_REG | PD(3) | P2(3) | P1(3), 0,     {REG_0, REG_22, REG_DEST_E}    },
-  {"fmpy.sss", OP_LI(0x3E5)  | PD(0) | P2(0) | P1(0),  MASK_LI  | PD(3) | P2(3) | P1(3), 0,     {SPFI, REG_22, REG_DEST}       },
-  {"fmpy.sss", OP_REG(0x3E4) | PD(0) | P2(0) | P1(0),  MASK_REG | PD(3) | P2(3) | P1(3), 0,     {REG_0, REG_22, REG_DEST}      },
-  {"fmpy.uuu", OP_LI(0x3E5)  | PD(3) | P2(3) | P1(3),  MASK_LI  | PD(3) | P2(3) | P1(3), 0,     {LUI, REG_22, REG_DEST}        },
-  {"fmpy.uuu", OP_REG(0x3E4) | PD(3) | P2(3) | P1(3),  MASK_REG | PD(3) | P2(3) | P1(3), 0,     {REG_0, REG_22, REG_DEST}      },
-
-  /* Convert/Round to Minus Infinity */
-
-  {"frndm.dd", OP_REG(0x3E8) | PD(1) | P2(3) | P1(1),  MASK_REG | PD(3) | P2(3) | P1(3), 0,     {REG_0_E, REG_DEST_E}  },
-  {"frndm.di", OP_REG(0x3E8) | PD(2) | P2(3) | P1(1),  MASK_REG | PD(3) | P2(3) | P1(3), 0,     {REG_0_E, REG_DEST}    },
-  {"frndm.ds", OP_REG(0x3E8) | PD(0) | P2(3) | P1(1),  MASK_REG | PD(3) | P2(3) | P1(3), 0,     {REG_0_E, REG_DEST}    },
-  {"frndm.du", OP_REG(0x3E8) | PD(3) | P2(3) | P1(1),  MASK_REG | PD(3) | P2(3) | P1(3), 0,     {REG_0_E, REG_DEST}    },
-  {"frndm.id", OP_LI(0x3E9)  | PD(1) | P2(3) | P1(2),  MASK_LI  | PD(3) | P2(3) | P1(3), 0,     {LSI, REG_DEST_E}      },
-  {"frndm.id", OP_REG(0x3E8) | PD(1) | P2(3) | P1(2),  MASK_REG | PD(3) | P2(3) | P1(3), 0,     {REG_0, REG_DEST_E}    },
-  {"frndm.is", OP_LI(0x3E9)  | PD(0) | P2(3) | P1(2),  MASK_LI  | PD(3) | P2(3) | P1(3), 0,     {LSI, REG_DEST}        },
-  {"frndm.is", OP_REG(0x3E8) | PD(0) | P2(3) | P1(2),  MASK_REG | PD(3) | P2(3) | P1(3), 0,     {REG_0, REG_DEST}      },
-  {"frndm.sd", OP_LI(0x3E9)  | PD(1) | P2(3) | P1(0),  MASK_LI  | PD(3) | P2(3) | P1(3), 0,     {SPFI, REG_DEST_E}     },
-  {"frndm.sd", OP_REG(0x3E8) | PD(1) | P2(3) | P1(0),  MASK_REG | PD(3) | P2(3) | P1(3), 0,     {REG_0, REG_DEST_E}    },
-  {"frndm.si", OP_LI(0x3E9)  | PD(2) | P2(3) | P1(0),  MASK_LI  | PD(3) | P2(3) | P1(3), 0,     {SPFI, REG_DEST}       },
-  {"frndm.si", OP_REG(0x3E8) | PD(2) | P2(3) | P1(0),  MASK_REG | PD(3) | P2(3) | P1(3), 0,     {REG_0, REG_DEST}      },
-  {"frndm.ss", OP_LI(0x3E9)  | PD(0) | P2(3) | P1(0),  MASK_LI  | PD(3) | P2(3) | P1(3), 0,     {SPFI, REG_DEST}       },
-  {"frndm.ss", OP_REG(0x3E8) | PD(0) | P2(3) | P1(0),  MASK_REG | PD(3) | P2(3) | P1(3), 0,     {REG_0, REG_DEST}      },
-  {"frndm.su", OP_LI(0x3E9)  | PD(3) | P2(3) | P1(0),  MASK_LI  | PD(3) | P2(3) | P1(3), 0,     {SPFI, REG_DEST}       },
-  {"frndm.su", OP_REG(0x3E8) | PD(3) | P2(3) | P1(0),  MASK_REG | PD(3) | P2(3) | P1(3), 0,     {REG_0, REG_DEST}      },
-  {"frndm.ud", OP_LI(0x3E9)  | PD(1) | P2(3) | P1(3),  MASK_LI  | PD(3) | P2(3) | P1(3), 0,     {LSI, REG_DEST_E}      },
-  {"frndm.ud", OP_REG(0x3E8) | PD(1) | P2(3) | P1(3),  MASK_REG | PD(3) | P2(3) | P1(3), 0,     {REG_0, REG_DEST_E}    },
-  {"frndm.us", OP_LI(0x3E9)  | PD(0) | P2(3) | P1(3),  MASK_LI  | PD(3) | P2(3) | P1(3), 0,     {LSI, REG_DEST}        },
-  {"frndm.us", OP_REG(0x3E8) | PD(0) | P2(3) | P1(3),  MASK_REG | PD(3) | P2(3) | P1(3), 0,     {REG_0, REG_DEST}      },
-
-  /* Convert/Round to Nearest */
-
-  {"frndn.dd", OP_REG(0x3E8) | PD(1) | P2(0) | P1(1),  MASK_REG | PD(3) | P2(3) | P1(3), 0,     {REG_0_E, REG_DEST_E}  },
-  {"frndn.di", OP_REG(0x3E8) | PD(2) | P2(0) | P1(1),  MASK_REG | PD(3) | P2(3) | P1(3), 0,     {REG_0_E, REG_DEST}    },
-  {"frndn.ds", OP_REG(0x3E8) | PD(0) | P2(0) | P1(1),  MASK_REG | PD(3) | P2(3) | P1(3), 0,     {REG_0_E, REG_DEST}    },
-  {"frndn.du", OP_REG(0x3E8) | PD(3) | P2(0) | P1(1),  MASK_REG | PD(3) | P2(3) | P1(3), 0,     {REG_0_E, REG_DEST}    },
-  {"frndn.id", OP_LI(0x3E9)  | PD(1) | P2(0) | P1(2),  MASK_LI  | PD(3) | P2(3) | P1(3), 0,     {LSI, REG_DEST_E}      },
-  {"frndn.id", OP_REG(0x3E8) | PD(1) | P2(0) | P1(2),  MASK_REG | PD(3) | P2(3) | P1(3), 0,     {REG_0, REG_DEST_E}    },
-  {"frndn.is", OP_LI(0x3E9)  | PD(0) | P2(0) | P1(2),  MASK_LI  | PD(3) | P2(3) | P1(3), 0,     {LSI, REG_DEST}        },
-  {"frndn.is", OP_REG(0x3E8) | PD(0) | P2(0) | P1(2),  MASK_REG | PD(3) | P2(3) | P1(3), 0,     {REG_0, REG_DEST}      },
-  {"frndn.sd", OP_LI(0x3E9)  | PD(1) | P2(0) | P1(0),  MASK_LI  | PD(3) | P2(3) | P1(3), 0,     {SPFI, REG_DEST_E}     },
-  {"frndn.sd", OP_REG(0x3E8) | PD(1) | P2(0) | P1(0),  MASK_REG | PD(3) | P2(3) | P1(3), 0,     {REG_0, REG_DEST_E}    },
-  {"frndn.si", OP_LI(0x3E9)  | PD(2) | P2(0) | P1(0),  MASK_LI  | PD(3) | P2(3) | P1(3), 0,     {SPFI, REG_DEST}       },
-  {"frndn.si", OP_REG(0x3E8) | PD(2) | P2(0) | P1(0),  MASK_REG | PD(3) | P2(3) | P1(3), 0,     {REG_0, REG_DEST}      },
-  {"frndn.ss", OP_LI(0x3E9)  | PD(0) | P2(0) | P1(0),  MASK_LI  | PD(3) | P2(3) | P1(3), 0,     {SPFI, REG_DEST}       },
-  {"frndn.ss", OP_REG(0x3E8) | PD(0) | P2(0) | P1(0),  MASK_REG | PD(3) | P2(3) | P1(3), 0,     {REG_0, REG_DEST}      },
-  {"frndn.su", OP_LI(0x3E9)  | PD(3) | P2(0) | P1(0),  MASK_LI  | PD(3) | P2(3) | P1(3), 0,     {SPFI, REG_DEST}       },
-  {"frndn.su", OP_REG(0x3E8) | PD(3) | P2(0) | P1(0),  MASK_REG | PD(3) | P2(3) | P1(3), 0,     {REG_0, REG_DEST}      },
-  {"frndn.ud", OP_LI(0x3E9)  | PD(1) | P2(0) | P1(3),  MASK_LI  | PD(3) | P2(3) | P1(3), 0,     {LSI, REG_DEST_E}      },
-  {"frndn.ud", OP_REG(0x3E8) | PD(1) | P2(0) | P1(3),  MASK_REG | PD(3) | P2(3) | P1(3), 0,     {REG_0, REG_DEST_E}    },
-  {"frndn.us", OP_LI(0x3E9)  | PD(0) | P2(0) | P1(3),  MASK_LI  | PD(3) | P2(3) | P1(3), 0,     {LSI, REG_DEST}        },
-  {"frndn.us", OP_REG(0x3E8) | PD(0) | P2(0) | P1(3),  MASK_REG | PD(3) | P2(3) | P1(3), 0,     {REG_0, REG_DEST}      },
-
-  /* Convert/Round to Positive Infinity */
-
-  {"frndp.dd", OP_REG(0x3E8) | PD(1) | P2(2) | P1(1),  MASK_REG | PD(3) | P2(3) | P1(3), 0,     {REG_0_E, REG_DEST_E}  },
-  {"frndp.di", OP_REG(0x3E8) | PD(2) | P2(2) | P1(1),  MASK_REG | PD(3) | P2(3) | P1(3), 0,     {REG_0_E, REG_DEST}    },
-  {"frndp.ds", OP_REG(0x3E8) | PD(0) | P2(2) | P1(1),  MASK_REG | PD(3) | P2(3) | P1(3), 0,     {REG_0_E, REG_DEST}    },
-  {"frndp.du", OP_REG(0x3E8) | PD(3) | P2(2) | P1(1),  MASK_REG | PD(3) | P2(3) | P1(3), 0,     {REG_0_E, REG_DEST}    },
-  {"frndp.id", OP_LI(0x3E9)  | PD(1) | P2(2) | P1(2),  MASK_LI  | PD(3) | P2(3) | P1(3), 0,     {LSI, REG_DEST_E}      },
-  {"frndp.id", OP_REG(0x3E8) | PD(1) | P2(2) | P1(2),  MASK_REG | PD(3) | P2(3) | P1(3), 0,     {REG_0, REG_DEST_E}    },
-  {"frndp.is", OP_LI(0x3E9)  | PD(0) | P2(2) | P1(2),  MASK_LI  | PD(3) | P2(3) | P1(3), 0,     {LSI, REG_DEST}        },
-  {"frndp.is", OP_REG(0x3E8) | PD(0) | P2(2) | P1(2),  MASK_REG | PD(3) | P2(3) | P1(3), 0,     {REG_0, REG_DEST}      },
-  {"frndp.sd", OP_LI(0x3E9)  | PD(1) | P2(2) | P1(0),  MASK_LI  | PD(3) | P2(3) | P1(3), 0,     {SPFI, REG_DEST_E}     },
-  {"frndp.sd", OP_REG(0x3E8) | PD(1) | P2(2) | P1(0),  MASK_REG | PD(3) | P2(3) | P1(3), 0,     {REG_0, REG_DEST_E}    },
-  {"frndp.si", OP_LI(0x3E9)  | PD(2) | P2(2) | P1(0),  MASK_LI  | PD(3) | P2(3) | P1(3), 0,     {SPFI, REG_DEST}       },
-  {"frndp.si", OP_REG(0x3E8) | PD(2) | P2(2) | P1(0),  MASK_REG | PD(3) | P2(3) | P1(3), 0,     {REG_0, REG_DEST}      },
-  {"frndp.ss", OP_LI(0x3E9)  | PD(0) | P2(2) | P1(0),  MASK_LI  | PD(3) | P2(3) | P1(3), 0,     {SPFI, REG_DEST}       },
-  {"frndp.ss", OP_REG(0x3E8) | PD(0) | P2(2) | P1(0),  MASK_REG | PD(3) | P2(3) | P1(3), 0,     {REG_0, REG_DEST}      },
-  {"frndp.su", OP_LI(0x3E9)  | PD(3) | P2(2) | P1(0),  MASK_LI  | PD(3) | P2(3) | P1(3), 0,     {SPFI, REG_DEST}       },
-  {"frndp.su", OP_REG(0x3E8) | PD(3) | P2(2) | P1(0),  MASK_REG | PD(3) | P2(3) | P1(3), 0,     {REG_0, REG_DEST}      },
-  {"frndp.ud", OP_LI(0x3E9)  | PD(1) | P2(2) | P1(3),  MASK_LI  | PD(3) | P2(3) | P1(3), 0,     {LSI, REG_DEST_E}      },
-  {"frndp.ud", OP_REG(0x3E8) | PD(1) | P2(2) | P1(3),  MASK_REG | PD(3) | P2(3) | P1(3), 0,     {REG_0, REG_DEST_E}    },
-  {"frndp.us", OP_LI(0x3E9)  | PD(0) | P2(2) | P1(3),  MASK_LI  | PD(3) | P2(3) | P1(3), 0,     {LSI, REG_DEST}        },
-  {"frndp.us", OP_REG(0x3E8) | PD(0) | P2(2) | P1(3),  MASK_REG | PD(3) | P2(3) | P1(3), 0,     {REG_0, REG_DEST}      },
-
-  /* Convert/Round to Zero */
-
-  {"frndz.dd", OP_REG(0x3E8) | PD(1) | P2(1) | P1(1),  MASK_REG | PD(3) | P2(3) | P1(3), 0,     {REG_0_E, REG_DEST_E}  },
-  {"frndz.di", OP_REG(0x3E8) | PD(2) | P2(1) | P1(1),  MASK_REG | PD(3) | P2(3) | P1(3), 0,     {REG_0_E, REG_DEST}    },
-  {"frndz.ds", OP_REG(0x3E8) | PD(0) | P2(1) | P1(1),  MASK_REG | PD(3) | P2(3) | P1(3), 0,     {REG_0_E, REG_DEST}    },
-  {"frndz.du", OP_REG(0x3E8) | PD(3) | P2(1) | P1(1),  MASK_REG | PD(3) | P2(3) | P1(3), 0,     {REG_0_E, REG_DEST}    },
-  {"frndz.id", OP_LI(0x3E9)  | PD(1) | P2(1) | P1(2),  MASK_LI  | PD(3) | P2(3) | P1(3), 0,     {LSI, REG_DEST_E}      },
-  {"frndz.id", OP_REG(0x3E8) | PD(1) | P2(1) | P1(2),  MASK_REG | PD(3) | P2(3) | P1(3), 0,     {REG_0, REG_DEST_E}    },
-  {"frndz.is", OP_LI(0x3E9)  | PD(0) | P2(1) | P1(2),  MASK_LI  | PD(3) | P2(3) | P1(3), 0,     {LSI, REG_DEST}        },
-  {"frndz.is", OP_REG(0x3E8) | PD(0) | P2(1) | P1(2),  MASK_REG | PD(3) | P2(3) | P1(3), 0,     {REG_0, REG_DEST}      },
-  {"frndz.sd", OP_LI(0x3E9)  | PD(1) | P2(1) | P1(0),  MASK_LI  | PD(3) | P2(3) | P1(3), 0,     {SPFI, REG_DEST_E}     },
-  {"frndz.sd", OP_REG(0x3E8) | PD(1) | P2(1) | P1(0),  MASK_REG | PD(3) | P2(3) | P1(3), 0,     {REG_0, REG_DEST_E}    },
-  {"frndz.si", OP_LI(0x3E9)  | PD(2) | P2(1) | P1(0),  MASK_LI  | PD(3) | P2(3) | P1(3), 0,     {SPFI, REG_DEST}       },
-  {"frndz.si", OP_REG(0x3E8) | PD(2) | P2(1) | P1(0),  MASK_REG | PD(3) | P2(3) | P1(3), 0,     {REG_0, REG_DEST}      },
-  {"frndz.ss", OP_LI(0x3E9)  | PD(0) | P2(1) | P1(0),  MASK_LI  | PD(3) | P2(3) | P1(3), 0,     {SPFI, REG_DEST}       },
-  {"frndz.ss", OP_REG(0x3E8) | PD(0) | P2(1) | P1(0),  MASK_REG | PD(3) | P2(3) | P1(3), 0,     {REG_0, REG_DEST}      },
-  {"frndz.su", OP_LI(0x3E9)  | PD(3) | P2(1) | P1(0),  MASK_LI  | PD(3) | P2(3) | P1(3), 0,     {SPFI, REG_DEST}       },
-  {"frndz.su", OP_REG(0x3E8) | PD(3) | P2(1) | P1(0),  MASK_REG | PD(3) | P2(3) | P1(3), 0,     {REG_0, REG_DEST}      },
-  {"frndz.ud", OP_LI(0x3E9)  | PD(1) | P2(1) | P1(3),  MASK_LI  | PD(3) | P2(3) | P1(3), 0,     {LSI, REG_DEST_E}      },
-  {"frndz.ud", OP_REG(0x3E8) | PD(1) | P2(1) | P1(3),  MASK_REG | PD(3) | P2(3) | P1(3), 0,     {REG_0, REG_DEST_E}    },
-  {"frndz.us", OP_LI(0x3E9)  | PD(0) | P2(1) | P1(3),  MASK_LI  | PD(3) | P2(3) | P1(3), 0,     {LSI, REG_DEST}        },
-  {"frndz.us", OP_REG(0x3E8) | PD(0) | P2(1) | P1(3),  MASK_REG | PD(3) | P2(3) | P1(3), 0,     {REG_0, REG_DEST}      },
-
-  /* Floating point square root */
-
-  {"fsqrt.dd", OP_REG(0x3EE) | PD(1) | P2(0) | P1(1),  MASK_REG | PD(3) | P2(3) | P1(3), 0,     {REG_0_E, REG_DEST_E}  },
-  {"fsqrt.sd", OP_LI(0x3EF)  | PD(1) | P2(0) | P1(0),  MASK_LI  | PD(3) | P2(3) | P1(3), 0,     {SPFI, REG_DEST_E}     },
-  {"fsqrt.sd", OP_REG(0x3EE) | PD(1) | P2(0) | P1(0),  MASK_REG | PD(3) | P2(3) | P1(3), 0,     {REG_0, REG_DEST_E}    },
-  {"fsqrt.ss", OP_LI(0x3EF)  | PD(0) | P2(0) | P1(0),  MASK_LI  | PD(3) | P2(3) | P1(3), 0,     {SPFI, REG_DEST}       },
-  {"fsqrt.ss", OP_REG(0x3EE) | PD(0) | P2(0) | P1(0),  MASK_REG | PD(3) | P2(3) | P1(3), 0,     {REG_0, REG_DEST}      },
-
-  /* Floating point subtraction */
-
-  { "fsub.ddd",        OP_REG(0x3E2) | PD(1) | P2(1) | P1(1),  MASK_REG | PD(3) | P2(3) | P1(3), 0,     {REG_0_E, REG_22_E, REG_DEST_E}        },
-  { "fsub.dsd",        OP_REG(0x3E2) | PD(1) | P2(0) | P1(1),  MASK_REG | PD(3) | P2(3) | P1(3), 0,     {REG_0_E, REG_22, REG_DEST_E}  },
-  { "fsub.sdd",        OP_LI(0x3E3)  | PD(1) | P2(1) | P1(0),  MASK_LI  | PD(3) | P2(3) | P1(3), 0,     {SPFI, REG_22_E, REG_DEST_E}   },
-  { "fsub.sdd",        OP_REG(0x3E2) | PD(1) | P2(1) | P1(0),  MASK_REG | PD(3) | P2(3) | P1(3), 0,     {REG_0, REG_22_E, REG_DEST_E}  },
-  { "fsub.ssd",        OP_LI(0x3E3)  | PD(1) | P2(0) | P1(0),  MASK_LI  | PD(3) | P2(3) | P1(3), 0,     {SPFI, REG_22, REG_DEST_E}     },
-  { "fsub.ssd",        OP_REG(0x3E2) | PD(1) | P2(0) | P1(0),  MASK_REG | PD(3) | P2(3) | P1(3), 0,     {REG_0, REG_22, REG_DEST_E}    },
-  { "fsub.sss",        OP_LI(0x3E3)  | PD(0) | P2(0) | P1(0),  MASK_LI  | PD(3) | P2(3) | P1(3), 0,     {SPFI, REG_22, REG_DEST}       },
-  { "fsub.sss",        OP_REG(0x3E2) | PD(0) | P2(0) | P1(0),  MASK_REG | PD(3) | P2(3) | P1(3), 0,     {REG_0, REG_22, REG_DEST}      },
-
-  /* Illegal instructions */
-
-  {"illop0",   OP_SI(0x0),     MASK_SI,        0,      {0}     },
-  {"illopF",   0x1FF << 13,    0x1FF << 13,    0,      {0}     },
-
-  /* Jump and save return */
-
-  {"jsr",      OP_SI(0x44),    MASK_SI,        0,      {OFF_SS_BR, REG_BASE, REG_DEST} },
-  {"jsr",      OP_LI(0x389),   MASK_LI,        0,      {OFF_SL_BR, REG_BASE, REG_DEST} },
-  {"jsr",      OP_REG(0x388),  MASK_REG,       0,      {REG_0, REG_BASE, REG_DEST}     },
-  {"jsr.a",    OP_SI(0x45),    MASK_SI,        0,      {OFF_SS_BR, REG_BASE, REG_DEST} },
-  {"jsr.a",    OP_LI(0x38B),   MASK_LI,        0,      {OFF_SL_BR, REG_BASE, REG_DEST} },
-  {"jsr.a",    OP_REG(0x38A),  MASK_REG,       0,      {REG_0, REG_BASE, REG_DEST}     },
-
-  /* Load Signed Data Into Register */
-
-  {"ld",       OP_SI(0x22),            (MASK_SI  & ~M_SI(1)),          0,      {OFF_SS_BR, REG_BASE_M_SI, REG_DEST}            },
-  {"ld",       OP_LI(0x345)  | D(0),   (MASK_LI  & ~M_REG(1)) | D(1),  0,      {OFF_SL_BR_SCALED, REG_BASE_M_LI, REG_DEST}     },
-  {"ld",       OP_REG(0x344) | D(0),   (MASK_REG & ~M_REG(1)) | D(1),  0,      {REG_SCALED, REG_BASE_M_LI, REG_DEST}           },
-  {"ld.b",     OP_SI(0x20),            (MASK_SI  & ~M_SI(1)),          0,      {OFF_SS_BR, REG_BASE_M_SI, REG_DEST}            },
-  {"ld.b",     OP_LI(0x341)  | D(0),   (MASK_LI  & ~M_REG(1)) | D(1),  0,      {OFF_SL_BR_SCALED, REG_BASE_M_LI, REG_DEST}     },
-  {"ld.b",     OP_REG(0x340) | D(0),   (MASK_REG & ~M_REG(1)) | D(1),  0,      {REG_SCALED, REG_BASE_M_LI, REG_DEST}           },
-  {"ld.d",     OP_SI(0x23),            (MASK_SI  & ~M_SI(1)),          0,      {OFF_SS_BR, REG_BASE_M_SI, REG_DEST_E}          },
-  {"ld.d",     OP_LI(0x347)  | D(0),   (MASK_LI  & ~M_REG(1)) | D(1),  0,      {OFF_SL_BR_SCALED, REG_BASE_M_LI, REG_DEST_E}   },
-  {"ld.d",     OP_REG(0x346) | D(0),   (MASK_REG & ~M_REG(1)) | D(1),  0,      {REG_SCALED, REG_BASE_M_LI, REG_DEST_E}         },
-  {"ld.h",     OP_SI(0x21),            (MASK_SI  & ~M_SI(1)),          0,      {OFF_SS_BR, REG_BASE_M_SI, REG_DEST}            },
-  {"ld.h",     OP_LI(0x343)  | D(0),   (MASK_LI  & ~M_REG(1)) | D(1),  0,      {OFF_SL_BR_SCALED, REG_BASE_M_LI, REG_DEST}     },
-  {"ld.h",     OP_REG(0x342) | D(0),   (MASK_REG & ~M_REG(1)) | D(1),  0,      {REG_SCALED, REG_BASE_M_LI, REG_DEST}           },
-
-  /* Load Unsigned Data Into Register */
-
-  {"ld.ub",    OP_SI(0x28),            (MASK_SI  & ~M_SI(1)),          0,      {OFF_SS_BR, REG_BASE_M_SI, REG_DEST}            },
-  {"ld.ub",    OP_LI(0x351)  | D(0),   (MASK_LI  & ~M_REG(1)) | D(1),  0,      {OFF_SL_BR_SCALED, REG_BASE_M_LI, REG_DEST}     },
-  {"ld.ub",    OP_REG(0x350) | D(0),   (MASK_REG & ~M_REG(1)) | D(1),  0,      {REG_SCALED, REG_BASE_M_LI, REG_DEST}           },
-  {"ld.uh",    OP_SI(0x29),            (MASK_SI  & ~M_SI(1)),          0,      {OFF_SS_BR, REG_BASE_M_SI, REG_DEST}            },
-  {"ld.uh",    OP_LI(0x353)  | D(0),   (MASK_LI  & ~M_REG(1)) | D(1),  0,      {OFF_SL_BR_SCALED, REG_BASE_M_LI, REG_DEST}     },
-  {"ld.uh",    OP_REG(0x352) | D(0),   (MASK_REG & ~M_REG(1)) | D(1),  0,      {REG_SCALED, REG_BASE_M_LI, REG_DEST}           },
-
-  /* Leftmost one */
-
-  {"lmo",      OP_LI(0x3F0),   MASK_LI,        0,      {REG_22, REG_DEST}      },
-
-  /* Bitwise logical OR.  Note that "or.tt" and "or" are the same instructions. */
-
-  {"or.ff",    OP_SI(0x1E),    MASK_SI,        0,      {SUI, REG_22, REG_DEST}         },
-  {"or.ff",    OP_LI(0x33D),   MASK_LI,        0,      {LUI, REG_22, REG_DEST}         },
-  {"or.ff",    OP_REG(0x33C),  MASK_REG,       0,      {REG_0, REG_22, REG_DEST}       },
-  {"or.ft",    OP_SI(0x1D),    MASK_SI,        0,      {SUI, REG_22, REG_DEST}         },
-  {"or.ft",    OP_LI(0x33B),   MASK_LI,        0,      {LUI, REG_22, REG_DEST}         },
-  {"or.ft",    OP_REG(0x33A),  MASK_REG,       0,      {REG_0, REG_22, REG_DEST}       },
-  {"or.tf",    OP_SI(0x1B),    MASK_SI,        0,      {SUI, REG_22, REG_DEST}         },
-  {"or.tf",    OP_LI(0x337),   MASK_LI,        0,      {LUI, REG_22, REG_DEST}         },
-  {"or.tf",    OP_REG(0x336),  MASK_REG,       0,      {REG_0, REG_22, REG_DEST}       },
-  {"or.tt",    OP_SI(0x17),    MASK_SI,        0,      {SUI, REG_22, REG_DEST}         },
-  {"or.tt",    OP_LI(0x32F),   MASK_LI,        0,      {LUI, REG_22, REG_DEST}         },
-  {"or.tt",    OP_REG(0x32E),  MASK_REG,       0,      {REG_0, REG_22, REG_DEST}       },
-  {"or",       OP_SI(0x17),    MASK_SI,        0,      {SUI, REG_22, REG_DEST}         },
-  {"or",       OP_LI(0x32F),   MASK_LI,        0,      {LUI, REG_22, REG_DEST}         },
-  {"or",       OP_REG(0x32E),  MASK_REG,       0,      {REG_0, REG_22, REG_DEST}       },
-
-  /* Read Control Register */
-
-  {"rdcr",     OP_SI(0x4),     MASK_SI  | (0x1F << 22),        0,      {CR_SI, REG_DEST}       },
-  {"rdcr",     OP_LI(0x309),   MASK_LI  | (0x1F << 22),        0,      {CR_LI, REG_DEST}       },
-  {"rdcr",     OP_REG(0x308),  MASK_REG | (0x1F << 22),        0,      {REG_0, REG_DEST}       },
-
-  /* Rightmost one */
-
-  {"rmo",      OP_LI(0x3F2),   MASK_LI,        0,              {REG_22, REG_DEST}      },
-
-  /* Shift Register Left - note that rotl, shl, and ins are all alternate names for one of the shift instructions.
-     They appear prior to their sl equivalent so that they will be diassembled as the alternate name. */
-
-
-  {"ins",      OP_REG(0x31E) | i(0) | n(0),    MASK_REG | i(1) | n(1), 0,      {REG_0, ENDMASK, REG_22, REG_DEST}      },
-  {"ins",      OP_SI(0xF)    | i(0) | n(0),    MASK_SI  | i(1) | n(1), 0,      {ROTATE, ENDMASK, REG_22, REG_DEST}     },
-  {"rotl",     OP_REG(0x310) | i(0) | n(0),    MASK_REG | i(1) | n(1), 0,      {REG_0, ENDMASK, REG_22, REG_DEST}      },
-  {"rotl",     OP_SI(0x8)    | i(0) | n(0),    MASK_SI  | i(1) | n(1), 0,      {ROTATE, ENDMASK, REG_22, REG_DEST}     },
-  {"shl",      OP_REG(0x31C) | i(0) | n(0),    MASK_REG | i(1) | n(1), 0,      {REG_0, ENDMASK, REG_22, REG_DEST}      },
-  {"shl",      OP_SI(0xE)    | i(0) | n(0),    MASK_SI  | i(1) | n(1), 0,      {ROTATE, ENDMASK, REG_22, REG_DEST}     },
-  {"sl.dm",    OP_REG(0x312) | i(0) | n(0),    MASK_REG | i(1) | n(1), 0,      {REG_0, ENDMASK, REG_22, REG_DEST}      },
-  {"sl.dm",    OP_SI(0x9)    | i(0) | n(0),    MASK_SI  | i(1) | n(1), 0,      {ROTATE, ENDMASK, REG_22, REG_DEST}     },
-  {"sl.ds",    OP_REG(0x314) | i(0) | n(0),    MASK_REG | i(1) | n(1), 0,      {REG_0, ENDMASK, REG_22, REG_DEST}      },
-  {"sl.ds",    OP_SI(0xA)    | i(0) | n(0),    MASK_SI  | i(1) | n(1), 0,      {ROTATE, ENDMASK, REG_22, REG_DEST}     },
-  {"sl.dz",    OP_REG(0x310) | i(0) | n(0),    MASK_REG | i(1) | n(1), 0,      {REG_0, ENDMASK, REG_22, REG_DEST}      },
-  {"sl.dz",    OP_SI(0x8)    | i(0) | n(0),    MASK_SI  | i(1) | n(1), 0,      {ROTATE, ENDMASK, REG_22, REG_DEST}     },
-  {"sl.em",    OP_REG(0x318) | i(0) | n(0),    MASK_REG | i(1) | n(1), 0,      {REG_0, ENDMASK, REG_22, REG_DEST}      },
-  {"sl.em",    OP_SI(0xC)    | i(0) | n(0),    MASK_SI  | i(1) | n(1), 0,      {ROTATE, ENDMASK, REG_22, REG_DEST}     },
-  {"sl.es",    OP_REG(0x31A) | i(0) | n(0),    MASK_REG | i(1) | n(1), 0,      {REG_0, ENDMASK, REG_22, REG_DEST}      },
-  {"sl.es",    OP_SI(0xD)    | i(0) | n(0),    MASK_SI  | i(1) | n(1), 0,      {ROTATE, ENDMASK, REG_22, REG_DEST}     },
-  {"sl.ez",    OP_REG(0x316) | i(0) | n(0),    MASK_REG | i(1) | n(1), 0,      {REG_0, ENDMASK, REG_22, REG_DEST}      },
-  {"sl.ez",    OP_SI(0xB)    | i(0) | n(0),    MASK_SI  | i(1) | n(1), 0,      {ROTATE, ENDMASK, REG_22, REG_DEST}     },
-  {"sl.im",    OP_REG(0x31E) | i(0) | n(0),    MASK_REG | i(1) | n(1), 0,      {REG_0, ENDMASK, REG_22, REG_DEST}      },
-  {"sl.im",    OP_SI(0xF)    | i(0) | n(0),    MASK_SI  | i(1) | n(1), 0,      {ROTATE, ENDMASK, REG_22, REG_DEST}     },
-  {"sl.iz",    OP_REG(0x31C) | i(0) | n(0),    MASK_REG | i(1) | n(1), 0,      {REG_0, ENDMASK, REG_22, REG_DEST}      },
-  {"sl.iz",    OP_SI(0xE)    | i(0) | n(0),    MASK_SI  | i(1) | n(1), 0,      {ROTATE, ENDMASK, REG_22, REG_DEST}     },
-
-  /* Shift Register Left With Inverted Endmask */
-
-  {"sli.dm",   OP_REG(0x312) | i(1) | n(0),    MASK_REG | i(1) | n(1), 0,      {REG_0, ENDMASK, REG_22, REG_DEST}      },
-  {"sli.dm",   OP_SI(0x9)    | i(1) | n(0),    MASK_SI  | i(1) | n(1), 0,      {ROTATE, ENDMASK, REG_22, REG_DEST}     },
-  {"sli.ds",   OP_REG(0x314) | i(1) | n(0),    MASK_REG | i(1) | n(1), 0,      {REG_0, ENDMASK, REG_22, REG_DEST}      },
-  {"sli.ds",   OP_SI(0xA)    | i(1) | n(0),    MASK_SI  | i(1) | n(1), 0,      {ROTATE, ENDMASK, REG_22, REG_DEST}     },
-  {"sli.dz",   OP_REG(0x310) | i(1) | n(0),    MASK_REG | i(1) | n(1), 0,      {REG_0, ENDMASK, REG_22, REG_DEST}      },
-  {"sli.dz",   OP_SI(0x8)    | i(1) | n(0),    MASK_SI  | i(1) | n(1), 0,      {ROTATE, ENDMASK, REG_22, REG_DEST}     },
-  {"sli.em",   OP_REG(0x318) | i(1) | n(0),    MASK_REG | i(1) | n(1), 0,      {REG_0, ENDMASK, REG_22, REG_DEST}      },
-  {"sli.em",   OP_SI(0xC)    | i(1) | n(0),    MASK_SI  | i(1) | n(1), 0,      {ROTATE, ENDMASK, REG_22, REG_DEST}     },
-  {"sli.es",   OP_REG(0x31A) | i(1) | n(0),    MASK_REG | i(1) | n(1), 0,      {REG_0, ENDMASK, REG_22, REG_DEST}      },
-  {"sli.es",   OP_SI(0xD)    | i(1) | n(0),    MASK_SI  | i(1) | n(1), 0,      {ROTATE, ENDMASK, REG_22, REG_DEST}     },
-  {"sli.ez",   OP_REG(0x316) | i(1) | n(0),    MASK_REG | i(1) | n(1), 0,      {REG_0, ENDMASK, REG_22, REG_DEST}      },
-  {"sli.ez",   OP_SI(0xB)    | i(1) | n(0),    MASK_SI  | i(1) | n(1), 0,      {ROTATE, ENDMASK, REG_22, REG_DEST}     },
-  {"sli.im",   OP_REG(0x31E) | i(1) | n(0),    MASK_REG | i(1) | n(1), 0,      {REG_0, ENDMASK, REG_22, REG_DEST}      },
-  {"sli.im",   OP_SI(0xF)    | i(1) | n(0),    MASK_SI  | i(1) | n(1), 0,      {ROTATE, ENDMASK, REG_22, REG_DEST}     },
-  {"sli.iz",   OP_REG(0x31C) | i(1) | n(0),    MASK_REG | i(1) | n(1), 0,      {REG_0, ENDMASK, REG_22, REG_DEST}      },
-  {"sli.iz",   OP_SI(0xE)    | i(1) | n(0),    MASK_SI  | i(1) | n(1), 0,      {ROTATE, ENDMASK, REG_22, REG_DEST}     },
-
-  /* Shift Register Right - note that exts, extu, rotr, sra, and srl are all alternate names for one of the shift instructions.
-     They appear prior to their sr equivalent so that they will be diassembled as the alternate name. */
-
-  {"exts",     OP_REG(0x314) | i(0) | n(1),    MASK_REG | i(1) | n(1), 0,      {REG_0, ENDMASK, REG_22, REG_DEST}      },
-  {"exts",     OP_SI(0xA)    | i(0) | n(1),    MASK_SI  | i(1) | n(1), 0,      {ROTATE, ENDMASK, REG_22, REG_DEST}     },
-  {"extu",     OP_REG(0x310) | i(0) | n(1),    MASK_REG | i(1) | n(1), 0,      {REG_0, ENDMASK, REG_22, REG_DEST}      },
-  {"extu",     OP_SI(0x8)    | i(0) | n(1),    MASK_SI  | i(1) | n(1), 0,      {ROTATE, ENDMASK, REG_22, REG_DEST}     },
-  {"rotr",     OP_REG(0x310) | i(0) | n(1),    MASK_REG | i(1) | n(1), 0,      {REG_0, ENDMASK, REG_22, REG_DEST}      },
-  {"rotr",     OP_SI(0x8)    | i(0) | n(1),    MASK_SI  | i(1) | n(1), 0,      {ROTATE, ENDMASK, REG_22, REG_DEST}     },
-  {"sra",      OP_REG(0x31A) | i(0) | n(1),    MASK_REG | i(1) | n(1), 0,      {REG_0, ENDMASK, REG_22, REG_DEST}      },
-  {"sra",      OP_SI(0xD)    | i(0) | n(1),    MASK_SI  | i(1) | n(1), 0,      {ROTATE, ENDMASK, REG_22, REG_DEST}     },
-  {"srl",      OP_REG(0x316) | i(0) | n(1),    MASK_REG | i(1) | n(1), 0,      {REG_0, ENDMASK, REG_22, REG_DEST}      },
-  {"srl",      OP_SI(0xB)    | i(0) | n(1),    MASK_SI  | i(1) | n(1), 0,      {ROTATE, ENDMASK, REG_22, REG_DEST}     },
-  {"sr.dm",    OP_REG(0x312) | i(0) | n(1),    MASK_REG | i(1) | n(1), 0,      {REG_0, ENDMASK, REG_22, REG_DEST}      },
-  {"sr.dm",    OP_SI(0x9)    | i(0) | n(1),    MASK_SI  | i(1) | n(1), 0,      {ROTATE, ENDMASK, REG_22, REG_DEST}     },
-  {"sr.ds",    OP_REG(0x314) | i(0) | n(1),    MASK_REG | i(1) | n(1), 0,      {REG_0, ENDMASK, REG_22, REG_DEST}      },
-  {"sr.ds",    OP_SI(0xA)    | i(0) | n(1),    MASK_SI  | i(1) | n(1), 0,      {ROTATE, ENDMASK, REG_22, REG_DEST}     },
-  {"sr.dz",    OP_REG(0x310) | i(0) | n(1),    MASK_REG | i(1) | n(1), 0,      {REG_0, ENDMASK, REG_22, REG_DEST}      },
-  {"sr.dz",    OP_SI(0x8)    | i(0) | n(1),    MASK_SI  | i(1) | n(1), 0,      {ROTATE, ENDMASK, REG_22, REG_DEST}     },
-  {"sr.em",    OP_REG(0x318) | i(0) | n(1),    MASK_REG | i(1) | n(1), 0,      {REG_0, ENDMASK, REG_22, REG_DEST}      },
-  {"sr.em",    OP_SI(0xC)    | i(0) | n(1),    MASK_SI  | i(1) | n(1), 0,      {ROTATE, ENDMASK, REG_22, REG_DEST}     },
-  {"sr.es",    OP_REG(0x31A) | i(0) | n(1),    MASK_REG | i(1) | n(1), 0,      {REG_0, ENDMASK, REG_22, REG_DEST}      },
-  {"sr.es",    OP_SI(0xD)    | i(0) | n(1),    MASK_SI  | i(1) | n(1), 0,      {ROTATE, ENDMASK, REG_22, REG_DEST}     },
-  {"sr.ez",    OP_REG(0x316) | i(0) | n(1),    MASK_REG | i(1) | n(1), 0,      {REG_0, ENDMASK, REG_22, REG_DEST}      },
-  {"sr.ez",    OP_SI(0xB)    | i(0) | n(1),    MASK_SI  | i(1) | n(1), 0,      {ROTATE, ENDMASK, REG_22, REG_DEST}     },
-  {"sr.im",    OP_REG(0x31E) | i(0) | n(1),    MASK_REG | i(1) | n(1), 0,      {REG_0, ENDMASK, REG_22, REG_DEST}      },
-  {"sr.im",    OP_SI(0xF)    | i(0) | n(1),    MASK_SI  | i(1) | n(1), 0,      {ROTATE, ENDMASK, REG_22, REG_DEST}     },
-  {"sr.iz",    OP_REG(0x31C) | i(0) | n(1),    MASK_REG | i(1) | n(1), 0,      {REG_0, ENDMASK, REG_22, REG_DEST}      },
-  {"sr.iz",    OP_SI(0xE)    | i(0) | n(1),    MASK_SI  | i(1) | n(1), 0,      {ROTATE, ENDMASK, REG_22, REG_DEST}     },
-
-  /* Shift Register Right With Inverted Endmask */
-
-  {"sri.dm",   OP_REG(0x312) | i(1) | n(1),    MASK_REG | i(1) | n(1), 0,      {REG_0, ENDMASK, REG_22, REG_DEST}      },
-  {"sri.dm",   OP_SI(0x9)    | i(1) | n(1),    MASK_SI  | i(1) | n(1), 0,      {ROTATE, ENDMASK, REG_22, REG_DEST}     },
-  {"sri.ds",   OP_REG(0x314) | i(1) | n(1),    MASK_REG | i(1) | n(1), 0,      {REG_0, ENDMASK, REG_22, REG_DEST}      },
-  {"sri.ds",   OP_SI(0xA)    | i(1) | n(1),    MASK_SI  | i(1) | n(1), 0,      {ROTATE, ENDMASK, REG_22, REG_DEST}     },
-  {"sri.dz",   OP_REG(0x310) | i(1) | n(1),    MASK_REG | i(1) | n(1), 0,      {REG_0, ENDMASK, REG_22, REG_DEST}      },
-  {"sri.dz",   OP_SI(0x8)    | i(1) | n(1),    MASK_SI  | i(1) | n(1), 0,      {ROTATE, ENDMASK, REG_22, REG_DEST}     },
-  {"sri.em",   OP_REG(0x318) | i(1) | n(1),    MASK_REG | i(1) | n(1), 0,      {REG_0, ENDMASK, REG_22, REG_DEST}      },
-  {"sri.em",   OP_SI(0xC)    | i(1) | n(1),    MASK_SI  | i(1) | n(1), 0,      {ROTATE, ENDMASK, REG_22, REG_DEST}     },
-  {"sri.es",   OP_REG(0x31A) | i(1) | n(1),    MASK_REG | i(1) | n(1), 0,      {REG_0, ENDMASK, REG_22, REG_DEST}      },
-  {"sri.es",   OP_SI(0xD)    | i(1) | n(1),    MASK_SI  | i(1) | n(1), 0,      {ROTATE, ENDMASK, REG_22, REG_DEST}     },
-  {"sri.ez",   OP_REG(0x316) | i(1) | n(1),    MASK_REG | i(1) | n(1), 0,      {REG_0, ENDMASK, REG_22, REG_DEST}      },
-  {"sri.ez",   OP_SI(0xB)    | i(1) | n(1),    MASK_SI  | i(1) | n(1), 0,      {ROTATE, ENDMASK, REG_22, REG_DEST}     },
-  {"sri.im",   OP_REG(0x31E) | i(1) | n(1),    MASK_REG | i(1) | n(1), 0,      {REG_0, ENDMASK, REG_22, REG_DEST}      },
-  {"sri.im",   OP_SI(0xF)    | i(1) | n(1),    MASK_SI  | i(1) | n(1), 0,      {ROTATE, ENDMASK, REG_22, REG_DEST}     },
-  {"sri.iz",   OP_REG(0x31C) | i(1) | n(1),    MASK_REG | i(1) | n(1), 0,      {REG_0, ENDMASK, REG_22, REG_DEST}      },
-  {"sri.iz",   OP_SI(0xE)    | i(1) | n(1),    MASK_SI  | i(1) | n(1), 0,      {ROTATE, ENDMASK, REG_22, REG_DEST}     },
-
-  /* Store Data into Memory */
-
-  {"st",       OP_SI(0x32),            (MASK_SI  & ~M_SI(1)),          0,      {OFF_SS_BR, REG_BASE_M_SI, REG_DEST}            },
-  {"st",       OP_LI(0x365)  | D(0),   (MASK_LI  & ~M_REG(1)) | D(1),  0,      {OFF_SL_BR_SCALED, REG_BASE_M_LI, REG_DEST}     },
-  {"st",       OP_REG(0x364) | D(0),   (MASK_REG & ~M_REG(1)) | D(1),  0,      {REG_SCALED, REG_BASE_M_LI, REG_DEST}           },
-  {"st.b",     OP_SI(0x30),            (MASK_SI  & ~M_SI(1)),          0,      {OFF_SS_BR, REG_BASE_M_SI, REG_DEST}            },
-  {"st.b",     OP_LI(0x361)  | D(0),   (MASK_LI  & ~M_REG(1)) | D(1),  0,      {OFF_SL_BR_SCALED, REG_BASE_M_LI, REG_DEST}     },
-  {"st.b",     OP_REG(0x360) | D(0),   (MASK_REG & ~M_REG(1)) | D(1),  0,      {REG_SCALED, REG_BASE_M_LI, REG_DEST}           },
-  {"st.d",     OP_SI(0x33),            (MASK_SI  & ~M_SI(1)),          0,      {OFF_SS_BR, REG_BASE_M_SI, REG_DEST_E}          },
-  {"st.d",     OP_LI(0x367)  | D(0),   (MASK_LI  & ~M_REG(1)) | D(1),  0,      {OFF_SL_BR_SCALED, REG_BASE_M_LI, REG_DEST_E}   },
-  {"st.d",     OP_REG(0x366) | D(0),   (MASK_REG & ~M_REG(1)) | D(1),  0,      {REG_SCALED, REG_BASE_M_LI, REG_DEST_E}         },
-  {"st.h",     OP_SI(0x31),            (MASK_SI  & ~M_SI(1)),          0,      {OFF_SS_BR, REG_BASE_M_SI, REG_DEST}            },
-  {"st.h",     OP_LI(0x363)  | D(0),   (MASK_LI  & ~M_REG(1)) | D(1),  0,      {OFF_SL_BR_SCALED, REG_BASE_M_LI, REG_DEST}     },
-  {"st.h",     OP_REG(0x362) | D(0),   (MASK_REG & ~M_REG(1)) | D(1),  0,      {REG_SCALED, REG_BASE_M_LI, REG_DEST}           },
-
-  /* Signed Integer Subtract */
-
-  {"sub",      OP_SI(0x5A),    MASK_SI,        0,      {SSI, REG_22, REG_DEST}         },
-  {"sub",      OP_LI(0x3B5),   MASK_LI,        0,      {LSI, REG_22, REG_DEST}         },
-  {"sub",      OP_REG(0x3B4),  MASK_REG,       0,      {REG_0, REG_22, REG_DEST}       },
-
-  /* Unsigned Integer Subtract */
-
-  {"subu",     OP_SI(0x5B),    MASK_SI,        0,      {SSI, REG_22, REG_DEST}         },
-  {"subu",     OP_LI(0x3B7),   MASK_LI,        0,      {LSI, REG_22, REG_DEST}         },
-  {"subu",     OP_REG(0x3B6),  MASK_REG,       0,      {REG_0, REG_22, REG_DEST}       },
-
-  /* Write Control Register
-     Is a special form of the "swcr" instruction so comes before it in the table. */
-
-  {"wrcr",     OP_SI(0x5),     MASK_SI | (0x1F << 27),         0,      {CR_SI, REG_22} },
-  {"wrcr",     OP_LI(0x30B),   MASK_LI | (0x1F << 27),         0,      {CR_LI, REG_22} },
-  {"wrcr",     OP_REG(0x30A),  MASK_REG | (0x1F << 27),        0,      {REG_0, REG_22} },
-
-  /* Swap Control Register */
-
-  {"swcr",     OP_SI(0x5),     MASK_SI,        0,      {CR_SI, REG_22, REG_DEST}       },
-  {"swcr",     OP_LI(0x30B),   MASK_LI,        0,      {CR_LI, REG_22, REG_DEST}       },
-  {"swcr",     OP_REG(0x30A),  MASK_REG,       0,      {REG_0, REG_22, REG_DEST}       },
-
-  /* Trap */
-
-  {"trap",     OP_SI(0x1)    | E(0),   MASK_SI  | E(1),        0,      {SUI}   },
-  {"trap",     OP_LI(0x303)  | E(0),   MASK_LI  | E(1),        0,      {LUI}   },
-  {"trap",     OP_REG(0x302) | E(0),   MASK_REG | E(1),        0,      {REG_0} },
-
-  /* Vector Floating-Point Add */
-
-  {"vadd.dd",  OP_REG(0x3C0) | P2(1) | P1(1),  MASK_REG | V_a1(1) | P2(1) | P1(1),     TIC80_VECTOR,   {REG_0_E, REG_22_E, REG_22_E}   },
-  {"vadd.sd",  OP_LI(0x3C1)  | P2(1) | P1(0),  MASK_LI  | V_a1(1) | P2(1) | P1(1),     TIC80_VECTOR,   {SPFI, REG_22_E, REG_22_E}      },
-  {"vadd.sd",  OP_REG(0x3C0) | P2(1) | P1(0),  MASK_REG | V_a1(1) | P2(1) | P1(1),     TIC80_VECTOR,   {REG_0, REG_22_E, REG_22_E}     },
-  {"vadd.ss",  OP_LI(0x3C1)  | P2(0) | P1(0),  MASK_LI  | V_a1(1) | P2(1) | P1(1),     TIC80_VECTOR,   {SPFI, REG_22, REG_22}  },
-  {"vadd.ss",  OP_REG(0x3C0) | P2(0) | P1(0),  MASK_REG | V_a1(1) | P2(1) | P1(1),     TIC80_VECTOR,   {REG_0, REG_22, REG_22} },
-
-  /* Vector Floating-Point Multiply and Add to Accumulator FIXME! This is not yet fully implemented.
-   From the documentation there appears to be no way to tell the difference between the opcodes for
-   instructions that have register destinations and instructions that have accumulator destinations.
-   Further investigation is necessary.  Since this isn't critical to getting a TIC80 toolchain up
-   and running, it is defered until later. */
-
-  /* Vector Floating-Point Multiply
-   Note: If r0 is in the destination reg, then this is a "vector nop" instruction. */
-
-  {"vmpy.dd",  OP_REG(0x3C4) | P2(1) | P1(1),  MASK_REG | V_a1(1) | P2(1) | P1(1),     TIC80_VECTOR | TIC80_NO_R0_DEST, {REG_0_E, REG_22_E, REG_22_E} },
-  {"vmpy.sd",  OP_LI(0x3C5)  | P2(1) | P1(0),  MASK_LI  | V_a1(1) | P2(1) | P1(1),     TIC80_VECTOR | TIC80_NO_R0_DEST, {SPFI, REG_22_E, REG_22_E}     },
-  {"vmpy.sd",  OP_REG(0x3C4) | P2(1) | P1(0),  MASK_REG | V_a1(1) | P2(1) | P1(1),     TIC80_VECTOR | TIC80_NO_R0_DEST, {REG_0, REG_22_E, REG_22_E} },
-  {"vmpy.ss",  OP_LI(0x3C5)  | P2(0) | P1(0),  MASK_LI  | V_a1(1) | P2(1) | P1(1),     TIC80_VECTOR | TIC80_NO_R0_DEST, {SPFI, REG_22, REG_22} },
-  {"vmpy.ss",  OP_REG(0x3C4) | P2(0) | P1(0),  MASK_REG | V_a1(1) | P2(1) | P1(1),     TIC80_VECTOR | TIC80_NO_R0_DEST, {REG_0, REG_22, REG_22} },
-
-  /* Vector Floating-Point Multiply and Subtract from Accumulator
-     FIXME: See note above for vmac instruction */
-
-  /* Vector Floating-Point Subtract Accumulator From Source
-     FIXME: See note above for vmac instruction */
-
-  /* Vector Round With Floating-Point Input
-     FIXME: See note above for vmac instruction */
-
-  /* Vector Round with Integer Input */
-
-  {"vrnd.id",  OP_LI (0x3CB)  | P2(1) | P1(0), MASK_LI  | V_a0(1) | V_Z(1) | P2(1) | P1(1),    TIC80_VECTOR, {LSI, REG_22_E}},
-  {"vrnd.id",  OP_REG (0x3CA) | P2(1) | P1(0), MASK_REG | V_a0(1) | V_Z(1) | P2(1) | P1(1),    TIC80_VECTOR, {REG_0, REG_22_E}},
-  {"vrnd.is",  OP_LI (0x3CB)  | P2(0) | P1(0), MASK_LI  | V_a0(1) | V_Z(1) | P2(1) | P1(1),    TIC80_VECTOR, {LSI, REG_22}},
-  {"vrnd.is",  OP_REG (0x3CA) | P2(0) | P1(0), MASK_REG | V_a0(1) | V_Z(1) | P2(1) | P1(1),    TIC80_VECTOR, {REG_0, REG_22}},
-  {"vrnd.ud",  OP_LI (0x3CB)  | P2(1) | P1(1), MASK_LI  | V_a0(1) | V_Z(1) | P2(1) | P1(1),    TIC80_VECTOR, {LUI, REG_22_E}},
-  {"vrnd.ud",  OP_REG (0x3CA) | P2(1) | P1(1), MASK_REG | V_a0(1) | V_Z(1) | P2(1) | P1(1),    TIC80_VECTOR, {REG_0, REG_22_E}},
-  {"vrnd.us",  OP_LI (0x3CB)  | P2(0) | P1(1), MASK_LI  | V_a0(1) | V_Z(1) | P2(1) | P1(1),    TIC80_VECTOR, {LUI, REG_22}},
-  {"vrnd.us",  OP_REG (0x3CA) | P2(0) | P1(1), MASK_REG | V_a0(1) | V_Z(1) | P2(1) | P1(1),    TIC80_VECTOR, {REG_0, REG_22}},
-
-  /* Vector Floating-Point Subtract */
-
-  {"vsub.dd",  OP_REG(0x3C2) | P2(1) | P1(1),  MASK_REG | V_a1(1) | P2(1) | P1(1),     TIC80_VECTOR,   {REG_0_E, REG_22_E, REG_22_E}   },
-  {"vsub.sd",  OP_LI(0x3C3)  | P2(1) | P1(0),  MASK_LI  | V_a1(1) | P2(1) | P1(1),     TIC80_VECTOR,   {SPFI, REG_22_E, REG_22_E}      },
-  {"vsub.sd",  OP_REG(0x3C2) | P2(1) | P1(0),  MASK_REG | V_a1(1) | P2(1) | P1(1),     TIC80_VECTOR,   {REG_0, REG_22_E, REG_22_E}     },
-  {"vsub.ss",  OP_LI(0x3C3)  | P2(0) | P1(0),  MASK_LI  | V_a1(1) | P2(1) | P1(1),     TIC80_VECTOR,   {SPFI, REG_22, REG_22}  },
-  {"vsub.ss",  OP_REG(0x3C2) | P2(0) | P1(0),  MASK_REG | V_a1(1) | P2(1) | P1(1),     TIC80_VECTOR,   {REG_0, REG_22, REG_22} },
-
-  /* Vector Load Data Into Register - Note that the vector load/store instructions come after the other
-   vector instructions so that the disassembler will always print the load/store instruction second for
-   vector instructions that have two instructions in the same opcode. */
-
-  {"vld0.d",   OP_V(0x1E) | V_m(1) | V_S(1) | V_p(0),  MASK_V | V_m(1) | V_S(1) | V_p(1),      TIC80_VECTOR, {REG_DEST_E} },
-  {"vld0.s",   OP_V(0x1E) | V_m(1) | V_S(0) | V_p(0),  MASK_V | V_m(1) | V_S(1) | V_p(1),      TIC80_VECTOR, {REG_DEST} },
-  {"vld1.d",   OP_V(0x1E) | V_m(1) | V_S(1) | V_p(1),  MASK_V | V_m(1) | V_S(1) | V_p(1),      TIC80_VECTOR, {REG_DEST_E} },
-  {"vld1.s",   OP_V(0x1E) | V_m(1) | V_S(0) | V_p(1),  MASK_V | V_m(1) | V_S(1) | V_p(1),      TIC80_VECTOR, {REG_DEST} },
-
-  /* Vector Store Data Into Memory - Note that the vector load/store instructions come after the other
-   vector instructions so that the disassembler will always print the load/store instruction second for
-   vector instructions that have two instructions in the same opcode. */
-
-  {"vst.d",    OP_V(0x1E) | V_m(0) | V_S(1) | V_p(1),  MASK_V | V_m(1) | V_S(1) | V_p(1),      TIC80_VECTOR, {REG_DEST_E} },
-  {"vst.s",    OP_V(0x1E) | V_m(0) | V_S(0) | V_p(1),  MASK_V | V_m(1) | V_S(1) | V_p(1),      TIC80_VECTOR, {REG_DEST} },
-
-  {"xnor",     OP_SI(0x19),    MASK_SI,        0,      {SUBF, REG_22, REG_DEST} },
-  {"xnor",     OP_LI(0x333),   MASK_LI,        0,      {LUBF, REG_22, REG_DEST} },
-  {"xnor",     OP_REG(0x332),  MASK_REG,       0,      {REG_0, REG_22, REG_DEST} },
-
-  {"xor",      OP_SI(0x16),    MASK_SI,        0,      {SUBF, REG_22, REG_DEST} },
-  {"xor",      OP_LI(0x32D),   MASK_LI,        0,      {LUBF, REG_22, REG_DEST} },
-  {"xor",      OP_REG(0x32C),  MASK_REG,       0,      {REG_0, REG_22, REG_DEST} },
-
-};
-
-const int tic80_num_opcodes = sizeof (tic80_opcodes) / sizeof (tic80_opcodes[0]);