1fddef416Sniklas /* Assemble Matsushita MN10200 instructions. 2*5f210c2aSfgsch Copyright 1996, 1997, 2000 Free Software Foundation, Inc. 3fddef416Sniklas 4fddef416Sniklas This program is free software; you can redistribute it and/or modify 5fddef416Sniklas it under the terms of the GNU General Public License as published by 6fddef416Sniklas the Free Software Foundation; either version 2 of the License, or 7fddef416Sniklas (at your option) any later version. 8fddef416Sniklas 9fddef416Sniklas This program is distributed in the hope that it will be useful, 10fddef416Sniklas but WITHOUT ANY WARRANTY; without even the implied warranty of 11fddef416Sniklas MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12fddef416Sniklas GNU General Public License for more details. 13fddef416Sniklas 14fddef416Sniklas You should have received a copy of the GNU General Public License 15fddef416Sniklas along with this program; if not, write to the Free Software 16fddef416Sniklas Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ 17fddef416Sniklas 18f7cc78ecSespie #include "sysdep.h" 19fddef416Sniklas #include "opcode/mn10200.h" 20fddef416Sniklas 21fddef416Sniklas 22fddef416Sniklas const struct mn10200_operand mn10200_operands[] = { 23fddef416Sniklas #define UNUSED 0 24fddef416Sniklas {0, 0, 0}, 25fddef416Sniklas 26fddef416Sniklas /* dn register in the first register operand position. */ 27fddef416Sniklas #define DN0 (UNUSED+1) 28fddef416Sniklas {2, 0, MN10200_OPERAND_DREG}, 29fddef416Sniklas 30fddef416Sniklas /* dn register in the second register operand position. */ 31fddef416Sniklas #define DN1 (DN0+1) 32fddef416Sniklas {2, 2, MN10200_OPERAND_DREG}, 33fddef416Sniklas 34fddef416Sniklas /* dm register in the first register operand position. */ 35fddef416Sniklas #define DM0 (DN1+1) 36fddef416Sniklas {2, 0, MN10200_OPERAND_DREG}, 37fddef416Sniklas 38fddef416Sniklas /* dm register in the second register operand position. */ 39fddef416Sniklas #define DM1 (DM0+1) 40fddef416Sniklas {2, 2, MN10200_OPERAND_DREG}, 41fddef416Sniklas 42fddef416Sniklas /* an register in the first register operand position. */ 43fddef416Sniklas #define AN0 (DM1+1) 44fddef416Sniklas {2, 0, MN10200_OPERAND_AREG}, 45fddef416Sniklas 46fddef416Sniklas /* an register in the second register operand position. */ 47fddef416Sniklas #define AN1 (AN0+1) 48fddef416Sniklas {2, 2, MN10200_OPERAND_AREG}, 49fddef416Sniklas 50fddef416Sniklas /* am register in the first register operand position. */ 51fddef416Sniklas #define AM0 (AN1+1) 52fddef416Sniklas {2, 0, MN10200_OPERAND_AREG}, 53fddef416Sniklas 54fddef416Sniklas /* am register in the second register operand position. */ 55fddef416Sniklas #define AM1 (AM0+1) 56fddef416Sniklas {2, 2, MN10200_OPERAND_AREG}, 57fddef416Sniklas 58fddef416Sniklas /* 8 bit unsigned immediate which may promote to a 16bit 59fddef416Sniklas unsigned immediate. */ 60fddef416Sniklas #define IMM8 (AM1+1) 61fddef416Sniklas {8, 0, MN10200_OPERAND_PROMOTE}, 62fddef416Sniklas 63fddef416Sniklas /* 16 bit unsigned immediate which may promote to a 32bit 64fddef416Sniklas unsigned immediate. */ 65fddef416Sniklas #define IMM16 (IMM8+1) 66fddef416Sniklas {16, 0, MN10200_OPERAND_PROMOTE}, 67fddef416Sniklas 68fddef416Sniklas /* 16 bit pc-relative immediate which may promote to a 16bit 69fddef416Sniklas pc-relative immediate. */ 70fddef416Sniklas #define IMM16_PCREL (IMM16+1) 71fddef416Sniklas {16, 0, MN10200_OPERAND_PCREL | MN10200_OPERAND_RELAX | MN10200_OPERAND_SIGNED}, 72fddef416Sniklas 73fddef416Sniklas /* 16bit unsigned dispacement in a memory operation which 74fddef416Sniklas may promote to a 32bit displacement. */ 75fddef416Sniklas #define IMM16_MEM (IMM16_PCREL+1) 76fddef416Sniklas {16, 0, MN10200_OPERAND_PROMOTE | MN10200_OPERAND_MEMADDR}, 77fddef416Sniklas 78fddef416Sniklas /* 24 immediate, low 16 bits in the main instruction 79fddef416Sniklas word, 8 in the extension word. */ 80fddef416Sniklas 81fddef416Sniklas #define IMM24 (IMM16_MEM+1) 82fddef416Sniklas {24, 0, MN10200_OPERAND_EXTENDED}, 83fddef416Sniklas 84fddef416Sniklas /* 32bit pc-relative offset. */ 85fddef416Sniklas #define IMM24_PCREL (IMM24+1) 86fddef416Sniklas {24, 0, MN10200_OPERAND_EXTENDED | MN10200_OPERAND_PCREL | MN10200_OPERAND_SIGNED}, 87fddef416Sniklas 88fddef416Sniklas /* 32bit memory offset. */ 89fddef416Sniklas #define IMM24_MEM (IMM24_PCREL+1) 90fddef416Sniklas {24, 0, MN10200_OPERAND_EXTENDED | MN10200_OPERAND_MEMADDR}, 91fddef416Sniklas 92fddef416Sniklas /* Processor status word. */ 93fddef416Sniklas #define PSW (IMM24_MEM+1) 94fddef416Sniklas {0, 0, MN10200_OPERAND_PSW}, 95fddef416Sniklas 96fddef416Sniklas /* MDR register. */ 97fddef416Sniklas #define MDR (PSW+1) 98fddef416Sniklas {0, 0, MN10200_OPERAND_MDR}, 99fddef416Sniklas 100fddef416Sniklas /* Index register. */ 101fddef416Sniklas #define DI (MDR+1) 102fddef416Sniklas {2, 4, MN10200_OPERAND_DREG}, 103fddef416Sniklas 104fddef416Sniklas /* 8 bit signed displacement, may promote to 16bit signed dispacement. */ 105fddef416Sniklas #define SD8 (DI+1) 106fddef416Sniklas {8, 0, MN10200_OPERAND_SIGNED | MN10200_OPERAND_PROMOTE}, 107fddef416Sniklas 108fddef416Sniklas /* 16 bit signed displacement, may promote to 32bit dispacement. */ 109fddef416Sniklas #define SD16 (SD8+1) 110fddef416Sniklas {16, 0, MN10200_OPERAND_SIGNED | MN10200_OPERAND_PROMOTE}, 111fddef416Sniklas 112fddef416Sniklas /* 8 bit pc-relative displacement. */ 113fddef416Sniklas #define SD8N_PCREL (SD16+1) 114fddef416Sniklas {8, 0, MN10200_OPERAND_SIGNED | MN10200_OPERAND_PCREL | MN10200_OPERAND_RELAX}, 115fddef416Sniklas 116fddef416Sniklas /* 8 bit signed immediate which may promote to 16bit signed immediate. */ 117fddef416Sniklas #define SIMM8 (SD8N_PCREL+1) 118fddef416Sniklas {8, 0, MN10200_OPERAND_SIGNED | MN10200_OPERAND_PROMOTE}, 119fddef416Sniklas 120fddef416Sniklas /* 16 bit signed immediate which may promote to 32bit immediate. */ 121fddef416Sniklas #define SIMM16 (SIMM8+1) 122fddef416Sniklas {16, 0, MN10200_OPERAND_SIGNED | MN10200_OPERAND_PROMOTE}, 123fddef416Sniklas 124fddef416Sniklas /* 16 bit signed immediate which may not promote. */ 125fddef416Sniklas #define SIMM16N (SIMM16+1) 126fddef416Sniklas {16, 0, MN10200_OPERAND_SIGNED | MN10200_OPERAND_NOCHECK}, 127fddef416Sniklas 128fddef416Sniklas /* Either an open paren or close paren. */ 129fddef416Sniklas #define PAREN (SIMM16N+1) 130fddef416Sniklas {0, 0, MN10200_OPERAND_PAREN}, 131fddef416Sniklas 132fddef416Sniklas /* dn register that appears in the first and second register positions. */ 133fddef416Sniklas #define DN01 (PAREN+1) 134fddef416Sniklas {2, 0, MN10200_OPERAND_DREG | MN10200_OPERAND_REPEATED}, 135fddef416Sniklas 136fddef416Sniklas /* an register that appears in the first and second register positions. */ 137fddef416Sniklas #define AN01 (DN01+1) 138fddef416Sniklas {2, 0, MN10200_OPERAND_AREG | MN10200_OPERAND_REPEATED}, 139fddef416Sniklas } ; 140fddef416Sniklas 141fddef416Sniklas #define MEM(ADDR) PAREN, ADDR, PAREN 142fddef416Sniklas #define MEM2(ADDR1,ADDR2) PAREN, ADDR1, ADDR2, PAREN 143fddef416Sniklas 144fddef416Sniklas /* The opcode table. 145fddef416Sniklas 146fddef416Sniklas The format of the opcode table is: 147fddef416Sniklas 148fddef416Sniklas NAME OPCODE MASK { OPERANDS } 149fddef416Sniklas 150fddef416Sniklas NAME is the name of the instruction. 151fddef416Sniklas OPCODE is the instruction opcode. 152fddef416Sniklas MASK is the opcode mask; this is used to tell the disassembler 153fddef416Sniklas which bits in the actual opcode must match OPCODE. 154fddef416Sniklas OPERANDS is the list of operands. 155fddef416Sniklas 156fddef416Sniklas The disassembler reads the table in order and prints the first 157fddef416Sniklas instruction which matches, so this table is sorted to put more 158fddef416Sniklas specific instructions before more general instructions. It is also 159fddef416Sniklas sorted by major opcode. */ 160fddef416Sniklas 161fddef416Sniklas const struct mn10200_opcode mn10200_opcodes[] = { 162fddef416Sniklas { "mov", 0x8000, 0xf000, FMT_2, {SIMM8, DN01}}, 163fddef416Sniklas { "mov", 0x80, 0xf0, FMT_1, {DN1, DM0}}, 164fddef416Sniklas { "mov", 0xf230, 0xfff0, FMT_4, {DM1, AN0}}, 165fddef416Sniklas { "mov", 0xf2f0, 0xfff0, FMT_4, {AN1, DM0}}, 166fddef416Sniklas { "mov", 0xf270, 0xfff0, FMT_4, {AN1, AM0}}, 167fddef416Sniklas { "mov", 0xf3f0, 0xfffc, FMT_4, {PSW, DN0}}, 168fddef416Sniklas { "mov", 0xf3d0, 0xfff3, FMT_4, {DN1, PSW}}, 169fddef416Sniklas { "mov", 0xf3e0, 0xfffc, FMT_4, {MDR, DN0}}, 170fddef416Sniklas { "mov", 0xf3c0, 0xfff3, FMT_4, {DN1, MDR}}, 171fddef416Sniklas { "mov", 0x20, 0xf0, FMT_1, {MEM(AN1), DM0}}, 172fddef416Sniklas { "mov", 0x6000, 0xf000, FMT_2, {MEM2(SD8, AN1), DM0}}, 173fddef416Sniklas { "mov", 0xf7c00000, 0xfff00000, FMT_6, {MEM2(SD16, AN1), DM0}}, 174fddef416Sniklas { "mov", 0xf4800000, 0xfff00000, FMT_7, {MEM2(IMM24,AN1), DM0}}, 175fddef416Sniklas { "mov", 0xf140, 0xffc0, FMT_4, {MEM2(DI, AN1), DM0}}, 176fddef416Sniklas { "mov", 0xc80000, 0xfc0000, FMT_3, {MEM(IMM16_MEM), DN0}}, 177fddef416Sniklas { "mov", 0xf4c00000, 0xfffc0000, FMT_7, {MEM(IMM24_MEM), DN0}}, 178fddef416Sniklas { "mov", 0x7000, 0xf000, FMT_2, {MEM2(SD8,AN1), AM0}}, 179fddef416Sniklas { "mov", 0x7000, 0xf000, FMT_2, {MEM(AN1), AM0}}, 180fddef416Sniklas { "mov", 0xf7b00000, 0xfff00000, FMT_6, {MEM2(SD16, AN1), AM0}}, 181fddef416Sniklas { "mov", 0xf4f00000, 0xfff00000, FMT_7, {MEM2(IMM24,AN1), AM0}}, 182fddef416Sniklas { "mov", 0xf100, 0xffc0, FMT_4, {MEM2(DI, AN1), AM0}}, 183fddef416Sniklas { "mov", 0xf7300000, 0xfffc0000, FMT_6, {MEM(IMM16_MEM), AN0}}, 184fddef416Sniklas { "mov", 0xf4d00000, 0xfffc0000, FMT_7, {MEM(IMM24_MEM), AN0}}, 185fddef416Sniklas { "mov", 0x00, 0xf0, FMT_1, {DM0, MEM(AN1)}}, 186fddef416Sniklas { "mov", 0x4000, 0xf000, FMT_2, {DM0, MEM2(SD8, AN1)}}, 187fddef416Sniklas { "mov", 0xf7800000, 0xfff00000, FMT_6, {DM0, MEM2(SD16, AN1)}}, 188fddef416Sniklas { "mov", 0xf4000000, 0xfff00000, FMT_7, {DM0, MEM2(IMM24, AN1)}}, 189fddef416Sniklas { "mov", 0xf1c0, 0xffc0, FMT_4, {DM0, MEM2(DI, AN1)}}, 190fddef416Sniklas { "mov", 0xc00000, 0xfc0000, FMT_3, {DN0, MEM(IMM16_MEM)}}, 191fddef416Sniklas { "mov", 0xf4400000, 0xfffc0000, FMT_7, {DN0, MEM(IMM24_MEM)}}, 192fddef416Sniklas { "mov", 0x5000, 0xf000, FMT_2, {AM0, MEM2(SD8, AN1)}}, 193fddef416Sniklas { "mov", 0x5000, 0xf000, FMT_2, {AM0, MEM(AN1)}}, 194fddef416Sniklas { "mov", 0xf7a00000, 0xfff00000, FMT_6, {AM0, MEM2(SD16, AN1)}}, 195fddef416Sniklas { "mov", 0xf4100000, 0xfff00000, FMT_7, {AM0, MEM2(IMM24,AN1)}}, 196fddef416Sniklas { "mov", 0xf180, 0xffc0, FMT_4, {AM0, MEM2(DI, AN1)}}, 197fddef416Sniklas { "mov", 0xf7200000, 0xfffc0000, FMT_6, {AN0, MEM(IMM16_MEM)}}, 198fddef416Sniklas { "mov", 0xf4500000, 0xfffc0000, FMT_7, {AN0, MEM(IMM24_MEM)}}, 199fddef416Sniklas { "mov", 0xf80000, 0xfc0000, FMT_3, {SIMM16, DN0}}, 200fddef416Sniklas { "mov", 0xf4700000, 0xfffc0000, FMT_7, {IMM24, DN0}}, 201fddef416Sniklas { "mov", 0xdc0000, 0xfc0000, FMT_3, {IMM16, AN0}}, 202fddef416Sniklas { "mov", 0xf4740000, 0xfffc0000, FMT_7, {IMM24, AN0}}, 203fddef416Sniklas 204fddef416Sniklas { "movx", 0xf57000, 0xfff000, FMT_5, {MEM2(SD8, AN1), DM0}}, 205fddef416Sniklas { "movx", 0xf7700000, 0xfff00000, FMT_6, {MEM2(SD16, AN1), DM0}}, 206fddef416Sniklas { "movx", 0xf4b00000, 0xfff00000, FMT_7, {MEM2(IMM24,AN1), DM0}}, 207fddef416Sniklas { "movx", 0xf55000, 0xfff000, FMT_5, {DM0, MEM2(SD8, AN1)}}, 208fddef416Sniklas { "movx", 0xf7600000, 0xfff00000, FMT_6, {DM0, MEM2(SD16, AN1)}}, 209fddef416Sniklas { "movx", 0xf4300000, 0xfff00000, FMT_7, {DM0, MEM2(IMM24, AN1)}}, 210fddef416Sniklas 211fddef416Sniklas { "movb", 0xf52000, 0xfff000, FMT_5, {MEM2(SD8, AN1), DM0}}, 212fddef416Sniklas { "movb", 0xf7d00000, 0xfff00000, FMT_6, {MEM2(SD16, AN1), DM0}}, 213fddef416Sniklas { "movb", 0xf4a00000, 0xfff00000, FMT_7, {MEM2(IMM24,AN1), DM0}}, 214fddef416Sniklas { "movb", 0xf040, 0xffc0, FMT_4, {MEM2(DI, AN1), DM0}}, 215fddef416Sniklas { "movb", 0xf4c40000, 0xfffc0000, FMT_7, {MEM(IMM24_MEM), DN0}}, 216fddef416Sniklas { "movb", 0x10, 0xf0, FMT_1, {DM0, MEM(AN1)}}, 217fddef416Sniklas { "movb", 0xf51000, 0xfff000, FMT_5, {DM0, MEM2(SD8, AN1)}}, 218fddef416Sniklas { "movb", 0xf7900000, 0xfff00000, FMT_6, {DM0, MEM2(SD16, AN1)}}, 219fddef416Sniklas { "movb", 0xf4200000, 0xfff00000, FMT_7, {DM0, MEM2(IMM24, AN1)}}, 220fddef416Sniklas { "movb", 0xf0c0, 0xffc0, FMT_4, {DM0, MEM2(DI, AN1)}}, 221fddef416Sniklas { "movb", 0xc40000, 0xfc0000, FMT_3, {DN0, MEM(IMM16_MEM)}}, 222fddef416Sniklas { "movb", 0xf4440000, 0xfffc0000, FMT_7, {DN0, MEM(IMM24_MEM)}}, 223fddef416Sniklas 224fddef416Sniklas { "movbu", 0x30, 0xf0, FMT_1, {MEM(AN1), DM0}}, 225fddef416Sniklas { "movbu", 0xf53000, 0xfff000, FMT_5, {MEM2(SD8, AN1), DM0}}, 226fddef416Sniklas { "movbu", 0xf7500000, 0xfff00000, FMT_6, {MEM2(SD16, AN1), DM0}}, 227fddef416Sniklas { "movbu", 0xf4900000, 0xfff00000, FMT_7, {MEM2(IMM24,AN1), DM0}}, 228fddef416Sniklas { "movbu", 0xf080, 0xffc0, FMT_4, {MEM2(DI, AN1), DM0}}, 229fddef416Sniklas { "movbu", 0xcc0000, 0xfc0000, FMT_3, {MEM(IMM16_MEM), DN0}}, 230fddef416Sniklas { "movbu", 0xf4c80000, 0xfffc0000, FMT_7, {MEM(IMM24_MEM), DN0}}, 231fddef416Sniklas 232fddef416Sniklas { "ext", 0xf3c1, 0xfff3, FMT_4, {DN1}}, 233fddef416Sniklas { "extx", 0xb0, 0xfc, FMT_1, {DN0}}, 234fddef416Sniklas { "extxu", 0xb4, 0xfc, FMT_1, {DN0}}, 235fddef416Sniklas { "extxb", 0xb8, 0xfc, FMT_1, {DN0}}, 236fddef416Sniklas { "extxbu", 0xbc, 0xfc, FMT_1, {DN0}}, 237fddef416Sniklas 238fddef416Sniklas { "add", 0x90, 0xf0, FMT_1, {DN1, DM0}}, 239fddef416Sniklas { "add", 0xf200, 0xfff0, FMT_4, {DM1, AN0}}, 240fddef416Sniklas { "add", 0xf2c0, 0xfff0, FMT_4, {AN1, DM0}}, 241fddef416Sniklas { "add", 0xf240, 0xfff0, FMT_4, {AN1, AM0}}, 242fddef416Sniklas { "add", 0xd400, 0xfc00, FMT_2, {SIMM8, DN0}}, 243fddef416Sniklas { "add", 0xf7180000, 0xfffc0000, FMT_6, {SIMM16, DN0}}, 244fddef416Sniklas { "add", 0xf4600000, 0xfffc0000, FMT_7, {IMM24, DN0}}, 245fddef416Sniklas { "add", 0xd000, 0xfc00, FMT_2, {SIMM8, AN0}}, 246fddef416Sniklas { "add", 0xf7080000, 0xfffc0000, FMT_6, {SIMM16, AN0}}, 247fddef416Sniklas { "add", 0xf4640000, 0xfffc0000, FMT_7, {IMM24, AN0}}, 248fddef416Sniklas { "addc", 0xf280, 0xfff0, FMT_4, {DN1, DM0}}, 249fddef416Sniklas { "addnf", 0xf50c00, 0xfffc00, FMT_5, {SIMM8, AN0}}, 250fddef416Sniklas 251fddef416Sniklas { "sub", 0xa0, 0xf0, FMT_1, {DN1, DM0}}, 252fddef416Sniklas { "sub", 0xf210, 0xfff0, FMT_4, {DN1, AN0}}, 253fddef416Sniklas { "sub", 0xf2d0, 0xfff0, FMT_4, {AN1, DM0}}, 254fddef416Sniklas { "sub", 0xf250, 0xfff0, FMT_4, {AN1, AM0}}, 255fddef416Sniklas { "sub", 0xf71c0000, 0xfffc0000, FMT_6, {IMM16, DN0}}, 256fddef416Sniklas { "sub", 0xf4680000, 0xfffc0000, FMT_7, {IMM24, DN0}}, 257fddef416Sniklas { "sub", 0xf70c0000, 0xfffc0000, FMT_6, {IMM16, AN0}}, 258fddef416Sniklas { "sub", 0xf46c0000, 0xfffc0000, FMT_7, {IMM24, AN0}}, 259fddef416Sniklas { "subc", 0xf290, 0xfff0, FMT_4, {DN1, DM0}}, 260fddef416Sniklas 261fddef416Sniklas { "mul", 0xf340, 0xfff0, FMT_4, {DN1, DM0}}, 262fddef416Sniklas { "mulu", 0xf350, 0xfff0, FMT_4, {DN1, DM0}}, 263fddef416Sniklas 264fddef416Sniklas { "divu", 0xf360, 0xfff0, FMT_4, {DN1, DM0}}, 265fddef416Sniklas 266fddef416Sniklas { "cmp", 0xf390, 0xfff0, FMT_4, {DN1, DM0}}, 267fddef416Sniklas { "cmp", 0xf220, 0xfff0, FMT_4, {DM1, AN0}}, 268fddef416Sniklas { "cmp", 0xf2e0, 0xfff0, FMT_4, {AN1, DM0}}, 269fddef416Sniklas { "cmp", 0xf260, 0xfff0, FMT_4, {AN1, AM0}}, 270fddef416Sniklas { "cmp", 0xd800, 0xfc00, FMT_2, {SIMM8, DN0}}, 271fddef416Sniklas { "cmp", 0xf7480000, 0xfffc0000, FMT_6, {SIMM16, DN0}}, 272fddef416Sniklas { "cmp", 0xf4780000, 0xfffc0000, FMT_7, {IMM24, DN0}}, 273fddef416Sniklas { "cmp", 0xec0000, 0xfc0000, FMT_3, {IMM16, AN0}}, 274fddef416Sniklas { "cmp", 0xf47c0000, 0xfffc0000, FMT_7, {IMM24, AN0}}, 275fddef416Sniklas 276fddef416Sniklas { "and", 0xf300, 0xfff0, FMT_4, {DN1, DM0}}, 277fddef416Sniklas { "and", 0xf50000, 0xfffc00, FMT_5, {IMM8, DN0}}, 278fddef416Sniklas { "and", 0xf7000000, 0xfffc0000, FMT_6, {SIMM16N, DN0}}, 279fddef416Sniklas { "and", 0xf7100000, 0xffff0000, FMT_6, {SIMM16N, PSW}}, 280fddef416Sniklas { "or", 0xf310, 0xfff0, FMT_4, {DN1, DM0}}, 281fddef416Sniklas { "or", 0xf50800, 0xfffc00, FMT_5, {IMM8, DN0}}, 282fddef416Sniklas { "or", 0xf7400000, 0xfffc0000, FMT_6, {SIMM16N, DN0}}, 283fddef416Sniklas { "or", 0xf7140000, 0xffff0000, FMT_6, {SIMM16N, PSW}}, 284fddef416Sniklas { "xor", 0xf320, 0xfff0, FMT_4, {DN1, DM0}}, 285fddef416Sniklas { "xor", 0xf74c0000, 0xfffc0000, FMT_6, {SIMM16N, DN0}}, 286fddef416Sniklas { "not", 0xf3e4, 0xfffc, FMT_4, {DN0}}, 287fddef416Sniklas 288fddef416Sniklas { "asr", 0xf338, 0xfffc, FMT_4, {DN0}}, 289fddef416Sniklas { "lsr", 0xf33c, 0xfffc, FMT_4, {DN0}}, 290fddef416Sniklas { "ror", 0xf334, 0xfffc, FMT_4, {DN0}}, 291fddef416Sniklas { "rol", 0xf330, 0xfffc, FMT_4, {DN0}}, 292fddef416Sniklas 293fddef416Sniklas { "btst", 0xf50400, 0xfffc00, FMT_5, {IMM8, DN0}}, 294fddef416Sniklas { "btst", 0xf7040000, 0xfffc0000, FMT_6, {SIMM16N, DN0}}, 295fddef416Sniklas { "bset", 0xf020, 0xfff0, FMT_4, {DM0, MEM(AN1)}}, 296fddef416Sniklas { "bclr", 0xf030, 0xfff0, FMT_4, {DM0, MEM(AN1)}}, 297fddef416Sniklas 298fddef416Sniklas { "beq", 0xe800, 0xff00, FMT_2, {SD8N_PCREL}}, 299fddef416Sniklas { "bne", 0xe900, 0xff00, FMT_2, {SD8N_PCREL}}, 300fddef416Sniklas { "blt", 0xe000, 0xff00, FMT_2, {SD8N_PCREL}}, 301fddef416Sniklas { "ble", 0xe300, 0xff00, FMT_2, {SD8N_PCREL}}, 302fddef416Sniklas { "bge", 0xe200, 0xff00, FMT_2, {SD8N_PCREL}}, 303fddef416Sniklas { "bgt", 0xe100, 0xff00, FMT_2, {SD8N_PCREL}}, 304fddef416Sniklas { "bcs", 0xe400, 0xff00, FMT_2, {SD8N_PCREL}}, 305fddef416Sniklas { "bls", 0xe700, 0xff00, FMT_2, {SD8N_PCREL}}, 306fddef416Sniklas { "bcc", 0xe600, 0xff00, FMT_2, {SD8N_PCREL}}, 307fddef416Sniklas { "bhi", 0xe500, 0xff00, FMT_2, {SD8N_PCREL}}, 308fddef416Sniklas { "bvc", 0xf5fc00, 0xffff00, FMT_5, {SD8N_PCREL}}, 309fddef416Sniklas { "bvs", 0xf5fd00, 0xffff00, FMT_5, {SD8N_PCREL}}, 310fddef416Sniklas { "bnc", 0xf5fe00, 0xffff00, FMT_5, {SD8N_PCREL}}, 311fddef416Sniklas { "bns", 0xf5ff00, 0xffff00, FMT_5, {SD8N_PCREL}}, 312fddef416Sniklas { "bra", 0xea00, 0xff00, FMT_2, {SD8N_PCREL}}, 313fddef416Sniklas 314fddef416Sniklas { "beqx", 0xf5e800, 0xffff00, FMT_5, {SD8N_PCREL}}, 315fddef416Sniklas { "bnex", 0xf5e900, 0xffff00, FMT_5, {SD8N_PCREL}}, 316fddef416Sniklas { "bltx", 0xf5e000, 0xffff00, FMT_5, {SD8N_PCREL}}, 317fddef416Sniklas { "blex", 0xf5e300, 0xffff00, FMT_5, {SD8N_PCREL}}, 318fddef416Sniklas { "bgex", 0xf5e200, 0xffff00, FMT_5, {SD8N_PCREL}}, 319fddef416Sniklas { "bgtx", 0xf5e100, 0xffff00, FMT_5, {SD8N_PCREL}}, 320fddef416Sniklas { "bcsx", 0xf5e400, 0xffff00, FMT_5, {SD8N_PCREL}}, 321fddef416Sniklas { "blsx", 0xf5e700, 0xffff00, FMT_5, {SD8N_PCREL}}, 322fddef416Sniklas { "bccx", 0xf5e600, 0xffff00, FMT_5, {SD8N_PCREL}}, 323fddef416Sniklas { "bhix", 0xf5e500, 0xffff00, FMT_5, {SD8N_PCREL}}, 324fddef416Sniklas { "bvcx", 0xf5ec00, 0xffff00, FMT_5, {SD8N_PCREL}}, 325fddef416Sniklas { "bvsx", 0xf5ed00, 0xffff00, FMT_5, {SD8N_PCREL}}, 326fddef416Sniklas { "bncx", 0xf5ee00, 0xffff00, FMT_5, {SD8N_PCREL}}, 327fddef416Sniklas { "bnsx", 0xf5ef00, 0xffff00, FMT_5, {SD8N_PCREL}}, 328fddef416Sniklas 329fddef416Sniklas { "jmp", 0xfc0000, 0xff0000, FMT_3, {IMM16_PCREL}}, 330fddef416Sniklas { "jmp", 0xf4e00000, 0xffff0000, FMT_7, {IMM24_PCREL}}, 331fddef416Sniklas { "jmp", 0xf000, 0xfff3, FMT_4, {PAREN,AN1,PAREN}}, 332fddef416Sniklas { "jsr", 0xfd0000, 0xff0000, FMT_3, {IMM16_PCREL}}, 333fddef416Sniklas { "jsr", 0xf4e10000, 0xffff0000, FMT_7, {IMM24_PCREL}}, 334fddef416Sniklas { "jsr", 0xf001, 0xfff3, FMT_4, {PAREN,AN1,PAREN}}, 335fddef416Sniklas 336fddef416Sniklas { "nop", 0xf6, 0xff, FMT_1, {UNUSED}}, 337fddef416Sniklas 338fddef416Sniklas { "rts", 0xfe, 0xff, FMT_1, {UNUSED}}, 339fddef416Sniklas { "rti", 0xeb, 0xff, FMT_1, {UNUSED}}, 340fddef416Sniklas 341fddef416Sniklas /* Extension. We need some instruction to trigger "emulated syscalls" 342fddef416Sniklas for our simulator. */ 343fddef416Sniklas { "syscall", 0xf010, 0xffff, FMT_4, {UNUSED}}, 344fddef416Sniklas 345fddef416Sniklas /* Extension. When talking to the simulator, gdb requires some instruction 346fddef416Sniklas that will trigger a "breakpoint" (really just an instruction that isn't 347fddef416Sniklas otherwise used by the tools. This instruction must be the same size 348fddef416Sniklas as the smallest instruction on the target machine. In the case of the 349fddef416Sniklas mn10x00 the "break" instruction must be one byte. 0xff is available on 350fddef416Sniklas both mn10x00 architectures. */ 351fddef416Sniklas { "break", 0xff, 0xff, FMT_1, {UNUSED}}, 352fddef416Sniklas 353fddef416Sniklas { 0, 0, 0, 0, {0}}, 354fddef416Sniklas 355fddef416Sniklas } ; 356fddef416Sniklas 357fddef416Sniklas const int mn10200_num_opcodes = 358fddef416Sniklas sizeof (mn10200_opcodes) / sizeof (mn10200_opcodes[0]); 359fddef416Sniklas 360fddef416Sniklas 361