#define FILE void
#include "defines.h"

struct instruction g_instructions_table[] = {

  { "ADD", 0x7000, SH2_MODE_IMM8_RN },
  { "ADD", 0x300C, SH2_MODE_RM_RN },
  { "ADDC", 0x300E, SH2_MODE_RM_RN },
  { "ADDV", 0x300F, SH2_MODE_RM_RN },
  { "AND", 0xC900, SH2_MODE_IMM8_R0 },
  { "AND", 0x2009, SH2_MODE_RM_RN },
  { "AND.B", 0xCD00, SH2_MODE_IMM8_GBR_R0 },

  { "BF", 0x8B00, SH2_MODE_DISP8_BRANCH },
  { "BF/S", 0x8F00, SH2_MODE_DISP8_BRANCH },
  { "BRA", 0xA000, SH2_MODE_DISP12_BRANCH },
  { "BRAF", 0x0023, SH2_MODE_AT_RM_BRANCH },
  { "BSR", 0xB000, SH2_MODE_DISP12_BRANCH },
  { "BSRF", 0x0003, SH2_MODE_AT_RM_BRANCH },
  { "BT", 0x8900, SH2_MODE_DISP8_BRANCH },
  { "BT/S", 0x8D00, SH2_MODE_DISP8_BRANCH },

  { "CLRMAC", 0x0028, SH2_MODE_NONE },
  { "CLRT", 0x0008, SH2_MODE_NONE },
  { "CMP/EQ", 0x8800, SH2_MODE_IMM8_R0 },
  { "CMP/EQ", 0x3000, SH2_MODE_RM_RN },
  { "CMP/GE", 0x3003, SH2_MODE_RM_RN },
  { "CMP/GT", 0x3007, SH2_MODE_RM_RN },
  { "CMP/HI", 0x3006, SH2_MODE_RM_RN },
  { "CMP/HS", 0x3002, SH2_MODE_RM_RN },
  { "CMP/PL", 0x4015, SH2_MODE_RN },
  { "CMP/PZ", 0x4011, SH2_MODE_RN },
  { "CMP/STR", 0x200C, SH2_MODE_RM_RN },

  { "DIV0S", 0x2007, SH2_MODE_RM_RN },
  { "DIV0U", 0x0019, SH2_MODE_NONE },
  { "DIV1", 0x3004, SH2_MODE_RM_RN },
  { "DMULS.L", 0x300D, SH2_MODE_RM_RN },
  { "DMULU.L", 0x3005, SH2_MODE_RM_RN },
  { "DT", 0x4010, SH2_MODE_RN },

  { "EXTS.B", 0x600E, SH2_MODE_RM_RN },
  { "EXTS.W", 0x600F, SH2_MODE_RM_RN },
  { "EXTU.B", 0x600C, SH2_MODE_RM_RN },
  { "EXTU.W", 0x600D, SH2_MODE_RM_RN },

  { "JMP", 0x402B, SH2_MODE_AT_RM_BRANCH },
  { "JSR", 0x400B, SH2_MODE_AT_RM_BRANCH },

  { "LDC", 0x400E, SH2_MODE_RM_REG },
  { "LDC", 0x401E, SH2_MODE_RM_REG },
  { "LDC", 0x402E, SH2_MODE_RM_REG },
  { "LDC.L", 0x4007, SH2_MODE_AT_RM_INC_REG },
  { "LDC.L", 0x4017, SH2_MODE_AT_RM_INC_REG },
  { "LDC.L", 0x4027, SH2_MODE_AT_RM_INC_REG },
  { "LDS", 0x400A, SH2_MODE_RM_REG },
  { "LDS", 0x401A, SH2_MODE_RM_REG },
  { "LDS", 0x402A, SH2_MODE_RM_REG },
  { "LDS.L", 0x4006, SH2_MODE_AT_RM_INC_REG },
  { "LDS.L", 0x4016, SH2_MODE_AT_RM_INC_REG },
  { "LDS.L", 0x4026, SH2_MODE_AT_RM_INC_REG },

