Current semantic is a little strange when multiple --group options are
specified.
In this case,  only instructions in *all* these groups (i.e., intersection)
are used for
generation, which is not very useful at all.  This patch changes the
semantic to
include all instructions in these groups (i.e., union) for sequence
generation.

Signed-off-by: Jun Sun <j...@junsun.net>
---
 risugen                | 4 ++--
 risugen_arm.pm         | 1 +
 risugen_loongarch64.pm | 1 +
 risugen_m68k.pm        | 1 +
 risugen_ppc64.pm       | 1 +
 5 files changed, 6 insertions(+), 2 deletions(-)

diff --git a/risugen b/risugen
index 360112f..f88c22a 100755
--- a/risugen
+++ b/risugen
@@ -264,7 +264,7 @@ sub select_insn_keys ()
     if (@groups) {
         @insn_keys = grep {
             defined($insn_details{$_}->{groups}) &&
-                scalar @groups ==
get_intersection([$insn_details{$_}->{groups}, \@groups])
+                0 != scalar(get_intersection([$insn_details{$_}->{groups},
\@groups]))
         } @insn_keys
     }
     # Get a list of the insn keys which are permitted by the re patterns
@@ -297,7 +297,7 @@ Valid options:
     --fpscr n    : set initial FPSCR (arm) or FPCR (aarch64) value
(default is 0)
     --condprob p : [ARM only] make instructions conditional with
probability p
                    (default is 0, ie all instructions are always executed)
-    --group name[,name..]: only use instructions in all defined groups
+    --group name[,name..]: only use instructions in the specified groups
     --pattern re[,re...] : only use instructions matching regular
expression
                    Each re must match a full word (that is, we match on
                    the perl regex '\\b((re)|(re))\\b'). This means that
diff --git a/risugen_arm.pm b/risugen_arm.pm
index 2dc144d..dc08ec0 100644
--- a/risugen_arm.pm
+++ b/risugen_arm.pm
@@ -1112,6 +1112,7 @@ sub write_test_code($$$$$$$$$)
     }

     print "Generating code using patterns: @keys...\n";
+    print "Total insn patterns : " . $#keys . "\n";
     progress_start(78, $numinsns);

     if ($fp_enabled) {
diff --git a/risugen_loongarch64.pm b/risugen_loongarch64.pm
index 3b1b4f9..f2a6fe7 100644
--- a/risugen_loongarch64.pm
+++ b/risugen_loongarch64.pm
@@ -482,6 +482,7 @@ sub write_test_code($)
     }

     print "Generating code using patterns: @keys...\n";
+    print "Total insn patterns : " . $#keys . "\n";
     progress_start(78, $numinsns);

     if ($fp_enabled) {
diff --git a/risugen_m68k.pm b/risugen_m68k.pm
index 85fc3da..76af84b 100644
--- a/risugen_m68k.pm
+++ b/risugen_m68k.pm
@@ -181,6 +181,7 @@ sub write_test_code($)
     }

     print "Generating code using patterns: @keys...\n";
+    print "Total insn patterns : " . $#keys . "\n";
     progress_start(78, $numinsns);

     if (grep { defined($insn_details{$_}->{blocks}->{"memory"}) } @keys) {
diff --git a/risugen_ppc64.pm b/risugen_ppc64.pm
index 4bc2d62..e6d0456 100644
--- a/risugen_ppc64.pm
+++ b/risugen_ppc64.pm
@@ -392,6 +392,7 @@ sub write_test_code($)
     }

     print "Generating code using patterns: @keys...\n";
+    print "Total insn patterns : " . $#keys . "\n";
     progress_start(78, $numinsns);

     if (grep { defined($insn_details{$_}->{blocks}->{"memory"}) } @keys) {
-- 
2.34.1

Reply via email to