Forgot to commit ChangeLog entry for CRIS gas tests. Oops.
[deliverable/binutils-gdb.git] / opcodes / arm-dis.c
index f897292eb1b2d9be8d663a7fdac59a8666210541..0ddcffa97860779b9cd9fe724c9fb269a3027bc8 100644 (file)
@@ -60,17 +60,19 @@ static arm_regname regnames[] =
 {
   { "raw" , "Select raw register names",
     { "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15"}},
+  { "gcc",  "Select register names used by GCC",
+    { "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "sl",  "fp",  "ip",  "sp",  "lr",  "pc" }},
   { "std",  "Select register names used in ARM's ISA documentation",
     { "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12", "sp",  "lr",  "pc" }},
   { "apcs", "Select register names used in the APCS",
     { "a1", "a2", "a3", "a4", "v1", "v2", "v3", "v4", "v5", "v6", "sl",  "fp",  "ip",  "sp",  "lr",  "pc" }},
   { "atpcs", "Select register names used in the ATPCS",
     { "a1", "a2", "a3", "a4", "v1", "v2", "v3", "v4", "v5", "v6", "v7",  "v8",  "IP",  "SP",  "LR",  "PC" }},
-  { "atpcs-special", "Select special register names used in the ATPCS",
+  { "special-atpcs", "Select special register names used in the ATPCS",
     { "a1", "a2", "a3", "a4", "v1", "v2", "v3", "WR", "v5", "SB", "SL",  "FP",  "IP",  "SP",  "LR",  "PC" }}
 };
 
-/* Default to standard register name set.  */
+/* Default to GCC register name set.  */
 static unsigned int regname_selected = 1;
 
 #define NUM_ARM_REGNAMES  NUM_ELEM (regnames)
@@ -90,8 +92,38 @@ static int  print_insn_arm   PARAMS ((bfd_vma, struct disassemble_info *, long))
 static int  print_insn_thumb PARAMS ((bfd_vma, struct disassemble_info *, long));
 static void parse_disassembler_options PARAMS ((char *));
 static int  print_insn       PARAMS ((bfd_vma, struct disassemble_info *, boolean));
+int get_arm_regname_num_options (void);
+int set_arm_regname_option (int option);
+int get_arm_regnames (int option, const char **setname,
+                     const char **setdescription,
+                     const char ***register_names);
 \f
 /* Functions. */
+int
+get_arm_regname_num_options (void)
+{
+  return NUM_ARM_REGNAMES;
+}
+
+int
+set_arm_regname_option (int option)
+{
+  int old = regname_selected;
+  regname_selected = option;
+  return old;
+}
+
+int
+get_arm_regnames (int option, const char **setname,
+                 const char **setdescription,
+                  const char ***register_names)
+{
+  *setname = regnames[option].name;
+  *setdescription = regnames[option].description;
+  *register_names = regnames[option].reg_names;
+  return 16;
+}
+
 static void
 arm_decode_shift (given, func, stream)
      long given;
@@ -390,21 +422,15 @@ print_insn_arm (pc, info, given)
                      break;
 
                    case 'C':
-                     switch (given & 0x00090000)
-                       {
-                       default:
-                         func (stream, "_???");
-                         break;
-                       case 0x90000:
-                         func (stream, "_all");
-                         break;
-                       case 0x10000:
-                         func (stream, "_ctl");
-                         break;
-                       case 0x80000:
-                         func (stream, "_flg");
-                         break;
-                       }
+                     func (stream, "_");
+                     if (given & 0x80000)
+                       func (stream, "f");
+                     if (given & 0x40000)
+                       func (stream, "s");
+                     if (given & 0x20000)
+                       func (stream, "x");
+                     if (given & 0x10000)
+                       func (stream, "c");
                      break;
 
                    case 'F':
@@ -622,7 +648,8 @@ print_insn_thumb (pc, info, given)
              info->bytes_per_chunk = 4;
              info->bytes_per_line  = 4;
              
-              func (stream, "bl\t");
+                func (stream, "bl\t");
+               
               info->print_address_func (BDISP23 (given) * 2 + pc + 4, info);
               return 4;
             }
@@ -706,14 +733,14 @@ print_insn_thumb (pc, info, given)
                                 if (started)
                                   func (stream, ", ");
                                 started = 1;
-                                func (stream, "lr");
+                                func (stream, arm_regnames[14] /* "lr" */);
                               }
 
                             if (domaskpc)
                               {
                                 if (started)
                                   func (stream, ", ");
-                                func (stream, "pc");
+                                func (stream, arm_regnames[15] /* "pc" */);
                               }
 
                             func (stream, "}");
@@ -827,8 +854,8 @@ print_insn_thumb (pc, info, given)
 }
 
 /* Parse an individual disassembler option.  */
-static void
-parse_disassembler_option (option)
+void
+parse_arm_disassembler_option (option)
      char * option;
 {
   if (option == NULL)
@@ -877,12 +904,12 @@ parse_disassembler_options (options)
       if (space)
        {
          * space = '\0';
-         parse_disassembler_option (options);
+         parse_arm_disassembler_option (options);
          * space = ' ';
          options = space + 1;
        }
       else
-       parse_disassembler_option (options);
+       parse_arm_disassembler_option (options);
     }
   while (space);
 }
This page took 0.025296 seconds and 4 git commands to generate.