* alpha-tdep.c (alpha_breakpoint_from_pc): New function.
[deliverable/binutils-gdb.git] / opcodes / z8k-dis.c
index 77c2495f49c7cad5e041432646582ea7a1d6839d..091d9379dddef933d68255a7268664243b08f5df 100644 (file)
@@ -1,5 +1,5 @@
 /* Disassemble z8000 code.
-   Copyright 1992, 1993, 1998, 2000
+   Copyright 1992, 1993, 1998, 2000, 2001
    Free Software Foundation, Inc.
 
 This file is part of GNU Binutils.
@@ -26,8 +26,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 \f
 #include <setjmp.h>
 \f
-typedef struct
-{
+typedef struct {
   /* These are all indexed by nibble number (i.e only every other entry
      of bytes is used, and every 4th entry of words).  */
   unsigned char nibbles[24];
@@ -49,14 +48,16 @@ typedef struct
   unsigned long ctrl_code;
   unsigned long flags;
   unsigned long interrupts;
-}
-instr_data_s;
+} instr_data_s;
+
+static int fetch_data PARAMS ((struct disassemble_info *, int));
+
 
 /* Make sure that bytes from INFO->PRIVATE_DATA->BUFFER (inclusive)
    to ADDR (exclusive) are valid.  Returns 1 for success, longjmps
    on error.  */
 #define FETCH_DATA(info, nibble) \
-  ((nibble) < ((instr_data_s *)(info->private_data))->max_fetched \
+  ((nibble) < ((instr_data_s *) (info->private_data))->max_fetched \
    ? 1 : fetch_data ((info), (nibble)))
 
 static int
@@ -105,8 +106,7 @@ fetch_data (info, nibble)
   return 1;
 }
 
-static char *codes[16] =
-{
+static char *codes[16] = {
   "f",
   "lt",
   "le",
@@ -125,8 +125,7 @@ static char *codes[16] =
   "nc/uge"
 };
 
-static char *ctrl_names[8] =
-{
+static char *ctrl_names[8] = {
   "<invld>",
   "flags",
   "fcw",
@@ -138,11 +137,12 @@ static char *ctrl_names[8] =
 };
 
 static int seg_length;
+static int print_insn_z8k PARAMS ((bfd_vma, disassemble_info *, int));
 int z8k_lookup_instr PARAMS ((unsigned char *, disassemble_info *));
 static void output_instr
   PARAMS ((instr_data_s *, unsigned long, disassemble_info *));
 static void unpack_instr PARAMS ((instr_data_s *, int, disassemble_info *));
-static void unparse_instr PARAMS ((instr_data_s *,int));
+static void unparse_instr PARAMS ((instr_data_s *, int));
 
 static int
 print_insn_z8k (addr, info, is_segmented)
@@ -273,13 +273,12 @@ z8k_lookup_instr (nibbles, info)
       tabl_index++;
     }
   return -1;
-
 }
 
 static void
 output_instr (instr_data, addr, info)
      instr_data_s *instr_data;
