Handle new v9 insn argument codes, and delete support for obsolete ones.
authorJim Wilson <wilson@tuliptree.org>
Mon, 31 Aug 1992 17:03:47 +0000 (17:03 +0000)
committerJim Wilson <wilson@tuliptree.org>
Mon, 31 Aug 1992 17:03:47 +0000 (17:03 +0000)
Otherwise not updated or tested, since v9 support is obviously incomplete,
and it can't possibly work right without some effort.

binutils/sparc-pinsn.c

index 2430b5d..a512c77 100644 (file)
@@ -251,16 +251,6 @@ memcpy(&insn,buffer, sizeof (insn));
                    freg (insn.rs2);
                    break;
 
-#ifndef NO_V9
-/* Somebody who know needs to define rs3.
-                 case 'j':
-                 case 'u':     * double/even *
-                 case 'U':     * quad/multiple of 4 *
-                   freg (insn.rs3);
-                   break;
-*/
-#endif                         /* NO_V9 */
-
                  case 'g':
                  case 'H':     /* double/even */
                  case 'J':     /* quad/multiple of 4 */
@@ -311,6 +301,38 @@ memcpy(&insn,buffer, sizeof (insn));
                    break;
 
 #ifndef NO_V9
+                 case 'I':     /* 11 bit immediate.  */
+                 case 'j':     /* 10 bit immediate.  */
+                   {
+                     /* We cannot trust the compiler to sign-extend
+                        when extracting the bitfield, hence the shifts.  */
+                     int imm;
+
+                     if (*s == 'I')
+                       imm = ((int) insn.imm13 << 21) >> 21;
+                     else
+                       imm = ((int) insn.imm13 << 22) >> 22;
+
+                     /* Check to see whether we have a 1+i, and take
+                        note of that fact.
+                        
+                        Note: because of the way we sort the table,
+                        we will be matching 1+i rather than i+1,
+                        so it is OK to assume that i is after +,
+                        not before it.  */
+                     if (found_plus)
+                       imm_added_to_rs1 = 1;
+                     
+                     if (imm <= 9)
+                       fprintf (stream, "%d", imm);
+                     else
+                       fprintf (stream, "%#x", (unsigned) imm);
+                   }
+                   break;
+
+
+
+
                  case 'k':
                    print_address ((bfd_vma)
                                   (memaddr
@@ -326,10 +348,6 @@ memcpy(&insn,buffer, sizeof (insn));
                                   stream);
                    break;
 
-                 case 'Y':
-                   fputs ("%amr", stream);
-                   break;
-
                  case '6':
                  case '7':
                  case '8':
@@ -344,6 +362,14 @@ memcpy(&insn,buffer, sizeof (insn));
                  case 'Z':
                    fputs ("xcc", stream);
                    break;
+
+                 case 'E':
+                   fputs ("%ccr", stream);
+                   break;
+
+                 case 's':
+                   fputs ("%fprs", stream);
+                   break;
 #endif                         /* NO_V9 */
 
                  case 'M':