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-2020 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 /* Special check to ensure that instruction exists for given machine. */ 37 38 int 39 or1k_cgen_insn_supported (CGEN_CPU_DESC cd, const CGEN_INSN *insn) 40 { 41 int machs = CGEN_INSN_ATTR_VALUE (insn, CGEN_INSN_MACH); 42 43 /* No mach attribute? Assume it's supported for all machs. */ 44 if (machs == 0) 45 return 1; 46 47 return ((machs & cd->machs) != 0); 48 } 49 50 /* -- */ 51 /* The hash functions are recorded here to help keep assembler code out of 52 the disassembler and vice versa. */ 53 54 static int asm_hash_insn_p (const CGEN_INSN *); 55 static unsigned int asm_hash_insn (const char *); 56 static int dis_hash_insn_p (const CGEN_INSN *); 57 static unsigned int dis_hash_insn (const char *, CGEN_INSN_INT); 58 59 /* Instruction formats. */ 60 61 #define F(f) & or1k_cgen_ifld_table[OR1K_##f] 62 static const CGEN_IFMT ifmt_empty ATTRIBUTE_UNUSED = { 63 0, 0, 0x0, { { 0 } } 64 }; 65 66 static const CGEN_IFMT ifmt_l_j ATTRIBUTE_UNUSED = { 67 32, 32, 0xfc000000, { { F (F_OPCODE) }, { F (F_DISP26) }, { 0 } } 68 }; 69 70 static const CGEN_IFMT ifmt_l_adrp ATTRIBUTE_UNUSED = { 71 32, 32, 0xfc000000, { { F (F_OPCODE) }, { F (F_R1) }, { F (F_DISP21) }, { 0 } } 72 }; 73 74 static const CGEN_IFMT ifmt_l_jr ATTRIBUTE_UNUSED = { 75 32, 32, 0xffff07ff, { { F (F_OPCODE) }, { F (F_RESV_25_10) }, { F (F_R3) }, { F (F_RESV_10_11) }, { 0 } } 76 }; 77 78 static const CGEN_IFMT ifmt_l_trap ATTRIBUTE_UNUSED = { 79 32, 32, 0xffff0000, { { F (F_OPCODE) }, { F (F_OP_25_5) }, { F (F_RESV_20_5) }, { F (F_UIMM16) }, { 0 } } 80 }; 81 82 static const CGEN_IFMT ifmt_l_msync ATTRIBUTE_UNUSED = { 83 32, 32, 0xffffffff, { { F (F_OPCODE) }, { F (F_OP_25_5) }, { F (F_RESV_20_21) }, { 0 } } 84 }; 85 86 static const CGEN_IFMT ifmt_l_rfe ATTRIBUTE_UNUSED = { 87 32, 32, 0xffffffff, { { F (F_OPCODE) }, { F (F_RESV_25_26) }, { 0 } } 88 }; 89 90 static const CGEN_IFMT ifmt_l_nop_imm ATTRIBUTE_UNUSED = { 91 32, 32, 0xffff0000, { { F (F_OPCODE) }, { F (F_OP_25_2) }, { F (F_RESV_23_8) }, { F (F_UIMM16) }, { 0 } } 92 }; 93 94 static const CGEN_IFMT ifmt_l_movhi ATTRIBUTE_UNUSED = { 95 32, 32, 0xfc1f0000, { { F (F_OPCODE) }, { F (F_R1) }, { F (F_RESV_20_4) }, { F (F_OP_16_1) }, { F (F_UIMM16) }, { 0 } } 96 }; 97 98 static const CGEN_IFMT ifmt_l_macrc ATTRIBUTE_UNUSED = { 99 32, 32, 0xfc1fffff, { { F (F_OPCODE) }, { F (F_R1) }, { F (F_RESV_20_4) }, { F (F_OP_16_1) }, { F (F_UIMM16) }, { 0 } } 100 }; 101 102 static const CGEN_IFMT ifmt_l_mfspr ATTRIBUTE_UNUSED = { 103 32, 32, 0xfc000000, { { F (F_OPCODE) }, { F (F_R1) }, { F (F_R2) }, { F (F_UIMM16) }, { 0 } } 104 }; 105 106 static const CGEN_IFMT ifmt_l_mtspr ATTRIBUTE_UNUSED = { 107 32, 32, 0xfc000000, { { F (F_OPCODE) }, { F (F_R2) }, { F (F_R3) }, { F (F_UIMM16_SPLIT) }, { 0 } } 108 }; 109 110 static const CGEN_IFMT ifmt_l_lwz ATTRIBUTE_UNUSED = { 111 32, 32, 0xfc000000, { { F (F_OPCODE) }, { F (F_R1) }, { F (F_R2) }, { F (F_SIMM16) }, { 0 } } 112 }; 113 114 static const CGEN_IFMT ifmt_l_sw ATTRIBUTE_UNUSED = { 115 32, 32, 0xfc000000, { { F (F_OPCODE) }, { F (F_R2) }, { F (F_R3) }, { F (F_SIMM16_SPLIT) }, { 0 } } 116 }; 117 118 static const CGEN_IFMT ifmt_l_swa ATTRIBUTE_UNUSED = { 119 32, 32, 0xfc000000, { { F (F_OPCODE) }, { F (F_R2) }, { F (F_R3) }, { F (F_SIMM16) }, { 0 } } 120 }; 121 122 static const CGEN_IFMT ifmt_l_sll ATTRIBUTE_UNUSED = { 123 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 } } 124 }; 125 126 static const CGEN_IFMT ifmt_l_slli ATTRIBUTE_UNUSED = { 127 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 } } 128 }; 129 130 static const CGEN_IFMT ifmt_l_and ATTRIBUTE_UNUSED = { 131 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 } } 132 }; 133 134 static const CGEN_IFMT ifmt_l_muld ATTRIBUTE_UNUSED = { 135 32, 32, 0xffe007ff, { { F (F_OPCODE) }, { F (F_RESV_25_5) }, { F (F_R2) }, { F (F_R3) }, { F (F_RESV_10_7) }, { F (F_OP_3_4) }, { 0 } } 136 }; 137 138 static const CGEN_IFMT ifmt_l_exths ATTRIBUTE_UNUSED = { 139 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 } } 140 }; 141 142 static const CGEN_IFMT ifmt_l_cmov ATTRIBUTE_UNUSED = { 143 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 } } 144 }; 145 146 static const CGEN_IFMT ifmt_l_sfgts ATTRIBUTE_UNUSED = { 147 32, 32, 0xffe007ff, { { F (F_OPCODE) }, { F (F_OP_25_5) }, { F (F_R2) }, { F (F_R3) }, { F (F_RESV_10_11) }, { 0 } } 148 }; 149 150 static const CGEN_IFMT ifmt_l_sfgtsi ATTRIBUTE_UNUSED = { 151 32, 32, 0xffe00000, { { F (F_OPCODE) }, { F (F_OP_25_5) }, { F (F_R2) }, { F (F_SIMM16) }, { 0 } } 152 }; 153 154 static const CGEN_IFMT ifmt_l_mac ATTRIBUTE_UNUSED = { 155 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 } } 156 }; 157 158 static const CGEN_IFMT ifmt_l_maci ATTRIBUTE_UNUSED = { 159 32, 32, 0xffe00000, { { F (F_OPCODE) }, { F (F_RESV_25_5) }, { F (F_R2) }, { F (F_SIMM16) }, { 0 } } 160 }; 161 162 static const CGEN_IFMT ifmt_lf_add_s ATTRIBUTE_UNUSED = { 163 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 } } 164 }; 165 166 static const CGEN_IFMT ifmt_lf_add_d ATTRIBUTE_UNUSED = { 167 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 } } 168 }; 169 170 static const CGEN_IFMT ifmt_lf_add_d32 ATTRIBUTE_UNUSED = { 171 32, 32, 0xfc0000ff, { { F (F_OPCODE) }, { F (F_RDD32) }, { F (F_RAD32) }, { F (F_RBD32) }, { F (F_OP_7_8) }, { 0 } } 172 }; 173 174 static const CGEN_IFMT ifmt_lf_itof_s ATTRIBUTE_UNUSED = { 175 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 } } 176 }; 177 178 static const CGEN_IFMT ifmt_lf_itof_d ATTRIBUTE_UNUSED = { 179 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 } } 180 }; 181 182 static const CGEN_IFMT ifmt_lf_itof_d32 ATTRIBUTE_UNUSED = { 183 32, 32, 0xfc00f9ff, { { F (F_OPCODE) }, { F (F_R3) }, { F (F_RDD32) }, { F (F_RAD32) }, { F (F_RESV_8_1) }, { F (F_OP_7_8) }, { 0 } } 184 }; 185 186 static const CGEN_IFMT ifmt_lf_ftoi_s ATTRIBUTE_UNUSED = { 187 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 } } 188 }; 189 190 static const CGEN_IFMT ifmt_lf_ftoi_d ATTRIBUTE_UNUSED = { 191 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 } } 192 }; 193 194 static const CGEN_IFMT ifmt_lf_ftoi_d32 ATTRIBUTE_UNUSED = { 195 32, 32, 0xfc00f9ff, { { F (F_OPCODE) }, { F (F_R3) }, { F (F_RDD32) }, { F (F_RAD32) }, { F (F_RESV_8_1) }, { F (F_OP_7_8) }, { 0 } } 196 }; 197 198 static const CGEN_IFMT ifmt_lf_sfeq_s ATTRIBUTE_UNUSED = { 199 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 } } 200 }; 201 202 static const CGEN_IFMT ifmt_lf_sfeq_d ATTRIBUTE_UNUSED = { 203 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 } } 204 }; 205 206 static const CGEN_IFMT ifmt_lf_sfeq_d32 ATTRIBUTE_UNUSED = { 207 32, 32, 0xffe004ff, { { F (F_OPCODE) }, { F (F_R1) }, { F (F_RESV_10_1) }, { F (F_RAD32) }, { F (F_RBD32) }, { F (F_OP_7_8) }, { 0 } } 208 }; 209 210 static const CGEN_IFMT ifmt_lf_cust1_s ATTRIBUTE_UNUSED = { 211 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 } } 212 }; 213 214 static const CGEN_IFMT ifmt_lf_cust1_d ATTRIBUTE_UNUSED = { 215 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 } } 216 }; 217 218 static const CGEN_IFMT ifmt_lf_cust1_d32 ATTRIBUTE_UNUSED = { 219 32, 32, 0xffe004ff, { { F (F_OPCODE) }, { F (F_RESV_25_5) }, { F (F_RESV_10_1) }, { F (F_RAD32) }, { F (F_RBD32) }, { F (F_OP_7_8) }, { 0 } } 220 }; 221 222 #undef F 223 224 #define A(a) (1 << CGEN_INSN_##a) 225 #define OPERAND(op) OR1K_OPERAND_##op 226 #define MNEM CGEN_SYNTAX_MNEMONIC /* syntax value for mnemonic */ 227 #define OP(field) CGEN_SYNTAX_MAKE_FIELD (OPERAND (field)) 228 229 /* The instruction table. */ 230 231 static const CGEN_OPCODE or1k_cgen_insn_opcode_table[MAX_INSNS] = 232 { 233 /* Special null first entry. 234 A `num' value of zero is thus invalid. 235 Also, the special `invalid' insn resides here. */ 236 { { 0, 0, 0, 0 }, {{0}}, 0, {0}}, 237 /* l.j ${disp26} */ 238 { 239 { 0, 0, 0, 0 }, 240 { { MNEM, ' ', OP (DISP26), 0 } }, 241 & ifmt_l_j, { 0x0 } 242 }, 243 /* l.adrp $rD,${disp21} */ 244 { 245 { 0, 0, 0, 0 }, 246 { { MNEM, ' ', OP (RD), ',', OP (DISP21), 0 } }, 247 & ifmt_l_adrp, { 0x8000000 } 248 }, 249 /* l.jal ${disp26} */ 250 { 251 { 0, 0, 0, 0 }, 252 { { MNEM, ' ', OP (DISP26), 0 } }, 253 & ifmt_l_j, { 0x4000000 } 254 }, 255 /* l.jr $rB */ 256 { 257 { 0, 0, 0, 0 }, 258 { { MNEM, ' ', OP (RB), 0 } }, 259 & ifmt_l_jr, { 0x44000000 } 260 }, 261 /* l.jalr $rB */ 262 { 263 { 0, 0, 0, 0 }, 264 { { MNEM, ' ', OP (RB), 0 } }, 265 & ifmt_l_jr, { 0x48000000 } 266 }, 267 /* l.bnf ${disp26} */ 268 { 269 { 0, 0, 0, 0 }, 270 { { MNEM, ' ', OP (DISP26), 0 } }, 271 & ifmt_l_j, { 0xc000000 } 272 }, 273 /* l.bf ${disp26} */ 274 { 275 { 0, 0, 0, 0 }, 276 { { MNEM, ' ', OP (DISP26), 0 } }, 277 & ifmt_l_j, { 0x10000000 } 278 }, 279 /* l.trap ${uimm16} */ 280 { 281 { 0, 0, 0, 0 }, 282 { { MNEM, ' ', OP (UIMM16), 0 } }, 283 & ifmt_l_trap, { 0x21000000 } 284 }, 285 /* l.sys ${uimm16} */ 286 { 287 { 0, 0, 0, 0 }, 288 { { MNEM, ' ', OP (UIMM16), 0 } }, 289 & ifmt_l_trap, { 0x20000000 } 290 }, 291 /* l.msync */ 292 { 293 { 0, 0, 0, 0 }, 294 { { MNEM, 0 } }, 295 & ifmt_l_msync, { 0x22000000 } 296 }, 297 /* l.psync */ 298 { 299 { 0, 0, 0, 0 }, 300 { { MNEM, 0 } }, 301 & ifmt_l_msync, { 0x22800000 } 302 }, 303 /* l.csync */ 304 { 305 { 0, 0, 0, 0 }, 306 { { MNEM, 0 } }, 307 & ifmt_l_msync, { 0x23000000 } 308 }, 309 /* l.rfe */ 310 { 311 { 0, 0, 0, 0 }, 312 { { MNEM, 0 } }, 313 & ifmt_l_rfe, { 0x24000000 } 314 }, 315 /* l.nop ${uimm16} */ 316 { 317 { 0, 0, 0, 0 }, 318 { { MNEM, ' ', OP (UIMM16), 0 } }, 319 & ifmt_l_nop_imm, { 0x15000000 } 320 }, 321 /* l.nop */ 322 { 323 { 0, 0, 0, 0 }, 324 { { MNEM, 0 } }, 325 & ifmt_l_nop_imm, { 0x15000000 } 326 }, 327 /* l.movhi $rD,$uimm16 */ 328 { 329 { 0, 0, 0, 0 }, 330 { { MNEM, ' ', OP (RD), ',', OP (UIMM16), 0 } }, 331 & ifmt_l_movhi, { 0x18000000 } 332 }, 333 /* l.macrc $rD */ 334 { 335 { 0, 0, 0, 0 }, 336 { { MNEM, ' ', OP (RD), 0 } }, 337 & ifmt_l_macrc, { 0x18010000 } 338 }, 339 /* l.mfspr $rD,$rA,${uimm16} */ 340 { 341 { 0, 0, 0, 0 }, 342 { { MNEM, ' ', OP (RD), ',', OP (RA), ',', OP (UIMM16), 0 } }, 343 & ifmt_l_mfspr, { 0xb4000000 } 344 }, 345 /* l.mtspr $rA,$rB,${uimm16-split} */ 346 { 347 { 0, 0, 0, 0 }, 348 { { MNEM, ' ', OP (RA), ',', OP (RB), ',', OP (UIMM16_SPLIT), 0 } }, 349 & ifmt_l_mtspr, { 0xc0000000 } 350 }, 351 /* l.lwz $rD,${simm16}($rA) */ 352 { 353 { 0, 0, 0, 0 }, 354 { { MNEM, ' ', OP (RD), ',', OP (SIMM16), '(', OP (RA), ')', 0 } }, 355 & ifmt_l_lwz, { 0x84000000 } 356 }, 357 /* l.lws $rD,${simm16}($rA) */ 358 { 359 { 0, 0, 0, 0 }, 360 { { MNEM, ' ', OP (RD), ',', OP (SIMM16), '(', OP (RA), ')', 0 } }, 361 & ifmt_l_lwz, { 0x88000000 } 362 }, 363 /* l.lwa $rD,${simm16}($rA) */ 364 { 365 { 0, 0, 0, 0 }, 366 { { MNEM, ' ', OP (RD), ',', OP (SIMM16), '(', OP (RA), ')', 0 } }, 367 & ifmt_l_lwz, { 0x6c000000 } 368 }, 369 /* l.lbz $rD,${simm16}($rA) */ 370 { 371 { 0, 0, 0, 0 }, 372 { { MNEM, ' ', OP (RD), ',', OP (SIMM16), '(', OP (RA), ')', 0 } }, 373 & ifmt_l_lwz, { 0x8c000000 } 374 }, 375 /* l.lbs $rD,${simm16}($rA) */ 376 { 377 { 0, 0, 0, 0 }, 378 { { MNEM, ' ', OP (RD), ',', OP (SIMM16), '(', OP (RA), ')', 0 } }, 379 & ifmt_l_lwz, { 0x90000000 } 380 }, 381 /* l.lhz $rD,${simm16}($rA) */ 382 { 383 { 0, 0, 0, 0 }, 384 { { MNEM, ' ', OP (RD), ',', OP (SIMM16), '(', OP (RA), ')', 0 } }, 385 & ifmt_l_lwz, { 0x94000000 } 386 }, 387 /* l.lhs $rD,${simm16}($rA) */ 388 { 389 { 0, 0, 0, 0 }, 390 { { MNEM, ' ', OP (RD), ',', OP (SIMM16), '(', OP (RA), ')', 0 } }, 391 & ifmt_l_lwz, { 0x98000000 } 392 }, 393 /* l.sw ${simm16-split}($rA),$rB */ 394 { 395 { 0, 0, 0, 0 }, 396 { { MNEM, ' ', OP (SIMM16_SPLIT), '(', OP (RA), ')', ',', OP (RB), 0 } }, 397 & ifmt_l_sw, { 0xd4000000 } 398 }, 399 /* l.sb ${simm16-split}($rA),$rB */ 400 { 401 { 0, 0, 0, 0 }, 402 { { MNEM, ' ', OP (SIMM16_SPLIT), '(', OP (RA), ')', ',', OP (RB), 0 } }, 403 & ifmt_l_sw, { 0xd8000000 } 404 }, 405 /* l.sh ${simm16-split}($rA),$rB */ 406 { 407 { 0, 0, 0, 0 }, 408 { { MNEM, ' ', OP (SIMM16_SPLIT), '(', OP (RA), ')', ',', OP (RB), 0 } }, 409 & ifmt_l_sw, { 0xdc000000 } 410 }, 411 /* l.swa ${simm16-split}($rA),$rB */ 412 { 413 { 0, 0, 0, 0 }, 414 { { MNEM, ' ', OP (SIMM16_SPLIT), '(', OP (RA), ')', ',', OP (RB), 0 } }, 415 & ifmt_l_swa, { 0xcc000000 } 416 }, 417 /* l.sll $rD,$rA,$rB */ 418 { 419 { 0, 0, 0, 0 }, 420 { { MNEM, ' ', OP (RD), ',', OP (RA), ',', OP (RB), 0 } }, 421 & ifmt_l_sll, { 0xe0000008 } 422 }, 423 /* l.slli $rD,$rA,${uimm6} */ 424 { 425 { 0, 0, 0, 0 }, 426 { { MNEM, ' ', OP (RD), ',', OP (RA), ',', OP (UIMM6), 0 } }, 427 & ifmt_l_slli, { 0xb8000000 } 428 }, 429 /* l.srl $rD,$rA,$rB */ 430 { 431 { 0, 0, 0, 0 }, 432 { { MNEM, ' ', OP (RD), ',', OP (RA), ',', OP (RB), 0 } }, 433 & ifmt_l_sll, { 0xe0000048 } 434 }, 435 /* l.srli $rD,$rA,${uimm6} */ 436 { 437 { 0, 0, 0, 0 }, 438 { { MNEM, ' ', OP (RD), ',', OP (RA), ',', OP (UIMM6), 0 } }, 439 & ifmt_l_slli, { 0xb8000040 } 440 }, 441 /* l.sra $rD,$rA,$rB */ 442 { 443 { 0, 0, 0, 0 }, 444 { { MNEM, ' ', OP (RD), ',', OP (RA), ',', OP (RB), 0 } }, 445 & ifmt_l_sll, { 0xe0000088 } 446 }, 447 /* l.srai $rD,$rA,${uimm6} */ 448 { 449 { 0, 0, 0, 0 }, 450 { { MNEM, ' ', OP (RD), ',', OP (RA), ',', OP (UIMM6), 0 } }, 451 & ifmt_l_slli, { 0xb8000080 } 452 }, 453 /* l.ror $rD,$rA,$rB */ 454 { 455 { 0, 0, 0, 0 }, 456 { { MNEM, ' ', OP (RD), ',', OP (RA), ',', OP (RB), 0 } }, 457 & ifmt_l_sll, { 0xe00000c8 } 458 }, 459 /* l.rori $rD,$rA,${uimm6} */ 460 { 461 { 0, 0, 0, 0 }, 462 { { MNEM, ' ', OP (RD), ',', OP (RA), ',', OP (UIMM6), 0 } }, 463 & ifmt_l_slli, { 0xb80000c0 } 464 }, 465 /* l.and $rD,$rA,$rB */ 466 { 467 { 0, 0, 0, 0 }, 468 { { MNEM, ' ', OP (RD), ',', OP (RA), ',', OP (RB), 0 } }, 469 & ifmt_l_and, { 0xe0000003 } 470 }, 471 /* l.or $rD,$rA,$rB */ 472 { 473 { 0, 0, 0, 0 }, 474 { { MNEM, ' ', OP (RD), ',', OP (RA), ',', OP (RB), 0 } }, 475 & ifmt_l_and, { 0xe0000004 } 476 }, 477 /* l.xor $rD,$rA,$rB */ 478 { 479 { 0, 0, 0, 0 }, 480 { { MNEM, ' ', OP (RD), ',', OP (RA), ',', OP (RB), 0 } }, 481 & ifmt_l_and, { 0xe0000005 } 482 }, 483 /* l.add $rD,$rA,$rB */ 484 { 485 { 0, 0, 0, 0 }, 486 { { MNEM, ' ', OP (RD), ',', OP (RA), ',', OP (RB), 0 } }, 487 & ifmt_l_and, { 0xe0000000 } 488 }, 489 /* l.sub $rD,$rA,$rB */ 490 { 491 { 0, 0, 0, 0 }, 492 { { MNEM, ' ', OP (RD), ',', OP (RA), ',', OP (RB), 0 } }, 493 & ifmt_l_and, { 0xe0000002 } 494 }, 495 /* l.addc $rD,$rA,$rB */ 496 { 497 { 0, 0, 0, 0 }, 498 { { MNEM, ' ', OP (RD), ',', OP (RA), ',', OP (RB), 0 } }, 499 & ifmt_l_and, { 0xe0000001 } 500 }, 501 /* l.mul $rD,$rA,$rB */ 502 { 503 { 0, 0, 0, 0 }, 504 { { MNEM, ' ', OP (RD), ',', OP (RA), ',', OP (RB), 0 } }, 505 & ifmt_l_and, { 0xe0000306 } 506 }, 507 /* l.muld $rA,$rB */ 508 { 509 { 0, 0, 0, 0 }, 510 { { MNEM, ' ', OP (RA), ',', OP (RB), 0 } }, 511 & ifmt_l_muld, { 0xe0000307 } 512 }, 513 /* l.mulu $rD,$rA,$rB */ 514 { 515 { 0, 0, 0, 0 }, 516 { { MNEM, ' ', OP (RD), ',', OP (RA), ',', OP (RB), 0 } }, 517 & ifmt_l_and, { 0xe000030b } 518 }, 519 /* l.muldu $rA,$rB */ 520 { 521 { 0, 0, 0, 0 }, 522 { { MNEM, ' ', OP (RA), ',', OP (RB), 0 } }, 523 & ifmt_l_muld, { 0xe000030d } 524 }, 525 /* l.div $rD,$rA,$rB */ 526 { 527 { 0, 0, 0, 0 }, 528 { { MNEM, ' ', OP (RD), ',', OP (RA), ',', OP (RB), 0 } }, 529 & ifmt_l_and, { 0xe0000309 } 530 }, 531 /* l.divu $rD,$rA,$rB */ 532 { 533 { 0, 0, 0, 0 }, 534 { { MNEM, ' ', OP (RD), ',', OP (RA), ',', OP (RB), 0 } }, 535 & ifmt_l_and, { 0xe000030a } 536 }, 537 /* l.ff1 $rD,$rA */ 538 { 539 { 0, 0, 0, 0 }, 540 { { MNEM, ' ', OP (RD), ',', OP (RA), 0 } }, 541 & ifmt_l_and, { 0xe000000f } 542 }, 543 /* l.fl1 $rD,$rA */ 544 { 545 { 0, 0, 0, 0 }, 546 { { MNEM, ' ', OP (RD), ',', OP (RA), 0 } }, 547 & ifmt_l_and, { 0xe000010f } 548 }, 549 /* l.andi $rD,$rA,$uimm16 */ 550 { 551 { 0, 0, 0, 0 }, 552 { { MNEM, ' ', OP (RD), ',', OP (RA), ',', OP (UIMM16), 0 } }, 553 & ifmt_l_mfspr, { 0xa4000000 } 554 }, 555 /* l.ori $rD,$rA,$uimm16 */ 556 { 557 { 0, 0, 0, 0 }, 558 { { MNEM, ' ', OP (RD), ',', OP (RA), ',', OP (UIMM16), 0 } }, 559 & ifmt_l_mfspr, { 0xa8000000 } 560 }, 561 /* l.xori $rD,$rA,$simm16 */ 562 { 563 { 0, 0, 0, 0 }, 564 { { MNEM, ' ', OP (RD), ',', OP (RA), ',', OP (SIMM16), 0 } }, 565 & ifmt_l_lwz, { 0xac000000 } 566 }, 567 /* l.addi $rD,$rA,$simm16 */ 568 { 569 { 0, 0, 0, 0 }, 570 { { MNEM, ' ', OP (RD), ',', OP (RA), ',', OP (SIMM16), 0 } }, 571 & ifmt_l_lwz, { 0x9c000000 } 572 }, 573 /* l.addic $rD,$rA,$simm16 */ 574 { 575 { 0, 0, 0, 0 }, 576 { { MNEM, ' ', OP (RD), ',', OP (RA), ',', OP (SIMM16), 0 } }, 577 & ifmt_l_lwz, { 0xa0000000 } 578 }, 579 /* l.muli $rD,$rA,$simm16 */ 580 { 581 { 0, 0, 0, 0 }, 582 { { MNEM, ' ', OP (RD), ',', OP (RA), ',', OP (SIMM16), 0 } }, 583 & ifmt_l_lwz, { 0xb0000000 } 584 }, 585 /* l.exths $rD,$rA */ 586 { 587 { 0, 0, 0, 0 }, 588 { { MNEM, ' ', OP (RD), ',', OP (RA), 0 } }, 589 & ifmt_l_exths, { 0xe000000c } 590 }, 591 /* l.extbs $rD,$rA */ 592 { 593 { 0, 0, 0, 0 }, 594 { { MNEM, ' ', OP (RD), ',', OP (RA), 0 } }, 595 & ifmt_l_exths, { 0xe000004c } 596 }, 597 /* l.exthz $rD,$rA */ 598 { 599 { 0, 0, 0, 0 }, 600 { { MNEM, ' ', OP (RD), ',', OP (RA), 0 } }, 601 & ifmt_l_exths, { 0xe000008c } 602 }, 603 /* l.extbz $rD,$rA */ 604 { 605 { 0, 0, 0, 0 }, 606 { { MNEM, ' ', OP (RD), ',', OP (RA), 0 } }, 607 & ifmt_l_exths, { 0xe00000cc } 608 }, 609 /* l.extws $rD,$rA */ 610 { 611 { 0, 0, 0, 0 }, 612 { { MNEM, ' ', OP (RD), ',', OP (RA), 0 } }, 613 & ifmt_l_exths, { 0xe000000d } 614 }, 615 /* l.extwz $rD,$rA */ 616 { 617 { 0, 0, 0, 0 }, 618 { { MNEM, ' ', OP (RD), ',', OP (RA), 0 } }, 619 & ifmt_l_exths, { 0xe000004d } 620 }, 621 /* l.cmov $rD,$rA,$rB */ 622 { 623 { 0, 0, 0, 0 }, 624 { { MNEM, ' ', OP (RD), ',', OP (RA), ',', OP (RB), 0 } }, 625 & ifmt_l_cmov, { 0xe000000e } 626 }, 627 /* l.sfgts $rA,$rB */ 628 { 629 { 0, 0, 0, 0 }, 630 { { MNEM, ' ', OP (RA), ',', OP (RB), 0 } }, 631 & ifmt_l_sfgts, { 0xe5400000 } 632 }, 633 /* l.sfgtsi $rA,$simm16 */ 634 { 635 { 0, 0, 0, 0 }, 636 { { MNEM, ' ', OP (RA), ',', OP (SIMM16), 0 } }, 637 & ifmt_l_sfgtsi, { 0xbd400000 } 638 }, 639 /* l.sfgtu $rA,$rB */ 640 { 641 { 0, 0, 0, 0 }, 642 { { MNEM, ' ', OP (RA), ',', OP (RB), 0 } }, 643 & ifmt_l_sfgts, { 0xe4400000 } 644 }, 645 /* l.sfgtui $rA,$simm16 */ 646 { 647 { 0, 0, 0, 0 }, 648 { { MNEM, ' ', OP (RA), ',', OP (SIMM16), 0 } }, 649 & ifmt_l_sfgtsi, { 0xbc400000 } 650 }, 651 /* l.sfges $rA,$rB */ 652 { 653 { 0, 0, 0, 0 }, 654 { { MNEM, ' ', OP (RA), ',', OP (RB), 0 } }, 655 & ifmt_l_sfgts, { 0xe5600000 } 656 }, 657 /* l.sfgesi $rA,$simm16 */ 658 { 659 { 0, 0, 0, 0 }, 660 { { MNEM, ' ', OP (RA), ',', OP (SIMM16), 0 } }, 661 & ifmt_l_sfgtsi, { 0xbd600000 } 662 }, 663 /* l.sfgeu $rA,$rB */ 664 { 665 { 0, 0, 0, 0 }, 666 { { MNEM, ' ', OP (RA), ',', OP (RB), 0 } }, 667 & ifmt_l_sfgts, { 0xe4600000 } 668 }, 669 /* l.sfgeui $rA,$simm16 */ 670 { 671 { 0, 0, 0, 0 }, 672 { { MNEM, ' ', OP (RA), ',', OP (SIMM16), 0 } }, 673 & ifmt_l_sfgtsi, { 0xbc600000 } 674 }, 675 /* l.sflts $rA,$rB */ 676 { 677 { 0, 0, 0, 0 }, 678 { { MNEM, ' ', OP (RA), ',', OP (RB), 0 } }, 679 & ifmt_l_sfgts, { 0xe5800000 } 680 }, 681 /* l.sfltsi $rA,$simm16 */ 682 { 683 { 0, 0, 0, 0 }, 684 { { MNEM, ' ', OP (RA), ',', OP (SIMM16), 0 } }, 685 & ifmt_l_sfgtsi, { 0xbd800000 } 686 }, 687 /* l.sfltu $rA,$rB */ 688 { 689 { 0, 0, 0, 0 }, 690 { { MNEM, ' ', OP (RA), ',', OP (RB), 0 } }, 691 & ifmt_l_sfgts, { 0xe4800000 } 692 }, 693 /* l.sfltui $rA,$simm16 */ 694 { 695 { 0, 0, 0, 0 }, 696 { { MNEM, ' ', OP (RA), ',', OP (SIMM16), 0 } }, 697 & ifmt_l_sfgtsi, { 0xbc800000 } 698 }, 699 /* l.sfles $rA,$rB */ 700 { 701 { 0, 0, 0, 0 }, 702 { { MNEM, ' ', OP (RA), ',', OP (RB), 0 } }, 703 & ifmt_l_sfgts, { 0xe5a00000 } 704 }, 705 /* l.sflesi $rA,$simm16 */ 706 { 707 { 0, 0, 0, 0 }, 708 { { MNEM, ' ', OP (RA), ',', OP (SIMM16), 0 } }, 709 & ifmt_l_sfgtsi, { 0xbda00000 } 710 }, 711 /* l.sfleu $rA,$rB */ 712 { 713 { 0, 0, 0, 0 }, 714 { { MNEM, ' ', OP (RA), ',', OP (RB), 0 } }, 715 & ifmt_l_sfgts, { 0xe4a00000 } 716 }, 717 /* l.sfleui $rA,$simm16 */ 718 { 719 { 0, 0, 0, 0 }, 720 { { MNEM, ' ', OP (RA), ',', OP (SIMM16), 0 } }, 721 & ifmt_l_sfgtsi, { 0xbca00000 } 722 }, 723 /* l.sfeq $rA,$rB */ 724 { 725 { 0, 0, 0, 0 }, 726 { { MNEM, ' ', OP (RA), ',', OP (RB), 0 } }, 727 & ifmt_l_sfgts, { 0xe4000000 } 728 }, 729 /* l.sfeqi $rA,$simm16 */ 730 { 731 { 0, 0, 0, 0 }, 732 { { MNEM, ' ', OP (RA), ',', OP (SIMM16), 0 } }, 733 & ifmt_l_sfgtsi, { 0xbc000000 } 734 }, 735 /* l.sfne $rA,$rB */ 736 { 737 { 0, 0, 0, 0 }, 738 { { MNEM, ' ', OP (RA), ',', OP (RB), 0 } }, 739 & ifmt_l_sfgts, { 0xe4200000 } 740 }, 741 /* l.sfnei $rA,$simm16 */ 742 { 743 { 0, 0, 0, 0 }, 744 { { MNEM, ' ', OP (RA), ',', OP (SIMM16), 0 } }, 745 & ifmt_l_sfgtsi, { 0xbc200000 } 746 }, 747 /* l.mac $rA,$rB */ 748 { 749 { 0, 0, 0, 0 }, 750 { { MNEM, ' ', OP (RA), ',', OP (RB), 0 } }, 751 & ifmt_l_mac, { 0xc4000001 } 752 }, 753 /* l.maci $rA,${simm16} */ 754 { 755 { 0, 0, 0, 0 }, 756 { { MNEM, ' ', OP (RA), ',', OP (SIMM16), 0 } }, 757 & ifmt_l_maci, { 0x4c000000 } 758 }, 759 /* l.macu $rA,$rB */ 760 { 761 { 0, 0, 0, 0 }, 762 { { MNEM, ' ', OP (RA), ',', OP (RB), 0 } }, 763 & ifmt_l_mac, { 0xc4000003 } 764 }, 765 /* l.msb $rA,$rB */ 766 { 767 { 0, 0, 0, 0 }, 768 { { MNEM, ' ', OP (RA), ',', OP (RB), 0 } }, 769 & ifmt_l_mac, { 0xc4000002 } 770 }, 771 /* l.msbu $rA,$rB */ 772 { 773 { 0, 0, 0, 0 }, 774 { { MNEM, ' ', OP (RA), ',', OP (RB), 0 } }, 775 & ifmt_l_mac, { 0xc4000004 } 776 }, 777 /* l.cust1 */ 778 { 779 { 0, 0, 0, 0 }, 780 { { MNEM, 0 } }, 781 & ifmt_l_rfe, { 0x70000000 } 782 }, 783 /* l.cust2 */ 784 { 785 { 0, 0, 0, 0 }, 786 { { MNEM, 0 } }, 787 & ifmt_l_rfe, { 0x74000000 } 788 }, 789 /* l.cust3 */ 790 { 791 { 0, 0, 0, 0 }, 792 { { MNEM, 0 } }, 793 & ifmt_l_rfe, { 0x78000000 } 794 }, 795 /* l.cust4 */ 796 { 797 { 0, 0, 0, 0 }, 798 { { MNEM, 0 } }, 799 & ifmt_l_rfe, { 0x7c000000 } 800 }, 801 /* l.cust5 */ 802 { 803 { 0, 0, 0, 0 }, 804 { { MNEM, 0 } }, 805 & ifmt_l_rfe, { 0xf0000000 } 806 }, 807 /* l.cust6 */ 808 { 809 { 0, 0, 0, 0 }, 810 { { MNEM, 0 } }, 811 & ifmt_l_rfe, { 0xf4000000 } 812 }, 813 /* l.cust7 */ 814 { 815 { 0, 0, 0, 0 }, 816 { { MNEM, 0 } }, 817 & ifmt_l_rfe, { 0xf8000000 } 818 }, 819 /* l.cust8 */ 820 { 821 { 0, 0, 0, 0 }, 822 { { MNEM, 0 } }, 823 & ifmt_l_rfe, { 0xfc000000 } 824 }, 825 /* lf.add.s $rDSF,$rASF,$rBSF */ 826 { 827 { 0, 0, 0, 0 }, 828 { { MNEM, ' ', OP (RDSF), ',', OP (RASF), ',', OP (RBSF), 0 } }, 829 & ifmt_lf_add_s, { 0xc8000000 } 830 }, 831 /* lf.add.d $rDDF,$rADF,$rBDF */ 832 { 833 { 0, 0, 0, 0 }, 834 { { MNEM, ' ', OP (RDDF), ',', OP (RADF), ',', OP (RBDF), 0 } }, 835 & ifmt_lf_add_d, { 0xc8000010 } 836 }, 837 /* lf.add.d $rDD32F,$rAD32F,$rBD32F */ 838 { 839 { 0, 0, 0, 0 }, 840 { { MNEM, ' ', OP (RDD32F), ',', OP (RAD32F), ',', OP (RBD32F), 0 } }, 841 & ifmt_lf_add_d32, { 0xc8000010 } 842 }, 843 /* lf.sub.s $rDSF,$rASF,$rBSF */ 844 { 845 { 0, 0, 0, 0 }, 846 { { MNEM, ' ', OP (RDSF), ',', OP (RASF), ',', OP (RBSF), 0 } }, 847 & ifmt_lf_add_s, { 0xc8000001 } 848 }, 849 /* lf.sub.d $rDDF,$rADF,$rBDF */ 850 { 851 { 0, 0, 0, 0 }, 852 { { MNEM, ' ', OP (RDDF), ',', OP (RADF), ',', OP (RBDF), 0 } }, 853 & ifmt_lf_add_d, { 0xc8000011 } 854 }, 855 /* lf.sub.d $rDD32F,$rAD32F,$rBD32F */ 856 { 857 { 0, 0, 0, 0 }, 858 { { MNEM, ' ', OP (RDD32F), ',', OP (RAD32F), ',', OP (RBD32F), 0 } }, 859 & ifmt_lf_add_d32, { 0xc8000011 } 860 }, 861 /* lf.mul.s $rDSF,$rASF,$rBSF */ 862 { 863 { 0, 0, 0, 0 }, 864 { { MNEM, ' ', OP (RDSF), ',', OP (RASF), ',', OP (RBSF), 0 } }, 865 & ifmt_lf_add_s, { 0xc8000002 } 866 }, 867 /* lf.mul.d $rDDF,$rADF,$rBDF */ 868 { 869 { 0, 0, 0, 0 }, 870 { { MNEM, ' ', OP (RDDF), ',', OP (RADF), ',', OP (RBDF), 0 } }, 871 & ifmt_lf_add_d, { 0xc8000012 } 872 }, 873 /* lf.mul.d $rDD32F,$rAD32F,$rBD32F */ 874 { 875 { 0, 0, 0, 0 }, 876 { { MNEM, ' ', OP (RDD32F), ',', OP (RAD32F), ',', OP (RBD32F), 0 } }, 877 & ifmt_lf_add_d32, { 0xc8000012 } 878 }, 879 /* lf.div.s $rDSF,$rASF,$rBSF */ 880 { 881 { 0, 0, 0, 0 }, 882 { { MNEM, ' ', OP (RDSF), ',', OP (RASF), ',', OP (RBSF), 0 } }, 883 & ifmt_lf_add_s, { 0xc8000003 } 884 }, 885 /* lf.div.d $rDDF,$rADF,$rBDF */ 886 { 887 { 0, 0, 0, 0 }, 888 { { MNEM, ' ', OP (RDDF), ',', OP (RADF), ',', OP (RBDF), 0 } }, 889 & ifmt_lf_add_d, { 0xc8000013 } 890 }, 891 /* lf.div.d $rDD32F,$rAD32F,$rBD32F */ 892 { 893 { 0, 0, 0, 0 }, 894 { { MNEM, ' ', OP (RDD32F), ',', OP (RAD32F), ',', OP (RBD32F), 0 } }, 895 & ifmt_lf_add_d32, { 0xc8000013 } 896 }, 897 /* lf.rem.s $rDSF,$rASF,$rBSF */ 898 { 899 { 0, 0, 0, 0 }, 900 { { MNEM, ' ', OP (RDSF), ',', OP (RASF), ',', OP (RBSF), 0 } }, 901 & ifmt_lf_add_s, { 0xc8000006 } 902 }, 903 /* lf.rem.d $rDDF,$rADF,$rBDF */ 904 { 905 { 0, 0, 0, 0 }, 906 { { MNEM, ' ', OP (RDDF), ',', OP (RADF), ',', OP (RBDF), 0 } }, 907 & ifmt_lf_add_d, { 0xc8000016 } 908 }, 909 /* lf.rem.d $rDD32F,$rAD32F,$rBD32F */ 910 { 911 { 0, 0, 0, 0 }, 912 { { MNEM, ' ', OP (RDD32F), ',', OP (RAD32F), ',', OP (RBD32F), 0 } }, 913 & ifmt_lf_add_d32, { 0xc8000016 } 914 }, 915 /* lf.itof.s $rDSF,$rA */ 916 { 917 { 0, 0, 0, 0 }, 918 { { MNEM, ' ', OP (RDSF), ',', OP (RA), 0 } }, 919 & ifmt_lf_itof_s, { 0xc8000004 } 920 }, 921 /* lf.itof.d $rDDF,$rA */ 922 { 923 { 0, 0, 0, 0 }, 924 { { MNEM, ' ', OP (RDDF), ',', OP (RA), 0 } }, 925 & ifmt_lf_itof_d, { 0xc8000014 } 926 }, 927 /* lf.itof.d $rDD32F,$rADI */ 928 { 929 { 0, 0, 0, 0 }, 930 { { MNEM, ' ', OP (RDD32F), ',', OP (RADI), 0 } }, 931 & ifmt_lf_itof_d32, { 0xc8000014 } 932 }, 933 /* lf.ftoi.s $rD,$rASF */ 934 { 935 { 0, 0, 0, 0 }, 936 { { MNEM, ' ', OP (RD), ',', OP (RASF), 0 } }, 937 & ifmt_lf_ftoi_s, { 0xc8000005 } 938 }, 939 /* lf.ftoi.d $rD,$rADF */ 940 { 941 { 0, 0, 0, 0 }, 942 { { MNEM, ' ', OP (RD), ',', OP (RADF), 0 } }, 943 & ifmt_lf_ftoi_d, { 0xc8000015 } 944 }, 945 /* lf.ftoi.d $rDDI,$rAD32F */ 946 { 947 { 0, 0, 0, 0 }, 948 { { MNEM, ' ', OP (RDDI), ',', OP (RAD32F), 0 } }, 949 & ifmt_lf_ftoi_d32, { 0xc8000015 } 950 }, 951 /* lf.sfeq.s $rASF,$rBSF */ 952 { 953 { 0, 0, 0, 0 }, 954 { { MNEM, ' ', OP (RASF), ',', OP (RBSF), 0 } }, 955 & ifmt_lf_sfeq_s, { 0xc8000008 } 956 }, 957 /* lf.sfeq.d $rADF,$rBDF */ 958 { 959 { 0, 0, 0, 0 }, 960 { { MNEM, ' ', OP (RADF), ',', OP (RBDF), 0 } }, 961 & ifmt_lf_sfeq_d, { 0xc8000018 } 962 }, 963 /* lf.sfeq.d $rAD32F,$rBD32F */ 964 { 965 { 0, 0, 0, 0 }, 966 { { MNEM, ' ', OP (RAD32F), ',', OP (RBD32F), 0 } }, 967 & ifmt_lf_sfeq_d32, { 0xc8000018 } 968 }, 969 /* lf.sfne.s $rASF,$rBSF */ 970 { 971 { 0, 0, 0, 0 }, 972 { { MNEM, ' ', OP (RASF), ',', OP (RBSF), 0 } }, 973 & ifmt_lf_sfeq_s, { 0xc8000009 } 974 }, 975 /* lf.sfne.d $rADF,$rBDF */ 976 { 977 { 0, 0, 0, 0 }, 978 { { MNEM, ' ', OP (RADF), ',', OP (RBDF), 0 } }, 979 & ifmt_lf_sfeq_d, { 0xc8000019 } 980 }, 981 /* lf.sfne.d $rAD32F,$rBD32F */ 982 { 983 { 0, 0, 0, 0 }, 984 { { MNEM, ' ', OP (RAD32F), ',', OP (RBD32F), 0 } }, 985 & ifmt_lf_sfeq_d32, { 0xc8000019 } 986 }, 987 /* lf.sfge.s $rASF,$rBSF */ 988 { 989 { 0, 0, 0, 0 }, 990 { { MNEM, ' ', OP (RASF), ',', OP (RBSF), 0 } }, 991 & ifmt_lf_sfeq_s, { 0xc800000b } 992 }, 993 /* lf.sfge.d $rADF,$rBDF */ 994 { 995 { 0, 0, 0, 0 }, 996 { { MNEM, ' ', OP (RADF), ',', OP (RBDF), 0 } }, 997 & ifmt_lf_sfeq_d, { 0xc800001b } 998 }, 999 /* lf.sfge.d $rAD32F,$rBD32F */ 1000 { 1001 { 0, 0, 0, 0 }, 1002 { { MNEM, ' ', OP (RAD32F), ',', OP (RBD32F), 0 } }, 1003 & ifmt_lf_sfeq_d32, { 0xc800001b } 1004 }, 1005 /* lf.sfgt.s $rASF,$rBSF */ 1006 { 1007 { 0, 0, 0, 0 }, 1008 { { MNEM, ' ', OP (RASF), ',', OP (RBSF), 0 } }, 1009 & ifmt_lf_sfeq_s, { 0xc800000a } 1010 }, 1011 /* lf.sfgt.d $rADF,$rBDF */ 1012 { 1013 { 0, 0, 0, 0 }, 1014 { { MNEM, ' ', OP (RADF), ',', OP (RBDF), 0 } }, 1015 & ifmt_lf_sfeq_d, { 0xc800001a } 1016 }, 1017 /* lf.sfgt.d $rAD32F,$rBD32F */ 1018 { 1019 { 0, 0, 0, 0 }, 1020 { { MNEM, ' ', OP (RAD32F), ',', OP (RBD32F), 0 } }, 1021 & ifmt_lf_sfeq_d32, { 0xc800001a } 1022 }, 1023 /* lf.sflt.s $rASF,$rBSF */ 1024 { 1025 { 0, 0, 0, 0 }, 1026 { { MNEM, ' ', OP (RASF), ',', OP (RBSF), 0 } }, 1027 & ifmt_lf_sfeq_s, { 0xc800000c } 1028 }, 1029 /* lf.sflt.d $rADF,$rBDF */ 1030 { 1031 { 0, 0, 0, 0 }, 1032 { { MNEM, ' ', OP (RADF), ',', OP (RBDF), 0 } }, 1033 & ifmt_lf_sfeq_d, { 0xc800001c } 1034 }, 1035 /* lf.sflt.d $rAD32F,$rBD32F */ 1036 { 1037 { 0, 0, 0, 0 }, 1038 { { MNEM, ' ', OP (RAD32F), ',', OP (RBD32F), 0 } }, 1039 & ifmt_lf_sfeq_d32, { 0xc800001c } 1040 }, 1041 /* lf.sfle.s $rASF,$rBSF */ 1042 { 1043 { 0, 0, 0, 0 }, 1044 { { MNEM, ' ', OP (RASF), ',', OP (RBSF), 0 } }, 1045 & ifmt_lf_sfeq_s, { 0xc800000d } 1046 }, 1047 /* lf.sfle.d $rADF,$rBDF */ 1048 { 1049 { 0, 0, 0, 0 }, 1050 { { MNEM, ' ', OP (RADF), ',', OP (RBDF), 0 } }, 1051 & ifmt_lf_sfeq_d, { 0xc800001d } 1052 }, 1053 /* lf.sfle.d $rAD32F,$rBD32F */ 1054 { 1055 { 0, 0, 0, 0 }, 1056 { { MNEM, ' ', OP (RAD32F), ',', OP (RBD32F), 0 } }, 1057 & ifmt_lf_sfeq_d32, { 0xc800001d } 1058 }, 1059 /* lf.sfueq.s $rASF,$rBSF */ 1060 { 1061 { 0, 0, 0, 0 }, 1062 { { MNEM, ' ', OP (RASF), ',', OP (RBSF), 0 } }, 1063 & ifmt_lf_sfeq_s, { 0xc8000028 } 1064 }, 1065 /* lf.sfueq.d $rADF,$rBDF */ 1066 { 1067 { 0, 0, 0, 0 }, 1068 { { MNEM, ' ', OP (RADF), ',', OP (RBDF), 0 } }, 1069 & ifmt_lf_sfeq_d, { 0xc8000038 } 1070 }, 1071 /* lf.sfueq.d $rAD32F,$rBD32F */ 1072 { 1073 { 0, 0, 0, 0 }, 1074 { { MNEM, ' ', OP (RAD32F), ',', OP (RBD32F), 0 } }, 1075 & ifmt_lf_sfeq_d32, { 0xc8000038 } 1076 }, 1077 /* lf.sfune.s $rASF,$rBSF */ 1078 { 1079 { 0, 0, 0, 0 }, 1080 { { MNEM, ' ', OP (RASF), ',', OP (RBSF), 0 } }, 1081 & ifmt_lf_sfeq_s, { 0xc8000029 } 1082 }, 1083 /* lf.sfune.d $rADF,$rBDF */ 1084 { 1085 { 0, 0, 0, 0 }, 1086 { { MNEM, ' ', OP (RADF), ',', OP (RBDF), 0 } }, 1087 & ifmt_lf_sfeq_d, { 0xc8000039 } 1088 }, 1089 /* lf.sfune.d $rAD32F,$rBD32F */ 1090 { 1091 { 0, 0, 0, 0 }, 1092 { { MNEM, ' ', OP (RAD32F), ',', OP (RBD32F), 0 } }, 1093 & ifmt_lf_sfeq_d32, { 0xc8000039 } 1094 }, 1095 /* lf.sfugt.s $rASF,$rBSF */ 1096 { 1097 { 0, 0, 0, 0 }, 1098 { { MNEM, ' ', OP (RASF), ',', OP (RBSF), 0 } }, 1099 & ifmt_lf_sfeq_s, { 0xc800002a } 1100 }, 1101 /* lf.sfugt.d $rADF,$rBDF */ 1102 { 1103 { 0, 0, 0, 0 }, 1104 { { MNEM, ' ', OP (RADF), ',', OP (RBDF), 0 } }, 1105 & ifmt_lf_sfeq_d, { 0xc800003a } 1106 }, 1107 /* lf.sfugt.d $rAD32F,$rBD32F */ 1108 { 1109 { 0, 0, 0, 0 }, 1110 { { MNEM, ' ', OP (RAD32F), ',', OP (RBD32F), 0 } }, 1111 & ifmt_lf_sfeq_d32, { 0xc800003a } 1112 }, 1113 /* lf.sfuge.s $rASF,$rBSF */ 1114 { 1115 { 0, 0, 0, 0 }, 1116 { { MNEM, ' ', OP (RASF), ',', OP (RBSF), 0 } }, 1117 & ifmt_lf_sfeq_s, { 0xc800002b } 1118 }, 1119 /* lf.sfuge.d $rADF,$rBDF */ 1120 { 1121 { 0, 0, 0, 0 }, 1122 { { MNEM, ' ', OP (RADF), ',', OP (RBDF), 0 } }, 1123 & ifmt_lf_sfeq_d, { 0xc800003b } 1124 }, 1125 /* lf.sfuge.d $rAD32F,$rBD32F */ 1126 { 1127 { 0, 0, 0, 0 }, 1128 { { MNEM, ' ', OP (RAD32F), ',', OP (RBD32F), 0 } }, 1129 & ifmt_lf_sfeq_d32, { 0xc800003b } 1130 }, 1131 /* lf.sfult.s $rASF,$rBSF */ 1132 { 1133 { 0, 0, 0, 0 }, 1134 { { MNEM, ' ', OP (RASF), ',', OP (RBSF), 0 } }, 1135 & ifmt_lf_sfeq_s, { 0xc800002c } 1136 }, 1137 /* lf.sfult.d $rADF,$rBDF */ 1138 { 1139 { 0, 0, 0, 0 }, 1140 { { MNEM, ' ', OP (RADF), ',', OP (RBDF), 0 } }, 1141 & ifmt_lf_sfeq_d, { 0xc800003c } 1142 }, 1143 /* lf.sfult.d $rAD32F,$rBD32F */ 1144 { 1145 { 0, 0, 0, 0 }, 1146 { { MNEM, ' ', OP (RAD32F), ',', OP (RBD32F), 0 } }, 1147 & ifmt_lf_sfeq_d32, { 0xc800003c } 1148 }, 1149 /* lf.sfule.s $rASF,$rBSF */ 1150 { 1151 { 0, 0, 0, 0 }, 1152 { { MNEM, ' ', OP (RASF), ',', OP (RBSF), 0 } }, 1153 & ifmt_lf_sfeq_s, { 0xc800002d } 1154 }, 1155 /* lf.sfule.d $rADF,$rBDF */ 1156 { 1157 { 0, 0, 0, 0 }, 1158 { { MNEM, ' ', OP (RADF), ',', OP (RBDF), 0 } }, 1159 & ifmt_lf_sfeq_d, { 0xc800003d } 1160 }, 1161 /* lf.sfule.d $rAD32F,$rBD32F */ 1162 { 1163 { 0, 0, 0, 0 }, 1164 { { MNEM, ' ', OP (RAD32F), ',', OP (RBD32F), 0 } }, 1165 & ifmt_lf_sfeq_d32, { 0xc800003d } 1166 }, 1167 /* lf.sfun.s $rASF,$rBSF */ 1168 { 1169 { 0, 0, 0, 0 }, 1170 { { MNEM, ' ', OP (RASF), ',', OP (RBSF), 0 } }, 1171 & ifmt_lf_sfeq_s, { 0xc800002e } 1172 }, 1173 /* lf.sfun.d $rADF,$rBDF */ 1174 { 1175 { 0, 0, 0, 0 }, 1176 { { MNEM, ' ', OP (RADF), ',', OP (RBDF), 0 } }, 1177 & ifmt_lf_sfeq_d, { 0xc800003e } 1178 }, 1179 /* lf.sfun.d $rAD32F,$rBD32F */ 1180 { 1181 { 0, 0, 0, 0 }, 1182 { { MNEM, ' ', OP (RAD32F), ',', OP (RBD32F), 0 } }, 1183 & ifmt_lf_sfeq_d32, { 0xc800003e } 1184 }, 1185 /* lf.madd.s $rDSF,$rASF,$rBSF */ 1186 { 1187 { 0, 0, 0, 0 }, 1188 { { MNEM, ' ', OP (RDSF), ',', OP (RASF), ',', OP (RBSF), 0 } }, 1189 & ifmt_lf_add_s, { 0xc8000007 } 1190 }, 1191 /* lf.madd.d $rDDF,$rADF,$rBDF */ 1192 { 1193 { 0, 0, 0, 0 }, 1194 { { MNEM, ' ', OP (RDDF), ',', OP (RADF), ',', OP (RBDF), 0 } }, 1195 & ifmt_lf_add_d, { 0xc8000017 } 1196 }, 1197 /* lf.madd.d $rDD32F,$rAD32F,$rBD32F */ 1198 { 1199 { 0, 0, 0, 0 }, 1200 { { MNEM, ' ', OP (RDD32F), ',', OP (RAD32F), ',', OP (RBD32F), 0 } }, 1201 & ifmt_lf_add_d32, { 0xc8000017 } 1202 }, 1203 /* lf.cust1.s $rASF,$rBSF */ 1204 { 1205 { 0, 0, 0, 0 }, 1206 { { MNEM, ' ', OP (RASF), ',', OP (RBSF), 0 } }, 1207 & ifmt_lf_cust1_s, { 0xc80000d0 } 1208 }, 1209 /* lf.cust1.d */ 1210 { 1211 { 0, 0, 0, 0 }, 1212 { { MNEM, 0 } }, 1213 & ifmt_lf_cust1_d, { 0xc80000e0 } 1214 }, 1215 /* lf.cust1.d */ 1216 { 1217 { 0, 0, 0, 0 }, 1218 { { MNEM, 0 } }, 1219 & ifmt_lf_cust1_d32, { 0xc80000e0 } 1220 }, 1221 }; 1222 1223 #undef A 1224 #undef OPERAND 1225 #undef MNEM 1226 #undef OP 1227 1228 /* Formats for ALIAS macro-insns. */ 1229 1230 #define F(f) & or1k_cgen_ifld_table[OR1K_##f] 1231 #undef F 1232 1233 /* Each non-simple macro entry points to an array of expansion possibilities. */ 1234 1235 #define A(a) (1 << CGEN_INSN_##a) 1236 #define OPERAND(op) OR1K_OPERAND_##op 1237 #define MNEM CGEN_SYNTAX_MNEMONIC /* syntax value for mnemonic */ 1238 #define OP(field) CGEN_SYNTAX_MAKE_FIELD (OPERAND (field)) 1239 1240 /* The macro instruction table. */ 1241 1242 static const CGEN_IBASE or1k_cgen_macro_insn_table[] = 1243 { 1244 }; 1245 1246 /* The macro instruction opcode table. */ 1247 1248 static const CGEN_OPCODE or1k_cgen_macro_insn_opcode_table[] = 1249 { 1250 }; 1251 1252 #undef A 1253 #undef OPERAND 1254 #undef MNEM 1255 #undef OP 1256 1257 #ifndef CGEN_ASM_HASH_P 1258 #define CGEN_ASM_HASH_P(insn) 1 1259 #endif 1260 1261 #ifndef CGEN_DIS_HASH_P 1262 #define CGEN_DIS_HASH_P(insn) 1 1263 #endif 1264 1265 /* Return non-zero if INSN is to be added to the hash table. 1266 Targets are free to override CGEN_{ASM,DIS}_HASH_P in the .opc file. */ 1267 1268 static int 1269 asm_hash_insn_p (const CGEN_INSN *insn ATTRIBUTE_UNUSED) 1270 { 1271 return CGEN_ASM_HASH_P (insn); 1272 } 1273 1274 static int 1275 dis_hash_insn_p (const CGEN_INSN *insn) 1276 { 1277 /* If building the hash table and the NO-DIS attribute is present, 1278 ignore. */ 1279 if (CGEN_INSN_ATTR_VALUE (insn, CGEN_INSN_NO_DIS)) 1280 return 0; 1281 return CGEN_DIS_HASH_P (insn); 1282 } 1283 1284 #ifndef CGEN_ASM_HASH 1285 #define CGEN_ASM_HASH_SIZE 127 1286 #ifdef CGEN_MNEMONIC_OPERANDS 1287 #define CGEN_ASM_HASH(mnem) (*(unsigned char *) (mnem) % CGEN_ASM_HASH_SIZE) 1288 #else 1289 #define CGEN_ASM_HASH(mnem) (*(unsigned char *) (mnem) % CGEN_ASM_HASH_SIZE) /*FIXME*/ 1290 #endif 1291 #endif 1292 1293 /* It doesn't make much sense to provide a default here, 1294 but while this is under development we do. 1295 BUFFER is a pointer to the bytes of the insn, target order. 1296 VALUE is the first base_insn_bitsize bits as an int in host order. */ 1297 1298 #ifndef CGEN_DIS_HASH 1299 #define CGEN_DIS_HASH_SIZE 256 1300 #define CGEN_DIS_HASH(buf, value) (*(unsigned char *) (buf)) 1301 #endif 1302 1303 /* The result is the hash value of the insn. 1304 Targets are free to override CGEN_{ASM,DIS}_HASH in the .opc file. */ 1305 1306 static unsigned int 1307 asm_hash_insn (const char *mnem) 1308 { 1309 return CGEN_ASM_HASH (mnem); 1310 } 1311 1312 /* BUF is a pointer to the bytes of the insn, target order. 1313 VALUE is the first base_insn_bitsize bits as an int in host order. */ 1314 1315 static unsigned int 1316 dis_hash_insn (const char *buf ATTRIBUTE_UNUSED, 1317 CGEN_INSN_INT value ATTRIBUTE_UNUSED) 1318 { 1319 return CGEN_DIS_HASH (buf, value); 1320 } 1321 1322 /* Set the recorded length of the insn in the CGEN_FIELDS struct. */ 1323 1324 static void 1325 set_fields_bitsize (CGEN_FIELDS *fields, int size) 1326 { 1327 CGEN_FIELDS_BITSIZE (fields) = size; 1328 } 1329 1330 /* Function to call before using the operand instance table. 1331 This plugs the opcode entries and macro instructions into the cpu table. */ 1332 1333 void 1334 or1k_cgen_init_opcode_table (CGEN_CPU_DESC cd) 1335 { 1336 int i; 1337 int num_macros = (sizeof (or1k_cgen_macro_insn_table) / 1338 sizeof (or1k_cgen_macro_insn_table[0])); 1339 const CGEN_IBASE *ib = & or1k_cgen_macro_insn_table[0]; 1340 const CGEN_OPCODE *oc = & or1k_cgen_macro_insn_opcode_table[0]; 1341 CGEN_INSN *insns = xmalloc (num_macros * sizeof (CGEN_INSN)); 1342 1343 /* This test has been added to avoid a warning generated 1344 if memset is called with a third argument of value zero. */ 1345 if (num_macros >= 1) 1346 memset (insns, 0, num_macros * sizeof (CGEN_INSN)); 1347 for (i = 0; i < num_macros; ++i) 1348 { 1349 insns[i].base = &ib[i]; 1350 insns[i].opcode = &oc[i]; 1351 or1k_cgen_build_insn_regex (& insns[i]); 1352 } 1353 cd->macro_insn_table.init_entries = insns; 1354 cd->macro_insn_table.entry_size = sizeof (CGEN_IBASE); 1355 cd->macro_insn_table.num_init_entries = num_macros; 1356 1357 oc = & or1k_cgen_insn_opcode_table[0]; 1358 insns = (CGEN_INSN *) cd->insn_table.init_entries; 1359 for (i = 0; i < MAX_INSNS; ++i) 1360 { 1361 insns[i].opcode = &oc[i]; 1362 or1k_cgen_build_insn_regex (& insns[i]); 1363 } 1364 1365 cd->sizeof_fields = sizeof (CGEN_FIELDS); 1366 cd->set_fields_bitsize = set_fields_bitsize; 1367 1368 cd->asm_hash_p = asm_hash_insn_p; 1369 cd->asm_hash = asm_hash_insn; 1370 cd->asm_hash_size = CGEN_ASM_HASH_SIZE; 1371 1372 cd->dis_hash_p = dis_hash_insn_p; 1373 cd->dis_hash = dis_hash_insn; 1374 cd->dis_hash_size = CGEN_DIS_HASH_SIZE; 1375 } 1376