-     unsigned long addr;
+     unsigned long addr ATTRIBUTE_UNUSED;
      disassemble_info *info;
 {
   int loop, loop_limit;
@@ -325,8 +324,8 @@ unpack_instr (instr_data, is_segmented, info)
     {
       FETCH_DATA (info, nibl_count + 4 - (nibl_count % 4));
       instr_nibl = instr_data->nibbles[nibl_count];
-      instr_byte = instr_data->bytes[nibl_count&~1];
-      instr_word = instr_data->words[nibl_count&~3];
+      instr_byte = instr_data->bytes[nibl_count & ~1];
+      instr_word = instr_data->words[nibl_count & ~3];
 
       tabl_datum = z8k_table[instr_data->tabl_index].byte_info[loop];
       datum_class = tabl_datum & CLASS_MASK;
@@ -334,31 +333,26 @@ unpack_instr (instr_data, is_segmented, info)
 
       switch (datum_class)
        {
-       case CLASS_X:
-         instr_data->address = instr_nibl;
-         break;
-       case CLASS_BA:
-         instr_data->displacement = instr_nibl;
-         break;
-       case CLASS_BX:
-         instr_data->arg_reg[datum_value] = instr_nibl;
-         break;
        case CLASS_DISP:
          switch (datum_value)
            {
            case ARG_DISP16:
-              instr_data->displacement = instr_data->insn_start + 4 +
-                (signed short)(instr_word & 0xffff);
+             instr_data->displacement = instr_data->insn_start + 4
+               + (signed short) (instr_word & 0xffff);
              nibl_count += 3;
              break;
            case ARG_DISP12:
-              if (instr_word & 0x800) {  /* neg. 12 bit displacement */
-                instr_data->displacement = instr_data->insn_start + 2 -
-                  (signed short)((instr_word & 0xfff) | 0xf000) * 2;
-              }
-              else {
-                instr_data->displacement = instr_data->insn_start + 2 - (instr_word & 0x0fff) * 2;
-              }
+             if (instr_word & 0x800)
+               {
+                 /* neg. 12 bit displacement */
+                 instr_data->displacement = instr_data->insn_start + 2
+                   - (signed short) ((instr_word & 0xfff) | 0xf000) * 2;
+               }
+             else
+               {
+                 instr_data->displacement = instr_data->insn_start + 2
+                   - (instr_word & 0x0fff) * 2;
+               }
              nibl_count += 2;
              break;
            default:
@@ -412,12 +406,6 @@ unpack_instr (instr_data, is_segmented, info)
        case CLASS_CC:
          instr_data->cond_code = instr_nibl;
          break;
-#if 0
-       case CLASS_CTRL:
-         instr_data->ctrl_code = instr_nibl;
-         break;
-#endif
-       case CLASS_DA:
        case CLASS_ADDRESS:
          if (is_segmented)
            {
@@ -426,15 +414,15 @@ unpack_instr (instr_data, is_segmented, info)
                  FETCH_DATA (info, nibl_count + 8);
                  instr_long = (instr_data->words[nibl_count] << 16)
                    | (instr_data->words[nibl_count + 4]);
-                 instr_data->address = ((instr_word & 0x7f00) << 8) +
-                   (instr_long & 0xffff);
+                 instr_data->address = ((instr_word & 0x7f00) << 8)
+                   (instr_long & 0xffff);
                  nibl_count += 7;
-                  seg_length = 2;
+                 seg_length = 2;
                }
              else
                {
-                 instr_data->address = ((instr_word & 0x7f00) << 8) +
-                   (instr_word & 0x00ff);
+                 instr_data->address = ((instr_word & 0x7f00) << 8)
+                   (instr_word & 0x00ff);
                  nibl_count += 3;
                }
            }
@@ -449,11 +437,13 @@ unpack_instr (instr_data, is_segmented, info)
          instr_data->ctrl_code = instr_nibl & 0x7;
          break;
        case CLASS_0DISP7:
-         instr_data->displacement = instr_data->insn_start + 2 - (instr_byte & 0x7f) * 2;
+         instr_data->displacement =
+           instr_data->insn_start + 2 - (instr_byte & 0x7f) * 2;
          nibl_count += 1;
          break;
        case CLASS_1DISP7:
-         instr_data->displacement = instr_data->insn_start + 2 - (instr_byte & 0x7f) * 2;
+         instr_data->displacement =
+           instr_data->insn_start + 2 - (instr_byte & 0x7f) * 2;
          nibl_count += 1;
          break;
        case CLASS_01II:
@@ -465,38 +455,22 @@ unpack_instr (instr_data, is_segmented, info)
        case CLASS_BIT:
          instr_data->ctrl_code = instr_nibl & 0x7;
          break;
-       case CLASS_IR:
-         instr_data->arg_reg[datum_value] = instr_nibl;
-         break;
        case CLASS_FLAGS:
          instr_data->flags = instr_nibl;
          break;
        case CLASS_REG:
          instr_data->arg_reg[datum_value] = instr_nibl;
          break;
-       case CLASS_REG_BYTE:
-         instr_data->arg_reg[datum_value] = instr_nibl;
-         break;
-       case CLASS_REG_WORD:
-         instr_data->arg_reg[datum_value] = instr_nibl;
-         break;
-       case CLASS_REG_QUAD:
-         instr_data->arg_reg[datum_value] = instr_nibl;
-         break;
-       case CLASS_REG_LONG:
-         instr_data->arg_reg[datum_value] = instr_nibl;
-         break;
        case CLASS_REGN0:
          instr_data->arg_reg[datum_value] = instr_nibl;
          break;
-       case CLASS_PR:
-         instr_data->arg_reg[datum_value] = instr_nibl;
-         break;
-        case CLASS_DISP8:
-         instr_data->displacement = instr_data->insn_start + 2  + (signed char)instr_byte * 2;
+       case CLASS_DISP8:
+         instr_data->displacement =
+           instr_data->insn_start + 2 + (signed char) instr_byte * 2;
          nibl_count += 1;
-          break;
+         break;
        default:
+         abort ();
          break;
        }
 
@@ -506,7 +480,7 @@ unpack_instr (instr_data, is_segmented, info)
 }
 
 static void
-unparse_instr (instr_data,is_segmented)
+unparse_instr (instr_data, is_segmented)
      instr_data_s *instr_data;
      int is_segmented;
 {
@@ -566,7 +540,10 @@ unparse_instr (instr_data,is_segmented)
          strcat (out_str, tmp_str);
          break;
        case CLASS_IR:
-         sprintf (tmp_str, "@R%ld", instr_data->arg_reg[datum_value]);
+         if (is_segmented)
+           sprintf (tmp_str, "@rr%ld", instr_data->arg_reg[datum_value]);
+         else
+           sprintf (tmp_str, "@r%ld", instr_data->arg_reg[datum_value]);
          strcat (out_str, tmp_str);
          break;
        case CLASS_FLAGS:
@@ -575,14 +552,10 @@ unparse_instr (instr_data,is_segmented)
          break;
        case CLASS_REG_BYTE:
          if (instr_data->arg_reg[datum_value] >= 0x8)
-           {
-             sprintf (tmp_str, "rl%ld",
-                      instr_data->arg_reg[datum_value] - 0x8);
-           }
+           sprintf (tmp_str, "rl%ld",
+                    instr_data->arg_reg[datum_value] - 0x8);
          else
-           {
-             sprintf (tmp_str, "rh%ld", instr_data->arg_reg[datum_value]);
-           }
+           sprintf (tmp_str, "rh%ld", instr_data->arg_reg[datum_value]);
          strcat (out_str, tmp_str);
          break;
        case CLASS_REG_WORD:
@@ -598,13 +571,14 @@ unparse_instr (instr_data,is_segmented)
          strcat (out_str, tmp_str);
          break;
        case CLASS_PR:
-          if (is_segmented)
-            sprintf (tmp_str, "rr%ld", instr_data->arg_reg[datum_value]);
-          else
-            sprintf (tmp_str, "r%ld", instr_data->arg_reg[datum_value]);
+         if (is_segmented)
+           sprintf (tmp_str, "rr%ld", instr_data->arg_reg[datum_value]);
+         else
+           sprintf (tmp_str, "r%ld", instr_data->arg_reg[datum_value]);
          strcat (out_str, tmp_str);
          break;
        default:
+         abort ();
          break;
        }
     }
This page took 0.027996 seconds and 4 git commands to generate.