* Fixes for d30v PR 15627.
authorFrank Ch. Eigler <fche@redhat.com>
Thu, 7 May 1998 15:27:13 +0000 (15:27 +0000)
committerFrank Ch. Eigler <fche@redhat.com>
Thu, 7 May 1998 15:27:13 +0000 (15:27 +0000)
* First batch of fixes for sky PR 15853 (20-bit break/sdbbp)
* Fixes for d30v test suite.

gas/ChangeLog
gas/config/tc-mips.c
gas/testsuite/ChangeLog

index ef1cf2265366f900e147f6bf948ec63064dc340f..4688c0defd61490bcf997a6987411b2bbf192204 100644 (file)
@@ -1,3 +1,17 @@
+start-sanitize-d30v
+Thu May  7 11:13:00 1998  Frank Ch. Eigler  <fche@cygnus.com>
+
+       * config/tc-d30v.c (do_assemble): Abort with error message
+       if opcode operands do not match.
+       
+end-sanitize-d30v
+Thu May  7 09:36:06 1998  Frank Ch. Eigler  <fche@cygnus.com>
+
+       * config/tc-mips.c (macro_build, validate_mips_insn): Implement
+       'q' operand format for 20-bit "break"/"sdbbp" instructions.
+       (mips_ip): Truncate overflowed "break" 'c' operand.  Implement
+       similar new 'q' operand.
+
 Thu May  7 07:47:14 1998  Michael Meissner  <meissner@cygnus.com>
 
        * cgen.c (cgen_asm_finish_insn): Fix typo.
@@ -39,12 +53,14 @@ Wed May  6 15:11:12 1998  Klaus Kaempf  <kkaempf@progis.de>
 
        * doc/c-vax.texi: Correct and extend vax/vms documentation.
 
+start-sanitize-d30v
 Wed May  6 11:51:51 1998  Richard Henderson  <rth@cygnus.com>
 
        * config/tc-d30v.c (do_assemble): Accept a new parameter requesting
        a short format insn.
        (md_assemble): Set it for explicitly packed insns.
-
+end-sanitize-d30v
+       
 Tue May  5 13:23:13 1998  Nick Clifton  <nickc@cygnus.com>
 
        * config/obj-coff.c (c_symbol_merge): Do not take address of
index 92baf3375388ce43913c9dd5b115c5d125bd808f..4fa3e3b7009b6235f26a92d5cfe62ef75a3e3793 100644 (file)
@@ -2557,6 +2557,10 @@ macro_build (place, counter, ep, name, fmt, va_alist)
          insn.insn_opcode |= va_arg (args, int) << 6;
          continue;
 
+       case 'q':
+         insn.insn_opcode |= va_arg (args, int) << 6;
+         continue;
+
        case 'b':
        case 's':
        case 'r':
@@ -3433,6 +3437,7 @@ macro (ip)
   int dbl = 0;
   int coproc = 0;
   int lr = 0;
+  int imm = 0;
   offsetT maxnum;
   int off;
   bfd_reloc_code_real_type r;
@@ -5912,6 +5917,7 @@ macro2 (ip)
   int dbl = 0;
   int coproc = 0;
   int lr = 0;
+  int imm = 0;
   int off;
   offsetT maxnum;
   bfd_reloc_code_real_type r;
@@ -5953,15 +5959,24 @@ macro2 (ip)
       macro_build ((char *) NULL, &icnt, NULL, "mflo", "d", dreg);
       break;
 
+    case M_DMULO_I:
+      dbl = 1;
+    case M_MULO_I:
+      imm = 1;
+      goto do_mulo;
+
     case M_DMULO:
       dbl = 1;
     case M_MULO:
+    do_mulo:
       mips_emit_delays (true);
       ++mips_opts.noreorder;
       mips_any_noreorder = 1;
