1 1.8 christos /* DO NOT EDIT! -*- buffer-read-only: t -*- vi:set ro: */ 2 1.1 christos /* CPU data for fr30. 3 1.1 christos 4 1.1 christos THIS FILE IS MACHINE GENERATED WITH CGEN. 5 1.1 christos 6 1.11 christos Copyright (C) 1996-2024 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 <stdio.h> 28 1.1 christos #include <stdarg.h> 29 1.10 christos #include <stdlib.h> 30 1.1 christos #include "ansidecl.h" 31 1.1 christos #include "bfd.h" 32 1.1 christos #include "symcat.h" 33 1.1 christos #include "fr30-desc.h" 34 1.1 christos #include "fr30-opc.h" 35 1.1 christos #include "opintl.h" 36 1.1 christos #include "libiberty.h" 37 1.1 christos #include "xregex.h" 38 1.1 christos 39 1.1 christos /* Attributes. */ 40 1.1 christos 41 1.1 christos static const CGEN_ATTR_ENTRY bool_attr[] = 42 1.1 christos { 43 1.1 christos { "#f", 0 }, 44 1.1 christos { "#t", 1 }, 45 1.1 christos { 0, 0 } 46 1.1 christos }; 47 1.1 christos 48 1.1 christos static const CGEN_ATTR_ENTRY MACH_attr[] ATTRIBUTE_UNUSED = 49 1.1 christos { 50 1.1 christos { "base", MACH_BASE }, 51 1.1 christos { "fr30", MACH_FR30 }, 52 1.1 christos { "max", MACH_MAX }, 53 1.1 christos { 0, 0 } 54 1.1 christos }; 55 1.1 christos 56 1.1 christos static const CGEN_ATTR_ENTRY ISA_attr[] ATTRIBUTE_UNUSED = 57 1.1 christos { 58 1.1 christos { "fr30", ISA_FR30 }, 59 1.1 christos { "max", ISA_MAX }, 60 1.1 christos { 0, 0 } 61 1.1 christos }; 62 1.1 christos 63 1.1 christos const CGEN_ATTR_TABLE fr30_cgen_ifield_attr_table[] = 64 1.1 christos { 65 1.1 christos { "MACH", & MACH_attr[0], & MACH_attr[0] }, 66 1.1 christos { "VIRTUAL", &bool_attr[0], &bool_attr[0] }, 67 1.1 christos { "PCREL-ADDR", &bool_attr[0], &bool_attr[0] }, 68 1.1 christos { "ABS-ADDR", &bool_attr[0], &bool_attr[0] }, 69 1.1 christos { "RESERVED", &bool_attr[0], &bool_attr[0] }, 70 1.1 christos { "SIGN-OPT", &bool_attr[0], &bool_attr[0] }, 71 1.1 christos { "SIGNED", &bool_attr[0], &bool_attr[0] }, 72 1.1 christos { 0, 0, 0 } 73 1.1 christos }; 74 1.1 christos 75 1.1 christos const CGEN_ATTR_TABLE fr30_cgen_hardware_attr_table[] = 76 1.1 christos { 77 1.1 christos { "MACH", & MACH_attr[0], & MACH_attr[0] }, 78 1.1 christos { "VIRTUAL", &bool_attr[0], &bool_attr[0] }, 79 1.1 christos { "CACHE-ADDR", &bool_attr[0], &bool_attr[0] }, 80 1.1 christos { "PC", &bool_attr[0], &bool_attr[0] }, 81 1.1 christos { "PROFILE", &bool_attr[0], &bool_attr[0] }, 82 1.1 christos { 0, 0, 0 } 83 1.1 christos }; 84 1.1 christos 85 1.1 christos const CGEN_ATTR_TABLE fr30_cgen_operand_attr_table[] = 86 1.1 christos { 87 1.1 christos { "MACH", & MACH_attr[0], & MACH_attr[0] }, 88 1.1 christos { "VIRTUAL", &bool_attr[0], &bool_attr[0] }, 89 1.1 christos { "PCREL-ADDR", &bool_attr[0], &bool_attr[0] }, 90 1.1 christos { "ABS-ADDR", &bool_attr[0], &bool_attr[0] }, 91 1.1 christos { "SIGN-OPT", &bool_attr[0], &bool_attr[0] }, 92 1.1 christos { "SIGNED", &bool_attr[0], &bool_attr[0] }, 93 1.1 christos { "NEGATIVE", &bool_attr[0], &bool_attr[0] }, 94 1.1 christos { "RELAX", &bool_attr[0], &bool_attr[0] }, 95 1.1 christos { "SEM-ONLY", &bool_attr[0], &bool_attr[0] }, 96 1.1 christos { "HASH-PREFIX", &bool_attr[0], &bool_attr[0] }, 97 1.1 christos { 0, 0, 0 } 98 1.1 christos }; 99 1.1 christos 100 1.1 christos const CGEN_ATTR_TABLE fr30_cgen_insn_attr_table[] = 101 1.1 christos { 102 1.1 christos { "MACH", & MACH_attr[0], & MACH_attr[0] }, 103 1.1 christos { "ALIAS", &bool_attr[0], &bool_attr[0] }, 104 1.1 christos { "VIRTUAL", &bool_attr[0], &bool_attr[0] }, 105 1.1 christos { "UNCOND-CTI", &bool_attr[0], &bool_attr[0] }, 106 1.1 christos { "COND-CTI", &bool_attr[0], &bool_attr[0] }, 107 1.1 christos { "SKIP-CTI", &bool_attr[0], &bool_attr[0] }, 108 1.1 christos { "DELAY-SLOT", &bool_attr[0], &bool_attr[0] }, 109 1.1 christos { "RELAXABLE", &bool_attr[0], &bool_attr[0] }, 110 1.1 christos { "RELAXED", &bool_attr[0], &bool_attr[0] }, 111 1.1 christos { "NO-DIS", &bool_attr[0], &bool_attr[0] }, 112 1.1 christos { "PBB", &bool_attr[0], &bool_attr[0] }, 113 1.1 christos { "NOT-IN-DELAY-SLOT", &bool_attr[0], &bool_attr[0] }, 114 1.1 christos { 0, 0, 0 } 115 1.1 christos }; 116 1.1 christos 117 1.1 christos /* Instruction set variants. */ 118 1.1 christos 119 1.1 christos static const CGEN_ISA fr30_cgen_isa_table[] = { 120 1.1 christos { "fr30", 16, 16, 16, 48 }, 121 1.1 christos { 0, 0, 0, 0, 0 } 122 1.1 christos }; 123 1.1 christos 124 1.1 christos /* Machine variants. */ 125 1.1 christos 126 1.1 christos static const CGEN_MACH fr30_cgen_mach_table[] = { 127 1.1 christos { "fr30", "fr30", MACH_FR30, 0 }, 128 1.1 christos { 0, 0, 0, 0 } 129 1.1 christos }; 130 1.1 christos 131 1.1 christos static CGEN_KEYWORD_ENTRY fr30_cgen_opval_gr_names_entries[] = 132 1.1 christos { 133 1.1 christos { "r0", 0, {0, {{{0, 0}}}}, 0, 0 }, 134 1.1 christos { "r1", 1, {0, {{{0, 0}}}}, 0, 0 }, 135 1.1 christos { "r2", 2, {0, {{{0, 0}}}}, 0, 0 }, 136 1.1 christos { "r3", 3, {0, {{{0, 0}}}}, 0, 0 }, 137 1.1 christos { "r4", 4, {0, {{{0, 0}}}}, 0, 0 }, 138 1.1 christos { "r5", 5, {0, {{{0, 0}}}}, 0, 0 }, 139 1.1 christos { "r6", 6, {0, {{{0, 0}}}}, 0, 0 }, 140 1.1 christos { "r7", 7, {0, {{{0, 0}}}}, 0, 0 }, 141 1.1 christos { "r8", 8, {0, {{{0, 0}}}}, 0, 0 }, 142 1.1 christos { "r9", 9, {0, {{{0, 0}}}}, 0, 0 }, 143 1.1 christos { "r10", 10, {0, {{{0, 0}}}}, 0, 0 }, 144 1.1 christos { "r11", 11, {0, {{{0, 0}}}}, 0, 0 }, 145 1.1 christos { "r12", 12, {0, {{{0, 0}}}}, 0, 0 }, 146 1.1 christos { "r13", 13, {0, {{{0, 0}}}}, 0, 0 }, 147 1.1 christos { "r14", 14, {0, {{{0, 0}}}}, 0, 0 }, 148 1.1 christos { "r15", 15, {0, {{{0, 0}}}}, 0, 0 }, 149 1.1 christos { "ac", 13, {0, {{{0, 0}}}}, 0, 0 }, 150 1.1 christos { "fp", 14, {0, {{{0, 0}}}}, 0, 0 }, 151 1.1 christos { "sp", 15, {0, {{{0, 0}}}}, 0, 0 } 152 1.1 christos }; 153 1.1 christos 154 1.1 christos CGEN_KEYWORD fr30_cgen_opval_gr_names = 155 1.1 christos { 156 1.1 christos & fr30_cgen_opval_gr_names_entries[0], 157 1.1 christos 19, 158 1.1 christos 0, 0, 0, 0, "" 159 1.1 christos }; 160 1.1 christos 161 1.1 christos static CGEN_KEYWORD_ENTRY fr30_cgen_opval_cr_names_entries[] = 162 1.1 christos { 163 1.1 christos { "cr0", 0, {0, {{{0, 0}}}}, 0, 0 }, 164 1.1 christos { "cr1", 1, {0, {{{0, 0}}}}, 0, 0 }, 165 1.1 christos { "cr2", 2, {0, {{{0, 0}}}}, 0, 0 }, 166 1.1 christos { "cr3", 3, {0, {{{0, 0}}}}, 0, 0 }, 167 1.1 christos { "cr4", 4, {0, {{{0, 0}}}}, 0, 0 }, 168 1.1 christos { "cr5", 5, {0, {{{0, 0}}}}, 0, 0 }, 169 1.1 christos { "cr6", 6, {0, {{{0, 0}}}}, 0, 0 }, 170 1.1 christos { "cr7", 7, {0, {{{0, 0}}}}, 0, 0 }, 171 1.1 christos { "cr8", 8, {0, {{{0, 0}}}}, 0, 0 }, 172 1.1 christos { "cr9", 9, {0, {{{0, 0}}}}, 0, 0 }, 173 1.1 christos { "cr10", 10, {0, {{{0, 0}}}}, 0, 0 }, 174 1.1 christos { "cr11", 11, {0, {{{0, 0}}}}, 0, 0 }, 175 1.1 christos { "cr12", 12, {0, {{{0, 0}}}}, 0, 0 }, 176 1.1 christos { "cr13", 13, {0, {{{0, 0}}}}, 0, 0 }, 177 1.1 christos { "cr14", 14, {0, {{{0, 0}}}}, 0, 0 }, 178 1.1 christos { "cr15", 15, {0, {{{0, 0}}}}, 0, 0 } 179 1.1 christos }; 180 1.1 christos 181 1.1 christos CGEN_KEYWORD fr30_cgen_opval_cr_names = 182 1.1 christos { 183 1.1 christos & fr30_cgen_opval_cr_names_entries[0], 184 1.1 christos 16, 185 1.1 christos 0, 0, 0, 0, "" 186 1.1 christos }; 187 1.1 christos 188 1.1 christos static CGEN_KEYWORD_ENTRY fr30_cgen_opval_dr_names_entries[] = 189 1.1 christos { 190 1.1 christos { "tbr", 0, {0, {{{0, 0}}}}, 0, 0 }, 191 1.1 christos { "rp", 1, {0, {{{0, 0}}}}, 0, 0 }, 192 1.1 christos { "ssp", 2, {0, {{{0, 0}}}}, 0, 0 }, 193 1.1 christos { "usp", 3, {0, {{{0, 0}}}}, 0, 0 }, 194 1.1 christos { "mdh", 4, {0, {{{0, 0}}}}, 0, 0 }, 195 1.1 christos { "mdl", 5, {0, {{{0, 0}}}}, 0, 0 } 196 1.1 christos }; 197 1.1 christos 198 1.1 christos CGEN_KEYWORD fr30_cgen_opval_dr_names = 199 1.1 christos { 200 1.1 christos & fr30_cgen_opval_dr_names_entries[0], 201 1.1 christos 6, 202 1.1 christos 0, 0, 0, 0, "" 203 1.1 christos }; 204 1.1 christos 205 1.1 christos static CGEN_KEYWORD_ENTRY fr30_cgen_opval_h_ps_entries[] = 206 1.1 christos { 207 1.1 christos { "ps", 0, {0, {{{0, 0}}}}, 0, 0 } 208 1.1 christos }; 209 1.1 christos 210 1.1 christos CGEN_KEYWORD fr30_cgen_opval_h_ps = 211 1.1 christos { 212 1.1 christos & fr30_cgen_opval_h_ps_entries[0], 213 1.1 christos 1, 214 1.1 christos 0, 0, 0, 0, "" 215 1.1 christos }; 216 1.1 christos 217 1.1 christos static CGEN_KEYWORD_ENTRY fr30_cgen_opval_h_r13_entries[] = 218 1.1 christos { 219 1.1 christos { "r13", 0, {0, {{{0, 0}}}}, 0, 0 } 220 1.1 christos }; 221 1.1 christos 222 1.1 christos CGEN_KEYWORD fr30_cgen_opval_h_r13 = 223 1.1 christos { 224 1.1 christos & fr30_cgen_opval_h_r13_entries[0], 225 1.1 christos 1, 226 1.1 christos 0, 0, 0, 0, "" 227 1.1 christos }; 228 1.1 christos 229 1.1 christos static CGEN_KEYWORD_ENTRY fr30_cgen_opval_h_r14_entries[] = 230 1.1 christos { 231 1.1 christos { "r14", 0, {0, {{{0, 0}}}}, 0, 0 } 232 1.1 christos }; 233 1.1 christos 234 1.1 christos CGEN_KEYWORD fr30_cgen_opval_h_r14 = 235 1.1 christos { 236 1.1 christos & fr30_cgen_opval_h_r14_entries[0], 237 1.1 christos 1, 238 1.1 christos 0, 0, 0, 0, "" 239 1.1 christos }; 240 1.1 christos 241 1.1 christos static CGEN_KEYWORD_ENTRY fr30_cgen_opval_h_r15_entries[] = 242 1.1 christos { 243 1.1 christos { "r15", 0, {0, {{{0, 0}}}}, 0, 0 } 244 1.1 christos }; 245 1.1 christos 246 1.1 christos CGEN_KEYWORD fr30_cgen_opval_h_r15 = 247 1.1 christos { 248 1.1 christos & fr30_cgen_opval_h_r15_entries[0], 249 1.1 christos 1, 250 1.1 christos 0, 0, 0, 0, "" 251 1.1 christos }; 252 1.1 christos 253 1.1 christos 254 1.1 christos /* The hardware table. */ 255 1.1 christos 256 1.1 christos #define A(a) (1 << CGEN_HW_##a) 257 1.1 christos 258 1.1 christos const CGEN_HW_ENTRY fr30_cgen_hw_table[] = 259 1.1 christos { 260 1.1 christos { "h-memory", HW_H_MEMORY, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } }, 261 1.1 christos { "h-sint", HW_H_SINT, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } }, 262 1.1 christos { "h-uint", HW_H_UINT, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } }, 263 1.1 christos { "h-addr", HW_H_ADDR, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } }, 264 1.1 christos { "h-iaddr", HW_H_IADDR, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } }, 265 1.1 christos { "h-pc", HW_H_PC, CGEN_ASM_NONE, 0, { 0|A(PROFILE)|A(PC), { { { (1<<MACH_BASE), 0 } } } } }, 266 1.10 christos { "h-gr", HW_H_GR, CGEN_ASM_KEYWORD, & fr30_cgen_opval_gr_names, { 0|A(CACHE_ADDR)|A(PROFILE), { { { (1<<MACH_BASE), 0 } } } } }, 267 1.10 christos { "h-cr", HW_H_CR, CGEN_ASM_KEYWORD, & fr30_cgen_opval_cr_names, { 0, { { { (1<<MACH_BASE), 0 } } } } }, 268 1.10 christos { "h-dr", HW_H_DR, CGEN_ASM_KEYWORD, & fr30_cgen_opval_dr_names, { 0, { { { (1<<MACH_BASE), 0 } } } } }, 269 1.10 christos { "h-ps", HW_H_PS, CGEN_ASM_KEYWORD, & fr30_cgen_opval_h_ps, { 0, { { { (1<<MACH_BASE), 0 } } } } }, 270 1.10 christos { "h-r13", HW_H_R13, CGEN_ASM_KEYWORD, & fr30_cgen_opval_h_r13, { 0, { { { (1<<MACH_BASE), 0 } } } } }, 271 1.10 christos { "h-r14", HW_H_R14, CGEN_ASM_KEYWORD, & fr30_cgen_opval_h_r14, { 0, { { { (1<<MACH_BASE), 0 } } } } }, 272 1.10 christos { "h-r15", HW_H_R15, CGEN_ASM_KEYWORD, & fr30_cgen_opval_h_r15, { 0, { { { (1<<MACH_BASE), 0 } } } } }, 273 1.1 christos { "h-nbit", HW_H_NBIT, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } }, 274 1.1 christos { "h-zbit", HW_H_ZBIT, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } }, 275 1.1 christos { "h-vbit", HW_H_VBIT, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } }, 276 1.1 christos { "h-cbit", HW_H_CBIT, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } }, 277 1.1 christos { "h-ibit", HW_H_IBIT, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } }, 278 1.1 christos { "h-sbit", HW_H_SBIT, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } }, 279 1.1 christos { "h-tbit", HW_H_TBIT, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } }, 280 1.1 christos { "h-d0bit", HW_H_D0BIT, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } }, 281 1.1 christos { "h-d1bit", HW_H_D1BIT, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } }, 282 1.1 christos { "h-ccr", HW_H_CCR, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } }, 283 1.1 christos { "h-scr", HW_H_SCR, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } }, 284 1.1 christos { "h-ilm", HW_H_ILM, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } }, 285 1.1 christos { 0, 0, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } } 286 1.1 christos }; 287 1.1 christos 288 1.1 christos #undef A 289 1.1 christos 290 1.1 christos 291 1.1 christos /* The instruction field table. */ 292 1.1 christos 293 1.1 christos #define A(a) (1 << CGEN_IFLD_##a) 294 1.1 christos 295 1.1 christos const CGEN_IFLD fr30_cgen_ifld_table[] = 296 1.1 christos { 297 1.1 christos { FR30_F_NIL, "f-nil", 0, 0, 0, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } }, 298 1.1 christos { FR30_F_ANYOF, "f-anyof", 0, 0, 0, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } }, 299 1.1 christos { FR30_F_OP1, "f-op1", 0, 16, 0, 4, { 0, { { { (1<<MACH_BASE), 0 } } } } }, 300 1.1 christos { FR30_F_OP2, "f-op2", 0, 16, 4, 4, { 0, { { { (1<<MACH_BASE), 0 } } } } }, 301 1.1 christos { FR30_F_OP3, "f-op3", 0, 16, 8, 4, { 0, { { { (1<<MACH_BASE), 0 } } } } }, 302 1.1 christos { FR30_F_OP4, "f-op4", 0, 16, 12, 4, { 0, { { { (1<<MACH_BASE), 0 } } } } }, 303 1.1 christos { FR30_F_OP5, "f-op5", 0, 16, 4, 1, { 0, { { { (1<<MACH_BASE), 0 } } } } }, 304 1.1 christos { FR30_F_CC, "f-cc", 0, 16, 4, 4, { 0, { { { (1<<MACH_BASE), 0 } } } } }, 305 1.1 christos { FR30_F_CCC, "f-ccc", 16, 16, 0, 8, { 0, { { { (1<<MACH_BASE), 0 } } } } }, 306 1.1 christos { FR30_F_RJ, "f-Rj", 0, 16, 8, 4, { 0, { { { (1<<MACH_BASE), 0 } } } } }, 307 1.1 christos { FR30_F_RI, "f-Ri", 0, 16, 12, 4, { 0, { { { (1<<MACH_BASE), 0 } } } } }, 308 1.1 christos { FR30_F_RS1, "f-Rs1", 0, 16, 8, 4, { 0, { { { (1<<MACH_BASE), 0 } } } } }, 309 1.1 christos { FR30_F_RS2, "f-Rs2", 0, 16, 12, 4, { 0, { { { (1<<MACH_BASE), 0 } } } } }, 310 1.1 christos { FR30_F_RJC, "f-Rjc", 16, 16, 8, 4, { 0, { { { (1<<MACH_BASE), 0 } } } } }, 311 1.1 christos { FR30_F_RIC, "f-Ric", 16, 16, 12, 4, { 0, { { { (1<<MACH_BASE), 0 } } } } }, 312 1.1 christos { FR30_F_CRJ, "f-CRj", 16, 16, 8, 4, { 0, { { { (1<<MACH_BASE), 0 } } } } }, 313 1.1 christos { FR30_F_CRI, "f-CRi", 16, 16, 12, 4, { 0, { { { (1<<MACH_BASE), 0 } } } } }, 314 1.1 christos { FR30_F_U4, "f-u4", 0, 16, 8, 4, { 0, { { { (1<<MACH_BASE), 0 } } } } }, 315 1.1 christos { FR30_F_U4C, "f-u4c", 0, 16, 12, 4, { 0, { { { (1<<MACH_BASE), 0 } } } } }, 316 1.1 christos { FR30_F_I4, "f-i4", 0, 16, 8, 4, { 0, { { { (1<<MACH_BASE), 0 } } } } }, 317 1.1 christos { FR30_F_M4, "f-m4", 0, 16, 8, 4, { 0, { { { (1<<MACH_BASE), 0 } } } } }, 318 1.1 christos { FR30_F_U8, "f-u8", 0, 16, 8, 8, { 0, { { { (1<<MACH_BASE), 0 } } } } }, 319 1.1 christos { FR30_F_I8, "f-i8", 0, 16, 4, 8, { 0, { { { (1<<MACH_BASE), 0 } } } } }, 320 1.1 christos { FR30_F_I20_4, "f-i20-4", 0, 16, 8, 4, { 0, { { { (1<<MACH_BASE), 0 } } } } }, 321 1.1 christos { FR30_F_I20_16, "f-i20-16", 16, 16, 0, 16, { 0, { { { (1<<MACH_BASE), 0 } } } } }, 322 1.1 christos { FR30_F_I20, "f-i20", 0, 0, 0, 0,{ 0|A(VIRTUAL), { { { (1<<MACH_BASE), 0 } } } } }, 323 1.1 christos { FR30_F_I32, "f-i32", 16, 32, 0, 32, { 0|A(SIGN_OPT), { { { (1<<MACH_BASE), 0 } } } } }, 324 1.1 christos { FR30_F_UDISP6, "f-udisp6", 0, 16, 8, 4, { 0, { { { (1<<MACH_BASE), 0 } } } } }, 325 1.1 christos { FR30_F_DISP8, "f-disp8", 0, 16, 4, 8, { 0, { { { (1<<MACH_BASE), 0 } } } } }, 326 1.1 christos { FR30_F_DISP9, "f-disp9", 0, 16, 4, 8, { 0, { { { (1<<MACH_BASE), 0 } } } } }, 327 1.1 christos { FR30_F_DISP10, "f-disp10", 0, 16, 4, 8, { 0, { { { (1<<MACH_BASE), 0 } } } } }, 328 1.1 christos { FR30_F_S10, "f-s10", 0, 16, 8, 8, { 0, { { { (1<<MACH_BASE), 0 } } } } }, 329 1.1 christos { FR30_F_U10, "f-u10", 0, 16, 8, 8, { 0, { { { (1<<MACH_BASE), 0 } } } } }, 330 1.1 christos { FR30_F_REL9, "f-rel9", 0, 16, 8, 8, { 0|A(PCREL_ADDR), { { { (1<<MACH_BASE), 0 } } } } }, 331 1.1 christos { FR30_F_DIR8, "f-dir8", 0, 16, 8, 8, { 0, { { { (1<<MACH_BASE), 0 } } } } }, 332 1.1 christos { FR30_F_DIR9, "f-dir9", 0, 16, 8, 8, { 0, { { { (1<<MACH_BASE), 0 } } } } }, 333 1.1 christos { FR30_F_DIR10, "f-dir10", 0, 16, 8, 8, { 0, { { { (1<<MACH_BASE), 0 } } } } }, 334 1.1 christos { FR30_F_REL12, "f-rel12", 0, 16, 5, 11, { 0|A(PCREL_ADDR), { { { (1<<MACH_BASE), 0 } } } } }, 335 1.1 christos { FR30_F_REGLIST_HI_ST, "f-reglist_hi_st", 0, 16, 8, 8, { 0, { { { (1<<MACH_BASE), 0 } } } } }, 336 1.1 christos { FR30_F_REGLIST_LOW_ST, "f-reglist_low_st", 0, 16, 8, 8, { 0, { { { (1<<MACH_BASE), 0 } } } } }, 337 1.1 christos { FR30_F_REGLIST_HI_LD, "f-reglist_hi_ld", 0, 16, 8, 8, { 0, { { { (1<<MACH_BASE), 0 } } } } }, 338 1.1 christos { FR30_F_REGLIST_LOW_LD, "f-reglist_low_ld", 0, 16, 8, 8, { 0, { { { (1<<MACH_BASE), 0 } } } } }, 339 1.1 christos { 0, 0, 0, 0, 0, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } } 340 1.1 christos }; 341 1.1 christos 342 1.1 christos #undef A 343 1.1 christos 344 1.1 christos 345 1.1 christos 346 1.1 christos /* multi ifield declarations */ 347 1.1 christos 348 1.1 christos const CGEN_MAYBE_MULTI_IFLD FR30_F_I20_MULTI_IFIELD []; 349 1.1 christos 350 1.1 christos 351 1.1 christos /* multi ifield definitions */ 352 1.1 christos 353 1.1 christos const CGEN_MAYBE_MULTI_IFLD FR30_F_I20_MULTI_IFIELD [] = 354 1.1 christos { 355 1.10 christos { 0, { &fr30_cgen_ifld_table[FR30_F_I20_4] } }, 356 1.10 christos { 0, { &fr30_cgen_ifld_table[FR30_F_I20_16] } }, 357 1.10 christos { 0, { 0 } } 358 1.1 christos }; 359 1.1 christos 360 1.1 christos /* The operand table. */ 361 1.1 christos 362 1.1 christos #define A(a) (1 << CGEN_OPERAND_##a) 363 1.1 christos #define OPERAND(op) FR30_OPERAND_##op 364 1.1 christos 365 1.1 christos const CGEN_OPERAND fr30_cgen_operand_table[] = 366 1.1 christos { 367 1.1 christos /* pc: program counter */ 368 1.1 christos { "pc", FR30_OPERAND_PC, HW_H_PC, 0, 0, 369 1.10 christos { 0, { &fr30_cgen_ifld_table[FR30_F_NIL] } }, 370 1.1 christos { 0|A(SEM_ONLY), { { { (1<<MACH_BASE), 0 } } } } }, 371 1.1 christos /* Ri: destination register */ 372 1.1 christos { "Ri", FR30_OPERAND_RI, HW_H_GR, 12, 4, 373 1.10 christos { 0, { &fr30_cgen_ifld_table[FR30_F_RI] } }, 374 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } }, 375 1.1 christos /* Rj: source register */ 376 1.1 christos { "Rj", FR30_OPERAND_RJ, HW_H_GR, 8, 4, 377 1.10 christos { 0, { &fr30_cgen_ifld_table[FR30_F_RJ] } }, 378 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } }, 379 1.1 christos /* Ric: target register coproc insn */ 380 1.1 christos { "Ric", FR30_OPERAND_RIC, HW_H_GR, 12, 4, 381 1.10 christos { 0, { &fr30_cgen_ifld_table[FR30_F_RIC] } }, 382 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } }, 383 1.1 christos /* Rjc: source register coproc insn */ 384 1.1 christos { "Rjc", FR30_OPERAND_RJC, HW_H_GR, 8, 4, 385 1.10 christos { 0, { &fr30_cgen_ifld_table[FR30_F_RJC] } }, 386 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } }, 387 1.1 christos /* CRi: coprocessor register */ 388 1.1 christos { "CRi", FR30_OPERAND_CRI, HW_H_CR, 12, 4, 389 1.10 christos { 0, { &fr30_cgen_ifld_table[FR30_F_CRI] } }, 390 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } }, 391 1.1 christos /* CRj: coprocessor register */ 392 1.1 christos { "CRj", FR30_OPERAND_CRJ, HW_H_CR, 8, 4, 393 1.10 christos { 0, { &fr30_cgen_ifld_table[FR30_F_CRJ] } }, 394 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } }, 395 1.1 christos /* Rs1: dedicated register */ 396 1.1 christos { "Rs1", FR30_OPERAND_RS1, HW_H_DR, 8, 4, 397 1.10 christos { 0, { &fr30_cgen_ifld_table[FR30_F_RS1] } }, 398 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } }, 399 1.1 christos /* Rs2: dedicated register */ 400 1.1 christos { "Rs2", FR30_OPERAND_RS2, HW_H_DR, 12, 4, 401 1.10 christos { 0, { &fr30_cgen_ifld_table[FR30_F_RS2] } }, 402 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } }, 403 1.1 christos /* R13: General Register 13 */ 404 1.1 christos { "R13", FR30_OPERAND_R13, HW_H_R13, 0, 0, 405 1.10 christos { 0, { 0 } }, 406 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } }, 407 1.1 christos /* R14: General Register 14 */ 408 1.1 christos { "R14", FR30_OPERAND_R14, HW_H_R14, 0, 0, 409 1.10 christos { 0, { 0 } }, 410 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } }, 411 1.1 christos /* R15: General Register 15 */ 412 1.1 christos { "R15", FR30_OPERAND_R15, HW_H_R15, 0, 0, 413 1.10 christos { 0, { 0 } }, 414 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } }, 415 1.1 christos /* ps: Program Status register */ 416 1.1 christos { "ps", FR30_OPERAND_PS, HW_H_PS, 0, 0, 417 1.10 christos { 0, { 0 } }, 418 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } }, 419 1.1 christos /* u4: 4 bit unsigned immediate */ 420 1.1 christos { "u4", FR30_OPERAND_U4, HW_H_UINT, 8, 4, 421 1.10 christos { 0, { &fr30_cgen_ifld_table[FR30_F_U4] } }, 422 1.1 christos { 0|A(HASH_PREFIX), { { { (1<<MACH_BASE), 0 } } } } }, 423 1.1 christos /* u4c: 4 bit unsigned immediate */ 424 1.1 christos { "u4c", FR30_OPERAND_U4C, HW_H_UINT, 12, 4, 425 1.10 christos { 0, { &fr30_cgen_ifld_table[FR30_F_U4C] } }, 426 1.1 christos { 0|A(HASH_PREFIX), { { { (1<<MACH_BASE), 0 } } } } }, 427 1.1 christos /* u8: 8 bit unsigned immediate */ 428 1.1 christos { "u8", FR30_OPERAND_U8, HW_H_UINT, 8, 8, 429 1.10 christos { 0, { &fr30_cgen_ifld_table[FR30_F_U8] } }, 430 1.1 christos { 0|A(HASH_PREFIX), { { { (1<<MACH_BASE), 0 } } } } }, 431 1.1 christos /* i8: 8 bit unsigned immediate */ 432 1.1 christos { "i8", FR30_OPERAND_I8, HW_H_UINT, 4, 8, 433 1.10 christos { 0, { &fr30_cgen_ifld_table[FR30_F_I8] } }, 434 1.1 christos { 0|A(HASH_PREFIX), { { { (1<<MACH_BASE), 0 } } } } }, 435 1.1 christos /* udisp6: 6 bit unsigned immediate */ 436 1.1 christos { "udisp6", FR30_OPERAND_UDISP6, HW_H_UINT, 8, 4, 437 1.10 christos { 0, { &fr30_cgen_ifld_table[FR30_F_UDISP6] } }, 438 1.1 christos { 0|A(HASH_PREFIX), { { { (1<<MACH_BASE), 0 } } } } }, 439 1.1 christos /* disp8: 8 bit signed immediate */ 440 1.1 christos { "disp8", FR30_OPERAND_DISP8, HW_H_SINT, 4, 8, 441 1.10 christos { 0, { &fr30_cgen_ifld_table[FR30_F_DISP8] } }, 442 1.1 christos { 0|A(HASH_PREFIX), { { { (1<<MACH_BASE), 0 } } } } }, 443 1.1 christos /* disp9: 9 bit signed immediate */ 444 1.1 christos { "disp9", FR30_OPERAND_DISP9, HW_H_SINT, 4, 8, 445 1.10 christos { 0, { &fr30_cgen_ifld_table[FR30_F_DISP9] } }, 446 1.1 christos { 0|A(HASH_PREFIX), { { { (1<<MACH_BASE), 0 } } } } }, 447 1.1 christos /* disp10: 10 bit signed immediate */ 448 1.1 christos { "disp10", FR30_OPERAND_DISP10, HW_H_SINT, 4, 8, 449 1.10 christos { 0, { &fr30_cgen_ifld_table[FR30_F_DISP10] } }, 450 1.1 christos { 0|A(HASH_PREFIX), { { { (1<<MACH_BASE), 0 } } } } }, 451 1.1 christos /* s10: 10 bit signed immediate */ 452 1.1 christos { "s10", FR30_OPERAND_S10, HW_H_SINT, 8, 8, 453 1.10 christos { 0, { &fr30_cgen_ifld_table[FR30_F_S10] } }, 454 1.1 christos { 0|A(HASH_PREFIX), { { { (1<<MACH_BASE), 0 } } } } }, 455 1.1 christos /* u10: 10 bit unsigned immediate */ 456 1.1 christos { "u10", FR30_OPERAND_U10, HW_H_UINT, 8, 8, 457 1.10 christos { 0, { &fr30_cgen_ifld_table[FR30_F_U10] } }, 458 1.1 christos { 0|A(HASH_PREFIX), { { { (1<<MACH_BASE), 0 } } } } }, 459 1.1 christos /* i32: 32 bit immediate */ 460 1.1 christos { "i32", FR30_OPERAND_I32, HW_H_UINT, 0, 32, 461 1.10 christos { 0, { &fr30_cgen_ifld_table[FR30_F_I32] } }, 462 1.1 christos { 0|A(HASH_PREFIX)|A(SIGN_OPT), { { { (1<<MACH_BASE), 0 } } } } }, 463 1.1 christos /* m4: 4 bit negative immediate */ 464 1.1 christos { "m4", FR30_OPERAND_M4, HW_H_SINT, 8, 4, 465 1.10 christos { 0, { &fr30_cgen_ifld_table[FR30_F_M4] } }, 466 1.1 christos { 0|A(HASH_PREFIX), { { { (1<<MACH_BASE), 0 } } } } }, 467 1.1 christos /* i20: 20 bit immediate */ 468 1.1 christos { "i20", FR30_OPERAND_I20, HW_H_UINT, 0, 20, 469 1.10 christos { 2, { &FR30_F_I20_MULTI_IFIELD[0] } }, 470 1.1 christos { 0|A(HASH_PREFIX)|A(VIRTUAL), { { { (1<<MACH_BASE), 0 } } } } }, 471 1.1 christos /* dir8: 8 bit direct address */ 472 1.1 christos { "dir8", FR30_OPERAND_DIR8, HW_H_UINT, 8, 8, 473 1.10 christos { 0, { &fr30_cgen_ifld_table[FR30_F_DIR8] } }, 474 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } }, 475 1.1 christos /* dir9: 9 bit direct address */ 476 1.1 christos { "dir9", FR30_OPERAND_DIR9, HW_H_UINT, 8, 8, 477 1.10 christos { 0, { &fr30_cgen_ifld_table[FR30_F_DIR9] } }, 478 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } }, 479 1.1 christos /* dir10: 10 bit direct address */ 480 1.1 christos { "dir10", FR30_OPERAND_DIR10, HW_H_UINT, 8, 8, 481 1.10 christos { 0, { &fr30_cgen_ifld_table[FR30_F_DIR10] } }, 482 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } }, 483 1.1 christos /* label9: 9 bit pc relative address */ 484 1.1 christos { "label9", FR30_OPERAND_LABEL9, HW_H_IADDR, 8, 8, 485 1.10 christos { 0, { &fr30_cgen_ifld_table[FR30_F_REL9] } }, 486 1.1 christos { 0|A(PCREL_ADDR), { { { (1<<MACH_BASE), 0 } } } } }, 487 1.1 christos /* label12: 12 bit pc relative address */ 488 1.1 christos { "label12", FR30_OPERAND_LABEL12, HW_H_IADDR, 5, 11, 489 1.10 christos { 0, { &fr30_cgen_ifld_table[FR30_F_REL12] } }, 490 1.1 christos { 0|A(PCREL_ADDR), { { { (1<<MACH_BASE), 0 } } } } }, 491 1.1 christos /* reglist_low_ld: 8 bit low register mask for ldm */ 492 1.1 christos { "reglist_low_ld", FR30_OPERAND_REGLIST_LOW_LD, HW_H_UINT, 8, 8, 493 1.10 christos { 0, { &fr30_cgen_ifld_table[FR30_F_REGLIST_LOW_LD] } }, 494 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } }, 495 1.1 christos /* reglist_hi_ld: 8 bit high register mask for ldm */ 496 1.1 christos { "reglist_hi_ld", FR30_OPERAND_REGLIST_HI_LD, HW_H_UINT, 8, 8, 497 1.10 christos { 0, { &fr30_cgen_ifld_table[FR30_F_REGLIST_HI_LD] } }, 498 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } }, 499 1.1 christos /* reglist_low_st: 8 bit low register mask for stm */ 500 1.1 christos { "reglist_low_st", FR30_OPERAND_REGLIST_LOW_ST, HW_H_UINT, 8, 8, 501 1.10 christos { 0, { &fr30_cgen_ifld_table[FR30_F_REGLIST_LOW_ST] } }, 502 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } }, 503 1.1 christos /* reglist_hi_st: 8 bit high register mask for stm */ 504 1.1 christos { "reglist_hi_st", FR30_OPERAND_REGLIST_HI_ST, HW_H_UINT, 8, 8, 505 1.10 christos { 0, { &fr30_cgen_ifld_table[FR30_F_REGLIST_HI_ST] } }, 506 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } }, 507 1.1 christos /* cc: condition codes */ 508 1.1 christos { "cc", FR30_OPERAND_CC, HW_H_UINT, 4, 4, 509 1.10 christos { 0, { &fr30_cgen_ifld_table[FR30_F_CC] } }, 510 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } }, 511 1.1 christos /* ccc: coprocessor calc */ 512 1.1 christos { "ccc", FR30_OPERAND_CCC, HW_H_UINT, 0, 8, 513 1.10 christos { 0, { &fr30_cgen_ifld_table[FR30_F_CCC] } }, 514 1.1 christos { 0|A(HASH_PREFIX), { { { (1<<MACH_BASE), 0 } } } } }, 515 1.1 christos /* nbit: negative bit */ 516 1.1 christos { "nbit", FR30_OPERAND_NBIT, HW_H_NBIT, 0, 0, 517 1.10 christos { 0, { 0 } }, 518 1.1 christos { 0|A(SEM_ONLY), { { { (1<<MACH_BASE), 0 } } } } }, 519 1.1 christos /* vbit: overflow bit */ 520 1.1 christos { "vbit", FR30_OPERAND_VBIT, HW_H_VBIT, 0, 0, 521 1.10 christos { 0, { 0 } }, 522 1.1 christos { 0|A(SEM_ONLY), { { { (1<<MACH_BASE), 0 } } } } }, 523 1.1 christos /* zbit: zero bit */ 524 1.1 christos { "zbit", FR30_OPERAND_ZBIT, HW_H_ZBIT, 0, 0, 525 1.10 christos { 0, { 0 } }, 526 1.1 christos { 0|A(SEM_ONLY), { { { (1<<MACH_BASE), 0 } } } } }, 527 1.1 christos /* cbit: carry bit */ 528 1.1 christos { "cbit", FR30_OPERAND_CBIT, HW_H_CBIT, 0, 0, 529 1.10 christos { 0, { 0 } }, 530 1.1 christos { 0|A(SEM_ONLY), { { { (1<<MACH_BASE), 0 } } } } }, 531 1.1 christos /* ibit: interrupt bit */ 532 1.1 christos { "ibit", FR30_OPERAND_IBIT, HW_H_IBIT, 0, 0, 533 1.10 christos { 0, { 0 } }, 534 1.1 christos { 0|A(SEM_ONLY), { { { (1<<MACH_BASE), 0 } } } } }, 535 1.1 christos /* sbit: stack bit */ 536 1.1 christos { "sbit", FR30_OPERAND_SBIT, HW_H_SBIT, 0, 0, 537 1.10 christos { 0, { 0 } }, 538 1.1 christos { 0|A(SEM_ONLY), { { { (1<<MACH_BASE), 0 } } } } }, 539 1.1 christos /* tbit: trace trap bit */ 540 1.1 christos { "tbit", FR30_OPERAND_TBIT, HW_H_TBIT, 0, 0, 541 1.10 christos { 0, { 0 } }, 542 1.1 christos { 0|A(SEM_ONLY), { { { (1<<MACH_BASE), 0 } } } } }, 543 1.1 christos /* d0bit: division 0 bit */ 544 1.1 christos { "d0bit", FR30_OPERAND_D0BIT, HW_H_D0BIT, 0, 0, 545 1.10 christos { 0, { 0 } }, 546 1.1 christos { 0|A(SEM_ONLY), { { { (1<<MACH_BASE), 0 } } } } }, 547 1.1 christos /* d1bit: division 1 bit */ 548 1.1 christos { "d1bit", FR30_OPERAND_D1BIT, HW_H_D1BIT, 0, 0, 549 1.10 christos { 0, { 0 } }, 550 1.1 christos { 0|A(SEM_ONLY), { { { (1<<MACH_BASE), 0 } } } } }, 551 1.1 christos /* ccr: condition code bits */ 552 1.1 christos { "ccr", FR30_OPERAND_CCR, HW_H_CCR, 0, 0, 553 1.10 christos { 0, { 0 } }, 554 1.1 christos { 0|A(SEM_ONLY), { { { (1<<MACH_BASE), 0 } } } } }, 555 1.1 christos /* scr: system condition bits */ 556 1.1 christos { "scr", FR30_OPERAND_SCR, HW_H_SCR, 0, 0, 557 1.10 christos { 0, { 0 } }, 558 1.1 christos { 0|A(SEM_ONLY), { { { (1<<MACH_BASE), 0 } } } } }, 559 1.1 christos /* ilm: interrupt level mask */ 560 1.1 christos { "ilm", FR30_OPERAND_ILM, HW_H_ILM, 0, 0, 561 1.10 christos { 0, { 0 } }, 562 1.1 christos { 0|A(SEM_ONLY), { { { (1<<MACH_BASE), 0 } } } } }, 563 1.1 christos /* sentinel */ 564 1.1 christos { 0, 0, 0, 0, 0, 565 1.10 christos { 0, { 0 } }, 566 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } } 567 1.1 christos }; 568 1.1 christos 569 1.1 christos #undef A 570 1.1 christos 571 1.1 christos 572 1.1 christos /* The instruction table. */ 573 1.1 christos 574 1.1 christos #define OP(field) CGEN_SYNTAX_MAKE_FIELD (OPERAND (field)) 575 1.1 christos #define A(a) (1 << CGEN_INSN_##a) 576 1.1 christos 577 1.1 christos static const CGEN_IBASE fr30_cgen_insn_table[MAX_INSNS] = 578 1.1 christos { 579 1.1 christos /* Special null first entry. 580 1.1 christos A `num' value of zero is thus invalid. 581 1.1 christos Also, the special `invalid' insn resides here. */ 582 1.1 christos { 0, 0, 0, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } }, 583 1.1 christos /* add $Rj,$Ri */ 584 1.1 christos { 585 1.1 christos FR30_INSN_ADD, "add", "add", 16, 586 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } 587 1.1 christos }, 588 1.1 christos /* add $u4,$Ri */ 589 1.1 christos { 590 1.1 christos FR30_INSN_ADDI, "addi", "add", 16, 591 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } 592 1.1 christos }, 593 1.1 christos /* add2 $m4,$Ri */ 594 1.1 christos { 595 1.1 christos FR30_INSN_ADD2, "add2", "add2", 16, 596 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } 597 1.1 christos }, 598 1.1 christos /* addc $Rj,$Ri */ 599 1.1 christos { 600 1.1 christos FR30_INSN_ADDC, "addc", "addc", 16, 601 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } 602 1.1 christos }, 603 1.1 christos /* addn $Rj,$Ri */ 604 1.1 christos { 605 1.1 christos FR30_INSN_ADDN, "addn", "addn", 16, 606 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } 607 1.1 christos }, 608 1.1 christos /* addn $u4,$Ri */ 609 1.1 christos { 610 1.1 christos FR30_INSN_ADDNI, "addni", "addn", 16, 611 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } 612 1.1 christos }, 613 1.1 christos /* addn2 $m4,$Ri */ 614 1.1 christos { 615 1.1 christos FR30_INSN_ADDN2, "addn2", "addn2", 16, 616 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } 617 1.1 christos }, 618 1.1 christos /* sub $Rj,$Ri */ 619 1.1 christos { 620 1.1 christos FR30_INSN_SUB, "sub", "sub", 16, 621 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } 622 1.1 christos }, 623 1.1 christos /* subc $Rj,$Ri */ 624 1.1 christos { 625 1.1 christos FR30_INSN_SUBC, "subc", "subc", 16, 626 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } 627 1.1 christos }, 628 1.1 christos /* subn $Rj,$Ri */ 629 1.1 christos { 630 1.1 christos FR30_INSN_SUBN, "subn", "subn", 16, 631 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } 632 1.1 christos }, 633 1.1 christos /* cmp $Rj,$Ri */ 634 1.1 christos { 635 1.1 christos FR30_INSN_CMP, "cmp", "cmp", 16, 636 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } 637 1.1 christos }, 638 1.1 christos /* cmp $u4,$Ri */ 639 1.1 christos { 640 1.1 christos FR30_INSN_CMPI, "cmpi", "cmp", 16, 641 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } 642 1.1 christos }, 643 1.1 christos /* cmp2 $m4,$Ri */ 644 1.1 christos { 645 1.1 christos FR30_INSN_CMP2, "cmp2", "cmp2", 16, 646 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } 647 1.1 christos }, 648 1.1 christos /* and $Rj,$Ri */ 649 1.1 christos { 650 1.1 christos FR30_INSN_AND, "and", "and", 16, 651 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } 652 1.1 christos }, 653 1.1 christos /* or $Rj,$Ri */ 654 1.1 christos { 655 1.1 christos FR30_INSN_OR, "or", "or", 16, 656 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } 657 1.1 christos }, 658 1.1 christos /* eor $Rj,$Ri */ 659 1.1 christos { 660 1.1 christos FR30_INSN_EOR, "eor", "eor", 16, 661 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } 662 1.1 christos }, 663 1.1 christos /* and $Rj,@$Ri */ 664 1.1 christos { 665 1.1 christos FR30_INSN_ANDM, "andm", "and", 16, 666 1.1 christos { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } } 667 1.1 christos }, 668 1.1 christos /* andh $Rj,@$Ri */ 669 1.1 christos { 670 1.1 christos FR30_INSN_ANDH, "andh", "andh", 16, 671 1.1 christos { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } } 672 1.1 christos }, 673 1.1 christos /* andb $Rj,@$Ri */ 674 1.1 christos { 675 1.1 christos FR30_INSN_ANDB, "andb", "andb", 16, 676 1.1 christos { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } } 677 1.1 christos }, 678 1.1 christos /* or $Rj,@$Ri */ 679 1.1 christos { 680 1.1 christos FR30_INSN_ORM, "orm", "or", 16, 681 1.1 christos { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } } 682 1.1 christos }, 683 1.1 christos /* orh $Rj,@$Ri */ 684 1.1 christos { 685 1.1 christos FR30_INSN_ORH, "orh", "orh", 16, 686 1.1 christos { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } } 687 1.1 christos }, 688 1.1 christos /* orb $Rj,@$Ri */ 689 1.1 christos { 690 1.1 christos FR30_INSN_ORB, "orb", "orb", 16, 691 1.1 christos { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } } 692 1.1 christos }, 693 1.1 christos /* eor $Rj,@$Ri */ 694 1.1 christos { 695 1.1 christos FR30_INSN_EORM, "eorm", "eor", 16, 696 1.1 christos { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } } 697 1.1 christos }, 698 1.1 christos /* eorh $Rj,@$Ri */ 699 1.1 christos { 700 1.1 christos FR30_INSN_EORH, "eorh", "eorh", 16, 701 1.1 christos { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } } 702 1.1 christos }, 703 1.1 christos /* eorb $Rj,@$Ri */ 704 1.1 christos { 705 1.1 christos FR30_INSN_EORB, "eorb", "eorb", 16, 706 1.1 christos { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } } 707 1.1 christos }, 708 1.1 christos /* bandl $u4,@$Ri */ 709 1.1 christos { 710 1.1 christos FR30_INSN_BANDL, "bandl", "bandl", 16, 711 1.1 christos { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } } 712 1.1 christos }, 713 1.1 christos /* borl $u4,@$Ri */ 714 1.1 christos { 715 1.1 christos FR30_INSN_BORL, "borl", "borl", 16, 716 1.1 christos { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } } 717 1.1 christos }, 718 1.1 christos /* beorl $u4,@$Ri */ 719 1.1 christos { 720 1.1 christos FR30_INSN_BEORL, "beorl", "beorl", 16, 721 1.1 christos { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } } 722 1.1 christos }, 723 1.1 christos /* bandh $u4,@$Ri */ 724 1.1 christos { 725 1.1 christos FR30_INSN_BANDH, "bandh", "bandh", 16, 726 1.1 christos { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } } 727 1.1 christos }, 728 1.1 christos /* borh $u4,@$Ri */ 729 1.1 christos { 730 1.1 christos FR30_INSN_BORH, "borh", "borh", 16, 731 1.1 christos { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } } 732 1.1 christos }, 733 1.1 christos /* beorh $u4,@$Ri */ 734 1.1 christos { 735 1.1 christos FR30_INSN_BEORH, "beorh", "beorh", 16, 736 1.1 christos { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } } 737 1.1 christos }, 738 1.1 christos /* btstl $u4,@$Ri */ 739 1.1 christos { 740 1.1 christos FR30_INSN_BTSTL, "btstl", "btstl", 16, 741 1.1 christos { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } } 742 1.1 christos }, 743 1.1 christos /* btsth $u4,@$Ri */ 744 1.1 christos { 745 1.1 christos FR30_INSN_BTSTH, "btsth", "btsth", 16, 746 1.1 christos { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } } 747 1.1 christos }, 748 1.1 christos /* mul $Rj,$Ri */ 749 1.1 christos { 750 1.1 christos FR30_INSN_MUL, "mul", "mul", 16, 751 1.1 christos { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } } 752 1.1 christos }, 753 1.1 christos /* mulu $Rj,$Ri */ 754 1.1 christos { 755 1.1 christos FR30_INSN_MULU, "mulu", "mulu", 16, 756 1.1 christos { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } } 757 1.1 christos }, 758 1.1 christos /* mulh $Rj,$Ri */ 759 1.1 christos { 760 1.1 christos FR30_INSN_MULH, "mulh", "mulh", 16, 761 1.1 christos { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } } 762 1.1 christos }, 763 1.1 christos /* muluh $Rj,$Ri */ 764 1.1 christos { 765 1.1 christos FR30_INSN_MULUH, "muluh", "muluh", 16, 766 1.1 christos { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } } 767 1.1 christos }, 768 1.1 christos /* div0s $Ri */ 769 1.1 christos { 770 1.1 christos FR30_INSN_DIV0S, "div0s", "div0s", 16, 771 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } 772 1.1 christos }, 773 1.1 christos /* div0u $Ri */ 774 1.1 christos { 775 1.1 christos FR30_INSN_DIV0U, "div0u", "div0u", 16, 776 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } 777 1.1 christos }, 778 1.1 christos /* div1 $Ri */ 779 1.1 christos { 780 1.1 christos FR30_INSN_DIV1, "div1", "div1", 16, 781 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } 782 1.1 christos }, 783 1.1 christos /* div2 $Ri */ 784 1.1 christos { 785 1.1 christos FR30_INSN_DIV2, "div2", "div2", 16, 786 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } 787 1.1 christos }, 788 1.1 christos /* div3 */ 789 1.1 christos { 790 1.1 christos FR30_INSN_DIV3, "div3", "div3", 16, 791 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } 792 1.1 christos }, 793 1.1 christos /* div4s */ 794 1.1 christos { 795 1.1 christos FR30_INSN_DIV4S, "div4s", "div4s", 16, 796 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } 797 1.1 christos }, 798 1.1 christos /* lsl $Rj,$Ri */ 799 1.1 christos { 800 1.1 christos FR30_INSN_LSL, "lsl", "lsl", 16, 801 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } 802 1.1 christos }, 803 1.1 christos /* lsl $u4,$Ri */ 804 1.1 christos { 805 1.1 christos FR30_INSN_LSLI, "lsli", "lsl", 16, 806 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } 807 1.1 christos }, 808 1.1 christos /* lsl2 $u4,$Ri */ 809 1.1 christos { 810 1.1 christos FR30_INSN_LSL2, "lsl2", "lsl2", 16, 811 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } 812 1.1 christos }, 813 1.1 christos /* lsr $Rj,$Ri */ 814 1.1 christos { 815 1.1 christos FR30_INSN_LSR, "lsr", "lsr", 16, 816 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } 817 1.1 christos }, 818 1.1 christos /* lsr $u4,$Ri */ 819 1.1 christos { 820 1.1 christos FR30_INSN_LSRI, "lsri", "lsr", 16, 821 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } 822 1.1 christos }, 823 1.1 christos /* lsr2 $u4,$Ri */ 824 1.1 christos { 825 1.1 christos FR30_INSN_LSR2, "lsr2", "lsr2", 16, 826 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } 827 1.1 christos }, 828 1.1 christos /* asr $Rj,$Ri */ 829 1.1 christos { 830 1.1 christos FR30_INSN_ASR, "asr", "asr", 16, 831 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } 832 1.1 christos }, 833 1.1 christos /* asr $u4,$Ri */ 834 1.1 christos { 835 1.1 christos FR30_INSN_ASRI, "asri", "asr", 16, 836 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } 837 1.1 christos }, 838 1.1 christos /* asr2 $u4,$Ri */ 839 1.1 christos { 840 1.1 christos FR30_INSN_ASR2, "asr2", "asr2", 16, 841 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } 842 1.1 christos }, 843 1.1 christos /* ldi:8 $i8,$Ri */ 844 1.1 christos { 845 1.1 christos FR30_INSN_LDI8, "ldi8", "ldi:8", 16, 846 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } 847 1.1 christos }, 848 1.1 christos /* ldi:20 $i20,$Ri */ 849 1.1 christos { 850 1.1 christos FR30_INSN_LDI20, "ldi20", "ldi:20", 32, 851 1.1 christos { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } } 852 1.1 christos }, 853 1.1 christos /* ldi:32 $i32,$Ri */ 854 1.1 christos { 855 1.1 christos FR30_INSN_LDI32, "ldi32", "ldi:32", 48, 856 1.1 christos { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } } 857 1.1 christos }, 858 1.1 christos /* ld @$Rj,$Ri */ 859 1.1 christos { 860 1.1 christos FR30_INSN_LD, "ld", "ld", 16, 861 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } 862 1.1 christos }, 863 1.1 christos /* lduh @$Rj,$Ri */ 864 1.1 christos { 865 1.1 christos FR30_INSN_LDUH, "lduh", "lduh", 16, 866 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } 867 1.1 christos }, 868 1.1 christos /* ldub @$Rj,$Ri */ 869 1.1 christos { 870 1.1 christos FR30_INSN_LDUB, "ldub", "ldub", 16, 871 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } 872 1.1 christos }, 873 1.1 christos /* ld @($R13,$Rj),$Ri */ 874 1.1 christos { 875 1.1 christos FR30_INSN_LDR13, "ldr13", "ld", 16, 876 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } 877 1.1 christos }, 878 1.1 christos /* lduh @($R13,$Rj),$Ri */ 879 1.1 christos { 880 1.1 christos FR30_INSN_LDR13UH, "ldr13uh", "lduh", 16, 881 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } 882 1.1 christos }, 883 1.1 christos /* ldub @($R13,$Rj),$Ri */ 884 1.1 christos { 885 1.1 christos FR30_INSN_LDR13UB, "ldr13ub", "ldub", 16, 886 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } 887 1.1 christos }, 888 1.1 christos /* ld @($R14,$disp10),$Ri */ 889 1.1 christos { 890 1.1 christos FR30_INSN_LDR14, "ldr14", "ld", 16, 891 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } 892 1.1 christos }, 893 1.1 christos /* lduh @($R14,$disp9),$Ri */ 894 1.1 christos { 895 1.1 christos FR30_INSN_LDR14UH, "ldr14uh", "lduh", 16, 896 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } 897 1.1 christos }, 898 1.1 christos /* ldub @($R14,$disp8),$Ri */ 899 1.1 christos { 900 1.1 christos FR30_INSN_LDR14UB, "ldr14ub", "ldub", 16, 901 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } 902 1.1 christos }, 903 1.1 christos /* ld @($R15,$udisp6),$Ri */ 904 1.1 christos { 905 1.1 christos FR30_INSN_LDR15, "ldr15", "ld", 16, 906 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } 907 1.1 christos }, 908 1.1 christos /* ld @$R15+,$Ri */ 909 1.1 christos { 910 1.1 christos FR30_INSN_LDR15GR, "ldr15gr", "ld", 16, 911 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } 912 1.1 christos }, 913 1.1 christos /* ld @$R15+,$Rs2 */ 914 1.1 christos { 915 1.1 christos FR30_INSN_LDR15DR, "ldr15dr", "ld", 16, 916 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } 917 1.1 christos }, 918 1.1 christos /* ld @$R15+,$ps */ 919 1.1 christos { 920 1.1 christos FR30_INSN_LDR15PS, "ldr15ps", "ld", 16, 921 1.1 christos { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } } 922 1.1 christos }, 923 1.1 christos /* st $Ri,@$Rj */ 924 1.1 christos { 925 1.1 christos FR30_INSN_ST, "st", "st", 16, 926 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } 927 1.1 christos }, 928 1.1 christos /* sth $Ri,@$Rj */ 929 1.1 christos { 930 1.1 christos FR30_INSN_STH, "sth", "sth", 16, 931 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } 932 1.1 christos }, 933 1.1 christos /* stb $Ri,@$Rj */ 934 1.1 christos { 935 1.1 christos FR30_INSN_STB, "stb", "stb", 16, 936 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } 937 1.1 christos }, 938 1.1 christos /* st $Ri,@($R13,$Rj) */ 939 1.1 christos { 940 1.1 christos FR30_INSN_STR13, "str13", "st", 16, 941 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } 942 1.1 christos }, 943 1.1 christos /* sth $Ri,@($R13,$Rj) */ 944 1.1 christos { 945 1.1 christos FR30_INSN_STR13H, "str13h", "sth", 16, 946 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } 947 1.1 christos }, 948 1.1 christos /* stb $Ri,@($R13,$Rj) */ 949 1.1 christos { 950 1.1 christos FR30_INSN_STR13B, "str13b", "stb", 16, 951 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } 952 1.1 christos }, 953 1.1 christos /* st $Ri,@($R14,$disp10) */ 954 1.1 christos { 955 1.1 christos FR30_INSN_STR14, "str14", "st", 16, 956 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } 957 1.1 christos }, 958 1.1 christos /* sth $Ri,@($R14,$disp9) */ 959 1.1 christos { 960 1.1 christos FR30_INSN_STR14H, "str14h", "sth", 16, 961 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } 962 1.1 christos }, 963 1.1 christos /* stb $Ri,@($R14,$disp8) */ 964 1.1 christos { 965 1.1 christos FR30_INSN_STR14B, "str14b", "stb", 16, 966 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } 967 1.1 christos }, 968 1.1 christos /* st $Ri,@($R15,$udisp6) */ 969 1.1 christos { 970 1.1 christos FR30_INSN_STR15, "str15", "st", 16, 971 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } 972 1.1 christos }, 973 1.1 christos /* st $Ri,@-$R15 */ 974 1.1 christos { 975 1.1 christos FR30_INSN_STR15GR, "str15gr", "st", 16, 976 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } 977 1.1 christos }, 978 1.1 christos /* st $Rs2,@-$R15 */ 979 1.1 christos { 980 1.1 christos FR30_INSN_STR15DR, "str15dr", "st", 16, 981 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } 982 1.1 christos }, 983 1.1 christos /* st $ps,@-$R15 */ 984 1.1 christos { 985 1.1 christos FR30_INSN_STR15PS, "str15ps", "st", 16, 986 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } 987 1.1 christos }, 988 1.1 christos /* mov $Rj,$Ri */ 989 1.1 christos { 990 1.1 christos FR30_INSN_MOV, "mov", "mov", 16, 991 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } 992 1.1 christos }, 993 1.1 christos /* mov $Rs1,$Ri */ 994 1.1 christos { 995 1.1 christos FR30_INSN_MOVDR, "movdr", "mov", 16, 996 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } 997 1.1 christos }, 998 1.1 christos /* mov $ps,$Ri */ 999 1.1 christos { 1000 1.1 christos FR30_INSN_MOVPS, "movps", "mov", 16, 1001 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } 1002 1.1 christos }, 1003 1.1 christos /* mov $Ri,$Rs1 */ 1004 1.1 christos { 1005 1.1 christos FR30_INSN_MOV2DR, "mov2dr", "mov", 16, 1006 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } 1007 1.1 christos }, 1008 1.1 christos /* mov $Ri,$ps */ 1009 1.1 christos { 1010 1.1 christos FR30_INSN_MOV2PS, "mov2ps", "mov", 16, 1011 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } 1012 1.1 christos }, 1013 1.1 christos /* jmp @$Ri */ 1014 1.1 christos { 1015 1.1 christos FR30_INSN_JMP, "jmp", "jmp", 16, 1016 1.1 christos { 0|A(NOT_IN_DELAY_SLOT)|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } } } } 1017 1.1 christos }, 1018 1.1 christos /* jmp:d @$Ri */ 1019 1.1 christos { 1020 1.1 christos FR30_INSN_JMPD, "jmpd", "jmp:d", 16, 1021 1.1 christos { 0|A(NOT_IN_DELAY_SLOT)|A(UNCOND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } } 1022 1.1 christos }, 1023 1.1 christos /* call @$Ri */ 1024 1.1 christos { 1025 1.1 christos FR30_INSN_CALLR, "callr", "call", 16, 1026 1.1 christos { 0|A(NOT_IN_DELAY_SLOT)|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } } } } 1027 1.1 christos }, 1028 1.1 christos /* call:d @$Ri */ 1029 1.1 christos { 1030 1.1 christos FR30_INSN_CALLRD, "callrd", "call:d", 16, 1031 1.1 christos { 0|A(NOT_IN_DELAY_SLOT)|A(UNCOND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } } 1032 1.1 christos }, 1033 1.1 christos /* call $label12 */ 1034 1.1 christos { 1035 1.1 christos FR30_INSN_CALL, "call", "call", 16, 1036 1.1 christos { 0|A(NOT_IN_DELAY_SLOT)|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } } } } 1037 1.1 christos }, 1038 1.1 christos /* call:d $label12 */ 1039 1.1 christos { 1040 1.1 christos FR30_INSN_CALLD, "calld", "call:d", 16, 1041 1.1 christos { 0|A(NOT_IN_DELAY_SLOT)|A(UNCOND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } } 1042 1.1 christos }, 1043 1.1 christos /* ret */ 1044 1.1 christos { 1045 1.1 christos FR30_INSN_RET, "ret", "ret", 16, 1046 1.1 christos { 0|A(NOT_IN_DELAY_SLOT)|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } } } } 1047 1.1 christos }, 1048 1.1 christos /* ret:d */ 1049 1.1 christos { 1050 1.1 christos FR30_INSN_RET_D, "ret:d", "ret:d", 16, 1051 1.1 christos { 0|A(NOT_IN_DELAY_SLOT)|A(UNCOND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } } 1052 1.1 christos }, 1053 1.1 christos /* int $u8 */ 1054 1.1 christos { 1055 1.1 christos FR30_INSN_INT, "int", "int", 16, 1056 1.1 christos { 0|A(NOT_IN_DELAY_SLOT)|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } } } } 1057 1.1 christos }, 1058 1.1 christos /* inte */ 1059 1.1 christos { 1060 1.1 christos FR30_INSN_INTE, "inte", "inte", 16, 1061 1.1 christos { 0|A(NOT_IN_DELAY_SLOT)|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } } } } 1062 1.1 christos }, 1063 1.1 christos /* reti */ 1064 1.1 christos { 1065 1.1 christos FR30_INSN_RETI, "reti", "reti", 16, 1066 1.1 christos { 0|A(NOT_IN_DELAY_SLOT)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } } 1067 1.1 christos }, 1068 1.1 christos /* bra:d $label9 */ 1069 1.1 christos { 1070 1.1 christos FR30_INSN_BRAD, "brad", "bra:d", 16, 1071 1.1 christos { 0|A(NOT_IN_DELAY_SLOT)|A(UNCOND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } } 1072 1.1 christos }, 1073 1.1 christos /* bra $label9 */ 1074 1.1 christos { 1075 1.1 christos FR30_INSN_BRA, "bra", "bra", 16, 1076 1.1 christos { 0|A(NOT_IN_DELAY_SLOT)|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } } } } 1077 1.1 christos }, 1078 1.1 christos /* bno:d $label9 */ 1079 1.1 christos { 1080 1.1 christos FR30_INSN_BNOD, "bnod", "bno:d", 16, 1081 1.1 christos { 0|A(NOT_IN_DELAY_SLOT)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } } 1082 1.1 christos }, 1083 1.1 christos /* bno $label9 */ 1084 1.1 christos { 1085 1.1 christos FR30_INSN_BNO, "bno", "bno", 16, 1086 1.1 christos { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } } 1087 1.1 christos }, 1088 1.1 christos /* beq:d $label9 */ 1089 1.1 christos { 1090 1.1 christos FR30_INSN_BEQD, "beqd", "beq:d", 16, 1091 1.1 christos { 0|A(NOT_IN_DELAY_SLOT)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } } 1092 1.1 christos }, 1093 1.1 christos /* beq $label9 */ 1094 1.1 christos { 1095 1.1 christos FR30_INSN_BEQ, "beq", "beq", 16, 1096 1.1 christos { 0|A(NOT_IN_DELAY_SLOT)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } } 1097 1.1 christos }, 1098 1.1 christos /* bne:d $label9 */ 1099 1.1 christos { 1100 1.1 christos FR30_INSN_BNED, "bned", "bne:d", 16, 1101 1.1 christos { 0|A(NOT_IN_DELAY_SLOT)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } } 1102 1.1 christos }, 1103 1.1 christos /* bne $label9 */ 1104 1.1 christos { 1105 1.1 christos FR30_INSN_BNE, "bne", "bne", 16, 1106 1.1 christos { 0|A(NOT_IN_DELAY_SLOT)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } } 1107 1.1 christos }, 1108 1.1 christos /* bc:d $label9 */ 1109 1.1 christos { 1110 1.1 christos FR30_INSN_BCD, "bcd", "bc:d", 16, 1111 1.1 christos { 0|A(NOT_IN_DELAY_SLOT)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } } 1112 1.1 christos }, 1113 1.1 christos /* bc $label9 */ 1114 1.1 christos { 1115 1.1 christos FR30_INSN_BC, "bc", "bc", 16, 1116 1.1 christos { 0|A(NOT_IN_DELAY_SLOT)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } } 1117 1.1 christos }, 1118 1.1 christos /* bnc:d $label9 */ 1119 1.1 christos { 1120 1.1 christos FR30_INSN_BNCD, "bncd", "bnc:d", 16, 1121 1.1 christos { 0|A(NOT_IN_DELAY_SLOT)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } } 1122 1.1 christos }, 1123 1.1 christos /* bnc $label9 */ 1124 1.1 christos { 1125 1.1 christos FR30_INSN_BNC, "bnc", "bnc", 16, 1126 1.1 christos { 0|A(NOT_IN_DELAY_SLOT)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } } 1127 1.1 christos }, 1128 1.1 christos /* bn:d $label9 */ 1129 1.1 christos { 1130 1.1 christos FR30_INSN_BND, "bnd", "bn:d", 16, 1131 1.1 christos { 0|A(NOT_IN_DELAY_SLOT)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } } 1132 1.1 christos }, 1133 1.1 christos /* bn $label9 */ 1134 1.1 christos { 1135 1.1 christos FR30_INSN_BN, "bn", "bn", 16, 1136 1.1 christos { 0|A(NOT_IN_DELAY_SLOT)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } } 1137 1.1 christos }, 1138 1.1 christos /* bp:d $label9 */ 1139 1.1 christos { 1140 1.1 christos FR30_INSN_BPD, "bpd", "bp:d", 16, 1141 1.1 christos { 0|A(NOT_IN_DELAY_SLOT)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } } 1142 1.1 christos }, 1143 1.1 christos /* bp $label9 */ 1144 1.1 christos { 1145 1.1 christos FR30_INSN_BP, "bp", "bp", 16, 1146 1.1 christos { 0|A(NOT_IN_DELAY_SLOT)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } } 1147 1.1 christos }, 1148 1.1 christos /* bv:d $label9 */ 1149 1.1 christos { 1150 1.1 christos FR30_INSN_BVD, "bvd", "bv:d", 16, 1151 1.1 christos { 0|A(NOT_IN_DELAY_SLOT)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } } 1152 1.1 christos }, 1153 1.1 christos /* bv $label9 */ 1154 1.1 christos { 1155 1.1 christos FR30_INSN_BV, "bv", "bv", 16, 1156 1.1 christos { 0|A(NOT_IN_DELAY_SLOT)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } } 1157 1.1 christos }, 1158 1.1 christos /* bnv:d $label9 */ 1159 1.1 christos { 1160 1.1 christos FR30_INSN_BNVD, "bnvd", "bnv:d", 16, 1161 1.1 christos { 0|A(NOT_IN_DELAY_SLOT)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } } 1162 1.1 christos }, 1163 1.1 christos /* bnv $label9 */ 1164 1.1 christos { 1165 1.1 christos FR30_INSN_BNV, "bnv", "bnv", 16, 1166 1.1 christos { 0|A(NOT_IN_DELAY_SLOT)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } } 1167 1.1 christos }, 1168 1.1 christos /* blt:d $label9 */ 1169 1.1 christos { 1170 1.1 christos FR30_INSN_BLTD, "bltd", "blt:d", 16, 1171 1.1 christos { 0|A(NOT_IN_DELAY_SLOT)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } } 1172 1.1 christos }, 1173 1.1 christos /* blt $label9 */ 1174 1.1 christos { 1175 1.1 christos FR30_INSN_BLT, "blt", "blt", 16, 1176 1.1 christos { 0|A(NOT_IN_DELAY_SLOT)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } } 1177 1.1 christos }, 1178 1.1 christos /* bge:d $label9 */ 1179 1.1 christos { 1180 1.1 christos FR30_INSN_BGED, "bged", "bge:d", 16, 1181 1.1 christos { 0|A(NOT_IN_DELAY_SLOT)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } } 1182 1.1 christos }, 1183 1.1 christos /* bge $label9 */ 1184 1.1 christos { 1185 1.1 christos FR30_INSN_BGE, "bge", "bge", 16, 1186 1.1 christos { 0|A(NOT_IN_DELAY_SLOT)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } } 1187 1.1 christos }, 1188 1.1 christos /* ble:d $label9 */ 1189 1.1 christos { 1190 1.1 christos FR30_INSN_BLED, "bled", "ble:d", 16, 1191 1.1 christos { 0|A(NOT_IN_DELAY_SLOT)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } } 1192 1.1 christos }, 1193 1.1 christos /* ble $label9 */ 1194 1.1 christos { 1195 1.1 christos FR30_INSN_BLE, "ble", "ble", 16, 1196 1.1 christos { 0|A(NOT_IN_DELAY_SLOT)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } } 1197 1.1 christos }, 1198 1.1 christos /* bgt:d $label9 */ 1199 1.1 christos { 1200 1.1 christos FR30_INSN_BGTD, "bgtd", "bgt:d", 16, 1201 1.1 christos { 0|A(NOT_IN_DELAY_SLOT)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } } 1202 1.1 christos }, 1203 1.1 christos /* bgt $label9 */ 1204 1.1 christos { 1205 1.1 christos FR30_INSN_BGT, "bgt", "bgt", 16, 1206 1.1 christos { 0|A(NOT_IN_DELAY_SLOT)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } } 1207 1.1 christos }, 1208 1.1 christos /* bls:d $label9 */ 1209 1.1 christos { 1210 1.1 christos FR30_INSN_BLSD, "blsd", "bls:d", 16, 1211 1.1 christos { 0|A(NOT_IN_DELAY_SLOT)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } } 1212 1.1 christos }, 1213 1.1 christos /* bls $label9 */ 1214 1.1 christos { 1215 1.1 christos FR30_INSN_BLS, "bls", "bls", 16, 1216 1.1 christos { 0|A(NOT_IN_DELAY_SLOT)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } } 1217 1.1 christos }, 1218 1.1 christos /* bhi:d $label9 */ 1219 1.1 christos { 1220 1.1 christos FR30_INSN_BHID, "bhid", "bhi:d", 16, 1221 1.1 christos { 0|A(NOT_IN_DELAY_SLOT)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } } 1222 1.1 christos }, 1223 1.1 christos /* bhi $label9 */ 1224 1.1 christos { 1225 1.1 christos FR30_INSN_BHI, "bhi", "bhi", 16, 1226 1.1 christos { 0|A(NOT_IN_DELAY_SLOT)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } } 1227 1.1 christos }, 1228 1.1 christos /* dmov $R13,@$dir10 */ 1229 1.1 christos { 1230 1.1 christos FR30_INSN_DMOVR13, "dmovr13", "dmov", 16, 1231 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } 1232 1.1 christos }, 1233 1.1 christos /* dmovh $R13,@$dir9 */ 1234 1.1 christos { 1235 1.1 christos FR30_INSN_DMOVR13H, "dmovr13h", "dmovh", 16, 1236 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } 1237 1.1 christos }, 1238 1.1 christos /* dmovb $R13,@$dir8 */ 1239 1.1 christos { 1240 1.1 christos FR30_INSN_DMOVR13B, "dmovr13b", "dmovb", 16, 1241 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } 1242 1.1 christos }, 1243 1.1 christos /* dmov @$R13+,@$dir10 */ 1244 1.1 christos { 1245 1.1 christos FR30_INSN_DMOVR13PI, "dmovr13pi", "dmov", 16, 1246 1.1 christos { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } } 1247 1.1 christos }, 1248 1.1 christos /* dmovh @$R13+,@$dir9 */ 1249 1.1 christos { 1250 1.1 christos FR30_INSN_DMOVR13PIH, "dmovr13pih", "dmovh", 16, 1251 1.1 christos { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } } 1252 1.1 christos }, 1253 1.1 christos /* dmovb @$R13+,@$dir8 */ 1254 1.1 christos { 1255 1.1 christos FR30_INSN_DMOVR13PIB, "dmovr13pib", "dmovb", 16, 1256 1.1 christos { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } } 1257 1.1 christos }, 1258 1.1 christos /* dmov @$R15+,@$dir10 */ 1259 1.1 christos { 1260 1.1 christos FR30_INSN_DMOVR15PI, "dmovr15pi", "dmov", 16, 1261 1.1 christos { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } } 1262 1.1 christos }, 1263 1.1 christos /* dmov @$dir10,$R13 */ 1264 1.1 christos { 1265 1.1 christos FR30_INSN_DMOV2R13, "dmov2r13", "dmov", 16, 1266 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } 1267 1.1 christos }, 1268 1.1 christos /* dmovh @$dir9,$R13 */ 1269 1.1 christos { 1270 1.1 christos FR30_INSN_DMOV2R13H, "dmov2r13h", "dmovh", 16, 1271 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } 1272 1.1 christos }, 1273 1.1 christos /* dmovb @$dir8,$R13 */ 1274 1.1 christos { 1275 1.1 christos FR30_INSN_DMOV2R13B, "dmov2r13b", "dmovb", 16, 1276 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } 1277 1.1 christos }, 1278 1.1 christos /* dmov @$dir10,@$R13+ */ 1279 1.1 christos { 1280 1.1 christos FR30_INSN_DMOV2R13PI, "dmov2r13pi", "dmov", 16, 1281 1.1 christos { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } } 1282 1.1 christos }, 1283 1.1 christos /* dmovh @$dir9,@$R13+ */ 1284 1.1 christos { 1285 1.1 christos FR30_INSN_DMOV2R13PIH, "dmov2r13pih", "dmovh", 16, 1286 1.1 christos { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } } 1287 1.1 christos }, 1288 1.1 christos /* dmovb @$dir8,@$R13+ */ 1289 1.1 christos { 1290 1.1 christos FR30_INSN_DMOV2R13PIB, "dmov2r13pib", "dmovb", 16, 1291 1.1 christos { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } } 1292 1.1 christos }, 1293 1.1 christos /* dmov @$dir10,@-$R15 */ 1294 1.1 christos { 1295 1.1 christos FR30_INSN_DMOV2R15PD, "dmov2r15pd", "dmov", 16, 1296 1.1 christos { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } } 1297 1.1 christos }, 1298 1.1 christos /* ldres @$Ri+,$u4 */ 1299 1.1 christos { 1300 1.1 christos FR30_INSN_LDRES, "ldres", "ldres", 16, 1301 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } 1302 1.1 christos }, 1303 1.1 christos /* stres $u4,@$Ri+ */ 1304 1.1 christos { 1305 1.1 christos FR30_INSN_STRES, "stres", "stres", 16, 1306 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } 1307 1.1 christos }, 1308 1.1 christos /* copop $u4c,$ccc,$CRj,$CRi */ 1309 1.1 christos { 1310 1.1 christos FR30_INSN_COPOP, "copop", "copop", 32, 1311 1.1 christos { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } } 1312 1.1 christos }, 1313 1.1 christos /* copld $u4c,$ccc,$Rjc,$CRi */ 1314 1.1 christos { 1315 1.1 christos FR30_INSN_COPLD, "copld", "copld", 32, 1316 1.1 christos { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } } 1317 1.1 christos }, 1318 1.1 christos /* copst $u4c,$ccc,$CRj,$Ric */ 1319 1.1 christos { 1320 1.1 christos FR30_INSN_COPST, "copst", "copst", 32, 1321 1.1 christos { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } } 1322 1.1 christos }, 1323 1.1 christos /* copsv $u4c,$ccc,$CRj,$Ric */ 1324 1.1 christos { 1325 1.1 christos FR30_INSN_COPSV, "copsv", "copsv", 32, 1326 1.1 christos { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } } 1327 1.1 christos }, 1328 1.1 christos /* nop */ 1329 1.1 christos { 1330 1.1 christos FR30_INSN_NOP, "nop", "nop", 16, 1331 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } 1332 1.1 christos }, 1333 1.1 christos /* andccr $u8 */ 1334 1.1 christos { 1335 1.1 christos FR30_INSN_ANDCCR, "andccr", "andccr", 16, 1336 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } 1337 1.1 christos }, 1338 1.1 christos /* orccr $u8 */ 1339 1.1 christos { 1340 1.1 christos FR30_INSN_ORCCR, "orccr", "orccr", 16, 1341 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } 1342 1.1 christos }, 1343 1.1 christos /* stilm $u8 */ 1344 1.1 christos { 1345 1.1 christos FR30_INSN_STILM, "stilm", "stilm", 16, 1346 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } 1347 1.1 christos }, 1348 1.1 christos /* addsp $s10 */ 1349 1.1 christos { 1350 1.1 christos FR30_INSN_ADDSP, "addsp", "addsp", 16, 1351 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } 1352 1.1 christos }, 1353 1.1 christos /* extsb $Ri */ 1354 1.1 christos { 1355 1.1 christos FR30_INSN_EXTSB, "extsb", "extsb", 16, 1356 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } 1357 1.1 christos }, 1358 1.1 christos /* extub $Ri */ 1359 1.1 christos { 1360 1.1 christos FR30_INSN_EXTUB, "extub", "extub", 16, 1361 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } 1362 1.1 christos }, 1363 1.1 christos /* extsh $Ri */ 1364 1.1 christos { 1365 1.1 christos FR30_INSN_EXTSH, "extsh", "extsh", 16, 1366 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } 1367 1.1 christos }, 1368 1.1 christos /* extuh $Ri */ 1369 1.1 christos { 1370 1.1 christos FR30_INSN_EXTUH, "extuh", "extuh", 16, 1371 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } 1372 1.1 christos }, 1373 1.1 christos /* ldm0 ($reglist_low_ld) */ 1374 1.1 christos { 1375 1.1 christos FR30_INSN_LDM0, "ldm0", "ldm0", 16, 1376 1.1 christos { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } } 1377 1.1 christos }, 1378 1.1 christos /* ldm1 ($reglist_hi_ld) */ 1379 1.1 christos { 1380 1.1 christos FR30_INSN_LDM1, "ldm1", "ldm1", 16, 1381 1.1 christos { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } } 1382 1.1 christos }, 1383 1.1 christos /* stm0 ($reglist_low_st) */ 1384 1.1 christos { 1385 1.1 christos FR30_INSN_STM0, "stm0", "stm0", 16, 1386 1.1 christos { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } } 1387 1.1 christos }, 1388 1.1 christos /* stm1 ($reglist_hi_st) */ 1389 1.1 christos { 1390 1.1 christos FR30_INSN_STM1, "stm1", "stm1", 16, 1391 1.1 christos { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } } 1392 1.1 christos }, 1393 1.1 christos /* enter $u10 */ 1394 1.1 christos { 1395 1.1 christos FR30_INSN_ENTER, "enter", "enter", 16, 1396 1.1 christos { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } } 1397 1.1 christos }, 1398 1.1 christos /* leave */ 1399 1.1 christos { 1400 1.1 christos FR30_INSN_LEAVE, "leave", "leave", 16, 1401 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } 1402 1.1 christos }, 1403 1.1 christos /* xchb @$Rj,$Ri */ 1404 1.1 christos { 1405 1.1 christos FR30_INSN_XCHB, "xchb", "xchb", 16, 1406 1.1 christos { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } } 1407 1.1 christos }, 1408 1.1 christos }; 1409 1.1 christos 1410 1.1 christos #undef OP 1411 1.1 christos #undef A 1412 1.1 christos 1413 1.1 christos /* Initialize anything needed to be done once, before any cpu_open call. */ 1414 1.1 christos 1415 1.1 christos static void 1416 1.1 christos init_tables (void) 1417 1.1 christos { 1418 1.1 christos } 1419 1.1 christos 1420 1.8 christos #ifndef opcodes_error_handler 1421 1.8 christos #define opcodes_error_handler(...) \ 1422 1.8 christos fprintf (stderr, __VA_ARGS__); fputc ('\n', stderr) 1423 1.8 christos #endif 1424 1.8 christos 1425 1.1 christos static const CGEN_MACH * lookup_mach_via_bfd_name (const CGEN_MACH *, const char *); 1426 1.1 christos static void build_hw_table (CGEN_CPU_TABLE *); 1427 1.1 christos static void build_ifield_table (CGEN_CPU_TABLE *); 1428 1.1 christos static void build_operand_table (CGEN_CPU_TABLE *); 1429 1.1 christos static void build_insn_table (CGEN_CPU_TABLE *); 1430 1.1 christos static void fr30_cgen_rebuild_tables (CGEN_CPU_TABLE *); 1431 1.1 christos 1432 1.1 christos /* Subroutine of fr30_cgen_cpu_open to look up a mach via its bfd name. */ 1433 1.1 christos 1434 1.1 christos static const CGEN_MACH * 1435 1.1 christos lookup_mach_via_bfd_name (const CGEN_MACH *table, const char *name) 1436 1.1 christos { 1437 1.1 christos while (table->name) 1438 1.1 christos { 1439 1.1 christos if (strcmp (name, table->bfd_name) == 0) 1440 1.1 christos return table; 1441 1.1 christos ++table; 1442 1.1 christos } 1443 1.7 christos return NULL; 1444 1.1 christos } 1445 1.1 christos 1446 1.1 christos /* Subroutine of fr30_cgen_cpu_open to build the hardware table. */ 1447 1.1 christos 1448 1.1 christos static void 1449 1.1 christos build_hw_table (CGEN_CPU_TABLE *cd) 1450 1.1 christos { 1451 1.1 christos int i; 1452 1.1 christos int machs = cd->machs; 1453 1.1 christos const CGEN_HW_ENTRY *init = & fr30_cgen_hw_table[0]; 1454 1.1 christos /* MAX_HW is only an upper bound on the number of selected entries. 1455 1.1 christos However each entry is indexed by it's enum so there can be holes in 1456 1.1 christos the table. */ 1457 1.1 christos const CGEN_HW_ENTRY **selected = 1458 1.1 christos (const CGEN_HW_ENTRY **) xmalloc (MAX_HW * sizeof (CGEN_HW_ENTRY *)); 1459 1.1 christos 1460 1.1 christos cd->hw_table.init_entries = init; 1461 1.1 christos cd->hw_table.entry_size = sizeof (CGEN_HW_ENTRY); 1462 1.1 christos memset (selected, 0, MAX_HW * sizeof (CGEN_HW_ENTRY *)); 1463 1.1 christos /* ??? For now we just use machs to determine which ones we want. */ 1464 1.1 christos for (i = 0; init[i].name != NULL; ++i) 1465 1.1 christos if (CGEN_HW_ATTR_VALUE (&init[i], CGEN_HW_MACH) 1466 1.1 christos & machs) 1467 1.1 christos selected[init[i].type] = &init[i]; 1468 1.1 christos cd->hw_table.entries = selected; 1469 1.1 christos cd->hw_table.num_entries = MAX_HW; 1470 1.1 christos } 1471 1.1 christos 1472 1.1 christos /* Subroutine of fr30_cgen_cpu_open to build the hardware table. */ 1473 1.1 christos 1474 1.1 christos static void 1475 1.1 christos build_ifield_table (CGEN_CPU_TABLE *cd) 1476 1.1 christos { 1477 1.1 christos cd->ifld_table = & fr30_cgen_ifld_table[0]; 1478 1.1 christos } 1479 1.1 christos 1480 1.1 christos /* Subroutine of fr30_cgen_cpu_open to build the hardware table. */ 1481 1.1 christos 1482 1.1 christos static void 1483 1.1 christos build_operand_table (CGEN_CPU_TABLE *cd) 1484 1.1 christos { 1485 1.1 christos int i; 1486 1.1 christos int machs = cd->machs; 1487 1.1 christos const CGEN_OPERAND *init = & fr30_cgen_operand_table[0]; 1488 1.1 christos /* MAX_OPERANDS is only an upper bound on the number of selected entries. 1489 1.1 christos However each entry is indexed by it's enum so there can be holes in 1490 1.1 christos the table. */ 1491 1.1 christos const CGEN_OPERAND **selected = xmalloc (MAX_OPERANDS * sizeof (* selected)); 1492 1.1 christos 1493 1.1 christos cd->operand_table.init_entries = init; 1494 1.1 christos cd->operand_table.entry_size = sizeof (CGEN_OPERAND); 1495 1.1 christos memset (selected, 0, MAX_OPERANDS * sizeof (CGEN_OPERAND *)); 1496 1.1 christos /* ??? For now we just use mach to determine which ones we want. */ 1497 1.1 christos for (i = 0; init[i].name != NULL; ++i) 1498 1.1 christos if (CGEN_OPERAND_ATTR_VALUE (&init[i], CGEN_OPERAND_MACH) 1499 1.1 christos & machs) 1500 1.1 christos selected[init[i].type] = &init[i]; 1501 1.1 christos cd->operand_table.entries = selected; 1502 1.1 christos cd->operand_table.num_entries = MAX_OPERANDS; 1503 1.1 christos } 1504 1.1 christos 1505 1.1 christos /* Subroutine of fr30_cgen_cpu_open to build the hardware table. 1506 1.1 christos ??? This could leave out insns not supported by the specified mach/isa, 1507 1.1 christos but that would cause errors like "foo only supported by bar" to become 1508 1.1 christos "unknown insn", so for now we include all insns and require the app to 1509 1.1 christos do the checking later. 1510 1.1 christos ??? On the other hand, parsing of such insns may require their hardware or 1511 1.1 christos operand elements to be in the table [which they mightn't be]. */ 1512 1.1 christos 1513 1.1 christos static void 1514 1.1 christos build_insn_table (CGEN_CPU_TABLE *cd) 1515 1.1 christos { 1516 1.1 christos int i; 1517 1.1 christos const CGEN_IBASE *ib = & fr30_cgen_insn_table[0]; 1518 1.1 christos CGEN_INSN *insns = xmalloc (MAX_INSNS * sizeof (CGEN_INSN)); 1519 1.1 christos 1520 1.1 christos memset (insns, 0, MAX_INSNS * sizeof (CGEN_INSN)); 1521 1.1 christos for (i = 0; i < MAX_INSNS; ++i) 1522 1.1 christos insns[i].base = &ib[i]; 1523 1.1 christos cd->insn_table.init_entries = insns; 1524 1.1 christos cd->insn_table.entry_size = sizeof (CGEN_IBASE); 1525 1.1 christos cd->insn_table.num_init_entries = MAX_INSNS; 1526 1.1 christos } 1527 1.1 christos 1528 1.1 christos /* Subroutine of fr30_cgen_cpu_open to rebuild the tables. */ 1529 1.1 christos 1530 1.1 christos static void 1531 1.1 christos fr30_cgen_rebuild_tables (CGEN_CPU_TABLE *cd) 1532 1.1 christos { 1533 1.1 christos int i; 1534 1.1 christos CGEN_BITSET *isas = cd->isas; 1535 1.1 christos unsigned int machs = cd->machs; 1536 1.1 christos 1537 1.1 christos cd->int_insn_p = CGEN_INT_INSN_P; 1538 1.1 christos 1539 1.1 christos /* Data derived from the isa spec. */ 1540 1.1 christos #define UNSET (CGEN_SIZE_UNKNOWN + 1) 1541 1.1 christos cd->default_insn_bitsize = UNSET; 1542 1.1 christos cd->base_insn_bitsize = UNSET; 1543 1.1 christos cd->min_insn_bitsize = 65535; /* Some ridiculously big number. */ 1544 1.1 christos cd->max_insn_bitsize = 0; 1545 1.1 christos for (i = 0; i < MAX_ISAS; ++i) 1546 1.1 christos if (cgen_bitset_contains (isas, i)) 1547 1.1 christos { 1548 1.1 christos const CGEN_ISA *isa = & fr30_cgen_isa_table[i]; 1549 1.1 christos 1550 1.1 christos /* Default insn sizes of all selected isas must be 1551 1.1 christos equal or we set the result to 0, meaning "unknown". */ 1552 1.1 christos if (cd->default_insn_bitsize == UNSET) 1553 1.1 christos cd->default_insn_bitsize = isa->default_insn_bitsize; 1554 1.1 christos else if (isa->default_insn_bitsize == cd->default_insn_bitsize) 1555 1.1 christos ; /* This is ok. */ 1556 1.1 christos else 1557 1.1 christos cd->default_insn_bitsize = CGEN_SIZE_UNKNOWN; 1558 1.1 christos 1559 1.1 christos /* Base insn sizes of all selected isas must be equal 1560 1.1 christos or we set the result to 0, meaning "unknown". */ 1561 1.1 christos if (cd->base_insn_bitsize == UNSET) 1562 1.1 christos cd->base_insn_bitsize = isa->base_insn_bitsize; 1563 1.1 christos else if (isa->base_insn_bitsize == cd->base_insn_bitsize) 1564 1.1 christos ; /* This is ok. */ 1565 1.1 christos else 1566 1.1 christos cd->base_insn_bitsize = CGEN_SIZE_UNKNOWN; 1567 1.1 christos 1568 1.1 christos /* Set min,max insn sizes. */ 1569 1.1 christos if (isa->min_insn_bitsize < cd->min_insn_bitsize) 1570 1.1 christos cd->min_insn_bitsize = isa->min_insn_bitsize; 1571 1.1 christos if (isa->max_insn_bitsize > cd->max_insn_bitsize) 1572 1.1 christos cd->max_insn_bitsize = isa->max_insn_bitsize; 1573 1.1 christos } 1574 1.1 christos 1575 1.1 christos /* Data derived from the mach spec. */ 1576 1.1 christos for (i = 0; i < MAX_MACHS; ++i) 1577 1.1 christos if (((1 << i) & machs) != 0) 1578 1.1 christos { 1579 1.1 christos const CGEN_MACH *mach = & fr30_cgen_mach_table[i]; 1580 1.1 christos 1581 1.1 christos if (mach->insn_chunk_bitsize != 0) 1582 1.1 christos { 1583 1.1 christos if (cd->insn_chunk_bitsize != 0 && cd->insn_chunk_bitsize != mach->insn_chunk_bitsize) 1584 1.1 christos { 1585 1.8 christos opcodes_error_handler 1586 1.8 christos (/* xgettext:c-format */ 1587 1.8 christos _("internal error: fr30_cgen_rebuild_tables: " 1588 1.8 christos "conflicting insn-chunk-bitsize values: `%d' vs. `%d'"), 1589 1.8 christos cd->insn_chunk_bitsize, mach->insn_chunk_bitsize); 1590 1.1 christos abort (); 1591 1.1 christos } 1592 1.1 christos 1593 1.1 christos cd->insn_chunk_bitsize = mach->insn_chunk_bitsize; 1594 1.1 christos } 1595 1.1 christos } 1596 1.1 christos 1597 1.1 christos /* Determine which hw elements are used by MACH. */ 1598 1.1 christos build_hw_table (cd); 1599 1.1 christos 1600 1.1 christos /* Build the ifield table. */ 1601 1.1 christos build_ifield_table (cd); 1602 1.1 christos 1603 1.1 christos /* Determine which operands are used by MACH/ISA. */ 1604 1.1 christos build_operand_table (cd); 1605 1.1 christos 1606 1.1 christos /* Build the instruction table. */ 1607 1.1 christos build_insn_table (cd); 1608 1.1 christos } 1609 1.1 christos 1610 1.1 christos /* Initialize a cpu table and return a descriptor. 1611 1.1 christos It's much like opening a file, and must be the first function called. 1612 1.1 christos The arguments are a set of (type/value) pairs, terminated with 1613 1.1 christos CGEN_CPU_OPEN_END. 1614 1.1 christos 1615 1.1 christos Currently supported values: 1616 1.1 christos CGEN_CPU_OPEN_ISAS: bitmap of values in enum isa_attr 1617 1.1 christos CGEN_CPU_OPEN_MACHS: bitmap of values in enum mach_attr 1618 1.1 christos CGEN_CPU_OPEN_BFDMACH: specify 1 mach using bfd name 1619 1.1 christos CGEN_CPU_OPEN_ENDIAN: specify endian choice 1620 1.9 christos CGEN_CPU_OPEN_INSN_ENDIAN: specify instruction endian choice 1621 1.1 christos CGEN_CPU_OPEN_END: terminates arguments 1622 1.1 christos 1623 1.1 christos ??? Simultaneous multiple isas might not make sense, but it's not (yet) 1624 1.1 christos precluded. */ 1625 1.1 christos 1626 1.1 christos CGEN_CPU_DESC 1627 1.1 christos fr30_cgen_cpu_open (enum cgen_cpu_open_arg arg_type, ...) 1628 1.1 christos { 1629 1.1 christos CGEN_CPU_TABLE *cd = (CGEN_CPU_TABLE *) xmalloc (sizeof (CGEN_CPU_TABLE)); 1630 1.1 christos static int init_p; 1631 1.1 christos CGEN_BITSET *isas = 0; /* 0 = "unspecified" */ 1632 1.1 christos unsigned int machs = 0; /* 0 = "unspecified" */ 1633 1.1 christos enum cgen_endian endian = CGEN_ENDIAN_UNKNOWN; 1634 1.9 christos enum cgen_endian insn_endian = CGEN_ENDIAN_UNKNOWN; 1635 1.1 christos va_list ap; 1636 1.1 christos 1637 1.1 christos if (! init_p) 1638 1.1 christos { 1639 1.1 christos init_tables (); 1640 1.1 christos init_p = 1; 1641 1.1 christos } 1642 1.1 christos 1643 1.1 christos memset (cd, 0, sizeof (*cd)); 1644 1.1 christos 1645 1.1 christos va_start (ap, arg_type); 1646 1.1 christos while (arg_type != CGEN_CPU_OPEN_END) 1647 1.1 christos { 1648 1.1 christos switch (arg_type) 1649 1.1 christos { 1650 1.1 christos case CGEN_CPU_OPEN_ISAS : 1651 1.1 christos isas = va_arg (ap, CGEN_BITSET *); 1652 1.1 christos break; 1653 1.1 christos case CGEN_CPU_OPEN_MACHS : 1654 1.1 christos machs = va_arg (ap, unsigned int); 1655 1.1 christos break; 1656 1.1 christos case CGEN_CPU_OPEN_BFDMACH : 1657 1.1 christos { 1658 1.1 christos const char *name = va_arg (ap, const char *); 1659 1.1 christos const CGEN_MACH *mach = 1660 1.1 christos lookup_mach_via_bfd_name (fr30_cgen_mach_table, name); 1661 1.1 christos 1662 1.7 christos if (mach != NULL) 1663 1.7 christos machs |= 1 << mach->num; 1664 1.1 christos break; 1665 1.1 christos } 1666 1.1 christos case CGEN_CPU_OPEN_ENDIAN : 1667 1.1 christos endian = va_arg (ap, enum cgen_endian); 1668 1.1 christos break; 1669 1.9 christos case CGEN_CPU_OPEN_INSN_ENDIAN : 1670 1.9 christos insn_endian = va_arg (ap, enum cgen_endian); 1671 1.9 christos break; 1672 1.1 christos default : 1673 1.8 christos opcodes_error_handler 1674 1.8 christos (/* xgettext:c-format */ 1675 1.8 christos _("internal error: fr30_cgen_cpu_open: " 1676 1.8 christos "unsupported argument `%d'"), 1677 1.8 christos arg_type); 1678 1.1 christos abort (); /* ??? return NULL? */ 1679 1.1 christos } 1680 1.1 christos arg_type = va_arg (ap, enum cgen_cpu_open_arg); 1681 1.1 christos } 1682 1.1 christos va_end (ap); 1683 1.1 christos 1684 1.1 christos /* Mach unspecified means "all". */ 1685 1.1 christos if (machs == 0) 1686 1.1 christos machs = (1 << MAX_MACHS) - 1; 1687 1.1 christos /* Base mach is always selected. */ 1688 1.1 christos machs |= 1; 1689 1.1 christos if (endian == CGEN_ENDIAN_UNKNOWN) 1690 1.1 christos { 1691 1.1 christos /* ??? If target has only one, could have a default. */ 1692 1.8 christos opcodes_error_handler 1693 1.8 christos (/* xgettext:c-format */ 1694 1.8 christos _("internal error: fr30_cgen_cpu_open: no endianness specified")); 1695 1.1 christos abort (); 1696 1.1 christos } 1697 1.1 christos 1698 1.1 christos cd->isas = cgen_bitset_copy (isas); 1699 1.1 christos cd->machs = machs; 1700 1.1 christos cd->endian = endian; 1701 1.9 christos cd->insn_endian 1702 1.9 christos = (insn_endian == CGEN_ENDIAN_UNKNOWN ? endian : insn_endian); 1703 1.1 christos 1704 1.1 christos /* Table (re)builder. */ 1705 1.1 christos cd->rebuild_tables = fr30_cgen_rebuild_tables; 1706 1.1 christos fr30_cgen_rebuild_tables (cd); 1707 1.1 christos 1708 1.1 christos /* Default to not allowing signed overflow. */ 1709 1.1 christos cd->signed_overflow_ok_p = 0; 1710 1.6 christos 1711 1.1 christos return (CGEN_CPU_DESC) cd; 1712 1.1 christos } 1713 1.1 christos 1714 1.1 christos /* Cover fn to fr30_cgen_cpu_open to handle the simple case of 1 isa, 1 mach. 1715 1.1 christos MACH_NAME is the bfd name of the mach. */ 1716 1.1 christos 1717 1.1 christos CGEN_CPU_DESC 1718 1.1 christos fr30_cgen_cpu_open_1 (const char *mach_name, enum cgen_endian endian) 1719 1.1 christos { 1720 1.1 christos return fr30_cgen_cpu_open (CGEN_CPU_OPEN_BFDMACH, mach_name, 1721 1.1 christos CGEN_CPU_OPEN_ENDIAN, endian, 1722 1.1 christos CGEN_CPU_OPEN_END); 1723 1.1 christos } 1724 1.1 christos 1725 1.1 christos /* Close a cpu table. 1726 1.1 christos ??? This can live in a machine independent file, but there's currently 1727 1.1 christos no place to put this file (there's no libcgen). libopcodes is the wrong 1728 1.1 christos place as some simulator ports use this but they don't use libopcodes. */ 1729 1.1 christos 1730 1.1 christos void 1731 1.1 christos fr30_cgen_cpu_close (CGEN_CPU_DESC cd) 1732 1.1 christos { 1733 1.1 christos unsigned int i; 1734 1.1 christos const CGEN_INSN *insns; 1735 1.1 christos 1736 1.1 christos if (cd->macro_insn_table.init_entries) 1737 1.1 christos { 1738 1.1 christos insns = cd->macro_insn_table.init_entries; 1739 1.1 christos for (i = 0; i < cd->macro_insn_table.num_init_entries; ++i, ++insns) 1740 1.1 christos if (CGEN_INSN_RX ((insns))) 1741 1.1 christos regfree (CGEN_INSN_RX (insns)); 1742 1.1 christos } 1743 1.1 christos 1744 1.1 christos if (cd->insn_table.init_entries) 1745 1.1 christos { 1746 1.1 christos insns = cd->insn_table.init_entries; 1747 1.1 christos for (i = 0; i < cd->insn_table.num_init_entries; ++i, ++insns) 1748 1.1 christos if (CGEN_INSN_RX (insns)) 1749 1.1 christos regfree (CGEN_INSN_RX (insns)); 1750 1.6 christos } 1751 1.1 christos 1752 1.9 christos free ((CGEN_INSN *) cd->macro_insn_table.init_entries); 1753 1.9 christos free ((CGEN_INSN *) cd->insn_table.init_entries); 1754 1.9 christos free ((CGEN_HW_ENTRY *) cd->hw_table.entries); 1755 1.9 christos free ((CGEN_HW_ENTRY *) cd->operand_table.entries); 1756 1.1 christos free (cd); 1757 1.1 christos } 1758 1.1 christos 1759