Broke parsing of !<val>!<val> when adding support for =<field>. Fix.
authorAndrew Cagney <cagney@redhat.com>
Tue, 14 Apr 1998 04:24:47 +0000 (04:24 +0000)
committerAndrew Cagney <cagney@redhat.com>
Tue, 14 Apr 1998 04:24:47 +0000 (04:24 +0000)
Add support for the -S<suffix> option.

sim/igen/ChangeLog
sim/igen/igen.c
sim/igen/ld-insn.c

index 537c7864e7a54a62ddd2443291f3f551292012db..fae78c1b6d774b6fb0a765645490dcde403d982b 100644 (file)
@@ -1,3 +1,10 @@
+Tue Apr 14 10:57:26 1998  Andrew Cagney  <cagney@b1.cygnus.com>
+
+       * ld-insn.c (parse_insn_word): Treat `!' and `=' as valid
+       separator tokens when parsing a conditional.
+
+       * igen.h (main): Add option -S so that suffix can be specified.
+
 Tue Apr 14 08:44:53 1998  Andrew Cagney  <cagney@b1.cygnus.com>
 
        * igen.h (struct igen_trace_options): Add members insn_expansion
index 4a95f2fbb632d89cfca6c062bd86506d36e18ced..8f10a39f8be1852da4a1f765be2fe3aea5edc563 100644 (file)
@@ -592,8 +592,6 @@ print_includes (lf *file)
   lf_printf (file, "\n");
   lf_printf (file, "#include \"sim-inline.c\"\n");
   lf_printf (file, "\n");
-  lf_printf (file, "#include \"sim-main.h\"\n");
-  lf_printf (file, "\n");
   print_include_inline (file, options.module.itable);
   print_include_inline (file, options.module.idecode);
   print_include_inline (file, options.module.support);
@@ -1061,7 +1059,11 @@ main (int argc,
       printf ("\n");
       printf ("  -P <prefix>\n");
       printf ("\t Prepend global names (except itable) with the string <prefix>.\n");
-      printf ("\t Specify -P <module>=<prefix> to set the <modules> prefix.\n");
+      printf ("\t Specify -P <module>=<prefix> to set a specific <module>'s prefix.\n");
+      printf ("\n");
+      printf ("  -S <suffix>\n");
+      printf ("\t Replace a global name (suffix) (except itable) with the string <suffix>.\n");
+      printf ("\t Specify -S <module>=<suffix> to change a specific <module>'s name (suffix).\n");
       printf ("\n");
       printf ("  -Werror\n");
       printf ("\t Make warnings errors\n");
@@ -1206,8 +1208,10 @@ main (int argc,
          break;
          
        case 'P':
+       case 'S':
          {
            igen_module *names;
+           igen_name *name;
            char *chp;
            chp = strchr (optarg, '=');
            if (chp == NULL)
@@ -1252,15 +1256,24 @@ main (int argc,
                    error (NULL, "Prefix `%s' unreconized\n", optarg);
                  }
              }
-           names->prefix.u = strdup (chp);
-           names->prefix.l = strdup (chp);
-           chp = names->prefix.u;
+           switch (ch)
+             {
+             case 'P':
+               name = &names->prefix;
+               break;
+             case 'S':
+               name = &names->suffix;
+               break;
+             }
+           name->u = strdup (chp);
+           name->l = strdup (chp);
+           chp = name->u;
            while (*chp) {
              if (islower(*chp))
                *chp = toupper(*chp);
              chp++;
            }
-           if (names == &options.module.global)
+           if (name == &options.module.global.prefix)
              {
                options.module.engine.prefix = options.module.global.prefix;
                options.module.icache.prefix = options.module.global.prefix;
@@ -1269,6 +1282,15 @@ main (int argc,
                options.module.semantics.prefix = options.module.global.prefix;
                options.module.support.prefix = options.module.global.prefix;
              }
+           if (name == &options.module.global.suffix)
+             {
+               options.module.engine.suffix = options.module.global.suffix;
+               options.module.icache.suffix = options.module.global.suffix;
+               options.module.idecode.suffix = options.module.global.suffix;
+               /* options.module.itable.suffix = options.module.global.suffix; */
+               options.module.semantics.suffix = options.module.global.suffix;
+               options.module.support.suffix = options.module.global.suffix;
+             }
            break;
          }
        
index 2fc6cf3187f26d1da07712c6e737586ae975a5a4..7fc0e37f33c181b85f3fb100bc42091d4fd3c1bd 100644 (file)
@@ -125,7 +125,6 @@ parse_insn_word (line_ref *line,
        char *end;
        int len;
        insn_field_cond *new_cond = ZALLOC (insn_field_cond);
-       insn_field_cond **last;
        
        /* determine the conditional test */
        switch (*chp)
@@ -144,7 +143,7 @@ parse_insn_word (line_ref *line,
        chp++; 
        chp = skip_spaces (chp);
        start = chp;
-       chp = skip_to_separator (chp, "+,:");
+       chp = skip_to_separator (chp, "+,:!=");
        end = back_spaces (start, chp);
        len = end - start;
        if (len == 0)
@@ -174,10 +173,12 @@ parse_insn_word (line_ref *line,
          error (line, "Only single conditional when `=' allowed\n");
 
        /* insert it */
-       last = &new_field->conditions;
-       while (*last != NULL)
-         last = &(*last)->next;
-       *last = new_cond;
+       {
+         insn_field_cond **last = &new_field->conditions;
+         while (*last != NULL)
+           last = &(*last)->next;
+         *last = new_cond;
+       }
       }
 
     /* NOW verify that the field was finished */