1 /* DO NOT EDIT! -*- buffer-read-only: t -*- vi:set ro: */ 2 /* Instruction opcode table for or1k. 3 4 THIS FILE IS MACHINE GENERATED WITH CGEN. 5 6 Copyright (C) 1996-2018 Free Software Foundation, Inc. 7 8 This file is part of the GNU Binutils and/or GDB, the GNU debugger. 9 10 This file is free software; you can redistribute it and/or modify 11 it under the terms of the GNU General Public License as published by 12 the Free Software Foundation; either version 3, or (at your option) 13 any later version. 14 15 It is distributed in the hope that it will be useful, but WITHOUT 16 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 17 or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public 18 License for more details. 19 20 You should have received a copy of the GNU General Public License along 21 with this program; if not, write to the Free Software Foundation, Inc., 22 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. 23 24 */ 25 26 #include "sysdep.h" 27 #include "ansidecl.h" 28 #include "bfd.h" 29 #include "symcat.h" 30 #include "or1k-desc.h" 31 #include "or1k-opc.h" 32 #include "libiberty.h" 33 34 /* -- opc.c */ 35 /* -- */ 36 /* The hash functions are recorded here to help keep assembler code out of 37 the disassembler and vice versa. */ 38 39 static int asm_hash_insn_p (const CGEN_INSN *); 40 static unsigned int asm_hash_insn (const char *); 41 static int dis_hash_insn_p (const CGEN_INSN *); 42 static unsigned int dis_hash_insn (const char *, CGEN_INSN_INT); 43 44 /* Instruction formats. */ 45 46 #define F(f) & or1k_cgen_ifld_table[OR1K_##f] 47 static const CGEN_IFMT ifmt_empty ATTRIBUTE_UNUSED = { 48 0, 0, 0x0, { { 0 } } 49 }; 50 51 static const CGEN_IFMT ifmt_l_j ATTRIBUTE_UNUSED = { 52 32, 32, 0xfc000000, { { F (F_OPCODE) }, { F (F_DISP26) }, { 0 } } 53 }; 54 55 static const CGEN_IFMT ifmt_l_jr ATTRIBUTE_UNUSED = { 56 32, 32, 0xffff07ff, { { F (F_OPCODE) }, { F (F_RESV_25_10) }, { F (F_R3) }, { F (F_RESV_10_11) }, { 0 } } 57 }; 58 59 static const CGEN_IFMT ifmt_l_trap ATTRIBUTE_UNUSED = { 60 32, 32, 0xffff0000, { { F (F_OPCODE) }, { F (F_OP_25_5) }, { F (F_RESV_20_5) }, { F (F_UIMM16) }, { 0 } } 61 }; 62 63 static const CGEN_IFMT ifmt_l_msync ATTRIBUTE_UNUSED = { 64 32, 32, 0xffffffff, { { F (F_OPCODE) }, { F (F_OP_25_5) }, { F (F_RESV_20_21) }, { 0 } } 65 }; 66 67 static const CGEN_IFMT ifmt_l_rfe ATTRIBUTE_UNUSED = { 68 32, 32, 0xffffffff, { { F (F_OPCODE) }, { F (F_RESV_25_26) }, { 0 } } 69 }; 70 71 static const CGEN_IFMT ifmt_l_nop_imm ATTRIBUTE_UNUSED = { 72 32, 32, 0xffff0000, { { F (F_OPCODE) }, { F (F_OP_25_2) }, { F (F_RESV_23_8) }, { F (F_UIMM16) }, { 0 } } 73 }; 74 75 static const CGEN_IFMT ifmt_l_movhi ATTRIBUTE_UNUSED = { 76 32, 32, 0xfc1f0000, { { F (F_OPCODE) }, { F (F_R1) }, { F (F_RESV_20_4) }, { F (F_OP_16_1) }, { F (F_UIMM16) }, { 0 } } 77 }; 78 79 static const CGEN_IFMT ifmt_l_macrc ATTRIBUTE_UNUSED = { 80 32, 32, 0xfc1fffff, { { F (F_OPCODE) }, { F (F_R1) }, { F (F_RESV_20_4) }, { F (F_OP_16_1) }, { F (F_UIMM16) }, { 0 } } 81 }; 82 83 static const CGEN_IFMT ifmt_l_mfspr ATTRIBUTE_UNUSED = { 84 32, 32, 0xfc000000, { { F (F_OPCODE) }, { F (F_R1) }, { F (F_R2) }, { F (F_UIMM16) }, { 0 } } 85 }; 86 87 static const CGEN_IFMT ifmt_l_mtspr ATTRIBUTE_UNUSED = { 88 32, 32, 0xfc000000, { { F (F_OPCODE) }, { F (F_R2) }, { F (F_R3) }, { F (F_UIMM16_SPLIT) }, { 0 } } 89 }; 90 91 static const CGEN_IFMT ifmt_l_lwz ATTRIBUTE_UNUSED = { 92 32, 32, 0xfc000000, { { F (F_OPCODE) }, { F (F_R1) }, { F (F_R2) }, { F (F_SIMM16) }, { 0 } } 93 }; 94 95 static const CGEN_IFMT ifmt_l_sw ATTRIBUTE_UNUSED = { 96 32, 32, 0xfc000000, { { F (F_OPCODE) }, { F (F_R2) }, { F (F_R3) }, { F (F_SIMM16_SPLIT) }, { 0 } } 97 }; 98 99 static const CGEN_IFMT ifmt_l_swa ATTRIBUTE_UNUSED = { 100 32, 32, 0xfc000000, { { F (F_OPCODE) }, { F (F_R2) }, { F (F_R3) }, { F (F_SIMM16) }, { 0 } } 101 }; 102 103 static const CGEN_IFMT ifmt_l_sll ATTRIBUTE_UNUSED = { 104 32, 32, 0xfc0007ff, { { F (F_OPCODE) }, { F (F_R1) }, { F (F_R2) }, { F (F_R3) }, { F (F_RESV_10_3) }, { F (F_OP_7_2) }, { F (F_RESV_5_2) }, { F (F_OP_3_4) }, { 0 } } 105 }; 106 107 static const CGEN_IFMT ifmt_l_slli ATTRIBUTE_UNUSED = { 108 32, 32, 0xfc00ffc0, { { F (F_OPCODE) }, { F (F_R1) }, { F (F_R2) }, { F (F_RESV_15_8) }, { F (F_OP_7_2) }, { F (F_UIMM6) }, { 0 } } 109 }; 110 111 static const CGEN_IFMT ifmt_l_and ATTRIBUTE_UNUSED = { 112 32, 32, 0xfc0007ff, { { F (F_OPCODE) }, { F (F_R1) }, { F (F_R2) }, { F (F_R3) }, { F (F_RESV_10_7) }, { F (F_OP_3_4) }, { 0 } } 113 }; 114 115 static const CGEN_IFMT ifmt_l_exths ATTRIBUTE_UNUSED = { 116 32, 32, 0xfc00ffff, { { F (F_OPCODE) }, { F (F_R1) }, { F (F_R2) }, { F (F_RESV_15_6) }, { F (F_OP_9_4) }, { F (F_RESV_5_2) }, { F (F_OP_3_4) }, { 0 } } 117 }; 118 119 static const CGEN_IFMT ifmt_l_cmov ATTRIBUTE_UNUSED = { 120 32, 32, 0xfc0007ff, { { F (F_OPCODE) }, { F (F_R1) }, { F (F_R2) }, { F (F_R3) }, { F (F_RESV_10_1) }, { F (F_OP_9_2) }, { F (F_RESV_7_4) }, { F (F_OP_3_4) }, { 0 } } 121 }; 122 123 static const CGEN_IFMT ifmt_l_sfgts ATTRIBUTE_UNUSED = { 124 32, 32, 0xffe007ff, { { F (F_OPCODE) }, { F (F_OP_25_5) }, { F (F_R2) }, { F (F_R3) }, { F (F_RESV_10_11) }, { 0 } } 125 }; 126 127 static const CGEN_IFMT ifmt_l_sfgtsi ATTRIBUTE_UNUSED = { 128 32, 32, 0xffe00000, { { F (F_OPCODE) }, { F (F_OP_25_5) }, { F (F_R2) }, { F (F_SIMM16) }, { 0 } } 129 }; 130 131 static const CGEN_IFMT ifmt_l_mac ATTRIBUTE_UNUSED = { 132 32, 32, 0xffe007ff, { { F (F_OPCODE) }, { F (F_OP_25_5) }, { F (F_R2) }, { F (F_R3) }, { F (F_RESV_10_7) }, { F (F_OP_3_4) }, { 0 } } 133 }; 134 135 static const CGEN_IFMT ifmt_l_maci ATTRIBUTE_UNUSED = { 136 32, 32, 0xffe00000, { { F (F_OPCODE) }, { F (F_RESV_25_5) }, { F (F_R2) }, { F (F_SIMM16) }, { 0 } } 137 }; 138 139 static const CGEN_IFMT ifmt_lf_add_s ATTRIBUTE_UNUSED = { 140 32, 32, 0xfc0007ff, { { F (F_OPCODE) }, { F (F_R1) }, { F (F_R2) }, { F (F_R3) }, { F (F_RESV_10_3) }, { F (F_OP_7_8) }, { 0 } } 141 }; 142 143 static const CGEN_IFMT ifmt_lf_add_d ATTRIBUTE_UNUSED = { 144 32, 32, 0xfc0007ff, { { F (F_OPCODE) }, { F (F_R1) }, { F (F_R1) }, { F (F_R1) }, { F (F_RESV_10_3) }, { F (F_OP_7_8) }, { 0 } } 145 }; 146 147 static const CGEN_IFMT ifmt_lf_itof_s ATTRIBUTE_UNUSED = { 148 32, 32, 0xfc00ffff, { { F (F_OPCODE) }, { F (F_R1) }, { F (F_R2) }, { F (F_R3) }, { F (F_RESV_10_3) }, { F (F_OP_7_8) }, { 0 } } 149 }; 150 151 static const CGEN_IFMT ifmt_lf_ftoi_s ATTRIBUTE_UNUSED = { 152 32, 32, 0xfc00ffff, { { F (F_OPCODE) }, { F (F_R1) }, { F (F_R2) }, { F (F_R3) }, { F (F_RESV_10_3) }, { F (F_OP_7_8) }, { 0 } } 153 }; 154 155 static const CGEN_IFMT ifmt_lf_ftoi_d ATTRIBUTE_UNUSED = { 156 32, 32, 0xfc00ffff, { { F (F_OPCODE) }, { F (F_R1) }, { F (F_R1) }, { F (F_R3) }, { F (F_RESV_10_3) }, { F (F_OP_7_8) }, { 0 } } 157 }; 158 159 static const CGEN_IFMT ifmt_lf_eq_s ATTRIBUTE_UNUSED = { 160 32, 32, 0xffe007ff, { { F (F_OPCODE) }, { F (F_R1) }, { F (F_R2) }, { F (F_R3) }, { F (F_RESV_10_3) }, { F (F_OP_7_8) }, { 0 } } 161 }; 162 163 static const CGEN_IFMT ifmt_lf_cust1_s ATTRIBUTE_UNUSED = { 164 32, 32, 0xffe007ff, { { F (F_OPCODE) }, { F (F_RESV_25_5) }, { F (F_R2) }, { F (F_R3) }, { F (F_RESV_10_3) }, { F (F_OP_7_8) }, { 0 } } 165 }; 166 167 static const CGEN_IFMT ifmt_lf_cust1_d ATTRIBUTE_UNUSED = { 168 32, 32, 0xffe007ff, { { F (F_OPCODE) }, { F (F_RESV_25_5) }, { F (F_R1) }, { F (F_R1) }, { F (F_RESV_10_3) }, { F (F_OP_7_8) }, { 0 } } 169 }; 170 171 #undef F 172 173 #define A(a) (1 << CGEN_INSN_##a) 174 #define OPERAND(op) OR1K_OPERAND_##op 175 #define MNEM CGEN_SYNTAX_MNEMONIC /* syntax value for mnemonic */ 176 #define OP(field) CGEN_SYNTAX_MAKE_FIELD (OPERAND (field)) 177 178 /* The instruction table. */ 179 180 static const CGEN_OPCODE or1k_cgen_insn_opcode_table[MAX_INSNS] = 181 { 182 /* Special null first entry. 183 A `num' value of zero is thus invalid. 184 Also, the special `invalid' insn resides here. */ 185 { { 0, 0, 0, 0 }, {{0}}, 0, {0}}, 186 /* l.j ${disp26} */ 187 { 188 { 0, 0, 0, 0 }, 189 { { MNEM, ' ', OP (DISP26), 0 } }, 190 & ifmt_l_j, { 0x0 } 191 }, 192 /* l.jal ${disp26} */ 193 { 194 { 0, 0, 0, 0 }, 195 { { MNEM, ' ', OP (DISP26), 0 } }, 196 & ifmt_l_j, { 0x4000000 } 197 }, 198 /* l.jr $rB */ 199 { 200 { 0, 0, 0, 0 }, 201 { { MNEM, ' ', OP (RB), 0 } }, 202 & ifmt_l_jr, { 0x44000000 } 203 }, 204 /* l.jalr $rB */ 205 { 206 { 0, 0, 0, 0 }, 207 { { MNEM, ' ', OP (RB), 0 } }, 208 & ifmt_l_jr, { 0x48000000 } 209 }, 210 /* l.bnf ${disp26} */ 211 { 212 { 0, 0, 0, 0 }, 213 { { MNEM, ' ', OP (DISP26), 0 } }, 214 & ifmt_l_j, { 0xc000000 } 215 }, 216 /* l.bf ${disp26} */ 217 { 218 { 0, 0, 0, 0 }, 219 { { MNEM, ' ', OP (DISP26), 0 } }, 220 & ifmt_l_j, { 0x10000000 } 221 }, 222 /* l.trap ${uimm16} */ 223 { 224 { 0, 0, 0, 0 }, 225 { { MNEM, ' ', OP (UIMM16), 0 } }, 226 & ifmt_l_trap, { 0x21000000 } 227 }, 228 /* l.sys ${uimm16} */ 229 { 230 { 0, 0, 0, 0 }, 231 { { MNEM, ' ', OP (UIMM16), 0 } }, 232 & ifmt_l_trap, { 0x20000000 } 233 }, 234 /* l.msync */ 235 { 236 { 0, 0, 0, 0 }, 237 { { MNEM, 0 } }, 238 & ifmt_l_msync, { 0x22000000 } 239 }, 240 /* l.psync */ 241 { 242 { 0, 0, 0, 0 }, 243 { { MNEM, 0 } }, 244 & ifmt_l_msync, { 0x22800000 } 245 }, 246 /* l.csync */ 247 { 248 { 0, 0, 0, 0 }, 249 { { MNEM, 0 } }, 250 & ifmt_l_msync, { 0x23000000 } 251 }, 252 /* l.rfe */ 253 { 254 { 0, 0, 0, 0 }, 255 { { MNEM, 0 } }, 256 & ifmt_l_rfe, { 0x24000000 } 257 }, 258 /* l.nop ${uimm16} */ 259 { 260 { 0, 0, 0, 0 }, 261 { { MNEM, ' ', OP (UIMM16), 0 } }, 262 & ifmt_l_nop_imm, { 0x15000000 } 263 }, 264 /* l.nop */ 265 { 266 { 0, 0, 0, 0 }, 267 { { MNEM, 0 } }, 268 & ifmt_l_nop_imm, { 0x15000000 } 269 }, 270 /* l.movhi $rD,$uimm16 */ 271 { 272 { 0, 0, 0, 0 }, 273 { { MNEM, ' ', OP (RD), ',', OP (UIMM16), 0 } }, 274 & ifmt_l_movhi, { 0x18000000 } 275 }, 276 /* l.macrc $rD */ 277 { 278 { 0, 0, 0, 0 }, 279 { { MNEM, ' ', OP (RD), 0 } }, 280 & ifmt_l_macrc, { 0x18010000 } 281 }, 282 /* l.mfspr $rD,$rA,${uimm16} */ 283 { 284 { 0, 0, 0, 0 }, 285 { { MNEM, ' ', OP (RD), ',', OP (RA), ',', OP (UIMM16), 0 } }, 286 & ifmt_l_mfspr, { 0xb4000000 } 287 }, 288 /* l.mtspr $rA,$rB,${uimm16-split} */ 289 { 290 { 0, 0, 0, 0 }, 291 { { MNEM, ' ', OP (RA), ',', OP (RB), ',', OP (UIMM16_SPLIT), 0 } }, 292 & ifmt_l_mtspr, { 0xc0000000 } 293 }, 294 /* l.lwz $rD,${simm16}($rA) */ 295 { 296 { 0, 0, 0, 0 }, 297 { { MNEM, ' ', OP (RD), ',', OP (SIMM16), '(', OP (RA), ')', 0 } }, 298 & ifmt_l_lwz, { 0x84000000 } 299 }, 300 /* l.lws $rD,${simm16}($rA) */ 301 { 302 { 0, 0, 0, 0 }, 303 { { MNEM, ' ', OP (RD), ',', OP (SIMM16), '(', OP (RA), ')', 0 } }, 304 & ifmt_l_lwz, { 0x88000000 } 305 }, 306 /* l.lwa $rD,${simm16}($rA) */ 307 { 308 { 0, 0, 0, 0 }, 309 { { MNEM, ' ', OP (RD), ',', OP (SIMM16), '(', OP (RA), ')', 0 } }, 310 & ifmt_l_lwz, { 0x6c000000 } 311 }, 312 /* l.lbz $rD,${simm16}($rA) */ 313 { 314 { 0, 0, 0, 0 }, 315 { { MNEM, ' ', OP (RD), ',', OP (SIMM16), '(', OP (RA), ')', 0 } }, 316 & ifmt_l_lwz, { 0x8c000000 } 317 }, 318 /* l.lbs $rD,${simm16}($rA) */ 319 { 320 { 0, 0, 0, 0 }, 321 { { MNEM, ' ', OP (RD), ',', OP (SIMM16), '(', OP (RA), ')', 0 } }, 322 & ifmt_l_lwz, { 0x90000000 } 323 }, 324 /* l.lhz $rD,${simm16}($rA) */ 325 { 326 { 0, 0, 0, 0 }, 327 { { MNEM, ' ', OP (RD), ',', OP (SIMM16), '(', OP (RA), ')', 0 } }, 328 & ifmt_l_lwz, { 0x94000000 } 329 }, 330 /* l.lhs $rD,${simm16}($rA) */ 331 { 332 { 0, 0, 0, 0 }, 333 { { MNEM, ' ', OP (RD), ',', OP (SIMM16), '(', OP (RA), ')', 0 } }, 334 & ifmt_l_lwz, { 0x98000000 } 335 }, 336 /* l.sw ${simm16-split}($rA),$rB */ 337 { 338 { 0, 0, 0, 0 }, 339 { { MNEM, ' ', OP (SIMM16_SPLIT), '(', OP (RA), ')', ',', OP (RB), 0 } }, 340 & ifmt_l_sw, { 0xd4000000 } 341 }, 342 /* l.sb ${simm16-split}($rA),$rB */ 343 { 344 { 0, 0, 0, 0 }, 345 { { MNEM, ' ', OP (SIMM16_SPLIT), '(', OP (RA), ')', ',', OP (RB), 0 } }, 346 & ifmt_l_sw, { 0xd8000000 } 347 }, 348 /* l.sh ${simm16-split}($rA),$rB */ 349 { 350 { 0, 0, 0, 0 }, 351 { { MNEM, ' ', OP (SIMM16_SPLIT), '(', OP (RA), ')', ',', OP (RB), 0 } }, 352 & ifmt_l_sw, { 0xdc000000 } 353 }, 354 /* l.swa ${simm16-split}($rA),$rB */ 355 { 356 { 0, 0, 0, 0 }, 357 { { MNEM, ' ', OP (SIMM16_SPLIT), '(', OP (RA), ')', ',', OP (RB), 0 } }, 358 & ifmt_l_swa, { 0xcc000000 } 359 }, 360 /* l.sll $rD,$rA,$rB */ 361 { 362 { 0, 0, 0, 0 }, 363 { { MNEM, ' ', OP (RD), ',', OP (RA), ',', OP (RB), 0 } }, 364 & ifmt_l_sll, { 0xe0000008 } 365 }, 366 /* l.slli $rD,$rA,${uimm6} */ 367 { 368 { 0, 0, 0, 0 }, 369 { { MNEM, ' ', OP (RD), ',', OP (RA), ',', OP (UIMM6), 0 } }, 370 & ifmt_l_slli, { 0xb8000000 } 371 }, 372 /* l.srl $rD,$rA,$rB */ 373 { 374 { 0, 0, 0, 0 }, 375 { { MNEM, ' ', OP (RD), ',', OP (RA), ',', OP (RB), 0 } }, 376 & ifmt_l_sll, { 0xe0000048 } 377 }, 378 /* l.srli $rD,$rA,${uimm6} */ 379 { 380 { 0, 0, 0, 0 }, 381 { { MNEM, ' ', OP (RD), ',', OP (RA), ',', OP (UIMM6), 0 } }, 382 & ifmt_l_slli, { 0xb8000040 } 383 }, 384 /* l.sra $rD,$rA,$rB */ 385 { 386 { 0, 0, 0, 0 }, 387 { { MNEM, ' ', OP (RD), ',', OP (RA), ',', OP (RB), 0 } }, 388 & ifmt_l_sll, { 0xe0000088 } 389 }, 390 /* l.srai $rD,$rA,${uimm6} */ 391 { 392 { 0, 0, 0, 0 }, 393 { { MNEM, ' ', OP (RD), ',', OP (RA), ',', OP (UIMM6), 0 } }, 394 & ifmt_l_slli, { 0xb8000080 } 395 }, 396 /* l.ror $rD,$rA,$rB */ 397 { 398 { 0, 0, 0, 0 }, 399 { { MNEM, ' ', OP (RD), ',', OP (RA), ',', OP (RB), 0 } }, 400 & ifmt_l_sll, { 0xe00000c8 } 401 }, 402 /* l.rori $rD,$rA,${uimm6} */ 403 { 404 { 0, 0, 0, 0 }, 405 { { MNEM, ' ', OP (RD), ',', OP (RA), ',', OP (UIMM6), 0 } }, 406 & ifmt_l_slli, { 0xb80000c0 } 407 }, 408 /* l.and $rD,$rA,$rB */ 409 { 410 { 0, 0, 0, 0 }, 411 { { MNEM, ' ', OP (RD), ',', OP (RA), ',', OP (RB), 0 } }, 412 & ifmt_l_and, { 0xe0000003 } 413 }, 414 /* l.or $rD,$rA,$rB */ 415 { 416 { 0, 0, 0, 0 }, 417 { { MNEM, ' ', OP (RD), ',', OP (RA), ',', OP (RB), 0 } }, 418 & ifmt_l_and, { 0xe0000004 } 419 }, 420 /* l.xor $rD,$rA,$rB */ 421 { 422 { 0, 0, 0, 0 }, 423 { { MNEM, ' ', OP (RD), ',', OP (RA), ',', OP (RB), 0 } }, 424 & ifmt_l_and, { 0xe0000005 } 425 }, 426 /* l.add $rD,$rA,$rB */ 427 { 428 { 0, 0, 0, 0 }, 429 { { MNEM, ' ', OP (RD), ',', OP (RA), ',', OP (RB), 0 } }, 430 & ifmt_l_and, { 0xe0000000 } 431 }, 432 /* l.sub $rD,$rA,$rB */ 433 { 434 { 0, 0, 0, 0 }, 435 { { MNEM, ' ', OP (RD), ',', OP (RA), ',', OP (RB), 0 } }, 436 & ifmt_l_and, { 0xe0000002 } 437 }, 438 /* l.addc $rD,$rA,$rB */ 439 { 440 { 0, 0, 0, 0 }, 441 { { MNEM, ' ', OP (RD), ',', OP (RA), ',', OP (RB), 0 } }, 442 & ifmt_l_and, { 0xe0000001 } 443 }, 444 /* l.mul $rD,$rA,$rB */ 445 { 446 { 0, 0, 0, 0 }, 447 { { MNEM, ' ', OP (RD), ',', OP (RA), ',', OP (RB), 0 } }, 448 & ifmt_l_and, { 0xe0000306 } 449 }, 450 /* l.mulu $rD,$rA,$rB */ 451 { 452 { 0, 0, 0, 0 }, 453 { { MNEM, ' ', OP (RD), ',', OP (RA), ',', OP (RB), 0 } }, 454 & ifmt_l_and, { 0xe000030b } 455 }, 456 /* l.div $rD,$rA,$rB */ 457 { 458 { 0, 0, 0, 0 }, 459 { { MNEM, ' ', OP (RD), ',', OP (RA), ',', OP (RB), 0 } }, 460 & ifmt_l_and, { 0xe0000309 } 461 }, 462 /* l.divu $rD,$rA,$rB */ 463 { 464 { 0, 0, 0, 0 }, 465 { { MNEM, ' ', OP (RD), ',', OP (RA), ',', OP (RB), 0 } }, 466 & ifmt_l_and, { 0xe000030a } 467 }, 468 /* l.ff1 $rD,$rA */ 469 { 470 { 0, 0, 0, 0 }, 471 { { MNEM, ' ', OP (RD), ',', OP (RA), 0 } }, 472 & ifmt_l_and, { 0xe000000f } 473 }, 474 /* l.fl1 $rD,$rA */ 475 { 476 { 0, 0, 0, 0 }, 477 { { MNEM, ' ', OP (RD), ',', OP (RA), 0 } }, 478 & ifmt_l_and, { 0xe000010f } 479 }, 480 /* l.andi $rD,$rA,$uimm16 */ 481 { 482 { 0, 0, 0, 0 }, 483 { { MNEM, ' ', OP (RD), ',', OP (RA), ',', OP (UIMM16), 0 } }, 484 & ifmt_l_mfspr, { 0xa4000000 } 485 }, 486 /* l.ori $rD,$rA,$uimm16 */ 487 { 488 { 0, 0, 0, 0 }, 489 { { MNEM, ' ', OP (RD), ',', OP (RA), ',', OP (UIMM16), 0 } }, 490 & ifmt_l_mfspr, { 0xa8000000 } 491 }, 492 /* l.xori $rD,$rA,$simm16 */ 493 { 494 { 0, 0, 0, 0 }, 495 { { MNEM, ' ', OP (RD), ',', OP (RA), ',', OP (SIMM16), 0 } }, 496 & ifmt_l_lwz, { 0xac000000 } 497 }, 498 /* l.addi $rD,$rA,$simm16 */ 499 { 500 { 0, 0, 0, 0 }, 501 { { MNEM, ' ', OP (RD), ',', OP (RA), ',', OP (SIMM16), 0 } }, 502 & ifmt_l_lwz, { 0x9c000000 } 503 }, 504 /* l.addic $rD,$rA,$simm16 */ 505 { 506 { 0, 0, 0, 0 }, 507 { { MNEM, ' ', OP (RD), ',', OP (RA), ',', OP (SIMM16), 0 } }, 508 & ifmt_l_lwz, { 0xa0000000 } 509 }, 510 /* l.muli $rD,$rA,$simm16 */ 511 { 512 { 0, 0, 0, 0 }, 513 { { MNEM, ' ', OP (RD), ',', OP (RA), ',', OP (SIMM16), 0 } }, 514 & ifmt_l_lwz, { 0xb0000000 } 515 }, 516 /* l.exths $rD,$rA */ 517 { 518 { 0, 0, 0, 0 }, 519 { { MNEM, ' ', OP (RD), ',', OP (RA), 0 } }, 520 & ifmt_l_exths, { 0xe000000c } 521 }, 522 /* l.extbs $rD,$rA */ 523 { 524 { 0, 0, 0, 0 }, 525 { { MNEM, ' ', OP (RD), ',', OP (RA), 0 } }, 526 & ifmt_l_exths, { 0xe000004c } 527 }, 528 /* l.exthz $rD,$rA */ 529 { 530 { 0, 0, 0, 0 }, 531 { { MNEM, ' ', OP (RD), ',', OP (RA), 0 } }, 532 & ifmt_l_exths, { 0xe000008c } 533 }, 534 /* l.extbz $rD,$rA */ 535 { 536 { 0, 0, 0, 0 }, 537 { { MNEM, ' ', OP (RD), ',', OP (RA), 0 } }, 538 & ifmt_l_exths, { 0xe00000cc } 539 }, 540 /* l.extws $rD,$rA */ 541 { 542 { 0, 0, 0, 0 }, 543 { { MNEM, ' ', OP (RD), ',', OP (RA), 0 } }, 544 & ifmt_l_exths, { 0xe000000d } 545 }, 546 /* l.extwz $rD,$rA */ 547 { 548 { 0, 0, 0, 0 }, 549 { { MNEM, ' ', OP (RD), ',', OP (RA), 0 } }, 550 & ifmt_l_exths, { 0xe000004d } 551 }, 552 /* l.cmov $rD,$rA,$rB */ 553 { 554 { 0, 0, 0, 0 }, 555 { { MNEM, ' ', OP (RD), ',', OP (RA), ',', OP (RB), 0 } }, 556 & ifmt_l_cmov, { 0xe000000e } 557 }, 558 /* l.sfgts $rA,$rB */ 559 { 560 { 0, 0, 0, 0 }, 561 { { MNEM, ' ', OP (RA), ',', OP (RB), 0 } }, 562 & ifmt_l_sfgts, { 0xe5400000 } 563 }, 564 /* l.sfgtsi $rA,$simm16 */ 565 { 566 { 0, 0, 0, 0 }, 567 { { MNEM, ' ', OP (RA), ',', OP (SIMM16), 0 } }, 568 & ifmt_l_sfgtsi, { 0xbd400000 } 569 }, 570 /* l.sfgtu $rA,$rB */ 571 { 572 { 0, 0, 0, 0 }, 573 { { MNEM, ' ', OP (RA), ',', OP (RB), 0 } }, 574 & ifmt_l_sfgts, { 0xe4400000 } 575 }, 576 /* l.sfgtui $rA,$simm16 */ 577 { 578 { 0, 0, 0, 0 }, 579 { { MNEM, ' ', OP (RA), ',', OP (SIMM16), 0 } }, 580 & ifmt_l_sfgtsi, { 0xbc400000 } 581 }, 582 /* l.sfges $rA,$rB */ 583 { 584 { 0, 0, 0, 0 }, 585 { { MNEM, ' ', OP (RA), ',', OP (RB), 0 } }, 586 & ifmt_l_sfgts, { 0xe5600000 } 587 }, 588 /* l.sfgesi $rA,$simm16 */ 589 { 590 { 0, 0, 0, 0 }, 591 { { MNEM, ' ', OP (RA), ',', OP (SIMM16), 0 } }, 592 & ifmt_l_sfgtsi, { 0xbd600000 } 593 }, 594 /* l.sfgeu $rA,$rB */ 595 { 596 { 0, 0, 0, 0 }, 597 { { MNEM, ' ', OP (RA), ',', OP (RB), 0 } }, 598 & ifmt_l_sfgts, { 0xe4600000 } 599 }, 600 /* l.sfgeui $rA,$simm16 */ 601 { 602 { 0, 0, 0, 0 }, 603 { { MNEM, ' ', OP (RA), ',', OP (SIMM16), 0 } }, 604 & ifmt_l_sfgtsi, { 0xbc600000 } 605 }, 606 /* l.sflts $rA,$rB */ 607 { 608 { 0, 0, 0, 0 }, 609 { { MNEM, ' ', OP (RA), ',', OP (RB), 0 } }, 610 & ifmt_l_sfgts, { 0xe5800000 } 611 }, 612 /* l.sfltsi $rA,$simm16 */ 613 { 614 { 0, 0, 0, 0 }, 615 { { MNEM, ' ', OP (RA), ',', OP (SIMM16), 0 } }, 616 & ifmt_l_sfgtsi, { 0xbd800000 } 617 }, 618 /* l.sfltu $rA,$rB */ 619 { 620 { 0, 0, 0, 0 }, 621 { { MNEM, ' ', OP (RA), ',', OP (RB), 0 } }, 622 & ifmt_l_sfgts, { 0xe4800000 } 623 }, 624 /* l.sfltui $rA,$simm16 */ 625 { 626 { 0, 0, 0, 0 }, 627 { { MNEM, ' ', OP (RA), ',', OP (SIMM16), 0 } }, 628 & ifmt_l_sfgtsi, { 0xbc800000 } 629 }, 630 /* l.sfles $rA,$rB */ 631 { 632 { 0, 0, 0, 0 }, 633 { { MNEM, ' ', OP (RA), ',', OP (RB), 0 } }, 634 & ifmt_l_sfgts, { 0xe5a00000 } 635 }, 636 /* l.sflesi $rA,$simm16 */ 637 { 638 { 0, 0, 0, 0 }, 639 { { MNEM, ' ', OP (RA), ',', OP (SIMM16), 0 } }, 640 & ifmt_l_sfgtsi, { 0xbda00000 } 641 }, 642 /* l.sfleu $rA,$rB */ 643 { 644 { 0, 0, 0, 0 }, 645 { { MNEM, ' ', OP (RA), ',', OP (RB), 0 } }, 646 & ifmt_l_sfgts, { 0xe4a00000 } 647 }, 648 /* l.sfleui $rA,$simm16 */ 649 { 650 { 0, 0, 0, 0 }, 651 { { MNEM, ' ', OP (RA), ',', OP (SIMM16), 0 } }, 652 & ifmt_l_sfgtsi, { 0xbca00000 } 653 }, 654 /* l.sfeq $rA,$rB */ 655 { 656 { 0, 0, 0, 0 }, 657 { { MNEM, ' ', OP (RA), ',', OP (RB), 0 } }, 658 & ifmt_l_sfgts, { 0xe4000000 } 659 }, 660 /* l.sfeqi $rA,$simm16 */ 661 { 662 { 0, 0, 0, 0 }, 663 { { MNEM, ' ', OP (RA), ',', OP (SIMM16), 0 } }, 664 & ifmt_l_sfgtsi, { 0xbc000000 } 665 }, 666 /* l.sfne $rA,$rB */ 667 { 668 { 0, 0, 0, 0 }, 669 { { MNEM, ' ', OP (RA), ',', OP (RB), 0 } }, 670 & ifmt_l_sfgts, { 0xe4200000 } 671 }, 672 /* l.sfnei $rA,$simm16 */ 673 { 674 { 0, 0, 0, 0 }, 675 { { MNEM, ' ', OP (RA), ',', OP (SIMM16), 0 } }, 676 & ifmt_l_sfgtsi, { 0xbc200000 } 677 }, 678 /* l.mac $rA,$rB */ 679 { 680 { 0, 0, 0, 0 }, 681 { { MNEM, ' ', OP (RA), ',', OP (RB), 0 } }, 682 & ifmt_l_mac, { 0xc4000001 } 683 }, 684 /* l.msb $rA,$rB */ 685 { 686 { 0, 0, 0, 0 }, 687 { { MNEM, ' ', OP (RA), ',', OP (RB), 0 } }, 688 & ifmt_l_mac, { 0xc4000002 } 689 }, 690 /* l.maci $rA,${simm16} */ 691 { 692 { 0, 0, 0, 0 }, 693 { { MNEM, ' ', OP (RA), ',', OP (SIMM16), 0 } }, 694 & ifmt_l_maci, { 0x4c000000 } 695 }, 696 /* l.cust1 */ 697 { 698 { 0, 0, 0, 0 }, 699 { { MNEM, 0 } }, 700 & ifmt_l_rfe, { 0x70000000 } 701 }, 702 /* l.cust2 */ 703 { 704 { 0, 0, 0, 0 }, 705 { { MNEM, 0 } }, 706 & ifmt_l_rfe, { 0x74000000 } 707 }, 708 /* l.cust3 */ 709 { 710 { 0, 0, 0, 0 }, 711 { { MNEM, 0 } }, 712 & ifmt_l_rfe, { 0x78000000 } 713 }, 714 /* l.cust4 */ 715 { 716 { 0, 0, 0, 0 }, 717 { { MNEM, 0 } }, 718 & ifmt_l_rfe, { 0x7c000000 } 719 }, 720 /* l.cust5 */ 721 { 722 { 0, 0, 0, 0 }, 723 { { MNEM, 0 } }, 724 & ifmt_l_rfe, { 0xf0000000 } 725 }, 726 /* l.cust6 */ 727 { 728 { 0, 0, 0, 0 }, 729 { { MNEM, 0 } }, 730 & ifmt_l_rfe, { 0xf4000000 } 731 }, 732 /* l.cust7 */ 733 { 734 { 0, 0, 0, 0 }, 735 { { MNEM, 0 } }, 736 & ifmt_l_rfe, { 0xf8000000 } 737 }, 738 /* l.cust8 */ 739 { 740 { 0, 0, 0, 0 }, 741 { { MNEM, 0 } }, 742 & ifmt_l_rfe, { 0xfc000000 } 743 }, 744 /* lf.add.s $rDSF,$rASF,$rBSF */ 745 { 746 { 0, 0, 0, 0 }, 747 { { MNEM, ' ', OP (RDSF), ',', OP (RASF), ',', OP (RBSF), 0 } }, 748 & ifmt_lf_add_s, { 0xc8000000 } 749 }, 750 /* lf.add.d $rDDF,$rADF,$rBDF */ 751 { 752 { 0, 0, 0, 0 }, 753 { { MNEM, ' ', OP (RDDF), ',', OP (RADF), ',', OP (RBDF), 0 } }, 754 & ifmt_lf_add_d, { 0xc8000010 } 755 }, 756 /* lf.sub.s $rDSF,$rASF,$rBSF */ 757 { 758 { 0, 0, 0, 0 }, 759 { { MNEM, ' ', OP (RDSF), ',', OP (RASF), ',', OP (RBSF), 0 } }, 760 & ifmt_lf_add_s, { 0xc8000001 } 761 }, 762 /* lf.sub.d $rDDF,$rADF,$rBDF */ 763 { 764 { 0, 0, 0, 0 }, 765 { { MNEM, ' ', OP (RDDF), ',', OP (RADF), ',', OP (RBDF), 0 } }, 766 & ifmt_lf_add_d, { 0xc8000011 } 767 }, 768 /* lf.mul.s $rDSF,$rASF,$rBSF */ 769 { 770 { 0, 0, 0, 0 }, 771 { { MNEM, ' ', OP (RDSF), ',', OP (RASF), ',', OP (RBSF), 0 } }, 772 & ifmt_lf_add_s, { 0xc8000002 } 773 }, 774 /* lf.mul.d $rDDF,$rADF,$rBDF */ 775 { 776 { 0, 0, 0, 0 }, 777 { { MNEM, ' ', OP (RDDF), ',', OP (RADF), ',', OP (RBDF), 0 } }, 778 & ifmt_lf_add_d, { 0xc8000012 } 779 }, 780 /* lf.div.s $rDSF,$rASF,$rBSF */ 781 { 782 { 0, 0, 0, 0 }, 783 { { MNEM, ' ', OP (RDSF), ',', OP (RASF), ',', OP (RBSF), 0 } }, 784 & ifmt_lf_add_s, { 0xc8000003 } 785 }, 786 /* lf.div.d $rDDF,$rADF,$rBDF */ 787 { 788 { 0, 0, 0, 0 }, 789 { { MNEM, ' ', OP (RDDF), ',', OP (RADF), ',', OP (RBDF), 0 } }, 790 & ifmt_lf_add_d, { 0xc8000013 } 791 }, 792 /* lf.rem.s $rDSF,$rASF,$rBSF */ 793 { 794 { 0, 0, 0, 0 }, 795 { { MNEM, ' ', OP (RDSF), ',', OP (RASF), ',', OP (RBSF), 0 } }, 796 & ifmt_lf_add_s, { 0xc8000006 } 797 }, 798 /* lf.rem.d $rDDF,$rADF,$rBDF */ 799 { 800 { 0, 0, 0, 0 }, 801 { { MNEM, ' ', OP (RDDF), ',', OP (RADF), ',', OP (RBDF), 0 } }, 802 & ifmt_lf_add_d, { 0xc8000016 } 803 }, 804 /* lf.itof.s $rDSF,$rA */ 805 { 806 { 0, 0, 0, 0 }, 807 { { MNEM, ' ', OP (RDSF), ',', OP (RA), 0 } }, 808 & ifmt_lf_itof_s, { 0xc8000004 } 809 }, 810 /* lf.itof.d $rDSF,$rA */ 811 { 812 { 0, 0, 0, 0 }, 813 { { MNEM, ' ', OP (RDSF), ',', OP (RA), 0 } }, 814 & ifmt_lf_itof_s, { 0xc8000014 } 815 }, 816 /* lf.ftoi.s $rD,$rASF */ 817 { 818 { 0, 0, 0, 0 }, 819 { { MNEM, ' ', OP (RD), ',', OP (RASF), 0 } }, 820 & ifmt_lf_ftoi_s, { 0xc8000005 } 821 }, 822 /* lf.ftoi.d $rD,$rADF */ 823 { 824 { 0, 0, 0, 0 }, 825 { { MNEM, ' ', OP (RD), ',', OP (RADF), 0 } }, 826 & ifmt_lf_ftoi_d, { 0xc8000015 } 827 }, 828 /* lf.sfeq.s $rASF,$rBSF */ 829 { 830 { 0, 0, 0, 0 }, 831 { { MNEM, ' ', OP (RASF), ',', OP (RBSF), 0 } }, 832 & ifmt_lf_eq_s, { 0xc8000008 } 833 }, 834 /* lf.sfeq.d $rASF,$rBSF */ 835 { 836 { 0, 0, 0, 0 }, 837 { { MNEM, ' ', OP (RASF), ',', OP (RBSF), 0 } }, 838 & ifmt_lf_eq_s, { 0xc8000018 } 839 }, 840 /* lf.sfne.s $rASF,$rBSF */ 841 { 842 { 0, 0, 0, 0 }, 843 { { MNEM, ' ', OP (RASF), ',', OP (RBSF), 0 } }, 844 & ifmt_lf_eq_s, { 0xc8000009 } 845 }, 846 /* lf.sfne.d $rASF,$rBSF */ 847 { 848 { 0, 0, 0, 0 }, 849 { { MNEM, ' ', OP (RASF), ',', OP (RBSF), 0 } }, 850 & ifmt_lf_eq_s, { 0xc8000019 } 851 }, 852 /* lf.sfge.s $rASF,$rBSF */ 853 { 854 { 0, 0, 0, 0 }, 855 { { MNEM, ' ', OP (RASF), ',', OP (RBSF), 0 } }, 856 & ifmt_lf_eq_s, { 0xc800000b } 857 }, 858 /* lf.sfge.d $rASF,$rBSF */ 859 { 860 { 0, 0, 0, 0 }, 861 { { MNEM, ' ', OP (RASF), ',', OP (RBSF), 0 } }, 862 & ifmt_lf_eq_s, { 0xc800001b } 863 }, 864 /* lf.sfgt.s $rASF,$rBSF */ 865 { 866 { 0, 0, 0, 0 }, 867 { { MNEM, ' ', OP (RASF), ',', OP (RBSF), 0 } }, 868 & ifmt_lf_eq_s, { 0xc800000a } 869 }, 870 /* lf.sfgt.d $rASF,$rBSF */ 871 { 872 { 0, 0, 0, 0 }, 873 { { MNEM, ' ', OP (RASF), ',', OP (RBSF), 0 } }, 874 & ifmt_lf_eq_s, { 0xc800001a } 875 }, 876 /* lf.sflt.s $rASF,$rBSF */ 877 { 878 { 0, 0, 0, 0 }, 879 { { MNEM, ' ', OP (RASF), ',', OP (RBSF), 0 } }, 880 & ifmt_lf_eq_s, { 0xc800000c } 881 }, 882 /* lf.sflt.d $rASF,$rBSF */ 883 { 884 { 0, 0, 0, 0 }, 885 { { MNEM, ' ', OP (RASF), ',', OP (RBSF), 0 } }, 886 & ifmt_lf_eq_s, { 0xc800001c } 887 }, 888 /* lf.sfle.s $rASF,$rBSF */ 889 { 890 { 0, 0, 0, 0 }, 891 { { MNEM, ' ', OP (RASF), ',', OP (RBSF), 0 } }, 892 & ifmt_lf_eq_s, { 0xc800000d } 893 }, 894 /* lf.sfle.d $rASF,$rBSF */ 895 { 896 { 0, 0, 0, 0 }, 897 { { MNEM, ' ', OP (RASF), ',', OP (RBSF), 0 } }, 898 & ifmt_lf_eq_s, { 0xc800001d } 899 }, 900 /* lf.madd.s $rDSF,$rASF,$rBSF */ 901 { 902 { 0, 0, 0, 0 }, 903 { { MNEM, ' ', OP (RDSF), ',', OP (RASF), ',', OP (RBSF), 0 } }, 904 & ifmt_lf_add_s, { 0xc8000007 } 905 }, 906 /* lf.madd.d $rDDF,$rADF,$rBDF */ 907 { 908 { 0, 0, 0, 0 }, 909 { { MNEM, ' ', OP (RDDF), ',', OP (RADF), ',', OP (RBDF), 0 } }, 910 & ifmt_lf_add_d, { 0xc8000017 } 911 }, 912 /* lf.cust1.s $rASF,$rBSF */ 913 { 914 { 0, 0, 0, 0 }, 915 { { MNEM, ' ', OP (RASF), ',', OP (RBSF), 0 } }, 916 & ifmt_lf_cust1_s, { 0xc80000d0 } 917 }, 918 /* lf.cust1.d */ 919 { 920 { 0, 0, 0, 0 }, 921 { { MNEM, 0 } }, 922 & ifmt_lf_cust1_d, { 0xc80000e0 } 923 }, 924 }; 925 926 #undef A 927 #undef OPERAND 928 #undef MNEM 929 #undef OP 930 931 /* Formats for ALIAS macro-insns. */ 932 933 #define F(f) & or1k_cgen_ifld_table[OR1K_##f] 934 #undef F 935 936 /* Each non-simple macro entry points to an array of expansion possibilities. */ 937 938 #define A(a) (1 << CGEN_INSN_##a) 939 #define OPERAND(op) OR1K_OPERAND_##op 940 #define MNEM CGEN_SYNTAX_MNEMONIC /* syntax value for mnemonic */ 941 #define OP(field) CGEN_SYNTAX_MAKE_FIELD (OPERAND (field)) 942 943 /* The macro instruction table. */ 944 945 static const CGEN_IBASE or1k_cgen_macro_insn_table[] = 946 { 947 }; 948 949 /* The macro instruction opcode table. */ 950 951 static const CGEN_OPCODE or1k_cgen_macro_insn_opcode_table[] = 952 { 953 }; 954 955 #undef A 956 #undef OPERAND 957 #undef MNEM 958 #undef OP 959 960 #ifndef CGEN_ASM_HASH_P 961 #define CGEN_ASM_HASH_P(insn) 1 962 #endif 963 964 #ifndef CGEN_DIS_HASH_P 965 #define CGEN_DIS_HASH_P(insn) 1 966 #endif 967 968 /* Return non-zero if INSN is to be added to the hash table. 969 Targets are free to override CGEN_{ASM,DIS}_HASH_P in the .opc file. */ 970 971 static int 972 asm_hash_insn_p (const CGEN_INSN *insn ATTRIBUTE_UNUSED) 973 { 974 return CGEN_ASM_HASH_P (insn); 975 } 976 977 static int 978 dis_hash_insn_p (const CGEN_INSN *insn) 979 { 980 /* If building the hash table and the NO-DIS attribute is present, 981 ignore. */ 982 if (CGEN_INSN_ATTR_VALUE (insn, CGEN_INSN_NO_DIS)) 983 return 0; 984 return CGEN_DIS_HASH_P (insn); 985 } 986 987 #ifndef CGEN_ASM_HASH 988 #define CGEN_ASM_HASH_SIZE 127 989 #ifdef CGEN_MNEMONIC_OPERANDS 990 #define CGEN_ASM_HASH(mnem) (*(unsigned char *) (mnem) % CGEN_ASM_HASH_SIZE) 991 #else 992 #define CGEN_ASM_HASH(mnem) (*(unsigned char *) (mnem) % CGEN_ASM_HASH_SIZE) /*FIXME*/ 993 #endif 994 #endif 995 996 /* It doesn't make much sense to provide a default here, 997 but while this is under development we do. 998 BUFFER is a pointer to the bytes of the insn, target order. 999 VALUE is the first base_insn_bitsize bits as an int in host order. */ 1000 1001 #ifndef CGEN_DIS_HASH 1002 #define CGEN_DIS_HASH_SIZE 256 1003 #define CGEN_DIS_HASH(buf, value) (*(unsigned char *) (buf)) 1004 #endif 1005 1006 /* The result is the hash value of the insn. 1007 Targets are free to override CGEN_{ASM,DIS}_HASH in the .opc file. */ 1008 1009 static unsigned int 1010 asm_hash_insn (const char *mnem) 1011 { 1012 return CGEN_ASM_HASH (mnem); 1013 } 1014 1015 /* BUF is a pointer to the bytes of the insn, target order. 1016 VALUE is the first base_insn_bitsize bits as an int in host order. */ 1017 1018 static unsigned int 1019 dis_hash_insn (const char *buf ATTRIBUTE_UNUSED, 1020 CGEN_INSN_INT value ATTRIBUTE_UNUSED) 1021 { 1022 return CGEN_DIS_HASH (buf, value); 1023 } 1024 1025 /* Set the recorded length of the insn in the CGEN_FIELDS struct. */ 1026 1027 static void 1028 set_fields_bitsize (CGEN_FIELDS *fields, int size) 1029 { 1030 CGEN_FIELDS_BITSIZE (fields) = size; 1031 } 1032 1033 /* Function to call before using the operand instance table. 1034 This plugs the opcode entries and macro instructions into the cpu table. */ 1035 1036 void 1037 or1k_cgen_init_opcode_table (CGEN_CPU_DESC cd) 1038 { 1039 int i; 1040 int num_macros = (sizeof (or1k_cgen_macro_insn_table) / 1041 sizeof (or1k_cgen_macro_insn_table[0])); 1042 const CGEN_IBASE *ib = & or1k_cgen_macro_insn_table[0]; 1043 const CGEN_OPCODE *oc = & or1k_cgen_macro_insn_opcode_table[0]; 1044 CGEN_INSN *insns = xmalloc (num_macros * sizeof (CGEN_INSN)); 1045 1046 /* This test has been added to avoid a warning generated 1047 if memset is called with a third argument of value zero. */ 1048 if (num_macros >= 1) 1049 memset (insns, 0, num_macros * sizeof (CGEN_INSN)); 1050 for (i = 0; i < num_macros; ++i) 1051 { 1052 insns[i].base = &ib[i]; 1053 insns[i].opcode = &oc[i]; 1054 or1k_cgen_build_insn_regex (& insns[i]); 1055 } 1056 cd->macro_insn_table.init_entries = insns; 1057 cd->macro_insn_table.entry_size = sizeof (CGEN_IBASE); 1058 cd->macro_insn_table.num_init_entries = num_macros; 1059 1060 oc = & or1k_cgen_insn_opcode_table[0]; 1061 insns = (CGEN_INSN *) cd->insn_table.init_entries; 1062 for (i = 0; i < MAX_INSNS; ++i) 1063 { 1064 insns[i].opcode = &oc[i]; 1065 or1k_cgen_build_insn_regex (& insns[i]); 1066 } 1067 1068 cd->sizeof_fields = sizeof (CGEN_FIELDS); 1069 cd->set_fields_bitsize = set_fields_bitsize; 1070 1071 cd->asm_hash_p = asm_hash_insn_p; 1072 cd->asm_hash = asm_hash_insn; 1073 cd->asm_hash_size = CGEN_ASM_HASH_SIZE; 1074 1075 cd->dis_hash_p = dis_hash_insn_p; 1076 cd->dis_hash = dis_hash_insn; 1077 cd->dis_hash_size = CGEN_DIS_HASH_SIZE; 1078 } 1079