/* Simulator/Opcode generator for the Renesas
   (formerly Hitachi) / SuperH Inc. Super-H architecture.

   Written by Steve Chamberlain of Cygnus Support.
   sac@cygnus.com

   This file is part of SH sim.


		THIS SOFTWARE IS NOT COPYRIGHTED

   Cygnus offers the following for use in the public domain.  Cygnus
   makes no warranty with regard to the software or it's performance
   and the user accepts the software "AS IS" with all faults.

   CYGNUS DISCLAIMS ANY WARRANTIES, EXPRESS OR IMPLIED, WITH REGARD TO
   THIS SOFTWARE INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
   MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.

*/

/* This program generates the opcode table for the assembler and
   the simulator code.

   -t		prints a pretty table for the assembler manual
   -s		generates the simulator code jump table
   -d		generates a define table
   -x		generates the simulator code switch statement
   default 	used to generate the opcode tables

*/

#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include "libiberty.h"

#define MAX_NR_STUFF 42

typedef struct
{
  const char * const defs;
  const char * const refs;
  const char * const name;
  const char * const code;
  const char * const stuff[MAX_NR_STUFF];
  int index;
} op;


static op tab[] =
{

  { "n", "", "add #<imm>,<REG_N>", "0111nnnni8*1....",
    {
      "R[n] += SEXT (i);",
      "if (i == 0) {",
      "  UNDEF(n); /* see #ifdef PARANOID */",
      "  break;",
      "}",
    },
  },
  { "n", "mn", "add <REG_M>,<REG_N>", "0011nnnnmmmm1100",
    {
      "R[n] += R[m];",
    },
  },

  { "n", "mn", "addc <REG_M>,<REG_N>", "0011nnnnmmmm1110",
    {
      "ult = R[n] + T;",
      "SET_SR_T (ult < R[n]);",
      "R[n] = ult + R[m];",
      "SET_SR_T (T || (R[n] < ult));",
    },
  },

  { "n", "mn", "addv <REG_M>,<REG_N>", "0011nnnnmmmm1111",
    {
      "ult = R[n] + R[m];",
      "SET_SR_T ((~(R[n] ^ R[m]) & (ult ^ R[n])) >> 31);",
      "R[n] = ult;",
    },
  },

  { "0", "0", "and #<imm>,R0", "11001001i8*1....",
    {
      "R0 &= i;",
    },
  },
  { "n", "nm", "and <REG_M>,<REG_N>", "0010nnnnmmmm1001",
    {
      "R[n] &= R[m];",
    },
  },
  { "", "0", "and.b #<imm>,@(R0,GBR)", "11001101i8*1....",
    {
      "MA (1);",
      "WBAT (GBR + R0, RBAT (GBR + R0) & i);",
    },
  },

  { "", "", "bf <bdisp8>", "10001011i8p1....",
    {
      "RAISE_EXCEPTION_IF_IN_DELAY_SLOT ();",
      "if (!T) {",
      "  SET_NIP (PC + 4 + (SEXT (i) * 2));",
      "  cycles += 2;",
      "}",
    },
  },

  { "", "", "bf.s <bdisp8>", "10001111i8p1....",
    {
      "RAISE_EXCEPTION_IF_IN_DELAY_SLOT ();",
      "if (!T) {",
      "  SET_NIP (PC + 4 + (SEXT (i) * 2));",
      "  cycles += 2;",
      "  Delay_Slot (PC + 2);",
      "}",
    },
  },

  { "", "n", "bit32 #imm3,@(disp12,<REG_N>)", "0011nnnni8*11001",
    {
      "/* 32-bit logical bit-manipulation instructions.  */",
      "int word2 = RIAT (nip);",
      "RAISE_EXCEPTION_IF_IN_DELAY_SLOT ();",
      "i >>= 4;	/* BOGUS: Using only three bits of 'i'.  */",
      "/* MSB of 'i' must be zero.  */",
      "if (i > 7)",
      "  RAISE_EXCEPTION (SIGILL);",
      "MA (1);",
      "do_blog_insn (1 << i, (word2 & 0xfff) + R[n],",
      "              (word2 >> 12) & 0xf, memory, maskb);",
      "SET_NIP (nip + 2);	/* Consume 2 more bytes.  */",
    },
  },
  { "", "", "bra <bdisp12>", "1010i12.........",
    {
      "RAISE_EXCEPTION_IF_IN_DELAY_SLOT ();",
      "SET_NIP (PC + 4 + (SEXT12 (i) * 2));",
      "cycles += 2;",
      "Delay_Slot (PC + 2);",
    },
  },

  { "", "n", "braf <REG_N>", "0000nnnn00100011",
    {
      "RAISE_EXCEPTION_IF_IN_DELAY_SLOT ();",
      "SET_NIP (PC + 4 + R[n]);",
      "cycles += 2;",
      "Delay_Slot (PC + 2);",
    },
  },

  { "", "", "bsr <bdisp12>", "1011i12.........",
    {
      "RAISE_EXCEPTION_IF_IN_DELAY_SLOT ();",
      "PR = PH2T (PC + 4);",
      "SET_NIP (PC + 4 + (SEXT12 (i) * 2));",
      "cycles += 2;",
      "Delay_Slot (PC + 2);",
    },
  },

  { "", "n", "bsrf <REG_N>", "0000nnnn00000011",
    {
      "RAISE_EXCEPTION_IF_IN_DELAY_SLOT ();",
      "PR = PH2T (PC) + 4;",
      "SET_NIP (PC + 4 + R[n]);",
      "cycles += 2;",
      "Delay_Slot (PC + 2);",
    },
  },

  { "", "", "bt <bdisp8>", "10001001i8p1....",
    {
      "RAISE_EXCEPTION_IF_IN_DELAY_SLOT ();",
      "if (T) {",
      "  SET_NIP (PC + 4 + (SEXT (i) * 2));",
      "  cycles += 2;",
      "}",
    },
  },

  { "", "m", "bld/st #<imm>, <REG_M>", "10000111mmmmi4*1",
    {
      "/* MSB of 'i' is true for load, false for store.  */",
      "if (i <= 7)",
      "  if (T)",
      "    R[m] |= (1 << i);",
      "  else",
      "    R[m] &= ~(1 << i);",
      "else",
      "  SET_SR_T ((R[m] & (1 << (i - 8))) != 0);",
    },
  },
  { "m", "m", "bset/clr #<imm>, <REG_M>", "10000110mmmmi4*1",
    {
      "/* MSB of 'i' is true for set, false for clear.  */",
      "if (i <= 7)",
      "  R[m] &= ~(1 << i);",
      "else",
      "  R[m] |= (1 << (i - 8));",
    },
  },
  { "n", "n", "clips.b <REG_N>", "0100nnnn10010001",
    {
      "if (R[n] < -128 || R[n] > 127) {",
      "  L (n);",
      "  SET_SR_CS (1);",
      "  if (R[n] > 127)",
      "    R[n] = 127;",
      "  else if (R[n] < -128)",
      "    R[n] = -128;",
      "}",
    },
  },
  { "n", "n", "clips.w <REG_N>", "0100nnnn10010101",
    {
      "if (R[n] < -32768 || R[n] > 32767) {",
      "  L (n);",
      "  SET_SR_CS (1);",
      "  if (R[n] > 32767)",
      "    R[n] = 32767;",
      "  else if (R[n] < -32768)",
      "    R[n] = -32768;",
      "}",
    },
  },
  { "n", "n", "clipu.b <REG_N>", "0100nnnn10000001",
    {
      "if (R[n] < -256 || R[n] > 255) {",
      "  L (n);",
      "  SET_SR_CS (1);",
      "  R[n] = 255;",
      "}",
    },
  },
  { "n", "n", "clipu.w <REG_N>", "0100nnnn10000101",
    {
      "if (R[n] < -65536 || R[n] > 65535) {",
      "  L (n);",
      "  SET_SR_CS (1);",
      "  R[n] = 65535;",
      "}",
    },
  },
  { "n", "0n", "divs R0,<REG_N>", "0100nnnn10010100",
    {
      "RAISE_EXCEPTION_IF_IN_DELAY_SLOT ();",
      "if (R0 == 0)",
      "  R[n] = 0x7fffffff;",
      "else if (R0 == -1 && R[n] == 0x80000000)",
      "  R[n] = 0x7fffffff;",
      "else R[n] /= R0;",
      "L (n);",
    },
  },
  { "n", "0n", "divu R0,<REG_N>", "0100nnnn10000100",
    {
      "RAISE_EXCEPTION_IF_IN_DELAY_SLOT ();",
      "if (R0 == 0)",
      "  R[n] = 0xffffffff;",
      "/* FIXME: The result may be implementation-defined if it is outside */",
      "/* the range of signed int (i.e. if R[n] was negative and R0 == 1).  */",
      "else R[n] = R[n] / (unsigned int) R0;",
      "L (n);",
    },
  },
  { "n", "0n", "mulr R0,<REG_N>", "0100nnnn10000000",
    {
      "R[n] = (R[n] * R0) & 0xffffffff;",
      "L (n);",
    },
  },
  { "0", "n", "ldbank @<REG_N>,R0", "0100nnnn11100101",
    {
      "int regn = (R[n] >> 2) & 0x1f;",
      "int bankn = (R[n] >> 7) & 0x1ff;",
      "if (regn > 19)",
      "  regn = 19;	/* FIXME what should happen? */",
      "R0 = saved_state.asregs.regstack[bankn].regs[regn];",
      "L (0);",
    },
  },
  { "", "0n", "stbank R0,@<REG_N>", "0100nnnn11100001",
    {
      "int regn = (R[n] >> 2) & 0x1f;",
      "int bankn = (R[n] >> 7) & 0x1ff;",
      "if (regn > 19)",
      "  regn = 19;	/* FIXME what should happen? */",
      "saved_state.asregs.regstack[bankn].regs[regn] = R0;",
    },
  },
  { "", "", "resbank", "0000000001011011",
    {
      "int i;",
      "RAISE_EXCEPTION_IF_IN_DELAY_SLOT ();",
      /* FIXME: cdef all */
      "if (BO) {	/* Bank Overflow */",
      /* FIXME: how do we know when to reset BO?  */
      "  for (i = 0; i <= 14; i++) {",
      "    R[i] = RLAT (R[15]);",
      "    MA (1);",
      "    R[15] += 4;",
      "  }",
      "  PR = RLAT (R[15]);",
      "  R[15] += 4;",
      "  MA (1);",
      "  GBR = RLAT (R[15]);",
      "  R[15] += 4;",
      "  MA (1);",
      "  MACH = RLAT (R[15]);",
      "  R[15] += 4;",
      "  MA (1);",
      "  MACL = RLAT (R[15]);",
      "  R[15] += 4;",
      "  MA (1);",
      "}",
      "else if (BANKN == 0)	/* Bank Underflow */",
      "  RAISE_EXCEPTION (SIGILL);",	/* FIXME: what exception? */
      "else {",
      "  SET_BANKN (BANKN - 1);",
      "  for (i = 0; i <= 14; i++)",
      "    R[i] = saved_state.asregs.regstack[BANKN].regs[i];",
      "  MACH = saved_state.asregs.regstack[BANKN].regs[15];",
      "  PR   = saved_state.asregs.regstack[BANKN].regs[17];",
      "  GBR  = saved_state.asregs.regstack[BANKN].regs[18];",
      "  MACL = saved_state.asregs.regstack[BANKN].regs[19];",
      "}",
    },
  },
  { "f", "f-", "movml.l <REG_N>,@-R15", "0100nnnn11110001",
    {
      "/* Push Rn...R0 (if n==15, push pr and R14...R0).  */",
      "do {",
      "  MA (1);",
      "  R[15] -= 4;",
      "  if (n == 15)",
      "    WLAT (R[15], PR);",
      "  else",
      "    WLAT (R[15], R[n]);",
      "} while (n-- > 0);",
    },
  },
  { "f", "f+", "movml.l @R15+,<REG_N>", "0100nnnn11110101",
    {
      "/* Pop R0...Rn (if n==15, pop R0...R14 and pr).  */",
      "int i = 0;\n",
      "do {",
      "  MA (1);",
      "  if (i == 15)",
      "    PR = RLAT (R[15]);",
      "  else",
      "    R[i] = RLAT (R[15]);",
      "  R[15] += 4;",
      "} while (i++ < n);",
    },
  },
  { "f", "f-", "movmu.l <REG_N>,@-R15", "0100nnnn11110000",
    {
      "/* Push pr, R14...Rn (if n==15, push pr).  */",	/* FIXME */
      "int i = 15;\n",
      "do {",
      "  MA (1);",
      "  R[15] -= 4;",
      "  if (i == 15)",
      "    WLAT (R[15], PR);",
      "  else",
      "    WLAT (R[15], R[i]);",
      "} while (i-- > n);",
    },
  },
  { "f", "f+", "movmu.l @R15+,<REG_N>", "0100nnnn11110100",
    {
      "/* Pop Rn...R14, pr (if n==15, pop pr).  */",	/* FIXME */
      "do {",
      "  MA (1);",
      "  if (n == 15)",
      "    PR = RLAT (R[15]);",
      "  else",
      "    R[n] = RLAT (R[15]);",
      "  R[15] += 4;",
      "} while (n++ < 15);",
    },
  },
  { "", "", "nott", "0000000001101000",
    {
      "SET_SR_T (T == 0);",
    },
  },

  { "", "", "bt.s <bdisp8>", "10001101i8p1....",
    {
      "RAISE_EXCEPTION_IF_IN_DELAY_SLOT ();",
      "if (T) {",
      "  SET_NIP (PC + 4 + (SEXT (i) * 2));",
      "  cycles += 2;",
      "  Delay_Slot (PC + 2);",
      "}",
    },
  },

  { "", "", "clrmac", "0000000000101000",
    {
      "MACH = 0;",
      "MACL = 0;",
    },
  },

  { "", "", "clrs", "0000000001001000",
    {
      "SET_SR_S (0);",
    },
  },

  { "", "", "clrt", "0000000000001000",
    {
      "SET_SR_T (0);",
    },
  },

  /* sh4a */
  { "", "", "clrdmxy", "0000000010001000",
    {
      "saved_state.asregs.sr &= ~(SR_MASK_DMX | SR_MASK_DMY);"
    },
  },

  { "", "0", "cmp/eq #<imm>,R0", "10001000i8*1....",
    {
      "SET_SR_T (R0 == SEXT (i));",
    },
  },
  { "", "mn", "cmp/eq <REG_M>,<REG_N>", "0011nnnnmmmm0000",
    {
      "SET_SR_T (R[n] == R[m]);",
    },
  },
  { "", "mn", "cmp/ge <REG_M>,<REG_N>", "0011nnnnmmmm0011",
    {
      "SET_SR_T (R[n] >= R[m]);",
    },
  },
  { "", "mn", "cmp/gt <REG_M>,<REG_N>", "0011nnnnmmmm0111",
    {
      "SET_SR_T (R[n] > R[m]);",
    },
  },
  { "", "mn", "cmp/hi <REG_M>,<REG_N>", "0011nnnnmmmm0110",
    {
      "SET_SR_T (UR[n] > UR[m]);",
    },
  },
  { "", "mn", "cmp/hs <REG_M>,<REG_N>", "0011nnnnmmmm0010",
    {
      "SET_SR_T (UR[n] >= UR[m]);",
    },
  },
  { "", "n", "cmp/pl <REG_N>", "0100nnnn00010101",
    {
      "SET_SR_T (R[n] > 0);",
    },
  },
  { "", "n", "cmp/pz <REG_N>", "0100nnnn00010001",
    {
      "SET_SR_T (R[n] >= 0);",
    },
  },
  { "", "mn", "cmp/str <REG_M>,<REG_N>", "0010nnnnmmmm1100",
    {
      "ult = R[n] ^ R[m];",
      "SET_SR_T (((ult & 0xff000000) == 0)",
      "          | ((ult & 0xff0000) == 0)",
      "          | ((ult & 0xff00) == 0)",
      "          | ((ult & 0xff) == 0));",
    },
  },

  { "", "mn", "div0s <REG_M>,<REG_N>", "0010nnnnmmmm0111",
    {
      "SET_SR_Q ((R[n] & sbit) != 0);",
      "SET_SR_M ((R[m] & sbit) != 0);",
      "SET_SR_T (M != Q);",
    },
  },

  { "", "", "div0u", "0000000000011001",
    {
      "SET_SR_M (0);",
      "SET_SR_Q (0);",
      "SET_SR_T (0);",
    },
  },

  { "n", "nm", "div1 <REG_M>,<REG_N>", "0011nnnnmmmm0100",
    {
      "div1 (&R0, m, n/*, T*/);",
    },
  },

  { "", "nm", "dmuls.l <REG_M>,<REG_N>", "0011nnnnmmmm1101",
    {
      "dmul_s (R[n], R[m]);",
    },
  },

  { "", "nm", "dmulu.l <REG_M>,<REG_N>", "0011nnnnmmmm0101",
    {
      "dmul_u (R[n], R[m]);",
    },
  },

  { "n", "n", "dt <REG_N>", "0100nnnn00010000",
    {
      "R[n]--;",
      "SET_SR_T (R[n] == 0);",
    },
  },

  { "n", "m", "exts.b <REG_M>,<REG_N>", "0110nnnnmmmm1110",
    {
      "R[n] = SEXT (R[m]);",
    },
  },
  { "n", "m", "exts.w <REG_M>,<REG_N>", "0110nnnnmmmm1111",
    {
      "R[n] = SEXTW (R[m]);",
    },
  },

  { "n", "m", "extu.b <REG_M>,<REG_N>", "0110nnnnmmmm1100",
    {
      "R[n] = (R[m] & 0xff);",
    },
  },
  { "n", "m", "extu.w <REG_M>,<REG_N>", "0110nnnnmmmm1101",
    {
      "R[n] = (R[m] & 0xffff);",
    },
  },

  /* sh2e */
  { "", "", "fabs <FREG_N>", "1111nnnn01011101",
    {
      "  union",
      "  {",
      "    unsigned int i;",
      "    float f;",
      "  } u;",
      "  u.f = FR (n);",
      "  u.i &= 0x7fffffff;",
      "  SET_FR (n, u.f);",
    },
  },

  /* sh2e */
  { "", "", "fadd <FREG_M>,<FREG_N>", "1111nnnnmmmm0000",
    {
      "FP_OP (n, +, m);",
    },
  },

  /* sh2e */
  { "", "", "fcmp/eq <FREG_M>,<FREG_N>", "1111nnnnmmmm0100",
    {
      "FP_CMP (n, ==, m);",
    },
  },
  /* sh2e */
  { "", "", "fcmp/gt <FREG_M>,<FREG_N>", "1111nnnnmmmm0101",
    {
      "FP_CMP (n, >, m);",
    },
  },

  /* sh4 */
  { "", "", "fcnvds <DR_N>,FPUL", "1111nnnn10111101",
    {
      "if (! FPSCR_PR || n & 1)",
      "  RAISE_EXCEPTION (SIGILL);",
      "else",
      "{",
      "  union",
      "  {",
      "    int i;",
      "    float f;",
      "  } u;",
      "  u.f = DR (n);",
      "  FPUL = u.i;",
      "}",
    },
  },

  /* sh4 */
  { "", "", "fcnvsd FPUL,<DR_N>", "1111nnnn10101101",
    {
      "if (! FPSCR_PR || n & 1)",
      "  RAISE_EXCEPTION (SIGILL);",
      "else",
      "{",
      "  union",
      "  {",
      "    int i;",
      "    float f;",
      "  } u;",
      "  u.i = FPUL;",
      "  SET_DR (n, u.f);",
      "}",
    },
  },

  /* sh2e */
  { "", "", "fdiv <FREG_M>,<FREG_N>", "1111nnnnmmmm0011",
    {
      "FP_OP (n, /, m);",
      "/* FIXME: check for DP and (n & 1) == 0?  */",
    },
  },

  /* sh4 */
  { "", "", "fipr <FV_M>,<FV_N>", "1111vvVV11101101",
    {
      "if (FPSCR_PR)",
      "  RAISE_EXCEPTION (SIGILL);",
      "else",
      "{",
      "  double fsum = 0;",
      "  if (saved_state.asregs.bfd_mach == bfd_mach_sh2a)",
      "    RAISE_EXCEPTION (SIGILL);",
      "  /* FIXME: check for nans and infinities.  */",
      "  fsum += FR (v1+0) * FR (v2+0);",
      "  fsum += FR (v1+1) * FR (v2+1);",
      "  fsum += FR (v1+2) * FR (v2+2);",
      "  fsum += FR (v1+3) * FR (v2+3);",
      "  SET_FR (v1+3, fsum);",
      "}",
    },
  },

  /* sh2e */
  { "", "", "fldi0 <FREG_N>", "1111nnnn10001101",
    {
      "SET_FR (n, (float) 0.0);",
      "/* FIXME: check for DP and (n & 1) == 0?  */",
    },
  },

  /* sh2e */
  { "", "", "fldi1 <FREG_N>", "1111nnnn10011101",
    {
      "SET_FR (n, (float) 1.0);",
      "/* FIXME: check for DP and (n & 1) == 0?  */",
    },
  },

  /* sh2e */
  { "", "", "flds <FREG_N>,FPUL", "1111nnnn00011101",
    {
      "  union",
      "  {",
      "    int i;",
      "    float f;",
      "  } u;",
      "  u.f = FR (n);",
      "  FPUL = u.i;",
    },
  },

  /* sh2e */
  { "", "", "float FPUL,<FREG_N>", "1111nnnn00101101",
    {
      /* sh4 */
      "if (FPSCR_PR)",
      "  SET_DR (n, (double) FPUL);",
      "else",
      "{",
      "  SET_FR (n, (float) FPUL);",
      "}",
    },
  },

  /* sh2e */
  { "", "", "fmac <FREG_0>,<FREG_M>,<FREG_N>", "1111nnnnmmmm1110",
    {
      "SET_FR (n, FR (m) * FR (0) + FR (n));",
      "/* FIXME: check for DP and (n & 1) == 0? */",
    },
  },

  /* sh2e */
  { "", "", "fmov <FREG_M>,<FREG_N>", "1111nnnnmmmm1100",
    {
      /* sh4 */
      "if (FPSCR_SZ) {",
      "  int ni = XD_TO_XF (n);",
      "  int mi = XD_TO_XF (m);",
      "  SET_XF (ni + 0, XF (mi + 0));",
      "  SET_XF (ni + 1, XF (mi + 1));",
      "}",
      "else",
      "{",
      "  SET_FR (n, FR (m));",
      "}",
    },
  },
  /* sh2e */
  { "", "n", "fmov.s <FREG_M>,@<REG_N>", "1111nnnnmmmm1010",
    {
      /* sh4 */
      "if (FPSCR_SZ) {",
      "  MA (2);",
      "  WDAT (R[n], m);",
      "}",
      "else",
      "{",
      "  MA (1);",
      "  WLAT (R[n], FI (m));",
      "}",
    },
  },
  /* sh2e */
  { "", "m", "fmov.s @<REG_M>,<FREG_N>", "1111nnnnmmmm1000",
    {
      /* sh4 */
      "if (FPSCR_SZ) {",
      "  MA (2);",
      "  RDAT (R[m], n);",
      "}",
      "else",
      "{",
      "  MA (1);",
      "  SET_FI (n, RLAT (R[m]));",
      "}",
    },
  },
  /* sh2a */
  { "", "n", "fmov.s @(disp12,<REG_N>), <FREG_M>", "0011nnnnmmmm0001",
    {
      "/* and fmov.s <FREG_N>, @(disp12,<FREG_M>)",
      "   and mov.bwl <REG_N>, @(disp12,<REG_M>)",
      "   and mov.bwl @(disp12,<REG_N>),<REG_M>",
      "   and movu.bw @(disp12,<REG_N>),<REG_M>.  */",
      "int word2 = RIAT (nip);",
      "RAISE_EXCEPTION_IF_IN_DELAY_SLOT ();",
      "SET_NIP (nip + 2);	/* Consume 2 more bytes.  */",
      "MA (1);",
      "do_long_move_insn (word2 & 0xf000, word2 & 0x0fff, m, n, &thislock);",
    },
  },
  /* sh2e */
  { "m", "m", "fmov.s @<REG_M>+,<FREG_N>", "1111nnnnmmmm1001",
    {
      /* sh4 */
      "if (FPSCR_SZ) {",
      "  MA (2);",
      "  RDAT (R[m], n);",
      "  R[m] += 8;",
      "}",
      "else",
      "{",
      "  MA (1);",
      "  SET_FI (n, RLAT (R[m]));",
      "  R[m] += 4;",
      "}",
    },
  },
  /* sh2e */
  { "n", "n", "fmov.s <FREG_M>,@-<REG_N>", "1111nnnnmmmm1011",
    {
      /* sh4 */
      "if (FPSCR_SZ) {",
      "  MA (2);",
      "  R[n] -= 8;",
      "  WDAT (R[n], m);",
      "}",
      "else",
      "{",
      "  MA (1);",
      "  R[n] -= 4;",
      "  WLAT (R[n], FI (m));",
      "}",
    },
  },
  /* sh2e */
  { "", "0m", "fmov.s @(R0,<REG_M>),<FREG_N>", "1111nnnnmmmm0110",
    {
      /* sh4 */
      "if (FPSCR_SZ) {",
      "  MA (2);",
      "  RDAT (R[0]+R[m], n);",
      "}",
      "else",
      "{",
      "  MA (1);",
      "  SET_FI (n, RLAT (R[0] + R[m]));",
      "}",
    },
  },
  /* sh2e */
  { "", "0n", "fmov.s <FREG_M>,@(R0,<REG_N>)", "1111nnnnmmmm0111",
    {
      /* sh4 */
      "if (FPSCR_SZ) {",
      "  MA (2);",
      "  WDAT (R[0]+R[n], m);",
      "}",
      "else",
      "{",
      "  MA (1);",
      "  WLAT ((R[0]+R[n]), FI (m));",
      "}",
    },
  },

  /* sh4:
     See fmov instructions above for move to/from extended fp registers.  */

  /* sh2e */
  { "", "", "fmul <FREG_M>,<FREG_N>", "1111nnnnmmmm0010",
    {
      "FP_OP (n, *, m);",
    },
  },

  /* sh2e */
  { "", "", "fneg <FREG_N>", "1111nnnn01001101",
    {
      "  union",
      "  {",
      "    unsigned int i;",
      "    float f;",
      "  } u;",
      "  u.f = FR (n);",
      "  u.i ^= 0x80000000;",
      "  SET_FR (n, u.f);",
    },
  },

  /* sh4a */
  { "", "", "fpchg", "1111011111111101",
    {
      "SET_FPSCR (GET_FPSCR () ^ FPSCR_MASK_PR);",
    },
  },

  /* sh4 */
  { "", "", "frchg", "1111101111111101",
    {
      "if (FPSCR_PR)",
      "  RAISE_EXCEPTION (SIGILL);",
      "else if (saved_state.asregs.bfd_mach == bfd_mach_sh2a)",
      "  RAISE_EXCEPTION (SIGILL);",
      "else",
      "  SET_FPSCR (GET_FPSCR () ^ FPSCR_MASK_FR);",
    },
  },

  /* sh4 */
  { "", "", "fsca", "1111eeee11111101",
    {
      "if (FPSCR_PR)",
      "  RAISE_EXCEPTION (SIGILL);",
      "else if (saved_state.asregs.bfd_mach == bfd_mach_sh2a)",
      "  RAISE_EXCEPTION (SIGILL);",
      "else",
      "  {",
      "    SET_FR (n, fsca_s (FPUL, &sin));",
      "    SET_FR (n+1, fsca_s (FPUL, &cos));",
      "  }",
    },
  },

  /* sh4 */
  { "", "", "fschg", "1111001111111101",
    {
      "SET_FPSCR (GET_FPSCR () ^ FPSCR_MASK_SZ);",
    },
  },

  /* sh3e */
  { "", "", "fsqrt <FREG_N>", "1111nnnn01101101",
    {
      "FP_UNARY (n, sqrt);",
    },
  },

  /* sh4 */
  { "", "", "fsrra <FREG_N>", "1111nnnn01111101",
    {
      "if (FPSCR_PR)",
      "  RAISE_EXCEPTION (SIGILL);",
      "else if (saved_state.asregs.bfd_mach == bfd_mach_sh2a)",
      "  RAISE_EXCEPTION (SIGILL);",
      "else",
      "  SET_FR (n, fsrra_s (FR (n)));",
    },
  },

  /* sh2e */
  { "", "", "fsub <FREG_M>,<FREG_N>", "1111nnnnmmmm0001",
    {
      "FP_OP (n, -, m);",
    },
  },

  /* sh2e */
  { "", "", "ftrc <FREG_N>, FPUL", "1111nnnn00111101",
    {
      /* sh4 */
      "if (FPSCR_PR) {",
      "  if (DR (n) != DR (n)) /* NaN */",
      "    FPUL = 0x80000000;",
      "  else",
      "    FPUL =  (int) DR (n);",
      "}",
      "else",
      "if (FR (n) != FR (n)) /* NaN */",
      "  FPUL = 0x80000000;",
      "else",
      "  FPUL = (int) FR (n);",
    },
  },

  /* sh4 */
  { "", "", "ftrv <FV_N>", "1111vv0111111101",
    {
      "if (FPSCR_PR)",
      "  RAISE_EXCEPTION (SIGILL);",
      "else",
      "{",
      "  if (saved_state.asregs.bfd_mach == bfd_mach_sh2a)",
      "    RAISE_EXCEPTION (SIGILL);",
      "  /* FIXME not implemented.  */",
      "  printf (\"ftrv xmtrx, FV%d\\n\", v1);",
      "}",
    },
  },

  /* sh2e */
  { "", "", "fsts FPUL,<FREG_N>", "1111nnnn00001101",
    {
      "  union",
      "  {",
      "    int i;",
      "    float f;",
      "  } u;",
      "  u.i = FPUL;",
      "  SET_FR (n, u.f);",
    },
  },

  { "", "n", "jmp @<REG_N>", "0100nnnn00101011",
    {
      "RAISE_EXCEPTION_IF_IN_DELAY_SLOT ();",
      "SET_NIP (PT2H (R[n]));",
      "cycles += 2;",
      "Delay_Slot (PC + 2);",
    },
  },

  { "", "n", "jsr @<REG_N>", "0100nnnn00001011",
    {
      "RAISE_EXCEPTION_IF_IN_DELAY_SLOT ();",
      "PR = PH2T (PC + 4);",
      "if (~doprofile)",
      "  gotcall (PR, R[n]);",
      "SET_NIP (PT2H (R[n]));",
      "cycles += 2;",
      "Delay_Slot (PC + 2);",
    },
  },
  { "", "n", "jsr/n @<REG_N>", "0100nnnn01001011",
    {
      "RAISE_EXCEPTION_IF_IN_DELAY_SLOT ();",
      "PR = PH2T (PC + 2);",
      "if (~doprofile)",
      "  gotcall (PR, R[n]);",
      "SET_NIP (PT2H (R[n]));",
    },
  },
  { "", "", "jsr/n @@(<disp>,TBR)", "10000011i8p4....",
    {
      "RAISE_EXCEPTION_IF_IN_DELAY_SLOT ();",
      "PR = PH2T (PC + 2);",
      "if (~doprofile)",
      "  gotcall (PR, i + TBR);",
      "SET_NIP (PT2H (i + TBR));",
    },
  },

  { "", "n", "ldc <REG_N>,<CREG_M>", "0100nnnnmmmm1110",
    {
      "CREG (m) = R[n];",
      "/* FIXME: user mode */",
    },
  },
  { "", "n", "ldc <REG_N>,SR", "0100nnnn00001110",
    {
      "SET_SR (R[n]);",
      "/* FIXME: user mode */",
    },
  },
  { "", "n", "ldc <REG_N>,MOD", "0100nnnn01011110",
    {
      "SET_MOD (R[n]);",
    },
  },
  { "", "n", "ldc <REG_N>,DBR", "0100nnnn11111010",
    {
      "if (SR_MD)",
      "  DBR = R[n]; /* priv mode */",
      "else",
      "  RAISE_EXCEPTION (SIGILL); /* user mode */",
    },
  },
  { "", "n", "ldc <REG_N>,SGR", "0100nnnn00111010",
    {
      "if (SR_MD)",
      "  SGR = R[n]; /* priv mode */",
      "else",
      "  RAISE_EXCEPTION (SIGILL); /* user mode */",
    },
  },
  { "", "n", "ldc <REG_N>,TBR", "0100nnnn01001010",
    {
      "if (SR_MD)",	/* FIXME? */
      "  TBR = R[n]; /* priv mode */",
      "else",
      "  RAISE_EXCEPTION (SIGILL); /* user mode */",
    },
  },
  { "n", "n", "ldc.l @<REG_N>+,<CREG_M>", "0100nnnnmmmm0111",
    {
      "MA (1);",
      "CREG (m) = RLAT (R[n]);",
      "R[n] += 4;",
      "/* FIXME: user mode */",
    },
  },
  { "n", "n", "ldc.l @<REG_N>+,SR", "0100nnnn00000111",
    {
      "MA (1);",
      "SET_SR (RLAT (R[n]));",
      "R[n] += 4;",
      "/* FIXME: user mode */",
    },
  },
  { "n", "n", "ldc.l @<REG_N>+,MOD", "0100nnnn01010111",
    {
      "MA (1);",
      "SET_MOD (RLAT (R[n]));",
      "R[n] += 4;",
    },
  },
  { "n", "n", "ldc.l @<REG_N>+,DBR", "0100nnnn11110110",
    {
      "if (SR_MD)",
      "{ /* priv mode */",
      "  MA (1);",
      "  DBR = RLAT (R[n]);",
      "  R[n] += 4;",
      "}",
      "else",
      "  RAISE_EXCEPTION (SIGILL); /* user mode */",
    },
  },
  { "n", "n", "ldc.l @<REG_N>+,SGR", "0100nnnn00110110",
    {
      "if (SR_MD)",
      "{ /* priv mode */",
      "  MA (1);",
      "  SGR = RLAT (R[n]);",
      "  R[n] += 4;",
      "}",
      "else",
      "  RAISE_EXCEPTION (SIGILL); /* user mode */",
    },
  },

  /* sh-dsp */
  { "", "", "ldre @(<disp>,PC)", "10001110i8p1....",
    {
      "RE = SEXT (i) * 2 + 4 + PH2T (PC);",
    },
  },
  { "", "", "ldrs @(<disp>,PC)", "10001100i8p1....",
    {
      "RS = SEXT (i) * 2 + 4 + PH2T (PC);",
    },
  },

  /* sh4a */
  { "", "n", "ldrc <REG_N>", "0100nnnn00110100",
    {
      "SET_RC (R[n]);",
      "loop = get_loop_bounds_ext (RS, RE, memory, mem_end, maskw, endianw);",
      "CHECK_INSN_PTR (insn_ptr);",
      "RE |= 1;",
    },
  },
  { "", "", "ldrc #<imm>", "10001010i8*1....",
    {
      "SET_RC (i);",
      "loop = get_loop_bounds_ext (RS, RE, memory, mem_end, maskw, endianw);",
      "CHECK_INSN_PTR (insn_ptr);",
      "RE |= 1;",
    },
  },

  { "", "n", "lds <REG_N>,<SREG_M>", "0100nnnnssss1010",
    {
      "SREG (m) = R[n];",
    },
  },
  { "n", "n", "lds.l @<REG_N>+,<SREG_M>", "0100nnnnssss0110",
    {
      "MA (1);",
      "SREG (m) = RLAT (R[n]);",
      "R[n] += 4;",
    },
  },
  /* sh2e / sh-dsp (lds <REG_N>,DSR) */
  { "", "n", "lds <REG_N>,FPSCR", "0100nnnn01101010",
    {
      "SET_FPSCR (R[n]);",
    },
  },
  /* sh2e / sh-dsp (lds.l @<REG_N>+,DSR) */
  { "n", "n", "lds.l @<REG_N>+,FPSCR", "0100nnnn01100110",
    {
      "MA (1);",
      "SET_FPSCR (RLAT (R[n]));",
      "R[n] += 4;",
    },
  },

  { "", "", "ldtlb", "0000000000111000",
    {
      "/* We don't implement cache or tlb, so this is a noop.  */",
    },
  },

  { "nm", "nm", "mac.l @<REG_M>+,@<REG_N>+", "0000nnnnmmmm1111",
    {
      "macl (&R0, memory, n, m);",
    },
  },

  { "nm", "nm", "mac.w @<REG_M>+,@<REG_N>+", "0100nnnnmmmm1111",
    {
      "macw (&R0, memory, n, m, endianw);",
    },
  },

  { "n", "", "mov #<imm>,<REG_N>", "1110nnnni8*1....",
    {
      "R[n] = SEXT (i);",
    },
  },
  { "n", "", "movi20 #<imm20>,<REG_N>", "0000nnnni8*10000",
    {
      "RAISE_EXCEPTION_IF_IN_DELAY_SLOT ();",
      "R[n] = ((i << 24) >> 12) | RIAT (nip);",
      "SET_NIP (nip + 2);	/* Consume 2 more bytes.  */",
    },
  },
  { "n", "", "movi20s #<imm20>,<REG_N>", "0000nnnni8*10001",
    {
      "RAISE_EXCEPTION_IF_IN_DELAY_SLOT ();",
      "R[n] = ((((i & 0xf0) << 24) >> 12) | RIAT (nip)) << 8;",
      "SET_NIP (nip + 2);	/* Consume 2 more bytes.  */",
    },
  },
  { "n", "m", "mov <REG_M>,<REG_N>", "0110nnnnmmmm0011",
    {
      "R[n] = R[m];",
    },
  },

  { "0", "", "mov.b @(<disp>,GBR),R0", "11000100i8*1....",
    {
      "MA (1);",
      "R0 = RSBAT (i + GBR);",
      "L (0);",
    },
  },
  { "0", "m", "mov.b @(<disp>,<REG_M>),R0", "10000100mmmmi4*1",
    {
      "MA (1);",
      "R0 = RSBAT (i + R[m]);",
      "L (0);",
    },
  },
  { "n", "0m", "mov.b @(R0,<REG_M>),<REG_N>", "0000nnnnmmmm1100",
    {
      "MA (1);",
      "R[n] = RSBAT (R0 + R[m]);",
      "L (n);",
    },
  },
  { "nm", "m", "mov.b @<REG_M>+,<REG_N>", "0110nnnnmmmm0100",
    {
      "MA (1);",
      "R[n] = RSBAT (R[m]);",
      "R[m] += 1;",
      "L (n);",
    },
  },
  { "0n", "n", "mov.b @-<REG_N>,R0", "0100nnnn11001011",
    {
      "MA (1);",
      "R[n] -= 1;",
      "R0 = RSBAT (R[n]);",
      "L (0);",
    },
  },
  { "", "mn", "mov.b <REG_M>,@<REG_N>", "0010nnnnmmmm0000",
    {
      "MA (1);",
      "WBAT (R[n], R[m]);",
    },
  },
  { "", "0", "mov.b R0,@(<disp>,GBR)", "11000000i8*1....",
    {
      "MA (1);",
      "WBAT (i + GBR, R0);",
    },
  },
  { "", "m0", "mov.b R0,@(<disp>,<REG_M>)", "10000000mmmmi4*1",
    {
      "MA (1);",
      "WBAT (i + R[m], R0);",
    },
  },
  { "", "mn0", "mov.b <REG_M>,@(R0,<REG_N>)", "0000nnnnmmmm0100",
    {
      "MA (1);",
      "WBAT (R[n] + R0, R[m]);",
    },
  },
  { "n", "nm", "mov.b <REG_M>,@-<REG_N>", "0010nnnnmmmm0100",
    {
      /* Allow for the case where m == n.  */
      "int t = R[m];",
      "MA (1);",
      "R[n] -= 1;",
      "WBAT (R[n], t);",
    },
  },
  { "n", "n0", "mov.b R0,@<REG_N>+", "0100nnnn10001011",
    {
      "MA (1);",
      "WBAT (R[n], R0);",
      "R[n] += 1;",
    },
  },
  { "n", "m", "mov.b @<REG_M>,<REG_N>", "0110nnnnmmmm0000",
    {
      "MA (1);",
      "R[n] = RSBAT (R[m]);",
      "L (n);",
    },
  },

  { "0", "", "mov.l @(<disp>,GBR),R0", "11000110i8*4....",
    {
      "MA (1);",
      "R0 = RLAT (i + GBR);",
      "L (0);",
    },
  },
  { "n", "", "mov.l @(<disp>,PC),<REG_N>", "1101nnnni8p4....",
    {
      "RAISE_EXCEPTION_IF_IN_DELAY_SLOT ();",
      "MA (1);",
      "R[n] = RLAT ((PH2T (PC) & ~3) + 4 + i);",
      "L (n);",
    },
  },
  { "n", "m", "mov.l @(<disp>,<REG_M>),<REG_N>", "0101nnnnmmmmi4*4",
    {
      "MA (1);",
      "R[n] = RLAT (i + R[m]);",
      "L (n);",
    },
  },
  { "n", "m0", "mov.l @(R0,<REG_M>),<REG_N>", "0000nnnnmmmm1110",
    {
      "MA (1);",
      "R[n] = RLAT (R0 + R[m]);",
      "L (n);",
    },
  },
  { "nm", "m", "mov.l @<REG_M>+,<REG_N>", "0110nnnnmmmm0110",
    {
      "MA (1);",
      "R[n] = RLAT (R[m]);",
      "R[m] += 4;",
      "L (n);",
    },
  },
  { "0n", "n", "mov.l @-<REG_N>,R0", "0100nnnn11101011",
    {
      "MA (1);",
      "R[n] -= 4;",
      "R0 = RLAT (R[n]);",
      "L (0);",
    },
  },
  { "n", "m", "mov.l @<REG_M>,<REG_N>", "0110nnnnmmmm0010",
    {
      "MA (1);",
      "R[n] = RLAT (R[m]);",
      "L (n);",
    },
  },
  { "", "0", "mov.l R0,@(<disp>,GBR)", "11000010i8*4....",
    {
      "MA (1);",
      "WLAT (i + GBR, R0);",
    },
  },
  { "", "nm", "mov.l <REG_M>,@(<disp>,<REG_N>)", "0001nnnnmmmmi4*4",
    {
      "MA (1);",
      "WLAT (i + R[n], R[m]);",
    },
  },
  { "", "nm0", "mov.l <REG_M>,@(R0,<REG_N>)", "0000nnnnmmmm0110",
    {
      "MA (1);",
      "WLAT (R0 + R[n], R[m]);",
    },
  },
  { "n", "nm", "mov.l <REG_M>,@-<REG_N>", "0010nnnnmmmm0110",
    {
      /* Allow for the case where m == n.  */
      "int t = R[m];",
      "MA (1) ;",
      "R[n] -= 4;",
      "WLAT (R[n], t);",
    },
  },
  { "n", "n0", "mov.l R0,@<REG_N>+", "0100nnnn10101011",
    {
      "MA (1) ;",
      "WLAT (R[n], R0);",
      "R[n] += 4;",
    },
  },
  { "", "nm", "mov.l <REG_M>,@<REG_N>", "0010nnnnmmmm0010",
    {
      "MA (1);",
      "WLAT (R[n], R[m]);",
    },
  },

  { "0", "", "mov.w @(<disp>,GBR),R0", "11000101i8*2....",
    {
      "MA (1);",
      "R0 = RSWAT (i + GBR);",
      "L (0);",
    },
  },
  { "n", "", "mov.w @(<disp>,PC),<REG_N>", "1001nnnni8p2....",
    {
      "RAISE_EXCEPTION_IF_IN_DELAY_SLOT ();",
      "MA (1);",
      "R[n] = RSWAT (PH2T (PC + 4 + i));",
      "L (n);",
    },
  },
  { "0", "m", "mov.w @(<disp>,<REG_M>),R0", "10000101mmmmi4*2",
    {
      "MA (1);",
      "R0 = RSWAT (i + R[m]);",
      "L (0);",
    },
  },
  { "n", "m0", "mov.w @(R0,<REG_M>),<REG_N>", "0000nnnnmmmm1101",
    {
      "MA (1);",
      "R[n] = RSWAT (R0 + R[m]);",
      "L (n);",
    },
  },
  { "nm", "n", "mov.w @<REG_M>+,<REG_N>", "0110nnnnmmmm0101",
    {
      "MA (1);",
      "R[n] = RSWAT (R[m]);",
      "R[m] += 2;",
      "L (n);",
    },
  },
  { "0n", "n", "mov.w @-<REG_N>,R0", "0100nnnn11011011",
    {
      "MA (1);",
      "R[n] -= 2;",
      "R0 = RSWAT (R[n]);",
      "L (0);",
    },
  },
  { "n", "m", "mov.w @<REG_M>,<REG_N>", "0110nnnnmmmm0001",
    {
      "MA (1);",
      "R[n] = RSWAT (R[m]);",
      "L (n);",
    },
  },
  { "", "0", "mov.w R0,@(<disp>,GBR)", "11000001i8*2....",
    {
      "MA (1);",
      "WWAT (i + GBR, R0);",
    },
  },
  { "", "0m", "mov.w R0,@(<disp>,<REG_M>)", "10000001mmmmi4*2",
    {
      "MA (1);",
      "WWAT (i + R[m], R0);",
    },
  },
  { "", "m0n", "mov.w <REG_M>,@(R0,<REG_N>)", "0000nnnnmmmm0101",
    {
      "MA (1);",
      "WWAT (R0 + R[n], R[m]);",
    },
  },
  { "n", "mn", "mov.w <REG_M>,@-<REG_N>", "0010nnnnmmmm0101",
    {
      /* Allow for the case where m == n.  */
      "int t = R[m];",
      "MA (1);",
      "R[n] -= 2;",
      "WWAT (R[n], t);",
    },
  },
  { "n", "0n", "mov.w R0,@<REG_N>+", "0100nnnn10011011",
    {
      "MA (1);",
      "WWAT (R[n], R0);",
      "R[n] += 2;",
    },
  },
  { "", "nm", "mov.w <REG_M>,@<REG_N>", "0010nnnnmmmm0001",
    {
      "MA (1);",
      "WWAT (R[n], R[m]);",
    },
  },

  { "0", "", "mova @(<disp>,PC),R0", "11000111i8p4....",
    {
      "RAISE_EXCEPTION_IF_IN_DELAY_SLOT ();",
      "R0 = ((i + 4 + PH2T (PC)) & ~0x3);",
    },
  },

  { "", "n0", "movca.l R0, @<REG_N>", "0000nnnn11000011",
    {
      "/* We don't simulate cache, so this insn is identical to mov.  */",
      "MA (1);",
      "WLAT (R[n], R[0]);",
    },
  },

  { "", "n0", "movco.l R0, @<REG_N>", "0000nnnn01110011",
    {
      "/* LDST -> T */",
      "SET_SR_T (LDST);",
      "/* if (T) R0 -> (Rn) */",
      "if (T)",
      "  WLAT (R[n], R[0]);",
      "/* 0 -> LDST */",
      "SET_LDST (0);",
    },
  },

  { "0", "n", "movli.l @<REG_N>, R0", "0000nnnn01100011",
    {
      "/* 1 -> LDST */",
      "SET_LDST (1);",
      "/* (Rn) -> R0 */",
      "R[0] = RLAT (R[n]);",
      "/* if (interrupt/exception) 0 -> LDST */",
      "/* (we don't simulate asynchronous interrupts/exceptions) */",
    },
  },

  { "n", "", "movt <REG_N>", "0000nnnn00101001",
    {
      "R[n] = T;",
    },
  },
  { "", "", "movrt <REG_N>", "0000nnnn00111001",
    {
      "R[n] = (T == 0);",
    },
  },
  { "0", "n", "movua.l @<REG_N>,R0", "0100nnnn10101001",
    {
      "int regn = R[n];",
      "int e = target_little_endian ? 3 : 0;",
      "MA (1);",
      "R[0] = (RBAT (regn + (0^e)) << 24) + (RBAT (regn + (1^e)) << 16) +",
      "  (RBAT (regn + (2^e)) << 8) + RBAT (regn + (3^e));",
      "L (0);",
    },
  },
  { "0n", "n", "movua.l @<REG_N>+,R0", "0100nnnn11101001",
    {
      "int regn = R[n];",
      "int e = target_little_endian ? 3 : 0;",
      "MA (1);",
      "R[0] = (RBAT (regn + (0^e)) << 24) + (RBAT (regn + (1^e)) << 16) +",
      "  (RBAT (regn + (2^e)) << 8) + RBAT (regn + (3^e));",
      "R[n] += 4;",
      "L (0);",
    },
  },
  { "", "mn", "mul.l <REG_M>,<REG_N>", "0000nnnnmmmm0111",
    {
      "MACL = ((int) R[n]) * ((int) R[m]);",
    },
  },
#if 0  /* FIXME: The above cast to int is not really portable.
	  It should be replaced by a SEXT32 macro.  */
  { "", "nm", "mul.l <REG_M>,<REG_N>", "0000nnnnmmmm0111",
    {
      "MACL = R[n] * R[m];",
    },
  },
#endif

  /* muls.w - see muls */
  { "", "mn", "muls <REG_M>,<REG_N>", "0010nnnnmmmm1111",
    {
      "MACL = ((int) (short) R[n]) * ((int) (short) R[m]);",
    },
  },

  /* mulu.w - see mulu */
  { "", "mn", "mulu <REG_M>,<REG_N>", "0010nnnnmmmm1110",
    {
      "MACL = (((unsigned int) (unsigned short) R[n])",
      "        * ((unsigned int) (unsigned short) R[m]));",
    },
  },

  { "n", "m", "neg <REG_M>,<REG_N>", "0110nnnnmmmm1011",
    {
      "R[n] = - R[m];",
    },
  },

  { "n", "m", "negc <REG_M>,<REG_N>", "0110nnnnmmmm1010",
    {
      "ult = -T;",
      "SET_SR_T (ult > 0);",
      "R[n] = ult - R[m];",
      "SET_SR_T (T || (R[n] > ult));",
    },
  },

  { "", "", "nop", "0000000000001001",
    {
      "/* nop */",
    },
  },

  { "n", "m", "not <REG_M>,<REG_N>", "0110nnnnmmmm0111",
    {
      "R[n] = ~R[m];",
    },
  },

  /* sh4a */
  { "", "n", "icbi @<REG_N>", "0000nnnn11100011",
    {
      "/* Except for the effect on the cache - which is not simulated -",
      "   this is like a nop.  */",
    },
  },

  { "", "n", "ocbi @<REG_N>", "0000nnnn10010011",
    {
      "(void) RSBAT (R[n]); /* Take exceptions like byte load, otherwise noop.  */",
      "/* FIXME: Cache not implemented */",
    },
  },

  { "", "n", "ocbp @<REG_N>", "0000nnnn10100011",
    {
      "(void) RSBAT (R[n]); /* Take exceptions like byte load, otherwise noop.  */",
      "/* FIXME: Cache not implemented */",
    },
  },

  { "", "n", "ocbwb @<REG_N>", "0000nnnn10110011",
    {
      "(void) RSBAT (R[n]); /* Take exceptions like byte load, otherwise noop.  */",
      "/* FIXME: Cache not implemented */",
    },
  },

  { "0", "", "or #<imm>,R0", "11001011i8*1....",
    {
      "R0 |= i;",
    },
  },
  { "n", "m", "or <REG_M>,<REG_N>", "0010nnnnmmmm1011",
    {
      "R[n] |= R[m];",
    },
  },
  { "", "0", "or.b #<imm>,@(R0,GBR)", "11001111i8*1....",
    {
      "MA (1);",
      "WBAT (R0 + GBR, (RBAT (R0 + GBR) | i));",
    },
  },

  { "", "n", "pref @<REG_N>", "0000nnnn10000011",
    {
      "/* Except for the effect on the cache - which is not simulated -",
      "   this is like a nop.  */",
    },
  },

  /* sh4a */
  { "", "n", "prefi @<REG_N>", "0000nnnn11010011",
    {
      "/* Except for the effect on the cache - which is not simulated -",
      "   this is like a nop.  */",
    },
  },

  /* sh4a */
  { "", "", "synco", "0000000010101011",
    {
      "/* Except for the effect on the pipeline - which is not simulated -",
      "   this is like a nop.  */",
    },
  },

  { "n", "n", "rotcl <REG_N>", "0100nnnn00100100",
    {
      "ult = R[n] < 0;",
      "R[n] = (R[n] << 1) | T;",
      "SET_SR_T (ult);",
    },
  },

  { "n", "n", "rotcr <REG_N>", "0100nnnn00100101",
    {
      "ult = R[n] & 1;",
      "R[n] = (UR[n] >> 1) | (T << 31);",
      "SET_SR_T (ult);",
    },
  },

  { "n", "n", "rotl <REG_N>", "0100nnnn00000100",
    {
      "SET_SR_T (R[n] < 0);",
      "R[n] <<= 1;",
      "R[n] |= T;",
    },
  },

  { "n", "n", "rotr <REG_N>", "0100nnnn00000101",
    {
      "SET_SR_T (R[n] & 1);",
      "R[n] = UR[n] >> 1;",
      "R[n] |= (T << 31);",
    },
  },

  { "", "", "rte", "0000000000101011",
    {
#if 0
      /* SH-[12] */
      "int tmp = PC;",
      "SET_NIP (PT2H (RLAT (R[15]) + 2));",
      "R[15] += 4;",
      "SET_SR (RLAT (R[15]) & 0x3f3);",
      "R[15] += 4;",
      "Delay_Slot (PC + 2);",
#else
      "RAISE_EXCEPTION_IF_IN_DELAY_SLOT ();",
      "SET_SR (SSR);",
      "SET_NIP (PT2H (SPC));",
      "cycles += 2;",
      "Delay_Slot (PC + 2);",
#endif
    },
  },

  { "", "", "rts", "0000000000001011",
    {
      "RAISE_EXCEPTION_IF_IN_DELAY_SLOT ();",
      "SET_NIP (PT2H (PR));",
      "cycles += 2;",
      "Delay_Slot (PC + 2);",
    },
  },
  { "", "", "rts/n", "0000000001101011",
    {
      "RAISE_EXCEPTION_IF_IN_DELAY_SLOT ();",
      "SET_NIP (PT2H (PR));",
    },
  },
  { "0", "n", "rtv/n <REG_N>", "0000nnnn01111011",
    {
      "RAISE_EXCEPTION_IF_IN_DELAY_SLOT ();",
      "R0 = R[n];",
      "L (0);",
      "SET_NIP (PT2H (PR));",
    },
  },

  /* sh4a */
  { "", "", "setdmx", "0000000010011000",
    {
      "saved_state.asregs.sr |=  SR_MASK_DMX;"
      "saved_state.asregs.sr &= ~SR_MASK_DMY;"
    },
  },

  /* sh4a */
  { "", "", "setdmy", "0000000011001000",
    {
      "saved_state.asregs.sr |=  SR_MASK_DMY;"
      "saved_state.asregs.sr &= ~SR_MASK_DMX;"
    },
  },

  /* sh-dsp */
  { "", "n", "setrc <REG_N>", "0100nnnn00010100",
    {
      "SET_RC (R[n]);",
    },
  },
  { "", "", "setrc #<imm>", "10000010i8*1....",
    {
      /* It would be more realistic to let loop_start point to some static
	 memory that contains an illegal opcode and then give a bus error when
	 the loop is eventually encountered, but it seems not only simpler,
	 but also more debugging-friendly to just catch the failure here.  */
      "if (BUSERROR (RS | RE, maskw))",
      "  RAISE_EXCEPTION (SIGILL);",
      "else {",
      "  SET_RC (i);",
      "  loop = get_loop_bounds (RS, RE, memory, mem_end, maskw, endianw);",
      "  CHECK_INSN_PTR (insn_ptr);",
      "}",
    },
  },

  { "", "", "sets", "0000000001011000",
    {
      "SET_SR_S (1);",
    },
  },

  { "", "", "sett", "0000000000011000",
    {
      "SET_SR_T (1);",
    },
  },

  { "n", "mn", "shad <REG_M>,<REG_N>", "0100nnnnmmmm1100",
    {
      "R[n] = (R[m] < 0) ? (R[m]&0x1f ? R[n] >> ((-R[m])&0x1f) : R[n] >> 31) : (R[n] << (R[m] & 0x1f));",
    },
  },

  { "n", "n", "shal <REG_N>", "0100nnnn00100000",
    {
      "SET_SR_T (R[n] < 0);",
      "R[n] <<= 1;",
    },
  },

  { "n", "n", "shar <REG_N>", "0100nnnn00100001",
    {
      "SET_SR_T (R[n] & 1);",
      "R[n] = R[n] >> 1;",
    },
  },

  { "n", "mn", "shld <REG_M>,<REG_N>", "0100nnnnmmmm1101",
    {
      "R[n] = (R[m] < 0) ? (R[m]&0x1f ? UR[n] >> ((-R[m])&0x1f) : 0): (R[n] << (R[m] & 0x1f));",
    },
  },

  { "n", "n", "shll <REG_N>", "0100nnnn00000000",
    {
      "SET_SR_T (R[n] < 0);",
      "R[n] <<= 1;",
    },
  },

  { "n", "n", "shll2 <REG_N>", "0100nnnn00001000",
    {
      "R[n] <<= 2;",
    },
  },
  { "n", "n", "shll8 <REG_N>", "0100nnnn00011000",
    {
      "R[n] <<= 8;",
    },
  },
  { "n", "n", "shll16 <REG_N>", "0100nnnn00101000",
    {
      "R[n] <<= 16;",
    },
  },

  { "n", "n", "shlr <REG_N>", "0100nnnn00000001",
    {
      "SET_SR_T (R[n] & 1);",
      "R[n] = UR[n] >> 1;",
    },
  },

  { "n", "n", "shlr2 <REG_N>", "0100nnnn00001001",
    {
      "R[n] = UR[n] >> 2;",
    },
  },
  { "n", "n", "shlr8 <REG_N>", "0100nnnn00011001",
    {
      "R[n] = UR[n] >> 8;",
    },
  },
  { "n", "n", "shlr16 <REG_N>", "0100nnnn00101001",
    {
      "R[n] = UR[n] >> 16;",
    },
  },

  { "", "", "sleep", "0000000000011011",
    {
      "nip += trap (sd, 0xc3, &R0, PC, memory, maskl, maskw, endianw);",
    },
  },

  { "n", "", "stc <CREG_M>,<REG_N>", "0000nnnnmmmm0010",
    {
      "R[n] = CREG (m);",
    },
  },

  { "n", "", "stc SGR,<REG_N>", "0000nnnn00111010",
    {
      "if (SR_MD)",
      "  R[n] = SGR; /* priv mode */",
      "else",
      "  RAISE_EXCEPTION (SIGILL); /* user mode */",
    },
  },
  { "n", "", "stc DBR,<REG_N>", "0000nnnn11111010",
    {
      "if (SR_MD)",
      "  R[n] = DBR; /* priv mode */",
      "else",
      "  RAISE_EXCEPTION (SIGILL); /* user mode */",
    },
  },
  { "n", "", "stc TBR,<REG_N>", "0000nnnn01001010",
    {
      "if (SR_MD)",	/* FIXME? */
      "  R[n] = TBR; /* priv mode */",
      "else",
      "  RAISE_EXCEPTION (SIGILL); /* user mode */",
    },
  },
  { "n", "n", "stc.l <CREG_M>,@-<REG_N>", "0100nnnnmmmm0011",
    {
      "MA (1);",
      "R[n] -= 4;",
      "WLAT (R[n], CREG (m));",
    },
  },
  { "n", "n", "stc.l SGR,@-<REG_N>", "0100nnnn00110010",
    {
      "if (SR_MD)",
      "{ /* priv mode */",
      "  MA (1);",
      "  R[n] -= 4;",
      "  WLAT (R[n], SGR);",
      "}",
      "else",
      "  RAISE_EXCEPTION (SIGILL); /* user mode */",
    },
  },
  { "n", "n", "stc.l DBR,@-<REG_N>", "0100nnnn11110010",
    {
      "if (SR_MD)",
      "{ /* priv mode */",
      "  MA (1);",
      "  R[n] -= 4;",
      "  WLAT (R[n], DBR);",
      "}",
      "else",
      "  RAISE_EXCEPTION (SIGILL); /* user mode */",
    },
  },

  { "n", "", "sts <SREG_M>,<REG_N>", "0000nnnnssss1010",
    {
      "R[n] = SREG (m);",
    },
  },
  { "n", "n", "sts.l <SREG_M>,@-<REG_N>", "0100nnnnssss0010",
    {
      "MA (1);",
      "R[n] -= 4;",
      "WLAT (R[n], SREG (m));",
    },
  },

  { "n", "nm", "sub <REG_M>,<REG_N>", "0011nnnnmmmm1000",
    {
      "R[n] -= R[m];",
    },
  },

  { "n", "nm", "subc <REG_M>,<REG_N>", "0011nnnnmmmm1010",
    {
      "ult = R[n] - T;",
      "SET_SR_T (ult > R[n]);",
      "R[n] = ult - R[m];",
      "SET_SR_T (T || (R[n] > ult));",
    },
  },

  { "n", "nm", "subv <REG_M>,<REG_N>", "0011nnnnmmmm1011",
    {
      "ult = R[n] - R[m];",
      "SET_SR_T (((R[n] ^ R[m]) & (ult ^ R[n])) >> 31);",
      "R[n] = ult;",
    },
  },

  { "n", "nm", "swap.b <REG_M>,<REG_N>", "0110nnnnmmmm1000",
    {
      "R[n] = ((R[m] & 0xffff0000)",
      "        | ((R[m] << 8) & 0xff00)",
      "        | ((R[m] >> 8) & 0x00ff));",
    },
  },
  { "n", "nm", "swap.w <REG_M>,<REG_N>", "0110nnnnmmmm1001",
    {
      "R[n] = (((R[m] << 16) & 0xffff0000)",
      "        | ((R[m] >> 16) & 0x00ffff));",
    },
  },

  { "", "n", "tas.b @<REG_N>", "0100nnnn00011011",
    {
      "MA (1);",
      "ult = RBAT (R[n]);",
      "SET_SR_T (ult == 0);",
      "WBAT (R[n],ult|0x80);",
    },
  },

  { "0", "", "trapa #<imm>", "11000011i8*1....",
    {
      "long imm = 0xff & i;",
      "RAISE_EXCEPTION_IF_IN_DELAY_SLOT ();",
      "if (i < 20 || i == 33 || i == 34 || i == 0xc3)",
      "  nip += trap (sd, i, &R0, PC, memory, maskl, maskw, endianw);",
#if 0
      "else {",
      /* SH-[12] */
      "  R[15] -= 4;",
      "  WLAT (R[15], GET_SR ());",
      "  R[15] -= 4;",
      "  WLAT (R[15], PH2T (PC + 2));",
#else
      "else if (!SR_BL) {",
      "  SSR = GET_SR ();",
      "  SPC = PH2T (PC + 2);",
      "  SET_SR (GET_SR () | SR_MASK_MD | SR_MASK_BL | SR_MASK_RB);",
      "  /* FIXME: EXPEVT = 0x00000160; */",
#endif
      "  SET_NIP (PT2H (RLAT (VBR + (imm<<2))));",
      "}",
    },
  },

  { "", "mn", "tst <REG_M>,<REG_N>", "0010nnnnmmmm1000",
    {
      "SET_SR_T ((R[n] & R[m]) == 0);",
    },
  },
  { "", "0", "tst #<imm>,R0", "11001000i8*1....",
    {
      "SET_SR_T ((R0 & i) == 0);",
    },
  },
  { "", "0", "tst.b #<imm>,@(R0,GBR)", "11001100i8*1....",
    {
      "MA (1);",
      "SET_SR_T ((RBAT (GBR+R0) & i) == 0);",
    },
  },

  { "", "0", "xor #<imm>,R0", "11001010i8*1....",
    {
      "R0 ^= i;",
    },
  },
  { "n", "mn", "xor <REG_M>,<REG_N>", "0010nnnnmmmm1010",
    {
      "R[n] ^= R[m];",
    },
  },
  { "", "0", "xor.b #<imm>,@(R0,GBR)", "11001110i8*1....",
    {
      "MA (1);",
      "ult = RBAT (GBR+R0);",
      "ult ^= i;",
      "WBAT (GBR + R0, ult);",
    },
  },

  { "n", "nm", "xtrct <REG_M>,<REG_N>", "0010nnnnmmmm1101",
    {
      "R[n] = (((R[n] >> 16) & 0xffff)",
      "        | ((R[m] << 16) & 0xffff0000));",
    },
  },

#if 0
  { "divs.l <REG_M>,<REG_N>", "0100nnnnmmmm1110",
    {
      "divl (0, R[n], R[m]);",
    },
  },
  { "divu.l <REG_M>,<REG_N>", "0100nnnnmmmm1101",
    {
      "divl (0, R[n], R[m]);",
    },
  },
#endif

  {},
};

