*** empty log message ***
[deliverable/binutils-gdb.git] / gdb / mt-tdep.c
index 99725e73faaefcc6b4b4b23b2b3d21efd1f1f7f5..537a05b909cb5d1085e8f7ba6e64fc308b14bd48 100644 (file)
@@ -1,6 +1,6 @@
 /* Target-dependent code for Morpho mt processor, for GDB.
 
-   Copyright (C) 2005 Free Software Foundation, Inc.
+   Copyright (C) 2005, 2007 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -109,6 +109,12 @@ enum mt_gdb_regnums
   MT_OUT_REGNUM,                       /* 16 bits.  */
   MT_EXMAC_REGNUM,             /* 32 bits (8 used).  */
   MT_QCHANNEL_REGNUM,          /* 32 bits.  */
+  MT_ZI2_REGNUM,                /* 16 bits.  */
+  MT_ZQ2_REGNUM,                /* 16 bits.  */
+  MT_CHANNEL2_REGNUM,           /* 32 bits.  */
+  MT_ISCRAMB2_REGNUM,           /* 32 bits.  */
+  MT_QSCRAMB2_REGNUM,           /* 32 bits.  */
+  MT_QCHANNEL2_REGNUM,          /* 32 bits.  */
 
   /* Number of real registers.  */
   MT_NUM_REGS,
@@ -120,7 +126,12 @@ enum mt_gdb_regnums
 
   MT_COPRO_PSEUDOREG_DIM_1 = 2,
   MT_COPRO_PSEUDOREG_DIM_2 = 8,
-  MT_COPRO_PSEUDOREG_REGS = 32,
+  /* The number of pseudo-registers for each coprocessor.  These
+     include the real coprocessor registers, the pseudo-registe for
+     the coprocessor number, and the pseudo-register for the MAC.  */
+  MT_COPRO_PSEUDOREG_REGS = MT_NUM_REGS - MT_NUM_CPU_REGS + 2,
+  /* The register number of the MAC, relative to a given coprocessor.  */
+  MT_COPRO_PSEUDOREG_MAC_REGNUM = MT_COPRO_PSEUDOREG_REGS - 1,
 
   /* Two pseudo-regs ('coprocessor' and 'mac').  */
   MT_NUM_PSEUDO_REGS = 2 + (MT_COPRO_PSEUDOREG_REGS
@@ -144,6 +155,7 @@ mt_register_name (int regnum)
     "cr8", "cr9", "cr10", "cr11", "cr12", "cr13", "cr14", "cr15",
     "bypa", "bypb", "bypc", "flag", "context", "" /* mac.  */ , "z1", "z2",
     "Ichannel", "Iscramb", "Qscramb", "out", "" /* ex-mac.  */ , "Qchannel",
+    "zi2", "zq2", "Ichannel2", "Iscramb2", "Qscramb2", "Qchannel2",
     /* Pseudo-registers.  */
     "coprocessor", "MAC"
   };
@@ -171,9 +183,9 @@ mt_register_name (int regnum)
     dim_1 = ((regnum / MT_COPRO_PSEUDOREG_REGS / MT_COPRO_PSEUDOREG_DIM_2)
             %  MT_COPRO_PSEUDOREG_DIM_1);
     
-    if (index == MT_COPRO_PSEUDOREG_REGS - 1)
+    if (index == MT_COPRO_PSEUDOREG_MAC_REGNUM)
       stub = register_names[MT_MAC_PSEUDOREG_REGNUM];
-    else if (index > MT_QCHANNEL_REGNUM - MT_CPR0_REGNUM)
+    else if (index >= MT_NUM_REGS - MT_CPR0_REGNUM)
       stub = "";
     else
       stub = register_names[index + MT_CPR0_REGNUM];
@@ -208,6 +220,8 @@ mt_copro_register_type (struct gdbarch *arch, int regnum)
     case MT_Z1_REGNUM:
     case MT_Z2_REGNUM:
     case MT_OUT_REGNUM:
+    case MT_ZI2_REGNUM:
+    case MT_ZQ2_REGNUM:
       return builtin_type_int16;
     case MT_EXMAC_REGNUM:
     case MT_MAC_REGNUM:
