* configure.in (ALL_LINGUAS): Add vi.
[platform/upstream/binutils.git] / opcodes / h8300-dis.c
index ea8d30b..8ba93f6 100644 (file)
@@ -1,20 +1,20 @@
 /* Disassemble h8300 instructions.
-   Copyright 1993, 1994, 1996, 1998, 2000, 2001, 2002, 2003
+   Copyright 1993, 1994, 1996, 1998, 2000, 2001, 2002, 2003, 2004
    Free Software Foundation, Inc.
 
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
 
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
 
-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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
+   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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 
 #define DEFINE_TABLE
 
@@ -45,25 +45,6 @@ static void extract_immediate PARAMS ((FILE *,
                                       int *, int *,
                                       const struct h8_opcode *));
 
-static void print_colon_thingie PARAMS ((op_type *));
-
-static void
-print_colon_thingie (op_type *nib)
-{
-  switch (*nib & SIZE) {
-  case L_2:    fprintf (stdout, "2");  break;
-  case L_3:
-  case L_3NZ:  fprintf (stdout, "3");  break;
-  case L_4:    fprintf (stdout, "4");  break;
-  case L_5:    fprintf (stdout, "5");  break;
-  case L_8:    fprintf (stdout, "8");  break;
-  case L_16:
-  case L_16U:  fprintf (stdout, "16"); break;
-  case L_24:   fprintf (stdout, "24"); break;
-  case L_32:   fprintf (stdout, "32"); break;
-  }
-}
-
 /* Run through the opcodes and sort them into order to make them easy
    to disassemble.  */
 
@@ -659,14 +640,6 @@ bfd_h8_disassemble (addr, info, mach)
                }
              else if (looking_for == (op_type) E)
                {
-                 int i;
-
-                 for (i = 0; i < qi->length; i++)
-                   outfn (stream, "%02x ", data[i]);
-
-                 for (; i < 6; i++)
-                   outfn (stream, "   ");
-
                  outfn (stream, "%s\t", q->name);
 
                  /* Gross.  Disgusting.  */
@@ -735,6 +708,17 @@ bfd_h8_disassemble (addr, info, mach)
                    int hadone = 0;
                    int nargs;
 
+                   /* Special case handling for the adds and subs instructions
+                      since in H8 mode thay can only take the r0-r7 registers but
+                      in other (higher) modes they can take the er0-er7 registers
+                      as well.  */
+                   if (strcmp (qi->opcode->name, "adds") == 0
+                       || strcmp (qi->opcode->name, "subs") == 0)
+                     {
+                       outfn (stream, "#%d,%s", cst[0], pregnames[regno[1] & 0x7]);
+                       return qi->length;
+                     }
+
                    for (nargs = 0; 
                         nargs < 3 && args[nargs] != (op_type) E; 
                         nargs++)
@@ -769,9 +753,7 @@ bfd_h8_disassemble (addr, info, mach)
     }
 
   /* Fell off the end.  */
-  outfn (stream, "%02x %02x        .word\tH'%x,H'%x",
-          data[0], data[1],
-          data[0], data[1]);
+  outfn (stream, ".word\tH'%x,H'%x", data[0], data[1]);
   return 2;
 }