1 1.1.1.5 christos /* DO NOT EDIT! -*- buffer-read-only: t -*- vi:set ro: */ 2 1.1 skrll /* Instruction opcode table for fr30. 3 1.1 skrll 4 1.1 skrll THIS FILE IS MACHINE GENERATED WITH CGEN. 5 1.1 skrll 6 1.1.1.10 christos Copyright (C) 1996-2026 Free Software Foundation, Inc. 7 1.1 skrll 8 1.1 skrll This file is part of the GNU Binutils and/or GDB, the GNU debugger. 9 1.1 skrll 10 1.1 skrll This file is free software; you can redistribute it and/or modify 11 1.1 skrll it under the terms of the GNU General Public License as published by 12 1.1 skrll the Free Software Foundation; either version 3, or (at your option) 13 1.1 skrll any later version. 14 1.1 skrll 15 1.1 skrll It is distributed in the hope that it will be useful, but WITHOUT 16 1.1 skrll ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 17 1.1 skrll or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public 18 1.1 skrll License for more details. 19 1.1 skrll 20 1.1 skrll You should have received a copy of the GNU General Public License along 21 1.1 skrll with this program; if not, write to the Free Software Foundation, Inc., 22 1.1 skrll 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. 23 1.1 skrll 24 1.1 skrll */ 25 1.1 skrll 26 1.1 skrll #include "sysdep.h" 27 1.1 skrll #include "ansidecl.h" 28 1.1 skrll #include "bfd.h" 29 1.1 skrll #include "symcat.h" 30 1.1 skrll #include "fr30-desc.h" 31 1.1 skrll #include "fr30-opc.h" 32 1.1 skrll #include "libiberty.h" 33 1.1 skrll 34 1.1 skrll /* The hash functions are recorded here to help keep assembler code out of 35 1.1 skrll the disassembler and vice versa. */ 36 1.1 skrll 37 1.1 skrll static int asm_hash_insn_p (const CGEN_INSN *); 38 1.1 skrll static unsigned int asm_hash_insn (const char *); 39 1.1 skrll static int dis_hash_insn_p (const CGEN_INSN *); 40 1.1 skrll static unsigned int dis_hash_insn (const char *, CGEN_INSN_INT); 41 1.1 skrll 42 1.1 skrll /* Instruction formats. */ 43 1.1 skrll 44 1.1 skrll #define F(f) & fr30_cgen_ifld_table[FR30_##f] 45 1.1 skrll static const CGEN_IFMT ifmt_empty ATTRIBUTE_UNUSED = { 46 1.1 skrll 0, 0, 0x0, { { 0 } } 47 1.1 skrll }; 48 1.1 skrll 49 1.1 skrll static const CGEN_IFMT ifmt_add ATTRIBUTE_UNUSED = { 50 1.1 skrll 16, 16, 0xff00, { { F (F_OP1) }, { F (F_OP2) }, { F (F_RJ) }, { F (F_RI) }, { 0 } } 51 1.1 skrll }; 52 1.1 skrll 53 1.1 skrll static const CGEN_IFMT ifmt_addi ATTRIBUTE_UNUSED = { 54 1.1 skrll 16, 16, 0xff00, { { F (F_OP1) }, { F (F_OP2) }, { F (F_U4) }, { F (F_RI) }, { 0 } } 55 1.1 skrll }; 56 1.1 skrll 57 1.1 skrll static const CGEN_IFMT ifmt_add2 ATTRIBUTE_UNUSED = { 58 1.1 skrll 16, 16, 0xff00, { { F (F_OP1) }, { F (F_OP2) }, { F (F_M4) }, { F (F_RI) }, { 0 } } 59 1.1 skrll }; 60 1.1 skrll 61 1.1 skrll static const CGEN_IFMT ifmt_div0s ATTRIBUTE_UNUSED = { 62 1.1 skrll 16, 16, 0xfff0, { { F (F_OP1) }, { F (F_OP2) }, { F (F_OP3) }, { F (F_RI) }, { 0 } } 63 1.1 skrll }; 64 1.1 skrll 65 1.1 skrll static const CGEN_IFMT ifmt_div3 ATTRIBUTE_UNUSED = { 66 1.1 skrll 16, 16, 0xffff, { { F (F_OP1) }, { F (F_OP2) }, { F (F_OP3) }, { F (F_OP4) }, { 0 } } 67 1.1 skrll }; 68 1.1 skrll 69 1.1 skrll static const CGEN_IFMT ifmt_ldi8 ATTRIBUTE_UNUSED = { 70 1.1 skrll 16, 16, 0xf000, { { F (F_OP1) }, { F (F_I8) }, { F (F_RI) }, { 0 } } 71 1.1 skrll }; 72 1.1 skrll 73 1.1 skrll static const CGEN_IFMT ifmt_ldi20 ATTRIBUTE_UNUSED = { 74 1.1 skrll 16, 32, 0xff00, { { F (F_OP1) }, { F (F_I20) }, { F (F_OP2) }, { F (F_RI) }, { 0 } } 75 1.1 skrll }; 76 1.1 skrll 77 1.1 skrll static const CGEN_IFMT ifmt_ldi32 ATTRIBUTE_UNUSED = { 78 1.1 skrll 16, 48, 0xfff0, { { F (F_OP1) }, { F (F_I32) }, { F (F_OP2) }, { F (F_OP3) }, { F (F_RI) }, { 0 } } 79 1.1 skrll }; 80 1.1 skrll 81 1.1 skrll static const CGEN_IFMT ifmt_ldr14 ATTRIBUTE_UNUSED = { 82 1.1 skrll 16, 16, 0xf000, { { F (F_OP1) }, { F (F_DISP10) }, { F (F_RI) }, { 0 } } 83 1.1 skrll }; 84 1.1 skrll 85 1.1 skrll static const CGEN_IFMT ifmt_ldr14uh ATTRIBUTE_UNUSED = { 86 1.1 skrll 16, 16, 0xf000, { { F (F_OP1) }, { F (F_DISP9) }, { F (F_RI) }, { 0 } } 87 1.1 skrll }; 88 1.1 skrll 89 1.1 skrll static const CGEN_IFMT ifmt_ldr14ub ATTRIBUTE_UNUSED = { 90 1.1 skrll 16, 16, 0xf000, { { F (F_OP1) }, { F (F_DISP8) }, { F (F_RI) }, { 0 } } 91 1.1 skrll }; 92 1.1 skrll 93 1.1 skrll static const CGEN_IFMT ifmt_ldr15 ATTRIBUTE_UNUSED = { 94 1.1 skrll 16, 16, 0xff00, { { F (F_OP1) }, { F (F_OP2) }, { F (F_UDISP6) }, { F (F_RI) }, { 0 } } 95 1.1 skrll }; 96 1.1 skrll 97 1.1 skrll static const CGEN_IFMT ifmt_ldr15dr ATTRIBUTE_UNUSED = { 98 1.1 skrll 16, 16, 0xfff0, { { F (F_OP1) }, { F (F_OP2) }, { F (F_OP3) }, { F (F_RS2) }, { 0 } } 99 1.1 skrll }; 100 1.1 skrll 101 1.1 skrll static const CGEN_IFMT ifmt_movdr ATTRIBUTE_UNUSED = { 102 1.1 skrll 16, 16, 0xff00, { { F (F_OP1) }, { F (F_OP2) }, { F (F_RS1) }, { F (F_RI) }, { 0 } } 103 1.1 skrll }; 104 1.1 skrll 105 1.1 skrll static const CGEN_IFMT ifmt_call ATTRIBUTE_UNUSED = { 106 1.1 skrll 16, 16, 0xf800, { { F (F_OP1) }, { F (F_OP5) }, { F (F_REL12) }, { 0 } } 107 1.1 skrll }; 108 1.1 skrll 109 1.1 skrll static const CGEN_IFMT ifmt_int ATTRIBUTE_UNUSED = { 110 1.1 skrll 16, 16, 0xff00, { { F (F_OP1) }, { F (F_OP2) }, { F (F_U8) }, { 0 } } 111 1.1 skrll }; 112 1.1 skrll 113 1.1 skrll static const CGEN_IFMT ifmt_brad ATTRIBUTE_UNUSED = { 114 1.1 skrll 16, 16, 0xff00, { { F (F_OP1) }, { F (F_CC) }, { F (F_REL9) }, { 0 } } 115 1.1 skrll }; 116 1.1 skrll 117 1.1 skrll static const CGEN_IFMT ifmt_dmovr13 ATTRIBUTE_UNUSED = { 118 1.1 skrll 16, 16, 0xff00, { { F (F_OP1) }, { F (F_OP2) }, { F (F_DIR10) }, { 0 } } 119 1.1 skrll }; 120 1.1 skrll 121 1.1 skrll static const CGEN_IFMT ifmt_dmovr13h ATTRIBUTE_UNUSED = { 122 1.1 skrll 16, 16, 0xff00, { { F (F_OP1) }, { F (F_OP2) }, { F (F_DIR9) }, { 0 } } 123 1.1 skrll }; 124 1.1 skrll 125 1.1 skrll static const CGEN_IFMT ifmt_dmovr13b ATTRIBUTE_UNUSED = { 126 1.1 skrll 16, 16, 0xff00, { { F (F_OP1) }, { F (F_OP2) }, { F (F_DIR8) }, { 0 } } 127 1.1 skrll }; 128 1.1 skrll 129 1.1 skrll static const CGEN_IFMT ifmt_copop ATTRIBUTE_UNUSED = { 130 1.1 skrll 16, 32, 0xfff0, { { F (F_OP1) }, { F (F_CCC) }, { F (F_OP2) }, { F (F_OP3) }, { F (F_CRJ) }, { F (F_U4C) }, { F (F_CRI) }, { 0 } } 131 1.1 skrll }; 132 1.1 skrll 133 1.1 skrll static const CGEN_IFMT ifmt_copld ATTRIBUTE_UNUSED = { 134 1.1 skrll 16, 32, 0xfff0, { { F (F_OP1) }, { F (F_CCC) }, { F (F_OP2) }, { F (F_OP3) }, { F (F_RJC) }, { F (F_U4C) }, { F (F_CRI) }, { 0 } } 135 1.1 skrll }; 136 1.1 skrll 137 1.1 skrll static const CGEN_IFMT ifmt_copst ATTRIBUTE_UNUSED = { 138 1.1 skrll 16, 32, 0xfff0, { { F (F_OP1) }, { F (F_CCC) }, { F (F_OP2) }, { F (F_OP3) }, { F (F_CRJ) }, { F (F_U4C) }, { F (F_RIC) }, { 0 } } 139 1.1 skrll }; 140 1.1 skrll 141 1.1 skrll static const CGEN_IFMT ifmt_addsp ATTRIBUTE_UNUSED = { 142 1.1 skrll 16, 16, 0xff00, { { F (F_OP1) }, { F (F_OP2) }, { F (F_S10) }, { 0 } } 143 1.1 skrll }; 144 1.1 skrll 145 1.1 skrll static const CGEN_IFMT ifmt_ldm0 ATTRIBUTE_UNUSED = { 146 1.1 skrll 16, 16, 0xff00, { { F (F_OP1) }, { F (F_OP2) }, { F (F_REGLIST_LOW_LD) }, { 0 } } 147 1.1 skrll }; 148 1.1 skrll 149 1.1 skrll static const CGEN_IFMT ifmt_ldm1 ATTRIBUTE_UNUSED = { 150 1.1 skrll 16, 16, 0xff00, { { F (F_OP1) }, { F (F_OP2) }, { F (F_REGLIST_HI_LD) }, { 0 } } 151 1.1 skrll }; 152 1.1 skrll 153 1.1 skrll static const CGEN_IFMT ifmt_stm0 ATTRIBUTE_UNUSED = { 154 1.1 skrll 16, 16, 0xff00, { { F (F_OP1) }, { F (F_OP2) }, { F (F_REGLIST_LOW_ST) }, { 0 } } 155 1.1 skrll }; 156 1.1 skrll 157 1.1 skrll static const CGEN_IFMT ifmt_stm1 ATTRIBUTE_UNUSED = { 158 1.1 skrll 16, 16, 0xff00, { { F (F_OP1) }, { F (F_OP2) }, { F (F_REGLIST_HI_ST) }, { 0 } } 159 1.1 skrll }; 160 1.1 skrll 161 1.1 skrll static const CGEN_IFMT ifmt_enter ATTRIBUTE_UNUSED = { 162 1.1 skrll 16, 16, 0xff00, { { F (F_OP1) }, { F (F_OP2) }, { F (F_U10) }, { 0 } } 163 1.1 skrll }; 164 1.1 skrll 165 1.1 skrll #undef F 166 1.1 skrll 167 1.1 skrll #define A(a) (1 << CGEN_INSN_##a) 168 1.1 skrll #define OPERAND(op) FR30_OPERAND_##op 169 1.1 skrll #define MNEM CGEN_SYNTAX_MNEMONIC /* syntax value for mnemonic */ 170 1.1 skrll #define OP(field) CGEN_SYNTAX_MAKE_FIELD (OPERAND (field)) 171 1.1 skrll 172 1.1 skrll /* The instruction table. */ 173 1.1 skrll 174 1.1 skrll static const CGEN_OPCODE fr30_cgen_insn_opcode_table[MAX_INSNS] = 175 1.1 skrll { 176 1.1 skrll /* Special null first entry. 177 1.1 skrll A `num' value of zero is thus invalid. 178 1.1 skrll Also, the special `invalid' insn resides here. */ 179 1.1 skrll { { 0, 0, 0, 0 }, {{0}}, 0, {0}}, 180 1.1 skrll /* add $Rj,$Ri */ 181 1.1 skrll { 182 1.1 skrll { 0, 0, 0, 0 }, 183 1.1 skrll { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } }, 184 1.1 skrll & ifmt_add, { 0xa600 } 185 1.1 skrll }, 186 1.1 skrll /* add $u4,$Ri */ 187 1.1 skrll { 188 1.1 skrll { 0, 0, 0, 0 }, 189 1.1 skrll { { MNEM, ' ', OP (U4), ',', OP (RI), 0 } }, 190 1.1 skrll & ifmt_addi, { 0xa400 } 191 1.1 skrll }, 192 1.1 skrll /* add2 $m4,$Ri */ 193 1.1 skrll { 194 1.1 skrll { 0, 0, 0, 0 }, 195 1.1 skrll { { MNEM, ' ', OP (M4), ',', OP (RI), 0 } }, 196 1.1 skrll & ifmt_add2, { 0xa500 } 197 1.1 skrll }, 198 1.1 skrll /* addc $Rj,$Ri */ 199 1.1 skrll { 200 1.1 skrll { 0, 0, 0, 0 }, 201 1.1 skrll { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } }, 202 1.1 skrll & ifmt_add, { 0xa700 } 203 1.1 skrll }, 204 1.1 skrll /* addn $Rj,$Ri */ 205 1.1 skrll { 206 1.1 skrll { 0, 0, 0, 0 }, 207 1.1 skrll { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } }, 208 1.1 skrll & ifmt_add, { 0xa200 } 209 1.1 skrll }, 210 1.1 skrll /* addn $u4,$Ri */ 211 1.1 skrll { 212 1.1 skrll { 0, 0, 0, 0 }, 213 1.1 skrll { { MNEM, ' ', OP (U4), ',', OP (RI), 0 } }, 214 1.1 skrll & ifmt_addi, { 0xa000 } 215 1.1 skrll }, 216 1.1 skrll /* addn2 $m4,$Ri */ 217 1.1 skrll { 218 1.1 skrll { 0, 0, 0, 0 }, 219 1.1 skrll { { MNEM, ' ', OP (M4), ',', OP (RI), 0 } }, 220 1.1 skrll & ifmt_add2, { 0xa100 } 221 1.1 skrll }, 222 1.1 skrll /* sub $Rj,$Ri */ 223 1.1 skrll { 224 1.1 skrll { 0, 0, 0, 0 }, 225 1.1 skrll { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } }, 226 1.1 skrll & ifmt_add, { 0xac00 } 227 1.1 skrll }, 228 1.1 skrll /* subc $Rj,$Ri */ 229 1.1 skrll { 230 1.1 skrll { 0, 0, 0, 0 }, 231 1.1 skrll { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } }, 232 1.1 skrll & ifmt_add, { 0xad00 } 233 1.1 skrll }, 234 1.1 skrll /* subn $Rj,$Ri */ 235 1.1 skrll { 236 1.1 skrll { 0, 0, 0, 0 }, 237 1.1 skrll { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } }, 238 1.1 skrll & ifmt_add, { 0xae00 } 239 1.1 skrll }, 240 1.1 skrll /* cmp $Rj,$Ri */ 241 1.1 skrll { 242 1.1 skrll { 0, 0, 0, 0 }, 243 1.1 skrll { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } }, 244 1.1 skrll & ifmt_add, { 0xaa00 } 245 1.1 skrll }, 246 1.1 skrll /* cmp $u4,$Ri */ 247 1.1 skrll { 248 1.1 skrll { 0, 0, 0, 0 }, 249 1.1 skrll { { MNEM, ' ', OP (U4), ',', OP (RI), 0 } }, 250 1.1 skrll & ifmt_addi, { 0xa800 } 251 1.1 skrll }, 252 1.1 skrll /* cmp2 $m4,$Ri */ 253 1.1 skrll { 254 1.1 skrll { 0, 0, 0, 0 }, 255 1.1 skrll { { MNEM, ' ', OP (M4), ',', OP (RI), 0 } }, 256 1.1 skrll & ifmt_add2, { 0xa900 } 257 1.1 skrll }, 258 1.1 skrll /* and $Rj,$Ri */ 259 1.1 skrll { 260 1.1 skrll { 0, 0, 0, 0 }, 261 1.1 skrll { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } }, 262 1.1 skrll & ifmt_add, { 0x8200 } 263 1.1 skrll }, 264 1.1 skrll /* or $Rj,$Ri */ 265 1.1 skrll { 266 1.1 skrll { 0, 0, 0, 0 }, 267 1.1 skrll { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } }, 268 1.1 skrll & ifmt_add, { 0x9200 } 269 1.1 skrll }, 270 1.1 skrll /* eor $Rj,$Ri */ 271 1.1 skrll { 272 1.1 skrll { 0, 0, 0, 0 }, 273 1.1 skrll { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } }, 274 1.1 skrll & ifmt_add, { 0x9a00 } 275 1.1 skrll }, 276 1.1 skrll /* and $Rj,@$Ri */ 277 1.1 skrll { 278 1.1 skrll { 0, 0, 0, 0 }, 279 1.1 skrll { { MNEM, ' ', OP (RJ), ',', '@', OP (RI), 0 } }, 280 1.1 skrll & ifmt_add, { 0x8400 } 281 1.1 skrll }, 282 1.1 skrll /* andh $Rj,@$Ri */ 283 1.1 skrll { 284 1.1 skrll { 0, 0, 0, 0 }, 285 1.1 skrll { { MNEM, ' ', OP (RJ), ',', '@', OP (RI), 0 } }, 286 1.1 skrll & ifmt_add, { 0x8500 } 287 1.1 skrll }, 288 1.1 skrll /* andb $Rj,@$Ri */ 289 1.1 skrll { 290 1.1 skrll { 0, 0, 0, 0 }, 291 1.1 skrll { { MNEM, ' ', OP (RJ), ',', '@', OP (RI), 0 } }, 292 1.1 skrll & ifmt_add, { 0x8600 } 293 1.1 skrll }, 294 1.1 skrll /* or $Rj,@$Ri */ 295 1.1 skrll { 296 1.1 skrll { 0, 0, 0, 0 }, 297 1.1 skrll { { MNEM, ' ', OP (RJ), ',', '@', OP (RI), 0 } }, 298 1.1 skrll & ifmt_add, { 0x9400 } 299 1.1 skrll }, 300 1.1 skrll /* orh $Rj,@$Ri */ 301 1.1 skrll { 302 1.1 skrll { 0, 0, 0, 0 }, 303 1.1 skrll { { MNEM, ' ', OP (RJ), ',', '@', OP (RI), 0 } }, 304 1.1 skrll & ifmt_add, { 0x9500 } 305 1.1 skrll }, 306 1.1 skrll /* orb $Rj,@$Ri */ 307 1.1 skrll { 308 1.1 skrll { 0, 0, 0, 0 }, 309 1.1 skrll { { MNEM, ' ', OP (RJ), ',', '@', OP (RI), 0 } }, 310 1.1 skrll & ifmt_add, { 0x9600 } 311 1.1 skrll }, 312 1.1 skrll /* eor $Rj,@$Ri */ 313 1.1 skrll { 314 1.1 skrll { 0, 0, 0, 0 }, 315 1.1 skrll { { MNEM, ' ', OP (RJ), ',', '@', OP (RI), 0 } }, 316 1.1 skrll & ifmt_add, { 0x9c00 } 317 1.1 skrll }, 318 1.1 skrll /* eorh $Rj,@$Ri */ 319 1.1 skrll { 320 1.1 skrll { 0, 0, 0, 0 }, 321 1.1 skrll { { MNEM, ' ', OP (RJ), ',', '@', OP (RI), 0 } }, 322 1.1 skrll & ifmt_add, { 0x9d00 } 323 1.1 skrll }, 324 1.1 skrll /* eorb $Rj,@$Ri */ 325 1.1 skrll { 326 1.1 skrll { 0, 0, 0, 0 }, 327 1.1 skrll { { MNEM, ' ', OP (RJ), ',', '@', OP (RI), 0 } }, 328 1.1 skrll & ifmt_add, { 0x9e00 } 329 1.1 skrll }, 330 1.1 skrll /* bandl $u4,@$Ri */ 331 1.1 skrll { 332 1.1 skrll { 0, 0, 0, 0 }, 333 1.1 skrll { { MNEM, ' ', OP (U4), ',', '@', OP (RI), 0 } }, 334 1.1 skrll & ifmt_addi, { 0x8000 } 335 1.1 skrll }, 336 1.1 skrll /* borl $u4,@$Ri */ 337 1.1 skrll { 338 1.1 skrll { 0, 0, 0, 0 }, 339 1.1 skrll { { MNEM, ' ', OP (U4), ',', '@', OP (RI), 0 } }, 340 1.1 skrll & ifmt_addi, { 0x9000 } 341 1.1 skrll }, 342 1.1 skrll /* beorl $u4,@$Ri */ 343 1.1 skrll { 344 1.1 skrll { 0, 0, 0, 0 }, 345 1.1 skrll { { MNEM, ' ', OP (U4), ',', '@', OP (RI), 0 } }, 346 1.1 skrll & ifmt_addi, { 0x9800 } 347 1.1 skrll }, 348 1.1 skrll /* bandh $u4,@$Ri */ 349 1.1 skrll { 350 1.1 skrll { 0, 0, 0, 0 }, 351 1.1 skrll { { MNEM, ' ', OP (U4), ',', '@', OP (RI), 0 } }, 352 1.1 skrll & ifmt_addi, { 0x8100 } 353 1.1 skrll }, 354 1.1 skrll /* borh $u4,@$Ri */ 355 1.1 skrll { 356 1.1 skrll { 0, 0, 0, 0 }, 357 1.1 skrll { { MNEM, ' ', OP (U4), ',', '@', OP (RI), 0 } }, 358 1.1 skrll & ifmt_addi, { 0x9100 } 359 1.1 skrll }, 360 1.1 skrll /* beorh $u4,@$Ri */ 361 1.1 skrll { 362 1.1 skrll { 0, 0, 0, 0 }, 363 1.1 skrll { { MNEM, ' ', OP (U4), ',', '@', OP (RI), 0 } }, 364 1.1 skrll & ifmt_addi, { 0x9900 } 365 1.1 skrll }, 366 1.1 skrll /* btstl $u4,@$Ri */ 367 1.1 skrll { 368 1.1 skrll { 0, 0, 0, 0 }, 369 1.1 skrll { { MNEM, ' ', OP (U4), ',', '@', OP (RI), 0 } }, 370 1.1 skrll & ifmt_addi, { 0x8800 } 371 1.1 skrll }, 372 1.1 skrll /* btsth $u4,@$Ri */ 373 1.1 skrll { 374 1.1 skrll { 0, 0, 0, 0 }, 375 1.1 skrll { { MNEM, ' ', OP (U4), ',', '@', OP (RI), 0 } }, 376 1.1 skrll & ifmt_addi, { 0x8900 } 377 1.1 skrll }, 378 1.1 skrll /* mul $Rj,$Ri */ 379 1.1 skrll { 380 1.1 skrll { 0, 0, 0, 0 }, 381 1.1 skrll { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } }, 382 1.1 skrll & ifmt_add, { 0xaf00 } 383 1.1 skrll }, 384 1.1 skrll /* mulu $Rj,$Ri */ 385 1.1 skrll { 386 1.1 skrll { 0, 0, 0, 0 }, 387 1.1 skrll { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } }, 388 1.1 skrll & ifmt_add, { 0xab00 } 389 1.1 skrll }, 390 1.1 skrll /* mulh $Rj,$Ri */ 391 1.1 skrll { 392 1.1 skrll { 0, 0, 0, 0 }, 393 1.1 skrll { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } }, 394 1.1 skrll & ifmt_add, { 0xbf00 } 395 1.1 skrll }, 396 1.1 skrll /* muluh $Rj,$Ri */ 397 1.1 skrll { 398 1.1 skrll { 0, 0, 0, 0 }, 399 1.1 skrll { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } }, 400 1.1 skrll & ifmt_add, { 0xbb00 } 401 1.1 skrll }, 402 1.1 skrll /* div0s $Ri */ 403 1.1 skrll { 404 1.1 skrll { 0, 0, 0, 0 }, 405 1.1 skrll { { MNEM, ' ', OP (RI), 0 } }, 406 1.1 skrll & ifmt_div0s, { 0x9740 } 407 1.1 skrll }, 408 1.1 skrll /* div0u $Ri */ 409 1.1 skrll { 410 1.1 skrll { 0, 0, 0, 0 }, 411 1.1 skrll { { MNEM, ' ', OP (RI), 0 } }, 412 1.1 skrll & ifmt_div0s, { 0x9750 } 413 1.1 skrll }, 414 1.1 skrll /* div1 $Ri */ 415 1.1 skrll { 416 1.1 skrll { 0, 0, 0, 0 }, 417 1.1 skrll { { MNEM, ' ', OP (RI), 0 } }, 418 1.1 skrll & ifmt_div0s, { 0x9760 } 419 1.1 skrll }, 420 1.1 skrll /* div2 $Ri */ 421 1.1 skrll { 422 1.1 skrll { 0, 0, 0, 0 }, 423 1.1 skrll { { MNEM, ' ', OP (RI), 0 } }, 424 1.1 skrll & ifmt_div0s, { 0x9770 } 425 1.1 skrll }, 426 1.1 skrll /* div3 */ 427 1.1 skrll { 428 1.1 skrll { 0, 0, 0, 0 }, 429 1.1 skrll { { MNEM, 0 } }, 430 1.1 skrll & ifmt_div3, { 0x9f60 } 431 1.1 skrll }, 432 1.1 skrll /* div4s */ 433 1.1 skrll { 434 1.1 skrll { 0, 0, 0, 0 }, 435 1.1 skrll { { MNEM, 0 } }, 436 1.1 skrll & ifmt_div3, { 0x9f70 } 437 1.1 skrll }, 438 1.1 skrll /* lsl $Rj,$Ri */ 439 1.1 skrll { 440 1.1 skrll { 0, 0, 0, 0 }, 441 1.1 skrll { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } }, 442 1.1 skrll & ifmt_add, { 0xb600 } 443 1.1 skrll }, 444 1.1 skrll /* lsl $u4,$Ri */ 445 1.1 skrll { 446 1.1 skrll { 0, 0, 0, 0 }, 447 1.1 skrll { { MNEM, ' ', OP (U4), ',', OP (RI), 0 } }, 448 1.1 skrll & ifmt_addi, { 0xb400 } 449 1.1 skrll }, 450 1.1 skrll /* lsl2 $u4,$Ri */ 451 1.1 skrll { 452 1.1 skrll { 0, 0, 0, 0 }, 453 1.1 skrll { { MNEM, ' ', OP (U4), ',', OP (RI), 0 } }, 454 1.1 skrll & ifmt_addi, { 0xb500 } 455 1.1 skrll }, 456 1.1 skrll /* lsr $Rj,$Ri */ 457 1.1 skrll { 458 1.1 skrll { 0, 0, 0, 0 }, 459 1.1 skrll { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } }, 460 1.1 skrll & ifmt_add, { 0xb200 } 461 1.1 skrll }, 462 1.1 skrll /* lsr $u4,$Ri */ 463 1.1 skrll { 464 1.1 skrll { 0, 0, 0, 0 }, 465 1.1 skrll { { MNEM, ' ', OP (U4), ',', OP (RI), 0 } }, 466 1.1 skrll & ifmt_addi, { 0xb000 } 467 1.1 skrll }, 468 1.1 skrll /* lsr2 $u4,$Ri */ 469 1.1 skrll { 470 1.1 skrll { 0, 0, 0, 0 }, 471 1.1 skrll { { MNEM, ' ', OP (U4), ',', OP (RI), 0 } }, 472 1.1 skrll & ifmt_addi, { 0xb100 } 473 1.1 skrll }, 474 1.1 skrll /* asr $Rj,$Ri */ 475 1.1 skrll { 476 1.1 skrll { 0, 0, 0, 0 }, 477 1.1 skrll { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } }, 478 1.1 skrll & ifmt_add, { 0xba00 } 479 1.1 skrll }, 480 1.1 skrll /* asr $u4,$Ri */ 481 1.1 skrll { 482 1.1 skrll { 0, 0, 0, 0 }, 483 1.1 skrll { { MNEM, ' ', OP (U4), ',', OP (RI), 0 } }, 484 1.1 skrll & ifmt_addi, { 0xb800 } 485 1.1 skrll }, 486 1.1 skrll /* asr2 $u4,$Ri */ 487 1.1 skrll { 488 1.1 skrll { 0, 0, 0, 0 }, 489 1.1 skrll { { MNEM, ' ', OP (U4), ',', OP (RI), 0 } }, 490 1.1 skrll & ifmt_addi, { 0xb900 } 491 1.1 skrll }, 492 1.1 skrll /* ldi:8 $i8,$Ri */ 493 1.1 skrll { 494 1.1 skrll { 0, 0, 0, 0 }, 495 1.1 skrll { { MNEM, ' ', OP (I8), ',', OP (RI), 0 } }, 496 1.1 skrll & ifmt_ldi8, { 0xc000 } 497 1.1 skrll }, 498 1.1 skrll /* ldi:20 $i20,$Ri */ 499 1.1 skrll { 500 1.1 skrll { 0, 0, 0, 0 }, 501 1.1 skrll { { MNEM, ' ', OP (I20), ',', OP (RI), 0 } }, 502 1.1 skrll & ifmt_ldi20, { 0x9b00 } 503 1.1 skrll }, 504 1.1 skrll /* ldi:32 $i32,$Ri */ 505 1.1 skrll { 506 1.1 skrll { 0, 0, 0, 0 }, 507 1.1 skrll { { MNEM, ' ', OP (I32), ',', OP (RI), 0 } }, 508 1.1 skrll & ifmt_ldi32, { 0x9f80 } 509 1.1 skrll }, 510 1.1 skrll /* ld @$Rj,$Ri */ 511 1.1 skrll { 512 1.1 skrll { 0, 0, 0, 0 }, 513 1.1 skrll { { MNEM, ' ', '@', OP (RJ), ',', OP (RI), 0 } }, 514 1.1 skrll & ifmt_add, { 0x400 } 515 1.1 skrll }, 516 1.1 skrll /* lduh @$Rj,$Ri */ 517 1.1 skrll { 518 1.1 skrll { 0, 0, 0, 0 }, 519 1.1 skrll { { MNEM, ' ', '@', OP (RJ), ',', OP (RI), 0 } }, 520 1.1 skrll & ifmt_add, { 0x500 } 521 1.1 skrll }, 522 1.1 skrll /* ldub @$Rj,$Ri */ 523 1.1 skrll { 524 1.1 skrll { 0, 0, 0, 0 }, 525 1.1 skrll { { MNEM, ' ', '@', OP (RJ), ',', OP (RI), 0 } }, 526 1.1 skrll & ifmt_add, { 0x600 } 527 1.1 skrll }, 528 1.1 skrll /* ld @($R13,$Rj),$Ri */ 529 1.1 skrll { 530 1.1 skrll { 0, 0, 0, 0 }, 531 1.1 skrll { { MNEM, ' ', '@', '(', OP (R13), ',', OP (RJ), ')', ',', OP (RI), 0 } }, 532 1.1 skrll & ifmt_add, { 0x0 } 533 1.1 skrll }, 534 1.1 skrll /* lduh @($R13,$Rj),$Ri */ 535 1.1 skrll { 536 1.1 skrll { 0, 0, 0, 0 }, 537 1.1 skrll { { MNEM, ' ', '@', '(', OP (R13), ',', OP (RJ), ')', ',', OP (RI), 0 } }, 538 1.1 skrll & ifmt_add, { 0x100 } 539 1.1 skrll }, 540 1.1 skrll /* ldub @($R13,$Rj),$Ri */ 541 1.1 skrll { 542 1.1 skrll { 0, 0, 0, 0 }, 543 1.1 skrll { { MNEM, ' ', '@', '(', OP (R13), ',', OP (RJ), ')', ',', OP (RI), 0 } }, 544 1.1 skrll & ifmt_add, { 0x200 } 545 1.1 skrll }, 546 1.1 skrll /* ld @($R14,$disp10),$Ri */ 547 1.1 skrll { 548 1.1 skrll { 0, 0, 0, 0 }, 549 1.1 skrll { { MNEM, ' ', '@', '(', OP (R14), ',', OP (DISP10), ')', ',', OP (RI), 0 } }, 550 1.1 skrll & ifmt_ldr14, { 0x2000 } 551 1.1 skrll }, 552 1.1 skrll /* lduh @($R14,$disp9),$Ri */ 553 1.1 skrll { 554 1.1 skrll { 0, 0, 0, 0 }, 555 1.1 skrll { { MNEM, ' ', '@', '(', OP (R14), ',', OP (DISP9), ')', ',', OP (RI), 0 } }, 556 1.1 skrll & ifmt_ldr14uh, { 0x4000 } 557 1.1 skrll }, 558 1.1 skrll /* ldub @($R14,$disp8),$Ri */ 559 1.1 skrll { 560 1.1 skrll { 0, 0, 0, 0 }, 561 1.1 skrll { { MNEM, ' ', '@', '(', OP (R14), ',', OP (DISP8), ')', ',', OP (RI), 0 } }, 562 1.1 skrll & ifmt_ldr14ub, { 0x6000 } 563 1.1 skrll }, 564 1.1 skrll /* ld @($R15,$udisp6),$Ri */ 565 1.1 skrll { 566 1.1 skrll { 0, 0, 0, 0 }, 567 1.1 skrll { { MNEM, ' ', '@', '(', OP (R15), ',', OP (UDISP6), ')', ',', OP (RI), 0 } }, 568 1.1 skrll & ifmt_ldr15, { 0x300 } 569 1.1 skrll }, 570 1.1 skrll /* ld @$R15+,$Ri */ 571 1.1 skrll { 572 1.1 skrll { 0, 0, 0, 0 }, 573 1.1 skrll { { MNEM, ' ', '@', OP (R15), '+', ',', OP (RI), 0 } }, 574 1.1 skrll & ifmt_div0s, { 0x700 } 575 1.1 skrll }, 576 1.1 skrll /* ld @$R15+,$Rs2 */ 577 1.1 skrll { 578 1.1 skrll { 0, 0, 0, 0 }, 579 1.1 skrll { { MNEM, ' ', '@', OP (R15), '+', ',', OP (RS2), 0 } }, 580 1.1 skrll & ifmt_ldr15dr, { 0x780 } 581 1.1 skrll }, 582 1.1 skrll /* ld @$R15+,$ps */ 583 1.1 skrll { 584 1.1 skrll { 0, 0, 0, 0 }, 585 1.1 skrll { { MNEM, ' ', '@', OP (R15), '+', ',', OP (PS), 0 } }, 586 1.1 skrll & ifmt_div3, { 0x790 } 587 1.1 skrll }, 588 1.1 skrll /* st $Ri,@$Rj */ 589 1.1 skrll { 590 1.1 skrll { 0, 0, 0, 0 }, 591 1.1 skrll { { MNEM, ' ', OP (RI), ',', '@', OP (RJ), 0 } }, 592 1.1 skrll & ifmt_add, { 0x1400 } 593 1.1 skrll }, 594 1.1 skrll /* sth $Ri,@$Rj */ 595 1.1 skrll { 596 1.1 skrll { 0, 0, 0, 0 }, 597 1.1 skrll { { MNEM, ' ', OP (RI), ',', '@', OP (RJ), 0 } }, 598 1.1 skrll & ifmt_add, { 0x1500 } 599 1.1 skrll }, 600 1.1 skrll /* stb $Ri,@$Rj */ 601 1.1 skrll { 602 1.1 skrll { 0, 0, 0, 0 }, 603 1.1 skrll { { MNEM, ' ', OP (RI), ',', '@', OP (RJ), 0 } }, 604 1.1 skrll & ifmt_add, { 0x1600 } 605 1.1 skrll }, 606 1.1 skrll /* st $Ri,@($R13,$Rj) */ 607 1.1 skrll { 608 1.1 skrll { 0, 0, 0, 0 }, 609 1.1 skrll { { MNEM, ' ', OP (RI), ',', '@', '(', OP (R13), ',', OP (RJ), ')', 0 } }, 610 1.1 skrll & ifmt_add, { 0x1000 } 611 1.1 skrll }, 612 1.1 skrll /* sth $Ri,@($R13,$Rj) */ 613 1.1 skrll { 614 1.1 skrll { 0, 0, 0, 0 }, 615 1.1 skrll { { MNEM, ' ', OP (RI), ',', '@', '(', OP (R13), ',', OP (RJ), ')', 0 } }, 616 1.1 skrll & ifmt_add, { 0x1100 } 617 1.1 skrll }, 618 1.1 skrll /* stb $Ri,@($R13,$Rj) */ 619 1.1 skrll { 620 1.1 skrll { 0, 0, 0, 0 }, 621 1.1 skrll { { MNEM, ' ', OP (RI), ',', '@', '(', OP (R13), ',', OP (RJ), ')', 0 } }, 622 1.1 skrll & ifmt_add, { 0x1200 } 623 1.1 skrll }, 624 1.1 skrll /* st $Ri,@($R14,$disp10) */ 625 1.1 skrll { 626 1.1 skrll { 0, 0, 0, 0 }, 627 1.1 skrll { { MNEM, ' ', OP (RI), ',', '@', '(', OP (R14), ',', OP (DISP10), ')', 0 } }, 628 1.1 skrll & ifmt_ldr14, { 0x3000 } 629 1.1 skrll }, 630 1.1 skrll /* sth $Ri,@($R14,$disp9) */ 631 1.1 skrll { 632 1.1 skrll { 0, 0, 0, 0 }, 633 1.1 skrll { { MNEM, ' ', OP (RI), ',', '@', '(', OP (R14), ',', OP (DISP9), ')', 0 } }, 634 1.1 skrll & ifmt_ldr14uh, { 0x5000 } 635 1.1 skrll }, 636 1.1 skrll /* stb $Ri,@($R14,$disp8) */ 637 1.1 skrll { 638 1.1 skrll { 0, 0, 0, 0 }, 639 1.1 skrll { { MNEM, ' ', OP (RI), ',', '@', '(', OP (R14), ',', OP (DISP8), ')', 0 } }, 640 1.1 skrll & ifmt_ldr14ub, { 0x7000 } 641 1.1 skrll }, 642 1.1 skrll /* st $Ri,@($R15,$udisp6) */ 643 1.1 skrll { 644 1.1 skrll { 0, 0, 0, 0 }, 645 1.1 skrll { { MNEM, ' ', OP (RI), ',', '@', '(', OP (R15), ',', OP (UDISP6), ')', 0 } }, 646 1.1 skrll & ifmt_ldr15, { 0x1300 } 647 1.1 skrll }, 648 1.1 skrll /* st $Ri,@-$R15 */ 649 1.1 skrll { 650 1.1 skrll { 0, 0, 0, 0 }, 651 1.1 skrll { { MNEM, ' ', OP (RI), ',', '@', '-', OP (R15), 0 } }, 652 1.1 skrll & ifmt_div0s, { 0x1700 } 653 1.1 skrll }, 654 1.1 skrll /* st $Rs2,@-$R15 */ 655 1.1 skrll { 656 1.1 skrll { 0, 0, 0, 0 }, 657 1.1 skrll { { MNEM, ' ', OP (RS2), ',', '@', '-', OP (R15), 0 } }, 658 1.1 skrll & ifmt_ldr15dr, { 0x1780 } 659 1.1 skrll }, 660 1.1 skrll /* st $ps,@-$R15 */ 661 1.1 skrll { 662 1.1 skrll { 0, 0, 0, 0 }, 663 1.1 skrll { { MNEM, ' ', OP (PS), ',', '@', '-', OP (R15), 0 } }, 664 1.1 skrll & ifmt_div3, { 0x1790 } 665 1.1 skrll }, 666 1.1 skrll /* mov $Rj,$Ri */ 667 1.1 skrll { 668 1.1 skrll { 0, 0, 0, 0 }, 669 1.1 skrll { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } }, 670 1.1 skrll & ifmt_add, { 0x8b00 } 671 1.1 skrll }, 672 1.1 skrll /* mov $Rs1,$Ri */ 673 1.1 skrll { 674 1.1 skrll { 0, 0, 0, 0 }, 675 1.1 skrll { { MNEM, ' ', OP (RS1), ',', OP (RI), 0 } }, 676 1.1 skrll & ifmt_movdr, { 0xb700 } 677 1.1 skrll }, 678 1.1 skrll /* mov $ps,$Ri */ 679 1.1 skrll { 680 1.1 skrll { 0, 0, 0, 0 }, 681 1.1 skrll { { MNEM, ' ', OP (PS), ',', OP (RI), 0 } }, 682 1.1 skrll & ifmt_div0s, { 0x1710 } 683 1.1 skrll }, 684 1.1 skrll /* mov $Ri,$Rs1 */ 685 1.1 skrll { 686 1.1 skrll { 0, 0, 0, 0 }, 687 1.1 skrll { { MNEM, ' ', OP (RI), ',', OP (RS1), 0 } }, 688 1.1 skrll & ifmt_movdr, { 0xb300 } 689 1.1 skrll }, 690 1.1 skrll /* mov $Ri,$ps */ 691 1.1 skrll { 692 1.1 skrll { 0, 0, 0, 0 }, 693 1.1 skrll { { MNEM, ' ', OP (RI), ',', OP (PS), 0 } }, 694 1.1 skrll & ifmt_div0s, { 0x710 } 695 1.1 skrll }, 696 1.1 skrll /* jmp @$Ri */ 697 1.1 skrll { 698 1.1 skrll { 0, 0, 0, 0 }, 699 1.1 skrll { { MNEM, ' ', '@', OP (RI), 0 } }, 700 1.1 skrll & ifmt_div0s, { 0x9700 } 701 1.1 skrll }, 702 1.1 skrll /* jmp:d @$Ri */ 703 1.1 skrll { 704 1.1 skrll { 0, 0, 0, 0 }, 705 1.1 skrll { { MNEM, ' ', '@', OP (RI), 0 } }, 706 1.1 skrll & ifmt_div0s, { 0x9f00 } 707 1.1 skrll }, 708 1.1 skrll /* call @$Ri */ 709 1.1 skrll { 710 1.1 skrll { 0, 0, 0, 0 }, 711 1.1 skrll { { MNEM, ' ', '@', OP (RI), 0 } }, 712 1.1 skrll & ifmt_div0s, { 0x9710 } 713 1.1 skrll }, 714 1.1 skrll /* call:d @$Ri */ 715 1.1 skrll { 716 1.1 skrll { 0, 0, 0, 0 }, 717 1.1 skrll { { MNEM, ' ', '@', OP (RI), 0 } }, 718 1.1 skrll & ifmt_div0s, { 0x9f10 } 719 1.1 skrll }, 720 1.1 skrll /* call $label12 */ 721 1.1 skrll { 722 1.1 skrll { 0, 0, 0, 0 }, 723 1.1 skrll { { MNEM, ' ', OP (LABEL12), 0 } }, 724 1.1 skrll & ifmt_call, { 0xd000 } 725 1.1 skrll }, 726 1.1 skrll /* call:d $label12 */ 727 1.1 skrll { 728 1.1 skrll { 0, 0, 0, 0 }, 729 1.1 skrll { { MNEM, ' ', OP (LABEL12), 0 } }, 730 1.1 skrll & ifmt_call, { 0xd800 } 731 1.1 skrll }, 732 1.1 skrll /* ret */ 733 1.1 skrll { 734 1.1 skrll { 0, 0, 0, 0 }, 735 1.1 skrll { { MNEM, 0 } }, 736 1.1 skrll & ifmt_div3, { 0x9720 } 737 1.1 skrll }, 738 1.1 skrll /* ret:d */ 739 1.1 skrll { 740 1.1 skrll { 0, 0, 0, 0 }, 741 1.1 skrll { { MNEM, 0 } }, 742 1.1 skrll & ifmt_div3, { 0x9f20 } 743 1.1 skrll }, 744 1.1 skrll /* int $u8 */ 745 1.1 skrll { 746 1.1 skrll { 0, 0, 0, 0 }, 747 1.1 skrll { { MNEM, ' ', OP (U8), 0 } }, 748 1.1 skrll & ifmt_int, { 0x1f00 } 749 1.1 skrll }, 750 1.1 skrll /* inte */ 751 1.1 skrll { 752 1.1 skrll { 0, 0, 0, 0 }, 753 1.1 skrll { { MNEM, 0 } }, 754 1.1 skrll & ifmt_div3, { 0x9f30 } 755 1.1 skrll }, 756 1.1 skrll /* reti */ 757 1.1 skrll { 758 1.1 skrll { 0, 0, 0, 0 }, 759 1.1 skrll { { MNEM, 0 } }, 760 1.1 skrll & ifmt_div3, { 0x9730 } 761 1.1 skrll }, 762 1.1 skrll /* bra:d $label9 */ 763 1.1 skrll { 764 1.1 skrll { 0, 0, 0, 0 }, 765 1.1 skrll { { MNEM, ' ', OP (LABEL9), 0 } }, 766 1.1 skrll & ifmt_brad, { 0xf000 } 767 1.1 skrll }, 768 1.1 skrll /* bra $label9 */ 769 1.1 skrll { 770 1.1 skrll { 0, 0, 0, 0 }, 771 1.1 skrll { { MNEM, ' ', OP (LABEL9), 0 } }, 772 1.1 skrll & ifmt_brad, { 0xe000 } 773 1.1 skrll }, 774 1.1 skrll /* bno:d $label9 */ 775 1.1 skrll { 776 1.1 skrll { 0, 0, 0, 0 }, 777 1.1 skrll { { MNEM, ' ', OP (LABEL9), 0 } }, 778 1.1 skrll & ifmt_brad, { 0xf100 } 779 1.1 skrll }, 780 1.1 skrll /* bno $label9 */ 781 1.1 skrll { 782 1.1 skrll { 0, 0, 0, 0 }, 783 1.1 skrll { { MNEM, ' ', OP (LABEL9), 0 } }, 784 1.1 skrll & ifmt_brad, { 0xe100 } 785 1.1 skrll }, 786 1.1 skrll /* beq:d $label9 */ 787 1.1 skrll { 788 1.1 skrll { 0, 0, 0, 0 }, 789 1.1 skrll { { MNEM, ' ', OP (LABEL9), 0 } }, 790 1.1 skrll & ifmt_brad, { 0xf200 } 791 1.1 skrll }, 792 1.1 skrll /* beq $label9 */ 793 1.1 skrll { 794 1.1 skrll { 0, 0, 0, 0 }, 795 1.1 skrll { { MNEM, ' ', OP (LABEL9), 0 } }, 796 1.1 skrll & ifmt_brad, { 0xe200 } 797 1.1 skrll }, 798 1.1 skrll /* bne:d $label9 */ 799 1.1 skrll { 800 1.1 skrll { 0, 0, 0, 0 }, 801 1.1 skrll { { MNEM, ' ', OP (LABEL9), 0 } }, 802 1.1 skrll & ifmt_brad, { 0xf300 } 803 1.1 skrll }, 804 1.1 skrll /* bne $label9 */ 805 1.1 skrll { 806 1.1 skrll { 0, 0, 0, 0 }, 807 1.1 skrll { { MNEM, ' ', OP (LABEL9), 0 } }, 808 1.1 skrll & ifmt_brad, { 0xe300 } 809 1.1 skrll }, 810 1.1 skrll /* bc:d $label9 */ 811 1.1 skrll { 812 1.1 skrll { 0, 0, 0, 0 }, 813 1.1 skrll { { MNEM, ' ', OP (LABEL9), 0 } }, 814 1.1 skrll & ifmt_brad, { 0xf400 } 815 1.1 skrll }, 816 1.1 skrll /* bc $label9 */ 817 1.1 skrll { 818 1.1 skrll { 0, 0, 0, 0 }, 819 1.1 skrll { { MNEM, ' ', OP (LABEL9), 0 } }, 820 1.1 skrll & ifmt_brad, { 0xe400 } 821 1.1 skrll }, 822 1.1 skrll /* bnc:d $label9 */ 823 1.1 skrll { 824 1.1 skrll { 0, 0, 0, 0 }, 825 1.1 skrll { { MNEM, ' ', OP (LABEL9), 0 } }, 826 1.1 skrll & ifmt_brad, { 0xf500 } 827 1.1 skrll }, 828 1.1 skrll /* bnc $label9 */ 829 1.1 skrll { 830 1.1 skrll { 0, 0, 0, 0 }, 831 1.1 skrll { { MNEM, ' ', OP (LABEL9), 0 } }, 832 1.1 skrll & ifmt_brad, { 0xe500 } 833 1.1 skrll }, 834 1.1 skrll /* bn:d $label9 */ 835 1.1 skrll { 836 1.1 skrll { 0, 0, 0, 0 }, 837 1.1 skrll { { MNEM, ' ', OP (LABEL9), 0 } }, 838 1.1 skrll & ifmt_brad, { 0xf600 } 839 1.1 skrll }, 840 1.1 skrll /* bn $label9 */ 841 1.1 skrll { 842 1.1 skrll { 0, 0, 0, 0 }, 843 1.1 skrll { { MNEM, ' ', OP (LABEL9), 0 } }, 844 1.1 skrll & ifmt_brad, { 0xe600 } 845 1.1 skrll }, 846 1.1 skrll /* bp:d $label9 */ 847 1.1 skrll { 848 1.1 skrll { 0, 0, 0, 0 }, 849 1.1 skrll { { MNEM, ' ', OP (LABEL9), 0 } }, 850 1.1 skrll & ifmt_brad, { 0xf700 } 851 1.1 skrll }, 852 1.1 skrll /* bp $label9 */ 853 1.1 skrll { 854 1.1 skrll { 0, 0, 0, 0 }, 855 1.1 skrll { { MNEM, ' ', OP (LABEL9), 0 } }, 856 1.1 skrll & ifmt_brad, { 0xe700 } 857 1.1 skrll }, 858 1.1 skrll /* bv:d $label9 */ 859 1.1 skrll { 860 1.1 skrll { 0, 0, 0, 0 }, 861 1.1 skrll { { MNEM, ' ', OP (LABEL9), 0 } }, 862 1.1 skrll & ifmt_brad, { 0xf800 } 863 1.1 skrll }, 864 1.1 skrll /* bv $label9 */ 865 1.1 skrll { 866 1.1 skrll { 0, 0, 0, 0 }, 867 1.1 skrll { { MNEM, ' ', OP (LABEL9), 0 } }, 868 1.1 skrll & ifmt_brad, { 0xe800 } 869 1.1 skrll }, 870 1.1 skrll /* bnv:d $label9 */ 871 1.1 skrll { 872 1.1 skrll { 0, 0, 0, 0 }, 873 1.1 skrll { { MNEM, ' ', OP (LABEL9), 0 } }, 874 1.1 skrll & ifmt_brad, { 0xf900 } 875 1.1 skrll }, 876 1.1 skrll /* bnv $label9 */ 877 1.1 skrll { 878 1.1 skrll { 0, 0, 0, 0 }, 879 1.1 skrll { { MNEM, ' ', OP (LABEL9), 0 } }, 880 1.1 skrll & ifmt_brad, { 0xe900 } 881 1.1 skrll }, 882 1.1 skrll /* blt:d $label9 */ 883 1.1 skrll { 884 1.1 skrll { 0, 0, 0, 0 }, 885 1.1 skrll { { MNEM, ' ', OP (LABEL9), 0 } }, 886 1.1 skrll & ifmt_brad, { 0xfa00 } 887 1.1 skrll }, 888 1.1 skrll /* blt $label9 */ 889 1.1 skrll { 890 1.1 skrll { 0, 0, 0, 0 }, 891 1.1 skrll { { MNEM, ' ', OP (LABEL9), 0 } }, 892 1.1 skrll & ifmt_brad, { 0xea00 } 893 1.1 skrll }, 894 1.1 skrll /* bge:d $label9 */ 895 1.1 skrll { 896 1.1 skrll { 0, 0, 0, 0 }, 897 1.1 skrll { { MNEM, ' ', OP (LABEL9), 0 } }, 898 1.1 skrll & ifmt_brad, { 0xfb00 } 899 1.1 skrll }, 900 1.1 skrll /* bge $label9 */ 901 1.1 skrll { 902 1.1 skrll { 0, 0, 0, 0 }, 903 1.1 skrll { { MNEM, ' ', OP (LABEL9), 0 } }, 904 1.1 skrll & ifmt_brad, { 0xeb00 } 905 1.1 skrll }, 906 1.1 skrll /* ble:d $label9 */ 907 1.1 skrll { 908 1.1 skrll { 0, 0, 0, 0 }, 909 1.1 skrll { { MNEM, ' ', OP (LABEL9), 0 } }, 910 1.1 skrll & ifmt_brad, { 0xfc00 } 911 1.1 skrll }, 912 1.1 skrll /* ble $label9 */ 913 1.1 skrll { 914 1.1 skrll { 0, 0, 0, 0 }, 915 1.1 skrll { { MNEM, ' ', OP (LABEL9), 0 } }, 916 1.1 skrll & ifmt_brad, { 0xec00 } 917 1.1 skrll }, 918 1.1 skrll /* bgt:d $label9 */ 919 1.1 skrll { 920 1.1 skrll { 0, 0, 0, 0 }, 921 1.1 skrll { { MNEM, ' ', OP (LABEL9), 0 } }, 922 1.1 skrll & ifmt_brad, { 0xfd00 } 923 1.1 skrll }, 924 1.1 skrll /* bgt $label9 */ 925 1.1 skrll { 926 1.1 skrll { 0, 0, 0, 0 }, 927 1.1 skrll { { MNEM, ' ', OP (LABEL9), 0 } }, 928 1.1 skrll & ifmt_brad, { 0xed00 } 929 1.1 skrll }, 930 1.1 skrll /* bls:d $label9 */ 931 1.1 skrll { 932 1.1 skrll { 0, 0, 0, 0 }, 933 1.1 skrll { { MNEM, ' ', OP (LABEL9), 0 } }, 934 1.1 skrll & ifmt_brad, { 0xfe00 } 935 1.1 skrll }, 936 1.1 skrll /* bls $label9 */ 937 1.1 skrll { 938 1.1 skrll { 0, 0, 0, 0 }, 939 1.1 skrll { { MNEM, ' ', OP (LABEL9), 0 } }, 940 1.1 skrll & ifmt_brad, { 0xee00 } 941 1.1 skrll }, 942 1.1 skrll /* bhi:d $label9 */ 943 1.1 skrll { 944 1.1 skrll { 0, 0, 0, 0 }, 945 1.1 skrll { { MNEM, ' ', OP (LABEL9), 0 } }, 946 1.1 skrll & ifmt_brad, { 0xff00 } 947 1.1 skrll }, 948 1.1 skrll /* bhi $label9 */ 949 1.1 skrll { 950 1.1 skrll { 0, 0, 0, 0 }, 951 1.1 skrll { { MNEM, ' ', OP (LABEL9), 0 } }, 952 1.1 skrll & ifmt_brad, { 0xef00 } 953 1.1 skrll }, 954 1.1 skrll /* dmov $R13,@$dir10 */ 955 1.1 skrll { 956 1.1 skrll { 0, 0, 0, 0 }, 957 1.1 skrll { { MNEM, ' ', OP (R13), ',', '@', OP (DIR10), 0 } }, 958 1.1 skrll & ifmt_dmovr13, { 0x1800 } 959 1.1 skrll }, 960 1.1 skrll /* dmovh $R13,@$dir9 */ 961 1.1 skrll { 962 1.1 skrll { 0, 0, 0, 0 }, 963 1.1 skrll { { MNEM, ' ', OP (R13), ',', '@', OP (DIR9), 0 } }, 964 1.1 skrll & ifmt_dmovr13h, { 0x1900 } 965 1.1 skrll }, 966 1.1 skrll /* dmovb $R13,@$dir8 */ 967 1.1 skrll { 968 1.1 skrll { 0, 0, 0, 0 }, 969 1.1 skrll { { MNEM, ' ', OP (R13), ',', '@', OP (DIR8), 0 } }, 970 1.1 skrll & ifmt_dmovr13b, { 0x1a00 } 971 1.1 skrll }, 972 1.1 skrll /* dmov @$R13+,@$dir10 */ 973 1.1 skrll { 974 1.1 skrll { 0, 0, 0, 0 }, 975 1.1 skrll { { MNEM, ' ', '@', OP (R13), '+', ',', '@', OP (DIR10), 0 } }, 976 1.1 skrll & ifmt_dmovr13, { 0x1c00 } 977 1.1 skrll }, 978 1.1 skrll /* dmovh @$R13+,@$dir9 */ 979 1.1 skrll { 980 1.1 skrll { 0, 0, 0, 0 }, 981 1.1 skrll { { MNEM, ' ', '@', OP (R13), '+', ',', '@', OP (DIR9), 0 } }, 982 1.1 skrll & ifmt_dmovr13h, { 0x1d00 } 983 1.1 skrll }, 984 1.1 skrll /* dmovb @$R13+,@$dir8 */ 985 1.1 skrll { 986 1.1 skrll { 0, 0, 0, 0 }, 987 1.1 skrll { { MNEM, ' ', '@', OP (R13), '+', ',', '@', OP (DIR8), 0 } }, 988 1.1 skrll & ifmt_dmovr13b, { 0x1e00 } 989 1.1 skrll }, 990 1.1 skrll /* dmov @$R15+,@$dir10 */ 991 1.1 skrll { 992 1.1 skrll { 0, 0, 0, 0 }, 993 1.1 skrll { { MNEM, ' ', '@', OP (R15), '+', ',', '@', OP (DIR10), 0 } }, 994 1.1 skrll & ifmt_dmovr13, { 0x1b00 } 995 1.1 skrll }, 996 1.1 skrll /* dmov @$dir10,$R13 */ 997 1.1 skrll { 998 1.1 skrll { 0, 0, 0, 0 }, 999 1.1 skrll { { MNEM, ' ', '@', OP (DIR10), ',', OP (R13), 0 } }, 1000 1.1 skrll & ifmt_dmovr13, { 0x800 } 1001 1.1 skrll }, 1002 1.1 skrll /* dmovh @$dir9,$R13 */ 1003 1.1 skrll { 1004 1.1 skrll { 0, 0, 0, 0 }, 1005 1.1 skrll { { MNEM, ' ', '@', OP (DIR9), ',', OP (R13), 0 } }, 1006 1.1 skrll & ifmt_dmovr13h, { 0x900 } 1007 1.1 skrll }, 1008 1.1 skrll /* dmovb @$dir8,$R13 */ 1009 1.1 skrll { 1010 1.1 skrll { 0, 0, 0, 0 }, 1011 1.1 skrll { { MNEM, ' ', '@', OP (DIR8), ',', OP (R13), 0 } }, 1012 1.1 skrll & ifmt_dmovr13b, { 0xa00 } 1013 1.1 skrll }, 1014 1.1 skrll /* dmov @$dir10,@$R13+ */ 1015 1.1 skrll { 1016 1.1 skrll { 0, 0, 0, 0 }, 1017 1.1 skrll { { MNEM, ' ', '@', OP (DIR10), ',', '@', OP (R13), '+', 0 } }, 1018 1.1 skrll & ifmt_dmovr13, { 0xc00 } 1019 1.1 skrll }, 1020 1.1 skrll /* dmovh @$dir9,@$R13+ */ 1021 1.1 skrll { 1022 1.1 skrll { 0, 0, 0, 0 }, 1023 1.1 skrll { { MNEM, ' ', '@', OP (DIR9), ',', '@', OP (R13), '+', 0 } }, 1024 1.1 skrll & ifmt_dmovr13h, { 0xd00 } 1025 1.1 skrll }, 1026 1.1 skrll /* dmovb @$dir8,@$R13+ */ 1027 1.1 skrll { 1028 1.1 skrll { 0, 0, 0, 0 }, 1029 1.1 skrll { { MNEM, ' ', '@', OP (DIR8), ',', '@', OP (R13), '+', 0 } }, 1030 1.1 skrll & ifmt_dmovr13b, { 0xe00 } 1031 1.1 skrll }, 1032 1.1 skrll /* dmov @$dir10,@-$R15 */ 1033 1.1 skrll { 1034 1.1 skrll { 0, 0, 0, 0 }, 1035 1.1 skrll { { MNEM, ' ', '@', OP (DIR10), ',', '@', '-', OP (R15), 0 } }, 1036 1.1 skrll & ifmt_dmovr13, { 0xb00 } 1037 1.1 skrll }, 1038 1.1 skrll /* ldres @$Ri+,$u4 */ 1039 1.1 skrll { 1040 1.1 skrll { 0, 0, 0, 0 }, 1041 1.1 skrll { { MNEM, ' ', '@', OP (RI), '+', ',', OP (U4), 0 } }, 1042 1.1 skrll & ifmt_addi, { 0xbc00 } 1043 1.1 skrll }, 1044 1.1 skrll /* stres $u4,@$Ri+ */ 1045 1.1 skrll { 1046 1.1 skrll { 0, 0, 0, 0 }, 1047 1.1 skrll { { MNEM, ' ', OP (U4), ',', '@', OP (RI), '+', 0 } }, 1048 1.1 skrll & ifmt_addi, { 0xbd00 } 1049 1.1 skrll }, 1050 1.1 skrll /* copop $u4c,$ccc,$CRj,$CRi */ 1051 1.1 skrll { 1052 1.1 skrll { 0, 0, 0, 0 }, 1053 1.1 skrll { { MNEM, ' ', OP (U4C), ',', OP (CCC), ',', OP (CRJ), ',', OP (CRI), 0 } }, 1054 1.1 skrll & ifmt_copop, { 0x9fc0 } 1055 1.1 skrll }, 1056 1.1 skrll /* copld $u4c,$ccc,$Rjc,$CRi */ 1057 1.1 skrll { 1058 1.1 skrll { 0, 0, 0, 0 }, 1059 1.1 skrll { { MNEM, ' ', OP (U4C), ',', OP (CCC), ',', OP (RJC), ',', OP (CRI), 0 } }, 1060 1.1 skrll & ifmt_copld, { 0x9fd0 } 1061 1.1 skrll }, 1062 1.1 skrll /* copst $u4c,$ccc,$CRj,$Ric */ 1063 1.1 skrll { 1064 1.1 skrll { 0, 0, 0, 0 }, 1065 1.1 skrll { { MNEM, ' ', OP (U4C), ',', OP (CCC), ',', OP (CRJ), ',', OP (RIC), 0 } }, 1066 1.1 skrll & ifmt_copst, { 0x9fe0 } 1067 1.1 skrll }, 1068 1.1 skrll /* copsv $u4c,$ccc,$CRj,$Ric */ 1069 1.1 skrll { 1070 1.1 skrll { 0, 0, 0, 0 }, 1071 1.1 skrll { { MNEM, ' ', OP (U4C), ',', OP (CCC), ',', OP (CRJ), ',', OP (RIC), 0 } }, 1072 1.1 skrll & ifmt_copst, { 0x9ff0 } 1073 1.1 skrll }, 1074 1.1 skrll /* nop */ 1075 1.1 skrll { 1076 1.1 skrll { 0, 0, 0, 0 }, 1077 1.1 skrll { { MNEM, 0 } }, 1078 1.1 skrll & ifmt_div3, { 0x9fa0 } 1079 1.1 skrll }, 1080 1.1 skrll /* andccr $u8 */ 1081 1.1 skrll { 1082 1.1 skrll { 0, 0, 0, 0 }, 1083 1.1 skrll { { MNEM, ' ', OP (U8), 0 } }, 1084 1.1 skrll & ifmt_int, { 0x8300 } 1085 1.1 skrll }, 1086 1.1 skrll /* orccr $u8 */ 1087 1.1 skrll { 1088 1.1 skrll { 0, 0, 0, 0 }, 1089 1.1 skrll { { MNEM, ' ', OP (U8), 0 } }, 1090 1.1 skrll & ifmt_int, { 0x9300 } 1091 1.1 skrll }, 1092 1.1 skrll /* stilm $u8 */ 1093 1.1 skrll { 1094 1.1 skrll { 0, 0, 0, 0 }, 1095 1.1 skrll { { MNEM, ' ', OP (U8), 0 } }, 1096 1.1 skrll & ifmt_int, { 0x8700 } 1097 1.1 skrll }, 1098 1.1 skrll /* addsp $s10 */ 1099 1.1 skrll { 1100 1.1 skrll { 0, 0, 0, 0 }, 1101 1.1 skrll { { MNEM, ' ', OP (S10), 0 } }, 1102 1.1 skrll & ifmt_addsp, { 0xa300 } 1103 1.1 skrll }, 1104 1.1 skrll /* extsb $Ri */ 1105 1.1 skrll { 1106 1.1 skrll { 0, 0, 0, 0 }, 1107 1.1 skrll { { MNEM, ' ', OP (RI), 0 } }, 1108 1.1 skrll & ifmt_div0s, { 0x9780 } 1109 1.1 skrll }, 1110 1.1 skrll /* extub $Ri */ 1111 1.1 skrll { 1112 1.1 skrll { 0, 0, 0, 0 }, 1113 1.1 skrll { { MNEM, ' ', OP (RI), 0 } }, 1114 1.1 skrll & ifmt_div0s, { 0x9790 } 1115 1.1 skrll }, 1116 1.1 skrll /* extsh $Ri */ 1117 1.1 skrll { 1118 1.1 skrll { 0, 0, 0, 0 }, 1119 1.1 skrll { { MNEM, ' ', OP (RI), 0 } }, 1120 1.1 skrll & ifmt_div0s, { 0x97a0 } 1121 1.1 skrll }, 1122 1.1 skrll /* extuh $Ri */ 1123 1.1 skrll { 1124 1.1 skrll { 0, 0, 0, 0 }, 1125 1.1 skrll { { MNEM, ' ', OP (RI), 0 } }, 1126 1.1 skrll & ifmt_div0s, { 0x97b0 } 1127 1.1 skrll }, 1128 1.1 skrll /* ldm0 ($reglist_low_ld) */ 1129 1.1 skrll { 1130 1.1 skrll { 0, 0, 0, 0 }, 1131 1.1 skrll { { MNEM, ' ', '(', OP (REGLIST_LOW_LD), ')', 0 } }, 1132 1.1 skrll & ifmt_ldm0, { 0x8c00 } 1133 1.1 skrll }, 1134 1.1 skrll /* ldm1 ($reglist_hi_ld) */ 1135 1.1 skrll { 1136 1.1 skrll { 0, 0, 0, 0 }, 1137 1.1 skrll { { MNEM, ' ', '(', OP (REGLIST_HI_LD), ')', 0 } }, 1138 1.1 skrll & ifmt_ldm1, { 0x8d00 } 1139 1.1 skrll }, 1140 1.1 skrll /* stm0 ($reglist_low_st) */ 1141 1.1 skrll { 1142 1.1 skrll { 0, 0, 0, 0 }, 1143 1.1 skrll { { MNEM, ' ', '(', OP (REGLIST_LOW_ST), ')', 0 } }, 1144 1.1 skrll & ifmt_stm0, { 0x8e00 } 1145 1.1 skrll }, 1146 1.1 skrll /* stm1 ($reglist_hi_st) */ 1147 1.1 skrll { 1148 1.1 skrll { 0, 0, 0, 0 }, 1149 1.1 skrll { { MNEM, ' ', '(', OP (REGLIST_HI_ST), ')', 0 } }, 1150 1.1 skrll & ifmt_stm1, { 0x8f00 } 1151 1.1 skrll }, 1152 1.1 skrll /* enter $u10 */ 1153 1.1 skrll { 1154 1.1 skrll { 0, 0, 0, 0 }, 1155 1.1 skrll { { MNEM, ' ', OP (U10), 0 } }, 1156 1.1 skrll & ifmt_enter, { 0xf00 } 1157 1.1 skrll }, 1158 1.1 skrll /* leave */ 1159 1.1 skrll { 1160 1.1 skrll { 0, 0, 0, 0 }, 1161 1.1 skrll { { MNEM, 0 } }, 1162 1.1 skrll & ifmt_div3, { 0x9f90 } 1163 1.1 skrll }, 1164 1.1 skrll /* xchb @$Rj,$Ri */ 1165 1.1 skrll { 1166 1.1 skrll { 0, 0, 0, 0 }, 1167 1.1 skrll { { MNEM, ' ', '@', OP (RJ), ',', OP (RI), 0 } }, 1168 1.1 skrll & ifmt_add, { 0x8a00 } 1169 1.1 skrll }, 1170 1.1 skrll }; 1171 1.1 skrll 1172 1.1 skrll #undef A 1173 1.1 skrll #undef OPERAND 1174 1.1 skrll #undef MNEM 1175 1.1 skrll #undef OP 1176 1.1 skrll 1177 1.1 skrll /* Formats for ALIAS macro-insns. */ 1178 1.1 skrll 1179 1.1 skrll #define F(f) & fr30_cgen_ifld_table[FR30_##f] 1180 1.1 skrll static const CGEN_IFMT ifmt_ldi8m ATTRIBUTE_UNUSED = { 1181 1.1 skrll 16, 16, 0xf000, { { F (F_OP1) }, { F (F_I8) }, { F (F_RI) }, { 0 } } 1182 1.1 skrll }; 1183 1.1 skrll 1184 1.1 skrll static const CGEN_IFMT ifmt_ldi20m ATTRIBUTE_UNUSED = { 1185 1.1 skrll 16, 32, 0xff00, { { F (F_OP1) }, { F (F_OP2) }, { F (F_RI) }, { F (F_I20) }, { 0 } } 1186 1.1 skrll }; 1187 1.1 skrll 1188 1.1 skrll static const CGEN_IFMT ifmt_ldi32m ATTRIBUTE_UNUSED = { 1189 1.1 skrll 16, 48, 0xfff0, { { F (F_OP1) }, { F (F_OP2) }, { F (F_OP3) }, { F (F_RI) }, { F (F_I32) }, { 0 } } 1190 1.1 skrll }; 1191 1.1 skrll 1192 1.1 skrll #undef F 1193 1.1 skrll 1194 1.1 skrll /* Each non-simple macro entry points to an array of expansion possibilities. */ 1195 1.1 skrll 1196 1.1 skrll #define A(a) (1 << CGEN_INSN_##a) 1197 1.1 skrll #define OPERAND(op) FR30_OPERAND_##op 1198 1.1 skrll #define MNEM CGEN_SYNTAX_MNEMONIC /* syntax value for mnemonic */ 1199 1.1 skrll #define OP(field) CGEN_SYNTAX_MAKE_FIELD (OPERAND (field)) 1200 1.1 skrll 1201 1.1 skrll /* The macro instruction table. */ 1202 1.1 skrll 1203 1.1 skrll static const CGEN_IBASE fr30_cgen_macro_insn_table[] = 1204 1.1 skrll { 1205 1.1 skrll /* ldi8 $i8,$Ri */ 1206 1.1 skrll { 1207 1.1 skrll -1, "ldi8m", "ldi8", 16, 1208 1.1 skrll { 0|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } } 1209 1.1 skrll }, 1210 1.1 skrll /* ldi20 $i20,$Ri */ 1211 1.1 skrll { 1212 1.1 skrll -1, "ldi20m", "ldi20", 32, 1213 1.1 skrll { 0|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } } 1214 1.1 skrll }, 1215 1.1 skrll /* ldi32 $i32,$Ri */ 1216 1.1 skrll { 1217 1.1 skrll -1, "ldi32m", "ldi32", 48, 1218 1.1 skrll { 0|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } } 1219 1.1 skrll }, 1220 1.1 skrll }; 1221 1.1 skrll 1222 1.1 skrll /* The macro instruction opcode table. */ 1223 1.1 skrll 1224 1.1 skrll static const CGEN_OPCODE fr30_cgen_macro_insn_opcode_table[] = 1225 1.1 skrll { 1226 1.1 skrll /* ldi8 $i8,$Ri */ 1227 1.1 skrll { 1228 1.1 skrll { 0, 0, 0, 0 }, 1229 1.1 skrll { { MNEM, ' ', OP (I8), ',', OP (RI), 0 } }, 1230 1.1 skrll & ifmt_ldi8m, { 0xc000 } 1231 1.1 skrll }, 1232 1.1 skrll /* ldi20 $i20,$Ri */ 1233 1.1 skrll { 1234 1.1 skrll { 0, 0, 0, 0 }, 1235 1.1 skrll { { MNEM, ' ', OP (I20), ',', OP (RI), 0 } }, 1236 1.1 skrll & ifmt_ldi20m, { 0x9b00 } 1237 1.1 skrll }, 1238 1.1 skrll /* ldi32 $i32,$Ri */ 1239 1.1 skrll { 1240 1.1 skrll { 0, 0, 0, 0 }, 1241 1.1 skrll { { MNEM, ' ', OP (I32), ',', OP (RI), 0 } }, 1242 1.1 skrll & ifmt_ldi32m, { 0x9f80 } 1243 1.1 skrll }, 1244 1.1 skrll }; 1245 1.1 skrll 1246 1.1 skrll #undef A 1247 1.1 skrll #undef OPERAND 1248 1.1 skrll #undef MNEM 1249 1.1 skrll #undef OP 1250 1.1 skrll 1251 1.1 skrll #ifndef CGEN_ASM_HASH_P 1252 1.1 skrll #define CGEN_ASM_HASH_P(insn) 1 1253 1.1 skrll #endif 1254 1.1 skrll 1255 1.1 skrll #ifndef CGEN_DIS_HASH_P 1256 1.1 skrll #define CGEN_DIS_HASH_P(insn) 1 1257 1.1 skrll #endif 1258 1.1 skrll 1259 1.1 skrll /* Return non-zero if INSN is to be added to the hash table. 1260 1.1 skrll Targets are free to override CGEN_{ASM,DIS}_HASH_P in the .opc file. */ 1261 1.1 skrll 1262 1.1 skrll static int 1263 1.1.1.4 christos asm_hash_insn_p (const CGEN_INSN *insn ATTRIBUTE_UNUSED) 1264 1.1 skrll { 1265 1.1 skrll return CGEN_ASM_HASH_P (insn); 1266 1.1 skrll } 1267 1.1 skrll 1268 1.1 skrll static int 1269 1.1.1.4 christos dis_hash_insn_p (const CGEN_INSN *insn) 1270 1.1 skrll { 1271 1.1 skrll /* If building the hash table and the NO-DIS attribute is present, 1272 1.1 skrll ignore. */ 1273 1.1 skrll if (CGEN_INSN_ATTR_VALUE (insn, CGEN_INSN_NO_DIS)) 1274 1.1 skrll return 0; 1275 1.1 skrll return CGEN_DIS_HASH_P (insn); 1276 1.1 skrll } 1277 1.1 skrll 1278 1.1 skrll #ifndef CGEN_ASM_HASH 1279 1.1 skrll #define CGEN_ASM_HASH_SIZE 127 1280 1.1 skrll #ifdef CGEN_MNEMONIC_OPERANDS 1281 1.1 skrll #define CGEN_ASM_HASH(mnem) (*(unsigned char *) (mnem) % CGEN_ASM_HASH_SIZE) 1282 1.1 skrll #else 1283 1.1 skrll #define CGEN_ASM_HASH(mnem) (*(unsigned char *) (mnem) % CGEN_ASM_HASH_SIZE) /*FIXME*/ 1284 1.1 skrll #endif 1285 1.1 skrll #endif 1286 1.1 skrll 1287 1.1 skrll /* It doesn't make much sense to provide a default here, 1288 1.1 skrll but while this is under development we do. 1289 1.1 skrll BUFFER is a pointer to the bytes of the insn, target order. 1290 1.1 skrll VALUE is the first base_insn_bitsize bits as an int in host order. */ 1291 1.1 skrll 1292 1.1 skrll #ifndef CGEN_DIS_HASH 1293 1.1 skrll #define CGEN_DIS_HASH_SIZE 256 1294 1.1 skrll #define CGEN_DIS_HASH(buf, value) (*(unsigned char *) (buf)) 1295 1.1 skrll #endif 1296 1.1 skrll 1297 1.1 skrll /* The result is the hash value of the insn. 1298 1.1 skrll Targets are free to override CGEN_{ASM,DIS}_HASH in the .opc file. */ 1299 1.1 skrll 1300 1.1 skrll static unsigned int 1301 1.1.1.4 christos asm_hash_insn (const char *mnem) 1302 1.1 skrll { 1303 1.1 skrll return CGEN_ASM_HASH (mnem); 1304 1.1 skrll } 1305 1.1 skrll 1306 1.1 skrll /* BUF is a pointer to the bytes of the insn, target order. 1307 1.1 skrll VALUE is the first base_insn_bitsize bits as an int in host order. */ 1308 1.1 skrll 1309 1.1 skrll static unsigned int 1310 1.1.1.4 christos dis_hash_insn (const char *buf ATTRIBUTE_UNUSED, 1311 1.1.1.4 christos CGEN_INSN_INT value ATTRIBUTE_UNUSED) 1312 1.1 skrll { 1313 1.1 skrll return CGEN_DIS_HASH (buf, value); 1314 1.1 skrll } 1315 1.1 skrll 1316 1.1 skrll /* Set the recorded length of the insn in the CGEN_FIELDS struct. */ 1317 1.1 skrll 1318 1.1 skrll static void 1319 1.1 skrll set_fields_bitsize (CGEN_FIELDS *fields, int size) 1320 1.1 skrll { 1321 1.1 skrll CGEN_FIELDS_BITSIZE (fields) = size; 1322 1.1 skrll } 1323 1.1 skrll 1324 1.1 skrll /* Function to call before using the operand instance table. 1325 1.1 skrll This plugs the opcode entries and macro instructions into the cpu table. */ 1326 1.1 skrll 1327 1.1 skrll void 1328 1.1 skrll fr30_cgen_init_opcode_table (CGEN_CPU_DESC cd) 1329 1.1 skrll { 1330 1.1 skrll int i; 1331 1.1 skrll int num_macros = (sizeof (fr30_cgen_macro_insn_table) / 1332 1.1 skrll sizeof (fr30_cgen_macro_insn_table[0])); 1333 1.1 skrll const CGEN_IBASE *ib = & fr30_cgen_macro_insn_table[0]; 1334 1.1 skrll const CGEN_OPCODE *oc = & fr30_cgen_macro_insn_opcode_table[0]; 1335 1.1 skrll CGEN_INSN *insns = xmalloc (num_macros * sizeof (CGEN_INSN)); 1336 1.1 skrll 1337 1.1.1.2 christos /* This test has been added to avoid a warning generated 1338 1.1.1.2 christos if memset is called with a third argument of value zero. */ 1339 1.1.1.2 christos if (num_macros >= 1) 1340 1.1.1.2 christos memset (insns, 0, num_macros * sizeof (CGEN_INSN)); 1341 1.1 skrll for (i = 0; i < num_macros; ++i) 1342 1.1 skrll { 1343 1.1 skrll insns[i].base = &ib[i]; 1344 1.1 skrll insns[i].opcode = &oc[i]; 1345 1.1 skrll fr30_cgen_build_insn_regex (& insns[i]); 1346 1.1 skrll } 1347 1.1 skrll cd->macro_insn_table.init_entries = insns; 1348 1.1 skrll cd->macro_insn_table.entry_size = sizeof (CGEN_IBASE); 1349 1.1 skrll cd->macro_insn_table.num_init_entries = num_macros; 1350 1.1 skrll 1351 1.1 skrll oc = & fr30_cgen_insn_opcode_table[0]; 1352 1.1 skrll insns = (CGEN_INSN *) cd->insn_table.init_entries; 1353 1.1 skrll for (i = 0; i < MAX_INSNS; ++i) 1354 1.1 skrll { 1355 1.1 skrll insns[i].opcode = &oc[i]; 1356 1.1 skrll fr30_cgen_build_insn_regex (& insns[i]); 1357 1.1 skrll } 1358 1.1 skrll 1359 1.1 skrll cd->sizeof_fields = sizeof (CGEN_FIELDS); 1360 1.1 skrll cd->set_fields_bitsize = set_fields_bitsize; 1361 1.1 skrll 1362 1.1 skrll cd->asm_hash_p = asm_hash_insn_p; 1363 1.1 skrll cd->asm_hash = asm_hash_insn; 1364 1.1 skrll cd->asm_hash_size = CGEN_ASM_HASH_SIZE; 1365 1.1 skrll 1366 1.1 skrll cd->dis_hash_p = dis_hash_insn_p; 1367 1.1 skrll cd->dis_hash = dis_hash_insn; 1368 1.1 skrll cd->dis_hash_size = CGEN_DIS_HASH_SIZE; 1369 1.1 skrll } 1370