1 /* cris-opc.c -- Table of opcodes for the CRIS processor. 2 Copyright (C) 2000-2016 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 the GNU opcodes library. 8 9 This library is free software; you can redistribute it and/or modify 10 it under the terms of the GNU General Public License as published by 11 the Free Software Foundation; either version 3, or (at your option) 12 any later version. 13 14 It is distributed in the hope that it will be useful, but WITHOUT 15 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 16 or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public 17 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., 51 Franklin Street - Fifth Floor, Boston, 22 MA 02110-1301, USA. */ 23 24 #include "opcode/cris.h" 25 26 #ifndef NULL 27 #define NULL (0) 28 #endif 29 30 /* This table isn't used for CRISv32 and the size of immediate operands. */ 31 const struct cris_spec_reg 32 cris_spec_regs[] = 33 { 34 {"bz", 0, 1, cris_ver_v32p, NULL}, 35 {"p0", 0, 1, 0, NULL}, 36 {"vr", 1, 1, 0, NULL}, 37 {"p1", 1, 1, 0, NULL}, 38 {"pid", 2, 1, cris_ver_v32p, NULL}, 39 {"p2", 2, 1, cris_ver_v32p, NULL}, 40 {"p2", 2, 1, cris_ver_warning, NULL}, 41 {"srs", 3, 1, cris_ver_v32p, NULL}, 42 {"p3", 3, 1, cris_ver_v32p, NULL}, 43 {"p3", 3, 1, cris_ver_warning, NULL}, 44 {"wz", 4, 2, cris_ver_v32p, NULL}, 45 {"p4", 4, 2, 0, NULL}, 46 {"ccr", 5, 2, cris_ver_v0_10, NULL}, 47 {"exs", 5, 4, cris_ver_v32p, NULL}, 48 {"p5", 5, 2, cris_ver_v0_10, NULL}, 49 {"p5", 5, 4, cris_ver_v32p, NULL}, 50 {"dcr0",6, 2, cris_ver_v0_3, NULL}, 51 {"eda", 6, 4, cris_ver_v32p, NULL}, 52 {"p6", 6, 2, cris_ver_v0_3, NULL}, 53 {"p6", 6, 4, cris_ver_v32p, NULL}, 54 {"dcr1/mof", 7, 4, cris_ver_v10p, 55 "Register `dcr1/mof' with ambiguous size specified. Guessing 4 bytes"}, 56 {"dcr1/mof", 7, 2, cris_ver_v0_3, 57 "Register `dcr1/mof' with ambiguous size specified. Guessing 2 bytes"}, 58 {"mof", 7, 4, cris_ver_v10p, NULL}, 59 {"dcr1",7, 2, cris_ver_v0_3, NULL}, 60 {"p7", 7, 4, cris_ver_v10p, NULL}, 61 {"p7", 7, 2, cris_ver_v0_3, NULL}, 62 {"dz", 8, 4, cris_ver_v32p, NULL}, 63 {"p8", 8, 4, 0, NULL}, 64 {"ibr", 9, 4, cris_ver_v0_10, NULL}, 65 {"ebp", 9, 4, cris_ver_v32p, NULL}, 66 {"p9", 9, 4, 0, NULL}, 67 {"irp", 10, 4, cris_ver_v0_10, NULL}, 68 {"erp", 10, 4, cris_ver_v32p, NULL}, 69 {"p10", 10, 4, 0, NULL}, 70 {"srp", 11, 4, 0, NULL}, 71 {"p11", 11, 4, 0, NULL}, 72 /* For disassembly use only. Accept at assembly with a warning. */ 73 {"bar/dtp0", 12, 4, cris_ver_warning, 74 "Ambiguous register `bar/dtp0' specified"}, 75 {"nrp", 12, 4, cris_ver_v32p, NULL}, 76 {"bar", 12, 4, cris_ver_v8_10, NULL}, 77 {"dtp0",12, 4, cris_ver_v0_3, NULL}, 78 {"p12", 12, 4, 0, NULL}, 79 /* For disassembly use only. Accept at assembly with a warning. */ 80 {"dccr/dtp1",13, 4, cris_ver_warning, 81 "Ambiguous register `dccr/dtp1' specified"}, 82 {"ccs", 13, 4, cris_ver_v32p, NULL}, 83 {"dccr",13, 4, cris_ver_v8_10, NULL}, 84 {"dtp1",13, 4, cris_ver_v0_3, NULL}, 85 {"p13", 13, 4, 0, NULL}, 86 {"brp", 14, 4, cris_ver_v3_10, NULL}, 87 {"usp", 14, 4, cris_ver_v32p, NULL}, 88 {"p14", 14, 4, cris_ver_v3p, NULL}, 89 {"usp", 15, 4, cris_ver_v10, NULL}, 90 {"spc", 15, 4, cris_ver_v32p, NULL}, 91 {"p15", 15, 4, cris_ver_v10p, NULL}, 92 {NULL, 0, 0, cris_ver_version_all, NULL} 93 }; 94 95 /* Add version specifiers to this table when necessary. 96 The (now) regular coding of register names suggests a simpler 97 implementation. */ 98 const struct cris_support_reg cris_support_regs[] = 99 { 100 {"s0", 0}, 101 {"s1", 1}, 102 {"s2", 2}, 103 {"s3", 3}, 104 {"s4", 4}, 105 {"s5", 5}, 106 {"s6", 6}, 107 {"s7", 7}, 108 {"s8", 8}, 109 {"s9", 9}, 110 {"s10", 10}, 111 {"s11", 11}, 112 {"s12", 12}, 113 {"s13", 13}, 114 {"s14", 14}, 115 {"s15", 15}, 116 {NULL, 0} 117 }; 118 119 /* All CRIS opcodes are 16 bits. 120 121 - The match component is a mask saying which bits must match a 122 particular opcode in order for an instruction to be an instance 123 of that opcode. 124 125 - The args component is a string containing characters symbolically 126 matching the operands of an instruction. Used for both assembly 127 and disassembly. 128 129 Operand-matching characters: 130 [ ] , space 131 Verbatim. 132 A The string "ACR" (case-insensitive). 133 B Not really an operand. It causes a "BDAP -size,SP" prefix to be 134 output for the PUSH alias-instructions and recognizes a push- 135 prefix at disassembly. This letter isn't recognized for v32. 136 Must be followed by a R or P letter. 137 ! Non-match pattern, will not match if there's a prefix insn. 138 b Non-matching operand, used for branches with 16-bit 139 displacement. Only recognized by the disassembler. 140 c 5-bit unsigned immediate in bits <4:0>. 141 C 4-bit unsigned immediate in bits <3:0>. 142 d At assembly, optionally (as in put other cases before this one) 143 ".d" or ".D" at the start of the operands, followed by one space 144 character. At disassembly, nothing. 145 D General register in bits <15:12> and <3:0>. 146 f List of flags in bits <15:12> and <3:0>. 147 i 6-bit signed immediate in bits <5:0>. 148 I 6-bit unsigned immediate in bits <5:0>. 149 M Size modifier (B, W or D) for CLEAR instructions. 150 m Size modifier (B, W or D) in bits <5:4> 151 N A 32-bit dword, like in the difference between s and y. 152 This has no effect on bits in the opcode. Can also be expressed 153 as "[pc+]" in input. 154 n As N, but PC-relative (to the start of the instruction). 155 o [-128..127] word offset in bits <7:1> and <0>. Used by 8-bit 156 branch instructions. 157 O [-128..127] offset in bits <7:0>. Also matches a comma and a 158 general register after the expression, in bits <15:12>. Used 159 only for the BDAP prefix insn (in v32 the ADDOQ insn; same opcode). 160 P Special register in bits <15:12>. 161 p Indicates that the insn is a prefix insn. Must be first 162 character. 163 Q As O, but don't relax; force an 8-bit offset. 164 R General register in bits <15:12>. 165 r General register in bits <3:0>. 166 S Source operand in bit <10> and a prefix; a 3-operand prefix 167 without side-effect. 168 s Source operand in bits <10> and <3:0>, optionally with a 169 side-effect prefix, except [pc] (the name, not R15 as in ACR) 170 isn't allowed for v32 and higher. 171 T Support register in bits <15:12>. 172 u 4-bit (PC-relative) unsigned immediate word offset in bits <3:0>. 173 U Relaxes to either u or n, instruction is assumed LAPCQ or LAPC. 174 Not recognized at disassembly. 175 x Register-dot-modifier, for example "r5.w" in bits <15:12> and <5:4>. 176 y Like 's' but do not allow an integer at assembly. 177 Y The difference s-y; only an integer is allowed. 178 z Size modifier (B or W) in bit <4>. */ 179 180 181 /* Please note the order of the opcodes in this table is significant. 182 The assembler requires that all instances of the same mnemonic must 183 be consecutive. If they aren't, the assembler might not recognize 184 them, or may indicate an internal error. 185 186 The disassembler should not normally care about the order of the 187 opcodes, but will prefer an earlier alternative if the "match-score" 188 (see cris-dis.c) is computed as equal. 189 190 It should not be significant for proper execution that this table is 191 in alphabetical order, but please follow that convention for an easy 192 overview. */ 193 194 const struct cris_opcode 195 cris_opcodes[] = 196 { 197 {"abs", 0x06B0, 0x0940, "r,R", 0, SIZE_NONE, 0, 198 cris_abs_op}, 199 200 {"add", 0x0600, 0x09c0, "m r,R", 0, SIZE_NONE, 0, 201 cris_reg_mode_add_sub_cmp_and_or_move_op}, 202 203 {"add", 0x0A00, 0x01c0, "m s,R", 0, SIZE_FIELD, 0, 204 cris_none_reg_mode_add_sub_cmp_and_or_move_op}, 205 206 {"add", 0x0A00, 0x01c0, "m S,D", 0, SIZE_NONE, 207 cris_ver_v0_10, 208 cris_none_reg_mode_add_sub_cmp_and_or_move_op}, 209 210 {"add", 0x0a00, 0x05c0, "m S,R,r", 0, SIZE_NONE, 211 cris_ver_v0_10, 212 cris_three_operand_add_sub_cmp_and_or_op}, 213 214 {"add", 0x0A00, 0x01c0, "m s,R", 0, SIZE_FIELD, 215 cris_ver_v32p, 216 cris_none_reg_mode_add_sub_cmp_and_or_move_op}, 217 218 {"addc", 0x0570, 0x0A80, "r,R", 0, SIZE_FIX_32, 219 cris_ver_v32p, 220 cris_not_implemented_op}, 221 222 {"addc", 0x09A0, 0x0250, "s,R", 0, SIZE_FIX_32, 223 cris_ver_v32p, 224 cris_not_implemented_op}, 225 226 {"addi", 0x0540, 0x0A80, "x,r,A", 0, SIZE_NONE, 227 cris_ver_v32p, 228 cris_addi_op}, 229 230 {"addi", 0x0500, 0x0Ac0, "x,r", 0, SIZE_NONE, 0, 231 cris_addi_op}, 232 233 /* This collates after "addo", but we want to disassemble as "addoq", 234 not "addo". */ 235 {"addoq", 0x0100, 0x0E00, "Q,A", 0, SIZE_NONE, 236 cris_ver_v32p, 237 cris_not_implemented_op}, 238 239 {"addo", 0x0940, 0x0280, "m s,R,A", 0, SIZE_FIELD_SIGNED, 240 cris_ver_v32p, 241 cris_not_implemented_op}, 242 243 /* This must be located after the insn above, lest we misinterpret 244 "addo.b -1,r0,acr" as "addo .b-1,r0,acr". FIXME: Sounds like a 245 parser bug. */ 246 {"addo", 0x0100, 0x0E00, "O,A", 0, SIZE_NONE, 247 cris_ver_v32p, 248 cris_not_implemented_op}, 249 250 {"addq", 0x0200, 0x0Dc0, "I,R", 0, SIZE_NONE, 0, 251 cris_quick_mode_add_sub_op}, 252 253 {"adds", 0x0420, 0x0Bc0, "z r,R", 0, SIZE_NONE, 0, 254 cris_reg_mode_add_sub_cmp_and_or_move_op}, 255 256 /* FIXME: SIZE_FIELD_SIGNED and all necessary changes. */ 257 {"adds", 0x0820, 0x03c0, "z s,R", 0, SIZE_FIELD, 0, 258 cris_none_reg_mode_add_sub_cmp_and_or_move_op}, 259 260 {"adds", 0x0820, 0x03c0, "z S,D", 0, SIZE_NONE, 261 cris_ver_v0_10, 262 cris_none_reg_mode_add_sub_cmp_and_or_move_op}, 263 264 {"adds", 0x0820, 0x07c0, "z S,R,r", 0, SIZE_NONE, 265 cris_ver_v0_10, 266 cris_three_operand_add_sub_cmp_and_or_op}, 267 268 {"addu", 0x0400, 0x0be0, "z r,R", 0, SIZE_NONE, 0, 269 cris_reg_mode_add_sub_cmp_and_or_move_op}, 270 271 /* FIXME: SIZE_FIELD_UNSIGNED and all necessary changes. */ 272 {"addu", 0x0800, 0x03e0, "z s,R", 0, SIZE_FIELD, 0, 273 cris_none_reg_mode_add_sub_cmp_and_or_move_op}, 274 275 {"addu", 0x0800, 0x03e0, "z S,D", 0, SIZE_NONE, 276 cris_ver_v0_10, 277 cris_none_reg_mode_add_sub_cmp_and_or_move_op}, 278 279 {"addu", 0x0800, 0x07e0, "z S,R,r", 0, SIZE_NONE, 280 cris_ver_v0_10, 281 cris_three_operand_add_sub_cmp_and_or_op}, 282 283 {"and", 0x0700, 0x08C0, "m r,R", 0, SIZE_NONE, 0, 284 cris_reg_mode_add_sub_cmp_and_or_move_op}, 285 286 {"and", 0x0B00, 0x00C0, "m s,R", 0, SIZE_FIELD, 0, 287 cris_none_reg_mode_add_sub_cmp_and_or_move_op}, 288 289 {"and", 0x0B00, 0x00C0, "m S,D", 0, SIZE_NONE, 290 cris_ver_v0_10, 291 cris_none_reg_mode_add_sub_cmp_and_or_move_op}, 292 293 {"and", 0x0B00, 0x04C0, "m S,R,r", 0, SIZE_NONE, 294 cris_ver_v0_10, 295 cris_three_operand_add_sub_cmp_and_or_op}, 296 297 {"andq", 0x0300, 0x0CC0, "i,R", 0, SIZE_NONE, 0, 298 cris_quick_mode_and_cmp_move_or_op}, 299 300 {"asr", 0x0780, 0x0840, "m r,R", 0, SIZE_NONE, 0, 301 cris_asr_op}, 302 303 {"asrq", 0x03a0, 0x0c40, "c,R", 0, SIZE_NONE, 0, 304 cris_asrq_op}, 305 306 {"ax", 0x15B0, 0xEA4F, "", 0, SIZE_NONE, 0, 307 cris_ax_ei_setf_op}, 308 309 /* FIXME: Should use branch #defines. */ 310 {"b", 0x0dff, 0x0200, "b", 1, SIZE_NONE, 0, 311 cris_sixteen_bit_offset_branch_op}, 312 313 {"ba", 314 BA_QUICK_OPCODE, 315 0x0F00+(0xF-CC_A)*0x1000, "o", 1, SIZE_NONE, 0, 316 cris_eight_bit_offset_branch_op}, 317 318 /* Needs to come after the usual "ba o", which might be relaxed to 319 this one. */ 320 {"ba", BA_DWORD_OPCODE, 321 0xffff & (~BA_DWORD_OPCODE), "n", 0, SIZE_FIX_32, 322 cris_ver_v32p, 323 cris_none_reg_mode_jump_op}, 324 325 {"bas", 0x0EBF, 0x0140, "n,P", 0, SIZE_FIX_32, 326 cris_ver_v32p, 327 cris_none_reg_mode_jump_op}, 328 329 {"basc", 0x0EFF, 0x0100, "n,P", 0, SIZE_FIX_32, 330 cris_ver_v32p, 331 cris_none_reg_mode_jump_op}, 332 333 {"bcc", 334 BRANCH_QUICK_OPCODE+CC_CC*0x1000, 335 0x0f00+(0xF-CC_CC)*0x1000, "o", 1, SIZE_NONE, 0, 336 cris_eight_bit_offset_branch_op}, 337 338 {"bcs", 339 BRANCH_QUICK_OPCODE+CC_CS*0x1000, 340 0x0f00+(0xF-CC_CS)*0x1000, "o", 1, SIZE_NONE, 0, 341 cris_eight_bit_offset_branch_op}, 342 343 {"bdap", 344 BDAP_INDIR_OPCODE, BDAP_INDIR_Z_BITS, "pm s,R", 0, SIZE_FIELD_SIGNED, 345 cris_ver_v0_10, 346 cris_bdap_prefix}, 347 348 {"bdap", 349 BDAP_QUICK_OPCODE, BDAP_QUICK_Z_BITS, "pO", 0, SIZE_NONE, 350 cris_ver_v0_10, 351 cris_quick_mode_bdap_prefix}, 352 353 {"beq", 354 BRANCH_QUICK_OPCODE+CC_EQ*0x1000, 355 0x0f00+(0xF-CC_EQ)*0x1000, "o", 1, SIZE_NONE, 0, 356 cris_eight_bit_offset_branch_op}, 357 358 /* This is deliberately put before "bext" to trump it, even though not 359 in alphabetical order, since we don't do excluding version checks 360 for v0..v10. */ 361 {"bwf", 362 BRANCH_QUICK_OPCODE+CC_EXT*0x1000, 363 0x0f00+(0xF-CC_EXT)*0x1000, "o", 1, SIZE_NONE, 364 cris_ver_v10, 365 cris_eight_bit_offset_branch_op}, 366 367 {"bext", 368 BRANCH_QUICK_OPCODE+CC_EXT*0x1000, 369 0x0f00+(0xF-CC_EXT)*0x1000, "o", 1, SIZE_NONE, 370 cris_ver_v0_3, 371 cris_eight_bit_offset_branch_op}, 372 373 {"bge", 374 BRANCH_QUICK_OPCODE+CC_GE*0x1000, 375 0x0f00+(0xF-CC_GE)*0x1000, "o", 1, SIZE_NONE, 0, 376 cris_eight_bit_offset_branch_op}, 377 378 {"bgt", 379 BRANCH_QUICK_OPCODE+CC_GT*0x1000, 380 0x0f00+(0xF-CC_GT)*0x1000, "o", 1, SIZE_NONE, 0, 381 cris_eight_bit_offset_branch_op}, 382 383 {"bhi", 384 BRANCH_QUICK_OPCODE+CC_HI*0x1000, 385 0x0f00+(0xF-CC_HI)*0x1000, "o", 1, SIZE_NONE, 0, 386 cris_eight_bit_offset_branch_op}, 387 388 {"bhs", 389 BRANCH_QUICK_OPCODE+CC_HS*0x1000, 390 0x0f00+(0xF-CC_HS)*0x1000, "o", 1, SIZE_NONE, 0, 391 cris_eight_bit_offset_branch_op}, 392 393 {"biap", BIAP_OPCODE, BIAP_Z_BITS, "pm r,R", 0, SIZE_NONE, 394 cris_ver_v0_10, 395 cris_biap_prefix}, 396 397 {"ble", 398 BRANCH_QUICK_OPCODE+CC_LE*0x1000, 399 0x0f00+(0xF-CC_LE)*0x1000, "o", 1, SIZE_NONE, 0, 400 cris_eight_bit_offset_branch_op}, 401 402 {"blo", 403 BRANCH_QUICK_OPCODE+CC_LO*0x1000, 404 0x0f00+(0xF-CC_LO)*0x1000, "o", 1, SIZE_NONE, 0, 405 cris_eight_bit_offset_branch_op}, 406 407 {"bls", 408 BRANCH_QUICK_OPCODE+CC_LS*0x1000, 409 0x0f00+(0xF-CC_LS)*0x1000, "o", 1, SIZE_NONE, 0, 410 cris_eight_bit_offset_branch_op}, 411 412 {"blt", 413 BRANCH_QUICK_OPCODE+CC_LT*0x1000, 414 0x0f00+(0xF-CC_LT)*0x1000, "o", 1, SIZE_NONE, 0, 415 cris_eight_bit_offset_branch_op}, 416 417 {"bmi", 418 BRANCH_QUICK_OPCODE+CC_MI*0x1000, 419 0x0f00+(0xF-CC_MI)*0x1000, "o", 1, SIZE_NONE, 0, 420 cris_eight_bit_offset_branch_op}, 421 422 {"bmod", 0x0ab0, 0x0140, "s,R", 0, SIZE_FIX_32, 423 cris_ver_sim_v0_10, 424 cris_not_implemented_op}, 425 426 {"bmod", 0x0ab0, 0x0140, "S,D", 0, SIZE_NONE, 427 cris_ver_sim_v0_10, 428 cris_not_implemented_op}, 429 430 {"bmod", 0x0ab0, 0x0540, "S,R,r", 0, SIZE_NONE, 431 cris_ver_sim_v0_10, 432 cris_not_implemented_op}, 433 434 {"bne", 435 BRANCH_QUICK_OPCODE+CC_NE*0x1000, 436 0x0f00+(0xF-CC_NE)*0x1000, "o", 1, SIZE_NONE, 0, 437 cris_eight_bit_offset_branch_op}, 438 439 {"bound", 0x05c0, 0x0A00, "m r,R", 0, SIZE_NONE, 0, 440 cris_two_operand_bound_op}, 441 /* FIXME: SIZE_FIELD_UNSIGNED and all necessary changes. */ 442 {"bound", 0x09c0, 0x0200, "m s,R", 0, SIZE_FIELD, 443 cris_ver_v0_10, 444 cris_two_operand_bound_op}, 445 /* FIXME: SIZE_FIELD_UNSIGNED and all necessary changes. */ 446 {"bound", 0x0dcf, 0x0200, "m Y,R", 0, SIZE_FIELD, 0, 447 cris_two_operand_bound_op}, 448 {"bound", 0x09c0, 0x0200, "m S,D", 0, SIZE_NONE, 449 cris_ver_v0_10, 450 cris_two_operand_bound_op}, 451 {"bound", 0x09c0, 0x0600, "m S,R,r", 0, SIZE_NONE, 452 cris_ver_v0_10, 453 cris_three_operand_bound_op}, 454 455 {"bpl", 456 BRANCH_QUICK_OPCODE+CC_PL*0x1000, 457 0x0f00+(0xF-CC_PL)*0x1000, "o", 1, SIZE_NONE, 0, 458 cris_eight_bit_offset_branch_op}, 459 460 {"break", 0xe930, 0x16c0, "C", 0, SIZE_NONE, 461 cris_ver_v3p, 462 cris_break_op}, 463 464 {"bsb", 465 BRANCH_QUICK_OPCODE+CC_EXT*0x1000, 466 0x0f00+(0xF-CC_EXT)*0x1000, "o", 1, SIZE_NONE, 467 cris_ver_v32p, 468 cris_eight_bit_offset_branch_op}, 469 470 {"bsr", 0xBEBF, 0x4140, "n", 0, SIZE_FIX_32, 471 cris_ver_v32p, 472 cris_none_reg_mode_jump_op}, 473 474 {"bsrc", 0xBEFF, 0x4100, "n", 0, SIZE_FIX_32, 475 cris_ver_v32p, 476 cris_none_reg_mode_jump_op}, 477 478 {"bstore", 0x0af0, 0x0100, "s,R", 0, SIZE_FIX_32, 479 cris_ver_warning, 480 cris_not_implemented_op}, 481 482 {"bstore", 0x0af0, 0x0100, "S,D", 0, SIZE_NONE, 483 cris_ver_warning, 484 cris_not_implemented_op}, 485 486 {"bstore", 0x0af0, 0x0500, "S,R,r", 0, SIZE_NONE, 487 cris_ver_warning, 488 cris_not_implemented_op}, 489 490 {"btst", 0x04F0, 0x0B00, "r,R", 0, SIZE_NONE, 0, 491 cris_btst_nop_op}, 492 {"btstq", 0x0380, 0x0C60, "c,R", 0, SIZE_NONE, 0, 493 cris_btst_nop_op}, 494 495 {"bvc", 496 BRANCH_QUICK_OPCODE+CC_VC*0x1000, 497 0x0f00+(0xF-CC_VC)*0x1000, "o", 1, SIZE_NONE, 0, 498 cris_eight_bit_offset_branch_op}, 499 500 {"bvs", 501 BRANCH_QUICK_OPCODE+CC_VS*0x1000, 502 0x0f00+(0xF-CC_VS)*0x1000, "o", 1, SIZE_NONE, 0, 503 cris_eight_bit_offset_branch_op}, 504 505 {"clear", 0x0670, 0x3980, "M r", 0, SIZE_NONE, 0, 506 cris_reg_mode_clear_op}, 507 508 {"clear", 0x0A70, 0x3180, "M y", 0, SIZE_NONE, 0, 509 cris_none_reg_mode_clear_test_op}, 510 511 {"clear", 0x0A70, 0x3180, "M S", 0, SIZE_NONE, 512 cris_ver_v0_10, 513 cris_none_reg_mode_clear_test_op}, 514 515 {"clearf", 0x05F0, 0x0A00, "f", 0, SIZE_NONE, 0, 516 cris_clearf_di_op}, 517 518 {"cmp", 0x06C0, 0x0900, "m r,R", 0, SIZE_NONE, 0, 519 cris_reg_mode_add_sub_cmp_and_or_move_op}, 520 521 {"cmp", 0x0Ac0, 0x0100, "m s,R", 0, SIZE_FIELD, 0, 522 cris_none_reg_mode_add_sub_cmp_and_or_move_op}, 523 524 {"cmp", 0x0Ac0, 0x0100, "m S,D", 0, SIZE_NONE, 525 cris_ver_v0_10, 526 cris_none_reg_mode_add_sub_cmp_and_or_move_op}, 527 528 {"cmpq", 0x02C0, 0x0D00, "i,R", 0, SIZE_NONE, 0, 529 cris_quick_mode_and_cmp_move_or_op}, 530 531 /* FIXME: SIZE_FIELD_SIGNED and all necessary changes. */ 532 {"cmps", 0x08e0, 0x0300, "z s,R", 0, SIZE_FIELD, 0, 533 cris_none_reg_mode_add_sub_cmp_and_or_move_op}, 534 535 {"cmps", 0x08e0, 0x0300, "z S,D", 0, SIZE_NONE, 536 cris_ver_v0_10, 537 cris_none_reg_mode_add_sub_cmp_and_or_move_op}, 538 539 /* FIXME: SIZE_FIELD_UNSIGNED and all necessary changes. */ 540 {"cmpu", 0x08c0, 0x0320, "z s,R" , 0, SIZE_FIELD, 0, 541 cris_none_reg_mode_add_sub_cmp_and_or_move_op}, 542 543 {"cmpu", 0x08c0, 0x0320, "z S,D", 0, SIZE_NONE, 544 cris_ver_v0_10, 545 cris_none_reg_mode_add_sub_cmp_and_or_move_op}, 546 547 {"di", 0x25F0, 0xDA0F, "", 0, SIZE_NONE, 0, 548 cris_clearf_di_op}, 549 550 {"dip", DIP_OPCODE, DIP_Z_BITS, "ps", 0, SIZE_FIX_32, 551 cris_ver_v0_10, 552 cris_dip_prefix}, 553 554 {"div", 0x0980, 0x0640, "m R,r", 0, SIZE_FIELD, 0, 555 cris_not_implemented_op}, 556 557 {"dstep", 0x06f0, 0x0900, "r,R", 0, SIZE_NONE, 0, 558 cris_dstep_logshift_mstep_neg_not_op}, 559 560 {"ei", 0x25B0, 0xDA4F, "", 0, SIZE_NONE, 0, 561 cris_ax_ei_setf_op}, 562 563 {"fidxd", 0x0ab0, 0xf540, "[r]", 0, SIZE_NONE, 564 cris_ver_v32p, 565 cris_not_implemented_op}, 566 567 {"fidxi", 0x0d30, 0xF2C0, "[r]", 0, SIZE_NONE, 568 cris_ver_v32p, 569 cris_not_implemented_op}, 570 571 {"ftagd", 0x1AB0, 0xE540, "[r]", 0, SIZE_NONE, 572 cris_ver_v32p, 573 cris_not_implemented_op}, 574 575 {"ftagi", 0x1D30, 0xE2C0, "[r]", 0, SIZE_NONE, 576 cris_ver_v32p, 577 cris_not_implemented_op}, 578 579 {"halt", 0xF930, 0x06CF, "", 0, SIZE_NONE, 580 cris_ver_v32p, 581 cris_not_implemented_op}, 582 583 {"jas", 0x09B0, 0x0640, "r,P", 0, SIZE_NONE, 584 cris_ver_v32p, 585 cris_reg_mode_jump_op}, 586 587 {"jas", 0x0DBF, 0x0240, "N,P", 0, SIZE_FIX_32, 588 cris_ver_v32p, 589 cris_reg_mode_jump_op}, 590 591 {"jasc", 0x0B30, 0x04C0, "r,P", 0, SIZE_NONE, 592 cris_ver_v32p, 593 cris_reg_mode_jump_op}, 594 595 {"jasc", 0x0F3F, 0x00C0, "N,P", 0, SIZE_FIX_32, 596 cris_ver_v32p, 597 cris_reg_mode_jump_op}, 598 599 {"jbrc", 0x69b0, 0x9640, "r", 0, SIZE_NONE, 600 cris_ver_v8_10, 601 cris_reg_mode_jump_op}, 602 603 {"jbrc", 0x6930, 0x92c0, "s", 0, SIZE_FIX_32, 604 cris_ver_v8_10, 605 cris_none_reg_mode_jump_op}, 606 607 {"jbrc", 0x6930, 0x92c0, "S", 0, SIZE_NONE, 608 cris_ver_v8_10, 609 cris_none_reg_mode_jump_op}, 610 611 {"jir", 0xA9b0, 0x5640, "r", 0, SIZE_NONE, 612 cris_ver_v8_10, 613 cris_reg_mode_jump_op}, 614 615 {"jir", 0xA930, 0x52c0, "s", 0, SIZE_FIX_32, 616 cris_ver_v8_10, 617 cris_none_reg_mode_jump_op}, 618 619 {"jir", 0xA930, 0x52c0, "S", 0, SIZE_NONE, 620 cris_ver_v8_10, 621 cris_none_reg_mode_jump_op}, 622 623 {"jirc", 0x29b0, 0xd640, "r", 0, SIZE_NONE, 624 cris_ver_v8_10, 625 cris_reg_mode_jump_op}, 626 627 {"jirc", 0x2930, 0xd2c0, "s", 0, SIZE_FIX_32, 628 cris_ver_v8_10, 629 cris_none_reg_mode_jump_op}, 630 631 {"jirc", 0x2930, 0xd2c0, "S", 0, SIZE_NONE, 632 cris_ver_v8_10, 633 cris_none_reg_mode_jump_op}, 634 635 {"jsr", 0xB9b0, 0x4640, "r", 0, SIZE_NONE, 0, 636 cris_reg_mode_jump_op}, 637 638 {"jsr", 0xB930, 0x42c0, "s", 0, SIZE_FIX_32, 639 cris_ver_v0_10, 640 cris_none_reg_mode_jump_op}, 641 642 {"jsr", 0xBDBF, 0x4240, "N", 0, SIZE_FIX_32, 643 cris_ver_v32p, 644 cris_none_reg_mode_jump_op}, 645 646 {"jsr", 0xB930, 0x42c0, "S", 0, SIZE_NONE, 647 cris_ver_v0_10, 648 cris_none_reg_mode_jump_op}, 649 650 {"jsrc", 0x39b0, 0xc640, "r", 0, SIZE_NONE, 651 cris_ver_v8_10, 652 cris_reg_mode_jump_op}, 653 654 {"jsrc", 0x3930, 0xc2c0, "s", 0, SIZE_FIX_32, 655 cris_ver_v8_10, 656 cris_none_reg_mode_jump_op}, 657 658 {"jsrc", 0x3930, 0xc2c0, "S", 0, SIZE_NONE, 659 cris_ver_v8_10, 660 cris_none_reg_mode_jump_op}, 661 662 {"jsrc", 0xBB30, 0x44C0, "r", 0, SIZE_NONE, 663 cris_ver_v32p, 664 cris_reg_mode_jump_op}, 665 666 {"jsrc", 0xBF3F, 0x40C0, "N", 0, SIZE_FIX_32, 667 cris_ver_v32p, 668 cris_reg_mode_jump_op}, 669 670 {"jump", 0x09b0, 0xF640, "r", 0, SIZE_NONE, 0, 671 cris_reg_mode_jump_op}, 672 673 {"jump", 674 JUMP_INDIR_OPCODE, JUMP_INDIR_Z_BITS, "s", 0, SIZE_FIX_32, 675 cris_ver_v0_10, 676 cris_none_reg_mode_jump_op}, 677 678 {"jump", 679 JUMP_INDIR_OPCODE, JUMP_INDIR_Z_BITS, "S", 0, SIZE_NONE, 680 cris_ver_v0_10, 681 cris_none_reg_mode_jump_op}, 682 683 {"jump", 0x09F0, 0x060F, "P", 0, SIZE_NONE, 684 cris_ver_v32p, 685 cris_none_reg_mode_jump_op}, 686 687 {"jump", 688 JUMP_PC_INCR_OPCODE_V32, 689 (0xffff & ~JUMP_PC_INCR_OPCODE_V32), "N", 0, SIZE_FIX_32, 690 cris_ver_v32p, 691 cris_none_reg_mode_jump_op}, 692 693 {"jmpu", 0x8930, 0x72c0, "s", 0, SIZE_FIX_32, 694 cris_ver_v10, 695 cris_none_reg_mode_jump_op}, 696 697 {"jmpu", 0x8930, 0x72c0, "S", 0, SIZE_NONE, 698 cris_ver_v10, 699 cris_none_reg_mode_jump_op}, 700 701 {"lapc", 0x0970, 0x0680, "U,R", 0, SIZE_NONE, 702 cris_ver_v32p, 703 cris_not_implemented_op}, 704 705 {"lapc", 0x0D7F, 0x0280, "dn,R", 0, SIZE_FIX_32, 706 cris_ver_v32p, 707 cris_not_implemented_op}, 708 709 {"lapcq", 0x0970, 0x0680, "u,R", 0, SIZE_NONE, 710 cris_ver_v32p, 711 cris_addi_op}, 712 713 {"lsl", 0x04C0, 0x0B00, "m r,R", 0, SIZE_NONE, 0, 714 cris_dstep_logshift_mstep_neg_not_op}, 715 716 {"lslq", 0x03c0, 0x0C20, "c,R", 0, SIZE_NONE, 0, 717 cris_dstep_logshift_mstep_neg_not_op}, 718 719 {"lsr", 0x07C0, 0x0800, "m r,R", 0, SIZE_NONE, 0, 720 cris_dstep_logshift_mstep_neg_not_op}, 721 722 {"lsrq", 0x03e0, 0x0C00, "c,R", 0, SIZE_NONE, 0, 723 cris_dstep_logshift_mstep_neg_not_op}, 724 725 {"lz", 0x0730, 0x08C0, "r,R", 0, SIZE_NONE, 726 cris_ver_v3p, 727 cris_not_implemented_op}, 728 729 {"mcp", 0x07f0, 0x0800, "P,r", 0, SIZE_NONE, 730 cris_ver_v32p, 731 cris_not_implemented_op}, 732 733 {"move", 0x0640, 0x0980, "m r,R", 0, SIZE_NONE, 0, 734 cris_reg_mode_add_sub_cmp_and_or_move_op}, 735 736 {"move", 0x0A40, 0x0180, "m s,R", 0, SIZE_FIELD, 0, 737 cris_none_reg_mode_add_sub_cmp_and_or_move_op}, 738 739 {"move", 0x0A40, 0x0180, "m S,D", 0, SIZE_NONE, 740 cris_ver_v0_10, 741 cris_none_reg_mode_add_sub_cmp_and_or_move_op}, 742 743 {"move", 0x0630, 0x09c0, "r,P", 0, SIZE_NONE, 0, 744 cris_move_to_preg_op}, 745 746 {"move", 0x0670, 0x0980, "P,r", 0, SIZE_NONE, 0, 747 cris_reg_mode_move_from_preg_op}, 748 749 {"move", 0x0BC0, 0x0000, "m R,y", 0, SIZE_FIELD, 0, 750 cris_none_reg_mode_add_sub_cmp_and_or_move_op}, 751 752 {"move", 0x0BC0, 0x0000, "m D,S", 0, SIZE_NONE, 753 cris_ver_v0_10, 754 cris_none_reg_mode_add_sub_cmp_and_or_move_op}, 755 756 {"move", 757 MOVE_M_TO_PREG_OPCODE, MOVE_M_TO_PREG_ZBITS, 758 "s,P", 0, SIZE_SPEC_REG, 0, 759 cris_move_to_preg_op}, 760 761 {"move", 0x0A30, 0x01c0, "S,P", 0, SIZE_NONE, 762 cris_ver_v0_10, 763 cris_move_to_preg_op}, 764 765 {"move", 0x0A70, 0x0180, "P,y", 0, SIZE_SPEC_REG, 0, 766 cris_none_reg_mode_move_from_preg_op}, 767 768 {"move", 0x0A70, 0x0180, "P,S", 0, SIZE_NONE, 769 cris_ver_v0_10, 770 cris_none_reg_mode_move_from_preg_op}, 771 772 {"move", 0x0B70, 0x0480, "r,T", 0, SIZE_NONE, 773 cris_ver_v32p, 774 cris_not_implemented_op}, 775 776 {"move", 0x0F70, 0x0080, "T,r", 0, SIZE_NONE, 777 cris_ver_v32p, 778 cris_not_implemented_op}, 779 780 {"movem", 0x0BF0, 0x0000, "R,y", 0, SIZE_FIX_32, 0, 781 cris_move_reg_to_mem_movem_op}, 782 783 {"movem", 0x0BF0, 0x0000, "D,S", 0, SIZE_NONE, 784 cris_ver_v0_10, 785 cris_move_reg_to_mem_movem_op}, 786 787 {"movem", 0x0BB0, 0x0040, "s,R", 0, SIZE_FIX_32, 0, 788 cris_move_mem_to_reg_movem_op}, 789 790 {"movem", 0x0BB0, 0x0040, "S,D", 0, SIZE_NONE, 791 cris_ver_v0_10, 792 cris_move_mem_to_reg_movem_op}, 793 794 {"moveq", 0x0240, 0x0D80, "i,R", 0, SIZE_NONE, 0, 795 cris_quick_mode_and_cmp_move_or_op}, 796 797 {"movs", 0x0460, 0x0B80, "z r,R", 0, SIZE_NONE, 0, 798 cris_reg_mode_add_sub_cmp_and_or_move_op}, 799 800 /* FIXME: SIZE_FIELD_SIGNED and all necessary changes. */ 801 {"movs", 0x0860, 0x0380, "z s,R", 0, SIZE_FIELD, 0, 802 cris_none_reg_mode_add_sub_cmp_and_or_move_op}, 803 804 {"movs", 0x0860, 0x0380, "z S,D", 0, SIZE_NONE, 805 cris_ver_v0_10, 806 cris_none_reg_mode_add_sub_cmp_and_or_move_op}, 807 808 {"movu", 0x0440, 0x0Ba0, "z r,R", 0, SIZE_NONE, 0, 809 cris_reg_mode_add_sub_cmp_and_or_move_op}, 810 811 /* FIXME: SIZE_FIELD_UNSIGNED and all necessary changes. */ 812 {"movu", 0x0840, 0x03a0, "z s,R", 0, SIZE_FIELD, 0, 813 cris_none_reg_mode_add_sub_cmp_and_or_move_op}, 814 815 {"movu", 0x0840, 0x03a0, "z S,D", 0, SIZE_NONE, 816 cris_ver_v0_10, 817 cris_none_reg_mode_add_sub_cmp_and_or_move_op}, 818 819 {"mstep", 0x07f0, 0x0800, "r,R", 0, SIZE_NONE, 820 cris_ver_v0_10, 821 cris_dstep_logshift_mstep_neg_not_op}, 822 823 {"muls", 0x0d00, 0x02c0, "m r,R", 0, SIZE_NONE, 824 cris_ver_v10p, 825 cris_muls_op}, 826 827 {"mulu", 0x0900, 0x06c0, "m r,R", 0, SIZE_NONE, 828 cris_ver_v10p, 829 cris_mulu_op}, 830 831 {"neg", 0x0580, 0x0A40, "m r,R", 0, SIZE_NONE, 0, 832 cris_dstep_logshift_mstep_neg_not_op}, 833 834 {"nop", NOP_OPCODE, NOP_Z_BITS, "", 0, SIZE_NONE, 835 cris_ver_v0_10, 836 cris_btst_nop_op}, 837 838 {"nop", NOP_OPCODE_V32, NOP_Z_BITS_V32, "", 0, SIZE_NONE, 839 cris_ver_v32p, 840 cris_btst_nop_op}, 841 842 {"not", 0x8770, 0x7880, "r", 0, SIZE_NONE, 0, 843 cris_dstep_logshift_mstep_neg_not_op}, 844 845 {"or", 0x0740, 0x0880, "m r,R", 0, SIZE_NONE, 0, 846 cris_reg_mode_add_sub_cmp_and_or_move_op}, 847 848 {"or", 0x0B40, 0x0080, "m s,R", 0, SIZE_FIELD, 0, 849 cris_none_reg_mode_add_sub_cmp_and_or_move_op}, 850 851 {"or", 0x0B40, 0x0080, "m S,D", 0, SIZE_NONE, 852 cris_ver_v0_10, 853 cris_none_reg_mode_add_sub_cmp_and_or_move_op}, 854 855 {"or", 0x0B40, 0x0480, "m S,R,r", 0, SIZE_NONE, 856 cris_ver_v0_10, 857 cris_three_operand_add_sub_cmp_and_or_op}, 858 859 {"orq", 0x0340, 0x0C80, "i,R", 0, SIZE_NONE, 0, 860 cris_quick_mode_and_cmp_move_or_op}, 861 862 {"pop", 0x0E6E, 0x0191, "!R", 0, SIZE_NONE, 863 cris_ver_v0_10, 864 cris_none_reg_mode_add_sub_cmp_and_or_move_op}, 865 866 {"pop", 0x0e3e, 0x01c1, "!P", 0, SIZE_NONE, 867 cris_ver_v0_10, 868 cris_none_reg_mode_move_from_preg_op}, 869 870 {"push", 0x0FEE, 0x0011, "BR", 0, SIZE_NONE, 871 cris_ver_v0_10, 872 cris_none_reg_mode_add_sub_cmp_and_or_move_op}, 873 874 {"push", 0x0E7E, 0x0181, "BP", 0, SIZE_NONE, 875 cris_ver_v0_10, 876 cris_move_to_preg_op}, 877 878 {"rbf", 0x3b30, 0xc0c0, "y", 0, SIZE_NONE, 879 cris_ver_v10, 880 cris_not_implemented_op}, 881 882 {"rbf", 0x3b30, 0xc0c0, "S", 0, SIZE_NONE, 883 cris_ver_v10, 884 cris_not_implemented_op}, 885 886 {"rfe", 0x2930, 0xD6CF, "", 0, SIZE_NONE, 887 cris_ver_v32p, 888 cris_not_implemented_op}, 889 890 {"rfg", 0x4930, 0xB6CF, "", 0, SIZE_NONE, 891 cris_ver_v32p, 892 cris_not_implemented_op}, 893 894 {"rfn", 0x5930, 0xA6CF, "", 0, SIZE_NONE, 895 cris_ver_v32p, 896 cris_not_implemented_op}, 897 898 {"ret", 0xB67F, 0x4980, "", 1, SIZE_NONE, 899 cris_ver_v0_10, 900 cris_reg_mode_move_from_preg_op}, 901 902 {"ret", 0xB9F0, 0x460F, "", 1, SIZE_NONE, 903 cris_ver_v32p, 904 cris_reg_mode_move_from_preg_op}, 905 906 {"retb", 0xe67f, 0x1980, "", 1, SIZE_NONE, 907 cris_ver_v0_10, 908 cris_reg_mode_move_from_preg_op}, 909 910 {"rete", 0xA9F0, 0x560F, "", 1, SIZE_NONE, 911 cris_ver_v32p, 912 cris_reg_mode_move_from_preg_op}, 913 914 {"reti", 0xA67F, 0x5980, "", 1, SIZE_NONE, 915 cris_ver_v0_10, 916 cris_reg_mode_move_from_preg_op}, 917 918 {"retn", 0xC9F0, 0x360F, "", 1, SIZE_NONE, 919 cris_ver_v32p, 920 cris_reg_mode_move_from_preg_op}, 921 922 {"sbfs", 0x3b70, 0xc080, "y", 0, SIZE_NONE, 923 cris_ver_v10, 924 cris_not_implemented_op}, 925 926 {"sbfs", 0x3b70, 0xc080, "S", 0, SIZE_NONE, 927 cris_ver_v10, 928 cris_not_implemented_op}, 929 930 {"sa", 931 0x0530+CC_A*0x1000, 932 0x0AC0+(0xf-CC_A)*0x1000, "r", 0, SIZE_NONE, 0, 933 cris_scc_op}, 934 935 {"ssb", 936 0x0530+CC_EXT*0x1000, 937 0x0AC0+(0xf-CC_EXT)*0x1000, "r", 0, SIZE_NONE, 938 cris_ver_v32p, 939 cris_scc_op}, 940 941 {"scc", 942 0x0530+CC_CC*0x1000, 943 0x0AC0+(0xf-CC_CC)*0x1000, "r", 0, SIZE_NONE, 0, 944 cris_scc_op}, 945 946 {"scs", 947 0x0530+CC_CS*0x1000, 948 0x0AC0+(0xf-CC_CS)*0x1000, "r", 0, SIZE_NONE, 0, 949 cris_scc_op}, 950 951 {"seq", 952 0x0530+CC_EQ*0x1000, 953 0x0AC0+(0xf-CC_EQ)*0x1000, "r", 0, SIZE_NONE, 0, 954 cris_scc_op}, 955 956 {"setf", 0x05b0, 0x0A40, "f", 0, SIZE_NONE, 0, 957 cris_ax_ei_setf_op}, 958 959 {"sfe", 0x3930, 0xC6CF, "", 0, SIZE_NONE, 960 cris_ver_v32p, 961 cris_not_implemented_op}, 962 963 /* Need to have "swf" in front of "sext" so it is the one displayed in 964 disassembly. */ 965 {"swf", 966 0x0530+CC_EXT*0x1000, 967 0x0AC0+(0xf-CC_EXT)*0x1000, "r", 0, SIZE_NONE, 968 cris_ver_v10, 969 cris_scc_op}, 970 971 {"sext", 972 0x0530+CC_EXT*0x1000, 973 0x0AC0+(0xf-CC_EXT)*0x1000, "r", 0, SIZE_NONE, 974 cris_ver_v0_3, 975 cris_scc_op}, 976 977 {"sge", 978 0x0530+CC_GE*0x1000, 979 0x0AC0+(0xf-CC_GE)*0x1000, "r", 0, SIZE_NONE, 0, 980 cris_scc_op}, 981 982 {"sgt", 983 0x0530+CC_GT*0x1000, 984 0x0AC0+(0xf-CC_GT)*0x1000, "r", 0, SIZE_NONE, 0, 985 cris_scc_op}, 986 987 {"shi", 988 0x0530+CC_HI*0x1000, 989 0x0AC0+(0xf-CC_HI)*0x1000, "r", 0, SIZE_NONE, 0, 990 cris_scc_op}, 991 992 {"shs", 993 0x0530+CC_HS*0x1000, 994 0x0AC0+(0xf-CC_HS)*0x1000, "r", 0, SIZE_NONE, 0, 995 cris_scc_op}, 996 997 {"sle", 998 0x0530+CC_LE*0x1000, 999 0x0AC0+(0xf-CC_LE)*0x1000, "r", 0, SIZE_NONE, 0, 1000 cris_scc_op}, 1001 1002 {"slo", 1003 0x0530+CC_LO*0x1000, 1004 0x0AC0+(0xf-CC_LO)*0x1000, "r", 0, SIZE_NONE, 0, 1005 cris_scc_op}, 1006 1007 {"sls", 1008 0x0530+CC_LS*0x1000, 1009 0x0AC0+(0xf-CC_LS)*0x1000, "r", 0, SIZE_NONE, 0, 1010 cris_scc_op}, 1011 1012 {"slt", 1013 0x0530+CC_LT*0x1000, 1014 0x0AC0+(0xf-CC_LT)*0x1000, "r", 0, SIZE_NONE, 0, 1015 cris_scc_op}, 1016 1017 {"smi", 1018 0x0530+CC_MI*0x1000, 1019 0x0AC0+(0xf-CC_MI)*0x1000, "r", 0, SIZE_NONE, 0, 1020 cris_scc_op}, 1021 1022 {"sne", 1023 0x0530+CC_NE*0x1000, 1024 0x0AC0+(0xf-CC_NE)*0x1000, "r", 0, SIZE_NONE, 0, 1025 cris_scc_op}, 1026 1027 {"spl", 1028 0x0530+CC_PL*0x1000, 1029 0x0AC0+(0xf-CC_PL)*0x1000, "r", 0, SIZE_NONE, 0, 1030 cris_scc_op}, 1031 1032 {"sub", 0x0680, 0x0940, "m r,R", 0, SIZE_NONE, 0, 1033 cris_reg_mode_add_sub_cmp_and_or_move_op}, 1034 1035 {"sub", 0x0a80, 0x0140, "m s,R", 0, SIZE_FIELD, 0, 1036 cris_none_reg_mode_add_sub_cmp_and_or_move_op}, 1037 1038 {"sub", 0x0a80, 0x0140, "m S,D", 0, SIZE_NONE, 1039 cris_ver_v0_10, 1040 cris_none_reg_mode_add_sub_cmp_and_or_move_op}, 1041 1042 {"sub", 0x0a80, 0x0540, "m S,R,r", 0, SIZE_NONE, 1043 cris_ver_v0_10, 1044 cris_three_operand_add_sub_cmp_and_or_op}, 1045 1046 {"subq", 0x0280, 0x0d40, "I,R", 0, SIZE_NONE, 0, 1047 cris_quick_mode_add_sub_op}, 1048 1049 {"subs", 0x04a0, 0x0b40, "z r,R", 0, SIZE_NONE, 0, 1050 cris_reg_mode_add_sub_cmp_and_or_move_op}, 1051 1052 /* FIXME: SIZE_FIELD_SIGNED and all necessary changes. */ 1053 {"subs", 0x08a0, 0x0340, "z s,R", 0, SIZE_FIELD, 0, 1054 cris_none_reg_mode_add_sub_cmp_and_or_move_op}, 1055 1056 {"subs", 0x08a0, 0x0340, "z S,D", 0, SIZE_NONE, 1057 cris_ver_v0_10, 1058 cris_none_reg_mode_add_sub_cmp_and_or_move_op}, 1059 1060 {"subs", 0x08a0, 0x0740, "z S,R,r", 0, SIZE_NONE, 1061 cris_ver_v0_10, 1062 cris_three_operand_add_sub_cmp_and_or_op}, 1063 1064 {"subu", 0x0480, 0x0b60, "z r,R", 0, SIZE_NONE, 0, 1065 cris_reg_mode_add_sub_cmp_and_or_move_op}, 1066 1067 /* FIXME: SIZE_FIELD_UNSIGNED and all necessary changes. */ 1068 {"subu", 0x0880, 0x0360, "z s,R", 0, SIZE_FIELD, 0, 1069 cris_none_reg_mode_add_sub_cmp_and_or_move_op}, 1070 1071 {"subu", 0x0880, 0x0360, "z S,D", 0, SIZE_NONE, 1072 cris_ver_v0_10, 1073 cris_none_reg_mode_add_sub_cmp_and_or_move_op}, 1074 1075 {"subu", 0x0880, 0x0760, "z S,R,r", 0, SIZE_NONE, 1076 cris_ver_v0_10, 1077 cris_three_operand_add_sub_cmp_and_or_op}, 1078 1079 {"svc", 1080 0x0530+CC_VC*0x1000, 1081 0x0AC0+(0xf-CC_VC)*0x1000, "r", 0, SIZE_NONE, 0, 1082 cris_scc_op}, 1083 1084 {"svs", 1085 0x0530+CC_VS*0x1000, 1086 0x0AC0+(0xf-CC_VS)*0x1000, "r", 0, SIZE_NONE, 0, 1087 cris_scc_op}, 1088 1089 /* The insn "swapn" is the same as "not" and will be disassembled as 1090 such, but the swap* family of mnmonics are generally v8-and-higher 1091 only, so count it in. */ 1092 {"swapn", 0x8770, 0x7880, "r", 0, SIZE_NONE, 1093 cris_ver_v8p, 1094 cris_not_implemented_op}, 1095 1096 {"swapw", 0x4770, 0xb880, "r", 0, SIZE_NONE, 1097 cris_ver_v8p, 1098 cris_not_implemented_op}, 1099 1100 {"swapnw", 0xc770, 0x3880, "r", 0, SIZE_NONE, 1101 cris_ver_v8p, 1102 cris_not_implemented_op}, 1103 1104 {"swapb", 0x2770, 0xd880, "r", 0, SIZE_NONE, 1105 cris_ver_v8p, 1106 cris_not_implemented_op}, 1107 1108 {"swapnb", 0xA770, 0x5880, "r", 0, SIZE_NONE, 1109 cris_ver_v8p, 1110 cris_not_implemented_op}, 1111 1112 {"swapwb", 0x6770, 0x9880, "r", 0, SIZE_NONE, 1113 cris_ver_v8p, 1114 cris_not_implemented_op}, 1115 1116 {"swapnwb", 0xE770, 0x1880, "r", 0, SIZE_NONE, 1117 cris_ver_v8p, 1118 cris_not_implemented_op}, 1119 1120 {"swapr", 0x1770, 0xe880, "r", 0, SIZE_NONE, 1121 cris_ver_v8p, 1122 cris_not_implemented_op}, 1123 1124 {"swapnr", 0x9770, 0x6880, "r", 0, SIZE_NONE, 1125 cris_ver_v8p, 1126 cris_not_implemented_op}, 1127 1128 {"swapwr", 0x5770, 0xa880, "r", 0, SIZE_NONE, 1129 cris_ver_v8p, 1130 cris_not_implemented_op}, 1131 1132 {"swapnwr", 0xd770, 0x2880, "r", 0, SIZE_NONE, 1133 cris_ver_v8p, 1134 cris_not_implemented_op}, 1135 1136 {"swapbr", 0x3770, 0xc880, "r", 0, SIZE_NONE, 1137 cris_ver_v8p, 1138 cris_not_implemented_op}, 1139 1140 {"swapnbr", 0xb770, 0x4880, "r", 0, SIZE_NONE, 1141 cris_ver_v8p, 1142 cris_not_implemented_op}, 1143 1144 {"swapwbr", 0x7770, 0x8880, "r", 0, SIZE_NONE, 1145 cris_ver_v8p, 1146 cris_not_implemented_op}, 1147 1148 {"swapnwbr", 0xf770, 0x0880, "r", 0, SIZE_NONE, 1149 cris_ver_v8p, 1150 cris_not_implemented_op}, 1151 1152 {"test", 0x0640, 0x0980, "m D", 0, SIZE_NONE, 1153 cris_ver_v0_10, 1154 cris_reg_mode_test_op}, 1155 1156 {"test", 0x0b80, 0xf040, "m y", 0, SIZE_FIELD, 0, 1157 cris_none_reg_mode_clear_test_op}, 1158 1159 {"test", 0x0b80, 0xf040, "m S", 0, SIZE_NONE, 1160 cris_ver_v0_10, 1161 cris_none_reg_mode_clear_test_op}, 1162 1163 {"xor", 0x07B0, 0x0840, "r,R", 0, SIZE_NONE, 0, 1164 cris_xor_op}, 1165 1166 {NULL, 0, 0, NULL, 0, 0, 0, cris_not_implemented_op} 1167 }; 1168 1169 /* Condition-names, indexed by the CC_* numbers as found in cris.h. */ 1170 const char * const 1171 cris_cc_strings[] = 1172 { 1173 "hs", 1174 "lo", 1175 "ne", 1176 "eq", 1177 "vc", 1178 "vs", 1179 "pl", 1180 "mi", 1181 "ls", 1182 "hi", 1183 "ge", 1184 "lt", 1185 "gt", 1186 "le", 1187 "a", 1188 /* This is a placeholder. In v0, this would be "ext". In v32, this 1189 is "sb". See cris_conds15. */ 1190 "wf" 1191 }; 1192 1193 /* Different names and semantics for condition 1111 (0xf). */ 1194 const struct cris_cond15 cris_cond15s[] = 1195 { 1196 /* FIXME: In what version did condition "ext" disappear? */ 1197 {"ext", cris_ver_v0_3}, 1198 {"wf", cris_ver_v10}, 1199 {"sb", cris_ver_v32p}, 1200 {NULL, 0} 1201 }; 1202 1203 1204 /* 1205 * Local variables: 1206 * eval: (c-set-style "gnu") 1207 * indent-tabs-mode: t 1208 * End: 1209 */ 1210