1214571Sdim/* Instruction opcode table for mep. 2214571Sdim 3214571SdimTHIS FILE IS MACHINE GENERATED WITH CGEN. 4214571Sdim 5214571SdimCopyright 1996-2005 Free Software Foundation, Inc. 6214571Sdim 7214571SdimThis file is part of the GNU Binutils and/or GDB, the GNU debugger. 8214571Sdim 9214571SdimThis program is free software; you can redistribute it and/or modify 10214571Sdimit under the terms of the GNU General Public License as published by 11214571Sdimthe Free Software Foundation; either version 2, or (at your option) 12214571Sdimany later version. 13214571Sdim 14214571SdimThis program is distributed in the hope that it will be useful, 15214571Sdimbut WITHOUT ANY WARRANTY; without even the implied warranty of 16214571SdimMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17214571SdimGNU General Public License for more details. 18214571Sdim 19214571SdimYou should have received a copy of the GNU General Public License along 20214571Sdimwith this program; if not, write to the Free Software Foundation, Inc., 21214571Sdim51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. 22214571Sdim 23214571Sdim*/ 24214571Sdim 25214571Sdim#include "sysdep.h" 26214571Sdim#include "ansidecl.h" 27214571Sdim#include "bfd.h" 28214571Sdim#include "symcat.h" 29214571Sdim#include "mep-desc.h" 30214571Sdim#include "mep-opc.h" 31214571Sdim#include "libiberty.h" 32214571Sdim 33214571Sdim/* -- opc.c */ 34214571Sdim#include "elf/mep.h" 35214571Sdim 36214571Sdim/* A mask for all ISAs executed by the core. */ 37214571SdimCGEN_ATTR_VALUE_BITSET_TYPE mep_all_core_isas_mask = {0, 0}; 38214571Sdim 39214571Sdimvoid 40214571Sdiminit_mep_all_core_isas_mask (void) 41214571Sdim{ 42214571Sdim if (mep_all_core_isas_mask.length != 0) 43214571Sdim return; 44214571Sdim cgen_bitset_init (& mep_all_core_isas_mask, ISA_MAX); 45214571Sdim cgen_bitset_set (& mep_all_core_isas_mask, ISA_MEP); 46214571Sdim /* begin-all-core-isas */ 47214571Sdim cgen_bitset_add (& mep_all_core_isas_mask, ISA_EXT_CORE1); 48214571Sdim cgen_bitset_add (& mep_all_core_isas_mask, ISA_EXT_CORE2); 49214571Sdim /* end-all-core-isas */ 50214571Sdim} 51214571Sdim 52214571SdimCGEN_ATTR_VALUE_BITSET_TYPE mep_all_cop_isas_mask = {0, 0}; 53214571Sdim 54214571Sdimvoid 55214571Sdiminit_mep_all_cop_isas_mask (void) 56214571Sdim{ 57214571Sdim if (mep_all_cop_isas_mask.length != 0) 58214571Sdim return; 59214571Sdim cgen_bitset_init (& mep_all_cop_isas_mask, ISA_MAX); 60214571Sdim /* begin-all-cop-isas */ 61214571Sdim cgen_bitset_add (& mep_all_cop_isas_mask, ISA_EXT_COP2_16); 62214571Sdim cgen_bitset_add (& mep_all_cop_isas_mask, ISA_EXT_COP2_32); 63214571Sdim cgen_bitset_add (& mep_all_cop_isas_mask, ISA_EXT_COP2_48); 64214571Sdim cgen_bitset_add (& mep_all_cop_isas_mask, ISA_EXT_COP2_64); 65214571Sdim /* end-all-cop-isas */ 66214571Sdim} 67214571Sdim 68214571Sdimint 69214571Sdimmep_insn_supported_by_isa (const CGEN_INSN *insn, CGEN_ATTR_VALUE_BITSET_TYPE *isa_mask) 70214571Sdim{ 71214571Sdim CGEN_BITSET insn_isas = CGEN_INSN_BITSET_ATTR_VALUE (insn, CGEN_INSN_ISA); 72214571Sdim return cgen_bitset_intersect_p (& insn_isas, isa_mask); 73214571Sdim} 74214571Sdim 75214571Sdim#define OPTION_MASK \ 76214571Sdim ( (1 << CGEN_INSN_OPTIONAL_BIT_INSN) \ 77214571Sdim | (1 << CGEN_INSN_OPTIONAL_MUL_INSN) \ 78214571Sdim | (1 << CGEN_INSN_OPTIONAL_DIV_INSN) \ 79214571Sdim | (1 << CGEN_INSN_OPTIONAL_DEBUG_INSN) \ 80214571Sdim | (1 << CGEN_INSN_OPTIONAL_LDZ_INSN) \ 81214571Sdim | (1 << CGEN_INSN_OPTIONAL_ABS_INSN) \ 82214571Sdim | (1 << CGEN_INSN_OPTIONAL_AVE_INSN) \ 83214571Sdim | (1 << CGEN_INSN_OPTIONAL_MINMAX_INSN) \ 84214571Sdim | (1 << CGEN_INSN_OPTIONAL_CLIP_INSN) \ 85214571Sdim | (1 << CGEN_INSN_OPTIONAL_SAT_INSN) \ 86214571Sdim | (1 << CGEN_INSN_OPTIONAL_UCI_INSN) \ 87214571Sdim | (1 << CGEN_INSN_OPTIONAL_DSP_INSN) \ 88214571Sdim | (1 << CGEN_INSN_OPTIONAL_CP_INSN) \ 89214571Sdim | (1 << CGEN_INSN_OPTIONAL_CP64_INSN) ) 90214571Sdim 91214571Sdim 92214571Sdimmep_config_map_struct mep_config_map[] = 93214571Sdim{ 94214571Sdim /* config-map-start */ 95214571Sdim /* Default entry: mep core only, all options enabled. */ 96214571Sdim { "", 0, EF_MEP_CPU_C2, 1, 0, {1,"\x0"}, {1,"\x0"}, {1,"\x0"}, {1,"\x0"}, {1,"\x0"}, {1,"\x80"}, OPTION_MASK }, 97214571Sdim { "simple", CONFIG_SIMPLE, EF_MEP_CPU_C2, 1, 0, { 1, "\x0" }, { 1, "\x0" }, { 1, "\x0" }, { 1, "\x0" }, { 1, "\x0" }, { 1, "\xc0" }, 98214571Sdim 0 }, 99214571Sdim { "fmax", CONFIG_FMAX, EF_MEP_CPU_C2, 1, 0, { 1, "\x10" }, { 1, "\x8" }, { 1, "\x4" }, { 1, "\x2" }, { 1, "\x1e" }, { 1, "\xa0" }, 100214571Sdim 0 101214571Sdim | (1 << CGEN_INSN_OPTIONAL_CP_INSN) 102214571Sdim | (1 << CGEN_INSN_OPTIONAL_MUL_INSN) 103214571Sdim | (1 << CGEN_INSN_OPTIONAL_DIV_INSN) 104214571Sdim | (1 << CGEN_INSN_OPTIONAL_BIT_INSN) 105214571Sdim | (1 << CGEN_INSN_OPTIONAL_LDZ_INSN) 106214571Sdim | (1 << CGEN_INSN_OPTIONAL_ABS_INSN) 107214571Sdim | (1 << CGEN_INSN_OPTIONAL_AVE_INSN) 108214571Sdim | (1 << CGEN_INSN_OPTIONAL_MINMAX_INSN) 109214571Sdim | (1 << CGEN_INSN_OPTIONAL_CLIP_INSN) 110214571Sdim | (1 << CGEN_INSN_OPTIONAL_SAT_INSN) }, 111214571Sdim /* config-map-end */ 112214571Sdim { 0, 0, 0, 0, 0, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, 0 } 113214571Sdim}; 114214571Sdim 115214571Sdimint mep_config_index = 0; 116214571Sdim 117214571Sdimstatic int 118214571Sdimcheck_configured_mach (int machs) 119214571Sdim{ 120214571Sdim /* All base insns are supported. */ 121214571Sdim int mach = 1 << MACH_BASE; 122214571Sdim switch (MEP_CPU) 123214571Sdim { 124214571Sdim case EF_MEP_CPU_C2: 125214571Sdim case EF_MEP_CPU_C3: 126214571Sdim mach |= (1 << MACH_MEP); 127214571Sdim break; 128214571Sdim case EF_MEP_CPU_H1: 129214571Sdim mach |= (1 << MACH_H1); 130214571Sdim break; 131214571Sdim default: 132214571Sdim break; 133214571Sdim } 134214571Sdim return machs & mach; 135214571Sdim} 136214571Sdim 137214571Sdimint 138214571Sdimmep_cgen_insn_supported (CGEN_CPU_DESC cd, const CGEN_INSN *insn) 139214571Sdim{ 140214571Sdim int iconfig = CGEN_INSN_ATTR_VALUE (insn, CGEN_INSN_CONFIG); 141214571Sdim int machs = CGEN_INSN_ATTR_VALUE (insn, CGEN_INSN_MACH); 142214571Sdim CGEN_BITSET isas = CGEN_INSN_BITSET_ATTR_VALUE (insn, CGEN_INSN_ISA); 143214571Sdim int ok1; 144214571Sdim int ok2; 145214571Sdim int ok3; 146214571Sdim 147214571Sdim /* If the insn has an option bit set that we don't want, 148214571Sdim reject it. */ 149214571Sdim if (CGEN_INSN_ATTRS (insn)->bool & OPTION_MASK & ~MEP_OMASK) 150214571Sdim return 0; 151214571Sdim 152214571Sdim /* If attributes are absent, assume no restriction. */ 153214571Sdim if (machs == 0) 154214571Sdim machs = ~0; 155214571Sdim 156214571Sdim ok1 = ((machs & cd->machs) && cgen_bitset_intersect_p (& isas, cd->isas)); 157214571Sdim /* If the insn is config-specific, make sure it matches. */ 158214571Sdim ok2 = (iconfig == 0 || iconfig == MEP_CONFIG); 159214571Sdim /* Make sure the insn is supported by the configured mach */ 160214571Sdim ok3 = check_configured_mach (machs); 161214571Sdim 162214571Sdim return (ok1 && ok2 && ok3); 163214571Sdim} 164214571Sdim/* The hash functions are recorded here to help keep assembler code out of 165214571Sdim the disassembler and vice versa. */ 166214571Sdim 167214571Sdimstatic int asm_hash_insn_p (const CGEN_INSN *); 168214571Sdimstatic unsigned int asm_hash_insn (const char *); 169214571Sdimstatic int dis_hash_insn_p (const CGEN_INSN *); 170214571Sdimstatic unsigned int dis_hash_insn (const char *, CGEN_INSN_INT); 171214571Sdim 172214571Sdim/* Instruction formats. */ 173214571Sdim 174214571Sdim#if defined (__STDC__) || defined (ALMOST_STDC) || defined (HAVE_STRINGIZE) 175214571Sdim#define F(f) & mep_cgen_ifld_table[MEP_##f] 176214571Sdim#else 177214571Sdim#define F(f) & mep_cgen_ifld_table[MEP_/**/f] 178214571Sdim#endif 179214571Sdimstatic const CGEN_IFMT ifmt_empty ATTRIBUTE_UNUSED = { 180214571Sdim 0, 0, 0x0, { { 0 } } 181214571Sdim}; 182214571Sdim 183214571Sdimstatic const CGEN_IFMT ifmt_sb ATTRIBUTE_UNUSED = { 184214571Sdim 16, 16, 0xf00f, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { 0 } } 185214571Sdim}; 186214571Sdim 187214571Sdimstatic const CGEN_IFMT ifmt_sh ATTRIBUTE_UNUSED = { 188214571Sdim 16, 16, 0xf00f, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { 0 } } 189214571Sdim}; 190214571Sdim 191214571Sdimstatic const CGEN_IFMT ifmt_sw ATTRIBUTE_UNUSED = { 192214571Sdim 16, 16, 0xf00f, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { 0 } } 193214571Sdim}; 194214571Sdim 195214571Sdimstatic const CGEN_IFMT ifmt_lbu ATTRIBUTE_UNUSED = { 196214571Sdim 16, 16, 0xf00f, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { 0 } } 197214571Sdim}; 198214571Sdim 199214571Sdimstatic const CGEN_IFMT ifmt_lhu ATTRIBUTE_UNUSED = { 200214571Sdim 16, 16, 0xf00f, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { 0 } } 201214571Sdim}; 202214571Sdim 203214571Sdimstatic const CGEN_IFMT ifmt_sw_sp ATTRIBUTE_UNUSED = { 204214571Sdim 16, 16, 0xf083, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_8) }, { F (F_7U9A4) }, { F (F_SUB2) }, { 0 } } 205214571Sdim}; 206214571Sdim 207214571Sdimstatic const CGEN_IFMT ifmt_sb_tp ATTRIBUTE_UNUSED = { 208214571Sdim 16, 16, 0xf880, { { F (F_MAJOR) }, { F (F_4) }, { F (F_RN3) }, { F (F_8) }, { F (F_7U9) }, { 0 } } 209214571Sdim}; 210214571Sdim 211214571Sdimstatic const CGEN_IFMT ifmt_sh_tp ATTRIBUTE_UNUSED = { 212214571Sdim 16, 16, 0xf881, { { F (F_MAJOR) }, { F (F_4) }, { F (F_RN3) }, { F (F_8) }, { F (F_7U9A2) }, { F (F_15) }, { 0 } } 213214571Sdim}; 214214571Sdim 215214571Sdimstatic const CGEN_IFMT ifmt_sw_tp ATTRIBUTE_UNUSED = { 216214571Sdim 16, 16, 0xf883, { { F (F_MAJOR) }, { F (F_4) }, { F (F_RN3) }, { F (F_8) }, { F (F_7U9A4) }, { F (F_SUB2) }, { 0 } } 217214571Sdim}; 218214571Sdim 219214571Sdimstatic const CGEN_IFMT ifmt_lbu_tp ATTRIBUTE_UNUSED = { 220214571Sdim 16, 16, 0xf880, { { F (F_MAJOR) }, { F (F_4) }, { F (F_RN3) }, { F (F_8) }, { F (F_7U9) }, { 0 } } 221214571Sdim}; 222214571Sdim 223214571Sdimstatic const CGEN_IFMT ifmt_lhu_tp ATTRIBUTE_UNUSED = { 224214571Sdim 16, 16, 0xf881, { { F (F_MAJOR) }, { F (F_4) }, { F (F_RN3) }, { F (F_8) }, { F (F_7U9A2) }, { F (F_15) }, { 0 } } 225214571Sdim}; 226214571Sdim 227214571Sdimstatic const CGEN_IFMT ifmt_sb16 ATTRIBUTE_UNUSED = { 228214571Sdim 32, 32, 0xf00f0000, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { F (F_16S16) }, { 0 } } 229214571Sdim}; 230214571Sdim 231214571Sdimstatic const CGEN_IFMT ifmt_sh16 ATTRIBUTE_UNUSED = { 232214571Sdim 32, 32, 0xf00f0000, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { F (F_16S16) }, { 0 } } 233214571Sdim}; 234214571Sdim 235214571Sdimstatic const CGEN_IFMT ifmt_sw16 ATTRIBUTE_UNUSED = { 236214571Sdim 32, 32, 0xf00f0000, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { F (F_16S16) }, { 0 } } 237214571Sdim}; 238214571Sdim 239214571Sdimstatic const CGEN_IFMT ifmt_lbu16 ATTRIBUTE_UNUSED = { 240214571Sdim 32, 32, 0xf00f0000, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { F (F_16S16) }, { 0 } } 241214571Sdim}; 242214571Sdim 243214571Sdimstatic const CGEN_IFMT ifmt_lhu16 ATTRIBUTE_UNUSED = { 244214571Sdim 32, 32, 0xf00f0000, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { F (F_16S16) }, { 0 } } 245214571Sdim}; 246214571Sdim 247214571Sdimstatic const CGEN_IFMT ifmt_sw24 ATTRIBUTE_UNUSED = { 248214571Sdim 32, 32, 0xf0030000, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_24U8A4N) }, { F (F_SUB2) }, { 0 } } 249214571Sdim}; 250214571Sdim 251214571Sdimstatic const CGEN_IFMT ifmt_extb ATTRIBUTE_UNUSED = { 252214571Sdim 16, 16, 0xf0ff, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { 0 } } 253214571Sdim}; 254214571Sdim 255214571Sdimstatic const CGEN_IFMT ifmt_ssarb ATTRIBUTE_UNUSED = { 256214571Sdim 16, 16, 0xfc0f, { { F (F_MAJOR) }, { F (F_4) }, { F (F_5) }, { F (F_2U6) }, { F (F_RM) }, { F (F_SUB4) }, { 0 } } 257214571Sdim}; 258214571Sdim 259214571Sdimstatic const CGEN_IFMT ifmt_mov ATTRIBUTE_UNUSED = { 260214571Sdim 16, 16, 0xf00f, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { 0 } } 261214571Sdim}; 262214571Sdim 263214571Sdimstatic const CGEN_IFMT ifmt_movi8 ATTRIBUTE_UNUSED = { 264214571Sdim 16, 16, 0xf000, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_8S8) }, { 0 } } 265214571Sdim}; 266214571Sdim 267214571Sdimstatic const CGEN_IFMT ifmt_movi16 ATTRIBUTE_UNUSED = { 268214571Sdim 32, 32, 0xf0ff0000, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { F (F_16S16) }, { 0 } } 269214571Sdim}; 270214571Sdim 271214571Sdimstatic const CGEN_IFMT ifmt_movu24 ATTRIBUTE_UNUSED = { 272214571Sdim 32, 32, 0xf8000000, { { F (F_MAJOR) }, { F (F_4) }, { F (F_RN3) }, { F (F_24U8N) }, { 0 } } 273214571Sdim}; 274214571Sdim 275214571Sdimstatic const CGEN_IFMT ifmt_movu16 ATTRIBUTE_UNUSED = { 276214571Sdim 32, 32, 0xf0ff0000, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { F (F_16U16) }, { 0 } } 277214571Sdim}; 278214571Sdim 279214571Sdimstatic const CGEN_IFMT ifmt_add3 ATTRIBUTE_UNUSED = { 280214571Sdim 16, 16, 0xf000, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_RL) }, { 0 } } 281214571Sdim}; 282214571Sdim 283214571Sdimstatic const CGEN_IFMT ifmt_add ATTRIBUTE_UNUSED = { 284214571Sdim 16, 16, 0xf003, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_6S8) }, { F (F_SUB2) }, { 0 } } 285214571Sdim}; 286214571Sdim 287214571Sdimstatic const CGEN_IFMT ifmt_add3i ATTRIBUTE_UNUSED = { 288214571Sdim 16, 16, 0xf083, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_8) }, { F (F_7U9A4) }, { F (F_SUB2) }, { 0 } } 289214571Sdim}; 290214571Sdim 291214571Sdimstatic const CGEN_IFMT ifmt_slt3i ATTRIBUTE_UNUSED = { 292214571Sdim 16, 16, 0xf007, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_5U8) }, { F (F_SUB3) }, { 0 } } 293214571Sdim}; 294214571Sdim 295214571Sdimstatic const CGEN_IFMT ifmt_add3x ATTRIBUTE_UNUSED = { 296214571Sdim 32, 32, 0xf00f0000, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { F (F_16S16) }, { 0 } } 297214571Sdim}; 298214571Sdim 299214571Sdimstatic const CGEN_IFMT ifmt_sltu3x ATTRIBUTE_UNUSED = { 300214571Sdim 32, 32, 0xf00f0000, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { F (F_16U16) }, { 0 } } 301214571Sdim}; 302214571Sdim 303214571Sdimstatic const CGEN_IFMT ifmt_bra ATTRIBUTE_UNUSED = { 304214571Sdim 16, 16, 0xf001, { { F (F_MAJOR) }, { F (F_12S4A2) }, { F (F_15) }, { 0 } } 305214571Sdim}; 306214571Sdim 307214571Sdimstatic const CGEN_IFMT ifmt_beqz ATTRIBUTE_UNUSED = { 308214571Sdim 16, 16, 0xf001, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_8S8A2) }, { F (F_15) }, { 0 } } 309214571Sdim}; 310214571Sdim 311214571Sdimstatic const CGEN_IFMT ifmt_beqi ATTRIBUTE_UNUSED = { 312214571Sdim 32, 32, 0xf00f0000, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_4U8) }, { F (F_SUB4) }, { F (F_17S16A2) }, { 0 } } 313214571Sdim}; 314214571Sdim 315214571Sdimstatic const CGEN_IFMT ifmt_beq ATTRIBUTE_UNUSED = { 316214571Sdim 32, 32, 0xf00f0000, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { F (F_17S16A2) }, { 0 } } 317214571Sdim}; 318214571Sdim 319214571Sdimstatic const CGEN_IFMT ifmt_bsr24 ATTRIBUTE_UNUSED = { 320214571Sdim 32, 32, 0xf80f0000, { { F (F_MAJOR) }, { F (F_4) }, { F (F_24S5A2N) }, { F (F_SUB4) }, { 0 } } 321214571Sdim}; 322214571Sdim 323214571Sdimstatic const CGEN_IFMT ifmt_jmp ATTRIBUTE_UNUSED = { 324214571Sdim 16, 16, 0xff0f, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { 0 } } 325214571Sdim}; 326214571Sdim 327214571Sdimstatic const CGEN_IFMT ifmt_jmp24 ATTRIBUTE_UNUSED = { 328214571Sdim 32, 32, 0xf80f0000, { { F (F_MAJOR) }, { F (F_4) }, { F (F_24U5A2N) }, { F (F_SUB4) }, { 0 } } 329214571Sdim}; 330214571Sdim 331214571Sdimstatic const CGEN_IFMT ifmt_ret ATTRIBUTE_UNUSED = { 332214571Sdim 16, 16, 0xffff, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { 0 } } 333214571Sdim}; 334214571Sdim 335214571Sdimstatic const CGEN_IFMT ifmt_repeat ATTRIBUTE_UNUSED = { 336214571Sdim 32, 32, 0xf0ff0000, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { F (F_17S16A2) }, { 0 } } 337214571Sdim}; 338214571Sdim 339214571Sdimstatic const CGEN_IFMT ifmt_erepeat ATTRIBUTE_UNUSED = { 340214571Sdim 32, 32, 0xffff0000, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { F (F_17S16A2) }, { 0 } } 341214571Sdim}; 342214571Sdim 343214571Sdimstatic const CGEN_IFMT ifmt_stc_lp ATTRIBUTE_UNUSED = { 344214571Sdim 16, 16, 0xf0ff, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_CSRN_LO) }, { F (F_12) }, { F (F_13) }, { F (F_14) }, { F (F_CSRN_HI) }, { 0 } } 345214571Sdim}; 346214571Sdim 347214571Sdimstatic const CGEN_IFMT ifmt_stc ATTRIBUTE_UNUSED = { 348214571Sdim 16, 16, 0xf00e, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_CSRN) }, { F (F_12) }, { F (F_13) }, { F (F_14) }, { 0 } } 349214571Sdim}; 350214571Sdim 351214571Sdimstatic const CGEN_IFMT ifmt_swi ATTRIBUTE_UNUSED = { 352214571Sdim 16, 16, 0xffcf, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_8) }, { F (F_9) }, { F (F_2U10) }, { F (F_SUB4) }, { 0 } } 353214571Sdim}; 354214571Sdim 355214571Sdimstatic const CGEN_IFMT ifmt_bsetm ATTRIBUTE_UNUSED = { 356214571Sdim 16, 16, 0xf80f, { { F (F_MAJOR) }, { F (F_4) }, { F (F_3U5) }, { F (F_RM) }, { F (F_SUB4) }, { 0 } } 357214571Sdim}; 358214571Sdim 359214571Sdimstatic const CGEN_IFMT ifmt_tas ATTRIBUTE_UNUSED = { 360214571Sdim 16, 16, 0xf00f, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { 0 } } 361214571Sdim}; 362214571Sdim 363214571Sdimstatic const CGEN_IFMT ifmt_cache ATTRIBUTE_UNUSED = { 364214571Sdim 16, 16, 0xf00f, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { 0 } } 365214571Sdim}; 366214571Sdim 367214571Sdimstatic const CGEN_IFMT ifmt_madd ATTRIBUTE_UNUSED = { 368214571Sdim 32, 32, 0xf00fffff, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { F (F_16U16) }, { 0 } } 369214571Sdim}; 370214571Sdim 371214571Sdimstatic const CGEN_IFMT ifmt_clip ATTRIBUTE_UNUSED = { 372214571Sdim 32, 32, 0xf0ffff07, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { F (F_EXT) }, { F (F_5U24) }, { F (F_29) }, { F (F_30) }, { F (F_31) }, { 0 } } 373214571Sdim}; 374214571Sdim 375214571Sdimstatic const CGEN_IFMT ifmt_swcp ATTRIBUTE_UNUSED = { 376214571Sdim 16, 16, 0xf00f, { { F (F_MAJOR) }, { F (F_CRN) }, { F (F_RM) }, { F (F_SUB4) }, { 0 } } 377214571Sdim}; 378214571Sdim 379214571Sdimstatic const CGEN_IFMT ifmt_smcp ATTRIBUTE_UNUSED = { 380214571Sdim 16, 16, 0xf00f, { { F (F_MAJOR) }, { F (F_CRN) }, { F (F_RM) }, { F (F_SUB4) }, { 0 } } 381214571Sdim}; 382214571Sdim 383214571Sdimstatic const CGEN_IFMT ifmt_swcp16 ATTRIBUTE_UNUSED = { 384214571Sdim 32, 32, 0xf00f0000, { { F (F_MAJOR) }, { F (F_CRN) }, { F (F_RM) }, { F (F_SUB4) }, { F (F_16S16) }, { 0 } } 385214571Sdim}; 386214571Sdim 387214571Sdimstatic const CGEN_IFMT ifmt_smcp16 ATTRIBUTE_UNUSED = { 388214571Sdim 32, 32, 0xf00f0000, { { F (F_MAJOR) }, { F (F_CRN) }, { F (F_RM) }, { F (F_SUB4) }, { F (F_16S16) }, { 0 } } 389214571Sdim}; 390214571Sdim 391214571Sdimstatic const CGEN_IFMT ifmt_sbcpa ATTRIBUTE_UNUSED = { 392214571Sdim 32, 32, 0xf00fff00, { { F (F_MAJOR) }, { F (F_CRN) }, { F (F_RM) }, { F (F_SUB4) }, { F (F_EXT) }, { F (F_8S24) }, { 0 } } 393214571Sdim}; 394214571Sdim 395214571Sdimstatic const CGEN_IFMT ifmt_shcpa ATTRIBUTE_UNUSED = { 396214571Sdim 32, 32, 0xf00fff01, { { F (F_MAJOR) }, { F (F_CRN) }, { F (F_RM) }, { F (F_SUB4) }, { F (F_EXT) }, { F (F_8S24A2) }, { F (F_31) }, { 0 } } 397214571Sdim}; 398214571Sdim 399214571Sdimstatic const CGEN_IFMT ifmt_swcpa ATTRIBUTE_UNUSED = { 400214571Sdim 32, 32, 0xf00fff03, { { F (F_MAJOR) }, { F (F_CRN) }, { F (F_RM) }, { F (F_SUB4) }, { F (F_EXT) }, { F (F_8S24A4) }, { F (F_30) }, { F (F_31) }, { 0 } } 401214571Sdim}; 402214571Sdim 403214571Sdimstatic const CGEN_IFMT ifmt_smcpa ATTRIBUTE_UNUSED = { 404214571Sdim 32, 32, 0xf00fff07, { { F (F_MAJOR) }, { F (F_CRN) }, { F (F_RM) }, { F (F_SUB4) }, { F (F_EXT) }, { F (F_8S24A8) }, { F (F_29) }, { F (F_30) }, { F (F_31) }, { 0 } } 405214571Sdim}; 406214571Sdim 407214571Sdimstatic const CGEN_IFMT ifmt_bcpeq ATTRIBUTE_UNUSED = { 408214571Sdim 32, 32, 0xff0f0000, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { F (F_17S16A2) }, { 0 } } 409214571Sdim}; 410214571Sdim 411214571Sdimstatic const CGEN_IFMT ifmt_sim_syscall ATTRIBUTE_UNUSED = { 412214571Sdim 16, 16, 0xf8ef, { { F (F_MAJOR) }, { F (F_4) }, { F (F_CALLNUM) }, { F (F_8) }, { F (F_9) }, { F (F_10) }, { F (F_SUB4) }, { 0 } } 413214571Sdim}; 414214571Sdim 415214571Sdimstatic const CGEN_IFMT ifmt_fadds ATTRIBUTE_UNUSED = { 416214571Sdim 32, 32, 0xf0fff001, { { F (F_FMAX_0_4) }, { F (F_FMAX_FRD) }, { F (F_FMAX_8_4) }, { F (F_FMAX_12_4) }, { F (F_FMAX_16_4) }, { F (F_FMAX_FRN) }, { F (F_FMAX_FRM) }, { F (F_FMAX_31_1) }, { 0 } } 417214571Sdim}; 418214571Sdim 419214571Sdimstatic const CGEN_IFMT ifmt_fsqrts ATTRIBUTE_UNUSED = { 420214571Sdim 32, 32, 0xf0fff0f3, { { F (F_FMAX_0_4) }, { F (F_FMAX_FRD) }, { F (F_FMAX_8_4) }, { F (F_FMAX_12_4) }, { F (F_FMAX_16_4) }, { F (F_FMAX_FRN) }, { F (F_FMAX_24_4) }, { F (F_FMAX_30_1) }, { F (F_FMAX_31_1) }, { 0 } } 421214571Sdim}; 422214571Sdim 423214571Sdimstatic const CGEN_IFMT ifmt_froundws ATTRIBUTE_UNUSED = { 424214571Sdim 32, 32, 0xf0fff0f3, { { F (F_FMAX_0_4) }, { F (F_FMAX_FRD) }, { F (F_FMAX_8_4) }, { F (F_FMAX_12_4) }, { F (F_FMAX_16_4) }, { F (F_FMAX_FRN) }, { F (F_FMAX_24_4) }, { F (F_FMAX_30_1) }, { F (F_FMAX_31_1) }, { 0 } } 425214571Sdim}; 426214571Sdim 427214571Sdimstatic const CGEN_IFMT ifmt_fcvtsw ATTRIBUTE_UNUSED = { 428214571Sdim 32, 32, 0xf0fff0f3, { { F (F_FMAX_0_4) }, { F (F_FMAX_FRD) }, { F (F_FMAX_8_4) }, { F (F_FMAX_12_4) }, { F (F_FMAX_16_4) }, { F (F_FMAX_FRN) }, { F (F_FMAX_24_4) }, { F (F_FMAX_30_1) }, { F (F_FMAX_31_1) }, { 0 } } 429214571Sdim}; 430214571Sdim 431214571Sdimstatic const CGEN_IFMT ifmt_fcmpfs ATTRIBUTE_UNUSED = { 432214571Sdim 32, 32, 0xfffff009, { { F (F_FMAX_0_4) }, { F (F_FMAX_4_4) }, { F (F_FMAX_8_4) }, { F (F_FMAX_12_4) }, { F (F_FMAX_16_4) }, { F (F_FMAX_FRN) }, { F (F_FMAX_FRM) }, { F (F_FMAX_28_1) }, { F (F_FMAX_31_1) }, { 0 } } 433214571Sdim}; 434214571Sdim 435214571Sdimstatic const CGEN_IFMT ifmt_cmov_frn_rm ATTRIBUTE_UNUSED = { 436214571Sdim 32, 32, 0xf00ffff7, { { F (F_FMAX_0_4) }, { F (F_FMAX_FRD) }, { F (F_FMAX_RM) }, { F (F_FMAX_12_4) }, { F (F_FMAX_16_4) }, { F (F_FMAX_20_4) }, { F (F_FMAX_24_4) }, { F (F_FMAX_29_1) }, { F (F_FMAX_30_1) }, { F (F_FMAX_31_1) }, { 0 } } 437214571Sdim}; 438214571Sdim 439214571Sdimstatic const CGEN_IFMT ifmt_cmovc_ccrn_rm ATTRIBUTE_UNUSED = { 440214571Sdim 32, 32, 0xf00fffff, { { F (F_FMAX_0_4) }, { F (F_FMAX_4_4) }, { F (F_FMAX_RM) }, { F (F_FMAX_12_4) }, { F (F_FMAX_16_4) }, { F (F_FMAX_20_4) }, { F (F_FMAX_24_4) }, { F (F_FMAX_28_1) }, { F (F_FMAX_29_1) }, { F (F_FMAX_30_1) }, { F (F_FMAX_31_1) }, { 0 } } 441214571Sdim}; 442214571Sdim 443214571Sdim#undef F 444214571Sdim 445214571Sdim#if defined (__STDC__) || defined (ALMOST_STDC) || defined (HAVE_STRINGIZE) 446214571Sdim#define A(a) (1 << CGEN_INSN_##a) 447214571Sdim#else 448214571Sdim#define A(a) (1 << CGEN_INSN_/**/a) 449214571Sdim#endif 450214571Sdim#if defined (__STDC__) || defined (ALMOST_STDC) || defined (HAVE_STRINGIZE) 451214571Sdim#define OPERAND(op) MEP_OPERAND_##op 452214571Sdim#else 453214571Sdim#define OPERAND(op) MEP_OPERAND_/**/op 454214571Sdim#endif 455214571Sdim#define MNEM CGEN_SYNTAX_MNEMONIC /* syntax value for mnemonic */ 456214571Sdim#define OP(field) CGEN_SYNTAX_MAKE_FIELD (OPERAND (field)) 457214571Sdim 458214571Sdim/* The instruction table. */ 459214571Sdim 460214571Sdimstatic const CGEN_OPCODE mep_cgen_insn_opcode_table[MAX_INSNS] = 461214571Sdim{ 462214571Sdim /* Special null first entry. 463214571Sdim A `num' value of zero is thus invalid. 464214571Sdim Also, the special `invalid' insn resides here. */ 465214571Sdim { { 0, 0, 0, 0 }, {{0}}, 0, {0}}, 466214571Sdim/* sb $rnc,($rma) */ 467214571Sdim { 468214571Sdim { 0, 0, 0, 0 }, 469214571Sdim { { MNEM, ' ', OP (RNC), ',', '(', OP (RMA), ')', 0 } }, 470214571Sdim & ifmt_sb, { 0x8 } 471214571Sdim }, 472214571Sdim/* sh $rns,($rma) */ 473214571Sdim { 474214571Sdim { 0, 0, 0, 0 }, 475214571Sdim { { MNEM, ' ', OP (RNS), ',', '(', OP (RMA), ')', 0 } }, 476214571Sdim & ifmt_sh, { 0x9 } 477214571Sdim }, 478214571Sdim/* sw $rnl,($rma) */ 479214571Sdim { 480214571Sdim { 0, 0, 0, 0 }, 481214571Sdim { { MNEM, ' ', OP (RNL), ',', '(', OP (RMA), ')', 0 } }, 482214571Sdim & ifmt_sw, { 0xa } 483214571Sdim }, 484214571Sdim/* lb $rnc,($rma) */ 485214571Sdim { 486214571Sdim { 0, 0, 0, 0 }, 487214571Sdim { { MNEM, ' ', OP (RNC), ',', '(', OP (RMA), ')', 0 } }, 488214571Sdim & ifmt_sb, { 0xc } 489214571Sdim }, 490214571Sdim/* lh $rns,($rma) */ 491214571Sdim { 492214571Sdim { 0, 0, 0, 0 }, 493214571Sdim { { MNEM, ' ', OP (RNS), ',', '(', OP (RMA), ')', 0 } }, 494214571Sdim & ifmt_sh, { 0xd } 495214571Sdim }, 496214571Sdim/* lw $rnl,($rma) */ 497214571Sdim { 498214571Sdim { 0, 0, 0, 0 }, 499214571Sdim { { MNEM, ' ', OP (RNL), ',', '(', OP (RMA), ')', 0 } }, 500214571Sdim & ifmt_sw, { 0xe } 501214571Sdim }, 502214571Sdim/* lbu $rnuc,($rma) */ 503214571Sdim { 504214571Sdim { 0, 0, 0, 0 }, 505214571Sdim { { MNEM, ' ', OP (RNUC), ',', '(', OP (RMA), ')', 0 } }, 506214571Sdim & ifmt_lbu, { 0xb } 507214571Sdim }, 508214571Sdim/* lhu $rnus,($rma) */ 509214571Sdim { 510214571Sdim { 0, 0, 0, 0 }, 511214571Sdim { { MNEM, ' ', OP (RNUS), ',', '(', OP (RMA), ')', 0 } }, 512214571Sdim & ifmt_lhu, { 0xf } 513214571Sdim }, 514214571Sdim/* sw $rnl,$udisp7a4($spr) */ 515214571Sdim { 516214571Sdim { 0, 0, 0, 0 }, 517214571Sdim { { MNEM, ' ', OP (RNL), ',', OP (UDISP7A4), '(', OP (SPR), ')', 0 } }, 518214571Sdim & ifmt_sw_sp, { 0x4002 } 519214571Sdim }, 520214571Sdim/* lw $rnl,$udisp7a4($spr) */ 521214571Sdim { 522214571Sdim { 0, 0, 0, 0 }, 523214571Sdim { { MNEM, ' ', OP (RNL), ',', OP (UDISP7A4), '(', OP (SPR), ')', 0 } }, 524214571Sdim & ifmt_sw_sp, { 0x4003 } 525214571Sdim }, 526214571Sdim/* sb $rn3c,$udisp7($tpr) */ 527214571Sdim { 528214571Sdim { 0, 0, 0, 0 }, 529214571Sdim { { MNEM, ' ', OP (RN3C), ',', OP (UDISP7), '(', OP (TPR), ')', 0 } }, 530214571Sdim & ifmt_sb_tp, { 0x8000 } 531214571Sdim }, 532214571Sdim/* sh $rn3s,$udisp7a2($tpr) */ 533214571Sdim { 534214571Sdim { 0, 0, 0, 0 }, 535214571Sdim { { MNEM, ' ', OP (RN3S), ',', OP (UDISP7A2), '(', OP (TPR), ')', 0 } }, 536214571Sdim & ifmt_sh_tp, { 0x8080 } 537214571Sdim }, 538214571Sdim/* sw $rn3l,$udisp7a4($tpr) */ 539214571Sdim { 540214571Sdim { 0, 0, 0, 0 }, 541214571Sdim { { MNEM, ' ', OP (RN3L), ',', OP (UDISP7A4), '(', OP (TPR), ')', 0 } }, 542214571Sdim & ifmt_sw_tp, { 0x4082 } 543214571Sdim }, 544214571Sdim/* lb $rn3c,$udisp7($tpr) */ 545214571Sdim { 546214571Sdim { 0, 0, 0, 0 }, 547214571Sdim { { MNEM, ' ', OP (RN3C), ',', OP (UDISP7), '(', OP (TPR), ')', 0 } }, 548214571Sdim & ifmt_sb_tp, { 0x8800 } 549214571Sdim }, 550214571Sdim/* lh $rn3s,$udisp7a2($tpr) */ 551214571Sdim { 552214571Sdim { 0, 0, 0, 0 }, 553214571Sdim { { MNEM, ' ', OP (RN3S), ',', OP (UDISP7A2), '(', OP (TPR), ')', 0 } }, 554214571Sdim & ifmt_sh_tp, { 0x8880 } 555214571Sdim }, 556214571Sdim/* lw $rn3l,$udisp7a4($tpr) */ 557214571Sdim { 558214571Sdim { 0, 0, 0, 0 }, 559214571Sdim { { MNEM, ' ', OP (RN3L), ',', OP (UDISP7A4), '(', OP (TPR), ')', 0 } }, 560214571Sdim & ifmt_sw_tp, { 0x4083 } 561214571Sdim }, 562214571Sdim/* lbu $rn3uc,$udisp7($tpr) */ 563214571Sdim { 564214571Sdim { 0, 0, 0, 0 }, 565214571Sdim { { MNEM, ' ', OP (RN3UC), ',', OP (UDISP7), '(', OP (TPR), ')', 0 } }, 566214571Sdim & ifmt_lbu_tp, { 0x4880 } 567214571Sdim }, 568214571Sdim/* lhu $rn3us,$udisp7a2($tpr) */ 569214571Sdim { 570214571Sdim { 0, 0, 0, 0 }, 571214571Sdim { { MNEM, ' ', OP (RN3US), ',', OP (UDISP7A2), '(', OP (TPR), ')', 0 } }, 572214571Sdim & ifmt_lhu_tp, { 0x8881 } 573214571Sdim }, 574214571Sdim/* sb $rnc,$sdisp16($rma) */ 575214571Sdim { 576214571Sdim { 0, 0, 0, 0 }, 577214571Sdim { { MNEM, ' ', OP (RNC), ',', OP (SDISP16), '(', OP (RMA), ')', 0 } }, 578214571Sdim & ifmt_sb16, { 0xc0080000 } 579214571Sdim }, 580214571Sdim/* sh $rns,$sdisp16($rma) */ 581214571Sdim { 582214571Sdim { 0, 0, 0, 0 }, 583214571Sdim { { MNEM, ' ', OP (RNS), ',', OP (SDISP16), '(', OP (RMA), ')', 0 } }, 584214571Sdim & ifmt_sh16, { 0xc0090000 } 585214571Sdim }, 586214571Sdim/* sw $rnl,$sdisp16($rma) */ 587214571Sdim { 588214571Sdim { 0, 0, 0, 0 }, 589214571Sdim { { MNEM, ' ', OP (RNL), ',', OP (SDISP16), '(', OP (RMA), ')', 0 } }, 590214571Sdim & ifmt_sw16, { 0xc00a0000 } 591214571Sdim }, 592214571Sdim/* lb $rnc,$sdisp16($rma) */ 593214571Sdim { 594214571Sdim { 0, 0, 0, 0 }, 595214571Sdim { { MNEM, ' ', OP (RNC), ',', OP (SDISP16), '(', OP (RMA), ')', 0 } }, 596214571Sdim & ifmt_sb16, { 0xc00c0000 } 597214571Sdim }, 598214571Sdim/* lh $rns,$sdisp16($rma) */ 599214571Sdim { 600214571Sdim { 0, 0, 0, 0 }, 601214571Sdim { { MNEM, ' ', OP (RNS), ',', OP (SDISP16), '(', OP (RMA), ')', 0 } }, 602214571Sdim & ifmt_sh16, { 0xc00d0000 } 603214571Sdim }, 604214571Sdim/* lw $rnl,$sdisp16($rma) */ 605214571Sdim { 606214571Sdim { 0, 0, 0, 0 }, 607214571Sdim { { MNEM, ' ', OP (RNL), ',', OP (SDISP16), '(', OP (RMA), ')', 0 } }, 608214571Sdim & ifmt_sw16, { 0xc00e0000 } 609214571Sdim }, 610214571Sdim/* lbu $rnuc,$sdisp16($rma) */ 611214571Sdim { 612214571Sdim { 0, 0, 0, 0 }, 613214571Sdim { { MNEM, ' ', OP (RNUC), ',', OP (SDISP16), '(', OP (RMA), ')', 0 } }, 614214571Sdim & ifmt_lbu16, { 0xc00b0000 } 615214571Sdim }, 616214571Sdim/* lhu $rnus,$sdisp16($rma) */ 617214571Sdim { 618214571Sdim { 0, 0, 0, 0 }, 619214571Sdim { { MNEM, ' ', OP (RNUS), ',', OP (SDISP16), '(', OP (RMA), ')', 0 } }, 620214571Sdim & ifmt_lhu16, { 0xc00f0000 } 621214571Sdim }, 622214571Sdim/* sw $rnl,($addr24a4) */ 623214571Sdim { 624214571Sdim { 0, 0, 0, 0 }, 625214571Sdim { { MNEM, ' ', OP (RNL), ',', '(', OP (ADDR24A4), ')', 0 } }, 626214571Sdim & ifmt_sw24, { 0xe0020000 } 627214571Sdim }, 628214571Sdim/* lw $rnl,($addr24a4) */ 629214571Sdim { 630214571Sdim { 0, 0, 0, 0 }, 631214571Sdim { { MNEM, ' ', OP (RNL), ',', '(', OP (ADDR24A4), ')', 0 } }, 632214571Sdim & ifmt_sw24, { 0xe0030000 } 633214571Sdim }, 634214571Sdim/* extb $rn */ 635214571Sdim { 636214571Sdim { 0, 0, 0, 0 }, 637214571Sdim { { MNEM, ' ', OP (RN), 0 } }, 638214571Sdim & ifmt_extb, { 0x100d } 639214571Sdim }, 640214571Sdim/* exth $rn */ 641214571Sdim { 642214571Sdim { 0, 0, 0, 0 }, 643214571Sdim { { MNEM, ' ', OP (RN), 0 } }, 644214571Sdim & ifmt_extb, { 0x102d } 645214571Sdim }, 646214571Sdim/* extub $rn */ 647214571Sdim { 648214571Sdim { 0, 0, 0, 0 }, 649214571Sdim { { MNEM, ' ', OP (RN), 0 } }, 650214571Sdim & ifmt_extb, { 0x108d } 651214571Sdim }, 652214571Sdim/* extuh $rn */ 653214571Sdim { 654214571Sdim { 0, 0, 0, 0 }, 655214571Sdim { { MNEM, ' ', OP (RN), 0 } }, 656214571Sdim & ifmt_extb, { 0x10ad } 657214571Sdim }, 658214571Sdim/* ssarb $udisp2($rm) */ 659214571Sdim { 660214571Sdim { 0, 0, 0, 0 }, 661214571Sdim { { MNEM, ' ', OP (UDISP2), '(', OP (RM), ')', 0 } }, 662214571Sdim & ifmt_ssarb, { 0x100c } 663214571Sdim }, 664214571Sdim/* mov $rn,$rm */ 665214571Sdim { 666214571Sdim { 0, 0, 0, 0 }, 667214571Sdim { { MNEM, ' ', OP (RN), ',', OP (RM), 0 } }, 668214571Sdim & ifmt_mov, { 0x0 } 669214571Sdim }, 670214571Sdim/* mov $rn,$simm8 */ 671214571Sdim { 672214571Sdim { 0, 0, 0, 0 }, 673214571Sdim { { MNEM, ' ', OP (RN), ',', OP (SIMM8), 0 } }, 674214571Sdim & ifmt_movi8, { 0x5000 } 675214571Sdim }, 676214571Sdim/* mov $rn,$simm16 */ 677214571Sdim { 678214571Sdim { 0, 0, 0, 0 }, 679214571Sdim { { MNEM, ' ', OP (RN), ',', OP (SIMM16), 0 } }, 680214571Sdim & ifmt_movi16, { 0xc0010000 } 681214571Sdim }, 682214571Sdim/* movu $rn3,$uimm24 */ 683214571Sdim { 684214571Sdim { 0, 0, 0, 0 }, 685214571Sdim { { MNEM, ' ', OP (RN3), ',', OP (UIMM24), 0 } }, 686214571Sdim & ifmt_movu24, { 0xd0000000 } 687214571Sdim }, 688214571Sdim/* movu $rn,$uimm16 */ 689214571Sdim { 690214571Sdim { 0, 0, 0, 0 }, 691214571Sdim { { MNEM, ' ', OP (RN), ',', OP (UIMM16), 0 } }, 692214571Sdim & ifmt_movu16, { 0xc0110000 } 693214571Sdim }, 694214571Sdim/* movh $rn,$uimm16 */ 695214571Sdim { 696214571Sdim { 0, 0, 0, 0 }, 697214571Sdim { { MNEM, ' ', OP (RN), ',', OP (UIMM16), 0 } }, 698214571Sdim & ifmt_movu16, { 0xc0210000 } 699214571Sdim }, 700214571Sdim/* add3 $rl,$rn,$rm */ 701214571Sdim { 702214571Sdim { 0, 0, 0, 0 }, 703214571Sdim { { MNEM, ' ', OP (RL), ',', OP (RN), ',', OP (RM), 0 } }, 704214571Sdim & ifmt_add3, { 0x9000 } 705214571Sdim }, 706214571Sdim/* add $rn,$simm6 */ 707214571Sdim { 708214571Sdim { 0, 0, 0, 0 }, 709214571Sdim { { MNEM, ' ', OP (RN), ',', OP (SIMM6), 0 } }, 710214571Sdim & ifmt_add, { 0x6000 } 711214571Sdim }, 712214571Sdim/* add3 $rn,$spr,$uimm7a4 */ 713214571Sdim { 714214571Sdim { 0, 0, 0, 0 }, 715214571Sdim { { MNEM, ' ', OP (RN), ',', OP (SPR), ',', OP (UIMM7A4), 0 } }, 716214571Sdim & ifmt_add3i, { 0x4000 } 717214571Sdim }, 718214571Sdim/* advck3 \$0,$rn,$rm */ 719214571Sdim { 720214571Sdim { 0, 0, 0, 0 }, 721214571Sdim { { MNEM, ' ', '$', '0', ',', OP (RN), ',', OP (RM), 0 } }, 722214571Sdim & ifmt_mov, { 0x7 } 723214571Sdim }, 724214571Sdim/* sub $rn,$rm */ 725214571Sdim { 726214571Sdim { 0, 0, 0, 0 }, 727214571Sdim { { MNEM, ' ', OP (RN), ',', OP (RM), 0 } }, 728214571Sdim & ifmt_mov, { 0x4 } 729214571Sdim }, 730214571Sdim/* sbvck3 \$0,$rn,$rm */ 731214571Sdim { 732214571Sdim { 0, 0, 0, 0 }, 733214571Sdim { { MNEM, ' ', '$', '0', ',', OP (RN), ',', OP (RM), 0 } }, 734214571Sdim & ifmt_mov, { 0x5 } 735214571Sdim }, 736214571Sdim/* neg $rn,$rm */ 737214571Sdim { 738214571Sdim { 0, 0, 0, 0 }, 739214571Sdim { { MNEM, ' ', OP (RN), ',', OP (RM), 0 } }, 740214571Sdim & ifmt_mov, { 0x1 } 741214571Sdim }, 742214571Sdim/* slt3 \$0,$rn,$rm */ 743214571Sdim { 744214571Sdim { 0, 0, 0, 0 }, 745214571Sdim { { MNEM, ' ', '$', '0', ',', OP (RN), ',', OP (RM), 0 } }, 746214571Sdim & ifmt_mov, { 0x2 } 747214571Sdim }, 748214571Sdim/* sltu3 \$0,$rn,$rm */ 749214571Sdim { 750214571Sdim { 0, 0, 0, 0 }, 751214571Sdim { { MNEM, ' ', '$', '0', ',', OP (RN), ',', OP (RM), 0 } }, 752214571Sdim & ifmt_mov, { 0x3 } 753214571Sdim }, 754214571Sdim/* slt3 \$0,$rn,$uimm5 */ 755214571Sdim { 756214571Sdim { 0, 0, 0, 0 }, 757214571Sdim { { MNEM, ' ', '$', '0', ',', OP (RN), ',', OP (UIMM5), 0 } }, 758214571Sdim & ifmt_slt3i, { 0x6001 } 759214571Sdim }, 760214571Sdim/* sltu3 \$0,$rn,$uimm5 */ 761214571Sdim { 762214571Sdim { 0, 0, 0, 0 }, 763214571Sdim { { MNEM, ' ', '$', '0', ',', OP (RN), ',', OP (UIMM5), 0 } }, 764214571Sdim & ifmt_slt3i, { 0x6005 } 765214571Sdim }, 766214571Sdim/* sl1ad3 \$0,$rn,$rm */ 767214571Sdim { 768214571Sdim { 0, 0, 0, 0 }, 769214571Sdim { { MNEM, ' ', '$', '0', ',', OP (RN), ',', OP (RM), 0 } }, 770214571Sdim & ifmt_mov, { 0x2006 } 771214571Sdim }, 772214571Sdim/* sl2ad3 \$0,$rn,$rm */ 773214571Sdim { 774214571Sdim { 0, 0, 0, 0 }, 775214571Sdim { { MNEM, ' ', '$', '0', ',', OP (RN), ',', OP (RM), 0 } }, 776214571Sdim & ifmt_mov, { 0x2007 } 777214571Sdim }, 778214571Sdim/* add3 $rn,$rm,$simm16 */ 779214571Sdim { 780214571Sdim { 0, 0, 0, 0 }, 781214571Sdim { { MNEM, ' ', OP (RN), ',', OP (RM), ',', OP (SIMM16), 0 } }, 782214571Sdim & ifmt_add3x, { 0xc0000000 } 783214571Sdim }, 784214571Sdim/* slt3 $rn,$rm,$simm16 */ 785214571Sdim { 786214571Sdim { 0, 0, 0, 0 }, 787214571Sdim { { MNEM, ' ', OP (RN), ',', OP (RM), ',', OP (SIMM16), 0 } }, 788214571Sdim & ifmt_add3x, { 0xc0020000 } 789214571Sdim }, 790214571Sdim/* sltu3 $rn,$rm,$uimm16 */ 791214571Sdim { 792214571Sdim { 0, 0, 0, 0 }, 793214571Sdim { { MNEM, ' ', OP (RN), ',', OP (RM), ',', OP (UIMM16), 0 } }, 794214571Sdim & ifmt_sltu3x, { 0xc0030000 } 795214571Sdim }, 796214571Sdim/* or $rn,$rm */ 797214571Sdim { 798214571Sdim { 0, 0, 0, 0 }, 799214571Sdim { { MNEM, ' ', OP (RN), ',', OP (RM), 0 } }, 800214571Sdim & ifmt_mov, { 0x1000 } 801214571Sdim }, 802214571Sdim/* and $rn,$rm */ 803214571Sdim { 804214571Sdim { 0, 0, 0, 0 }, 805214571Sdim { { MNEM, ' ', OP (RN), ',', OP (RM), 0 } }, 806214571Sdim & ifmt_mov, { 0x1001 } 807214571Sdim }, 808214571Sdim/* xor $rn,$rm */ 809214571Sdim { 810214571Sdim { 0, 0, 0, 0 }, 811214571Sdim { { MNEM, ' ', OP (RN), ',', OP (RM), 0 } }, 812214571Sdim & ifmt_mov, { 0x1002 } 813214571Sdim }, 814214571Sdim/* nor $rn,$rm */ 815214571Sdim { 816214571Sdim { 0, 0, 0, 0 }, 817214571Sdim { { MNEM, ' ', OP (RN), ',', OP (RM), 0 } }, 818214571Sdim & ifmt_mov, { 0x1003 } 819214571Sdim }, 820214571Sdim/* or3 $rn,$rm,$uimm16 */ 821214571Sdim { 822214571Sdim { 0, 0, 0, 0 }, 823214571Sdim { { MNEM, ' ', OP (RN), ',', OP (RM), ',', OP (UIMM16), 0 } }, 824214571Sdim & ifmt_sltu3x, { 0xc0040000 } 825214571Sdim }, 826214571Sdim/* and3 $rn,$rm,$uimm16 */ 827214571Sdim { 828214571Sdim { 0, 0, 0, 0 }, 829214571Sdim { { MNEM, ' ', OP (RN), ',', OP (RM), ',', OP (UIMM16), 0 } }, 830214571Sdim & ifmt_sltu3x, { 0xc0050000 } 831214571Sdim }, 832214571Sdim/* xor3 $rn,$rm,$uimm16 */ 833214571Sdim { 834214571Sdim { 0, 0, 0, 0 }, 835214571Sdim { { MNEM, ' ', OP (RN), ',', OP (RM), ',', OP (UIMM16), 0 } }, 836214571Sdim & ifmt_sltu3x, { 0xc0060000 } 837214571Sdim }, 838214571Sdim/* sra $rn,$rm */ 839214571Sdim { 840214571Sdim { 0, 0, 0, 0 }, 841214571Sdim { { MNEM, ' ', OP (RN), ',', OP (RM), 0 } }, 842214571Sdim & ifmt_mov, { 0x200d } 843214571Sdim }, 844214571Sdim/* srl $rn,$rm */ 845214571Sdim { 846214571Sdim { 0, 0, 0, 0 }, 847214571Sdim { { MNEM, ' ', OP (RN), ',', OP (RM), 0 } }, 848214571Sdim & ifmt_mov, { 0x200c } 849214571Sdim }, 850214571Sdim/* sll $rn,$rm */ 851214571Sdim { 852214571Sdim { 0, 0, 0, 0 }, 853214571Sdim { { MNEM, ' ', OP (RN), ',', OP (RM), 0 } }, 854214571Sdim & ifmt_mov, { 0x200e } 855214571Sdim }, 856214571Sdim/* sra $rn,$uimm5 */ 857214571Sdim { 858214571Sdim { 0, 0, 0, 0 }, 859214571Sdim { { MNEM, ' ', OP (RN), ',', OP (UIMM5), 0 } }, 860214571Sdim & ifmt_slt3i, { 0x6003 } 861214571Sdim }, 862214571Sdim/* srl $rn,$uimm5 */ 863214571Sdim { 864214571Sdim { 0, 0, 0, 0 }, 865214571Sdim { { MNEM, ' ', OP (RN), ',', OP (UIMM5), 0 } }, 866214571Sdim & ifmt_slt3i, { 0x6002 } 867214571Sdim }, 868214571Sdim/* sll $rn,$uimm5 */ 869214571Sdim { 870214571Sdim { 0, 0, 0, 0 }, 871214571Sdim { { MNEM, ' ', OP (RN), ',', OP (UIMM5), 0 } }, 872214571Sdim & ifmt_slt3i, { 0x6006 } 873214571Sdim }, 874214571Sdim/* sll3 \$0,$rn,$uimm5 */ 875214571Sdim { 876214571Sdim { 0, 0, 0, 0 }, 877214571Sdim { { MNEM, ' ', '$', '0', ',', OP (RN), ',', OP (UIMM5), 0 } }, 878214571Sdim & ifmt_slt3i, { 0x6007 } 879214571Sdim }, 880214571Sdim/* fsft $rn,$rm */ 881214571Sdim { 882214571Sdim { 0, 0, 0, 0 }, 883214571Sdim { { MNEM, ' ', OP (RN), ',', OP (RM), 0 } }, 884214571Sdim & ifmt_mov, { 0x200f } 885214571Sdim }, 886214571Sdim/* bra $pcrel12a2 */ 887214571Sdim { 888214571Sdim { 0, 0, 0, 0 }, 889214571Sdim { { MNEM, ' ', OP (PCREL12A2), 0 } }, 890214571Sdim & ifmt_bra, { 0xb000 } 891214571Sdim }, 892214571Sdim/* beqz $rn,$pcrel8a2 */ 893214571Sdim { 894214571Sdim { 0, 0, 0, 0 }, 895214571Sdim { { MNEM, ' ', OP (RN), ',', OP (PCREL8A2), 0 } }, 896214571Sdim & ifmt_beqz, { 0xa000 } 897214571Sdim }, 898214571Sdim/* bnez $rn,$pcrel8a2 */ 899214571Sdim { 900214571Sdim { 0, 0, 0, 0 }, 901214571Sdim { { MNEM, ' ', OP (RN), ',', OP (PCREL8A2), 0 } }, 902214571Sdim & ifmt_beqz, { 0xa001 } 903214571Sdim }, 904214571Sdim/* beqi $rn,$uimm4,$pcrel17a2 */ 905214571Sdim { 906214571Sdim { 0, 0, 0, 0 }, 907214571Sdim { { MNEM, ' ', OP (RN), ',', OP (UIMM4), ',', OP (PCREL17A2), 0 } }, 908214571Sdim & ifmt_beqi, { 0xe0000000 } 909214571Sdim }, 910214571Sdim/* bnei $rn,$uimm4,$pcrel17a2 */ 911214571Sdim { 912214571Sdim { 0, 0, 0, 0 }, 913214571Sdim { { MNEM, ' ', OP (RN), ',', OP (UIMM4), ',', OP (PCREL17A2), 0 } }, 914214571Sdim & ifmt_beqi, { 0xe0040000 } 915214571Sdim }, 916214571Sdim/* blti $rn,$uimm4,$pcrel17a2 */ 917214571Sdim { 918214571Sdim { 0, 0, 0, 0 }, 919214571Sdim { { MNEM, ' ', OP (RN), ',', OP (UIMM4), ',', OP (PCREL17A2), 0 } }, 920214571Sdim & ifmt_beqi, { 0xe00c0000 } 921214571Sdim }, 922214571Sdim/* bgei $rn,$uimm4,$pcrel17a2 */ 923214571Sdim { 924214571Sdim { 0, 0, 0, 0 }, 925214571Sdim { { MNEM, ' ', OP (RN), ',', OP (UIMM4), ',', OP (PCREL17A2), 0 } }, 926214571Sdim & ifmt_beqi, { 0xe0080000 } 927214571Sdim }, 928214571Sdim/* beq $rn,$rm,$pcrel17a2 */ 929214571Sdim { 930214571Sdim { 0, 0, 0, 0 }, 931214571Sdim { { MNEM, ' ', OP (RN), ',', OP (RM), ',', OP (PCREL17A2), 0 } }, 932214571Sdim & ifmt_beq, { 0xe0010000 } 933214571Sdim }, 934214571Sdim/* bne $rn,$rm,$pcrel17a2 */ 935214571Sdim { 936214571Sdim { 0, 0, 0, 0 }, 937214571Sdim { { MNEM, ' ', OP (RN), ',', OP (RM), ',', OP (PCREL17A2), 0 } }, 938214571Sdim & ifmt_beq, { 0xe0050000 } 939214571Sdim }, 940214571Sdim/* bsr $pcrel12a2 */ 941214571Sdim { 942214571Sdim { 0, 0, 0, 0 }, 943214571Sdim { { MNEM, ' ', OP (PCREL12A2), 0 } }, 944214571Sdim & ifmt_bra, { 0xb001 } 945214571Sdim }, 946214571Sdim/* bsr $pcrel24a2 */ 947214571Sdim { 948214571Sdim { 0, 0, 0, 0 }, 949214571Sdim { { MNEM, ' ', OP (PCREL24A2), 0 } }, 950214571Sdim & ifmt_bsr24, { 0xd8090000 } 951214571Sdim }, 952214571Sdim/* jmp $rm */ 953214571Sdim { 954214571Sdim { 0, 0, 0, 0 }, 955214571Sdim { { MNEM, ' ', OP (RM), 0 } }, 956214571Sdim & ifmt_jmp, { 0x100e } 957214571Sdim }, 958214571Sdim/* jmp $pcabs24a2 */ 959214571Sdim { 960214571Sdim { 0, 0, 0, 0 }, 961214571Sdim { { MNEM, ' ', OP (PCABS24A2), 0 } }, 962214571Sdim & ifmt_jmp24, { 0xd8080000 } 963214571Sdim }, 964214571Sdim/* jsr $rm */ 965214571Sdim { 966214571Sdim { 0, 0, 0, 0 }, 967214571Sdim { { MNEM, ' ', OP (RM), 0 } }, 968214571Sdim & ifmt_jmp, { 0x100f } 969214571Sdim }, 970214571Sdim/* ret */ 971214571Sdim { 972214571Sdim { 0, 0, 0, 0 }, 973214571Sdim { { MNEM, 0 } }, 974214571Sdim & ifmt_ret, { 0x7002 } 975214571Sdim }, 976214571Sdim/* repeat $rn,$pcrel17a2 */ 977214571Sdim { 978214571Sdim { 0, 0, 0, 0 }, 979214571Sdim { { MNEM, ' ', OP (RN), ',', OP (PCREL17A2), 0 } }, 980214571Sdim & ifmt_repeat, { 0xe0090000 } 981214571Sdim }, 982214571Sdim/* erepeat $pcrel17a2 */ 983214571Sdim { 984214571Sdim { 0, 0, 0, 0 }, 985214571Sdim { { MNEM, ' ', OP (PCREL17A2), 0 } }, 986214571Sdim & ifmt_erepeat, { 0xe0190000 } 987214571Sdim }, 988214571Sdim/* stc $rn,\$lp */ 989214571Sdim { 990214571Sdim { 0, 0, 0, 0 }, 991214571Sdim { { MNEM, ' ', OP (RN), ',', '$', 'l', 'p', 0 } }, 992214571Sdim & ifmt_stc_lp, { 0x7018 } 993214571Sdim }, 994214571Sdim/* stc $rn,\$hi */ 995214571Sdim { 996214571Sdim { 0, 0, 0, 0 }, 997214571Sdim { { MNEM, ' ', OP (RN), ',', '$', 'h', 'i', 0 } }, 998214571Sdim & ifmt_stc_lp, { 0x7078 } 999214571Sdim }, 1000214571Sdim/* stc $rn,\$lo */ 1001214571Sdim { 1002214571Sdim { 0, 0, 0, 0 }, 1003214571Sdim { { MNEM, ' ', OP (RN), ',', '$', 'l', 'o', 0 } }, 1004214571Sdim & ifmt_stc_lp, { 0x7088 } 1005214571Sdim }, 1006214571Sdim/* stc $rn,$csrn */ 1007214571Sdim { 1008214571Sdim { 0, 0, 0, 0 }, 1009214571Sdim { { MNEM, ' ', OP (RN), ',', OP (CSRN), 0 } }, 1010214571Sdim & ifmt_stc, { 0x7008 } 1011214571Sdim }, 1012214571Sdim/* ldc $rn,\$lp */ 1013214571Sdim { 1014214571Sdim { 0, 0, 0, 0 }, 1015214571Sdim { { MNEM, ' ', OP (RN), ',', '$', 'l', 'p', 0 } }, 1016214571Sdim & ifmt_stc_lp, { 0x701a } 1017214571Sdim }, 1018214571Sdim/* ldc $rn,\$hi */ 1019214571Sdim { 1020214571Sdim { 0, 0, 0, 0 }, 1021214571Sdim { { MNEM, ' ', OP (RN), ',', '$', 'h', 'i', 0 } }, 1022214571Sdim & ifmt_stc_lp, { 0x707a } 1023214571Sdim }, 1024214571Sdim/* ldc $rn,\$lo */ 1025214571Sdim { 1026214571Sdim { 0, 0, 0, 0 }, 1027214571Sdim { { MNEM, ' ', OP (RN), ',', '$', 'l', 'o', 0 } }, 1028214571Sdim & ifmt_stc_lp, { 0x708a } 1029214571Sdim }, 1030214571Sdim/* ldc $rn,$csrn */ 1031214571Sdim { 1032214571Sdim { 0, 0, 0, 0 }, 1033214571Sdim { { MNEM, ' ', OP (RN), ',', OP (CSRN), 0 } }, 1034214571Sdim & ifmt_stc, { 0x700a } 1035214571Sdim }, 1036214571Sdim/* di */ 1037214571Sdim { 1038214571Sdim { 0, 0, 0, 0 }, 1039214571Sdim { { MNEM, 0 } }, 1040214571Sdim & ifmt_ret, { 0x7000 } 1041214571Sdim }, 1042214571Sdim/* ei */ 1043214571Sdim { 1044214571Sdim { 0, 0, 0, 0 }, 1045214571Sdim { { MNEM, 0 } }, 1046214571Sdim & ifmt_ret, { 0x7010 } 1047214571Sdim }, 1048214571Sdim/* reti */ 1049214571Sdim { 1050214571Sdim { 0, 0, 0, 0 }, 1051214571Sdim { { MNEM, 0 } }, 1052214571Sdim & ifmt_ret, { 0x7012 } 1053214571Sdim }, 1054214571Sdim/* halt */ 1055214571Sdim { 1056214571Sdim { 0, 0, 0, 0 }, 1057214571Sdim { { MNEM, 0 } }, 1058214571Sdim & ifmt_ret, { 0x7022 } 1059214571Sdim }, 1060214571Sdim/* sleep */ 1061214571Sdim { 1062214571Sdim { 0, 0, 0, 0 }, 1063214571Sdim { { MNEM, 0 } }, 1064214571Sdim & ifmt_ret, { 0x7062 } 1065214571Sdim }, 1066214571Sdim/* swi $uimm2 */ 1067214571Sdim { 1068214571Sdim { 0, 0, 0, 0 }, 1069214571Sdim { { MNEM, ' ', OP (UIMM2), 0 } }, 1070214571Sdim & ifmt_swi, { 0x7006 } 1071214571Sdim }, 1072214571Sdim/* break */ 1073214571Sdim { 1074214571Sdim { 0, 0, 0, 0 }, 1075214571Sdim { { MNEM, 0 } }, 1076214571Sdim & ifmt_ret, { 0x7032 } 1077214571Sdim }, 1078214571Sdim/* syncm */ 1079214571Sdim { 1080214571Sdim { 0, 0, 0, 0 }, 1081214571Sdim { { MNEM, 0 } }, 1082214571Sdim & ifmt_ret, { 0x7011 } 1083214571Sdim }, 1084214571Sdim/* stcb $rn,$uimm16 */ 1085214571Sdim { 1086214571Sdim { 0, 0, 0, 0 }, 1087214571Sdim { { MNEM, ' ', OP (RN), ',', OP (UIMM16), 0 } }, 1088214571Sdim & ifmt_movu16, { 0xf0040000 } 1089214571Sdim }, 1090214571Sdim/* ldcb $rn,$uimm16 */ 1091214571Sdim { 1092214571Sdim { 0, 0, 0, 0 }, 1093214571Sdim { { MNEM, ' ', OP (RN), ',', OP (UIMM16), 0 } }, 1094214571Sdim & ifmt_movu16, { 0xf0140000 } 1095214571Sdim }, 1096214571Sdim/* bsetm ($rma),$uimm3 */ 1097214571Sdim { 1098214571Sdim { 0, 0, 0, 0 }, 1099214571Sdim { { MNEM, ' ', '(', OP (RMA), ')', ',', OP (UIMM3), 0 } }, 1100214571Sdim & ifmt_bsetm, { 0x2000 } 1101214571Sdim }, 1102214571Sdim/* bclrm ($rma),$uimm3 */ 1103214571Sdim { 1104214571Sdim { 0, 0, 0, 0 }, 1105214571Sdim { { MNEM, ' ', '(', OP (RMA), ')', ',', OP (UIMM3), 0 } }, 1106214571Sdim & ifmt_bsetm, { 0x2001 } 1107214571Sdim }, 1108214571Sdim/* bnotm ($rma),$uimm3 */ 1109214571Sdim { 1110214571Sdim { 0, 0, 0, 0 }, 1111214571Sdim { { MNEM, ' ', '(', OP (RMA), ')', ',', OP (UIMM3), 0 } }, 1112214571Sdim & ifmt_bsetm, { 0x2002 } 1113214571Sdim }, 1114214571Sdim/* btstm \$0,($rma),$uimm3 */ 1115214571Sdim { 1116214571Sdim { 0, 0, 0, 0 }, 1117214571Sdim { { MNEM, ' ', '$', '0', ',', '(', OP (RMA), ')', ',', OP (UIMM3), 0 } }, 1118214571Sdim & ifmt_bsetm, { 0x2003 } 1119214571Sdim }, 1120214571Sdim/* tas $rn,($rma) */ 1121214571Sdim { 1122214571Sdim { 0, 0, 0, 0 }, 1123214571Sdim { { MNEM, ' ', OP (RN), ',', '(', OP (RMA), ')', 0 } }, 1124214571Sdim & ifmt_tas, { 0x2004 } 1125214571Sdim }, 1126214571Sdim/* cache $cimm4,($rma) */ 1127214571Sdim { 1128214571Sdim { 0, 0, 0, 0 }, 1129214571Sdim { { MNEM, ' ', OP (CIMM4), ',', '(', OP (RMA), ')', 0 } }, 1130214571Sdim & ifmt_cache, { 0x7004 } 1131214571Sdim }, 1132214571Sdim/* mul $rn,$rm */ 1133214571Sdim { 1134214571Sdim { 0, 0, 0, 0 }, 1135214571Sdim { { MNEM, ' ', OP (RN), ',', OP (RM), 0 } }, 1136214571Sdim & ifmt_mov, { 0x1004 } 1137214571Sdim }, 1138214571Sdim/* mulu $rn,$rm */ 1139214571Sdim { 1140214571Sdim { 0, 0, 0, 0 }, 1141214571Sdim { { MNEM, ' ', OP (RN), ',', OP (RM), 0 } }, 1142214571Sdim & ifmt_mov, { 0x1005 } 1143214571Sdim }, 1144214571Sdim/* mulr $rn,$rm */ 1145214571Sdim { 1146214571Sdim { 0, 0, 0, 0 }, 1147214571Sdim { { MNEM, ' ', OP (RN), ',', OP (RM), 0 } }, 1148214571Sdim & ifmt_mov, { 0x1006 } 1149214571Sdim }, 1150214571Sdim/* mulru $rn,$rm */ 1151214571Sdim { 1152214571Sdim { 0, 0, 0, 0 }, 1153214571Sdim { { MNEM, ' ', OP (RN), ',', OP (RM), 0 } }, 1154214571Sdim & ifmt_mov, { 0x1007 } 1155214571Sdim }, 1156214571Sdim/* madd $rn,$rm */ 1157214571Sdim { 1158214571Sdim { 0, 0, 0, 0 }, 1159214571Sdim { { MNEM, ' ', OP (RN), ',', OP (RM), 0 } }, 1160214571Sdim & ifmt_madd, { 0xf0013004 } 1161214571Sdim }, 1162214571Sdim/* maddu $rn,$rm */ 1163214571Sdim { 1164214571Sdim { 0, 0, 0, 0 }, 1165214571Sdim { { MNEM, ' ', OP (RN), ',', OP (RM), 0 } }, 1166214571Sdim & ifmt_madd, { 0xf0013005 } 1167214571Sdim }, 1168214571Sdim/* maddr $rn,$rm */ 1169214571Sdim { 1170214571Sdim { 0, 0, 0, 0 }, 1171214571Sdim { { MNEM, ' ', OP (RN), ',', OP (RM), 0 } }, 1172214571Sdim & ifmt_madd, { 0xf0013006 } 1173214571Sdim }, 1174214571Sdim/* maddru $rn,$rm */ 1175214571Sdim { 1176214571Sdim { 0, 0, 0, 0 }, 1177214571Sdim { { MNEM, ' ', OP (RN), ',', OP (RM), 0 } }, 1178214571Sdim & ifmt_madd, { 0xf0013007 } 1179214571Sdim }, 1180214571Sdim/* div $rn,$rm */ 1181214571Sdim { 1182214571Sdim { 0, 0, 0, 0 }, 1183214571Sdim { { MNEM, ' ', OP (RN), ',', OP (RM), 0 } }, 1184214571Sdim & ifmt_mov, { 0x1008 } 1185214571Sdim }, 1186214571Sdim/* divu $rn,$rm */ 1187214571Sdim { 1188214571Sdim { 0, 0, 0, 0 }, 1189214571Sdim { { MNEM, ' ', OP (RN), ',', OP (RM), 0 } }, 1190214571Sdim & ifmt_mov, { 0x1009 } 1191214571Sdim }, 1192214571Sdim/* dret */ 1193214571Sdim { 1194214571Sdim { 0, 0, 0, 0 }, 1195214571Sdim { { MNEM, 0 } }, 1196214571Sdim & ifmt_ret, { 0x7013 } 1197214571Sdim }, 1198214571Sdim/* dbreak */ 1199214571Sdim { 1200214571Sdim { 0, 0, 0, 0 }, 1201214571Sdim { { MNEM, 0 } }, 1202214571Sdim & ifmt_ret, { 0x7033 } 1203214571Sdim }, 1204214571Sdim/* ldz $rn,$rm */ 1205214571Sdim { 1206214571Sdim { 0, 0, 0, 0 }, 1207214571Sdim { { MNEM, ' ', OP (RN), ',', OP (RM), 0 } }, 1208214571Sdim & ifmt_madd, { 0xf0010000 } 1209214571Sdim }, 1210214571Sdim/* abs $rn,$rm */ 1211214571Sdim { 1212214571Sdim { 0, 0, 0, 0 }, 1213214571Sdim { { MNEM, ' ', OP (RN), ',', OP (RM), 0 } }, 1214214571Sdim & ifmt_madd, { 0xf0010003 } 1215214571Sdim }, 1216214571Sdim/* ave $rn,$rm */ 1217214571Sdim { 1218214571Sdim { 0, 0, 0, 0 }, 1219214571Sdim { { MNEM, ' ', OP (RN), ',', OP (RM), 0 } }, 1220214571Sdim & ifmt_madd, { 0xf0010002 } 1221214571Sdim }, 1222214571Sdim/* min $rn,$rm */ 1223214571Sdim { 1224214571Sdim { 0, 0, 0, 0 }, 1225214571Sdim { { MNEM, ' ', OP (RN), ',', OP (RM), 0 } }, 1226214571Sdim & ifmt_madd, { 0xf0010004 } 1227214571Sdim }, 1228214571Sdim/* max $rn,$rm */ 1229214571Sdim { 1230214571Sdim { 0, 0, 0, 0 }, 1231214571Sdim { { MNEM, ' ', OP (RN), ',', OP (RM), 0 } }, 1232214571Sdim & ifmt_madd, { 0xf0010005 } 1233214571Sdim }, 1234214571Sdim/* minu $rn,$rm */ 1235214571Sdim { 1236214571Sdim { 0, 0, 0, 0 }, 1237214571Sdim { { MNEM, ' ', OP (RN), ',', OP (RM), 0 } }, 1238214571Sdim & ifmt_madd, { 0xf0010006 } 1239214571Sdim }, 1240214571Sdim/* maxu $rn,$rm */ 1241214571Sdim { 1242214571Sdim { 0, 0, 0, 0 }, 1243214571Sdim { { MNEM, ' ', OP (RN), ',', OP (RM), 0 } }, 1244214571Sdim & ifmt_madd, { 0xf0010007 } 1245214571Sdim }, 1246214571Sdim/* clip $rn,$cimm5 */ 1247214571Sdim { 1248214571Sdim { 0, 0, 0, 0 }, 1249214571Sdim { { MNEM, ' ', OP (RN), ',', OP (CIMM5), 0 } }, 1250214571Sdim & ifmt_clip, { 0xf0011000 } 1251214571Sdim }, 1252214571Sdim/* clipu $rn,$cimm5 */ 1253214571Sdim { 1254214571Sdim { 0, 0, 0, 0 }, 1255214571Sdim { { MNEM, ' ', OP (RN), ',', OP (CIMM5), 0 } }, 1256214571Sdim & ifmt_clip, { 0xf0011001 } 1257214571Sdim }, 1258214571Sdim/* sadd $rn,$rm */ 1259214571Sdim { 1260214571Sdim { 0, 0, 0, 0 }, 1261214571Sdim { { MNEM, ' ', OP (RN), ',', OP (RM), 0 } }, 1262214571Sdim & ifmt_madd, { 0xf0010008 } 1263214571Sdim }, 1264214571Sdim/* ssub $rn,$rm */ 1265214571Sdim { 1266214571Sdim { 0, 0, 0, 0 }, 1267214571Sdim { { MNEM, ' ', OP (RN), ',', OP (RM), 0 } }, 1268214571Sdim & ifmt_madd, { 0xf001000a } 1269214571Sdim }, 1270214571Sdim/* saddu $rn,$rm */ 1271214571Sdim { 1272214571Sdim { 0, 0, 0, 0 }, 1273214571Sdim { { MNEM, ' ', OP (RN), ',', OP (RM), 0 } }, 1274214571Sdim & ifmt_madd, { 0xf0010009 } 1275214571Sdim }, 1276214571Sdim/* ssubu $rn,$rm */ 1277214571Sdim { 1278214571Sdim { 0, 0, 0, 0 }, 1279214571Sdim { { MNEM, ' ', OP (RN), ',', OP (RM), 0 } }, 1280214571Sdim & ifmt_madd, { 0xf001000b } 1281214571Sdim }, 1282214571Sdim/* swcp $crn,($rma) */ 1283214571Sdim { 1284214571Sdim { 0, 0, 0, 0 }, 1285214571Sdim { { MNEM, ' ', OP (CRN), ',', '(', OP (RMA), ')', 0 } }, 1286214571Sdim & ifmt_swcp, { 0x3008 } 1287214571Sdim }, 1288214571Sdim/* lwcp $crn,($rma) */ 1289214571Sdim { 1290214571Sdim { 0, 0, 0, 0 }, 1291214571Sdim { { MNEM, ' ', OP (CRN), ',', '(', OP (RMA), ')', 0 } }, 1292214571Sdim & ifmt_swcp, { 0x3009 } 1293214571Sdim }, 1294214571Sdim/* smcp $crn64,($rma) */ 1295214571Sdim { 1296214571Sdim { 0, 0, 0, 0 }, 1297214571Sdim { { MNEM, ' ', OP (CRN64), ',', '(', OP (RMA), ')', 0 } }, 1298214571Sdim & ifmt_smcp, { 0x300a } 1299214571Sdim }, 1300214571Sdim/* lmcp $crn64,($rma) */ 1301214571Sdim { 1302214571Sdim { 0, 0, 0, 0 }, 1303214571Sdim { { MNEM, ' ', OP (CRN64), ',', '(', OP (RMA), ')', 0 } }, 1304214571Sdim & ifmt_smcp, { 0x300b } 1305214571Sdim }, 1306214571Sdim/* swcpi $crn,($rma+) */ 1307214571Sdim { 1308214571Sdim { 0, 0, 0, 0 }, 1309214571Sdim { { MNEM, ' ', OP (CRN), ',', '(', OP (RMA), '+', ')', 0 } }, 1310214571Sdim & ifmt_swcp, { 0x3000 } 1311214571Sdim }, 1312214571Sdim/* lwcpi $crn,($rma+) */ 1313214571Sdim { 1314214571Sdim { 0, 0, 0, 0 }, 1315214571Sdim { { MNEM, ' ', OP (CRN), ',', '(', OP (RMA), '+', ')', 0 } }, 1316214571Sdim & ifmt_swcp, { 0x3001 } 1317214571Sdim }, 1318214571Sdim/* smcpi $crn64,($rma+) */ 1319214571Sdim { 1320214571Sdim { 0, 0, 0, 0 }, 1321214571Sdim { { MNEM, ' ', OP (CRN64), ',', '(', OP (RMA), '+', ')', 0 } }, 1322214571Sdim & ifmt_smcp, { 0x3002 } 1323214571Sdim }, 1324214571Sdim/* lmcpi $crn64,($rma+) */ 1325214571Sdim { 1326214571Sdim { 0, 0, 0, 0 }, 1327214571Sdim { { MNEM, ' ', OP (CRN64), ',', '(', OP (RMA), '+', ')', 0 } }, 1328214571Sdim & ifmt_smcp, { 0x3003 } 1329214571Sdim }, 1330214571Sdim/* swcp $crn,$sdisp16($rma) */ 1331214571Sdim { 1332214571Sdim { 0, 0, 0, 0 }, 1333214571Sdim { { MNEM, ' ', OP (CRN), ',', OP (SDISP16), '(', OP (RMA), ')', 0 } }, 1334214571Sdim & ifmt_swcp16, { 0xf00c0000 } 1335214571Sdim }, 1336214571Sdim/* lwcp $crn,$sdisp16($rma) */ 1337214571Sdim { 1338214571Sdim { 0, 0, 0, 0 }, 1339214571Sdim { { MNEM, ' ', OP (CRN), ',', OP (SDISP16), '(', OP (RMA), ')', 0 } }, 1340214571Sdim & ifmt_swcp16, { 0xf00d0000 } 1341214571Sdim }, 1342214571Sdim/* smcp $crn64,$sdisp16($rma) */ 1343214571Sdim { 1344214571Sdim { 0, 0, 0, 0 }, 1345214571Sdim { { MNEM, ' ', OP (CRN64), ',', OP (SDISP16), '(', OP (RMA), ')', 0 } }, 1346214571Sdim & ifmt_smcp16, { 0xf00e0000 } 1347214571Sdim }, 1348214571Sdim/* lmcp $crn64,$sdisp16($rma) */ 1349214571Sdim { 1350214571Sdim { 0, 0, 0, 0 }, 1351214571Sdim { { MNEM, ' ', OP (CRN64), ',', OP (SDISP16), '(', OP (RMA), ')', 0 } }, 1352214571Sdim & ifmt_smcp16, { 0xf00f0000 } 1353214571Sdim }, 1354214571Sdim/* sbcpa $crn,($rma+),$cdisp8 */ 1355214571Sdim { 1356214571Sdim { 0, 0, 0, 0 }, 1357214571Sdim { { MNEM, ' ', OP (CRN), ',', '(', OP (RMA), '+', ')', ',', OP (CDISP8), 0 } }, 1358214571Sdim & ifmt_sbcpa, { 0xf0050000 } 1359214571Sdim }, 1360214571Sdim/* lbcpa $crn,($rma+),$cdisp8 */ 1361214571Sdim { 1362214571Sdim { 0, 0, 0, 0 }, 1363214571Sdim { { MNEM, ' ', OP (CRN), ',', '(', OP (RMA), '+', ')', ',', OP (CDISP8), 0 } }, 1364214571Sdim & ifmt_sbcpa, { 0xf0054000 } 1365214571Sdim }, 1366214571Sdim/* shcpa $crn,($rma+),$cdisp8a2 */ 1367214571Sdim { 1368214571Sdim { 0, 0, 0, 0 }, 1369214571Sdim { { MNEM, ' ', OP (CRN), ',', '(', OP (RMA), '+', ')', ',', OP (CDISP8A2), 0 } }, 1370214571Sdim & ifmt_shcpa, { 0xf0051000 } 1371214571Sdim }, 1372214571Sdim/* lhcpa $crn,($rma+),$cdisp8a2 */ 1373214571Sdim { 1374214571Sdim { 0, 0, 0, 0 }, 1375214571Sdim { { MNEM, ' ', OP (CRN), ',', '(', OP (RMA), '+', ')', ',', OP (CDISP8A2), 0 } }, 1376214571Sdim & ifmt_shcpa, { 0xf0055000 } 1377214571Sdim }, 1378214571Sdim/* swcpa $crn,($rma+),$cdisp8a4 */ 1379214571Sdim { 1380214571Sdim { 0, 0, 0, 0 }, 1381214571Sdim { { MNEM, ' ', OP (CRN), ',', '(', OP (RMA), '+', ')', ',', OP (CDISP8A4), 0 } }, 1382214571Sdim & ifmt_swcpa, { 0xf0052000 } 1383214571Sdim }, 1384214571Sdim/* lwcpa $crn,($rma+),$cdisp8a4 */ 1385214571Sdim { 1386214571Sdim { 0, 0, 0, 0 }, 1387214571Sdim { { MNEM, ' ', OP (CRN), ',', '(', OP (RMA), '+', ')', ',', OP (CDISP8A4), 0 } }, 1388214571Sdim & ifmt_swcpa, { 0xf0056000 } 1389214571Sdim }, 1390214571Sdim/* smcpa $crn64,($rma+),$cdisp8a8 */ 1391214571Sdim { 1392214571Sdim { 0, 0, 0, 0 }, 1393214571Sdim { { MNEM, ' ', OP (CRN64), ',', '(', OP (RMA), '+', ')', ',', OP (CDISP8A8), 0 } }, 1394214571Sdim & ifmt_smcpa, { 0xf0053000 } 1395214571Sdim }, 1396214571Sdim/* lmcpa $crn64,($rma+),$cdisp8a8 */ 1397214571Sdim { 1398214571Sdim { 0, 0, 0, 0 }, 1399214571Sdim { { MNEM, ' ', OP (CRN64), ',', '(', OP (RMA), '+', ')', ',', OP (CDISP8A8), 0 } }, 1400214571Sdim & ifmt_smcpa, { 0xf0057000 } 1401214571Sdim }, 1402214571Sdim/* sbcpm0 $crn,($rma+),$cdisp8 */ 1403214571Sdim { 1404214571Sdim { 0, 0, 0, 0 }, 1405214571Sdim { { MNEM, ' ', OP (CRN), ',', '(', OP (RMA), '+', ')', ',', OP (CDISP8), 0 } }, 1406214571Sdim & ifmt_sbcpa, { 0xf0050800 } 1407214571Sdim }, 1408214571Sdim/* lbcpm0 $crn,($rma+),$cdisp8 */ 1409214571Sdim { 1410214571Sdim { 0, 0, 0, 0 }, 1411214571Sdim { { MNEM, ' ', OP (CRN), ',', '(', OP (RMA), '+', ')', ',', OP (CDISP8), 0 } }, 1412214571Sdim & ifmt_sbcpa, { 0xf0054800 } 1413214571Sdim }, 1414214571Sdim/* shcpm0 $crn,($rma+),$cdisp8a2 */ 1415214571Sdim { 1416214571Sdim { 0, 0, 0, 0 }, 1417214571Sdim { { MNEM, ' ', OP (CRN), ',', '(', OP (RMA), '+', ')', ',', OP (CDISP8A2), 0 } }, 1418214571Sdim & ifmt_shcpa, { 0xf0051800 } 1419214571Sdim }, 1420214571Sdim/* lhcpm0 $crn,($rma+),$cdisp8a2 */ 1421214571Sdim { 1422214571Sdim { 0, 0, 0, 0 }, 1423214571Sdim { { MNEM, ' ', OP (CRN), ',', '(', OP (RMA), '+', ')', ',', OP (CDISP8A2), 0 } }, 1424214571Sdim & ifmt_shcpa, { 0xf0055800 } 1425214571Sdim }, 1426214571Sdim/* swcpm0 $crn,($rma+),$cdisp8a4 */ 1427214571Sdim { 1428214571Sdim { 0, 0, 0, 0 }, 1429214571Sdim { { MNEM, ' ', OP (CRN), ',', '(', OP (RMA), '+', ')', ',', OP (CDISP8A4), 0 } }, 1430214571Sdim & ifmt_swcpa, { 0xf0052800 } 1431214571Sdim }, 1432214571Sdim/* lwcpm0 $crn,($rma+),$cdisp8a4 */ 1433214571Sdim { 1434214571Sdim { 0, 0, 0, 0 }, 1435214571Sdim { { MNEM, ' ', OP (CRN), ',', '(', OP (RMA), '+', ')', ',', OP (CDISP8A4), 0 } }, 1436214571Sdim & ifmt_swcpa, { 0xf0056800 } 1437214571Sdim }, 1438214571Sdim/* smcpm0 $crn64,($rma+),$cdisp8a8 */ 1439214571Sdim { 1440214571Sdim { 0, 0, 0, 0 }, 1441214571Sdim { { MNEM, ' ', OP (CRN64), ',', '(', OP (RMA), '+', ')', ',', OP (CDISP8A8), 0 } }, 1442214571Sdim & ifmt_smcpa, { 0xf0053800 } 1443214571Sdim }, 1444214571Sdim/* lmcpm0 $crn64,($rma+),$cdisp8a8 */ 1445214571Sdim { 1446214571Sdim { 0, 0, 0, 0 }, 1447214571Sdim { { MNEM, ' ', OP (CRN64), ',', '(', OP (RMA), '+', ')', ',', OP (CDISP8A8), 0 } }, 1448214571Sdim & ifmt_smcpa, { 0xf0057800 } 1449214571Sdim }, 1450214571Sdim/* sbcpm1 $crn,($rma+),$cdisp8 */ 1451214571Sdim { 1452214571Sdim { 0, 0, 0, 0 }, 1453214571Sdim { { MNEM, ' ', OP (CRN), ',', '(', OP (RMA), '+', ')', ',', OP (CDISP8), 0 } }, 1454214571Sdim & ifmt_sbcpa, { 0xf0050c00 } 1455214571Sdim }, 1456214571Sdim/* lbcpm1 $crn,($rma+),$cdisp8 */ 1457214571Sdim { 1458214571Sdim { 0, 0, 0, 0 }, 1459214571Sdim { { MNEM, ' ', OP (CRN), ',', '(', OP (RMA), '+', ')', ',', OP (CDISP8), 0 } }, 1460214571Sdim & ifmt_sbcpa, { 0xf0054c00 } 1461214571Sdim }, 1462214571Sdim/* shcpm1 $crn,($rma+),$cdisp8a2 */ 1463214571Sdim { 1464214571Sdim { 0, 0, 0, 0 }, 1465214571Sdim { { MNEM, ' ', OP (CRN), ',', '(', OP (RMA), '+', ')', ',', OP (CDISP8A2), 0 } }, 1466214571Sdim & ifmt_shcpa, { 0xf0051c00 } 1467214571Sdim }, 1468214571Sdim/* lhcpm1 $crn,($rma+),$cdisp8a2 */ 1469214571Sdim { 1470214571Sdim { 0, 0, 0, 0 }, 1471214571Sdim { { MNEM, ' ', OP (CRN), ',', '(', OP (RMA), '+', ')', ',', OP (CDISP8A2), 0 } }, 1472214571Sdim & ifmt_shcpa, { 0xf0055c00 } 1473214571Sdim }, 1474214571Sdim/* swcpm1 $crn,($rma+),$cdisp8a4 */ 1475214571Sdim { 1476214571Sdim { 0, 0, 0, 0 }, 1477214571Sdim { { MNEM, ' ', OP (CRN), ',', '(', OP (RMA), '+', ')', ',', OP (CDISP8A4), 0 } }, 1478214571Sdim & ifmt_swcpa, { 0xf0052c00 } 1479214571Sdim }, 1480214571Sdim/* lwcpm1 $crn,($rma+),$cdisp8a4 */ 1481214571Sdim { 1482214571Sdim { 0, 0, 0, 0 }, 1483214571Sdim { { MNEM, ' ', OP (CRN), ',', '(', OP (RMA), '+', ')', ',', OP (CDISP8A4), 0 } }, 1484214571Sdim & ifmt_swcpa, { 0xf0056c00 } 1485214571Sdim }, 1486214571Sdim/* smcpm1 $crn64,($rma+),$cdisp8a8 */ 1487214571Sdim { 1488214571Sdim { 0, 0, 0, 0 }, 1489214571Sdim { { MNEM, ' ', OP (CRN64), ',', '(', OP (RMA), '+', ')', ',', OP (CDISP8A8), 0 } }, 1490214571Sdim & ifmt_smcpa, { 0xf0053c00 } 1491214571Sdim }, 1492214571Sdim/* lmcpm1 $crn64,($rma+),$cdisp8a8 */ 1493214571Sdim { 1494214571Sdim { 0, 0, 0, 0 }, 1495214571Sdim { { MNEM, ' ', OP (CRN64), ',', '(', OP (RMA), '+', ')', ',', OP (CDISP8A8), 0 } }, 1496214571Sdim & ifmt_smcpa, { 0xf0057c00 } 1497214571Sdim }, 1498214571Sdim/* bcpeq $cccc,$pcrel17a2 */ 1499214571Sdim { 1500214571Sdim { 0, 0, 0, 0 }, 1501214571Sdim { { MNEM, ' ', OP (CCCC), ',', OP (PCREL17A2), 0 } }, 1502214571Sdim & ifmt_bcpeq, { 0xd8040000 } 1503214571Sdim }, 1504214571Sdim/* bcpne $cccc,$pcrel17a2 */ 1505214571Sdim { 1506214571Sdim { 0, 0, 0, 0 }, 1507214571Sdim { { MNEM, ' ', OP (CCCC), ',', OP (PCREL17A2), 0 } }, 1508214571Sdim & ifmt_bcpeq, { 0xd8050000 } 1509214571Sdim }, 1510214571Sdim/* bcpat $cccc,$pcrel17a2 */ 1511214571Sdim { 1512214571Sdim { 0, 0, 0, 0 }, 1513214571Sdim { { MNEM, ' ', OP (CCCC), ',', OP (PCREL17A2), 0 } }, 1514214571Sdim & ifmt_bcpeq, { 0xd8060000 } 1515214571Sdim }, 1516214571Sdim/* bcpaf $cccc,$pcrel17a2 */ 1517214571Sdim { 1518214571Sdim { 0, 0, 0, 0 }, 1519214571Sdim { { MNEM, ' ', OP (CCCC), ',', OP (PCREL17A2), 0 } }, 1520214571Sdim & ifmt_bcpeq, { 0xd8070000 } 1521214571Sdim }, 1522214571Sdim/* synccp */ 1523214571Sdim { 1524214571Sdim { 0, 0, 0, 0 }, 1525214571Sdim { { MNEM, 0 } }, 1526214571Sdim & ifmt_ret, { 0x7021 } 1527214571Sdim }, 1528214571Sdim/* jsrv $rm */ 1529214571Sdim { 1530214571Sdim { 0, 0, 0, 0 }, 1531214571Sdim { { MNEM, ' ', OP (RM), 0 } }, 1532214571Sdim & ifmt_jmp, { 0x180f } 1533214571Sdim }, 1534214571Sdim/* bsrv $pcrel24a2 */ 1535214571Sdim { 1536214571Sdim { 0, 0, 0, 0 }, 1537214571Sdim { { MNEM, ' ', OP (PCREL24A2), 0 } }, 1538214571Sdim & ifmt_bsr24, { 0xd80b0000 } 1539214571Sdim }, 1540214571Sdim/* --unused-- */ 1541214571Sdim { 1542214571Sdim { 0, 0, 0, 0 }, 1543214571Sdim { { MNEM, 0 } }, 1544214571Sdim & ifmt_sim_syscall, { 0x7800 } 1545214571Sdim }, 1546214571Sdim/* --reserved-- */ 1547214571Sdim { 1548214571Sdim { 0, 0, 0, 0 }, 1549214571Sdim { { MNEM, 0 } }, 1550214571Sdim & ifmt_mov, { 0x6 } 1551214571Sdim }, 1552214571Sdim/* --reserved-- */ 1553214571Sdim { 1554214571Sdim { 0, 0, 0, 0 }, 1555214571Sdim { { MNEM, 0 } }, 1556214571Sdim & ifmt_mov, { 0x100a } 1557214571Sdim }, 1558214571Sdim/* --reserved-- */ 1559214571Sdim { 1560214571Sdim { 0, 0, 0, 0 }, 1561214571Sdim { { MNEM, 0 } }, 1562214571Sdim & ifmt_mov, { 0x100b } 1563214571Sdim }, 1564214571Sdim/* --reserved-- */ 1565214571Sdim { 1566214571Sdim { 0, 0, 0, 0 }, 1567214571Sdim { { MNEM, 0 } }, 1568214571Sdim & ifmt_mov, { 0x2005 } 1569214571Sdim }, 1570214571Sdim/* --reserved-- */ 1571214571Sdim { 1572214571Sdim { 0, 0, 0, 0 }, 1573214571Sdim { { MNEM, 0 } }, 1574214571Sdim & ifmt_mov, { 0x2008 } 1575214571Sdim }, 1576214571Sdim/* --reserved-- */ 1577214571Sdim { 1578214571Sdim { 0, 0, 0, 0 }, 1579214571Sdim { { MNEM, 0 } }, 1580214571Sdim & ifmt_mov, { 0x2009 } 1581214571Sdim }, 1582214571Sdim/* --reserved-- */ 1583214571Sdim { 1584214571Sdim { 0, 0, 0, 0 }, 1585214571Sdim { { MNEM, 0 } }, 1586214571Sdim & ifmt_mov, { 0x200a } 1587214571Sdim }, 1588214571Sdim/* --reserved-- */ 1589214571Sdim { 1590214571Sdim { 0, 0, 0, 0 }, 1591214571Sdim { { MNEM, 0 } }, 1592214571Sdim & ifmt_mov, { 0x200b } 1593214571Sdim }, 1594214571Sdim/* --reserved-- */ 1595214571Sdim { 1596214571Sdim { 0, 0, 0, 0 }, 1597214571Sdim { { MNEM, 0 } }, 1598214571Sdim & ifmt_mov, { 0x3004 } 1599214571Sdim }, 1600214571Sdim/* --reserved-- */ 1601214571Sdim { 1602214571Sdim { 0, 0, 0, 0 }, 1603214571Sdim { { MNEM, 0 } }, 1604214571Sdim & ifmt_mov, { 0x3005 } 1605214571Sdim }, 1606214571Sdim/* --reserved-- */ 1607214571Sdim { 1608214571Sdim { 0, 0, 0, 0 }, 1609214571Sdim { { MNEM, 0 } }, 1610214571Sdim & ifmt_mov, { 0x3006 } 1611214571Sdim }, 1612214571Sdim/* --reserved-- */ 1613214571Sdim { 1614214571Sdim { 0, 0, 0, 0 }, 1615214571Sdim { { MNEM, 0 } }, 1616214571Sdim & ifmt_mov, { 0x3007 } 1617214571Sdim }, 1618214571Sdim/* --reserved-- */ 1619214571Sdim { 1620214571Sdim { 0, 0, 0, 0 }, 1621214571Sdim { { MNEM, 0 } }, 1622214571Sdim & ifmt_mov, { 0x300c } 1623214571Sdim }, 1624214571Sdim/* --reserved-- */ 1625214571Sdim { 1626214571Sdim { 0, 0, 0, 0 }, 1627214571Sdim { { MNEM, 0 } }, 1628214571Sdim & ifmt_mov, { 0x300d } 1629214571Sdim }, 1630214571Sdim/* --reserved-- */ 1631214571Sdim { 1632214571Sdim { 0, 0, 0, 0 }, 1633214571Sdim { { MNEM, 0 } }, 1634214571Sdim & ifmt_mov, { 0x300e } 1635214571Sdim }, 1636214571Sdim/* --reserved-- */ 1637214571Sdim { 1638214571Sdim { 0, 0, 0, 0 }, 1639214571Sdim { { MNEM, 0 } }, 1640214571Sdim & ifmt_mov, { 0x300f } 1641214571Sdim }, 1642214571Sdim/* --reserved-- */ 1643214571Sdim { 1644214571Sdim { 0, 0, 0, 0 }, 1645214571Sdim { { MNEM, 0 } }, 1646214571Sdim & ifmt_mov, { 0x7007 } 1647214571Sdim }, 1648214571Sdim/* --reserved-- */ 1649214571Sdim { 1650214571Sdim { 0, 0, 0, 0 }, 1651214571Sdim { { MNEM, 0 } }, 1652214571Sdim & ifmt_mov, { 0x700e } 1653214571Sdim }, 1654214571Sdim/* --reserved-- */ 1655214571Sdim { 1656214571Sdim { 0, 0, 0, 0 }, 1657214571Sdim { { MNEM, 0 } }, 1658214571Sdim & ifmt_mov, { 0x700f } 1659214571Sdim }, 1660214571Sdim/* --reserved-- */ 1661214571Sdim { 1662214571Sdim { 0, 0, 0, 0 }, 1663214571Sdim { { MNEM, 0 } }, 1664214571Sdim & ifmt_mov, { 0xc007 } 1665214571Sdim }, 1666214571Sdim/* --reserved-- */ 1667214571Sdim { 1668214571Sdim { 0, 0, 0, 0 }, 1669214571Sdim { { MNEM, 0 } }, 1670214571Sdim & ifmt_mov, { 0xe00d } 1671214571Sdim }, 1672214571Sdim/* --reserved-- */ 1673214571Sdim { 1674214571Sdim { 0, 0, 0, 0 }, 1675214571Sdim { { MNEM, 0 } }, 1676214571Sdim & ifmt_mov, { 0xf003 } 1677214571Sdim }, 1678214571Sdim/* --reserved-- */ 1679214571Sdim { 1680214571Sdim { 0, 0, 0, 0 }, 1681214571Sdim { { MNEM, 0 } }, 1682214571Sdim & ifmt_mov, { 0xf006 } 1683214571Sdim }, 1684214571Sdim/* --reserved-- */ 1685214571Sdim { 1686214571Sdim { 0, 0, 0, 0 }, 1687214571Sdim { { MNEM, 0 } }, 1688214571Sdim & ifmt_mov, { 0xf008 } 1689214571Sdim }, 1690214571Sdim/* --reserved-- */ 1691214571Sdim { 1692214571Sdim { 0, 0, 0, 0 }, 1693214571Sdim { { MNEM, 0 } }, 1694214571Sdim & ifmt_mov, { 0x7005 } 1695214571Sdim }, 1696214571Sdim/* --reserved-- */ 1697214571Sdim { 1698214571Sdim { 0, 0, 0, 0 }, 1699214571Sdim { { MNEM, 0 } }, 1700214571Sdim & ifmt_mov, { 0x700c } 1701214571Sdim }, 1702214571Sdim/* --reserved-- */ 1703214571Sdim { 1704214571Sdim { 0, 0, 0, 0 }, 1705214571Sdim { { MNEM, 0 } }, 1706214571Sdim & ifmt_mov, { 0x700d } 1707214571Sdim }, 1708214571Sdim/* fadds ${fmax-FRd},${fmax-FRn},${fmax-FRm} */ 1709214571Sdim { 1710214571Sdim { 0, 0, 0, 0 }, 1711214571Sdim { { MNEM, ' ', OP (FMAX_FRD), ',', OP (FMAX_FRN), ',', OP (FMAX_FRM), 0 } }, 1712214571Sdim & ifmt_fadds, { 0xf0070000 } 1713214571Sdim }, 1714214571Sdim/* fsubs ${fmax-FRd},${fmax-FRn},${fmax-FRm} */ 1715214571Sdim { 1716214571Sdim { 0, 0, 0, 0 }, 1717214571Sdim { { MNEM, ' ', OP (FMAX_FRD), ',', OP (FMAX_FRN), ',', OP (FMAX_FRM), 0 } }, 1718214571Sdim & ifmt_fadds, { 0xf0170000 } 1719214571Sdim }, 1720214571Sdim/* fmuls ${fmax-FRd},${fmax-FRn},${fmax-FRm} */ 1721214571Sdim { 1722214571Sdim { 0, 0, 0, 0 }, 1723214571Sdim { { MNEM, ' ', OP (FMAX_FRD), ',', OP (FMAX_FRN), ',', OP (FMAX_FRM), 0 } }, 1724214571Sdim & ifmt_fadds, { 0xf0270000 } 1725214571Sdim }, 1726214571Sdim/* fdivs ${fmax-FRd},${fmax-FRn},${fmax-FRm} */ 1727214571Sdim { 1728214571Sdim { 0, 0, 0, 0 }, 1729214571Sdim { { MNEM, ' ', OP (FMAX_FRD), ',', OP (FMAX_FRN), ',', OP (FMAX_FRM), 0 } }, 1730214571Sdim & ifmt_fadds, { 0xf0370000 } 1731214571Sdim }, 1732214571Sdim/* fsqrts ${fmax-FRd},${fmax-FRn} */ 1733214571Sdim { 1734214571Sdim { 0, 0, 0, 0 }, 1735214571Sdim { { MNEM, ' ', OP (FMAX_FRD), ',', OP (FMAX_FRN), 0 } }, 1736214571Sdim & ifmt_fsqrts, { 0xf0470000 } 1737214571Sdim }, 1738214571Sdim/* fabss ${fmax-FRd},${fmax-FRn} */ 1739214571Sdim { 1740214571Sdim { 0, 0, 0, 0 }, 1741214571Sdim { { MNEM, ' ', OP (FMAX_FRD), ',', OP (FMAX_FRN), 0 } }, 1742214571Sdim & ifmt_fsqrts, { 0xf0570000 } 1743214571Sdim }, 1744214571Sdim/* fnegs ${fmax-FRd},${fmax-FRn} */ 1745214571Sdim { 1746214571Sdim { 0, 0, 0, 0 }, 1747214571Sdim { { MNEM, ' ', OP (FMAX_FRD), ',', OP (FMAX_FRN), 0 } }, 1748214571Sdim & ifmt_fsqrts, { 0xf0770000 } 1749214571Sdim }, 1750214571Sdim/* fmovs ${fmax-FRd},${fmax-FRn} */ 1751214571Sdim { 1752214571Sdim { 0, 0, 0, 0 }, 1753214571Sdim { { MNEM, ' ', OP (FMAX_FRD), ',', OP (FMAX_FRN), 0 } }, 1754214571Sdim & ifmt_fsqrts, { 0xf0670000 } 1755214571Sdim }, 1756214571Sdim/* froundws ${fmax-FRd-int},${fmax-FRn} */ 1757214571Sdim { 1758214571Sdim { 0, 0, 0, 0 }, 1759214571Sdim { { MNEM, ' ', OP (FMAX_FRD_INT), ',', OP (FMAX_FRN), 0 } }, 1760214571Sdim & ifmt_froundws, { 0xf0c70000 } 1761214571Sdim }, 1762214571Sdim/* ftruncws ${fmax-FRd-int},${fmax-FRn} */ 1763214571Sdim { 1764214571Sdim { 0, 0, 0, 0 }, 1765214571Sdim { { MNEM, ' ', OP (FMAX_FRD_INT), ',', OP (FMAX_FRN), 0 } }, 1766214571Sdim & ifmt_froundws, { 0xf0d70000 } 1767214571Sdim }, 1768214571Sdim/* fceilws ${fmax-FRd-int},${fmax-FRn} */ 1769214571Sdim { 1770214571Sdim { 0, 0, 0, 0 }, 1771214571Sdim { { MNEM, ' ', OP (FMAX_FRD_INT), ',', OP (FMAX_FRN), 0 } }, 1772214571Sdim & ifmt_froundws, { 0xf0e70000 } 1773214571Sdim }, 1774214571Sdim/* ffloorws ${fmax-FRd-int},${fmax-FRn} */ 1775214571Sdim { 1776214571Sdim { 0, 0, 0, 0 }, 1777214571Sdim { { MNEM, ' ', OP (FMAX_FRD_INT), ',', OP (FMAX_FRN), 0 } }, 1778214571Sdim & ifmt_froundws, { 0xf0f70000 } 1779214571Sdim }, 1780214571Sdim/* fcvtws ${fmax-FRd-int},${fmax-FRn} */ 1781214571Sdim { 1782214571Sdim { 0, 0, 0, 0 }, 1783214571Sdim { { MNEM, ' ', OP (FMAX_FRD_INT), ',', OP (FMAX_FRN), 0 } }, 1784214571Sdim & ifmt_froundws, { 0xf0471000 } 1785214571Sdim }, 1786214571Sdim/* fcvtsw ${fmax-FRd},${fmax-FRn-int} */ 1787214571Sdim { 1788214571Sdim { 0, 0, 0, 0 }, 1789214571Sdim { { MNEM, ' ', OP (FMAX_FRD), ',', OP (FMAX_FRN_INT), 0 } }, 1790214571Sdim & ifmt_fcvtsw, { 0xf0079000 } 1791214571Sdim }, 1792214571Sdim/* fcmpfs ${fmax-FRn},${fmax-FRm} */ 1793214571Sdim { 1794214571Sdim { 0, 0, 0, 0 }, 1795214571Sdim { { MNEM, ' ', OP (FMAX_FRN), ',', OP (FMAX_FRM), 0 } }, 1796214571Sdim & ifmt_fcmpfs, { 0xf0072000 } 1797214571Sdim }, 1798214571Sdim/* fcmpus ${fmax-FRn},${fmax-FRm} */ 1799214571Sdim { 1800214571Sdim { 0, 0, 0, 0 }, 1801214571Sdim { { MNEM, ' ', OP (FMAX_FRN), ',', OP (FMAX_FRM), 0 } }, 1802214571Sdim & ifmt_fcmpfs, { 0xf0172000 } 1803214571Sdim }, 1804214571Sdim/* fcmpes ${fmax-FRn},${fmax-FRm} */ 1805214571Sdim { 1806214571Sdim { 0, 0, 0, 0 }, 1807214571Sdim { { MNEM, ' ', OP (FMAX_FRN), ',', OP (FMAX_FRM), 0 } }, 1808214571Sdim & ifmt_fcmpfs, { 0xf0272000 } 1809214571Sdim }, 1810214571Sdim/* fcmpues ${fmax-FRn},${fmax-FRm} */ 1811214571Sdim { 1812214571Sdim { 0, 0, 0, 0 }, 1813214571Sdim { { MNEM, ' ', OP (FMAX_FRN), ',', OP (FMAX_FRM), 0 } }, 1814214571Sdim & ifmt_fcmpfs, { 0xf0372000 } 1815214571Sdim }, 1816214571Sdim/* fcmpls ${fmax-FRn},${fmax-FRm} */ 1817214571Sdim { 1818214571Sdim { 0, 0, 0, 0 }, 1819214571Sdim { { MNEM, ' ', OP (FMAX_FRN), ',', OP (FMAX_FRM), 0 } }, 1820214571Sdim & ifmt_fcmpfs, { 0xf0472000 } 1821214571Sdim }, 1822214571Sdim/* fcmpuls ${fmax-FRn},${fmax-FRm} */ 1823214571Sdim { 1824214571Sdim { 0, 0, 0, 0 }, 1825214571Sdim { { MNEM, ' ', OP (FMAX_FRN), ',', OP (FMAX_FRM), 0 } }, 1826214571Sdim & ifmt_fcmpfs, { 0xf0572000 } 1827214571Sdim }, 1828214571Sdim/* fcmples ${fmax-FRn},${fmax-FRm} */ 1829214571Sdim { 1830214571Sdim { 0, 0, 0, 0 }, 1831214571Sdim { { MNEM, ' ', OP (FMAX_FRN), ',', OP (FMAX_FRM), 0 } }, 1832214571Sdim & ifmt_fcmpfs, { 0xf0672000 } 1833214571Sdim }, 1834214571Sdim/* fcmpules ${fmax-FRn},${fmax-FRm} */ 1835214571Sdim { 1836214571Sdim { 0, 0, 0, 0 }, 1837214571Sdim { { MNEM, ' ', OP (FMAX_FRN), ',', OP (FMAX_FRM), 0 } }, 1838214571Sdim & ifmt_fcmpfs, { 0xf0772000 } 1839214571Sdim }, 1840214571Sdim/* fcmpfis ${fmax-FRn},${fmax-FRm} */ 1841214571Sdim { 1842214571Sdim { 0, 0, 0, 0 }, 1843214571Sdim { { MNEM, ' ', OP (FMAX_FRN), ',', OP (FMAX_FRM), 0 } }, 1844214571Sdim & ifmt_fcmpfs, { 0xf0872000 } 1845214571Sdim }, 1846214571Sdim/* fcmpuis ${fmax-FRn},${fmax-FRm} */ 1847214571Sdim { 1848214571Sdim { 0, 0, 0, 0 }, 1849214571Sdim { { MNEM, ' ', OP (FMAX_FRN), ',', OP (FMAX_FRM), 0 } }, 1850214571Sdim & ifmt_fcmpfs, { 0xf0972000 } 1851214571Sdim }, 1852214571Sdim/* fcmpeis ${fmax-FRn},${fmax-FRm} */ 1853214571Sdim { 1854214571Sdim { 0, 0, 0, 0 }, 1855214571Sdim { { MNEM, ' ', OP (FMAX_FRN), ',', OP (FMAX_FRM), 0 } }, 1856214571Sdim & ifmt_fcmpfs, { 0xf0a72000 } 1857214571Sdim }, 1858214571Sdim/* fcmpueis ${fmax-FRn},${fmax-FRm} */ 1859214571Sdim { 1860214571Sdim { 0, 0, 0, 0 }, 1861214571Sdim { { MNEM, ' ', OP (FMAX_FRN), ',', OP (FMAX_FRM), 0 } }, 1862214571Sdim & ifmt_fcmpfs, { 0xf0b72000 } 1863214571Sdim }, 1864214571Sdim/* fcmplis ${fmax-FRn},${fmax-FRm} */ 1865214571Sdim { 1866214571Sdim { 0, 0, 0, 0 }, 1867214571Sdim { { MNEM, ' ', OP (FMAX_FRN), ',', OP (FMAX_FRM), 0 } }, 1868214571Sdim & ifmt_fcmpfs, { 0xf0c72000 } 1869214571Sdim }, 1870214571Sdim/* fcmpulis ${fmax-FRn},${fmax-FRm} */ 1871214571Sdim { 1872214571Sdim { 0, 0, 0, 0 }, 1873214571Sdim { { MNEM, ' ', OP (FMAX_FRN), ',', OP (FMAX_FRM), 0 } }, 1874214571Sdim & ifmt_fcmpfs, { 0xf0d72000 } 1875214571Sdim }, 1876214571Sdim/* fcmpleis ${fmax-FRn},${fmax-FRm} */ 1877214571Sdim { 1878214571Sdim { 0, 0, 0, 0 }, 1879214571Sdim { { MNEM, ' ', OP (FMAX_FRN), ',', OP (FMAX_FRM), 0 } }, 1880214571Sdim & ifmt_fcmpfs, { 0xf0e72000 } 1881214571Sdim }, 1882214571Sdim/* fcmpuleis ${fmax-FRn},${fmax-FRm} */ 1883214571Sdim { 1884214571Sdim { 0, 0, 0, 0 }, 1885214571Sdim { { MNEM, ' ', OP (FMAX_FRN), ',', OP (FMAX_FRM), 0 } }, 1886214571Sdim & ifmt_fcmpfs, { 0xf0f72000 } 1887214571Sdim }, 1888214571Sdim/* cmov ${fmax-FRd-int},${fmax-Rm} */ 1889214571Sdim { 1890214571Sdim { 0, 0, 0, 0 }, 1891214571Sdim { { MNEM, ' ', OP (FMAX_FRD_INT), ',', OP (FMAX_RM), 0 } }, 1892214571Sdim & ifmt_cmov_frn_rm, { 0xf007f000 } 1893214571Sdim }, 1894214571Sdim/* cmov ${fmax-Rm},${fmax-FRd-int} */ 1895214571Sdim { 1896214571Sdim { 0, 0, 0, 0 }, 1897214571Sdim { { MNEM, ' ', OP (FMAX_RM), ',', OP (FMAX_FRD_INT), 0 } }, 1898214571Sdim & ifmt_cmov_frn_rm, { 0xf007f001 } 1899214571Sdim }, 1900214571Sdim/* cmovc ${fmax-CCRn},${fmax-Rm} */ 1901214571Sdim { 1902214571Sdim { 0, 0, 0, 0 }, 1903214571Sdim { { MNEM, ' ', OP (FMAX_CCRN), ',', OP (FMAX_RM), 0 } }, 1904214571Sdim & ifmt_cmovc_ccrn_rm, { 0xf007f002 } 1905214571Sdim }, 1906214571Sdim/* cmovc ${fmax-Rm},${fmax-CCRn} */ 1907214571Sdim { 1908214571Sdim { 0, 0, 0, 0 }, 1909214571Sdim { { MNEM, ' ', OP (FMAX_RM), ',', OP (FMAX_CCRN), 0 } }, 1910214571Sdim & ifmt_cmovc_ccrn_rm, { 0xf007f003 } 1911214571Sdim }, 1912214571Sdim}; 1913214571Sdim 1914214571Sdim#undef A 1915214571Sdim#undef OPERAND 1916214571Sdim#undef MNEM 1917214571Sdim#undef OP 1918214571Sdim 1919214571Sdim/* Formats for ALIAS macro-insns. */ 1920214571Sdim 1921214571Sdim#if defined (__STDC__) || defined (ALMOST_STDC) || defined (HAVE_STRINGIZE) 1922214571Sdim#define F(f) & mep_cgen_ifld_table[MEP_##f] 1923214571Sdim#else 1924214571Sdim#define F(f) & mep_cgen_ifld_table[MEP_/**/f] 1925214571Sdim#endif 1926214571Sdimstatic const CGEN_IFMT ifmt_nop ATTRIBUTE_UNUSED = { 1927214571Sdim 16, 16, 0xffff, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { 0 } } 1928214571Sdim}; 1929214571Sdim 1930214571Sdimstatic const CGEN_IFMT ifmt_sb16_0 ATTRIBUTE_UNUSED = { 1931214571Sdim 16, 16, 0xf00f, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { 0 } } 1932214571Sdim}; 1933214571Sdim 1934214571Sdimstatic const CGEN_IFMT ifmt_sh16_0 ATTRIBUTE_UNUSED = { 1935214571Sdim 16, 16, 0xf00f, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { 0 } } 1936214571Sdim}; 1937214571Sdim 1938214571Sdimstatic const CGEN_IFMT ifmt_sw16_0 ATTRIBUTE_UNUSED = { 1939214571Sdim 16, 16, 0xf00f, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { 0 } } 1940214571Sdim}; 1941214571Sdim 1942214571Sdimstatic const CGEN_IFMT ifmt_lb16_0 ATTRIBUTE_UNUSED = { 1943214571Sdim 16, 16, 0xf00f, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { 0 } } 1944214571Sdim}; 1945214571Sdim 1946214571Sdimstatic const CGEN_IFMT ifmt_lh16_0 ATTRIBUTE_UNUSED = { 1947214571Sdim 16, 16, 0xf00f, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { 0 } } 1948214571Sdim}; 1949214571Sdim 1950214571Sdimstatic const CGEN_IFMT ifmt_lw16_0 ATTRIBUTE_UNUSED = { 1951214571Sdim 16, 16, 0xf00f, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { 0 } } 1952214571Sdim}; 1953214571Sdim 1954214571Sdimstatic const CGEN_IFMT ifmt_lbu16_0 ATTRIBUTE_UNUSED = { 1955214571Sdim 16, 16, 0xf00f, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { 0 } } 1956214571Sdim}; 1957214571Sdim 1958214571Sdimstatic const CGEN_IFMT ifmt_lhu16_0 ATTRIBUTE_UNUSED = { 1959214571Sdim 16, 16, 0xf00f, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { 0 } } 1960214571Sdim}; 1961214571Sdim 1962214571Sdimstatic const CGEN_IFMT ifmt_swcp16_0 ATTRIBUTE_UNUSED = { 1963214571Sdim 16, 16, 0xf00f, { { F (F_MAJOR) }, { F (F_CRN) }, { F (F_RM) }, { F (F_SUB4) }, { 0 } } 1964214571Sdim}; 1965214571Sdim 1966214571Sdimstatic const CGEN_IFMT ifmt_lwcp16_0 ATTRIBUTE_UNUSED = { 1967214571Sdim 16, 16, 0xf00f, { { F (F_MAJOR) }, { F (F_CRN) }, { F (F_RM) }, { F (F_SUB4) }, { 0 } } 1968214571Sdim}; 1969214571Sdim 1970214571Sdimstatic const CGEN_IFMT ifmt_smcp16_0 ATTRIBUTE_UNUSED = { 1971214571Sdim 16, 16, 0xf00f, { { F (F_MAJOR) }, { F (F_CRN) }, { F (F_RM) }, { F (F_SUB4) }, { 0 } } 1972214571Sdim}; 1973214571Sdim 1974214571Sdimstatic const CGEN_IFMT ifmt_lmcp16_0 ATTRIBUTE_UNUSED = { 1975214571Sdim 16, 16, 0xf00f, { { F (F_MAJOR) }, { F (F_CRN) }, { F (F_RM) }, { F (F_SUB4) }, { 0 } } 1976214571Sdim}; 1977214571Sdim 1978214571Sdim#undef F 1979214571Sdim 1980214571Sdim/* Each non-simple macro entry points to an array of expansion possibilities. */ 1981214571Sdim 1982214571Sdim#if defined (__STDC__) || defined (ALMOST_STDC) || defined (HAVE_STRINGIZE) 1983214571Sdim#define A(a) (1 << CGEN_INSN_##a) 1984214571Sdim#else 1985214571Sdim#define A(a) (1 << CGEN_INSN_/**/a) 1986214571Sdim#endif 1987214571Sdim#if defined (__STDC__) || defined (ALMOST_STDC) || defined (HAVE_STRINGIZE) 1988214571Sdim#define OPERAND(op) MEP_OPERAND_##op 1989214571Sdim#else 1990214571Sdim#define OPERAND(op) MEP_OPERAND_/**/op 1991214571Sdim#endif 1992214571Sdim#define MNEM CGEN_SYNTAX_MNEMONIC /* syntax value for mnemonic */ 1993214571Sdim#define OP(field) CGEN_SYNTAX_MAKE_FIELD (OPERAND (field)) 1994214571Sdim 1995214571Sdim/* The macro instruction table. */ 1996214571Sdim 1997214571Sdimstatic const CGEN_IBASE mep_cgen_macro_insn_table[] = 1998214571Sdim{ 1999214571Sdim/* nop */ 2000214571Sdim { 2001214571Sdim -1, "nop", "nop", 16, 2002214571Sdim { 0|A(ALIAS), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } } 2003214571Sdim }, 2004214571Sdim/* sb $rnc,$zero($rma) */ 2005214571Sdim { 2006214571Sdim -1, "sb16-0", "sb", 16, 2007214571Sdim { 0|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } } 2008214571Sdim }, 2009214571Sdim/* sh $rns,$zero($rma) */ 2010214571Sdim { 2011214571Sdim -1, "sh16-0", "sh", 16, 2012214571Sdim { 0|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } } 2013214571Sdim }, 2014214571Sdim/* sw $rnl,$zero($rma) */ 2015214571Sdim { 2016214571Sdim -1, "sw16-0", "sw", 16, 2017214571Sdim { 0|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } } 2018214571Sdim }, 2019214571Sdim/* lb $rnc,$zero($rma) */ 2020214571Sdim { 2021214571Sdim -1, "lb16-0", "lb", 16, 2022214571Sdim { 0|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } } 2023214571Sdim }, 2024214571Sdim/* lh $rns,$zero($rma) */ 2025214571Sdim { 2026214571Sdim -1, "lh16-0", "lh", 16, 2027214571Sdim { 0|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } } 2028214571Sdim }, 2029214571Sdim/* lw $rnl,$zero($rma) */ 2030214571Sdim { 2031214571Sdim -1, "lw16-0", "lw", 16, 2032214571Sdim { 0|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } } 2033214571Sdim }, 2034214571Sdim/* lbu $rnuc,$zero($rma) */ 2035214571Sdim { 2036214571Sdim -1, "lbu16-0", "lbu", 16, 2037214571Sdim { 0|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } } 2038214571Sdim }, 2039214571Sdim/* lhu $rnus,$zero($rma) */ 2040214571Sdim { 2041214571Sdim -1, "lhu16-0", "lhu", 16, 2042214571Sdim { 0|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } } 2043214571Sdim }, 2044214571Sdim/* swcp $crn,$zero($rma) */ 2045214571Sdim { 2046214571Sdim -1, "swcp16-0", "swcp", 16, 2047214571Sdim { 0|A(NO_DIS)|A(OPTIONAL_CP_INSN)|A(ALIAS), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } } 2048214571Sdim }, 2049214571Sdim/* lwcp $crn,$zero($rma) */ 2050214571Sdim { 2051214571Sdim -1, "lwcp16-0", "lwcp", 16, 2052214571Sdim { 0|A(NO_DIS)|A(OPTIONAL_CP_INSN)|A(ALIAS), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } } 2053214571Sdim }, 2054214571Sdim/* smcp $crn64,$zero($rma) */ 2055214571Sdim { 2056214571Sdim -1, "smcp16-0", "smcp", 16, 2057214571Sdim { 0|A(NO_DIS)|A(OPTIONAL_CP64_INSN)|A(OPTIONAL_CP_INSN)|A(ALIAS), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } } 2058214571Sdim }, 2059214571Sdim/* lmcp $crn64,$zero($rma) */ 2060214571Sdim { 2061214571Sdim -1, "lmcp16-0", "lmcp", 16, 2062214571Sdim { 0|A(NO_DIS)|A(OPTIONAL_CP64_INSN)|A(OPTIONAL_CP_INSN)|A(ALIAS), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } } 2063214571Sdim }, 2064214571Sdim}; 2065214571Sdim 2066214571Sdim/* The macro instruction opcode table. */ 2067214571Sdim 2068214571Sdimstatic const CGEN_OPCODE mep_cgen_macro_insn_opcode_table[] = 2069214571Sdim{ 2070214571Sdim/* nop */ 2071214571Sdim { 2072214571Sdim { 0, 0, 0, 0 }, 2073214571Sdim { { MNEM, 0 } }, 2074214571Sdim & ifmt_nop, { 0x0 } 2075214571Sdim }, 2076214571Sdim/* sb $rnc,$zero($rma) */ 2077214571Sdim { 2078214571Sdim { 0, 0, 0, 0 }, 2079214571Sdim { { MNEM, ' ', OP (RNC), ',', OP (ZERO), '(', OP (RMA), ')', 0 } }, 2080214571Sdim & ifmt_sb16_0, { 0x8 } 2081214571Sdim }, 2082214571Sdim/* sh $rns,$zero($rma) */ 2083214571Sdim { 2084214571Sdim { 0, 0, 0, 0 }, 2085214571Sdim { { MNEM, ' ', OP (RNS), ',', OP (ZERO), '(', OP (RMA), ')', 0 } }, 2086214571Sdim & ifmt_sh16_0, { 0x9 } 2087214571Sdim }, 2088214571Sdim/* sw $rnl,$zero($rma) */ 2089214571Sdim { 2090214571Sdim { 0, 0, 0, 0 }, 2091214571Sdim { { MNEM, ' ', OP (RNL), ',', OP (ZERO), '(', OP (RMA), ')', 0 } }, 2092214571Sdim & ifmt_sw16_0, { 0xa } 2093214571Sdim }, 2094214571Sdim/* lb $rnc,$zero($rma) */ 2095214571Sdim { 2096214571Sdim { 0, 0, 0, 0 }, 2097214571Sdim { { MNEM, ' ', OP (RNC), ',', OP (ZERO), '(', OP (RMA), ')', 0 } }, 2098214571Sdim & ifmt_lb16_0, { 0xc } 2099214571Sdim }, 2100214571Sdim/* lh $rns,$zero($rma) */ 2101214571Sdim { 2102214571Sdim { 0, 0, 0, 0 }, 2103214571Sdim { { MNEM, ' ', OP (RNS), ',', OP (ZERO), '(', OP (RMA), ')', 0 } }, 2104214571Sdim & ifmt_lh16_0, { 0xd } 2105214571Sdim }, 2106214571Sdim/* lw $rnl,$zero($rma) */ 2107214571Sdim { 2108214571Sdim { 0, 0, 0, 0 }, 2109214571Sdim { { MNEM, ' ', OP (RNL), ',', OP (ZERO), '(', OP (RMA), ')', 0 } }, 2110214571Sdim & ifmt_lw16_0, { 0xe } 2111214571Sdim }, 2112214571Sdim/* lbu $rnuc,$zero($rma) */ 2113214571Sdim { 2114214571Sdim { 0, 0, 0, 0 }, 2115214571Sdim { { MNEM, ' ', OP (RNUC), ',', OP (ZERO), '(', OP (RMA), ')', 0 } }, 2116214571Sdim & ifmt_lbu16_0, { 0xb } 2117214571Sdim }, 2118214571Sdim/* lhu $rnus,$zero($rma) */ 2119214571Sdim { 2120214571Sdim { 0, 0, 0, 0 }, 2121214571Sdim { { MNEM, ' ', OP (RNUS), ',', OP (ZERO), '(', OP (RMA), ')', 0 } }, 2122214571Sdim & ifmt_lhu16_0, { 0xf } 2123214571Sdim }, 2124214571Sdim/* swcp $crn,$zero($rma) */ 2125214571Sdim { 2126214571Sdim { 0, 0, 0, 0 }, 2127214571Sdim { { MNEM, ' ', OP (CRN), ',', OP (ZERO), '(', OP (RMA), ')', 0 } }, 2128214571Sdim & ifmt_swcp16_0, { 0x3008 } 2129214571Sdim }, 2130214571Sdim/* lwcp $crn,$zero($rma) */ 2131214571Sdim { 2132214571Sdim { 0, 0, 0, 0 }, 2133214571Sdim { { MNEM, ' ', OP (CRN), ',', OP (ZERO), '(', OP (RMA), ')', 0 } }, 2134214571Sdim & ifmt_lwcp16_0, { 0x3009 } 2135214571Sdim }, 2136214571Sdim/* smcp $crn64,$zero($rma) */ 2137214571Sdim { 2138214571Sdim { 0, 0, 0, 0 }, 2139214571Sdim { { MNEM, ' ', OP (CRN64), ',', OP (ZERO), '(', OP (RMA), ')', 0 } }, 2140214571Sdim & ifmt_smcp16_0, { 0x300a } 2141214571Sdim }, 2142214571Sdim/* lmcp $crn64,$zero($rma) */ 2143214571Sdim { 2144214571Sdim { 0, 0, 0, 0 }, 2145214571Sdim { { MNEM, ' ', OP (CRN64), ',', OP (ZERO), '(', OP (RMA), ')', 0 } }, 2146214571Sdim & ifmt_lmcp16_0, { 0x300b } 2147214571Sdim }, 2148214571Sdim}; 2149214571Sdim 2150214571Sdim#undef A 2151214571Sdim#undef OPERAND 2152214571Sdim#undef MNEM 2153214571Sdim#undef OP 2154214571Sdim 2155214571Sdim#ifndef CGEN_ASM_HASH_P 2156214571Sdim#define CGEN_ASM_HASH_P(insn) 1 2157214571Sdim#endif 2158214571Sdim 2159214571Sdim#ifndef CGEN_DIS_HASH_P 2160214571Sdim#define CGEN_DIS_HASH_P(insn) 1 2161214571Sdim#endif 2162214571Sdim 2163214571Sdim/* Return non-zero if INSN is to be added to the hash table. 2164214571Sdim Targets are free to override CGEN_{ASM,DIS}_HASH_P in the .opc file. */ 2165214571Sdim 2166214571Sdimstatic int 2167214571Sdimasm_hash_insn_p (insn) 2168214571Sdim const CGEN_INSN *insn ATTRIBUTE_UNUSED; 2169214571Sdim{ 2170214571Sdim return CGEN_ASM_HASH_P (insn); 2171214571Sdim} 2172214571Sdim 2173214571Sdimstatic int 2174214571Sdimdis_hash_insn_p (insn) 2175214571Sdim const CGEN_INSN *insn; 2176214571Sdim{ 2177214571Sdim /* If building the hash table and the NO-DIS attribute is present, 2178214571Sdim ignore. */ 2179214571Sdim if (CGEN_INSN_ATTR_VALUE (insn, CGEN_INSN_NO_DIS)) 2180214571Sdim return 0; 2181214571Sdim return CGEN_DIS_HASH_P (insn); 2182214571Sdim} 2183214571Sdim 2184214571Sdim#ifndef CGEN_ASM_HASH 2185214571Sdim#define CGEN_ASM_HASH_SIZE 127 2186214571Sdim#ifdef CGEN_MNEMONIC_OPERANDS 2187214571Sdim#define CGEN_ASM_HASH(mnem) (*(unsigned char *) (mnem) % CGEN_ASM_HASH_SIZE) 2188214571Sdim#else 2189214571Sdim#define CGEN_ASM_HASH(mnem) (*(unsigned char *) (mnem) % CGEN_ASM_HASH_SIZE) /*FIXME*/ 2190214571Sdim#endif 2191214571Sdim#endif 2192214571Sdim 2193214571Sdim/* It doesn't make much sense to provide a default here, 2194214571Sdim but while this is under development we do. 2195214571Sdim BUFFER is a pointer to the bytes of the insn, target order. 2196214571Sdim VALUE is the first base_insn_bitsize bits as an int in host order. */ 2197214571Sdim 2198214571Sdim#ifndef CGEN_DIS_HASH 2199214571Sdim#define CGEN_DIS_HASH_SIZE 256 2200214571Sdim#define CGEN_DIS_HASH(buf, value) (*(unsigned char *) (buf)) 2201214571Sdim#endif 2202214571Sdim 2203214571Sdim/* The result is the hash value of the insn. 2204214571Sdim Targets are free to override CGEN_{ASM,DIS}_HASH in the .opc file. */ 2205214571Sdim 2206214571Sdimstatic unsigned int 2207214571Sdimasm_hash_insn (mnem) 2208214571Sdim const char * mnem; 2209214571Sdim{ 2210214571Sdim return CGEN_ASM_HASH (mnem); 2211214571Sdim} 2212214571Sdim 2213214571Sdim/* BUF is a pointer to the bytes of the insn, target order. 2214214571Sdim VALUE is the first base_insn_bitsize bits as an int in host order. */ 2215214571Sdim 2216214571Sdimstatic unsigned int 2217214571Sdimdis_hash_insn (buf, value) 2218214571Sdim const char * buf ATTRIBUTE_UNUSED; 2219214571Sdim CGEN_INSN_INT value ATTRIBUTE_UNUSED; 2220214571Sdim{ 2221214571Sdim return CGEN_DIS_HASH (buf, value); 2222214571Sdim} 2223214571Sdim 2224214571Sdim/* Set the recorded length of the insn in the CGEN_FIELDS struct. */ 2225214571Sdim 2226214571Sdimstatic void 2227214571Sdimset_fields_bitsize (CGEN_FIELDS *fields, int size) 2228214571Sdim{ 2229214571Sdim CGEN_FIELDS_BITSIZE (fields) = size; 2230214571Sdim} 2231214571Sdim 2232214571Sdim/* Function to call before using the operand instance table. 2233214571Sdim This plugs the opcode entries and macro instructions into the cpu table. */ 2234214571Sdim 2235214571Sdimvoid 2236214571Sdimmep_cgen_init_opcode_table (CGEN_CPU_DESC cd) 2237214571Sdim{ 2238214571Sdim int i; 2239214571Sdim int num_macros = (sizeof (mep_cgen_macro_insn_table) / 2240214571Sdim sizeof (mep_cgen_macro_insn_table[0])); 2241214571Sdim const CGEN_IBASE *ib = & mep_cgen_macro_insn_table[0]; 2242214571Sdim const CGEN_OPCODE *oc = & mep_cgen_macro_insn_opcode_table[0]; 2243214571Sdim CGEN_INSN *insns = xmalloc (num_macros * sizeof (CGEN_INSN)); 2244214571Sdim 2245214571Sdim memset (insns, 0, num_macros * sizeof (CGEN_INSN)); 2246214571Sdim for (i = 0; i < num_macros; ++i) 2247214571Sdim { 2248214571Sdim insns[i].base = &ib[i]; 2249214571Sdim insns[i].opcode = &oc[i]; 2250214571Sdim mep_cgen_build_insn_regex (& insns[i]); 2251214571Sdim } 2252214571Sdim cd->macro_insn_table.init_entries = insns; 2253214571Sdim cd->macro_insn_table.entry_size = sizeof (CGEN_IBASE); 2254214571Sdim cd->macro_insn_table.num_init_entries = num_macros; 2255214571Sdim 2256214571Sdim oc = & mep_cgen_insn_opcode_table[0]; 2257214571Sdim insns = (CGEN_INSN *) cd->insn_table.init_entries; 2258214571Sdim for (i = 0; i < MAX_INSNS; ++i) 2259214571Sdim { 2260214571Sdim insns[i].opcode = &oc[i]; 2261214571Sdim mep_cgen_build_insn_regex (& insns[i]); 2262214571Sdim } 2263214571Sdim 2264214571Sdim cd->sizeof_fields = sizeof (CGEN_FIELDS); 2265214571Sdim cd->set_fields_bitsize = set_fields_bitsize; 2266214571Sdim 2267214571Sdim cd->asm_hash_p = asm_hash_insn_p; 2268214571Sdim cd->asm_hash = asm_hash_insn; 2269214571Sdim cd->asm_hash_size = CGEN_ASM_HASH_SIZE; 2270214571Sdim 2271214571Sdim cd->dis_hash_p = dis_hash_insn_p; 2272214571Sdim cd->dis_hash = dis_hash_insn; 2273214571Sdim cd->dis_hash_size = CGEN_DIS_HASH_SIZE; 2274214571Sdim} 2275