OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [tags/] [gnu-src/] [gdb-7.2/] [gdb-7.2-or32-1.0rc1/] [sim/] [cr16/] [simops.c] - Diff between revs 330 and 341

Only display areas with differences | Details | Blame | View Log

Rev 330 Rev 341
/* Simulation code for the CR16 processor.
/* Simulation code for the CR16 processor.
   Copyright (C) 2008, 2009, 2010 Free Software Foundation, Inc.
   Copyright (C) 2008, 2009, 2010 Free Software Foundation, Inc.
   Contributed by M Ranga Swami Reddy <MR.Swami.Reddy@nsc.com>
   Contributed by M Ranga Swami Reddy <MR.Swami.Reddy@nsc.com>
 
 
   This file is part of GDB, the GNU debugger.
   This file is part of GDB, the GNU debugger.
 
 
   This program is free software; you can redistribute it and/or modify
   This program is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation; either version 3, or (at your option)
   the Free Software Foundation; either version 3, or (at your option)
   any later version.
   any later version.
 
 
   This program is distributed in the hope that it will be useful,
   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.
   GNU General Public License for more details.
 
 
   You should have received a copy of the GNU General Public License
   You should have received a copy of the GNU General Public License
   along with this program. If not, see <http://www.gnu.org/licenses/>.  */
   along with this program. If not, see <http://www.gnu.org/licenses/>.  */
 
 
 
 
#include "config.h"
#include "config.h"
 
 
#include <signal.h>
#include <signal.h>
#include <errno.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/stat.h>
#ifdef HAVE_UNISTD_H
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#include <unistd.h>
#endif
#endif
#ifdef HAVE_STRING_H
#ifdef HAVE_STRING_H
#include <string.h>
#include <string.h>
#endif
#endif
 
 
#include "cr16_sim.h"
#include "cr16_sim.h"
#include "simops.h"
#include "simops.h"
#include "targ-vals.h"
#include "targ-vals.h"
 
 
extern char *strrchr ();
extern char *strrchr ();
 
 
enum op_types {
enum op_types {
  OP_VOID,
  OP_VOID,
  OP_CONSTANT3,
  OP_CONSTANT3,
  OP_UCONSTANT3,
  OP_UCONSTANT3,
  OP_CONSTANT4,
  OP_CONSTANT4,
  OP_CONSTANT4_1,
  OP_CONSTANT4_1,
  OP_CONSTANT5,
  OP_CONSTANT5,
  OP_CONSTANT6,
  OP_CONSTANT6,
  OP_CONSTANT16,
  OP_CONSTANT16,
  OP_UCONSTANT16,
  OP_UCONSTANT16,
  OP_CONSTANT20,
  OP_CONSTANT20,
  OP_UCONSTANT20,
  OP_UCONSTANT20,
  OP_CONSTANT32,
  OP_CONSTANT32,
  OP_UCONSTANT32,
  OP_UCONSTANT32,
  OP_MEMREF,
  OP_MEMREF,
  OP_MEMREF2,
  OP_MEMREF2,
  OP_MEMREF3,
  OP_MEMREF3,
 
 
  OP_DISP5,
  OP_DISP5,
  OP_DISP17,
  OP_DISP17,
  OP_DISP25,
  OP_DISP25,
  OP_DISPE9,
  OP_DISPE9,
  //OP_ABS20,
  //OP_ABS20,
  OP_ABS20_OUTPUT,
  OP_ABS20_OUTPUT,
  //OP_ABS24,
  //OP_ABS24,
  OP_ABS24_OUTPUT,
  OP_ABS24_OUTPUT,
 
 
  OP_R_BASE_DISPS16,
  OP_R_BASE_DISPS16,
  OP_R_BASE_DISP20,
  OP_R_BASE_DISP20,
  OP_R_BASE_DISPS20,
  OP_R_BASE_DISPS20,
  OP_R_BASE_DISPE20,
  OP_R_BASE_DISPE20,
 
 
  OP_RP_BASE_DISPE0,
  OP_RP_BASE_DISPE0,
  OP_RP_BASE_DISP4,
  OP_RP_BASE_DISP4,
  OP_RP_BASE_DISPE4,
  OP_RP_BASE_DISPE4,
  OP_RP_BASE_DISP14,
  OP_RP_BASE_DISP14,
  OP_RP_BASE_DISP16,
  OP_RP_BASE_DISP16,
  OP_RP_BASE_DISP20,
  OP_RP_BASE_DISP20,
  OP_RP_BASE_DISPS20,
  OP_RP_BASE_DISPS20,
  OP_RP_BASE_DISPE20,
  OP_RP_BASE_DISPE20,
 
 
  OP_R_INDEX7_ABS20,
  OP_R_INDEX7_ABS20,
  OP_R_INDEX8_ABS20,
  OP_R_INDEX8_ABS20,
 
 
  OP_RP_INDEX_DISP0,
  OP_RP_INDEX_DISP0,
  OP_RP_INDEX_DISP14,
  OP_RP_INDEX_DISP14,
  OP_RP_INDEX_DISP20,
  OP_RP_INDEX_DISP20,
  OP_RP_INDEX_DISPS20,
  OP_RP_INDEX_DISPS20,
 
 
  OP_REG,
  OP_REG,
  OP_REGP,
  OP_REGP,
  OP_PROC_REG,
  OP_PROC_REG,
  OP_PROC_REGP,
  OP_PROC_REGP,
  OP_COND,
  OP_COND,
  OP_RA
  OP_RA
};
};
 
 
 
 
enum {
enum {
  PSR_MASK = (PSR_I_BIT
  PSR_MASK = (PSR_I_BIT
              | PSR_P_BIT
              | PSR_P_BIT
              | PSR_E_BIT
              | PSR_E_BIT
              | PSR_N_BIT
              | PSR_N_BIT
              | PSR_Z_BIT
              | PSR_Z_BIT
              | PSR_F_BIT
              | PSR_F_BIT
              | PSR_U_BIT
              | PSR_U_BIT
              | PSR_L_BIT
              | PSR_L_BIT
              | PSR_T_BIT
              | PSR_T_BIT
              | PSR_C_BIT),
              | PSR_C_BIT),
  /* The following bits in the PSR _can't_ be set by instructions such
  /* The following bits in the PSR _can't_ be set by instructions such
     as mvtc.  */
     as mvtc.  */
  PSR_HW_MASK = (PSR_MASK)
  PSR_HW_MASK = (PSR_MASK)
};
};
 
 
/* cond    Code Condition            True State
/* cond    Code Condition            True State
 * EQ      Equal                     Z flag is 1
 * EQ      Equal                     Z flag is 1
 * NE      Not Equal                 Z flag is 0
 * NE      Not Equal                 Z flag is 0
 * CS      Carry Set                 C flag is 1
 * CS      Carry Set                 C flag is 1
 * CC      Carry Clear               C flag is 0
 * CC      Carry Clear               C flag is 0
 * HI      Higher                    L flag is 1
 * HI      Higher                    L flag is 1
 * LS      Lower or Same             L flag is 0
 * LS      Lower or Same             L flag is 0
 * GT      Greater Than              N flag is 1
 * GT      Greater Than              N flag is 1
 * LE      Less Than or Equal To     N flag is 0
 * LE      Less Than or Equal To     N flag is 0
 * FS      Flag Set                  F flag is 1
 * FS      Flag Set                  F flag is 1
 * FC      Flag Clear                F flag is 0
 * FC      Flag Clear                F flag is 0
 * LO      Lower                     Z and L flags are 0
 * LO      Lower                     Z and L flags are 0
 * HS      Higher or Same            Z or L flag is 1
 * HS      Higher or Same            Z or L flag is 1
 * LT      Less Than                 Z and N flags are 0
 * LT      Less Than                 Z and N flags are 0
 * GE      Greater Than or Equal To  Z or N flag is 1.  */
 * GE      Greater Than or Equal To  Z or N flag is 1.  */
 
 
int cond_stat(int cc)
int cond_stat(int cc)
{
{
  switch (cc)
  switch (cc)
    {
    {
      case 0: return  PSR_Z; break;
      case 0: return  PSR_Z; break;
      case 1: return !PSR_Z; break;
      case 1: return !PSR_Z; break;
      case 2: return  PSR_C; break;
      case 2: return  PSR_C; break;
      case 3: return !PSR_C; break;
      case 3: return !PSR_C; break;
      case 4: return  PSR_L; break;
      case 4: return  PSR_L; break;
      case 5: return !PSR_L; break;
      case 5: return !PSR_L; break;
      case 6: return  PSR_N; break;
      case 6: return  PSR_N; break;
      case 7: return !PSR_N; break;
      case 7: return !PSR_N; break;
      case 8: return  PSR_F; break;
      case 8: return  PSR_F; break;
      case 9: return !PSR_F; break;
      case 9: return !PSR_F; break;
      case 10: return !PSR_Z && !PSR_L; break;
      case 10: return !PSR_Z && !PSR_L; break;
      case 11: return  PSR_Z ||  PSR_L; break;
      case 11: return  PSR_Z ||  PSR_L; break;
      case 12: return !PSR_Z && !PSR_N; break;
      case 12: return !PSR_Z && !PSR_N; break;
      case 13: return  PSR_Z ||  PSR_N; break;
      case 13: return  PSR_Z ||  PSR_N; break;
      case 14: return 1; break; /*ALWAYS.  */
      case 14: return 1; break; /*ALWAYS.  */
      default:
      default:
     // case NEVER:  return false; break;
     // case NEVER:  return false; break;
      //case NO_COND_CODE:
      //case NO_COND_CODE:
      //panic("Shouldn't have NO_COND_CODE in an actual instruction!");
      //panic("Shouldn't have NO_COND_CODE in an actual instruction!");
      return 0; break;
      return 0; break;
     }
     }
   return 0;
   return 0;
}
}
 
 
 
 
creg_t
creg_t
move_to_cr (int cr, creg_t mask, creg_t val, int psw_hw_p)
move_to_cr (int cr, creg_t mask, creg_t val, int psw_hw_p)
{
{
  /* A MASK bit is set when the corresponding bit in the CR should
  /* A MASK bit is set when the corresponding bit in the CR should
     be left alone.  */
     be left alone.  */
  /* This assumes that (VAL & MASK) == 0.  */
  /* This assumes that (VAL & MASK) == 0.  */
  switch (cr)
  switch (cr)
    {
    {
    case PSR_CR:
    case PSR_CR:
      if (psw_hw_p)
      if (psw_hw_p)
        val &= PSR_HW_MASK;
        val &= PSR_HW_MASK;
#if 0
#if 0
      else
      else
        val &= PSR_MASK;
        val &= PSR_MASK;
              (*cr16_callback->printf_filtered)
              (*cr16_callback->printf_filtered)
                (cr16_callback,
                (cr16_callback,
                 "ERROR at PC 0x%x: ST can only be set when FX is set.\n", PC);
                 "ERROR at PC 0x%x: ST can only be set when FX is set.\n", PC);
              State.exception = SIGILL;
              State.exception = SIGILL;
#endif
#endif
      /* keep an up-to-date psw around for tracing.  */
      /* keep an up-to-date psw around for tracing.  */
      State.trace.psw = (State.trace.psw & mask) | val;
      State.trace.psw = (State.trace.psw & mask) | val;
      break;
      break;
    default:
    default:
      break;
      break;
    }
    }
  /* only issue an update if the register is being changed.  */
  /* only issue an update if the register is being changed.  */
  if ((State.cregs[cr] & ~mask) != val)
  if ((State.cregs[cr] & ~mask) != val)
   SLOT_PEND_MASK (State.cregs[cr], mask, val);
   SLOT_PEND_MASK (State.cregs[cr], mask, val);
 
 
  return val;
  return val;
}
}
 
 
#ifdef DEBUG
#ifdef DEBUG
static void trace_input_func PARAMS ((char *name,
static void trace_input_func PARAMS ((char *name,
                                      enum op_types in1,
                                      enum op_types in1,
                                      enum op_types in2,
                                      enum op_types in2,
                                      enum op_types in3));
                                      enum op_types in3));
 
 
#define trace_input(name, in1, in2, in3) do { if (cr16_debug) trace_input_func (name, in1, in2, in3); } while (0)
#define trace_input(name, in1, in2, in3) do { if (cr16_debug) trace_input_func (name, in1, in2, in3); } while (0)
 
 
#ifndef SIZE_INSTRUCTION
#ifndef SIZE_INSTRUCTION
#define SIZE_INSTRUCTION 8
#define SIZE_INSTRUCTION 8
#endif
#endif
 
 
#ifndef SIZE_OPERANDS
#ifndef SIZE_OPERANDS
#define SIZE_OPERANDS 18
#define SIZE_OPERANDS 18
#endif
#endif
 
 
#ifndef SIZE_VALUES
#ifndef SIZE_VALUES
#define SIZE_VALUES 13
#define SIZE_VALUES 13
#endif
#endif
 
 
#ifndef SIZE_LOCATION
#ifndef SIZE_LOCATION
#define SIZE_LOCATION 20
#define SIZE_LOCATION 20
#endif
#endif
 
 
#ifndef SIZE_PC
#ifndef SIZE_PC
#define SIZE_PC 4
#define SIZE_PC 4
#endif
#endif
 
 
#ifndef SIZE_LINE_NUMBER
#ifndef SIZE_LINE_NUMBER
#define SIZE_LINE_NUMBER 2
#define SIZE_LINE_NUMBER 2
#endif
#endif
 
 
static void
static void
trace_input_func (name, in1, in2, in3)
trace_input_func (name, in1, in2, in3)
     char *name;
     char *name;
     enum op_types in1;
     enum op_types in1;
     enum op_types in2;
     enum op_types in2;
     enum op_types in3;
     enum op_types in3;
{
{
  char *comma;
  char *comma;
  enum op_types in[3];
  enum op_types in[3];
  int i;
  int i;
  char buf[1024];
  char buf[1024];
  char *p;
  char *p;
  long tmp;
  long tmp;
  char *type;
  char *type;
  const char *filename;
  const char *filename;
  const char *functionname;
  const char *functionname;
  unsigned int linenumber;
  unsigned int linenumber;
  bfd_vma byte_pc;
  bfd_vma byte_pc;
 
 
  if ((cr16_debug & DEBUG_TRACE) == 0)
  if ((cr16_debug & DEBUG_TRACE) == 0)
    return;
    return;
 
 
  switch (State.ins_type)
  switch (State.ins_type)
    {
    {
    default:
    default:
    case INS_UNKNOWN:           type = " ?"; break;
    case INS_UNKNOWN:           type = " ?"; break;
    }
    }
 
 
  if ((cr16_debug & DEBUG_LINE_NUMBER) == 0)
  if ((cr16_debug & DEBUG_LINE_NUMBER) == 0)
    (*cr16_callback->printf_filtered) (cr16_callback,
    (*cr16_callback->printf_filtered) (cr16_callback,
                                       "0x%.*x %s: %-*s ",
                                       "0x%.*x %s: %-*s ",
                                       SIZE_PC, (unsigned)PC,
                                       SIZE_PC, (unsigned)PC,
                                       type,
                                       type,
                                       SIZE_INSTRUCTION, name);
                                       SIZE_INSTRUCTION, name);
 
 
  else
  else
    {
    {
      buf[0] = '\0';
      buf[0] = '\0';
      byte_pc = decode_pc ();
      byte_pc = decode_pc ();
      if (text && byte_pc >= text_start && byte_pc < text_end)
      if (text && byte_pc >= text_start && byte_pc < text_end)
        {
        {
          filename = (const char *)0;
          filename = (const char *)0;
          functionname = (const char *)0;
          functionname = (const char *)0;
          linenumber = 0;
          linenumber = 0;
          if (bfd_find_nearest_line (prog_bfd, text, (struct bfd_symbol **)0, byte_pc - text_start,
          if (bfd_find_nearest_line (prog_bfd, text, (struct bfd_symbol **)0, byte_pc - text_start,
                                     &filename, &functionname, &linenumber))
                                     &filename, &functionname, &linenumber))
            {
            {
              p = buf;
              p = buf;
              if (linenumber)
              if (linenumber)
                {
                {
                  sprintf (p, "#%-*d ", SIZE_LINE_NUMBER, linenumber);
                  sprintf (p, "#%-*d ", SIZE_LINE_NUMBER, linenumber);
                  p += strlen (p);
                  p += strlen (p);
                }
                }
              else
              else
                {
                {
                  sprintf (p, "%-*s ", SIZE_LINE_NUMBER+1, "---");
                  sprintf (p, "%-*s ", SIZE_LINE_NUMBER+1, "---");
                  p += SIZE_LINE_NUMBER+2;
                  p += SIZE_LINE_NUMBER+2;
                }
                }
 
 
              if (functionname)
              if (functionname)
                {
                {
                  sprintf (p, "%s ", functionname);
                  sprintf (p, "%s ", functionname);
                  p += strlen (p);
                  p += strlen (p);
                }
                }
              else if (filename)
              else if (filename)
                {
                {
                  char *q = strrchr (filename, '/');
                  char *q = strrchr (filename, '/');
                  sprintf (p, "%s ", (q) ? q+1 : filename);
                  sprintf (p, "%s ", (q) ? q+1 : filename);
                  p += strlen (p);
                  p += strlen (p);
                }
                }
 
 
              if (*p == ' ')
              if (*p == ' ')
                *p = '\0';
                *p = '\0';
            }
            }
        }
        }
 
 
      (*cr16_callback->printf_filtered) (cr16_callback,
      (*cr16_callback->printf_filtered) (cr16_callback,
                                         "0x%.*x %s: %-*.*s %-*s ",
                                         "0x%.*x %s: %-*.*s %-*s ",
                                         SIZE_PC, (unsigned)PC,
                                         SIZE_PC, (unsigned)PC,
                                         type,
                                         type,
                                         SIZE_LOCATION, SIZE_LOCATION, buf,
                                         SIZE_LOCATION, SIZE_LOCATION, buf,
                                         SIZE_INSTRUCTION, name);
                                         SIZE_INSTRUCTION, name);
    }
    }
 
 
  in[0] = in1;
  in[0] = in1;
  in[1] = in2;
  in[1] = in2;
  in[2] = in3;
  in[2] = in3;
  comma = "";
  comma = "";
  p = buf;
  p = buf;
  for (i = 0; i < 3; i++)
  for (i = 0; i < 3; i++)
    {
    {
      switch (in[i])
      switch (in[i])
        {
        {
        case OP_VOID:
        case OP_VOID:
          break;
          break;
 
 
        case OP_REG:
        case OP_REG:
        case OP_REGP:
        case OP_REGP:
          sprintf (p, "%sr%d", comma, OP[i]);
          sprintf (p, "%sr%d", comma, OP[i]);
          p += strlen (p);
          p += strlen (p);
          comma = ",";
          comma = ",";
          break;
          break;
 
 
        case OP_PROC_REG:
        case OP_PROC_REG:
          sprintf (p, "%scr%d", comma, OP[i]);
          sprintf (p, "%scr%d", comma, OP[i]);
          p += strlen (p);
          p += strlen (p);
          comma = ",";
          comma = ",";
          break;
          break;
 
 
        case OP_CONSTANT16:
        case OP_CONSTANT16:
          sprintf (p, "%s%d", comma, OP[i]);
          sprintf (p, "%s%d", comma, OP[i]);
          p += strlen (p);
          p += strlen (p);
          comma = ",";
          comma = ",";
          break;
          break;
 
 
        case OP_CONSTANT4:
        case OP_CONSTANT4:
          sprintf (p, "%s%d", comma, SEXT4(OP[i]));
          sprintf (p, "%s%d", comma, SEXT4(OP[i]));
          p += strlen (p);
          p += strlen (p);
          comma = ",";
          comma = ",";
          break;
          break;
 
 
        case OP_CONSTANT3:
        case OP_CONSTANT3:
          sprintf (p, "%s%d", comma, SEXT3(OP[i]));
          sprintf (p, "%s%d", comma, SEXT3(OP[i]));
          p += strlen (p);
          p += strlen (p);
          comma = ",";
          comma = ",";
          break;
          break;
 
 
        case OP_MEMREF:
        case OP_MEMREF:
          sprintf (p, "%s@r%d", comma, OP[i]);
          sprintf (p, "%s@r%d", comma, OP[i]);
          p += strlen (p);
          p += strlen (p);
          comma = ",";
          comma = ",";
          break;
          break;
 
 
        case OP_MEMREF2:
        case OP_MEMREF2:
          sprintf (p, "%s@(%d,r%d)", comma, (int16)OP[i], OP[i+1]);
          sprintf (p, "%s@(%d,r%d)", comma, (int16)OP[i], OP[i+1]);
          p += strlen (p);
          p += strlen (p);
          comma = ",";
          comma = ",";
          break;
          break;
 
 
        case OP_MEMREF3:
        case OP_MEMREF3:
          sprintf (p, "%s@%d", comma, OP[i]);
          sprintf (p, "%s@%d", comma, OP[i]);
          p += strlen (p);
          p += strlen (p);
          comma = ",";
          comma = ",";
          break;
          break;
        }
        }
    }
    }
 
 
  if ((cr16_debug & DEBUG_VALUES) == 0)
  if ((cr16_debug & DEBUG_VALUES) == 0)
    {
    {
      *p++ = '\n';
      *p++ = '\n';
      *p = '\0';
      *p = '\0';
      (*cr16_callback->printf_filtered) (cr16_callback, "%s", buf);
      (*cr16_callback->printf_filtered) (cr16_callback, "%s", buf);
    }
    }
  else
  else
    {
    {
      *p = '\0';
      *p = '\0';
      (*cr16_callback->printf_filtered) (cr16_callback, "%-*s", SIZE_OPERANDS, buf);
      (*cr16_callback->printf_filtered) (cr16_callback, "%-*s", SIZE_OPERANDS, buf);
 
 
      p = buf;
      p = buf;
      for (i = 0; i < 3; i++)
      for (i = 0; i < 3; i++)
        {
        {
          buf[0] = '\0';
          buf[0] = '\0';
          switch (in[i])
          switch (in[i])
            {
            {
            case OP_VOID:
            case OP_VOID:
              (*cr16_callback->printf_filtered) (cr16_callback, "%*s", SIZE_VALUES, "");
              (*cr16_callback->printf_filtered) (cr16_callback, "%*s", SIZE_VALUES, "");
              break;
              break;
 
 
            case OP_REG:
            case OP_REG:
              (*cr16_callback->printf_filtered) (cr16_callback, "%*s0x%.4x", SIZE_VALUES-6, "",
              (*cr16_callback->printf_filtered) (cr16_callback, "%*s0x%.4x", SIZE_VALUES-6, "",
                                                 (uint16) GPR (OP[i]));
                                                 (uint16) GPR (OP[i]));
              break;
              break;
 
 
            case OP_REGP:
            case OP_REGP:
              tmp = (long)((((uint32) GPR (OP[i])) << 16) | ((uint32) GPR (OP[i] + 1)));
              tmp = (long)((((uint32) GPR (OP[i])) << 16) | ((uint32) GPR (OP[i] + 1)));
              (*cr16_callback->printf_filtered) (cr16_callback, "%*s0x%.8lx", SIZE_VALUES-10, "", tmp);
              (*cr16_callback->printf_filtered) (cr16_callback, "%*s0x%.8lx", SIZE_VALUES-10, "", tmp);
              break;
              break;
 
 
            case OP_PROC_REG:
            case OP_PROC_REG:
              (*cr16_callback->printf_filtered) (cr16_callback, "%*s0x%.4x", SIZE_VALUES-6, "",
              (*cr16_callback->printf_filtered) (cr16_callback, "%*s0x%.4x", SIZE_VALUES-6, "",
                                                 (uint16) CREG (OP[i]));
                                                 (uint16) CREG (OP[i]));
              break;
              break;
 
 
            case OP_CONSTANT16:
            case OP_CONSTANT16:
              (*cr16_callback->printf_filtered) (cr16_callback, "%*s0x%.4x", SIZE_VALUES-6, "",
              (*cr16_callback->printf_filtered) (cr16_callback, "%*s0x%.4x", SIZE_VALUES-6, "",
                                                 (uint16)OP[i]);
                                                 (uint16)OP[i]);
              break;
              break;
 
 
            case OP_CONSTANT4:
            case OP_CONSTANT4:
              (*cr16_callback->printf_filtered) (cr16_callback, "%*s0x%.4x", SIZE_VALUES-6, "",
              (*cr16_callback->printf_filtered) (cr16_callback, "%*s0x%.4x", SIZE_VALUES-6, "",
                                                 (uint16)SEXT4(OP[i]));
                                                 (uint16)SEXT4(OP[i]));
              break;
              break;
 
 
            case OP_CONSTANT3:
            case OP_CONSTANT3:
              (*cr16_callback->printf_filtered) (cr16_callback, "%*s0x%.4x", SIZE_VALUES-6, "",
              (*cr16_callback->printf_filtered) (cr16_callback, "%*s0x%.4x", SIZE_VALUES-6, "",
                                                 (uint16)SEXT3(OP[i]));
                                                 (uint16)SEXT3(OP[i]));
              break;
              break;
 
 
            case OP_MEMREF2:
            case OP_MEMREF2:
              (*cr16_callback->printf_filtered) (cr16_callback, "%*s0x%.4x", SIZE_VALUES-6, "",
              (*cr16_callback->printf_filtered) (cr16_callback, "%*s0x%.4x", SIZE_VALUES-6, "",
                                                 (uint16)OP[i]);
                                                 (uint16)OP[i]);
              (*cr16_callback->printf_filtered) (cr16_callback, "%*s0x%.4x", SIZE_VALUES-6, "",
              (*cr16_callback->printf_filtered) (cr16_callback, "%*s0x%.4x", SIZE_VALUES-6, "",
                                                 (uint16)GPR (OP[i + 1]));
                                                 (uint16)GPR (OP[i + 1]));
              i++;
              i++;
              break;
              break;
            }
            }
        }
        }
    }
    }
 
 
  (*cr16_callback->flush_stdout) (cr16_callback);
  (*cr16_callback->flush_stdout) (cr16_callback);
}
}
 
 
static void
static void
do_trace_output_flush (void)
do_trace_output_flush (void)
{
{
  (*cr16_callback->flush_stdout) (cr16_callback);
  (*cr16_callback->flush_stdout) (cr16_callback);
}
}
 
 
static void
static void
do_trace_output_finish (void)
do_trace_output_finish (void)
{
{
  (*cr16_callback->printf_filtered) (cr16_callback,
  (*cr16_callback->printf_filtered) (cr16_callback,
                                     " F0=%d F1=%d C=%d\n",
                                     " F0=%d F1=%d C=%d\n",
                                     (State.trace.psw & PSR_F_BIT) != 0,
                                     (State.trace.psw & PSR_F_BIT) != 0,
                                     (State.trace.psw & PSR_F_BIT) != 0,
                                     (State.trace.psw & PSR_F_BIT) != 0,
                                     (State.trace.psw & PSR_C_BIT) != 0);
                                     (State.trace.psw & PSR_C_BIT) != 0);
  (*cr16_callback->flush_stdout) (cr16_callback);
  (*cr16_callback->flush_stdout) (cr16_callback);
}
}
 
 
static void
static void
trace_output_40 (uint64 val)
trace_output_40 (uint64 val)
{
{
  if ((cr16_debug & (DEBUG_TRACE | DEBUG_VALUES)) == (DEBUG_TRACE | DEBUG_VALUES))
  if ((cr16_debug & (DEBUG_TRACE | DEBUG_VALUES)) == (DEBUG_TRACE | DEBUG_VALUES))
    {
    {
      (*cr16_callback->printf_filtered) (cr16_callback,
      (*cr16_callback->printf_filtered) (cr16_callback,
                                         " :: %*s0x%.2x%.8lx",
                                         " :: %*s0x%.2x%.8lx",
                                         SIZE_VALUES - 12,
                                         SIZE_VALUES - 12,
                                         "",
                                         "",
                                         ((int)(val >> 32) & 0xff),
                                         ((int)(val >> 32) & 0xff),
                                         ((unsigned long) val) & 0xffffffff);
                                         ((unsigned long) val) & 0xffffffff);
      do_trace_output_finish ();
      do_trace_output_finish ();
    }
    }
}
}
 
 
static void
static void
trace_output_32 (uint32 val)
trace_output_32 (uint32 val)
{
{
  if ((cr16_debug & (DEBUG_TRACE | DEBUG_VALUES)) == (DEBUG_TRACE | DEBUG_VALUES))
  if ((cr16_debug & (DEBUG_TRACE | DEBUG_VALUES)) == (DEBUG_TRACE | DEBUG_VALUES))
    {
    {
      (*cr16_callback->printf_filtered) (cr16_callback,
      (*cr16_callback->printf_filtered) (cr16_callback,
                                         " :: %*s0x%.8x",
                                         " :: %*s0x%.8x",
                                         SIZE_VALUES - 10,
                                         SIZE_VALUES - 10,
                                         "",
                                         "",
                                         (int) val);
                                         (int) val);
      do_trace_output_finish ();
      do_trace_output_finish ();
    }
    }
}
}
 
 
static void
static void
trace_output_16 (uint16 val)
trace_output_16 (uint16 val)
{
{
  if ((cr16_debug & (DEBUG_TRACE | DEBUG_VALUES)) == (DEBUG_TRACE | DEBUG_VALUES))
  if ((cr16_debug & (DEBUG_TRACE | DEBUG_VALUES)) == (DEBUG_TRACE | DEBUG_VALUES))
    {
    {
      (*cr16_callback->printf_filtered) (cr16_callback,
      (*cr16_callback->printf_filtered) (cr16_callback,
                                         " :: %*s0x%.4x",
                                         " :: %*s0x%.4x",
                                         SIZE_VALUES - 6,
                                         SIZE_VALUES - 6,
                                         "",
                                         "",
                                         (int) val);
                                         (int) val);
      do_trace_output_finish ();
      do_trace_output_finish ();
    }
    }
}
}
 
 
static void
static void
trace_output_void ()
trace_output_void ()
{
{
  if ((cr16_debug & (DEBUG_TRACE | DEBUG_VALUES)) == (DEBUG_TRACE | DEBUG_VALUES))
  if ((cr16_debug & (DEBUG_TRACE | DEBUG_VALUES)) == (DEBUG_TRACE | DEBUG_VALUES))
    {
    {
      (*cr16_callback->printf_filtered) (cr16_callback, "\n");
      (*cr16_callback->printf_filtered) (cr16_callback, "\n");
      do_trace_output_flush ();
      do_trace_output_flush ();
    }
    }
}
}
 
 
static void
static void
trace_output_flag ()
trace_output_flag ()
{
{
  if ((cr16_debug & (DEBUG_TRACE | DEBUG_VALUES)) == (DEBUG_TRACE | DEBUG_VALUES))
  if ((cr16_debug & (DEBUG_TRACE | DEBUG_VALUES)) == (DEBUG_TRACE | DEBUG_VALUES))
    {
    {
      (*cr16_callback->printf_filtered) (cr16_callback,
      (*cr16_callback->printf_filtered) (cr16_callback,
                                         " :: %*s",
                                         " :: %*s",
                                         SIZE_VALUES,
                                         SIZE_VALUES,
                                         "");
                                         "");
      do_trace_output_finish ();
      do_trace_output_finish ();
    }
    }
}
}
 
 
 
 
 
 
 
 
#else
#else
#define trace_input(NAME, IN1, IN2, IN3)
#define trace_input(NAME, IN1, IN2, IN3)
#define trace_output(RESULT)
#define trace_output(RESULT)
#endif
#endif
 
 
/* addub.  */
/* addub.  */
void
void
OP_2C_8 ()
OP_2C_8 ()
{
{
  uint8 tmp;
  uint8 tmp;
  uint8 a = OP[0] & 0xff;
  uint8 a = OP[0] & 0xff;
  uint16 b = (GPR (OP[1])) & 0xff;
  uint16 b = (GPR (OP[1])) & 0xff;
  trace_input ("addub", OP_CONSTANT4_1, OP_REG, OP_VOID);
  trace_input ("addub", OP_CONSTANT4_1, OP_REG, OP_VOID);
  tmp = (a + b) & 0xff;
  tmp = (a + b) & 0xff;
  SET_GPR (OP[1], (tmp | ((GPR (OP[1])) & 0xff00)));
  SET_GPR (OP[1], (tmp | ((GPR (OP[1])) & 0xff00)));
  trace_output_16 (tmp);
  trace_output_16 (tmp);
}
}
 
 
/* addub.  */
/* addub.  */
void
void
OP_2CB_C ()
OP_2CB_C ()
{
{
  uint16 tmp;
  uint16 tmp;
  uint8 a = ((OP[0]) & 0xff), b = (GPR (OP[1])) & 0xff;
  uint8 a = ((OP[0]) & 0xff), b = (GPR (OP[1])) & 0xff;
  trace_input ("addub", OP_CONSTANT16, OP_REG, OP_VOID);
  trace_input ("addub", OP_CONSTANT16, OP_REG, OP_VOID);
  tmp = (a + b) & 0xff;
  tmp = (a + b) & 0xff;
  SET_GPR (OP[1], (tmp | ((GPR (OP[1])) & 0xff00)));
  SET_GPR (OP[1], (tmp | ((GPR (OP[1])) & 0xff00)));
  trace_output_16 (tmp);
  trace_output_16 (tmp);
}
}
 
 
/* addub.  */
/* addub.  */
void
void
OP_2D_8 ()
OP_2D_8 ()
{
{
  uint8 a = (GPR (OP[0])) & 0xff;
  uint8 a = (GPR (OP[0])) & 0xff;
  uint8 b = (GPR (OP[1])) & 0xff;
  uint8 b = (GPR (OP[1])) & 0xff;
  uint16 tmp = (a + b) & 0xff;
  uint16 tmp = (a + b) & 0xff;
  trace_input ("addub", OP_REG, OP_REG, OP_VOID);
  trace_input ("addub", OP_REG, OP_REG, OP_VOID);
  SET_GPR (OP[1], (tmp | ((GPR (OP[1])) & 0xff00)));
  SET_GPR (OP[1], (tmp | ((GPR (OP[1])) & 0xff00)));
  trace_output_16 (tmp);
  trace_output_16 (tmp);
}
}
 
 
/* adduw.  */
/* adduw.  */
void
void
OP_2E_8 ()
OP_2E_8 ()
{
{
  uint16 a = OP[0];
  uint16 a = OP[0];
  uint16 b = GPR (OP[1]);
  uint16 b = GPR (OP[1]);
  uint16 tmp = (a + b);
  uint16 tmp = (a + b);
  trace_input ("adduw", OP_CONSTANT4_1, OP_REG, OP_VOID);
  trace_input ("adduw", OP_CONSTANT4_1, OP_REG, OP_VOID);
  SET_GPR (OP[1], tmp);
  SET_GPR (OP[1], tmp);
  trace_output_16 (tmp);
  trace_output_16 (tmp);
}
}
 
 
/* adduw.  */
/* adduw.  */
void
void
OP_2EB_C ()
OP_2EB_C ()
{
{
  uint16 a = OP[0];
  uint16 a = OP[0];
  uint16 b = GPR (OP[1]);
  uint16 b = GPR (OP[1]);
  uint16 tmp = (a + b);
  uint16 tmp = (a + b);
  trace_input ("adduw", OP_CONSTANT16, OP_REG, OP_VOID);
  trace_input ("adduw", OP_CONSTANT16, OP_REG, OP_VOID);
  SET_GPR (OP[1], tmp);
  SET_GPR (OP[1], tmp);
  trace_output_16 (tmp);
  trace_output_16 (tmp);
}
}
 
 
/* adduw.  */
/* adduw.  */
void
void
OP_2F_8 ()
OP_2F_8 ()
{
{
  uint16 a = GPR (OP[0]);
  uint16 a = GPR (OP[0]);
  uint16 b = GPR (OP[1]);
  uint16 b = GPR (OP[1]);
  uint16 tmp = (a + b);
  uint16 tmp = (a + b);
  trace_input ("adduw", OP_REG, OP_REG, OP_VOID);
  trace_input ("adduw", OP_REG, OP_REG, OP_VOID);
  SET_GPR (OP[1], tmp);
  SET_GPR (OP[1], tmp);
  trace_output_16 (tmp);
  trace_output_16 (tmp);
}
}
 
 
/* addb.  */
/* addb.  */
void
void
OP_30_8 ()
OP_30_8 ()
{
{
  uint8 a = OP[0];
  uint8 a = OP[0];
  uint8 b = (GPR (OP[1]) & 0xff);
  uint8 b = (GPR (OP[1]) & 0xff);
  trace_input ("addb", OP_CONSTANT4_1, OP_REG, OP_VOID);
  trace_input ("addb", OP_CONSTANT4_1, OP_REG, OP_VOID);
  uint16 tmp = (a + b) & 0xff;
  uint16 tmp = (a + b) & 0xff;
  SET_GPR (OP[1], (tmp | ((GPR (OP[1])) & 0xff00)));
  SET_GPR (OP[1], (tmp | ((GPR (OP[1])) & 0xff00)));
  SET_PSR_C (tmp > 0xFF);
  SET_PSR_C (tmp > 0xFF);
  SET_PSR_F (((a & 0x80) == (b & 0x80)) && ((b & 0x80) != (tmp & 0x80)));
  SET_PSR_F (((a & 0x80) == (b & 0x80)) && ((b & 0x80) != (tmp & 0x80)));
  trace_output_16 (tmp);
  trace_output_16 (tmp);
}
}
 
 
/* addb.  */
/* addb.  */
void
void
OP_30B_C ()
OP_30B_C ()
{
{
  uint8 a = (OP[0]) & 0xff;
  uint8 a = (OP[0]) & 0xff;
  uint8 b = (GPR (OP[1]) & 0xff);
  uint8 b = (GPR (OP[1]) & 0xff);
  trace_input ("addb", OP_CONSTANT16, OP_REG, OP_VOID);
  trace_input ("addb", OP_CONSTANT16, OP_REG, OP_VOID);
  uint16 tmp = (a + b) & 0xff;
  uint16 tmp = (a + b) & 0xff;
  SET_GPR (OP[1], (tmp | ((GPR (OP[1])) & 0xff00)));
  SET_GPR (OP[1], (tmp | ((GPR (OP[1])) & 0xff00)));
  SET_PSR_C (tmp > 0xFF);
  SET_PSR_C (tmp > 0xFF);
  SET_PSR_F (((a & 0x80) == (b & 0x80)) && ((b & 0x80) != (tmp & 0x80)));
  SET_PSR_F (((a & 0x80) == (b & 0x80)) && ((b & 0x80) != (tmp & 0x80)));
  trace_output_16 (tmp);
  trace_output_16 (tmp);
}
}
 
 
/* addb.  */
/* addb.  */
void
void
OP_31_8 ()
OP_31_8 ()
{
{
  uint8 a = (GPR (OP[0]) & 0xff);
  uint8 a = (GPR (OP[0]) & 0xff);
  uint8 b = (GPR (OP[1]) & 0xff);
  uint8 b = (GPR (OP[1]) & 0xff);
  trace_input ("addb", OP_REG, OP_REG, OP_VOID);
  trace_input ("addb", OP_REG, OP_REG, OP_VOID);
  uint16 tmp = (a + b) & 0xff;
  uint16 tmp = (a + b) & 0xff;
  SET_GPR (OP[1], (tmp | ((GPR (OP[1])) & 0xff00)));
  SET_GPR (OP[1], (tmp | ((GPR (OP[1])) & 0xff00)));
  SET_PSR_C (tmp > 0xFF);
  SET_PSR_C (tmp > 0xFF);
  SET_PSR_F (((a & 0x80) == (b & 0x80)) && ((b & 0x80) != (tmp & 0x80)));
  SET_PSR_F (((a & 0x80) == (b & 0x80)) && ((b & 0x80) != (tmp & 0x80)));
  trace_output_16 (tmp);
  trace_output_16 (tmp);
}
}
 
 
/* addw.  */
/* addw.  */
void
void
OP_32_8 ()
OP_32_8 ()
{
{
  int16 a = OP[0];
  int16 a = OP[0];
  uint16 tmp, b = GPR (OP[1]);
  uint16 tmp, b = GPR (OP[1]);
  trace_input ("addw", OP_CONSTANT4_1, OP_REG, OP_VOID);
  trace_input ("addw", OP_CONSTANT4_1, OP_REG, OP_VOID);
  tmp = (a + b);
  tmp = (a + b);
  SET_GPR (OP[1], tmp);
  SET_GPR (OP[1], tmp);
  SET_PSR_C (tmp > 0xFFFF);
  SET_PSR_C (tmp > 0xFFFF);
  SET_PSR_F (((a & 0x8000) == (b & 0x8000)) && ((b & 0x8000) != (tmp & 0x8000)));
  SET_PSR_F (((a & 0x8000) == (b & 0x8000)) && ((b & 0x8000) != (tmp & 0x8000)));
  trace_output_16 (tmp);
  trace_output_16 (tmp);
}
}
 
 
/* addw.  */
/* addw.  */
void
void
OP_32B_C ()
OP_32B_C ()
{
{
  int16 a = OP[0];
  int16 a = OP[0];
  uint16 tmp, b = GPR (OP[1]);
  uint16 tmp, b = GPR (OP[1]);
  tmp = (a + b);
  tmp = (a + b);
  trace_input ("addw", OP_CONSTANT16, OP_REG, OP_VOID);
  trace_input ("addw", OP_CONSTANT16, OP_REG, OP_VOID);
  SET_GPR (OP[1], tmp);
  SET_GPR (OP[1], tmp);
  SET_PSR_C (tmp > 0xFFFF);
  SET_PSR_C (tmp > 0xFFFF);
  SET_PSR_F (((a & 0x8000) == (b & 0x8000)) && ((b & 0x8000) != (tmp & 0x8000)));
  SET_PSR_F (((a & 0x8000) == (b & 0x8000)) && ((b & 0x8000) != (tmp & 0x8000)));
  trace_output_16 (tmp);
  trace_output_16 (tmp);
}
}
 
 
/* addw.  */
/* addw.  */
void
void
OP_33_8 ()
OP_33_8 ()
{
{
  uint16 tmp, a = (GPR (OP[0])), b = (GPR (OP[1]));
  uint16 tmp, a = (GPR (OP[0])), b = (GPR (OP[1]));
  trace_input ("addw", OP_REG, OP_REG, OP_VOID);
  trace_input ("addw", OP_REG, OP_REG, OP_VOID);
  tmp = (a + b);
  tmp = (a + b);
  SET_GPR (OP[1], tmp);
  SET_GPR (OP[1], tmp);
  SET_PSR_C (tmp > 0xFFFF);
  SET_PSR_C (tmp > 0xFFFF);
  SET_PSR_F (((a & 0x8000) == (b & 0x8000)) && ((b & 0x8000) != (tmp & 0x8000)));
  SET_PSR_F (((a & 0x8000) == (b & 0x8000)) && ((b & 0x8000) != (tmp & 0x8000)));
  trace_output_16 (tmp);
  trace_output_16 (tmp);
}
}
 
 
/* addcb.  */
/* addcb.  */
void
void
OP_34_8 ()
OP_34_8 ()
{
{
  uint8 tmp, a = OP[0] & 0xff, b = (GPR (OP[1])) & 0xff;
  uint8 tmp, a = OP[0] & 0xff, b = (GPR (OP[1])) & 0xff;
  trace_input ("addcb", OP_CONSTANT4_1, OP_REG, OP_REG);
  trace_input ("addcb", OP_CONSTANT4_1, OP_REG, OP_REG);
  tmp = (a + b + PSR_C) & 0xff;
  tmp = (a + b + PSR_C) & 0xff;
  SET_GPR (OP[1], (tmp | ((GPR (OP[1])) & 0xff00)));
  SET_GPR (OP[1], (tmp | ((GPR (OP[1])) & 0xff00)));
  SET_PSR_C (tmp > 0xFF);
  SET_PSR_C (tmp > 0xFF);
  SET_PSR_F (((a & 0x80) == (b & 0x80)) && ((b & 0x80) != (tmp & 0x80)));
  SET_PSR_F (((a & 0x80) == (b & 0x80)) && ((b & 0x80) != (tmp & 0x80)));
  trace_output_16 (tmp);
  trace_output_16 (tmp);
}
}
 
 
/* addcb.  */
/* addcb.  */
void
void
OP_34B_C ()
OP_34B_C ()
{
{
  int8 a = OP[0] & 0xff;
  int8 a = OP[0] & 0xff;
  uint8 b = (GPR (OP[1])) & 0xff;
  uint8 b = (GPR (OP[1])) & 0xff;
  trace_input ("addcb", OP_CONSTANT16, OP_REG, OP_VOID);
  trace_input ("addcb", OP_CONSTANT16, OP_REG, OP_VOID);
  uint8 tmp = (a + b + PSR_C) & 0xff;
  uint8 tmp = (a + b + PSR_C) & 0xff;
  SET_GPR (OP[1], (tmp | ((GPR (OP[1])) & 0xff00)));
  SET_GPR (OP[1], (tmp | ((GPR (OP[1])) & 0xff00)));
  SET_PSR_C (tmp > 0xFF);
  SET_PSR_C (tmp > 0xFF);
  SET_PSR_F (((a & 0x80) == (b & 0x80)) && ((b & 0x80) != (tmp & 0x80)));
  SET_PSR_F (((a & 0x80) == (b & 0x80)) && ((b & 0x80) != (tmp & 0x80)));
  trace_output_16 (tmp);
  trace_output_16 (tmp);
}
}
 
 
/* addcb.  */
/* addcb.  */
void
void
OP_35_8 ()
OP_35_8 ()
{
{
  uint8 a = (GPR (OP[0])) & 0xff;
  uint8 a = (GPR (OP[0])) & 0xff;
  uint8 b = (GPR (OP[1])) & 0xff;
  uint8 b = (GPR (OP[1])) & 0xff;
  trace_input ("addcb", OP_REG, OP_REG, OP_VOID);
  trace_input ("addcb", OP_REG, OP_REG, OP_VOID);
  uint8 tmp = (a + b + PSR_C) & 0xff;
  uint8 tmp = (a + b + PSR_C) & 0xff;
  SET_GPR (OP[1], (tmp | ((GPR (OP[1])) & 0xff00)));
  SET_GPR (OP[1], (tmp | ((GPR (OP[1])) & 0xff00)));
  SET_PSR_C (tmp > 0xFF);
  SET_PSR_C (tmp > 0xFF);
  SET_PSR_F (((a & 0x80) == (b & 0x80)) && ((b & 0x80) != (tmp & 0x80)));
  SET_PSR_F (((a & 0x80) == (b & 0x80)) && ((b & 0x80) != (tmp & 0x80)));
  trace_output_16 (tmp);
  trace_output_16 (tmp);
}
}
 
 
/* addcw.  */
/* addcw.  */
void
void
OP_36_8 ()
OP_36_8 ()
{
{
  uint16 a = OP[0];
  uint16 a = OP[0];
  uint16 b = GPR (OP[1]);
  uint16 b = GPR (OP[1]);
  trace_input ("addcw", OP_CONSTANT4_1, OP_REG, OP_VOID);
  trace_input ("addcw", OP_CONSTANT4_1, OP_REG, OP_VOID);
  uint16 tmp = (a + b + PSR_C);
  uint16 tmp = (a + b + PSR_C);
  SET_GPR (OP[1], tmp);
  SET_GPR (OP[1], tmp);
  SET_PSR_C (tmp > 0xFFFF);
  SET_PSR_C (tmp > 0xFFFF);
  SET_PSR_F (((a & 0x8000) == (b & 0x8000)) && ((b & 0x8000) != (tmp & 0x8000)));
  SET_PSR_F (((a & 0x8000) == (b & 0x8000)) && ((b & 0x8000) != (tmp & 0x8000)));
  trace_output_16 (tmp);
  trace_output_16 (tmp);
}
}
 
 
/* addcw.  */
/* addcw.  */
void
void
OP_36B_C ()
OP_36B_C ()
{
{
  int16 a = OP[0];
  int16 a = OP[0];
  uint16 b = GPR (OP[1]);
  uint16 b = GPR (OP[1]);
  trace_input ("addcw", OP_CONSTANT16, OP_REG, OP_VOID);
  trace_input ("addcw", OP_CONSTANT16, OP_REG, OP_VOID);
  uint16 tmp = (a + b + PSR_C);
  uint16 tmp = (a + b + PSR_C);
  SET_GPR (OP[1], tmp);
  SET_GPR (OP[1], tmp);
  SET_PSR_C (tmp > 0xFFFF);
  SET_PSR_C (tmp > 0xFFFF);
  SET_PSR_F (((a & 0x8000) == (b & 0x8000)) && ((b & 0x8000) != (tmp & 0x8000)));
  SET_PSR_F (((a & 0x8000) == (b & 0x8000)) && ((b & 0x8000) != (tmp & 0x8000)));
  trace_output_16 (tmp);
  trace_output_16 (tmp);
}
}
 
 
/* addcw.  */
/* addcw.  */
void
void
OP_37_8 ()
OP_37_8 ()
{
{
  uint16 a = GPR (OP[1]);
  uint16 a = GPR (OP[1]);
  uint16 b = GPR (OP[1]);
  uint16 b = GPR (OP[1]);
  trace_input ("addcw", OP_REG, OP_REG, OP_VOID);
  trace_input ("addcw", OP_REG, OP_REG, OP_VOID);
  uint16 tmp = (a + b + PSR_C);
  uint16 tmp = (a + b + PSR_C);
  SET_GPR (OP[1], tmp);
  SET_GPR (OP[1], tmp);
  SET_PSR_C (tmp > 0xFFFF);
  SET_PSR_C (tmp > 0xFFFF);
  SET_PSR_F (((a & 0x8000) == (b & 0x8000)) && ((b & 0x8000) != (tmp & 0x8000)));
  SET_PSR_F (((a & 0x8000) == (b & 0x8000)) && ((b & 0x8000) != (tmp & 0x8000)));
  trace_output_16 (tmp);
  trace_output_16 (tmp);
}
}
 
 
/* addd.  */
/* addd.  */
void
void
OP_60_8 ()
OP_60_8 ()
{
{
  int16 a = (OP[0]);
  int16 a = (OP[0]);
  uint32 b = GPR32 (OP[1]);
  uint32 b = GPR32 (OP[1]);
  trace_input ("addd", OP_CONSTANT4_1, OP_REGP, OP_VOID);
  trace_input ("addd", OP_CONSTANT4_1, OP_REGP, OP_VOID);
  uint32 tmp = (a + b);
  uint32 tmp = (a + b);
  SET_GPR32 (OP[1], tmp);
  SET_GPR32 (OP[1], tmp);
  SET_PSR_C (tmp > 0xFFFFFFFF);
  SET_PSR_C (tmp > 0xFFFFFFFF);
  SET_PSR_F (((a & 0x80000000) == (b & 0x80000000)) && ((b & 0x80000000) != (tmp & 0x80000000)));
  SET_PSR_F (((a & 0x80000000) == (b & 0x80000000)) && ((b & 0x80000000) != (tmp & 0x80000000)));
  trace_output_32 (tmp);
  trace_output_32 (tmp);
}
}
 
 
/* addd.  */
/* addd.  */
void
void
OP_60B_C ()
OP_60B_C ()
{
{
  int32 a = (SEXT16(OP[0]));
  int32 a = (SEXT16(OP[0]));
  uint32 b = GPR32 (OP[1]);
  uint32 b = GPR32 (OP[1]);
  trace_input ("addd", OP_CONSTANT16, OP_REGP, OP_VOID);
  trace_input ("addd", OP_CONSTANT16, OP_REGP, OP_VOID);
  uint32 tmp = (a + b);
  uint32 tmp = (a + b);
  SET_GPR32 (OP[1], tmp);
  SET_GPR32 (OP[1], tmp);
  SET_PSR_C (tmp > 0xFFFFFFFF);
  SET_PSR_C (tmp > 0xFFFFFFFF);
  SET_PSR_F (((a & 0x80000000) == (b & 0x80000000)) && ((b & 0x80000000) != (tmp & 0x80000000)));
  SET_PSR_F (((a & 0x80000000) == (b & 0x80000000)) && ((b & 0x80000000) != (tmp & 0x80000000)));
  trace_output_32 (tmp);
  trace_output_32 (tmp);
}
}
 
 
/* addd.  */
/* addd.  */
void
void
OP_61_8 ()
OP_61_8 ()
{
{
  uint32 a = GPR32 (OP[0]);
  uint32 a = GPR32 (OP[0]);
  uint32 b = GPR32 (OP[1]);
  uint32 b = GPR32 (OP[1]);
  trace_input ("addd", OP_REGP, OP_REGP, OP_VOID);
  trace_input ("addd", OP_REGP, OP_REGP, OP_VOID);
  uint32 tmp = (a + b);
  uint32 tmp = (a + b);
  SET_GPR32 (OP[1], tmp);
  SET_GPR32 (OP[1], tmp);
  trace_output_32 (tmp);
  trace_output_32 (tmp);
  SET_PSR_C (tmp > 0xFFFFFFFF);
  SET_PSR_C (tmp > 0xFFFFFFFF);
  SET_PSR_F (((a & 0x80000000) == (b & 0x80000000)) && ((b & 0x80000000) != (tmp & 0x80000000)));
  SET_PSR_F (((a & 0x80000000) == (b & 0x80000000)) && ((b & 0x80000000) != (tmp & 0x80000000)));
}
}
 
 
/* addd.  */
/* addd.  */
void
void
OP_4_8 ()
OP_4_8 ()
{
{
  uint32 a = OP[0];
  uint32 a = OP[0];
  uint32 b = GPR32 (OP[1]);
  uint32 b = GPR32 (OP[1]);
  uint32 tmp;
  uint32 tmp;
  trace_input ("addd", OP_CONSTANT20, OP_REGP, OP_VOID);
  trace_input ("addd", OP_CONSTANT20, OP_REGP, OP_VOID);
  tmp = (a + b);
  tmp = (a + b);
  SET_GPR32 (OP[1], tmp);
  SET_GPR32 (OP[1], tmp);
  SET_PSR_C (tmp > 0xFFFFFFFF);
  SET_PSR_C (tmp > 0xFFFFFFFF);
  SET_PSR_F (((a & 0x80000000) == (b & 0x80000000)) && ((b & 0x80000000) != (tmp & 0x80000000)));
  SET_PSR_F (((a & 0x80000000) == (b & 0x80000000)) && ((b & 0x80000000) != (tmp & 0x80000000)));
  trace_output_32 (tmp);
  trace_output_32 (tmp);
}
}
 
 
/* addd.  */
/* addd.  */
void
void
OP_2_C ()
OP_2_C ()
{
{
  int32 a = OP[0];
  int32 a = OP[0];
  uint32 b = GPR32 (OP[1]);
  uint32 b = GPR32 (OP[1]);
  uint32 tmp;
  uint32 tmp;
  trace_input ("addd", OP_CONSTANT32, OP_REGP, OP_VOID);
  trace_input ("addd", OP_CONSTANT32, OP_REGP, OP_VOID);
  tmp = (a + b);
  tmp = (a + b);
  SET_GPR32 (OP[1], tmp);
  SET_GPR32 (OP[1], tmp);
  SET_PSR_C (tmp > 0xFFFFFFFF);
  SET_PSR_C (tmp > 0xFFFFFFFF);
  SET_PSR_F (((a & 0x80000000) == (b & 0x80000000)) && ((b & 0x80000000) != (tmp & 0x80000000)));
  SET_PSR_F (((a & 0x80000000) == (b & 0x80000000)) && ((b & 0x80000000) != (tmp & 0x80000000)));
  trace_output_32 (tmp);
  trace_output_32 (tmp);
}
}
 
 
/* andb.  */
/* andb.  */
void
void
OP_20_8 ()
OP_20_8 ()
{
{
  uint8 tmp, a = (OP[0]) & 0xff, b = (GPR (OP[1])) & 0xff;
  uint8 tmp, a = (OP[0]) & 0xff, b = (GPR (OP[1])) & 0xff;
  trace_input ("andb", OP_CONSTANT4, OP_REG, OP_VOID);
  trace_input ("andb", OP_CONSTANT4, OP_REG, OP_VOID);
  tmp = a & b;
  tmp = a & b;
  SET_GPR (OP[1], (tmp | ((GPR (OP[1])) & 0xff00)));
  SET_GPR (OP[1], (tmp | ((GPR (OP[1])) & 0xff00)));
  trace_output_16 (tmp);
  trace_output_16 (tmp);
}
}
 
 
/* andb.  */
/* andb.  */
void
void
OP_20B_C ()
OP_20B_C ()
{
{
  uint8 tmp, a = (OP[0]) & 0xff, b = (GPR (OP[1])) & 0xff;
  uint8 tmp, a = (OP[0]) & 0xff, b = (GPR (OP[1])) & 0xff;
  trace_input ("andb", OP_CONSTANT16, OP_REG, OP_VOID);
  trace_input ("andb", OP_CONSTANT16, OP_REG, OP_VOID);
  tmp = a & b;
  tmp = a & b;
  SET_GPR (OP[1], (tmp | ((GPR (OP[1])) & 0xff00)));
  SET_GPR (OP[1], (tmp | ((GPR (OP[1])) & 0xff00)));
  trace_output_16 (tmp);
  trace_output_16 (tmp);
}
}
 
 
/* andb.  */
/* andb.  */
void
void
OP_21_8 ()
OP_21_8 ()
{
{
  uint8 tmp, a = (GPR (OP[0])) & 0xff, b = (GPR (OP[1])) & 0xff;
  uint8 tmp, a = (GPR (OP[0])) & 0xff, b = (GPR (OP[1])) & 0xff;
  trace_input ("andb", OP_REG, OP_REG, OP_VOID);
  trace_input ("andb", OP_REG, OP_REG, OP_VOID);
  tmp = a & b;
  tmp = a & b;
  SET_GPR (OP[1], (tmp | ((GPR (OP[1])) & 0xff00)));
  SET_GPR (OP[1], (tmp | ((GPR (OP[1])) & 0xff00)));
  trace_output_16 (tmp);
  trace_output_16 (tmp);
}
}
 
 
/* andw.  */
/* andw.  */
void
void
OP_22_8 ()
OP_22_8 ()
{
{
  uint16 tmp, a = OP[0], b = GPR (OP[1]);
  uint16 tmp, a = OP[0], b = GPR (OP[1]);
  trace_input ("andw", OP_CONSTANT4, OP_REG, OP_VOID);
  trace_input ("andw", OP_CONSTANT4, OP_REG, OP_VOID);
  tmp = a & b;
  tmp = a & b;
  SET_GPR (OP[1], tmp);
  SET_GPR (OP[1], tmp);
  trace_output_16 (tmp);
  trace_output_16 (tmp);
}
}
 
 
/* andw.  */
/* andw.  */
void
void
OP_22B_C ()
OP_22B_C ()
{
{
  uint16 tmp, a = OP[0], b = GPR (OP[1]);
  uint16 tmp, a = OP[0], b = GPR (OP[1]);
  trace_input ("andw", OP_CONSTANT16, OP_REG, OP_VOID);
  trace_input ("andw", OP_CONSTANT16, OP_REG, OP_VOID);
  tmp = a & b;
  tmp = a & b;
  SET_GPR (OP[1], tmp);
  SET_GPR (OP[1], tmp);
  trace_output_16 (tmp);
  trace_output_16 (tmp);
}
}
 
 
/* andw.  */
/* andw.  */
void
void
OP_23_8 ()
OP_23_8 ()
{
{
  uint16 tmp, a = GPR (OP[0]), b = GPR (OP[1]);
  uint16 tmp, a = GPR (OP[0]), b = GPR (OP[1]);
  trace_input ("andw", OP_REG, OP_REG, OP_VOID);
  trace_input ("andw", OP_REG, OP_REG, OP_VOID);
  tmp = a & b;
  tmp = a & b;
  SET_GPR (OP[1], tmp);
  SET_GPR (OP[1], tmp);
  trace_output_16 (tmp);
  trace_output_16 (tmp);
}
}
 
 
/* andd.  */
/* andd.  */
void
void
OP_4_C ()
OP_4_C ()
{
{
  uint32 tmp, a = OP[0],  b = GPR32 (OP[1]);
  uint32 tmp, a = OP[0],  b = GPR32 (OP[1]);
  trace_input ("andd", OP_CONSTANT32, OP_REGP, OP_VOID);
  trace_input ("andd", OP_CONSTANT32, OP_REGP, OP_VOID);
  tmp = a & b;
  tmp = a & b;
  SET_GPR32 (OP[1], tmp);
  SET_GPR32 (OP[1], tmp);
  trace_output_32 (tmp);
  trace_output_32 (tmp);
}
}
 
 
/* andd.  */
/* andd.  */
void
void
OP_14B_14 ()
OP_14B_14 ()
{
{
  uint32 tmp, a = (GPR32 (OP[0])), b = (GPR32 (OP[1]));
  uint32 tmp, a = (GPR32 (OP[0])), b = (GPR32 (OP[1]));
  trace_input ("andd", OP_REGP, OP_REGP, OP_VOID);
  trace_input ("andd", OP_REGP, OP_REGP, OP_VOID);
  tmp = a & b;
  tmp = a & b;
  SET_GPR32 (OP[1], tmp);
  SET_GPR32 (OP[1], tmp);
  trace_output_32 (tmp);
  trace_output_32 (tmp);
}
}
 
 
/* ord.  */
/* ord.  */
void
void
OP_5_C ()
OP_5_C ()
{
{
  uint32 tmp, a = (OP[0]), b = GPR32 (OP[1]);
  uint32 tmp, a = (OP[0]), b = GPR32 (OP[1]);
  trace_input ("ord", OP_CONSTANT32, OP_REG, OP_VOID);
  trace_input ("ord", OP_CONSTANT32, OP_REG, OP_VOID);
  tmp = a | b;
  tmp = a | b;
  SET_GPR32 (OP[1], tmp);
  SET_GPR32 (OP[1], tmp);
  trace_output_32 (tmp);
  trace_output_32 (tmp);
}
}
 
 
/* ord.  */
/* ord.  */
void
void
OP_149_14 ()
OP_149_14 ()
{
{
  uint32 tmp, a = GPR32 (OP[0]), b = GPR32 (OP[1]);
  uint32 tmp, a = GPR32 (OP[0]), b = GPR32 (OP[1]);
  trace_input ("ord", OP_REGP, OP_REGP, OP_VOID);
  trace_input ("ord", OP_REGP, OP_REGP, OP_VOID);
  tmp = a | b;
  tmp = a | b;
  SET_GPR32 (OP[1], tmp);
  SET_GPR32 (OP[1], tmp);
  trace_output_32 (tmp);
  trace_output_32 (tmp);
}
}
 
 
/* xord.  */
/* xord.  */
void
void
OP_6_C ()
OP_6_C ()
{
{
  uint32 tmp, a = (OP[0]), b = GPR32 (OP[1]);
  uint32 tmp, a = (OP[0]), b = GPR32 (OP[1]);
  trace_input ("xord", OP_CONSTANT32, OP_REG, OP_VOID);
  trace_input ("xord", OP_CONSTANT32, OP_REG, OP_VOID);
  tmp = a ^ b;
  tmp = a ^ b;
  SET_GPR32 (OP[1], tmp);
  SET_GPR32 (OP[1], tmp);
  trace_output_32 (tmp);
  trace_output_32 (tmp);
}
}
 
 
/* xord.  */
/* xord.  */
void
void
OP_14A_14 ()
OP_14A_14 ()
{
{
  uint32 tmp, a = GPR32 (OP[0]), b = GPR32 (OP[1]);
  uint32 tmp, a = GPR32 (OP[0]), b = GPR32 (OP[1]);
  trace_input ("xord", OP_REGP, OP_REGP, OP_VOID);
  trace_input ("xord", OP_REGP, OP_REGP, OP_VOID);
  tmp = a ^ b;
  tmp = a ^ b;
  SET_GPR32 (OP[1], tmp);
  SET_GPR32 (OP[1], tmp);
  trace_output_32 (tmp);
  trace_output_32 (tmp);
}
}
 
 
 
 
/* b.  */
/* b.  */
void
void
OP_1_4 ()
OP_1_4 ()
{
{
  uint32 tmp, cc = cond_stat (OP[0]);
  uint32 tmp, cc = cond_stat (OP[0]);
  trace_input ("b", OP_CONSTANT4, OP_DISPE9, OP_VOID);
  trace_input ("b", OP_CONSTANT4, OP_DISPE9, OP_VOID);
  if  (cc)
  if  (cc)
    {
    {
      if (sign_flag)
      if (sign_flag)
        tmp =  (PC - (OP[1]));
        tmp =  (PC - (OP[1]));
      else
      else
        tmp =  (PC + (OP[1]));
        tmp =  (PC + (OP[1]));
      /* If the resulting PC value is less than 0x00_0000 or greater
      /* If the resulting PC value is less than 0x00_0000 or greater
         than 0xFF_FFFF, this instruction causes an IAD trap.*/
         than 0xFF_FFFF, this instruction causes an IAD trap.*/
 
 
      if ((tmp < 0x000000) || (tmp > 0xFFFFFF))
      if ((tmp < 0x000000) || (tmp > 0xFFFFFF))
        {
        {
          State.exception = SIG_CR16_BUS;
          State.exception = SIG_CR16_BUS;
          State.pc_changed = 1; /* Don't increment the PC. */
          State.pc_changed = 1; /* Don't increment the PC. */
          trace_output_void ();
          trace_output_void ();
          return;
          return;
        }
        }
      else
      else
        JMP (tmp);
        JMP (tmp);
    }
    }
  sign_flag = 0; /* Reset sign_flag.  */
  sign_flag = 0; /* Reset sign_flag.  */
  trace_output_32 (tmp);
  trace_output_32 (tmp);
}
}
 
 
/* b.  */
/* b.  */
void
void
OP_18_8 ()
OP_18_8 ()
{
{
  uint32 tmp, cc = cond_stat (OP[0]);
  uint32 tmp, cc = cond_stat (OP[0]);
  trace_input ("b", OP_CONSTANT4, OP_DISP17, OP_VOID);
  trace_input ("b", OP_CONSTANT4, OP_DISP17, OP_VOID);
  if (cc)
  if (cc)
    {
    {
      if (sign_flag)
      if (sign_flag)
        tmp =  (PC - OP[1]);
        tmp =  (PC - OP[1]);
      else
      else
        tmp =  (PC + OP[1]);
        tmp =  (PC + OP[1]);
      /* If the resulting PC value is less than 0x00_0000 or greater
      /* If the resulting PC value is less than 0x00_0000 or greater
         than 0xFF_FFFF, this instruction causes an IAD trap.*/
         than 0xFF_FFFF, this instruction causes an IAD trap.*/
 
 
      if ((tmp < 0x000000) || (tmp > 0xFFFFFF))
      if ((tmp < 0x000000) || (tmp > 0xFFFFFF))
        {
        {
          State.exception = SIG_CR16_BUS;
          State.exception = SIG_CR16_BUS;
          State.pc_changed = 1; /* Don't increment the PC. */
          State.pc_changed = 1; /* Don't increment the PC. */
          trace_output_void ();
          trace_output_void ();
          return;
          return;
        }
        }
      else
      else
        JMP (tmp);
        JMP (tmp);
    }
    }
  sign_flag = 0; /* Reset sign_flag.  */
  sign_flag = 0; /* Reset sign_flag.  */
  trace_output_32 (tmp);
  trace_output_32 (tmp);
}
}
 
 
/* b.  */
/* b.  */
void
void
OP_10_10 ()
OP_10_10 ()
{
{
  uint32 tmp, cc = cond_stat (OP[0]);
  uint32 tmp, cc = cond_stat (OP[0]);
  trace_input ("b", OP_CONSTANT4, OP_DISP25, OP_VOID);
  trace_input ("b", OP_CONSTANT4, OP_DISP25, OP_VOID);
  if (cc)
  if (cc)
    {
    {
      if (sign_flag)
      if (sign_flag)
        tmp =  (PC - (OP[1]));
        tmp =  (PC - (OP[1]));
      else
      else
        tmp =  (PC + (OP[1]));
        tmp =  (PC + (OP[1]));
      /* If the resulting PC value is less than 0x00_0000 or greater
      /* If the resulting PC value is less than 0x00_0000 or greater
         than 0xFF_FFFF, this instruction causes an IAD trap.*/
         than 0xFF_FFFF, this instruction causes an IAD trap.*/
 
 
      if ((tmp < 0x000000) || (tmp > 0xFFFFFF))
      if ((tmp < 0x000000) || (tmp > 0xFFFFFF))
        {
        {
          State.exception = SIG_CR16_BUS;
          State.exception = SIG_CR16_BUS;
          State.pc_changed = 1; /* Don't increment the PC. */
          State.pc_changed = 1; /* Don't increment the PC. */
          trace_output_void ();
          trace_output_void ();
          return;
          return;
        }
        }
      else
      else
        JMP (tmp);
        JMP (tmp);
    }
    }
  sign_flag = 0; /* Reset sign_flag.  */
  sign_flag = 0; /* Reset sign_flag.  */
  trace_output_32 (tmp);
  trace_output_32 (tmp);
}
}
 
 
/* bal.  */
/* bal.  */
void
void
OP_C0_8 ()
OP_C0_8 ()
{
{
  uint32 tmp;
  uint32 tmp;
  trace_input ("bal", OP_REG, OP_DISP17, OP_VOID);
  trace_input ("bal", OP_REG, OP_DISP17, OP_VOID);
  tmp =  ((PC + 4) >> 1); /* Store PC in RA register. */
  tmp =  ((PC + 4) >> 1); /* Store PC in RA register. */
  SET_GPR32 (14, tmp);
  SET_GPR32 (14, tmp);
  if (sign_flag)
  if (sign_flag)
    tmp =  (PC - (OP[1]));
    tmp =  (PC - (OP[1]));
  else
  else
    tmp =  (PC + (OP[1]));
    tmp =  (PC + (OP[1]));
 
 
  /* If the resulting PC value is less than 0x00_0000 or greater
  /* If the resulting PC value is less than 0x00_0000 or greater
     than 0xFF_FFFF, this instruction causes an IAD trap.  */
     than 0xFF_FFFF, this instruction causes an IAD trap.  */
 
 
  if ((tmp < 0x000000) || (tmp > 0xFFFFFF))
  if ((tmp < 0x000000) || (tmp > 0xFFFFFF))
    {
    {
      State.exception = SIG_CR16_BUS;
      State.exception = SIG_CR16_BUS;
      State.pc_changed = 1; /* Don't increment the PC. */
      State.pc_changed = 1; /* Don't increment the PC. */
      trace_output_void ();
      trace_output_void ();
      return;
      return;
    }
    }
  else
  else
    JMP (tmp);
    JMP (tmp);
  sign_flag = 0; /* Reset sign_flag.  */
  sign_flag = 0; /* Reset sign_flag.  */
  trace_output_32 (tmp);
  trace_output_32 (tmp);
}
}
 
 
 
 
/* bal.  */
/* bal.  */
void
void
OP_102_14 ()
OP_102_14 ()
{
{
  uint32 tmp;
  uint32 tmp;
  trace_input ("bal", OP_REGP, OP_DISP25, OP_VOID);
  trace_input ("bal", OP_REGP, OP_DISP25, OP_VOID);
  tmp = (((PC) + 4) >> 1); /* Store PC in reg pair.  */
  tmp = (((PC) + 4) >> 1); /* Store PC in reg pair.  */
  SET_GPR32 (OP[0], tmp);
  SET_GPR32 (OP[0], tmp);
  if (sign_flag)
  if (sign_flag)
    tmp =  ((PC) - (OP[1]));
    tmp =  ((PC) - (OP[1]));
  else
  else
    tmp =  ((PC) + (OP[1]));
    tmp =  ((PC) + (OP[1]));
  /* If the resulting PC value is less than 0x00_0000 or greater
  /* If the resulting PC value is less than 0x00_0000 or greater
     than 0xFF_FFFF, this instruction causes an IAD trap.*/
     than 0xFF_FFFF, this instruction causes an IAD trap.*/
 
 
  if ((tmp < 0x000000) || (tmp > 0xFFFFFF))
  if ((tmp < 0x000000) || (tmp > 0xFFFFFF))
    {
    {
      State.exception = SIG_CR16_BUS;
      State.exception = SIG_CR16_BUS;
      State.pc_changed = 1; /* Don't increment the PC. */
      State.pc_changed = 1; /* Don't increment the PC. */
      trace_output_void ();
      trace_output_void ();
      return;
      return;
    }
    }
  else
  else
    JMP (tmp);
    JMP (tmp);
  sign_flag = 0; /* Reset sign_flag.  */
  sign_flag = 0; /* Reset sign_flag.  */
  trace_output_32 (tmp);
  trace_output_32 (tmp);
}
}
 
 
/* jal.  */
/* jal.  */
void
void
OP_148_14 ()
OP_148_14 ()
{
{
  uint32 tmp;
  uint32 tmp;
  trace_input ("jal", OP_REGP, OP_REGP, OP_VOID);
  trace_input ("jal", OP_REGP, OP_REGP, OP_VOID);
  SET_GPR32 (OP[0], (((PC) + 4) >> 1)); /* Store next PC in RA */
  SET_GPR32 (OP[0], (((PC) + 4) >> 1)); /* Store next PC in RA */
  tmp = GPR32 (OP[1]);
  tmp = GPR32 (OP[1]);
  tmp = SEXT24(tmp << 1);
  tmp = SEXT24(tmp << 1);
  /* If the resulting PC value is less than 0x00_0000 or greater
  /* If the resulting PC value is less than 0x00_0000 or greater
     than 0xFF_FFFF, this instruction causes an IAD trap.*/
     than 0xFF_FFFF, this instruction causes an IAD trap.*/
 
 
  if ((tmp < 0x0) || (tmp > 0xFFFFFF))
  if ((tmp < 0x0) || (tmp > 0xFFFFFF))
    {
    {
      State.exception = SIG_CR16_BUS;
      State.exception = SIG_CR16_BUS;
      State.pc_changed = 1; /* Don't increment the PC. */
      State.pc_changed = 1; /* Don't increment the PC. */
      trace_output_void ();
      trace_output_void ();
      return;
      return;
    }
    }
  else
  else
    JMP (tmp);
    JMP (tmp);
 
 
  trace_output_32 (tmp);
  trace_output_32 (tmp);
}
}
 
 
 
 
/* jal.  */
/* jal.  */
void
void
OP_D_C ()
OP_D_C ()
{
{
  uint32 tmp;
  uint32 tmp;
  trace_input ("jal", OP_REGP, OP_VOID, OP_VOID);
  trace_input ("jal", OP_REGP, OP_VOID, OP_VOID);
  SET_GPR32 (14, (((PC) + 2) >> 1)); /* Store next PC in RA */
  SET_GPR32 (14, (((PC) + 2) >> 1)); /* Store next PC in RA */
  tmp = GPR32 (OP[0]);
  tmp = GPR32 (OP[0]);
  tmp = SEXT24(tmp << 1);
  tmp = SEXT24(tmp << 1);
  /* If the resulting PC value is less than 0x00_0000 or greater
  /* If the resulting PC value is less than 0x00_0000 or greater
     than 0xFF_FFFF, this instruction causes an IAD trap.*/
     than 0xFF_FFFF, this instruction causes an IAD trap.*/
 
 
  if ((tmp < 0x0) || (tmp > 0xFFFFFF))
  if ((tmp < 0x0) || (tmp > 0xFFFFFF))
    {
    {
      State.exception = SIG_CR16_BUS;
      State.exception = SIG_CR16_BUS;
      State.pc_changed = 1; /* Don't increment the PC. */
      State.pc_changed = 1; /* Don't increment the PC. */
      trace_output_void ();
      trace_output_void ();
      return;
      return;
    }
    }
  else
  else
    JMP (tmp);
    JMP (tmp);
 
 
  trace_output_32 (tmp);
  trace_output_32 (tmp);
}
}
 
 
 
 
/* beq0b.  */
/* beq0b.  */
void
void
OP_C_8 ()
OP_C_8 ()
{
{
  uint32 addr;
  uint32 addr;
  uint8 a = (GPR (OP[0]) & 0xFF);
  uint8 a = (GPR (OP[0]) & 0xFF);
  trace_input ("beq0b", OP_REG, OP_DISP5, OP_VOID);
  trace_input ("beq0b", OP_REG, OP_DISP5, OP_VOID);
  addr = OP[1];
  addr = OP[1];
  if (a == 0)
  if (a == 0)
  {
  {
    if (sign_flag)
    if (sign_flag)
      addr = (PC - OP[1]);
      addr = (PC - OP[1]);
    else
    else
      addr = (PC + OP[1]);
      addr = (PC + OP[1]);
 
 
    JMP (addr);
    JMP (addr);
  }
  }
  sign_flag = 0; /* Reset sign_flag.  */
  sign_flag = 0; /* Reset sign_flag.  */
  trace_output_void ();
  trace_output_void ();
}
}
 
 
/* bne0b.  */
/* bne0b.  */
void
void
OP_D_8 ()
OP_D_8 ()
{
{
  uint32 addr;
  uint32 addr;
  uint8 a = (GPR (OP[0]) & 0xFF);
  uint8 a = (GPR (OP[0]) & 0xFF);
  trace_input ("bne0b", OP_REG, OP_DISP5, OP_VOID);
  trace_input ("bne0b", OP_REG, OP_DISP5, OP_VOID);
  addr = OP[1];
  addr = OP[1];
  if (a != 0)
  if (a != 0)
  {
  {
    if (sign_flag)
    if (sign_flag)
      addr = (PC - OP[1]);
      addr = (PC - OP[1]);
    else
    else
      addr = (PC + OP[1]);
      addr = (PC + OP[1]);
 
 
    JMP (addr);
    JMP (addr);
  }
  }
  sign_flag = 0; /* Reset sign_flag.  */
  sign_flag = 0; /* Reset sign_flag.  */
  trace_output_void ();
  trace_output_void ();
}
}
 
 
/* beq0w.  */
/* beq0w.  */
void
void
OP_E_8()
OP_E_8()
{
{
  uint32 addr;
  uint32 addr;
  uint16 a = GPR (OP[0]);
  uint16 a = GPR (OP[0]);
  trace_input ("beq0w", OP_REG, OP_DISP5, OP_VOID);
  trace_input ("beq0w", OP_REG, OP_DISP5, OP_VOID);
  addr = OP[1];
  addr = OP[1];
  if (a == 0)
  if (a == 0)
  {
  {
    if (sign_flag)
    if (sign_flag)
      addr = (PC - OP[1]);
      addr = (PC - OP[1]);
    else
    else
      addr = (PC + OP[1]);
      addr = (PC + OP[1]);
 
 
    JMP (addr);
    JMP (addr);
  }
  }
  sign_flag = 0; /* Reset sign_flag.  */
  sign_flag = 0; /* Reset sign_flag.  */
  trace_output_void ();
  trace_output_void ();
}
}
 
 
/* bne0w.  */
/* bne0w.  */
void
void
OP_F_8 ()
OP_F_8 ()
{
{
  uint32 addr;
  uint32 addr;
  uint16 a = GPR (OP[0]);
  uint16 a = GPR (OP[0]);
  trace_input ("bne0w", OP_REG, OP_DISP5, OP_VOID);
  trace_input ("bne0w", OP_REG, OP_DISP5, OP_VOID);
  addr = OP[1];
  addr = OP[1];
  if (a != 0)
  if (a != 0)
  {
  {
    if (sign_flag)
    if (sign_flag)
      addr = (PC - OP[1]);
      addr = (PC - OP[1]);
    else
    else
      addr = (PC + OP[1]);
      addr = (PC + OP[1]);
 
 
    JMP (addr);
    JMP (addr);
  }
  }
  sign_flag = 0; /* Reset sign_flag.  */
  sign_flag = 0; /* Reset sign_flag.  */
  trace_output_void ();
  trace_output_void ();
}
}
 
 
 
 
/* jeq.  */
/* jeq.  */
void
void
OP_A0_C ()
OP_A0_C ()
{
{
  uint32 tmp;
  uint32 tmp;
  trace_input ("jeq", OP_REGP, OP_VOID, OP_VOID);
  trace_input ("jeq", OP_REGP, OP_VOID, OP_VOID);
  if ((PSR_Z) == 1)
  if ((PSR_Z) == 1)
  {
  {
     tmp = (GPR32 (OP[0])) & 0x3fffff; /* Use only 0 - 22 bits.  */
     tmp = (GPR32 (OP[0])) & 0x3fffff; /* Use only 0 - 22 bits.  */
     JMP (tmp << 1); /* Set PC's 1 - 23 bits and clear 0th bit. */
     JMP (tmp << 1); /* Set PC's 1 - 23 bits and clear 0th bit. */
  }
  }
  trace_output_32 (tmp);
  trace_output_32 (tmp);
}
}
 
 
/* jne.  */
/* jne.  */
void
void
OP_A1_C ()
OP_A1_C ()
{
{
  uint32 tmp;
  uint32 tmp;
  trace_input ("jne", OP_REGP, OP_VOID, OP_VOID);
  trace_input ("jne", OP_REGP, OP_VOID, OP_VOID);
  if ((PSR_Z) == 0)
  if ((PSR_Z) == 0)
  {
  {
     tmp = (GPR32 (OP[0])) & 0x3fffff; /* Use only 0 - 22 bits.  */
     tmp = (GPR32 (OP[0])) & 0x3fffff; /* Use only 0 - 22 bits.  */
     JMP (tmp << 1); /* Set PC's 1 - 23 bits and clear 0th bit. */
     JMP (tmp << 1); /* Set PC's 1 - 23 bits and clear 0th bit. */
  }
  }
  trace_output_32 (tmp);
  trace_output_32 (tmp);
}
}
 
 
/* jcs.  */
/* jcs.  */
void
void
OP_A2_C ()
OP_A2_C ()
{
{
  uint32 tmp;
  uint32 tmp;
  trace_input ("jcs", OP_REGP, OP_VOID, OP_VOID);
  trace_input ("jcs", OP_REGP, OP_VOID, OP_VOID);
  if ((PSR_C) == 1)
  if ((PSR_C) == 1)
  {
  {
     tmp = (GPR32 (OP[0])) & 0x3fffff; /* Use only 0 - 22 bits */
     tmp = (GPR32 (OP[0])) & 0x3fffff; /* Use only 0 - 22 bits */
     JMP (tmp << 1); /* Set PC's 1 - 23 bits and clear 0th bit*/
     JMP (tmp << 1); /* Set PC's 1 - 23 bits and clear 0th bit*/
  }
  }
  trace_output_32 (tmp);
  trace_output_32 (tmp);
}
}
 
 
/* jcc.  */
/* jcc.  */
void
void
OP_A3_C ()
OP_A3_C ()
{
{
  uint32 tmp;
  uint32 tmp;
  trace_input ("jcc", OP_REGP, OP_VOID, OP_VOID);
  trace_input ("jcc", OP_REGP, OP_VOID, OP_VOID);
  if ((PSR_C) == 0)
  if ((PSR_C) == 0)
  {
  {
     tmp = (GPR32 (OP[0])) & 0x3fffff; /* Use only 0 - 22 bits */
     tmp = (GPR32 (OP[0])) & 0x3fffff; /* Use only 0 - 22 bits */
     JMP (tmp << 1); /* Set PC's 1 - 23 bits and clear 0th bit*/
     JMP (tmp << 1); /* Set PC's 1 - 23 bits and clear 0th bit*/
  }
  }
  trace_output_32 (tmp);
  trace_output_32 (tmp);
}
}
 
 
/* jhi.  */
/* jhi.  */
void
void
OP_A4_C ()
OP_A4_C ()
{
{
  uint32 tmp;
  uint32 tmp;
  trace_input ("jhi", OP_REGP, OP_VOID, OP_VOID);
  trace_input ("jhi", OP_REGP, OP_VOID, OP_VOID);
  if ((PSR_L) == 1)
  if ((PSR_L) == 1)
  {
  {
     tmp = (GPR32 (OP[0])) & 0x3fffff; /* Use only 0 - 22 bits */
     tmp = (GPR32 (OP[0])) & 0x3fffff; /* Use only 0 - 22 bits */
     JMP (tmp << 1); /* Set PC's 1 - 23 bits and clear 0th bit*/
     JMP (tmp << 1); /* Set PC's 1 - 23 bits and clear 0th bit*/
  }
  }
  trace_output_32 (tmp);
  trace_output_32 (tmp);
}
}
 
 
/* jls.  */
/* jls.  */
void
void
OP_A5_C ()
OP_A5_C ()
{
{
  uint32 tmp;
  uint32 tmp;
  trace_input ("jls", OP_REGP, OP_VOID, OP_VOID);
  trace_input ("jls", OP_REGP, OP_VOID, OP_VOID);
  if ((PSR_L) == 0)
  if ((PSR_L) == 0)
  {
  {
     tmp = (GPR32 (OP[0])) & 0x3fffff; /* Use only 0 - 22 bits */
     tmp = (GPR32 (OP[0])) & 0x3fffff; /* Use only 0 - 22 bits */
     JMP (tmp << 1); /* Set PC's 1 - 23 bits and clear 0th bit*/
     JMP (tmp << 1); /* Set PC's 1 - 23 bits and clear 0th bit*/
  }
  }
  trace_output_32 (tmp);
  trace_output_32 (tmp);
}
}
 
 
/* jgt.  */
/* jgt.  */
void
void
OP_A6_C ()
OP_A6_C ()
{
{
  uint32 tmp;
  uint32 tmp;
  trace_input ("jgt", OP_REGP, OP_VOID, OP_VOID);
  trace_input ("jgt", OP_REGP, OP_VOID, OP_VOID);
  if ((PSR_N) == 1)
  if ((PSR_N) == 1)
  {
  {
     tmp = (GPR32 (OP[0])) & 0x3fffff; /* Use only 0 - 22 bits */
     tmp = (GPR32 (OP[0])) & 0x3fffff; /* Use only 0 - 22 bits */
     JMP (tmp << 1); /* Set PC's 1 - 23 bits and clear 0th bit*/
     JMP (tmp << 1); /* Set PC's 1 - 23 bits and clear 0th bit*/
  }
  }
  trace_output_32 (tmp);
  trace_output_32 (tmp);
}
}
 
 
/* jle.  */
/* jle.  */
void
void
OP_A7_C ()
OP_A7_C ()
{
{
  uint32 tmp;
  uint32 tmp;
  trace_input ("jle", OP_REGP, OP_VOID, OP_VOID);
  trace_input ("jle", OP_REGP, OP_VOID, OP_VOID);
  if ((PSR_N) == 0)
  if ((PSR_N) == 0)
  {
  {
     tmp = (GPR32 (OP[0])) & 0x3fffff; /* Use only 0 - 22 bits */
     tmp = (GPR32 (OP[0])) & 0x3fffff; /* Use only 0 - 22 bits */
     JMP (tmp << 1); /* Set PC's 1 - 23 bits and clear 0th bit*/
     JMP (tmp << 1); /* Set PC's 1 - 23 bits and clear 0th bit*/
  }
  }
  trace_output_32 (tmp);
  trace_output_32 (tmp);
}
}
 
 
 
 
/* jfs.  */
/* jfs.  */
void
void
OP_A8_C ()
OP_A8_C ()
{
{
  uint32 tmp;
  uint32 tmp;
  trace_input ("jfs", OP_REGP, OP_VOID, OP_VOID);
  trace_input ("jfs", OP_REGP, OP_VOID, OP_VOID);
  if ((PSR_F) == 1)
  if ((PSR_F) == 1)
  {
  {
     tmp = (GPR32 (OP[0])) & 0x3fffff; /* Use only 0 - 22 bits */
     tmp = (GPR32 (OP[0])) & 0x3fffff; /* Use only 0 - 22 bits */
     JMP (tmp << 1); /* Set PC's 1 - 23 bits and clear 0th bit*/
     JMP (tmp << 1); /* Set PC's 1 - 23 bits and clear 0th bit*/
  }
  }
  trace_output_32 (tmp);
  trace_output_32 (tmp);
}
}
 
 
/* jfc.  */
/* jfc.  */
void
void
OP_A9_C ()
OP_A9_C ()
{
{
  uint32 tmp;
  uint32 tmp;
  trace_input ("jfc", OP_REGP, OP_VOID, OP_VOID);
  trace_input ("jfc", OP_REGP, OP_VOID, OP_VOID);
  if ((PSR_F) == 0)
  if ((PSR_F) == 0)
  {
  {
     tmp = (GPR32 (OP[0])) & 0x3fffff; /* Use only 0 - 22 bits */
     tmp = (GPR32 (OP[0])) & 0x3fffff; /* Use only 0 - 22 bits */
     JMP (tmp << 1); /* Set PC's 1 - 23 bits and clear 0th bit*/
     JMP (tmp << 1); /* Set PC's 1 - 23 bits and clear 0th bit*/
  }
  }
  trace_output_32 (tmp);
  trace_output_32 (tmp);
}
}
 
 
/* jlo.  */
/* jlo.  */
void
void
OP_AA_C ()
OP_AA_C ()
{
{
  uint32 tmp;
  uint32 tmp;
  trace_input ("jlo", OP_REGP, OP_VOID, OP_VOID);
  trace_input ("jlo", OP_REGP, OP_VOID, OP_VOID);
  if (((PSR_Z) == 0) & ((PSR_L) == 0))
  if (((PSR_Z) == 0) & ((PSR_L) == 0))
  {
  {
     tmp = (GPR32 (OP[0])) & 0x3fffff; /* Use only 0 - 22 bits */
     tmp = (GPR32 (OP[0])) & 0x3fffff; /* Use only 0 - 22 bits */
     JMP (tmp << 1); /* Set PC's 1 - 23 bits and clear 0th bit*/
     JMP (tmp << 1); /* Set PC's 1 - 23 bits and clear 0th bit*/
  }
  }
  trace_output_32 (tmp);
  trace_output_32 (tmp);
}
}
 
 
/* jhs.  */
/* jhs.  */
void
void
OP_AB_C ()
OP_AB_C ()
{
{
  uint32 tmp;
  uint32 tmp;
  trace_input ("jhs", OP_REGP, OP_VOID, OP_VOID);
  trace_input ("jhs", OP_REGP, OP_VOID, OP_VOID);
  if (((PSR_Z) == 1) | ((PSR_L) == 1))
  if (((PSR_Z) == 1) | ((PSR_L) == 1))
  {
  {
     tmp = (GPR32 (OP[0])) & 0x3fffff; /* Use only 0 - 22 bits */
     tmp = (GPR32 (OP[0])) & 0x3fffff; /* Use only 0 - 22 bits */
     JMP (tmp << 1); /* Set PC's 1 - 23 bits and clear 0th bit*/
     JMP (tmp << 1); /* Set PC's 1 - 23 bits and clear 0th bit*/
  }
  }
  trace_output_32 (tmp);
  trace_output_32 (tmp);
}
}
 
 
/* jlt.  */
/* jlt.  */
void
void
OP_AC_C ()
OP_AC_C ()
{
{
  uint32 tmp;
  uint32 tmp;
  trace_input ("jlt", OP_REGP, OP_VOID, OP_VOID);
  trace_input ("jlt", OP_REGP, OP_VOID, OP_VOID);
  if (((PSR_Z) == 0) & ((PSR_N) == 0))
  if (((PSR_Z) == 0) & ((PSR_N) == 0))
  {
  {
     tmp = (GPR32 (OP[0])) & 0x3fffff; /* Use only 0 - 22 bits */
     tmp = (GPR32 (OP[0])) & 0x3fffff; /* Use only 0 - 22 bits */
     JMP (tmp << 1); /* Set PC's 1 - 23 bits and clear 0th bit*/
     JMP (tmp << 1); /* Set PC's 1 - 23 bits and clear 0th bit*/
  }
  }
  trace_output_32 (tmp);
  trace_output_32 (tmp);
}
}
 
 
/* jge.  */
/* jge.  */
void
void
OP_AD_C ()
OP_AD_C ()
{
{
  uint32 tmp;
  uint32 tmp;
  trace_input ("jge", OP_REGP, OP_VOID, OP_VOID);
  trace_input ("jge", OP_REGP, OP_VOID, OP_VOID);
  if (((PSR_Z) == 1) | ((PSR_N) == 1))
  if (((PSR_Z) == 1) | ((PSR_N) == 1))
  {
  {
     tmp = (GPR32 (OP[0])) & 0x3fffff; /* Use only 0 - 22 bits */
     tmp = (GPR32 (OP[0])) & 0x3fffff; /* Use only 0 - 22 bits */
     JMP (tmp << 1); /* Set PC's 1 - 23 bits and clear 0th bit*/
     JMP (tmp << 1); /* Set PC's 1 - 23 bits and clear 0th bit*/
  }
  }
  trace_output_32 (tmp);
  trace_output_32 (tmp);
}
}
 
 
/* jump.  */
/* jump.  */
void
void
OP_AE_C ()
OP_AE_C ()
{
{
  uint32 tmp;
  uint32 tmp;
  trace_input ("jump", OP_REGP, OP_VOID, OP_VOID);
  trace_input ("jump", OP_REGP, OP_VOID, OP_VOID);
  tmp = GPR32 (OP[0]) /*& 0x3fffff*/; /* Use only 0 - 22 bits */
  tmp = GPR32 (OP[0]) /*& 0x3fffff*/; /* Use only 0 - 22 bits */
  JMP (tmp << 1); /* Set PC's 1 - 23 bits and clear 0th bit*/
  JMP (tmp << 1); /* Set PC's 1 - 23 bits and clear 0th bit*/
  trace_output_32 (tmp);
  trace_output_32 (tmp);
}
}
 
 
/* jusr.  */
/* jusr.  */
void
void
OP_AF_C ()
OP_AF_C ()
{
{
  uint32 tmp;
  uint32 tmp;
  trace_input ("jusr", OP_REGP, OP_VOID, OP_VOID);
  trace_input ("jusr", OP_REGP, OP_VOID, OP_VOID);
  tmp = (GPR32 (OP[0])) & 0x3fffff; /* Use only 0 - 22 bits */
  tmp = (GPR32 (OP[0])) & 0x3fffff; /* Use only 0 - 22 bits */
  JMP (tmp << 1); /* Set PC's 1 - 23 bits and clear 0th bit*/
  JMP (tmp << 1); /* Set PC's 1 - 23 bits and clear 0th bit*/
  SET_PSR_U(1);
  SET_PSR_U(1);
  trace_output_32 (tmp);
  trace_output_32 (tmp);
}
}
 
 
/* seq.  */
/* seq.  */
void
void
OP_80_C ()
OP_80_C ()
{
{
  trace_input ("seq", OP_REG, OP_VOID, OP_VOID);
  trace_input ("seq", OP_REG, OP_VOID, OP_VOID);
  if ((PSR_Z) == 1)
  if ((PSR_Z) == 1)
     SET_GPR (OP[0], 1);
     SET_GPR (OP[0], 1);
  else
  else
     SET_GPR (OP[0], 0);
     SET_GPR (OP[0], 0);
  trace_output_void ();
  trace_output_void ();
}
}
/* sne.  */
/* sne.  */
void
void
OP_81_C ()
OP_81_C ()
{
{
  trace_input ("sne", OP_REG, OP_VOID, OP_VOID);
  trace_input ("sne", OP_REG, OP_VOID, OP_VOID);
  if ((PSR_Z) == 0)
  if ((PSR_Z) == 0)
     SET_GPR (OP[0], 1);
     SET_GPR (OP[0], 1);
  else
  else
     SET_GPR (OP[0], 0);
     SET_GPR (OP[0], 0);
  trace_output_void ();
  trace_output_void ();
}
}
 
 
/* scs.  */
/* scs.  */
void
void
OP_82_C ()
OP_82_C ()
{
{
  trace_input ("scs", OP_REG, OP_VOID, OP_VOID);
  trace_input ("scs", OP_REG, OP_VOID, OP_VOID);
  if ((PSR_C) == 1)
  if ((PSR_C) == 1)
     SET_GPR (OP[0], 1);
     SET_GPR (OP[0], 1);
  else
  else
     SET_GPR (OP[0], 0);
     SET_GPR (OP[0], 0);
  trace_output_void ();
  trace_output_void ();
}
}
 
 
/* scc.  */
/* scc.  */
void
void
OP_83_C ()
OP_83_C ()
{
{
  trace_input ("scc", OP_REG, OP_VOID, OP_VOID);
  trace_input ("scc", OP_REG, OP_VOID, OP_VOID);
  if ((PSR_C) == 0)
  if ((PSR_C) == 0)
     SET_GPR (OP[0], 1);
     SET_GPR (OP[0], 1);
  else
  else
     SET_GPR (OP[0], 0);
     SET_GPR (OP[0], 0);
  trace_output_void ();
  trace_output_void ();
}
}
 
 
/* shi.  */
/* shi.  */
void
void
OP_84_C ()
OP_84_C ()
{
{
  trace_input ("shi", OP_REG, OP_VOID, OP_VOID);
  trace_input ("shi", OP_REG, OP_VOID, OP_VOID);
  if ((PSR_L) == 1)
  if ((PSR_L) == 1)
     SET_GPR (OP[0], 1);
     SET_GPR (OP[0], 1);
  else
  else
     SET_GPR (OP[0], 0);
     SET_GPR (OP[0], 0);
  trace_output_void ();
  trace_output_void ();
}
}
 
 
/* sls.  */
/* sls.  */
void
void
OP_85_C ()
OP_85_C ()
{
{
  trace_input ("sls", OP_REG, OP_VOID, OP_VOID);
  trace_input ("sls", OP_REG, OP_VOID, OP_VOID);
  if ((PSR_L) == 0)
  if ((PSR_L) == 0)
     SET_GPR (OP[0], 1);
     SET_GPR (OP[0], 1);
  else
  else
     SET_GPR (OP[0], 0);
     SET_GPR (OP[0], 0);
  trace_output_void ();
  trace_output_void ();
}
}
 
 
/* sgt.  */
/* sgt.  */
void
void
OP_86_C ()
OP_86_C ()
{
{
  trace_input ("sgt", OP_REG, OP_VOID, OP_VOID);
  trace_input ("sgt", OP_REG, OP_VOID, OP_VOID);
  if ((PSR_N) == 1)
  if ((PSR_N) == 1)
     SET_GPR (OP[0], 1);
     SET_GPR (OP[0], 1);
  else
  else
     SET_GPR (OP[0], 0);
     SET_GPR (OP[0], 0);
  trace_output_void ();
  trace_output_void ();
}
}
 
 
/* sle.  */
/* sle.  */
void
void
OP_87_C ()
OP_87_C ()
{
{
  trace_input ("sle", OP_REG, OP_VOID, OP_VOID);
  trace_input ("sle", OP_REG, OP_VOID, OP_VOID);
  if ((PSR_N) == 0)
  if ((PSR_N) == 0)
     SET_GPR (OP[0], 1);
     SET_GPR (OP[0], 1);
  else
  else
     SET_GPR (OP[0], 0);
     SET_GPR (OP[0], 0);
  trace_output_void ();
  trace_output_void ();
}
}
 
 
/* sfs.  */
/* sfs.  */
void
void
OP_88_C ()
OP_88_C ()
{
{
  trace_input ("sfs", OP_REG, OP_VOID, OP_VOID);
  trace_input ("sfs", OP_REG, OP_VOID, OP_VOID);
  if ((PSR_F) == 1)
  if ((PSR_F) == 1)
     SET_GPR (OP[0], 1);
     SET_GPR (OP[0], 1);
  else
  else
     SET_GPR (OP[0], 0);
     SET_GPR (OP[0], 0);
  trace_output_void ();
  trace_output_void ();
}
}
 
 
/* sfc.  */
/* sfc.  */
void
void
OP_89_C ()
OP_89_C ()
{
{
  trace_input ("sfc", OP_REG, OP_VOID, OP_VOID);
  trace_input ("sfc", OP_REG, OP_VOID, OP_VOID);
  if ((PSR_F) == 0)
  if ((PSR_F) == 0)
     SET_GPR (OP[0], 1);
     SET_GPR (OP[0], 1);
  else
  else
     SET_GPR (OP[0], 0);
     SET_GPR (OP[0], 0);
  trace_output_void ();
  trace_output_void ();
}
}
 
 
 
 
/* slo.  */
/* slo.  */
void
void
OP_8A_C ()
OP_8A_C ()
{
{
  trace_input ("slo", OP_REG, OP_VOID, OP_VOID);
  trace_input ("slo", OP_REG, OP_VOID, OP_VOID);
  if (((PSR_Z) == 0) & ((PSR_L) == 0))
  if (((PSR_Z) == 0) & ((PSR_L) == 0))
     SET_GPR (OP[0], 1);
     SET_GPR (OP[0], 1);
  else
  else
     SET_GPR (OP[0], 0);
     SET_GPR (OP[0], 0);
  trace_output_void ();
  trace_output_void ();
}
}
 
 
/* shs.  */
/* shs.  */
void
void
OP_8B_C ()
OP_8B_C ()
{
{
  trace_input ("shs", OP_REG, OP_VOID, OP_VOID);
  trace_input ("shs", OP_REG, OP_VOID, OP_VOID);
  if ( ((PSR_Z) == 1) | ((PSR_L) == 1))
  if ( ((PSR_Z) == 1) | ((PSR_L) == 1))
     SET_GPR (OP[0], 1);
     SET_GPR (OP[0], 1);
  else
  else
     SET_GPR (OP[0], 0);
     SET_GPR (OP[0], 0);
  trace_output_void ();
  trace_output_void ();
}
}
 
 
/* slt.  */
/* slt.  */
void
void
OP_8C_C ()
OP_8C_C ()
{
{
  trace_input ("slt", OP_REG, OP_VOID, OP_VOID);
  trace_input ("slt", OP_REG, OP_VOID, OP_VOID);
  if (((PSR_Z) == 0) & ((PSR_N) == 0))
  if (((PSR_Z) == 0) & ((PSR_N) == 0))
     SET_GPR (OP[0], 1);
     SET_GPR (OP[0], 1);
  else
  else
     SET_GPR (OP[0], 0);
     SET_GPR (OP[0], 0);
  trace_output_void ();
  trace_output_void ();
}
}
 
 
/* sge.  */
/* sge.  */
void
void
OP_8D_C ()
OP_8D_C ()
{
{
  trace_input ("sge", OP_REG, OP_VOID, OP_VOID);
  trace_input ("sge", OP_REG, OP_VOID, OP_VOID);
  if (((PSR_Z) == 1) | ((PSR_N) == 1))
  if (((PSR_Z) == 1) | ((PSR_N) == 1))
     SET_GPR (OP[0], 1);
     SET_GPR (OP[0], 1);
  else
  else
     SET_GPR (OP[0], 0);
     SET_GPR (OP[0], 0);
  trace_output_void ();
  trace_output_void ();
}
}
 
 
/* cbitb.  */
/* cbitb.  */
void
void
OP_D7_9 ()
OP_D7_9 ()
{
{
  uint8 a = OP[0] & 0xff;
  uint8 a = OP[0] & 0xff;
  uint32 addr = OP[1], tmp;
  uint32 addr = OP[1], tmp;
  trace_input ("cbitb", OP_CONSTANT4, OP_ABS20_OUTPUT, OP_VOID);
  trace_input ("cbitb", OP_CONSTANT4, OP_ABS20_OUTPUT, OP_VOID);
  tmp = RB (addr);
  tmp = RB (addr);
  SET_PSR_F (tmp & (1 << a));
  SET_PSR_F (tmp & (1 << a));
  tmp = tmp & ~(1 << a);
  tmp = tmp & ~(1 << a);
  SB (addr, tmp);
  SB (addr, tmp);
  trace_output_32 (tmp);
  trace_output_32 (tmp);
}
}
 
 
/* cbitb.  */
/* cbitb.  */
void
void
OP_107_14 ()
OP_107_14 ()
{
{
  uint8 a = OP[0] & 0xff;
  uint8 a = OP[0] & 0xff;
  uint32 addr = OP[1], tmp;
  uint32 addr = OP[1], tmp;
  trace_input ("cbitb", OP_CONSTANT4, OP_ABS24_OUTPUT, OP_VOID);
  trace_input ("cbitb", OP_CONSTANT4, OP_ABS24_OUTPUT, OP_VOID);
  tmp = RB (addr);
  tmp = RB (addr);
  SET_PSR_F (tmp & (1 << a));
  SET_PSR_F (tmp & (1 << a));
  tmp = tmp & ~(1 << a);
  tmp = tmp & ~(1 << a);
  SB (addr, tmp);
  SB (addr, tmp);
  trace_output_32 (tmp);
  trace_output_32 (tmp);
}
}
 
 
/* cbitb.  */
/* cbitb.  */
void
void
OP_68_8 ()
OP_68_8 ()
{
{
  uint8 a = (OP[0]) & 0xff;
  uint8 a = (OP[0]) & 0xff;
  uint32 addr = (GPR (OP[2])) + OP[1], tmp;
  uint32 addr = (GPR (OP[2])) + OP[1], tmp;
  trace_input ("cbitb", OP_CONSTANT4, OP_R_INDEX7_ABS20, OP_VOID);
  trace_input ("cbitb", OP_CONSTANT4, OP_R_INDEX7_ABS20, OP_VOID);
  tmp = RB (addr);
  tmp = RB (addr);
  SET_PSR_F (tmp & (1 << a));
  SET_PSR_F (tmp & (1 << a));
  tmp = tmp & ~(1 << a);
  tmp = tmp & ~(1 << a);
  SB (addr, tmp);
  SB (addr, tmp);
  trace_output_32 (addr);
  trace_output_32 (addr);
}
}
 
 
/* cbitb.  */
/* cbitb.  */
void
void
OP_1AA_A ()
OP_1AA_A ()
{
{
  uint8 a = (OP[0]) & 0xff;
  uint8 a = (OP[0]) & 0xff;
  uint32 addr = (GPR32 (OP[2])) + OP[1], tmp;
  uint32 addr = (GPR32 (OP[2])) + OP[1], tmp;
  trace_input ("cbitb", OP_CONSTANT4, OP_RP_INDEX_DISP14, OP_VOID);
  trace_input ("cbitb", OP_CONSTANT4, OP_RP_INDEX_DISP14, OP_VOID);
  tmp = RB (addr);
  tmp = RB (addr);
  SET_PSR_F (tmp & (1 << a));
  SET_PSR_F (tmp & (1 << a));
  tmp = tmp & ~(1 << a);
  tmp = tmp & ~(1 << a);
  SB (addr, tmp);
  SB (addr, tmp);
  trace_output_32 (addr);
  trace_output_32 (addr);
}
}
 
 
/* cbitb.  */
/* cbitb.  */
void
void
OP_104_14 ()
OP_104_14 ()
{
{
  uint8 a = (OP[0]) & 0xff;
  uint8 a = (OP[0]) & 0xff;
  uint32 addr = (GPR (OP[2])) + OP[1], tmp;
  uint32 addr = (GPR (OP[2])) + OP[1], tmp;
  trace_input ("cbitb", OP_CONSTANT4, OP_R_BASE_DISPS20, OP_VOID);
  trace_input ("cbitb", OP_CONSTANT4, OP_R_BASE_DISPS20, OP_VOID);
  tmp = RB (addr);
  tmp = RB (addr);
  SET_PSR_F (tmp & (1 << a));
  SET_PSR_F (tmp & (1 << a));
  tmp = tmp & ~(1 << a);
  tmp = tmp & ~(1 << a);
  SB (addr, tmp);
  SB (addr, tmp);
  trace_output_32 (addr);
  trace_output_32 (addr);
}
}
 
 
/* cbitb.  */
/* cbitb.  */
void
void
OP_D4_9 ()
OP_D4_9 ()
{
{
  uint8 a = (OP[0]) & 0xff;
  uint8 a = (OP[0]) & 0xff;
  uint32 addr = (GPR32 (OP[2])) + OP[1], tmp;
  uint32 addr = (GPR32 (OP[2])) + OP[1], tmp;
  trace_input ("cbitb", OP_CONSTANT4, OP_RP_INDEX_DISP0, OP_VOID);
  trace_input ("cbitb", OP_CONSTANT4, OP_RP_INDEX_DISP0, OP_VOID);
  tmp = RB (addr);
  tmp = RB (addr);
  SET_PSR_F (tmp & (1 << a));
  SET_PSR_F (tmp & (1 << a));
  tmp = tmp & ~(1 << a);
  tmp = tmp & ~(1 << a);
  SB (addr, tmp);
  SB (addr, tmp);
  trace_output_32 (addr);
  trace_output_32 (addr);
}
}
 
 
/* cbitb.  */
/* cbitb.  */
void
void
OP_D6_9 ()
OP_D6_9 ()
{
{
  uint8 a = (OP[0]) & 0xff;
  uint8 a = (OP[0]) & 0xff;
  uint32 addr = (GPR32 (OP[2])) + OP[1], tmp;
  uint32 addr = (GPR32 (OP[2])) + OP[1], tmp;
  trace_input ("cbitb", OP_CONSTANT4, OP_RP_BASE_DISP16, OP_VOID);
  trace_input ("cbitb", OP_CONSTANT4, OP_RP_BASE_DISP16, OP_VOID);
  tmp = RB (addr);
  tmp = RB (addr);
  SET_PSR_F (tmp & (1 << a));
  SET_PSR_F (tmp & (1 << a));
  tmp = tmp & ~(1 << a);
  tmp = tmp & ~(1 << a);
  SB (addr, tmp);
  SB (addr, tmp);
  trace_output_32 (addr);
  trace_output_32 (addr);
 
 
}
}
 
 
/* cbitb.  */
/* cbitb.  */
void
void
OP_105_14 ()
OP_105_14 ()
{
{
  uint8 a = (OP[0]) & 0xff;
  uint8 a = (OP[0]) & 0xff;
  uint32 addr = (GPR32 (OP[2])) + OP[1], tmp;
  uint32 addr = (GPR32 (OP[2])) + OP[1], tmp;
  trace_input ("cbitb", OP_CONSTANT4, OP_RP_BASE_DISPS20, OP_VOID);
  trace_input ("cbitb", OP_CONSTANT4, OP_RP_BASE_DISPS20, OP_VOID);
  tmp = RB (addr);
  tmp = RB (addr);
  SET_PSR_F (tmp & (1 << a));
  SET_PSR_F (tmp & (1 << a));
  tmp = tmp & ~(1 << a);
  tmp = tmp & ~(1 << a);
  SB (addr, tmp);
  SB (addr, tmp);
  trace_output_32 (addr);
  trace_output_32 (addr);
}
}
 
 
/* cbitb.  */
/* cbitb.  */
void
void
OP_106_14 ()
OP_106_14 ()
{
{
  uint8 a = (OP[0]) & 0xff;
  uint8 a = (OP[0]) & 0xff;
  uint32 addr = (GPR32 (OP[2])) + OP[1], tmp;
  uint32 addr = (GPR32 (OP[2])) + OP[1], tmp;
  trace_input ("cbitb", OP_CONSTANT4, OP_RP_INDEX_DISPS20, OP_VOID);
  trace_input ("cbitb", OP_CONSTANT4, OP_RP_INDEX_DISPS20, OP_VOID);
  tmp = RB (addr);
  tmp = RB (addr);
  SET_PSR_F (tmp & (1 << a));
  SET_PSR_F (tmp & (1 << a));
  tmp = tmp & ~(1 << a);
  tmp = tmp & ~(1 << a);
  SB (addr, tmp);
  SB (addr, tmp);
  trace_output_32 (addr);
  trace_output_32 (addr);
}
}
 
 
 
 
/* cbitw.  */
/* cbitw.  */
void
void
OP_6F_8 ()
OP_6F_8 ()
{
{
  uint16 a = OP[0];
  uint16 a = OP[0];
  uint32 addr = OP[1], tmp;
  uint32 addr = OP[1], tmp;
  trace_input ("cbitw", OP_CONSTANT4, OP_ABS20_OUTPUT, OP_VOID);
  trace_input ("cbitw", OP_CONSTANT4, OP_ABS20_OUTPUT, OP_VOID);
  tmp = RW (addr);
  tmp = RW (addr);
  SET_PSR_F (tmp & (1 << a));
  SET_PSR_F (tmp & (1 << a));
  tmp = tmp & ~(1 << a);
  tmp = tmp & ~(1 << a);
  SW (addr, tmp);
  SW (addr, tmp);
  trace_output_32 (tmp);
  trace_output_32 (tmp);
}
}
 
 
/* cbitw.  */
/* cbitw.  */
void
void
OP_117_14 ()
OP_117_14 ()
{
{
  uint16 a = OP[0];
  uint16 a = OP[0];
  uint32 addr = OP[1], tmp;
  uint32 addr = OP[1], tmp;
  trace_input ("cbitw", OP_CONSTANT4, OP_ABS24_OUTPUT, OP_VOID);
  trace_input ("cbitw", OP_CONSTANT4, OP_ABS24_OUTPUT, OP_VOID);
  tmp = RW (addr);
  tmp = RW (addr);
  SET_PSR_F (tmp & (1 << a));
  SET_PSR_F (tmp & (1 << a));
  tmp = tmp & ~(1 << a);
  tmp = tmp & ~(1 << a);
  SW (addr, tmp);
  SW (addr, tmp);
  trace_output_32 (tmp);
  trace_output_32 (tmp);
}
}
 
 
/* cbitw.  */
/* cbitw.  */
void
void
OP_36_7 ()
OP_36_7 ()
{
{
  uint32 addr;
  uint32 addr;
  uint16 a = (OP[0]), tmp;
  uint16 a = (OP[0]), tmp;
  trace_input ("cbitw", OP_CONSTANT4, OP_R_INDEX8_ABS20, OP_VOID);
  trace_input ("cbitw", OP_CONSTANT4, OP_R_INDEX8_ABS20, OP_VOID);
 
 
  if (OP[1] == 0)
  if (OP[1] == 0)
     addr = (GPR32 (12)) + OP[2];
     addr = (GPR32 (12)) + OP[2];
  else
  else
     addr = (GPR32 (13)) + OP[2];
     addr = (GPR32 (13)) + OP[2];
 
 
  tmp = RW (addr);
  tmp = RW (addr);
  SET_PSR_F (tmp & (1 << a));
  SET_PSR_F (tmp & (1 << a));
  tmp = tmp & ~(1 << a);
  tmp = tmp & ~(1 << a);
  SW (addr, tmp);
  SW (addr, tmp);
  trace_output_32 (addr);
  trace_output_32 (addr);
 
 
}
}
 
 
/* cbitw.  */
/* cbitw.  */
void
void
OP_1AB_A ()
OP_1AB_A ()
{
{
  uint16 a = (OP[0]);
  uint16 a = (OP[0]);
  uint32 addr = (GPR32 (OP[2])) + OP[1], tmp;
  uint32 addr = (GPR32 (OP[2])) + OP[1], tmp;
  trace_input ("cbitw", OP_CONSTANT4, OP_RP_INDEX_DISP14, OP_VOID);
  trace_input ("cbitw", OP_CONSTANT4, OP_RP_INDEX_DISP14, OP_VOID);
  tmp = RW (addr);
  tmp = RW (addr);
  SET_PSR_F (tmp & (1 << a));
  SET_PSR_F (tmp & (1 << a));
  tmp = tmp & ~(1 << a);
  tmp = tmp & ~(1 << a);
  SW (addr, tmp);
  SW (addr, tmp);
  trace_output_32 (addr);
  trace_output_32 (addr);
}
}
 
 
/* cbitw.  */
/* cbitw.  */
void
void
OP_114_14 ()
OP_114_14 ()
{
{
  uint16 a = (OP[0]);
  uint16 a = (OP[0]);
  uint32 addr = (GPR (OP[2])) + OP[1], tmp;
  uint32 addr = (GPR (OP[2])) + OP[1], tmp;
  trace_input ("cbitw", OP_CONSTANT4, OP_R_BASE_DISPS20, OP_VOID);
  trace_input ("cbitw", OP_CONSTANT4, OP_R_BASE_DISPS20, OP_VOID);
  tmp = RW (addr);
  tmp = RW (addr);
  SET_PSR_F (tmp & (1 << a));
  SET_PSR_F (tmp & (1 << a));
  tmp = tmp & ~(1 << a);
  tmp = tmp & ~(1 << a);
  SW (addr, tmp);
  SW (addr, tmp);
  trace_output_32 (addr);
  trace_output_32 (addr);
}
}
 
 
 
 
/* cbitw.  */
/* cbitw.  */
void
void
OP_6E_8 ()
OP_6E_8 ()
{
{
  uint16 a = (OP[0]);
  uint16 a = (OP[0]);
  uint32 addr = (GPR32 (OP[2])) + OP[1], tmp;
  uint32 addr = (GPR32 (OP[2])) + OP[1], tmp;
  trace_input ("cbitw", OP_CONSTANT4, OP_RP_INDEX_DISP0, OP_VOID);
  trace_input ("cbitw", OP_CONSTANT4, OP_RP_INDEX_DISP0, OP_VOID);
  tmp = RW (addr);
  tmp = RW (addr);
  SET_PSR_F (tmp & (1 << a));
  SET_PSR_F (tmp & (1 << a));
  tmp = tmp & ~(1 << a);
  tmp = tmp & ~(1 << a);
  SW (addr, tmp);
  SW (addr, tmp);
  trace_output_32 (addr);
  trace_output_32 (addr);
}
}
 
 
/* cbitw.  */
/* cbitw.  */
void
void
OP_69_8 ()
OP_69_8 ()
{
{
  uint16 a = (OP[0]);
  uint16 a = (OP[0]);
  uint32 addr = (GPR32 (OP[2])) + OP[1], tmp;
  uint32 addr = (GPR32 (OP[2])) + OP[1], tmp;
  trace_input ("cbitw", OP_CONSTANT4, OP_RP_BASE_DISP16, OP_VOID);
  trace_input ("cbitw", OP_CONSTANT4, OP_RP_BASE_DISP16, OP_VOID);
  tmp = RW (addr);
  tmp = RW (addr);
  SET_PSR_F (tmp & (1 << a));
  SET_PSR_F (tmp & (1 << a));
  tmp = tmp & ~(1 << a);
  tmp = tmp & ~(1 << a);
  SW (addr, tmp);
  SW (addr, tmp);
  trace_output_32 (addr);
  trace_output_32 (addr);
}
}
 
 
 
 
/* cbitw.  */
/* cbitw.  */
void
void
OP_115_14 ()
OP_115_14 ()
{
{
  uint16 a = (OP[0]);
  uint16 a = (OP[0]);
  uint32 addr = (GPR32 (OP[2])) + OP[1], tmp;
  uint32 addr = (GPR32 (OP[2])) + OP[1], tmp;
  trace_input ("cbitw", OP_CONSTANT4, OP_RP_BASE_DISPS20, OP_VOID);
  trace_input ("cbitw", OP_CONSTANT4, OP_RP_BASE_DISPS20, OP_VOID);
  tmp = RW (addr);
  tmp = RW (addr);
  SET_PSR_F (tmp & (1 << a));
  SET_PSR_F (tmp & (1 << a));
  tmp = tmp & ~(1 << a);
  tmp = tmp & ~(1 << a);
  SW (addr, tmp);
  SW (addr, tmp);
  trace_output_32 (addr);
  trace_output_32 (addr);
}
}
 
 
/* cbitw.  */
/* cbitw.  */
void
void
OP_116_14 ()
OP_116_14 ()
{
{
  uint16 a = (OP[0]);
  uint16 a = (OP[0]);
  uint32 addr = (GPR32 (OP[2])) + OP[1], tmp;
  uint32 addr = (GPR32 (OP[2])) + OP[1], tmp;
  trace_input ("cbitw", OP_CONSTANT4, OP_RP_INDEX_DISPS20, OP_VOID);
  trace_input ("cbitw", OP_CONSTANT4, OP_RP_INDEX_DISPS20, OP_VOID);
  tmp = RW (addr);
  tmp = RW (addr);
  SET_PSR_F (tmp & (1 << a));
  SET_PSR_F (tmp & (1 << a));
  tmp = tmp & ~(1 << a);
  tmp = tmp & ~(1 << a);
  SW (addr, tmp);
  SW (addr, tmp);
  trace_output_32 (addr);
  trace_output_32 (addr);
}
}
 
 
/* sbitb.  */
/* sbitb.  */
void
void
OP_E7_9 ()
OP_E7_9 ()
{
{
  uint8 a = OP[0] & 0xff;
  uint8 a = OP[0] & 0xff;
  uint32 addr = OP[1], tmp;
  uint32 addr = OP[1], tmp;
  trace_input ("sbitb", OP_CONSTANT4, OP_ABS20_OUTPUT, OP_VOID);
  trace_input ("sbitb", OP_CONSTANT4, OP_ABS20_OUTPUT, OP_VOID);
  tmp = RB (addr);
  tmp = RB (addr);
  SET_PSR_F (tmp & (1 << a));
  SET_PSR_F (tmp & (1 << a));
  tmp = tmp | (1 << a);
  tmp = tmp | (1 << a);
  SB (addr, tmp);
  SB (addr, tmp);
  trace_output_32 (tmp);
  trace_output_32 (tmp);
}
}
 
 
/* sbitb.  */
/* sbitb.  */
void
void
OP_10B_14 ()
OP_10B_14 ()
{
{
  uint8 a = OP[0] & 0xff;
  uint8 a = OP[0] & 0xff;
  uint32 addr = OP[1], tmp;
  uint32 addr = OP[1], tmp;
  trace_input ("sbitb", OP_CONSTANT4, OP_ABS24_OUTPUT, OP_VOID);
  trace_input ("sbitb", OP_CONSTANT4, OP_ABS24_OUTPUT, OP_VOID);
  tmp = RB (addr);
  tmp = RB (addr);
  SET_PSR_F (tmp & (1 << a));
  SET_PSR_F (tmp & (1 << a));
  tmp = tmp | (1 << a);
  tmp = tmp | (1 << a);
  SB (addr, tmp);
  SB (addr, tmp);
  trace_output_32 (tmp);
  trace_output_32 (tmp);
}
}
 
 
/* sbitb.  */
/* sbitb.  */
void
void
OP_70_8 ()
OP_70_8 ()
{
{
  uint8 a = OP[0] & 0xff;
  uint8 a = OP[0] & 0xff;
  uint32 addr = (GPR (OP[2])) + OP[1], tmp;
  uint32 addr = (GPR (OP[2])) + OP[1], tmp;
  trace_input ("sbitb", OP_CONSTANT4, OP_R_INDEX7_ABS20, OP_VOID);
  trace_input ("sbitb", OP_CONSTANT4, OP_R_INDEX7_ABS20, OP_VOID);
  tmp = RB (addr);
  tmp = RB (addr);
  SET_PSR_F (tmp & (1 << a));
  SET_PSR_F (tmp & (1 << a));
  tmp = tmp | (1 << a);
  tmp = tmp | (1 << a);
  SB (addr, tmp);
  SB (addr, tmp);
  trace_output_32 (tmp);
  trace_output_32 (tmp);
}
}
 
 
/* sbitb.  */
/* sbitb.  */
void
void
OP_1CA_A ()
OP_1CA_A ()
{
{
  uint8 a = OP[0] & 0xff;
  uint8 a = OP[0] & 0xff;
  uint32 addr = (GPR32 (OP[2])) + OP[1], tmp;
  uint32 addr = (GPR32 (OP[2])) + OP[1], tmp;
  trace_input ("sbitb", OP_CONSTANT4, OP_RP_INDEX_DISP14, OP_VOID);
  trace_input ("sbitb", OP_CONSTANT4, OP_RP_INDEX_DISP14, OP_VOID);
  tmp = RB (addr);
  tmp = RB (addr);
  SET_PSR_F (tmp & (1 << a));
  SET_PSR_F (tmp & (1 << a));
  tmp = tmp | (1 << a);
  tmp = tmp | (1 << a);
  SB (addr, tmp);
  SB (addr, tmp);
  trace_output_32 (tmp);
  trace_output_32 (tmp);
}
}
 
 
/* sbitb.  */
/* sbitb.  */
void
void
OP_108_14 ()
OP_108_14 ()
{
{
  uint8 a = OP[0] & 0xff;
  uint8 a = OP[0] & 0xff;
  uint32 addr = (GPR (OP[2])) + OP[1], tmp;
  uint32 addr = (GPR (OP[2])) + OP[1], tmp;
  trace_input ("sbitb", OP_CONSTANT4, OP_R_BASE_DISPS20, OP_VOID);
  trace_input ("sbitb", OP_CONSTANT4, OP_R_BASE_DISPS20, OP_VOID);
  tmp = RB (addr);
  tmp = RB (addr);
  SET_PSR_F (tmp & (1 << a));
  SET_PSR_F (tmp & (1 << a));
  tmp = tmp | (1 << a);
  tmp = tmp | (1 << a);
  SB (addr, tmp);
  SB (addr, tmp);
  trace_output_32 (tmp);
  trace_output_32 (tmp);
}
}
 
 
 
 
/* sbitb.  */
/* sbitb.  */
void
void
OP_E4_9 ()
OP_E4_9 ()
{
{
  uint8 a = OP[0] & 0xff;
  uint8 a = OP[0] & 0xff;
  uint32 addr = (GPR32 (OP[2])) + OP[1], tmp;
  uint32 addr = (GPR32 (OP[2])) + OP[1], tmp;
  trace_input ("sbitb", OP_CONSTANT4, OP_RP_INDEX_DISP0, OP_VOID);
  trace_input ("sbitb", OP_CONSTANT4, OP_RP_INDEX_DISP0, OP_VOID);
  tmp = RB (addr);
  tmp = RB (addr);
  SET_PSR_F (tmp & (1 << a));
  SET_PSR_F (tmp & (1 << a));
  tmp = tmp | (1 << a);
  tmp = tmp | (1 << a);
  SB (addr, tmp);
  SB (addr, tmp);
  trace_output_32 (tmp);
  trace_output_32 (tmp);
}
}
 
 
/* sbitb.  */
/* sbitb.  */
void
void
OP_E6_9 ()
OP_E6_9 ()
{
{
  uint8 a = OP[0] & 0xff;
  uint8 a = OP[0] & 0xff;
  uint32 addr = (GPR32 (OP[2])) + OP[1], tmp;
  uint32 addr = (GPR32 (OP[2])) + OP[1], tmp;
  trace_input ("sbitb", OP_CONSTANT4, OP_RP_BASE_DISP16, OP_VOID);
  trace_input ("sbitb", OP_CONSTANT4, OP_RP_BASE_DISP16, OP_VOID);
  tmp = RB (addr);
  tmp = RB (addr);
  SET_PSR_F (tmp & (1 << a));
  SET_PSR_F (tmp & (1 << a));
  tmp = tmp | (1 << a);
  tmp = tmp | (1 << a);
  SB (addr, tmp);
  SB (addr, tmp);
  trace_output_32 (tmp);
  trace_output_32 (tmp);
}
}
 
 
 
 
/* sbitb.  */
/* sbitb.  */
void
void
OP_109_14 ()
OP_109_14 ()
{
{
  uint8 a = OP[0] & 0xff;
  uint8 a = OP[0] & 0xff;
  uint32 addr = (GPR32 (OP[2])) + OP[1], tmp;
  uint32 addr = (GPR32 (OP[2])) + OP[1], tmp;
  trace_input ("sbitb", OP_CONSTANT4, OP_RP_BASE_DISPS20, OP_VOID);
  trace_input ("sbitb", OP_CONSTANT4, OP_RP_BASE_DISPS20, OP_VOID);
  tmp = RB (addr);
  tmp = RB (addr);
  SET_PSR_F (tmp & (1 << a));
  SET_PSR_F (tmp & (1 << a));
  tmp = tmp | (1 << a);
  tmp = tmp | (1 << a);
  SB (addr, tmp);
  SB (addr, tmp);
  trace_output_32 (tmp);
  trace_output_32 (tmp);
}
}
 
 
 
 
/* sbitb.  */
/* sbitb.  */
void
void
OP_10A_14 ()
OP_10A_14 ()
{
{
  uint8 a = OP[0] & 0xff;
  uint8 a = OP[0] & 0xff;
  uint32 addr = (GPR32 (OP[2])) + OP[1], tmp;
  uint32 addr = (GPR32 (OP[2])) + OP[1], tmp;
  trace_input ("sbitb", OP_CONSTANT4, OP_RP_INDEX_DISPS20, OP_VOID);
  trace_input ("sbitb", OP_CONSTANT4, OP_RP_INDEX_DISPS20, OP_VOID);
  tmp = RB (addr);
  tmp = RB (addr);
  SET_PSR_F (tmp & (1 << a));
  SET_PSR_F (tmp & (1 << a));
  tmp = tmp | (1 << a);
  tmp = tmp | (1 << a);
  SB (addr, tmp);
  SB (addr, tmp);
  trace_output_32 (tmp);
  trace_output_32 (tmp);
}
}
 
 
 
 
/* sbitw.  */
/* sbitw.  */
void
void
OP_77_8 ()
OP_77_8 ()
{
{
  uint16 a = OP[0];
  uint16 a = OP[0];
  uint32 addr = OP[1], tmp;
  uint32 addr = OP[1], tmp;
  trace_input ("sbitw", OP_CONSTANT4, OP_ABS20_OUTPUT, OP_VOID);
  trace_input ("sbitw", OP_CONSTANT4, OP_ABS20_OUTPUT, OP_VOID);
  tmp = RW (addr);
  tmp = RW (addr);
  SET_PSR_F (tmp & (1 << a));
  SET_PSR_F (tmp & (1 << a));
  tmp = tmp | (1 << a);
  tmp = tmp | (1 << a);
  SW (addr, tmp);
  SW (addr, tmp);
  trace_output_32 (tmp);
  trace_output_32 (tmp);
}
}
 
 
/* sbitw.  */
/* sbitw.  */
void
void
OP_11B_14 ()
OP_11B_14 ()
{
{
  uint16 a = OP[0];
  uint16 a = OP[0];
  uint32 addr = OP[1], tmp;
  uint32 addr = OP[1], tmp;
  trace_input ("sbitw", OP_CONSTANT4, OP_ABS24_OUTPUT, OP_VOID);
  trace_input ("sbitw", OP_CONSTANT4, OP_ABS24_OUTPUT, OP_VOID);
  tmp = RW (addr);
  tmp = RW (addr);
  SET_PSR_F (tmp & (1 << a));
  SET_PSR_F (tmp & (1 << a));
  tmp = tmp | (1 << a);
  tmp = tmp | (1 << a);
  SW (addr, tmp);
  SW (addr, tmp);
  trace_output_32 (tmp);
  trace_output_32 (tmp);
}
}
 
 
/* sbitw.  */
/* sbitw.  */
void
void
OP_3A_7 ()
OP_3A_7 ()
{
{
  uint32 addr;
  uint32 addr;
  uint16 a = (OP[0]), tmp;
  uint16 a = (OP[0]), tmp;
  trace_input ("sbitw", OP_CONSTANT4, OP_R_INDEX8_ABS20, OP_VOID);
  trace_input ("sbitw", OP_CONSTANT4, OP_R_INDEX8_ABS20, OP_VOID);
 
 
  if (OP[1] == 0)
  if (OP[1] == 0)
     addr = (GPR32 (12)) + OP[2];
     addr = (GPR32 (12)) + OP[2];
  else
  else
     addr = (GPR32 (13)) + OP[2];
     addr = (GPR32 (13)) + OP[2];
 
 
  tmp = RW (addr);
  tmp = RW (addr);
  SET_PSR_F (tmp & (1 << a));
  SET_PSR_F (tmp & (1 << a));
  tmp = tmp | (1 << a);
  tmp = tmp | (1 << a);
  SW (addr, tmp);
  SW (addr, tmp);
  trace_output_32 (addr);
  trace_output_32 (addr);
}
}
 
 
/* sbitw.  */
/* sbitw.  */
void
void
OP_1CB_A ()
OP_1CB_A ()
{
{
  uint16 a = (OP[0]);
  uint16 a = (OP[0]);
  uint32 addr = (GPR32 (OP[2])) + OP[1], tmp;
  uint32 addr = (GPR32 (OP[2])) + OP[1], tmp;
  trace_input ("sbitw", OP_CONSTANT4, OP_RP_INDEX_DISP14, OP_VOID);
  trace_input ("sbitw", OP_CONSTANT4, OP_RP_INDEX_DISP14, OP_VOID);
  tmp = RW (addr);
  tmp = RW (addr);
  SET_PSR_F (tmp & (1 << a));
  SET_PSR_F (tmp & (1 << a));
  tmp = tmp | (1 << a);
  tmp = tmp | (1 << a);
  SW (addr, tmp);
  SW (addr, tmp);
  trace_output_32 (addr);
  trace_output_32 (addr);
}
}
 
 
/* sbitw.  */
/* sbitw.  */
void
void
OP_118_14 ()
OP_118_14 ()
{
{
  uint16 a = (OP[0]);
  uint16 a = (OP[0]);
  uint32 addr = (GPR (OP[2])) + OP[1], tmp;
  uint32 addr = (GPR (OP[2])) + OP[1], tmp;
  trace_input ("sbitw", OP_CONSTANT4, OP_R_BASE_DISPS20, OP_VOID);
  trace_input ("sbitw", OP_CONSTANT4, OP_R_BASE_DISPS20, OP_VOID);
  tmp = RW (addr);
  tmp = RW (addr);
  SET_PSR_F (tmp & (1 << a));
  SET_PSR_F (tmp & (1 << a));
  tmp = tmp | (1 << a);
  tmp = tmp | (1 << a);
  SW (addr, tmp);
  SW (addr, tmp);
  trace_output_32 (addr);
  trace_output_32 (addr);
}
}
 
 
/* sbitw.  */
/* sbitw.  */
void
void
OP_76_8 ()
OP_76_8 ()
{
{
  uint16 a = (OP[0]);
  uint16 a = (OP[0]);
  uint32 addr = (GPR32 (OP[2])) + OP[1], tmp;
  uint32 addr = (GPR32 (OP[2])) + OP[1], tmp;
  trace_input ("sbitw", OP_CONSTANT4, OP_RP_INDEX_DISP0, OP_VOID);
  trace_input ("sbitw", OP_CONSTANT4, OP_RP_INDEX_DISP0, OP_VOID);
  tmp = RW (addr);
  tmp = RW (addr);
  SET_PSR_F (tmp & (1 << a));
  SET_PSR_F (tmp & (1 << a));
  tmp = tmp | (1 << a);
  tmp = tmp | (1 << a);
  SW (addr, tmp);
  SW (addr, tmp);
  trace_output_32 (addr);
  trace_output_32 (addr);
}
}
 
 
/* sbitw.  */
/* sbitw.  */
void
void
OP_71_8 ()
OP_71_8 ()
{
{
  uint16 a = (OP[0]);
  uint16 a = (OP[0]);
  uint32 addr = (GPR32 (OP[2])) + OP[1], tmp;
  uint32 addr = (GPR32 (OP[2])) + OP[1], tmp;
  trace_input ("sbitw", OP_CONSTANT4, OP_RP_BASE_DISP16, OP_VOID);
  trace_input ("sbitw", OP_CONSTANT4, OP_RP_BASE_DISP16, OP_VOID);
  tmp = RW (addr);
  tmp = RW (addr);
  SET_PSR_F (tmp & (1 << a));
  SET_PSR_F (tmp & (1 << a));
  tmp = tmp | (1 << a);
  tmp = tmp | (1 << a);
  SW (addr, tmp);
  SW (addr, tmp);
  trace_output_32 (addr);
  trace_output_32 (addr);
}
}
 
 
/* sbitw.  */
/* sbitw.  */
void
void
OP_119_14 ()
OP_119_14 ()
{
{
  uint16 a = (OP[0]);
  uint16 a = (OP[0]);
  uint32 addr = (GPR32 (OP[2])) + OP[1], tmp;
  uint32 addr = (GPR32 (OP[2])) + OP[1], tmp;
  trace_input ("sbitw", OP_CONSTANT4, OP_RP_BASE_DISPS20, OP_VOID);
  trace_input ("sbitw", OP_CONSTANT4, OP_RP_BASE_DISPS20, OP_VOID);
  tmp = RW (addr);
  tmp = RW (addr);
  SET_PSR_F (tmp & (1 << a));
  SET_PSR_F (tmp & (1 << a));
  tmp = tmp | (1 << a);
  tmp = tmp | (1 << a);
  SW (addr, tmp);
  SW (addr, tmp);
  trace_output_32 (addr);
  trace_output_32 (addr);
}
}
 
 
/* sbitw.  */
/* sbitw.  */
void
void
OP_11A_14 ()
OP_11A_14 ()
{
{
  uint16 a = (OP[0]);
  uint16 a = (OP[0]);
  uint32 addr = (GPR32 (OP[2])) + OP[1], tmp;
  uint32 addr = (GPR32 (OP[2])) + OP[1], tmp;
  trace_input ("sbitw", OP_CONSTANT4, OP_RP_INDEX_DISPS20, OP_VOID);
  trace_input ("sbitw", OP_CONSTANT4, OP_RP_INDEX_DISPS20, OP_VOID);
  tmp = RW (addr);
  tmp = RW (addr);
  SET_PSR_F (tmp & (1 << a));
  SET_PSR_F (tmp & (1 << a));
  tmp = tmp | (1 << a);
  tmp = tmp | (1 << a);
  SW (addr, tmp);
  SW (addr, tmp);
  trace_output_32 (addr);
  trace_output_32 (addr);
}
}
 
 
 
 
/* tbitb.  */
/* tbitb.  */
void
void
OP_F7_9 ()
OP_F7_9 ()
{
{
  uint8 a = OP[0] & 0xff;
  uint8 a = OP[0] & 0xff;
  uint32 addr = OP[1], tmp;
  uint32 addr = OP[1], tmp;
  trace_input ("tbitb", OP_CONSTANT4, OP_ABS20_OUTPUT, OP_VOID);
  trace_input ("tbitb", OP_CONSTANT4, OP_ABS20_OUTPUT, OP_VOID);
  tmp = RB (addr);
  tmp = RB (addr);
  SET_PSR_F (tmp & (1 << a));
  SET_PSR_F (tmp & (1 << a));
  trace_output_32 (tmp);
  trace_output_32 (tmp);
}
}
 
 
/* tbitb.  */
/* tbitb.  */
void
void
OP_10F_14 ()
OP_10F_14 ()
{
{
  uint8 a = OP[0] & 0xff;
  uint8 a = OP[0] & 0xff;
  uint32 addr = OP[1], tmp;
  uint32 addr = OP[1], tmp;
  trace_input ("tbitb", OP_CONSTANT4, OP_ABS24_OUTPUT, OP_VOID);
  trace_input ("tbitb", OP_CONSTANT4, OP_ABS24_OUTPUT, OP_VOID);
  tmp = RB (addr);
  tmp = RB (addr);
  SET_PSR_F (tmp & (1 << a));
  SET_PSR_F (tmp & (1 << a));
  trace_output_32 (tmp);
  trace_output_32 (tmp);
}
}
 
 
/* tbitb.  */
/* tbitb.  */
void
void
OP_78_8 ()
OP_78_8 ()
{
{
  uint8 a = (OP[0]) & 0xff;
  uint8 a = (OP[0]) & 0xff;
  uint32 addr = (GPR (OP[2])) + OP[1], tmp;
  uint32 addr = (GPR (OP[2])) + OP[1], tmp;
  trace_input ("tbitb", OP_CONSTANT4, OP_R_INDEX7_ABS20, OP_VOID);
  trace_input ("tbitb", OP_CONSTANT4, OP_R_INDEX7_ABS20, OP_VOID);
  tmp = RB (addr);
  tmp = RB (addr);
  SET_PSR_F (tmp & (1 << a));
  SET_PSR_F (tmp & (1 << a));
  trace_output_32 (addr);
  trace_output_32 (addr);
}
}
 
 
/* tbitb.  */
/* tbitb.  */
void
void
OP_1EA_A ()
OP_1EA_A ()
{
{
  uint8 a = (OP[0]) & 0xff;
  uint8 a = (OP[0]) & 0xff;
  uint32 addr = (GPR32 (OP[2])) + OP[1], tmp;
  uint32 addr = (GPR32 (OP[2])) + OP[1], tmp;
  trace_input ("tbitb", OP_CONSTANT4, OP_RP_INDEX_DISP14, OP_VOID);
  trace_input ("tbitb", OP_CONSTANT4, OP_RP_INDEX_DISP14, OP_VOID);
  tmp = RB (addr);
  tmp = RB (addr);
  SET_PSR_F (tmp & (1 << a));
  SET_PSR_F (tmp & (1 << a));
  trace_output_32 (addr);
  trace_output_32 (addr);
}
}
 
 
/* tbitb.  */
/* tbitb.  */
void
void
OP_10C_14 ()
OP_10C_14 ()
{
{
  uint8 a = (OP[0]) & 0xff;
  uint8 a = (OP[0]) & 0xff;
  uint32 addr = (GPR (OP[2])) + OP[1], tmp;
  uint32 addr = (GPR (OP[2])) + OP[1], tmp;
  trace_input ("tbitb", OP_CONSTANT4, OP_R_BASE_DISPS20, OP_VOID);
  trace_input ("tbitb", OP_CONSTANT4, OP_R_BASE_DISPS20, OP_VOID);
  tmp = RB (addr);
  tmp = RB (addr);
  SET_PSR_F (tmp & (1 << a));
  SET_PSR_F (tmp & (1 << a));
  trace_output_32 (addr);
  trace_output_32 (addr);
}
}
 
 
/* tbitb.  */
/* tbitb.  */
void
void
OP_F4_9 ()
OP_F4_9 ()
{
{
  uint8 a = (OP[0]) & 0xff;
  uint8 a = (OP[0]) & 0xff;
  uint32 addr = (GPR32 (OP[2])) + OP[1], tmp;
  uint32 addr = (GPR32 (OP[2])) + OP[1], tmp;
  trace_input ("tbitb", OP_CONSTANT4, OP_RP_INDEX_DISP0, OP_VOID);
  trace_input ("tbitb", OP_CONSTANT4, OP_RP_INDEX_DISP0, OP_VOID);
  tmp = RB (addr);
  tmp = RB (addr);
  SET_PSR_F (tmp & (1 << a));
  SET_PSR_F (tmp & (1 << a));
  trace_output_32 (addr);
  trace_output_32 (addr);
}
}
 
 
/* tbitb.  */
/* tbitb.  */
void
void
OP_F6_9 ()
OP_F6_9 ()
{
{
  uint8 a = (OP[0]) & 0xff;
  uint8 a = (OP[0]) & 0xff;
  uint32 addr = (GPR32 (OP[2])) + OP[1], tmp;
  uint32 addr = (GPR32 (OP[2])) + OP[1], tmp;
  trace_input ("tbitb", OP_CONSTANT4, OP_RP_BASE_DISP16, OP_VOID);
  trace_input ("tbitb", OP_CONSTANT4, OP_RP_BASE_DISP16, OP_VOID);
  tmp = RB (addr);
  tmp = RB (addr);
  SET_PSR_F (tmp & (1 << a));
  SET_PSR_F (tmp & (1 << a));
  trace_output_32 (addr);
  trace_output_32 (addr);
}
}
 
 
/* tbitb.  */
/* tbitb.  */
void
void
OP_10D_14 ()
OP_10D_14 ()
{
{
  uint8 a = (OP[0]) & 0xff;
  uint8 a = (OP[0]) & 0xff;
  uint32 addr = (GPR32 (OP[2])) + OP[1], tmp;
  uint32 addr = (GPR32 (OP[2])) + OP[1], tmp;
  trace_input ("tbitb", OP_CONSTANT4, OP_RP_BASE_DISPS20, OP_VOID);
  trace_input ("tbitb", OP_CONSTANT4, OP_RP_BASE_DISPS20, OP_VOID);
  tmp = RB (addr);
  tmp = RB (addr);
  SET_PSR_F (tmp & (1 << a));
  SET_PSR_F (tmp & (1 << a));
  trace_output_32 (addr);
  trace_output_32 (addr);
}
}
 
 
/* tbitb.  */
/* tbitb.  */
void
void
OP_10E_14 ()
OP_10E_14 ()
{
{
  uint8 a = (OP[0]) & 0xff;
  uint8 a = (OP[0]) & 0xff;
  uint32 addr = (GPR32 (OP[2])) + OP[1], tmp;
  uint32 addr = (GPR32 (OP[2])) + OP[1], tmp;
  trace_input ("tbitb", OP_CONSTANT4, OP_RP_INDEX_DISPS20, OP_VOID);
  trace_input ("tbitb", OP_CONSTANT4, OP_RP_INDEX_DISPS20, OP_VOID);
  tmp = RB (addr);
  tmp = RB (addr);
  SET_PSR_F (tmp & (1 << a));
  SET_PSR_F (tmp & (1 << a));
  trace_output_32 (addr);
  trace_output_32 (addr);
}
}
 
 
 
 
/* tbitw.  */
/* tbitw.  */
void
void
OP_7F_8 ()
OP_7F_8 ()
{
{
  uint16 a = OP[0];
  uint16 a = OP[0];
  uint32 addr = OP[1], tmp;
  uint32 addr = OP[1], tmp;
  trace_input ("tbitw", OP_CONSTANT4, OP_ABS20_OUTPUT, OP_VOID);
  trace_input ("tbitw", OP_CONSTANT4, OP_ABS20_OUTPUT, OP_VOID);
  tmp = RW (addr);
  tmp = RW (addr);
  SET_PSR_F (tmp & (1 << a));
  SET_PSR_F (tmp & (1 << a));
  trace_output_32 (tmp);
  trace_output_32 (tmp);
}
}
 
 
/* tbitw.  */
/* tbitw.  */
void
void
OP_11F_14 ()
OP_11F_14 ()
{
{
  uint16 a = OP[0];
  uint16 a = OP[0];
  uint32 addr = OP[1], tmp;
  uint32 addr = OP[1], tmp;
  trace_input ("tbitw", OP_CONSTANT4, OP_ABS24_OUTPUT, OP_VOID);
  trace_input ("tbitw", OP_CONSTANT4, OP_ABS24_OUTPUT, OP_VOID);
  tmp = RW (addr);
  tmp = RW (addr);
  SET_PSR_F (tmp & (1 << a));
  SET_PSR_F (tmp & (1 << a));
  trace_output_32 (tmp);
  trace_output_32 (tmp);
}
}
 
 
 
 
/* tbitw.  */
/* tbitw.  */
void
void
OP_3E_7 ()
OP_3E_7 ()
{
{
  uint32 addr;
  uint32 addr;
  uint16 a = (OP[0]), tmp;
  uint16 a = (OP[0]), tmp;
  trace_input ("tbitw", OP_CONSTANT4, OP_R_INDEX8_ABS20, OP_VOID);
  trace_input ("tbitw", OP_CONSTANT4, OP_R_INDEX8_ABS20, OP_VOID);
 
 
  if (OP[1] == 0)
  if (OP[1] == 0)
     addr = (GPR32 (12)) + OP[2];
     addr = (GPR32 (12)) + OP[2];
  else
  else
     addr = (GPR32 (13)) + OP[2];
     addr = (GPR32 (13)) + OP[2];
 
 
  tmp = RW (addr);
  tmp = RW (addr);
  SET_PSR_F (tmp & (1 << a));
  SET_PSR_F (tmp & (1 << a));
  trace_output_32 (addr);
  trace_output_32 (addr);
}
}
 
 
/* tbitw.  */
/* tbitw.  */
void
void
OP_1EB_A ()
OP_1EB_A ()
{
{
  uint16 a = (OP[0]);
  uint16 a = (OP[0]);
  uint32 addr = (GPR32 (OP[2])) + OP[1], tmp;
  uint32 addr = (GPR32 (OP[2])) + OP[1], tmp;
  trace_input ("tbitw", OP_CONSTANT4, OP_RP_INDEX_DISP14, OP_VOID);
  trace_input ("tbitw", OP_CONSTANT4, OP_RP_INDEX_DISP14, OP_VOID);
  tmp = RW (addr);
  tmp = RW (addr);
  SET_PSR_F (tmp & (1 << a));
  SET_PSR_F (tmp & (1 << a));
  trace_output_32 (addr);
  trace_output_32 (addr);
}
}
 
 
/* tbitw.  */
/* tbitw.  */
void
void
OP_11C_14 ()
OP_11C_14 ()
{
{
  uint16 a = (OP[0]);
  uint16 a = (OP[0]);
  uint32 addr = (GPR (OP[2])) + OP[1], tmp;
  uint32 addr = (GPR (OP[2])) + OP[1], tmp;
  trace_input ("tbitw", OP_CONSTANT4, OP_R_BASE_DISPS20, OP_VOID);
  trace_input ("tbitw", OP_CONSTANT4, OP_R_BASE_DISPS20, OP_VOID);
  tmp = RW (addr);
  tmp = RW (addr);
  SET_PSR_F (tmp & (1 << a));
  SET_PSR_F (tmp & (1 << a));
  trace_output_32 (addr);
  trace_output_32 (addr);
}
}
 
 
/* tbitw.  */
/* tbitw.  */
void
void
OP_7E_8 ()
OP_7E_8 ()
{
{
  uint16 a = (OP[0]);
  uint16 a = (OP[0]);
  uint32 addr = (GPR32 (OP[2])) + OP[1], tmp;
  uint32 addr = (GPR32 (OP[2])) + OP[1], tmp;
  trace_input ("tbitw", OP_CONSTANT4, OP_RP_INDEX_DISP0, OP_VOID);
  trace_input ("tbitw", OP_CONSTANT4, OP_RP_INDEX_DISP0, OP_VOID);
  tmp = RW (addr);
  tmp = RW (addr);
  SET_PSR_F (tmp & (1 << a));
  SET_PSR_F (tmp & (1 << a));
  trace_output_32 (addr);
  trace_output_32 (addr);
}
}
 
 
/* tbitw.  */
/* tbitw.  */
void
void
OP_79_8 ()
OP_79_8 ()
{
{
  uint16 a = (OP[0]);
  uint16 a = (OP[0]);
  uint32 addr = (GPR32 (OP[2])) + OP[1], tmp;
  uint32 addr = (GPR32 (OP[2])) + OP[1], tmp;
  trace_input ("tbitw", OP_CONSTANT4, OP_RP_BASE_DISP16, OP_VOID);
  trace_input ("tbitw", OP_CONSTANT4, OP_RP_BASE_DISP16, OP_VOID);
  tmp = RW (addr);
  tmp = RW (addr);
  SET_PSR_F (tmp & (1 << a));
  SET_PSR_F (tmp & (1 << a));
  trace_output_32 (addr);
  trace_output_32 (addr);
}
}
 
 
/* tbitw.  */
/* tbitw.  */
void
void
OP_11D_14 ()
OP_11D_14 ()
{
{
  uint16 a = (OP[0]);
  uint16 a = (OP[0]);
  uint32 addr = (GPR32 (OP[2])) + OP[1], tmp;
  uint32 addr = (GPR32 (OP[2])) + OP[1], tmp;
  trace_input ("tbitw", OP_CONSTANT4, OP_RP_BASE_DISPS20, OP_VOID);
  trace_input ("tbitw", OP_CONSTANT4, OP_RP_BASE_DISPS20, OP_VOID);
  tmp = RW (addr);
  tmp = RW (addr);
  SET_PSR_F (tmp & (1 << a));
  SET_PSR_F (tmp & (1 << a));
  trace_output_32 (addr);
  trace_output_32 (addr);
}
}
 
 
 
 
/* tbitw.  */
/* tbitw.  */
void
void
OP_11E_14 ()
OP_11E_14 ()
{
{
  uint16 a = (OP[0]);
  uint16 a = (OP[0]);
  uint32 addr = (GPR32 (OP[2])) + OP[1], tmp;
  uint32 addr = (GPR32 (OP[2])) + OP[1], tmp;
  trace_input ("tbitw", OP_CONSTANT4, OP_RP_INDEX_DISPS20, OP_VOID);
  trace_input ("tbitw", OP_CONSTANT4, OP_RP_INDEX_DISPS20, OP_VOID);
  tmp = RW (addr);
  tmp = RW (addr);
  SET_PSR_F (tmp & (1 << a));
  SET_PSR_F (tmp & (1 << a));
  trace_output_32 (addr);
  trace_output_32 (addr);
}
}
 
 
 
 
/* tbit.  */
/* tbit.  */
void
void
OP_6_8 ()
OP_6_8 ()
{
{
  uint16 a = OP[0];
  uint16 a = OP[0];
  uint16 b = (GPR (OP[1]));
  uint16 b = (GPR (OP[1]));
  trace_input ("tbit", OP_CONSTANT4, OP_REG, OP_VOID);
  trace_input ("tbit", OP_CONSTANT4, OP_REG, OP_VOID);
  SET_PSR_F (b & (1 << a));
  SET_PSR_F (b & (1 << a));
  trace_output_16 (b);
  trace_output_16 (b);
}
}
 
 
/* tbit.  */
/* tbit.  */
void
void
OP_7_8 ()
OP_7_8 ()
{
{
  uint16 a = GPR (OP[0]);
  uint16 a = GPR (OP[0]);
  uint16 b = (GPR (OP[1]));
  uint16 b = (GPR (OP[1]));
  trace_input ("tbit", OP_REG, OP_REG, OP_VOID);
  trace_input ("tbit", OP_REG, OP_REG, OP_VOID);
  SET_PSR_F (b & (1 << a));
  SET_PSR_F (b & (1 << a));
  trace_output_16 (b);
  trace_output_16 (b);
}
}
 
 
 
 
/* cmpb.  */
/* cmpb.  */
void
void
OP_50_8 ()
OP_50_8 ()
{
{
  uint8 a = (OP[0]) & 0xFF;
  uint8 a = (OP[0]) & 0xFF;
  uint8 b = (GPR (OP[1])) & 0xFF;
  uint8 b = (GPR (OP[1])) & 0xFF;
  trace_input ("cmpb", OP_CONSTANT4, OP_REG, OP_VOID);
  trace_input ("cmpb", OP_CONSTANT4, OP_REG, OP_VOID);
  SET_PSR_Z (a == b);
  SET_PSR_Z (a == b);
  SET_PSR_N ((int8)a > (int8)b);
  SET_PSR_N ((int8)a > (int8)b);
  SET_PSR_L (a > b);
  SET_PSR_L (a > b);
  trace_output_flag ();
  trace_output_flag ();
}
}
 
 
/* cmpb.  */
/* cmpb.  */
void
void
OP_50B_C ()
OP_50B_C ()
{
{
  uint8 a = (OP[0]) & 0xFF;
  uint8 a = (OP[0]) & 0xFF;
  uint8 b = (GPR (OP[1])) & 0xFF;
  uint8 b = (GPR (OP[1])) & 0xFF;
  trace_input ("cmpb", OP_CONSTANT16, OP_REG, OP_VOID);
  trace_input ("cmpb", OP_CONSTANT16, OP_REG, OP_VOID);
  SET_PSR_Z (a == b);
  SET_PSR_Z (a == b);
  SET_PSR_N ((int8)a > (int8)b);
  SET_PSR_N ((int8)a > (int8)b);
  SET_PSR_L (a > b);
  SET_PSR_L (a > b);
  trace_output_flag ();
  trace_output_flag ();
}
}
 
 
/* cmpb.  */
/* cmpb.  */
void
void
OP_51_8 ()
OP_51_8 ()
{
{
  uint8 a = (GPR (OP[0])) & 0xFF;
  uint8 a = (GPR (OP[0])) & 0xFF;
  uint8 b = (GPR (OP[1])) & 0xFF;
  uint8 b = (GPR (OP[1])) & 0xFF;
  trace_input ("cmpb", OP_REG, OP_REG, OP_VOID);
  trace_input ("cmpb", OP_REG, OP_REG, OP_VOID);
  SET_PSR_Z (a == b);
  SET_PSR_Z (a == b);
  SET_PSR_N ((int8)a > (int8)b);
  SET_PSR_N ((int8)a > (int8)b);
  SET_PSR_L (a > b);
  SET_PSR_L (a > b);
  trace_output_flag ();
  trace_output_flag ();
}
}
 
 
/* cmpw.  */
/* cmpw.  */
void
void
OP_52_8 ()
OP_52_8 ()
{
{
  uint16 a = (OP[0]);
  uint16 a = (OP[0]);
  uint16 b = GPR (OP[1]);
  uint16 b = GPR (OP[1]);
  trace_input ("cmpw", OP_CONSTANT4, OP_REG, OP_VOID);
  trace_input ("cmpw", OP_CONSTANT4, OP_REG, OP_VOID);
  SET_PSR_Z (a == b);
  SET_PSR_Z (a == b);
  SET_PSR_N ((int16)a > (int16)b);
  SET_PSR_N ((int16)a > (int16)b);
  SET_PSR_L (a > b);
  SET_PSR_L (a > b);
  trace_output_flag ();
  trace_output_flag ();
}
}
 
 
/* cmpw.  */
/* cmpw.  */
void
void
OP_52B_C ()
OP_52B_C ()
{
{
  uint16 a = (OP[0]);
  uint16 a = (OP[0]);
  uint16 b = GPR (OP[1]);
  uint16 b = GPR (OP[1]);
  trace_input ("cmpw", OP_CONSTANT16, OP_REG, OP_VOID);
  trace_input ("cmpw", OP_CONSTANT16, OP_REG, OP_VOID);
  SET_PSR_Z (a == b);
  SET_PSR_Z (a == b);
  SET_PSR_N ((int16)a > (int16)b);
  SET_PSR_N ((int16)a > (int16)b);
  SET_PSR_L (a > b);
  SET_PSR_L (a > b);
  trace_output_flag ();
  trace_output_flag ();
}
}
 
 
/* cmpw.  */
/* cmpw.  */
void
void
OP_53_8 ()
OP_53_8 ()
{
{
  uint16 a = GPR (OP[0]) ;
  uint16 a = GPR (OP[0]) ;
  uint16 b = GPR (OP[1]) ;
  uint16 b = GPR (OP[1]) ;
  trace_input ("cmpw", OP_REG, OP_REG, OP_VOID);
  trace_input ("cmpw", OP_REG, OP_REG, OP_VOID);
  SET_PSR_Z (a == b);
  SET_PSR_Z (a == b);
  SET_PSR_N ((int16)a > (int16)b);
  SET_PSR_N ((int16)a > (int16)b);
  SET_PSR_L (a > b);
  SET_PSR_L (a > b);
  trace_output_flag ();
  trace_output_flag ();
}
}
 
 
/* cmpd.  */
/* cmpd.  */
void
void
OP_56_8 ()
OP_56_8 ()
{
{
  uint32 a = (OP[0]);
  uint32 a = (OP[0]);
  uint32 b = GPR32 (OP[1]);
  uint32 b = GPR32 (OP[1]);
  trace_input ("cmpd", OP_CONSTANT4, OP_REGP, OP_VOID);
  trace_input ("cmpd", OP_CONSTANT4, OP_REGP, OP_VOID);
  SET_PSR_Z (a == b);
  SET_PSR_Z (a == b);
  SET_PSR_N ((int32)a > (int32)b);
  SET_PSR_N ((int32)a > (int32)b);
  SET_PSR_L (a > b);
  SET_PSR_L (a > b);
  trace_output_flag ();
  trace_output_flag ();
}
}
 
 
/* cmpd.  */
/* cmpd.  */
void
void
OP_56B_C ()
OP_56B_C ()
{
{
  uint32 a = (SEXT16(OP[0]));
  uint32 a = (SEXT16(OP[0]));
  uint32 b = GPR32 (OP[1]);
  uint32 b = GPR32 (OP[1]);
  trace_input ("cmpd", OP_CONSTANT16, OP_REGP, OP_VOID);
  trace_input ("cmpd", OP_CONSTANT16, OP_REGP, OP_VOID);
  SET_PSR_Z (a == b);
  SET_PSR_Z (a == b);
  SET_PSR_N ((int32)a > (int32)b);
  SET_PSR_N ((int32)a > (int32)b);
  SET_PSR_L (a > b);
  SET_PSR_L (a > b);
  trace_output_flag ();
  trace_output_flag ();
}
}
 
 
/* cmpd.  */
/* cmpd.  */
void
void
OP_57_8 ()
OP_57_8 ()
{
{
  uint32 a = GPR32 (OP[0]) ;
  uint32 a = GPR32 (OP[0]) ;
  uint32 b = GPR32 (OP[1]) ;
  uint32 b = GPR32 (OP[1]) ;
  trace_input ("cmpd", OP_REGP, OP_REGP, OP_VOID);
  trace_input ("cmpd", OP_REGP, OP_REGP, OP_VOID);
  SET_PSR_Z (a == b);
  SET_PSR_Z (a == b);
  SET_PSR_N ((int32)a > (int32)b);
  SET_PSR_N ((int32)a > (int32)b);
  SET_PSR_L (a > b);
  SET_PSR_L (a > b);
  trace_output_flag ();
  trace_output_flag ();
}
}
 
 
/* cmpd.  */
/* cmpd.  */
void
void
OP_9_C()
OP_9_C()
{
{
  uint32 a = (OP[0]);
  uint32 a = (OP[0]);
  uint32 b = GPR32 (OP[1]);
  uint32 b = GPR32 (OP[1]);
  trace_input ("cmpd", OP_CONSTANT32, OP_REGP, OP_VOID);
  trace_input ("cmpd", OP_CONSTANT32, OP_REGP, OP_VOID);
  SET_PSR_Z (a == b);
  SET_PSR_Z (a == b);
  SET_PSR_N ((int32)a > (int32)b);
  SET_PSR_N ((int32)a > (int32)b);
  SET_PSR_L (a > b);
  SET_PSR_L (a > b);
  trace_output_flag ();
  trace_output_flag ();
}
}
 
 
 
 
/* movb.  */
/* movb.  */
void
void
OP_58_8 ()
OP_58_8 ()
{
{
  uint8 tmp = OP[0] & 0xFF;
  uint8 tmp = OP[0] & 0xFF;
  trace_input ("movb", OP_CONSTANT4, OP_REG, OP_VOID);
  trace_input ("movb", OP_CONSTANT4, OP_REG, OP_VOID);
  uint16 a = (GPR (OP[1])) & 0xFF00;
  uint16 a = (GPR (OP[1])) & 0xFF00;
  SET_GPR (OP[1], (a | tmp));
  SET_GPR (OP[1], (a | tmp));
  trace_output_16 (tmp);
  trace_output_16 (tmp);
}
}
 
 
/* movb.  */
/* movb.  */
void
void
OP_58B_C ()
OP_58B_C ()
{
{
  uint8 tmp = OP[0] & 0xFF;
  uint8 tmp = OP[0] & 0xFF;
  trace_input ("movb", OP_CONSTANT16, OP_REG, OP_VOID);
  trace_input ("movb", OP_CONSTANT16, OP_REG, OP_VOID);
  uint16 a = (GPR (OP[1])) & 0xFF00;
  uint16 a = (GPR (OP[1])) & 0xFF00;
  SET_GPR (OP[1], (a | tmp));
  SET_GPR (OP[1], (a | tmp));
  trace_output_16 (tmp);
  trace_output_16 (tmp);
}
}
 
 
/* movb.  */
/* movb.  */
void
void
OP_59_8 ()
OP_59_8 ()
{
{
  uint8 tmp = (GPR (OP[0])) & 0xFF;
  uint8 tmp = (GPR (OP[0])) & 0xFF;
  trace_input ("movb", OP_REG, OP_REG, OP_VOID);
  trace_input ("movb", OP_REG, OP_REG, OP_VOID);
  uint16 a = (GPR (OP[1])) & 0xFF00;
  uint16 a = (GPR (OP[1])) & 0xFF00;
  SET_GPR (OP[1], (a | tmp));
  SET_GPR (OP[1], (a | tmp));
  trace_output_16 (tmp);
  trace_output_16 (tmp);
}
}
 
 
/* movw.  */
/* movw.  */
void
void
OP_5A_8 ()
OP_5A_8 ()
{
{
  uint16 tmp = OP[0];
  uint16 tmp = OP[0];
  trace_input ("movw", OP_CONSTANT4_1, OP_REG, OP_VOID);
  trace_input ("movw", OP_CONSTANT4_1, OP_REG, OP_VOID);
  SET_GPR (OP[1], (tmp & 0xffff));
  SET_GPR (OP[1], (tmp & 0xffff));
  trace_output_16 (tmp);
  trace_output_16 (tmp);
}
}
 
 
/* movw.  */
/* movw.  */
void
void
OP_5AB_C ()
OP_5AB_C ()
{
{
  int16 tmp = OP[0];
  int16 tmp = OP[0];
  trace_input ("movw", OP_CONSTANT16, OP_REG, OP_VOID);
  trace_input ("movw", OP_CONSTANT16, OP_REG, OP_VOID);
  SET_GPR (OP[1], (tmp & 0xffff));
  SET_GPR (OP[1], (tmp & 0xffff));
  trace_output_16 (tmp);
  trace_output_16 (tmp);
}
}
 
 
/* movw.  */
/* movw.  */
void
void
OP_5B_8 ()
OP_5B_8 ()
{
{
  uint16 tmp = GPR (OP[0]);
  uint16 tmp = GPR (OP[0]);
  trace_input ("movw", OP_REG, OP_REGP, OP_VOID);
  trace_input ("movw", OP_REG, OP_REGP, OP_VOID);
  uint32 a = GPR32 (OP[1]);
  uint32 a = GPR32 (OP[1]);
  a = (a & 0xffff0000) | tmp;
  a = (a & 0xffff0000) | tmp;
  SET_GPR32 (OP[1], a);
  SET_GPR32 (OP[1], a);
  trace_output_16 (tmp);
  trace_output_16 (tmp);
}
}
 
 
/* movxb.  */
/* movxb.  */
void
void
OP_5C_8 ()
OP_5C_8 ()
{
{
  uint8 tmp = (GPR (OP[0])) & 0xFF;
  uint8 tmp = (GPR (OP[0])) & 0xFF;
  trace_input ("movxb", OP_REG, OP_REG, OP_VOID);
  trace_input ("movxb", OP_REG, OP_REG, OP_VOID);
  SET_GPR (OP[1], ((SEXT8(tmp)) & 0xffff));
  SET_GPR (OP[1], ((SEXT8(tmp)) & 0xffff));
  trace_output_16 (tmp);
  trace_output_16 (tmp);
}
}
 
 
/* movzb.  */
/* movzb.  */
void
void
OP_5D_8 ()
OP_5D_8 ()
{
{
  uint8 tmp = (GPR (OP[0])) & 0xFF;
  uint8 tmp = (GPR (OP[0])) & 0xFF;
  trace_input ("movzb", OP_REG, OP_REG, OP_VOID);
  trace_input ("movzb", OP_REG, OP_REG, OP_VOID);
  SET_GPR (OP[1],  tmp);
  SET_GPR (OP[1],  tmp);
  trace_output_16 (tmp);
  trace_output_16 (tmp);
}
}
 
 
/* movxw.  */
/* movxw.  */
void
void
OP_5E_8 ()
OP_5E_8 ()
{
{
  uint16 tmp = GPR (OP[0]);
  uint16 tmp = GPR (OP[0]);
  trace_input ("movxw", OP_REG, OP_REGP, OP_VOID);
  trace_input ("movxw", OP_REG, OP_REGP, OP_VOID);
  SET_GPR32 (OP[1], SEXT16(tmp));
  SET_GPR32 (OP[1], SEXT16(tmp));
  trace_output_16 (tmp);
  trace_output_16 (tmp);
}
}
 
 
/* movzw.  */
/* movzw.  */
void
void
OP_5F_8 ()
OP_5F_8 ()
{
{
  uint16 tmp = GPR (OP[0]);
  uint16 tmp = GPR (OP[0]);
  trace_input ("movzw", OP_REG, OP_REGP, OP_VOID);
  trace_input ("movzw", OP_REG, OP_REGP, OP_VOID);
  SET_GPR32 (OP[1], (tmp & 0x0000FFFF));
  SET_GPR32 (OP[1], (tmp & 0x0000FFFF));
  trace_output_16 (tmp);
  trace_output_16 (tmp);
}
}
 
 
/* movd.  */
/* movd.  */
void
void
OP_54_8 ()
OP_54_8 ()
{
{
  int32 tmp = OP[0];
  int32 tmp = OP[0];
  trace_input ("movd", OP_CONSTANT4, OP_REGP, OP_VOID);
  trace_input ("movd", OP_CONSTANT4, OP_REGP, OP_VOID);
  SET_GPR32 (OP[1], tmp);
  SET_GPR32 (OP[1], tmp);
  trace_output_32 (tmp);
  trace_output_32 (tmp);
}
}
 
 
/* movd.  */
/* movd.  */
void
void
OP_54B_C ()
OP_54B_C ()
{
{
  int32 tmp = SEXT16(OP[0]);
  int32 tmp = SEXT16(OP[0]);
  trace_input ("movd", OP_CONSTANT16, OP_REGP, OP_VOID);
  trace_input ("movd", OP_CONSTANT16, OP_REGP, OP_VOID);
  SET_GPR32 (OP[1], tmp);
  SET_GPR32 (OP[1], tmp);
  trace_output_32 (tmp);
  trace_output_32 (tmp);
}
}
 
 
/* movd.  */
/* movd.  */
void
void
OP_55_8 ()
OP_55_8 ()
{
{
  uint32 tmp = GPR32 (OP[0]);
  uint32 tmp = GPR32 (OP[0]);
  trace_input ("movd", OP_REGP, OP_REGP, OP_VOID);
  trace_input ("movd", OP_REGP, OP_REGP, OP_VOID);
  SET_GPR32 (OP[1], tmp);
  SET_GPR32 (OP[1], tmp);
  trace_output_32 (tmp);
  trace_output_32 (tmp);
}
}
 
 
/* movd.  */
/* movd.  */
void
void
OP_5_8 ()
OP_5_8 ()
{
{
  uint32 tmp = OP[0];
  uint32 tmp = OP[0];
  trace_input ("movd", OP_CONSTANT20, OP_REGP, OP_VOID);
  trace_input ("movd", OP_CONSTANT20, OP_REGP, OP_VOID);
  SET_GPR32 (OP[1], tmp);
  SET_GPR32 (OP[1], tmp);
  trace_output_32 (tmp);
  trace_output_32 (tmp);
}
}
 
 
/* movd.  */
/* movd.  */
void
void
OP_7_C ()
OP_7_C ()
{
{
  int32 tmp = OP[0];
  int32 tmp = OP[0];
  trace_input ("movd", OP_CONSTANT32, OP_REGP, OP_VOID);
  trace_input ("movd", OP_CONSTANT32, OP_REGP, OP_VOID);
  SET_GPR32 (OP[1], tmp);
  SET_GPR32 (OP[1], tmp);
  trace_output_32 (tmp);
  trace_output_32 (tmp);
}
}
 
 
/* loadm.  */
/* loadm.  */
void
void
OP_14_D ()
OP_14_D ()
{
{
  uint32 addr = GPR (0);
  uint32 addr = GPR (0);
  uint16 count = OP[0], reg = 2, tmp;
  uint16 count = OP[0], reg = 2, tmp;
  trace_input ("loadm", OP_CONSTANT4, OP_VOID, OP_VOID);
  trace_input ("loadm", OP_CONSTANT4, OP_VOID, OP_VOID);
  if ((addr & 1))
  if ((addr & 1))
    {
    {
      State.exception = SIG_CR16_BUS;
      State.exception = SIG_CR16_BUS;
      State.pc_changed = 1; /* Don't increment the PC. */
      State.pc_changed = 1; /* Don't increment the PC. */
      trace_output_void ();
      trace_output_void ();
      return;
      return;
    }
    }
 
 
  while (count)
  while (count)
    {
    {
      tmp = RW (addr);
      tmp = RW (addr);
      SET_GPR (reg, tmp);
      SET_GPR (reg, tmp);
      addr +=2;
      addr +=2;
      --count;
      --count;
      reg++;
      reg++;
      if (reg == 6) reg = 8;
      if (reg == 6) reg = 8;
    };
    };
 
 
  SET_GPR (0, addr);
  SET_GPR (0, addr);
  trace_output_void ();
  trace_output_void ();
}
}
 
 
 
 
/* loadmp.  */
/* loadmp.  */
void
void
OP_15_D ()
OP_15_D ()
{
{
  uint32 addr = GPR32 (0);
  uint32 addr = GPR32 (0);
  uint16 count = OP[0], reg = 2, tmp;
  uint16 count = OP[0], reg = 2, tmp;
  trace_input ("loadm", OP_CONSTANT4, OP_VOID, OP_VOID);
  trace_input ("loadm", OP_CONSTANT4, OP_VOID, OP_VOID);
  if ((addr & 1))
  if ((addr & 1))
    {
    {
      State.exception = SIG_CR16_BUS;
      State.exception = SIG_CR16_BUS;
      State.pc_changed = 1; /* Don't increment the PC. */
      State.pc_changed = 1; /* Don't increment the PC. */
      trace_output_void ();
      trace_output_void ();
      return;
      return;
    }
    }
 
 
  while (count)
  while (count)
    {
    {
      tmp = RW (addr);
      tmp = RW (addr);
      SET_GPR (reg, tmp);
      SET_GPR (reg, tmp);
      addr +=2;
      addr +=2;
      --count;
      --count;
      reg++;
      reg++;
      if (reg == 6) reg = 8;
      if (reg == 6) reg = 8;
    };
    };
 
 
  SET_GPR32 (0, addr);
  SET_GPR32 (0, addr);
  trace_output_void ();
  trace_output_void ();
}
}
 
 
 
 
/* loadb.  */
/* loadb.  */
void
void
OP_88_8 ()
OP_88_8 ()
{
{
  /* loadb ABS20, REG
  /* loadb ABS20, REG
   * ADDR = zext24(abs20) | remap (ie 0xF00000)
   * ADDR = zext24(abs20) | remap (ie 0xF00000)
   * REG  = [ADDR]
   * REG  = [ADDR]
   * NOTE: remap is
   * NOTE: remap is
   * If (abs20 > 0xEFFFF) the resulting address is logically ORed
   * If (abs20 > 0xEFFFF) the resulting address is logically ORed
   * with 0xF00000 i.e. addresses from 1M-64k to 1M are re-mapped
   * with 0xF00000 i.e. addresses from 1M-64k to 1M are re-mapped
   * by the core to 16M-64k to 16M. */
   * by the core to 16M-64k to 16M. */
 
 
  uint16 tmp, a = (GPR (OP[1])) & 0xFF00;
  uint16 tmp, a = (GPR (OP[1])) & 0xFF00;
  uint32 addr = OP[0];
  uint32 addr = OP[0];
  trace_input ("loadb", OP_ABS20, OP_REG, OP_VOID);
  trace_input ("loadb", OP_ABS20, OP_REG, OP_VOID);
  if (addr > 0xEFFFF) addr |= 0xF00000;
  if (addr > 0xEFFFF) addr |= 0xF00000;
  tmp = (RB (addr));
  tmp = (RB (addr));
  SET_GPR (OP[1], (a | tmp));
  SET_GPR (OP[1], (a | tmp));
  trace_output_16 (tmp);
  trace_output_16 (tmp);
}
}
 
 
/* loadb.  */
/* loadb.  */
void
void
OP_127_14 ()
OP_127_14 ()
{
{
  /* loadb ABS24, REG
  /* loadb ABS24, REG
   * ADDR = abs24
   * ADDR = abs24
   * REGR = [ADDR].   */
   * REGR = [ADDR].   */
 
 
  uint16 tmp, a = (GPR (OP[1])) & 0xFF00;
  uint16 tmp, a = (GPR (OP[1])) & 0xFF00;
  uint32 addr = OP[0];
  uint32 addr = OP[0];
  trace_input ("loadb", OP_ABS24, OP_REG, OP_VOID);
  trace_input ("loadb", OP_ABS24, OP_REG, OP_VOID);
  tmp = (RB (addr));
  tmp = (RB (addr));
  SET_GPR (OP[1], (a | tmp));
  SET_GPR (OP[1], (a | tmp));
  trace_output_16 (tmp);
  trace_output_16 (tmp);
}
}
 
 
/* loadb.  */
/* loadb.  */
void
void
OP_45_7 ()
OP_45_7 ()
{
{
  /* loadb [Rindex]ABS20   REG
  /* loadb [Rindex]ABS20   REG
   * ADDR = Rindex + zext24(disp20)
   * ADDR = Rindex + zext24(disp20)
   * REGR = [ADDR].   */
   * REGR = [ADDR].   */
 
 
  uint32 addr;
  uint32 addr;
  uint16 tmp, a = (GPR (OP[2])) & 0xFF00;
  uint16 tmp, a = (GPR (OP[2])) & 0xFF00;
  trace_input ("loadb", OP_R_INDEX8_ABS20, OP_REG, OP_VOID);
  trace_input ("loadb", OP_R_INDEX8_ABS20, OP_REG, OP_VOID);
 
 
  if (OP[0] == 0)
  if (OP[0] == 0)
     addr = (GPR32 (12)) + OP[1];
     addr = (GPR32 (12)) + OP[1];
  else
  else
     addr = (GPR32 (13)) + OP[1];
     addr = (GPR32 (13)) + OP[1];
 
 
  tmp = (RB (addr));
  tmp = (RB (addr));
  SET_GPR (OP[2], (a | tmp));
  SET_GPR (OP[2], (a | tmp));
  trace_output_16 (tmp);
  trace_output_16 (tmp);
}
}
 
 
 
 
/* loadb.  */
/* loadb.  */
void
void
OP_B_4 ()
OP_B_4 ()
{
{
  /* loadb DIPS4(REGP)   REG
  /* loadb DIPS4(REGP)   REG
   * ADDR = RPBASE + zext24(DISP4)
   * ADDR = RPBASE + zext24(DISP4)
   * REG = [ADDR].  */
   * REG = [ADDR].  */
  uint16 tmp, a = (GPR (OP[2])) & 0xFF00;
  uint16 tmp, a = (GPR (OP[2])) & 0xFF00;
  uint32 addr = (GPR32 (OP[1])) + OP[0];
  uint32 addr = (GPR32 (OP[1])) + OP[0];
  trace_input ("loadb", OP_RP_BASE_DISP4, OP_REG, OP_VOID);
  trace_input ("loadb", OP_RP_BASE_DISP4, OP_REG, OP_VOID);
  tmp = (RB (addr));
  tmp = (RB (addr));
  SET_GPR (OP[2], (a | tmp));
  SET_GPR (OP[2], (a | tmp));
  trace_output_16 (tmp);
  trace_output_16 (tmp);
}
}
 
 
/* loadb.  */
/* loadb.  */
void
void
OP_BE_8 ()
OP_BE_8 ()
{
{
  /* loadb [Rindex]disp0(RPbasex) REG
  /* loadb [Rindex]disp0(RPbasex) REG
   * ADDR = Rpbasex + Rindex
   * ADDR = Rpbasex + Rindex
   * REGR = [ADDR]   */
   * REGR = [ADDR]   */
 
 
  uint32 addr;
  uint32 addr;
  uint16 tmp, a = (GPR (OP[3])) & 0xFF00;
  uint16 tmp, a = (GPR (OP[3])) & 0xFF00;
  trace_input ("loadb", OP_RP_INDEX_DISP0, OP_REG, OP_VOID);
  trace_input ("loadb", OP_RP_INDEX_DISP0, OP_REG, OP_VOID);
 
 
  addr =  (GPR32 (OP[2])) + OP[1];
  addr =  (GPR32 (OP[2])) + OP[1];
 
 
  if (OP[0] == 0)
  if (OP[0] == 0)
     addr = (GPR32 (12)) + addr;
     addr = (GPR32 (12)) + addr;
  else
  else
     addr = (GPR32 (13)) + addr;
     addr = (GPR32 (13)) + addr;
 
 
  tmp = (RB (addr));
  tmp = (RB (addr));
  SET_GPR (OP[3], (a | tmp));
  SET_GPR (OP[3], (a | tmp));
  trace_output_16 (tmp);
  trace_output_16 (tmp);
}
}
 
 
/* loadb.  */
/* loadb.  */
void
void
OP_219_A ()
OP_219_A ()
{
{
  /* loadb [Rindex]disp14(RPbasex) REG
  /* loadb [Rindex]disp14(RPbasex) REG
   * ADDR = Rpbasex + Rindex + zext24(disp14)
   * ADDR = Rpbasex + Rindex + zext24(disp14)
   * REGR = [ADDR]   */
   * REGR = [ADDR]   */
 
 
  uint32 addr;
  uint32 addr;
  uint16 tmp, a = (GPR (OP[3])) & 0xFF00;
  uint16 tmp, a = (GPR (OP[3])) & 0xFF00;
 
 
  addr =  (GPR32 (OP[2])) + OP[1];
  addr =  (GPR32 (OP[2])) + OP[1];
 
 
  if (OP[0] == 0)
  if (OP[0] == 0)
     addr = (GPR32 (12)) + addr;
     addr = (GPR32 (12)) + addr;
  else
  else
     addr = (GPR32 (13)) + addr;
     addr = (GPR32 (13)) + addr;
 
 
  trace_input ("loadb", OP_RP_INDEX_DISP14, OP_REG, OP_VOID);
  trace_input ("loadb", OP_RP_INDEX_DISP14, OP_REG, OP_VOID);
  tmp = (RB (addr));
  tmp = (RB (addr));
  SET_GPR (OP[3], (a | tmp));
  SET_GPR (OP[3], (a | tmp));
  trace_output_16 (tmp);
  trace_output_16 (tmp);
}
}
 
 
 
 
/* loadb.  */
/* loadb.  */
void
void
OP_184_14 ()
OP_184_14 ()
{
{
  /* loadb DISPE20(REG)   REG
  /* loadb DISPE20(REG)   REG
   * zext24(Rbase) + zext24(dispe20)
   * zext24(Rbase) + zext24(dispe20)
   * REG = [ADDR]   */
   * REG = [ADDR]   */
 
 
  uint16 tmp,a = (GPR (OP[2])) & 0xFF00;
  uint16 tmp,a = (GPR (OP[2])) & 0xFF00;
  uint32 addr = OP[0] + (GPR (OP[1]));
  uint32 addr = OP[0] + (GPR (OP[1]));
  trace_input ("loadb", OP_R_BASE_DISPE20, OP_REG, OP_VOID);
  trace_input ("loadb", OP_R_BASE_DISPE20, OP_REG, OP_VOID);
  tmp = (RB (addr));
  tmp = (RB (addr));
  SET_GPR (OP[2], (a | tmp));
  SET_GPR (OP[2], (a | tmp));
  trace_output_16 (tmp);
  trace_output_16 (tmp);
}
}
 
 
/* loadb.  */
/* loadb.  */
void
void
OP_124_14 ()
OP_124_14 ()
{
{
  /* loadb DISP20(REG)   REG
  /* loadb DISP20(REG)   REG
   * ADDR = zext24(Rbase) + zext24(disp20)
   * ADDR = zext24(Rbase) + zext24(disp20)
   * REG = [ADDR]                          */
   * REG = [ADDR]                          */
 
 
  uint16 tmp,a = (GPR (OP[2])) & 0xFF00;
  uint16 tmp,a = (GPR (OP[2])) & 0xFF00;
  uint32 addr = OP[0] + (GPR (OP[1]));
  uint32 addr = OP[0] + (GPR (OP[1]));
  trace_input ("loadb", OP_R_BASE_DISP20, OP_REG, OP_VOID);
  trace_input ("loadb", OP_R_BASE_DISP20, OP_REG, OP_VOID);
  tmp = (RB (addr));
  tmp = (RB (addr));
  SET_GPR (OP[2], (a | tmp));
  SET_GPR (OP[2], (a | tmp));
  trace_output_16 (tmp);
  trace_output_16 (tmp);
}
}
 
 
/* loadb.  */
/* loadb.  */
void
void
OP_BF_8 ()
OP_BF_8 ()
{
{
  /* loadb disp16(REGP)   REG
  /* loadb disp16(REGP)   REG
   * ADDR = RPbase + zext24(disp16)
   * ADDR = RPbase + zext24(disp16)
   * REGR = [ADDR]   */
   * REGR = [ADDR]   */
 
 
  uint16 tmp,a = (GPR (OP[2])) & 0xFF00;
  uint16 tmp,a = (GPR (OP[2])) & 0xFF00;
  uint32 addr = (GPR32 (OP[1])) + OP[0];
  uint32 addr = (GPR32 (OP[1])) + OP[0];
  trace_input ("loadb", OP_RP_BASE_DISP16, OP_REG, OP_VOID);
  trace_input ("loadb", OP_RP_BASE_DISP16, OP_REG, OP_VOID);
  tmp = (RB (addr));
  tmp = (RB (addr));
  SET_GPR (OP[2], (a | tmp));
  SET_GPR (OP[2], (a | tmp));
  trace_output_16 (tmp);
  trace_output_16 (tmp);
}
}
 
 
/* loadb.  */
/* loadb.  */
void
void
OP_125_14 ()
OP_125_14 ()
{
{
  /* loadb disp20(REGP)   REG
  /* loadb disp20(REGP)   REG
   * ADDR = RPbase + zext24(disp20)
   * ADDR = RPbase + zext24(disp20)
   * REGR = [ADDR]   */
   * REGR = [ADDR]   */
  uint16 tmp,a = (GPR (OP[2])) & 0xFF00;
  uint16 tmp,a = (GPR (OP[2])) & 0xFF00;
  uint32 addr =  (GPR32 (OP[1])) + OP[0];
  uint32 addr =  (GPR32 (OP[1])) + OP[0];
  trace_input ("loadb", OP_RP_BASE_DISP20, OP_REG, OP_VOID);
  trace_input ("loadb", OP_RP_BASE_DISP20, OP_REG, OP_VOID);
  tmp = (RB (addr));
  tmp = (RB (addr));
  SET_GPR (OP[2], (a | tmp));
  SET_GPR (OP[2], (a | tmp));
  trace_output_16 (tmp);
  trace_output_16 (tmp);
}
}
 
 
 
 
/* loadb.  */
/* loadb.  */
void
void
OP_185_14 ()
OP_185_14 ()
{
{
  /* loadb -disp20(REGP)   REG
  /* loadb -disp20(REGP)   REG
   * ADDR = RPbase + zext24(-disp20)
   * ADDR = RPbase + zext24(-disp20)
   * REGR = [ADDR]   */
   * REGR = [ADDR]   */
  uint16 tmp,a = (GPR (OP[2])) & 0xFF00;
  uint16 tmp,a = (GPR (OP[2])) & 0xFF00;
  uint32 addr =  (GPR32 (OP[1])) + OP[1];
  uint32 addr =  (GPR32 (OP[1])) + OP[1];
  trace_input ("loadb", OP_RP_BASE_DISPE20, OP_REG, OP_VOID);
  trace_input ("loadb", OP_RP_BASE_DISPE20, OP_REG, OP_VOID);
  tmp = (RB (addr));
  tmp = (RB (addr));
  SET_GPR (OP[2], (a | tmp));
  SET_GPR (OP[2], (a | tmp));
  trace_output_16 (tmp);
  trace_output_16 (tmp);
}
}
 
 
/* loadb.  */
/* loadb.  */
void
void
OP_126_14 ()
OP_126_14 ()
{
{
  /* loadb [Rindex]disp20(RPbasexb) REG
  /* loadb [Rindex]disp20(RPbasexb) REG
   * ADDR = RPbasex + Rindex + zext24(disp20)
   * ADDR = RPbasex + Rindex + zext24(disp20)
   * REGR = [ADDR]   */
   * REGR = [ADDR]   */
 
 
  uint32 addr;
  uint32 addr;
  uint16 tmp, a = (GPR (OP[3])) & 0xFF00;
  uint16 tmp, a = (GPR (OP[3])) & 0xFF00;
  trace_input ("loadb", OP_RP_INDEX_DISP20, OP_REG, OP_VOID);
  trace_input ("loadb", OP_RP_INDEX_DISP20, OP_REG, OP_VOID);
 
 
  addr = (GPR32 (OP[2])) + OP[1];
  addr = (GPR32 (OP[2])) + OP[1];
 
 
  if (OP[0] == 0)
  if (OP[0] == 0)
     addr = (GPR32 (12)) + addr;
     addr = (GPR32 (12)) + addr;
  else
  else
     addr = (GPR32 (13)) + addr;
     addr = (GPR32 (13)) + addr;
 
 
  tmp = (RB (addr));
  tmp = (RB (addr));
  SET_GPR (OP[3], (a | tmp));
  SET_GPR (OP[3], (a | tmp));
  trace_output_16 (tmp);
  trace_output_16 (tmp);
}
}
 
 
 
 
/* loadw.  */
/* loadw.  */
void
void
OP_89_8 ()
OP_89_8 ()
{
{
  /* loadw ABS20, REG
  /* loadw ABS20, REG
   * ADDR = zext24(abs20) | remap
   * ADDR = zext24(abs20) | remap
   * REGR = [ADDR]
   * REGR = [ADDR]
   * NOTE: remap is
   * NOTE: remap is
   * If (abs20 > 0xEFFFF) the resulting address is logically ORed
   * If (abs20 > 0xEFFFF) the resulting address is logically ORed
   * with 0xF00000 i.e. addresses from 1M-64k to 1M are re-mapped
   * with 0xF00000 i.e. addresses from 1M-64k to 1M are re-mapped
   * by the core to 16M-64k to 16M. */
   * by the core to 16M-64k to 16M. */
 
 
  uint16 tmp;
  uint16 tmp;
  uint32 addr = OP[0];
  uint32 addr = OP[0];
  trace_input ("loadw", OP_ABS20, OP_REG, OP_VOID);
  trace_input ("loadw", OP_ABS20, OP_REG, OP_VOID);
  if (addr > 0xEFFFF) addr |= 0xF00000;
  if (addr > 0xEFFFF) addr |= 0xF00000;
  tmp = (RW (addr));
  tmp = (RW (addr));
  SET_GPR (OP[1], tmp);
  SET_GPR (OP[1], tmp);
  trace_output_16 (tmp);
  trace_output_16 (tmp);
}
}
 
 
 
 
/* loadw.  */
/* loadw.  */
void
void
OP_12F_14 ()
OP_12F_14 ()
{
{
  /* loadw ABS24, REG
  /* loadw ABS24, REG
   * ADDR = abs24
   * ADDR = abs24
   * REGR = [ADDR]  */
   * REGR = [ADDR]  */
  uint16 tmp;
  uint16 tmp;
  uint32 addr = OP[0];
  uint32 addr = OP[0];
  trace_input ("loadw", OP_ABS24, OP_REG, OP_VOID);
  trace_input ("loadw", OP_ABS24, OP_REG, OP_VOID);
  tmp = (RW (addr));
  tmp = (RW (addr));
  SET_GPR (OP[1], tmp);
  SET_GPR (OP[1], tmp);
  trace_output_16 (tmp);
  trace_output_16 (tmp);
}
}
 
 
/* loadw.  */
/* loadw.  */
void
void
OP_47_7 ()
OP_47_7 ()
{
{
  /* loadw [Rindex]ABS20   REG
  /* loadw [Rindex]ABS20   REG
   * ADDR = Rindex + zext24(disp20)
   * ADDR = Rindex + zext24(disp20)
   * REGR = [ADDR]  */
   * REGR = [ADDR]  */
 
 
  uint32 addr;
  uint32 addr;
  uint16 tmp;
  uint16 tmp;
  trace_input ("loadw", OP_R_INDEX8_ABS20, OP_REG, OP_VOID);
  trace_input ("loadw", OP_R_INDEX8_ABS20, OP_REG, OP_VOID);
 
 
  if (OP[0] == 0)
  if (OP[0] == 0)
     addr = (GPR32 (12)) + OP[1];
     addr = (GPR32 (12)) + OP[1];
  else
  else
     addr = (GPR32 (13)) + OP[1];
     addr = (GPR32 (13)) + OP[1];
 
 
  tmp = (RW (addr));
  tmp = (RW (addr));
  SET_GPR (OP[2], tmp);
  SET_GPR (OP[2], tmp);
  trace_output_16 (tmp);
  trace_output_16 (tmp);
}
}
 
 
 
 
/* loadw.  */
/* loadw.  */
void
void
OP_9_4 ()
OP_9_4 ()
{
{
  /* loadw DIPS4(REGP)   REGP
  /* loadw DIPS4(REGP)   REGP
   * ADDR = RPBASE + zext24(DISP4)
   * ADDR = RPBASE + zext24(DISP4)
   * REGP = [ADDR].  */
   * REGP = [ADDR].  */
  uint16 tmp;
  uint16 tmp;
  uint32 addr, a;
  uint32 addr, a;
  trace_input ("loadw", OP_RP_BASE_DISP4, OP_REG, OP_VOID);
  trace_input ("loadw", OP_RP_BASE_DISP4, OP_REG, OP_VOID);
  addr = (GPR32 (OP[1])) + OP[0];
  addr = (GPR32 (OP[1])) + OP[0];
  tmp =  (RW (addr));
  tmp =  (RW (addr));
  if (OP[2] > 11)
  if (OP[2] > 11)
   {
   {
    a = (GPR32 (OP[2])) & 0xffff0000;
    a = (GPR32 (OP[2])) & 0xffff0000;
    SET_GPR32 (OP[2], (a | tmp));
    SET_GPR32 (OP[2], (a | tmp));
   }
   }
  else
  else
    SET_GPR (OP[2], tmp);
    SET_GPR (OP[2], tmp);
 
 
  trace_output_16 (tmp);
  trace_output_16 (tmp);
}
}
 
 
 
 
/* loadw.  */
/* loadw.  */
void
void
OP_9E_8 ()
OP_9E_8 ()
{
{
  /* loadw [Rindex]disp0(RPbasex) REG
  /* loadw [Rindex]disp0(RPbasex) REG
   * ADDR = Rpbasex + Rindex
   * ADDR = Rpbasex + Rindex
   * REGR = [ADDR]   */
   * REGR = [ADDR]   */
 
 
  uint32 addr;
  uint32 addr;
  uint16 tmp;
  uint16 tmp;
  trace_input ("loadw", OP_RP_INDEX_DISP0, OP_REG, OP_VOID);
  trace_input ("loadw", OP_RP_INDEX_DISP0, OP_REG, OP_VOID);
 
 
  addr = (GPR32 (OP[2])) + OP[1];
  addr = (GPR32 (OP[2])) + OP[1];
 
 
  if (OP[0] == 0)
  if (OP[0] == 0)
    addr = (GPR32 (12)) + addr;
    addr = (GPR32 (12)) + addr;
  else
  else
    addr = (GPR32 (13)) + addr;
    addr = (GPR32 (13)) + addr;
 
 
  tmp = RW (addr);
  tmp = RW (addr);
  SET_GPR (OP[3], tmp);
  SET_GPR (OP[3], tmp);
  trace_output_16 (tmp);
  trace_output_16 (tmp);
}
}
 
 
 
 
/* loadw.  */
/* loadw.  */
void
void
OP_21B_A ()
OP_21B_A ()
{
{
  /* loadw [Rindex]disp14(RPbasex) REG
  /* loadw [Rindex]disp14(RPbasex) REG
   * ADDR = Rpbasex + Rindex + zext24(disp14)
   * ADDR = Rpbasex + Rindex + zext24(disp14)
   * REGR = [ADDR]   */
   * REGR = [ADDR]   */
 
 
  uint32 addr;
  uint32 addr;
  uint16 tmp;
  uint16 tmp;
  trace_input ("loadw", OP_RP_INDEX_DISP14, OP_REG, OP_VOID);
  trace_input ("loadw", OP_RP_INDEX_DISP14, OP_REG, OP_VOID);
  addr =  (GPR32 (OP[2])) + OP[1];
  addr =  (GPR32 (OP[2])) + OP[1];
 
 
  if (OP[0] == 0)
  if (OP[0] == 0)
     addr = (GPR32 (12)) + addr;
     addr = (GPR32 (12)) + addr;
  else
  else
     addr = (GPR32 (13)) + addr;
     addr = (GPR32 (13)) + addr;
 
 
  tmp = (RW (addr));
  tmp = (RW (addr));
  SET_GPR (OP[3], tmp);
  SET_GPR (OP[3], tmp);
  trace_output_16 (tmp);
  trace_output_16 (tmp);
}
}
 
 
/* loadw.  */
/* loadw.  */
void
void
OP_18C_14 ()
OP_18C_14 ()
{
{
  /* loadw dispe20(REG)   REGP
  /* loadw dispe20(REG)   REGP
   * REGP = [DISPE20+[REG]]   */
   * REGP = [DISPE20+[REG]]   */
 
 
  uint16 tmp;
  uint16 tmp;
  uint32 addr, a;
  uint32 addr, a;
  trace_input ("loadw", OP_R_BASE_DISPE20, OP_REGP, OP_VOID);
  trace_input ("loadw", OP_R_BASE_DISPE20, OP_REGP, OP_VOID);
  addr = OP[0] + (GPR (OP[1]));
  addr = OP[0] + (GPR (OP[1]));
  tmp = (RW (addr));
  tmp = (RW (addr));
  if (OP[2] > 11)
  if (OP[2] > 11)
   {
   {
    a = (GPR32 (OP[2])) & 0xffff0000;
    a = (GPR32 (OP[2])) & 0xffff0000;
    SET_GPR32 (OP[2], (a | tmp));
    SET_GPR32 (OP[2], (a | tmp));
   }
   }
  else
  else
    SET_GPR (OP[2], tmp);
    SET_GPR (OP[2], tmp);
 
 
  trace_output_16 (tmp);
  trace_output_16 (tmp);
}
}
 
 
 
 
/* loadw.  */
/* loadw.  */
void
void
OP_12C_14 ()
OP_12C_14 ()
{
{
  /* loadw DISP20(REG)   REGP
  /* loadw DISP20(REG)   REGP
   * ADDR = zext24(Rbase) + zext24(disp20)
   * ADDR = zext24(Rbase) + zext24(disp20)
   * REGP = [ADDR]                          */
   * REGP = [ADDR]                          */
 
 
  uint16 tmp;
  uint16 tmp;
  uint32 addr, a;
  uint32 addr, a;
  trace_input ("loadw", OP_R_BASE_DISP20, OP_REGP, OP_VOID);
  trace_input ("loadw", OP_R_BASE_DISP20, OP_REGP, OP_VOID);
  addr = OP[0] + (GPR (OP[1]));
  addr = OP[0] + (GPR (OP[1]));
  tmp = (RW (addr));
  tmp = (RW (addr));
  if (OP[2] > 11)
  if (OP[2] > 11)
   {
   {
    a = (GPR32 (OP[2])) & 0xffff0000;
    a = (GPR32 (OP[2])) & 0xffff0000;
    SET_GPR32 (OP[2], (a | tmp));
    SET_GPR32 (OP[2], (a | tmp));
   }
   }
  else
  else
    SET_GPR (OP[2], tmp);
    SET_GPR (OP[2], tmp);
 
 
  trace_output_16 (tmp);
  trace_output_16 (tmp);
}
}
 
 
/* loadw.  */
/* loadw.  */
void
void
OP_9F_8 ()
OP_9F_8 ()
{
{
  /* loadw disp16(REGP)   REGP
  /* loadw disp16(REGP)   REGP
   * ADDR = RPbase + zext24(disp16)
   * ADDR = RPbase + zext24(disp16)
   * REGP = [ADDR]   */
   * REGP = [ADDR]   */
  uint16 tmp;
  uint16 tmp;
  uint32 addr, a;
  uint32 addr, a;
  trace_input ("loadw", OP_RP_BASE_DISP16, OP_REGP, OP_VOID);
  trace_input ("loadw", OP_RP_BASE_DISP16, OP_REGP, OP_VOID);
  addr = (GPR32 (OP[1])) + OP[0];
  addr = (GPR32 (OP[1])) + OP[0];
  tmp = (RW (addr));
  tmp = (RW (addr));
  if (OP[2] > 11)
  if (OP[2] > 11)
   {
   {
    a = (GPR32 (OP[2])) & 0xffff0000;
    a = (GPR32 (OP[2])) & 0xffff0000;
    SET_GPR32 (OP[2], (a | tmp));
    SET_GPR32 (OP[2], (a | tmp));
   }
   }
  else
  else
    SET_GPR (OP[2], tmp);
    SET_GPR (OP[2], tmp);
 
 
  trace_output_16 (tmp);
  trace_output_16 (tmp);
}
}
 
 
/* loadw.  */
/* loadw.  */
void
void
OP_12D_14 ()
OP_12D_14 ()
{
{
  /* loadw disp20(REGP)   REGP
  /* loadw disp20(REGP)   REGP
   * ADDR = RPbase + zext24(disp20)
   * ADDR = RPbase + zext24(disp20)
   * REGP = [ADDR]   */
   * REGP = [ADDR]   */
  uint16 tmp;
  uint16 tmp;
  uint32 addr, a;
  uint32 addr, a;
  trace_input ("loadw", OP_RP_BASE_DISP20, OP_REG, OP_VOID);
  trace_input ("loadw", OP_RP_BASE_DISP20, OP_REG, OP_VOID);
  addr = (GPR32 (OP[1])) + OP[0];
  addr = (GPR32 (OP[1])) + OP[0];
  tmp = (RW (addr));
  tmp = (RW (addr));
  if (OP[2] > 11)
  if (OP[2] > 11)
   {
   {
    a = (GPR32 (OP[2])) & 0xffff0000;
    a = (GPR32 (OP[2])) & 0xffff0000;
    SET_GPR32 (OP[2], (a | tmp));
    SET_GPR32 (OP[2], (a | tmp));
   }
   }
  else
  else
    SET_GPR (OP[2], tmp);
    SET_GPR (OP[2], tmp);
 
 
  trace_output_16 (tmp);
  trace_output_16 (tmp);
}
}
 
 
/* loadw.  */
/* loadw.  */
void
void
OP_18D_14 ()
OP_18D_14 ()
{
{
  /* loadw -disp20(REGP)   REG
  /* loadw -disp20(REGP)   REG
   * ADDR = RPbase + zext24(-disp20)
   * ADDR = RPbase + zext24(-disp20)
   * REGR = [ADDR]   */
   * REGR = [ADDR]   */
 
 
  uint16 tmp;
  uint16 tmp;
  uint32 addr, a;
  uint32 addr, a;
  trace_input ("loadw", OP_RP_BASE_DISPE20, OP_REG, OP_VOID);
  trace_input ("loadw", OP_RP_BASE_DISPE20, OP_REG, OP_VOID);
  addr = (GPR32 (OP[1])) + OP[0];
  addr = (GPR32 (OP[1])) + OP[0];
  tmp = (RB (addr));
  tmp = (RB (addr));
  if (OP[2] > 11)
  if (OP[2] > 11)
   {
   {
    a = (GPR32 (OP[2])) & 0xffff0000;
    a = (GPR32 (OP[2])) & 0xffff0000;
    SET_GPR32 (OP[2], (a | tmp));
    SET_GPR32 (OP[2], (a | tmp));
   }
   }
  else
  else
    SET_GPR (OP[2], tmp);
    SET_GPR (OP[2], tmp);
 
 
  trace_output_16 (tmp);
  trace_output_16 (tmp);
}
}
 
 
 
 
/* loadw.  */
/* loadw.  */
void
void
OP_12E_14 ()
OP_12E_14 ()
{
{
  /* loadw [Rindex]disp20(RPbasexb) REG
  /* loadw [Rindex]disp20(RPbasexb) REG
   * ADDR = RPbasex + Rindex + zext24(disp20)
   * ADDR = RPbasex + Rindex + zext24(disp20)
   * REGR = [ADDR]   */
   * REGR = [ADDR]   */
 
 
  uint32 addr;
  uint32 addr;
  uint16 tmp;
  uint16 tmp;
  trace_input ("loadw", OP_RP_INDEX_DISP20, OP_REG, OP_VOID);
  trace_input ("loadw", OP_RP_INDEX_DISP20, OP_REG, OP_VOID);
 
 
  if (OP[0] == 0)
  if (OP[0] == 0)
     addr = (GPR32 (12)) + OP[1] + (GPR32 (OP[2]));
     addr = (GPR32 (12)) + OP[1] + (GPR32 (OP[2]));
  else
  else
     addr = (GPR32 (13)) + OP[1] + (GPR32 (OP[2]));
     addr = (GPR32 (13)) + OP[1] + (GPR32 (OP[2]));
 
 
  tmp = (RW (addr));
  tmp = (RW (addr));
  SET_GPR (OP[3], tmp);
  SET_GPR (OP[3], tmp);
  trace_output_16 (tmp);
  trace_output_16 (tmp);
}
}
 
 
 
 
/* loadd.  */
/* loadd.  */
void
void
OP_87_8 ()
OP_87_8 ()
{
{
  /* loadd ABS20, REGP
  /* loadd ABS20, REGP
   * ADDR = zext24(abs20) | remap
   * ADDR = zext24(abs20) | remap
   * REGP = [ADDR]
   * REGP = [ADDR]
   * NOTE: remap is
   * NOTE: remap is
   * If (abs20 > 0xEFFFF) the resulting address is logically ORed
   * If (abs20 > 0xEFFFF) the resulting address is logically ORed
   * with 0xF00000 i.e. addresses from 1M-64k to 1M are re-mapped
   * with 0xF00000 i.e. addresses from 1M-64k to 1M are re-mapped
   * by the core to 16M-64k to 16M. */
   * by the core to 16M-64k to 16M. */
 
 
  uint32 addr, tmp;
  uint32 addr, tmp;
  addr = OP[0];
  addr = OP[0];
  trace_input ("loadd", OP_ABS20, OP_REGP, OP_VOID);
  trace_input ("loadd", OP_ABS20, OP_REGP, OP_VOID);
  if (addr > 0xEFFFF) addr |= 0xF00000;
  if (addr > 0xEFFFF) addr |= 0xF00000;
  tmp = RLW (addr);
  tmp = RLW (addr);
  tmp = ((tmp << 16) & 0xffff)| ((tmp >> 16) & 0xffff);
  tmp = ((tmp << 16) & 0xffff)| ((tmp >> 16) & 0xffff);
  SET_GPR32 (OP[1], tmp);
  SET_GPR32 (OP[1], tmp);
  trace_output_32 (tmp);
  trace_output_32 (tmp);
}
}
 
 
/* loadd.  */
/* loadd.  */
void
void
OP_12B_14 ()
OP_12B_14 ()
{
{
  /* loadd ABS24, REGP
  /* loadd ABS24, REGP
   * ADDR = abs24
   * ADDR = abs24
   * REGP = [ADDR]  */
   * REGP = [ADDR]  */
 
 
  uint32 addr = OP[0];
  uint32 addr = OP[0];
  uint32 tmp;
  uint32 tmp;
  trace_input ("loadd", OP_ABS24, OP_REGP, OP_VOID);
  trace_input ("loadd", OP_ABS24, OP_REGP, OP_VOID);
  tmp = RLW (addr);
  tmp = RLW (addr);
  tmp = ((tmp & 0xffff) << 16)| ((tmp >> 16) & 0xffff);
  tmp = ((tmp & 0xffff) << 16)| ((tmp >> 16) & 0xffff);
  SET_GPR32 (OP[1],tmp);
  SET_GPR32 (OP[1],tmp);
  trace_output_32 (tmp);
  trace_output_32 (tmp);
}
}
 
 
 
 
/* loadd.  */
/* loadd.  */
void
void
OP_46_7 ()
OP_46_7 ()
{
{
  /* loadd [Rindex]ABS20   REGP
  /* loadd [Rindex]ABS20   REGP
   * ADDR = Rindex + zext24(disp20)
   * ADDR = Rindex + zext24(disp20)
   * REGP = [ADDR]  */
   * REGP = [ADDR]  */
 
 
  uint32 addr, tmp;
  uint32 addr, tmp;
  trace_input ("loadd", OP_R_INDEX8_ABS20, OP_REGP, OP_VOID);
  trace_input ("loadd", OP_R_INDEX8_ABS20, OP_REGP, OP_VOID);
 
 
  if (OP[0] == 0)
  if (OP[0] == 0)
     addr = (GPR32 (12)) + OP[1];
     addr = (GPR32 (12)) + OP[1];
  else
  else
     addr = (GPR32 (13)) + OP[1];
     addr = (GPR32 (13)) + OP[1];
 
 
  tmp = RLW (addr);
  tmp = RLW (addr);
  tmp = ((tmp & 0xffff) << 16)| ((tmp >> 16) & 0xffff);
  tmp = ((tmp & 0xffff) << 16)| ((tmp >> 16) & 0xffff);
  SET_GPR32 (OP[2], tmp);
  SET_GPR32 (OP[2], tmp);
  trace_output_32 (tmp);
  trace_output_32 (tmp);
}
}
 
 
 
 
/* loadd.  */
/* loadd.  */
void
void
OP_A_4 ()
OP_A_4 ()
{
{
  /* loadd dips4(regp)   REGP
  /* loadd dips4(regp)   REGP
   * ADDR = Rpbase + zext24(disp4)
   * ADDR = Rpbase + zext24(disp4)
   * REGP = [ADDR] */
   * REGP = [ADDR] */
 
 
  uint32 tmp, addr = (GPR32 (OP[1])) + OP[0];
  uint32 tmp, addr = (GPR32 (OP[1])) + OP[0];
  trace_input ("loadd", OP_RP_BASE_DISP4, OP_REGP, OP_VOID);
  trace_input ("loadd", OP_RP_BASE_DISP4, OP_REGP, OP_VOID);
  tmp = RLW (addr);
  tmp = RLW (addr);
  tmp = ((tmp & 0xffff) << 16)| ((tmp >> 16) & 0xffff);
  tmp = ((tmp & 0xffff) << 16)| ((tmp >> 16) & 0xffff);
  SET_GPR32 (OP[2], tmp);
  SET_GPR32 (OP[2], tmp);
  trace_output_32 (tmp);
  trace_output_32 (tmp);
}
}
 
 
 
 
/* loadd.  */
/* loadd.  */
void
void
OP_AE_8 ()
OP_AE_8 ()
{
{
  /* loadd [Rindex]disp0(RPbasex) REGP
  /* loadd [Rindex]disp0(RPbasex) REGP
   * ADDR = Rpbasex + Rindex
   * ADDR = Rpbasex + Rindex
   * REGP = [ADDR]   */
   * REGP = [ADDR]   */
 
 
  uint32 addr, tmp;
  uint32 addr, tmp;
  trace_input ("loadd", OP_RP_INDEX_DISP0, OP_REGP, OP_VOID);
  trace_input ("loadd", OP_RP_INDEX_DISP0, OP_REGP, OP_VOID);
 
 
  if (OP[0] == 0)
  if (OP[0] == 0)
     addr = (GPR32 (12)) + (GPR32 (OP[2])) + OP[1];
     addr = (GPR32 (12)) + (GPR32 (OP[2])) + OP[1];
  else
  else
     addr = (GPR32 (13)) + (GPR32 (OP[2])) + OP[1];
     addr = (GPR32 (13)) + (GPR32 (OP[2])) + OP[1];
 
 
  tmp = RLW (addr);
  tmp = RLW (addr);
  tmp = ((tmp & 0xffff) << 16)| ((tmp >> 16) & 0xffff);
  tmp = ((tmp & 0xffff) << 16)| ((tmp >> 16) & 0xffff);
  SET_GPR32 (OP[3], tmp);
  SET_GPR32 (OP[3], tmp);
  trace_output_32 (tmp);
  trace_output_32 (tmp);
}
}
 
 
 
 
/* loadd.  */
/* loadd.  */
void
void
OP_21A_A ()
OP_21A_A ()
{
{
  /* loadd [Rindex]disp14(RPbasex) REGP
  /* loadd [Rindex]disp14(RPbasex) REGP
   * ADDR = Rpbasex + Rindex + zext24(disp14)
   * ADDR = Rpbasex + Rindex + zext24(disp14)
   * REGR = [ADDR]   */
   * REGR = [ADDR]   */
 
 
  uint32 addr, tmp;
  uint32 addr, tmp;
  trace_input ("loadd", OP_RP_INDEX_DISP14, OP_REGP, OP_VOID);
  trace_input ("loadd", OP_RP_INDEX_DISP14, OP_REGP, OP_VOID);
 
 
  if (OP[0] == 0)
  if (OP[0] == 0)
     addr = (GPR32 (12)) + OP[1] + (GPR32 (OP[2]));
     addr = (GPR32 (12)) + OP[1] + (GPR32 (OP[2]));
  else
  else
     addr = (GPR32 (13)) + OP[1] + (GPR32 (OP[2]));
     addr = (GPR32 (13)) + OP[1] + (GPR32 (OP[2]));
 
 
  tmp = RLW (addr);
  tmp = RLW (addr);
  tmp = ((tmp & 0xffff) << 16)| ((tmp >> 16) & 0xffff);
  tmp = ((tmp & 0xffff) << 16)| ((tmp >> 16) & 0xffff);
  SET_GPR (OP[3],tmp);
  SET_GPR (OP[3],tmp);
  trace_output_32 (tmp);
  trace_output_32 (tmp);
}
}
 
 
 
 
/* loadd.  */
/* loadd.  */
void
void
OP_188_14 ()
OP_188_14 ()
{
{
  /* loadd dispe20(REG)   REG
  /* loadd dispe20(REG)   REG
   * zext24(Rbase) + zext24(dispe20)
   * zext24(Rbase) + zext24(dispe20)
   * REG = [ADDR]   */
   * REG = [ADDR]   */
 
 
  uint32 tmp, addr = OP[0] + (GPR (OP[1]));
  uint32 tmp, addr = OP[0] + (GPR (OP[1]));
  trace_input ("loadd", OP_R_BASE_DISPE20, OP_REGP, OP_VOID);
  trace_input ("loadd", OP_R_BASE_DISPE20, OP_REGP, OP_VOID);
  tmp = RLW (addr);
  tmp = RLW (addr);
  tmp = ((tmp & 0xffff) << 16)| ((tmp >> 16) & 0xffff);
  tmp = ((tmp & 0xffff) << 16)| ((tmp >> 16) & 0xffff);
  SET_GPR32 (OP[2], tmp);
  SET_GPR32 (OP[2], tmp);
  trace_output_32 (tmp);
  trace_output_32 (tmp);
}
}
 
 
 
 
/* loadd.  */
/* loadd.  */
void
void
OP_128_14 ()
OP_128_14 ()
{
{
  /* loadd DISP20(REG)   REG
  /* loadd DISP20(REG)   REG
   * ADDR = zext24(Rbase) + zext24(disp20)
   * ADDR = zext24(Rbase) + zext24(disp20)
   * REG = [ADDR]                          */
   * REG = [ADDR]                          */
 
 
  uint32 tmp, addr = OP[0] + (GPR (OP[1]));
  uint32 tmp, addr = OP[0] + (GPR (OP[1]));
  trace_input ("loadd", OP_R_BASE_DISP20, OP_REGP, OP_VOID);
  trace_input ("loadd", OP_R_BASE_DISP20, OP_REGP, OP_VOID);
  tmp = RLW (addr);
  tmp = RLW (addr);
  tmp = ((tmp & 0xffff) << 16)| ((tmp >> 16) & 0xffff);
  tmp = ((tmp & 0xffff) << 16)| ((tmp >> 16) & 0xffff);
  SET_GPR32 (OP[2], tmp);
  SET_GPR32 (OP[2], tmp);
  trace_output_32 (tmp);
  trace_output_32 (tmp);
}
}
 
 
/* loadd.  */
/* loadd.  */
void
void
OP_AF_8 ()
OP_AF_8 ()
{
{
  /* loadd disp16(REGP)   REGP
  /* loadd disp16(REGP)   REGP
   * ADDR = RPbase + zext24(disp16)
   * ADDR = RPbase + zext24(disp16)
   * REGR = [ADDR]   */
   * REGR = [ADDR]   */
  uint32 tmp, addr = OP[0] + (GPR32 (OP[1]));
  uint32 tmp, addr = OP[0] + (GPR32 (OP[1]));
  trace_input ("loadd", OP_RP_BASE_DISP16, OP_REGP, OP_VOID);
  trace_input ("loadd", OP_RP_BASE_DISP16, OP_REGP, OP_VOID);
  tmp = RLW (addr);
  tmp = RLW (addr);
  tmp = ((tmp & 0xffff) << 16)| ((tmp >> 16) & 0xffff);
  tmp = ((tmp & 0xffff) << 16)| ((tmp >> 16) & 0xffff);
  SET_GPR32 (OP[2], tmp);
  SET_GPR32 (OP[2], tmp);
  trace_output_32 (tmp);
  trace_output_32 (tmp);
}
}
 
 
 
 
/* loadd.  */
/* loadd.  */
void
void
OP_129_14 ()
OP_129_14 ()
{
{
  /* loadd disp20(REGP)   REGP
  /* loadd disp20(REGP)   REGP
   * ADDR = RPbase + zext24(disp20)
   * ADDR = RPbase + zext24(disp20)
   * REGP = [ADDR]   */
   * REGP = [ADDR]   */
  uint32 tmp, addr = OP[0] + (GPR32 (OP[1]));
  uint32 tmp, addr = OP[0] + (GPR32 (OP[1]));
  trace_input ("loadd", OP_RP_BASE_DISP20, OP_REGP, OP_VOID);
  trace_input ("loadd", OP_RP_BASE_DISP20, OP_REGP, OP_VOID);
  tmp = RLW (addr);
  tmp = RLW (addr);
  tmp = ((tmp & 0xffff) << 16)| ((tmp >> 16) & 0xffff);
  tmp = ((tmp & 0xffff) << 16)| ((tmp >> 16) & 0xffff);
  SET_GPR32 (OP[2], tmp);
  SET_GPR32 (OP[2], tmp);
  trace_output_32 (tmp);
  trace_output_32 (tmp);
}
}
 
 
/* loadd.  */
/* loadd.  */
void
void
OP_189_14 ()
OP_189_14 ()
{
{
  /* loadd -disp20(REGP)   REGP
  /* loadd -disp20(REGP)   REGP
   * ADDR = RPbase + zext24(-disp20)
   * ADDR = RPbase + zext24(-disp20)
   * REGP = [ADDR]   */
   * REGP = [ADDR]   */
 
 
  uint32 tmp, addr = OP[0] + (GPR32 (OP[1]));
  uint32 tmp, addr = OP[0] + (GPR32 (OP[1]));
  trace_input ("loadd", OP_RP_BASE_DISPE20, OP_REGP, OP_VOID);
  trace_input ("loadd", OP_RP_BASE_DISPE20, OP_REGP, OP_VOID);
  tmp = RLW (addr);
  tmp = RLW (addr);
  tmp = ((tmp & 0xffff) << 16)| ((tmp >> 16) & 0xffff);
  tmp = ((tmp & 0xffff) << 16)| ((tmp >> 16) & 0xffff);
  SET_GPR32 (OP[2], tmp);
  SET_GPR32 (OP[2], tmp);
  trace_output_32 (tmp);
  trace_output_32 (tmp);
}
}
 
 
/* loadd.  */
/* loadd.  */
void
void
OP_12A_14 ()
OP_12A_14 ()
{
{
  /* loadd [Rindex]disp20(RPbasexb) REGP
  /* loadd [Rindex]disp20(RPbasexb) REGP
   * ADDR = RPbasex + Rindex + zext24(disp20)
   * ADDR = RPbasex + Rindex + zext24(disp20)
   * REGP = [ADDR]   */
   * REGP = [ADDR]   */
 
 
  uint32 addr, tmp;
  uint32 addr, tmp;
  trace_input ("loadd", OP_RP_INDEX_DISP20, OP_REGP, OP_VOID);
  trace_input ("loadd", OP_RP_INDEX_DISP20, OP_REGP, OP_VOID);
 
 
  if (OP[0] == 0)
  if (OP[0] == 0)
     addr = (GPR32 (12)) + OP[1] + (GPR32 (OP[2]));
     addr = (GPR32 (12)) + OP[1] + (GPR32 (OP[2]));
  else
  else
     addr = (GPR32 (13)) + OP[1] + (GPR32 (OP[2]));
     addr = (GPR32 (13)) + OP[1] + (GPR32 (OP[2]));
 
 
  tmp = RLW (addr);
  tmp = RLW (addr);
  tmp = ((tmp << 16) & 0xffff)| ((tmp >> 16) & 0xffff);
  tmp = ((tmp << 16) & 0xffff)| ((tmp >> 16) & 0xffff);
  SET_GPR32 (OP[3], tmp);
  SET_GPR32 (OP[3], tmp);
  trace_output_32 (tmp);
  trace_output_32 (tmp);
}
}
 
 
 
 
/* storb.  */
/* storb.  */
void
void
OP_C8_8 ()
OP_C8_8 ()
{
{
  /* storb REG, ABS20
  /* storb REG, ABS20
   * ADDR = zext24(abs20) | remap
   * ADDR = zext24(abs20) | remap
   * [ADDR] = REGR
   * [ADDR] = REGR
   * NOTE: remap is
   * NOTE: remap is
   * If (abs20 > 0xEFFFF) the resulting address is logically ORed
   * If (abs20 > 0xEFFFF) the resulting address is logically ORed
   * with 0xF00000 i.e. addresses from 1M-64k to 1M are re-mapped
   * with 0xF00000 i.e. addresses from 1M-64k to 1M are re-mapped
   * by the core to 16M-64k to 16M. */
   * by the core to 16M-64k to 16M. */
 
 
  uint8 a = ((GPR (OP[0])) & 0xff);
  uint8 a = ((GPR (OP[0])) & 0xff);
  uint32 addr =  OP[1];
  uint32 addr =  OP[1];
  trace_input ("storb", OP_REG, OP_ABS20_OUTPUT, OP_VOID);
  trace_input ("storb", OP_REG, OP_ABS20_OUTPUT, OP_VOID);
  SB (addr, a);
  SB (addr, a);
  trace_output_32 (addr);
  trace_output_32 (addr);
}
}
 
 
/* storb.  */
/* storb.  */
void
void
OP_137_14 ()
OP_137_14 ()
{
{
  /* storb REG, ABS24
  /* storb REG, ABS24
   * ADDR = abs24
   * ADDR = abs24
   * [ADDR] = REGR.  */
   * [ADDR] = REGR.  */
 
 
  uint8 a = ((GPR (OP[0])) & 0xff);
  uint8 a = ((GPR (OP[0])) & 0xff);
  uint32 addr =  OP[1];
  uint32 addr =  OP[1];
  trace_input ("storb", OP_REG, OP_ABS24_OUTPUT, OP_VOID);
  trace_input ("storb", OP_REG, OP_ABS24_OUTPUT, OP_VOID);
  SB (addr, a);
  SB (addr, a);
  trace_output_32 (addr);
  trace_output_32 (addr);
}
}
 
 
/* storb.  */
/* storb.  */
void
void
OP_65_7 ()
OP_65_7 ()
{
{
  /* storb REG, [Rindex]ABS20
  /* storb REG, [Rindex]ABS20
   * ADDR = Rindex + zext24(disp20)
   * ADDR = Rindex + zext24(disp20)
   * [ADDR] = REGR  */
   * [ADDR] = REGR  */
 
 
  uint32 addr;
  uint32 addr;
  uint8 a = ((GPR (OP[0])) & 0xff);
  uint8 a = ((GPR (OP[0])) & 0xff);
  trace_input ("storb", OP_REG, OP_R_INDEX8_ABS20, OP_VOID);
  trace_input ("storb", OP_REG, OP_R_INDEX8_ABS20, OP_VOID);
 
 
  if (OP[1] == 0)
  if (OP[1] == 0)
     addr = (GPR32 (12)) + OP[2];
     addr = (GPR32 (12)) + OP[2];
  else
  else
     addr = (GPR32 (13)) + OP[2];
     addr = (GPR32 (13)) + OP[2];
 
 
  SB (addr, a);
  SB (addr, a);
  trace_output_32 (addr);
  trace_output_32 (addr);
}
}
 
 
/* storb.  */
/* storb.  */
void
void
OP_F_4 ()
OP_F_4 ()
{
{
  /* storb REG, DIPS4(REGP)
  /* storb REG, DIPS4(REGP)
   * ADDR = RPBASE + zext24(DISP4)
   * ADDR = RPBASE + zext24(DISP4)
   * [ADDR]  = REG.  */
   * [ADDR]  = REG.  */
 
 
  uint16 a = ((GPR (OP[0])) & 0xff);
  uint16 a = ((GPR (OP[0])) & 0xff);
  trace_input ("storb", OP_REG, OP_RP_BASE_DISPE4, OP_VOID);
  trace_input ("storb", OP_REG, OP_RP_BASE_DISPE4, OP_VOID);
  uint32 addr =  (GPR32 (OP[2])) + OP[1];
  uint32 addr =  (GPR32 (OP[2])) + OP[1];
  SB (addr, a);
  SB (addr, a);
  trace_output_32 (addr);
  trace_output_32 (addr);
}
}
 
 
/* storb.  */
/* storb.  */
void
void
OP_FE_8 ()
OP_FE_8 ()
{
{
  /* storb [Rindex]disp0(RPbasex) REG
  /* storb [Rindex]disp0(RPbasex) REG
   * ADDR = Rpbasex + Rindex
   * ADDR = Rpbasex + Rindex
   * [ADDR] = REGR   */
   * [ADDR] = REGR   */
 
 
  uint32 addr;
  uint32 addr;
  uint8 a = ((GPR (OP[0])) & 0xff);
  uint8 a = ((GPR (OP[0])) & 0xff);
  trace_input ("storb", OP_REG, OP_RP_INDEX_DISP0, OP_VOID);
  trace_input ("storb", OP_REG, OP_RP_INDEX_DISP0, OP_VOID);
 
 
  if (OP[1] == 0)
  if (OP[1] == 0)
     addr = (GPR32 (12)) + (GPR32 (OP[3])) + OP[2];
     addr = (GPR32 (12)) + (GPR32 (OP[3])) + OP[2];
  else
  else
     addr = (GPR32 (13)) + (GPR32 (OP[3])) + OP[2];
     addr = (GPR32 (13)) + (GPR32 (OP[3])) + OP[2];
 
 
  SB (addr, a);
  SB (addr, a);
  trace_output_32 (addr);
  trace_output_32 (addr);
}
}
 
 
/* storb.  */
/* storb.  */
void
void
OP_319_A ()
OP_319_A ()
{
{
  /* storb REG, [Rindex]disp14(RPbasex)
  /* storb REG, [Rindex]disp14(RPbasex)
   * ADDR = Rpbasex + Rindex + zext24(disp14)
   * ADDR = Rpbasex + Rindex + zext24(disp14)
   * [ADDR] = REGR  */
   * [ADDR] = REGR  */
 
 
  uint8 a = ((GPR (OP[0])) & 0xff);
  uint8 a = ((GPR (OP[0])) & 0xff);
  trace_input ("storb", OP_REG, OP_RP_INDEX_DISP14, OP_VOID);
  trace_input ("storb", OP_REG, OP_RP_INDEX_DISP14, OP_VOID);
  uint32 addr = (GPR32 (OP[2])) + OP[1];
  uint32 addr = (GPR32 (OP[2])) + OP[1];
  SB (addr, a);
  SB (addr, a);
  trace_output_32 (addr);
  trace_output_32 (addr);
}
}
 
 
/* storb.  */
/* storb.  */
void
void
OP_194_14 ()
OP_194_14 ()
{
{
  /* storb REG, DISPE20(REG)
  /* storb REG, DISPE20(REG)
   * zext24(Rbase) + zext24(dispe20)
   * zext24(Rbase) + zext24(dispe20)
   * [ADDR] = REG  */
   * [ADDR] = REG  */
 
 
  uint8 a = ((GPR (OP[0])) & 0xff);
  uint8 a = ((GPR (OP[0])) & 0xff);
  trace_input ("storb", OP_REG, OP_R_BASE_DISPE20, OP_VOID);
  trace_input ("storb", OP_REG, OP_R_BASE_DISPE20, OP_VOID);
  uint32 addr = OP[1] + (GPR (OP[2]));
  uint32 addr = OP[1] + (GPR (OP[2]));
  SB (addr, a);
  SB (addr, a);
  trace_output_32 (addr);
  trace_output_32 (addr);
}
}
 
 
/* storb.  */
/* storb.  */
void
void
OP_134_14 ()
OP_134_14 ()
{
{
  /* storb REG, DISP20(REG)
  /* storb REG, DISP20(REG)
   * ADDR = zext24(Rbase) + zext24(disp20)
   * ADDR = zext24(Rbase) + zext24(disp20)
   * [ADDR] = REG                          */
   * [ADDR] = REG                          */
 
 
  uint8 a = (GPR (OP[0]) & 0xff);
  uint8 a = (GPR (OP[0]) & 0xff);
  trace_input ("storb", OP_REG, OP_R_BASE_DISPS20, OP_VOID);
  trace_input ("storb", OP_REG, OP_R_BASE_DISPS20, OP_VOID);
  uint32 addr =  OP[1] + (GPR (OP[2]));
  uint32 addr =  OP[1] + (GPR (OP[2]));
  SB (addr, a);
  SB (addr, a);
  trace_output_32 (addr);
  trace_output_32 (addr);
}
}
 
 
/* storb.  */
/* storb.  */
void
void
OP_FF_8 ()
OP_FF_8 ()
{
{
  /* storb REG, disp16(REGP)
  /* storb REG, disp16(REGP)
   * ADDR = RPbase + zext24(disp16)
   * ADDR = RPbase + zext24(disp16)
   * [ADDR] = REGP   */
   * [ADDR] = REGP   */
 
 
  uint8 a = ((GPR (OP[0])) & 0xff);
  uint8 a = ((GPR (OP[0])) & 0xff);
  trace_input ("storb", OP_REG, OP_RP_BASE_DISP16, OP_VOID);
  trace_input ("storb", OP_REG, OP_RP_BASE_DISP16, OP_VOID);
  uint32 addr = (GPR32 (OP[2])) + OP[1];
  uint32 addr = (GPR32 (OP[2])) + OP[1];
  SB (addr, a);
  SB (addr, a);
  trace_output_32 (addr);
  trace_output_32 (addr);
}
}
 
 
/* storb.  */
/* storb.  */
void
void
OP_135_14 ()
OP_135_14 ()
{
{
  /* storb REG, disp20(REGP)
  /* storb REG, disp20(REGP)
   * ADDR = RPbase + zext24(disp20)
   * ADDR = RPbase + zext24(disp20)
   * [ADDR] = REGP   */
   * [ADDR] = REGP   */
 
 
  uint8 a = ((GPR (OP[0])) & 0xff);
  uint8 a = ((GPR (OP[0])) & 0xff);
  trace_input ("storb", OP_REG, OP_RP_BASE_DISPS20, OP_VOID);
  trace_input ("storb", OP_REG, OP_RP_BASE_DISPS20, OP_VOID);
  uint32 addr = (GPR32 (OP[2])) + OP[1];
  uint32 addr = (GPR32 (OP[2])) + OP[1];
  SB (addr, a);
  SB (addr, a);
  trace_output_32 (addr);
  trace_output_32 (addr);
}
}
 
 
/* storb.  */
/* storb.  */
void
void
OP_195_14 ()
OP_195_14 ()
{
{
  /* storb REG, -disp20(REGP)
  /* storb REG, -disp20(REGP)
   * ADDR = RPbase + zext24(-disp20)
   * ADDR = RPbase + zext24(-disp20)
   * [ADDR] = REGP  */
   * [ADDR] = REGP  */
 
 
  uint8 a = (GPR (OP[0]) & 0xff);
  uint8 a = (GPR (OP[0]) & 0xff);
  trace_input ("storb", OP_REG, OP_RP_BASE_DISPE20, OP_VOID);
  trace_input ("storb", OP_REG, OP_RP_BASE_DISPE20, OP_VOID);
  uint32 addr = (GPR32 (OP[2])) + OP[1];
  uint32 addr = (GPR32 (OP[2])) + OP[1];
  SB (addr, a);
  SB (addr, a);
  trace_output_32 (addr);
  trace_output_32 (addr);
}
}
 
 
/* storb.  */
/* storb.  */
void
void
OP_136_14 ()
OP_136_14 ()
{
{
  /* storb REG, [Rindex]disp20(RPbase)
  /* storb REG, [Rindex]disp20(RPbase)
   * ADDR = RPbasex + Rindex + zext24(disp20)
   * ADDR = RPbasex + Rindex + zext24(disp20)
   * [ADDR] = REGP   */
   * [ADDR] = REGP   */
 
 
  uint8 a = (GPR (OP[0])) & 0xff;
  uint8 a = (GPR (OP[0])) & 0xff;
  trace_input ("storb", OP_REG, OP_RP_INDEX_DISPS20, OP_VOID);
  trace_input ("storb", OP_REG, OP_RP_INDEX_DISPS20, OP_VOID);
  uint32 addr = (GPR32 (OP[2])) + OP[1];
  uint32 addr = (GPR32 (OP[2])) + OP[1];
  SB (addr, a);
  SB (addr, a);
  trace_output_32 (addr);
  trace_output_32 (addr);
}
}
 
 
/* STR_IMM instructions.  */
/* STR_IMM instructions.  */
/* storb . */
/* storb . */
void
void
OP_81_8 ()
OP_81_8 ()
{
{
  uint8 a = (OP[0]) & 0xff;
  uint8 a = (OP[0]) & 0xff;
  trace_input ("storb", OP_CONSTANT4, OP_ABS20_OUTPUT, OP_VOID);
  trace_input ("storb", OP_CONSTANT4, OP_ABS20_OUTPUT, OP_VOID);
  uint32 addr = OP[1];
  uint32 addr = OP[1];
  SB (addr, a);
  SB (addr, a);
  trace_output_32 (addr);
  trace_output_32 (addr);
}
}
 
 
/* storb.  */
/* storb.  */
void
void
OP_123_14 ()
OP_123_14 ()
{
{
  uint8 a = (OP[0]) & 0xff;
  uint8 a = (OP[0]) & 0xff;
  trace_input ("storb", OP_CONSTANT4, OP_ABS24_OUTPUT, OP_VOID);
  trace_input ("storb", OP_CONSTANT4, OP_ABS24_OUTPUT, OP_VOID);
  uint32 addr = OP[1];
  uint32 addr = OP[1];
  SB (addr, a);
  SB (addr, a);
  trace_output_32 (addr);
  trace_output_32 (addr);
}
}
 
 
/* storb.  */
/* storb.  */
void
void
OP_42_7 ()
OP_42_7 ()
{
{
  uint32 addr;
  uint32 addr;
  uint8 a = (OP[0]) & 0xff;
  uint8 a = (OP[0]) & 0xff;
  trace_input ("storb", OP_CONSTANT4, OP_R_INDEX8_ABS20, OP_VOID);
  trace_input ("storb", OP_CONSTANT4, OP_R_INDEX8_ABS20, OP_VOID);
 
 
  if (OP[1] == 0)
  if (OP[1] == 0)
     addr = (GPR32 (12)) + OP[2];
     addr = (GPR32 (12)) + OP[2];
  else
  else
     addr = (GPR32 (13)) + OP[2];
     addr = (GPR32 (13)) + OP[2];
 
 
  SB (addr, a);
  SB (addr, a);
  trace_output_32 (addr);
  trace_output_32 (addr);
}
}
 
 
/* storb.  */
/* storb.  */
void
void
OP_218_A ()
OP_218_A ()
{
{
  uint8 a = (OP[0]) & 0xff;
  uint8 a = (OP[0]) & 0xff;
  trace_input ("storb", OP_CONSTANT4, OP_RP_BASE_DISP14, OP_VOID);
  trace_input ("storb", OP_CONSTANT4, OP_RP_BASE_DISP14, OP_VOID);
  uint32 addr = (GPR32 (OP[2])) + OP[1];
  uint32 addr = (GPR32 (OP[2])) + OP[1];
  SB (addr, a);
  SB (addr, a);
  trace_output_32 (addr);
  trace_output_32 (addr);
}
}
 
 
/* storb.  */
/* storb.  */
void
void
OP_82_8 ()
OP_82_8 ()
{
{
  uint8 a = (OP[0]) & 0xff;
  uint8 a = (OP[0]) & 0xff;
  trace_input ("storb", OP_CONSTANT4, OP_RP_INDEX_DISP0, OP_VOID);
  trace_input ("storb", OP_CONSTANT4, OP_RP_INDEX_DISP0, OP_VOID);
  uint32 addr = (GPR32 (OP[2])) + OP[1];
  uint32 addr = (GPR32 (OP[2])) + OP[1];
  SB (addr, a);
  SB (addr, a);
  trace_output_32 (addr);
  trace_output_32 (addr);
}
}
 
 
/* storb.  */
/* storb.  */
void
void
OP_120_14 ()
OP_120_14 ()
{
{
  uint8 a = (OP[0]) & 0xff;
  uint8 a = (OP[0]) & 0xff;
  trace_input ("storb", OP_CONSTANT4, OP_R_BASE_DISPS20, OP_VOID);
  trace_input ("storb", OP_CONSTANT4, OP_R_BASE_DISPS20, OP_VOID);
  uint32 addr = (GPR (OP[2])) + OP[1];
  uint32 addr = (GPR (OP[2])) + OP[1];
  SB (addr, a);
  SB (addr, a);
  trace_output_32 (addr);
  trace_output_32 (addr);
}
}
 
 
/* storb.  */
/* storb.  */
void
void
OP_83_8 ()
OP_83_8 ()
{
{
  uint8 a = (OP[0]) & 0xff;
  uint8 a = (OP[0]) & 0xff;
  trace_input ("storb", OP_CONSTANT4, OP_RP_BASE_DISP16, OP_VOID);
  trace_input ("storb", OP_CONSTANT4, OP_RP_BASE_DISP16, OP_VOID);
  uint32 addr = (GPR32 (OP[2])) + OP[1];
  uint32 addr = (GPR32 (OP[2])) + OP[1];
  SB (addr, a);
  SB (addr, a);
  trace_output_32 (addr);
  trace_output_32 (addr);
}
}
 
 
/* storb.  */
/* storb.  */
void
void
OP_121_14 ()
OP_121_14 ()
{
{
  uint8 a = (OP[0]) & 0xff;
  uint8 a = (OP[0]) & 0xff;
  trace_input ("storb", OP_CONSTANT4, OP_RP_BASE_DISPS20, OP_VOID);
  trace_input ("storb", OP_CONSTANT4, OP_RP_BASE_DISPS20, OP_VOID);
  uint32 addr = (GPR32 (OP[2])) + OP[1];
  uint32 addr = (GPR32 (OP[2])) + OP[1];
  SB (addr, a);
  SB (addr, a);
  trace_output_32 (addr);
  trace_output_32 (addr);
}
}
 
 
/* storb.  */
/* storb.  */
void
void
OP_122_14 ()
OP_122_14 ()
{
{
  uint8 a = (OP[0]) & 0xff;
  uint8 a = (OP[0]) & 0xff;
  trace_input ("storb", OP_CONSTANT4, OP_RP_INDEX_DISPS20, OP_VOID);
  trace_input ("storb", OP_CONSTANT4, OP_RP_INDEX_DISPS20, OP_VOID);
  uint32 addr = (GPR32 (OP[2])) + OP[1];
  uint32 addr = (GPR32 (OP[2])) + OP[1];
  SB (addr, a);
  SB (addr, a);
  trace_output_32 (addr);
  trace_output_32 (addr);
}
}
/* endif for STR_IMM.  */
/* endif for STR_IMM.  */
 
 
/* storw . */
/* storw . */
void
void
OP_C9_8 ()
OP_C9_8 ()
{
{
  uint16 a = GPR (OP[0]);
  uint16 a = GPR (OP[0]);
  trace_input ("storw", OP_REG, OP_ABS20_OUTPUT, OP_VOID);
  trace_input ("storw", OP_REG, OP_ABS20_OUTPUT, OP_VOID);
  uint32 addr =  OP[1];
  uint32 addr =  OP[1];
  SW (addr, a);
  SW (addr, a);
  trace_output_32 (addr);
  trace_output_32 (addr);
}
}
 
 
/* storw.  */
/* storw.  */
void
void
OP_13F_14 ()
OP_13F_14 ()
{
{
  uint16 a = GPR (OP[0]);
  uint16 a = GPR (OP[0]);
  trace_input ("storw", OP_REG, OP_ABS24_OUTPUT, OP_VOID);
  trace_input ("storw", OP_REG, OP_ABS24_OUTPUT, OP_VOID);
  uint32 addr =  OP[1];
  uint32 addr =  OP[1];
  SW (addr, a);
  SW (addr, a);
  trace_output_32 (addr);
  trace_output_32 (addr);
}
}
 
 
/* storw.  */
/* storw.  */
void
void
OP_67_7 ()
OP_67_7 ()
{
{
  uint32 addr;
  uint32 addr;
  uint16 a = GPR (OP[0]);
  uint16 a = GPR (OP[0]);
  trace_input ("storw", OP_REG, OP_R_INDEX8_ABS20, OP_VOID);
  trace_input ("storw", OP_REG, OP_R_INDEX8_ABS20, OP_VOID);
 
 
  if (OP[1] == 0)
  if (OP[1] == 0)
     addr = (GPR32 (12)) + OP[2];
     addr = (GPR32 (12)) + OP[2];
  else
  else
     addr = (GPR32 (13)) + OP[2];
     addr = (GPR32 (13)) + OP[2];
 
 
  SW (addr, a);
  SW (addr, a);
  trace_output_32 (addr);
  trace_output_32 (addr);
}
}
 
 
 
 
/* storw.  */
/* storw.  */
void
void
OP_D_4 ()
OP_D_4 ()
{
{
  uint16 a = (GPR (OP[0]));
  uint16 a = (GPR (OP[0]));
  trace_input ("storw", OP_REGP, OP_RP_BASE_DISPE4, OP_VOID);
  trace_input ("storw", OP_REGP, OP_RP_BASE_DISPE4, OP_VOID);
  uint32 addr = (GPR32 (OP[2])) + OP[1];
  uint32 addr = (GPR32 (OP[2])) + OP[1];
  SW (addr, a);
  SW (addr, a);
  trace_output_32 (addr);
  trace_output_32 (addr);
}
}
 
 
/* storw.  */
/* storw.  */
void
void
OP_DE_8 ()
OP_DE_8 ()
{
{
  uint16 a = GPR (OP[0]);
  uint16 a = GPR (OP[0]);
  trace_input ("storw", OP_REG, OP_RP_INDEX_DISP0, OP_VOID);
  trace_input ("storw", OP_REG, OP_RP_INDEX_DISP0, OP_VOID);
  uint32 addr = (GPR32 (OP[2])) + OP[1];
  uint32 addr = (GPR32 (OP[2])) + OP[1];
  SW (addr, a);
  SW (addr, a);
  trace_output_32 (addr);
  trace_output_32 (addr);
}
}
 
 
/* storw.  */
/* storw.  */
void
void
OP_31B_A ()
OP_31B_A ()
{
{
  uint16 a = GPR (OP[0]);
  uint16 a = GPR (OP[0]);
  trace_input ("storw", OP_REG, OP_RP_INDEX_DISP14, OP_VOID);
  trace_input ("storw", OP_REG, OP_RP_INDEX_DISP14, OP_VOID);
  uint32 addr = (GPR32 (OP[2])) + OP[1];
  uint32 addr = (GPR32 (OP[2])) + OP[1];
  SW (addr, a);
  SW (addr, a);
  trace_output_32 (addr);
  trace_output_32 (addr);
}
}
 
 
/* storw.  */
/* storw.  */
void
void
OP_19C_14 ()
OP_19C_14 ()
{
{
  uint16 a = (GPR (OP[0]));
  uint16 a = (GPR (OP[0]));
  trace_input ("storw", OP_REGP, OP_RP_BASE_DISPE20, OP_VOID);
  trace_input ("storw", OP_REGP, OP_RP_BASE_DISPE20, OP_VOID);
  uint32 addr =  (GPR32 (OP[2])) + OP[1];
  uint32 addr =  (GPR32 (OP[2])) + OP[1];
  SW (addr, a);
  SW (addr, a);
  trace_output_32 (addr);
  trace_output_32 (addr);
}
}
 
 
/* storw.  */
/* storw.  */
void
void
OP_13C_14 ()
OP_13C_14 ()
{
{
  uint16 a = (GPR (OP[0]));
  uint16 a = (GPR (OP[0]));
  trace_input ("storw", OP_REG, OP_R_BASE_DISPS20, OP_VOID);
  trace_input ("storw", OP_REG, OP_R_BASE_DISPS20, OP_VOID);
  uint32 addr =  (GPR (OP[2])) + OP[1];
  uint32 addr =  (GPR (OP[2])) + OP[1];
  SW (addr, a);
  SW (addr, a);
  trace_output_32 (addr);
  trace_output_32 (addr);
}
}
 
 
/* storw.  */
/* storw.  */
void
void
OP_DF_8 ()
OP_DF_8 ()
{
{
  uint16 a = (GPR (OP[0]));
  uint16 a = (GPR (OP[0]));
  trace_input ("storw", OP_REG, OP_RP_BASE_DISP16, OP_VOID);
  trace_input ("storw", OP_REG, OP_RP_BASE_DISP16, OP_VOID);
  uint32 addr =  (GPR32 (OP[2])) + OP[1];
  uint32 addr =  (GPR32 (OP[2])) + OP[1];
  SW (addr, a);
  SW (addr, a);
  trace_output_32 (addr);
  trace_output_32 (addr);
}
}
 
 
/* storw.  */
/* storw.  */
void
void
OP_13D_14 ()
OP_13D_14 ()
{
{
  uint16 a = (GPR (OP[0]));
  uint16 a = (GPR (OP[0]));
  trace_input ("storw", OP_REG, OP_RP_BASE_DISPS20, OP_VOID);
  trace_input ("storw", OP_REG, OP_RP_BASE_DISPS20, OP_VOID);
  uint32 addr =  (GPR32 (OP[2])) + OP[1];
  uint32 addr =  (GPR32 (OP[2])) + OP[1];
  SW (addr, a);
  SW (addr, a);
  trace_output_32 (addr);
  trace_output_32 (addr);
}
}
 
 
/* storw.  */
/* storw.  */
void
void
OP_19D_14 ()
OP_19D_14 ()
{
{
  uint16 a = (GPR (OP[0]));
  uint16 a = (GPR (OP[0]));
  trace_input ("storw", OP_REG, OP_RP_BASE_DISPE20, OP_VOID);
  trace_input ("storw", OP_REG, OP_RP_BASE_DISPE20, OP_VOID);
  uint32 addr =  (GPR32 (OP[2])) + OP[1];
  uint32 addr =  (GPR32 (OP[2])) + OP[1];
  SW (addr, a);
  SW (addr, a);
  trace_output_32 (addr);
  trace_output_32 (addr);
}
}
 
 
/* storw.  */
/* storw.  */
void
void
OP_13E_14 ()
OP_13E_14 ()
{
{
  uint16 a = (GPR (OP[0]));
  uint16 a = (GPR (OP[0]));
  trace_input ("storw", OP_REG, OP_RP_INDEX_DISPS20, OP_VOID);
  trace_input ("storw", OP_REG, OP_RP_INDEX_DISPS20, OP_VOID);
  uint32 addr =  (GPR32 (OP[2])) + OP[1];
  uint32 addr =  (GPR32 (OP[2])) + OP[1];
  SW (addr, a);
  SW (addr, a);
  trace_output_32 (addr);
  trace_output_32 (addr);
}
}
 
 
/* STORE-w IMM instruction *****/
/* STORE-w IMM instruction *****/
/* storw . */
/* storw . */
void
void
OP_C1_8 ()
OP_C1_8 ()
{
{
  uint16 a = OP[0];
  uint16 a = OP[0];
  trace_input ("storw", OP_CONSTANT4, OP_ABS20_OUTPUT, OP_VOID);
  trace_input ("storw", OP_CONSTANT4, OP_ABS20_OUTPUT, OP_VOID);
  uint32 addr =  OP[1];
  uint32 addr =  OP[1];
  SW (addr, a);
  SW (addr, a);
  trace_output_32 (addr);
  trace_output_32 (addr);
}
}
 
 
/* storw.  */
/* storw.  */
void
void
OP_133_14 ()
OP_133_14 ()
{
{
  uint16 a = OP[0];
  uint16 a = OP[0];
  trace_input ("storw", OP_CONSTANT4, OP_ABS24_OUTPUT, OP_VOID);
  trace_input ("storw", OP_CONSTANT4, OP_ABS24_OUTPUT, OP_VOID);
  uint32 addr =  OP[1];
  uint32 addr =  OP[1];
  SW (addr, a);
  SW (addr, a);
  trace_output_32 (addr);
  trace_output_32 (addr);
}
}
 
 
/* storw.  */
/* storw.  */
void
void
OP_62_7 ()
OP_62_7 ()
{
{
  uint32 addr;
  uint32 addr;
  uint16 a = OP[0];
  uint16 a = OP[0];
  trace_input ("storw", OP_CONSTANT4, OP_R_INDEX8_ABS20, OP_VOID);
  trace_input ("storw", OP_CONSTANT4, OP_R_INDEX8_ABS20, OP_VOID);
 
 
  if (OP[1] == 0)
  if (OP[1] == 0)
     addr = (GPR32 (12)) + OP[2];
     addr = (GPR32 (12)) + OP[2];
  else
  else
     addr = (GPR32 (13)) + OP[2];
     addr = (GPR32 (13)) + OP[2];
 
 
  SW (addr, a);
  SW (addr, a);
  trace_output_32 (addr);
  trace_output_32 (addr);
}
}
 
 
/* storw.  */
/* storw.  */
void
void
OP_318_A ()
OP_318_A ()
{
{
  uint16 a = OP[0];
  uint16 a = OP[0];
  trace_input ("storw", OP_CONSTANT4, OP_RP_BASE_DISP14, OP_VOID);
  trace_input ("storw", OP_CONSTANT4, OP_RP_BASE_DISP14, OP_VOID);
  uint32 addr =  (GPR32 (OP[2])) + OP[1];
  uint32 addr =  (GPR32 (OP[2])) + OP[1];
  SW (addr, a);
  SW (addr, a);
  trace_output_32 (addr);
  trace_output_32 (addr);
}
}
 
 
/* storw.  */
/* storw.  */
void
void
OP_C2_8 ()
OP_C2_8 ()
{
{
  uint16 a = OP[0];
  uint16 a = OP[0];
  trace_input ("storw", OP_CONSTANT4, OP_RP_INDEX_DISP0, OP_VOID);
  trace_input ("storw", OP_CONSTANT4, OP_RP_INDEX_DISP0, OP_VOID);
  uint32 addr =  (GPR32 (OP[2])) + OP[1];
  uint32 addr =  (GPR32 (OP[2])) + OP[1];
  SW (addr, a);
  SW (addr, a);
  trace_output_32 (addr);
  trace_output_32 (addr);
}
}
 
 
/* storw.  */
/* storw.  */
void
void
OP_130_14 ()
OP_130_14 ()
{
{
  uint16 a = OP[0];
  uint16 a = OP[0];
  trace_input ("storw", OP_CONSTANT4, OP_R_BASE_DISPS20, OP_VOID);
  trace_input ("storw", OP_CONSTANT4, OP_R_BASE_DISPS20, OP_VOID);
  uint32 addr =  (GPR32 (OP[2])) + OP[1];
  uint32 addr =  (GPR32 (OP[2])) + OP[1];
  SW (addr, a);
  SW (addr, a);
  trace_output_32 (addr);
  trace_output_32 (addr);
}
}
 
 
/* storw.  */
/* storw.  */
void
void
OP_C3_8 ()
OP_C3_8 ()
{
{
  uint16 a = OP[0];
  uint16 a = OP[0];
  trace_input ("storw", OP_CONSTANT4, OP_RP_BASE_DISP16, OP_VOID);
  trace_input ("storw", OP_CONSTANT4, OP_RP_BASE_DISP16, OP_VOID);
  uint32 addr =  (GPR32 (OP[2])) + OP[1];
  uint32 addr =  (GPR32 (OP[2])) + OP[1];
  SW (addr, a);
  SW (addr, a);
  trace_output_32 (addr);
  trace_output_32 (addr);
}
}
 
 
 
 
/* storw.  */
/* storw.  */
void
void
OP_131_14 ()
OP_131_14 ()
{
{
  uint16 a = OP[0];
  uint16 a = OP[0];
  trace_input ("storw", OP_CONSTANT4, OP_RP_BASE_DISPS20, OP_VOID);
  trace_input ("storw", OP_CONSTANT4, OP_RP_BASE_DISPS20, OP_VOID);
  uint32 addr =  (GPR32 (OP[2])) + OP[1];
  uint32 addr =  (GPR32 (OP[2])) + OP[1];
  SW (addr, a);
  SW (addr, a);
  trace_output_32 (addr);
  trace_output_32 (addr);
}
}
 
 
/* storw.  */
/* storw.  */
void
void
OP_132_14 ()
OP_132_14 ()
{
{
  uint16 a = OP[0];
  uint16 a = OP[0];
  trace_input ("storw", OP_CONSTANT4, OP_RP_INDEX_DISPS20, OP_VOID);
  trace_input ("storw", OP_CONSTANT4, OP_RP_INDEX_DISPS20, OP_VOID);
  uint32 addr =  (GPR32 (OP[2])) + OP[1];
  uint32 addr =  (GPR32 (OP[2])) + OP[1];
  SW (addr, a);
  SW (addr, a);
  trace_output_32 (addr);
  trace_output_32 (addr);
}
}
 
 
 
 
/* stord.  */
/* stord.  */
void
void
OP_C7_8 ()
OP_C7_8 ()
{
{
  uint32 a = GPR32 (OP[0]);
  uint32 a = GPR32 (OP[0]);
  trace_input ("stord", OP_REGP, OP_ABS20_OUTPUT, OP_VOID);
  trace_input ("stord", OP_REGP, OP_ABS20_OUTPUT, OP_VOID);
  uint32 addr =  OP[1];
  uint32 addr =  OP[1];
  SLW (addr, a);
  SLW (addr, a);
  trace_output_32 (addr);
  trace_output_32 (addr);
}
}
 
 
/* stord.  */
/* stord.  */
void
void
OP_13B_14 ()
OP_13B_14 ()
{
{
  uint32 a = GPR32 (OP[0]);
  uint32 a = GPR32 (OP[0]);
  trace_input ("stord", OP_REGP, OP_ABS24_OUTPUT, OP_VOID);
  trace_input ("stord", OP_REGP, OP_ABS24_OUTPUT, OP_VOID);
  uint32 addr =  OP[1];
  uint32 addr =  OP[1];
  SLW (addr, a);
  SLW (addr, a);
  trace_output_32 (addr);
  trace_output_32 (addr);
}
}
 
 
/* stord.  */
/* stord.  */
void
void
OP_66_7 ()
OP_66_7 ()
{
{
  uint32 addr, a = GPR32 (OP[0]);
  uint32 addr, a = GPR32 (OP[0]);
  trace_input ("stord", OP_REGP, OP_R_INDEX8_ABS20, OP_VOID);
  trace_input ("stord", OP_REGP, OP_R_INDEX8_ABS20, OP_VOID);
 
 
  if (OP[1] == 0)
  if (OP[1] == 0)
     addr = (GPR32 (12)) + OP[2];
     addr = (GPR32 (12)) + OP[2];
  else
  else
     addr = (GPR32 (13)) + OP[2];
     addr = (GPR32 (13)) + OP[2];
 
 
  SLW (addr, a);
  SLW (addr, a);
  trace_output_32 (addr);
  trace_output_32 (addr);
}
}
 
 
/* stord.  */
/* stord.  */
void
void
OP_E_4 ()
OP_E_4 ()
{
{
  uint32 a = GPR32 (OP[0]);
  uint32 a = GPR32 (OP[0]);
  trace_input ("stord", OP_REGP, OP_RP_BASE_DISPE4, OP_VOID);
  trace_input ("stord", OP_REGP, OP_RP_BASE_DISPE4, OP_VOID);
  uint32 addr =  (GPR32 (OP[2])) + OP[1];
  uint32 addr =  (GPR32 (OP[2])) + OP[1];
  SLW (addr, a);
  SLW (addr, a);
  trace_output_32 (addr);
  trace_output_32 (addr);
}
}
 
 
/* stord.  */
/* stord.  */
void
void
OP_EE_8 ()
OP_EE_8 ()
{
{
  uint32 a = GPR32 (OP[0]);
  uint32 a = GPR32 (OP[0]);
  trace_input ("stord", OP_REGP, OP_RP_INDEX_DISP0, OP_VOID);
  trace_input ("stord", OP_REGP, OP_RP_INDEX_DISP0, OP_VOID);
  uint32 addr =  (GPR32 (OP[2])) + OP[1];
  uint32 addr =  (GPR32 (OP[2])) + OP[1];
  SLW (addr, a);
  SLW (addr, a);
  trace_output_32 (addr);
  trace_output_32 (addr);
}
}
 
 
/* stord.  */
/* stord.  */
void
void
OP_31A_A ()
OP_31A_A ()
{
{
  uint32 a = GPR32 (OP[0]);
  uint32 a = GPR32 (OP[0]);
  trace_input ("stord", OP_REGP, OP_RP_INDEX_DISP14, OP_VOID);
  trace_input ("stord", OP_REGP, OP_RP_INDEX_DISP14, OP_VOID);
  uint32 addr =  (GPR32 (OP[2])) + OP[1];
  uint32 addr =  (GPR32 (OP[2])) + OP[1];
  SLW (addr, a);
  SLW (addr, a);
  trace_output_32 (addr);
  trace_output_32 (addr);
}
}
 
 
/* stord.  */
/* stord.  */
void
void
OP_198_14 ()
OP_198_14 ()
{
{
  uint32 a = GPR32 (OP[0]);
  uint32 a = GPR32 (OP[0]);
  trace_input ("stord", OP_REGP, OP_R_BASE_DISPE20, OP_VOID);
  trace_input ("stord", OP_REGP, OP_R_BASE_DISPE20, OP_VOID);
  uint32 addr =  (GPR32 (OP[2])) + OP[1];
  uint32 addr =  (GPR32 (OP[2])) + OP[1];
  SLW (addr, a);
  SLW (addr, a);
  trace_output_32 (addr);
  trace_output_32 (addr);
}
}
 
 
/* stord.  */
/* stord.  */
void
void
OP_138_14 ()
OP_138_14 ()
{
{
  uint32 a = GPR32 (OP[0]);
  uint32 a = GPR32 (OP[0]);
  trace_input ("stord", OP_REGP, OP_R_BASE_DISPS20, OP_VOID);
  trace_input ("stord", OP_REGP, OP_R_BASE_DISPS20, OP_VOID);
  uint32 addr =  (GPR32 (OP[2])) + OP[1];
  uint32 addr =  (GPR32 (OP[2])) + OP[1];
  SLW (addr, a);
  SLW (addr, a);
  trace_output_32 (addr);
  trace_output_32 (addr);
}
}
 
 
/* stord.  */
/* stord.  */
void
void
OP_EF_8 ()
OP_EF_8 ()
{
{
  uint32 a = GPR32 (OP[0]);
  uint32 a = GPR32 (OP[0]);
  trace_input ("stord", OP_REGP, OP_RP_BASE_DISP16, OP_VOID);
  trace_input ("stord", OP_REGP, OP_RP_BASE_DISP16, OP_VOID);
  uint32 addr =  (GPR32 (OP[2])) + OP[1];
  uint32 addr =  (GPR32 (OP[2])) + OP[1];
  SLW (addr, a);
  SLW (addr, a);
  trace_output_32 (addr);
  trace_output_32 (addr);
}
}
 
 
/* stord.  */
/* stord.  */
void
void
OP_139_14 ()
OP_139_14 ()
{
{
  uint32 a = GPR32 (OP[0]);
  uint32 a = GPR32 (OP[0]);
  trace_input ("stord", OP_REGP, OP_RP_BASE_DISPS20, OP_VOID);
  trace_input ("stord", OP_REGP, OP_RP_BASE_DISPS20, OP_VOID);
  uint32 addr =  (GPR32 (OP[2])) + OP[1];
  uint32 addr =  (GPR32 (OP[2])) + OP[1];
  SLW (addr, a);
  SLW (addr, a);
  trace_output_32 (addr);
  trace_output_32 (addr);
}
}
 
 
/* stord.  */
/* stord.  */
void
void
OP_199_14 ()
OP_199_14 ()
{
{
  uint32 a = GPR32 (OP[0]);
  uint32 a = GPR32 (OP[0]);
  trace_input ("stord", OP_REGP, OP_RP_BASE_DISPE20, OP_VOID);
  trace_input ("stord", OP_REGP, OP_RP_BASE_DISPE20, OP_VOID);
  uint32 addr =  (GPR32 (OP[2])) + OP[1];
  uint32 addr =  (GPR32 (OP[2])) + OP[1];
  SLW (addr, a);
  SLW (addr, a);
  trace_output_32 (addr);
  trace_output_32 (addr);
}
}
 
 
/* stord.  */
/* stord.  */
void
void
OP_13A_14 ()
OP_13A_14 ()
{
{
  uint32 a = GPR32 (OP[0]);
  uint32 a = GPR32 (OP[0]);
  trace_input ("stord", OP_REGP, OP_RP_INDEX_DISPS20, OP_VOID);
  trace_input ("stord", OP_REGP, OP_RP_INDEX_DISPS20, OP_VOID);
  uint32 addr =  (GPR32 (OP[2])) + OP[1];
  uint32 addr =  (GPR32 (OP[2])) + OP[1];
  SLW (addr, a);
  SLW (addr, a);
  trace_output_32 (addr);
  trace_output_32 (addr);
}
}
 
 
/* macqu.  */
/* macqu.  */
void
void
OP_14D_14 ()
OP_14D_14 ()
{
{
  int32 tmp;
  int32 tmp;
  int16 src1, src2;
  int16 src1, src2;
  trace_input ("macuw", OP_REG, OP_REG, OP_REGP);
  trace_input ("macuw", OP_REG, OP_REG, OP_REGP);
  src1 = GPR (OP[0]);
  src1 = GPR (OP[0]);
  src2 = GPR (OP[1]);
  src2 = GPR (OP[1]);
  tmp = src1 * src2;
  tmp = src1 * src2;
  /*REVISIT FOR SATURATION and Q FORMAT. */
  /*REVISIT FOR SATURATION and Q FORMAT. */
  SET_GPR32 (OP[2], tmp);
  SET_GPR32 (OP[2], tmp);
  trace_output_32 (tmp);
  trace_output_32 (tmp);
}
}
 
 
/* macuw.  */
/* macuw.  */
void
void
OP_14E_14 ()
OP_14E_14 ()
{
{
  uint32 tmp;
  uint32 tmp;
  uint16 src1, src2;
  uint16 src1, src2;
  trace_input ("macuw", OP_REG, OP_REG, OP_REGP);
  trace_input ("macuw", OP_REG, OP_REG, OP_REGP);
  src1 = GPR (OP[0]);
  src1 = GPR (OP[0]);
  src2 = GPR (OP[1]);
  src2 = GPR (OP[1]);
  tmp = src1 * src2;
  tmp = src1 * src2;
  /*REVISIT FOR SATURATION. */
  /*REVISIT FOR SATURATION. */
  SET_GPR32 (OP[2], tmp);
  SET_GPR32 (OP[2], tmp);
  trace_output_32 (tmp);
  trace_output_32 (tmp);
}
}
 
 
/* macsw.  */
/* macsw.  */
void
void
OP_14F_14 ()
OP_14F_14 ()
{
{
  int32 tmp;
  int32 tmp;
  int16 src1, src2;
  int16 src1, src2;
  trace_input ("macsw", OP_REG, OP_REG, OP_REGP);
  trace_input ("macsw", OP_REG, OP_REG, OP_REGP);
  src1 = GPR (OP[0]);
  src1 = GPR (OP[0]);
  src2 = GPR (OP[1]);
  src2 = GPR (OP[1]);
  tmp = src1 * src2;
  tmp = src1 * src2;
  /*REVISIT FOR SATURATION. */
  /*REVISIT FOR SATURATION. */
  SET_GPR32 (OP[2], tmp);
  SET_GPR32 (OP[2], tmp);
  trace_output_32 (tmp);
  trace_output_32 (tmp);
}
}
 
 
 
 
/* mulb.  */
/* mulb.  */
void
void
OP_64_8 ()
OP_64_8 ()
{
{
  int16 tmp;
  int16 tmp;
  int8 a = (OP[0]) & 0xff;
  int8 a = (OP[0]) & 0xff;
  int8 b = (GPR (OP[1])) & 0xff;
  int8 b = (GPR (OP[1])) & 0xff;
  trace_input ("mulb", OP_CONSTANT4_1, OP_REG, OP_VOID);
  trace_input ("mulb", OP_CONSTANT4_1, OP_REG, OP_VOID);
  tmp = (a * b) & 0xff;
  tmp = (a * b) & 0xff;
  SET_GPR (OP[1], (tmp | ((GPR (OP[1])) & 0xff00)));
  SET_GPR (OP[1], (tmp | ((GPR (OP[1])) & 0xff00)));
  trace_output_16 (tmp);
  trace_output_16 (tmp);
}
}
 
 
/* mulb.  */
/* mulb.  */
void
void
OP_64B_C ()
OP_64B_C ()
{
{
  int16 tmp;
  int16 tmp;
  int8 a = (OP[0]) & 0xff, b = (GPR (OP[1])) & 0xff;
  int8 a = (OP[0]) & 0xff, b = (GPR (OP[1])) & 0xff;
  trace_input ("mulb", OP_CONSTANT4, OP_REG, OP_VOID);
  trace_input ("mulb", OP_CONSTANT4, OP_REG, OP_VOID);
  tmp = (a * b) & 0xff;
  tmp = (a * b) & 0xff;
  SET_GPR (OP[1], (tmp | ((GPR (OP[1])) & 0xff00)));
  SET_GPR (OP[1], (tmp | ((GPR (OP[1])) & 0xff00)));
  trace_output_16 (tmp);
  trace_output_16 (tmp);
}
}
 
 
 
 
/* mulb.  */
/* mulb.  */
void
void
OP_65_8 ()
OP_65_8 ()
{
{
  int16 tmp;
  int16 tmp;
  int8 a = (GPR (OP[0])) & 0xff, b = (GPR (OP[1])) & 0xff;
  int8 a = (GPR (OP[0])) & 0xff, b = (GPR (OP[1])) & 0xff;
  trace_input ("mulb", OP_REG, OP_REG, OP_VOID);
  trace_input ("mulb", OP_REG, OP_REG, OP_VOID);
  tmp = (a * b) & 0xff;
  tmp = (a * b) & 0xff;
  SET_GPR (OP[1], (tmp | ((GPR (OP[1])) & 0xff00)));
  SET_GPR (OP[1], (tmp | ((GPR (OP[1])) & 0xff00)));
  trace_output_16 (tmp);
  trace_output_16 (tmp);
}
}
 
 
 
 
/* mulw.  */
/* mulw.  */
void
void
OP_66_8 ()
OP_66_8 ()
{
{
  int32 tmp;
  int32 tmp;
  uint16 a = OP[0];
  uint16 a = OP[0];
  int16 b = (GPR (OP[1]));
  int16 b = (GPR (OP[1]));
  trace_input ("mulw", OP_CONSTANT4_1, OP_REG, OP_VOID);
  trace_input ("mulw", OP_CONSTANT4_1, OP_REG, OP_VOID);
  tmp = (a * b) & 0xffff;
  tmp = (a * b) & 0xffff;
  SET_GPR (OP[1], tmp);
  SET_GPR (OP[1], tmp);
  trace_output_32 (tmp);
  trace_output_32 (tmp);
}
}
 
 
/* mulw.  */
/* mulw.  */
void
void
OP_66B_C ()
OP_66B_C ()
{
{
  int32 tmp;
  int32 tmp;
  int16 a = OP[0], b = (GPR (OP[1]));
  int16 a = OP[0], b = (GPR (OP[1]));
  trace_input ("mulw", OP_CONSTANT4, OP_REG, OP_VOID);
  trace_input ("mulw", OP_CONSTANT4, OP_REG, OP_VOID);
  tmp = (a * b) & 0xffff;
  tmp = (a * b) & 0xffff;
  SET_GPR (OP[1], tmp);
  SET_GPR (OP[1], tmp);
  trace_output_32 (tmp);
  trace_output_32 (tmp);
}
}
 
 
 
 
/* mulw.  */
/* mulw.  */
void
void
OP_67_8 ()
OP_67_8 ()
{
{
  int32 tmp;
  int32 tmp;
  int16 a = (GPR (OP[0])), b = (GPR (OP[1]));
  int16 a = (GPR (OP[0])), b = (GPR (OP[1]));
  trace_input ("mulw", OP_REG, OP_REG, OP_VOID);
  trace_input ("mulw", OP_REG, OP_REG, OP_VOID);
  tmp = (a * b) & 0xffff;
  tmp = (a * b) & 0xffff;
  SET_GPR (OP[1], tmp);
  SET_GPR (OP[1], tmp);
  trace_output_32 (tmp);
  trace_output_32 (tmp);
}
}
 
 
 
 
/* mulsb.  */
/* mulsb.  */
void
void
OP_B_8 ()
OP_B_8 ()
{
{
  int16 tmp;
  int16 tmp;
  int8 a = (GPR (OP[0])) & 0xff, b = (GPR (OP[1])) & 0xff;
  int8 a = (GPR (OP[0])) & 0xff, b = (GPR (OP[1])) & 0xff;
  trace_input ("mulsb", OP_REG, OP_REG, OP_VOID);
  trace_input ("mulsb", OP_REG, OP_REG, OP_VOID);
  tmp = a * b;
  tmp = a * b;
  SET_GPR (OP[1], tmp);
  SET_GPR (OP[1], tmp);
  trace_output_32 (tmp);
  trace_output_32 (tmp);
}
}
 
 
/* mulsw.  */
/* mulsw.  */
void
void
OP_62_8 ()
OP_62_8 ()
{
{
  int32 tmp;
  int32 tmp;
  int16 a = (GPR (OP[0])), b = (GPR (OP[1]));
  int16 a = (GPR (OP[0])), b = (GPR (OP[1]));
  trace_input ("mulsw", OP_REG, OP_REGP, OP_VOID);
  trace_input ("mulsw", OP_REG, OP_REGP, OP_VOID);
  tmp = a * b;
  tmp = a * b;
  SET_GPR32 (OP[1], tmp);
  SET_GPR32 (OP[1], tmp);
  trace_output_32 (tmp);
  trace_output_32 (tmp);
}
}
 
 
/* muluw.  */
/* muluw.  */
void
void
OP_63_8 ()
OP_63_8 ()
{
{
  uint32 tmp;
  uint32 tmp;
  uint16 a = (GPR (OP[0])), b = (GPR (OP[1]));
  uint16 a = (GPR (OP[0])), b = (GPR (OP[1]));
  trace_input ("muluw", OP_REG, OP_REGP, OP_VOID);
  trace_input ("muluw", OP_REG, OP_REGP, OP_VOID);
  tmp = a * b;
  tmp = a * b;
  SET_GPR32 (OP[1], tmp);
  SET_GPR32 (OP[1], tmp);
  trace_output_32 (tmp);
  trace_output_32 (tmp);
}
}
 
 
 
 
/* nop.  */
/* nop.  */
void
void
OP_2C00_10 ()
OP_2C00_10 ()
{
{
  trace_input ("nop", OP_VOID, OP_VOID, OP_VOID);
  trace_input ("nop", OP_VOID, OP_VOID, OP_VOID);
 
 
#if 0
#if 0
  State.exception = SIGTRAP;
  State.exception = SIGTRAP;
  ins_type_counters[ (int)State.ins_type ]--;   /* don't count nops as normal instructions */
  ins_type_counters[ (int)State.ins_type ]--;   /* don't count nops as normal instructions */
  switch (State.ins_type)
  switch (State.ins_type)
    {
    {
    default:
    default:
      ins_type_counters[ (int)INS_UNKNOWN ]++;
      ins_type_counters[ (int)INS_UNKNOWN ]++;
      break;
      break;
 
 
    }
    }
 
 
#endif
#endif
  trace_output_void ();
  trace_output_void ();
}
}
 
 
 
 
/* orb.  */
/* orb.  */
void
void
OP_24_8 ()
OP_24_8 ()
{
{
  uint8 tmp, a = (OP[0]) & 0xff, b = (GPR (OP[1])) & 0xff;
  uint8 tmp, a = (OP[0]) & 0xff, b = (GPR (OP[1])) & 0xff;
  trace_input ("orb", OP_CONSTANT4, OP_REG, OP_VOID);
  trace_input ("orb", OP_CONSTANT4, OP_REG, OP_VOID);
  tmp = a | b;
  tmp = a | b;
  SET_GPR (OP[1], ((GPR (OP[1]) | tmp)));
  SET_GPR (OP[1], ((GPR (OP[1]) | tmp)));
  trace_output_16 (tmp);
  trace_output_16 (tmp);
}
}
 
 
/* orb.  */
/* orb.  */
void
void
OP_24B_C ()
OP_24B_C ()
{
{
  uint8 tmp, a = (OP[0]) & 0xff, b = (GPR (OP[1])) & 0xff;
  uint8 tmp, a = (OP[0]) & 0xff, b = (GPR (OP[1])) & 0xff;
  trace_input ("orb", OP_CONSTANT16, OP_REG, OP_VOID);
  trace_input ("orb", OP_CONSTANT16, OP_REG, OP_VOID);
  tmp = a | b;
  tmp = a | b;
  SET_GPR (OP[1], ((GPR (OP[1]) | tmp)));
  SET_GPR (OP[1], ((GPR (OP[1]) | tmp)));
  trace_output_16 (tmp);
  trace_output_16 (tmp);
}
}
 
 
/* orb.  */
/* orb.  */
void
void
OP_25_8 ()
OP_25_8 ()
{
{
  uint8 tmp, a = (GPR (OP[0])) & 0xff, b = (GPR (OP[1])) & 0xff;
  uint8 tmp, a = (GPR (OP[0])) & 0xff, b = (GPR (OP[1])) & 0xff;
  trace_input ("orb", OP_REG, OP_REG, OP_VOID);
  trace_input ("orb", OP_REG, OP_REG, OP_VOID);
  tmp = a | b;
  tmp = a | b;
  SET_GPR (OP[1], ((GPR (OP[1]) | tmp)));
  SET_GPR (OP[1], ((GPR (OP[1]) | tmp)));
  trace_output_16 (tmp);
  trace_output_16 (tmp);
}
}
 
 
/* orw.  */
/* orw.  */
void
void
OP_26_8 ()
OP_26_8 ()
{
{
  uint16 tmp, a = (OP[0]), b = (GPR (OP[1]));
  uint16 tmp, a = (OP[0]), b = (GPR (OP[1]));
  trace_input ("orw", OP_CONSTANT4, OP_REG, OP_VOID);
  trace_input ("orw", OP_CONSTANT4, OP_REG, OP_VOID);
  tmp = a | b;
  tmp = a | b;
  SET_GPR (OP[1], tmp);
  SET_GPR (OP[1], tmp);
  trace_output_16 (tmp);
  trace_output_16 (tmp);
}
}
 
 
 
 
/* orw.  */
/* orw.  */
void
void
OP_26B_C ()
OP_26B_C ()
{
{
  uint16 tmp, a = (OP[0]), b = (GPR (OP[1]));
  uint16 tmp, a = (OP[0]), b = (GPR (OP[1]));
  trace_input ("orw", OP_CONSTANT16, OP_REG, OP_VOID);
  trace_input ("orw", OP_CONSTANT16, OP_REG, OP_VOID);
  tmp = a | b;
  tmp = a | b;
  SET_GPR (OP[1], tmp);
  SET_GPR (OP[1], tmp);
  trace_output_16 (tmp);
  trace_output_16 (tmp);
}
}
 
 
/* orw.  */
/* orw.  */
void
void
OP_27_8 ()
OP_27_8 ()
{
{
  uint16 tmp, a = (GPR (OP[0])), b = (GPR (OP[1]));
  uint16 tmp, a = (GPR (OP[0])), b = (GPR (OP[1]));
  trace_input ("orw", OP_REG, OP_REG, OP_VOID);
  trace_input ("orw", OP_REG, OP_REG, OP_VOID);
  tmp = a | b;
  tmp = a | b;
  SET_GPR (OP[1], tmp);
  SET_GPR (OP[1], tmp);
  trace_output_16 (tmp);
  trace_output_16 (tmp);
}
}
 
 
 
 
/* lshb.  */
/* lshb.  */
void
void
OP_13_9 ()
OP_13_9 ()
{
{
  uint16 a = OP[0];
  uint16 a = OP[0];
  uint16 tmp, b = (GPR (OP[1])) & 0xFF;
  uint16 tmp, b = (GPR (OP[1])) & 0xFF;
  trace_input ("lshb", OP_CONSTANT4, OP_REG, OP_VOID);
  trace_input ("lshb", OP_CONSTANT4, OP_REG, OP_VOID);
  /* A positive count specifies a shift to the left;
  /* A positive count specifies a shift to the left;
   * A negative count specifies a shift to the right. */
   * A negative count specifies a shift to the right. */
  if (sign_flag)
  if (sign_flag)
    tmp = b >> a;
    tmp = b >> a;
  else
  else
    tmp = b << a;
    tmp = b << a;
 
 
  sign_flag = 0; /* Reset sign_flag.  */
  sign_flag = 0; /* Reset sign_flag.  */
 
 
  SET_GPR (OP[1], ((tmp & 0xFF) | ((GPR (OP[1])) & 0xFF00)));
  SET_GPR (OP[1], ((tmp & 0xFF) | ((GPR (OP[1])) & 0xFF00)));
  trace_output_16 (tmp);
  trace_output_16 (tmp);
}
}
 
 
/* lshb.  */
/* lshb.  */
void
void
OP_44_8 ()
OP_44_8 ()
{
{
  uint16 a = (GPR (OP[0])) & 0xff;
  uint16 a = (GPR (OP[0])) & 0xff;
  uint16 tmp, b = (GPR (OP[1])) & 0xFF;
  uint16 tmp, b = (GPR (OP[1])) & 0xFF;
  trace_input ("lshb", OP_REG, OP_REG, OP_VOID);
  trace_input ("lshb", OP_REG, OP_REG, OP_VOID);
  if (a & ((long)1 << 3))
  if (a & ((long)1 << 3))
    {
    {
      sign_flag = 1;
      sign_flag = 1;
      a = ~(a) + 1;
      a = ~(a) + 1;
    }
    }
  a = (unsigned int) (a & 0x7);
  a = (unsigned int) (a & 0x7);
 
 
  /* A positive count specifies a shift to the left;
  /* A positive count specifies a shift to the left;
   * A negative count specifies a shift to the right. */
   * A negative count specifies a shift to the right. */
  if (sign_flag)
  if (sign_flag)
    tmp = b >> a;
    tmp = b >> a;
  else
  else
    tmp = b << a;
    tmp = b << a;
 
 
  sign_flag = 0; /* Reset sign_flag.  */
  sign_flag = 0; /* Reset sign_flag.  */
  SET_GPR (OP[1], ((tmp & 0xFF) | ((GPR (OP[1])) & 0xFF00)));
  SET_GPR (OP[1], ((tmp & 0xFF) | ((GPR (OP[1])) & 0xFF00)));
  trace_output_16 (tmp);
  trace_output_16 (tmp);
}
}
 
 
/* lshw.  */
/* lshw.  */
void
void
OP_46_8 ()
OP_46_8 ()
{
{
  uint16 tmp, b = GPR (OP[1]);
  uint16 tmp, b = GPR (OP[1]);
  int16 a = GPR (OP[0]);
  int16 a = GPR (OP[0]);
  trace_input ("lshw", OP_REG, OP_REG, OP_VOID);
  trace_input ("lshw", OP_REG, OP_REG, OP_VOID);
  if (a & ((long)1 << 4))
  if (a & ((long)1 << 4))
    {
    {
      sign_flag = 1;
      sign_flag = 1;
      a = ~(a) + 1;
      a = ~(a) + 1;
    }
    }
  a = (unsigned int) (a & 0xf);
  a = (unsigned int) (a & 0xf);
 
 
  /* A positive count specifies a shift to the left;
  /* A positive count specifies a shift to the left;
   * A negative count specifies a shift to the right. */
   * A negative count specifies a shift to the right. */
  if (sign_flag)
  if (sign_flag)
    tmp = b >> a;
    tmp = b >> a;
  else
  else
    tmp = b << a;
    tmp = b << a;
 
 
  sign_flag = 0; /* Reset sign_flag.  */
  sign_flag = 0; /* Reset sign_flag.  */
  SET_GPR (OP[1], (tmp & 0xffff));
  SET_GPR (OP[1], (tmp & 0xffff));
  trace_output_16 (tmp);
  trace_output_16 (tmp);
}
}
 
 
/* lshw.  */
/* lshw.  */
void
void
OP_49_8 ()
OP_49_8 ()
{
{
  uint16 tmp, b = GPR (OP[1]);
  uint16 tmp, b = GPR (OP[1]);
  uint16 a = OP[0];
  uint16 a = OP[0];
  trace_input ("lshw", OP_CONSTANT5, OP_REG, OP_VOID);
  trace_input ("lshw", OP_CONSTANT5, OP_REG, OP_VOID);
  /* A positive count specifies a shift to the left;
  /* A positive count specifies a shift to the left;
   * A negative count specifies a shift to the right. */
   * A negative count specifies a shift to the right. */
  if (sign_flag)
  if (sign_flag)
    tmp = b >> a;
    tmp = b >> a;
  else
  else
    tmp = b << a;
    tmp = b << a;
 
 
  sign_flag = 0; /* Reset sign_flag.  */
  sign_flag = 0; /* Reset sign_flag.  */
  SET_GPR (OP[1], (tmp & 0xffff));
  SET_GPR (OP[1], (tmp & 0xffff));
  trace_output_16 (tmp);
  trace_output_16 (tmp);
}
}
 
 
/* lshd.  */
/* lshd.  */
void
void
OP_25_7 ()
OP_25_7 ()
{
{
  uint32 tmp, b = GPR32 (OP[1]);
  uint32 tmp, b = GPR32 (OP[1]);
  uint16 a = OP[0];
  uint16 a = OP[0];
  trace_input ("lshd", OP_CONSTANT6, OP_REGP, OP_VOID);
  trace_input ("lshd", OP_CONSTANT6, OP_REGP, OP_VOID);
  /* A positive count specifies a shift to the left;
  /* A positive count specifies a shift to the left;
   * A negative count specifies a shift to the right. */
   * A negative count specifies a shift to the right. */
  if (sign_flag)
  if (sign_flag)
    tmp = b >> a;
    tmp = b >> a;
  else
  else
    tmp = b << a;
    tmp = b << a;
 
 
  sign_flag = 0; /* Reset sign flag.  */
  sign_flag = 0; /* Reset sign flag.  */
 
 
  SET_GPR32 (OP[1], tmp);
  SET_GPR32 (OP[1], tmp);
  trace_output_32 (tmp);
  trace_output_32 (tmp);
}
}
 
 
/* lshd.  */
/* lshd.  */
void
void
OP_47_8 ()
OP_47_8 ()
{
{
  uint32 tmp, b = GPR32 (OP[1]);
  uint32 tmp, b = GPR32 (OP[1]);
  uint16 a = GPR (OP[0]);
  uint16 a = GPR (OP[0]);
  trace_input ("lshd", OP_REG, OP_REGP, OP_VOID);
  trace_input ("lshd", OP_REG, OP_REGP, OP_VOID);
  if (a & ((long)1 << 5))
  if (a & ((long)1 << 5))
    {
    {
      sign_flag = 1;
      sign_flag = 1;
      a = ~(a) + 1;
      a = ~(a) + 1;
    }
    }
  a = (unsigned int) (a & 0x1f);
  a = (unsigned int) (a & 0x1f);
  /* A positive count specifies a shift to the left;
  /* A positive count specifies a shift to the left;
   * A negative count specifies a shift to the right. */
   * A negative count specifies a shift to the right. */
  if (sign_flag)
  if (sign_flag)
    tmp = b >> a;
    tmp = b >> a;
  else
  else
    tmp = b << a;
    tmp = b << a;
 
 
  sign_flag = 0; /* Reset sign flag.  */
  sign_flag = 0; /* Reset sign flag.  */
 
 
  SET_GPR32 (OP[1], tmp);
  SET_GPR32 (OP[1], tmp);
  trace_output_32 (tmp);
  trace_output_32 (tmp);
}
}
 
 
/* ashub.  */
/* ashub.  */
void
void
OP_80_9 ()
OP_80_9 ()
{
{
  uint16 a = OP[0];
  uint16 a = OP[0];
  int8 tmp, b = (GPR (OP[1])) & 0xFF;
  int8 tmp, b = (GPR (OP[1])) & 0xFF;
  trace_input ("ashub", OP_CONSTANT4, OP_REG, OP_VOID);
  trace_input ("ashub", OP_CONSTANT4, OP_REG, OP_VOID);
  /* A positive count specifies a shift to the left;
  /* A positive count specifies a shift to the left;
   * A negative count specifies a shift to the right. */
   * A negative count specifies a shift to the right. */
  if (sign_flag)
  if (sign_flag)
    tmp = b >> a;
    tmp = b >> a;
  else
  else
    tmp = b << a;
    tmp = b << a;
 
 
  sign_flag = 0; /* Reset sign flag.  */
  sign_flag = 0; /* Reset sign flag.  */
 
 
  SET_GPR (OP[1], ((tmp & 0xFF) | ((GPR (OP[1])) & 0xff00)));
  SET_GPR (OP[1], ((tmp & 0xFF) | ((GPR (OP[1])) & 0xff00)));
  trace_output_16 (tmp);
  trace_output_16 (tmp);
}
}
 
 
/* ashub.  */
/* ashub.  */
void
void
OP_81_9 ()
OP_81_9 ()
{
{
  uint16 a = OP[0];
  uint16 a = OP[0];
  int8 tmp, b = (GPR (OP[1])) & 0xFF;
  int8 tmp, b = (GPR (OP[1])) & 0xFF;
  trace_input ("ashub", OP_CONSTANT4, OP_REG, OP_VOID);
  trace_input ("ashub", OP_CONSTANT4, OP_REG, OP_VOID);
  /* A positive count specifies a shift to the left;
  /* A positive count specifies a shift to the left;
   * A negative count specifies a shift to the right. */
   * A negative count specifies a shift to the right. */
  if (sign_flag)
  if (sign_flag)
    tmp = b >> a;
    tmp = b >> a;
  else
  else
    tmp = b << a;
    tmp = b << a;
 
 
  sign_flag = 0; /* Reset sign flag.  */
  sign_flag = 0; /* Reset sign flag.  */
 
 
  SET_GPR (OP[1], ((tmp & 0xFF) | ((GPR (OP[1])) & 0xFF00)));
  SET_GPR (OP[1], ((tmp & 0xFF) | ((GPR (OP[1])) & 0xFF00)));
  trace_output_16 (tmp);
  trace_output_16 (tmp);
}
}
 
 
 
 
/* ashub.  */
/* ashub.  */
void
void
OP_41_8 ()
OP_41_8 ()
{
{
  int16 a = (GPR (OP[0]));
  int16 a = (GPR (OP[0]));
  int8 tmp, b = (GPR (OP[1])) & 0xFF;
  int8 tmp, b = (GPR (OP[1])) & 0xFF;
  trace_input ("ashub", OP_REG, OP_REG, OP_VOID);
  trace_input ("ashub", OP_REG, OP_REG, OP_VOID);
 
 
  if (a & ((long)1 << 3))
  if (a & ((long)1 << 3))
    {
    {
      sign_flag = 1;
      sign_flag = 1;
      a = ~(a) + 1;
      a = ~(a) + 1;
    }
    }
  a = (unsigned int) (a & 0x7);
  a = (unsigned int) (a & 0x7);
 
 
  /* A positive count specifies a shift to the left;
  /* A positive count specifies a shift to the left;
   * A negative count specifies a shift to the right. */
   * A negative count specifies a shift to the right. */
  if (sign_flag)
  if (sign_flag)
    tmp = b >> a;
    tmp = b >> a;
  else
  else
    tmp = b << a;
    tmp = b << a;
 
 
  sign_flag = 0; /* Reset sign flag.  */
  sign_flag = 0; /* Reset sign flag.  */
 
 
  SET_GPR (OP[1], ((tmp & 0xFF) | ((GPR (OP[1])) & 0xFF00)));
  SET_GPR (OP[1], ((tmp & 0xFF) | ((GPR (OP[1])) & 0xFF00)));
  trace_output_16 (tmp);
  trace_output_16 (tmp);
}
}
 
 
 
 
/* ashuw.  */
/* ashuw.  */
void
void
OP_42_8 ()
OP_42_8 ()
{
{
  int16 tmp, b = GPR (OP[1]);
  int16 tmp, b = GPR (OP[1]);
  uint16 a = OP[0];
  uint16 a = OP[0];
  trace_input ("ashuw", OP_CONSTANT5, OP_REG, OP_VOID);
  trace_input ("ashuw", OP_CONSTANT5, OP_REG, OP_VOID);
  /* A positive count specifies a shift to the left;
  /* A positive count specifies a shift to the left;
   * A negative count specifies a shift to the right. */
   * A negative count specifies a shift to the right. */
  if (sign_flag)
  if (sign_flag)
    tmp = b >> a;
    tmp = b >> a;
  else
  else
    tmp = b << a;
    tmp = b << a;
 
 
  sign_flag = 0; /* Reset sign flag.  */
  sign_flag = 0; /* Reset sign flag.  */
 
 
  SET_GPR (OP[1], (tmp & 0xffff));
  SET_GPR (OP[1], (tmp & 0xffff));
  trace_output_16 (tmp);
  trace_output_16 (tmp);
}
}
 
 
/* ashuw.  */
/* ashuw.  */
void
void
OP_43_8 ()
OP_43_8 ()
{
{
  int16 tmp, b = GPR (OP[1]);
  int16 tmp, b = GPR (OP[1]);
  uint16 a = OP[0];
  uint16 a = OP[0];
  trace_input ("ashuw", OP_CONSTANT5, OP_REG, OP_VOID);
  trace_input ("ashuw", OP_CONSTANT5, OP_REG, OP_VOID);
  /* A positive count specifies a shift to the left;
  /* A positive count specifies a shift to the left;
   * A negative count specifies a shift to the right. */
   * A negative count specifies a shift to the right. */
  if (sign_flag)
  if (sign_flag)
    tmp = b >> a;
    tmp = b >> a;
  else
  else
    tmp = b << a;
    tmp = b << a;
 
 
  sign_flag = 0; /* Reset sign flag.  */
  sign_flag = 0; /* Reset sign flag.  */
  SET_GPR (OP[1], (tmp & 0xffff));
  SET_GPR (OP[1], (tmp & 0xffff));
  trace_output_16 (tmp);
  trace_output_16 (tmp);
}
}
 
 
/* ashuw.  */
/* ashuw.  */
void
void
OP_45_8 ()
OP_45_8 ()
{
{
  int16 tmp;
  int16 tmp;
  int16 a = GPR (OP[0]), b = GPR (OP[1]);
  int16 a = GPR (OP[0]), b = GPR (OP[1]);
  trace_input ("ashuw", OP_REG, OP_REG, OP_VOID);
  trace_input ("ashuw", OP_REG, OP_REG, OP_VOID);
 
 
  if (a & ((long)1 << 4))
  if (a & ((long)1 << 4))
    {
    {
      sign_flag = 1;
      sign_flag = 1;
      a = ~(a) + 1;
      a = ~(a) + 1;
    }
    }
  a = (unsigned int) (a & 0xf);
  a = (unsigned int) (a & 0xf);
  /* A positive count specifies a shift to the left;
  /* A positive count specifies a shift to the left;
   * A negative count specifies a shift to the right. */
   * A negative count specifies a shift to the right. */
 
 
  if (sign_flag)
  if (sign_flag)
    tmp = b >> a;
    tmp = b >> a;
  else
  else
    tmp = b << a;
    tmp = b << a;
 
 
  sign_flag = 0; /* Reset sign flag.  */
  sign_flag = 0; /* Reset sign flag.  */
  SET_GPR (OP[1], (tmp & 0xffff));
  SET_GPR (OP[1], (tmp & 0xffff));
  trace_output_16 (tmp);
  trace_output_16 (tmp);
}
}
 
 
/* ashud.  */
/* ashud.  */
void
void
OP_26_7 ()
OP_26_7 ()
{
{
  int32 tmp,b = GPR32 (OP[1]);
  int32 tmp,b = GPR32 (OP[1]);
  uint32 a = OP[0];
  uint32 a = OP[0];
  trace_input ("ashud", OP_CONSTANT6, OP_REGP, OP_VOID);
  trace_input ("ashud", OP_CONSTANT6, OP_REGP, OP_VOID);
  /* A positive count specifies a shift to the left;
  /* A positive count specifies a shift to the left;
   * A negative count specifies a shift to the right. */
   * A negative count specifies a shift to the right. */
  if (sign_flag)
  if (sign_flag)
    tmp = b >> a;
    tmp = b >> a;
  else
  else
    tmp = b << a;
    tmp = b << a;
 
 
  sign_flag = 0; /* Reset sign flag.  */
  sign_flag = 0; /* Reset sign flag.  */
  SET_GPR32 (OP[1], tmp);
  SET_GPR32 (OP[1], tmp);
  trace_output_32 (tmp);
  trace_output_32 (tmp);
}
}
 
 
/* ashud.  */
/* ashud.  */
void
void
OP_27_7 ()
OP_27_7 ()
{
{
  int32 tmp;
  int32 tmp;
  int32 a = OP[0], b = GPR32 (OP[1]);
  int32 a = OP[0], b = GPR32 (OP[1]);
  trace_input ("ashud", OP_CONSTANT6, OP_REGP, OP_VOID);
  trace_input ("ashud", OP_CONSTANT6, OP_REGP, OP_VOID);
  /* A positive count specifies a shift to the left;
  /* A positive count specifies a shift to the left;
   * A negative count specifies a shift to the right. */
   * A negative count specifies a shift to the right. */
  if (sign_flag)
  if (sign_flag)
    tmp = b >> a;
    tmp = b >> a;
  else
  else
    tmp = b << a;
    tmp = b << a;
 
 
  sign_flag = 0; /* Reset sign flag.  */
  sign_flag = 0; /* Reset sign flag.  */
  SET_GPR32 (OP[1], tmp);
  SET_GPR32 (OP[1], tmp);
  trace_output_32 (tmp);
  trace_output_32 (tmp);
}
}
 
 
/* ashud.  */
/* ashud.  */
void
void
OP_48_8 ()
OP_48_8 ()
{
{
  int32 tmp;
  int32 tmp;
  int32 a = GPR32 (OP[0]), b = GPR32 (OP[1]);
  int32 a = GPR32 (OP[0]), b = GPR32 (OP[1]);
  trace_input ("ashud", OP_REGP, OP_REGP, OP_VOID);
  trace_input ("ashud", OP_REGP, OP_REGP, OP_VOID);
 
 
  if (a & ((long)1 << 5))
  if (a & ((long)1 << 5))
    {
    {
      sign_flag = 1;
      sign_flag = 1;
      a = ~(a) + 1;
      a = ~(a) + 1;
    }
    }
  a = (unsigned int) (a & 0x1f);
  a = (unsigned int) (a & 0x1f);
  /* A positive count specifies a shift to the left;
  /* A positive count specifies a shift to the left;
   * A negative count specifies a shift to the right. */
   * A negative count specifies a shift to the right. */
  if (sign_flag)
  if (sign_flag)
    tmp = b >> a;
    tmp = b >> a;
  else
  else
    tmp = b << a;
    tmp = b << a;
 
 
  sign_flag = 0; /* Reset sign flag.  */
  sign_flag = 0; /* Reset sign flag.  */
  SET_GPR32 (OP[1], tmp);
  SET_GPR32 (OP[1], tmp);
  trace_output_32 (tmp);
  trace_output_32 (tmp);
}
}
 
 
 
 
/* storm.  */
/* storm.  */
void
void
OP_16_D ()
OP_16_D ()
{
{
  uint32 addr = GPR (1);
  uint32 addr = GPR (1);
  uint16 count = OP[0], reg = 2;
  uint16 count = OP[0], reg = 2;
  trace_input ("storm", OP_CONSTANT4, OP_VOID, OP_VOID);
  trace_input ("storm", OP_CONSTANT4, OP_VOID, OP_VOID);
  if ((addr & 1))
  if ((addr & 1))
    {
    {
      State.exception = SIG_CR16_BUS;
      State.exception = SIG_CR16_BUS;
      State.pc_changed = 1; /* Don't increment the PC. */
      State.pc_changed = 1; /* Don't increment the PC. */
      trace_output_void ();
      trace_output_void ();
      return;
      return;
    }
    }
 
 
  while (count)
  while (count)
    {
    {
      SW (addr, (GPR (reg)));
      SW (addr, (GPR (reg)));
      addr +=2;
      addr +=2;
      --count;
      --count;
      reg++;
      reg++;
      if (reg == 6) reg = 8;
      if (reg == 6) reg = 8;
    };
    };
 
 
  SET_GPR (1, addr);
  SET_GPR (1, addr);
 
 
  trace_output_void ();
  trace_output_void ();
}
}
 
 
 
 
/* stormp.  */
/* stormp.  */
void
void
OP_17_D ()
OP_17_D ()
{
{
  uint32 addr = GPR32 (6);
  uint32 addr = GPR32 (6);
  uint16 count = OP[0], reg = 2;
  uint16 count = OP[0], reg = 2;
  trace_input ("stormp", OP_CONSTANT4, OP_VOID, OP_VOID);
  trace_input ("stormp", OP_CONSTANT4, OP_VOID, OP_VOID);
  if ((addr & 1))
  if ((addr & 1))
    {
    {
      State.exception = SIG_CR16_BUS;
      State.exception = SIG_CR16_BUS;
      State.pc_changed = 1; /* Don't increment the PC. */
      State.pc_changed = 1; /* Don't increment the PC. */
      trace_output_void ();
      trace_output_void ();
      return;
      return;
    }
    }
 
 
  while (count)
  while (count)
    {
    {
      SW (addr, (GPR (reg)));
      SW (addr, (GPR (reg)));
      addr +=2;
      addr +=2;
      --count;
      --count;
      reg++;
      reg++;
      if (reg == 6) reg = 8;
      if (reg == 6) reg = 8;
    };
    };
 
 
  SET_GPR32 (6, addr);
  SET_GPR32 (6, addr);
  trace_output_void ();
  trace_output_void ();
}
}
 
 
/* subb.  */
/* subb.  */
void
void
OP_38_8 ()
OP_38_8 ()
{
{
  uint8 a = OP[0];
  uint8 a = OP[0];
  uint8 b = (GPR (OP[1])) & 0xff;
  uint8 b = (GPR (OP[1])) & 0xff;
  uint16 tmp = (~a + 1 + b) & 0xff;
  uint16 tmp = (~a + 1 + b) & 0xff;
  trace_input ("subb", OP_CONSTANT4, OP_REG, OP_VOID);
  trace_input ("subb", OP_CONSTANT4, OP_REG, OP_VOID);
  /* see ../common/sim-alu.h for a more extensive discussion on how to
  /* see ../common/sim-alu.h for a more extensive discussion on how to
     compute the carry/overflow bits. */
     compute the carry/overflow bits. */
  SET_PSR_C (tmp > 0xff);
  SET_PSR_C (tmp > 0xff);
  SET_PSR_F (((a & 0x80) != (b & 0x80)) && ((b & 0x80) != (tmp & 0x80)));
  SET_PSR_F (((a & 0x80) != (b & 0x80)) && ((b & 0x80) != (tmp & 0x80)));
  SET_GPR (OP[1], (tmp | ((GPR (OP[1])) & 0xff00)));
  SET_GPR (OP[1], (tmp | ((GPR (OP[1])) & 0xff00)));
  trace_output_16 (tmp);
  trace_output_16 (tmp);
}
}
 
 
/* subb.  */
/* subb.  */
void
void
OP_38B_C ()
OP_38B_C ()
{
{
  uint8 a = OP[0] & 0xFF;
  uint8 a = OP[0] & 0xFF;
  uint8 b = (GPR (OP[1])) & 0xFF;
  uint8 b = (GPR (OP[1])) & 0xFF;
  uint16 tmp = (~a + 1 + b) & 0xFF;
  uint16 tmp = (~a + 1 + b) & 0xFF;
  trace_input ("subb", OP_CONSTANT16, OP_REG, OP_VOID);
  trace_input ("subb", OP_CONSTANT16, OP_REG, OP_VOID);
  /* see ../common/sim-alu.h for a more extensive discussion on how to
  /* see ../common/sim-alu.h for a more extensive discussion on how to
     compute the carry/overflow bits. */
     compute the carry/overflow bits. */
  SET_PSR_C (tmp > 0xff);
  SET_PSR_C (tmp > 0xff);
  SET_PSR_F (((a & 0x80) != (b & 0x80)) && ((b & 0x80) != (tmp & 0x80)));
  SET_PSR_F (((a & 0x80) != (b & 0x80)) && ((b & 0x80) != (tmp & 0x80)));
  SET_GPR (OP[1], (tmp | ((GPR (OP[1])) & 0xff00)));
  SET_GPR (OP[1], (tmp | ((GPR (OP[1])) & 0xff00)));
  trace_output_16 (tmp);
  trace_output_16 (tmp);
}
}
 
 
/* subb.  */
/* subb.  */
void
void
OP_39_8 ()
OP_39_8 ()
{
{
  uint8 a = (GPR (OP[0])) & 0xFF;
  uint8 a = (GPR (OP[0])) & 0xFF;
  uint8 b = (GPR (OP[1])) & 0xFF;
  uint8 b = (GPR (OP[1])) & 0xFF;
  uint16 tmp = (~a + 1 + b) & 0xff;
  uint16 tmp = (~a + 1 + b) & 0xff;
  trace_input ("subb", OP_REG, OP_REG, OP_VOID);
  trace_input ("subb", OP_REG, OP_REG, OP_VOID);
  /* see ../common/sim-alu.h for a more extensive discussion on how to
  /* see ../common/sim-alu.h for a more extensive discussion on how to
     compute the carry/overflow bits. */
     compute the carry/overflow bits. */
  SET_PSR_C (tmp > 0xff);
  SET_PSR_C (tmp > 0xff);
  SET_PSR_F (((a & 0x80) != (b & 0x80)) && ((b & 0x80) != (tmp & 0x80)));
  SET_PSR_F (((a & 0x80) != (b & 0x80)) && ((b & 0x80) != (tmp & 0x80)));
  SET_GPR (OP[1], (tmp | ((GPR (OP[1])) & 0xff00)));
  SET_GPR (OP[1], (tmp | ((GPR (OP[1])) & 0xff00)));
  trace_output_16 (tmp);
  trace_output_16 (tmp);
}
}
 
 
/* subw.  */
/* subw.  */
void
void
OP_3A_8 ()
OP_3A_8 ()
{
{
  uint16 a = OP[0];
  uint16 a = OP[0];
  uint16 b = GPR (OP[1]);
  uint16 b = GPR (OP[1]);
  uint16 tmp = (~a + 1 + b);
  uint16 tmp = (~a + 1 + b);
  trace_input ("subw", OP_CONSTANT4, OP_REG, OP_VOID);
  trace_input ("subw", OP_CONSTANT4, OP_REG, OP_VOID);
  /* see ../common/sim-alu.h for a more extensive discussion on how to
  /* see ../common/sim-alu.h for a more extensive discussion on how to
     compute the carry/overflow bits. */
     compute the carry/overflow bits. */
  SET_PSR_C (tmp > 0xffff);
  SET_PSR_C (tmp > 0xffff);
  SET_PSR_F (((a & 0x8000) != (b & 0x8000)) && ((b & 0x8000) != (tmp & 0x8000)));
  SET_PSR_F (((a & 0x8000) != (b & 0x8000)) && ((b & 0x8000) != (tmp & 0x8000)));
  SET_GPR (OP[1], tmp);
  SET_GPR (OP[1], tmp);
  trace_output_16 (tmp);
  trace_output_16 (tmp);
}
}
 
 
/* subw.  */
/* subw.  */
void
void
OP_3AB_C ()
OP_3AB_C ()
{
{
  uint16 a = OP[0];
  uint16 a = OP[0];
  uint16 b = GPR (OP[1]);
  uint16 b = GPR (OP[1]);
  uint32 tmp = (~a + 1 + b);
  uint32 tmp = (~a + 1 + b);
  trace_input ("subw", OP_CONSTANT16, OP_REG, OP_VOID);
  trace_input ("subw", OP_CONSTANT16, OP_REG, OP_VOID);
  /* see ../common/sim-alu.h for a more extensive discussion on how to
  /* see ../common/sim-alu.h for a more extensive discussion on how to
     compute the carry/overflow bits. */
     compute the carry/overflow bits. */
  SET_PSR_C (tmp > 0xffff);
  SET_PSR_C (tmp > 0xffff);
  SET_PSR_F (((a & 0x8000) != (b & 0x8000)) && ((b & 0x8000) != (tmp & 0x8000)));
  SET_PSR_F (((a & 0x8000) != (b & 0x8000)) && ((b & 0x8000) != (tmp & 0x8000)));
  SET_GPR (OP[1], tmp & 0xffff);
  SET_GPR (OP[1], tmp & 0xffff);
  trace_output_16 (tmp);
  trace_output_16 (tmp);
}
}
 
 
/* subw.  */
/* subw.  */
void
void
OP_3B_8 ()
OP_3B_8 ()
{
{
  uint16 a = GPR (OP[0]);
  uint16 a = GPR (OP[0]);
  uint16 b = GPR (OP[1]);
  uint16 b = GPR (OP[1]);
  uint32 tmp = (~a + 1 + b);
  uint32 tmp = (~a + 1 + b);
  trace_input ("subw", OP_REG, OP_REG, OP_VOID);
  trace_input ("subw", OP_REG, OP_REG, OP_VOID);
  /* see ../common/sim-alu.h for a more extensive discussion on how to
  /* see ../common/sim-alu.h for a more extensive discussion on how to
     compute the carry/overflow bits. */
     compute the carry/overflow bits. */
  SET_PSR_C (tmp > 0xffff);
  SET_PSR_C (tmp > 0xffff);
  SET_PSR_F (((a & 0x8000) != (b & 0x8000)) && ((b & 0x8000) != (tmp & 0x8000)));
  SET_PSR_F (((a & 0x8000) != (b & 0x8000)) && ((b & 0x8000) != (tmp & 0x8000)));
  SET_GPR (OP[1], tmp & 0xffff);
  SET_GPR (OP[1], tmp & 0xffff);
  trace_output_16 (tmp);
  trace_output_16 (tmp);
}
}
 
 
/* subcb.  */
/* subcb.  */
void
void
OP_3C_8 ()
OP_3C_8 ()
{
{
  uint8 a = OP[0];
  uint8 a = OP[0];
  uint8 b = (GPR (OP[1])) & 0xff;
  uint8 b = (GPR (OP[1])) & 0xff;
  //uint16 tmp1 = a + 1;
  //uint16 tmp1 = a + 1;
  uint16 tmp1 = a + (PSR_C);
  uint16 tmp1 = a + (PSR_C);
  uint16 tmp = (~tmp1 + 1 + b);
  uint16 tmp = (~tmp1 + 1 + b);
  trace_input ("subcb", OP_CONSTANT4, OP_REG, OP_VOID);
  trace_input ("subcb", OP_CONSTANT4, OP_REG, OP_VOID);
  /* see ../common/sim-alu.h for a more extensive discussion on how to
  /* see ../common/sim-alu.h for a more extensive discussion on how to
     compute the carry/overflow bits. */
     compute the carry/overflow bits. */
  SET_PSR_C (tmp > 0xff);
  SET_PSR_C (tmp > 0xff);
  SET_PSR_F (((a & 0x80) != (b & 0x80)) && ((b & 0x80) != (tmp & 0x80)));
  SET_PSR_F (((a & 0x80) != (b & 0x80)) && ((b & 0x80) != (tmp & 0x80)));
  SET_GPR (OP[1], tmp);
  SET_GPR (OP[1], tmp);
  trace_output_16 (tmp);
  trace_output_16 (tmp);
}
}
 
 
/* subcb.  */
/* subcb.  */
void
void
OP_3CB_C ()
OP_3CB_C ()
{
{
  uint16 a = OP[0];
  uint16 a = OP[0];
  uint16 b = (GPR (OP[1])) & 0xff;
  uint16 b = (GPR (OP[1])) & 0xff;
  //uint16 tmp1 = a + 1;
  //uint16 tmp1 = a + 1;
  uint16 tmp1 = a + (PSR_C);
  uint16 tmp1 = a + (PSR_C);
  uint16 tmp = (~tmp1 + 1 + b);
  uint16 tmp = (~tmp1 + 1 + b);
  trace_input ("subcb", OP_CONSTANT16, OP_REG, OP_VOID);
  trace_input ("subcb", OP_CONSTANT16, OP_REG, OP_VOID);
  /* see ../common/sim-alu.h for a more extensive discussion on how to
  /* see ../common/sim-alu.h for a more extensive discussion on how to
     compute the carry/overflow bits. */
     compute the carry/overflow bits. */
  SET_PSR_C (tmp > 0xff);
  SET_PSR_C (tmp > 0xff);
  SET_PSR_F (((a & 0x80) != (b & 0x80)) && ((b & 0x80) != (tmp & 0x80)));
  SET_PSR_F (((a & 0x80) != (b & 0x80)) && ((b & 0x80) != (tmp & 0x80)));
  SET_GPR (OP[1], tmp);
  SET_GPR (OP[1], tmp);
  trace_output_16 (tmp);
  trace_output_16 (tmp);
}
}
 
 
/* subcb.  */
/* subcb.  */
void
void
OP_3D_8 ()
OP_3D_8 ()
{
{
  uint16 a = (GPR (OP[0])) & 0xff;
  uint16 a = (GPR (OP[0])) & 0xff;
  uint16 b = (GPR (OP[1])) & 0xff;
  uint16 b = (GPR (OP[1])) & 0xff;
  uint16 tmp1 = a + (PSR_C);
  uint16 tmp1 = a + (PSR_C);
  uint16 tmp = (~tmp1 + 1 + b);
  uint16 tmp = (~tmp1 + 1 + b);
  trace_input ("subcb", OP_REG, OP_REG, OP_VOID);
  trace_input ("subcb", OP_REG, OP_REG, OP_VOID);
  /* see ../common/sim-alu.h for a more extensive discussion on how to
  /* see ../common/sim-alu.h for a more extensive discussion on how to
     compute the carry/overflow bits. */
     compute the carry/overflow bits. */
  SET_PSR_C (tmp > 0xff);
  SET_PSR_C (tmp > 0xff);
  SET_PSR_F (((a & 0x80) != (b & 0x80)) && ((b & 0x80) != (tmp & 0x80)));
  SET_PSR_F (((a & 0x80) != (b & 0x80)) && ((b & 0x80) != (tmp & 0x80)));
  SET_GPR (OP[1], tmp);
  SET_GPR (OP[1], tmp);
  trace_output_16 (tmp);
  trace_output_16 (tmp);
}
}
 
 
/* subcw.  */
/* subcw.  */
void
void
OP_3E_8 ()
OP_3E_8 ()
{
{
  uint16 a = OP[0], b = (GPR (OP[1]));
  uint16 a = OP[0], b = (GPR (OP[1]));
  uint16 tmp1 = a + (PSR_C);
  uint16 tmp1 = a + (PSR_C);
  uint16 tmp = (~tmp1 + 1  + b);
  uint16 tmp = (~tmp1 + 1  + b);
  trace_input ("subcw", OP_CONSTANT4, OP_REG, OP_VOID);
  trace_input ("subcw", OP_CONSTANT4, OP_REG, OP_VOID);
  /* see ../common/sim-alu.h for a more extensive discussion on how to
  /* see ../common/sim-alu.h for a more extensive discussion on how to
     compute the carry/overflow bits. */
     compute the carry/overflow bits. */
  SET_PSR_C (tmp > 0xffff);
  SET_PSR_C (tmp > 0xffff);
  SET_PSR_F (((a & 0x8000) != (b & 0x8000)) && ((b & 0x8000) != (tmp & 0x8000)));
  SET_PSR_F (((a & 0x8000) != (b & 0x8000)) && ((b & 0x8000) != (tmp & 0x8000)));
  SET_GPR (OP[1], tmp);
  SET_GPR (OP[1], tmp);
  trace_output_16 (tmp);
  trace_output_16 (tmp);
}
}
 
 
/* subcw.  */
/* subcw.  */
void
void
OP_3EB_C ()
OP_3EB_C ()
{
{
  int16 a = OP[0];
  int16 a = OP[0];
  uint16 b = GPR (OP[1]);
  uint16 b = GPR (OP[1]);
  uint16 tmp1 = a + (PSR_C);
  uint16 tmp1 = a + (PSR_C);
  uint16 tmp = (~tmp1 + 1  + b);
  uint16 tmp = (~tmp1 + 1  + b);
  trace_input ("subcw", OP_CONSTANT16, OP_REG, OP_VOID);
  trace_input ("subcw", OP_CONSTANT16, OP_REG, OP_VOID);
  /* see ../common/sim-alu.h for a more extensive discussion on how to
  /* see ../common/sim-alu.h for a more extensive discussion on how to
     compute the carry/overflow bits. */
     compute the carry/overflow bits. */
  SET_PSR_C (tmp > 0xffff);
  SET_PSR_C (tmp > 0xffff);
  SET_PSR_F (((a & 0x8000) != (b & 0x8000)) && ((b & 0x8000) != (tmp & 0x8000)));
  SET_PSR_F (((a & 0x8000) != (b & 0x8000)) && ((b & 0x8000) != (tmp & 0x8000)));
  SET_GPR (OP[1], tmp);
  SET_GPR (OP[1], tmp);
  trace_output_16 (tmp);
  trace_output_16 (tmp);
}
}
 
 
/* subcw.  */
/* subcw.  */
void
void
OP_3F_8 ()
OP_3F_8 ()
{
{
  uint16 a = (GPR (OP[0])), b = (GPR (OP[1]));
  uint16 a = (GPR (OP[0])), b = (GPR (OP[1]));
  uint16 tmp1 = a + (PSR_C);
  uint16 tmp1 = a + (PSR_C);
  uint16 tmp = (~tmp1 + 1  + b);
  uint16 tmp = (~tmp1 + 1  + b);
  trace_input ("subcw", OP_REG, OP_REG, OP_VOID);
  trace_input ("subcw", OP_REG, OP_REG, OP_VOID);
  /* see ../common/sim-alu.h for a more extensive discussion on how to
  /* see ../common/sim-alu.h for a more extensive discussion on how to
     compute the carry/overflow bits. */
     compute the carry/overflow bits. */
  SET_PSR_C (tmp > 0xffff);
  SET_PSR_C (tmp > 0xffff);
  SET_PSR_F (((a & 0x8000) != (b & 0x8000)) && ((b & 0x8000) != (tmp & 0x8000)));
  SET_PSR_F (((a & 0x8000) != (b & 0x8000)) && ((b & 0x8000) != (tmp & 0x8000)));
  SET_GPR (OP[1], tmp);
  SET_GPR (OP[1], tmp);
  trace_output_16 (tmp);
  trace_output_16 (tmp);
}
}
 
 
/* subd.  */
/* subd.  */
void
void
OP_3_C ()
OP_3_C ()
{
{
  int32 a = OP[0];
  int32 a = OP[0];
  uint32 b = GPR32 (OP[1]);
  uint32 b = GPR32 (OP[1]);
  uint32 tmp = (~a + 1 + b);
  uint32 tmp = (~a + 1 + b);
  trace_input ("subd", OP_CONSTANT32, OP_REGP, OP_VOID);
  trace_input ("subd", OP_CONSTANT32, OP_REGP, OP_VOID);
  /* see ../common/sim-alu.h for a more extensive discussion on how to
  /* see ../common/sim-alu.h for a more extensive discussion on how to
     compute the carry/overflow bits. */
     compute the carry/overflow bits. */
  SET_PSR_C (tmp > 0xffffffff);
  SET_PSR_C (tmp > 0xffffffff);
  SET_PSR_F (((a & 0x80000000) != (b & 0x80000000)) &&
  SET_PSR_F (((a & 0x80000000) != (b & 0x80000000)) &&
             ((b & 0x80000000) != (tmp & 0x80000000)));
             ((b & 0x80000000) != (tmp & 0x80000000)));
  SET_GPR32 (OP[1], tmp);
  SET_GPR32 (OP[1], tmp);
  trace_output_32 (tmp);
  trace_output_32 (tmp);
}
}
 
 
/* subd.  */
/* subd.  */
void
void
OP_14C_14 ()
OP_14C_14 ()
{
{
  uint32 a = GPR32 (OP[0]);
  uint32 a = GPR32 (OP[0]);
  uint32 b = GPR32 (OP[1]);
  uint32 b = GPR32 (OP[1]);
  uint32 tmp = (~a + 1 + b);
  uint32 tmp = (~a + 1 + b);
  trace_input ("subd", OP_REGP, OP_REGP, OP_VOID);
  trace_input ("subd", OP_REGP, OP_REGP, OP_VOID);
  /* see ../common/sim-alu.h for a more extensive discussion on how to
  /* see ../common/sim-alu.h for a more extensive discussion on how to
     compute the carry/overflow bits. */
     compute the carry/overflow bits. */
  SET_PSR_C (tmp > 0xffffffff);
  SET_PSR_C (tmp > 0xffffffff);
  SET_PSR_F (((a & 0x80000000) != (b & 0x80000000)) &&
  SET_PSR_F (((a & 0x80000000) != (b & 0x80000000)) &&
             ((b & 0x80000000) != (tmp & 0x80000000)));
             ((b & 0x80000000) != (tmp & 0x80000000)));
  SET_GPR32 (OP[1], tmp);
  SET_GPR32 (OP[1], tmp);
  trace_output_32 (tmp);
  trace_output_32 (tmp);
}
}
 
 
/* excp.  */
/* excp.  */
void
void
OP_C_C ()
OP_C_C ()
{
{
  trace_input ("excp", OP_CONSTANT4, OP_VOID, OP_VOID);
  trace_input ("excp", OP_CONSTANT4, OP_VOID, OP_VOID);
  switch (OP[0])
  switch (OP[0])
    {
    {
    default:
    default:
#if (DEBUG & DEBUG_TRAP) == 0
#if (DEBUG & DEBUG_TRAP) == 0
      {
      {
#if 0
#if 0
        uint16 vec = OP[0] + TRAP_VECTOR_START;
        uint16 vec = OP[0] + TRAP_VECTOR_START;
        SET_BPC (PC + 1);
        SET_BPC (PC + 1);
        SET_BPSR (PSR);
        SET_BPSR (PSR);
        SET_PSR (PSR & PSR_SM_BIT);
        SET_PSR (PSR & PSR_SM_BIT);
        JMP (vec);
        JMP (vec);
        break;
        break;
#endif
#endif
      }
      }
#else                   /* if debugging use trap to print registers */
#else                   /* if debugging use trap to print registers */
      {
      {
        int i;
        int i;
        static int first_time = 1;
        static int first_time = 1;
 
 
        if (first_time)
        if (first_time)
          {
          {
            first_time = 0;
            first_time = 0;
            (*cr16_callback->printf_filtered) (cr16_callback, "Trap  #     PC ");
            (*cr16_callback->printf_filtered) (cr16_callback, "Trap  #     PC ");
            for (i = 0; i < 16; i++)
            for (i = 0; i < 16; i++)
              (*cr16_callback->printf_filtered) (cr16_callback, "  %sr%d", (i > 9) ? "" : " ", i);
              (*cr16_callback->printf_filtered) (cr16_callback, "  %sr%d", (i > 9) ? "" : " ", i);
            (*cr16_callback->printf_filtered) (cr16_callback, "         a0         a1 f0 f1 c\n");
            (*cr16_callback->printf_filtered) (cr16_callback, "         a0         a1 f0 f1 c\n");
          }
          }
 
 
        (*cr16_callback->printf_filtered) (cr16_callback, "Trap %2d 0x%.4x:", (int)OP[0], (int)PC);
        (*cr16_callback->printf_filtered) (cr16_callback, "Trap %2d 0x%.4x:", (int)OP[0], (int)PC);
 
 
        for (i = 0; i < 16; i++)
        for (i = 0; i < 16; i++)
          (*cr16_callback->printf_filtered) (cr16_callback, " %.4x", (int) GPR (i));
          (*cr16_callback->printf_filtered) (cr16_callback, " %.4x", (int) GPR (i));
 
 
        for (i = 0; i < 2; i++)
        for (i = 0; i < 2; i++)
          (*cr16_callback->printf_filtered) (cr16_callback, " %.2x%.8lx",
          (*cr16_callback->printf_filtered) (cr16_callback, " %.2x%.8lx",
                                             ((int)(ACC (i) >> 32) & 0xff),
                                             ((int)(ACC (i) >> 32) & 0xff),
                                             ((unsigned long) ACC (i)) & 0xffffffff);
                                             ((unsigned long) ACC (i)) & 0xffffffff);
 
 
        (*cr16_callback->printf_filtered) (cr16_callback, "  %d  %d %d\n",
        (*cr16_callback->printf_filtered) (cr16_callback, "  %d  %d %d\n",
                                           PSR_F != 0, PSR_F != 0, PSR_C != 0);
                                           PSR_F != 0, PSR_F != 0, PSR_C != 0);
        (*cr16_callback->flush_stdout) (cr16_callback);
        (*cr16_callback->flush_stdout) (cr16_callback);
        break;
        break;
      }
      }
#endif
#endif
    case 8:                     /* new system call trap */
    case 8:                     /* new system call trap */
      /* Trap 8 is used for simulating low-level I/O */
      /* Trap 8 is used for simulating low-level I/O */
      {
      {
        unsigned32 result = 0;
        unsigned32 result = 0;
        errno = 0;
        errno = 0;
 
 
/* Registers passed to trap 0.  */
/* Registers passed to trap 0.  */
 
 
#define FUNC   GPR (0)  /* function number.  */
#define FUNC   GPR (0)  /* function number.  */
#define PARM1  GPR (2)  /* optional parm 1.  */
#define PARM1  GPR (2)  /* optional parm 1.  */
#define PARM2  GPR (3)  /* optional parm 2.  */
#define PARM2  GPR (3)  /* optional parm 2.  */
#define PARM3  GPR (4)  /* optional parm 3.  */
#define PARM3  GPR (4)  /* optional parm 3.  */
#define PARM4  GPR (5)  /* optional parm 4.  */
#define PARM4  GPR (5)  /* optional parm 4.  */
 
 
/* Registers set by trap 0 */
/* Registers set by trap 0 */
 
 
#define RETVAL(X)   do { result = (0xffff & (X));SET_GPR (0, result);} while (0)
#define RETVAL(X)   do { result = (0xffff & (X));SET_GPR (0, result);} while (0)
#define RETVAL32(X) do { result = (X); SET_GPR32 (0, result);} while (0)
#define RETVAL32(X) do { result = (X); SET_GPR32 (0, result);} while (0)
#define RETERR(X) SET_GPR (4, (X))              /* return error code.  */
#define RETERR(X) SET_GPR (4, (X))              /* return error code.  */
 
 
/* Turn a pointer in a register into a pointer into real memory. */
/* Turn a pointer in a register into a pointer into real memory. */
 
 
#define MEMPTR(x) ((char *)(dmem_addr(x)))
#define MEMPTR(x) ((char *)(dmem_addr(x)))
 
 
        switch (FUNC)
        switch (FUNC)
          {
          {
#if !defined(__GO32__) && !defined(_WIN32)
#if !defined(__GO32__) && !defined(_WIN32)
          case TARGET_SYS_fork:
          case TARGET_SYS_fork:
            trace_input ("<fork>", OP_VOID, OP_VOID, OP_VOID);
            trace_input ("<fork>", OP_VOID, OP_VOID, OP_VOID);
            RETVAL (fork ());
            RETVAL (fork ());
            trace_output_16 (result);
            trace_output_16 (result);
            break;
            break;
 
 
#define getpid() 47
#define getpid() 47
          case TARGET_SYS_getpid:
          case TARGET_SYS_getpid:
            trace_input ("<getpid>", OP_VOID, OP_VOID, OP_VOID);
            trace_input ("<getpid>", OP_VOID, OP_VOID, OP_VOID);
            RETVAL (getpid ());
            RETVAL (getpid ());
            trace_output_16 (result);
            trace_output_16 (result);
            break;
            break;
 
 
          case TARGET_SYS_kill:
          case TARGET_SYS_kill:
            trace_input ("<kill>", OP_REG, OP_REG, OP_VOID);
            trace_input ("<kill>", OP_REG, OP_REG, OP_VOID);
            if (PARM1 == getpid ())
            if (PARM1 == getpid ())
              {
              {
                trace_output_void ();
                trace_output_void ();
                State.exception = PARM2;
                State.exception = PARM2;
              }
              }
            else
            else
              {
              {
                int os_sig = -1;
                int os_sig = -1;
                switch (PARM2)
                switch (PARM2)
                  {
                  {
#ifdef SIGHUP
#ifdef SIGHUP
                  case 1: os_sig = SIGHUP;      break;
                  case 1: os_sig = SIGHUP;      break;
#endif
#endif
#ifdef SIGINT
#ifdef SIGINT
                  case 2: os_sig = SIGINT;      break;
                  case 2: os_sig = SIGINT;      break;
#endif
#endif
#ifdef SIGQUIT
#ifdef SIGQUIT
                  case 3: os_sig = SIGQUIT;     break;
                  case 3: os_sig = SIGQUIT;     break;
#endif
#endif
#ifdef SIGILL
#ifdef SIGILL
                  case 4: os_sig = SIGILL;      break;
                  case 4: os_sig = SIGILL;      break;
#endif
#endif
#ifdef SIGTRAP
#ifdef SIGTRAP
                  case 5: os_sig = SIGTRAP;     break;
                  case 5: os_sig = SIGTRAP;     break;
#endif
#endif
#ifdef SIGABRT
#ifdef SIGABRT
                  case 6: os_sig = SIGABRT;     break;
                  case 6: os_sig = SIGABRT;     break;
#elif defined(SIGIOT)
#elif defined(SIGIOT)
                  case 6: os_sig = SIGIOT;      break;
                  case 6: os_sig = SIGIOT;      break;
#endif
#endif
#ifdef SIGEMT
#ifdef SIGEMT
                  case 7: os_sig = SIGEMT;      break;
                  case 7: os_sig = SIGEMT;      break;
#endif
#endif
#ifdef SIGFPE
#ifdef SIGFPE
                  case 8: os_sig = SIGFPE;      break;
                  case 8: os_sig = SIGFPE;      break;
#endif
#endif
#ifdef SIGKILL
#ifdef SIGKILL
                  case 9: os_sig = SIGKILL;     break;
                  case 9: os_sig = SIGKILL;     break;
#endif
#endif
#ifdef SIGBUS
#ifdef SIGBUS
                  case 10: os_sig = SIGBUS;     break;
                  case 10: os_sig = SIGBUS;     break;
#endif
#endif
#ifdef SIGSEGV
#ifdef SIGSEGV
                  case 11: os_sig = SIGSEGV;    break;
                  case 11: os_sig = SIGSEGV;    break;
#endif
#endif
#ifdef SIGSYS
#ifdef SIGSYS
                  case 12: os_sig = SIGSYS;     break;
                  case 12: os_sig = SIGSYS;     break;
#endif
#endif
#ifdef SIGPIPE
#ifdef SIGPIPE
                  case 13: os_sig = SIGPIPE;    break;
                  case 13: os_sig = SIGPIPE;    break;
#endif
#endif
#ifdef SIGALRM
#ifdef SIGALRM
                  case 14: os_sig = SIGALRM;    break;
                  case 14: os_sig = SIGALRM;    break;
#endif
#endif
#ifdef SIGTERM
#ifdef SIGTERM
                  case 15: os_sig = SIGTERM;    break;
                  case 15: os_sig = SIGTERM;    break;
#endif
#endif
#ifdef SIGURG
#ifdef SIGURG
                  case 16: os_sig = SIGURG;     break;
                  case 16: os_sig = SIGURG;     break;
#endif
#endif
#ifdef SIGSTOP
#ifdef SIGSTOP
                  case 17: os_sig = SIGSTOP;    break;
                  case 17: os_sig = SIGSTOP;    break;
#endif
#endif
#ifdef SIGTSTP
#ifdef SIGTSTP
                  case 18: os_sig = SIGTSTP;    break;
                  case 18: os_sig = SIGTSTP;    break;
#endif
#endif
#ifdef SIGCONT
#ifdef SIGCONT
                  case 19: os_sig = SIGCONT;    break;
                  case 19: os_sig = SIGCONT;    break;
#endif
#endif
#ifdef SIGCHLD
#ifdef SIGCHLD
                  case 20: os_sig = SIGCHLD;    break;
                  case 20: os_sig = SIGCHLD;    break;
#elif defined(SIGCLD)
#elif defined(SIGCLD)
                  case 20: os_sig = SIGCLD;     break;
                  case 20: os_sig = SIGCLD;     break;
#endif
#endif
#ifdef SIGTTIN
#ifdef SIGTTIN
                  case 21: os_sig = SIGTTIN;    break;
                  case 21: os_sig = SIGTTIN;    break;
#endif
#endif
#ifdef SIGTTOU
#ifdef SIGTTOU
                  case 22: os_sig = SIGTTOU;    break;
                  case 22: os_sig = SIGTTOU;    break;
#endif
#endif
#ifdef SIGIO
#ifdef SIGIO
                  case 23: os_sig = SIGIO;      break;
                  case 23: os_sig = SIGIO;      break;
#elif defined (SIGPOLL)
#elif defined (SIGPOLL)
                  case 23: os_sig = SIGPOLL;    break;
                  case 23: os_sig = SIGPOLL;    break;
#endif
#endif
#ifdef SIGXCPU
#ifdef SIGXCPU
                  case 24: os_sig = SIGXCPU;    break;
                  case 24: os_sig = SIGXCPU;    break;
#endif
#endif
#ifdef SIGXFSZ
#ifdef SIGXFSZ
                  case 25: os_sig = SIGXFSZ;    break;
                  case 25: os_sig = SIGXFSZ;    break;
#endif
#endif
#ifdef SIGVTALRM
#ifdef SIGVTALRM
                  case 26: os_sig = SIGVTALRM;  break;
                  case 26: os_sig = SIGVTALRM;  break;
#endif
#endif
#ifdef SIGPROF
#ifdef SIGPROF
                  case 27: os_sig = SIGPROF;    break;
                  case 27: os_sig = SIGPROF;    break;
#endif
#endif
#ifdef SIGWINCH
#ifdef SIGWINCH
                  case 28: os_sig = SIGWINCH;   break;
                  case 28: os_sig = SIGWINCH;   break;
#endif
#endif
#ifdef SIGLOST
#ifdef SIGLOST
                  case 29: os_sig = SIGLOST;    break;
                  case 29: os_sig = SIGLOST;    break;
#endif
#endif
#ifdef SIGUSR1
#ifdef SIGUSR1
                  case 30: os_sig = SIGUSR1;    break;
                  case 30: os_sig = SIGUSR1;    break;
#endif
#endif
#ifdef SIGUSR2
#ifdef SIGUSR2
                  case 31: os_sig = SIGUSR2;    break;
                  case 31: os_sig = SIGUSR2;    break;
#endif
#endif
                  }
                  }
 
 
                if (os_sig == -1)
                if (os_sig == -1)
                  {
                  {
                    trace_output_void ();
                    trace_output_void ();
                    (*cr16_callback->printf_filtered) (cr16_callback, "Unknown signal %d\n", PARM2);
                    (*cr16_callback->printf_filtered) (cr16_callback, "Unknown signal %d\n", PARM2);
                    (*cr16_callback->flush_stdout) (cr16_callback);
                    (*cr16_callback->flush_stdout) (cr16_callback);
                    State.exception = SIGILL;
                    State.exception = SIGILL;
                  }
                  }
                else
                else
                  {
                  {
                    RETVAL (kill (PARM1, PARM2));
                    RETVAL (kill (PARM1, PARM2));
                    trace_output_16 (result);
                    trace_output_16 (result);
                  }
                  }
              }
              }
            break;
            break;
 
 
          case TARGET_SYS_execve:
          case TARGET_SYS_execve:
            trace_input ("<execve>", OP_VOID, OP_VOID, OP_VOID);
            trace_input ("<execve>", OP_VOID, OP_VOID, OP_VOID);
            RETVAL (execve (MEMPTR (PARM1), (char **) MEMPTR (PARM2<<16|PARM3),
            RETVAL (execve (MEMPTR (PARM1), (char **) MEMPTR (PARM2<<16|PARM3),
                             (char **)MEMPTR (PARM4)));
                             (char **)MEMPTR (PARM4)));
            trace_output_16 (result);
            trace_output_16 (result);
            break;
            break;
 
 
#ifdef TARGET_SYS_execv
#ifdef TARGET_SYS_execv
          case TARGET_SYS_execv:
          case TARGET_SYS_execv:
            trace_input ("<execv>", OP_VOID, OP_VOID, OP_VOID);
            trace_input ("<execv>", OP_VOID, OP_VOID, OP_VOID);
            RETVAL (execve (MEMPTR (PARM1), (char **) MEMPTR (PARM2), NULL));
            RETVAL (execve (MEMPTR (PARM1), (char **) MEMPTR (PARM2), NULL));
            trace_output_16 (result);
            trace_output_16 (result);
            break;
            break;
#endif
#endif
 
 
          case TARGET_SYS_pipe:
          case TARGET_SYS_pipe:
            {
            {
              reg_t buf;
              reg_t buf;
              int host_fd[2];
              int host_fd[2];
 
 
              trace_input ("<pipe>", OP_VOID, OP_VOID, OP_VOID);
              trace_input ("<pipe>", OP_VOID, OP_VOID, OP_VOID);
              buf = PARM1;
              buf = PARM1;
              RETVAL (pipe (host_fd));
              RETVAL (pipe (host_fd));
              SW (buf, host_fd[0]);
              SW (buf, host_fd[0]);
              buf += sizeof(uint16);
              buf += sizeof(uint16);
              SW (buf, host_fd[1]);
              SW (buf, host_fd[1]);
              trace_output_16 (result);
              trace_output_16 (result);
            }
            }
          break;
          break;
 
 
#ifdef TARGET_SYS_wait
#ifdef TARGET_SYS_wait
          case TARGET_SYS_wait:
          case TARGET_SYS_wait:
            {
            {
              int status;
              int status;
              trace_input ("<wait>", OP_REG, OP_VOID, OP_VOID);
              trace_input ("<wait>", OP_REG, OP_VOID, OP_VOID);
              RETVAL (wait (&status));
              RETVAL (wait (&status));
              if (PARM1)
              if (PARM1)
                SW (PARM1, status);
                SW (PARM1, status);
              trace_output_16 (result);
              trace_output_16 (result);
            }
            }
          break;
          break;
#endif
#endif
#else
#else
          case TARGET_SYS_getpid:
          case TARGET_SYS_getpid:
            trace_input ("<getpid>", OP_VOID, OP_VOID, OP_VOID);
            trace_input ("<getpid>", OP_VOID, OP_VOID, OP_VOID);
            RETVAL (1);
            RETVAL (1);
            trace_output_16 (result);
            trace_output_16 (result);
            break;
            break;
 
 
          case TARGET_SYS_kill:
          case TARGET_SYS_kill:
            trace_input ("<kill>", OP_REG, OP_REG, OP_VOID);
            trace_input ("<kill>", OP_REG, OP_REG, OP_VOID);
            trace_output_void ();
            trace_output_void ();
            State.exception = PARM2;
            State.exception = PARM2;
            break;
            break;
#endif
#endif
 
 
          case TARGET_SYS_read:
          case TARGET_SYS_read:
            trace_input ("<read>", OP_REG, OP_MEMREF, OP_REG);
            trace_input ("<read>", OP_REG, OP_MEMREF, OP_REG);
            RETVAL (cr16_callback->read (cr16_callback, PARM1,
            RETVAL (cr16_callback->read (cr16_callback, PARM1,
                        MEMPTR (((unsigned long)PARM3 << 16)
                        MEMPTR (((unsigned long)PARM3 << 16)
                                |((unsigned long)PARM2)), PARM4));
                                |((unsigned long)PARM2)), PARM4));
            trace_output_16 (result);
            trace_output_16 (result);
            break;
            break;
 
 
          case TARGET_SYS_write:
          case TARGET_SYS_write:
            trace_input ("<write>", OP_REG, OP_MEMREF, OP_REG);
            trace_input ("<write>", OP_REG, OP_MEMREF, OP_REG);
            RETVAL ((int)cr16_callback->write (cr16_callback, PARM1,
            RETVAL ((int)cr16_callback->write (cr16_callback, PARM1,
                       MEMPTR (((unsigned long)PARM3 << 16) | PARM2), PARM4));
                       MEMPTR (((unsigned long)PARM3 << 16) | PARM2), PARM4));
            trace_output_16 (result);
            trace_output_16 (result);
            break;
            break;
 
 
          case TARGET_SYS_lseek:
          case TARGET_SYS_lseek:
            trace_input ("<lseek>", OP_REG, OP_REGP, OP_REG);
            trace_input ("<lseek>", OP_REG, OP_REGP, OP_REG);
            RETVAL32 (cr16_callback->lseek (cr16_callback, PARM1,
            RETVAL32 (cr16_callback->lseek (cr16_callback, PARM1,
                                            ((((long) PARM3) << 16) | PARM2),
                                            ((((long) PARM3) << 16) | PARM2),
                                            PARM4));
                                            PARM4));
            trace_output_32 (result);
            trace_output_32 (result);
            break;
            break;
 
 
          case TARGET_SYS_close:
          case TARGET_SYS_close:
            trace_input ("<close>", OP_REG, OP_VOID, OP_VOID);
            trace_input ("<close>", OP_REG, OP_VOID, OP_VOID);
            RETVAL (cr16_callback->close (cr16_callback, PARM1));
            RETVAL (cr16_callback->close (cr16_callback, PARM1));
            trace_output_16 (result);
            trace_output_16 (result);
            break;
            break;
 
 
          case TARGET_SYS_open:
          case TARGET_SYS_open:
            trace_input ("<open>", OP_MEMREF, OP_REG, OP_VOID);
            trace_input ("<open>", OP_MEMREF, OP_REG, OP_VOID);
            RETVAL32 (cr16_callback->open (cr16_callback,
            RETVAL32 (cr16_callback->open (cr16_callback,
                                 MEMPTR ((((unsigned long)PARM2)<<16)|PARM1),
                                 MEMPTR ((((unsigned long)PARM2)<<16)|PARM1),
                                 PARM3));
                                 PARM3));
            trace_output_32 (result);
            trace_output_32 (result);
            break;
            break;
 
 
          case TARGET_SYS_rename:
          case TARGET_SYS_rename:
            trace_input ("<rename>", OP_MEMREF, OP_MEMREF, OP_VOID);
            trace_input ("<rename>", OP_MEMREF, OP_MEMREF, OP_VOID);
            RETVAL (cr16_callback->rename (cr16_callback,
            RETVAL (cr16_callback->rename (cr16_callback,
                                   MEMPTR ((((unsigned long)PARM2)<<16) |PARM1),
                                   MEMPTR ((((unsigned long)PARM2)<<16) |PARM1),
                                   MEMPTR ((((unsigned long)PARM4)<<16) |PARM3)));
                                   MEMPTR ((((unsigned long)PARM4)<<16) |PARM3)));
            trace_output_16 (result);
            trace_output_16 (result);
            break;
            break;
 
 
          case 0x408: /* REVISIT: Added a dummy getenv call. */
          case 0x408: /* REVISIT: Added a dummy getenv call. */
            trace_input ("<getenv>", OP_MEMREF, OP_MEMREF, OP_VOID);
            trace_input ("<getenv>", OP_MEMREF, OP_MEMREF, OP_VOID);
            RETVAL32(NULL);
            RETVAL32(NULL);
            trace_output_32 (result);
            trace_output_32 (result);
            break;
            break;
 
 
          case TARGET_SYS_exit:
          case TARGET_SYS_exit:
            trace_input ("<exit>", OP_VOID, OP_VOID, OP_VOID);
            trace_input ("<exit>", OP_VOID, OP_VOID, OP_VOID);
            State.exception = SIG_CR16_EXIT;
            State.exception = SIG_CR16_EXIT;
            trace_output_void ();
            trace_output_void ();
            break;
            break;
 
 
          case TARGET_SYS_unlink:
          case TARGET_SYS_unlink:
            trace_input ("<unlink>", OP_MEMREF, OP_VOID, OP_VOID);
            trace_input ("<unlink>", OP_MEMREF, OP_VOID, OP_VOID);
            RETVAL (cr16_callback->unlink (cr16_callback,
            RETVAL (cr16_callback->unlink (cr16_callback,
                                 MEMPTR (((unsigned long)PARM2<<16)|PARM1)));
                                 MEMPTR (((unsigned long)PARM2<<16)|PARM1)));
            trace_output_16 (result);
            trace_output_16 (result);
            break;
            break;
 
 
 
 
#ifdef TARGET_SYS_stat
#ifdef TARGET_SYS_stat
          case TARGET_SYS_stat:
          case TARGET_SYS_stat:
            trace_input ("<stat>", OP_VOID, OP_VOID, OP_VOID);
            trace_input ("<stat>", OP_VOID, OP_VOID, OP_VOID);
            /* stat system call.  */
            /* stat system call.  */
            {
            {
              struct stat host_stat;
              struct stat host_stat;
              reg_t buf;
              reg_t buf;
 
 
              RETVAL (stat (MEMPTR ((((unsigned long)PARM2) << 16)|PARM1), &host_stat));
              RETVAL (stat (MEMPTR ((((unsigned long)PARM2) << 16)|PARM1), &host_stat));
 
 
              buf = PARM2;
              buf = PARM2;
 
 
              /* The hard-coded offsets and sizes were determined by using
              /* The hard-coded offsets and sizes were determined by using
               * the CR16 compiler on a test program that used struct stat.
               * the CR16 compiler on a test program that used struct stat.
               */
               */
              SW  (buf,    host_stat.st_dev);
              SW  (buf,    host_stat.st_dev);
              SW  (buf+2,  host_stat.st_ino);
              SW  (buf+2,  host_stat.st_ino);
              SW  (buf+4,  host_stat.st_mode);
              SW  (buf+4,  host_stat.st_mode);
              SW  (buf+6,  host_stat.st_nlink);
              SW  (buf+6,  host_stat.st_nlink);
              SW  (buf+8,  host_stat.st_uid);
              SW  (buf+8,  host_stat.st_uid);
              SW  (buf+10, host_stat.st_gid);
              SW  (buf+10, host_stat.st_gid);
              SW  (buf+12, host_stat.st_rdev);
              SW  (buf+12, host_stat.st_rdev);
              SLW (buf+16, host_stat.st_size);
              SLW (buf+16, host_stat.st_size);
              SLW (buf+20, host_stat.st_atime);
              SLW (buf+20, host_stat.st_atime);
              SLW (buf+28, host_stat.st_mtime);
              SLW (buf+28, host_stat.st_mtime);
              SLW (buf+36, host_stat.st_ctime);
              SLW (buf+36, host_stat.st_ctime);
            }
            }
            trace_output_16 (result);
            trace_output_16 (result);
            break;
            break;
#endif
#endif
 
 
          case TARGET_SYS_chown:
          case TARGET_SYS_chown:
            trace_input ("<chown>", OP_VOID, OP_VOID, OP_VOID);
            trace_input ("<chown>", OP_VOID, OP_VOID, OP_VOID);
            RETVAL (chown (MEMPTR (PARM1), PARM2, PARM3));
            RETVAL (chown (MEMPTR (PARM1), PARM2, PARM3));
            trace_output_16 (result);
            trace_output_16 (result);
            break;
            break;
 
 
          case TARGET_SYS_chmod:
          case TARGET_SYS_chmod:
            trace_input ("<chmod>", OP_VOID, OP_VOID, OP_VOID);
            trace_input ("<chmod>", OP_VOID, OP_VOID, OP_VOID);
            RETVAL (chmod (MEMPTR (PARM1), PARM2));
            RETVAL (chmod (MEMPTR (PARM1), PARM2));
            trace_output_16 (result);
            trace_output_16 (result);
            break;
            break;
 
 
#ifdef TARGET_SYS_utime
#ifdef TARGET_SYS_utime
          case TARGET_SYS_utime:
          case TARGET_SYS_utime:
            trace_input ("<utime>", OP_REG, OP_REG, OP_REG);
            trace_input ("<utime>", OP_REG, OP_REG, OP_REG);
            /* Cast the second argument to void *, to avoid type mismatch
            /* Cast the second argument to void *, to avoid type mismatch
               if a prototype is present.  */
               if a prototype is present.  */
            RETVAL (utime (MEMPTR (PARM1), (void *) MEMPTR (PARM2)));
            RETVAL (utime (MEMPTR (PARM1), (void *) MEMPTR (PARM2)));
            trace_output_16 (result);
            trace_output_16 (result);
            break;
            break;
#endif
#endif
 
 
#ifdef TARGET_SYS_time
#ifdef TARGET_SYS_time
          case TARGET_SYS_time:
          case TARGET_SYS_time:
            trace_input ("<time>", OP_VOID, OP_VOID, OP_REG);
            trace_input ("<time>", OP_VOID, OP_VOID, OP_REG);
            RETVAL32 (time (NULL));
            RETVAL32 (time (NULL));
            trace_output_32 (result);
            trace_output_32 (result);
            break;
            break;
#endif
#endif
 
 
          default:
          default:
            cr16_callback->error (cr16_callback, "Unknown syscall %d", FUNC);
            cr16_callback->error (cr16_callback, "Unknown syscall %d", FUNC);
          }
          }
 
 
        if ((uint16) result == (uint16) -1)
        if ((uint16) result == (uint16) -1)
          RETERR (cr16_callback->get_errno(cr16_callback));
          RETERR (cr16_callback->get_errno(cr16_callback));
        else
        else
          RETERR (0);
          RETERR (0);
        break;
        break;
      }
      }
    }
    }
}
}
 
 
 
 
/* push.  */
/* push.  */
void
void
OP_3_9 ()
OP_3_9 ()
{
{
  uint16 a = OP[0] + 1, b = OP[1], c = OP[2], i = 0;
  uint16 a = OP[0] + 1, b = OP[1], c = OP[2], i = 0;
  uint32 tmp, sp_addr = (GPR32 (15)) - (a * 2) - 4, is_regp = 0;
  uint32 tmp, sp_addr = (GPR32 (15)) - (a * 2) - 4, is_regp = 0;
  trace_input ("push", OP_CONSTANT3, OP_REG, OP_REG);
  trace_input ("push", OP_CONSTANT3, OP_REG, OP_REG);
 
 
  for (; i < a; ++i)
  for (; i < a; ++i)
    {
    {
      if ((b+i) <= 11)
      if ((b+i) <= 11)
        {
        {
          SW (sp_addr, (GPR (b+i)));
          SW (sp_addr, (GPR (b+i)));
          sp_addr +=2;
          sp_addr +=2;
        }
        }
       else
       else
        {
        {
          if (is_regp == 0)
          if (is_regp == 0)
            tmp = (GPR32 (b+i));
            tmp = (GPR32 (b+i));
          else
          else
            tmp = (GPR32 (b+i-1));
            tmp = (GPR32 (b+i-1));
 
 
          if ((a-i) > 1)
          if ((a-i) > 1)
            {
            {
              SLW (sp_addr, tmp);
              SLW (sp_addr, tmp);
              sp_addr +=4;
              sp_addr +=4;
            }
            }
          else
          else
            {
            {
              SW (sp_addr, tmp);
              SW (sp_addr, tmp);
              sp_addr +=2;
              sp_addr +=2;
            }
            }
          ++i;
          ++i;
          is_regp = 1;
          is_regp = 1;
        }
        }
    }
    }
 
 
  sp_addr +=4;
  sp_addr +=4;
 
 
  /* Store RA address.  */
  /* Store RA address.  */
  tmp = (GPR32 (14));
  tmp = (GPR32 (14));
  SLW(sp_addr,tmp);
  SLW(sp_addr,tmp);
 
 
  sp_addr = (GPR32 (15)) - (a * 2) - 4;
  sp_addr = (GPR32 (15)) - (a * 2) - 4;
  SET_GPR32 (15, sp_addr);     /* Update SP address.  */
  SET_GPR32 (15, sp_addr);     /* Update SP address.  */
 
 
  trace_output_void ();
  trace_output_void ();
}
}
 
 
/* push.  */
/* push.  */
void
void
OP_1_8 ()
OP_1_8 ()
{
{
  uint32 sp_addr, tmp, is_regp = 0;
  uint32 sp_addr, tmp, is_regp = 0;
  uint16 a = OP[0] + 1, b = OP[1], c = OP[2], i = 0;
  uint16 a = OP[0] + 1, b = OP[1], c = OP[2], i = 0;
  trace_input ("push", OP_CONSTANT3, OP_REG, OP_VOID);
  trace_input ("push", OP_CONSTANT3, OP_REG, OP_VOID);
 
 
  if (c == 1)
  if (c == 1)
    sp_addr = (GPR32 (15)) - (a * 2) - 4;
    sp_addr = (GPR32 (15)) - (a * 2) - 4;
  else
  else
    sp_addr = (GPR32 (15)) - (a * 2);
    sp_addr = (GPR32 (15)) - (a * 2);
 
 
  for (; i < a; ++i)
  for (; i < a; ++i)
    {
    {
      if ((b+i) <= 11)
      if ((b+i) <= 11)
        {
        {
          SW (sp_addr, (GPR (b+i)));
          SW (sp_addr, (GPR (b+i)));
          sp_addr +=2;
          sp_addr +=2;
        }
        }
       else
       else
        {
        {
          if (is_regp == 0)
          if (is_regp == 0)
            tmp = (GPR32 (b+i));
            tmp = (GPR32 (b+i));
          else
          else
            tmp = (GPR32 (b+i-1));
            tmp = (GPR32 (b+i-1));
 
 
          if ((a-i) > 1)
          if ((a-i) > 1)
            {
            {
              SLW (sp_addr, tmp);
              SLW (sp_addr, tmp);
              sp_addr +=4;
              sp_addr +=4;
            }
            }
          else
          else
            {
            {
              SW (sp_addr, tmp);
              SW (sp_addr, tmp);
              sp_addr +=2;
              sp_addr +=2;
            }
            }
          ++i;
          ++i;
          is_regp = 1;
          is_regp = 1;
        }
        }
    }
    }
 
 
  if (c == 1)
  if (c == 1)
   {
   {
      /* Store RA address.  */
      /* Store RA address.  */
      tmp = (GPR32 (14));
      tmp = (GPR32 (14));
      SLW(sp_addr,tmp);
      SLW(sp_addr,tmp);
      sp_addr = (GPR32 (15)) - (a * 2) - 4;
      sp_addr = (GPR32 (15)) - (a * 2) - 4;
    }
    }
  else
  else
     sp_addr = (GPR32 (15)) - (a * 2);
     sp_addr = (GPR32 (15)) - (a * 2);
 
 
  SET_GPR32 (15, sp_addr);     /* Update SP address.  */
  SET_GPR32 (15, sp_addr);     /* Update SP address.  */
 
 
  trace_output_void ();
  trace_output_void ();
}
}
 
 
 
 
/* push.   */
/* push.   */
void
void
OP_11E_10 ()
OP_11E_10 ()
{
{
  uint32 sp_addr = (GPR32 (15)), tmp;
  uint32 sp_addr = (GPR32 (15)), tmp;
  trace_input ("push", OP_VOID, OP_VOID, OP_VOID);
  trace_input ("push", OP_VOID, OP_VOID, OP_VOID);
  tmp = (GPR32 (14));
  tmp = (GPR32 (14));
  SLW(sp_addr-4,tmp);                /* Store RA address.   */
  SLW(sp_addr-4,tmp);                /* Store RA address.   */
  SET_GPR32 (15, (sp_addr - 4));     /* Update SP address.   */
  SET_GPR32 (15, (sp_addr - 4));     /* Update SP address.   */
  trace_output_void ();
  trace_output_void ();
}
}
 
 
 
 
/* pop.   */
/* pop.   */
void
void
OP_5_9 ()
OP_5_9 ()
{
{
  uint16 a = OP[0] + 1, b = OP[1], c = OP[2], i = 0;
  uint16 a = OP[0] + 1, b = OP[1], c = OP[2], i = 0;
  uint32 tmp, sp_addr = (GPR32 (15)), is_regp = 0;;
  uint32 tmp, sp_addr = (GPR32 (15)), is_regp = 0;;
  trace_input ("pop", OP_CONSTANT3, OP_REG, OP_REG);
  trace_input ("pop", OP_CONSTANT3, OP_REG, OP_REG);
 
 
  for (; i < a; ++i)
  for (; i < a; ++i)
    {
    {
      if ((b+i) <= 11)
      if ((b+i) <= 11)
        {
        {
          SET_GPR ((b+i), RW(sp_addr));
          SET_GPR ((b+i), RW(sp_addr));
          sp_addr +=2;
          sp_addr +=2;
        }
        }
      else
      else
        {
        {
          if ((a-i) > 1)
          if ((a-i) > 1)
            {
            {
              tmp =  RLW(sp_addr);
              tmp =  RLW(sp_addr);
              sp_addr +=4;
              sp_addr +=4;
            }
            }
          else
          else
            {
            {
              tmp =  RW(sp_addr);
              tmp =  RW(sp_addr);
              sp_addr +=2;
              sp_addr +=2;
 
 
              if (is_regp == 0)
              if (is_regp == 0)
                tmp = (tmp << 16) | (GPR32 (b+i));
                tmp = (tmp << 16) | (GPR32 (b+i));
              else
              else
                tmp = (tmp << 16) | (GPR32 (b+i-1));
                tmp = (tmp << 16) | (GPR32 (b+i-1));
            }
            }
 
 
            if (is_regp == 0)
            if (is_regp == 0)
              SET_GPR32 ((b+i), (((tmp & 0xffff) << 16)
              SET_GPR32 ((b+i), (((tmp & 0xffff) << 16)
                                 | ((tmp >> 16) & 0xffff)));
                                 | ((tmp >> 16) & 0xffff)));
             else
             else
              SET_GPR32 ((b+i-1), (((tmp & 0xffff) << 16)
              SET_GPR32 ((b+i-1), (((tmp & 0xffff) << 16)
                                   | ((tmp >> 16) & 0xffff)));
                                   | ((tmp >> 16) & 0xffff)));
 
 
          ++i;
          ++i;
          is_regp = 1;
          is_regp = 1;
        }
        }
    }
    }
 
 
  tmp =  RLW(sp_addr);                /* store RA also.   */
  tmp =  RLW(sp_addr);                /* store RA also.   */
  SET_GPR32 (14, (((tmp & 0xffff) << 16)| ((tmp >> 16) & 0xffff)));
  SET_GPR32 (14, (((tmp & 0xffff) << 16)| ((tmp >> 16) & 0xffff)));
 
 
  SET_GPR32 (15, (sp_addr + 4));     /* Update SP address.  */
  SET_GPR32 (15, (sp_addr + 4));     /* Update SP address.  */
 
 
  trace_output_void ();
  trace_output_void ();
}
}
 
 
/* pop.  */
/* pop.  */
void
void
OP_2_8 ()
OP_2_8 ()
{
{
  uint16 a = OP[0] + 1, b = OP[1], c = OP[2], i = 0;
  uint16 a = OP[0] + 1, b = OP[1], c = OP[2], i = 0;
  uint32 tmp, sp_addr = (GPR32 (15)), is_regp = 0;
  uint32 tmp, sp_addr = (GPR32 (15)), is_regp = 0;
  trace_input ("pop", OP_CONSTANT3, OP_REG, OP_VOID);
  trace_input ("pop", OP_CONSTANT3, OP_REG, OP_VOID);
 
 
  for (; i < a; ++i)
  for (; i < a; ++i)
    {
    {
      if ((b+i) <= 11)
      if ((b+i) <= 11)
        {
        {
          SET_GPR ((b+i), RW(sp_addr));
          SET_GPR ((b+i), RW(sp_addr));
          sp_addr +=2;
          sp_addr +=2;
        }
        }
      else
      else
        {
        {
          if ((a-i) > 1)
          if ((a-i) > 1)
            {
            {
              tmp =  RLW(sp_addr);
              tmp =  RLW(sp_addr);
              sp_addr +=4;
              sp_addr +=4;
            }
            }
          else
          else
            {
            {
              tmp =  RW(sp_addr);
              tmp =  RW(sp_addr);
              sp_addr +=2;
              sp_addr +=2;
 
 
              if (is_regp == 0)
              if (is_regp == 0)
                tmp = ((tmp << 16) & 0xffffffff) | (GPR32 (b+i));
                tmp = ((tmp << 16) & 0xffffffff) | (GPR32 (b+i));
              else
              else
                tmp = ((tmp << 16) & 0xffffffff) | (GPR32 (b+i-1));
                tmp = ((tmp << 16) & 0xffffffff) | (GPR32 (b+i-1));
            }
            }
 
 
          if (is_regp == 0)
          if (is_regp == 0)
          SET_GPR32 ((b+i), (((tmp & 0xffff) << 16)| ((tmp >> 16) & 0xffff)));
          SET_GPR32 ((b+i), (((tmp & 0xffff) << 16)| ((tmp >> 16) & 0xffff)));
          else
          else
          SET_GPR32 ((b+i-1), (((tmp & 0xffff) << 16)| ((tmp >> 16) & 0xffff)));
          SET_GPR32 ((b+i-1), (((tmp & 0xffff) << 16)| ((tmp >> 16) & 0xffff)));
          ++i;
          ++i;
          is_regp = 1;
          is_regp = 1;
        }
        }
    }
    }
 
 
  if (c == 1)
  if (c == 1)
    {
    {
      tmp =  RLW(sp_addr);    /* Store RA Reg.  */
      tmp =  RLW(sp_addr);    /* Store RA Reg.  */
      SET_GPR32 (14, (((tmp & 0xffff) << 16)| ((tmp >> 16) & 0xffff)));
      SET_GPR32 (14, (((tmp & 0xffff) << 16)| ((tmp >> 16) & 0xffff)));
      sp_addr +=4;
      sp_addr +=4;
    }
    }
 
 
  SET_GPR32 (15, sp_addr); /* Update SP address.  */
  SET_GPR32 (15, sp_addr); /* Update SP address.  */
 
 
  trace_output_void ();
  trace_output_void ();
}
}
 
 
/* pop.  */
/* pop.  */
void
void
OP_21E_10 ()
OP_21E_10 ()
{
{
  uint32 sp_addr = GPR32 (15);
  uint32 sp_addr = GPR32 (15);
  uint32 tmp;
  uint32 tmp;
  trace_input ("pop", OP_VOID, OP_VOID, OP_VOID);
  trace_input ("pop", OP_VOID, OP_VOID, OP_VOID);
 
 
  tmp =  RLW(sp_addr);
  tmp =  RLW(sp_addr);
  SET_GPR32 (14, (((tmp & 0xffff) << 16)| ((tmp >> 16) & 0xffff)));
  SET_GPR32 (14, (((tmp & 0xffff) << 16)| ((tmp >> 16) & 0xffff)));
  SET_GPR32 (15, (sp_addr+4));    /* Update SP address.  */
  SET_GPR32 (15, (sp_addr+4));    /* Update SP address.  */
 
 
  trace_output_void ();
  trace_output_void ();
}
}
 
 
/* popret.  */
/* popret.  */
void
void
OP_7_9 ()
OP_7_9 ()
{
{
  uint16 a = OP[0], b = OP[1];
  uint16 a = OP[0], b = OP[1];
  trace_input ("popret", OP_CONSTANT3, OP_REG, OP_REG);
  trace_input ("popret", OP_CONSTANT3, OP_REG, OP_REG);
  OP_5_9 ();
  OP_5_9 ();
  JMP(((GPR32(14)) << 1) & 0xffffff);
  JMP(((GPR32(14)) << 1) & 0xffffff);
 
 
  trace_output_void ();
  trace_output_void ();
}
}
 
 
/* popret.  */
/* popret.  */
void
void
OP_3_8 ()
OP_3_8 ()
{
{
  uint16 a = OP[0], b = OP[1];
  uint16 a = OP[0], b = OP[1];
  trace_input ("popret", OP_CONSTANT3, OP_REG, OP_VOID);
  trace_input ("popret", OP_CONSTANT3, OP_REG, OP_VOID);
  OP_2_8 ();
  OP_2_8 ();
  JMP(((GPR32(14)) << 1) & 0xffffff);
  JMP(((GPR32(14)) << 1) & 0xffffff);
 
 
  trace_output_void ();
  trace_output_void ();
}
}
 
 
/* popret.  */
/* popret.  */
void
void
OP_31E_10 ()
OP_31E_10 ()
{
{
  uint32 tmp;
  uint32 tmp;
  trace_input ("popret", OP_VOID, OP_VOID, OP_VOID);
  trace_input ("popret", OP_VOID, OP_VOID, OP_VOID);
  OP_21E_10 ();
  OP_21E_10 ();
  tmp = (((GPR32(14)) << 1) & 0xffffff);
  tmp = (((GPR32(14)) << 1) & 0xffffff);
  /* If the resulting PC value is less than 0x00_0000 or greater
  /* If the resulting PC value is less than 0x00_0000 or greater
     than 0xFF_FFFF, this instruction causes an IAD trap.*/
     than 0xFF_FFFF, this instruction causes an IAD trap.*/
 
 
  if ((tmp < 0x0) || (tmp > 0xFFFFFF))
  if ((tmp < 0x0) || (tmp > 0xFFFFFF))
    {
    {
      State.exception = SIG_CR16_BUS;
      State.exception = SIG_CR16_BUS;
      State.pc_changed = 1; /* Don't increment the PC. */
      State.pc_changed = 1; /* Don't increment the PC. */
      trace_output_void ();
      trace_output_void ();
      return;
      return;
    }
    }
  else
  else
    JMP (tmp);
    JMP (tmp);
 
 
  trace_output_32 (tmp);
  trace_output_32 (tmp);
}
}
 
 
 
 
/* cinv[i].  */
/* cinv[i].  */
void
void
OP_A_10 ()
OP_A_10 ()
{
{
  trace_input ("cinv[i]", OP_VOID, OP_VOID, OP_VOID);
  trace_input ("cinv[i]", OP_VOID, OP_VOID, OP_VOID);
  SET_PSR_I (1);
  SET_PSR_I (1);
  trace_output_void ();
  trace_output_void ();
}
}
 
 
/* cinv[i,u].  */
/* cinv[i,u].  */
void
void
OP_B_10 ()
OP_B_10 ()
{
{
  trace_input ("cinv[i,u]", OP_VOID, OP_VOID, OP_VOID);
  trace_input ("cinv[i,u]", OP_VOID, OP_VOID, OP_VOID);
  SET_PSR_I (1);
  SET_PSR_I (1);
  trace_output_void ();
  trace_output_void ();
}
}
 
 
/* cinv[d].  */
/* cinv[d].  */
void
void
OP_C_10 ()
OP_C_10 ()
{
{
  trace_input ("cinv[d]", OP_VOID, OP_VOID, OP_VOID);
  trace_input ("cinv[d]", OP_VOID, OP_VOID, OP_VOID);
  SET_PSR_I (1);
  SET_PSR_I (1);
  trace_output_void ();
  trace_output_void ();
}
}
 
 
/* cinv[d,u].  */
/* cinv[d,u].  */
void
void
OP_D_10 ()
OP_D_10 ()
{
{
  trace_input ("cinv[i,u]", OP_VOID, OP_VOID, OP_VOID);
  trace_input ("cinv[i,u]", OP_VOID, OP_VOID, OP_VOID);
  SET_PSR_I (1);
  SET_PSR_I (1);
  trace_output_void ();
  trace_output_void ();
}
}
 
 
/* cinv[d,i].  */
/* cinv[d,i].  */
void
void
OP_E_10 ()
OP_E_10 ()
{
{
  trace_input ("cinv[d,i]", OP_VOID, OP_VOID, OP_VOID);
  trace_input ("cinv[d,i]", OP_VOID, OP_VOID, OP_VOID);
  SET_PSR_I (1);
  SET_PSR_I (1);
  trace_output_void ();
  trace_output_void ();
}
}
 
 
/* cinv[d,i,u].  */
/* cinv[d,i,u].  */
void
void
OP_F_10 ()
OP_F_10 ()
{
{
  trace_input ("cinv[d,i,u]", OP_VOID, OP_VOID, OP_VOID);
  trace_input ("cinv[d,i,u]", OP_VOID, OP_VOID, OP_VOID);
  SET_PSR_I (1);
  SET_PSR_I (1);
  trace_output_void ();
  trace_output_void ();
}
}
 
 
/* retx.  */
/* retx.  */
void
void
OP_3_10 ()
OP_3_10 ()
{
{
  trace_input ("retx", OP_VOID, OP_VOID, OP_VOID);
  trace_input ("retx", OP_VOID, OP_VOID, OP_VOID);
  SET_PSR_I (1);
  SET_PSR_I (1);
  trace_output_void ();
  trace_output_void ();
}
}
 
 
/* di.  */
/* di.  */
void
void
OP_4_10 ()
OP_4_10 ()
{
{
  trace_input ("di", OP_VOID, OP_VOID, OP_VOID);
  trace_input ("di", OP_VOID, OP_VOID, OP_VOID);
  SET_PSR_I (1);
  SET_PSR_I (1);
  trace_output_void ();
  trace_output_void ();
}
}
 
 
/* ei.  */
/* ei.  */
void
void
OP_5_10 ()
OP_5_10 ()
{
{
  trace_input ("ei", OP_VOID, OP_VOID, OP_VOID);
  trace_input ("ei", OP_VOID, OP_VOID, OP_VOID);
  SET_PSR_I (1);
  SET_PSR_I (1);
  trace_output_void ();
  trace_output_void ();
}
}
 
 
/* wait.  */
/* wait.  */
void
void
OP_6_10 ()
OP_6_10 ()
{
{
  trace_input ("wait", OP_VOID, OP_VOID, OP_VOID);
  trace_input ("wait", OP_VOID, OP_VOID, OP_VOID);
  State.exception = SIGTRAP;
  State.exception = SIGTRAP;
  trace_output_void ();
  trace_output_void ();
}
}
 
 
/* ewait.  */
/* ewait.  */
void
void
OP_7_10 ()
OP_7_10 ()
{
{
  trace_input ("ewait", OP_VOID, OP_VOID, OP_VOID);
  trace_input ("ewait", OP_VOID, OP_VOID, OP_VOID);
  SET_PSR_I (1);
  SET_PSR_I (1);
  trace_output_void ();
  trace_output_void ();
}
}
 
 
/* xorb. */
/* xorb. */
void
void
OP_28_8 ()
OP_28_8 ()
{
{
  uint8 tmp, a = (OP[0]) & 0xff, b = (GPR (OP[1])) & 0xff;
  uint8 tmp, a = (OP[0]) & 0xff, b = (GPR (OP[1])) & 0xff;
  trace_input ("xorb", OP_CONSTANT4, OP_REG, OP_VOID);
  trace_input ("xorb", OP_CONSTANT4, OP_REG, OP_VOID);
  tmp = a ^ b;
  tmp = a ^ b;
  SET_GPR (OP[1], (tmp | ((GPR (OP[1])) & 0xff00)));
  SET_GPR (OP[1], (tmp | ((GPR (OP[1])) & 0xff00)));
  trace_output_16 (tmp);
  trace_output_16 (tmp);
}
}
 
 
/* xorb.  */
/* xorb.  */
void
void
OP_28B_C ()
OP_28B_C ()
{
{
  uint8 tmp, a = (OP[0]) & 0xff, b = (GPR (OP[1])) & 0xff;
  uint8 tmp, a = (OP[0]) & 0xff, b = (GPR (OP[1])) & 0xff;
  trace_input ("xorb", OP_CONSTANT16, OP_REG, OP_VOID);
  trace_input ("xorb", OP_CONSTANT16, OP_REG, OP_VOID);
  tmp = a ^ b;
  tmp = a ^ b;
  SET_GPR (OP[1], (tmp | ((GPR (OP[1])) & 0xff00)));
  SET_GPR (OP[1], (tmp | ((GPR (OP[1])) & 0xff00)));
  trace_output_16 (tmp);
  trace_output_16 (tmp);
}
}
 
 
/* xorb.  */
/* xorb.  */
void
void
OP_29_8 ()
OP_29_8 ()
{
{
  uint8 tmp, a = (GPR (OP[0])) & 0xff, b = (GPR (OP[1])) & 0xff;
  uint8 tmp, a = (GPR (OP[0])) & 0xff, b = (GPR (OP[1])) & 0xff;
  trace_input ("xorb", OP_REG, OP_REG, OP_VOID);
  trace_input ("xorb", OP_REG, OP_REG, OP_VOID);
  tmp = a ^ b;
  tmp = a ^ b;
  SET_GPR (OP[1], (tmp | ((GPR (OP[1])) & 0xff00)));
  SET_GPR (OP[1], (tmp | ((GPR (OP[1])) & 0xff00)));
  trace_output_16 (tmp);
  trace_output_16 (tmp);
}
}
 
 
/* xorw.  */
/* xorw.  */
void
void
OP_2A_8 ()
OP_2A_8 ()
{
{
  uint16 tmp, a = (OP[0]), b = (GPR (OP[1]));
  uint16 tmp, a = (OP[0]), b = (GPR (OP[1]));
  trace_input ("xorw", OP_CONSTANT4, OP_REG, OP_VOID);
  trace_input ("xorw", OP_CONSTANT4, OP_REG, OP_VOID);
  tmp = a ^ b;
  tmp = a ^ b;
  SET_GPR (OP[1], tmp);
  SET_GPR (OP[1], tmp);
  trace_output_16 (tmp);
  trace_output_16 (tmp);
}
}
 
 
/* xorw.  */
/* xorw.  */
void
void
OP_2AB_C ()
OP_2AB_C ()
{
{
  uint16 tmp, a = (OP[0]), b = (GPR (OP[1]));
  uint16 tmp, a = (OP[0]), b = (GPR (OP[1]));
  trace_input ("xorw", OP_CONSTANT16, OP_REG, OP_VOID);
  trace_input ("xorw", OP_CONSTANT16, OP_REG, OP_VOID);
  tmp = a ^ b;
  tmp = a ^ b;
  SET_GPR (OP[1], tmp);
  SET_GPR (OP[1], tmp);
  trace_output_16 (tmp);
  trace_output_16 (tmp);
}
}
 
 
/* xorw.  */
/* xorw.  */
void
void
OP_2B_8 ()
OP_2B_8 ()
{
{
  uint16 tmp, a = (GPR (OP[0])), b = (GPR (OP[1]));
  uint16 tmp, a = (GPR (OP[0])), b = (GPR (OP[1]));
  trace_input ("xorw", OP_REG, OP_REG, OP_VOID);
  trace_input ("xorw", OP_REG, OP_REG, OP_VOID);
  tmp = a ^ b;
  tmp = a ^ b;
  SET_GPR (OP[1], tmp);
  SET_GPR (OP[1], tmp);
  trace_output_16 (tmp);
  trace_output_16 (tmp);
}
}
 
 
/*REVISIT FOR LPR/SPR . */
/*REVISIT FOR LPR/SPR . */
 
 
/* lpr.  */
/* lpr.  */
void
void
OP_140_14 ()
OP_140_14 ()
{
{
  uint16 a = GPR (OP[0]);
  uint16 a = GPR (OP[0]);
  trace_input ("lpr", OP_REG, OP_REG, OP_VOID);
  trace_input ("lpr", OP_REG, OP_REG, OP_VOID);
  SET_CREG (OP[1], a);
  SET_CREG (OP[1], a);
  trace_output_16 (a);
  trace_output_16 (a);
}
}
 
 
/* lprd.  */
/* lprd.  */
void
void
OP_141_14 ()
OP_141_14 ()
{
{
  uint32 a = GPR32 (OP[0]);
  uint32 a = GPR32 (OP[0]);
  trace_input ("lprd", OP_REGP, OP_REG, OP_VOID);
  trace_input ("lprd", OP_REGP, OP_REG, OP_VOID);
  SET_CREG (OP[1], a);
  SET_CREG (OP[1], a);
  trace_output_flag ();
  trace_output_flag ();
}
}
 
 
/* spr.  */
/* spr.  */
void
void
OP_142_14 ()
OP_142_14 ()
{
{
  uint16 a = CREG (OP[0]);
  uint16 a = CREG (OP[0]);
  trace_input ("spr", OP_REG, OP_REG, OP_VOID);
  trace_input ("spr", OP_REG, OP_REG, OP_VOID);
  SET_GPR (OP[1], a);
  SET_GPR (OP[1], a);
  trace_output_16 (a);
  trace_output_16 (a);
}
}
 
 
/* sprd.  */
/* sprd.  */
void
void
OP_143_14 ()
OP_143_14 ()
{
{
  uint32 a = CREG (OP[0]);
  uint32 a = CREG (OP[0]);
  trace_input ("sprd", OP_REGP, OP_REGP, OP_VOID);
  trace_input ("sprd", OP_REGP, OP_REGP, OP_VOID);
  SET_GPR32 (OP[1], a);
  SET_GPR32 (OP[1], a);
  trace_output_32 (a);
  trace_output_32 (a);
}
}
 
 
/* null.  */
/* null.  */
void
void
OP_0_20 ()
OP_0_20 ()
{
{
  trace_input ("null", OP_VOID, OP_VOID, OP_VOID);
  trace_input ("null", OP_VOID, OP_VOID, OP_VOID);
  State.exception = SIG_CR16_STOP;
  State.exception = SIG_CR16_STOP;
}
}
 
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.