2004-03-17 Paolo Bonzini <bonzini@gnu.org>
[deliverable/binutils-gdb.git] / opcodes / arm-dis.c
index 97ec8423485fd32767efdbea30aad4504f5f2a34..e918dafa28bba2afe9835ec06138fccad61114cb 100644 (file)
@@ -286,7 +286,7 @@ print_insn_arm (pc, info, given)
                                {
                                  int offset = given & 0xfff;
                                  if (offset)
-                                   func (stream, ", %s#%d",
+                                   func (stream, ", #%s%d",
                                          (((given & 0x00800000) == 0)
                                           ? "-" : ""), offset);
                                }
@@ -307,7 +307,7 @@ print_insn_arm (pc, info, given)
                                {
                                  int offset = given & 0xfff;
                                  if (offset)
-                                   func (stream, "], %s#%d",
+                                   func (stream, "], #%s%d",
                                          (((given & 0x00800000) == 0)
                                           ? "-" : ""), offset);
                                  else
@@ -350,7 +350,7 @@ print_insn_arm (pc, info, given)
                                   /* Immediate.  */
                                   int offset = ((given & 0xf00) >> 4) | (given & 0xf);
                                  if (offset)
-                                   func (stream, ", %s#%d",
+                                   func (stream, ", #%s%d",
                                          (((given & 0x00800000) == 0)
                                           ? "-" : ""), offset);
                                }
@@ -374,7 +374,7 @@ print_insn_arm (pc, info, given)
                                   /* Immediate.  */
                                   int offset = ((given & 0xf00) >> 4) | (given & 0xf);
                                  if (offset)
-                                   func (stream, "], %s#%d",
+                                   func (stream, "], #%s%d",
                                          (((given & 0x00800000) == 0)
                                           ? "-" : ""), offset);
                                  else
@@ -445,11 +445,13 @@ print_insn_arm (pc, info, given)
 
                    case 'A':
                      func (stream, "[%s", arm_regnames [(given >> 16) & 0xf]);
-                     if ((given & 0x01000000) != 0)
+
+                     if ((given & (1 << 24)) != 0)
                        {
                          int offset = given & 0xff;
+
                          if (offset)
-                           func (stream, ", %s#%d]%s",
+                           func (stream, ", #%s%d]%s",
                                  ((given & 0x00800000) == 0 ? "-" : ""),
                                  offset * 4,
                                  ((given & 0x00200000) != 0 ? "!" : ""));
@@ -459,12 +461,18 @@ print_insn_arm (pc, info, given)
                      else
                        {
                          int offset = given & 0xff;
-                         if (offset)
-                           func (stream, "], %s#%d",
-                                 ((given & 0x00800000) == 0 ? "-" : ""),
-                                 offset * 4);
+
+                         func (stream, "]");
+
+                         if (given & (1 << 21))
+                           {
+                             if (offset)
+                               func (stream, ", #%s%d",
+                                     ((given & 0x00800000) == 0 ? "-" : ""),
+                                     offset * 4);
+                           }
                          else
-                           func (stream, "]");
+                           func (stream, ", {%d}", offset);
                        }
                      break;
 
@@ -631,6 +639,16 @@ print_insn_arm (pc, info, given)
                                  func (stream, "%d", reg);
                                }
                                break;
+                             case 'W':
+                               {
+                                 long reg;
+                                 
+                                 reg = given >> bitstart;
+                                 reg &= (2 << (bitend - bitstart)) - 1;
+                                 
+                                 func (stream, "%d", reg + 1);
+                               }
+                               break;
                              case 'x':
                                {
                                  long reg;
@@ -868,12 +886,12 @@ print_insn_arm (pc, info, given)
                          if (offset)
                            {
                              if ((given & 0x01000000) != 0)
-                               func (stream, ", %s#%d]%s",
+                               func (stream, ", #%s%d]%s",
                                      ((given & 0x00800000) == 0 ? "-" : ""),
                                      offset * multiplier,
                                      ((given & 0x00200000) != 0 ? "!" : ""));
                              else
-                               func (stream, "], %s#%d",
+                               func (stream, "], #%s%d",
                                      ((given & 0x00800000) == 0 ? "-" : ""),
                                      offset * multiplier);
                            }
@@ -1137,6 +1155,23 @@ print_insn_thumb (pc, info, given)
   abort ();
 }
 
+/* Disallow mapping symbols ($a, $b, $d, $t etc) from
+   being displayed in symbol relative addresses.  */
+
+bfd_boolean
+arm_symbol_is_valid (asymbol * sym,
+                    struct disassemble_info * info ATTRIBUTE_UNUSED)
+{
+  const char * name;
+  
+  if (sym == NULL)
+    return FALSE;
+
+  name = bfd_asymbol_name (sym);
+
+  return (name && *name != '$');
+}
+
 /* Parse an individual disassembler option.  */
 
 void
This page took 0.024607 seconds and 4 git commands to generate.