| Index: opcodes/xgate-dis.c
|
| diff --git a/opcodes/xgate-dis.c b/opcodes/xgate-dis.c
|
| index 31f44d63f9e5de7000c267f9f2836f9efa519f18..61dfbe1fd9bccd711360291ba6b70196424da804 100644
|
| --- a/opcodes/xgate-dis.c
|
| +++ b/opcodes/xgate-dis.c
|
| @@ -124,83 +124,69 @@ print_insn (bfd_vma memaddr, struct disassemble_info* info)
|
| (*info->fprintf_func)(info->stream, "%s", decodePTR->opcodePTR->name);
|
|
|
| /* First we compare the shorthand format of the constraints. If we
|
| - still are unable to pinpoint the operands
|
| - we analyze the opcodes constraint string. */
|
| - switch (decodePTR->opcodePTR->sh_format)
|
| - {
|
| - case XG_R_C:
|
| - (*info->fprintf_func)(info->stream, " R%x, CCR",
|
| - (raw_code >> 8) & 0x7);
|
| - break;
|
| - case XG_C_R:
|
| - (*info->fprintf_func)(info->stream, " CCR, R%x",
|
| - (raw_code >> 8) & 0x7);
|
| - break;
|
| - case XG_R_P:
|
| - (*info->fprintf_func)(info->stream, " R%x, PC",
|
| - (raw_code >> 8) & 0x7);
|
| - break;
|
| - case XG_INH:
|
| - break;
|
| - case XG_R_R_R:
|
| - if (!strcmp (decodePTR->opcodePTR->constraints, XGATE_OP_TRI))
|
| - {
|
| - (*info->fprintf_func)(info->stream, " R%x, R%x, R%x",
|
| - (raw_code >> 8) & 0x7, (raw_code >> 5) & 0x7,
|
| - (raw_code >> 2) & 0x7);
|
| - }
|
| - else if (!strcmp (decodePTR->opcodePTR->constraints, XGATE_OP_IDR))
|
| - {
|
| - if (raw_code & 0x01)
|
| - {
|
| - (*info->fprintf_func)(info->stream, " R%x, (R%x, R%x+)",
|
| - (raw_code >> 8) & 0x7, (raw_code >> 5) & 0x7,
|
| - (raw_code >> 2) & 0x7);
|
| - }
|
| - else if (raw_code & 0x02)
|
| - {
|
| - (*info->fprintf_func)(info->stream, " R%x, (R%x, -R%x)",
|
| - (raw_code >> 8) & 0x7, (raw_code >> 5) & 0x7,
|
| - (raw_code >> 2) & 0x7);
|
| - }
|
| - else
|
| - {
|
| - (*info->fprintf_func)(info->stream, " R%x, (R%x, R%x)",
|
| - (raw_code >> 8) & 0x7, (raw_code >> 5) & 0x7,
|
| - (raw_code >> 2) & 0x7);
|
| - }
|
| - }
|
| - else
|
| - {
|
| - (*info->fprintf_func)(info->stream, " unhandled mode %s",
|
| - decodePTR->opcodePTR->constraints);
|
| - }
|
| - break;
|
| - case XG_R_R:
|
| - if (!strcmp (decodePTR->opcodePTR->constraints, XGATE_OP_DYA))
|
| - {
|
| - operandOne = ripBits (&operMaskReg, 3, opcodePTR, raw_code);
|
| - operandTwo = ripBits (&operMaskReg, 3, opcodePTR, raw_code);
|
| - (*info->fprintf_func)(info->stream, " R%x, R%x", operandOne,
|
| - operandTwo);
|
| - }
|
| - else
|
| - {
|
| - (*info->fprintf_func)(info->stream, " unhandled mode %s",
|
| - opcodePTR->constraints);
|
| - }
|
| - break;
|
| - case XG_R_R_I:
|
| - (*info->fprintf_func)(info->stream, " R%x, (R%x, #0x%x)",
|
| - (raw_code >> 8) & 0x7, (raw_code >> 5) & 0x7, raw_code & 0x1f);
|
| - break;
|
| - case XG_R:
|
| - operandOne = ripBits (&operMaskReg, 3, decodePTR->opcodePTR,
|
| - raw_code);
|
| - (*info->fprintf_func)(info->stream, " R%x", operandOne);
|
| - break;
|
| - case XG_I | XG_PCREL:
|
| - if (!strcmp (decodePTR->opcodePTR->constraints, XGATE_OP_REL9))
|
| + still are unable to pinpoint the operands
|
| + we analyze the opcodes constraint string. */
|
| + if (!strcmp (decodePTR->opcodePTR->constraints, XGATE_OP_MON_R_C))
|
| + {
|
| + (*info->fprintf_func)(info->stream, " R%x, CCR",
|
| + (raw_code >> 8) & 0x7);
|
| + }
|
| + else if (!strcmp (decodePTR->opcodePTR->constraints, XGATE_OP_MON_C_R))
|
| + {
|
| + (*info->fprintf_func)(info->stream, " CCR, R%x",
|
| + (raw_code >> 8) & 0x7);
|
| + }
|
| + else if (!strcmp (decodePTR->opcodePTR->constraints, XGATE_OP_MON_R_P))
|
| + {
|
| + (*info->fprintf_func)(info->stream, " R%x, PC",
|
| + (raw_code >> 8) & 0x7);
|
| + }
|
| + else if (!strcmp (decodePTR->opcodePTR->constraints, XGATE_OP_TRI))
|
| + {
|
| + (*info->fprintf_func)(info->stream, " R%x, R%x, R%x",
|
| + (raw_code >> 8) & 0x7, (raw_code >> 5) & 0x7,
|
| + (raw_code >> 2) & 0x7);
|
| + }
|
| + else if (!strcmp (decodePTR->opcodePTR->constraints, XGATE_OP_IDR))
|
| + {
|
| + if (raw_code & 0x01)
|
| + {
|
| + (*info->fprintf_func)(info->stream, " R%x, (R%x, R%x+)",
|
| + (raw_code >> 8) & 0x7, (raw_code >> 5) & 0x7,
|
| + (raw_code >> 2) & 0x7);
|
| + }
|
| + else if (raw_code & 0x02)
|
| + {
|
| + (*info->fprintf_func)(info->stream, " R%x, (R%x, -R%x)",
|
| + (raw_code >> 8) & 0x7, (raw_code >> 5) & 0x7,
|
| + (raw_code >> 2) & 0x7);
|
| + }
|
| + else
|
| + {
|
| + (*info->fprintf_func)(info->stream, " R%x, (R%x, R%x)",
|
| + (raw_code >> 8) & 0x7, (raw_code >> 5) & 0x7,
|
| + (raw_code >> 2) & 0x7);
|
| + }
|
| + }
|
| + else if (!strcmp (decodePTR->opcodePTR->constraints, XGATE_OP_DYA))
|
| + {
|
| + operandOne = ripBits (&operMaskReg, 3, opcodePTR, raw_code);
|
| + operandTwo = ripBits (&operMaskReg, 3, opcodePTR, raw_code);
|
| + ( *info->fprintf_func)(info->stream, " R%x, R%x", operandOne,
|
| + operandTwo);
|
| + }
|
| + else if (!strcmp (decodePTR->opcodePTR->constraints, XGATE_OP_IDO5))
|
| + {
|
| + (*info->fprintf_func)(info->stream, " R%x, (R%x, #0x%x)",
|
| + (raw_code >> 8) & 0x7, (raw_code >> 5) & 0x7, raw_code & 0x1f);
|
| + }
|
| + else if (!strcmp (decodePTR->opcodePTR->constraints, XGATE_OP_MON))
|
| + {
|
| + operandOne = ripBits (&operMaskReg, 3, decodePTR->opcodePTR,
|
| + raw_code);
|
| + (*info->fprintf_func)(info->stream, " R%x", operandOne);
|
| + }
|
| + else if (!strcmp (decodePTR->opcodePTR->constraints, XGATE_OP_REL9))
|
| {
|
| /* If address is negative handle it accordingly. */
|
| if (raw_code & XGATE_NINE_SIGNBIT)
|
| @@ -215,10 +201,10 @@ print_insn (bfd_vma memaddr, struct disassemble_info* info)
|
| relAddr = raw_code & 0xff;
|
| relAddr = (relAddr << 1) + 2;
|
| }
|
| - (*info->fprintf_func)(info->stream, " *%d", relAddr);
|
| - (*info->fprintf_func)(info->stream, " Abs* 0x");
|
| - (*info->print_address_func)(memaddr + relAddr, info);
|
| - }
|
| + (*info->fprintf_func)(info->stream, " *%d", relAddr);
|
| + (*info->fprintf_func)(info->stream, " Abs* 0x");
|
| + (*info->print_address_func)(memaddr + relAddr, info);
|
| + }
|
| else if (!strcmp (decodePTR->opcodePTR->constraints, XGATE_OP_REL10))
|
| {
|
| /* If address is negative handle it accordingly. */
|
| @@ -238,54 +224,44 @@ print_insn (bfd_vma memaddr, struct disassemble_info* info)
|
| (*info->fprintf_func)(info->stream, " Abs* 0x");
|
| (*info->print_address_func)(memaddr + relAddr, info);
|
| }
|
| + else if (!strcmp (decodePTR->opcodePTR->constraints, XGATE_OP_IMM4))
|
| + {
|
| + (*info->fprintf_func)(info->stream, " R%x, #0x%02x",
|
| + (raw_code >> 8) & 0x7, (raw_code >> 4) & 0xF);
|
| + }
|
| + else if (!strcmp (decodePTR->opcodePTR->constraints, XGATE_OP_IMM8))
|
| + {
|
| + if (macro_search (decodePTR->opcodePTR->name, previousOpName) &&
|
| + previousOpName[0])
|
| + {
|
| + absAddress = (0xFF & raw_code) << 8;
|
| + absAddress |= perviousBin & 0xFF;
|
| + (*info->fprintf_func)(info->stream, " R%x, #0x%02x Abs* 0x",
|
| + (raw_code >> 8) & 0x7, raw_code & 0xff);
|
| + (*info->print_address_func)(absAddress, info);
|
| + previousOpName[0] = 0;
|
| + }
|
| + else
|
| + {
|
| + strcpy (previousOpName, decodePTR->opcodePTR->name);
|
| + (*info->fprintf_func)(info->stream, " R%x, #0x%02x",
|
| + (raw_code >> 8) & 0x7, raw_code & 0xff);
|
| + }
|
| + }
|
| + else if (!strcmp (decodePTR->opcodePTR->constraints, XGATE_OP_IMM3))
|
| + {
|
| + (*info->fprintf_func)(info->stream, " #0x%x",
|
| + (raw_code >> 8) & 0x7);
|
| + }
|
| + else if (!strcmp (decodePTR->opcodePTR->constraints, XGATE_OP_INH))
|
| + {
|
| + //
|
| + }
|
| else
|
| {
|
| - (*info->fprintf_func)(info->stream,
|
| - " Can't disassemble for mode) %s",
|
| - decodePTR->opcodePTR->constraints);
|
| + (*info->fprintf_func)(info->stream, " unhandled mode %s",
|
| + opcodePTR->constraints);
|
| }
|
| - break;
|
| - case XG_R_I:
|
| - if (!strcmp (decodePTR->opcodePTR->constraints, XGATE_OP_IMM4))
|
| - {
|
| - (*info->fprintf_func)(info->stream, " R%x, #0x%02x",
|
| - (raw_code >> 8) & 0x7, (raw_code >> 4) & 0xF);
|
| - }
|
| - else if (!strcmp (decodePTR->opcodePTR->constraints, XGATE_OP_IMM8))
|
| - {
|
| - if (macro_search (decodePTR->opcodePTR->name, previousOpName) &&
|
| - previousOpName[0])
|
| - {
|
| - absAddress = (0xFF & raw_code) << 8;
|
| - absAddress |= perviousBin & 0xFF;
|
| - (*info->fprintf_func)(info->stream, " R%x, #0x%02x Abs* 0x",
|
| - (raw_code >> 8) & 0x7, raw_code & 0xff);
|
| - (*info->print_address_func)(absAddress, info);
|
| - previousOpName[0] = 0;
|
| - }
|
| - else
|
| - {
|
| - strcpy (previousOpName, decodePTR->opcodePTR->name);
|
| - (*info->fprintf_func)(info->stream, " R%x, #0x%02x",
|
| - (raw_code >> 8) & 0x7, raw_code & 0xff);
|
| - }
|
| - }
|
| - else
|
| - {
|
| - (*info->fprintf_func)(info->stream,
|
| - " Can't disassemble for mode %s",
|
| - decodePTR->opcodePTR->constraints);
|
| - }
|
| - break;
|
| - case XG_I:
|
| - (*info->fprintf_func)(info->stream, " #0x%x",
|
| - (raw_code >> 8) & 0x7);
|
| - break;
|
| - default:
|
| - (*info->fprintf_func)(info->stream, "address mode not found\t %x",
|
| - opcodePTR->bin_opcode);
|
| - break;
|
| - }
|
| perviousBin = raw_code;
|
| }
|
| else
|
|
|