static op movsxy_tab[] =
{
/* If this is disabled, the simulator speeds up by about 12% on a
   450 MHz PIII - 9% with ACE_FAST.
   Maybe we should have separate simulator loops?  */
#if 1
  { "n", "n", "movs.w @-<REG_N>,<DSP_REG_M>", "111101NNMMMM0000",
    {
      "MA (1);",
      "R[n] -= 2;",
      "DSP_R (m) = RSWAT (R[n]) << 16;",
      "DSP_GRD (m) = SIGN32 (DSP_R (m));",
    },
  },
  { "", "n",  "movs.w @<REG_N>,<DSP_REG_M>",  "111101NNMMMM0100",
    {
      "MA (1);",
      "DSP_R (m) = RSWAT (R[n]) << 16;",
      "DSP_GRD (m) = SIGN32 (DSP_R (m));",
    },
  },
  { "n", "n", "movs.w @<REG_N>+,<DSP_REG_M>", "111101NNMMMM1000",
    {
      "MA (1);",
      "DSP_R (m) = RSWAT (R[n]) << 16;",
      "DSP_GRD (m) = SIGN32 (DSP_R (m));",
      "R[n] += 2;",
    },
  },
  { "n", "n8","movs.w @<REG_N>+REG_8,<DSP_REG_M>", "111101NNMMMM1100",
    {
      "MA (1);",
      "DSP_R (m) = RSWAT (R[n]) << 16;",
      "DSP_GRD (m) = SIGN32 (DSP_R (m));",
      "R[n] += R[8];",
    },
  },
  { "n", "n", "movs.w @-<REG_N>,<DSP_GRD_M>", "111101NNGGGG0000",
    {
      "MA (1);",
      "R[n] -= 2;",
      "DSP_R (m) = RSWAT (R[n]);",
    },
  },
  { "", "n",  "movs.w @<REG_N>,<DSP_GRD_M>",  "111101NNGGGG0100",
    {
      "MA (1);",
      "DSP_R (m) = RSWAT (R[n]);",
    },
  },
  { "n", "n", "movs.w @<REG_N>+,<DSP_GRD_M>", "111101NNGGGG1000",
    {
      "MA (1);",
      "DSP_R (m) = RSWAT (R[n]);",
      "R[n] += 2;",
    },
  },
  { "n", "n8","movs.w @<REG_N>+REG_8,<DSP_GRD_M>", "111101NNGGGG1100",
    {
      "MA (1);",
      "DSP_R (m) = RSWAT (R[n]);",
      "R[n] += R[8];",
    },
  },
  { "n", "n", "movs.w <DSP_REG_M>,@-<REG_N>", "111101NNMMMM0001",
    {
      "MA (1);",
      "R[n] -= 2;",
      "WWAT (R[n], DSP_R (m) >> 16);",
    },
  },
  { "", "n",  "movs.w <DSP_REG_M>,@<REG_N>",  "111101NNMMMM0101",
    {
      "MA (1);",
      "WWAT (R[n], DSP_R (m) >> 16);",
    },
  },
  { "n", "n", "movs.w <DSP_REG_M>,@<REG_N>+", "111101NNMMMM1001",
    {
      "MA (1);",
      "WWAT (R[n], DSP_R (m) >> 16);",
      "R[n] += 2;",
    },
  },
  { "n", "n8","movs.w <DSP_REG_M>,@<REG_N>+REG_8", "111101NNMMMM1101",
    {
      "MA (1);",
      "WWAT (R[n], DSP_R (m) >> 16);",
      "R[n] += R[8];",
    },
  },
  { "n", "n", "movs.w <DSP_GRD_M>,@-<REG_N>", "111101NNGGGG0001",
    {
      "MA (1);",
      "R[n] -= 2;",
      "WWAT (R[n], SEXT (DSP_R (m)));",
    },
  },
  { "", "n",  "movs.w <DSP_GRD_M>,@<REG_N>",  "111101NNGGGG0101",
    {
      "MA (1);",
      "WWAT (R[n], SEXT (DSP_R (m)));",
    },
  },
  { "n", "n", "movs.w <DSP_GRD_M>,@<REG_N>+", "111101NNGGGG1001",
    {
      "MA (1);",
      "WWAT (R[n], SEXT (DSP_R (m)));",
      "R[n] += 2;",
    },
  },
  { "n", "n8","movs.w <DSP_GRD_M>,@<REG_N>+REG_8", "111101NNGGGG1101",
    {
      "MA (1);",
      "WWAT (R[n], SEXT (DSP_R (m)));",
      "R[n] += R[8];",
    },
  },
  { "n", "n", "movs.l @-<REG_N>,<DSP_REG_M>", "111101NNMMMM0010",
    {
      "MA (1);",
      "R[n] -= 4;",
      "DSP_R (m) = RLAT (R[n]);",
      "DSP_GRD (m) = SIGN32 (DSP_R (m));",
    },
  },
  { "", "n",  "movs.l @<REG_N>,<DSP_REG_M>",  "111101NNMMMM0110",
    {
      "MA (1);",
      "DSP_R (m) = RLAT (R[n]);",
      "DSP_GRD (m) = SIGN32 (DSP_R (m));",
    },
  },
  { "n", "n", "movs.l @<REG_N>+,<DSP_REG_M>", "111101NNMMMM1010",
    {
      "MA (1);",
      "DSP_R (m) = RLAT (R[n]);",
      "DSP_GRD (m) = SIGN32 (DSP_R (m));",
      "R[n] += 4;",
    },
  },
  { "n", "n8","movs.l @<REG_N>+REG_8,<DSP_REG_M>", "111101NNMMMM1110",
    {
      "MA (1);",
      "DSP_R (m) = RLAT (R[n]);",
      "DSP_GRD (m) = SIGN32 (DSP_R (m));",
      "R[n] += R[8];",
    },
  },
  { "n", "n", "movs.l <DSP_REG_M>,@-<REG_N>", "111101NNMMMM0011",
    {
      "MA (1);",
      "R[n] -= 4;",
      "WLAT (R[n], DSP_R (m));",
    },
  },
  { "", "n",  "movs.l <DSP_REG_M>,@<REG_N>",  "111101NNMMMM0111",
    {
      "MA (1);",
      "WLAT (R[n], DSP_R (m));",
    },
  },
  { "n", "n", "movs.l <DSP_REG_M>,@<REG_N>+", "111101NNMMMM1011",
    {
      "MA (1);",
      "WLAT (R[n], DSP_R (m));",
      "R[n] += 4;",
    },
  },
  { "n", "n8","movs.l <DSP_REG_M>,@<REG_N>+REG_8", "111101NNMMMM1111",
    {
      "MA (1);",
      "WLAT (R[n], DSP_R (m));",
      "R[n] += R[8];",
    },
  },
  { "n", "n", "movs.l <DSP_GRD_M>,@-<REG_N>", "111101NNGGGG0011",
    {
      "MA (1);",
      "R[n] -= 4;",
      "WLAT (R[n], SEXT (DSP_R (m)));",
    },
  },
  { "", "n",  "movs.l <DSP_GRD_M>,@<REG_N>",  "111101NNGGGG0111",
    {
      "MA (1);",
      "WLAT (R[n], SEXT (DSP_R (m)));",
    },
  },
  { "n", "n", "movs.l <DSP_GRD_M>,@<REG_N>+", "111101NNGGGG1011",
    {
      "MA (1);",
      "WLAT (R[n], SEXT (DSP_R (m)));",
      "R[n] += 4;",
    },
  },
  { "n", "n8","movs.l <DSP_GRD_M>,@<REG_N>+REG_8", "111101NNGGGG1111",
    {
      "MA (1);",
      "WLAT (R[n], SEXT (DSP_R (m)));",
      "R[n] += R[8];",
    },
  },
  { "", "n", "movx.w @<REG_xy>,<DSP_XY>",   "111100xyXY0001??",
    {
      "DSP_R (m) = RSWAT (R[n]) << 16;",
      "if (iword & 3)",
      "  {",
      "    iword &= 0xfd53; goto top;",
      "  }",
    },
  },
  { "", "n", "movx.l @<REG_xy>,<DSP_XY>",   "111100xyXY010100",
    {
      "DSP_R (m) = RLAT (R[n]);",
    },
  },
  { "n", "n", "movx.w @<REG_xy>+,<DSP_XY>", "111100xyXY0010??",
    {
      "DSP_R (m) = RSWAT (R[n]) << 16;",
      "R[n] += ((R[n] & 0xffff) == MOD_ME) ? MOD_DELTA : 2;",
      "if (iword & 3)",
      "  {",
      "    iword &= 0xfd53; goto top;",
      "  }",
    },
  },
  { "n", "n", "movx.l @<REG_xy>+,<DSP_XY>", "111100xyXY011000",
    {
      "DSP_R (m) = RLAT (R[n]);",
      "R[n] += ((R[n] & 0xffff) == MOD_ME) ? MOD_DELTA : 4;",
    },
  },
  { "n", "n8","movx.w @<REG_xy>+REG_8,<DSP_XY>", "111100xyXY0011??",
    {
      "DSP_R (m) = RSWAT (R[n]) << 16;",
      "R[n] += ((R[n] & 0xffff) == MOD_ME) ? MOD_DELTA : R[8];",
      "if (iword & 3)",
      "  {",
      "    iword &= 0xfd53; goto top;",
      "  }",
    },
  },
  { "n", "n8","movx.l @<REG_xy>+REG_8,<DSP_XY>", "111100xyXY011100",
    {
      "DSP_R (m) = RLAT (R[n]);",
      "R[n] += ((R[n] & 0xffff) == MOD_ME) ? MOD_DELTA : R[8];",
    },
  },
  { "", "n", "movx.w <DSP_Ax>,@<REG_xy>",   "111100xyax1001??",
    {
      "WWAT (R[n], DSP_R (m) >> 16);",
      "if (iword & 3)",
      "  {",
      "    iword &= 0xfd53; goto top;",
      "  }",
    },
  },
  { "", "n", "movx.l <DSP_Ax>,@<REG_xy>",   "111100xyax110100",
    {
      "WLAT (R[n], DSP_R (m));",
    },
  },
  { "n", "n", "movx.w <DSP_Ax>,@<REG_xy>+", "111100xyax1010??",
    {
      "WWAT (R[n], DSP_R (m) >> 16);",
      "R[n] += ((R[n] & 0xffff) == MOD_ME) ? MOD_DELTA : 2;",
      "if (iword & 3)",
      "  {",
      "    iword &= 0xfd53; goto top;",
      "  }",
    },
  },
  { "n", "n", "movx.l <DSP_Ax>,@<REG_xy>+", "111100xyax111000",
    {
      "WLAT (R[n], DSP_R (m));",
      "R[n] += ((R[n] & 0xffff) == MOD_ME) ? MOD_DELTA : 4;",
    },
  },
  { "n", "n8","movx.w <DSP_Ax>,@<REG_xy>+REG_8","111100xyax1011??",
    {
      "WWAT (R[n], DSP_R (m) >> 16);",
      "R[n] += ((R[n] & 0xffff) == MOD_ME) ? MOD_DELTA : R[8];",
      "if (iword & 3)",
      "  {",
      "    iword &= 0xfd53; goto top;",
      "  }",
    },
  },
  { "n", "n8","movx.l <DSP_Ax>,@<REG_xy>+REG_8","111100xyax111100",
    {
      "WLAT (R[n], DSP_R (m));",
      "R[n] += ((R[n] & 0xffff) == MOD_ME) ? MOD_DELTA : R[8];",
    },
  },
  { "", "n", "movy.w @<REG_yx>,<DSP_YX>",   "111100yxYX000001",
    {
      "DSP_R (m) = RSWAT (R[n]) << 16;",
    },
  },
  { "n", "n", "movy.w @<REG_yx>+,<DSP_YX>", "111100yxYX000010",
    {
      "DSP_R (m) = RSWAT (R[n]) << 16;",
      "R[n] += ((R[n] | ~0xffff) == MOD_ME) ? MOD_DELTA : 2;",
    },
  },
  { "n", "n9","movy.w @<REG_yx>+REG_9,<DSP_YX>", "111100yxYX000011",
    {
      "DSP_R (m) = RSWAT (R[n]) << 16;",
      "R[n] += ((R[n] | ~0xffff) == MOD_ME) ? MOD_DELTA : R[9];",
    },
  },
  { "", "n", "movy.w <DSP_Ay>,@<REG_yx>",   "111100yxAY010001",
    {
      "WWAT (R[n], DSP_R (m) >> 16);",
    },
  },
  { "n", "n", "movy.w <DSP_Ay>,@<REG_yx>+", "111100yxAY010010",
    {
      "WWAT (R[n], DSP_R (m) >> 16);",
      "R[n] += ((R[n] | ~0xffff) == MOD_ME) ? MOD_DELTA : 2;",
    },
  },
  { "n", "n9", "movy.w <DSP_Ay>,@<REG_yx>+REG_9", "111100yxAY010011",
    {
      "WWAT (R[n], DSP_R (m) >> 16);",
      "R[n] += ((R[n] | ~0xffff) == MOD_ME) ? MOD_DELTA : R[9];",
    },
  },
  { "", "n", "movy.l @<REG_yx>,<DSP_YX>",   "111100yxYX100001",
    {
      "DSP_R (m) = RLAT (R[n]);",
    },
  },
  { "n", "n", "movy.l @<REG_yx>+,<DSP_YX>", "111100yxYX100010",
    {
      "DSP_R (m) = RLAT (R[n]);",
      "R[n] += ((R[n] | ~0xffff) == MOD_ME) ? MOD_DELTA : 4;",
    },
  },
  { "n", "n9","movy.l @<REG_yx>+REG_9,<DSP_YX>", "111100yxYX100011",
    {
      "DSP_R (m) = RLAT (R[n]);",
      "R[n] += ((R[n] | ~0xffff) == MOD_ME) ? MOD_DELTA : R[9];",
    },
  },
  { "", "n", "movy.l <DSP_Ay>,@<REG_yx>",   "111100yxAY110001",
    {
      "WLAT (R[n], DSP_R (m));",
    },
  },
  { "n", "n", "movy.l <DSP_Ay>,@<REG_yx>+", "111100yxAY110010",
    {
      "WLAT (R[n], DSP_R (m));",
      "R[n] += ((R[n] | ~0xffff) == MOD_ME) ? MOD_DELTA : 4;",
    },
  },
  { "n", "n9", "movy.l <DSP_Ay>,@<REG_yx>+REG_9", "111100yxAY110011",
    {
      "WLAT (R[n], DSP_R (m));",
      "R[n] += ((R[n] | ~0xffff) == MOD_ME) ? MOD_DELTA : R[9];",
    },
  },
  { "", "", "nopx nopy", "1111000000000000",
    {
      "/* nop */",
    },
  },
  { "", "", "ppi", "1111100000000000",
    {
      "RAISE_EXCEPTION_IF_IN_DELAY_SLOT ();",
      "ppi_insn (RIAT (nip));",
      "SET_NIP (nip + 2);",
      "iword &= 0xf7ff; goto top;",
    },
  },
#endif
  {},
};

