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 <
jsun@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.pmindex 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.pmindex 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.pmindex 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.pmindex 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