* hppa-dis.c (print_insn_hppa): No space before 'H' operand.
authorJeff Law <law@redhat.com>
Sat, 5 Feb 1994 18:18:49 +0000 (18:18 +0000)
committerJeff Law <law@redhat.com>
Sat, 5 Feb 1994 18:18:49 +0000 (18:18 +0000)
        Floating point format for 'H' operand is backwards from normal
        case (0 == double, 1 == single).  For '4', '6', '7', '9', and '8'
        operands (fmpyadd and fmpysub), handle bizarre register translation
        correctly for single precision format.

opcodes/ChangeLog
opcodes/hppa-dis.c

index ca0bc2bb944cf4d45cde1de63eec79a26526d537..52315a08c0c8b3ac56ad0cea059d3418ba27051a 100644 (file)
@@ -1,5 +1,11 @@
 Sat Feb  5 00:04:02 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)
 
+       * hppa-dis.c (print_insn_hppa): No space before 'H' operand.
+       Floating point format for 'H' operand is backwards from normal
+       case (0 == double, 1 == single).  For '4', '6', '7', '9', and '8'
+       operands (fmpyadd and fmpysub), handle bizarre register
+       translation correctly for single precision format.
+
        * hppa-dis.c (print_insn_hppa): Do not emit a space after 'F'
        or 'I' operands if the next format specifier is 'M' (fcmp
        condition completer).
index 57273a3c3b489ec143fb58785c7c0a9eee2f4fb4..24d5b7a0ec0e2e4f32b59ad670098ca11034cb24 100644 (file)
@@ -377,7 +377,7 @@ print_insn_hppa (memaddr, info)
          
          (*info->fprintf_func) (info->stream, "%s", opcode->name);
 
-         if (!strchr ("cfCY<?!@-+&U>~nNZFIMadu|", opcode->args[0]))
+         if (!strchr ("cfCY<?!@-+&U>~nHNZFIMadu|", opcode->args[0]))
            (*info->fprintf_func) (info->stream, " ");
          for (s = opcode->args; *s != '\0'; ++s)
            {
@@ -417,20 +417,45 @@ print_insn_hppa (memaddr, info)
                  fput_fp_reg (GET_FIELD (insn, 27, 31), info);
                  break;
                case '4':
-                 fput_fp_reg (GET_FIELD (insn, 6, 10), info);
-                 break;
+                 {
+                   int reg = GET_FIELD (insn, 6, 10);
+
+                   reg |= (GET_FIELD (insn, 26, 26) << 4);
+                   fput_fp_reg (reg, info);
+                   break;
+                 }
                case '6':
-                 fput_fp_reg (GET_FIELD (insn, 11, 15), info);
-                 break;
+                 {
+                   int reg = GET_FIELD (insn, 11, 15);
+
+                   reg |= (GET_FIELD (insn, 26, 26) << 4);
+                   fput_fp_reg (reg, info);
+                   break;
+                 }
                case '7':
-                 fput_fp_reg (GET_FIELD (insn, 27, 31), info);
-                 break;
+                 {
+                   int reg = GET_FIELD (insn, 27, 31);
+
+                   reg |= (GET_FIELD (insn, 26, 26) << 4);
+                   fput_fp_reg (reg, info);
+                   break;
+                 }
                case '8':
-                 fput_fp_reg (GET_FIELD (insn, 16, 20), info);
-                 break;
+                 {
+                   int reg = GET_FIELD (insn, 16, 20);
+
+                   reg |= (GET_FIELD (insn, 26, 26) << 4);
+                   fput_fp_reg (reg, info);
+                   break;
+                 }
                case '9':
-                 fput_fp_reg (GET_FIELD (insn, 21, 25), info);
-                 break;
+                 {
+                   int reg = GET_FIELD (insn, 21, 25);
+
+                   reg |= (GET_FIELD (insn, 26, 26) << 4);
+                   fput_fp_reg (reg, info);
+                   break;
+                 }
                case '5':
                  fput_const (extract_5_load (insn), info);
                  break;
@@ -618,8 +643,12 @@ print_insn_hppa (memaddr, info)
                                                                  17, 18)]);
                  break;
                case 'H':
-                   fputs_filtered (float_format_names[GET_FIELD 
-                                                      (insn, 26, 26)], info);
+                 if (GET_FIELD (insn, 26, 26) == 1)
+                   (*info->fprintf_func) (info->stream, "%s ",
+                                   float_format_names[0]);
+                 else
+                   (*info->fprintf_func) (info->stream, "%s ",
+                                   float_format_names[1]);
                  break;
                case 'I':
                  /* if no destination completer and not before a completer