static op ppi_tab[] =
{
  { "","", "pshl #<imm>,dz",	"00000iiim16.zzzz",
    {
      "int Sz = DSP_R (z) & 0xffff0000;",
      "",
      "if (i <= 16)",
      "  res = Sz << i;",
      "else if (i >= 128 - 16)",
      "  res = (unsigned) Sz >> (128 - i);	/* no sign extension */",
      "else",
      "  {",
      "    RAISE_EXCEPTION (SIGILL);",
      "    return;",
      "  }",
      "res &= 0xffff0000;",
      "res_grd = 0;",
      "goto logical;",
    },
  },
  { "","", "psha #<imm>,dz",	"00010iiim32.zzzz",
    {
      "int Sz = DSP_R (z);",
      "int Sz_grd = GET_DSP_GRD (z);",
      "",
      "if (i <= 32)",
      "  {",
      "    if (i == 32)",
      "      {",
      "        res = 0;",
      "        res_grd = Sz;",
      "      }",
      "    else",
      "      {",
      "        res = Sz << i;",
      "        res_grd = Sz_grd << i | (unsigned) Sz >> (32 - i);",
      "      }",
      "    res_grd = SEXT (res_grd);",
      "    carry = res_grd & 1;",
      "  }",
      "else if (i >= 96)",
      "  {",
      "    i = 128 - i;",
      "    if (i == 32)",
      "      {",
      "        res_grd = SIGN32 (Sz_grd);",
      "        res = Sz_grd;",
      "      }",
      "    else",
      "      {",
      "        res = Sz >> i | Sz_grd << (32 - i);",
      "        res_grd = Sz_grd >> i;",
      "      }",
      "    carry = Sz >> (i - 1) & 1;",
      "  }",
      "else",
      "  {",
      "    RAISE_EXCEPTION (SIGILL);",
      "    return;",
      "  }",
      "COMPUTE_OVERFLOW;",
      "greater_equal = 0;",
    },
  },
  { "","", "pmuls Se,Sf,Dg",	"0100eeff0000gg00",
    {
      "res = (DSP_R (e) >> 16) * (DSP_R (f) >> 16) * 2;",
      "if (res == 0x80000000)",
      "  res = 0x7fffffff;",
      "DSP_R (g) = res;",
      "DSP_GRD (g) = SIGN32 (res);",
      "return;",
    },
  },
  { "","", "psub Sx,Sy,Du pmuls Se,Sf,Dg",	"0110eeffxxyygguu",
    {
      "int Sx = DSP_R (x);",
      "int Sx_grd = GET_DSP_GRD (x);",
      "int Sy = DSP_R (y);",
      "int Sy_grd = SIGN32 (Sy);",
      "",
      "res = (DSP_R (e) >> 16) * (DSP_R (f) >> 16) * 2;",
      "if (res == 0x80000000)",
      "  res = 0x7fffffff;",
      "DSP_R (g) = res;",
      "DSP_GRD (g) = SIGN32 (res);",
      "",
      "z = u;",
      "res = Sx - Sy;",
      "carry = (unsigned) res > (unsigned) Sx;",
      "res_grd = Sx_grd - Sy_grd - carry;",
      "COMPUTE_OVERFLOW;",
      "ADD_SUB_GE;",
    },
  },
  { "","", "padd Sx,Sy,Du pmuls Se,Sf,Dg",	"0111eeffxxyygguu",
    {
      "int Sx = DSP_R (x);",
      "int Sx_grd = GET_DSP_GRD (x);",
      "int Sy = DSP_R (y);",
      "int Sy_grd = SIGN32 (Sy);",
      "",
      "res = (DSP_R (e) >> 16) * (DSP_R (f) >> 16) * 2;",
      "if (res == 0x80000000)",
      "  res = 0x7fffffff;",
      "DSP_R (g) = res;",
      "DSP_GRD (g) = SIGN32 (res);",
      "",
      "z = u;",
      "res = Sx + Sy;",
      "carry = (unsigned) res < (unsigned) Sx;",
      "res_grd = Sx_grd + Sy_grd + carry;",
      "COMPUTE_OVERFLOW;",
    },
  },
  { "","", "psubc Sx,Sy,Dz",		"10100000xxyyzzzz",
    {
      "int Sx = DSP_R (x);",
      "int Sx_grd = GET_DSP_GRD (x);",
      "int Sy = DSP_R (y);",
      "int Sy_grd = SIGN32 (Sy);",
      "",
      "res = Sx - Sy - (DSR & 1);",
      "carry = (unsigned) res > (unsigned) Sx || (res == Sx && Sy);",
      "res_grd = Sx_grd + Sy_grd + carry;",
      "COMPUTE_OVERFLOW;",
      "ADD_SUB_GE;",
      "DSR &= ~0xf1;\n",
      "if (res || res_grd)\n",
      "  DSR |= greater_equal | (res_grd >> 2 & DSR_MASK_N) | overflow;\n",
      "else\n",
      "  DSR |= DSR_MASK_Z | overflow;\n",
      "DSR |= carry;\n",
      "goto assign_z;\n",
    },
  },
  { "","", "paddc Sx,Sy,Dz",	"10110000xxyyzzzz",
    {
      "int Sx = DSP_R (x);",
      "int Sx_grd = GET_DSP_GRD (x);",
      "int Sy = DSP_R (y);",
      "int Sy_grd = SIGN32 (Sy);",
      "",
      "res = Sx + Sy + (DSR & 1);",
      "carry = (unsigned) res < (unsigned) Sx || (res == Sx && Sy);",
      "res_grd = Sx_grd + Sy_grd + carry;",
      "COMPUTE_OVERFLOW;",
      "ADD_SUB_GE;",
      "DSR &= ~0xf1;\n",
      "if (res || res_grd)\n",
      "  DSR |= greater_equal | (res_grd >> 2 & DSR_MASK_N) | overflow;\n",
      "else\n",
      "  DSR |= DSR_MASK_Z | overflow;\n",
      "DSR |= carry;\n",
      "goto assign_z;\n",
    },
  },
  { "","", "pcmp Sx,Sy",	"10000100xxyyzzzz",
    {
      "int Sx = DSP_R (x);",
      "int Sx_grd = GET_DSP_GRD (x);",
      "int Sy = DSP_R (y);",
      "int Sy_grd = SIGN32 (Sy);",
      "",
      "z = 17; /* Ignore result.  */",
      "res = Sx - Sy;",
      "carry = (unsigned) res > (unsigned) Sx;",
      "res_grd = Sx_grd - Sy_grd - carry;",
      "COMPUTE_OVERFLOW;",
      "ADD_SUB_GE;",
    },
  },
  { "","", "pwsb Sx,Sy,Dz",	"10100100....zzzz",
    {
      "return;",
    },
  },
  { "","", "pwad Sx,Sy,Dz",	"10110100....zzzz",
    {
      "return;",
    },
  },
  { "","", "(if cc) pabs Sx,Dz",	"100010ccxx01zzzz",
    {
      "/* FIXME: duplicate code pabs.  */",
      "res = DSP_R (x);",
      "res_grd = GET_DSP_GRD (x);",
      "if (res >= 0)",
      "  carry = 0;",
      "else",
      "  {",
      "    res = -res;",
      "    carry = (res != 0); /* The manual has a bug here.  */",
      "    res_grd = -res_grd - carry;",
      "  }",
      "COMPUTE_OVERFLOW;",
      "/* ??? The re-computing of overflow after",
      "   saturation processing is specific to pabs.  */",
      "overflow = res_grd != SIGN32 (res) ? DSR_MASK_V : 0;",
      "ADD_SUB_GE;",
    },
  },
  { "","", "pabs Sx,Dz",	"10001000xx..zzzz",
    {
      "res = DSP_R (x);",
      "res_grd = GET_DSP_GRD (x);",
      "if (res >= 0)",
      "  carry = 0;",
      "else",
      "  {",
      "    res = -res;",
      "    carry = (res != 0); /* The manual has a bug here.  */",
      "    res_grd = -res_grd - carry;",
      "  }",
      "COMPUTE_OVERFLOW;",
      "/* ??? The re-computing of overflow after",
      "   saturation processing is specific to pabs.  */",
      "overflow = res_grd != SIGN32 (res) ? DSR_MASK_V : 0;",
      "ADD_SUB_GE;",
    },
  },

  { "","", "(if cc) prnd Sx,Dz",	"100110ccxx01zzzz",
    {
      "/* FIXME: duplicate code prnd.  */",
      "int Sx = DSP_R (x);",
      "int Sx_grd = GET_DSP_GRD (x);",
      "",
      "res = (Sx + 0x8000) & 0xffff0000;",
      "carry = (unsigned) res < (unsigned) Sx;",
      "res_grd = Sx_grd + carry;",
      "COMPUTE_OVERFLOW;",
      "ADD_SUB_GE;",
    },
  },
  { "","", "prnd Sx,Dz",	"10011000xx..zzzz",
    {
      "int Sx = DSP_R (x);",
      "int Sx_grd = GET_DSP_GRD (x);",
      "",
      "res = (Sx + 0x8000) & 0xffff0000;",
      "carry = (unsigned) res < (unsigned) Sx;",
      "res_grd = Sx_grd + carry;",
      "COMPUTE_OVERFLOW;",
      "ADD_SUB_GE;",
    },
  },

  { "","", "(if cc) pabs Sy,Dz",	"101010cc01yyzzzz",
    {
      "/* FIXME: duplicate code pabs.  */",
      "res = DSP_R (y);",
      "res_grd = 0;",
      "overflow = 0;",
      "greater_equal = DSR_MASK_G;",
      "if (res >= 0)",
      "  carry = 0;",
      "else",
      "  {",
      "    res = -res;",
      "    carry = 1;",
      "    if (res < 0)",
      "      {",
      "        if (S)",
      "          res = 0x7fffffff;",
      "        else",
      "          {",
      "            overflow = DSR_MASK_V;",
      "            greater_equal = 0;",
      "          }",
      "      }",
      "  }",
    },
  },
  { "","", "pabs Sy,Dz",	"10101000..yyzzzz",
    {
      "res = DSP_R (y);",
      "res_grd = 0;",
      "overflow = 0;",
      "greater_equal = DSR_MASK_G;",
      "if (res >= 0)",
      "  carry = 0;",
      "else",
      "  {",
      "    res = -res;",
      "    carry = 1;",
      "    if (res < 0)",
      "      {",
      "        if (S)",
      "          res = 0x7fffffff;",
      "        else",
      "          {",
      "            overflow = DSR_MASK_V;",
      "            greater_equal = 0;",
      "          }",
      "      }",
      "  }",
    },
  },
  { "","", "(if cc) prnd Sy,Dz",	"101110cc01yyzzzz",
    {
      "/* FIXME: duplicate code prnd.  */",
      "int Sy = DSP_R (y);",
      "int Sy_grd = SIGN32 (Sy);",
      "",
      "res = (Sy + 0x8000) & 0xffff0000;",
      "carry = (unsigned) res < (unsigned) Sy;",
      "res_grd = Sy_grd + carry;",
      "COMPUTE_OVERFLOW;",
      "ADD_SUB_GE;",
    },
  },
  { "","", "prnd Sy,Dz",	"10111000..yyzzzz",
    {
      "int Sy = DSP_R (y);",
      "int Sy_grd = SIGN32 (Sy);",
      "",
      "res = (Sy + 0x8000) & 0xffff0000;",
      "carry = (unsigned) res < (unsigned) Sy;",
      "res_grd = Sy_grd + carry;",
      "COMPUTE_OVERFLOW;",
      "ADD_SUB_GE;",
    },
  },
  { "","", "(if cc) pshl Sx,Sy,Dz",	"100000ccxxyyzzzz",
    {
      "int Sx = DSP_R (x) & 0xffff0000;",
      "int Sy = DSP_R (y) >> 16 & 0x7f;",
      "",
      "if (Sy <= 16)",
      "  res = Sx << Sy;",
      "else if (Sy >= 128 - 16)",
      "  res = (unsigned) Sx >> (128 - Sy);	/* no sign extension */",
      "else",
      "  {",
      "    RAISE_EXCEPTION (SIGILL);",
      "    return;",
      "  }",
      "goto cond_logical;",
    },
  },
  { "","", "(if cc) psha Sx,Sy,Dz",	"100100ccxxyyzzzz",
    {
      "int Sx = DSP_R (x);",
      "int Sx_grd = GET_DSP_GRD (x);",
      "int Sy = DSP_R (y) >> 16 & 0x7f;",
      "",
      "if (Sy <= 32)",
      "  {",
      "    if (Sy == 32)",
      "      {",
      "        res = 0;",
      "        res_grd = Sx;",
      "      }",
      "    else",
      "      {",
      "        res = Sx << Sy;",
      "        res_grd = Sx_grd << Sy | (unsigned) Sx >> (32 - Sy);",
      "      }",
      "    res_grd = SEXT (res_grd);",
      "    carry = res_grd & 1;",
      "  }",
      "else if (Sy >= 96)",
      "  {",
      "    Sy = 128 - Sy;",
      "    if (Sy == 32)",
      "      {",
      "        res_grd = SIGN32 (Sx_grd);",
      "        res = Sx_grd;",
      "      }",
      "    else",
      "      {",
      "        res = Sx >> Sy | Sx_grd << (32 - Sy);",
      "        res_grd = Sx_grd >> Sy;",
      "      }",
      "    carry = Sx >> (Sy - 1) & 1;",
      "  }",
      "else",
      "  {",
      "    RAISE_EXCEPTION (SIGILL);",
      "    return;",
      "  }",
      "COMPUTE_OVERFLOW;",
      "greater_equal = 0;",
    },
  },
  { "","", "(if cc) psub Sx,Sy,Dz",	"101000ccxxyyzzzz",
    {
      "int Sx = DSP_R (x);",
      "int Sx_grd = GET_DSP_GRD (x);",
      "int Sy = DSP_R (y);",
      "int Sy_grd = SIGN32 (Sy);",
      "",
      "res = Sx - Sy;",
      "carry = (unsigned) res > (unsigned) Sx;",
      "res_grd = Sx_grd - Sy_grd - carry;",
      "COMPUTE_OVERFLOW;",
      "ADD_SUB_GE;",
    },
  },
  { "","", "(if cc) psub Sy,Sx,Dz",	"100001ccxxyyzzzz",
    {
      "int Sx = DSP_R (x);",
      "int Sx_grd = GET_DSP_GRD (x);",
      "int Sy = DSP_R (y);",
      "int Sy_grd = SIGN32 (Sy);",
      "",
      "res = Sy - Sx;",
      "carry = (unsigned) res > (unsigned) Sy;",
      "res_grd = Sy_grd - Sx_grd - carry;",
      "COMPUTE_OVERFLOW;",
      "ADD_SUB_GE;",
    },
  },
  { "","", "(if cc) padd Sx,Sy,Dz",	"101100ccxxyyzzzz",
    {
      "int Sx = DSP_R (x);",
      "int Sx_grd = GET_DSP_GRD (x);",
      "int Sy = DSP_R (y);",
      "int Sy_grd = SIGN32 (Sy);",
      "",
      "res = Sx + Sy;",
      "carry = (unsigned) res < (unsigned) Sx;",
      "res_grd = Sx_grd + Sy_grd + carry;",
      "COMPUTE_OVERFLOW;",
      "ADD_SUB_GE;",
    },
  },
  { "","", "(if cc) pand Sx,Sy,Dz",	"100101ccxxyyzzzz",
    {
      "res = DSP_R (x) & DSP_R (y);",
    "cond_logical:",
      "res &= 0xffff0000;",
      "res_grd = 0;",
      "if (iword & 0x200)\n",
      "  goto assign_z;\n",
    "logical:",
      "carry = 0;",
      "overflow = 0;",
      "greater_equal = 0;",
      "DSR &= ~0xf1;\n",
      "if (res)\n",
      "  DSR |= res >> 26 & DSR_MASK_N;\n",
      "else\n",
      "  DSR |= DSR_MASK_Z;\n",
      "goto assign_dc;\n",
    },
  },
  { "","", "(if cc) pxor Sx,Sy,Dz",	"101001ccxxyyzzzz",
    {
      "res = DSP_R (x) ^ DSP_R (y);",
      "goto cond_logical;",
    },
  },
  { "","", "(if cc) por Sx,Sy,Dz",	"101101ccxxyyzzzz",
    {
      "res = DSP_R (x) | DSP_R (y);",
      "goto cond_logical;",
    },
  },
  { "","", "(if cc) pdec Sx,Dz",	"100010ccxx..zzzz",
    {
      "int Sx = DSP_R (x);",
      "int Sx_grd = GET_DSP_GRD (x);",
      "",
      "res = Sx - 0x10000;",
      "carry = Sx < (INT_MIN + 0x10000);",
      "res_grd = Sx_grd - carry;",
      "COMPUTE_OVERFLOW;",
      "ADD_SUB_GE;",
      "res &= 0xffff0000;",
    },
  },
  { "","", "(if cc) pinc Sx,Dz",	"100110ccxx..zzzz",
    {
      "int Sx = DSP_R (x);",
      "int Sx_grd = GET_DSP_GRD (x);",
      "",
      "res = Sx + 0x10000;",
      "carry = Sx > (INT_MAX - 0x10000);",
      "res_grd = Sx_grd + carry;",
      "COMPUTE_OVERFLOW;",
      "ADD_SUB_GE;",
      "res &= 0xffff0000;",
    },
  },
  { "","", "(if cc) pdec Sy,Dz",	"101010cc..yyzzzz",
    {
      "int Sy = DSP_R (y);",
      "int Sy_grd = SIGN32 (Sy);",
      "",
      "res = Sy - 0x10000;",
      "carry = Sy < (INT_MIN + 0x10000);",
      "res_grd = Sy_grd - carry;",
      "COMPUTE_OVERFLOW;",
      "ADD_SUB_GE;",
      "res &= 0xffff0000;",
    },
  },
  { "","", "(if cc) pinc Sy,Dz",	"101110cc..yyzzzz",
    {
      "int Sy = DSP_R (y);",
      "int Sy_grd = SIGN32 (Sy);",
      "",
      "res = Sy + 0x10000;",
      "carry = Sy > (INT_MAX - 0x10000);",
      "res_grd = Sy_grd + carry;",
      "COMPUTE_OVERFLOW;",
      "ADD_SUB_GE;",
      "res &= 0xffff0000;",
    },
  },
  { "","", "(if cc) pclr Dz",		"100011cc....zzzz",
    {
      "res = 0;",
      "res_grd = 0;",
      "carry = 0;",
      "overflow = 0;",
      "greater_equal = 1;",
    },
  },
  { "","", "pclr Du pmuls Se,Sf,Dg",	"0100eeff0001gguu",
    {
      "/* Do multiply.  */",
      "res = (DSP_R (e) >> 16) * (DSP_R (f) >> 16) * 2;",
      "if (res == 0x80000000)",
      "  res = 0x7fffffff;",
      "DSP_R (g) = res;",
      "DSP_GRD (g) = SIGN32 (res);",
      "/* FIXME: update DSR based on results of multiply!  */",
      "",
      "/* Do clr.  */",
      "z = u;",
      "res = 0;",
      "res_grd = 0;",
      "goto assign_z;",
    },
  },
  { "","", "(if cc) pdmsb Sx,Dz",	"100111ccxx..zzzz",
    {
      "unsigned Sx = DSP_R (x);",
      "int Sx_grd = GET_DSP_GRD (x);",
      "int i = 16;",
      "",
      "if (Sx_grd < 0)",
      "  {",
      "    Sx_grd = ~Sx_grd;",
      "    Sx = ~Sx;",
      "  }",
      "if (Sx_grd)",
      "  {",
      "    Sx = Sx_grd;",
      "    res = -2;",
      "  }",
      "else if (Sx)",
      "  res = 30;",
      "else",
      "  res = 31;",
      "do",
      "  {",
      "    if (Sx & ((unsigned)~0 << i))",
      "      {",
      "        res -= i;",
      "        Sx >>= i;",
      "      }",
      "  }",
      "while (i >>= 1);",
      "res <<= 16;",
      "res_grd = SIGN32 (res);",
      "carry = 0;",
      "overflow = 0;",
      "ADD_SUB_GE;",
    },
  },
  { "","", "(if cc) pdmsb Sy,Dz",	"101111cc..yyzzzz",
    {
      "unsigned Sy = DSP_R (y);",
      "int i = 16;",
      "",
      "if (Sy < 0)",
      "  Sy = ~Sy;",
      "Sy <<= 1;",
      "res = 31;",
      "do",
      "  {",
      "    if (Sy & ((unsigned)~0 << i))",
      "      {",
      "        res -= i;",
      "        Sy >>= i;",
      "      }",
      "  }",
      "while (i >>= 1);",
      "res <<= 16;",
      "res_grd = SIGN32 (res);",
      "carry = 0;",
      "overflow = 0;",
      "ADD_SUB_GE;",
    },
  },
  { "","", "(if cc) pneg Sx,Dz",	"110010ccxx..zzzz",
    {
      "int Sx = DSP_R (x);",
      "int Sx_grd = GET_DSP_GRD (x);",
      "",
      "res = 0 - Sx;",
      "carry = res != 0;",
      "res_grd = 0 - Sx_grd - carry;",
      "COMPUTE_OVERFLOW;",
      "ADD_SUB_GE;",
    },
  },
  { "","", "(if cc) pcopy Sx,Dz",	"110110ccxx..zzzz",
    {
      "res = DSP_R (x);",
      "res_grd = GET_DSP_GRD (x);",
      "carry = 0;",
      "COMPUTE_OVERFLOW;",
      "ADD_SUB_GE;",
    },
  },
  { "","", "(if cc) pneg Sy,Dz",	"111010cc..yyzzzz",
    {
      "int Sy = DSP_R (y);",
      "int Sy_grd = SIGN32 (Sy);",
      "",
      "res = 0 - Sy;",
      "carry = res != 0;",
      "res_grd = 0 - Sy_grd - carry;",
      "COMPUTE_OVERFLOW;",
      "ADD_SUB_GE;",
    },
  },
  { "","", "(if cc) pcopy Sy,Dz",	"111110cc..yyzzzz",
    {
      "res = DSP_R (y);",
      "res_grd = SIGN32 (res);",
      "carry = 0;",
      "COMPUTE_OVERFLOW;",
      "ADD_SUB_GE;",
    },
  },
  { "","", "(if cc) psts MACH,Dz",	"110011cc....zzzz",
    {
      "res = MACH;",
      "res_grd = SIGN32 (res);",
      "goto assign_z;",
    },
  },
  { "","", "(if cc) psts MACL,Dz",	"110111cc....zzzz",
    {
      "res = MACL;",
      "res_grd = SIGN32 (res);",
      "goto assign_z;",
    },
  },
  { "","", "(if cc) plds Dz,MACH",	"111011cc....zzzz",
    {
      "if (0xa05f >> z & 1)",
      "  RAISE_EXCEPTION (SIGILL);",
      "else",
      "  MACH = DSP_R (z);",
      "return;",
    },
  },
  { "","", "(if cc) plds Dz,MACL",	"111111cc....zzzz",
    {
      "if (0xa05f >> z & 1)",
      "  RAISE_EXCEPTION (SIGILL);",
      "else",
      "  MACL = DSP_R (z);",
      "return;",
    },
  },
  /* sh4a */
  { "","", "(if cc) pswap Sx,Dz",	"100111ccxx01zzzz",
    {
      "int Sx = DSP_R (x);",
      "",
      "res = ((Sx & 0xffff) * 65536) + ((Sx >> 16) & 0xffff);",
      "res_grd = GET_DSP_GRD (x);",
      "carry = 0;",
      "overflow = 0;",
      "greater_equal = res & 0x80000000 ? 0 : DSR_MASK_G;",
    },
  },
  /* sh4a */
  { "","", "(if cc) pswap Sy,Dz",	"101111cc01yyzzzz",
    {
      "int Sy = DSP_R (y);",
      "",
      "res = ((Sy & 0xffff) * 65536) + ((Sy >> 16) & 0xffff);",
      "res_grd = SIGN32 (Sy);",
      "carry = 0;",
      "overflow = 0;",
      "greater_equal = res & 0x80000000 ? 0 : DSR_MASK_G;",
    },
  },

  {},
};

