1 1.1.1.4 christos /* DO NOT EDIT! -*- buffer-read-only: t -*- vi:set ro: */ 2 1.1 christos /* Instruction opcode table for lm32. 3 1.1 christos 4 1.1 christos THIS FILE IS MACHINE GENERATED WITH CGEN. 5 1.1 christos 6 1.1.1.9 christos Copyright (C) 1996-2026 Free Software Foundation, Inc. 7 1.1 christos 8 1.1 christos This file is part of the GNU Binutils and/or GDB, the GNU debugger. 9 1.1 christos 10 1.1 christos This file is free software; you can redistribute it and/or modify 11 1.1 christos it under the terms of the GNU General Public License as published by 12 1.1 christos the Free Software Foundation; either version 3, or (at your option) 13 1.1 christos any later version. 14 1.1 christos 15 1.1 christos It is distributed in the hope that it will be useful, but WITHOUT 16 1.1 christos ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 17 1.1 christos or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public 18 1.1 christos License for more details. 19 1.1 christos 20 1.1 christos You should have received a copy of the GNU General Public License along 21 1.1 christos with this program; if not, write to the Free Software Foundation, Inc., 22 1.1 christos 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. 23 1.1 christos 24 1.1 christos */ 25 1.1 christos 26 1.1 christos #include "sysdep.h" 27 1.1 christos #include "ansidecl.h" 28 1.1 christos #include "bfd.h" 29 1.1 christos #include "symcat.h" 30 1.1 christos #include "lm32-desc.h" 31 1.1 christos #include "lm32-opc.h" 32 1.1 christos #include "libiberty.h" 33 1.1 christos 34 1.1 christos /* The hash functions are recorded here to help keep assembler code out of 35 1.1 christos the disassembler and vice versa. */ 36 1.1 christos 37 1.1 christos static int asm_hash_insn_p (const CGEN_INSN *); 38 1.1 christos static unsigned int asm_hash_insn (const char *); 39 1.1 christos static int dis_hash_insn_p (const CGEN_INSN *); 40 1.1 christos static unsigned int dis_hash_insn (const char *, CGEN_INSN_INT); 41 1.1 christos 42 1.1 christos /* Instruction formats. */ 43 1.1 christos 44 1.1 christos #define F(f) & lm32_cgen_ifld_table[LM32_##f] 45 1.1 christos static const CGEN_IFMT ifmt_empty ATTRIBUTE_UNUSED = { 46 1.1 christos 0, 0, 0x0, { { 0 } } 47 1.1 christos }; 48 1.1 christos 49 1.1 christos static const CGEN_IFMT ifmt_add ATTRIBUTE_UNUSED = { 50 1.1 christos 32, 32, 0xfc0007ff, { { F (F_OPCODE) }, { F (F_R0) }, { F (F_R1) }, { F (F_R2) }, { F (F_RESV0) }, { 0 } } 51 1.1 christos }; 52 1.1 christos 53 1.1 christos static const CGEN_IFMT ifmt_addi ATTRIBUTE_UNUSED = { 54 1.1 christos 32, 32, 0xfc000000, { { F (F_OPCODE) }, { F (F_R0) }, { F (F_R1) }, { F (F_IMM) }, { 0 } } 55 1.1 christos }; 56 1.1 christos 57 1.1 christos static const CGEN_IFMT ifmt_andi ATTRIBUTE_UNUSED = { 58 1.1 christos 32, 32, 0xfc000000, { { F (F_OPCODE) }, { F (F_R0) }, { F (F_R1) }, { F (F_UIMM) }, { 0 } } 59 1.1 christos }; 60 1.1 christos 61 1.1 christos static const CGEN_IFMT ifmt_andhii ATTRIBUTE_UNUSED = { 62 1.1 christos 32, 32, 0xfc000000, { { F (F_OPCODE) }, { F (F_R0) }, { F (F_R1) }, { F (F_UIMM) }, { 0 } } 63 1.1 christos }; 64 1.1 christos 65 1.1 christos static const CGEN_IFMT ifmt_b ATTRIBUTE_UNUSED = { 66 1.1 christos 32, 32, 0xfc1fffff, { { F (F_OPCODE) }, { F (F_R0) }, { F (F_R1) }, { F (F_R2) }, { F (F_RESV0) }, { 0 } } 67 1.1 christos }; 68 1.1 christos 69 1.1 christos static const CGEN_IFMT ifmt_bi ATTRIBUTE_UNUSED = { 70 1.1 christos 32, 32, 0xfc000000, { { F (F_OPCODE) }, { F (F_CALL) }, { 0 } } 71 1.1 christos }; 72 1.1 christos 73 1.1 christos static const CGEN_IFMT ifmt_be ATTRIBUTE_UNUSED = { 74 1.1 christos 32, 32, 0xfc000000, { { F (F_OPCODE) }, { F (F_R0) }, { F (F_R1) }, { F (F_BRANCH) }, { 0 } } 75 1.1 christos }; 76 1.1 christos 77 1.1 christos static const CGEN_IFMT ifmt_ori ATTRIBUTE_UNUSED = { 78 1.1 christos 32, 32, 0xfc000000, { { F (F_OPCODE) }, { F (F_R0) }, { F (F_R1) }, { F (F_UIMM) }, { 0 } } 79 1.1 christos }; 80 1.1 christos 81 1.1 christos static const CGEN_IFMT ifmt_rcsr ATTRIBUTE_UNUSED = { 82 1.1 christos 32, 32, 0xfc1f07ff, { { F (F_OPCODE) }, { F (F_CSR) }, { F (F_R1) }, { F (F_R2) }, { F (F_RESV0) }, { 0 } } 83 1.1 christos }; 84 1.1 christos 85 1.1 christos static const CGEN_IFMT ifmt_sextb ATTRIBUTE_UNUSED = { 86 1.1 christos 32, 32, 0xfc1f07ff, { { F (F_OPCODE) }, { F (F_R0) }, { F (F_R1) }, { F (F_R2) }, { F (F_RESV0) }, { 0 } } 87 1.1 christos }; 88 1.1 christos 89 1.1 christos static const CGEN_IFMT ifmt_user ATTRIBUTE_UNUSED = { 90 1.1 christos 32, 32, 0xfc000000, { { F (F_OPCODE) }, { F (F_R0) }, { F (F_R1) }, { F (F_R2) }, { F (F_USER) }, { 0 } } 91 1.1 christos }; 92 1.1 christos 93 1.1 christos static const CGEN_IFMT ifmt_wcsr ATTRIBUTE_UNUSED = { 94 1.1 christos 32, 32, 0xfc00ffff, { { F (F_OPCODE) }, { F (F_CSR) }, { F (F_R1) }, { F (F_R2) }, { F (F_RESV0) }, { 0 } } 95 1.1 christos }; 96 1.1 christos 97 1.1 christos static const CGEN_IFMT ifmt_break ATTRIBUTE_UNUSED = { 98 1.1 christos 32, 32, 0xffffffff, { { F (F_OPCODE) }, { F (F_EXCEPTION) }, { 0 } } 99 1.1 christos }; 100 1.1 christos 101 1.1 christos static const CGEN_IFMT ifmt_bret ATTRIBUTE_UNUSED = { 102 1.1 christos 32, 32, 0xffffffff, { { F (F_OPCODE) }, { F (F_R0) }, { F (F_R1) }, { F (F_R2) }, { F (F_RESV0) }, { 0 } } 103 1.1 christos }; 104 1.1 christos 105 1.1 christos static const CGEN_IFMT ifmt_mvi ATTRIBUTE_UNUSED = { 106 1.1 christos 32, 32, 0xffe00000, { { F (F_OPCODE) }, { F (F_R0) }, { F (F_R1) }, { F (F_IMM) }, { 0 } } 107 1.1 christos }; 108 1.1 christos 109 1.1 christos static const CGEN_IFMT ifmt_mvui ATTRIBUTE_UNUSED = { 110 1.1 christos 32, 32, 0xffe00000, { { F (F_OPCODE) }, { F (F_R0) }, { F (F_R1) }, { F (F_UIMM) }, { 0 } } 111 1.1 christos }; 112 1.1 christos 113 1.1 christos static const CGEN_IFMT ifmt_mvhi ATTRIBUTE_UNUSED = { 114 1.1 christos 32, 32, 0xffe00000, { { F (F_OPCODE) }, { F (F_R0) }, { F (F_R1) }, { F (F_UIMM) }, { 0 } } 115 1.1 christos }; 116 1.1 christos 117 1.1 christos static const CGEN_IFMT ifmt_mva ATTRIBUTE_UNUSED = { 118 1.1 christos 32, 32, 0xffe00000, { { F (F_OPCODE) }, { F (F_R0) }, { F (F_R1) }, { F (F_IMM) }, { 0 } } 119 1.1 christos }; 120 1.1 christos 121 1.1 christos static const CGEN_IFMT ifmt_nop ATTRIBUTE_UNUSED = { 122 1.1 christos 32, 32, 0xffffffff, { { F (F_OPCODE) }, { F (F_R0) }, { F (F_R1) }, { F (F_IMM) }, { 0 } } 123 1.1 christos }; 124 1.1 christos 125 1.1 christos static const CGEN_IFMT ifmt_lwgotrel ATTRIBUTE_UNUSED = { 126 1.1 christos 32, 32, 0xffe00000, { { F (F_OPCODE) }, { F (F_R0) }, { F (F_R1) }, { F (F_IMM) }, { 0 } } 127 1.1 christos }; 128 1.1 christos 129 1.1 christos static const CGEN_IFMT ifmt_orhigotoffi ATTRIBUTE_UNUSED = { 130 1.1 christos 32, 32, 0xfc000000, { { F (F_OPCODE) }, { F (F_R0) }, { F (F_R1) }, { F (F_IMM) }, { 0 } } 131 1.1 christos }; 132 1.1 christos 133 1.1 christos static const CGEN_IFMT ifmt_addgotoff ATTRIBUTE_UNUSED = { 134 1.1 christos 32, 32, 0xfc000000, { { F (F_OPCODE) }, { F (F_R0) }, { F (F_R1) }, { F (F_IMM) }, { 0 } } 135 1.1 christos }; 136 1.1 christos 137 1.1 christos #undef F 138 1.1 christos 139 1.1 christos #define A(a) (1 << CGEN_INSN_##a) 140 1.1 christos #define OPERAND(op) LM32_OPERAND_##op 141 1.1 christos #define MNEM CGEN_SYNTAX_MNEMONIC /* syntax value for mnemonic */ 142 1.1 christos #define OP(field) CGEN_SYNTAX_MAKE_FIELD (OPERAND (field)) 143 1.1 christos 144 1.1 christos /* The instruction table. */ 145 1.1 christos 146 1.1 christos static const CGEN_OPCODE lm32_cgen_insn_opcode_table[MAX_INSNS] = 147 1.1 christos { 148 1.1 christos /* Special null first entry. 149 1.1 christos A `num' value of zero is thus invalid. 150 1.1 christos Also, the special `invalid' insn resides here. */ 151 1.1 christos { { 0, 0, 0, 0 }, {{0}}, 0, {0}}, 152 1.1 christos /* add $r2,$r0,$r1 */ 153 1.1 christos { 154 1.1 christos { 0, 0, 0, 0 }, 155 1.1 christos { { MNEM, ' ', OP (R2), ',', OP (R0), ',', OP (R1), 0 } }, 156 1.1 christos & ifmt_add, { 0xb4000000 } 157 1.1 christos }, 158 1.1 christos /* addi $r1,$r0,$imm */ 159 1.1 christos { 160 1.1 christos { 0, 0, 0, 0 }, 161 1.1 christos { { MNEM, ' ', OP (R1), ',', OP (R0), ',', OP (IMM), 0 } }, 162 1.1 christos & ifmt_addi, { 0x34000000 } 163 1.1 christos }, 164 1.1 christos /* and $r2,$r0,$r1 */ 165 1.1 christos { 166 1.1 christos { 0, 0, 0, 0 }, 167 1.1 christos { { MNEM, ' ', OP (R2), ',', OP (R0), ',', OP (R1), 0 } }, 168 1.1 christos & ifmt_add, { 0xa0000000 } 169 1.1 christos }, 170 1.1 christos /* andi $r1,$r0,$uimm */ 171 1.1 christos { 172 1.1 christos { 0, 0, 0, 0 }, 173 1.1 christos { { MNEM, ' ', OP (R1), ',', OP (R0), ',', OP (UIMM), 0 } }, 174 1.1 christos & ifmt_andi, { 0x20000000 } 175 1.1 christos }, 176 1.1 christos /* andhi $r1,$r0,$hi16 */ 177 1.1 christos { 178 1.1 christos { 0, 0, 0, 0 }, 179 1.1 christos { { MNEM, ' ', OP (R1), ',', OP (R0), ',', OP (HI16), 0 } }, 180 1.1 christos & ifmt_andhii, { 0x60000000 } 181 1.1 christos }, 182 1.1 christos /* b $r0 */ 183 1.1 christos { 184 1.1 christos { 0, 0, 0, 0 }, 185 1.1 christos { { MNEM, ' ', OP (R0), 0 } }, 186 1.1 christos & ifmt_b, { 0xc0000000 } 187 1.1 christos }, 188 1.1 christos /* bi $call */ 189 1.1 christos { 190 1.1 christos { 0, 0, 0, 0 }, 191 1.1 christos { { MNEM, ' ', OP (CALL), 0 } }, 192 1.1 christos & ifmt_bi, { 0xe0000000 } 193 1.1 christos }, 194 1.1 christos /* be $r0,$r1,$branch */ 195 1.1 christos { 196 1.1 christos { 0, 0, 0, 0 }, 197 1.1 christos { { MNEM, ' ', OP (R0), ',', OP (R1), ',', OP (BRANCH), 0 } }, 198 1.1 christos & ifmt_be, { 0x44000000 } 199 1.1 christos }, 200 1.1 christos /* bg $r0,$r1,$branch */ 201 1.1 christos { 202 1.1 christos { 0, 0, 0, 0 }, 203 1.1 christos { { MNEM, ' ', OP (R0), ',', OP (R1), ',', OP (BRANCH), 0 } }, 204 1.1 christos & ifmt_be, { 0x48000000 } 205 1.1 christos }, 206 1.1 christos /* bge $r0,$r1,$branch */ 207 1.1 christos { 208 1.1 christos { 0, 0, 0, 0 }, 209 1.1 christos { { MNEM, ' ', OP (R0), ',', OP (R1), ',', OP (BRANCH), 0 } }, 210 1.1 christos & ifmt_be, { 0x4c000000 } 211 1.1 christos }, 212 1.1 christos /* bgeu $r0,$r1,$branch */ 213 1.1 christos { 214 1.1 christos { 0, 0, 0, 0 }, 215 1.1 christos { { MNEM, ' ', OP (R0), ',', OP (R1), ',', OP (BRANCH), 0 } }, 216 1.1 christos & ifmt_be, { 0x50000000 } 217 1.1 christos }, 218 1.1 christos /* bgu $r0,$r1,$branch */ 219 1.1 christos { 220 1.1 christos { 0, 0, 0, 0 }, 221 1.1 christos { { MNEM, ' ', OP (R0), ',', OP (R1), ',', OP (BRANCH), 0 } }, 222 1.1 christos & ifmt_be, { 0x54000000 } 223 1.1 christos }, 224 1.1 christos /* bne $r0,$r1,$branch */ 225 1.1 christos { 226 1.1 christos { 0, 0, 0, 0 }, 227 1.1 christos { { MNEM, ' ', OP (R0), ',', OP (R1), ',', OP (BRANCH), 0 } }, 228 1.1 christos & ifmt_be, { 0x5c000000 } 229 1.1 christos }, 230 1.1 christos /* call $r0 */ 231 1.1 christos { 232 1.1 christos { 0, 0, 0, 0 }, 233 1.1 christos { { MNEM, ' ', OP (R0), 0 } }, 234 1.1 christos & ifmt_b, { 0xd8000000 } 235 1.1 christos }, 236 1.1 christos /* calli $call */ 237 1.1 christos { 238 1.1 christos { 0, 0, 0, 0 }, 239 1.1 christos { { MNEM, ' ', OP (CALL), 0 } }, 240 1.1 christos & ifmt_bi, { 0xf8000000 } 241 1.1 christos }, 242 1.1 christos /* cmpe $r2,$r0,$r1 */ 243 1.1 christos { 244 1.1 christos { 0, 0, 0, 0 }, 245 1.1 christos { { MNEM, ' ', OP (R2), ',', OP (R0), ',', OP (R1), 0 } }, 246 1.1 christos & ifmt_add, { 0xe4000000 } 247 1.1 christos }, 248 1.1 christos /* cmpei $r1,$r0,$imm */ 249 1.1 christos { 250 1.1 christos { 0, 0, 0, 0 }, 251 1.1 christos { { MNEM, ' ', OP (R1), ',', OP (R0), ',', OP (IMM), 0 } }, 252 1.1 christos & ifmt_addi, { 0x64000000 } 253 1.1 christos }, 254 1.1 christos /* cmpg $r2,$r0,$r1 */ 255 1.1 christos { 256 1.1 christos { 0, 0, 0, 0 }, 257 1.1 christos { { MNEM, ' ', OP (R2), ',', OP (R0), ',', OP (R1), 0 } }, 258 1.1 christos & ifmt_add, { 0xe8000000 } 259 1.1 christos }, 260 1.1 christos /* cmpgi $r1,$r0,$imm */ 261 1.1 christos { 262 1.1 christos { 0, 0, 0, 0 }, 263 1.1 christos { { MNEM, ' ', OP (R1), ',', OP (R0), ',', OP (IMM), 0 } }, 264 1.1 christos & ifmt_addi, { 0x68000000 } 265 1.1 christos }, 266 1.1 christos /* cmpge $r2,$r0,$r1 */ 267 1.1 christos { 268 1.1 christos { 0, 0, 0, 0 }, 269 1.1 christos { { MNEM, ' ', OP (R2), ',', OP (R0), ',', OP (R1), 0 } }, 270 1.1 christos & ifmt_add, { 0xec000000 } 271 1.1 christos }, 272 1.1 christos /* cmpgei $r1,$r0,$imm */ 273 1.1 christos { 274 1.1 christos { 0, 0, 0, 0 }, 275 1.1 christos { { MNEM, ' ', OP (R1), ',', OP (R0), ',', OP (IMM), 0 } }, 276 1.1 christos & ifmt_addi, { 0x6c000000 } 277 1.1 christos }, 278 1.1 christos /* cmpgeu $r2,$r0,$r1 */ 279 1.1 christos { 280 1.1 christos { 0, 0, 0, 0 }, 281 1.1 christos { { MNEM, ' ', OP (R2), ',', OP (R0), ',', OP (R1), 0 } }, 282 1.1 christos & ifmt_add, { 0xf0000000 } 283 1.1 christos }, 284 1.1 christos /* cmpgeui $r1,$r0,$uimm */ 285 1.1 christos { 286 1.1 christos { 0, 0, 0, 0 }, 287 1.1 christos { { MNEM, ' ', OP (R1), ',', OP (R0), ',', OP (UIMM), 0 } }, 288 1.1 christos & ifmt_andi, { 0x70000000 } 289 1.1 christos }, 290 1.1 christos /* cmpgu $r2,$r0,$r1 */ 291 1.1 christos { 292 1.1 christos { 0, 0, 0, 0 }, 293 1.1 christos { { MNEM, ' ', OP (R2), ',', OP (R0), ',', OP (R1), 0 } }, 294 1.1 christos & ifmt_add, { 0xf4000000 } 295 1.1 christos }, 296 1.1 christos /* cmpgui $r1,$r0,$uimm */ 297 1.1 christos { 298 1.1 christos { 0, 0, 0, 0 }, 299 1.1 christos { { MNEM, ' ', OP (R1), ',', OP (R0), ',', OP (UIMM), 0 } }, 300 1.1 christos & ifmt_andi, { 0x74000000 } 301 1.1 christos }, 302 1.1 christos /* cmpne $r2,$r0,$r1 */ 303 1.1 christos { 304 1.1 christos { 0, 0, 0, 0 }, 305 1.1 christos { { MNEM, ' ', OP (R2), ',', OP (R0), ',', OP (R1), 0 } }, 306 1.1 christos & ifmt_add, { 0xfc000000 } 307 1.1 christos }, 308 1.1 christos /* cmpnei $r1,$r0,$imm */ 309 1.1 christos { 310 1.1 christos { 0, 0, 0, 0 }, 311 1.1 christos { { MNEM, ' ', OP (R1), ',', OP (R0), ',', OP (IMM), 0 } }, 312 1.1 christos & ifmt_addi, { 0x7c000000 } 313 1.1 christos }, 314 1.1 christos /* divu $r2,$r0,$r1 */ 315 1.1 christos { 316 1.1 christos { 0, 0, 0, 0 }, 317 1.1 christos { { MNEM, ' ', OP (R2), ',', OP (R0), ',', OP (R1), 0 } }, 318 1.1 christos & ifmt_add, { 0x8c000000 } 319 1.1 christos }, 320 1.1 christos /* lb $r1,($r0+$imm) */ 321 1.1 christos { 322 1.1 christos { 0, 0, 0, 0 }, 323 1.1 christos { { MNEM, ' ', OP (R1), ',', '(', OP (R0), '+', OP (IMM), ')', 0 } }, 324 1.1 christos & ifmt_addi, { 0x10000000 } 325 1.1 christos }, 326 1.1 christos /* lbu $r1,($r0+$imm) */ 327 1.1 christos { 328 1.1 christos { 0, 0, 0, 0 }, 329 1.1 christos { { MNEM, ' ', OP (R1), ',', '(', OP (R0), '+', OP (IMM), ')', 0 } }, 330 1.1 christos & ifmt_addi, { 0x40000000 } 331 1.1 christos }, 332 1.1 christos /* lh $r1,($r0+$imm) */ 333 1.1 christos { 334 1.1 christos { 0, 0, 0, 0 }, 335 1.1 christos { { MNEM, ' ', OP (R1), ',', '(', OP (R0), '+', OP (IMM), ')', 0 } }, 336 1.1 christos & ifmt_addi, { 0x1c000000 } 337 1.1 christos }, 338 1.1 christos /* lhu $r1,($r0+$imm) */ 339 1.1 christos { 340 1.1 christos { 0, 0, 0, 0 }, 341 1.1 christos { { MNEM, ' ', OP (R1), ',', '(', OP (R0), '+', OP (IMM), ')', 0 } }, 342 1.1 christos & ifmt_addi, { 0x2c000000 } 343 1.1 christos }, 344 1.1 christos /* lw $r1,($r0+$imm) */ 345 1.1 christos { 346 1.1 christos { 0, 0, 0, 0 }, 347 1.1 christos { { MNEM, ' ', OP (R1), ',', '(', OP (R0), '+', OP (IMM), ')', 0 } }, 348 1.1 christos & ifmt_addi, { 0x28000000 } 349 1.1 christos }, 350 1.1 christos /* modu $r2,$r0,$r1 */ 351 1.1 christos { 352 1.1 christos { 0, 0, 0, 0 }, 353 1.1 christos { { MNEM, ' ', OP (R2), ',', OP (R0), ',', OP (R1), 0 } }, 354 1.1 christos & ifmt_add, { 0xc4000000 } 355 1.1 christos }, 356 1.1 christos /* mul $r2,$r0,$r1 */ 357 1.1 christos { 358 1.1 christos { 0, 0, 0, 0 }, 359 1.1 christos { { MNEM, ' ', OP (R2), ',', OP (R0), ',', OP (R1), 0 } }, 360 1.1 christos & ifmt_add, { 0x88000000 } 361 1.1 christos }, 362 1.1 christos /* muli $r1,$r0,$imm */ 363 1.1 christos { 364 1.1 christos { 0, 0, 0, 0 }, 365 1.1 christos { { MNEM, ' ', OP (R1), ',', OP (R0), ',', OP (IMM), 0 } }, 366 1.1 christos & ifmt_addi, { 0x8000000 } 367 1.1 christos }, 368 1.1 christos /* nor $r2,$r0,$r1 */ 369 1.1 christos { 370 1.1 christos { 0, 0, 0, 0 }, 371 1.1 christos { { MNEM, ' ', OP (R2), ',', OP (R0), ',', OP (R1), 0 } }, 372 1.1 christos & ifmt_add, { 0x84000000 } 373 1.1 christos }, 374 1.1 christos /* nori $r1,$r0,$uimm */ 375 1.1 christos { 376 1.1 christos { 0, 0, 0, 0 }, 377 1.1 christos { { MNEM, ' ', OP (R1), ',', OP (R0), ',', OP (UIMM), 0 } }, 378 1.1 christos & ifmt_andi, { 0x4000000 } 379 1.1 christos }, 380 1.1 christos /* or $r2,$r0,$r1 */ 381 1.1 christos { 382 1.1 christos { 0, 0, 0, 0 }, 383 1.1 christos { { MNEM, ' ', OP (R2), ',', OP (R0), ',', OP (R1), 0 } }, 384 1.1 christos & ifmt_add, { 0xb8000000 } 385 1.1 christos }, 386 1.1 christos /* ori $r1,$r0,$lo16 */ 387 1.1 christos { 388 1.1 christos { 0, 0, 0, 0 }, 389 1.1 christos { { MNEM, ' ', OP (R1), ',', OP (R0), ',', OP (LO16), 0 } }, 390 1.1 christos & ifmt_ori, { 0x38000000 } 391 1.1 christos }, 392 1.1 christos /* orhi $r1,$r0,$hi16 */ 393 1.1 christos { 394 1.1 christos { 0, 0, 0, 0 }, 395 1.1 christos { { MNEM, ' ', OP (R1), ',', OP (R0), ',', OP (HI16), 0 } }, 396 1.1 christos & ifmt_andhii, { 0x78000000 } 397 1.1 christos }, 398 1.1 christos /* rcsr $r2,$csr */ 399 1.1 christos { 400 1.1 christos { 0, 0, 0, 0 }, 401 1.1 christos { { MNEM, ' ', OP (R2), ',', OP (CSR), 0 } }, 402 1.1 christos & ifmt_rcsr, { 0x90000000 } 403 1.1 christos }, 404 1.1 christos /* sb ($r0+$imm),$r1 */ 405 1.1 christos { 406 1.1 christos { 0, 0, 0, 0 }, 407 1.1 christos { { MNEM, ' ', '(', OP (R0), '+', OP (IMM), ')', ',', OP (R1), 0 } }, 408 1.1 christos & ifmt_addi, { 0x30000000 } 409 1.1 christos }, 410 1.1 christos /* sextb $r2,$r0 */ 411 1.1 christos { 412 1.1 christos { 0, 0, 0, 0 }, 413 1.1 christos { { MNEM, ' ', OP (R2), ',', OP (R0), 0 } }, 414 1.1 christos & ifmt_sextb, { 0xb0000000 } 415 1.1 christos }, 416 1.1 christos /* sexth $r2,$r0 */ 417 1.1 christos { 418 1.1 christos { 0, 0, 0, 0 }, 419 1.1 christos { { MNEM, ' ', OP (R2), ',', OP (R0), 0 } }, 420 1.1 christos & ifmt_sextb, { 0xdc000000 } 421 1.1 christos }, 422 1.1 christos /* sh ($r0+$imm),$r1 */ 423 1.1 christos { 424 1.1 christos { 0, 0, 0, 0 }, 425 1.1 christos { { MNEM, ' ', '(', OP (R0), '+', OP (IMM), ')', ',', OP (R1), 0 } }, 426 1.1 christos & ifmt_addi, { 0xc000000 } 427 1.1 christos }, 428 1.1 christos /* sl $r2,$r0,$r1 */ 429 1.1 christos { 430 1.1 christos { 0, 0, 0, 0 }, 431 1.1 christos { { MNEM, ' ', OP (R2), ',', OP (R0), ',', OP (R1), 0 } }, 432 1.1 christos & ifmt_add, { 0xbc000000 } 433 1.1 christos }, 434 1.1 christos /* sli $r1,$r0,$imm */ 435 1.1 christos { 436 1.1 christos { 0, 0, 0, 0 }, 437 1.1 christos { { MNEM, ' ', OP (R1), ',', OP (R0), ',', OP (IMM), 0 } }, 438 1.1 christos & ifmt_addi, { 0x3c000000 } 439 1.1 christos }, 440 1.1 christos /* sr $r2,$r0,$r1 */ 441 1.1 christos { 442 1.1 christos { 0, 0, 0, 0 }, 443 1.1 christos { { MNEM, ' ', OP (R2), ',', OP (R0), ',', OP (R1), 0 } }, 444 1.1 christos & ifmt_add, { 0x94000000 } 445 1.1 christos }, 446 1.1 christos /* sri $r1,$r0,$imm */ 447 1.1 christos { 448 1.1 christos { 0, 0, 0, 0 }, 449 1.1 christos { { MNEM, ' ', OP (R1), ',', OP (R0), ',', OP (IMM), 0 } }, 450 1.1 christos & ifmt_addi, { 0x14000000 } 451 1.1 christos }, 452 1.1 christos /* sru $r2,$r0,$r1 */ 453 1.1 christos { 454 1.1 christos { 0, 0, 0, 0 }, 455 1.1 christos { { MNEM, ' ', OP (R2), ',', OP (R0), ',', OP (R1), 0 } }, 456 1.1 christos & ifmt_add, { 0x80000000 } 457 1.1 christos }, 458 1.1 christos /* srui $r1,$r0,$imm */ 459 1.1 christos { 460 1.1 christos { 0, 0, 0, 0 }, 461 1.1 christos { { MNEM, ' ', OP (R1), ',', OP (R0), ',', OP (IMM), 0 } }, 462 1.1 christos & ifmt_addi, { 0x0 } 463 1.1 christos }, 464 1.1 christos /* sub $r2,$r0,$r1 */ 465 1.1 christos { 466 1.1 christos { 0, 0, 0, 0 }, 467 1.1 christos { { MNEM, ' ', OP (R2), ',', OP (R0), ',', OP (R1), 0 } }, 468 1.1 christos & ifmt_add, { 0xc8000000 } 469 1.1 christos }, 470 1.1 christos /* sw ($r0+$imm),$r1 */ 471 1.1 christos { 472 1.1 christos { 0, 0, 0, 0 }, 473 1.1 christos { { MNEM, ' ', '(', OP (R0), '+', OP (IMM), ')', ',', OP (R1), 0 } }, 474 1.1 christos & ifmt_addi, { 0x58000000 } 475 1.1 christos }, 476 1.1 christos /* user $r2,$r0,$r1,$user */ 477 1.1 christos { 478 1.1 christos { 0, 0, 0, 0 }, 479 1.1 christos { { MNEM, ' ', OP (R2), ',', OP (R0), ',', OP (R1), ',', OP (USER), 0 } }, 480 1.1 christos & ifmt_user, { 0xcc000000 } 481 1.1 christos }, 482 1.1 christos /* wcsr $csr,$r1 */ 483 1.1 christos { 484 1.1 christos { 0, 0, 0, 0 }, 485 1.1 christos { { MNEM, ' ', OP (CSR), ',', OP (R1), 0 } }, 486 1.1 christos & ifmt_wcsr, { 0xd0000000 } 487 1.1 christos }, 488 1.1 christos /* xor $r2,$r0,$r1 */ 489 1.1 christos { 490 1.1 christos { 0, 0, 0, 0 }, 491 1.1 christos { { MNEM, ' ', OP (R2), ',', OP (R0), ',', OP (R1), 0 } }, 492 1.1 christos & ifmt_add, { 0x98000000 } 493 1.1 christos }, 494 1.1 christos /* xori $r1,$r0,$uimm */ 495 1.1 christos { 496 1.1 christos { 0, 0, 0, 0 }, 497 1.1 christos { { MNEM, ' ', OP (R1), ',', OP (R0), ',', OP (UIMM), 0 } }, 498 1.1 christos & ifmt_andi, { 0x18000000 } 499 1.1 christos }, 500 1.1 christos /* xnor $r2,$r0,$r1 */ 501 1.1 christos { 502 1.1 christos { 0, 0, 0, 0 }, 503 1.1 christos { { MNEM, ' ', OP (R2), ',', OP (R0), ',', OP (R1), 0 } }, 504 1.1 christos & ifmt_add, { 0xa4000000 } 505 1.1 christos }, 506 1.1 christos /* xnori $r1,$r0,$uimm */ 507 1.1 christos { 508 1.1 christos { 0, 0, 0, 0 }, 509 1.1 christos { { MNEM, ' ', OP (R1), ',', OP (R0), ',', OP (UIMM), 0 } }, 510 1.1 christos & ifmt_andi, { 0x24000000 } 511 1.1 christos }, 512 1.1 christos /* break */ 513 1.1 christos { 514 1.1 christos { 0, 0, 0, 0 }, 515 1.1 christos { { MNEM, 0 } }, 516 1.1 christos & ifmt_break, { 0xac000002 } 517 1.1 christos }, 518 1.1 christos /* scall */ 519 1.1 christos { 520 1.1 christos { 0, 0, 0, 0 }, 521 1.1 christos { { MNEM, 0 } }, 522 1.1 christos & ifmt_break, { 0xac000007 } 523 1.1 christos }, 524 1.1 christos /* bret */ 525 1.1 christos { 526 1.1 christos { 0, 0, 0, 0 }, 527 1.1 christos { { MNEM, 0 } }, 528 1.1 christos & ifmt_bret, { 0xc3e00000 } 529 1.1 christos }, 530 1.1 christos /* eret */ 531 1.1 christos { 532 1.1 christos { 0, 0, 0, 0 }, 533 1.1 christos { { MNEM, 0 } }, 534 1.1 christos & ifmt_bret, { 0xc3c00000 } 535 1.1 christos }, 536 1.1 christos /* ret */ 537 1.1 christos { 538 1.1 christos { 0, 0, 0, 0 }, 539 1.1 christos { { MNEM, 0 } }, 540 1.1 christos & ifmt_bret, { 0xc3a00000 } 541 1.1 christos }, 542 1.1 christos /* mv $r2,$r0 */ 543 1.1 christos { 544 1.1 christos { 0, 0, 0, 0 }, 545 1.1 christos { { MNEM, ' ', OP (R2), ',', OP (R0), 0 } }, 546 1.1 christos & ifmt_sextb, { 0xb8000000 } 547 1.1 christos }, 548 1.1 christos /* mvi $r1,$imm */ 549 1.1 christos { 550 1.1 christos { 0, 0, 0, 0 }, 551 1.1 christos { { MNEM, ' ', OP (R1), ',', OP (IMM), 0 } }, 552 1.1 christos & ifmt_mvi, { 0x34000000 } 553 1.1 christos }, 554 1.1 christos /* mvu $r1,$lo16 */ 555 1.1 christos { 556 1.1 christos { 0, 0, 0, 0 }, 557 1.1 christos { { MNEM, ' ', OP (R1), ',', OP (LO16), 0 } }, 558 1.1 christos & ifmt_mvui, { 0x38000000 } 559 1.1 christos }, 560 1.1 christos /* mvhi $r1,$hi16 */ 561 1.1 christos { 562 1.1 christos { 0, 0, 0, 0 }, 563 1.1 christos { { MNEM, ' ', OP (R1), ',', OP (HI16), 0 } }, 564 1.1 christos & ifmt_mvhi, { 0x78000000 } 565 1.1 christos }, 566 1.1 christos /* mva $r1,$gp16 */ 567 1.1 christos { 568 1.1 christos { 0, 0, 0, 0 }, 569 1.1 christos { { MNEM, ' ', OP (R1), ',', OP (GP16), 0 } }, 570 1.1 christos & ifmt_mva, { 0x37400000 } 571 1.1 christos }, 572 1.1 christos /* not $r2,$r0 */ 573 1.1 christos { 574 1.1 christos { 0, 0, 0, 0 }, 575 1.1 christos { { MNEM, ' ', OP (R2), ',', OP (R0), 0 } }, 576 1.1 christos & ifmt_sextb, { 0xa4000000 } 577 1.1 christos }, 578 1.1 christos /* nop */ 579 1.1 christos { 580 1.1 christos { 0, 0, 0, 0 }, 581 1.1 christos { { MNEM, 0 } }, 582 1.1 christos & ifmt_nop, { 0x34000000 } 583 1.1 christos }, 584 1.1 christos /* lb $r1,$gp16 */ 585 1.1 christos { 586 1.1 christos { 0, 0, 0, 0 }, 587 1.1 christos { { MNEM, ' ', OP (R1), ',', OP (GP16), 0 } }, 588 1.1 christos & ifmt_mva, { 0x13400000 } 589 1.1 christos }, 590 1.1 christos /* lbu $r1,$gp16 */ 591 1.1 christos { 592 1.1 christos { 0, 0, 0, 0 }, 593 1.1 christos { { MNEM, ' ', OP (R1), ',', OP (GP16), 0 } }, 594 1.1 christos & ifmt_mva, { 0x43400000 } 595 1.1 christos }, 596 1.1 christos /* lh $r1,$gp16 */ 597 1.1 christos { 598 1.1 christos { 0, 0, 0, 0 }, 599 1.1 christos { { MNEM, ' ', OP (R1), ',', OP (GP16), 0 } }, 600 1.1 christos & ifmt_mva, { 0x1f400000 } 601 1.1 christos }, 602 1.1 christos /* lhu $r1,$gp16 */ 603 1.1 christos { 604 1.1 christos { 0, 0, 0, 0 }, 605 1.1 christos { { MNEM, ' ', OP (R1), ',', OP (GP16), 0 } }, 606 1.1 christos & ifmt_mva, { 0x2f400000 } 607 1.1 christos }, 608 1.1 christos /* lw $r1,$gp16 */ 609 1.1 christos { 610 1.1 christos { 0, 0, 0, 0 }, 611 1.1 christos { { MNEM, ' ', OP (R1), ',', OP (GP16), 0 } }, 612 1.1 christos & ifmt_mva, { 0x2b400000 } 613 1.1 christos }, 614 1.1 christos /* sb $gp16,$r1 */ 615 1.1 christos { 616 1.1 christos { 0, 0, 0, 0 }, 617 1.1 christos { { MNEM, ' ', OP (GP16), ',', OP (R1), 0 } }, 618 1.1 christos & ifmt_mva, { 0x33400000 } 619 1.1 christos }, 620 1.1 christos /* sh $gp16,$r1 */ 621 1.1 christos { 622 1.1 christos { 0, 0, 0, 0 }, 623 1.1 christos { { MNEM, ' ', OP (GP16), ',', OP (R1), 0 } }, 624 1.1 christos & ifmt_mva, { 0xf400000 } 625 1.1 christos }, 626 1.1 christos /* sw $gp16,$r1 */ 627 1.1 christos { 628 1.1 christos { 0, 0, 0, 0 }, 629 1.1 christos { { MNEM, ' ', OP (GP16), ',', OP (R1), 0 } }, 630 1.1 christos & ifmt_mva, { 0x5b400000 } 631 1.1 christos }, 632 1.1 christos /* lw $r1,(gp+$got16) */ 633 1.1 christos { 634 1.1 christos { 0, 0, 0, 0 }, 635 1.1 christos { { MNEM, ' ', OP (R1), ',', '(', 'g', 'p', '+', OP (GOT16), ')', 0 } }, 636 1.1 christos & ifmt_lwgotrel, { 0x2b400000 } 637 1.1 christos }, 638 1.1 christos /* orhi $r1,$r0,$gotoffhi16 */ 639 1.1 christos { 640 1.1 christos { 0, 0, 0, 0 }, 641 1.1 christos { { MNEM, ' ', OP (R1), ',', OP (R0), ',', OP (GOTOFFHI16), 0 } }, 642 1.1 christos & ifmt_orhigotoffi, { 0x78000000 } 643 1.1 christos }, 644 1.1 christos /* addi $r1,$r0,$gotofflo16 */ 645 1.1 christos { 646 1.1 christos { 0, 0, 0, 0 }, 647 1.1 christos { { MNEM, ' ', OP (R1), ',', OP (R0), ',', OP (GOTOFFLO16), 0 } }, 648 1.1 christos & ifmt_addgotoff, { 0x34000000 } 649 1.1 christos }, 650 1.1 christos /* sw ($r0+$gotofflo16),$r1 */ 651 1.1 christos { 652 1.1 christos { 0, 0, 0, 0 }, 653 1.1 christos { { MNEM, ' ', '(', OP (R0), '+', OP (GOTOFFLO16), ')', ',', OP (R1), 0 } }, 654 1.1 christos & ifmt_addgotoff, { 0x58000000 } 655 1.1 christos }, 656 1.1 christos /* lw $r1,($r0+$gotofflo16) */ 657 1.1 christos { 658 1.1 christos { 0, 0, 0, 0 }, 659 1.1 christos { { MNEM, ' ', OP (R1), ',', '(', OP (R0), '+', OP (GOTOFFLO16), ')', 0 } }, 660 1.1 christos & ifmt_addgotoff, { 0x28000000 } 661 1.1 christos }, 662 1.1 christos /* sh ($r0+$gotofflo16),$r1 */ 663 1.1 christos { 664 1.1 christos { 0, 0, 0, 0 }, 665 1.1 christos { { MNEM, ' ', '(', OP (R0), '+', OP (GOTOFFLO16), ')', ',', OP (R1), 0 } }, 666 1.1 christos & ifmt_addgotoff, { 0xc000000 } 667 1.1 christos }, 668 1.1 christos /* lh $r1,($r0+$gotofflo16) */ 669 1.1 christos { 670 1.1 christos { 0, 0, 0, 0 }, 671 1.1 christos { { MNEM, ' ', OP (R1), ',', '(', OP (R0), '+', OP (GOTOFFLO16), ')', 0 } }, 672 1.1 christos & ifmt_addgotoff, { 0x1c000000 } 673 1.1 christos }, 674 1.1 christos /* lhu $r1,($r0+$gotofflo16) */ 675 1.1 christos { 676 1.1 christos { 0, 0, 0, 0 }, 677 1.1 christos { { MNEM, ' ', OP (R1), ',', '(', OP (R0), '+', OP (GOTOFFLO16), ')', 0 } }, 678 1.1 christos & ifmt_addgotoff, { 0x2c000000 } 679 1.1 christos }, 680 1.1 christos /* sb ($r0+$gotofflo16),$r1 */ 681 1.1 christos { 682 1.1 christos { 0, 0, 0, 0 }, 683 1.1 christos { { MNEM, ' ', '(', OP (R0), '+', OP (GOTOFFLO16), ')', ',', OP (R1), 0 } }, 684 1.1 christos & ifmt_addgotoff, { 0x30000000 } 685 1.1 christos }, 686 1.1 christos /* lb $r1,($r0+$gotofflo16) */ 687 1.1 christos { 688 1.1 christos { 0, 0, 0, 0 }, 689 1.1 christos { { MNEM, ' ', OP (R1), ',', '(', OP (R0), '+', OP (GOTOFFLO16), ')', 0 } }, 690 1.1 christos & ifmt_addgotoff, { 0x10000000 } 691 1.1 christos }, 692 1.1 christos /* lbu $r1,($r0+$gotofflo16) */ 693 1.1 christos { 694 1.1 christos { 0, 0, 0, 0 }, 695 1.1 christos { { MNEM, ' ', OP (R1), ',', '(', OP (R0), '+', OP (GOTOFFLO16), ')', 0 } }, 696 1.1 christos & ifmt_addgotoff, { 0x40000000 } 697 1.1 christos }, 698 1.1 christos }; 699 1.1 christos 700 1.1 christos #undef A 701 1.1 christos #undef OPERAND 702 1.1 christos #undef MNEM 703 1.1 christos #undef OP 704 1.1 christos 705 1.1 christos /* Formats for ALIAS macro-insns. */ 706 1.1 christos 707 1.1 christos #define F(f) & lm32_cgen_ifld_table[LM32_##f] 708 1.1 christos #undef F 709 1.1 christos 710 1.1 christos /* Each non-simple macro entry points to an array of expansion possibilities. */ 711 1.1 christos 712 1.1 christos #define A(a) (1 << CGEN_INSN_##a) 713 1.1 christos #define OPERAND(op) LM32_OPERAND_##op 714 1.1 christos #define MNEM CGEN_SYNTAX_MNEMONIC /* syntax value for mnemonic */ 715 1.1 christos #define OP(field) CGEN_SYNTAX_MAKE_FIELD (OPERAND (field)) 716 1.1 christos 717 1.1 christos /* The macro instruction table. */ 718 1.1 christos 719 1.1 christos static const CGEN_IBASE lm32_cgen_macro_insn_table[] = 720 1.1 christos { 721 1.1 christos }; 722 1.1 christos 723 1.1 christos /* The macro instruction opcode table. */ 724 1.1 christos 725 1.1 christos static const CGEN_OPCODE lm32_cgen_macro_insn_opcode_table[] = 726 1.1 christos { 727 1.1 christos }; 728 1.1 christos 729 1.1 christos #undef A 730 1.1 christos #undef OPERAND 731 1.1 christos #undef MNEM 732 1.1 christos #undef OP 733 1.1 christos 734 1.1 christos #ifndef CGEN_ASM_HASH_P 735 1.1 christos #define CGEN_ASM_HASH_P(insn) 1 736 1.1 christos #endif 737 1.1 christos 738 1.1 christos #ifndef CGEN_DIS_HASH_P 739 1.1 christos #define CGEN_DIS_HASH_P(insn) 1 740 1.1 christos #endif 741 1.1 christos 742 1.1 christos /* Return non-zero if INSN is to be added to the hash table. 743 1.1 christos Targets are free to override CGEN_{ASM,DIS}_HASH_P in the .opc file. */ 744 1.1 christos 745 1.1 christos static int 746 1.1.1.3 christos asm_hash_insn_p (const CGEN_INSN *insn ATTRIBUTE_UNUSED) 747 1.1 christos { 748 1.1 christos return CGEN_ASM_HASH_P (insn); 749 1.1 christos } 750 1.1 christos 751 1.1 christos static int 752 1.1.1.3 christos dis_hash_insn_p (const CGEN_INSN *insn) 753 1.1 christos { 754 1.1 christos /* If building the hash table and the NO-DIS attribute is present, 755 1.1 christos ignore. */ 756 1.1 christos if (CGEN_INSN_ATTR_VALUE (insn, CGEN_INSN_NO_DIS)) 757 1.1 christos return 0; 758 1.1 christos return CGEN_DIS_HASH_P (insn); 759 1.1 christos } 760 1.1 christos 761 1.1 christos #ifndef CGEN_ASM_HASH 762 1.1 christos #define CGEN_ASM_HASH_SIZE 127 763 1.1 christos #ifdef CGEN_MNEMONIC_OPERANDS 764 1.1 christos #define CGEN_ASM_HASH(mnem) (*(unsigned char *) (mnem) % CGEN_ASM_HASH_SIZE) 765 1.1 christos #else 766 1.1 christos #define CGEN_ASM_HASH(mnem) (*(unsigned char *) (mnem) % CGEN_ASM_HASH_SIZE) /*FIXME*/ 767 1.1 christos #endif 768 1.1 christos #endif 769 1.1 christos 770 1.1 christos /* It doesn't make much sense to provide a default here, 771 1.1 christos but while this is under development we do. 772 1.1 christos BUFFER is a pointer to the bytes of the insn, target order. 773 1.1 christos VALUE is the first base_insn_bitsize bits as an int in host order. */ 774 1.1 christos 775 1.1 christos #ifndef CGEN_DIS_HASH 776 1.1 christos #define CGEN_DIS_HASH_SIZE 256 777 1.1 christos #define CGEN_DIS_HASH(buf, value) (*(unsigned char *) (buf)) 778 1.1 christos #endif 779 1.1 christos 780 1.1 christos /* The result is the hash value of the insn. 781 1.1 christos Targets are free to override CGEN_{ASM,DIS}_HASH in the .opc file. */ 782 1.1 christos 783 1.1 christos static unsigned int 784 1.1.1.3 christos asm_hash_insn (const char *mnem) 785 1.1 christos { 786 1.1 christos return CGEN_ASM_HASH (mnem); 787 1.1 christos } 788 1.1 christos 789 1.1 christos /* BUF is a pointer to the bytes of the insn, target order. 790 1.1 christos VALUE is the first base_insn_bitsize bits as an int in host order. */ 791 1.1 christos 792 1.1 christos static unsigned int 793 1.1.1.3 christos dis_hash_insn (const char *buf ATTRIBUTE_UNUSED, 794 1.1.1.3 christos CGEN_INSN_INT value ATTRIBUTE_UNUSED) 795 1.1 christos { 796 1.1 christos return CGEN_DIS_HASH (buf, value); 797 1.1 christos } 798 1.1 christos 799 1.1 christos /* Set the recorded length of the insn in the CGEN_FIELDS struct. */ 800 1.1 christos 801 1.1 christos static void 802 1.1 christos set_fields_bitsize (CGEN_FIELDS *fields, int size) 803 1.1 christos { 804 1.1 christos CGEN_FIELDS_BITSIZE (fields) = size; 805 1.1 christos } 806 1.1 christos 807 1.1 christos /* Function to call before using the operand instance table. 808 1.1 christos This plugs the opcode entries and macro instructions into the cpu table. */ 809 1.1 christos 810 1.1 christos void 811 1.1 christos lm32_cgen_init_opcode_table (CGEN_CPU_DESC cd) 812 1.1 christos { 813 1.1 christos int i; 814 1.1 christos int num_macros = (sizeof (lm32_cgen_macro_insn_table) / 815 1.1 christos sizeof (lm32_cgen_macro_insn_table[0])); 816 1.1 christos const CGEN_IBASE *ib = & lm32_cgen_macro_insn_table[0]; 817 1.1 christos const CGEN_OPCODE *oc = & lm32_cgen_macro_insn_opcode_table[0]; 818 1.1 christos CGEN_INSN *insns = xmalloc (num_macros * sizeof (CGEN_INSN)); 819 1.1 christos 820 1.1 christos /* This test has been added to avoid a warning generated 821 1.1 christos if memset is called with a third argument of value zero. */ 822 1.1 christos if (num_macros >= 1) 823 1.1 christos memset (insns, 0, num_macros * sizeof (CGEN_INSN)); 824 1.1 christos for (i = 0; i < num_macros; ++i) 825 1.1 christos { 826 1.1 christos insns[i].base = &ib[i]; 827 1.1 christos insns[i].opcode = &oc[i]; 828 1.1 christos lm32_cgen_build_insn_regex (& insns[i]); 829 1.1 christos } 830 1.1 christos cd->macro_insn_table.init_entries = insns; 831 1.1 christos cd->macro_insn_table.entry_size = sizeof (CGEN_IBASE); 832 1.1 christos cd->macro_insn_table.num_init_entries = num_macros; 833 1.1 christos 834 1.1 christos oc = & lm32_cgen_insn_opcode_table[0]; 835 1.1 christos insns = (CGEN_INSN *) cd->insn_table.init_entries; 836 1.1 christos for (i = 0; i < MAX_INSNS; ++i) 837 1.1 christos { 838 1.1 christos insns[i].opcode = &oc[i]; 839 1.1 christos lm32_cgen_build_insn_regex (& insns[i]); 840 1.1 christos } 841 1.1 christos 842 1.1 christos cd->sizeof_fields = sizeof (CGEN_FIELDS); 843 1.1 christos cd->set_fields_bitsize = set_fields_bitsize; 844 1.1 christos 845 1.1 christos cd->asm_hash_p = asm_hash_insn_p; 846 1.1 christos cd->asm_hash = asm_hash_insn; 847 1.1 christos cd->asm_hash_size = CGEN_ASM_HASH_SIZE; 848 1.1 christos 849 1.1 christos cd->dis_hash_p = dis_hash_insn_p; 850 1.1 christos cd->dis_hash = dis_hash_insn; 851 1.1 christos cd->dis_hash_size = CGEN_DIS_HASH_SIZE; 852 1.1 christos } 853