  { "MAC.L", 0x000F, SH2_MODE_MAC },
  { "MAC.W", 0x400F, SH2_MODE_MAC },
  { "MOV", 0xE000, SH2_MODE_IMM8_RN },
  { "MOV", 0x6003, SH2_MODE_RM_RN },
  { "MOV.B", 0x6000, SH2_MODE_AT_RM_RN },
  { "MOV.B", 0x2000, SH2_MODE_RM_AT_RN },
  { "MOV.B", 0x6004, SH2_MODE_AT_RM_INC_RN },
  { "MOV.B", 0x2004, SH2_MODE_RM_AT_DEC_RN },
  { "MOV.B", 0x8400, SH2_MODE_DISP4_RM_R0 },
  { "MOV.B", 0x8000, SH2_MODE_R0_DISP4_RN },
  { "MOV.B", 0x000C, SH2_MODE_AT_R0_RM_RN },
  { "MOV.B", 0x0004, SH2_MODE_RM_AT_R0_RN },
  { "MOV.B", 0xC400, SH2_MODE_DISP8_GBR_R0 },
  { "MOV.B", 0xC000, SH2_MODE_R0_DISP8_GBR },
  { "MOV.L", 0x6002, SH2_MODE_AT_RM_RN },
  { "MOV.L", 0x2002, SH2_MODE_RM_AT_RN },
  { "MOV.L", 0x6006, SH2_MODE_AT_RM_INC_RN },
  { "MOV.L", 0x2006, SH2_MODE_RM_AT_DEC_RN },
  { "MOV.L", 0x5000, SH2_MODE_DISP4_RM_RN },
  { "MOV.L", 0x1000, SH2_MODE_RM_DISP4_RN },
  { "MOV.L", 0x000E, SH2_MODE_AT_R0_RM_RN },
  { "MOV.L", 0x0006, SH2_MODE_RM_AT_R0_RN },
  { "MOV.L", 0xC600, SH2_MODE_DISP8_GBR_R0 },
  { "MOV.L", 0xC200, SH2_MODE_R0_DISP8_GBR },
  { "MOV.L", 0xD000, SH2_MODE_DISP8_PC_RN },
  { "MOV.W", 0x6001, SH2_MODE_AT_RM_RN },
  { "MOV.W", 0x2001, SH2_MODE_RM_AT_RN },
  { "MOV.W", 0x6005, SH2_MODE_AT_RM_INC_RN },
  { "MOV.W", 0x2005, SH2_MODE_RM_AT_DEC_RN },
  { "MOV.W", 0x8500, SH2_MODE_DISP4_RM_R0 },
  { "MOV.W", 0x8100, SH2_MODE_R0_DISP4_RN },
  { "MOV.W", 0x000D, SH2_MODE_AT_R0_RM_RN },
  { "MOV.W", 0x0005, SH2_MODE_RM_AT_R0_RN },
  { "MOV.W", 0xC500, SH2_MODE_DISP8_GBR_R0 },
  { "MOV.W", 0xC100, SH2_MODE_R0_DISP8_GBR },
  { "MOV.W", 0x9000, SH2_MODE_DISP8_PC_RN },
  { "MOVA", 0xC700, SH2_MODE_DISP8_PC_R0 },
  { "MOVT", 0x0029, SH2_MODE_RN },
  { "MUL.L", 0x0007, SH2_MODE_RM_RN },
  { "MULS", 0x200F, SH2_MODE_RM_RN },
  { "MULS.W", 0x200F, SH2_MODE_RM_RN },
  { "MULU", 0x200E, SH2_MODE_RM_RN },
  { "MULU.W", 0x200E, SH2_MODE_RM_RN },

  { "NEG", 0x600B, SH2_MODE_RM_RN },
  { "NEGC", 0x600A, SH2_MODE_RM_RN },
  { "NOP", 0x0009, SH2_MODE_NONE },
  { "NOT", 0x6007, SH2_MODE_RM_RN },

  { "OR", 0xCB00, SH2_MODE_IMM8_R0 },
  { "OR", 0x200B, SH2_MODE_RM_RN },
  { "OR.B", 0xCF00, SH2_MODE_IMM8_GBR_R0 },

  { "ROTCL", 0x4024, SH2_MODE_RN },
  { "ROTCR", 0x4025, SH2_MODE_RN },
  { "ROTL", 0x4004, SH2_MODE_RN },
  { "ROTR", 0x4005, SH2_MODE_RN },
  { "RTE", 0x002B, SH2_MODE_NONE },
  { "RTS", 0x000B, SH2_MODE_NONE },

  { "SETT", 0x0018, SH2_MODE_NONE },
  { "SHAL", 0x4020, SH2_MODE_RN },
  { "SHAR", 0x4021, SH2_MODE_RN },
  { "SHLL", 0x4000, SH2_MODE_RN },
  { "SHLL2", 0x4008, SH2_MODE_RN },
  { "SHLL8", 0x4018, SH2_MODE_RN },
  { "SHLL16", 0x4028, SH2_MODE_RN },
  { "SHLR", 0x4001, SH2_MODE_RN },
  { "SHLR2", 0x4009, SH2_MODE_RN },
  { "SHLR8", 0x4019, SH2_MODE_RN },
  { "SHLR16", 0x4029, SH2_MODE_RN },
  { "SLEEP", 0x001B, SH2_MODE_NONE },
  { "STC", 0x0002, SH2_MODE_REG_RN },
  { "STC", 0x0012, SH2_MODE_REG_RN },
  { "STC", 0x0022, SH2_MODE_REG_RN },
  { "STC.L", 0x4003, SH2_MODE_REG_AT_DEC_RN },
  { "STC.L", 0x4013, SH2_MODE_REG_AT_DEC_RN },
  { "STC.L", 0x4023, SH2_MODE_REG_AT_DEC_RN },
  { "STS", 0x000A, SH2_MODE_REG_RN },
  { "STS", 0x001A, SH2_MODE_REG_RN },
  { "STS", 0x002A, SH2_MODE_REG_RN },
  { "STS.L", 0x4002, SH2_MODE_REG_AT_DEC_RN },
  { "STS.L", 0x4012, SH2_MODE_REG_AT_DEC_RN },
  { "STS.L", 0x4022, SH2_MODE_REG_AT_DEC_RN },
  { "SUB", 0x3008, SH2_MODE_RM_RN },
  { "SUBC", 0x300A, SH2_MODE_RM_RN },
  { "SUBV", 0x300B, SH2_MODE_RM_RN },
  { "SWAP.B", 0x6008, SH2_MODE_RM_RN },
  { "SWAP.W", 0x6009, SH2_MODE_RM_RN },

  { "TAS.B", 0x401B, SH2_MODE_AT_RM_BRANCH },
  { "TRAPA", 0xC300, SH2_MODE_IMM8 },
  { "TST", 0xC800, SH2_MODE_IMM8_R0 },
  { "TST", 0x2008, SH2_MODE_RM_RN },
  { "TST.B", 0xCC00, SH2_MODE_IMM8_GBR_R0 },

  { "XOR", 0xCA00, SH2_MODE_IMM8_R0 },
  { "XOR", 0x200A, SH2_MODE_RM_RN },
  { "XOR.B", 0xCE00, SH2_MODE_IMM8_GBR_R0 },
  { "XTRCT", 0x200D, SH2_MODE_RM_RN },

  { "E", 0xFF, 0xFF }
};