static int
qfunc (const void *va, const void *vb)
{
  const op *a = va;
  const op *b = vb;
  char bufa[9];
  char bufb[9];
  int diff;

  memcpy (bufa, a->code, 4);
  memcpy (bufa + 4, a->code + 12, 4);
  bufa[8] = 0;

  memcpy (bufb, b->code, 4);
  memcpy (bufb + 4, b->code + 12, 4);
  bufb[8] = 0;
  diff = strcmp (bufa, bufb);
  /* Stabilize the sort, so that later entries can override more general
     preceding entries.  */
  return diff ? diff : a - b;
}

static void
sorttab (void)
{
  op *p = tab;
  int len = 0;

  while (p->name)
    {
      p++;
      len++;
    }
  qsort (tab, len, sizeof (*p), qfunc);
}

static void
gengastab (void)
{
  op *p;
  sorttab ();
  for (p = tab; p->name; p++)
    {
      printf ("%s %-30s\n", p->code, p->name);
    }
}

static unsigned short table[1 << 16];

static int warn_conflicts = 0;

static void
conflict_warn (int val, int i)
{
  int ix, key;
  int j = table[val];

  fprintf (stderr, "Warning: opcode table conflict: 0x%04x (idx %d && %d)\n",
	   val, i, table[val]);

  for (ix = ARRAY_SIZE (tab); ix >= 0; ix--)
    if (tab[ix].index == i || tab[ix].index == j)
      {
	key = ((tab[ix].code[0] - '0') << 3) +
	  ((tab[ix].code[1] - '0') << 2) +
	  ((tab[ix].code[2] - '0') << 1) +
	  ((tab[ix].code[3] - '0'));

	if (val >> 12 == key)
	  fprintf (stderr, "  %s -- %s\n", tab[ix].code, tab[ix].name);
      }

  for (ix = ARRAY_SIZE (movsxy_tab); ix >= 0; ix--)
    if (movsxy_tab[ix].index == i || movsxy_tab[ix].index == j)
      {
	key = ((movsxy_tab[ix].code[0] - '0') << 3) +
	  ((movsxy_tab[ix].code[1] - '0') << 2) +
	  ((movsxy_tab[ix].code[2] - '0') << 1) +
	  ((movsxy_tab[ix].code[3] - '0'));

	if (val >> 12 == key)
	  fprintf (stderr, "  %s -- %s\n",
		   movsxy_tab[ix].code, movsxy_tab[ix].name);
      }

  for (ix = ARRAY_SIZE (ppi_tab); ix >= 0; ix--)
    if (ppi_tab[ix].index == i || ppi_tab[ix].index == j)
      {
	key = ((ppi_tab[ix].code[0] - '0') << 3) +
	  ((ppi_tab[ix].code[1] - '0') << 2) +
	  ((ppi_tab[ix].code[2] - '0') << 1) +
	  ((ppi_tab[ix].code[3] - '0'));

	if (val >> 12 == key)
	  fprintf (stderr, "  %s -- %s\n",
		   ppi_tab[ix].code, ppi_tab[ix].name);
      }
}

