You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
-Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#include "dis-asm.h"
#include "opcode/a29k.h"
assembler uses. */
static void
print_special (num, info)
- int num;
+ unsigned int num;
struct disassemble_info *info;
{
/* Register names of registers 0-SPEC0_NUM-1. */
static char *spec0_names[] = {
"vab", "ops", "cps", "cfg", "cha", "chd", "chc", "rbp", "tmc", "tmr",
- "pc0", "pc1", "pc2", "mmu", "lru"
+ "pc0", "pc1", "pc2", "mmu", "lru", "rsn", "rma0", "rmc0", "rma1", "rmc1",
+ "spc0", "spc1", "spc2", "iba0", "ibc0", "iba1", "ibc1", "dba", "dbc",
+ "cir", "cdr"
};
#define SPEC0_NUM ((sizeof spec0_names) / (sizeof spec0_names[0]))
PARAMS ((char *, unsigned char *, unsigned char *,
unsigned char *, unsigned char *));
-/* Print one instruction from MEMADDR on STREAM.
+/* Print one instruction from MEMADDR on INFO->STREAM.
Return the size of the instruction (always 4 on a29k). */
+
static int
print_insn (memaddr, info)
bfd_vma memaddr;
(*find_byte_func) (insn, &insn0, &insn8, &insn16, &insn24);
+ printf ("%02x%02x%02x%02x ", insn24, insn16, insn8, insn0);
+
/* Handle the nop (aseq 0x40,gr1,gr1) specially */
if ((insn24==0x70) && (insn16==0x40) && (insn8==0x01) && (insn0==0x01)) {
(*info->fprintf_func) (info->stream,"nop");
opcode < &a29k_opcodes[num_opcodes];
++opcode)
{
- if ((insn24<<24) == opcode->opcode)
+ if (((unsigned long) insn24 << 24) == opcode->opcode)
{
char *s;
break;
case 'x':
- (*info->fprintf_func) (info->stream, "%d", (insn16 << 8) + insn0);
+ (*info->fprintf_func) (info->stream, "0x%x", (insn16 << 8) + insn0);
break;
case 'h':
(*info->fprintf_func) (info->stream, "%d", (insn0 >> 4) & 7);
break;
+ case 'I':
+ if ((insn16 & 3) != 0)
+ (*info->fprintf_func) (info->stream, "%d", insn16 & 3);
+ break;
+
case 'd':
(*info->fprintf_func) (info->stream, "%d", (insn0 >> 2) & 3);
break;
}
/* This used to be %8x for binutils. */
(*info->fprintf_func)
- (info->stream, ".word 0x%8x",
+ (info->stream, ".word 0x%08x",
(insn24 << 24) + (insn16 << 16) + (insn8 << 8) + insn0);
return 4;
}