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 "ansidecl.h"
00031 #include "bfd.h"
00032 #include "symcat.h"
00033 #include "fr30-desc.h"
00034 #include "fr30-opc.h"
00035 #include "libiberty.h"
00036
00037
00038
00039
00040 static int asm_hash_insn_p PARAMS ((const CGEN_INSN *));
00041 static unsigned int asm_hash_insn PARAMS ((const char *));
00042 static int dis_hash_insn_p PARAMS ((const CGEN_INSN *));
00043 static unsigned int dis_hash_insn PARAMS ((const char *, CGEN_INSN_INT));
00044
00045
00046
00047 #if defined (__STDC__) || defined (ALMOST_STDC) || defined (HAVE_STRINGIZE)
00048 #define F(f) & fr30_cgen_ifld_table[FR30_##f]
00049 #else
00050 #define F(f) & fr30_cgen_ifld_table[FR30_f]
00051 #endif
00052 static const CGEN_IFMT ifmt_empty ATTRIBUTE_UNUSED = {
00053 0, 0, 0x0, { { 0 } }
00054 };
00055
00056 static const CGEN_IFMT ifmt_add ATTRIBUTE_UNUSED = {
00057 16, 16, 0xff00, { { F (F_OP1) }, { F (F_OP2) }, { F (F_RJ) }, { F (F_RI) }, { 0 } }
00058 };
00059
00060 static const CGEN_IFMT ifmt_addi ATTRIBUTE_UNUSED = {
00061 16, 16, 0xff00, { { F (F_OP1) }, { F (F_OP2) }, { F (F_U4) }, { F (F_RI) }, { 0 } }
00062 };
00063
00064 static const CGEN_IFMT ifmt_add2 ATTRIBUTE_UNUSED = {
00065 16, 16, 0xff00, { { F (F_OP1) }, { F (F_OP2) }, { F (F_M4) }, { F (F_RI) }, { 0 } }
00066 };
00067
00068 static const CGEN_IFMT ifmt_div0s ATTRIBUTE_UNUSED = {
00069 16, 16, 0xfff0, { { F (F_OP1) }, { F (F_OP2) }, { F (F_OP3) }, { F (F_RI) }, { 0 } }
00070 };
00071
00072 static const CGEN_IFMT ifmt_div3 ATTRIBUTE_UNUSED = {
00073 16, 16, 0xffff, { { F (F_OP1) }, { F (F_OP2) }, { F (F_OP3) }, { F (F_OP4) }, { 0 } }
00074 };
00075
00076 static const CGEN_IFMT ifmt_ldi8 ATTRIBUTE_UNUSED = {
00077 16, 16, 0xf000, { { F (F_OP1) }, { F (F_I8) }, { F (F_RI) }, { 0 } }
00078 };
00079
00080 static const CGEN_IFMT ifmt_ldi20 ATTRIBUTE_UNUSED = {
00081 16, 32, 0xff00, { { F (F_OP1) }, { F (F_I20) }, { F (F_OP2) }, { F (F_RI) }, { 0 } }
00082 };
00083
00084 static const CGEN_IFMT ifmt_ldi32 ATTRIBUTE_UNUSED = {
00085 16, 48, 0xfff0, { { F (F_OP1) }, { F (F_I32) }, { F (F_OP2) }, { F (F_OP3) }, { F (F_RI) }, { 0 } }
00086 };
00087
00088 static const CGEN_IFMT ifmt_ldr14 ATTRIBUTE_UNUSED = {
00089 16, 16, 0xf000, { { F (F_OP1) }, { F (F_DISP10) }, { F (F_RI) }, { 0 } }
00090 };
00091
00092 static const CGEN_IFMT ifmt_ldr14uh ATTRIBUTE_UNUSED = {
00093 16, 16, 0xf000, { { F (F_OP1) }, { F (F_DISP9) }, { F (F_RI) }, { 0 } }
00094 };
00095
00096 static const CGEN_IFMT ifmt_ldr14ub ATTRIBUTE_UNUSED = {
00097 16, 16, 0xf000, { { F (F_OP1) }, { F (F_DISP8) }, { F (F_RI) }, { 0 } }
00098 };
00099
00100 static const CGEN_IFMT ifmt_ldr15 ATTRIBUTE_UNUSED = {
00101 16, 16, 0xff00, { { F (F_OP1) }, { F (F_OP2) }, { F (F_UDISP6) }, { F (F_RI) }, { 0 } }
00102 };
00103
00104 static const CGEN_IFMT ifmt_ldr15dr ATTRIBUTE_UNUSED = {
00105 16, 16, 0xfff0, { { F (F_OP1) }, { F (F_OP2) }, { F (F_OP3) }, { F (F_RS2) }, { 0 } }
00106 };
00107
00108 static const CGEN_IFMT ifmt_movdr ATTRIBUTE_UNUSED = {
00109 16, 16, 0xff00, { { F (F_OP1) }, { F (F_OP2) }, { F (F_RS1) }, { F (F_RI) }, { 0 } }
00110 };
00111
00112 static const CGEN_IFMT ifmt_call ATTRIBUTE_UNUSED = {
00113 16, 16, 0xf800, { { F (F_OP1) }, { F (F_OP5) }, { F (F_REL12) }, { 0 } }
00114 };
00115
00116 static const CGEN_IFMT ifmt_int ATTRIBUTE_UNUSED = {
00117 16, 16, 0xff00, { { F (F_OP1) }, { F (F_OP2) }, { F (F_U8) }, { 0 } }
00118 };
00119
00120 static const CGEN_IFMT ifmt_brad ATTRIBUTE_UNUSED = {
00121 16, 16, 0xff00, { { F (F_OP1) }, { F (F_CC) }, { F (F_REL9) }, { 0 } }
00122 };
00123
00124 static const CGEN_IFMT ifmt_dmovr13 ATTRIBUTE_UNUSED = {
00125 16, 16, 0xff00, { { F (F_OP1) }, { F (F_OP2) }, { F (F_DIR10) }, { 0 } }
00126 };
00127
00128 static const CGEN_IFMT ifmt_dmovr13h ATTRIBUTE_UNUSED = {
00129 16, 16, 0xff00, { { F (F_OP1) }, { F (F_OP2) }, { F (F_DIR9) }, { 0 } }
00130 };
00131
00132 static const CGEN_IFMT ifmt_dmovr13b ATTRIBUTE_UNUSED = {
00133 16, 16, 0xff00, { { F (F_OP1) }, { F (F_OP2) }, { F (F_DIR8) }, { 0 } }
00134 };
00135
00136 static const CGEN_IFMT ifmt_copop ATTRIBUTE_UNUSED = {
00137 16, 32, 0xfff0, { { F (F_OP1) }, { F (F_CCC) }, { F (F_OP2) }, { F (F_OP3) }, { F (F_CRJ) }, { F (F_U4C) }, { F (F_CRI) }, { 0 } }
00138 };
00139
00140 static const CGEN_IFMT ifmt_copld ATTRIBUTE_UNUSED = {
00141 16, 32, 0xfff0, { { F (F_OP1) }, { F (F_CCC) }, { F (F_OP2) }, { F (F_OP3) }, { F (F_RJC) }, { F (F_U4C) }, { F (F_CRI) }, { 0 } }
00142 };
00143
00144 static const CGEN_IFMT ifmt_copst ATTRIBUTE_UNUSED = {
00145 16, 32, 0xfff0, { { F (F_OP1) }, { F (F_CCC) }, { F (F_OP2) }, { F (F_OP3) }, { F (F_CRJ) }, { F (F_U4C) }, { F (F_RIC) }, { 0 } }
00146 };
00147
00148 static const CGEN_IFMT ifmt_addsp ATTRIBUTE_UNUSED = {
00149 16, 16, 0xff00, { { F (F_OP1) }, { F (F_OP2) }, { F (F_S10) }, { 0 } }
00150 };
00151
00152 static const CGEN_IFMT ifmt_ldm0 ATTRIBUTE_UNUSED = {
00153 16, 16, 0xff00, { { F (F_OP1) }, { F (F_OP2) }, { F (F_REGLIST_LOW_LD) }, { 0 } }
00154 };
00155
00156 static const CGEN_IFMT ifmt_ldm1 ATTRIBUTE_UNUSED = {
00157 16, 16, 0xff00, { { F (F_OP1) }, { F (F_OP2) }, { F (F_REGLIST_HI_LD) }, { 0 } }
00158 };
00159
00160 static const CGEN_IFMT ifmt_stm0 ATTRIBUTE_UNUSED = {
00161 16, 16, 0xff00, { { F (F_OP1) }, { F (F_OP2) }, { F (F_REGLIST_LOW_ST) }, { 0 } }
00162 };
00163
00164 static const CGEN_IFMT ifmt_stm1 ATTRIBUTE_UNUSED = {
00165 16, 16, 0xff00, { { F (F_OP1) }, { F (F_OP2) }, { F (F_REGLIST_HI_ST) }, { 0 } }
00166 };
00167
00168 static const CGEN_IFMT ifmt_enter ATTRIBUTE_UNUSED = {
00169 16, 16, 0xff00, { { F (F_OP1) }, { F (F_OP2) }, { F (F_U10) }, { 0 } }
00170 };
00171
00172 #undef F
00173
00174 #if defined (__STDC__) || defined (ALMOST_STDC) || defined (HAVE_STRINGIZE)
00175 #define A(a) (1 << CGEN_INSN_##a)
00176 #else
00177 #define A(a) (1 << CGEN_INSN_a)
00178 #endif
00179 #if defined (__STDC__) || defined (ALMOST_STDC) || defined (HAVE_STRINGIZE)
00180 #define OPERAND(op) FR30_OPERAND_##op
00181 #else
00182 #define OPERAND(op) FR30_OPERAND_op
00183 #endif
00184 #define MNEM CGEN_SYNTAX_MNEMONIC
00185 #define OP(field) CGEN_SYNTAX_MAKE_FIELD (OPERAND (field))
00186
00187
00188
00189 static const CGEN_OPCODE fr30_cgen_insn_opcode_table[MAX_INSNS] =
00190 {
00191
00192
00193
00194 { { 0, 0, 0, 0 }, {{0}}, 0, {0}},
00195
00196 {
00197 { 0, 0, 0, 0 },
00198 { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
00199 & ifmt_add, { 0xa600 }
00200 },
00201
00202 {
00203 { 0, 0, 0, 0 },
00204 { { MNEM, ' ', OP (U4), ',', OP (RI), 0 } },
00205 & ifmt_addi, { 0xa400 }
00206 },
00207
00208 {
00209 { 0, 0, 0, 0 },
00210 { { MNEM, ' ', OP (M4), ',', OP (RI), 0 } },
00211 & ifmt_add2, { 0xa500 }
00212 },
00213
00214 {
00215 { 0, 0, 0, 0 },
00216 { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
00217 & ifmt_add, { 0xa700 }
00218 },
00219
00220 {
00221 { 0, 0, 0, 0 },
00222 { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
00223 & ifmt_add, { 0xa200 }
00224 },
00225
00226 {
00227 { 0, 0, 0, 0 },
00228 { { MNEM, ' ', OP (U4), ',', OP (RI), 0 } },
00229 & ifmt_addi, { 0xa000 }
00230 },
00231
00232 {
00233 { 0, 0, 0, 0 },
00234 { { MNEM, ' ', OP (M4), ',', OP (RI), 0 } },
00235 & ifmt_add2, { 0xa100 }
00236 },
00237
00238 {
00239 { 0, 0, 0, 0 },
00240 { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
00241 & ifmt_add, { 0xac00 }
00242 },
00243
00244 {
00245 { 0, 0, 0, 0 },
00246 { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
00247 & ifmt_add, { 0xad00 }
00248 },
00249
00250 {
00251 { 0, 0, 0, 0 },
00252 { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
00253 & ifmt_add, { 0xae00 }
00254 },
00255
00256 {
00257 { 0, 0, 0, 0 },
00258 { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
00259 & ifmt_add, { 0xaa00 }
00260 },
00261
00262 {
00263 { 0, 0, 0, 0 },
00264 { { MNEM, ' ', OP (U4), ',', OP (RI), 0 } },
00265 & ifmt_addi, { 0xa800 }
00266 },
00267
00268 {
00269 { 0, 0, 0, 0 },
00270 { { MNEM, ' ', OP (M4), ',', OP (RI), 0 } },
00271 & ifmt_add2, { 0xa900 }
00272 },
00273
00274 {
00275 { 0, 0, 0, 0 },
00276 { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
00277 & ifmt_add, { 0x8200 }
00278 },
00279
00280 {
00281 { 0, 0, 0, 0 },
00282 { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
00283 & ifmt_add, { 0x9200 }
00284 },
00285
00286 {
00287 { 0, 0, 0, 0 },
00288 { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
00289 & ifmt_add, { 0x9a00 }
00290 },
00291
00292 {
00293 { 0, 0, 0, 0 },
00294 { { MNEM, ' ', OP (RJ), ',', '@', OP (RI), 0 } },
00295 & ifmt_add, { 0x8400 }
00296 },
00297
00298 {
00299 { 0, 0, 0, 0 },
00300 { { MNEM, ' ', OP (RJ), ',', '@', OP (RI), 0 } },
00301 & ifmt_add, { 0x8500 }
00302 },
00303
00304 {
00305 { 0, 0, 0, 0 },
00306 { { MNEM, ' ', OP (RJ), ',', '@', OP (RI), 0 } },
00307 & ifmt_add, { 0x8600 }
00308 },
00309
00310 {
00311 { 0, 0, 0, 0 },
00312 { { MNEM, ' ', OP (RJ), ',', '@', OP (RI), 0 } },
00313 & ifmt_add, { 0x9400 }
00314 },
00315
00316 {
00317 { 0, 0, 0, 0 },
00318 { { MNEM, ' ', OP (RJ), ',', '@', OP (RI), 0 } },
00319 & ifmt_add, { 0x9500 }
00320 },
00321
00322 {
00323 { 0, 0, 0, 0 },
00324 { { MNEM, ' ', OP (RJ), ',', '@', OP (RI), 0 } },
00325 & ifmt_add, { 0x9600 }
00326 },
00327
00328 {
00329 { 0, 0, 0, 0 },
00330 { { MNEM, ' ', OP (RJ), ',', '@', OP (RI), 0 } },
00331 & ifmt_add, { 0x9c00 }
00332 },
00333
00334 {
00335 { 0, 0, 0, 0 },
00336 { { MNEM, ' ', OP (RJ), ',', '@', OP (RI), 0 } },
00337 & ifmt_add, { 0x9d00 }
00338 },
00339
00340 {
00341 { 0, 0, 0, 0 },
00342 { { MNEM, ' ', OP (RJ), ',', '@', OP (RI), 0 } },
00343 & ifmt_add, { 0x9e00 }
00344 },
00345
00346 {
00347 { 0, 0, 0, 0 },
00348 { { MNEM, ' ', OP (U4), ',', '@', OP (RI), 0 } },
00349 & ifmt_addi, { 0x8000 }
00350 },
00351
00352 {
00353 { 0, 0, 0, 0 },
00354 { { MNEM, ' ', OP (U4), ',', '@', OP (RI), 0 } },
00355 & ifmt_addi, { 0x9000 }
00356 },
00357
00358 {
00359 { 0, 0, 0, 0 },
00360 { { MNEM, ' ', OP (U4), ',', '@', OP (RI), 0 } },
00361 & ifmt_addi, { 0x9800 }
00362 },
00363
00364 {
00365 { 0, 0, 0, 0 },
00366 { { MNEM, ' ', OP (U4), ',', '@', OP (RI), 0 } },
00367 & ifmt_addi, { 0x8100 }
00368 },
00369
00370 {
00371 { 0, 0, 0, 0 },
00372 { { MNEM, ' ', OP (U4), ',', '@', OP (RI), 0 } },
00373 & ifmt_addi, { 0x9100 }
00374 },
00375
00376 {
00377 { 0, 0, 0, 0 },
00378 { { MNEM, ' ', OP (U4), ',', '@', OP (RI), 0 } },
00379 & ifmt_addi, { 0x9900 }
00380 },
00381
00382 {
00383 { 0, 0, 0, 0 },
00384 { { MNEM, ' ', OP (U4), ',', '@', OP (RI), 0 } },
00385 & ifmt_addi, { 0x8800 }
00386 },
00387
00388 {
00389 { 0, 0, 0, 0 },
00390 { { MNEM, ' ', OP (U4), ',', '@', OP (RI), 0 } },
00391 & ifmt_addi, { 0x8900 }
00392 },
00393
00394 {
00395 { 0, 0, 0, 0 },
00396 { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
00397 & ifmt_add, { 0xaf00 }
00398 },
00399
00400 {
00401 { 0, 0, 0, 0 },
00402 { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
00403 & ifmt_add, { 0xab00 }
00404 },
00405
00406 {
00407 { 0, 0, 0, 0 },
00408 { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
00409 & ifmt_add, { 0xbf00 }
00410 },
00411
00412 {
00413 { 0, 0, 0, 0 },
00414 { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
00415 & ifmt_add, { 0xbb00 }
00416 },
00417
00418 {
00419 { 0, 0, 0, 0 },
00420 { { MNEM, ' ', OP (RI), 0 } },
00421 & ifmt_div0s, { 0x9740 }
00422 },
00423
00424 {
00425 { 0, 0, 0, 0 },
00426 { { MNEM, ' ', OP (RI), 0 } },
00427 & ifmt_div0s, { 0x9750 }
00428 },
00429
00430 {
00431 { 0, 0, 0, 0 },
00432 { { MNEM, ' ', OP (RI), 0 } },
00433 & ifmt_div0s, { 0x9760 }
00434 },
00435
00436 {
00437 { 0, 0, 0, 0 },
00438 { { MNEM, ' ', OP (RI), 0 } },
00439 & ifmt_div0s, { 0x9770 }
00440 },
00441
00442 {
00443 { 0, 0, 0, 0 },
00444 { { MNEM, 0 } },
00445 & ifmt_div3, { 0x9f60 }
00446 },
00447
00448 {
00449 { 0, 0, 0, 0 },
00450 { { MNEM, 0 } },
00451 & ifmt_div3, { 0x9f70 }
00452 },
00453
00454 {
00455 { 0, 0, 0, 0 },
00456 { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
00457 & ifmt_add, { 0xb600 }
00458 },
00459
00460 {
00461 { 0, 0, 0, 0 },
00462 { { MNEM, ' ', OP (U4), ',', OP (RI), 0 } },
00463 & ifmt_addi, { 0xb400 }
00464 },
00465
00466 {
00467 { 0, 0, 0, 0 },
00468 { { MNEM, ' ', OP (U4), ',', OP (RI), 0 } },
00469 & ifmt_addi, { 0xb500 }
00470 },
00471
00472 {
00473 { 0, 0, 0, 0 },
00474 { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
00475 & ifmt_add, { 0xb200 }
00476 },
00477
00478 {
00479 { 0, 0, 0, 0 },
00480 { { MNEM, ' ', OP (U4), ',', OP (RI), 0 } },
00481 & ifmt_addi, { 0xb000 }
00482 },
00483
00484 {
00485 { 0, 0, 0, 0 },
00486 { { MNEM, ' ', OP (U4), ',', OP (RI), 0 } },
00487 & ifmt_addi, { 0xb100 }
00488 },
00489
00490 {
00491 { 0, 0, 0, 0 },
00492 { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
00493 & ifmt_add, { 0xba00 }
00494 },
00495
00496 {
00497 { 0, 0, 0, 0 },
00498 { { MNEM, ' ', OP (U4), ',', OP (RI), 0 } },
00499 & ifmt_addi, { 0xb800 }
00500 },
00501
00502 {
00503 { 0, 0, 0, 0 },
00504 { { MNEM, ' ', OP (U4), ',', OP (RI), 0 } },
00505 & ifmt_addi, { 0xb900 }
00506 },
00507
00508 {
00509 { 0, 0, 0, 0 },
00510 { { MNEM, ' ', OP (I8), ',', OP (RI), 0 } },
00511 & ifmt_ldi8, { 0xc000 }
00512 },
00513
00514 {
00515 { 0, 0, 0, 0 },
00516 { { MNEM, ' ', OP (I20), ',', OP (RI), 0 } },
00517 & ifmt_ldi20, { 0x9b00 }
00518 },
00519
00520 {
00521 { 0, 0, 0, 0 },
00522 { { MNEM, ' ', OP (I32), ',', OP (RI), 0 } },
00523 & ifmt_ldi32, { 0x9f80 }
00524 },
00525
00526 {
00527 { 0, 0, 0, 0 },
00528 { { MNEM, ' ', '@', OP (RJ), ',', OP (RI), 0 } },
00529 & ifmt_add, { 0x400 }
00530 },
00531
00532 {
00533 { 0, 0, 0, 0 },
00534 { { MNEM, ' ', '@', OP (RJ), ',', OP (RI), 0 } },
00535 & ifmt_add, { 0x500 }
00536 },
00537
00538 {
00539 { 0, 0, 0, 0 },
00540 { { MNEM, ' ', '@', OP (RJ), ',', OP (RI), 0 } },
00541 & ifmt_add, { 0x600 }
00542 },
00543
00544 {
00545 { 0, 0, 0, 0 },
00546 { { MNEM, ' ', '@', '(', OP (R13), ',', OP (RJ), ')', ',', OP (RI), 0 } },
00547 & ifmt_add, { 0x0 }
00548 },
00549
00550 {
00551 { 0, 0, 0, 0 },
00552 { { MNEM, ' ', '@', '(', OP (R13), ',', OP (RJ), ')', ',', OP (RI), 0 } },
00553 & ifmt_add, { 0x100 }
00554 },
00555
00556 {
00557 { 0, 0, 0, 0 },
00558 { { MNEM, ' ', '@', '(', OP (R13), ',', OP (RJ), ')', ',', OP (RI), 0 } },
00559 & ifmt_add, { 0x200 }
00560 },
00561
00562 {
00563 { 0, 0, 0, 0 },
00564 { { MNEM, ' ', '@', '(', OP (R14), ',', OP (DISP10), ')', ',', OP (RI), 0 } },
00565 & ifmt_ldr14, { 0x2000 }
00566 },
00567
00568 {
00569 { 0, 0, 0, 0 },
00570 { { MNEM, ' ', '@', '(', OP (R14), ',', OP (DISP9), ')', ',', OP (RI), 0 } },
00571 & ifmt_ldr14uh, { 0x4000 }
00572 },
00573
00574 {
00575 { 0, 0, 0, 0 },
00576 { { MNEM, ' ', '@', '(', OP (R14), ',', OP (DISP8), ')', ',', OP (RI), 0 } },
00577 & ifmt_ldr14ub, { 0x6000 }
00578 },
00579
00580 {
00581 { 0, 0, 0, 0 },
00582 { { MNEM, ' ', '@', '(', OP (R15), ',', OP (UDISP6), ')', ',', OP (RI), 0 } },
00583 & ifmt_ldr15, { 0x300 }
00584 },
00585
00586 {
00587 { 0, 0, 0, 0 },
00588 { { MNEM, ' ', '@', OP (R15), '+', ',', OP (RI), 0 } },
00589 & ifmt_div0s, { 0x700 }
00590 },
00591
00592 {
00593 { 0, 0, 0, 0 },
00594 { { MNEM, ' ', '@', OP (R15), '+', ',', OP (RS2), 0 } },
00595 & ifmt_ldr15dr, { 0x780 }
00596 },
00597
00598 {
00599 { 0, 0, 0, 0 },
00600 { { MNEM, ' ', '@', OP (R15), '+', ',', OP (PS), 0 } },
00601 & ifmt_div3, { 0x790 }
00602 },
00603
00604 {
00605 { 0, 0, 0, 0 },
00606 { { MNEM, ' ', OP (RI), ',', '@', OP (RJ), 0 } },
00607 & ifmt_add, { 0x1400 }
00608 },
00609
00610 {
00611 { 0, 0, 0, 0 },
00612 { { MNEM, ' ', OP (RI), ',', '@', OP (RJ), 0 } },
00613 & ifmt_add, { 0x1500 }
00614 },
00615
00616 {
00617 { 0, 0, 0, 0 },
00618 { { MNEM, ' ', OP (RI), ',', '@', OP (RJ), 0 } },
00619 & ifmt_add, { 0x1600 }
00620 },
00621
00622 {
00623 { 0, 0, 0, 0 },
00624 { { MNEM, ' ', OP (RI), ',', '@', '(', OP (R13), ',', OP (RJ), ')', 0 } },
00625 & ifmt_add, { 0x1000 }
00626 },
00627
00628 {
00629 { 0, 0, 0, 0 },
00630 { { MNEM, ' ', OP (RI), ',', '@', '(', OP (R13), ',', OP (RJ), ')', 0 } },
00631 & ifmt_add, { 0x1100 }
00632 },
00633
00634 {
00635 { 0, 0, 0, 0 },
00636 { { MNEM, ' ', OP (RI), ',', '@', '(', OP (R13), ',', OP (RJ), ')', 0 } },
00637 & ifmt_add, { 0x1200 }
00638 },
00639
00640 {
00641 { 0, 0, 0, 0 },
00642 { { MNEM, ' ', OP (RI), ',', '@', '(', OP (R14), ',', OP (DISP10), ')', 0 } },
00643 & ifmt_ldr14, { 0x3000 }
00644 },
00645
00646 {
00647 { 0, 0, 0, 0 },
00648 { { MNEM, ' ', OP (RI), ',', '@', '(', OP (R14), ',', OP (DISP9), ')', 0 } },
00649 & ifmt_ldr14uh, { 0x5000 }
00650 },
00651
00652 {
00653 { 0, 0, 0, 0 },
00654 { { MNEM, ' ', OP (RI), ',', '@', '(', OP (R14), ',', OP (DISP8), ')', 0 } },
00655 & ifmt_ldr14ub, { 0x7000 }
00656 },
00657
00658 {
00659 { 0, 0, 0, 0 },
00660 { { MNEM, ' ', OP (RI), ',', '@', '(', OP (R15), ',', OP (UDISP6), ')', 0 } },
00661 & ifmt_ldr15, { 0x1300 }
00662 },
00663
00664 {
00665 { 0, 0, 0, 0 },
00666 { { MNEM, ' ', OP (RI), ',', '@', '-', OP (R15), 0 } },
00667 & ifmt_div0s, { 0x1700 }
00668 },
00669
00670 {
00671 { 0, 0, 0, 0 },
00672 { { MNEM, ' ', OP (RS2), ',', '@', '-', OP (R15), 0 } },
00673 & ifmt_ldr15dr, { 0x1780 }
00674 },
00675
00676 {
00677 { 0, 0, 0, 0 },
00678 { { MNEM, ' ', OP (PS), ',', '@', '-', OP (R15), 0 } },
00679 & ifmt_div3, { 0x1790 }
00680 },
00681
00682 {
00683 { 0, 0, 0, 0 },
00684 { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
00685 & ifmt_add, { 0x8b00 }
00686 },
00687
00688 {
00689 { 0, 0, 0, 0 },
00690 { { MNEM, ' ', OP (RS1), ',', OP (RI), 0 } },
00691 & ifmt_movdr, { 0xb700 }
00692 },
00693
00694 {
00695 { 0, 0, 0, 0 },
00696 { { MNEM, ' ', OP (PS), ',', OP (RI), 0 } },
00697 & ifmt_div0s, { 0x1710 }
00698 },
00699
00700 {
00701 { 0, 0, 0, 0 },
00702 { { MNEM, ' ', OP (RI), ',', OP (RS1), 0 } },
00703 & ifmt_movdr, { 0xb300 }
00704 },
00705
00706 {
00707 { 0, 0, 0, 0 },
00708 { { MNEM, ' ', OP (RI), ',', OP (PS), 0 } },
00709 & ifmt_div0s, { 0x710 }
00710 },
00711
00712 {
00713 { 0, 0, 0, 0 },
00714 { { MNEM, ' ', '@', OP (RI), 0 } },
00715 & ifmt_div0s, { 0x9700 }
00716 },
00717
00718 {
00719 { 0, 0, 0, 0 },
00720 { { MNEM, ' ', '@', OP (RI), 0 } },
00721 & ifmt_div0s, { 0x9f00 }
00722 },
00723
00724 {
00725 { 0, 0, 0, 0 },
00726 { { MNEM, ' ', '@', OP (RI), 0 } },
00727 & ifmt_div0s, { 0x9710 }
00728 },
00729
00730 {
00731 { 0, 0, 0, 0 },
00732 { { MNEM, ' ', '@', OP (RI), 0 } },
00733 & ifmt_div0s, { 0x9f10 }
00734 },
00735
00736 {
00737 { 0, 0, 0, 0 },
00738 { { MNEM, ' ', OP (LABEL12), 0 } },
00739 & ifmt_call, { 0xd000 }
00740 },
00741
00742 {
00743 { 0, 0, 0, 0 },
00744 { { MNEM, ' ', OP (LABEL12), 0 } },
00745 & ifmt_call, { 0xd800 }
00746 },
00747
00748 {
00749 { 0, 0, 0, 0 },
00750 { { MNEM, 0 } },
00751 & ifmt_div3, { 0x9720 }
00752 },
00753
00754 {
00755 { 0, 0, 0, 0 },
00756 { { MNEM, 0 } },
00757 & ifmt_div3, { 0x9f20 }
00758 },
00759
00760 {
00761 { 0, 0, 0, 0 },
00762 { { MNEM, ' ', OP (U8), 0 } },
00763 & ifmt_int, { 0x1f00 }
00764 },
00765
00766 {
00767 { 0, 0, 0, 0 },
00768 { { MNEM, 0 } },
00769 & ifmt_div3, { 0x9f30 }
00770 },
00771
00772 {
00773 { 0, 0, 0, 0 },
00774 { { MNEM, 0 } },
00775 & ifmt_div3, { 0x9730 }
00776 },
00777
00778 {
00779 { 0, 0, 0, 0 },
00780 { { MNEM, ' ', OP (LABEL9), 0 } },
00781 & ifmt_brad, { 0xf000 }
00782 },
00783
00784 {
00785 { 0, 0, 0, 0 },
00786 { { MNEM, ' ', OP (LABEL9), 0 } },
00787 & ifmt_brad, { 0xe000 }
00788 },
00789
00790 {
00791 { 0, 0, 0, 0 },
00792 { { MNEM, ' ', OP (LABEL9), 0 } },
00793 & ifmt_brad, { 0xf100 }
00794 },
00795
00796 {
00797 { 0, 0, 0, 0 },
00798 { { MNEM, ' ', OP (LABEL9), 0 } },
00799 & ifmt_brad, { 0xe100 }
00800 },
00801
00802 {
00803 { 0, 0, 0, 0 },
00804 { { MNEM, ' ', OP (LABEL9), 0 } },
00805 & ifmt_brad, { 0xf200 }
00806 },
00807
00808 {
00809 { 0, 0, 0, 0 },
00810 { { MNEM, ' ', OP (LABEL9), 0 } },
00811 & ifmt_brad, { 0xe200 }
00812 },
00813
00814 {
00815 { 0, 0, 0, 0 },
00816 { { MNEM, ' ', OP (LABEL9), 0 } },
00817 & ifmt_brad, { 0xf300 }
00818 },
00819
00820 {
00821 { 0, 0, 0, 0 },
00822 { { MNEM, ' ', OP (LABEL9), 0 } },
00823 & ifmt_brad, { 0xe300 }
00824 },
00825
00826 {
00827 { 0, 0, 0, 0 },
00828 { { MNEM, ' ', OP (LABEL9), 0 } },
00829 & ifmt_brad, { 0xf400 }
00830 },
00831
00832 {
00833 { 0, 0, 0, 0 },
00834 { { MNEM, ' ', OP (LABEL9), 0 } },
00835 & ifmt_brad, { 0xe400 }
00836 },
00837
00838 {
00839 { 0, 0, 0, 0 },
00840 { { MNEM, ' ', OP (LABEL9), 0 } },
00841 & ifmt_brad, { 0xf500 }
00842 },
00843
00844 {
00845 { 0, 0, 0, 0 },
00846 { { MNEM, ' ', OP (LABEL9), 0 } },
00847 & ifmt_brad, { 0xe500 }
00848 },
00849
00850 {
00851 { 0, 0, 0, 0 },
00852 { { MNEM, ' ', OP (LABEL9), 0 } },
00853 & ifmt_brad, { 0xf600 }
00854 },
00855
00856 {
00857 { 0, 0, 0, 0 },
00858 { { MNEM, ' ', OP (LABEL9), 0 } },
00859 & ifmt_brad, { 0xe600 }
00860 },
00861
00862 {
00863 { 0, 0, 0, 0 },
00864 { { MNEM, ' ', OP (LABEL9), 0 } },
00865 & ifmt_brad, { 0xf700 }
00866 },
00867
00868 {
00869 { 0, 0, 0, 0 },
00870 { { MNEM, ' ', OP (LABEL9), 0 } },
00871 & ifmt_brad, { 0xe700 }
00872 },
00873
00874 {
00875 { 0, 0, 0, 0 },
00876 { { MNEM, ' ', OP (LABEL9), 0 } },
00877 & ifmt_brad, { 0xf800 }
00878 },
00879
00880 {
00881 { 0, 0, 0, 0 },
00882 { { MNEM, ' ', OP (LABEL9), 0 } },
00883 & ifmt_brad, { 0xe800 }
00884 },
00885
00886 {
00887 { 0, 0, 0, 0 },
00888 { { MNEM, ' ', OP (LABEL9), 0 } },
00889 & ifmt_brad, { 0xf900 }
00890 },
00891
00892 {
00893 { 0, 0, 0, 0 },
00894 { { MNEM, ' ', OP (LABEL9), 0 } },
00895 & ifmt_brad, { 0xe900 }
00896 },
00897
00898 {
00899 { 0, 0, 0, 0 },
00900 { { MNEM, ' ', OP (LABEL9), 0 } },
00901 & ifmt_brad, { 0xfa00 }
00902 },
00903
00904 {
00905 { 0, 0, 0, 0 },
00906 { { MNEM, ' ', OP (LABEL9), 0 } },
00907 & ifmt_brad, { 0xea00 }
00908 },
00909
00910 {
00911 { 0, 0, 0, 0 },
00912 { { MNEM, ' ', OP (LABEL9), 0 } },
00913 & ifmt_brad, { 0xfb00 }
00914 },
00915
00916 {
00917 { 0, 0, 0, 0 },
00918 { { MNEM, ' ', OP (LABEL9), 0 } },
00919 & ifmt_brad, { 0xeb00 }
00920 },
00921
00922 {
00923 { 0, 0, 0, 0 },
00924 { { MNEM, ' ', OP (LABEL9), 0 } },
00925 & ifmt_brad, { 0xfc00 }
00926 },
00927
00928 {
00929 { 0, 0, 0, 0 },
00930 { { MNEM, ' ', OP (LABEL9), 0 } },
00931 & ifmt_brad, { 0xec00 }
00932 },
00933
00934 {
00935 { 0, 0, 0, 0 },
00936 { { MNEM, ' ', OP (LABEL9), 0 } },
00937 & ifmt_brad, { 0xfd00 }
00938 },
00939
00940 {
00941 { 0, 0, 0, 0 },
00942 { { MNEM, ' ', OP (LABEL9), 0 } },
00943 & ifmt_brad, { 0xed00 }
00944 },
00945
00946 {
00947 { 0, 0, 0, 0 },
00948 { { MNEM, ' ', OP (LABEL9), 0 } },
00949 & ifmt_brad, { 0xfe00 }
00950 },
00951
00952 {
00953 { 0, 0, 0, 0 },
00954 { { MNEM, ' ', OP (LABEL9), 0 } },
00955 & ifmt_brad, { 0xee00 }
00956 },
00957
00958 {
00959 { 0, 0, 0, 0 },
00960 { { MNEM, ' ', OP (LABEL9), 0 } },
00961 & ifmt_brad, { 0xff00 }
00962 },
00963
00964 {
00965 { 0, 0, 0, 0 },
00966 { { MNEM, ' ', OP (LABEL9), 0 } },
00967 & ifmt_brad, { 0xef00 }
00968 },
00969
00970 {
00971 { 0, 0, 0, 0 },
00972 { { MNEM, ' ', OP (R13), ',', '@', OP (DIR10), 0 } },
00973 & ifmt_dmovr13, { 0x1800 }
00974 },
00975
00976 {
00977 { 0, 0, 0, 0 },
00978 { { MNEM, ' ', OP (R13), ',', '@', OP (DIR9), 0 } },
00979 & ifmt_dmovr13h, { 0x1900 }
00980 },
00981
00982 {
00983 { 0, 0, 0, 0 },
00984 { { MNEM, ' ', OP (R13), ',', '@', OP (DIR8), 0 } },
00985 & ifmt_dmovr13b, { 0x1a00 }
00986 },
00987
00988 {
00989 { 0, 0, 0, 0 },
00990 { { MNEM, ' ', '@', OP (R13), '+', ',', '@', OP (DIR10), 0 } },
00991 & ifmt_dmovr13, { 0x1c00 }
00992 },
00993
00994 {
00995 { 0, 0, 0, 0 },
00996 { { MNEM, ' ', '@', OP (R13), '+', ',', '@', OP (DIR9), 0 } },
00997 & ifmt_dmovr13h, { 0x1d00 }
00998 },
00999
01000 {
01001 { 0, 0, 0, 0 },
01002 { { MNEM, ' ', '@', OP (R13), '+', ',', '@', OP (DIR8), 0 } },
01003 & ifmt_dmovr13b, { 0x1e00 }
01004 },
01005
01006 {
01007 { 0, 0, 0, 0 },
01008 { { MNEM, ' ', '@', OP (R15), '+', ',', '@', OP (DIR10), 0 } },
01009 & ifmt_dmovr13, { 0x1b00 }
01010 },
01011
01012 {
01013 { 0, 0, 0, 0 },
01014 { { MNEM, ' ', '@', OP (DIR10), ',', OP (R13), 0 } },
01015 & ifmt_dmovr13, { 0x800 }
01016 },
01017
01018 {
01019 { 0, 0, 0, 0 },
01020 { { MNEM, ' ', '@', OP (DIR9), ',', OP (R13), 0 } },
01021 & ifmt_dmovr13h, { 0x900 }
01022 },
01023
01024 {
01025 { 0, 0, 0, 0 },
01026 { { MNEM, ' ', '@', OP (DIR8), ',', OP (R13), 0 } },
01027 & ifmt_dmovr13b, { 0xa00 }
01028 },
01029
01030 {
01031 { 0, 0, 0, 0 },
01032 { { MNEM, ' ', '@', OP (DIR10), ',', '@', OP (R13), '+', 0 } },
01033 & ifmt_dmovr13, { 0xc00 }
01034 },
01035
01036 {
01037 { 0, 0, 0, 0 },
01038 { { MNEM, ' ', '@', OP (DIR9), ',', '@', OP (R13), '+', 0 } },
01039 & ifmt_dmovr13h, { 0xd00 }
01040 },
01041
01042 {
01043 { 0, 0, 0, 0 },
01044 { { MNEM, ' ', '@', OP (DIR8), ',', '@', OP (R13), '+', 0 } },
01045 & ifmt_dmovr13b, { 0xe00 }
01046 },
01047
01048 {
01049 { 0, 0, 0, 0 },
01050 { { MNEM, ' ', '@', OP (DIR10), ',', '@', '-', OP (R15), 0 } },
01051 & ifmt_dmovr13, { 0xb00 }
01052 },
01053
01054 {
01055 { 0, 0, 0, 0 },
01056 { { MNEM, ' ', '@', OP (RI), '+', ',', OP (U4), 0 } },
01057 & ifmt_addi, { 0xbc00 }
01058 },
01059
01060 {
01061 { 0, 0, 0, 0 },
01062 { { MNEM, ' ', OP (U4), ',', '@', OP (RI), '+', 0 } },
01063 & ifmt_addi, { 0xbd00 }
01064 },
01065
01066 {
01067 { 0, 0, 0, 0 },
01068 { { MNEM, ' ', OP (U4C), ',', OP (CCC), ',', OP (CRJ), ',', OP (CRI), 0 } },
01069 & ifmt_copop, { 0x9fc0 }
01070 },
01071
01072 {
01073 { 0, 0, 0, 0 },
01074 { { MNEM, ' ', OP (U4C), ',', OP (CCC), ',', OP (RJC), ',', OP (CRI), 0 } },
01075 & ifmt_copld, { 0x9fd0 }
01076 },
01077
01078 {
01079 { 0, 0, 0, 0 },
01080 { { MNEM, ' ', OP (U4C), ',', OP (CCC), ',', OP (CRJ), ',', OP (RIC), 0 } },
01081 & ifmt_copst, { 0x9fe0 }
01082 },
01083
01084 {
01085 { 0, 0, 0, 0 },
01086 { { MNEM, ' ', OP (U4C), ',', OP (CCC), ',', OP (CRJ), ',', OP (RIC), 0 } },
01087 & ifmt_copst, { 0x9ff0 }
01088 },
01089
01090 {
01091 { 0, 0, 0, 0 },
01092 { { MNEM, 0 } },
01093 & ifmt_div3, { 0x9fa0 }
01094 },
01095
01096 {
01097 { 0, 0, 0, 0 },
01098 { { MNEM, ' ', OP (U8), 0 } },
01099 & ifmt_int, { 0x8300 }
01100 },
01101
01102 {
01103 { 0, 0, 0, 0 },
01104 { { MNEM, ' ', OP (U8), 0 } },
01105 & ifmt_int, { 0x9300 }
01106 },
01107
01108 {
01109 { 0, 0, 0, 0 },
01110 { { MNEM, ' ', OP (U8), 0 } },
01111 & ifmt_int, { 0x8700 }
01112 },
01113
01114 {
01115 { 0, 0, 0, 0 },
01116 { { MNEM, ' ', OP (S10), 0 } },
01117 & ifmt_addsp, { 0xa300 }
01118 },
01119
01120 {
01121 { 0, 0, 0, 0 },
01122 { { MNEM, ' ', OP (RI), 0 } },
01123 & ifmt_div0s, { 0x9780 }
01124 },
01125
01126 {
01127 { 0, 0, 0, 0 },
01128 { { MNEM, ' ', OP (RI), 0 } },
01129 & ifmt_div0s, { 0x9790 }
01130 },
01131
01132 {
01133 { 0, 0, 0, 0 },
01134 { { MNEM, ' ', OP (RI), 0 } },
01135 & ifmt_div0s, { 0x97a0 }
01136 },
01137
01138 {
01139 { 0, 0, 0, 0 },
01140 { { MNEM, ' ', OP (RI), 0 } },
01141 & ifmt_div0s, { 0x97b0 }
01142 },
01143
01144 {
01145 { 0, 0, 0, 0 },
01146 { { MNEM, ' ', '(', OP (REGLIST_LOW_LD), ')', 0 } },
01147 & ifmt_ldm0, { 0x8c00 }
01148 },
01149
01150 {
01151 { 0, 0, 0, 0 },
01152 { { MNEM, ' ', '(', OP (REGLIST_HI_LD), ')', 0 } },
01153 & ifmt_ldm1, { 0x8d00 }
01154 },
01155
01156 {
01157 { 0, 0, 0, 0 },
01158 { { MNEM, ' ', '(', OP (REGLIST_LOW_ST), ')', 0 } },
01159 & ifmt_stm0, { 0x8e00 }
01160 },
01161
01162 {
01163 { 0, 0, 0, 0 },
01164 { { MNEM, ' ', '(', OP (REGLIST_HI_ST), ')', 0 } },
01165 & ifmt_stm1, { 0x8f00 }
01166 },
01167
01168 {
01169 { 0, 0, 0, 0 },
01170 { { MNEM, ' ', OP (U10), 0 } },
01171 & ifmt_enter, { 0xf00 }
01172 },
01173
01174 {
01175 { 0, 0, 0, 0 },
01176 { { MNEM, 0 } },
01177 & ifmt_div3, { 0x9f90 }
01178 },
01179
01180 {
01181 { 0, 0, 0, 0 },
01182 { { MNEM, ' ', '@', OP (RJ), ',', OP (RI), 0 } },
01183 & ifmt_add, { 0x8a00 }
01184 },
01185 };
01186
01187 #undef A
01188 #undef OPERAND
01189 #undef MNEM
01190 #undef OP
01191
01192
01193
01194 #if defined (__STDC__) || defined (ALMOST_STDC) || defined (HAVE_STRINGIZE)
01195 #define F(f) & fr30_cgen_ifld_table[FR30_##f]
01196 #else
01197 #define F(f) & fr30_cgen_ifld_table[FR30_f]
01198 #endif
01199 static const CGEN_IFMT ifmt_ldi8m ATTRIBUTE_UNUSED = {
01200 16, 16, 0xf000, { { F (F_OP1) }, { F (F_I8) }, { F (F_RI) }, { 0 } }
01201 };
01202
01203 static const CGEN_IFMT ifmt_ldi20m ATTRIBUTE_UNUSED = {
01204 16, 32, 0xff00, { { F (F_OP1) }, { F (F_OP2) }, { F (F_RI) }, { F (F_I20) }, { 0 } }
01205 };
01206
01207 static const CGEN_IFMT ifmt_ldi32m ATTRIBUTE_UNUSED = {
01208 16, 48, 0xfff0, { { F (F_OP1) }, { F (F_OP2) }, { F (F_OP3) }, { F (F_RI) }, { F (F_I32) }, { 0 } }
01209 };
01210
01211 #undef F
01212
01213
01214
01215 #if defined (__STDC__) || defined (ALMOST_STDC) || defined (HAVE_STRINGIZE)
01216 #define A(a) (1 << CGEN_INSN_##a)
01217 #else
01218 #define A(a) (1 << CGEN_INSN_a)
01219 #endif
01220 #if defined (__STDC__) || defined (ALMOST_STDC) || defined (HAVE_STRINGIZE)
01221 #define OPERAND(op) FR30_OPERAND_##op
01222 #else
01223 #define OPERAND(op) FR30_OPERAND_op
01224 #endif
01225 #define MNEM CGEN_SYNTAX_MNEMONIC
01226 #define OP(field) CGEN_SYNTAX_MAKE_FIELD (OPERAND (field))
01227
01228
01229
01230 static const CGEN_IBASE fr30_cgen_macro_insn_table[] =
01231 {
01232
01233 {
01234 -1, "ldi8m", "ldi8", 16,
01235 { 0|A(NO_DIS)|A(ALIAS), { (1<<MACH_BASE) } }
01236 },
01237
01238 {
01239 -1, "ldi20m", "ldi20", 32,
01240 { 0|A(NO_DIS)|A(ALIAS), { (1<<MACH_BASE) } }
01241 },
01242
01243 {
01244 -1, "ldi32m", "ldi32", 48,
01245 { 0|A(NO_DIS)|A(ALIAS), { (1<<MACH_BASE) } }
01246 },
01247 };
01248
01249
01250
01251 static const CGEN_OPCODE fr30_cgen_macro_insn_opcode_table[] =
01252 {
01253
01254 {
01255 { 0, 0, 0, 0 },
01256 { { MNEM, ' ', OP (I8), ',', OP (RI), 0 } },
01257 & ifmt_ldi8m, { 0xc000 }
01258 },
01259
01260 {
01261 { 0, 0, 0, 0 },
01262 { { MNEM, ' ', OP (I20), ',', OP (RI), 0 } },
01263 & ifmt_ldi20m, { 0x9b00 }
01264 },
01265
01266 {
01267 { 0, 0, 0, 0 },
01268 { { MNEM, ' ', OP (I32), ',', OP (RI), 0 } },
01269 & ifmt_ldi32m, { 0x9f80 }
01270 },
01271 };
01272
01273 #undef A
01274 #undef OPERAND
01275 #undef MNEM
01276 #undef OP
01277
01278 #ifndef CGEN_ASM_HASH_P
01279 #define CGEN_ASM_HASH_P(insn) 1
01280 #endif
01281
01282 #ifndef CGEN_DIS_HASH_P
01283 #define CGEN_DIS_HASH_P(insn) 1
01284 #endif
01285
01286
01287
01288
01289 static int
01290 asm_hash_insn_p (insn)
01291 const CGEN_INSN *insn ATTRIBUTE_UNUSED;
01292 {
01293 return CGEN_ASM_HASH_P (insn);
01294 }
01295
01296 static int
01297 dis_hash_insn_p (insn)
01298 const CGEN_INSN *insn;
01299 {
01300
01301
01302 if (CGEN_INSN_ATTR_VALUE (insn, CGEN_INSN_NO_DIS))
01303 return 0;
01304 return CGEN_DIS_HASH_P (insn);
01305 }
01306
01307 #ifndef CGEN_ASM_HASH
01308 #define CGEN_ASM_HASH_SIZE 127
01309 #ifdef CGEN_MNEMONIC_OPERANDS
01310 #define CGEN_ASM_HASH(mnem) (*(unsigned char *) (mnem) % CGEN_ASM_HASH_SIZE)
01311 #else
01312 #define CGEN_ASM_HASH(mnem) (*(unsigned char *) (mnem) % CGEN_ASM_HASH_SIZE)
01313 #endif
01314 #endif
01315
01316
01317
01318
01319
01320
01321 #ifndef CGEN_DIS_HASH
01322 #define CGEN_DIS_HASH_SIZE 256
01323 #define CGEN_DIS_HASH(buf, value) (*(unsigned char *) (buf))
01324 #endif
01325
01326
01327
01328
01329 static unsigned int
01330 asm_hash_insn (mnem)
01331 const char * mnem;
01332 {
01333 return CGEN_ASM_HASH (mnem);
01334 }
01335
01336
01337
01338
01339 static unsigned int
01340 dis_hash_insn (buf, value)
01341 const char * buf ATTRIBUTE_UNUSED;
01342 CGEN_INSN_INT value ATTRIBUTE_UNUSED;
01343 {
01344 return CGEN_DIS_HASH (buf, value);
01345 }
01346
01347 static void set_fields_bitsize PARAMS ((CGEN_FIELDS *, int));
01348
01349
01350
01351 static void
01352 set_fields_bitsize (fields, size)
01353 CGEN_FIELDS *fields;
01354 int size;
01355 {
01356 CGEN_FIELDS_BITSIZE (fields) = size;
01357 }
01358
01359
01360
01361
01362 void
01363 fr30_cgen_init_opcode_table (cd)
01364 CGEN_CPU_DESC cd;
01365 {
01366 int i;
01367 int num_macros = (sizeof (fr30_cgen_macro_insn_table) /
01368 sizeof (fr30_cgen_macro_insn_table[0]));
01369 const CGEN_IBASE *ib = & fr30_cgen_macro_insn_table[0];
01370 const CGEN_OPCODE *oc = & fr30_cgen_macro_insn_opcode_table[0];
01371 CGEN_INSN *insns = (CGEN_INSN *) xmalloc (num_macros * sizeof (CGEN_INSN));
01372 memset (insns, 0, num_macros * sizeof (CGEN_INSN));
01373 for (i = 0; i < num_macros; ++i)
01374 {
01375 insns[i].base = &ib[i];
01376 insns[i].opcode = &oc[i];
01377 fr30_cgen_build_insn_regex (& insns[i]);
01378 }
01379 cd->macro_insn_table.init_entries = insns;
01380 cd->macro_insn_table.entry_size = sizeof (CGEN_IBASE);
01381 cd->macro_insn_table.num_init_entries = num_macros;
01382
01383 oc = & fr30_cgen_insn_opcode_table[0];
01384 insns = (CGEN_INSN *) cd->insn_table.init_entries;
01385 for (i = 0; i < MAX_INSNS; ++i)
01386 {
01387 insns[i].opcode = &oc[i];
01388 fr30_cgen_build_insn_regex (& insns[i]);
01389 }
01390
01391 cd->sizeof_fields = sizeof (CGEN_FIELDS);
01392 cd->set_fields_bitsize = set_fields_bitsize;
01393
01394 cd->asm_hash_p = asm_hash_insn_p;
01395 cd->asm_hash = asm_hash_insn;
01396 cd->asm_hash_size = CGEN_ASM_HASH_SIZE;
01397
01398 cd->dis_hash_p = dis_hash_insn_p;
01399 cd->dis_hash = dis_hash_insn;
01400 cd->dis_hash_size = CGEN_DIS_HASH_SIZE;
01401 }