/* Take an opcode, expand all varying fields in it out and fill all the
   right entries in 'table' with the opcode index.  */

static void
expand_opcode (int val, int i, const char *s)
{
  if (*s == 0)
    {
      if (warn_conflicts && table[val] != 0)
	conflict_warn (val, i);
      table[val] = i;
    }
  else
    {
      int j = 0, m = 0;

      switch (s[0])
	{
	default:
	  fprintf (stderr, "expand_opcode: illegal char '%c'\n", s[0]);
	  exit (1);
	case '0':
	case '1':
	  /* Consume an arbitrary number of ones and zeros.  */
	  do {
	    j = (j << 1) + (s[m++] - '0');
	  } while (s[m] == '0' || s[m] == '1');
	  expand_opcode ((val << m) | j, i, s + m);
	  break;
	case 'N':	/* NN -- four-way fork */
	  for (j = 0; j < 4; j++)
	    expand_opcode ((val << 2) | j, i, s + 2);
	  break;
	case 'x':	/* xx or xy -- two-way or four-way fork */
	  for (j = 0; j < 4; j += (s[1] == 'x' ? 2 : 1))
	    expand_opcode ((val << 2) | j, i, s + 2);
	  break;
	case 'y':	/* yy or yx -- two-way or four-way fork */
	  for (j = 0; j < (s[1] == 'x' ? 4 : 2); j++)
	    expand_opcode ((val << 2) | j, i, s + 2);
	  break;
	case '?':	/* Seven-way "wildcard" fork for movxy */
	  expand_opcode ((val << 2), i, s + 2);
	  for (j = 1; j < 4; j++)
	    {
	      expand_opcode ((val << 2) | j, i, s + 2);
	      expand_opcode ((val << 2) | (j + 16), i, s + 2);
	    }
	  break;
	case 'i':	/* eg. "i8*1" */
	case '.':	/* "...." is a wildcard */
	case 'n':
	case 'm':
	  /* nnnn, mmmm, i#*#, .... -- 16-way fork.  */
	  for (j = 0; j < 16; j++)
	    expand_opcode ((val << 4) | j, i, s + 4);
	  break;
	case 'e':
	  /* eeee -- even numbered register:
	     8 way fork.  */
	  for (j = 0; j < 15; j += 2)
	    expand_opcode ((val << 4) | j, i, s + 4);
	  break;
	case 'M':
	  /* A0, A1, X0, X1, Y0, Y1, M0, M1, A0G, A1G:
	     MMMM -- 10-way fork */
	  expand_opcode ((val << 4) | 5, i, s + 4);
	  for (j = 7; j < 16; j++)
	    expand_opcode ((val << 4) | j, i, s + 4);
	  break;
	case 'G':
	  /* A1G, A0G:
	     GGGG -- two-way fork */
	  for (j = 13; j <= 15; j +=2)
	    expand_opcode ((val << 4) | j, i, s + 4);
	  break;
	case 's':
	  /* ssss -- 10-way fork */
	  /* System registers mach, macl, pr: */
	  for (j = 0; j < 3; j++)
	    expand_opcode ((val << 4) | j, i, s + 4);
	  /* System registers fpul, fpscr/dsr, a0, x0, x1, y0, y1: */
	  for (j = 5; j < 12; j++)
	    expand_opcode ((val << 4) | j, i, s + 4);
	  break;
	case 'X':
	  /* XX/XY -- 2/4 way fork.  */
	  for (j = 0; j < 4; j += (s[1] == 'X' ? 2 : 1))
	    expand_opcode ((val << 2) | j, i, s + 2);
	  break;
	case 'a':
	  /* aa/ax -- 2/4 way fork.  */
	  for (j = 0; j < 4; j += (s[1] == 'a' ? 2 : 1))
	    expand_opcode ((val << 2) | j, i, s + 2);
	  break;
	case 'Y':
	  /* YY/YX -- 2/4 way fork.  */
	  for (j = 0; j < (s[1] == 'Y' ? 2 : 4); j += 1)
	    expand_opcode ((val << 2) | j, i, s + 2);
	  break;
	case 'A':
	  /* AA/AY: 2/4 way fork.  */
	  for (j = 0; j < (s[1] == 'A' ? 2 : 4); j += 1)
	    expand_opcode ((val << 2) | j, i, s + 2);
	  break;
	case 'v':
	  /* vv(VV) -- 4(16) way fork.  */
	  /* Vector register fv0/4/8/12.  */
	  if (s[2] == 'V')
	    {
	      /* 2 vector registers.  */
	      for (j = 0; j < 15; j++)
		expand_opcode ((val << 4) | j, i, s + 4);
	    }
	  else
	    {
	      /* 1 vector register.  */
	      for (j = 0; j < 4; j += 1)
		expand_opcode ((val << 2) | j, i, s + 2);
	    }
	  break;
	}
    }
}

