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 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 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