* config/tc-mips.c (mips_ip): Added cases for "e", "%", and "P" operand types.
authorKen Raeburn <raeburn@cygnus>
Sat, 8 Nov 1997 02:44:22 +0000 (02:44 +0000)
committerKen Raeburn <raeburn@cygnus>
Sat, 8 Nov 1997 02:44:22 +0000 (02:44 +0000)
(hilo_interlocks): VR5400 has interlocks.
(md_begin): Expect mips64vr5400, not mips64r5400.

* config/tc-mips.c (mips_ip): In default case, call as_bad instead of fprintf,
to get "assembler messages:" message output before instead of after.

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

index 0951f0c4a8f4aa72355f50e595f7cb602424a8a1..8c05de14e9dd7c0f2c021ba10f0cbb28c752d0eb 100644 (file)
@@ -1,3 +1,16 @@
+Fri Nov  7 21:29:32 1997  Ken Raeburn  <raeburn@cygnus.com>
+start-sanitize-vr5400
+
+       * config/tc-mips.c (mips_ip): Added cases for "e", "%", and "P"
+       operand types.
+       (hilo_interlocks): VR5400 has interlocks.
+       (md_begin): Expect mips64vr5400, not mips64r5400.
+end-sanitize-vr5400
+
+       * config/tc-mips.c (mips_ip): In default case, call as_bad
+       instead of fprintf, to get "assembler messages:" message output
+       before instead of after.
+
 Fri Nov  7 10:36:22 1997  Doug Evans  <devans@canuck.cygnus.com>
 
        * frags.h: Handle multiple inclusion.
 Fri Nov  7 10:36:22 1997  Doug Evans  <devans@canuck.cygnus.com>
 
        * frags.h: Handle multiple inclusion.
index 0f63db5e6ababf4d9176786455f01b4c51b522e6..2a9c39b2bd2af3ff7ecedc3ea2bd1b7122ea7baf 100644 (file)
@@ -229,6 +229,9 @@ static int mips_3900 = -1;
                          /* start-sanitize-tx49 */                  \
                          || mips_cpu == 4900                        \
                          /* end-sanitize-tx49 */                    \
                          /* start-sanitize-tx49 */                  \
                          || mips_cpu == 4900                        \
                          /* end-sanitize-tx49 */                    \
+                        /* start-sanitize-vr5400 */                \
+                        || mips_cpu == 5400                        \
+                        /* end-sanitize-vr5400 */                  \
                          )
 
 /* Whether the processor uses hardware interlocks to protect reads
                          )
 
 /* Whether the processor uses hardware interlocks to protect reads
@@ -880,8 +883,8 @@ md_begin ()
 
       /* start-sanitize-vr5400 */
       else if (strcmp (cpu, "r5400") == 0
 
       /* start-sanitize-vr5400 */
       else if (strcmp (cpu, "r5400") == 0
-              || strcmp (cpu, "mips64r5400") == 0)
-        mips_cpu = 5400;
+              || strcmp (cpu, "mips64vr5400") == 0)
+       mips_cpu = 5400;
       /* end-sanitize-vr5400 */
 
       /* start-sanitize-r5900 */
       /* end-sanitize-vr5400 */
 
       /* start-sanitize-r5900 */
@@ -6945,6 +6948,9 @@ mips_ip (str, ip)
            case 'G':           /* coprocessor destination register */
            case 'x':           /* ignore register name */
            case 'z':           /* must be zero register */
            case 'G':           /* coprocessor destination register */
            case 'x':           /* ignore register name */
            case 'z':           /* must be zero register */
+             /* start-sanitize-vr5400 */
+           case 'P':           /* performance register */
+             /* end-sanitize-vr5400 */
              s_reset = s;
              if (s[0] == '$')
                {
              s_reset = s;
              if (s[0] == '$')
                {
@@ -7552,8 +7558,38 @@ mips_ip (str, ip)
                ip->insn_opcode |= regno << OP_SH_CCC;
               continue;
 
                ip->insn_opcode |= regno << OP_SH_CCC;
               continue;
 
+             /* start-sanitize-vr5400 */
+           case 'e':           /* must be at least one digit */
+             my_getExpression (&imm_expr, s);
+             check_absolute_expr (ip, &imm_expr);
+             if ((unsigned long) imm_expr.X_add_number > (unsigned long) OP_MASK_VECBYTE)
+               {
+                 as_bad ("bad byte vector index (%ld)",
+                          (long) imm_expr.X_add_number);
+                 imm_expr.X_add_number = imm_expr.X_add_number;
+               }
+             ip->insn_opcode |= imm_expr.X_add_number << OP_SH_VECBYTE;
+             imm_expr.X_op = O_absent;
+             s = expr_end;
+             continue;
+
+           case '%':
+             my_getExpression (&imm_expr, s);
+             check_absolute_expr (ip, &imm_expr);
+             if ((unsigned long) imm_expr.X_add_number > (unsigned long) OP_MASK_VECALIGN)
+               {
+                 as_bad ("bad byte vector index (%ld)",
+                          (long) imm_expr.X_add_number);
+                 imm_expr.X_add_number = imm_expr.X_add_number;
+               }
+             ip->insn_opcode |= imm_expr.X_add_number << OP_SH_VECALIGN;
+             imm_expr.X_op = O_absent;
+             s = expr_end;
+             continue;
+
+             /* end-sanitize-vr5400 */
            default:
            default:
-             fprintf (stderr, "bad char = '%c'\n", *args);
+             as_bad ("bad char = '%c'\n", *args);
              internalError ();
            }
          break;
              internalError ();
            }
          break;
@@ -8722,7 +8758,13 @@ md_parse_option (c, arg)
                break;
              }
 
                break;
              }
 
-           if (sv && mips_cpu != 4300 && mips_cpu != 4100 && mips_cpu != 5000)
+           if (sv
+               && (mips_cpu != 4300
+                   && mips_cpu != 4100
+                   /* start-sanitize-vr5400 */
+                   && mips_cpu != 5400
+                   /* end-sanitize-vr5400 */
+                   && mips_cpu != 5000))
              {
                as_bad ("ignoring invalid leading 'v' in -mcpu=%s switch", arg);
                return 0;
              {
                as_bad ("ignoring invalid leading 'v' in -mcpu=%s switch", arg);
                return 0;