/* Print the jump table used to index an opcode into a switch
   statement entry.  */

static void
dumptable (const char *name, int size, int start)
{
  int lump = 256;
  int online = 16;

  int i = start;

  printf ("unsigned short %s[%d] = {\n", name, size);
  while (i < start + size)
    {
      int j = 0;

      printf ("/* 0x%x */\n", i);

      while (j < lump)
	{
	  int k = 0;
	  while (k < online)
	    {
	      printf ("%2d", table[i + j + k]);
	      if (j + k < lump)
		printf (",");

	      k++;
	    }
	  j += k;
	  printf ("\n");
	}
      i += j;
    }
  printf ("};\n");
}


static void
filltable (op *p)
{
  static int index = 1;

  sorttab ();
  for (; p->name; p++)
    {
      p->index = index++;
      expand_opcode (0, p->index, p->code);
    }
}

/* Table already contains all the switch case tags for 16-bit opcode double
   data transfer (ddt) insns, and the switch case tag for processing parallel
   processing insns (ppi) for code 0xf800 (ppi nopx nopy).  Copy the
   latter tag to represent all combinations of ppi with ddt.  */
static void
expand_ppi_movxy (void)
{
  int i;

  for (i = 0xf000; i < 0xf400; i++)
    if (table[i])
      table[i + 0x800] = table[0xf800];
}