@@ -219,7 +233,7 @@ mt_copro_register_type (struct gdbarch *arch, int regnum)
     default:
       if (regnum >= MT_CPR0_REGNUM && regnum <= MT_CPR15_REGNUM)
        return builtin_type_int16;
-      else if (regnum == MT_CPR0_REGNUM + MT_COPRO_PSEUDOREG_REGS - 1)
+      else if (regnum == MT_CPR0_REGNUM + MT_COPRO_PSEUDOREG_MAC_REGNUM)
        {
          if (gdbarch_bfd_arch_info (arch)->mach == bfd_mach_mrisc2
              || gdbarch_bfd_arch_info (arch)->mach == bfd_mach_ms2)
@@ -269,7 +283,7 @@ mt_register_type (struct gdbarch *arch, int regnum)
        case MT_MAC_PSEUDOREG_REGNUM:
          return mt_copro_register_type (arch,
                                         MT_CPR0_REGNUM
-                                        + MT_COPRO_PSEUDOREG_REGS - 1);
+                                        + MT_COPRO_PSEUDOREG_MAC_REGNUM);
        default:
          if (regnum >= MT_R0_REGNUM && regnum <= MT_R15_REGNUM)
            return builtin_type_int32;
@@ -481,7 +495,7 @@ mt_select_coprocessor (struct gdbarch *gdbarch,
       
       /* We must flush the cache, as it is now invalid.  */
       for (ix = MT_NUM_CPU_REGS; ix != MT_NUM_REGS; ix++)
-       set_register_cached (ix, 0);
+       regcache_invalidate (regcache, ix);
     }
   
   return index;
@@ -530,9 +544,9 @@ mt_pseudo_register_read (struct gdbarch *gdbarch,
       {
        unsigned index = mt_select_coprocessor (gdbarch, regcache, regno);
        
-       if (index == MT_COPRO_PSEUDOREG_REGS - 1)
+       if (index == MT_COPRO_PSEUDOREG_MAC_REGNUM)
          mt_pseudo_register_read (gdbarch, regcache,
-                                  MT_COPRO_PSEUDOREG_REGNUM, buf);
+                                  MT_MAC_PSEUDOREG_REGNUM, buf);
        else if (index < MT_NUM_REGS - MT_CPR0_REGNUM)
          regcache_raw_read (regcache, index + MT_CPR0_REGNUM, buf);
       }
