/* Disassemble moxie instructions.
- Copyright 2009, 2012
- Free Software Foundation, Inc.
+ Copyright (C) 2009-2017 Free Software Foundation, Inc.
This file is part of the GNU opcodes library.
if ((status = info->read_memory_func (addr, buffer, 2, info)))
goto fail;
- iword = bfd_getb16 (buffer);
+
+ if (info->endian == BFD_ENDIAN_BIG)
+ iword = bfd_getb16 (buffer);
+ else
+ iword = bfd_getl16 (buffer);
/* Form 1 instructions have the high bit set to 0. */
if ((iword & (1<<15)) == 0)
unsigned imm;
if ((status = info->read_memory_func (addr + 2, buffer, 4, info)))
goto fail;
- imm = bfd_getb32 (buffer);
+ if (info->endian == BFD_ENDIAN_BIG)
+ imm = bfd_getb32 (buffer);
+ else
+ imm = bfd_getl32 (buffer);
fpr (stream, "%s\t%s, 0x%x", opcode->name,
reg_names[OP_A(iword)], imm);
length = 6;
unsigned imm;
if ((status = info->read_memory_func (addr + 2, buffer, 4, info)))
goto fail;
- imm = bfd_getb32 (buffer);
+ if (info->endian == BFD_ENDIAN_BIG)
+ imm = bfd_getb32 (buffer);
+ else
+ imm = bfd_getl32 (buffer);
fpr (stream, "%s\t0x%x", opcode->name, imm);
length = 6;
}
unsigned imm;
if ((status = info->read_memory_func (addr + 2, buffer, 4, info)))
goto fail;
- imm = bfd_getb32 (buffer);
+ if (info->endian == BFD_ENDIAN_BIG)
+ imm = bfd_getb32 (buffer);
+ else
+ imm = bfd_getl32 (buffer);
fpr (stream, "%s\t", opcode->name);
info->print_address_func ((bfd_vma) imm, info);
length = 6;
unsigned imm;
if ((status = info->read_memory_func (addr + 2, buffer, 4, info)))
goto fail;
- imm = bfd_getb32 (buffer);
+ if (info->endian == BFD_ENDIAN_BIG)
+ imm = bfd_getb32 (buffer);
+ else
+ imm = bfd_getl32 (buffer);
fpr (stream, "%s\t0x%x, %s",
opcode->name, imm, reg_names[OP_A(iword)]);
length = 6;
}
break;
- case MOXIE_F1_AiB4:
+ case MOXIE_F1_AiB2:
{
unsigned imm;
- if ((status = info->read_memory_func (addr+2, buffer, 4, info)))
+ if ((status = info->read_memory_func (addr+2, buffer, 2, info)))
goto fail;
- imm = bfd_getb32 (buffer);
+ if (info->endian == BFD_ENDIAN_BIG)
+ imm = bfd_getb16 (buffer);
+ else
+ imm = bfd_getl16 (buffer);
fpr (stream, "%s\t0x%x(%s), %s", opcode->name,
imm,
reg_names[OP_A(iword)],
reg_names[OP_B(iword)]);
- length = 6;
+ length = 4;
}
break;
- case MOXIE_F1_ABi4:
+ case MOXIE_F1_ABi2:
{
unsigned imm;
- if ((status = info->read_memory_func (addr+2, buffer, 4, info)))
+ if ((status = info->read_memory_func (addr+2, buffer, 2, info)))
goto fail;
- imm = bfd_getb32 (buffer);
+ if (info->endian == BFD_ENDIAN_BIG)
+ imm = bfd_getb16 (buffer);
+ else
+ imm = bfd_getl16 (buffer);
fpr (stream, "%s\t%s, 0x%x(%s)",
opcode->name,
reg_names[OP_A(iword)],
imm,
reg_names[OP_B(iword)]);
- length = 6;
+ length = 4;
}
break;
+ case MOXIE_BAD:
+ fpr (stream, "bad");
+ break;
default:
- abort ();
+ abort();
}
}
else if ((iword & (1<<14)) == 0)
case MOXIE_F2_NARG:
fpr (stream, "%s", opcode->name);
break;
+ case MOXIE_BAD:
+ fpr (stream, "bad");
+ break;
default:
abort();
}
{
case MOXIE_F3_PCREL:
fpr (stream, "%s\t", opcode->name);
- info->print_address_func ((bfd_vma) (addr + INST2OFFSET(iword)),
+ info->print_address_func ((bfd_vma) (addr + INST2OFFSET(iword) + 2),
info);
break;
+ case MOXIE_BAD:
+ fpr (stream, "bad");
+ break;
default:
abort();
}