static void
gensim_caselist (op *p)
{
  for (; p->name; p++)
    {
      int j;
      int sextbit = -1;
      int needm = 0;
      int needn = 0;
      const char *s = p->code;

      printf ("  /* %s %s */\n", p->name, p->code);
      printf ("  case %d:\n", p->index);

      printf ("    {\n");
      while (*s)
	{
	  switch (*s)
	    {
	    default:
	      fprintf (stderr, "gencode/gensim_caselist: illegal char '%c'\n",
		       *s);
	      exit (1);
	      break;
	    case '?':
	      /* Wildcard expansion, nothing to do here.  */
	      s += 2;
	      break;
	    case 'v':
	      printf ("      int v1 = ((iword >> 10) & 3) * 4;\n");
	      s += 2;
	      break;
	    case 'V':
	      printf ("      int v2 = ((iword >> 8)  & 3) * 4;\n");
	      s += 2;
	      break;
	    case '0':
	    case '1':
	      s += 2;
	      break;
	    case '.':
	      s += 4;
	      break;
	    case 'n':
	    case 'e':
	      printf ("      int n = (iword >> 8) & 0xf;\n");
	      needn = 1;
	      s += 4;
	      break;
	    case 'N':
	      printf ("      int n = (((iword >> 8) - 2) & 0x3) + 2;\n");
	      s += 2;
	      break;
	    case 'x':
	      if (s[1] == 'y')	/* xy */
		{
		  printf ("      int n = (iword & 3) ?\n");
		  printf ("              ((iword >> 9) & 1) + 4 :\n");
		  printf ("              REG_xy ((iword >> 8) & 3);\n");
		}
	      else
		printf ("      int n = ((iword >> 9) & 1) + 4;\n");
	      needn = 1;
	      s += 2;
	      break;
	    case 'y':
	      if (s[1] == 'x')	/* yx */
		{
		  printf ("      int n = (iword & 0xc) ?\n");
		  printf ("              ((iword >> 8) & 1) + 6 :\n");
		  printf ("              REG_yx ((iword >> 8) & 3);\n");
		}
	      else
		printf ("      int n = ((iword >> 8) & 1) + 6;\n");
	      needn = 1;
	      s += 2;
	      break;
	    case 'm':
	      needm = 1;
	    case 's':
	    case 'M':
	    case 'G':
	      printf ("      int m = (iword >> 4) & 0xf;\n");
	      s += 4;
	      break;
	    case 'X':
	      if (s[1] == 'Y')	/* XY */
		{
		  printf ("      int m = (iword & 3) ?\n");
		  printf ("              ((iword >> 7) & 1) + 8 :\n");
		  printf ("              DSP_xy ((iword >> 6) & 3);\n");
		}
	      else
		printf ("      int m = ((iword >> 7) & 1) + 8;\n");
	      s += 2;
	      break;
	    case 'a':
	      if (s[1] == 'x')	/* ax */
		{
		  printf ("      int m = (iword & 3) ?\n");
		  printf ("              7 - ((iword >> 6) & 2) :\n");
		  printf ("              DSP_ax ((iword >> 6) & 3);\n");
		}
	      else
		printf ("      int m = 7 - ((iword >> 6) & 2);\n");
	      s += 2;
	      break;
	    case 'Y':
	      if (s[1] == 'X')	/* YX */
		{
		  printf ("      int m = (iword & 0xc) ?\n");
		  printf ("              ((iword >> 6) & 1) + 10 :\n");
		  printf ("              DSP_yx ((iword >> 6) & 3);\n");
		}
	      else
		printf ("      int m = ((iword >> 6) & 1) + 10;\n");
	      s += 2;
	      break;
	    case 'A':
	      if (s[1] == 'Y')	/* AY */
		{
		  printf ("      int m = (iword & 0xc) ?\n");
		  printf ("              7 - ((iword >> 5) & 2) :\n");
		  printf ("              DSP_ay ((iword >> 6) & 3);\n");
		}
	      else
		printf ("      int m = 7 - ((iword >> 5) & 2);\n");
	      s += 2;
	      break;

	    case 'i':
	      printf ("      int i = (iword & 0x");

	      switch (s[1])
		{
		default:
		  fprintf (stderr,
			   "gensim_caselist: Unknown char '%c' in %s\n",
			   s[1], s);
		  exit (1);
		  break;
		case '4':
		  printf ("f");
		  break;
		case '8':
		  printf ("ff");
		  break;
		case '1':
		  sextbit = 12;
		  printf ("fff");
		  break;
		}
	      printf (")");

	      switch (s[3])
		{
		default:
		  fprintf (stderr,
			   "gensim_caselist: Unknown char '%c' in %s\n",
			   s[3], s);
		  exit (1);
		  break;
		case '.':	/* eg. "i12." */
		  break;
		case '1':
		  break;
		case '2':
		  printf (" << 1");
		  break;
		case '4':
		  printf (" << 2");
		  break;
		}
	      printf (";\n");
	      s += 4;
	    }
	}
      if (sextbit > 0)
	{
	  printf ("      i = (i ^ (1 << %d)) - (1 << %d);\n",
		  sextbit - 1, sextbit - 1);
	}

      if (needm && needn)
	printf ("      TB (m,n);\n");
      else if (needm)
	printf ("      TL (m);\n");
      else if (needn)
	printf ("      TL (n);\n");

      {
	/* Do the refs.  */
	const char *r;
	for (r = p->refs; *r; r++)
	  {
	    if (*r == 'f') printf ("      CREF (15);\n");
	    if (*r == '-')
	      {
		printf ("      {\n");
		printf ("        int i = n;\n");
		printf ("        do {\n");
		printf ("          CREF (i);\n");
		printf ("        } while (i-- > 0);\n");
		printf ("      }\n");
	      }
	    if (*r == '+')
	      {
		printf ("      {\n");
		printf ("        int i = n;\n");
		printf ("        do {\n");
		printf ("          CREF (i);\n");
		printf ("        } while (i++ < 14);\n");
		printf ("      }\n");
	      }
	    if (*r == '0') printf ("      CREF (0);\n");
	    if (*r == '8') printf ("      CREF (8);\n");
	    if (*r == '9') printf ("      CREF (9);\n");
	    if (*r == 'n') printf ("      CREF (n);\n");
	    if (*r == 'm') printf ("      CREF (m);\n");
	  }
      }

      printf ("      {\n");
      for (j = 0; j < MAX_NR_STUFF; j++)
	{
	  if (p->stuff[j])
	    {
	      printf ("        %s\n", p->stuff[j]);
	    }
	}
      printf ("      }\n");

      {
	/* Do the defs.  */
	const char *r;
	for (r = p->defs; *r; r++)
	  {
	    if (*r == 'f') printf ("      CDEF (15);\n");
	    if (*r == '-')
	      {
		printf ("      {\n");
		printf ("        int i = n;\n");
		printf ("        do {\n");
		printf ("          CDEF (i);\n");
		printf ("        } while (i-- > 0);\n");
		printf ("      }\n");
	      }
	    if (*r == '+')
	      {
		printf ("      {\n");
		printf ("        int i = n;\n");
		printf ("        do {\n");
		printf ("          CDEF (i);\n");
		printf ("        } while (i++ < 14);\n");
		printf ("      }\n");
	      }
	    if (*r == '0') printf ("      CDEF (0);\n");
	    if (*r == 'n') printf ("      CDEF (n);\n");
	    if (*r == 'm') printf ("      CDEF (m);\n");
	  }
      }

      printf ("      break;\n");
      printf ("    }\n");
    }
}

