[PATCH/RFA] Print some basic float info in VAX disassembler
Jason R Thorpe
thorpej@wasabisystems.com
Sat Apr 27 22:33:00 GMT 2002
Nothing really special, mostly just adds e.g. [d-float] or [g-float],
etc. after the raw bits; I'm not making any attempt to actually deocde
them yet :-)
OK to commit?
* vax-dis.c: Update copyright years.
(print_insn_arg): Pass the insn info to print_insn_mode.
(print_insn_mode): Print some basic info about floating
point values.
--
-- Jason R. Thorpe <thorpej@wasabisystems.com>
-------------- next part --------------
Index: vax-dis.c
===================================================================
RCS file: /cvs/src/src/opcodes/vax-dis.c,v
retrieving revision 1.6
diff -c -r1.6 vax-dis.c
*** vax-dis.c 20 Sep 2001 15:28:25 -0000 1.6
--- vax-dis.c 28 Apr 2002 05:15:02 -0000
***************
*** 1,5 ****
/* Print VAX instructions.
! Copyright 1995, 1998, 2000, 2001 Free Software Foundation, Inc.
Contributed by Pauline Middelink <middelin@polyware.iaf.nl>
This program is free software; you can redistribute it and/or modify
--- 1,5 ----
/* Print VAX instructions.
! Copyright 1995, 1998, 2000, 2001, 2002 Free Software Foundation, Inc.
Contributed by Pauline Middelink <middelin@polyware.iaf.nl>
This program is free software; you can redistribute it and/or modify
***************
*** 25,31 ****
static int print_insn_arg
PARAMS ((const char *, unsigned char *, bfd_vma, disassemble_info *));
static int print_insn_mode
! PARAMS ((int, unsigned char *, bfd_vma, disassemble_info *));
static char *reg_names[] =
--- 25,31 ----
static int print_insn_arg
PARAMS ((const char *, unsigned char *, bfd_vma, disassemble_info *));
static int print_insn_mode
! PARAMS ((const char *, int, unsigned char *, bfd_vma, disassemble_info *));
static char *reg_names[] =
***************
*** 223,233 ****
return p - p0;
}
! return print_insn_mode (arg_len, p0, addr, info);
}
static int
! print_insn_mode (size, p0, addr, info)
int size;
unsigned char *p0;
bfd_vma addr; /* PC for this arg to be relative to */
--- 223,234 ----
return p - p0;
}
! return print_insn_mode (d, arg_len, p0, addr, info);
}
static int
! print_insn_mode (d, size, p0, addr, info)
! const char *d;
int size;
unsigned char *p0;
bfd_vma addr; /* PC for this arg to be relative to */
***************
*** 245,254 ****
case 0x10:
case 0x20:
case 0x30: /* literal mode $number */
! (*info->fprintf_func) (info->stream, "$0x%x", mode);
break;
case 0x40: /* index: base-addr[Rn] */
! p += print_insn_mode (size, p0 + 1, addr + 1, info);
(*info->fprintf_func) (info->stream, "[%s]", reg_names[reg]);
break;
case 0x50: /* register: Rn */
--- 246,258 ----
case 0x10:
case 0x20:
case 0x30: /* literal mode $number */
! if (d[1] == 'd' || d[1] == 'f' || d[1] == 'g' || d[1] == 'h')
! (*info->fprintf_func) (info->stream, "$0x%x [%c-float]", mode, d[1]);
! else
! (*info->fprintf_func) (info->stream, "$0x%x", mode);
break;
case 0x40: /* index: base-addr[Rn] */
! p += print_insn_mode (d, size, p0 + 1, addr + 1, info);
(*info->fprintf_func) (info->stream, "[%s]", reg_names[reg]);
break;
case 0x50: /* register: Rn */
***************
*** 267,274 ****
FETCH_DATA (info, p + size);
(*info->fprintf_func) (info->stream, "$0x");
! for (i = 0; i < size; i++)
! (*info->fprintf_func) (info->stream, "%02x", p[size - i - 1]);
p += size;
}
else
--- 271,300 ----
FETCH_DATA (info, p + size);
(*info->fprintf_func) (info->stream, "$0x");
! if (d[1] == 'd' || d[1] == 'f' || d[1] == 'g' || d[1] == 'h')
! {
! int float_word;
!
! float_word = p[0] | (p[1] << 8);
! if ((d[1] == 'd' || d[1] == 'f')
! && (float_word & 0xff80) == 0x8000)
! {
! (*info->fprintf_func) (info->stream, "[invalid %c-float]",
! d[1]);
! }
! else
! {
! for (i = 0; i < size; i++)
! (*info->fprintf_func) (info->stream, "%02x",
! p[size - i - 1]);
! (*info->fprintf_func) (info->stream, " [%c-float]", d[1]);
! }
! }
! else
! {
! for (i = 0; i < size; i++)
! (*info->fprintf_func) (info->stream, "%02x", p[size - i - 1]);
! }
p += size;
}
else
More information about the Binutils
mailing list