1 /* cris-opc.c -- Table of opcodes for the CRIS processor. 2 Copyright 2000 Free Software Foundation, Inc. 3 Contributed by Axis Communications AB, Lund, Sweden. 4 Originally written for GAS 1.38.1 by Mikael Asker. 5 Reorganized by Hans-Peter Nilsson. 6 7 This file is part of GAS, GDB and the GNU binutils. 8 9 GAS, GDB, and GNU binutils is free software; you can redistribute it 10 and/or modify it under the terms of the GNU General Public License as 11 published by the Free Software Foundation; either version 2, or (at your 12 option) any later version. 13 14 GAS, GDB, and GNU binutils are distributed in the hope that they will be 15 useful, but WITHOUT ANY WARRANTY; without even the implied warranty of 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 GNU General Public License for more details. 18 19 You should have received a copy of the GNU General Public License 20 along with this program; if not, write to the Free Software 21 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ 22 23 #include "opcode/cris.h" 24 25 #ifndef NULL 26 #define NULL (0) 27 #endif 28 29 const struct cris_spec_reg 30 cris_spec_regs[] = 31 { 32 {"p0", 0, 1, 0, NULL}, 33 {"vr", 1, 1, 0, NULL}, 34 {"p1", 1, 1, 0, NULL}, 35 {"p2", 2, 1, cris_ver_warning, NULL}, 36 {"p3", 3, 1, cris_ver_warning, NULL}, 37 {"p4", 4, 2, 0, NULL}, 38 {"ccr", 5, 2, 0, NULL}, 39 {"p5", 5, 2, 0, NULL}, 40 {"dcr0",6, 2, cris_ver_v0_3, NULL}, 41 {"p6", 6, 2, cris_ver_v0_3, NULL}, 42 {"dcr1/mof", 7, 4, cris_ver_v10p, 43 "Register `dcr1/mof' with ambiguous size specified. Guessing 4 bytes"}, 44 {"dcr1/mof", 7, 2, cris_ver_v0_3, 45 "Register `dcr1/mof' with ambiguous size specified. Guessing 2 bytes"}, 46 {"mof", 7, 4, cris_ver_v10p, NULL}, 47 {"dcr1",7, 2, cris_ver_v0_3, NULL}, 48 {"p7", 7, 4, cris_ver_v10p, NULL}, 49 {"p7", 7, 2, cris_ver_v0_3, NULL}, 50 {"p8", 8, 4, 0, NULL}, 51 {"ibr", 9, 4, 0, NULL}, 52 {"p9", 9, 4, 0, NULL}, 53 {"irp", 10, 4, 0, NULL}, 54 {"p10", 10, 4, 0, NULL}, 55 {"srp", 11, 4, 0, NULL}, 56 {"p11", 11, 4, 0, NULL}, 57 /* For disassembly use only. Accept at assembly with a warning. */ 58 {"bar/dtp0", 12, 4, cris_ver_warning, 59 "Ambiguous register `bar/dtp0' specified"}, 60 {"bar", 12, 4, cris_ver_v8p, NULL}, 61 {"dtp0",12, 4, cris_ver_v0_3, NULL}, 62 {"p12", 12, 4, 0, NULL}, 63 /* For disassembly use only. Accept at assembly with a warning. */ 64 {"dccr/dtp1",13, 4, cris_ver_warning, 65 "Ambiguous register `dccr/dtp1' specified"}, 66 {"dccr",13, 4, cris_ver_v8p, NULL}, 67 {"dtp1",13, 4, cris_ver_v0_3, NULL}, 68 {"p13", 13, 4, 0, NULL}, 69 {"brp", 14, 4, cris_ver_v3p, NULL}, 70 {"p14", 14, 4, cris_ver_v3p, NULL}, 71 {"usp", 15, 4, cris_ver_v10p, NULL}, 72 {"p15", 15, 4, cris_ver_v10p, NULL}, 73 {NULL, 0, 0, cris_ver_version_all, NULL} 74 }; 75 76 /* All CRIS opcodes are 16 bits. 77 78 - The match component is a mask saying which bits must match a 79 particular opcode in order for an instruction to be an instance 80 of that opcode. 81 82 - The args component is a string containing characters symbolically 83 matching the operands of an instruction. Used for both assembly 84 and disassembly. 85 86 Operand-matching characters: 87 B Not really an operand. It causes a "BDAP -size,SP" prefix to be 88 output for the PUSH alias-instructions and recognizes a 89 push-prefix at disassembly. Must be followed by a R or P letter. 90 ! Non-match pattern, will not match if there's a prefix insn. 91 b Non-matching operand, used for branches with 16-bit 92 displacement. Only recognized by the disassembler. 93 c 5-bit unsigned immediate in bits <4:0>. 94 C 4-bit unsigned immediate in bits <3:0>. 95 D General register in bits <15:12> and <3:0>. 96 f List of flags in bits <15:12> and <3:0>. 97 i 6-bit signed immediate in bits <5:0>. 98 I 6-bit unsigned immediate in bits <5:0>. 99 M Size modifier (B, W or D) for CLEAR instructions. 100 m Size modifier (B, W or D) in bits <5:4> 101 o [-128..127] word offset in bits <7:1> and <0>. Used by 8-bit 102 branch instructions. 103 O [-128..127] offset in bits <7:0>. Also matches a comma and a 104 general register after the expression. Used only for the BDAP 105 prefix insn. 106 P Special register in bits <15:12>. 107 p Indicates that the insn is a prefix insn. Must be first 108 character. 109 R General register in bits <15:12>. 110 r General register in bits <3:0>. 111 S Source operand in bit <10> and a prefix; a 3-operand prefix 112 without side-effect. 113 s Source operand in bits <10> and <3:0>, optionally with a 114 side-effect prefix. 115 x Register-dot-modifier, for example "r5.w" in bits <15:12> and <5:4>. 116 y Like 's' but do not allow an integer at assembly. 117 z Size modifier (B or W) in bit <4>. */ 118 119 120 /* Please note the order of the opcodes in this table is significant. 121 The assembler requires that all instances of the same mnemonic must 122 be consecutive. If they aren't, the assembler might not recognize 123 them, or may indicate and internal error. 124 125 The disassembler should not normally care about the order of the 126 opcodes, but will prefer an earlier alternative if the "match-score" 127 (see cris-dis.c) is computed as equal. 128 129 It should not be significant for proper execution that this table is 130 in alphabetical order, but please follow that convention for an easy 131 overview. */ 132 133 const struct cris_opcode 134 cris_opcodes[] = 135 { 136 {"abs", 0x06B0, 0x0940, "r,R", 0, SIZE_NONE, 0, 137 cris_abs_op}, 138 139 {"add", 0x0600, 0x09c0, "m r,R", 0, SIZE_NONE, 0, 140 cris_reg_mode_add_sub_cmp_and_or_move_op}, 141 142 {"add", 0x0A00, 0x01c0, "m s,R", 0, SIZE_FIELD, 0, 143 cris_none_reg_mode_add_sub_cmp_and_or_move_op}, 144 145 {"add", 0x0A00, 0x01c0, "m S,D", 0, SIZE_NONE, 0, 146 cris_none_reg_mode_add_sub_cmp_and_or_move_op}, 147 148 {"add", 0x0a00, 0x05c0, "m S,R,r", 0, SIZE_NONE, 0, 149 cris_three_operand_add_sub_cmp_and_or_op}, 150 151 {"addi", 0x0500, 0x0Ac0, "x,r", 0, SIZE_NONE, 0, 152 cris_addi_op}, 153 154 {"addq", 0x0200, 0x0Dc0, "I,R", 0, SIZE_NONE, 0, 155 cris_quick_mode_add_sub_op}, 156 157 {"adds", 0x0420, 0x0Bc0, "z r,R", 0, SIZE_NONE, 0, 158 cris_reg_mode_add_sub_cmp_and_or_move_op}, 159 160 {"adds", 0x0820, 0x03c0, "z s,R", 0, SIZE_FIELD, 0, 161 cris_none_reg_mode_add_sub_cmp_and_or_move_op}, 162 163 {"adds", 0x0820, 0x03c0, "z S,D", 0, SIZE_NONE, 0, 164 cris_none_reg_mode_add_sub_cmp_and_or_move_op}, 165 166 {"adds", 0x0820, 0x07c0, "z S,R,r", 0, SIZE_NONE, 0, 167 cris_three_operand_add_sub_cmp_and_or_op}, 168 169 {"addu", 0x0400, 0x0be0, "z r,R", 0, SIZE_NONE, 0, 170 cris_reg_mode_add_sub_cmp_and_or_move_op}, 171 172 {"addu", 0x0800, 0x03e0, "z s,R", 0, SIZE_FIELD, 0, 173 cris_none_reg_mode_add_sub_cmp_and_or_move_op}, 174 175 {"addu", 0x0800, 0x03e0, "z S,D", 0, SIZE_NONE, 0, 176 cris_none_reg_mode_add_sub_cmp_and_or_move_op}, 177 178 {"addu", 0x0800, 0x07e0, "z S,R,r", 0, SIZE_NONE, 0, 179 cris_three_operand_add_sub_cmp_and_or_op}, 180 181 {"and", 0x0700, 0x08C0, "m r,R", 0, SIZE_NONE, 0, 182 cris_reg_mode_add_sub_cmp_and_or_move_op}, 183 184 {"and", 0x0B00, 0x00C0, "m s,R", 0, SIZE_FIELD, 0, 185 cris_none_reg_mode_add_sub_cmp_and_or_move_op}, 186 187 {"and", 0x0B00, 0x00C0, "m S,D", 0, SIZE_NONE, 0, 188 cris_none_reg_mode_add_sub_cmp_and_or_move_op}, 189 190 {"and", 0x0B00, 0x04C0, "m S,R,r", 0, SIZE_NONE, 0, 191 cris_three_operand_add_sub_cmp_and_or_op}, 192 193 {"andq", 0x0300, 0x0CC0, "i,R", 0, SIZE_NONE, 0, 194 cris_quick_mode_and_cmp_move_or_op}, 195 196 {"asr", 0x0780, 0x0840, "m r,R", 0, SIZE_NONE, 0, 197 cris_asr_op}, 198 199 {"asrq", 0x03a0, 0x0c40, "c,R", 0, SIZE_NONE, 0, 200 cris_asrq_op}, 201 202 {"ax", 0x15B0, 0xEA4F, "", 0, SIZE_NONE, 0, 203 cris_ax_ei_setf_op}, 204 205 /* FIXME: Should use branch #defines. */ 206 {"b", 0x0dff, 0x0200, "b", 1, SIZE_NONE, 0, 207 cris_sixteen_bit_offset_branch_op}, 208 209 {"ba", 210 BA_QUICK_OPCODE, 211 0x0F00+(0xF-CC_A)*0x1000, "o", 1, SIZE_NONE, 0, 212 cris_eight_bit_offset_branch_op}, 213 214 {"bcc", 215 BRANCH_QUICK_OPCODE+CC_CC*0x1000, 216 0x0f00+(0xF-CC_CC)*0x1000, "o", 1, SIZE_NONE, 0, 217 cris_eight_bit_offset_branch_op}, 218 219 {"bcs", 220 BRANCH_QUICK_OPCODE+CC_CS*0x1000, 221 0x0f00+(0xF-CC_CS)*0x1000, "o", 1, SIZE_NONE, 0, 222 cris_eight_bit_offset_branch_op}, 223 224 {"bdap", 225 BDAP_INDIR_OPCODE, BDAP_INDIR_Z_BITS, "pm s,R", 0, SIZE_FIELD, 0, 226 cris_bdap_prefix}, 227 228 {"bdap", 229 BDAP_QUICK_OPCODE, BDAP_QUICK_Z_BITS, "pO", 0, SIZE_NONE, 0, 230 cris_quick_mode_bdap_prefix}, 231 232 {"beq", 233 BRANCH_QUICK_OPCODE+CC_EQ*0x1000, 234 0x0f00+(0xF-CC_EQ)*0x1000, "o", 1, SIZE_NONE, 0, 235 cris_eight_bit_offset_branch_op}, 236 237 /* This is deliberately put before "bext" to trump it, even though not 238 in alphabetical order. */ 239 {"bwf", 240 BRANCH_QUICK_OPCODE+CC_EXT*0x1000, 241 0x0f00+(0xF-CC_EXT)*0x1000, "o", 1, SIZE_NONE, 242 cris_ver_v10p, 243 cris_eight_bit_offset_branch_op}, 244 245 {"bext", 246 BRANCH_QUICK_OPCODE+CC_EXT*0x1000, 247 0x0f00+(0xF-CC_EXT)*0x1000, "o", 1, SIZE_NONE, 248 cris_ver_v0_3, 249 cris_eight_bit_offset_branch_op}, 250 251 {"bge", 252 BRANCH_QUICK_OPCODE+CC_GE*0x1000, 253 0x0f00+(0xF-CC_GE)*0x1000, "o", 1, SIZE_NONE, 0, 254 cris_eight_bit_offset_branch_op}, 255 256 {"bgt", 257 BRANCH_QUICK_OPCODE+CC_GT*0x1000, 258 0x0f00+(0xF-CC_GT)*0x1000, "o", 1, SIZE_NONE, 0, 259 cris_eight_bit_offset_branch_op}, 260 261 {"bhi", 262 BRANCH_QUICK_OPCODE+CC_HI*0x1000, 263 0x0f00+(0xF-CC_HI)*0x1000, "o", 1, SIZE_NONE, 0, 264 cris_eight_bit_offset_branch_op}, 265 266 {"bhs", 267 BRANCH_QUICK_OPCODE+CC_HS*0x1000, 268 0x0f00+(0xF-CC_HS)*0x1000, "o", 1, SIZE_NONE, 0, 269 cris_eight_bit_offset_branch_op}, 270 271 {"biap", BIAP_OPCODE, BIAP_Z_BITS, "pm r,R", 0, SIZE_NONE, 0, 272 cris_biap_prefix}, 273 274 {"ble", 275 BRANCH_QUICK_OPCODE+CC_LE*0x1000, 276 0x0f00+(0xF-CC_LE)*0x1000, "o", 1, SIZE_NONE, 0, 277 cris_eight_bit_offset_branch_op}, 278 279 {"blo", 280 BRANCH_QUICK_OPCODE+CC_LO*0x1000, 281 0x0f00+(0xF-CC_LO)*0x1000, "o", 1, SIZE_NONE, 0, 282 cris_eight_bit_offset_branch_op}, 283 284 {"bls", 285 BRANCH_QUICK_OPCODE+CC_LS*0x1000, 286 0x0f00+(0xF-CC_LS)*0x1000, "o", 1, SIZE_NONE, 0, 287 cris_eight_bit_offset_branch_op}, 288 289 {"blt", 290 BRANCH_QUICK_OPCODE+CC_LT*0x1000, 291 0x0f00+(0xF-CC_LT)*0x1000, "o", 1, SIZE_NONE, 0, 292 cris_eight_bit_offset_branch_op}, 293 294 {"bmi", 295 BRANCH_QUICK_OPCODE+CC_MI*0x1000, 296 0x0f00+(0xF-CC_MI)*0x1000, "o", 1, SIZE_NONE, 0, 297 cris_eight_bit_offset_branch_op}, 298 299 {"bmod", 0x0ab0, 0x0140, "s,R", 0, SIZE_FIX_32, 300 cris_ver_sim, 301 cris_not_implemented_op}, 302 303 {"bmod", 0x0ab0, 0x0140, "S,D", 0, SIZE_NONE, 304 cris_ver_sim, 305 cris_not_implemented_op}, 306 307 {"bmod", 0x0ab0, 0x0540, "S,R,r", 0, SIZE_NONE, 308 cris_ver_sim, 309 cris_not_implemented_op}, 310 311 {"bne", 312 BRANCH_QUICK_OPCODE+CC_NE*0x1000, 313 0x0f00+(0xF-CC_NE)*0x1000, "o", 1, SIZE_NONE, 0, 314 cris_eight_bit_offset_branch_op}, 315 316 {"bound", 0x05c0, 0x0A00, "m r,R", 0, SIZE_NONE, 0, 317 cris_two_operand_bound_op}, 318 {"bound", 0x09c0, 0x0200, "m s,R", 0, SIZE_FIELD, 0, 319 cris_two_operand_bound_op}, 320 {"bound", 0x09c0, 0x0200, "m S,D", 0, SIZE_NONE, 0, 321 cris_two_operand_bound_op}, 322 {"bound", 0x09c0, 0x0600, "m S,R,r", 0, SIZE_NONE, 0, 323 cris_three_operand_bound_op}, 324 {"bpl", 325 BRANCH_QUICK_OPCODE+CC_PL*0x1000, 326 0x0f00+(0xF-CC_PL)*0x1000, "o", 1, SIZE_NONE, 0, 327 cris_eight_bit_offset_branch_op}, 328 329 {"break", 0xe930, 0x16c0, "C", 0, SIZE_NONE, 330 cris_ver_v3p, 331 cris_break_op}, 332 333 {"bstore", 0x0af0, 0x0100, "s,R", 0, SIZE_FIX_32, 334 cris_ver_warning, 335 cris_not_implemented_op}, 336 337 {"bstore", 0x0af0, 0x0100, "S,D", 0, SIZE_NONE, 338 cris_ver_warning, 339 cris_not_implemented_op}, 340 341 {"bstore", 0x0af0, 0x0500, "S,R,r", 0, SIZE_NONE, 342 cris_ver_warning, 343 cris_not_implemented_op}, 344 345 {"btst", 0x04F0, 0x0B00, "r,R", 0, SIZE_NONE, 0, 346 cris_btst_nop_op}, 347 {"btstq", 0x0380, 0x0C60, "c,R", 0, SIZE_NONE, 0, 348 cris_btst_nop_op}, 349 {"bvc", 350 BRANCH_QUICK_OPCODE+CC_VC*0x1000, 351 0x0f00+(0xF-CC_VC)*0x1000, "o", 1, SIZE_NONE, 0, 352 cris_eight_bit_offset_branch_op}, 353 354 {"bvs", 355 BRANCH_QUICK_OPCODE+CC_VS*0x1000, 356 0x0f00+(0xF-CC_VS)*0x1000, "o", 1, SIZE_NONE, 0, 357 cris_eight_bit_offset_branch_op}, 358 359 {"clear", 0x0670, 0x3980, "M r", 0, SIZE_NONE, 0, 360 cris_reg_mode_clear_op}, 361 362 {"clear", 0x0A70, 0x3180, "M y", 0, SIZE_NONE, 0, 363 cris_none_reg_mode_clear_test_op}, 364 365 {"clear", 0x0A70, 0x3180, "M S", 0, SIZE_NONE, 0, 366 cris_none_reg_mode_clear_test_op}, 367 368 {"clearf", 0x05F0, 0x0A00, "f", 0, SIZE_NONE, 0, 369 cris_clearf_di_op}, 370 371 {"cmp", 0x06C0, 0x0900, "m r,R", 0, SIZE_NONE, 0, 372 cris_reg_mode_add_sub_cmp_and_or_move_op}, 373 374 {"cmp", 0x0Ac0, 0x0100, "m s,R", 0, SIZE_FIELD, 0, 375 cris_none_reg_mode_add_sub_cmp_and_or_move_op}, 376 377 {"cmp", 0x0Ac0, 0x0100, "m S,D", 0, SIZE_NONE, 0, 378 cris_none_reg_mode_add_sub_cmp_and_or_move_op}, 379 380 {"cmpq", 0x02C0, 0x0D00, "i,R", 0, SIZE_NONE, 0, 381 cris_quick_mode_and_cmp_move_or_op}, 382 383 {"cmps", 0x08e0, 0x0300, "z s,R", 0, SIZE_FIELD, 0, 384 cris_none_reg_mode_add_sub_cmp_and_or_move_op}, 385 386 {"cmps", 0x08e0, 0x0300, "z S,D", 0, SIZE_NONE, 0, 387 cris_none_reg_mode_add_sub_cmp_and_or_move_op}, 388 389 {"cmpu", 0x08c0, 0x0320, "z s,R" , 0, SIZE_FIELD, 0, 390 cris_none_reg_mode_add_sub_cmp_and_or_move_op}, 391 392 {"cmpu", 0x08c0, 0x0320, "z S,D", 0, SIZE_NONE, 0, 393 cris_none_reg_mode_add_sub_cmp_and_or_move_op}, 394 395 {"di", 0x25F0, 0xDA0F, "", 0, SIZE_NONE, 0, 396 cris_clearf_di_op}, 397 398 {"dip", DIP_OPCODE, DIP_Z_BITS, "ps", 0, SIZE_FIX_32, 0, 399 cris_dip_prefix}, 400 401 {"div", 0x0980, 0x0640, "m R,r", 0, SIZE_FIELD, 0, 402 cris_not_implemented_op}, 403 404 {"dstep", 0x06f0, 0x0900, "r,R", 0, SIZE_NONE, 0, 405 cris_dstep_logshift_mstep_neg_not_op}, 406 407 {"ei", 0x25B0, 0xDA4F, "", 0, SIZE_NONE, 0, 408 cris_ax_ei_setf_op}, 409 410 {"jbrc", 0x69b0, 0x9640, "r", 0, SIZE_NONE, 411 cris_ver_v8p, 412 cris_reg_mode_jump_op}, 413 414 {"jbrc", 0x6930, 0x92c0, "s", 0, SIZE_FIX_32, 415 cris_ver_v8p, 416 cris_none_reg_mode_jump_op}, 417 418 {"jbrc", 0x6930, 0x92c0, "S", 0, SIZE_NONE, 419 cris_ver_v8p, 420 cris_none_reg_mode_jump_op}, 421 422 {"jir", 0xA9b0, 0x5640, "r", 0, SIZE_NONE, 0, 423 cris_reg_mode_jump_op}, 424 425 {"jir", 0xA930, 0x52c0, "s", 0, SIZE_FIX_32, 0, 426 cris_none_reg_mode_jump_op}, 427 428 {"jir", 0xA930, 0x52c0, "S", 0, SIZE_NONE, 0, 429 cris_none_reg_mode_jump_op}, 430 431 {"jirc", 0x29b0, 0xd640, "r", 0, SIZE_NONE, 432 cris_ver_v8p, 433 cris_reg_mode_jump_op}, 434 435 {"jirc", 0x2930, 0xd2c0, "s", 0, SIZE_FIX_32, 436 cris_ver_v8p, 437 cris_none_reg_mode_jump_op}, 438 439 {"jirc", 0x2930, 0xd2c0, "S", 0, SIZE_NONE, 440 cris_ver_v8p, 441 cris_none_reg_mode_jump_op}, 442 443 {"jsr", 0xB9b0, 0x4640, "r", 0, SIZE_NONE, 0, 444 cris_reg_mode_jump_op}, 445 446 {"jsr", 0xB930, 0x42c0, "s", 0, SIZE_FIX_32, 0, 447 cris_none_reg_mode_jump_op}, 448 449 {"jsr", 0xB930, 0x42c0, "S", 0, SIZE_NONE, 0, 450 cris_none_reg_mode_jump_op}, 451 452 {"jsrc", 0x39b0, 0xc640, "r", 0, SIZE_NONE, 453 cris_ver_v8p, 454 cris_reg_mode_jump_op}, 455 456 {"jsrc", 0x3930, 0xc2c0, "s", 0, SIZE_FIX_32, 457 cris_ver_v8p, 458 cris_none_reg_mode_jump_op}, 459 460 {"jsrc", 0x3930, 0xc2c0, "S", 0, SIZE_NONE, 461 cris_ver_v8p, 462 cris_none_reg_mode_jump_op}, 463 464 {"jump", 0x09b0, 0xF640, "r", 0, SIZE_NONE, 0, 465 cris_reg_mode_jump_op}, 466 467 {"jump", 468 JUMP_INDIR_OPCODE, JUMP_INDIR_Z_BITS, "s", 0, SIZE_FIX_32, 0, 469 cris_none_reg_mode_jump_op}, 470 471 {"jump", 472 JUMP_INDIR_OPCODE, JUMP_INDIR_Z_BITS, "S", 0, SIZE_NONE, 0, 473 cris_none_reg_mode_jump_op}, 474 475 {"jmpu", 0x8930, 0x72c0, "s", 0, SIZE_FIX_32, 476 cris_ver_v10p, 477 cris_none_reg_mode_jump_op}, 478 479 {"jmpu", 0x8930, 0x72c0, "S", 0, SIZE_NONE, 480 cris_ver_v10p, 481 cris_none_reg_mode_jump_op}, 482 483 {"lsl", 0x04C0, 0x0B00, "m r,R", 0, SIZE_NONE, 0, 484 cris_dstep_logshift_mstep_neg_not_op}, 485 486 {"lslq", 0x03c0, 0x0C20, "c,R", 0, SIZE_NONE, 0, 487 cris_dstep_logshift_mstep_neg_not_op}, 488 489 {"lsr", 0x07C0, 0x0800, "m r,R", 0, SIZE_NONE, 0, 490 cris_dstep_logshift_mstep_neg_not_op}, 491 492 {"lsrq", 0x03e0, 0x0C00, "c,R", 0, SIZE_NONE, 0, 493 cris_dstep_logshift_mstep_neg_not_op}, 494 495 {"lz", 0x0730, 0x08C0, "r,R", 0, SIZE_NONE, 496 cris_ver_v3p, 497 cris_not_implemented_op}, 498 499 {"move", 0x0640, 0x0980, "m r,R", 0, SIZE_NONE, 0, 500 cris_reg_mode_add_sub_cmp_and_or_move_op}, 501 502 {"move", 0x0630, 0x09c0, "r,P", 0, SIZE_NONE, 0, 503 cris_move_to_preg_op}, 504 505 {"move", 0x0670, 0x0980, "P,r", 0, SIZE_NONE, 0, 506 cris_reg_mode_move_from_preg_op}, 507 508 {"move", 0x0BC0, 0x0000, "m R,y", 0, SIZE_FIELD, 0, 509 cris_none_reg_mode_add_sub_cmp_and_or_move_op}, 510 511 {"move", 0x0BC0, 0x0000, "m D,S", 0, SIZE_NONE, 0, 512 cris_none_reg_mode_add_sub_cmp_and_or_move_op}, 513 514 {"move", 0x0A40, 0x0180, "m s,R", 0, SIZE_FIELD, 0, 515 cris_none_reg_mode_add_sub_cmp_and_or_move_op}, 516 517 {"move", 0x0A40, 0x0180, "m S,D", 0, SIZE_NONE, 0, 518 cris_none_reg_mode_add_sub_cmp_and_or_move_op}, 519 520 {"move", 0x0A30, 0x01c0, "s,P", 0, SIZE_SPEC_REG, 0, 521 cris_move_to_preg_op}, 522 523 {"move", 0x0A30, 0x01c0, "S,P", 0, SIZE_NONE, 0, 524 cris_move_to_preg_op}, 525 526 {"move", 0x0A70, 0x0180, "P,y", 0, SIZE_SPEC_REG, 0, 527 cris_none_reg_mode_move_from_preg_op}, 528 529 {"move", 0x0A70, 0x0180, "P,S", 0, SIZE_NONE, 0, 530 cris_none_reg_mode_move_from_preg_op}, 531 532 {"movem", 0x0BF0, 0x0000, "R,y", 0, SIZE_FIX_32, 0, 533 cris_move_reg_to_mem_movem_op}, 534 535 {"movem", 0x0BF0, 0x0000, "D,S", 0, SIZE_NONE, 0, 536 cris_move_reg_to_mem_movem_op}, 537 538 {"movem", 0x0BB0, 0x0040, "s,R", 0, SIZE_FIX_32, 0, 539 cris_move_mem_to_reg_movem_op}, 540 541 {"movem", 0x0BB0, 0x0040, "S,D", 0, SIZE_NONE, 0, 542 cris_move_mem_to_reg_movem_op}, 543 544 {"moveq", 0x0240, 0x0D80, "i,R", 0, SIZE_NONE, 0, 545 cris_quick_mode_and_cmp_move_or_op}, 546 547 {"movs", 0x0460, 0x0B80, "z r,R", 0, SIZE_NONE, 0, 548 cris_reg_mode_add_sub_cmp_and_or_move_op}, 549 550 {"movs", 0x0860, 0x0380, "z s,R", 0, SIZE_FIELD, 0, 551 cris_none_reg_mode_add_sub_cmp_and_or_move_op}, 552 553 {"movs", 0x0860, 0x0380, "z S,D", 0, SIZE_NONE, 0, 554 cris_none_reg_mode_add_sub_cmp_and_or_move_op}, 555 556 {"movu", 0x0440, 0x0Ba0, "z r,R", 0, SIZE_NONE, 0, 557 cris_reg_mode_add_sub_cmp_and_or_move_op}, 558 559 {"movu", 0x0840, 0x03a0, "z s,R", 0, SIZE_FIELD, 0, 560 cris_none_reg_mode_add_sub_cmp_and_or_move_op}, 561 562 {"movu", 0x0840, 0x03a0, "z S,D", 0, SIZE_NONE, 0, 563 cris_none_reg_mode_add_sub_cmp_and_or_move_op}, 564 565 {"mstep", 0x07f0, 0x0800, "r,R", 0, SIZE_NONE, 0, 566 cris_dstep_logshift_mstep_neg_not_op}, 567 568 {"muls", 0x0d00, 0x02c0, "m r,R", 0, SIZE_NONE, 569 cris_ver_v10p, 570 cris_muls_op}, 571 572 {"mulu", 0x0900, 0x06c0, "m r,R", 0, SIZE_NONE, 573 cris_ver_v10p, 574 cris_mulu_op}, 575 576 {"neg", 0x0580, 0x0A40, "m r,R", 0, SIZE_NONE, 0, 577 cris_dstep_logshift_mstep_neg_not_op}, 578 579 {"nop", NOP_OPCODE, NOP_Z_BITS, "", 0, SIZE_NONE, 0, 580 cris_btst_nop_op}, 581 582 {"not", 0x8770, 0x7880, "r", 0, SIZE_NONE, 0, 583 cris_dstep_logshift_mstep_neg_not_op}, 584 585 {"or", 0x0740, 0x0880, "m r,R", 0, SIZE_NONE, 0, 586 cris_reg_mode_add_sub_cmp_and_or_move_op}, 587 588 {"or", 0x0B40, 0x0080, "m s,R", 0, SIZE_FIELD, 0, 589 cris_none_reg_mode_add_sub_cmp_and_or_move_op}, 590 591 {"or", 0x0B40, 0x0080, "m S,D", 0, SIZE_NONE, 0, 592 cris_none_reg_mode_add_sub_cmp_and_or_move_op}, 593 594 {"or", 0x0B40, 0x0480, "m S,R,r", 0, SIZE_NONE, 0, 595 cris_three_operand_add_sub_cmp_and_or_op}, 596 597 {"orq", 0x0340, 0x0C80, "i,R", 0, SIZE_NONE, 0, 598 cris_quick_mode_and_cmp_move_or_op}, 599 600 {"pop", 0x0E6E, 0x0191, "!R", 0, SIZE_NONE, 0, 601 cris_none_reg_mode_add_sub_cmp_and_or_move_op}, 602 603 {"pop", 0x0e3e, 0x01c1, "!P", 0, SIZE_NONE, 0, 604 cris_none_reg_mode_move_from_preg_op}, 605 606 {"push", 0x0FEE, 0x0011, "BR", 0, SIZE_NONE, 0, 607 cris_none_reg_mode_add_sub_cmp_and_or_move_op}, 608 609 {"push", 0x0E7E, 0x0181, "BP", 0, SIZE_NONE, 0, 610 cris_move_to_preg_op}, 611 612 {"rbf", 0x3b30, 0xc0c0, "y", 0, SIZE_NONE, 613 cris_ver_v10p, 614 cris_not_implemented_op}, 615 616 {"rbf", 0x3b30, 0xc0c0, "S", 0, SIZE_NONE, 617 cris_ver_v10p, 618 cris_not_implemented_op}, 619 620 {"ret", 0xB67F, 0x4980, "", 1, SIZE_NONE, 0, 621 cris_reg_mode_move_from_preg_op}, 622 623 {"retb", 0xe67f, 0x1980, "", 1, SIZE_NONE, 0, 624 cris_reg_mode_move_from_preg_op}, 625 626 {"reti", 0xA67F, 0x5980, "", 1, SIZE_NONE, 0, 627 cris_reg_mode_move_from_preg_op}, 628 629 {"sbfs", 0x3b70, 0xc080, "y", 0, SIZE_NONE, 630 cris_ver_v10p, 631 cris_not_implemented_op}, 632 633 {"sbfs", 0x3b70, 0xc080, "S", 0, SIZE_NONE, 634 cris_ver_v10p, 635 cris_not_implemented_op}, 636 637 {"sa", 638 0x0530+CC_A*0x1000, 639 0x0AC0+(0xf-CC_A)*0x1000, "r", 0, SIZE_NONE, 0, 640 cris_scc_op}, 641 642 {"scc", 643 0x0530+CC_CC*0x1000, 644 0x0AC0+(0xf-CC_CC)*0x1000, "r", 0, SIZE_NONE, 0, 645 cris_scc_op}, 646 647 {"scs", 648 0x0530+CC_CS*0x1000, 649 0x0AC0+(0xf-CC_CS)*0x1000, "r", 0, SIZE_NONE, 0, 650 cris_scc_op}, 651 652 {"seq", 653 0x0530+CC_EQ*0x1000, 654 0x0AC0+(0xf-CC_EQ)*0x1000, "r", 0, SIZE_NONE, 0, 655 cris_scc_op}, 656 657 {"setf", 0x05b0, 0x0A40, "f", 0, SIZE_NONE, 0, 658 cris_ax_ei_setf_op}, 659 660 /* Need to have "swf" in front of "sext" so it is the one displayed in 661 disassembly. */ 662 {"swf", 663 0x0530+CC_EXT*0x1000, 664 0x0AC0+(0xf-CC_EXT)*0x1000, "r", 0, SIZE_NONE, 665 cris_ver_v10p, 666 cris_scc_op}, 667 668 {"sext", 669 0x0530+CC_EXT*0x1000, 670 0x0AC0+(0xf-CC_EXT)*0x1000, "r", 0, SIZE_NONE, 671 cris_ver_v0_3, 672 cris_scc_op}, 673 674 {"sge", 675 0x0530+CC_GE*0x1000, 676 0x0AC0+(0xf-CC_GE)*0x1000, "r", 0, SIZE_NONE, 0, 677 cris_scc_op}, 678 679 {"sgt", 680 0x0530+CC_GT*0x1000, 681 0x0AC0+(0xf-CC_GT)*0x1000, "r", 0, SIZE_NONE, 0, 682 cris_scc_op}, 683 684 {"shi", 685 0x0530+CC_HI*0x1000, 686 0x0AC0+(0xf-CC_HI)*0x1000, "r", 0, SIZE_NONE, 0, 687 cris_scc_op}, 688 689 {"shs", 690 0x0530+CC_HS*0x1000, 691 0x0AC0+(0xf-CC_HS)*0x1000, "r", 0, SIZE_NONE, 0, 692 cris_scc_op}, 693 694 {"sle", 695 0x0530+CC_LE*0x1000, 696 0x0AC0+(0xf-CC_LE)*0x1000, "r", 0, SIZE_NONE, 0, 697 cris_scc_op}, 698 699 {"slo", 700 0x0530+CC_LO*0x1000, 701 0x0AC0+(0xf-CC_LO)*0x1000, "r", 0, SIZE_NONE, 0, 702 cris_scc_op}, 703 704 {"sls", 705 0x0530+CC_LS*0x1000, 706 0x0AC0+(0xf-CC_LS)*0x1000, "r", 0, SIZE_NONE, 0, 707 cris_scc_op}, 708 709 {"slt", 710 0x0530+CC_LT*0x1000, 711 0x0AC0+(0xf-CC_LT)*0x1000, "r", 0, SIZE_NONE, 0, 712 cris_scc_op}, 713 714 {"smi", 715 0x0530+CC_MI*0x1000, 716 0x0AC0+(0xf-CC_MI)*0x1000, "r", 0, SIZE_NONE, 0, 717 cris_scc_op}, 718 719 {"sne", 720 0x0530+CC_NE*0x1000, 721 0x0AC0+(0xf-CC_NE)*0x1000, "r", 0, SIZE_NONE, 0, 722 cris_scc_op}, 723 724 {"spl", 725 0x0530+CC_PL*0x1000, 726 0x0AC0+(0xf-CC_PL)*0x1000, "r", 0, SIZE_NONE, 0, 727 cris_scc_op}, 728 729 {"sub", 0x0680, 0x0940, "m r,R", 0, SIZE_NONE, 0, 730 cris_reg_mode_add_sub_cmp_and_or_move_op}, 731 732 {"sub", 0x0a80, 0x0140, "m s,R", 0, SIZE_FIELD, 0, 733 cris_none_reg_mode_add_sub_cmp_and_or_move_op}, 734 735 {"sub", 0x0a80, 0x0140, "m S,D", 0, SIZE_NONE, 0, 736 cris_none_reg_mode_add_sub_cmp_and_or_move_op}, 737 738 {"sub", 0x0a80, 0x0540, "m S,R,r", 0, SIZE_NONE, 0, 739 cris_three_operand_add_sub_cmp_and_or_op}, 740 741 {"subq", 0x0280, 0x0d40, "I,R", 0, SIZE_NONE, 0, 742 cris_quick_mode_add_sub_op}, 743 744 {"subs", 0x04a0, 0x0b40, "z r,R", 0, SIZE_NONE, 0, 745 cris_reg_mode_add_sub_cmp_and_or_move_op}, 746 747 {"subs", 0x08a0, 0x0340, "z s,R", 0, SIZE_FIELD, 0, 748 cris_none_reg_mode_add_sub_cmp_and_or_move_op}, 749 750 {"subs", 0x08a0, 0x0340, "z S,D", 0, SIZE_NONE, 0, 751 cris_none_reg_mode_add_sub_cmp_and_or_move_op}, 752 753 {"subs", 0x08a0, 0x0740, "z S,R,r", 0, SIZE_NONE, 0, 754 cris_three_operand_add_sub_cmp_and_or_op}, 755 756 {"subu", 0x0480, 0x0b60, "z r,R", 0, SIZE_NONE, 0, 757 cris_reg_mode_add_sub_cmp_and_or_move_op}, 758 759 {"subu", 0x0880, 0x0360, "z s,R", 0, SIZE_FIELD, 0, 760 cris_none_reg_mode_add_sub_cmp_and_or_move_op}, 761 762 {"subu", 0x0880, 0x0360, "z S,D", 0, SIZE_NONE, 0, 763 cris_none_reg_mode_add_sub_cmp_and_or_move_op}, 764 765 {"subu", 0x0880, 0x0760, "z S,R,r", 0, SIZE_NONE, 0, 766 cris_three_operand_add_sub_cmp_and_or_op}, 767 768 {"svc", 769 0x0530+CC_VC*0x1000, 770 0x0AC0+(0xf-CC_VC)*0x1000, "r", 0, SIZE_NONE, 0, 771 cris_scc_op}, 772 773 {"svs", 774 0x0530+CC_VS*0x1000, 775 0x0AC0+(0xf-CC_VS)*0x1000, "r", 0, SIZE_NONE, 0, 776 cris_scc_op}, 777 778 /* The insn "swapn" is the same as "not" and will be disassembled as 779 such, but the swap* family of mnmonics are generally v8-and-higher 780 only, so count it in. */ 781 {"swapn", 0x8770, 0x7880, "r", 0, SIZE_NONE, 782 cris_ver_v8p, 783 cris_not_implemented_op}, 784 785 {"swapw", 0x4770, 0xb880, "r", 0, SIZE_NONE, 786 cris_ver_v8p, 787 cris_not_implemented_op}, 788 789 {"swapnw", 0xc770, 0x3880, "r", 0, SIZE_NONE, 790 cris_ver_v8p, 791 cris_not_implemented_op}, 792 793 {"swapb", 0x2770, 0xd880, "r", 0, SIZE_NONE, 794 cris_ver_v8p, 795 cris_not_implemented_op}, 796 797 {"swapnb", 0xA770, 0x5880, "r", 0, SIZE_NONE, 798 cris_ver_v8p, 799 cris_not_implemented_op}, 800 801 {"swapwb", 0x6770, 0x9880, "r", 0, SIZE_NONE, 802 cris_ver_v8p, 803 cris_not_implemented_op}, 804 805 {"swapnwb", 0xE770, 0x1880, "r", 0, SIZE_NONE, 806 cris_ver_v8p, 807 cris_not_implemented_op}, 808 809 {"swapr", 0x1770, 0xe880, "r", 0, SIZE_NONE, 810 cris_ver_v8p, 811 cris_not_implemented_op}, 812 813 {"swapnr", 0x9770, 0x6880, "r", 0, SIZE_NONE, 814 cris_ver_v8p, 815 cris_not_implemented_op}, 816 817 {"swapwr", 0x5770, 0xa880, "r", 0, SIZE_NONE, 818 cris_ver_v8p, 819 cris_not_implemented_op}, 820 821 {"swapnwr", 0xd770, 0x2880, "r", 0, SIZE_NONE, 822 cris_ver_v8p, 823 cris_not_implemented_op}, 824 825 {"swapbr", 0x3770, 0xc880, "r", 0, SIZE_NONE, 826 cris_ver_v8p, 827 cris_not_implemented_op}, 828 829 {"swapnbr", 0xb770, 0x4880, "r", 0, SIZE_NONE, 830 cris_ver_v8p, 831 cris_not_implemented_op}, 832 833 {"swapwbr", 0x7770, 0x8880, "r", 0, SIZE_NONE, 834 cris_ver_v8p, 835 cris_not_implemented_op}, 836 837 {"swapnwbr", 0xf770, 0x0880, "r", 0, SIZE_NONE, 838 cris_ver_v8p, 839 cris_not_implemented_op}, 840 841 {"test", 0x0640, 0x0980, "m D", 0, SIZE_NONE, 0, 842 cris_reg_mode_test_op}, 843 844 {"test", 0x0b80, 0xf040, "m s", 0, SIZE_FIELD, 0, 845 cris_none_reg_mode_clear_test_op}, 846 847 {"test", 0x0b80, 0xf040, "m S", 0, SIZE_NONE, 0, 848 cris_none_reg_mode_clear_test_op}, 849 850 {"xor", 0x07B0, 0x0840, "r,R", 0, SIZE_NONE, 0, 851 cris_xor_op}, 852 853 {NULL, 0, 0, NULL, 0, 0, 0, cris_not_implemented_op} 854 }; 855 856 /* Condition-names, indexed by the CC_* numbers as found in cris.h. */ 857 const char * const 858 cris_cc_strings[] = 859 { 860 "hs", 861 "lo", 862 "ne", 863 "eq", 864 "vc", 865 "vs", 866 "pl", 867 "mi", 868 "ls", 869 "hi", 870 "ge", 871 "lt", 872 "gt", 873 "le", 874 "a", 875 /* In v0, this would be "ext". */ 876 "wf", 877 }; 878 879 880 /* 881 * Local variables: 882 * eval: (c-set-style "gnu") 883 * indent-tabs-mode: t 884 * End: 885 */ 886