s/Linux/.../
[deliverable/binutils-gdb.git] / opcodes / arm-dis.c
index 9d280a17b79581d9768d81d7e8f91d0da389f796..7e9b3309008473243ffab5e54c110a40183185a0 100644 (file)
@@ -201,7 +201,7 @@ print_insn_arm (pc, info, given)
                                offset = - offset;
                          
                              /* pre-indexed */
-                             func (stream, ", #%x]", offset);
+                             func (stream, ", #%d]", offset);
 
                              offset += pc + 8;
 
@@ -215,7 +215,7 @@ print_insn_arm (pc, info, given)
                          else
                            {
                              /* Post indexed.  */
-                             func (stream, "], #%x", offset);
+                             func (stream, "], #%d", offset);
 
                              offset = pc + 8;  /* ie ignore the offset.  */
                            }
@@ -280,7 +280,7 @@ print_insn_arm (pc, info, given)
                          if ((given & 0x00800000) == 0)
                            offset = -offset;
                          
-                         func (stream, "[pc, #%x]\t; ", offset);
+                         func (stream, "[pc, #%d]\t; ", offset);
                          
                          (*info->print_address_func)
                            (offset + pc + 8, info);
@@ -390,13 +390,6 @@ print_insn_arm (pc, info, given)
                        func (stream, "t");
                      break;
 
-                   case 'h':
-                     if ((given & 0x00000020) == 0x00000020)
-                       func (stream, "h");
-                      else
-                        func (stream, "b");
-                     break;
-
                    case 'A':
                      func (stream, "[%s", arm_regnames [(given >> 16) & 0xf]);
                      if ((given & 0x01000000) != 0)
@@ -445,6 +438,25 @@ print_insn_arm (pc, info, given)
                      }
                      break;
 
+                   case 'I':
+                     /* Print a Cirrus/DSP shift immediate.  */
+                     /* Immediates are 7bit signed ints with bits 0..3 in
+                        bits 0..3 of opcode and bits 4..6 in bits 5..7
+                        of opcode.  */
+                     {
+                       int imm;
+
+                       imm = (given & 0xf) | ((given & 0xe0) >> 1);
+
+                       /* Is ``imm'' a negative number?  */
+                       if (imm & 0x40)
+                         imm |= (-1 << 7);
+
+                       func (stream, "%d", imm);
+                     }
+
+                     break;
+
                    case 'C':
                      func (stream, "_");
                      if (given & 0x80000)
@@ -611,7 +623,85 @@ print_insn_arm (pc, info, given)
                                abort ();
                              }
                            break;
-                           
+
+                         case 'y':
+                         case 'z':
+                           {
+                             int single = *c == 'y';
+                             int regno;
+
+                             switch (bitstart)
+                               {
+                               case 4: /* Sm pair */
+                                 func (stream, "{");
+                                 /* Fall through.  */
+                               case 0: /* Sm, Dm */
+                                 regno = given & 0x0000000f;
+                                 if (single)
+                                   {
+                                     regno <<= 1;
+                                     regno += (given >> 5) & 1;
+                                   }
+                                 break;
+
+                               case 1: /* Sd, Dd */
+                                 regno = (given >> 12) & 0x0000000f;
+                                 if (single)
+                                   {
+                                     regno <<= 1;
+                                     regno += (given >> 22) & 1;
+                                   }
+                                 break;
+
+                               case 2: /* Sn, Dn */
+                                 regno = (given >> 16) & 0x0000000f;
+                                 if (single)
+                                   {
+                                     regno <<= 1;
+                                     regno += (given >> 7) & 1;
+                                   }
+                                 break;
+
+                               case 3: /* List */
+                                 func (stream, "{");
+                                 regno = (given >> 12) & 0x0000000f;
+                                 if (single)
+                                   {
+                                     regno <<= 1;
+                                     regno += (given >> 22) & 1;
+                                   }
+                                 break;
+
+                                 
+                               default:
+                                 abort ();
+                               }
+
+                             func (stream, "%c%d", single ? 's' : 'd', regno);
+
+                             if (bitstart == 3)
+                               {
+                                 int count = given & 0xff;
+
+                                 if (single == 0)
+                                   count >>= 1;
+
+                                 if (--count)
+                                   {
+                                     func (stream, "-%c%d",
+                                           single ? 's' : 'd',
+                                           regno + count);
+                                   }
+
+                                 func (stream, "}");
+                               }
+                             else if (bitstart == 4)
+                               func (stream, ", %c%d}", single ? 's' : 'd',
+                                     regno + 1);
+
+                             break;
+                           }
+
                          case '`':
                            c++;
                            if ((given & (1 << bitstart)) == 0)
@@ -1105,7 +1195,7 @@ the -M switch:\n"));
   for (i = NUM_ARM_REGNAMES; i--;)
     fprintf (stream, "  reg-names-%s %*c%s\n",
             regnames[i].name,
-            14 - strlen (regnames[i].name), ' ',
+            (int)(14 - strlen (regnames[i].name)), ' ',
             regnames[i].description);
 
   fprintf (stream, "  force-thumb              Assume all insns are Thumb insns\n");
This page took 0.025546 seconds and 4 git commands to generate.