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