* ld-insn.c (print_insn_words): For fields, print conditionals.
authorHans-Peter Nilsson <hp@axis.com>
Fri, 8 Jul 2011 08:37:27 +0000 (08:37 +0000)
committerHans-Peter Nilsson <hp@axis.com>
Fri, 8 Jul 2011 08:37:27 +0000 (08:37 +0000)
sim/igen/ChangeLog
sim/igen/ld-insn.c

index 3b95d89c3e91ad1dc7b3bf9f4be7f768aa9ff5b0..5a6ad486bdbb35d10489aa0f5e98712f536ac155 100644 (file)
@@ -1,5 +1,7 @@
 2011-07-08  Hans-Peter Nilsson  <hp@axis.com>
 
+       * ld-insn.c (print_insn_words): For fields, print conditionals.
+
        Correct handling of constant named fields.
        * gen.c (insn_field_cmp): Tweak comment about neither field
        being an insn_field_string with a cond_eq-to-value condition.
index 86506eabedc2f4c8de20d90ba02e1de520c6976a..38c3b55bc934a5000b9e7fc345ea751d6d5282d4 100644 (file)
@@ -1289,6 +1289,8 @@ print_insn_words (lf *file, insn_entry * insn)
          insn_field_entry *field = word->first;
          while (1)
            {
+             insn_field_cond *cond;
+
              if (options.insn_specifying_widths)
                lf_printf (file, "%d.", field->width);
              else
@@ -1310,6 +1312,34 @@ print_insn_words (lf *file, insn_entry * insn)
                  break;
                case insn_field_string:
                  lf_printf (file, "%s", field->val_string);
+
+                 if (field->conditions == NULL)
+                   break;
+
+                 if (field->conditions->test == insn_field_cond_eq)
+                   {
+                     if (field->conditions->type == insn_field_cond_value)
+                       lf_printf (file, "=%ld",
+                                  (long) field->conditions->value);
+                     else
+                       lf_printf (file, "=%s", field->conditions->string);
+
+                     /* There can be only one equality condition.  */
+                     ASSERT (field->conditions->next == NULL);
+                     break;
+                   }
+
+                 for (cond = field->conditions;
+                      cond != NULL;
+                      cond = cond->next)
+                   {
+                     ASSERT (cond->test == insn_field_cond_ne);
+
+                     if (cond->type == insn_field_cond_value)
+                       lf_printf (file, "!%ld", (long) cond->value);
+                     else
+                       lf_printf (file, "!%s", cond->string);
+                   }
                  break;
                }
              if (field == word->last)
This page took 0.02637 seconds and 4 git commands to generate.