@@ -559,7 +573,7 @@ mt_pseudo_register_write (struct gdbarch *gdbarch,
     case MT_COPRO_PSEUDOREG_REGNUM:
       regcache_raw_write (regcache, MT_COPRO_REGNUM, buf);
       for (i = MT_NUM_CPU_REGS; i < MT_NUM_REGS; i++)
-       set_register_cached (i, 0);
+       regcache_invalidate (regcache, i);
       break;
     case MT_MAC_REGNUM:
     case MT_MAC_PSEUDOREG_REGNUM:
@@ -584,9 +598,9 @@ mt_pseudo_register_write (struct gdbarch *gdbarch,
       {
        unsigned index = mt_select_coprocessor (gdbarch, regcache, regno);
        
-       if (index == MT_COPRO_PSEUDOREG_REGS - 1)
+       if (index == MT_COPRO_PSEUDOREG_MAC_REGNUM)
          mt_pseudo_register_write (gdbarch, regcache,
-                                   MT_COPRO_PSEUDOREG_REGNUM, buf);
+                                   MT_MAC_PSEUDOREG_REGNUM, buf);
        else if (index < MT_NUM_REGS - MT_CPR0_REGNUM)
          regcache_raw_write (regcache, index + MT_CPR0_REGNUM, buf);
       }
@@ -647,8 +661,11 @@ mt_registers_info (struct gdbarch *gdbarch,
 
          frame_register_read (frame, regnum, buff);
 
-         fputs_filtered (REGISTER_NAME (regnum), file);
-         print_spaces_filtered (15 - strlen (REGISTER_NAME (regnum)), file);
+         fputs_filtered (gdbarch_register_name
+                         (current_gdbarch, regnum), file);
+         print_spaces_filtered (15 - strlen (gdbarch_register_name
+                                               (current_gdbarch, regnum)),
+                                file);
          fputs_filtered ("0x", file);
 
          for (i = 0; i < regsize; i++)
@@ -669,8 +686,11 @@ mt_registers_info (struct gdbarch *gdbarch,
          frame_register_read (frame, MT_COPRO_REGNUM, buf);
          /* And print.  */
          regnum = MT_COPRO_PSEUDOREG_REGNUM;
-         fputs_filtered (REGISTER_NAME (regnum), file);
-         print_spaces_filtered (15 - strlen (REGISTER_NAME (regnum)), file);
+         fputs_filtered (gdbarch_register_name (current_gdbarch, regnum),
+                         file);
+         print_spaces_filtered (15 - strlen (gdbarch_register_name
+                                               (current_gdbarch, regnum)),
+                                file);
          val_print (register_type (gdbarch, regnum), buf,
                     0, 0, file, 0, 1, 0, Val_no_prettyprint);
          fputs_filtered ("\n", file);
@@ -699,8 +719,11 @@ mt_registers_info (struct gdbarch *gdbarch,
 
          /* And print.  */
          regnum = MT_MAC_PSEUDOREG_REGNUM;
-         fputs_filtered (REGISTER_NAME (regnum), file);
-         print_spaces_filtered (15 - strlen (REGISTER_NAME (regnum)), file);
+         fputs_filtered (gdbarch_register_name (current_gdbarch, regnum),
+                         file);
+         print_spaces_filtered (15 - strlen (gdbarch_register_name
+                                             (current_gdbarch, regnum)),
+                                file);
          fputs_filtered ("0x", file);
          print_longest (file, 'x', 0, newmac);
          fputs_filtered ("\t", file);
@@ -877,7 +900,7 @@ mt_frame_unwind_cache (struct frame_info *next_frame,
   frame_unwind_unsigned_register (next_frame, MT_SP_REGNUM, &sp);
   frame_unwind_unsigned_register (next_frame, MT_FP_REGNUM, &fp);
 
-  start_addr = frame_func_unwind (next_frame);
+  start_addr = frame_func_unwind (next_frame, NORMAL_FRAME);
 
   /* Return early if GDB couldn't find the function.  */
   if (start_addr == 0)
@@ -1027,10 +1050,9 @@ mt_frame_this_id (struct frame_info *next_frame,
     mt_frame_unwind_cache (next_frame, this_prologue_cache);
 
   if (!(info == NULL || info->prev_sp == 0))
-    {
-      (*this_id) = frame_id_build (info->prev_sp,
-                                  frame_func_unwind (next_frame));
-    }
+    (*this_id) = frame_id_build (info->prev_sp,
+                                frame_func_unwind (next_frame, NORMAL_FRAME));
+
   return;
 }
 
@@ -1104,23 +1126,9 @@ mt_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
      provided.  */
   gdbarch = gdbarch_alloc (&info, NULL);
 
-  switch (info.byte_order)
-    {
-    case BFD_ENDIAN_BIG:
-      set_gdbarch_float_format (gdbarch, &floatformat_ieee_single_big);
-      set_gdbarch_double_format (gdbarch, &floatformat_ieee_double_big);
-      set_gdbarch_long_double_format (gdbarch, &floatformat_ieee_double_big);
-      break;
-    case BFD_ENDIAN_LITTLE:
-      set_gdbarch_float_format (gdbarch, &floatformat_ieee_single_little);
-      set_gdbarch_double_format (gdbarch, &floatformat_ieee_double_little);
-      set_gdbarch_long_double_format (gdbarch,
-                                     &floatformat_ieee_double_little);
-      break;
-    default:
-      internal_error (__FILE__, __LINE__,
-                     _("mt_gdbarch_init: bad byte order for float format"));
-    }
+  set_gdbarch_float_format (gdbarch, floatformats_ieee_single);
+  set_gdbarch_double_format (gdbarch, floatformats_ieee_double);
+  set_gdbarch_long_double_format (gdbarch, floatformats_ieee_double);
 
   set_gdbarch_register_name (gdbarch, mt_register_name);
   set_gdbarch_num_regs (gdbarch, MT_NUM_REGS);
This page took 0.026686 seconds and 4 git commands to generate.