From patchwork Tue Oct 31 14:54:43 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Alex_Benn=C3=A9e?= X-Patchwork-Id: 117635 Delivered-To: patch@linaro.org Received: by 10.80.245.45 with SMTP id t42csp4049769edm; Tue, 31 Oct 2017 07:55:51 -0700 (PDT) X-Google-Smtp-Source: ABhQp+QkMws3RB0/sKdcLmQC1+MX/95NUQXXDGVYs6A5/3MSCoSOuo8/6SqIva9BUFKYR3HopnOt X-Received: by 10.37.228.67 with SMTP id b64mr1347845ybh.196.1509461750943; Tue, 31 Oct 2017 07:55:50 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1509461750; cv=none; d=google.com; s=arc-20160816; b=P5uw1z2o2L29ALyq+nkN/vmkFwNPmuxDyVG4e6ScLQytK+AEF5LaQjQUr6jffaTAN5 NVgI7snySYXL/4pDA/gm5Xz4l7pxffzQ4CkTOYj/KNN/3y258sBpTebVvnIPAAHveYmY AR7JI+ua+dOFFXAbpD0e2U813gap1AlHAwzyQBCVwN+GgLuRavru7+3mFcL2RvbGza0w QbC9I1AEOHSNcCS+aPsgNI4/r1+/vjrwisu7XslLpUC+zg2HoLWq7szaH2AoyKSxgzG9 ArHvYlYXy/jXitsyu0p5c41kUlne5sIOfEwV1HsfxxiKojkzI5z87ZBW/d3cbpYW9diX SllQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:cc:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:subject :content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:to:from:dkim-signature:arc-authentication-results; bh=/2Qj1qfMNK+2DZhS7va2bYrvohJo86Kgg4xJvX62igU=; b=TaltaztPLWrOiPqhd56Dtkn9ZfixgjQ2V+uq+OKmG/CnLKXXc58Q19FrLqoC2SAKiy 63Nq8NRrEgkCPdpLOBlU/rbPxF+Dq1ux2/QqJcvreh6ljZg8JPREFJ6n59daCjOUeket L9VbvR0FzOvGo0Sed1G2uo+gghBx7D3Mt4j9OKEU3k+ZOcY7bAmfT7a+vp7WzactvJ/S 6ObRjZVczLiw8LKaBISs9UN14g60O/G5DpelltrVFCCLAmUYN3FY7710HZ8rVcrbzrTQ VZ4pZSCy2rcFrs2l7kD51sTgMC720EMKGXdMuAjH72XfZVx7unscBqmYLha4WsMvIadB OCaw== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@linaro.org header.s=google header.b=FyNxPm2t; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) smtp.mailfrom=qemu-devel-bounces+patch=linaro.org@nongnu.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [2001:4830:134:3::11]) by mx.google.com with ESMTPS id n6si475919ywl.8.2017.10.31.07.55.50 for (version=TLS1 cipher=AES128-SHA bits=128/128); Tue, 31 Oct 2017 07:55:50 -0700 (PDT) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) client-ip=2001:4830:134:3::11; Authentication-Results: mx.google.com; dkim=fail header.i=@linaro.org header.s=google header.b=FyNxPm2t; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) smtp.mailfrom=qemu-devel-bounces+patch=linaro.org@nongnu.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([::1]:45994 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1e9XxG-0000z1-9J for patch@linaro.org; Tue, 31 Oct 2017 10:55:50 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:59393) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1e9Xwc-0000ek-JU for qemu-devel@nongnu.org; Tue, 31 Oct 2017 10:55:14 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1e9XwY-00073l-H1 for qemu-devel@nongnu.org; Tue, 31 Oct 2017 10:55:10 -0400 Received: from mail-wm0-x242.google.com ([2a00:1450:400c:c09::242]:52439) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1e9XwY-00072j-8B for qemu-devel@nongnu.org; Tue, 31 Oct 2017 10:55:06 -0400 Received: by mail-wm0-x242.google.com with SMTP id t139so23845224wmt.1 for ; Tue, 31 Oct 2017 07:55:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=/2Qj1qfMNK+2DZhS7va2bYrvohJo86Kgg4xJvX62igU=; b=FyNxPm2ttSszKHSRwPur2AfJwI4pAmZDsFdsolFH3EEjAapSHnFUvIh89Wq7NeHA0z nIQMiMoOM9KiWNBY5AqwI1/r6f1642FoKH7cU3hlPZTdNh3QQGecoID01zj1vmD961Ps 4kiaKxvTou6cG2JZoFiGTGhXkRklY9z/ccRwU= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=/2Qj1qfMNK+2DZhS7va2bYrvohJo86Kgg4xJvX62igU=; b=VlImHA7zEqMmPS1H1FJktdRLbq8lBd6/55oGVNDqhVyvdmkaXVVD3LXjxOiK6tloFZ 5YEVFX7DqaQiAy9OeDbMHC0sYZtigYPUD4hFCbKsD89DPzO0N3JXXFtd1541WW/l6VIx JDj5/Dv5/al0tOqkJDiw+uoLDE5T4SXz3Q3dd9F3Ob1udO4reBKCMJ++4lsfhPsb6mi/ sp7dE2ToZaAQbaydR9hrSrjM9uj2OUKcH5NoH67GRtVnjyaHyrGVX9atqn4pPLoJP1H+ NlT/dmsiAA94crgKNDtccM/hhXrCDUaVFU4X4RGApOIE9RvOg8PIOcfVAxvEB+FJgcRo bukA== X-Gm-Message-State: AMCzsaWpwsTfQiElc25ibqaC0tRD7Qjs6ZryYI2tr3rxsVC2GhGPGsnA D4V1k8PzlobWVW8aJm5YPnZ5dEv65jg= X-Received: by 10.28.178.81 with SMTP id b78mr2096875wmf.157.1509461705032; Tue, 31 Oct 2017 07:55:05 -0700 (PDT) Received: from zen.linaro.local ([81.128.185.34]) by smtp.gmail.com with ESMTPSA id m25sm1495530wmi.7.2017.10.31.07.54.59 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 31 Oct 2017 07:55:03 -0700 (PDT) Received: from zen.linaroharston (localhost [127.0.0.1]) by zen.linaro.local (Postfix) with ESMTP id DF3C13E0EE2; Tue, 31 Oct 2017 14:54:57 +0000 (GMT) From: =?utf-8?q?Alex_Benn=C3=A9e?= To: peter.maydell@linaro.org Date: Tue, 31 Oct 2017 14:54:43 +0000 Message-Id: <20171031145444.13766-7-alex.bennee@linaro.org> X-Mailer: git-send-email 2.14.2 In-Reply-To: <20171031145444.13766-1-alex.bennee@linaro.org> References: <20171031145444.13766-1-alex.bennee@linaro.org> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:400c:c09::242 Subject: [Qemu-devel] [RISU PATCH 6/7] risugen: support @GroupName in risu files X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: qemu-arm@nongnu.org, =?utf-8?q?Alex_Benn=C3=A9e?= , qemu-devel@nongnu.org Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" The existing pattern support is useful but it does get a little tedious when faced with large groups of instructions. This introduces the concept of a @GroupName which can be sprinkled in the risu definition and is attached to all instructions following its definition until the next group or an empty group "@" is specified. It can be combined with the existing pattern support to do things like: ./risugen --group AdvSIMDAcrossVector --not-pattern ".*_RES" aarch64.risu foo.bin Signed-off-by: Alex Bennée --- README | 10 ++++++++++ risugen | 20 ++++++++++++++++++++ 2 files changed, 30 insertions(+) -- 2.14.2 diff --git a/README b/README index 312e9cd..9946e6e 100644 --- a/README +++ b/README @@ -75,6 +75,10 @@ reads the configuration file arm.risu, and generates 10000 instructions based on the instruction patterns matching the regular expression "VQSHL.*imm.*". The resulting binary is written to vqshlimm.out. +An alternative to using regular expression patterns is to use the +--group specifier. This relies on the configuration file having been +annotated with suitable @ markers. + This binary can then be passed to the risu program, which is written in C. You need to run risu on both an ARM native target and on the program under test. The ARM native system is the 'master' @@ -140,6 +144,12 @@ Lines starting with a '.' are directives to risu/risugen: * ".mode [thumb|arm]" specifies whether the file contains ARM or Thumb instructions; it must precede all instruction patterns. +Lines starting with a '@' are a grouping directive. Instructions +following will be assigned to a comma separated list of groups. The +list of groups is reset at the next '@' directive which may be empty. +This provides an alternative method to selecting instructions than RE +patterns. + Other lines are instruction patterns: insnname encodingname bitfield ... [ [ !blockname ] { blocktext } ] where each bitfield is either: diff --git a/risugen b/risugen index 8bfb0e9..aba4bb7 100755 --- a/risugen +++ b/risugen @@ -34,7 +34,10 @@ my @insn_keys; # The arch will be selected based on .mode directive defined in risu file. my $arch = ""; +# Current group, updated by @GroupName +my $insn_group = ""; +my @group = (); # include groups my @pattern_re = (); # include pattern my @not_pattern_re = (); # exclude pattern @@ -122,6 +125,11 @@ sub parse_config_file($) exit(1); } + if ($tokens[0] =~ /^@(.*)/ ) { + $insn_group = $1; + next; + } + if ($tokens[0] =~ /^\./) { parse_risu_directive($file, $seen_pattern, @tokens); next; @@ -239,6 +247,9 @@ sub parse_config_file($) $insnrec->{fixedbits} = $fixedbits; $insnrec->{fixedbitmask} = $fixedbitmask; $insnrec->{fields} = [ @fields ]; + if (length $insn_group) { + $insnrec->{group} = $insn_group; + } $insn_details{$insnname} = $insnrec; } close(CFILE) or die "can't close $file: $!"; @@ -249,6 +260,12 @@ sub select_insn_keys () { # Get a list of the insn keys which are permitted by the re patterns @insn_keys = sort keys %insn_details; + if (@group) { + my $re = join("|",@group); + @insn_keys = grep { + defined($insn_details{$_}->{group}) && + grep /$re/, $insn_details{$_}->{group}} @insn_keys + } if (@pattern_re) { my $re = '\b((' . join(')|(',@pattern_re) . '))\b'; @insn_keys = grep /$re/, @insn_keys; @@ -277,6 +294,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 defined 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 @@ -305,6 +323,7 @@ sub main() GetOptions( "help" => sub { usage(); exit(0); }, "numinsns=i" => \$numinsns, "fpscr=o" => \$fpscr, + "group=s" => \@group, "pattern=s" => \@pattern_re, "not-pattern=s" => \@not_pattern_re, "condprob=f" => sub { @@ -319,6 +338,7 @@ sub main() # allow "--pattern re,re" and "--pattern re --pattern re" @pattern_re = split(/,/,join(',',@pattern_re)); @not_pattern_re = split(/,/,join(',',@not_pattern_re)); + @group = split(/,/,join(',',@group)); if ($#ARGV != 1) { usage();