00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #include <stdio.h>
00025
00026 #include "sysdep.h"
00027 #include "opcode/mn10300.h"
00028 #include "dis-asm.h"
00029 #include "opintl.h"
00030
00031 static void disassemble PARAMS ((bfd_vma, struct disassemble_info *,
00032 unsigned long insn, unsigned int));
00033
00034 #define HAVE_AM33_2 (info->mach == AM33_2)
00035 #define HAVE_AM33 (info->mach == AM33 || HAVE_AM33_2)
00036 #define HAVE_AM30 (info->mach == AM30)
00037
00038 int
00039 print_insn_mn10300 (memaddr, info)
00040 bfd_vma memaddr;
00041 struct disassemble_info *info;
00042 {
00043 int status;
00044 bfd_byte buffer[4];
00045 unsigned long insn;
00046 unsigned int consume;
00047
00048
00049 status = (*info->read_memory_func) (memaddr, buffer, 1, info);
00050 if (status != 0)
00051 {
00052 (*info->memory_error_func) (status, memaddr, info);
00053 return -1;
00054 }
00055 insn = *(unsigned char *) buffer;
00056
00057
00058 if ((insn & 0xf3) == 0x00
00059 || (insn & 0xf0) == 0x10
00060 || (insn & 0xfc) == 0x3c
00061 || (insn & 0xf3) == 0x41
00062 || (insn & 0xf3) == 0x40
00063 || (insn & 0xfc) == 0x50
00064 || (insn & 0xfc) == 0x54
00065 || (insn & 0xf0) == 0x60
00066 || (insn & 0xf0) == 0x70
00067 || ((insn & 0xf0) == 0x80
00068 && (insn & 0x0c) >> 2 != (insn & 0x03))
00069 || ((insn & 0xf0) == 0x90
00070 && (insn & 0x0c) >> 2 != (insn & 0x03))
00071 || ((insn & 0xf0) == 0xa0
00072 && (insn & 0x0c) >> 2 != (insn & 0x03))
00073 || ((insn & 0xf0) == 0xb0
00074 && (insn & 0x0c) >> 2 != (insn & 0x03))
00075 || (insn & 0xff) == 0xcb
00076 || (insn & 0xfc) == 0xd0
00077 || (insn & 0xfc) == 0xd4
00078 || (insn & 0xfc) == 0xd8
00079 || (insn & 0xf0) == 0xe0
00080 || (insn & 0xff) == 0xff)
00081 {
00082 consume = 1;
00083 }
00084
00085
00086 else if ((insn & 0xf0) == 0x80
00087 || (insn & 0xf0) == 0x90
00088 || (insn & 0xf0) == 0xa0
00089 || (insn & 0xf0) == 0xb0
00090 || (insn & 0xfc) == 0x20
00091 || (insn & 0xfc) == 0x28
00092 || (insn & 0xf3) == 0x43
00093 || (insn & 0xf3) == 0x42
00094 || (insn & 0xfc) == 0x58
00095 || (insn & 0xfc) == 0x5c
00096 || ((insn & 0xf0) == 0xc0
00097 && (insn & 0xff) != 0xcb
00098 && (insn & 0xff) != 0xcc
00099 && (insn & 0xff) != 0xcd)
00100 || (insn & 0xff) == 0xf0
00101 || (insn & 0xff) == 0xf1
00102 || (insn & 0xff) == 0xf2
00103 || (insn & 0xff) == 0xf3
00104 || (insn & 0xff) == 0xf4
00105 || (insn & 0xff) == 0xf5
00106 || (insn & 0xff) == 0xf6)
00107 {
00108 status = (*info->read_memory_func) (memaddr, buffer, 2, info);
00109 if (status != 0)
00110 {
00111 (*info->memory_error_func) (status, memaddr, info);
00112 return -1;
00113 }
00114 insn = bfd_getb16 (buffer);
00115 consume = 2;
00116 }
00117
00118
00119 else if ((insn & 0xff) == 0xf8
00120 || (insn & 0xff) == 0xcc
00121 || (insn & 0xff) == 0xf9
00122 || (insn & 0xf3) == 0x01
00123 || (insn & 0xf3) == 0x02
00124 || (insn & 0xf3) == 0x03
00125 || (insn & 0xfc) == 0x24
00126 || (insn & 0xfc) == 0x2c
00127 || (insn & 0xfc) == 0x30
00128 || (insn & 0xfc) == 0x34
00129 || (insn & 0xfc) == 0x38
00130 || (insn & 0xff) == 0xde
00131 || (insn & 0xff) == 0xdf
00132 || (insn & 0xff) == 0xf9
00133 || (insn & 0xff) == 0xcc)
00134 {
00135 status = (*info->read_memory_func) (memaddr, buffer, 2, info);
00136 if (status != 0)
00137 {
00138 (*info->memory_error_func) (status, memaddr, info);
00139 return -1;
00140 }
00141 insn = bfd_getb16 (buffer);
00142 insn <<= 8;
00143 status = (*info->read_memory_func) (memaddr + 2, buffer, 1, info);
00144 if (status != 0)
00145 {
00146 (*info->memory_error_func) (status, memaddr, info);
00147 return -1;
00148 }
00149 insn |= *(unsigned char *) buffer;
00150 consume = 3;
00151 }
00152
00153
00154 else if ((insn & 0xff) == 0xfa
00155 || (insn & 0xff) == 0xf7
00156 || (insn & 0xff) == 0xfb)
00157 {
00158 status = (*info->read_memory_func) (memaddr, buffer, 4, info);
00159 if (status != 0)
00160 {
00161 (*info->memory_error_func) (status, memaddr, info);
00162 return -1;
00163 }
00164 insn = bfd_getb32 (buffer);
00165 consume = 4;
00166 }
00167
00168
00169 else if ((insn & 0xff) == 0xcd
00170 || (insn & 0xff) == 0xdc)
00171 {
00172 status = (*info->read_memory_func) (memaddr, buffer, 4, info);
00173 if (status != 0)
00174 {
00175 (*info->memory_error_func) (status, memaddr, info);
00176 return -1;
00177 }
00178 insn = bfd_getb32 (buffer);
00179 consume = 5;
00180 }
00181
00182
00183 else if ((insn & 0xff) == 0xfd
00184 || (insn & 0xff) == 0xfc)
00185 {
00186 status = (*info->read_memory_func) (memaddr, buffer, 4, info);
00187 if (status != 0)
00188 {
00189 (*info->memory_error_func) (status, memaddr, info);
00190 return -1;
00191 }
00192
00193 insn = bfd_getb32 (buffer);
00194 consume = 6;
00195 }
00196
00197
00198 else
00199 {
00200 status = (*info->read_memory_func) (memaddr, buffer, 4, info);
00201 if (status != 0)
00202 {
00203 (*info->memory_error_func) (status, memaddr, info);
00204 return -1;
00205 }
00206
00207 insn = bfd_getb32 (buffer);
00208 consume = 7;
00209
00210 if ((insn & 0xfff80000) == 0xfe800000)
00211 consume = 5;
00212 }
00213
00214 disassemble (memaddr, info, insn, consume);
00215
00216 return consume;
00217 }
00218
00219 static void
00220 disassemble (memaddr, info, insn, size)
00221 bfd_vma memaddr;
00222 struct disassemble_info *info;
00223 unsigned long insn;
00224 unsigned int size;
00225 {
00226 struct mn10300_opcode *op = (struct mn10300_opcode *)mn10300_opcodes;
00227 const struct mn10300_operand *operand;
00228 bfd_byte buffer[4];
00229 unsigned long extension = 0;
00230 int status, match = 0;
00231
00232
00233 while (op->name)
00234 {
00235 int mysize, extra_shift;
00236
00237 if (op->format == FMT_S0)
00238 mysize = 1;
00239 else if (op->format == FMT_S1
00240 || op->format == FMT_D0)
00241 mysize = 2;
00242 else if (op->format == FMT_S2
00243 || op->format == FMT_D1)
00244 mysize = 3;
00245 else if (op->format == FMT_S4)
00246 mysize = 5;
00247 else if (op->format == FMT_D2)
00248 mysize = 4;
00249 else if (op->format == FMT_D3)
00250 mysize = 5;
00251 else if (op->format == FMT_D4)
00252 mysize = 6;
00253 else if (op->format == FMT_D6)
00254 mysize = 3;
00255 else if (op->format == FMT_D7 || op->format == FMT_D10)
00256 mysize = 4;
00257 else if (op->format == FMT_D8)
00258 mysize = 6;
00259 else if (op->format == FMT_D9)
00260 mysize = 7;
00261 else
00262 mysize = 7;
00263
00264 if ((op->mask & insn) == op->opcode
00265 && size == (unsigned int) mysize
00266 && (op->machine == 0
00267 || (op->machine == AM33_2 && HAVE_AM33_2)
00268 || (op->machine == AM33 && HAVE_AM33)
00269 || (op->machine == AM30 && HAVE_AM30)))
00270 {
00271 const unsigned char *opindex_ptr;
00272 unsigned int nocomma;
00273 int paren = 0;
00274
00275 if (op->format == FMT_D1 || op->format == FMT_S1)
00276 extra_shift = 8;
00277 else if (op->format == FMT_D2 || op->format == FMT_D4
00278 || op->format == FMT_S2 || op->format == FMT_S4
00279 || op->format == FMT_S6 || op->format == FMT_D5)
00280 extra_shift = 16;
00281 else if (op->format == FMT_D7
00282 || op->format == FMT_D8
00283 || op->format == FMT_D9)
00284 extra_shift = 8;
00285 else
00286 extra_shift = 0;
00287
00288 if (size == 1 || size == 2)
00289 {
00290 extension = 0;
00291 }
00292 else if (size == 3
00293 && (op->format == FMT_D1
00294 || op->opcode == 0xdf0000
00295 || op->opcode == 0xde0000))
00296 {
00297 extension = 0;
00298 }
00299 else if (size == 3
00300 && op->format == FMT_D6)
00301 {
00302 extension = 0;
00303 }
00304 else if (size == 3)
00305 {
00306 insn &= 0xff0000;
00307 status = (*info->read_memory_func) (memaddr + 1, buffer, 2, info);
00308 if (status != 0)
00309 {
00310 (*info->memory_error_func) (status, memaddr, info);
00311 return;
00312 }
00313
00314 insn |= bfd_getl16 (buffer);
00315 extension = 0;
00316 }
00317 else if (size == 4
00318 && (op->opcode == 0xfaf80000
00319 || op->opcode == 0xfaf00000
00320 || op->opcode == 0xfaf40000))
00321 {
00322 extension = 0;
00323 }
00324 else if (size == 4
00325 && (op->format == FMT_D7
00326 || op->format == FMT_D10))
00327 {
00328 extension = 0;
00329 }
00330 else if (size == 4)
00331 {
00332 insn &= 0xffff0000;
00333 status = (*info->read_memory_func) (memaddr + 2, buffer, 2, info);
00334 if (status != 0)
00335 {
00336 (*info->memory_error_func) (status, memaddr, info);
00337 return;
00338 }
00339
00340 insn |= bfd_getl16 (buffer);
00341 extension = 0;
00342 }
00343 else if (size == 5 && op->opcode == 0xdc000000)
00344 {
00345 unsigned long temp = 0;
00346 status = (*info->read_memory_func) (memaddr + 1, buffer, 4, info);
00347 if (status != 0)
00348 {
00349 (*info->memory_error_func) (status, memaddr, info);
00350 return;
00351 }
00352 temp |= bfd_getl32 (buffer);
00353
00354 insn &= 0xff000000;
00355 insn |= (temp & 0xffffff00) >> 8;
00356 extension = temp & 0xff;
00357 }
00358 else if (size == 5 && op->format == FMT_D3)
00359 {
00360 status = (*info->read_memory_func) (memaddr + 2, buffer, 2, info);
00361 if (status != 0)
00362 {
00363 (*info->memory_error_func) (status, memaddr, info);
00364 return;
00365 }
00366 insn &= 0xffff0000;
00367 insn |= bfd_getl16 (buffer);
00368
00369 status = (*info->read_memory_func) (memaddr + 4, buffer, 1, info);
00370 if (status != 0)
00371 {
00372 (*info->memory_error_func) (status, memaddr, info);
00373 return;
00374 }
00375 extension = *(unsigned char *) buffer;
00376 }
00377 else if (size == 5)
00378 {
00379 unsigned long temp = 0;
00380 status = (*info->read_memory_func) (memaddr + 1, buffer, 2, info);
00381 if (status != 0)
00382 {
00383 (*info->memory_error_func) (status, memaddr, info);
00384 return;
00385 }
00386 temp |= bfd_getl16 (buffer);
00387
00388 insn &= 0xff0000ff;
00389 insn |= temp << 8;
00390
00391 status = (*info->read_memory_func) (memaddr + 4, buffer, 1, info);
00392 if (status != 0)
00393 {
00394 (*info->memory_error_func) (status, memaddr, info);
00395 return;
00396 }
00397 extension = *(unsigned char *) buffer;
00398 }
00399 else if (size == 6 && op->format == FMT_D8)
00400 {
00401 insn &= 0xffffff00;
00402 status = (*info->read_memory_func) (memaddr + 5, buffer, 1, info);
00403 if (status != 0)
00404 {
00405 (*info->memory_error_func) (status, memaddr, info);
00406 return;
00407 }
00408 insn |= *(unsigned char *) buffer;
00409
00410 status = (*info->read_memory_func) (memaddr + 3, buffer, 2, info);
00411 if (status != 0)
00412 {
00413 (*info->memory_error_func) (status, memaddr, info);
00414 return;
00415 }
00416 extension = bfd_getl16 (buffer);
00417 }
00418 else if (size == 6)
00419 {
00420 unsigned long temp = 0;
00421 status = (*info->read_memory_func) (memaddr + 2, buffer, 4, info);
00422 if (status != 0)
00423 {
00424 (*info->memory_error_func) (status, memaddr, info);
00425 return;
00426 }
00427 temp |= bfd_getl32 (buffer);
00428
00429 insn &= 0xffff0000;
00430 insn |= (temp >> 16) & 0xffff;
00431 extension = temp & 0xffff;
00432 }
00433 else if (size == 7 && op->format == FMT_D9)
00434 {
00435 insn &= 0xffffff00;
00436 status = (*info->read_memory_func) (memaddr + 3, buffer, 4, info);
00437 if (status != 0)
00438 {
00439 (*info->memory_error_func) (status, memaddr, info);
00440 return;
00441 }
00442 extension = bfd_getl32 (buffer);
00443 insn |= (extension & 0xff000000) >> 24;
00444 extension &= 0xffffff;
00445 }
00446 else if (size == 7 && op->opcode == 0xdd000000)
00447 {
00448 unsigned long temp = 0;
00449 status = (*info->read_memory_func) (memaddr + 1, buffer, 4, info);
00450 if (status != 0)
00451 {
00452 (*info->memory_error_func) (status, memaddr, info);
00453 return;
00454 }
00455 temp |= bfd_getl32 (buffer);
00456
00457 insn &= 0xff000000;
00458 insn |= (temp >> 8) & 0xffffff;
00459 extension = (temp & 0xff) << 16;
00460
00461 status = (*info->read_memory_func) (memaddr + 5, buffer, 2, info);
00462 if (status != 0)
00463 {
00464 (*info->memory_error_func) (status, memaddr, info);
00465 return;
00466 }
00467 extension |= bfd_getb16 (buffer);
00468 }
00469 else if (size == 7)
00470 {
00471 unsigned long temp = 0;
00472 status = (*info->read_memory_func) (memaddr + 2, buffer, 4, info);
00473 if (status != 0)
00474 {
00475 (*info->memory_error_func) (status, memaddr, info);
00476 return;
00477 }
00478 temp |= bfd_getl32 (buffer);
00479
00480 insn &= 0xffff0000;
00481 insn |= (temp >> 16) & 0xffff;
00482 extension = (temp & 0xffff) << 8;
00483
00484 status = (*info->read_memory_func) (memaddr + 6, buffer, 1, info);
00485 if (status != 0)
00486 {
00487 (*info->memory_error_func) (status, memaddr, info);
00488 return;
00489 }
00490 extension |= *(unsigned char *) buffer;
00491 }
00492
00493 match = 1;
00494 (*info->fprintf_func) (info->stream, "%s\t", op->name);
00495
00496
00497 for (opindex_ptr = op->operands, nocomma = 1;
00498 *opindex_ptr != 0;
00499 opindex_ptr++)
00500 {
00501 unsigned long value;
00502
00503 operand = &mn10300_operands[*opindex_ptr];
00504
00505
00506
00507 if ((operand->flags & MN10300_OPERAND_PLUS) != 0)
00508 nocomma = 1;
00509
00510 if ((operand->flags & MN10300_OPERAND_SPLIT) != 0)
00511 {
00512 unsigned long temp;
00513 value = insn & ((1 << operand->bits) - 1);
00514 value <<= (32 - operand->bits);
00515 temp = extension >> operand->shift;
00516 temp &= ((1 << (32 - operand->bits)) - 1);
00517 value |= temp;
00518 value = ((value ^ (((unsigned long) 1) << 31))
00519 - (((unsigned long) 1) << 31));
00520 }
00521 else if ((operand->flags & MN10300_OPERAND_24BIT) != 0)
00522 {
00523 unsigned long temp;
00524 value = insn & ((1 << operand->bits) - 1);
00525 value <<= (24 - operand->bits);
00526 temp = extension >> operand->shift;
00527 temp &= ((1 << (24 - operand->bits)) - 1);
00528 value |= temp;
00529 if ((operand->flags & MN10300_OPERAND_SIGNED) != 0)
00530 value = ((value & 0xffffff) ^ 0x800000) - 0x800000;
00531 }
00532 else if ((operand->flags & (MN10300_OPERAND_FSREG
00533 | MN10300_OPERAND_FDREG)))
00534 {
00535
00536
00537
00538
00539 unsigned long mask_low, mask_high;
00540 int shl_low, shr_high, shl_high;
00541
00542 switch (operand->bits)
00543 {
00544 case 5:
00545
00546 if (operand->shift >= 0)
00547 {
00548
00549 shl_low = operand->shift;
00550 shl_high = 8 + (8 & shl_low) + (shl_low & 4) / 4;
00551 }
00552 else
00553 {
00554
00555 shl_low = -operand->shift;
00556 shl_high = shl_low / 4;
00557 }
00558 mask_low = 0x0f;
00559 mask_high = 0x10;
00560 shr_high = 4;
00561 break;
00562
00563 case 3:
00564
00565 shl_low = -operand->shift;
00566 shl_high = 0;
00567 mask_low = 0x03;
00568 mask_high = 0x04;
00569 shr_high = 2;
00570 break;
00571
00572 default:
00573 abort ();
00574 }
00575 value = ((((insn >> shl_high) << shr_high) & mask_high)
00576 | ((insn >> shl_low) & mask_low));
00577 }
00578 else if ((operand->flags & MN10300_OPERAND_EXTENDED) != 0)
00579 {
00580 value = ((extension >> (operand->shift))
00581 & ((1 << operand->bits) - 1));
00582 }
00583 else
00584 {
00585 value = ((insn >> (operand->shift))
00586 & ((1 << operand->bits) - 1));
00587 }
00588
00589 if ((operand->flags & MN10300_OPERAND_SIGNED) != 0
00590
00591 && ((operand->flags & MN10300_OPERAND_24BIT) == 0))
00592 value = ((value ^ (((unsigned long) 1) << (operand->bits - 1)))
00593 - (((unsigned long) 1) << (operand->bits - 1)));
00594
00595 if (!nocomma
00596 && (!paren
00597 || ((operand->flags & MN10300_OPERAND_PAREN) == 0)))
00598 (*info->fprintf_func) (info->stream, ",");
00599
00600 nocomma = 0;
00601
00602 if ((operand->flags & MN10300_OPERAND_DREG) != 0)
00603 {
00604 value = ((insn >> (operand->shift + extra_shift))
00605 & ((1 << operand->bits) - 1));
00606 (*info->fprintf_func) (info->stream, "d%d", (int) value);
00607 }
00608
00609 else if ((operand->flags & MN10300_OPERAND_AREG) != 0)
00610 {
00611 value = ((insn >> (operand->shift + extra_shift))
00612 & ((1 << operand->bits) - 1));
00613 (*info->fprintf_func) (info->stream, "a%d", (int) value);
00614 }
00615
00616 else if ((operand->flags & MN10300_OPERAND_SP) != 0)
00617 (*info->fprintf_func) (info->stream, "sp");
00618
00619 else if ((operand->flags & MN10300_OPERAND_PSW) != 0)
00620 (*info->fprintf_func) (info->stream, "psw");
00621
00622 else if ((operand->flags & MN10300_OPERAND_MDR) != 0)
00623 (*info->fprintf_func) (info->stream, "mdr");
00624
00625 else if ((operand->flags & MN10300_OPERAND_RREG) != 0)
00626 {
00627 value = ((insn >> (operand->shift + extra_shift))
00628 & ((1 << operand->bits) - 1));
00629 if (value < 8)
00630 (*info->fprintf_func) (info->stream, "r%d", (int) value);
00631 else if (value < 12)
00632 (*info->fprintf_func) (info->stream, "a%d", (int) value - 8);
00633 else
00634 (*info->fprintf_func) (info->stream, "d%d", (int) value - 12);
00635 }
00636
00637 else if ((operand->flags & MN10300_OPERAND_XRREG) != 0)
00638 {
00639 value = ((insn >> (operand->shift + extra_shift))
00640 & ((1 << operand->bits) - 1));
00641 if (value == 0)
00642 (*info->fprintf_func) (info->stream, "sp", value);
00643 else
00644 (*info->fprintf_func) (info->stream, "xr%d", (int) value);
00645 }
00646
00647 else if ((operand->flags & MN10300_OPERAND_FSREG) != 0)
00648 (*info->fprintf_func) (info->stream, "fs%d", (int) value);
00649
00650 else if ((operand->flags & MN10300_OPERAND_FDREG) != 0)
00651 (*info->fprintf_func) (info->stream, "fd%d", (int) value);
00652
00653 else if ((operand->flags & MN10300_OPERAND_FPCR) != 0)
00654 (*info->fprintf_func) (info->stream, "fpcr");
00655
00656 else if ((operand->flags & MN10300_OPERAND_USP) != 0)
00657 (*info->fprintf_func) (info->stream, "usp");
00658
00659 else if ((operand->flags & MN10300_OPERAND_SSP) != 0)
00660 (*info->fprintf_func) (info->stream, "ssp");
00661
00662 else if ((operand->flags & MN10300_OPERAND_MSP) != 0)
00663 (*info->fprintf_func) (info->stream, "msp");
00664
00665 else if ((operand->flags & MN10300_OPERAND_PC) != 0)
00666 (*info->fprintf_func) (info->stream, "pc");
00667
00668 else if ((operand->flags & MN10300_OPERAND_EPSW) != 0)
00669 (*info->fprintf_func) (info->stream, "epsw");
00670
00671 else if ((operand->flags & MN10300_OPERAND_PLUS) != 0)
00672 (*info->fprintf_func) (info->stream, "+");
00673
00674 else if ((operand->flags & MN10300_OPERAND_PAREN) != 0)
00675 {
00676 if (paren)
00677 (*info->fprintf_func) (info->stream, ")");
00678 else
00679 {
00680 (*info->fprintf_func) (info->stream, "(");
00681 nocomma = 1;
00682 }
00683 paren = !paren;
00684 }
00685
00686 else if ((operand->flags & MN10300_OPERAND_PCREL) != 0)
00687 (*info->print_address_func) ((long) value + memaddr, info);
00688
00689 else if ((operand->flags & MN10300_OPERAND_MEMADDR) != 0)
00690 (*info->print_address_func) (value, info);
00691
00692 else if ((operand->flags & MN10300_OPERAND_REG_LIST) != 0)
00693 {
00694 int comma = 0;
00695
00696 (*info->fprintf_func) (info->stream, "[");
00697 if (value & 0x80)
00698 {
00699 (*info->fprintf_func) (info->stream, "d2");
00700 comma = 1;
00701 }
00702
00703 if (value & 0x40)
00704 {
00705 if (comma)
00706 (*info->fprintf_func) (info->stream, ",");
00707 (*info->fprintf_func) (info->stream, "d3");
00708 comma = 1;
00709 }
00710
00711 if (value & 0x20)
00712 {
00713 if (comma)
00714 (*info->fprintf_func) (info->stream, ",");
00715 (*info->fprintf_func) (info->stream, "a2");
00716 comma = 1;
00717 }
00718
00719 if (value & 0x10)
00720 {
00721 if (comma)
00722 (*info->fprintf_func) (info->stream, ",");
00723 (*info->fprintf_func) (info->stream, "a3");
00724 comma = 1;
00725 }
00726
00727 if (value & 0x08)
00728 {
00729 if (comma)
00730 (*info->fprintf_func) (info->stream, ",");
00731 (*info->fprintf_func) (info->stream, "other");
00732 comma = 1;
00733 }
00734
00735 if (value & 0x04)
00736 {
00737 if (comma)
00738 (*info->fprintf_func) (info->stream, ",");
00739 (*info->fprintf_func) (info->stream, "exreg0");
00740 comma = 1;
00741 }
00742 if (value & 0x02)
00743 {
00744 if (comma)
00745 (*info->fprintf_func) (info->stream, ",");
00746 (*info->fprintf_func) (info->stream, "exreg1");
00747 comma = 1;
00748 }
00749 if (value & 0x01)
00750 {
00751 if (comma)
00752 (*info->fprintf_func) (info->stream, ",");
00753 (*info->fprintf_func) (info->stream, "exother");
00754 comma = 1;
00755 }
00756 (*info->fprintf_func) (info->stream, "]");
00757 }
00758
00759 else
00760 (*info->fprintf_func) (info->stream, "%ld", (long) value);
00761 }
00762
00763 break;
00764 }
00765 op++;
00766 }
00767
00768 if (!match)
00769 {
00770
00771 (*info->fprintf_func) (info->stream, _("unknown\t0x%04x"), insn);
00772 }
00773 }