00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 #include "sysdep.h"
00030 #include <stdio.h>
00031 #include <stdarg.h>
00032 #include "ansidecl.h"
00033 #include "bfd.h"
00034 #include "symcat.h"
00035 #include "iq2000-desc.h"
00036 #include "iq2000-opc.h"
00037 #include "opintl.h"
00038 #include "libiberty.h"
00039 #include "xregex.h"
00040
00041
00042
00043 static const CGEN_ATTR_ENTRY bool_attr[] =
00044 {
00045 { "#f", 0 },
00046 { "#t", 1 },
00047 { 0, 0 }
00048 };
00049
00050 static const CGEN_ATTR_ENTRY MACH_attr[] ATTRIBUTE_UNUSED =
00051 {
00052 { "base", MACH_BASE },
00053 { "iq2000", MACH_IQ2000 },
00054 { "iq10", MACH_IQ10 },
00055 { "max", MACH_MAX },
00056 { 0, 0 }
00057 };
00058
00059 static const CGEN_ATTR_ENTRY ISA_attr[] ATTRIBUTE_UNUSED =
00060 {
00061 { "iq2000", ISA_IQ2000 },
00062 { "max", ISA_MAX },
00063 { 0, 0 }
00064 };
00065
00066 const CGEN_ATTR_TABLE iq2000_cgen_ifield_attr_table[] =
00067 {
00068 { "MACH", & MACH_attr[0], & MACH_attr[0] },
00069 { "VIRTUAL", &bool_attr[0], &bool_attr[0] },
00070 { "PCREL-ADDR", &bool_attr[0], &bool_attr[0] },
00071 { "ABS-ADDR", &bool_attr[0], &bool_attr[0] },
00072 { "RESERVED", &bool_attr[0], &bool_attr[0] },
00073 { "SIGN-OPT", &bool_attr[0], &bool_attr[0] },
00074 { "SIGNED", &bool_attr[0], &bool_attr[0] },
00075 { 0, 0, 0 }
00076 };
00077
00078 const CGEN_ATTR_TABLE iq2000_cgen_hardware_attr_table[] =
00079 {
00080 { "MACH", & MACH_attr[0], & MACH_attr[0] },
00081 { "VIRTUAL", &bool_attr[0], &bool_attr[0] },
00082 { "CACHE-ADDR", &bool_attr[0], &bool_attr[0] },
00083 { "PC", &bool_attr[0], &bool_attr[0] },
00084 { "PROFILE", &bool_attr[0], &bool_attr[0] },
00085 { 0, 0, 0 }
00086 };
00087
00088 const CGEN_ATTR_TABLE iq2000_cgen_operand_attr_table[] =
00089 {
00090 { "MACH", & MACH_attr[0], & MACH_attr[0] },
00091 { "VIRTUAL", &bool_attr[0], &bool_attr[0] },
00092 { "PCREL-ADDR", &bool_attr[0], &bool_attr[0] },
00093 { "ABS-ADDR", &bool_attr[0], &bool_attr[0] },
00094 { "SIGN-OPT", &bool_attr[0], &bool_attr[0] },
00095 { "SIGNED", &bool_attr[0], &bool_attr[0] },
00096 { "NEGATIVE", &bool_attr[0], &bool_attr[0] },
00097 { "RELAX", &bool_attr[0], &bool_attr[0] },
00098 { "SEM-ONLY", &bool_attr[0], &bool_attr[0] },
00099 { 0, 0, 0 }
00100 };
00101
00102 const CGEN_ATTR_TABLE iq2000_cgen_insn_attr_table[] =
00103 {
00104 { "MACH", & MACH_attr[0], & MACH_attr[0] },
00105 { "ALIAS", &bool_attr[0], &bool_attr[0] },
00106 { "VIRTUAL", &bool_attr[0], &bool_attr[0] },
00107 { "UNCOND-CTI", &bool_attr[0], &bool_attr[0] },
00108 { "COND-CTI", &bool_attr[0], &bool_attr[0] },
00109 { "SKIP-CTI", &bool_attr[0], &bool_attr[0] },
00110 { "DELAY-SLOT", &bool_attr[0], &bool_attr[0] },
00111 { "RELAXABLE", &bool_attr[0], &bool_attr[0] },
00112 { "RELAXED", &bool_attr[0], &bool_attr[0] },
00113 { "NO-DIS", &bool_attr[0], &bool_attr[0] },
00114 { "PBB", &bool_attr[0], &bool_attr[0] },
00115 { "YIELD-INSN", &bool_attr[0], &bool_attr[0] },
00116 { "LOAD-DELAY", &bool_attr[0], &bool_attr[0] },
00117 { "EVEN-REG-NUM", &bool_attr[0], &bool_attr[0] },
00118 { "UNSUPPORTED", &bool_attr[0], &bool_attr[0] },
00119 { "USES-RD", &bool_attr[0], &bool_attr[0] },
00120 { "USES-RS", &bool_attr[0], &bool_attr[0] },
00121 { "USES-RT", &bool_attr[0], &bool_attr[0] },
00122 { "USES-R31", &bool_attr[0], &bool_attr[0] },
00123 { 0, 0, 0 }
00124 };
00125
00126
00127
00128 static const CGEN_ISA iq2000_cgen_isa_table[] = {
00129 { "iq2000", 32, 32, 32, 32 },
00130 { 0, 0, 0, 0, 0 }
00131 };
00132
00133
00134
00135 static const CGEN_MACH iq2000_cgen_mach_table[] = {
00136 { "iq2000", "iq2000", MACH_IQ2000, 0 },
00137 { "iq10", "iq10", MACH_IQ10, 0 },
00138 { 0, 0, 0, 0 }
00139 };
00140
00141 static CGEN_KEYWORD_ENTRY iq2000_cgen_opval_gr_names_entries[] =
00142 {
00143 { "r0", 0, {0, {0}}, 0, 0 },
00144 { "%0", 0, {0, {0}}, 0, 0 },
00145 { "r1", 1, {0, {0}}, 0, 0 },
00146 { "%1", 1, {0, {0}}, 0, 0 },
00147 { "r2", 2, {0, {0}}, 0, 0 },
00148 { "%2", 2, {0, {0}}, 0, 0 },
00149 { "r3", 3, {0, {0}}, 0, 0 },
00150 { "%3", 3, {0, {0}}, 0, 0 },
00151 { "r4", 4, {0, {0}}, 0, 0 },
00152 { "%4", 4, {0, {0}}, 0, 0 },
00153 { "r5", 5, {0, {0}}, 0, 0 },
00154 { "%5", 5, {0, {0}}, 0, 0 },
00155 { "r6", 6, {0, {0}}, 0, 0 },
00156 { "%6", 6, {0, {0}}, 0, 0 },
00157 { "r7", 7, {0, {0}}, 0, 0 },
00158 { "%7", 7, {0, {0}}, 0, 0 },
00159 { "r8", 8, {0, {0}}, 0, 0 },
00160 { "%8", 8, {0, {0}}, 0, 0 },
00161 { "r9", 9, {0, {0}}, 0, 0 },
00162 { "%9", 9, {0, {0}}, 0, 0 },
00163 { "r10", 10, {0, {0}}, 0, 0 },
00164 { "%10", 10, {0, {0}}, 0, 0 },
00165 { "r11", 11, {0, {0}}, 0, 0 },
00166 { "%11", 11, {0, {0}}, 0, 0 },
00167 { "r12", 12, {0, {0}}, 0, 0 },
00168 { "%12", 12, {0, {0}}, 0, 0 },
00169 { "r13", 13, {0, {0}}, 0, 0 },
00170 { "%13", 13, {0, {0}}, 0, 0 },
00171 { "r14", 14, {0, {0}}, 0, 0 },
00172 { "%14", 14, {0, {0}}, 0, 0 },
00173 { "r15", 15, {0, {0}}, 0, 0 },
00174 { "%15", 15, {0, {0}}, 0, 0 },
00175 { "r16", 16, {0, {0}}, 0, 0 },
00176 { "%16", 16, {0, {0}}, 0, 0 },
00177 { "r17", 17, {0, {0}}, 0, 0 },
00178 { "%17", 17, {0, {0}}, 0, 0 },
00179 { "r18", 18, {0, {0}}, 0, 0 },
00180 { "%18", 18, {0, {0}}, 0, 0 },
00181 { "r19", 19, {0, {0}}, 0, 0 },
00182 { "%19", 19, {0, {0}}, 0, 0 },
00183 { "r20", 20, {0, {0}}, 0, 0 },
00184 { "%20", 20, {0, {0}}, 0, 0 },
00185 { "r21", 21, {0, {0}}, 0, 0 },
00186 { "%21", 21, {0, {0}}, 0, 0 },
00187 { "r22", 22, {0, {0}}, 0, 0 },
00188 { "%22", 22, {0, {0}}, 0, 0 },
00189 { "r23", 23, {0, {0}}, 0, 0 },
00190 { "%23", 23, {0, {0}}, 0, 0 },
00191 { "r24", 24, {0, {0}}, 0, 0 },
00192 { "%24", 24, {0, {0}}, 0, 0 },
00193 { "r25", 25, {0, {0}}, 0, 0 },
00194 { "%25", 25, {0, {0}}, 0, 0 },
00195 { "r26", 26, {0, {0}}, 0, 0 },
00196 { "%26", 26, {0, {0}}, 0, 0 },
00197 { "r27", 27, {0, {0}}, 0, 0 },
00198 { "%27", 27, {0, {0}}, 0, 0 },
00199 { "r28", 28, {0, {0}}, 0, 0 },
00200 { "%28", 28, {0, {0}}, 0, 0 },
00201 { "r29", 29, {0, {0}}, 0, 0 },
00202 { "%29", 29, {0, {0}}, 0, 0 },
00203 { "r30", 30, {0, {0}}, 0, 0 },
00204 { "%30", 30, {0, {0}}, 0, 0 },
00205 { "r31", 31, {0, {0}}, 0, 0 },
00206 { "%31", 31, {0, {0}}, 0, 0 }
00207 };
00208
00209 CGEN_KEYWORD iq2000_cgen_opval_gr_names =
00210 {
00211 & iq2000_cgen_opval_gr_names_entries[0],
00212 64,
00213 0, 0, 0, 0, ""
00214 };
00215
00216
00217
00218
00219 #if defined (__STDC__) || defined (ALMOST_STDC) || defined (HAVE_STRINGIZE)
00220 #define A(a) (1 << CGEN_HW_##a)
00221 #else
00222 #define A(a) (1 << CGEN_HW_a)
00223 #endif
00224
00225 const CGEN_HW_ENTRY iq2000_cgen_hw_table[] =
00226 {
00227 { "h-memory", HW_H_MEMORY, CGEN_ASM_NONE, 0, { 0, { (1<<MACH_BASE) } } },
00228 { "h-sint", HW_H_SINT, CGEN_ASM_NONE, 0, { 0, { (1<<MACH_BASE) } } },
00229 { "h-uint", HW_H_UINT, CGEN_ASM_NONE, 0, { 0, { (1<<MACH_BASE) } } },
00230 { "h-addr", HW_H_ADDR, CGEN_ASM_NONE, 0, { 0, { (1<<MACH_BASE) } } },
00231 { "h-iaddr", HW_H_IADDR, CGEN_ASM_NONE, 0, { 0, { (1<<MACH_BASE) } } },
00232 { "h-pc", HW_H_PC, CGEN_ASM_NONE, 0, { 0|A(PROFILE)|A(PC), { (1<<MACH_BASE) } } },
00233 { "h-gr", HW_H_GR, CGEN_ASM_KEYWORD, (PTR) & iq2000_cgen_opval_gr_names, { 0, { (1<<MACH_BASE) } } },
00234 { 0, 0, CGEN_ASM_NONE, 0, {0, {0}} }
00235 };
00236
00237 #undef A
00238
00239
00240
00241
00242 #if defined (__STDC__) || defined (ALMOST_STDC) || defined (HAVE_STRINGIZE)
00243 #define A(a) (1 << CGEN_IFLD_##a)
00244 #else
00245 #define A(a) (1 << CGEN_IFLD_a)
00246 #endif
00247
00248 const CGEN_IFLD iq2000_cgen_ifld_table[] =
00249 {
00250 { IQ2000_F_NIL, "f-nil", 0, 0, 0, 0, { 0, { (1<<MACH_BASE) } } },
00251 { IQ2000_F_ANYOF, "f-anyof", 0, 0, 0, 0, { 0, { (1<<MACH_BASE) } } },
00252 { IQ2000_F_OPCODE, "f-opcode", 0, 32, 31, 6, { 0, { (1<<MACH_BASE) } } },
00253 { IQ2000_F_RS, "f-rs", 0, 32, 25, 5, { 0, { (1<<MACH_BASE) } } },
00254 { IQ2000_F_RT, "f-rt", 0, 32, 20, 5, { 0, { (1<<MACH_BASE) } } },
00255 { IQ2000_F_RD, "f-rd", 0, 32, 15, 5, { 0, { (1<<MACH_BASE) } } },
00256 { IQ2000_F_SHAMT, "f-shamt", 0, 32, 10, 5, { 0, { (1<<MACH_BASE) } } },
00257 { IQ2000_F_CP_OP, "f-cp-op", 0, 32, 10, 3, { 0, { (1<<MACH_BASE) } } },
00258 { IQ2000_F_CP_OP_10, "f-cp-op-10", 0, 32, 10, 5, { 0, { (1<<MACH_BASE) } } },
00259 { IQ2000_F_CP_GRP, "f-cp-grp", 0, 32, 7, 2, { 0, { (1<<MACH_BASE) } } },
00260 { IQ2000_F_FUNC, "f-func", 0, 32, 5, 6, { 0, { (1<<MACH_BASE) } } },
00261 { IQ2000_F_IMM, "f-imm", 0, 32, 15, 16, { 0, { (1<<MACH_BASE) } } },
00262 { IQ2000_F_RD_RS, "f-rd-rs", 0, 0, 0, 0,{ 0|A(VIRTUAL), { (1<<MACH_BASE) } } },
00263 { IQ2000_F_RD_RT, "f-rd-rt", 0, 0, 0, 0,{ 0|A(VIRTUAL), { (1<<MACH_BASE) } } },
00264 { IQ2000_F_RT_RS, "f-rt-rs", 0, 0, 0, 0,{ 0|A(VIRTUAL), { (1<<MACH_BASE) } } },
00265 { IQ2000_F_JTARG, "f-jtarg", 0, 32, 15, 16, { 0|A(ABS_ADDR), { (1<<MACH_BASE) } } },
00266 { IQ2000_F_JTARGQ10, "f-jtargq10", 0, 32, 20, 21, { 0|A(ABS_ADDR), { (1<<MACH_BASE) } } },
00267 { IQ2000_F_OFFSET, "f-offset", 0, 32, 15, 16, { 0|A(PCREL_ADDR), { (1<<MACH_BASE) } } },
00268 { IQ2000_F_COUNT, "f-count", 0, 32, 15, 7, { 0, { (1<<MACH_BASE) } } },
00269 { IQ2000_F_BYTECOUNT, "f-bytecount", 0, 32, 7, 8, { 0, { (1<<MACH_BASE) } } },
00270 { IQ2000_F_INDEX, "f-index", 0, 32, 8, 9, { 0, { (1<<MACH_BASE) } } },
00271 { IQ2000_F_MASK, "f-mask", 0, 32, 9, 4, { 0, { (1<<MACH_BASE) } } },
00272 { IQ2000_F_MASKQ10, "f-maskq10", 0, 32, 10, 5, { 0, { (1<<MACH_BASE) } } },
00273 { IQ2000_F_MASKL, "f-maskl", 0, 32, 4, 5, { 0, { (1<<MACH_BASE) } } },
00274 { IQ2000_F_EXCODE, "f-excode", 0, 32, 25, 20, { 0, { (1<<MACH_BASE) } } },
00275 { IQ2000_F_RSRVD, "f-rsrvd", 0, 32, 25, 10, { 0, { (1<<MACH_BASE) } } },
00276 { IQ2000_F_10_11, "f-10-11", 0, 32, 10, 11, { 0, { (1<<MACH_BASE) } } },
00277 { IQ2000_F_24_19, "f-24-19", 0, 32, 24, 19, { 0, { (1<<MACH_BASE) } } },
00278 { IQ2000_F_5, "f-5", 0, 32, 5, 1, { 0, { (1<<MACH_BASE) } } },
00279 { IQ2000_F_10, "f-10", 0, 32, 10, 1, { 0, { (1<<MACH_BASE) } } },
00280 { IQ2000_F_25, "f-25", 0, 32, 25, 1, { 0, { (1<<MACH_BASE) } } },
00281 { IQ2000_F_CAM_Z, "f-cam-z", 0, 32, 5, 3, { 0, { (1<<MACH_BASE) } } },
00282 { IQ2000_F_CAM_Y, "f-cam-y", 0, 32, 2, 3, { 0, { (1<<MACH_BASE) } } },
00283 { IQ2000_F_CM_3FUNC, "f-cm-3func", 0, 32, 5, 3, { 0, { (1<<MACH_BASE) } } },
00284 { IQ2000_F_CM_4FUNC, "f-cm-4func", 0, 32, 5, 4, { 0, { (1<<MACH_BASE) } } },
00285 { IQ2000_F_CM_3Z, "f-cm-3z", 0, 32, 1, 2, { 0, { (1<<MACH_BASE) } } },
00286 { IQ2000_F_CM_4Z, "f-cm-4z", 0, 32, 2, 3, { 0, { (1<<MACH_BASE) } } },
00287 { 0, 0, 0, 0, 0, 0, {0, {0}} }
00288 };
00289
00290 #undef A
00291
00292
00293
00294
00295
00296 const CGEN_MAYBE_MULTI_IFLD IQ2000_F_RD_RS_MULTI_IFIELD [];
00297 const CGEN_MAYBE_MULTI_IFLD IQ2000_F_RD_RT_MULTI_IFIELD [];
00298 const CGEN_MAYBE_MULTI_IFLD IQ2000_F_RT_RS_MULTI_IFIELD [];
00299
00300
00301
00302
00303 const CGEN_MAYBE_MULTI_IFLD IQ2000_F_RD_RS_MULTI_IFIELD [] =
00304 {
00305 { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_RD] } },
00306 { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_RS] } },
00307 { 0, { (const PTR) 0 } }
00308 };
00309 const CGEN_MAYBE_MULTI_IFLD IQ2000_F_RD_RT_MULTI_IFIELD [] =
00310 {
00311 { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_RD] } },
00312 { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_RT] } },
00313 { 0, { (const PTR) 0 } }
00314 };
00315 const CGEN_MAYBE_MULTI_IFLD IQ2000_F_RT_RS_MULTI_IFIELD [] =
00316 {
00317 { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_RT] } },
00318 { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_RS] } },
00319 { 0, { (const PTR) 0 } }
00320 };
00321
00322
00323
00324 #if defined (__STDC__) || defined (ALMOST_STDC) || defined (HAVE_STRINGIZE)
00325 #define A(a) (1 << CGEN_OPERAND_##a)
00326 #else
00327 #define A(a) (1 << CGEN_OPERAND_a)
00328 #endif
00329 #if defined (__STDC__) || defined (ALMOST_STDC) || defined (HAVE_STRINGIZE)
00330 #define OPERAND(op) IQ2000_OPERAND_##op
00331 #else
00332 #define OPERAND(op) IQ2000_OPERAND_op
00333 #endif
00334
00335 const CGEN_OPERAND iq2000_cgen_operand_table[] =
00336 {
00337
00338 { "pc", IQ2000_OPERAND_PC, HW_H_PC, 0, 0,
00339 { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_NIL] } },
00340 { 0|A(SEM_ONLY), { (1<<MACH_BASE) } } },
00341
00342 { "rs", IQ2000_OPERAND_RS, HW_H_GR, 25, 5,
00343 { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_RS] } },
00344 { 0, { (1<<MACH_BASE) } } },
00345
00346 { "rt", IQ2000_OPERAND_RT, HW_H_GR, 20, 5,
00347 { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_RT] } },
00348 { 0, { (1<<MACH_BASE) } } },
00349
00350 { "rd", IQ2000_OPERAND_RD, HW_H_GR, 15, 5,
00351 { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_RD] } },
00352 { 0, { (1<<MACH_BASE) } } },
00353
00354 { "rd-rs", IQ2000_OPERAND_RD_RS, HW_H_GR, 15, 10,
00355 { 2, { (const PTR) &IQ2000_F_RD_RS_MULTI_IFIELD[0] } },
00356 { 0|A(VIRTUAL), { (1<<MACH_BASE) } } },
00357
00358 { "rd-rt", IQ2000_OPERAND_RD_RT, HW_H_GR, 15, 10,
00359 { 2, { (const PTR) &IQ2000_F_RD_RT_MULTI_IFIELD[0] } },
00360 { 0|A(VIRTUAL), { (1<<MACH_BASE) } } },
00361
00362 { "rt-rs", IQ2000_OPERAND_RT_RS, HW_H_GR, 20, 10,
00363 { 2, { (const PTR) &IQ2000_F_RT_RS_MULTI_IFIELD[0] } },
00364 { 0|A(VIRTUAL), { (1<<MACH_BASE) } } },
00365
00366 { "shamt", IQ2000_OPERAND_SHAMT, HW_H_UINT, 10, 5,
00367 { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_SHAMT] } },
00368 { 0, { (1<<MACH_BASE) } } },
00369
00370 { "imm", IQ2000_OPERAND_IMM, HW_H_UINT, 15, 16,
00371 { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_IMM] } },
00372 { 0, { (1<<MACH_BASE) } } },
00373
00374 { "offset", IQ2000_OPERAND_OFFSET, HW_H_IADDR, 15, 16,
00375 { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_OFFSET] } },
00376 { 0|A(PCREL_ADDR), { (1<<MACH_BASE) } } },
00377
00378 { "baseoff", IQ2000_OPERAND_BASEOFF, HW_H_IADDR, 15, 16,
00379 { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_IMM] } },
00380 { 0, { (1<<MACH_BASE) } } },
00381
00382 { "jmptarg", IQ2000_OPERAND_JMPTARG, HW_H_IADDR, 15, 16,
00383 { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_JTARG] } },
00384 { 0|A(ABS_ADDR), { (1<<MACH_BASE) } } },
00385
00386 { "mask", IQ2000_OPERAND_MASK, HW_H_UINT, 9, 4,
00387 { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_MASK] } },
00388 { 0, { (1<<MACH_BASE) } } },
00389
00390 { "maskq10", IQ2000_OPERAND_MASKQ10, HW_H_UINT, 10, 5,
00391 { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_MASKQ10] } },
00392 { 0, { (1<<MACH_BASE) } } },
00393
00394 { "maskl", IQ2000_OPERAND_MASKL, HW_H_UINT, 4, 5,
00395 { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_MASKL] } },
00396 { 0, { (1<<MACH_BASE) } } },
00397
00398 { "count", IQ2000_OPERAND_COUNT, HW_H_UINT, 15, 7,
00399 { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_COUNT] } },
00400 { 0, { (1<<MACH_BASE) } } },
00401
00402 { "_index", IQ2000_OPERAND__INDEX, HW_H_UINT, 8, 9,
00403 { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_INDEX] } },
00404 { 0, { (1<<MACH_BASE) } } },
00405
00406 { "execode", IQ2000_OPERAND_EXECODE, HW_H_UINT, 25, 20,
00407 { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_EXCODE] } },
00408 { 0, { (1<<MACH_BASE) } } },
00409
00410 { "bytecount", IQ2000_OPERAND_BYTECOUNT, HW_H_UINT, 7, 8,
00411 { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_BYTECOUNT] } },
00412 { 0, { (1<<MACH_BASE) } } },
00413
00414 { "cam-y", IQ2000_OPERAND_CAM_Y, HW_H_UINT, 2, 3,
00415 { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_CAM_Y] } },
00416 { 0, { (1<<MACH_BASE) } } },
00417
00418 { "cam-z", IQ2000_OPERAND_CAM_Z, HW_H_UINT, 5, 3,
00419 { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_CAM_Z] } },
00420 { 0, { (1<<MACH_BASE) } } },
00421
00422 { "cm-3func", IQ2000_OPERAND_CM_3FUNC, HW_H_UINT, 5, 3,
00423 { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_CM_3FUNC] } },
00424 { 0, { (1<<MACH_BASE) } } },
00425
00426 { "cm-4func", IQ2000_OPERAND_CM_4FUNC, HW_H_UINT, 5, 4,
00427 { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_CM_4FUNC] } },
00428 { 0, { (1<<MACH_BASE) } } },
00429
00430 { "cm-3z", IQ2000_OPERAND_CM_3Z, HW_H_UINT, 1, 2,
00431 { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_CM_3Z] } },
00432 { 0, { (1<<MACH_BASE) } } },
00433
00434 { "cm-4z", IQ2000_OPERAND_CM_4Z, HW_H_UINT, 2, 3,
00435 { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_CM_4Z] } },
00436 { 0, { (1<<MACH_BASE) } } },
00437
00438 { "base", IQ2000_OPERAND_BASE, HW_H_GR, 25, 5,
00439 { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_RS] } },
00440 { 0, { (1<<MACH_BASE) } } },
00441
00442 { "maskr", IQ2000_OPERAND_MASKR, HW_H_UINT, 25, 5,
00443 { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_RS] } },
00444 { 0, { (1<<MACH_BASE) } } },
00445
00446 { "bitnum", IQ2000_OPERAND_BITNUM, HW_H_UINT, 20, 5,
00447 { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_RT] } },
00448 { 0, { (1<<MACH_BASE) } } },
00449
00450 { "hi16", IQ2000_OPERAND_HI16, HW_H_UINT, 15, 16,
00451 { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_IMM] } },
00452 { 0, { (1<<MACH_BASE) } } },
00453
00454 { "lo16", IQ2000_OPERAND_LO16, HW_H_UINT, 15, 16,
00455 { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_IMM] } },
00456 { 0, { (1<<MACH_BASE) } } },
00457
00458 { "mlo16", IQ2000_OPERAND_MLO16, HW_H_UINT, 15, 16,
00459 { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_IMM] } },
00460 { 0, { (1<<MACH_BASE) } } },
00461
00462 { "jmptargq10", IQ2000_OPERAND_JMPTARGQ10, HW_H_IADDR, 20, 21,
00463 { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_JTARGQ10] } },
00464 { 0|A(ABS_ADDR), { (1<<MACH_BASE) } } },
00465
00466 { 0, 0, 0, 0, 0,
00467 { 0, { (const PTR) 0 } },
00468 { 0, { 0 } } }
00469 };
00470
00471 #undef A
00472
00473
00474
00475
00476 #define OP(field) CGEN_SYNTAX_MAKE_FIELD (OPERAND (field))
00477 #if defined (__STDC__) || defined (ALMOST_STDC) || defined (HAVE_STRINGIZE)
00478 #define A(a) (1 << CGEN_INSN_##a)
00479 #else
00480 #define A(a) (1 << CGEN_INSN_a)
00481 #endif
00482
00483 static const CGEN_IBASE iq2000_cgen_insn_table[MAX_INSNS] =
00484 {
00485
00486
00487
00488 { 0, 0, 0, 0, {0, {0}} },
00489
00490 {
00491 -1, "add2", "add", 32,
00492 { 0|A(USES_RT)|A(USES_RS)|A(USES_RD)|A(NO_DIS)|A(ALIAS), { (1<<MACH_BASE) } }
00493 },
00494
00495 {
00496 IQ2000_INSN_ADD, "add", "add", 32,
00497 { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { (1<<MACH_BASE) } }
00498 },
00499
00500 {
00501 -1, "addi2", "addi", 32,
00502 { 0|A(USES_RT)|A(USES_RS)|A(NO_DIS)|A(ALIAS), { (1<<MACH_BASE) } }
00503 },
00504
00505 {
00506 IQ2000_INSN_ADDI, "addi", "addi", 32,
00507 { 0|A(USES_RT)|A(USES_RS), { (1<<MACH_BASE) } }
00508 },
00509
00510 {
00511 -1, "addiu2", "addiu", 32,
00512 { 0|A(USES_RT)|A(USES_RS)|A(NO_DIS)|A(ALIAS), { (1<<MACH_BASE) } }
00513 },
00514
00515 {
00516 IQ2000_INSN_ADDIU, "addiu", "addiu", 32,
00517 { 0|A(USES_RT)|A(USES_RS), { (1<<MACH_BASE) } }
00518 },
00519
00520 {
00521 -1, "addu2", "addu", 32,
00522 { 0|A(USES_RT)|A(USES_RS)|A(USES_RD)|A(NO_DIS)|A(ALIAS), { (1<<MACH_BASE) } }
00523 },
00524
00525 {
00526 IQ2000_INSN_ADDU, "addu", "addu", 32,
00527 { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { (1<<MACH_BASE) } }
00528 },
00529
00530 {
00531 -1, "ado162", "ado16", 32,
00532 { 0|A(USES_RT)|A(USES_RS)|A(USES_RD)|A(NO_DIS)|A(ALIAS), { (1<<MACH_BASE) } }
00533 },
00534
00535 {
00536 IQ2000_INSN_ADO16, "ado16", "ado16", 32,
00537 { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { (1<<MACH_BASE) } }
00538 },
00539
00540 {
00541 -1, "and2", "and", 32,
00542 { 0|A(USES_RT)|A(USES_RS)|A(USES_RD)|A(NO_DIS)|A(ALIAS), { (1<<MACH_BASE) } }
00543 },
00544
00545 {
00546 IQ2000_INSN_AND, "and", "and", 32,
00547 { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { (1<<MACH_BASE) } }
00548 },
00549
00550 {
00551 -1, "andi2", "andi", 32,
00552 { 0|A(USES_RT)|A(USES_RS)|A(NO_DIS)|A(ALIAS), { (1<<MACH_BASE) } }
00553 },
00554
00555 {
00556 IQ2000_INSN_ANDI, "andi", "andi", 32,
00557 { 0|A(USES_RT)|A(USES_RS), { (1<<MACH_BASE) } }
00558 },
00559
00560 {
00561 -1, "andoi2", "andoi", 32,
00562 { 0|A(USES_RT)|A(USES_RS)|A(NO_DIS)|A(ALIAS), { (1<<MACH_BASE) } }
00563 },
00564
00565 {
00566 IQ2000_INSN_ANDOI, "andoi", "andoi", 32,
00567 { 0|A(USES_RT)|A(USES_RS), { (1<<MACH_BASE) } }
00568 },
00569
00570 {
00571 -1, "nor2", "nor", 32,
00572 { 0|A(USES_RT)|A(USES_RS)|A(USES_RD)|A(NO_DIS)|A(ALIAS), { (1<<MACH_BASE) } }
00573 },
00574
00575 {
00576 IQ2000_INSN_NOR, "nor", "nor", 32,
00577 { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { (1<<MACH_BASE) } }
00578 },
00579
00580 {
00581 -1, "or2", "or", 32,
00582 { 0|A(USES_RT)|A(USES_RS)|A(USES_RD)|A(NO_DIS)|A(ALIAS), { (1<<MACH_BASE) } }
00583 },
00584
00585 {
00586 IQ2000_INSN_OR, "or", "or", 32,
00587 { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { (1<<MACH_BASE) } }
00588 },
00589
00590 {
00591 -1, "ori2", "ori", 32,
00592 { 0|A(USES_RT)|A(USES_RS)|A(NO_DIS)|A(ALIAS), { (1<<MACH_BASE) } }
00593 },
00594
00595 {
00596 IQ2000_INSN_ORI, "ori", "ori", 32,
00597 { 0|A(USES_RT)|A(USES_RS), { (1<<MACH_BASE) } }
00598 },
00599
00600 {
00601 IQ2000_INSN_RAM, "ram", "ram", 32,
00602 { 0|A(USES_RT)|A(USES_RD), { (1<<MACH_BASE) } }
00603 },
00604
00605 {
00606 IQ2000_INSN_SLL, "sll", "sll", 32,
00607 { 0|A(USES_RT)|A(USES_RD), { (1<<MACH_BASE) } }
00608 },
00609
00610 {
00611 -1, "sllv2", "sllv", 32,
00612 { 0|A(USES_RT)|A(USES_RS)|A(USES_RD)|A(NO_DIS)|A(ALIAS), { (1<<MACH_BASE) } }
00613 },
00614
00615 {
00616 IQ2000_INSN_SLLV, "sllv", "sllv", 32,
00617 { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { (1<<MACH_BASE) } }
00618 },
00619
00620 {
00621 -1, "slmv2", "slmv", 32,
00622 { 0|A(USES_RT)|A(USES_RS)|A(USES_RD)|A(NO_DIS)|A(ALIAS), { (1<<MACH_BASE) } }
00623 },
00624
00625 {
00626 IQ2000_INSN_SLMV, "slmv", "slmv", 32,
00627 { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { (1<<MACH_BASE) } }
00628 },
00629
00630 {
00631 -1, "slt2", "slt", 32,
00632 { 0|A(USES_RT)|A(USES_RS)|A(USES_RD)|A(NO_DIS)|A(ALIAS), { (1<<MACH_BASE) } }
00633 },
00634
00635 {
00636 IQ2000_INSN_SLT, "slt", "slt", 32,
00637 { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { (1<<MACH_BASE) } }
00638 },
00639
00640 {
00641 -1, "slti2", "slti", 32,
00642 { 0|A(USES_RT)|A(USES_RS)|A(NO_DIS)|A(ALIAS), { (1<<MACH_BASE) } }
00643 },
00644
00645 {
00646 IQ2000_INSN_SLTI, "slti", "slti", 32,
00647 { 0|A(USES_RT)|A(USES_RS), { (1<<MACH_BASE) } }
00648 },
00649
00650 {
00651 -1, "sltiu2", "sltiu", 32,
00652 { 0|A(USES_RT)|A(USES_RS)|A(NO_DIS)|A(ALIAS), { (1<<MACH_BASE) } }
00653 },
00654
00655 {
00656 IQ2000_INSN_SLTIU, "sltiu", "sltiu", 32,
00657 { 0|A(USES_RT)|A(USES_RS), { (1<<MACH_BASE) } }
00658 },
00659
00660 {
00661 -1, "sltu2", "sltu", 32,
00662 { 0|A(USES_RT)|A(USES_RS)|A(USES_RD)|A(NO_DIS)|A(ALIAS), { (1<<MACH_BASE) } }
00663 },
00664
00665 {
00666 IQ2000_INSN_SLTU, "sltu", "sltu", 32,
00667 { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { (1<<MACH_BASE) } }
00668 },
00669
00670 {
00671 -1, "sra2", "sra", 32,
00672 { 0|A(USES_RT)|A(USES_RD)|A(NO_DIS)|A(ALIAS), { (1<<MACH_BASE) } }
00673 },
00674
00675 {
00676 IQ2000_INSN_SRA, "sra", "sra", 32,
00677 { 0|A(USES_RT)|A(USES_RD), { (1<<MACH_BASE) } }
00678 },
00679
00680 {
00681 -1, "srav2", "srav", 32,
00682 { 0|A(USES_RT)|A(USES_RS)|A(USES_RD)|A(NO_DIS)|A(ALIAS), { (1<<MACH_BASE) } }
00683 },
00684
00685 {
00686 IQ2000_INSN_SRAV, "srav", "srav", 32,
00687 { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { (1<<MACH_BASE) } }
00688 },
00689
00690 {
00691 IQ2000_INSN_SRL, "srl", "srl", 32,
00692 { 0|A(USES_RT)|A(USES_RD), { (1<<MACH_BASE) } }
00693 },
00694
00695 {
00696 -1, "srlv2", "srlv", 32,
00697 { 0|A(USES_RT)|A(USES_RS)|A(USES_RD)|A(NO_DIS)|A(ALIAS), { (1<<MACH_BASE) } }
00698 },
00699
00700 {
00701 IQ2000_INSN_SRLV, "srlv", "srlv", 32,
00702 { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { (1<<MACH_BASE) } }
00703 },
00704
00705 {
00706 -1, "srmv2", "srmv", 32,
00707 { 0|A(USES_RT)|A(USES_RS)|A(USES_RD)|A(NO_DIS)|A(ALIAS), { (1<<MACH_BASE) } }
00708 },
00709
00710 {
00711 IQ2000_INSN_SRMV, "srmv", "srmv", 32,
00712 { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { (1<<MACH_BASE) } }
00713 },
00714
00715 {
00716 -1, "sub2", "sub", 32,
00717 { 0|A(USES_RT)|A(USES_RS)|A(USES_RD)|A(NO_DIS)|A(ALIAS), { (1<<MACH_BASE) } }
00718 },
00719
00720 {
00721 IQ2000_INSN_SUB, "sub", "sub", 32,
00722 { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { (1<<MACH_BASE) } }
00723 },
00724
00725 {
00726 -1, "subu2", "subu", 32,
00727 { 0|A(USES_RT)|A(USES_RS)|A(USES_RD)|A(NO_DIS)|A(ALIAS), { (1<<MACH_BASE) } }
00728 },
00729
00730 {
00731 IQ2000_INSN_SUBU, "subu", "subu", 32,
00732 { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { (1<<MACH_BASE) } }
00733 },
00734
00735 {
00736 -1, "xor2", "xor", 32,
00737 { 0|A(USES_RT)|A(USES_RS)|A(USES_RD)|A(NO_DIS)|A(ALIAS), { (1<<MACH_BASE) } }
00738 },
00739
00740 {
00741 IQ2000_INSN_XOR, "xor", "xor", 32,
00742 { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { (1<<MACH_BASE) } }
00743 },
00744
00745 {
00746 -1, "xori2", "xori", 32,
00747 { 0|A(USES_RT)|A(USES_RS)|A(NO_DIS)|A(ALIAS), { (1<<MACH_BASE) } }
00748 },
00749
00750 {
00751 IQ2000_INSN_XORI, "xori", "xori", 32,
00752 { 0|A(USES_RT)|A(USES_RS), { (1<<MACH_BASE) } }
00753 },
00754
00755 {
00756 IQ2000_INSN_BBI, "bbi", "bbi", 32,
00757 { 0|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { (1<<MACH_BASE) } }
00758 },
00759
00760 {
00761 IQ2000_INSN_BBIN, "bbin", "bbin", 32,
00762 { 0|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { (1<<MACH_BASE) } }
00763 },
00764
00765 {
00766 IQ2000_INSN_BBV, "bbv", "bbv", 32,
00767 { 0|A(USES_RT)|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { (1<<MACH_BASE) } }
00768 },
00769
00770 {
00771 IQ2000_INSN_BBVN, "bbvn", "bbvn", 32,
00772 { 0|A(USES_RT)|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { (1<<MACH_BASE) } }
00773 },
00774
00775 {
00776 IQ2000_INSN_BEQ, "beq", "beq", 32,
00777 { 0|A(USES_RT)|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { (1<<MACH_BASE) } }
00778 },
00779
00780 {
00781 IQ2000_INSN_BEQL, "beql", "beql", 32,
00782 { 0|A(USES_RT)|A(USES_RS)|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { (1<<MACH_BASE) } }
00783 },
00784
00785 {
00786 IQ2000_INSN_BGEZ, "bgez", "bgez", 32,
00787 { 0|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { (1<<MACH_BASE) } }
00788 },
00789
00790 {
00791 IQ2000_INSN_BGEZAL, "bgezal", "bgezal", 32,
00792 { 0|A(USES_R31)|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { (1<<MACH_BASE) } }
00793 },
00794
00795 {
00796 IQ2000_INSN_BGEZALL, "bgezall", "bgezall", 32,
00797 { 0|A(USES_R31)|A(USES_RS)|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { (1<<MACH_BASE) } }
00798 },
00799
00800 {
00801 IQ2000_INSN_BGEZL, "bgezl", "bgezl", 32,
00802 { 0|A(USES_RS)|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { (1<<MACH_BASE) } }
00803 },
00804
00805 {
00806 IQ2000_INSN_BLTZ, "bltz", "bltz", 32,
00807 { 0|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { (1<<MACH_BASE) } }
00808 },
00809
00810 {
00811 IQ2000_INSN_BLTZL, "bltzl", "bltzl", 32,
00812 { 0|A(USES_RS)|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { (1<<MACH_BASE) } }
00813 },
00814
00815 {
00816 IQ2000_INSN_BLTZAL, "bltzal", "bltzal", 32,
00817 { 0|A(USES_R31)|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { (1<<MACH_BASE) } }
00818 },
00819
00820 {
00821 IQ2000_INSN_BLTZALL, "bltzall", "bltzall", 32,
00822 { 0|A(USES_R31)|A(USES_RS)|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { (1<<MACH_BASE) } }
00823 },
00824
00825 {
00826 IQ2000_INSN_BMB0, "bmb0", "bmb0", 32,
00827 { 0|A(USES_RT)|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { (1<<MACH_BASE) } }
00828 },
00829
00830 {
00831 IQ2000_INSN_BMB1, "bmb1", "bmb1", 32,
00832 { 0|A(USES_RT)|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { (1<<MACH_BASE) } }
00833 },
00834
00835 {
00836 IQ2000_INSN_BMB2, "bmb2", "bmb2", 32,
00837 { 0|A(USES_RT)|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { (1<<MACH_BASE) } }
00838 },
00839
00840 {
00841 IQ2000_INSN_BMB3, "bmb3", "bmb3", 32,
00842 { 0|A(USES_RT)|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { (1<<MACH_BASE) } }
00843 },
00844
00845 {
00846 IQ2000_INSN_BNE, "bne", "bne", 32,
00847 { 0|A(USES_RT)|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { (1<<MACH_BASE) } }
00848 },
00849
00850 {
00851 IQ2000_INSN_BNEL, "bnel", "bnel", 32,
00852 { 0|A(USES_RT)|A(USES_RS)|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { (1<<MACH_BASE) } }
00853 },
00854
00855 {
00856 IQ2000_INSN_JALR, "jalr", "jalr", 32,
00857 { 0|A(USES_RS)|A(USES_RD)|A(UNCOND_CTI)|A(DELAY_SLOT), { (1<<MACH_BASE) } }
00858 },
00859
00860 {
00861 IQ2000_INSN_JR, "jr", "jr", 32,
00862 { 0|A(USES_RS)|A(UNCOND_CTI)|A(DELAY_SLOT), { (1<<MACH_BASE) } }
00863 },
00864
00865 {
00866 IQ2000_INSN_LB, "lb", "lb", 32,
00867 { 0|A(USES_RT)|A(USES_RS)|A(LOAD_DELAY), { (1<<MACH_BASE) } }
00868 },
00869
00870 {
00871 IQ2000_INSN_LBU, "lbu", "lbu", 32,
00872 { 0|A(USES_RT)|A(USES_RS)|A(LOAD_DELAY), { (1<<MACH_BASE) } }
00873 },
00874
00875 {
00876 IQ2000_INSN_LH, "lh", "lh", 32,
00877 { 0|A(USES_RT)|A(USES_RS)|A(LOAD_DELAY), { (1<<MACH_BASE) } }
00878 },
00879
00880 {
00881 IQ2000_INSN_LHU, "lhu", "lhu", 32,
00882 { 0|A(USES_RT)|A(USES_RS)|A(LOAD_DELAY), { (1<<MACH_BASE) } }
00883 },
00884
00885 {
00886 IQ2000_INSN_LUI, "lui", "lui", 32,
00887 { 0|A(USES_RT), { (1<<MACH_BASE) } }
00888 },
00889
00890 {
00891 IQ2000_INSN_LW, "lw", "lw", 32,
00892 { 0|A(USES_RT)|A(USES_RS)|A(LOAD_DELAY), { (1<<MACH_BASE) } }
00893 },
00894
00895 {
00896 IQ2000_INSN_SB, "sb", "sb", 32,
00897 { 0|A(USES_RT)|A(USES_RS), { (1<<MACH_BASE) } }
00898 },
00899
00900 {
00901 IQ2000_INSN_SH, "sh", "sh", 32,
00902 { 0|A(USES_RT)|A(USES_RS), { (1<<MACH_BASE) } }
00903 },
00904
00905 {
00906 IQ2000_INSN_SW, "sw", "sw", 32,
00907 { 0|A(USES_RT)|A(USES_RS), { (1<<MACH_BASE) } }
00908 },
00909
00910 {
00911 IQ2000_INSN_BREAK, "break", "break", 32,
00912 { 0, { (1<<MACH_BASE) } }
00913 },
00914
00915 {
00916 IQ2000_INSN_SYSCALL, "syscall", "syscall", 32,
00917 { 0|A(YIELD_INSN), { (1<<MACH_BASE) } }
00918 },
00919
00920 {
00921 IQ2000_INSN_ANDOUI, "andoui", "andoui", 32,
00922 { 0|A(USES_RT)|A(USES_RS), { (1<<MACH_IQ2000) } }
00923 },
00924
00925 {
00926 -1, "andoui2", "andoui", 32,
00927 { 0|A(USES_RT)|A(USES_RS)|A(NO_DIS)|A(ALIAS), { (1<<MACH_IQ2000) } }
00928 },
00929
00930 {
00931 -1, "orui2", "orui", 32,
00932 { 0|A(USES_RT)|A(USES_RS)|A(NO_DIS)|A(ALIAS), { (1<<MACH_IQ2000) } }
00933 },
00934
00935 {
00936 IQ2000_INSN_ORUI, "orui", "orui", 32,
00937 { 0|A(USES_RT)|A(USES_RS), { (1<<MACH_IQ2000) } }
00938 },
00939
00940 {
00941 IQ2000_INSN_BGTZ, "bgtz", "bgtz", 32,
00942 { 0|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { (1<<MACH_IQ2000) } }
00943 },
00944
00945 {
00946 IQ2000_INSN_BGTZL, "bgtzl", "bgtzl", 32,
00947 { 0|A(USES_RS)|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { (1<<MACH_IQ2000) } }
00948 },
00949
00950 {
00951 IQ2000_INSN_BLEZ, "blez", "blez", 32,
00952 { 0|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { (1<<MACH_IQ2000) } }
00953 },
00954
00955 {
00956 IQ2000_INSN_BLEZL, "blezl", "blezl", 32,
00957 { 0|A(USES_RS)|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { (1<<MACH_IQ2000) } }
00958 },
00959
00960 {
00961 IQ2000_INSN_MRGB, "mrgb", "mrgb", 32,
00962 { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { (1<<MACH_IQ2000) } }
00963 },
00964
00965 {
00966 -1, "mrgb2", "mrgb", 32,
00967 { 0|A(USES_RT)|A(USES_RS)|A(USES_RD)|A(NO_DIS)|A(ALIAS), { (1<<MACH_IQ2000) } }
00968 },
00969
00970 {
00971 IQ2000_INSN_BCTXT, "bctxt", "bctxt", 32,
00972 { 0|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { (1<<MACH_IQ2000) } }
00973 },
00974
00975 {
00976 IQ2000_INSN_BC0F, "bc0f", "bc0f", 32,
00977 { 0|A(COND_CTI)|A(DELAY_SLOT), { (1<<MACH_IQ2000) } }
00978 },
00979
00980 {
00981 IQ2000_INSN_BC0FL, "bc0fl", "bc0fl", 32,
00982 { 0|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { (1<<MACH_IQ2000) } }
00983 },
00984
00985 {
00986 IQ2000_INSN_BC3F, "bc3f", "bc3f", 32,
00987 { 0|A(COND_CTI)|A(DELAY_SLOT), { (1<<MACH_IQ2000) } }
00988 },
00989
00990 {
00991 IQ2000_INSN_BC3FL, "bc3fl", "bc3fl", 32,
00992 { 0|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { (1<<MACH_IQ2000) } }
00993 },
00994
00995 {
00996 IQ2000_INSN_BC0T, "bc0t", "bc0t", 32,
00997 { 0|A(COND_CTI)|A(DELAY_SLOT), { (1<<MACH_IQ2000) } }
00998 },
00999
01000 {
01001 IQ2000_INSN_BC0TL, "bc0tl", "bc0tl", 32,
01002 { 0|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { (1<<MACH_IQ2000) } }
01003 },
01004
01005 {
01006 IQ2000_INSN_BC3T, "bc3t", "bc3t", 32,
01007 { 0|A(COND_CTI)|A(DELAY_SLOT), { (1<<MACH_IQ2000) } }
01008 },
01009
01010 {
01011 IQ2000_INSN_BC3TL, "bc3tl", "bc3tl", 32,
01012 { 0|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { (1<<MACH_IQ2000) } }
01013 },
01014
01015 {
01016 IQ2000_INSN_CFC0, "cfc0", "cfc0", 32,
01017 { 0|A(USES_RT)|A(LOAD_DELAY), { (1<<MACH_IQ2000) } }
01018 },
01019
01020 {
01021 IQ2000_INSN_CFC1, "cfc1", "cfc1", 32,
01022 { 0|A(USES_RT)|A(LOAD_DELAY), { (1<<MACH_IQ2000) } }
01023 },
01024
01025 {
01026 IQ2000_INSN_CFC2, "cfc2", "cfc2", 32,
01027 { 0|A(YIELD_INSN)|A(USES_RT)|A(LOAD_DELAY), { (1<<MACH_IQ2000) } }
01028 },
01029
01030 {
01031 IQ2000_INSN_CFC3, "cfc3", "cfc3", 32,
01032 { 0|A(YIELD_INSN)|A(USES_RT)|A(LOAD_DELAY), { (1<<MACH_IQ2000) } }
01033 },
01034
01035 {
01036 IQ2000_INSN_CHKHDR, "chkhdr", "chkhdr", 32,
01037 { 0|A(YIELD_INSN)|A(USES_RD)|A(LOAD_DELAY), { (1<<MACH_IQ2000) } }
01038 },
01039
01040 {
01041 IQ2000_INSN_CTC0, "ctc0", "ctc0", 32,
01042 { 0|A(USES_RT), { (1<<MACH_IQ2000) } }
01043 },
01044
01045 {
01046 IQ2000_INSN_CTC1, "ctc1", "ctc1", 32,
01047 { 0|A(USES_RT), { (1<<MACH_IQ2000) } }
01048 },
01049
01050 {
01051 IQ2000_INSN_CTC2, "ctc2", "ctc2", 32,
01052 { 0|A(USES_RT), { (1<<MACH_IQ2000) } }
01053 },
01054
01055 {
01056 IQ2000_INSN_CTC3, "ctc3", "ctc3", 32,
01057 { 0|A(USES_RT), { (1<<MACH_IQ2000) } }
01058 },
01059
01060 {
01061 IQ2000_INSN_JCR, "jcr", "jcr", 32,
01062 { 0|A(USES_RS)|A(UNCOND_CTI)|A(DELAY_SLOT), { (1<<MACH_IQ2000) } }
01063 },
01064
01065 {
01066 IQ2000_INSN_LUC32, "luc32", "luc32", 32,
01067 { 0|A(YIELD_INSN)|A(USES_RT)|A(USES_RD), { (1<<MACH_IQ2000) } }
01068 },
01069
01070 {
01071 IQ2000_INSN_LUC32L, "luc32l", "luc32l", 32,
01072 { 0|A(YIELD_INSN)|A(USES_RT)|A(USES_RD), { (1<<MACH_IQ2000) } }
01073 },
01074
01075 {
01076 IQ2000_INSN_LUC64, "luc64", "luc64", 32,
01077 { 0|A(YIELD_INSN)|A(USES_RT)|A(USES_RD), { (1<<MACH_IQ2000) } }
01078 },
01079
01080 {
01081 IQ2000_INSN_LUC64L, "luc64l", "luc64l", 32,
01082 { 0|A(YIELD_INSN)|A(USES_RT)|A(USES_RD), { (1<<MACH_IQ2000) } }
01083 },
01084
01085 {
01086 IQ2000_INSN_LUK, "luk", "luk", 32,
01087 { 0|A(USES_RT)|A(USES_RD), { (1<<MACH_IQ2000) } }
01088 },
01089
01090 {
01091 IQ2000_INSN_LULCK, "lulck", "lulck", 32,
01092 { 0|A(YIELD_INSN)|A(USES_RT), { (1<<MACH_IQ2000) } }
01093 },
01094
01095 {
01096 IQ2000_INSN_LUM32, "lum32", "lum32", 32,
01097 { 0|A(YIELD_INSN)|A(USES_RT)|A(USES_RD), { (1<<MACH_IQ2000) } }
01098 },
01099
01100 {
01101 IQ2000_INSN_LUM32L, "lum32l", "lum32l", 32,
01102 { 0|A(YIELD_INSN)|A(USES_RT)|A(USES_RD), { (1<<MACH_IQ2000) } }
01103 },
01104
01105 {
01106 IQ2000_INSN_LUM64, "lum64", "lum64", 32,
01107 { 0|A(YIELD_INSN)|A(USES_RT)|A(USES_RD), { (1<<MACH_IQ2000) } }
01108 },
01109
01110 {
01111 IQ2000_INSN_LUM64L, "lum64l", "lum64l", 32,
01112 { 0|A(YIELD_INSN)|A(USES_RT)|A(USES_RD), { (1<<MACH_IQ2000) } }
01113 },
01114
01115 {
01116 IQ2000_INSN_LUR, "lur", "lur", 32,
01117 { 0|A(YIELD_INSN)|A(USES_RT)|A(USES_RD), { (1<<MACH_IQ2000) } }
01118 },
01119
01120 {
01121 IQ2000_INSN_LURL, "lurl", "lurl", 32,
01122 { 0|A(YIELD_INSN)|A(USES_RT)|A(USES_RD), { (1<<MACH_IQ2000) } }
01123 },
01124
01125 {
01126 IQ2000_INSN_LUULCK, "luulck", "luulck", 32,
01127 { 0|A(YIELD_INSN)|A(USES_RT), { (1<<MACH_IQ2000) } }
01128 },
01129
01130 {
01131 IQ2000_INSN_MFC0, "mfc0", "mfc0", 32,
01132 { 0|A(USES_RT)|A(LOAD_DELAY), { (1<<MACH_IQ2000) } }
01133 },
01134
01135 {
01136 IQ2000_INSN_MFC1, "mfc1", "mfc1", 32,
01137 { 0|A(USES_RT)|A(LOAD_DELAY), { (1<<MACH_IQ2000) } }
01138 },
01139
01140 {
01141 IQ2000_INSN_MFC2, "mfc2", "mfc2", 32,
01142 { 0|A(YIELD_INSN)|A(USES_RT)|A(LOAD_DELAY), { (1<<MACH_IQ2000) } }
01143 },
01144
01145 {
01146 IQ2000_INSN_MFC3, "mfc3", "mfc3", 32,
01147 { 0|A(YIELD_INSN)|A(USES_RT)|A(LOAD_DELAY), { (1<<MACH_IQ2000) } }
01148 },
01149
01150 {
01151 IQ2000_INSN_MTC0, "mtc0", "mtc0", 32,
01152 { 0|A(USES_RT), { (1<<MACH_IQ2000) } }
01153 },
01154
01155 {
01156 IQ2000_INSN_MTC1, "mtc1", "mtc1", 32,
01157 { 0|A(USES_RT), { (1<<MACH_IQ2000) } }
01158 },
01159
01160 {
01161 IQ2000_INSN_MTC2, "mtc2", "mtc2", 32,
01162 { 0|A(USES_RT), { (1<<MACH_IQ2000) } }
01163 },
01164
01165 {
01166 IQ2000_INSN_MTC3, "mtc3", "mtc3", 32,
01167 { 0|A(USES_RT), { (1<<MACH_IQ2000) } }
01168 },
01169
01170 {
01171 IQ2000_INSN_PKRL, "pkrl", "pkrl", 32,
01172 { 0|A(YIELD_INSN)|A(USES_RT)|A(USES_RD), { (1<<MACH_IQ2000) } }
01173 },
01174
01175 {
01176 IQ2000_INSN_PKRLR1, "pkrlr1", "pkrlr1", 32,
01177 { 0|A(YIELD_INSN)|A(USES_RT), { (1<<MACH_IQ2000) } }
01178 },
01179
01180 {
01181 IQ2000_INSN_PKRLR30, "pkrlr30", "pkrlr30", 32,
01182 { 0|A(YIELD_INSN)|A(USES_RT), { (1<<MACH_IQ2000) } }
01183 },
01184
01185 {
01186 IQ2000_INSN_RB, "rb", "rb", 32,
01187 { 0|A(YIELD_INSN)|A(USES_RT)|A(USES_RD), { (1<<MACH_IQ2000) } }
01188 },
01189
01190 {
01191 IQ2000_INSN_RBR1, "rbr1", "rbr1", 32,
01192 { 0|A(YIELD_INSN)|A(USES_RT), { (1<<MACH_IQ2000) } }
01193 },
01194
01195 {
01196 IQ2000_INSN_RBR30, "rbr30", "rbr30", 32,
01197 { 0|A(YIELD_INSN)|A(USES_RT), { (1<<MACH_IQ2000) } }
01198 },
01199
01200 {
01201 IQ2000_INSN_RFE, "rfe", "rfe", 32,
01202 { 0, { (1<<MACH_IQ2000) } }
01203 },
01204
01205 {
01206 IQ2000_INSN_RX, "rx", "rx", 32,
01207 { 0|A(YIELD_INSN)|A(USES_RT)|A(USES_RD), { (1<<MACH_IQ2000) } }
01208 },
01209
01210 {
01211 IQ2000_INSN_RXR1, "rxr1", "rxr1", 32,
01212 { 0|A(YIELD_INSN)|A(USES_RT), { (1<<MACH_IQ2000) } }
01213 },
01214
01215 {
01216 IQ2000_INSN_RXR30, "rxr30", "rxr30", 32,
01217 { 0|A(YIELD_INSN)|A(USES_RT), { (1<<MACH_IQ2000) } }
01218 },
01219
01220 {
01221 IQ2000_INSN_SLEEP, "sleep", "sleep", 32,
01222 { 0|A(YIELD_INSN), { (1<<MACH_IQ2000) } }
01223 },
01224
01225 {
01226 IQ2000_INSN_SRRD, "srrd", "srrd", 32,
01227 { 0|A(YIELD_INSN)|A(USES_RT), { (1<<MACH_IQ2000) } }
01228 },
01229
01230 {
01231 IQ2000_INSN_SRRDL, "srrdl", "srrdl", 32,
01232 { 0|A(YIELD_INSN)|A(USES_RT), { (1<<MACH_IQ2000) } }
01233 },
01234
01235 {
01236 IQ2000_INSN_SRULCK, "srulck", "srulck", 32,
01237 { 0|A(YIELD_INSN)|A(USES_RT), { (1<<MACH_IQ2000) } }
01238 },
01239
01240 {
01241 IQ2000_INSN_SRWR, "srwr", "srwr", 32,
01242 { 0|A(YIELD_INSN)|A(USES_RT)|A(USES_RD), { (1<<MACH_IQ2000) } }
01243 },
01244
01245 {
01246 IQ2000_INSN_SRWRU, "srwru", "srwru", 32,
01247 { 0|A(YIELD_INSN)|A(USES_RT)|A(USES_RD), { (1<<MACH_IQ2000) } }
01248 },
01249
01250 {
01251 IQ2000_INSN_TRAPQFL, "trapqfl", "trapqfl", 32,
01252 { 0|A(YIELD_INSN), { (1<<MACH_IQ2000) } }
01253 },
01254
01255 {
01256 IQ2000_INSN_TRAPQNE, "trapqne", "trapqne", 32,
01257 { 0|A(YIELD_INSN), { (1<<MACH_IQ2000) } }
01258 },
01259
01260 {
01261 IQ2000_INSN_TRAPREL, "traprel", "traprel", 32,
01262 { 0|A(YIELD_INSN)|A(USES_RT), { (1<<MACH_IQ2000) } }
01263 },
01264
01265 {
01266 IQ2000_INSN_WB, "wb", "wb", 32,
01267 { 0|A(YIELD_INSN)|A(USES_RT)|A(USES_RD), { (1<<MACH_IQ2000) } }
01268 },
01269
01270 {
01271 IQ2000_INSN_WBU, "wbu", "wbu", 32,
01272 { 0|A(YIELD_INSN)|A(USES_RT)|A(USES_RD), { (1<<MACH_IQ2000) } }
01273 },
01274
01275 {
01276 IQ2000_INSN_WBR1, "wbr1", "wbr1", 32,
01277 { 0|A(YIELD_INSN)|A(USES_RT), { (1<<MACH_IQ2000) } }
01278 },
01279
01280 {
01281 IQ2000_INSN_WBR1U, "wbr1u", "wbr1u", 32,
01282 { 0|A(YIELD_INSN)|A(USES_RT), { (1<<MACH_IQ2000) } }
01283 },
01284
01285 {
01286 IQ2000_INSN_WBR30, "wbr30", "wbr30", 32,
01287 { 0|A(YIELD_INSN)|A(USES_RT), { (1<<MACH_IQ2000) } }
01288 },
01289
01290 {
01291 IQ2000_INSN_WBR30U, "wbr30u", "wbr30u", 32,
01292 { 0|A(YIELD_INSN)|A(USES_RT), { (1<<MACH_IQ2000) } }
01293 },
01294
01295 {
01296 IQ2000_INSN_WX, "wx", "wx", 32,
01297 { 0|A(YIELD_INSN)|A(USES_RT)|A(USES_RD), { (1<<MACH_IQ2000) } }
01298 },
01299
01300 {
01301 IQ2000_INSN_WXU, "wxu", "wxu", 32,
01302 { 0|A(YIELD_INSN)|A(USES_RT)|A(USES_RD), { (1<<MACH_IQ2000) } }
01303 },
01304
01305 {
01306 IQ2000_INSN_WXR1, "wxr1", "wxr1", 32,
01307 { 0|A(YIELD_INSN)|A(USES_RT), { (1<<MACH_IQ2000) } }
01308 },
01309
01310 {
01311 IQ2000_INSN_WXR1U, "wxr1u", "wxr1u", 32,
01312 { 0|A(YIELD_INSN)|A(USES_RT), { (1<<MACH_IQ2000) } }
01313 },
01314
01315 {
01316 IQ2000_INSN_WXR30, "wxr30", "wxr30", 32,
01317 { 0|A(YIELD_INSN)|A(USES_RT), { (1<<MACH_IQ2000) } }
01318 },
01319
01320 {
01321 IQ2000_INSN_WXR30U, "wxr30u", "wxr30u", 32,
01322 { 0|A(YIELD_INSN)|A(USES_RT), { (1<<MACH_IQ2000) } }
01323 },
01324
01325 {
01326 IQ2000_INSN_LDW, "ldw", "ldw", 32,
01327 { 0|A(USES_RT)|A(LOAD_DELAY)|A(EVEN_REG_NUM), { (1<<MACH_IQ2000) } }
01328 },
01329
01330 {
01331 IQ2000_INSN_SDW, "sdw", "sdw", 32,
01332 { 0|A(USES_RT)|A(EVEN_REG_NUM), { (1<<MACH_IQ2000) } }
01333 },
01334
01335 {
01336 IQ2000_INSN_J, "j", "j", 32,
01337 { 0|A(UNCOND_CTI)|A(DELAY_SLOT), { (1<<MACH_IQ2000) } }
01338 },
01339
01340 {
01341 IQ2000_INSN_JAL, "jal", "jal", 32,
01342 { 0|A(USES_R31)|A(UNCOND_CTI)|A(DELAY_SLOT), { (1<<MACH_IQ2000) } }
01343 },
01344
01345 {
01346 IQ2000_INSN_BMB, "bmb", "bmb", 32,
01347 { 0|A(USES_RT)|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { (1<<MACH_IQ2000) } }
01348 },
01349
01350 {
01351 IQ2000_INSN_ANDOUI_Q10, "andoui-q10", "andoui", 32,
01352 { 0|A(USES_RT)|A(USES_RS), { (1<<MACH_IQ10) } }
01353 },
01354
01355 {
01356 -1, "andoui2-q10", "andoui", 32,
01357 { 0|A(USES_RT)|A(USES_RS)|A(NO_DIS)|A(ALIAS), { (1<<MACH_IQ10) } }
01358 },
01359
01360 {
01361 IQ2000_INSN_ORUI_Q10, "orui-q10", "orui", 32,
01362 { 0|A(USES_RT)|A(USES_RS), { (1<<MACH_IQ10) } }
01363 },
01364
01365 {
01366 -1, "orui2-q10", "orui", 32,
01367 { 0|A(USES_RT)|A(USES_RS)|A(NO_DIS)|A(ALIAS), { (1<<MACH_IQ10) } }
01368 },
01369
01370 {
01371 IQ2000_INSN_MRGBQ10, "mrgbq10", "mrgb", 32,
01372 { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { (1<<MACH_IQ10) } }
01373 },
01374
01375 {
01376 -1, "mrgbq102", "mrgb", 32,
01377 { 0|A(USES_RT)|A(USES_RS)|A(USES_RD)|A(NO_DIS)|A(ALIAS), { (1<<MACH_IQ10) } }
01378 },
01379
01380 {
01381 IQ2000_INSN_JQ10, "jq10", "j", 32,
01382 { 0|A(UNCOND_CTI)|A(DELAY_SLOT), { (1<<MACH_IQ10) } }
01383 },
01384
01385 {
01386 IQ2000_INSN_JALQ10, "jalq10", "jal", 32,
01387 { 0|A(USES_RT)|A(UNCOND_CTI)|A(DELAY_SLOT), { (1<<MACH_IQ10) } }
01388 },
01389
01390 {
01391 IQ2000_INSN_JALQ10_2, "jalq10-2", "jal", 32,
01392 { 0|A(USES_RT)|A(UNCOND_CTI)|A(DELAY_SLOT), { (1<<MACH_IQ10) } }
01393 },
01394
01395 {
01396 IQ2000_INSN_BBIL, "bbil", "bbil", 32,
01397 { 0|A(USES_RS)|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { (1<<MACH_IQ10) } }
01398 },
01399
01400 {
01401 IQ2000_INSN_BBINL, "bbinl", "bbinl", 32,
01402 { 0|A(USES_RS)|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { (1<<MACH_IQ10) } }
01403 },
01404
01405 {
01406 IQ2000_INSN_BBVL, "bbvl", "bbvl", 32,
01407 { 0|A(USES_RT)|A(USES_RS)|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { (1<<MACH_IQ10) } }
01408 },
01409
01410 {
01411 IQ2000_INSN_BBVNL, "bbvnl", "bbvnl", 32,
01412 { 0|A(USES_RT)|A(USES_RS)|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { (1<<MACH_IQ10) } }
01413 },
01414
01415 {
01416 IQ2000_INSN_BGTZAL, "bgtzal", "bgtzal", 32,
01417 { 0|A(USES_R31)|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { (1<<MACH_IQ10) } }
01418 },
01419
01420 {
01421 IQ2000_INSN_BGTZALL, "bgtzall", "bgtzall", 32,
01422 { 0|A(USES_R31)|A(USES_RS)|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { (1<<MACH_IQ10) } }
01423 },
01424
01425 {
01426 IQ2000_INSN_BLEZAL, "blezal", "blezal", 32,
01427 { 0|A(USES_R31)|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { (1<<MACH_IQ10) } }
01428 },
01429
01430 {
01431 IQ2000_INSN_BLEZALL, "blezall", "blezall", 32,
01432 { 0|A(USES_R31)|A(USES_RS)|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { (1<<MACH_IQ10) } }
01433 },
01434
01435 {
01436 IQ2000_INSN_BGTZ_Q10, "bgtz-q10", "bgtz", 32,
01437 { 0|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { (1<<MACH_IQ10) } }
01438 },
01439
01440 {
01441 IQ2000_INSN_BGTZL_Q10, "bgtzl-q10", "bgtzl", 32,
01442 { 0|A(USES_RS)|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { (1<<MACH_IQ10) } }
01443 },
01444
01445 {
01446 IQ2000_INSN_BLEZ_Q10, "blez-q10", "blez", 32,
01447 { 0|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { (1<<MACH_IQ10) } }
01448 },
01449
01450 {
01451 IQ2000_INSN_BLEZL_Q10, "blezl-q10", "blezl", 32,
01452 { 0|A(USES_RS)|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { (1<<MACH_IQ10) } }
01453 },
01454
01455 {
01456 IQ2000_INSN_BMB_Q10, "bmb-q10", "bmb", 32,
01457 { 0|A(USES_RT)|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { (1<<MACH_IQ10) } }
01458 },
01459
01460 {
01461 IQ2000_INSN_BMBL, "bmbl", "bmbl", 32,
01462 { 0|A(USES_RT)|A(USES_RS)|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { (1<<MACH_IQ10) } }
01463 },
01464
01465 {
01466 IQ2000_INSN_BRI, "bri", "bri", 32,
01467 { 0|A(USES_RS)|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { (1<<MACH_IQ10) } }
01468 },
01469
01470 {
01471 IQ2000_INSN_BRV, "brv", "brv", 32,
01472 { 0|A(USES_RS)|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { (1<<MACH_IQ10) } }
01473 },
01474
01475 {
01476 IQ2000_INSN_BCTX, "bctx", "bctx", 32,
01477 { 0|A(USES_RS)|A(UNCOND_CTI)|A(DELAY_SLOT), { (1<<MACH_IQ10) } }
01478 },
01479
01480 {
01481 IQ2000_INSN_YIELD, "yield", "yield", 32,
01482 { 0, { (1<<MACH_IQ10) } }
01483 },
01484
01485 {
01486 IQ2000_INSN_CRC32, "crc32", "crc32", 32,
01487 { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { (1<<MACH_IQ10) } }
01488 },
01489
01490 {
01491 IQ2000_INSN_CRC32B, "crc32b", "crc32b", 32,
01492 { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { (1<<MACH_IQ10) } }
01493 },
01494
01495 {
01496 IQ2000_INSN_CNT1S, "cnt1s", "cnt1s", 32,
01497 { 0|A(USES_RS)|A(USES_RD), { (1<<MACH_IQ10) } }
01498 },
01499
01500 {
01501 IQ2000_INSN_AVAIL, "avail", "avail", 32,
01502 { 0|A(USES_RD), { (1<<MACH_IQ10) } }
01503 },
01504
01505 {
01506 IQ2000_INSN_FREE, "free", "free", 32,
01507 { 0|A(USES_RD)|A(USES_RS), { (1<<MACH_IQ10) } }
01508 },
01509
01510 {
01511 IQ2000_INSN_TSTOD, "tstod", "tstod", 32,
01512 { 0|A(USES_RD)|A(USES_RS), { (1<<MACH_IQ10) } }
01513 },
01514
01515 {
01516 IQ2000_INSN_CMPHDR, "cmphdr", "cmphdr", 32,
01517 { 0|A(USES_RD), { (1<<MACH_IQ10) } }
01518 },
01519
01520 {
01521 IQ2000_INSN_MCID, "mcid", "mcid", 32,
01522 { 0|A(USES_RT)|A(USES_RD), { (1<<MACH_IQ10) } }
01523 },
01524
01525 {
01526 IQ2000_INSN_DBA, "dba", "dba", 32,
01527 { 0|A(USES_RD), { (1<<MACH_IQ10) } }
01528 },
01529
01530 {
01531 IQ2000_INSN_DBD, "dbd", "dbd", 32,
01532 { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { (1<<MACH_IQ10) } }
01533 },
01534
01535 {
01536 IQ2000_INSN_DPWT, "dpwt", "dpwt", 32,
01537 { 0|A(USES_RD)|A(USES_RS), { (1<<MACH_IQ10) } }
01538 },
01539
01540 {
01541 IQ2000_INSN_CHKHDRQ10, "chkhdrq10", "chkhdr", 32,
01542 { 0|A(USES_RD)|A(USES_RS), { (1<<MACH_IQ10) } }
01543 },
01544
01545 {
01546 IQ2000_INSN_RBA, "rba", "rba", 32,
01547 { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { (1<<MACH_IQ10) } }
01548 },
01549
01550 {
01551 IQ2000_INSN_RBAL, "rbal", "rbal", 32,
01552 { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { (1<<MACH_IQ10) } }
01553 },
01554
01555 {
01556 IQ2000_INSN_RBAR, "rbar", "rbar", 32,
01557 { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { (1<<MACH_IQ10) } }
01558 },
01559
01560 {
01561 IQ2000_INSN_WBA, "wba", "wba", 32,
01562 { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { (1<<MACH_IQ10) } }
01563 },
01564
01565 {
01566 IQ2000_INSN_WBAU, "wbau", "wbau", 32,
01567 { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { (1<<MACH_IQ10) } }
01568 },
01569
01570 {
01571 IQ2000_INSN_WBAC, "wbac", "wbac", 32,
01572 { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { (1<<MACH_IQ10) } }
01573 },
01574
01575 {
01576 IQ2000_INSN_RBI, "rbi", "rbi", 32,
01577 { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { (1<<MACH_IQ10) } }
01578 },
01579
01580 {
01581 IQ2000_INSN_RBIL, "rbil", "rbil", 32,
01582 { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { (1<<MACH_IQ10) } }
01583 },
01584
01585 {
01586 IQ2000_INSN_RBIR, "rbir", "rbir", 32,
01587 { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { (1<<MACH_IQ10) } }
01588 },
01589
01590 {
01591 IQ2000_INSN_WBI, "wbi", "wbi", 32,
01592 { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { (1<<MACH_IQ10) } }
01593 },
01594
01595 {
01596 IQ2000_INSN_WBIC, "wbic", "wbic", 32,
01597 { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { (1<<MACH_IQ10) } }
01598 },
01599
01600 {
01601 IQ2000_INSN_WBIU, "wbiu", "wbiu", 32,
01602 { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { (1<<MACH_IQ10) } }
01603 },
01604
01605 {
01606 IQ2000_INSN_PKRLI, "pkrli", "pkrli", 32,
01607 { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { (1<<MACH_IQ10) } }
01608 },
01609
01610 {
01611 IQ2000_INSN_PKRLIH, "pkrlih", "pkrlih", 32,
01612 { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { (1<<MACH_IQ10) } }
01613 },
01614
01615 {
01616 IQ2000_INSN_PKRLIU, "pkrliu", "pkrliu", 32,
01617 { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { (1<<MACH_IQ10) } }
01618 },
01619
01620 {
01621 IQ2000_INSN_PKRLIC, "pkrlic", "pkrlic", 32,
01622 { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { (1<<MACH_IQ10) } }
01623 },
01624
01625 {
01626 IQ2000_INSN_PKRLA, "pkrla", "pkrla", 32,
01627 { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { (1<<MACH_IQ10) } }
01628 },
01629
01630 {
01631 IQ2000_INSN_PKRLAU, "pkrlau", "pkrlau", 32,
01632 { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { (1<<MACH_IQ10) } }
01633 },
01634
01635 {
01636 IQ2000_INSN_PKRLAH, "pkrlah", "pkrlah", 32,
01637 { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { (1<<MACH_IQ10) } }
01638 },
01639
01640 {
01641 IQ2000_INSN_PKRLAC, "pkrlac", "pkrlac", 32,
01642 { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { (1<<MACH_IQ10) } }
01643 },
01644
01645 {
01646 IQ2000_INSN_LOCK, "lock", "lock", 32,
01647 { 0|A(USES_RT)|A(USES_RD), { (1<<MACH_IQ10) } }
01648 },
01649
01650 {
01651 IQ2000_INSN_UNLK, "unlk", "unlk", 32,
01652 { 0|A(USES_RD)|A(USES_RT), { (1<<MACH_IQ10) } }
01653 },
01654
01655 {
01656 IQ2000_INSN_SWRD, "swrd", "swrd", 32,
01657 { 0|A(USES_RD)|A(USES_RT), { (1<<MACH_IQ10) } }
01658 },
01659
01660 {
01661 IQ2000_INSN_SWRDL, "swrdl", "swrdl", 32,
01662 { 0|A(USES_RD)|A(USES_RT), { (1<<MACH_IQ10) } }
01663 },
01664
01665 {
01666 IQ2000_INSN_SWWR, "swwr", "swwr", 32,
01667 { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { (1<<MACH_IQ10) } }
01668 },
01669
01670 {
01671 IQ2000_INSN_SWWRU, "swwru", "swwru", 32,
01672 { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { (1<<MACH_IQ10) } }
01673 },
01674
01675 {
01676 IQ2000_INSN_DWRD, "dwrd", "dwrd", 32,
01677 { 0|A(USES_RD)|A(USES_RT)|A(EVEN_REG_NUM), { (1<<MACH_IQ10) } }
01678 },
01679
01680 {
01681 IQ2000_INSN_DWRDL, "dwrdl", "dwrdl", 32,
01682 { 0|A(USES_RD)|A(USES_RT)|A(EVEN_REG_NUM), { (1<<MACH_IQ10) } }
01683 },
01684
01685 {
01686 IQ2000_INSN_CAM36, "cam36", "cam36", 32,
01687 { 0|A(USES_RD)|A(USES_RT), { (1<<MACH_IQ10) } }
01688 },
01689
01690 {
01691 IQ2000_INSN_CAM72, "cam72", "cam72", 32,
01692 { 0|A(USES_RD)|A(USES_RT), { (1<<MACH_IQ10) } }
01693 },
01694
01695 {
01696 IQ2000_INSN_CAM144, "cam144", "cam144", 32,
01697 { 0|A(USES_RD)|A(USES_RT), { (1<<MACH_IQ10) } }
01698 },
01699
01700 {
01701 IQ2000_INSN_CAM288, "cam288", "cam288", 32,
01702 { 0|A(USES_RD)|A(USES_RT), { (1<<MACH_IQ10) } }
01703 },
01704
01705 {
01706 IQ2000_INSN_CM32AND, "cm32and", "cm32and", 32,
01707 { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { (1<<MACH_IQ10) } }
01708 },
01709
01710 {
01711 IQ2000_INSN_CM32ANDN, "cm32andn", "cm32andn", 32,
01712 { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { (1<<MACH_IQ10) } }
01713 },
01714
01715 {
01716 IQ2000_INSN_CM32OR, "cm32or", "cm32or", 32,
01717 { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { (1<<MACH_IQ10) } }
01718 },
01719
01720 {
01721 IQ2000_INSN_CM32RA, "cm32ra", "cm32ra", 32,
01722 { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { (1<<MACH_IQ10) } }
01723 },
01724
01725 {
01726 IQ2000_INSN_CM32RD, "cm32rd", "cm32rd", 32,
01727 { 0|A(USES_RD)|A(USES_RT), { (1<<MACH_IQ10) } }
01728 },
01729
01730 {
01731 IQ2000_INSN_CM32RI, "cm32ri", "cm32ri", 32,
01732 { 0|A(USES_RD)|A(USES_RT), { (1<<MACH_IQ10) } }
01733 },
01734
01735 {
01736 IQ2000_INSN_CM32RS, "cm32rs", "cm32rs", 32,
01737 { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { (1<<MACH_IQ10) } }
01738 },
01739
01740 {
01741 IQ2000_INSN_CM32SA, "cm32sa", "cm32sa", 32,
01742 { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { (1<<MACH_IQ10) } }
01743 },
01744
01745 {
01746 IQ2000_INSN_CM32SD, "cm32sd", "cm32sd", 32,
01747 { 0|A(USES_RD)|A(USES_RT), { (1<<MACH_IQ10) } }
01748 },
01749
01750 {
01751 IQ2000_INSN_CM32SI, "cm32si", "cm32si", 32,
01752 { 0|A(USES_RD)|A(USES_RT), { (1<<MACH_IQ10) } }
01753 },
01754
01755 {
01756 IQ2000_INSN_CM32SS, "cm32ss", "cm32ss", 32,
01757 { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { (1<<MACH_IQ10) } }
01758 },
01759
01760 {
01761 IQ2000_INSN_CM32XOR, "cm32xor", "cm32xor", 32,
01762 { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { (1<<MACH_IQ10) } }
01763 },
01764
01765 {
01766 IQ2000_INSN_CM64CLR, "cm64clr", "cm64clr", 32,
01767 { 0|A(USES_RD)|A(USES_RT)|A(EVEN_REG_NUM), { (1<<MACH_IQ10) } }
01768 },
01769
01770 {
01771 IQ2000_INSN_CM64RA, "cm64ra", "cm64ra", 32,
01772 { 0|A(USES_RD)|A(USES_RT)|A(USES_RS)|A(EVEN_REG_NUM), { (1<<MACH_IQ10) } }
01773 },
01774
01775 {
01776 IQ2000_INSN_CM64RD, "cm64rd", "cm64rd", 32,
01777 { 0|A(USES_RD)|A(USES_RT)|A(EVEN_REG_NUM), { (1<<MACH_IQ10) } }
01778 },
01779
01780 {
01781 IQ2000_INSN_CM64RI, "cm64ri", "cm64ri", 32,
01782 { 0|A(USES_RD)|A(USES_RT)|A(EVEN_REG_NUM), { (1<<MACH_IQ10) } }
01783 },
01784
01785 {
01786 IQ2000_INSN_CM64RIA2, "cm64ria2", "cm64ria2", 32,
01787 { 0|A(USES_RD)|A(USES_RT)|A(USES_RS)|A(EVEN_REG_NUM), { (1<<MACH_IQ10) } }
01788 },
01789
01790 {
01791 IQ2000_INSN_CM64RS, "cm64rs", "cm64rs", 32,
01792 { 0|A(USES_RD)|A(USES_RT)|A(USES_RS)|A(EVEN_REG_NUM), { (1<<MACH_IQ10) } }
01793 },
01794
01795 {
01796 IQ2000_INSN_CM64SA, "cm64sa", "cm64sa", 32,
01797 { 0|A(USES_RD)|A(USES_RT)|A(USES_RS)|A(EVEN_REG_NUM), { (1<<MACH_IQ10) } }
01798 },
01799
01800 {
01801 IQ2000_INSN_CM64SD, "cm64sd", "cm64sd", 32,
01802 { 0|A(USES_RD)|A(USES_RT)|A(EVEN_REG_NUM), { (1<<MACH_IQ10) } }
01803 },
01804
01805 {
01806 IQ2000_INSN_CM64SI, "cm64si", "cm64si", 32,
01807 { 0|A(USES_RD)|A(USES_RT)|A(EVEN_REG_NUM), { (1<<MACH_IQ10) } }
01808 },
01809
01810 {
01811 IQ2000_INSN_CM64SIA2, "cm64sia2", "cm64sia2", 32,
01812 { 0|A(USES_RD)|A(USES_RT)|A(USES_RS)|A(EVEN_REG_NUM), { (1<<MACH_IQ10) } }
01813 },
01814
01815 {
01816 IQ2000_INSN_CM64SS, "cm64ss", "cm64ss", 32,
01817 { 0|A(USES_RD)|A(USES_RT)|A(USES_RS)|A(EVEN_REG_NUM), { (1<<MACH_IQ10) } }
01818 },
01819
01820 {
01821 IQ2000_INSN_CM128RIA2, "cm128ria2", "cm128ria2", 32,
01822 { 0|A(USES_RD)|A(USES_RT)|A(USES_RS)|A(EVEN_REG_NUM), { (1<<MACH_IQ10) } }
01823 },
01824
01825 {
01826 IQ2000_INSN_CM128RIA3, "cm128ria3", "cm128ria3", 32,
01827 { 0|A(USES_RD)|A(USES_RT)|A(USES_RS)|A(EVEN_REG_NUM), { (1<<MACH_IQ10) } }
01828 },
01829
01830 {
01831 IQ2000_INSN_CM128RIA4, "cm128ria4", "cm128ria4", 32,
01832 { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { (1<<MACH_IQ10) } }
01833 },
01834
01835 {
01836 IQ2000_INSN_CM128SIA2, "cm128sia2", "cm128sia2", 32,
01837 { 0|A(USES_RD)|A(USES_RT)|A(USES_RS)|A(EVEN_REG_NUM), { (1<<MACH_IQ10) } }
01838 },
01839
01840 {
01841 IQ2000_INSN_CM128SIA3, "cm128sia3", "cm128sia3", 32,
01842 { 0|A(USES_RD)|A(USES_RT)|A(USES_RS)|A(EVEN_REG_NUM), { (1<<MACH_IQ10) } }
01843 },
01844
01845 {
01846 IQ2000_INSN_CM128SIA4, "cm128sia4", "cm128sia4", 32,
01847 { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { (1<<MACH_IQ10) } }
01848 },
01849
01850 {
01851 IQ2000_INSN_CM128VSA, "cm128vsa", "cm128vsa", 32,
01852 { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { (1<<MACH_IQ10) } }
01853 },
01854
01855 {
01856 IQ2000_INSN_CFC, "cfc", "cfc", 32,
01857 { 0|A(YIELD_INSN)|A(USES_RD)|A(LOAD_DELAY), { (1<<MACH_IQ10) } }
01858 },
01859
01860 {
01861 IQ2000_INSN_CTC, "ctc", "ctc", 32,
01862 { 0|A(USES_RS), { (1<<MACH_IQ10) } }
01863 },
01864 };
01865
01866 #undef OP
01867 #undef A
01868
01869
01870 static void init_tables PARAMS ((void));
01871
01872 static void
01873 init_tables ()
01874 {
01875 }
01876
01877 static const CGEN_MACH * lookup_mach_via_bfd_name
01878 PARAMS ((const CGEN_MACH *, const char *));
01879 static void build_hw_table PARAMS ((CGEN_CPU_TABLE *));
01880 static void build_ifield_table PARAMS ((CGEN_CPU_TABLE *));
01881 static void build_operand_table PARAMS ((CGEN_CPU_TABLE *));
01882 static void build_insn_table PARAMS ((CGEN_CPU_TABLE *));
01883 static void iq2000_cgen_rebuild_tables PARAMS ((CGEN_CPU_TABLE *));
01884
01885
01886
01887 static const CGEN_MACH *
01888 lookup_mach_via_bfd_name (table, name)
01889 const CGEN_MACH *table;
01890 const char *name;
01891 {
01892 while (table->name)
01893 {
01894 if (strcmp (name, table->bfd_name) == 0)
01895 return table;
01896 ++table;
01897 }
01898 abort ();
01899 }
01900
01901
01902
01903 static void
01904 build_hw_table (cd)
01905 CGEN_CPU_TABLE *cd;
01906 {
01907 int i;
01908 int machs = cd->machs;
01909 const CGEN_HW_ENTRY *init = & iq2000_cgen_hw_table[0];
01910
01911
01912
01913 const CGEN_HW_ENTRY **selected =
01914 (const CGEN_HW_ENTRY **) xmalloc (MAX_HW * sizeof (CGEN_HW_ENTRY *));
01915
01916 cd->hw_table.init_entries = init;
01917 cd->hw_table.entry_size = sizeof (CGEN_HW_ENTRY);
01918 memset (selected, 0, MAX_HW * sizeof (CGEN_HW_ENTRY *));
01919
01920 for (i = 0; init[i].name != NULL; ++i)
01921 if (CGEN_HW_ATTR_VALUE (&init[i], CGEN_HW_MACH)
01922 & machs)
01923 selected[init[i].type] = &init[i];
01924 cd->hw_table.entries = selected;
01925 cd->hw_table.num_entries = MAX_HW;
01926 }
01927
01928
01929
01930 static void
01931 build_ifield_table (cd)
01932 CGEN_CPU_TABLE *cd;
01933 {
01934 cd->ifld_table = & iq2000_cgen_ifld_table[0];
01935 }
01936
01937
01938
01939 static void
01940 build_operand_table (cd)
01941 CGEN_CPU_TABLE *cd;
01942 {
01943 int i;
01944 int machs = cd->machs;
01945 const CGEN_OPERAND *init = & iq2000_cgen_operand_table[0];
01946
01947
01948
01949 const CGEN_OPERAND **selected =
01950 (const CGEN_OPERAND **) xmalloc (MAX_OPERANDS * sizeof (CGEN_OPERAND *));
01951
01952 cd->operand_table.init_entries = init;
01953 cd->operand_table.entry_size = sizeof (CGEN_OPERAND);
01954 memset (selected, 0, MAX_OPERANDS * sizeof (CGEN_OPERAND *));
01955
01956 for (i = 0; init[i].name != NULL; ++i)
01957 if (CGEN_OPERAND_ATTR_VALUE (&init[i], CGEN_OPERAND_MACH)
01958 & machs)
01959 selected[init[i].type] = &init[i];
01960 cd->operand_table.entries = selected;
01961 cd->operand_table.num_entries = MAX_OPERANDS;
01962 }
01963
01964
01965
01966
01967
01968
01969
01970
01971
01972 static void
01973 build_insn_table (cd)
01974 CGEN_CPU_TABLE *cd;
01975 {
01976 int i;
01977 const CGEN_IBASE *ib = & iq2000_cgen_insn_table[0];
01978 CGEN_INSN *insns = (CGEN_INSN *) xmalloc (MAX_INSNS * sizeof (CGEN_INSN));
01979
01980 memset (insns, 0, MAX_INSNS * sizeof (CGEN_INSN));
01981 for (i = 0; i < MAX_INSNS; ++i)
01982 insns[i].base = &ib[i];
01983 cd->insn_table.init_entries = insns;
01984 cd->insn_table.entry_size = sizeof (CGEN_IBASE);
01985 cd->insn_table.num_init_entries = MAX_INSNS;
01986 }
01987
01988
01989
01990 static void
01991 iq2000_cgen_rebuild_tables (cd)
01992 CGEN_CPU_TABLE *cd;
01993 {
01994 int i;
01995 unsigned int isas = cd->isas;
01996 unsigned int machs = cd->machs;
01997
01998 cd->int_insn_p = CGEN_INT_INSN_P;
01999
02000
02001 #define UNSET (CGEN_SIZE_UNKNOWN + 1)
02002 cd->default_insn_bitsize = UNSET;
02003 cd->base_insn_bitsize = UNSET;
02004 cd->min_insn_bitsize = 65535;
02005 cd->max_insn_bitsize = 0;
02006 for (i = 0; i < MAX_ISAS; ++i)
02007 if (((1 << i) & isas) != 0)
02008 {
02009 const CGEN_ISA *isa = & iq2000_cgen_isa_table[i];
02010
02011
02012
02013 if (cd->default_insn_bitsize == UNSET)
02014 cd->default_insn_bitsize = isa->default_insn_bitsize;
02015 else if (isa->default_insn_bitsize == cd->default_insn_bitsize)
02016 ;
02017 else
02018 cd->default_insn_bitsize = CGEN_SIZE_UNKNOWN;
02019
02020
02021
02022 if (cd->base_insn_bitsize == UNSET)
02023 cd->base_insn_bitsize = isa->base_insn_bitsize;
02024 else if (isa->base_insn_bitsize == cd->base_insn_bitsize)
02025 ;
02026 else
02027 cd->base_insn_bitsize = CGEN_SIZE_UNKNOWN;
02028
02029
02030 if (isa->min_insn_bitsize < cd->min_insn_bitsize)
02031 cd->min_insn_bitsize = isa->min_insn_bitsize;
02032 if (isa->max_insn_bitsize > cd->max_insn_bitsize)
02033 cd->max_insn_bitsize = isa->max_insn_bitsize;
02034 }
02035
02036
02037 for (i = 0; i < MAX_MACHS; ++i)
02038 if (((1 << i) & machs) != 0)
02039 {
02040 const CGEN_MACH *mach = & iq2000_cgen_mach_table[i];
02041
02042 if (mach->insn_chunk_bitsize != 0)
02043 {
02044 if (cd->insn_chunk_bitsize != 0 && cd->insn_chunk_bitsize != mach->insn_chunk_bitsize)
02045 {
02046 fprintf (stderr, "iq2000_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'\n",
02047 cd->insn_chunk_bitsize, mach->insn_chunk_bitsize);
02048 abort ();
02049 }
02050
02051 cd->insn_chunk_bitsize = mach->insn_chunk_bitsize;
02052 }
02053 }
02054
02055
02056 build_hw_table (cd);
02057
02058
02059 build_ifield_table (cd);
02060
02061
02062 build_operand_table (cd);
02063
02064
02065 build_insn_table (cd);
02066 }
02067
02068
02069
02070
02071
02072
02073
02074
02075
02076
02077
02078
02079
02080
02081
02082
02083
02084
02085
02086
02087 CGEN_CPU_DESC
02088 iq2000_cgen_cpu_open (enum cgen_cpu_open_arg arg_type, ...)
02089 {
02090 CGEN_CPU_TABLE *cd = (CGEN_CPU_TABLE *) xmalloc (sizeof (CGEN_CPU_TABLE));
02091 static int init_p;
02092 unsigned int isas = 0;
02093 unsigned int machs = 0;
02094 enum cgen_endian endian = CGEN_ENDIAN_UNKNOWN;
02095 va_list ap;
02096
02097 if (! init_p)
02098 {
02099 init_tables ();
02100 init_p = 1;
02101 }
02102
02103 memset (cd, 0, sizeof (*cd));
02104
02105 va_start (ap, arg_type);
02106 while (arg_type != CGEN_CPU_OPEN_END)
02107 {
02108 switch (arg_type)
02109 {
02110 case CGEN_CPU_OPEN_ISAS :
02111 isas = va_arg (ap, unsigned int);
02112 break;
02113 case CGEN_CPU_OPEN_MACHS :
02114 machs = va_arg (ap, unsigned int);
02115 break;
02116 case CGEN_CPU_OPEN_BFDMACH :
02117 {
02118 const char *name = va_arg (ap, const char *);
02119 const CGEN_MACH *mach =
02120 lookup_mach_via_bfd_name (iq2000_cgen_mach_table, name);
02121
02122 machs |= 1 << mach->num;
02123 break;
02124 }
02125 case CGEN_CPU_OPEN_ENDIAN :
02126 endian = va_arg (ap, enum cgen_endian);
02127 break;
02128 default :
02129 fprintf (stderr, "iq2000_cgen_cpu_open: unsupported argument `%d'\n",
02130 arg_type);
02131 abort ();
02132 }
02133 arg_type = va_arg (ap, enum cgen_cpu_open_arg);
02134 }
02135 va_end (ap);
02136
02137
02138 if (machs == 0)
02139 machs = (1 << MAX_MACHS) - 1;
02140
02141 machs |= 1;
02142
02143 if (isas == 0)
02144 isas = (1 << MAX_ISAS) - 1;
02145 if (endian == CGEN_ENDIAN_UNKNOWN)
02146 {
02147
02148 fprintf (stderr, "iq2000_cgen_cpu_open: no endianness specified\n");
02149 abort ();
02150 }
02151
02152 cd->isas = isas;
02153 cd->machs = machs;
02154 cd->endian = endian;
02155
02156
02157
02158
02159 cd->insn_endian = endian;
02160
02161
02162 cd->rebuild_tables = iq2000_cgen_rebuild_tables;
02163 iq2000_cgen_rebuild_tables (cd);
02164
02165
02166 cd->signed_overflow_ok_p = 0;
02167
02168 return (CGEN_CPU_DESC) cd;
02169 }
02170
02171
02172
02173
02174 CGEN_CPU_DESC
02175 iq2000_cgen_cpu_open_1 (mach_name, endian)
02176 const char *mach_name;
02177 enum cgen_endian endian;
02178 {
02179 return iq2000_cgen_cpu_open (CGEN_CPU_OPEN_BFDMACH, mach_name,
02180 CGEN_CPU_OPEN_ENDIAN, endian,
02181 CGEN_CPU_OPEN_END);
02182 }
02183
02184
02185
02186
02187
02188
02189 void
02190 iq2000_cgen_cpu_close (cd)
02191 CGEN_CPU_DESC cd;
02192 {
02193 unsigned int i;
02194 const CGEN_INSN *insns;
02195
02196 if (cd->macro_insn_table.init_entries)
02197 {
02198 insns = cd->macro_insn_table.init_entries;
02199 for (i = 0; i < cd->macro_insn_table.num_init_entries; ++i, ++insns)
02200 {
02201 if (CGEN_INSN_RX ((insns)))
02202 regfree (CGEN_INSN_RX (insns));
02203 }
02204 }
02205
02206 if (cd->insn_table.init_entries)
02207 {
02208 insns = cd->insn_table.init_entries;
02209 for (i = 0; i < cd->insn_table.num_init_entries; ++i, ++insns)
02210 {
02211 if (CGEN_INSN_RX (insns))
02212 regfree (CGEN_INSN_RX (insns));
02213 }
02214 }
02215
02216
02217
02218 if (cd->macro_insn_table.init_entries)
02219 free ((CGEN_INSN *) cd->macro_insn_table.init_entries);
02220
02221 if (cd->insn_table.init_entries)
02222 free ((CGEN_INSN *) cd->insn_table.init_entries);
02223
02224 if (cd->hw_table.entries)
02225 free ((CGEN_HW_ENTRY *) cd->hw_table.entries);
02226
02227 if (cd->operand_table.entries)
02228 free ((CGEN_HW_ENTRY *) cd->operand_table.entries);
02229
02230 free (cd);
02231 }
02232