From patchwork Fri Aug 9 15:41:51 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Henderson X-Patchwork-Id: 170948 Delivered-To: patch@linaro.org Received: by 2002:ac9:2daa:0:0:0:0:0 with SMTP id g42csp9651597oce; Fri, 9 Aug 2019 08:42:16 -0700 (PDT) X-Google-Smtp-Source: APXvYqzExLNy9xdf7hJs2b/AIT2fw33hCzNFBlq5rXXb6N5U1fw1lSWcxY/oQ5SKepsB+WnlHkcy X-Received: by 2002:aa7:c559:: with SMTP id s25mr22287736edr.117.1565365336181; Fri, 09 Aug 2019 08:42:16 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1565365336; cv=none; d=google.com; s=arc-20160816; b=UY4fGIGO0+8KGnOCeB7f3D+DOgZ5kYPd2aLn39HWzrxQclKIRqu0ds4j2tSRg8HOIa 8Nu+AJPfbKtAE7zUFVlosX42YStptIWqDi9Ms19yheD5pxlX6+Un21+WqTfaJkrPPyl8 kaNpNUZZfIpAvTA8qdA8Fyu5jpkaaTiWa7mvTt0F3VxjZeGXlU9BNBw+A8UbqQiYc6iY lcDRkmNPm7V6sfrsDg9jsSN0ykG3SshERmnglkgJ10fKVn1G57kqzZi4LGTM1V42IFqr 9WwNZZ+UvtZV3eZ27y7YdVbA+qKipUEGkh+8mdEAOer2qPUveyHPlWYJu2twS0l1Z6KK qB5w== 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:references:in-reply-to :message-id:date:to:from:dkim-signature; bh=UcR6femN4PMRW3W5bwCjDWWwUNOlmVUXp07Zv3cBZyQ=; b=N+l9XCKAri2AHTvVwcwuYBQ400lctxKl7S02OIsghV+DzbY1L/eVLacpv/RXHAbrn8 hONiJdMveOHTis2hCEmYBlYtNoHJECqxXJcy4BtlxE3Bq2RsTxrPu15RoZgA3Ibz0Im+ ecIS+dZF7pSQF8RdHsFE07J4+gWg/kCybc+0roY2Q7oDcy6LSJDpNWm+zfjaonCwaMXB 7k1ZVLjirE2+r50kwK+ONuPDHZ7g1oyC8tmTSrH7xmnFbgv+CUkMMU3HSkCYWBRfRF3c +cRQZsCYMU56iqYtlTi5xQlt3cSA3M9QMCHr9L38ILw3Olc/BYNYFNu2rVHv3NFTFZOq vKGw== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@linaro.org header.s=google header.b=uxEZ9enm; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 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. [209.51.188.17]) by mx.google.com with ESMTPS id f20si36750163edy.431.2019.08.09.08.42.15 for (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Fri, 09 Aug 2019 08:42:16 -0700 (PDT) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; Authentication-Results: mx.google.com; dkim=fail header.i=@linaro.org header.s=google header.b=uxEZ9enm; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 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]:60270 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.86_2) (envelope-from ) id 1hw71z-0000if-5o for patch@linaro.org; Fri, 09 Aug 2019 11:42:15 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:50762) by lists.gnu.org with esmtp (Exim 4.86_2) (envelope-from ) id 1hw71n-0000aV-Kg for qemu-devel@nongnu.org; Fri, 09 Aug 2019 11:42:05 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hw71l-0008Si-Mq for qemu-devel@nongnu.org; Fri, 09 Aug 2019 11:42:03 -0400 Received: from mail-pl1-x634.google.com ([2607:f8b0:4864:20::634]:38482) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hw71j-0008QR-QW for qemu-devel@nongnu.org; Fri, 09 Aug 2019 11:42:00 -0400 Received: by mail-pl1-x634.google.com with SMTP id m12so6500788plt.5 for ; Fri, 09 Aug 2019 08:41:58 -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; bh=UcR6femN4PMRW3W5bwCjDWWwUNOlmVUXp07Zv3cBZyQ=; b=uxEZ9enmcTxPqmNgKJswZzmoH9lBzoCHXrZjIOPyzmeT30scIFiZNvQH13MytafGZf aXODqG3aPGdhY1jrtriJ3SsaXitIxVVSgV0xf+sdb/0v6wg1Fh835sjOjJ1CQWQUhfZ+ tcsmX/l353DyrFySOJjSC8SBANxDdSxilHEEvi8TZnkjcBJifpCGB4ulNDs0pVD+nPjK TqfFhaKpdkWKsLo5xirMRuUIQL/9oW3yYcwPzoKWymYJ1PejVG0zvI+g7xr9FL7EgqZ5 Qh4ZhZnazPf2VlMZzznCnHD5GL23pkvbjSm98lNYSWmrwqcSYep6h3qEEci+LCECNrpk YlIw== 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; bh=UcR6femN4PMRW3W5bwCjDWWwUNOlmVUXp07Zv3cBZyQ=; b=JHtY6C6Pz8jN2N+cLV0LgPi2Y6uZV8SMTm8tfyroYp7EEFcKCAQ4fV72rSVedqKdzc aaMvqeio33Sz5woK1hKrn3X3GSOu2C/uQJkRdey1Jf+NSmROxoODze17jarEay1I3MUb 16nbZfcKtULytWjj07P4Kpo5s/Paa29uBnOGLVqxhCyq3TCO4g03lrwHzYHHZaD2zPH6 DWcwfqSakme2cX4eQwSWE9EhYR75wdIHLCTES6CCCV2SDEQQpLIi8P9zRRaLbSnbVAmU 4Dv5+FNlAxO4/DH4V9CAitqEvB+J3CZOB4cBHynoDT3Qq/w204imw1/WIDRGbamM5Gj1 XE1w== X-Gm-Message-State: APjAAAWZeLLP4k7p2YSSaCxiacjLtRqDQsl8ApAECxUP550eslYiWqj1 omMY1j1LHCbEgbYlcQEIBAX9jVU+JuI= X-Received: by 2002:a17:902:8bc1:: with SMTP id r1mr19714697plo.42.1565365317334; Fri, 09 Aug 2019 08:41:57 -0700 (PDT) Received: from localhost.localdomain (97-113-7-119.tukw.qwest.net. [97.113.7.119]) by smtp.gmail.com with ESMTPSA id 67sm80452179pfd.177.2019.08.09.08.41.56 (version=TLS1_3 cipher=AEAD-AES256-GCM-SHA384 bits=256/256); Fri, 09 Aug 2019 08:41:56 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Date: Fri, 9 Aug 2019 08:41:51 -0700 Message-Id: <20190809154153.31763-2-richard.henderson@linaro.org> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190809154153.31763-1-richard.henderson@linaro.org> References: <20190809154153.31763-1-richard.henderson@linaro.org> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::634 Subject: [Qemu-devel] [PATCH 1/3] decodetree: Allow !function with no input bits X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: peter.maydell@linaro.org, Alistair.Francis@wdc.com, qemu-arm@nongnu.org, qemu-riscv@nongnu.org, philmd@redhat.com Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" Call this form a "parameter", returning a value extracted from the DisasContext. Signed-off-by: Richard Henderson --- docs/devel/decodetree.rst | 8 ++++- scripts/decodetree.py | 54 ++++++++++++++++++++++++------- tests/decode/err_field6.decode | 5 +++ tests/decode/succ_function.decode | 6 ++++ 4 files changed, 60 insertions(+), 13 deletions(-) create mode 100644 tests/decode/err_field6.decode create mode 100644 tests/decode/succ_function.decode -- 2.17.1 diff --git a/docs/devel/decodetree.rst b/docs/devel/decodetree.rst index 44ac621ea8..ce7f52308f 100644 --- a/docs/devel/decodetree.rst +++ b/docs/devel/decodetree.rst @@ -23,7 +23,7 @@ Fields Syntax:: - field_def := '%' identifier ( unnamed_field )+ ( !function=identifier )? + field_def := '%' identifier ( unnamed_field )* ( !function=identifier )? unnamed_field := number ':' ( 's' ) number For *unnamed_field*, the first number is the least-significant bit position @@ -34,6 +34,12 @@ present, they are concatenated. In this way one can define disjoint fields. If ``!function`` is specified, the concatenated result is passed through the named function, taking and returning an integral value. +One may use ``!function`` with zero ``unnamed_fields``. This case is called +a *parameter*, and the named function is only passed the ``DisasContext`` +and returns an integral value extracted from there. + +A field with no ``unnamed_fields`` and no ``!function`` is in error. + FIXME: the fields of the structure into which this result will be stored is restricted to ``int``. Which means that we cannot expand 64-bit items. diff --git a/scripts/decodetree.py b/scripts/decodetree.py index d7a59d63ac..a2490aeb74 100755 --- a/scripts/decodetree.py +++ b/scripts/decodetree.py @@ -195,7 +195,10 @@ class MultiField: """Class representing a compound instruction field""" def __init__(self, subs, mask): self.subs = subs - self.sign = subs[0].sign + if len(subs): + self.sign = subs[0].sign + else: + self.sign = 0 self.mask = mask def __str__(self): @@ -245,7 +248,7 @@ class ConstField: class FunctionField: - """Class representing a field passed through an expander""" + """Class representing a field passed through a function""" def __init__(self, func, base): self.mask = base.mask self.sign = base.sign @@ -266,6 +269,27 @@ class FunctionField: # end FunctionField +class ParameterField: + """Class representing a psuedo-field read from a function""" + def __init__(self, func): + self.mask = 0 + self.sign = 0 + self.func = func + + def __str__(self): + return self.func + + def str_extract(self): + return self.func + '(ctx)' + + def __eq__(self, other): + return self.func == other.func + + def __ne__(self, other): + return not self.__eq__(other) +# end FunctionField + + class Arguments: """Class representing the extracted fields of a format""" def __init__(self, nm, flds, extern): @@ -433,17 +457,23 @@ def parse_field(lineno, name, toks): if width > insnwidth: error(lineno, 'field too large') - if len(subs) == 1: - f = subs[0] + if len(subs) == 0: + if func: + f = ParameterField(func) + else: + error(lineno, 'field with no value') else: - mask = 0 - for s in subs: - if mask & s.mask: - error(lineno, 'field components overlap') - mask |= s.mask - f = MultiField(subs, mask) - if func: - f = FunctionField(func, f) + if len(subs) == 1: + f = subs[0] + else: + mask = 0 + for s in subs: + if mask & s.mask: + error(lineno, 'field components overlap') + mask |= s.mask + f = MultiField(subs, mask) + if func: + f = FunctionField(func, f) if name in fields: error(lineno, 'duplicate field', name) diff --git a/tests/decode/err_field6.decode b/tests/decode/err_field6.decode new file mode 100644 index 0000000000..a719884572 --- /dev/null +++ b/tests/decode/err_field6.decode @@ -0,0 +1,5 @@ +# This work is licensed under the terms of the GNU LGPL, version 2 or later. +# See the COPYING.LIB file in the top-level directory. + +# Diagnose no bits in field +%field diff --git a/tests/decode/succ_function.decode b/tests/decode/succ_function.decode new file mode 100644 index 0000000000..7751b1784e --- /dev/null +++ b/tests/decode/succ_function.decode @@ -0,0 +1,6 @@ +# This work is licensed under the terms of the GNU LGPL, version 2 or later. +# See the COPYING.LIB file in the top-level directory. + +# "Field" as parameter pulled from DisasContext. +%foo !function=foo +foo 00000000000000000000000000000000 %foo From patchwork Fri Aug 9 15:41:52 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Richard Henderson X-Patchwork-Id: 170949 Delivered-To: patch@linaro.org Received: by 2002:ac9:2daa:0:0:0:0:0 with SMTP id g42csp9651610oce; Fri, 9 Aug 2019 08:42:17 -0700 (PDT) X-Google-Smtp-Source: APXvYqwKehK8GYD6Db/ZCbOPsKvtTKbEI+966QqBtFczx0OcX1GOWphO+NfPyGirri8UIJCKpLPZ X-Received: by 2002:a50:fb15:: with SMTP id d21mr3546006edq.127.1565365337294; Fri, 09 Aug 2019 08:42:17 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1565365337; cv=none; d=google.com; s=arc-20160816; b=zbrdh9Jdxd0/LtY4Zg/nYG0BMwWSSEIA823J1hFGgXqCS4NbcmB+Gdv3QPBonmDGM/ ex1wRa7H/J/wC4nvdf2wh8liS+cFm26NIL05uiixvXutLiOluZvZxhfnIbbi4B3VDryn qVG0bt7WVpxTer1AP+G82H9TFX9foV4kPbwhIeVErtc8eEeLct+o5lp5Cp45gZNvWpe2 KqpuVBX4H1gxu9SFF59pGFrxRAwHrcOrfzvNDb7+DN4Yjf1fYUXu/60g7rBgAJavY3YP ELfuMCK9Gaoqv5Kq+BD6anj+15AeNbWchr054IfDnL0JaG/tnZxiuIbw9Tr9E36CG9BZ dcYQ== 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:references:in-reply-to :message-id:date:to:from:dkim-signature; bh=leHpSxHzVUfQCq35SXdIhrfSJv5bGUxlfMEN59fKGs8=; b=AMzC99aJM6HiJNYQHUqY2jFLoCwO4D59lkJuUUYo3rWpUiASlodv4jSrz+alK41Yno uQzfWDX1Ja9OPPyvVIAhvHK5xJfdOf+VV8kU6G9BoUqvzN1aScgg93fApQsg9aoZCOJj DSMljjsEmXcZ1AHjk1Ma7F1vHyXg7MWJLs4RO65nsu81uNjjc9XfayHFZG301I2Iz3no mvAtEJJncQ/EsLvX2H43+GTmXkkRzOdtxn1tu2pf+4h7NB/i7Hoy8+OItjYFU/GF33kX 6Yd6gFf1MucTAQ7G+RdCJAWierVSyt9KiPQm1BdBUdfnSvSBIgUF1kTBBvELKNF/Z1wL Nq5Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@linaro.org header.s=google header.b=R+x9JWNG; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 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. [209.51.188.17]) by mx.google.com with ESMTPS id i24si36768983edg.100.2019.08.09.08.42.17 for (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Fri, 09 Aug 2019 08:42:17 -0700 (PDT) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; Authentication-Results: mx.google.com; dkim=fail header.i=@linaro.org header.s=google header.b=R+x9JWNG; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 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]:60272 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.86_2) (envelope-from ) id 1hw720-0000nf-9o for patch@linaro.org; Fri, 09 Aug 2019 11:42:16 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:50813) by lists.gnu.org with esmtp (Exim 4.86_2) (envelope-from ) id 1hw71p-0000eR-5y for qemu-devel@nongnu.org; Fri, 09 Aug 2019 11:42:06 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hw71n-0008Ur-Lj for qemu-devel@nongnu.org; Fri, 09 Aug 2019 11:42:05 -0400 Received: from mail-pl1-x644.google.com ([2607:f8b0:4864:20::644]:42660) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hw71l-0008RA-LP for qemu-devel@nongnu.org; Fri, 09 Aug 2019 11:42:03 -0400 Received: by mail-pl1-x644.google.com with SMTP id ay6so45162176plb.9 for ; Fri, 09 Aug 2019 08:41:59 -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; bh=leHpSxHzVUfQCq35SXdIhrfSJv5bGUxlfMEN59fKGs8=; b=R+x9JWNGRCUyPT9qY3gVRkx/94Jp2YtcuNACFzBuhhxhqF95so80+Jb8LzC7mqvsLE PC1JIijvAdAWGOxKse6YwXT0dF8oVgKkcY4NyvZYiY9uV7qkFrkRJh6qZcs7DHqC/Hrw DZohBIcvGacA/E0rBf7QTEmwaq9UQlQEF7IYM/eUVmlgtqPtgnV2gPIu+UZsGPtIQ3HT +iZ27v7taX0V46y2bXnJWuseXxxFPGoozjGC3faiJmbLMWbH9eGtJ6tMM1X2qCp2ii7x +AWyzWzDTHpxRPIEDUXvlKn5rPoOeMXZeDR332BiSIOBsgiC2Y4k3d862xbmCtgufaJk clnQ== 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; bh=leHpSxHzVUfQCq35SXdIhrfSJv5bGUxlfMEN59fKGs8=; b=XACmY2iLAFVN/3uIEf8A7vIXA4zTlWCtRy3BP/e8mBWf7AtV2vPM9+7UUF8wAwsJ1l ULOE5n5KZooI4mll3UW+Tcb8EQ5fgApV2E5K23edVbVQv+/Dc/jYprJ2qiyboMAslb63 4tfJ0uEjnyCR6naaY6CNXqtCnFWPTnzxYDHjt+prUSjtwIbn9sJ+9Ph1+k3cfvOXHa4n B38AEkfRdlP0/TJ8w6XrypVKUOTGHm7GOXga+dOkifUd2umm1SzmYeR3epHCjn/9pkf3 6xv/zZPwCF2FaX7Fj9yT6FGsd5LWUzxN3aSGKgsxy1XjHWcG070bJZxpl1qGUpPjRZcw 2PqQ== X-Gm-Message-State: APjAAAWp9oP7yaL16o5vrlTWsd26P8ULuwLNKHkV1UgJgHNsoS1uhcRM Q6jxaAfZaM3fgDFZGW79qVYl0OW0bgI= X-Received: by 2002:a17:902:7d86:: with SMTP id a6mr19609862plm.199.1565365318747; Fri, 09 Aug 2019 08:41:58 -0700 (PDT) Received: from localhost.localdomain (97-113-7-119.tukw.qwest.net. [97.113.7.119]) by smtp.gmail.com with ESMTPSA id 67sm80452179pfd.177.2019.08.09.08.41.57 (version=TLS1_3 cipher=AEAD-AES256-GCM-SHA384 bits=256/256); Fri, 09 Aug 2019 08:41:57 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Date: Fri, 9 Aug 2019 08:41:52 -0700 Message-Id: <20190809154153.31763-3-richard.henderson@linaro.org> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190809154153.31763-1-richard.henderson@linaro.org> References: <20190809154153.31763-1-richard.henderson@linaro.org> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::644 Subject: [Qemu-devel] [PATCH 2/3] decodetree: Suppress redundant declaration warnings X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: peter.maydell@linaro.org, Alistair.Francis@wdc.com, qemu-arm@nongnu.org, qemu-riscv@nongnu.org, philmd@redhat.com Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" We can tell that a decodetree input file is "secondary" when it uses an argument set marked "!extern". This indicates that at least one of the insn translation functions will have already been declared by the "primary" input file, but given only the secondary we cannot tell which. Avoid redundant declaration warnings by suppressing them with pragmas. Signed-off-by: Richard Henderson --- scripts/decodetree.py | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) -- 2.17.1 Reviewed-by: Philippe Mathieu-Daudé Tested-by: Philippe Mathieu-Daudé Reviewed-by: Alistair Francis diff --git a/scripts/decodetree.py b/scripts/decodetree.py index a2490aeb74..f02c8acca1 100755 --- a/scripts/decodetree.py +++ b/scripts/decodetree.py @@ -33,6 +33,7 @@ arguments = {} formats = {} patterns = [] allpatterns = [] +anyextern = False translate_prefix = 'trans' translate_scope = 'static ' @@ -485,12 +486,14 @@ def parse_arguments(lineno, name, toks): """Parse one argument set from TOKS at LINENO""" global arguments global re_ident + global anyextern flds = [] extern = False for t in toks: if re_fullmatch('!extern', t): extern = True + anyextern = True continue if not re_fullmatch(re_ident, t): error(lineno, 'invalid argument set token "{0}"'.format(t)) @@ -1191,6 +1194,7 @@ def main(): global insnmask global decode_function global variablewidth + global anyextern decode_scope = 'static ' @@ -1251,6 +1255,19 @@ def main(): # A single translate function can be invoked for different patterns. # Make sure that the argument sets are the same, and declare the # function only once. + # + # If we're sharing formats, we're likely also sharing trans_* functions, + # but we can't tell which ones. Prevent issues from the compiler by + # suppressing redundant declaration warnings. + if anyextern: + output("#ifdef CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE\n", + "# pragma GCC diagnostic push\n", + "# pragma GCC diagnostic ignored \"-Wredundant-decls\"\n", + "# ifdef __clang__\n" + "# pragma GCC diagnostic ignored \"-Wtypedef-redefinition\"\n", + "# endif\n", + "#endif\n\n") + out_pats = {} for i in allpatterns: if i.name in out_pats: @@ -1262,6 +1279,11 @@ def main(): out_pats[i.name] = i output('\n') + if anyextern: + output("#ifdef CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE\n", + "# pragma GCC diagnostic pop\n", + "#endif\n\n") + for n in sorted(formats.keys()): f = formats[n] f.output_extract() From patchwork Fri Aug 9 15:41:53 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Richard Henderson X-Patchwork-Id: 170950 Delivered-To: patch@linaro.org Received: by 2002:ac9:2daa:0:0:0:0:0 with SMTP id g42csp9653277oce; Fri, 9 Aug 2019 08:44:02 -0700 (PDT) X-Google-Smtp-Source: APXvYqwN0tUrD3ifRtl1B01OFEASD2fjo3fLcWHLLTtxOkQwpvXuDMSydGJVRzy6QZ08BqV/ilAs X-Received: by 2002:a50:aa14:: with SMTP id o20mr22734387edc.165.1565365442669; Fri, 09 Aug 2019 08:44:02 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1565365442; cv=none; d=google.com; s=arc-20160816; b=svCQvlBH0iF43KKX5Oj4U8cl/e45qQjlZzkEWwk0K18PTTbEHC3KtQZr4cjK/7ph5I jsYzfCJXsiw4d8z7gkCF9uMxl7wK/D9o42il2sBKLqavfNaJJx69pJZskfZf03QNMjfq 85wMDpQBTfHFufwhc7FPMrSYfM4TSVlMLh8VTKoJc1lGDbE34x3R11ykG04PXndlvl6K PK2reer3BZS87r1vqT9A2LM4F7Jf3nLYbc00KRQuUHfMUkAOZPJvM7Sx2PLWRTGFmgRM u7AEUWJQT+NlGCe8bKvMhPjNspBO/0rsWACPtQru3UnMl3DN5dFl0CgonAP6LaerSdJX Ng1Q== 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:references:in-reply-to :message-id:date:to:from:dkim-signature; bh=x8MCVdcm8N9Wdyzx80ABjmXcKcOIg3c8JF8kLGEmqDw=; b=uUHyWpCiOhb9RMEF9aaXZNyx36REQd1vgl4oLTBl8xq08Zu7mPigzoQlECxCBA1JLc LOTP1P+Tw8KIZiKZU9dCzjOa0uBzfVshQnkLVhcob8g2VjtPXzyY4uNHYYNEwIPNHXH5 lQNKo9uZFNiFFEua+9NM26589DSY0sA1ozrxMit6dioghFWcjuOp4tjKgJW8UtWw73gj BcYhGh8LOYNXDdqO1HoDkI5hz9OO8wWC617K+xBXIQ/sQ3DURxgCrp0yQMkF3MKmaPS/ dxfiWz4hnKIYNOl8Ey3vnrufl8pxk/22yfPC/xOI+MF/+Be8K0W6Fg0zd9B9jXMg7HpO aDug== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@linaro.org header.s=google header.b=loVYDKjB; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 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. [209.51.188.17]) by mx.google.com with ESMTPS id v17si33579671eja.198.2019.08.09.08.44.02 for (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Fri, 09 Aug 2019 08:44:02 -0700 (PDT) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; Authentication-Results: mx.google.com; dkim=fail header.i=@linaro.org header.s=google header.b=loVYDKjB; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 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]:60310 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.86_2) (envelope-from ) id 1hw73h-0003f0-Md for patch@linaro.org; Fri, 09 Aug 2019 11:44:01 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:50852) by lists.gnu.org with esmtp (Exim 4.86_2) (envelope-from ) id 1hw71q-0000hf-Au for qemu-devel@nongnu.org; Fri, 09 Aug 2019 11:42:07 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hw71n-0008VP-QQ for qemu-devel@nongnu.org; Fri, 09 Aug 2019 11:42:06 -0400 Received: from mail-pg1-x542.google.com ([2607:f8b0:4864:20::542]:38649) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hw71n-0008SG-I2 for qemu-devel@nongnu.org; Fri, 09 Aug 2019 11:42:03 -0400 Received: by mail-pg1-x542.google.com with SMTP id z14so8816700pga.5 for ; Fri, 09 Aug 2019 08:42:01 -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; bh=x8MCVdcm8N9Wdyzx80ABjmXcKcOIg3c8JF8kLGEmqDw=; b=loVYDKjBaQT2QJuvWNv441HJ4opYXwOlNGJtXF7TcgVjOtY/Q5TxH1B3gcaIIE10s8 4m/5mFet2d2doJgS+C7NHkl71dKMhvcKFXA9Cr53VFJN+bVv4Vo27vSxAGBbL9PRYb9R 9F6ljy04E0bDeWuXq1sfdNfwEMZLm9tyB7Ex4sQOJhsOvB7M4VSNPYK+djHYFg7VojU0 MtuBefnWTW4Co+HtG0+4tUDiJto32DH8EbT6YlEY56i3H8I9otXAc6YMStZIMkGMzd0b G0IIyIQ1nPIUoYGART9l/srPZAUjoKTxhODqXrdGJIPuaE7XzdtI5niKqJo4YbJAeSUR uRTg== 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; bh=x8MCVdcm8N9Wdyzx80ABjmXcKcOIg3c8JF8kLGEmqDw=; b=YsItIPIlEI5yTWCQhLRX9wnob0v9uvvcObTxw/46DQKrEtr/8Bb+15jGA5imCcUH/W Sb5LAaxhpZzVXWFXdmslwqxg4K8KuYXqB4gbAlA2kwjaTFVVHjWjqy3a+42x5AerXZyK usJYi0lD1D0XBC2vvcbgRVDtJOMlSfv536oc77HnMGFKWWnffuKBfRdEtEluyd4gaOzv cSWsqsGdM2h4gLPiYcljqpGGkM8xGPqJY0dngfuCpWmMvMjH92GHGhwpsm7F2PJ8c8Oi eZFfWYyyYXbLAG9ATIltFcnQ0/9eN6H0EdFwdTD/jPOR963jY1EU9gYUSw5nesWh6EVs GYKA== X-Gm-Message-State: APjAAAVfoy7rGcYByXzzhrW1igWa3OVz7G6PKe/mw5QqtU9BKLswtAGI c+3bwoTUp309ne7OUOdfl9/ArzCxel0= X-Received: by 2002:a17:90a:360b:: with SMTP id s11mr9919689pjb.51.1565365320410; Fri, 09 Aug 2019 08:42:00 -0700 (PDT) Received: from localhost.localdomain (97-113-7-119.tukw.qwest.net. [97.113.7.119]) by smtp.gmail.com with ESMTPSA id 67sm80452179pfd.177.2019.08.09.08.41.58 (version=TLS1_3 cipher=AEAD-AES256-GCM-SHA384 bits=256/256); Fri, 09 Aug 2019 08:41:59 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Date: Fri, 9 Aug 2019 08:41:53 -0700 Message-Id: <20190809154153.31763-4-richard.henderson@linaro.org> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190809154153.31763-1-richard.henderson@linaro.org> References: <20190809154153.31763-1-richard.henderson@linaro.org> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::542 Subject: [Qemu-devel] [PATCH 3/3] target/riscv: Remove redundant declaration pragmas X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: peter.maydell@linaro.org, Alistair.Francis@wdc.com, qemu-arm@nongnu.org, qemu-riscv@nongnu.org, philmd@redhat.com Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" These are now generated by decodetree itself. Signed-off-by: Richard Henderson --- target/riscv/translate.c | 19 +------------------ 1 file changed, 1 insertion(+), 18 deletions(-) -- 2.17.1 Reviewed-by: Philippe Mathieu-Daudé Tested-by: Philippe Mathieu-Daudé Acked-by: Palmer Dabbelt Reviewed-by: Alistair Francis diff --git a/target/riscv/translate.c b/target/riscv/translate.c index 8d6ab73258..adeddb85f6 100644 --- a/target/riscv/translate.c +++ b/target/riscv/translate.c @@ -708,26 +708,9 @@ static bool gen_shift(DisasContext *ctx, arg_r *a, #include "insn_trans/trans_rvd.inc.c" #include "insn_trans/trans_privileged.inc.c" -/* - * Auto-generated decoder. - * Note that the 16-bit decoder reuses some of the trans_* functions - * initially declared by the 32-bit decoder, which results in duplicate - * declaration warnings. Suppress them. - */ -#ifdef CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wredundant-decls" -# ifdef __clang__ -# pragma GCC diagnostic ignored "-Wtypedef-redefinition" -# endif -#endif - +/* Include the auto-generated decoder for 16 bit insn */ #include "decode_insn16.inc.c" -#ifdef CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE -# pragma GCC diagnostic pop -#endif - static void decode_opc(DisasContext *ctx) { /* check for compressed insn */