static void
gensim (void)
{
  printf ("{\n");
  printf ("/* REG_xy = [r4, r5, r0, r1].  */\n");
  printf ("#define REG_xy(R) ((R)==0 ? 4 : (R)==2 ? 5 : (R)==1 ?  0 :  1)\n");
  printf ("/* REG_yx = [r6, r7, r2, r3].  */\n");
  printf ("#define REG_yx(R) ((R)==0 ? 6 : (R)==1 ? 7 : (R)==2 ?  2 :  3)\n");
  printf ("/* DSP_ax = [a0, a1, x0, x1].  */\n");
  printf ("#define DSP_ax(R) ((R)==0 ? 7 : (R)==2 ? 5 : (R)==1 ?  8 :  9)\n");
  printf ("/* DSP_ay = [a0, a1, y0, y1].  */\n");
  printf ("#define DSP_ay(R) ((R)==0 ? 7 : (R)==1 ? 5 : (R)==2 ? 10 : 11)\n");
  printf ("/* DSP_xy = [x0, x1, y0, y1].  */\n");
  printf ("#define DSP_xy(R) ((R)==0 ? 8 : (R)==2 ? 9 : (R)==1 ? 10 : 11)\n");
  printf ("/* DSP_yx = [y0, y1, x0, x1].  */\n");
  printf ("#define DSP_yx(R) ((R)==0 ? 10 : (R)==1 ? 11 : (R)==2 ? 8 : 9)\n");
  printf ("  switch (jump_table[iword]) {\n");

  gensim_caselist (tab);
  gensim_caselist (movsxy_tab);

  printf ("  default:\n");
  printf ("    {\n");
  printf ("      RAISE_EXCEPTION (SIGILL);\n");
  printf ("    }\n");
  printf ("  }\n");
  printf ("}\n");
}

static void
gendefines (void)
{
  op *p;
  filltable (tab);
  for (p = tab; p->name; p++)
    {
      const char *s = p->name;
      printf ("#define OPC_");
      while (*s) {
	if (isalpha (*s))
	  printf ("%c", tolower (*s));
	if (*s == ' ')
	  printf ("_");
	if (*s == '@')
	  printf ("ind_");
	if (*s == ',')
	  printf ("_");
	s++;
      }
      printf (" %d\n",p->index);
    }
}

static int ppi_index;

/* Take a ppi code, expand all varying fields in it and fill all the
   right entries in 'table' with the opcode index.
   NOTE: tail recursion optimization removed for simplicity.  */

static void
expand_ppi_code (int val, int i, const char *s)
{
  int j;

  switch (s[0])
    {
    default:
      fprintf (stderr, "gencode/expand_ppi_code: Illegal char '%c'\n", s[0]);
      exit (2);
      break;
    case 'g':
    case 'z':
      if (warn_conflicts && table[val] != 0)
	conflict_warn (val, i);

      /* The last four bits are disregarded for the switch table.  */
      table[val] = i;
      return;
    case 'm':
      /* Four-bit expansion.  */
      for (j = 0; j < 16; j++)
	expand_ppi_code ((val << 4) + j, i, s + 4);
      break;
    case '.':
    case '0':
      expand_ppi_code ((val << 1), i, s + 1);
      break;
    case '1':
      expand_ppi_code ((val << 1) + 1, i, s + 1);
      break;
    case 'i':
    case 'e': case 'f':
    case 'x': case 'y':
      expand_ppi_code ((val << 1), i, s + 1);
      expand_ppi_code ((val << 1) + 1, i, s + 1);
      break;
    case 'c':
      expand_ppi_code ((val << 2) + 1, ppi_index++, s + 2);
      expand_ppi_code ((val << 2) + 2, i, s + 2);
      expand_ppi_code ((val << 2) + 3, i, s + 2);
      break;
    }
}

static void
ppi_filltable (void)
{
  op *p;
  ppi_index = 1;

  for (p = ppi_tab; p->name; p++)
    {
      p->index = ppi_index++;
      expand_ppi_code (0, p->index, p->code);
    }
}

static void
ppi_gensim (void)
{
  op *p = ppi_tab;

  printf ("#define DSR_MASK_G 0x80\n");
  printf ("#define DSR_MASK_Z 0x40\n");
  printf ("#define DSR_MASK_N 0x20\n");
  printf ("#define DSR_MASK_V 0x10\n");
  printf ("\n");
  printf ("#define COMPUTE_OVERFLOW do {\\\n");
  printf ("  overflow = res_grd != SIGN32 (res) ? DSR_MASK_V : 0;\\\n");
  printf ("  if (overflow && S) \\\n");
  printf ("    { \\\n");
  printf ("      if (res_grd & 0x80) \\\n");
  printf ("        { \\\n");
  printf ("          res = 0x80000000;\\\n");
  printf ("          res_grd |=  0xff;\\\n");
  printf ("        } \\\n");
  printf ("      else \\\n");
  printf ("        { \\\n");
  printf ("          res = 0x7fffffff;\\\n");
  printf ("          res_grd &= ~0xff;\\\n");
  printf ("        } \\\n");
  printf ("      overflow = 0;\\\n");
  printf ("    } \\\n");
  printf ("} while (0)\n");
  printf ("\n");
  printf ("#define ADD_SUB_GE \\\n");
  printf ("  (greater_equal = ~(overflow << 3 & res_grd) & DSR_MASK_G)\n");
  printf ("\n");
  printf ("static void\n");
  printf ("ppi_insn (int iword)\n");
  printf ("{\n");
  printf ("  /* 'ee' = [x0, x1, y0, a1] */\n");
  printf ("  static char const e_tab[] = { 8,  9, 10,  5};\n");
  printf ("  /* 'ff' = [y0, y1, x0, a1] */\n");
  printf ("  static char const f_tab[] = {10, 11,  8,  5};\n");
  printf ("  /* 'xx' = [x0, x1, a0, a1]  */\n");
  printf ("  static char const x_tab[] = { 8,  9,  7,  5};\n");
  printf ("  /* 'yy' = [y0, y1, m0, m1]  */\n");
  printf ("  static char const y_tab[] = {10, 11, 12, 14};\n");
  printf ("  /* 'gg' = [m0, m1, a0, a1]  */\n");
  printf ("  static char const g_tab[] = {12, 14,  7,  5};\n");
  printf ("  /* 'uu' = [x0, y0, a0, a1]  */\n");
  printf ("  static char const u_tab[] = { 8, 10,  7,  5};\n");
  printf ("\n");
  printf ("  int z;\n");
  printf ("  int res, res_grd;\n");
  printf ("  int carry, overflow, greater_equal;\n");
  printf ("\n");
  printf ("  switch (ppi_table[iword >> 4]) {\n");

  for (; p->name; p++)
    {
      int shift, j;
      int cond = 0;
      int havedecl = 0;
      const char *s = p->code;

      printf ("  /* %s %s */\n", p->name, p->code);
      printf ("  case %d:\n", p->index);

      printf ("    {\n");
      for (shift = 16; *s; )
	{
	  switch (*s)
	    {
	    case 'i':
	      printf ("      int i = (iword >> 4) & 0x7f;\n");
	      s += 6;
	      break;
	    case 'e':
	    case 'f':
	    case 'x':
	    case 'y':
	    case 'g':
	    case 'u':
	      shift -= 2;
	      printf ("      int %c = %c_tab[(iword >> %d) & 3];\n",
		      *s, *s, shift);
	      havedecl = 1;
	      s += 2;
	      break;
	    case 'c':
	      printf ("      if ((((iword >> 8) ^ DSR) & 1) == 0)\n");
	      printf ("\treturn;\n");
	      printf ("      ATTRIBUTE_FALLTHROUGH;\n");
	      printf ("    }\n");
	      printf ("  case %d:\n", p->index + 1);
	      printf ("    {\n");
	      cond = 1;
	    case '0':
	    case '1':
	    case '.':
	      shift -= 2;
	      s += 2;
	      break;
	    case 'z':
	      if (havedecl)
		printf ("\n");
	      printf ("      z = iword & 0xf;\n");
	      havedecl = 2;
	      s += 4;
	      break;
	    }
	}
      if (havedecl == 1)
	printf ("\n");
      else if (havedecl == 2)
	printf ("      {\n");
      for (j = 0; j < MAX_NR_STUFF; j++)
	{
	  if (p->stuff[j])
	    {
	      if (*p->stuff[j])
		{
		  printf ("      %s%s",
			  (havedecl == 2 ? "  " : ""),
			  p->stuff[j]);
		}
	      printf ("\n");
	    }
	}
      if (havedecl == 2)
	printf ("      }\n");
      if (cond)
	{
	  printf ("      if (iword & 0x200)\n");
	  printf ("        goto assign_z;\n");
	}
      printf ("      break;\n");
      printf ("    }\n");
    }

  printf ("  default:\n");
  printf ("    {\n");
  printf ("      RAISE_EXCEPTION (SIGILL);\n");
  printf ("      return;\n");
  printf ("    }\n");
  printf ("  }\n");
  printf ("  DSR &= ~0xf1;\n");
  printf ("  if (res || res_grd)\n");
  printf ("    DSR |= greater_equal | (res_grd >> 2 & DSR_MASK_N) | overflow;\n");
  printf ("  else\n");
  printf ("    DSR |= DSR_MASK_Z | overflow;\n");
  printf (" assign_dc:\n");
  printf ("  switch (DSR >> 1 & 7)\n");
  printf ("    {\n");
  printf ("    case 0: /* Carry Mode */\n");
  printf ("      DSR |= carry;\n");
  printf ("      break;\n");
  printf ("    case 1: /* Negative Value Mode */\n");
  printf ("      DSR |= res_grd >> 7 & 1;\n");
  printf ("      break;\n");
  printf ("    case 2: /* Zero Value Mode */\n");
  printf ("      DSR |= DSR >> 6 & 1;\n");
  printf ("      break;\n");
  printf ("    case 3: /* Overflow mode */\n");
  printf ("      DSR |= overflow >> 4;\n");
  printf ("      break;\n");
  printf ("    case 4: /* Signed Greater Than Mode */\n");
  printf ("      DSR |= DSR >> 7 & 1;\n");
  printf ("      break;\n");
  printf ("    case 5: /* Signed Greater Than Or Equal Mode */\n");
  printf ("      DSR |= greater_equal >> 7;\n");
  printf ("      break;\n");
  printf ("    }\n");
  printf (" assign_z:\n");
  printf ("  if (0xa05f >> z & 1)\n");
  printf ("    {\n");
  printf ("      RAISE_EXCEPTION (SIGILL);\n");
  printf ("      return;\n");
  printf ("    }\n");
  printf ("  DSP_R (z) = res;\n");
  printf ("  DSP_GRD (z) = res_grd;\n");
  printf ("}\n");
}

int
main (int ac, char *av[])
{
  /* Verify the table before anything else.  */
  {
    op *p;
    for (p = tab; p->name; p++)
      {
	/* Check that the code field contains 16 bits.  */
	if (strlen (p->code) != 16)
	  {
	    fprintf (stderr, "Code `%s' length wrong (%zu) for `%s'\n",
		     p->code, strlen (p->code), p->name);
	    abort ();
	  }
      }
  }

  /* Now generate the requested data.  */
  if (ac > 1)
    {
      if (ac > 2 && strcmp (av[2], "-w") == 0)
	{
	  warn_conflicts = 1;
	}
      if (strcmp (av[1], "-t") == 0)
	{
	  gengastab ();
	}
      else if (strcmp (av[1], "-d") == 0)
	{
	  gendefines ();
	}
      else if (strcmp (av[1], "-s") == 0)
	{
	  filltable (tab);
	  dumptable ("sh_jump_table", 1 << 16, 0);

	  memset (table, 0, sizeof table);
	  filltable (movsxy_tab);
	  expand_ppi_movxy ();
	  dumptable ("sh_dsp_table", 1 << 12, 0xf000);

	  memset (table, 0, sizeof table);
	  ppi_filltable ();
	  dumptable ("ppi_table", 1 << 12, 0);
	}
      else if (strcmp (av[1], "-x") == 0)
	{
	  filltable (tab);
	  filltable (movsxy_tab);
	  gensim ();
	}
      else if (strcmp (av[1], "-p") == 0)
	{
	  ppi_filltable ();
	  ppi_gensim ();
	}
    }
  else
    fprintf (stderr, "Opcode table generation no longer supported.\n");
  return 0;
}