+      if (imm)
+       load_register (&icnt, AT, &imm_expr, dbl);
       macro_build ((char *) NULL, &icnt, NULL,
                   dbl ? "dmult" : "mult",
-                  "s,t", sreg, treg);
+                  "s,t", sreg, imm ? AT : treg);
       macro_build ((char *) NULL, &icnt, NULL, "mflo", "d", dreg);
       macro_build ((char *) NULL, &icnt, NULL,
                   dbl ? "dsra32" : "sra",
@@ -5980,15 +5995,24 @@ macro2 (ip)
       macro_build ((char *) NULL, &icnt, NULL, "mflo", "d", dreg);
       break;
 
+    case M_DMULOU_I:
+      dbl = 1;
+    case M_MULOU_I:
+      imm = 1;
+      goto do_mulou;
+
     case M_DMULOU:
       dbl = 1;
     case M_MULOU:
+    do_mulou:
       mips_emit_delays (true);
       ++mips_opts.noreorder;
       mips_any_noreorder = 1;
+      if (imm)
+       load_register (&icnt, AT, &imm_expr, dbl);
       macro_build ((char *) NULL, &icnt, NULL,
                   dbl ? "dmultu" : "multu",
-                  "s,t", sreg, treg);
+                  "s,t", sreg, imm ? AT : treg);
       macro_build ((char *) NULL, &icnt, NULL, "mfhi", "d", AT);
       macro_build ((char *) NULL, &icnt, NULL, "mflo", "d", dreg);
       if (mips_trap)
@@ -6903,6 +6927,7 @@ validate_mips_insn (opc)
       case 'l': break;
       case 'o': USE_BITS (OP_MASK_DELTA,       OP_SH_DELTA);   break;
       case 'p':        USE_BITS (OP_MASK_DELTA,        OP_SH_DELTA);   break;
+      case 'q':        USE_BITS (OP_MASK_CODE2,        OP_SH_CODE2);   break;
       case 'r': USE_BITS (OP_MASK_RS,          OP_SH_RS);      break;
       case 's':        USE_BITS (OP_MASK_RS,           OP_SH_RS);      break;
       case 't':        USE_BITS (OP_MASK_RT,           OP_SH_RT);      break;
@@ -7387,13 +7412,30 @@ mips_ip (str, ip)
              my_getExpression (&imm_expr, s);
              check_absolute_expr (ip, &imm_expr);
              if ((unsigned) imm_expr.X_add_number > 1023)
-               as_warn (_("Illegal break code (%ld)"),
-                        (long) imm_expr.X_add_number);
+               {
+                 as_warn (_("Illegal break code (%ld)"),
+                          (long) imm_expr.X_add_number);
+                 imm_expr.X_add_number &= 0x3ff;
+               }
              ip->insn_opcode |= imm_expr.X_add_number << 16;
              imm_expr.X_op = O_absent;
              s = expr_end;
              continue;
 
+           case 'q':           /* lower break code */
+             my_getExpression (&imm_expr, s);
+             check_absolute_expr (ip, &imm_expr);
+             if ((unsigned) imm_expr.X_add_number > 1023)
+               {
+                 as_warn (_("Illegal lower break code (%ld)"),
+                          (long) imm_expr.X_add_number);
+                 imm_expr.X_add_number &= 0x3ff;
+               }
+             ip->insn_opcode |= imm_expr.X_add_number << 6;
+             imm_expr.X_op = O_absent;
+             s = expr_end;
+             continue;
+
            case 'B':           /* syscall code */
              my_getExpression (&imm_expr, s);
              check_absolute_expr (ip, &imm_expr);
index 58c2c9ceb0eec19478d2707f1e77ffbc811115ef..53a8eb591330e2e4b1d032dadf7abab69d2e5fd0 100644 (file)
@@ -1,8 +1,21 @@
+start-sanitize-d30v
+Thu Apr 30 11:55:01 1998  Frank Ch. Eigler  <fche@cygnus.com>
+
+       * gas/d30v/{inst,array,opt,reloc}.d: Accept <symbol+offset> labels
+       in disassembly, where the offset is in hex and has a "0x" prefix.
+       
+end-sanitize-d30v
+Tue Apr 28 16:38:34 1998  Frank Ch. Eigler  <fche@cygnus.com>
+
+       * gas/mips/lineno.[sd]: Assembly source line number test.
+       * gas/mips/mips.exp: Added lineno test.
+
 start-sanitize-sky
 Thu Apr 16 11:23:13 1998  Doug Evans  <devans@canuck.cygnus.com>
 
-       * gas/testsuite/dvp/{vif-1.[sd],vif-3.s}: Update, '*' no longer
-       supported as unpack address.
+       * gas/dvp/{vif-1.[sd],vif-3.s}: Update, '*' no longer supported as
+       unpack address.  * gas/dvp/vif-4.[sd]: Test wl > cl with no input
+       data.
 
 end-sanitize-sky
 start-sanitize-r5900