From patchwork Tue Apr 21 11:48:20 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Beulich X-Patchwork-Id: 133457 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from vm01.sourceware.org (localhost [127.0.0.1]) by sourceware.org (Postfix) with ESMTP id 4123E4B9DB4A for ; Tue, 21 Apr 2026 11:48:58 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 4123E4B9DB4A Authentication-Results: sourceware.org; dkim=pass (2048-bit key, unprotected) header.d=suse.com header.i=@suse.com header.a=rsa-sha256 header.s=google header.b=Co/5UOGE X-Original-To: binutils@sourceware.org Delivered-To: binutils@sourceware.org Received: from mail-wr1-x436.google.com (mail-wr1-x436.google.com [IPv6:2a00:1450:4864:20::436]) by sourceware.org (Postfix) with ESMTPS id 1339C4B9DB66 for ; Tue, 21 Apr 2026 11:48:23 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 1339C4B9DB66 Authentication-Results: sourceware.org; dmarc=pass (p=quarantine dis=none) header.from=suse.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=suse.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 1339C4B9DB66 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2a00:1450:4864:20::436 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1776772103; cv=none; b=HE9DVUr1ut3d4Iv0GRwjVDYGW5711KebYnPHrORZNChSjD+YJ+3IAxh6IdSqFVEvmaFNGGGtuPp7TJ8bTPecjrLR5ULM5K5S1anZN5Tx8oG7e1DBvxThl7OiTaOm7ghrdJqY9omSufw6dvDsRCFUwUUAgCblNihm7cJaVO9jaWE= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1776772103; c=relaxed/simple; bh=aD8QRiJb7c6yDrbuO7ZbN+zZz/zjk3NiFVxw6MJzCAE=; h=DKIM-Signature:Message-ID:Date:MIME-Version:Subject:From:To; b=k3hTf47JfKcrFgpcPEAyvRujkRwpGhrRS9DF3yVpUwClQsn01dknh5FWZqvAx0WFQwOTWP7ukaSR1auWOn3vNO2HPg2lwkKfDLQbCBLYGGVepNCwdVS3ISm3kO3RHcQrW5CyYfUnHr7UnTy+4ooGk1HWegZOX9ymPNpoU879E+E= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 1339C4B9DB66 Received: by mail-wr1-x436.google.com with SMTP id ffacd0b85a97d-43cfd832155so3025260f8f.1 for ; Tue, 21 Apr 2026 04:48:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=google; t=1776772101; x=1777376901; darn=sourceware.org; h=content-transfer-encoding:in-reply-to:autocrypt:content-language :references:cc:to:from:subject:user-agent:mime-version:date :message-id:from:to:cc:subject:date:message-id:reply-to; bh=6FDu2nWUeHZdLvI1Zokqg5E7F+EpQFFzBumv2cPvgDo=; b=Co/5UOGEiG4ScST5J8mC6zdgmqwQlBHMjDgfu0lNX0kl8aeXvlvJxMt/WjzEtJHRFr uyW9LjK+YJhzIE/OcZP62IUzYEKPFfoJy/kscBIsoyiGUAf1Wu6fM4Do3yj/pQFNXYnH QUdGobaWoJInrL8Nud8kLusTVu3QfAN6ECge9usbYERllJC3936f36M3S9LX6T4KBOQA 6FCFVfns61O0P7zHJha5HcjAKQ4PLofSjPAgDEHDb6Dd2bwaupvgGwK3FapzXcUtsXHc FVB60BbPM5EIPpRQYJARw9rQ3+JONSl0Jqond7Oihu62kngRQGW41tJCWHrvTmnpko7i Edlw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776772101; x=1777376901; h=content-transfer-encoding:in-reply-to:autocrypt:content-language :references:cc:to:from:subject:user-agent:mime-version:date :message-id:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=6FDu2nWUeHZdLvI1Zokqg5E7F+EpQFFzBumv2cPvgDo=; b=CYBYfasi+VJ65Dcv+HeG6OZu3cpXk6RkeVTL2hni39HiRzmFBnQ90YDtktcVqRv4QZ Ggv3DjBw6TTAMXS0jvKOT6H2uWOpMA6Ftt6nhfnsx0AeAIM2Q73SypCXve8Hyr7jd7Ip bfmGjUh/YBMpeLXuaFOJHrSNYTn3ktprcVvsAjSvUzrQeqzE+zZsUgbaakCUseH+OqQK Mq4AAQGyQ5ySX1u/DYJTJHfJT20ZgVyQunTibdwM2kZip7OE6mbZMI38i0VA6BcdWqw3 NG7PNv5ubMdmdj9WLP9mlPpar2on/lkyt2nVuIGV0XWLkgLzcXh8FLYJS38rQa/UANip 0+vw== X-Gm-Message-State: AOJu0Yw8MY7ruCHek3eYGbufdEXr5gMWATjUfHob30enJ17MVGHWXnzc pCJ2iRwATggOiLSilBZ0qqDuefnAN8OVpRofyougKBSmjESjzY4sglYQ2G3xFUrCpKZNKSsIKFF GT0Ro6w== X-Gm-Gg: AeBDies7R+3dj7tBb3NASeSJb9G3PQXFt/sWC/y6ryAkAz4hzd1v07gPFeC7okGri/p ewX4h2+d4I8ct37uCf4oddRAMSfbPAsOHezvxpwpDonHkhVe7wfA1kbnEoC4VQifTifpqJmv96F CCs0Te4pDEn3BQkXEOGk6pZIcDFwR0xpM9LVuzIqhPLqHIGg46MOFjo5hVbB73/UB6UdLMoJpgr 7hWuWmZGkitUJz38yLZpr6xcT4zCpMnAi5iY8A5QrvVB1Xx57LVK5RqK8ivCR0Wikhq+rjjJIlR LMMoofDrV2U1sWIlqMCmgKE5LcX6TBGkBuvycziEJRndYkdcbUzUtzwNMwDLcYi166ITSP75pb3 LQeoedVRbp8Ue9dbz2j/y/RXZHY/sbCXJjXtzsf+kE4Xa3kW5RkPKkQcZRrb/w37YEWj/gNhK6I xW/cdq7YcvikBa9Gg93A9tmiNA/cFjfyslhhHfVkbdzB3SxS5ChnM6KQ2ogk/z3MYAFazv9Lz6Z yhSjQW44I5axtIUX29wqtCLNg== X-Received: by 2002:a05:6000:18a8:b0:43f:dd91:b022 with SMTP id ffacd0b85a97d-43fe3e0a2a9mr27169723f8f.35.1776772101238; Tue, 21 Apr 2026 04:48:21 -0700 (PDT) Received: from [10.156.60.236] (ip-037-024-206-209.um08.pools.vodafone-ip.de. [37.24.206.209]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-43fe4e4daf2sm35758465f8f.33.2026.04.21.04.48.20 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 21 Apr 2026 04:48:20 -0700 (PDT) Message-ID: Date: Tue, 21 Apr 2026 13:48:20 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: [PATCH 01/19] RISC-V: improve .insn documentation From: Jan Beulich To: Binutils Cc: Palmer Dabbelt , Andrew Waterman , Jim Wilson , Nelson Chu References: <620231e0-67d0-4bd0-b593-38f32b01a6d8@suse.com> Content-Language: en-US Autocrypt: addr=jbeulich@suse.com; keydata= xsDiBFk3nEQRBADAEaSw6zC/EJkiwGPXbWtPxl2xCdSoeepS07jW8UgcHNurfHvUzogEq5xk hu507c3BarVjyWCJOylMNR98Yd8VqD9UfmX0Hb8/BrA+Hl6/DB/eqGptrf4BSRwcZQM32aZK 7Pj2XbGWIUrZrd70x1eAP9QE3P79Y2oLrsCgbZJfEwCgvz9JjGmQqQkRiTVzlZVCJYcyGGsD /0tbFCzD2h20ahe8rC1gbb3K3qk+LpBtvjBu1RY9drYk0NymiGbJWZgab6t1jM7sk2vuf0Py O9Hf9XBmK0uE9IgMaiCpc32XV9oASz6UJebwkX+zF2jG5I1BfnO9g7KlotcA/v5ClMjgo6Gl MDY4HxoSRu3i1cqqSDtVlt+AOVBJBACrZcnHAUSuCXBPy0jOlBhxPqRWv6ND4c9PH1xjQ3NP nxJuMBS8rnNg22uyfAgmBKNLpLgAGVRMZGaGoJObGf72s6TeIqKJo/LtggAS9qAUiuKVnygo 3wjfkS9A3DRO+SpU7JqWdsveeIQyeyEJ/8PTowmSQLakF+3fote9ybzd880fSmFuIEJldWxp Y2ggPGpiZXVsaWNoQHN1c2UuY29tPsJgBBMRAgAgBQJZN5xEAhsDBgsJCAcDAgQVAggDBBYC AwECHgECF4AACgkQoDSui/t3IH4J+wCfQ5jHdEjCRHj23O/5ttg9r9OIruwAn3103WUITZee e7Sbg12UgcQ5lv7SzsFNBFk3nEQQCACCuTjCjFOUdi5Nm244F+78kLghRcin/awv+IrTcIWF hUpSs1Y91iQQ7KItirz5uwCPlwejSJDQJLIS+QtJHaXDXeV6NI0Uef1hP20+y8qydDiVkv6l IreXjTb7DvksRgJNvCkWtYnlS3mYvQ9NzS9PhyALWbXnH6sIJd2O9lKS1Mrfq+y0IXCP10eS FFGg+Av3IQeFatkJAyju0PPthyTqxSI4lZYuJVPknzgaeuJv/2NccrPvmeDg6Coe7ZIeQ8Yj t0ARxu2xytAkkLCel1Lz1WLmwLstV30g80nkgZf/wr+/BXJW/oIvRlonUkxv+IbBM3dX2OV8 AmRv1ySWPTP7AAMFB/9PQK/VtlNUJvg8GXj9ootzrteGfVZVVT4XBJkfwBcpC/XcPzldjv+3 HYudvpdNK3lLujXeA5fLOH+Z/G9WBc5pFVSMocI71I8bT8lIAzreg0WvkWg5V2WZsUMlnDL9 mpwIGFhlbM3gfDMs7MPMu8YQRFVdUvtSpaAs8OFfGQ0ia3LGZcjA6Ik2+xcqscEJzNH+qh8V m5jjp28yZgaqTaRbg3M/+MTbMpicpZuqF4rnB0AQD12/3BNWDR6bmh+EkYSMcEIpQmBM51qM EKYTQGybRCjpnKHGOxG0rfFY1085mBDZCH5Kx0cl0HVJuQKC+dV2ZY5AqjcKwAxpE75MLFkr wkkEGBECAAkFAlk3nEQCGwwACgkQoDSui/t3IH7nnwCfcJWUDUFKdCsBH/E5d+0ZnMQi+G0A nAuWpQkjM1ASeQwSHEeAWPgskBQL In-Reply-To: <620231e0-67d0-4bd0-b593-38f32b01a6d8@suse.com> X-Spam-Status: No, score=-3016.6 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_NONE, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on sourceware.org X-BeenThere: binutils@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Binutils mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: binutils-bounces~patchwork=sourceware.org@sourceware.org First of all, the "type" form of .insn does not permit (not even optionally) a comma after the type, much like for ordinary insns a comma is not permitted between insn mnemonic and first operand. The example given actually properly shows that already. While there, also update the .word related text: Mapping symbols have been in use for quite some time. --- a/gas/doc/c-riscv.texi +++ b/gas/doc/c-riscv.texi @@ -229,23 +229,22 @@ by rv32imac. @end table @cindex INSN directives -@item .insn @var{type}, @var{operand} [,...,@var{operand_n}] +@item .insn @var{type} @var{operand} [,...,@var{operand_n}] @itemx .insn @var{insn_length}, @var{value} @itemx .insn @var{value} This directive permits the numeric representation of an instructions and makes the assembler insert the operands according to one of the instruction formats for @samp{.insn} (@ref{RISC-V-Formats}). For example, the instruction @samp{add a0, a1, a2} could be written as -@samp{.insn r 0x33, 0, 0, a0, a1, a2}. But in fact, the instruction -formats are difficult to use for some users, so most of them are using -@samp{.word} to encode the instruction directly, rather than using -@samp{.insn}. It is fine for now, but will be wrong when the mapping -symbols are supported, since @samp{.word} will not be shown as an -instruction, it should be shown as data. Therefore, we also support -two more formats of the @samp{.insn}, the instruction @samp{add a0, a1, a2} -could also be written as @samp{.insn 0x4, 0xc58533} or @samp{.insn 0xc58533}. -When the @var{insn_length} is set, then assembler will check if the -@var{value} is a valid @var{insn_length} bytes instruction. +@samp{.insn r 0x33, 0, 0, a0, a1, a2}. But in fact, the instruction formats +are difficult to use for some users, so most of them are using @samp{.word} to +encode the instruction directly, rather than using @samp{.insn}. This goes +wrong with the use of mapping symbols, since @samp{.word} will not be shown as +an instruction; it is shown as data. Therefore, we also support two more +formats of @samp{.insn}. Said instruction could also be written as +@samp{.insn 0x4, 0xc58533} or @samp{.insn 0xc58533}. When the +@var{insn_length} form is used, the assembler will check if @var{value} is a +valid @var{insn_length} bytes instruction. @cindex @code{.attribute} directive, RISC-V @item .attribute @var{tag}, @var{value} From patchwork Tue Apr 21 11:48:55 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Beulich X-Patchwork-Id: 133458 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from vm01.sourceware.org (localhost [127.0.0.1]) by sourceware.org (Postfix) with ESMTP id B0CFA4B9DB79 for ; Tue, 21 Apr 2026 11:49:51 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org B0CFA4B9DB79 Authentication-Results: sourceware.org; dkim=pass (2048-bit key, unprotected) header.d=suse.com header.i=@suse.com header.a=rsa-sha256 header.s=google header.b=Lh7jRWVD X-Original-To: binutils@sourceware.org Delivered-To: binutils@sourceware.org Received: from mail-wm1-x333.google.com (mail-wm1-x333.google.com [IPv6:2a00:1450:4864:20::333]) by sourceware.org (Postfix) with ESMTPS id 719914B9DB43 for ; Tue, 21 Apr 2026 11:48:57 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 719914B9DB43 Authentication-Results: sourceware.org; dmarc=pass (p=quarantine dis=none) header.from=suse.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=suse.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 719914B9DB43 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2a00:1450:4864:20::333 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1776772137; cv=none; b=tqh06bMJ5uFF1zgZpd3SQPVRJNDJNQxiyuhRRMPLQc/GSdJEEX1Sqq9uRmncKOsFl1c6G78yoiRhrcFiWe9Ftr1GU9mMIBzU4gxAVUNSkZ3iT7BPBQc+tnMyB4LjQ61xRx4L+e0ArX5S8NIz6PCd2hhEyOgI+i20r0OmDZQlkpY= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1776772137; c=relaxed/simple; bh=QVYd0q1kdLmgYq2cCsMOaW9orUqRRPWF2BnTlteqJL8=; h=DKIM-Signature:Message-ID:Date:MIME-Version:Subject:From:To; b=Xd18ZoxvsTIdRsQie+DuxcZmq0N3I4PZrDrsy1cyGbX5iccennFyi4/z0RItepiH/t7JVhHGks43mGONgRMuuC6J1IChRoIhCE3z+T2y+ciwgPKTBuGU9LhlY3SrJomeiwQ+cp03KKG7vwnfndKY+NJa41oojtWrDEv5/xzqORE= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 719914B9DB43 Received: by mail-wm1-x333.google.com with SMTP id 5b1f17b1804b1-488b0e1b870so66354175e9.2 for ; Tue, 21 Apr 2026 04:48:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=google; t=1776772136; x=1777376936; darn=sourceware.org; h=content-transfer-encoding:in-reply-to:autocrypt:content-language :references:cc:to:from:subject:user-agent:mime-version:date :message-id:from:to:cc:subject:date:message-id:reply-to; bh=//7IxGRf7Dwl+MGaZ7MOwp6zW3Nuz15jB7B5fLhO1xw=; b=Lh7jRWVDmzf1d/XTZFBhwaD2zOP20NOjPSvFbgKpZrUY2RPzOkjVoPPXLFusplfmZn JJCKcsMVyUstqwF0Sb1ZFGwyAuvK91CXXUoYv0DrwvJ5DSo2S1KPhoyflasfk6/QmfbC ziz8HxPAFCVd1hxLPYOMiNx7/UfyGc8QtF4rG19XwRAD/hg2eXjN+MyYysvEbyns/imi Eul9DdPOebhdrDZjPeMNOOsP0Ga1Za6i8CyMnT09QYWnbK6L3rSq3ZssXfqoVqmA01tv obG2TT7x8PfDtFCW4mVlBQ8cWOdLFdcj0gIJqK98XAOionz+kxLRNm+YTVOYkhyabn14 yBhA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776772136; x=1777376936; h=content-transfer-encoding:in-reply-to:autocrypt:content-language :references:cc:to:from:subject:user-agent:mime-version:date :message-id:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=//7IxGRf7Dwl+MGaZ7MOwp6zW3Nuz15jB7B5fLhO1xw=; b=oo4y1pJJwf6Nd6cc9Gf4Ur5DBEC4IurAwb8IzhzZ/dUsClJ3EpXOWCBZ8pRWQyUX6b DhNZS2JL7PpLGIwlravSvFzZ85QJBE09dvTvi+VyKy2TfFgYo3gvFco6pFbVS1zIe+mK Z/vDOShfjI8ZTuDIRyx4R9OqTwuV7HcLgN4oDZW1guBMezlGiqZadvyopaoqAVKxYoRb X/wDfIlarlsOV+JFuikJU1us2Mtalx+j+5maAMjRfmmVXZq2iODrzAHOFSK5WHYL2jvd d10uvFJAsDDBr7rFMtkBQ3rnVo/N/IU/ZfHWAvvA7AZiVn2TBcNwL1mqG48dxelH6tyE 2rEg== X-Gm-Message-State: AOJu0Yw4EGu7n4WdBV1kqgcBpAj520SwbSdyr/W60H5ST+RrZ8AZ5Ygs cqPeWeqk78FDVohB7O8MBWiZbsyPYXaPqbm6tzR/71DnuwNvQ4MuZaBfDptlEpClAhzvuRXYXxQ Lea1ajg== X-Gm-Gg: AeBDievexHUMFHIfKKvMi1gLJPupW4L9stbSXLXfEVAYWQGVN97h+Pafq3lNGRPtnLz 1hYt4ufk3BUdXOZv2FI2Wj12Ta6LOExdkVn95UAWLVXNqkQekbiSLhkFYc12cyN98HtZQMtDhpe e3y6Pt1gEcMg1tpgKEhtxfconMrdB9bwHROXTJ4lkxGD0EdJ9I4a9DiukVS0er3GXHkN6gGPYpM m2uW/1wMyO65dmjfPagXLz/wfNKYoALiIt9wefiSmxDUVgvPD4v9rsyIGDgJ9z7UR5V+rlVm9Db SbOCDwRGLMkaiwM9/TWFVGfGDQcZ7cMV9bi3NM33t6bhXq1Y+nN1sxUySbVbqaWEw4xRbPYSUq5 Ls8Y7GQek0SzgrHAGI2IAAN8PqWSc2EkuQYv9L/HobVe+A/un+MJDz3sKqTF5kwoUNce0hZSO8X 0TJ63E8pZs8NbX96iJSEqE2/4kwVr1icYkxJhUuSgcpdHGsokSWSsM6ttX+UDFctZMgP3DxS85F 59kjPYoBNKVSwjSUik9TpQt0A== X-Received: by 2002:a05:600c:37c4:b0:48a:5501:7995 with SMTP id 5b1f17b1804b1-48a55017b71mr47546915e9.18.1776772136293; Tue, 21 Apr 2026 04:48:56 -0700 (PDT) Received: from [10.156.60.236] (ip-037-024-206-209.um08.pools.vodafone-ip.de. [37.24.206.209]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-48a55743c06sm15649785e9.2.2026.04.21.04.48.55 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 21 Apr 2026 04:48:55 -0700 (PDT) Message-ID: <21140ce3-6786-497e-9a80-528af1153617@suse.com> Date: Tue, 21 Apr 2026 13:48:55 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: [PATCH 02/19] RISC-V: fold redundant code in riscv_ip() From: Jan Beulich To: Binutils Cc: Palmer Dabbelt , Andrew Waterman , Jim Wilson , Nelson Chu References: <620231e0-67d0-4bd0-b593-38f32b01a6d8@suse.com> Content-Language: en-US Autocrypt: addr=jbeulich@suse.com; keydata= xsDiBFk3nEQRBADAEaSw6zC/EJkiwGPXbWtPxl2xCdSoeepS07jW8UgcHNurfHvUzogEq5xk hu507c3BarVjyWCJOylMNR98Yd8VqD9UfmX0Hb8/BrA+Hl6/DB/eqGptrf4BSRwcZQM32aZK 7Pj2XbGWIUrZrd70x1eAP9QE3P79Y2oLrsCgbZJfEwCgvz9JjGmQqQkRiTVzlZVCJYcyGGsD /0tbFCzD2h20ahe8rC1gbb3K3qk+LpBtvjBu1RY9drYk0NymiGbJWZgab6t1jM7sk2vuf0Py O9Hf9XBmK0uE9IgMaiCpc32XV9oASz6UJebwkX+zF2jG5I1BfnO9g7KlotcA/v5ClMjgo6Gl MDY4HxoSRu3i1cqqSDtVlt+AOVBJBACrZcnHAUSuCXBPy0jOlBhxPqRWv6ND4c9PH1xjQ3NP nxJuMBS8rnNg22uyfAgmBKNLpLgAGVRMZGaGoJObGf72s6TeIqKJo/LtggAS9qAUiuKVnygo 3wjfkS9A3DRO+SpU7JqWdsveeIQyeyEJ/8PTowmSQLakF+3fote9ybzd880fSmFuIEJldWxp Y2ggPGpiZXVsaWNoQHN1c2UuY29tPsJgBBMRAgAgBQJZN5xEAhsDBgsJCAcDAgQVAggDBBYC AwECHgECF4AACgkQoDSui/t3IH4J+wCfQ5jHdEjCRHj23O/5ttg9r9OIruwAn3103WUITZee e7Sbg12UgcQ5lv7SzsFNBFk3nEQQCACCuTjCjFOUdi5Nm244F+78kLghRcin/awv+IrTcIWF hUpSs1Y91iQQ7KItirz5uwCPlwejSJDQJLIS+QtJHaXDXeV6NI0Uef1hP20+y8qydDiVkv6l IreXjTb7DvksRgJNvCkWtYnlS3mYvQ9NzS9PhyALWbXnH6sIJd2O9lKS1Mrfq+y0IXCP10eS FFGg+Av3IQeFatkJAyju0PPthyTqxSI4lZYuJVPknzgaeuJv/2NccrPvmeDg6Coe7ZIeQ8Yj t0ARxu2xytAkkLCel1Lz1WLmwLstV30g80nkgZf/wr+/BXJW/oIvRlonUkxv+IbBM3dX2OV8 AmRv1ySWPTP7AAMFB/9PQK/VtlNUJvg8GXj9ootzrteGfVZVVT4XBJkfwBcpC/XcPzldjv+3 HYudvpdNK3lLujXeA5fLOH+Z/G9WBc5pFVSMocI71I8bT8lIAzreg0WvkWg5V2WZsUMlnDL9 mpwIGFhlbM3gfDMs7MPMu8YQRFVdUvtSpaAs8OFfGQ0ia3LGZcjA6Ik2+xcqscEJzNH+qh8V m5jjp28yZgaqTaRbg3M/+MTbMpicpZuqF4rnB0AQD12/3BNWDR6bmh+EkYSMcEIpQmBM51qM EKYTQGybRCjpnKHGOxG0rfFY1085mBDZCH5Kx0cl0HVJuQKC+dV2ZY5AqjcKwAxpE75MLFkr wkkEGBECAAkFAlk3nEQCGwwACgkQoDSui/t3IH7nnwCfcJWUDUFKdCsBH/E5d+0ZnMQi+G0A nAuWpQkjM1ASeQwSHEeAWPgskBQL In-Reply-To: <620231e0-67d0-4bd0-b593-38f32b01a6d8@suse.com> X-Spam-Status: No, score=-3016.6 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_NONE, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on sourceware.org X-BeenThere: binutils@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Binutils mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: binutils-bounces~patchwork=sourceware.org@sourceware.org The parsing of 'F' and 'O' .insn operands is pretty redundant. Have only a single instance each of common code, with the inner switch()es merely handling the actual value insertion. This in particular simplifies the addition of new sub-forms. --- Since it's entirely internal, can't we rename O4 to either O7 or (describing merely the non-fixed bits) O5? I wonder why O4 was used in the first place ... --- a/gas/config/tc-riscv.c +++ b/gas/config/tc-riscv.c @@ -3193,72 +3193,47 @@ riscv_ip (char *str, struct riscv_cl_ins INSERT_OPERAND (CRS2, *ip, regno); continue; case 'F': - switch (*++oparg) + if (!ISDIGIT (*++oparg)) + goto unknown_riscv_ip_operand; + + /* (Ab)use "regno" here. */ + regno = *oparg - '0'; + if (my_getSmallExpression (imm_expr, imm_reloc, asarg, p) + || imm_expr->X_op != O_constant + || imm_expr->X_add_number < 0 + || imm_expr->X_add_number >= (1U << regno)) + { + as_bad (_("bad value for compressed funct%u " + "field, value must be 0...%u"), + regno, (1U << regno) - 1); + break; + } + + switch (regno) { - case '6': - if (my_getSmallExpression (imm_expr, imm_reloc, asarg, p) - || imm_expr->X_op != O_constant - || imm_expr->X_add_number < 0 - || imm_expr->X_add_number >= 64) - { - as_bad (_("bad value for compressed funct6 " - "field, value must be 0...63")); - break; - } - INSERT_OPERAND (CFUNCT6, *ip, imm_expr->X_add_number); - imm_expr->X_op = O_absent; - asarg = expr_parse_end; - continue; - - case '4': - if (my_getSmallExpression (imm_expr, imm_reloc, asarg, p) - || imm_expr->X_op != O_constant - || imm_expr->X_add_number < 0 - || imm_expr->X_add_number >= 16) - { - as_bad (_("bad value for compressed funct4 " - "field, value must be 0...15")); - break; - } - INSERT_OPERAND (CFUNCT4, *ip, imm_expr->X_add_number); - imm_expr->X_op = O_absent; - asarg = expr_parse_end; - continue; - - case '3': - if (my_getSmallExpression (imm_expr, imm_reloc, asarg, p) - || imm_expr->X_op != O_constant - || imm_expr->X_add_number < 0 - || imm_expr->X_add_number >= 8) - { - as_bad (_("bad value for compressed funct3 " - "field, value must be 0...7")); - break; - } - INSERT_OPERAND (CFUNCT3, *ip, imm_expr->X_add_number); - imm_expr->X_op = O_absent; - asarg = expr_parse_end; - continue; - - case '2': - if (my_getSmallExpression (imm_expr, imm_reloc, asarg, p) - || imm_expr->X_op != O_constant - || imm_expr->X_add_number < 0 - || imm_expr->X_add_number >= 4) - { - as_bad (_("bad value for compressed funct2 " - "field, value must be 0...3")); - break; - } - INSERT_OPERAND (CFUNCT2, *ip, imm_expr->X_add_number); - imm_expr->X_op = O_absent; - asarg = expr_parse_end; - continue; + case 6: + INSERT_OPERAND (CFUNCT6, *ip, imm_expr->X_add_number); + break; + + case 4: + INSERT_OPERAND (CFUNCT4, *ip, imm_expr->X_add_number); + break; + + case 3: + INSERT_OPERAND (CFUNCT3, *ip, imm_expr->X_add_number); + break; + + case 2: + INSERT_OPERAND (CFUNCT2, *ip, imm_expr->X_add_number); + break; - default: - goto unknown_riscv_ip_operand; + default: + goto unknown_riscv_ip_operand; } - break; + + imm_expr->X_op = O_absent; + asarg = expr_parse_end; + continue; default: goto unknown_riscv_ip_operand; @@ -3709,97 +3684,87 @@ riscv_ip (char *str, struct riscv_cl_ins continue; case 'O': - switch (*++oparg) + if (!ISDIGIT (*++oparg)) + goto unknown_riscv_ip_operand; + + /* (Ab)use "regno" here. */ + regno = *oparg - '0'; + /* O4 is a misnomer, really describing a 7-bit field. */ + if (regno == 4) + regno += 3; + if (my_getOpcodeExpression (imm_expr, imm_reloc, asarg) + || imm_expr->X_op != O_constant + || imm_expr->X_add_number < 0 + || imm_expr->X_add_number >= (1U << regno)) + { + as_bad (_("bad value for opcode field, " + "value must be 0...%u"), + (1U << regno) - 1); + break; + } + + if (regno > 2 && (imm_expr->X_add_number & 3) != 3) + { + as_bad (_("bad value for opcode field, " + "lower 2 bits must be 0x3")); + break; + } + + switch (*oparg) { case '4': - if (my_getOpcodeExpression (imm_expr, imm_reloc, asarg) - || imm_expr->X_op != O_constant - || imm_expr->X_add_number < 0 - || imm_expr->X_add_number >= 128 - || (imm_expr->X_add_number & 0x3) != 3) - { - as_bad (_("bad value for opcode field, " - "value must be 0...127 and " - "lower 2 bits must be 0x3")); - break; - } INSERT_OPERAND (OP, *ip, imm_expr->X_add_number); - imm_expr->X_op = O_absent; - asarg = expr_parse_end; - continue; + break; case '2': - if (my_getOpcodeExpression (imm_expr, imm_reloc, asarg) - || imm_expr->X_op != O_constant - || imm_expr->X_add_number < 0 - || imm_expr->X_add_number >= 3) - { - as_bad (_("bad value for opcode field, " - "value must be 0...2")); - break; - } INSERT_OPERAND (OP2, *ip, imm_expr->X_add_number); - imm_expr->X_op = O_absent; - asarg = expr_parse_end; - continue; + break; default: goto unknown_riscv_ip_operand; } - break; + + imm_expr->X_op = O_absent; + asarg = expr_parse_end; + continue; case 'F': - switch (*++oparg) + if (!ISDIGIT (*++oparg)) + goto unknown_riscv_ip_operand; + + /* (Ab)use "regno" here. */ + regno = *oparg - '0'; + if (my_getSmallExpression (imm_expr, imm_reloc, asarg, p) + || imm_expr->X_op != O_constant + || imm_expr->X_add_number < 0 + || imm_expr->X_add_number >= (1U << regno)) { - case '7': - if (my_getSmallExpression (imm_expr, imm_reloc, asarg, p) - || imm_expr->X_op != O_constant - || imm_expr->X_add_number < 0 - || imm_expr->X_add_number >= 128) - { - as_bad (_("bad value for funct7 field, " - "value must be 0...127")); - break; - } + as_bad (_("bad value for funct%u field, " + "value must be 0...%u"), + regno, (1U << regno) - 1); + break; + } + switch (regno) + { + case 7: INSERT_OPERAND (FUNCT7, *ip, imm_expr->X_add_number); - imm_expr->X_op = O_absent; - asarg = expr_parse_end; - continue; + break; - case '3': - if (my_getSmallExpression (imm_expr, imm_reloc, asarg, p) - || imm_expr->X_op != O_constant - || imm_expr->X_add_number < 0 - || imm_expr->X_add_number >= 8) - { - as_bad (_("bad value for funct3 field, " - "value must be 0...7")); - break; - } + case 3: INSERT_OPERAND (FUNCT3, *ip, imm_expr->X_add_number); - imm_expr->X_op = O_absent; - asarg = expr_parse_end; - continue; + break; - case '2': - if (my_getSmallExpression (imm_expr, imm_reloc, asarg, p) - || imm_expr->X_op != O_constant - || imm_expr->X_add_number < 0 - || imm_expr->X_add_number >= 4) - { - as_bad (_("bad value for funct2 field, " - "value must be 0...3")); - break; - } + case 2: INSERT_OPERAND (FUNCT2, *ip, imm_expr->X_add_number); - imm_expr->X_op = O_absent; - asarg = expr_parse_end; - continue; + break; default: goto unknown_riscv_ip_operand; } - break; + + imm_expr->X_op = O_absent; + asarg = expr_parse_end; + continue; case 'y': /* bs immediate */ my_getExpression (imm_expr, asarg, force_reloc); From patchwork Tue Apr 21 11:49:33 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Beulich X-Patchwork-Id: 133459 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from vm01.sourceware.org (localhost [127.0.0.1]) by sourceware.org (Postfix) with ESMTP id 041934B9DB78 for ; Tue, 21 Apr 2026 11:50:43 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 041934B9DB78 Authentication-Results: sourceware.org; dkim=pass (2048-bit key, unprotected) header.d=suse.com header.i=@suse.com header.a=rsa-sha256 header.s=google header.b=K0sQs2fE X-Original-To: binutils@sourceware.org Delivered-To: binutils@sourceware.org Received: from mail-wm1-x32a.google.com (mail-wm1-x32a.google.com [IPv6:2a00:1450:4864:20::32a]) by sourceware.org (Postfix) with ESMTPS id 6974B4BA901C for ; Tue, 21 Apr 2026 11:49:35 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 6974B4BA901C Authentication-Results: sourceware.org; dmarc=pass (p=quarantine dis=none) header.from=suse.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=suse.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 6974B4BA901C Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2a00:1450:4864:20::32a ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1776772175; cv=none; b=Anjmb1u38/vnv4PxBnnPXmKLH1YUrO5o9yeyvH8Nlx4rRcdSuIb57oKMNsKwged7Mx8stOamEyxKvrUAwlKlJx2yTYlJ0AyXBxr8+Sh9bAPrsOWsqld5oYOW8HucVsol7jgYqSxeI/CzmlkbDxxjgM4yM+ZlMmKxOkz12xliyB0= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1776772175; c=relaxed/simple; bh=dDJ7Y/ZiTsYtPULj2SgAAKjusDVWt09af47ZT3Mzes0=; h=DKIM-Signature:Message-ID:Date:MIME-Version:Subject:From:To; b=fue0ELxRHx7w8U4t8zqdkhpGHSBiFe6xWhJMKgHYxHtiE5kfEGYQNPsZciO30vyzvVbd0KGe17NOkWaojVzgxnH9pxjtnSgTC6jJaL+Y5L5QNtvLo3PlSixjFeP87TCuT+26aBm0nbw3+JnFdsqO3gZ5n2+/yXA9pypls7GuqNs= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 6974B4BA901C Received: by mail-wm1-x32a.google.com with SMTP id 5b1f17b1804b1-488ad135063so34587275e9.0 for ; Tue, 21 Apr 2026 04:49:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=google; t=1776772174; x=1777376974; darn=sourceware.org; h=content-transfer-encoding:in-reply-to:autocrypt:content-language :references:cc:to:from:subject:user-agent:mime-version:date :message-id:from:to:cc:subject:date:message-id:reply-to; bh=62hBHBTOp7dmyN2CvtbNnlqzVstRQZv7/2XFN4sWD0U=; b=K0sQs2fEIhexMMgqlYrq1CHUQIEbIrUiH/fCOktHxHhv5UKRGR9DE6IgTkKM5dIGK/ dke6IEJwdhNzGcZo3HbOwyGlQRLdBERsVhpDxvy+jORL9Ph7etfV4OoEQpS3yLT2BxIp OqnxPWkr21KHjm4WwpaAagKpbUeJOjpYWnrvDhmb/gZKeTaaLipntw8i2be7g9eFA18x Zfukuu/75cd/MxpZuzORSHVjrr0zk9ZSJe311l5mxF+oZF/Fglb9fDacZo25aUNaynLu 65ojCLOHbKPKm49+8Ra+IhXJduyN+06a4Z5fRcdrhVsrPc5OwbcyQbMJ1ArTmJDZjGAD 0NZg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776772174; x=1777376974; h=content-transfer-encoding:in-reply-to:autocrypt:content-language :references:cc:to:from:subject:user-agent:mime-version:date :message-id:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=62hBHBTOp7dmyN2CvtbNnlqzVstRQZv7/2XFN4sWD0U=; b=gMdfovGYiCHZVPNmsgLKyU9neaheiKJaE64E1ckal4D8OGmgqTtAAYQAWck9GD1A02 HhyC0IQVw3g0nEKvUw6jmmMiTTWXkS19EhQHlRNDrsT0XerkvZ7WuTjLXhD5JbTaFzR1 5pSInUwKoWTddzo+zkB8Q1LFktleeJ6iieKK8KQvYgmRyXz/l7jt4cQCk7Jc9Ek+yBxW SAhQRFxGmvQh2hzfP0OwdlFtJRamNZ3x5yCtROXTJpPFmogwJFhYEUX6wlUIX+Rsbg/v E3eaFxvTUZXtSMRQ4cq44locMe2hi7ZHFPJ1ctACk0qCvyyBaxn703Vt/A+9q7Chdcs3 +rDg== X-Gm-Message-State: AOJu0YwZTj09PoUUDLKHB0nk18pqTfSmg1Sm/He3dqtsy1YUMHjopIEi 0R7Y7fRzKEeLGwLVkB6EyWy58bFPT7XFggL/OBlLajR/VCTxwwQ7ains3UtHErd65rdEuftMVgP OlOal0g== X-Gm-Gg: AeBDiesaCby5LswEdEcS+KWqASLkfb2GEj81quwnzMbWZwxQfycS79J1+9vwlAtLE48 cAaTaQo54jCRhjYOPry9s5mIVEWYkHNRDKNntLOFFa0p2lH+waIwrnVszeiGBt+W5EYtuTGqhpW aJOURSPS2s5vcRXKCtka0LdZQgvsfQbsbys5oJ3Zf5OiE79TweK9bi0RDE3lKodk5Vt4FQLGpxG NnTfLxxGDaYrTaT+3q9be1Eb2vTgL4XCNB0HkSNCEm2ZzwgZd7/jF7JD5/hjt7gLp1QS88azHgu v7+TetrWApBjJwxelhemx+mMjyLRHYzaIXNJKz9zQ61tuVqO4UCt6XWM/PjKg4b4yRQXblbLDeH LPh4z425denY+ikr1AMJeNma2deDSfEEhhgyLMjth8MrxrYPyn3b3DKy/ky3zJPp+/RTGEx3JSU 4kKTywjC/sA6TvmKtB9twGxUdXEnLTDRj0LkuLRAhaRHYDRuF3bwsH/YxJkUcQcTOD/g8FhBa8Y cZIAZs5oCiez2+Rl3nqjKwuzw== X-Received: by 2002:a05:600c:3150:b0:485:3b00:f93b with SMTP id 5b1f17b1804b1-488fb79df09mr271134035e9.31.1776772174212; Tue, 21 Apr 2026 04:49:34 -0700 (PDT) Received: from [10.156.60.236] (ip-037-024-206-209.um08.pools.vodafone-ip.de. [37.24.206.209]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-489fec8f7cbsm101958415e9.11.2026.04.21.04.49.33 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 21 Apr 2026 04:49:33 -0700 (PDT) Message-ID: Date: Tue, 21 Apr 2026 13:49:33 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: [PATCH 03/19] RISC-V: add dedicated vector arithmetic .insn forms From: Jan Beulich To: Binutils Cc: Palmer Dabbelt , Andrew Waterman , Jim Wilson , Nelson Chu References: <620231e0-67d0-4bd0-b593-38f32b01a6d8@suse.com> Content-Language: en-US Autocrypt: addr=jbeulich@suse.com; keydata= xsDiBFk3nEQRBADAEaSw6zC/EJkiwGPXbWtPxl2xCdSoeepS07jW8UgcHNurfHvUzogEq5xk hu507c3BarVjyWCJOylMNR98Yd8VqD9UfmX0Hb8/BrA+Hl6/DB/eqGptrf4BSRwcZQM32aZK 7Pj2XbGWIUrZrd70x1eAP9QE3P79Y2oLrsCgbZJfEwCgvz9JjGmQqQkRiTVzlZVCJYcyGGsD /0tbFCzD2h20ahe8rC1gbb3K3qk+LpBtvjBu1RY9drYk0NymiGbJWZgab6t1jM7sk2vuf0Py O9Hf9XBmK0uE9IgMaiCpc32XV9oASz6UJebwkX+zF2jG5I1BfnO9g7KlotcA/v5ClMjgo6Gl MDY4HxoSRu3i1cqqSDtVlt+AOVBJBACrZcnHAUSuCXBPy0jOlBhxPqRWv6ND4c9PH1xjQ3NP nxJuMBS8rnNg22uyfAgmBKNLpLgAGVRMZGaGoJObGf72s6TeIqKJo/LtggAS9qAUiuKVnygo 3wjfkS9A3DRO+SpU7JqWdsveeIQyeyEJ/8PTowmSQLakF+3fote9ybzd880fSmFuIEJldWxp Y2ggPGpiZXVsaWNoQHN1c2UuY29tPsJgBBMRAgAgBQJZN5xEAhsDBgsJCAcDAgQVAggDBBYC AwECHgECF4AACgkQoDSui/t3IH4J+wCfQ5jHdEjCRHj23O/5ttg9r9OIruwAn3103WUITZee e7Sbg12UgcQ5lv7SzsFNBFk3nEQQCACCuTjCjFOUdi5Nm244F+78kLghRcin/awv+IrTcIWF hUpSs1Y91iQQ7KItirz5uwCPlwejSJDQJLIS+QtJHaXDXeV6NI0Uef1hP20+y8qydDiVkv6l IreXjTb7DvksRgJNvCkWtYnlS3mYvQ9NzS9PhyALWbXnH6sIJd2O9lKS1Mrfq+y0IXCP10eS FFGg+Av3IQeFatkJAyju0PPthyTqxSI4lZYuJVPknzgaeuJv/2NccrPvmeDg6Coe7ZIeQ8Yj t0ARxu2xytAkkLCel1Lz1WLmwLstV30g80nkgZf/wr+/BXJW/oIvRlonUkxv+IbBM3dX2OV8 AmRv1ySWPTP7AAMFB/9PQK/VtlNUJvg8GXj9ootzrteGfVZVVT4XBJkfwBcpC/XcPzldjv+3 HYudvpdNK3lLujXeA5fLOH+Z/G9WBc5pFVSMocI71I8bT8lIAzreg0WvkWg5V2WZsUMlnDL9 mpwIGFhlbM3gfDMs7MPMu8YQRFVdUvtSpaAs8OFfGQ0ia3LGZcjA6Ik2+xcqscEJzNH+qh8V m5jjp28yZgaqTaRbg3M/+MTbMpicpZuqF4rnB0AQD12/3BNWDR6bmh+EkYSMcEIpQmBM51qM EKYTQGybRCjpnKHGOxG0rfFY1085mBDZCH5Kx0cl0HVJuQKC+dV2ZY5AqjcKwAxpE75MLFkr wkkEGBECAAkFAlk3nEQCGwwACgkQoDSui/t3IH7nnwCfcJWUDUFKdCsBH/E5d+0ZnMQi+G0A nAuWpQkjM1ASeQwSHEeAWPgskBQL In-Reply-To: <620231e0-67d0-4bd0-b593-38f32b01a6d8@suse.com> X-Spam-Status: No, score=-3016.6 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_NONE, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on sourceware.org X-BeenThere: binutils@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Binutils mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: binutils-bounces~patchwork=sourceware.org@sourceware.org As .insn documentation states, using the available .insn forms can be a little challenging. For OP_V, help the situation by providing a few more dedicated forms. --- RFC: OP_VE reuses (at least) OPMVV, so "mvv" would end up ambiguous if we wanted to also introduce insn forms there. I wanted to avoid having O4 as the first operand everywhere, though. An option might be to distinguish future OP_VE ones (in the once supposed P extension encoding space iirc) by e.g. prefixing with P, or - derived from OP_VE - with E. No form is provided for OPCFG: Such insns may better use "r" forms, or whatever is best suited there. For OPIVI permitting both signed (Vi) and unsigned (Vj) immediates might be nice, but won't work with the present parsing (needs delaying as_bad()). To help encoding V*UNARY* insns, forms with immediates in the respective positions may be helpful. Thoughts? (Some of the testcase additions are commented upon accordingly.) --- a/gas/config/tc-riscv.c +++ b/gas/config/tc-riscv.c @@ -1611,6 +1611,7 @@ validate_riscv_insn (const struct riscv_ switch (*++oparg) { case '7': USE_BITS (OP_MASK_FUNCT7, OP_SH_FUNCT7); break; + case '6': USE_BITS (OP_MASK_FUNCT6, OP_SH_FUNCT6); break; case '3': USE_BITS (OP_MASK_FUNCT3, OP_SH_FUNCT3); break; case '2': USE_BITS (OP_MASK_FUNCT2, OP_SH_FUNCT2); break; default: @@ -3750,6 +3751,10 @@ riscv_ip (char *str, struct riscv_cl_ins INSERT_OPERAND (FUNCT7, *ip, imm_expr->X_add_number); break; + case 6: + INSERT_OPERAND (FUNCT6, *ip, imm_expr->X_add_number); + break; + case 3: INSERT_OPERAND (FUNCT3, *ip, imm_expr->X_add_number); break; --- a/gas/testsuite/gas/riscv/insn.d +++ b/gas/testsuite/gas/riscv/insn.d @@ -70,6 +70,19 @@ Disassembly of section .text: [^:]+:[ ]+00c58533[ ]+add[ ]+a0,a1,a2 [^:]+:[ ]+00c58533[ ]+add[ ]+a0,a1,a2 [^:]+:[ ]+022180d7[ ]+vadd\.vv[ ]+v1,v2,v3 +[^:]+:[ ]+2c2081d7[ ]+vxor\.vv[ ]+v3,v2,v1,v0\.t +[^:]+:[ ]+182091d7[ ]+vfmax\.vv[ ]+v3,v2,v1,v0\.t +[^:]+:[ ]+fc1111d7[ ]+vfwnmsac\.vv[ ]+v3,v2,v1,v0\.t +[^:]+:[ ]+422010d7[ ]+vfmv\.f\.s[ ]+ft1,v2 +[^:]+:[ ]+7a20a1d7[ ]+vmnor\.mm[ ]+v3,v2,v1 +[^:]+:[ ]+422020d7[ ]+vmv\.x\.s[ ]+ra,v2 +[^:]+:[ ]+2c20b1d7[ ]+vxor\.vi[ ]+v3,v2,1,v0\.t +[^:]+:[ ]+2c20c1d7[ ]+vxor\.vx[ ]+v3,v2,ra,v0\.t +[^:]+:[ ]+1820d1d7[ ]+vfmax\.vf[ ]+v3,v2,ft1,v0\.t +[^:]+:[ ]+fc1151d7[ ]+vfwnmsac\.vf[ ]+v3,ft2,v1,v0\.t +[^:]+:[ ]+420150d7[ ]+vfmv\.s\.f[ ]+v1,ft2 +[^:]+:[ ]+bc1161d7[ ]+vnmsac\.vx[ ]+v3,sp,v1,v0\.t +[^:]+:[ ]+420160d7[ ]+vmv\.s\.x[ ]+v1,sp [^:]+:[ ]+0001[ ]+nop [^:]+:[ ]+00000013[ ]+nop [^:]+:[ ]+001f 0000 0000[ ].* --- a/gas/testsuite/gas/riscv/insn.s +++ b/gas/testsuite/gas/riscv/insn.s @@ -56,6 +56,23 @@ target: .insn r OP_V, 0, 1, x1, x3, x2 + .option push + .option arch, +v + .insn ivv 0x0b, v3, v2, v1, v0.t + .insn fvv 0x06, v3, v2, v1, v0.t + .insn fvv 0x3f, v3, v1, v2, v0.t + .insn fvv 0x10, f1, v2, v0 # last operand is opcode + .insn mvv 0x1e, v3, v2, v1 + .insn mvv 0x10, x1, v2, v0 # last operand is opcode + .insn ivi 0x0b, v3, v2, 1, v0.t + .insn ivx 0x0b, v3, v2, x1, v0.t + .insn fvf 0x06, v3, v2, f1, v0.t + .insn fvf 0x3f, v3, v1, f2, v0.t + .insn fvf 0x10, v1, v0, f2 # middle operand is opcode + .insn mvx 0x2f, v3, v1, x2, v0.t + .insn mvx 0x10, v1, v0, x2 # middle operand is opcode + .option pop + .insn 0x0001 .insn 0x00000013 .insn 0x0000001f --- a/gas/testsuite/gas/riscv/insn-dwarf.d +++ b/gas/testsuite/gas/riscv/insn-dwarf.d @@ -60,28 +60,41 @@ insn.s +53 +0x9a.* insn.s +54 +0x9e.* insn.s +55 +0xa2.* insn.s +57 +0xa6.* -insn.s +59 +0xaa.* -insn.s +60 +0xac.* -insn.s +61 +0xb0.* -insn.s +62 +0xb6.* -insn.s +63 +0xbe.* -insn.s +64 +0xc8.* -insn.s +65 +0xd4.* -insn.s +66 +0xea.* -insn.s +67 +0xec.* -insn.s +68 +0xf0.* -insn.s +69 +0xf6.* -insn.s +70 +0xfe.* -insn.s +71 +0x108.* -insn.s +72 +0x114.* -insn.s +74 +0x12a.* -insn.s +75 +0x134.* -insn.s +76 +0x13e.* -insn.s +77 +0x154.* -insn.s +78 +0x16a.* -insn.s +79 +0x180.* -insn.s +80 +0x196.* -insn.s +81 +0x1ac.* -insn.s +83 +0x1c2.* -insn.s +- +0x1c6 +insn.s +61 +0xaa.* +insn.s +62 +0xae.* +insn.s +63 +0xb2.* +insn.s +64 +0xb6.* +insn.s +65 +0xba.* +insn.s +66 +0xbe.* +insn.s +67 +0xc2.* +insn.s +68 +0xc6.* +insn.s +69 +0xca.* +insn.s +70 +0xce.* +insn.s +71 +0xd2.* +insn.s +72 +0xd6.* +insn.s +73 +0xda.* +insn.s +76 +0xde.* +insn.s +77 +0xe0.* +insn.s +78 +0xe4.* +insn.s +79 +0xea.* +insn.s +80 +0xf2.* +insn.s +81 +0xfc.* +insn.s +82 +0x108.* +insn.s +83 +0x11e.* +insn.s +84 +0x120.* +insn.s +85 +0x124.* +insn.s +86 +0x12a.* +insn.s +87 +0x132.* +insn.s +88 +0x13c.* +insn.s +89 +0x148.* +insn.s +91 +0x15e.* +insn.s +92 +0x168.* +insn.s +93 +0x172.* +insn.s +94 +0x188.* +insn.s +95 +0x19e.* +insn.s +96 +0x1b4.* +insn.s +97 +0x1ca.* +insn.s +98 +0x1e0.* +insn.s +100 +0x1f6.* +insn.s +- +0x1fa #pass --- a/gas/testsuite/gas/riscv/insn-na.d +++ b/gas/testsuite/gas/riscv/insn-na.d @@ -59,6 +59,19 @@ Disassembly of section .text: [^:]+:[ ]+00c58533[ ]+add[ ]+a0,a1,a2 [^:]+:[ ]+00c58533[ ]+add[ ]+a0,a1,a2 [^:]+:[ ]+022180d7[ ]+vadd\.vv[ ]+v1,v2,v3 +[^:]+:[ ]+2c2081d7[ ]+vxor\.vv[ ]+v3,v2,v1,v0\.t +[^:]+:[ ]+182091d7[ ]+vfmax\.vv[ ]+v3,v2,v1,v0\.t +[^:]+:[ ]+fc1111d7[ ]+vfwnmsac\.vv[ ]+v3,v2,v1,v0\.t +[^:]+:[ ]+422010d7[ ]+vfmv\.f\.s[ ]+ft1,v2 +[^:]+:[ ]+7a20a1d7[ ]+vmnor\.mm[ ]+v3,v2,v1 +[^:]+:[ ]+422020d7[ ]+vmv\.x\.s[ ]+ra,v2 +[^:]+:[ ]+2c20b1d7[ ]+vxor\.vi[ ]+v3,v2,1,v0\.t +[^:]+:[ ]+2c20c1d7[ ]+vxor\.vx[ ]+v3,v2,ra,v0\.t +[^:]+:[ ]+1820d1d7[ ]+vfmax\.vf[ ]+v3,v2,ft1,v0\.t +[^:]+:[ ]+fc1151d7[ ]+vfwnmsac\.vf[ ]+v3,ft2,v1,v0\.t +[^:]+:[ ]+420150d7[ ]+vfmv\.s\.f[ ]+v1,ft2 +[^:]+:[ ]+bc1161d7[ ]+vnmsac\.vx[ ]+v3,sp,v1,v0\.t +[^:]+:[ ]+420160d7[ ]+vmv\.s\.x[ ]+v1,sp [^:]+:[ ]+0001[ ]+c\.addi[ ]+zero,0 [^:]+:[ ]+00000013[ ]+addi[ ]+zero,zero,0 [^:]+:[ ]+001f 0000 0000[ ].* --- a/include/opcode/riscv.h +++ b/include/opcode/riscv.h @@ -351,6 +351,9 @@ static inline unsigned int riscv_insn_le /* RVV fields. */ +#define OP_MASK_FUNCT6 0x3fU +#define OP_SH_FUNCT6 26 + #define OP_MASK_VD 0x1f #define OP_SH_VD 7 #define OP_MASK_VS1 0x1f --- a/opcodes/riscv-opc.c +++ b/opcodes/riscv-opc.c @@ -3656,6 +3656,17 @@ const struct riscv_opcode riscv_insn_typ {"j", 0, INSN_CLASS_I, "O4,d,a", 0, 0, NULL, 0 }, {"j", 0, INSN_CLASS_F, "O4,D,a", 0, 0, NULL, 0 }, +{"ivv", 0, INSN_CLASS_V, "F6,Vd,Vt,VsVm", 0x0057, 0x707f, NULL, 0 }, +{"fvv", 0, INSN_CLASS_ZVEF, "F6,Vd,Vt,VsVm", 0x1057, 0x707f, NULL, 0 }, +{"fvv", 0, INSN_CLASS_ZVEF, "F6,D,Vt,VsVm", 0x1057, 0x707f, NULL, 0 }, +{"mvv", 0, INSN_CLASS_V, "F6,Vd,Vt,VsVm", 0x2057, 0x707f, NULL, 0 }, +{"mvv", 0, INSN_CLASS_V, "F6,d,Vt,VsVm", 0x2057, 0x707f, NULL, 0 }, +{"ivi", 0, INSN_CLASS_V, "F6,Vd,Vt,ViVm", 0x3057, 0x707f, NULL, 0 }, +{"ivx", 0, INSN_CLASS_V, "F6,Vd,Vt,sVm", 0x4057, 0x707f, NULL, 0 }, +{"fvf", 0, INSN_CLASS_ZVEF, "F6,Vd,Vt,SVm", 0x5057, 0x707f, NULL, 0 }, +{"mvx", 0, INSN_CLASS_V, "F6,Vd,Vt,sVm", 0x6057, 0x707f, NULL, 0 }, +{"mvx", 0, INSN_CLASS_V, "F6,d,Vt,sVm", 0x6057, 0x707f, NULL, 0 }, + {"cr", 0, INSN_CLASS_ZCA, "O2,CF4,d,CV", 0, 0, NULL, 0 }, {"cr", 0, INSN_CLASS_ZCF, "O2,CF4,D,CV", 0, 0, NULL, 0 }, {"cr", 0, INSN_CLASS_ZCF, "O2,CF4,d,CT", 0, 0, NULL, 0 }, From patchwork Tue Apr 21 11:50:05 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Beulich X-Patchwork-Id: 133460 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from vm01.sourceware.org (localhost [127.0.0.1]) by sourceware.org (Postfix) with ESMTP id 6B9444B9DB77 for ; Tue, 21 Apr 2026 11:50:56 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 6B9444B9DB77 Authentication-Results: sourceware.org; dkim=pass (2048-bit key, unprotected) header.d=suse.com header.i=@suse.com header.a=rsa-sha256 header.s=google header.b=OrSbDOE+ X-Original-To: binutils@sourceware.org Delivered-To: binutils@sourceware.org Received: from mail-wm1-x32e.google.com (mail-wm1-x32e.google.com [IPv6:2a00:1450:4864:20::32e]) by sourceware.org (Postfix) with ESMTPS id 72F8C4B9DB78 for ; Tue, 21 Apr 2026 11:50:07 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 72F8C4B9DB78 Authentication-Results: sourceware.org; dmarc=pass (p=quarantine dis=none) header.from=suse.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=suse.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 72F8C4B9DB78 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2a00:1450:4864:20::32e ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1776772207; cv=none; b=LIm7WanZILLH1XGgMspXd/46YEJj2q8BEPbwZW6n2SwjX9EzpkIkBAS/10nPnZ/0NtVEm97I+gUffcQf0Rz2ugfK4TM4NVBJs91tokX4oG9HgBaWH7Ibhq6lKLydMiLB/st0lC+Uc26QYVVnCUPq9cC3MS0rWjtRKTCfpxWgGB8= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1776772207; c=relaxed/simple; bh=e2YYqImFBG1jAHdkP4kGb1xccOH9jzuGzbvq5z26FFs=; h=DKIM-Signature:Message-ID:Date:MIME-Version:Subject:From:To; b=xWGm6bVPY7HdwJUN+MAUalyf9sGwZX03ZDm9edU7FC6C4TuEqzGiAvI5cxQGAT2lPUWy8rBhOwaxStNATCkQvLl2obixLUpbuhqYEYDOJ4vtempWRjShWZTrdrqLp3dLOlFdLOFjEnYT+QQNqciZuwzU0LSdyv91RYABZEg6cIg= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 72F8C4B9DB78 Received: by mail-wm1-x32e.google.com with SMTP id 5b1f17b1804b1-483487335c2so42131795e9.2 for ; Tue, 21 Apr 2026 04:50:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=google; t=1776772206; x=1777377006; darn=sourceware.org; h=content-transfer-encoding:in-reply-to:autocrypt:content-language :references:cc:to:from:subject:user-agent:mime-version:date :message-id:from:to:cc:subject:date:message-id:reply-to; bh=iLQM+TpmDpgibHutALLWxLNOvGLcQO8XCNp2SPjyTyM=; b=OrSbDOE+S8J38yjgp2KBB6dnX1iVrFOuTi8zxvsgsrONdO7foZImbrZdwXk27p17wJ OA6BkempY4W0DOh2VIphdM8JLuvLAnleC0fNlGVbKVMy6xVCWZDF1htpk+geL34B5fH+ Ss7GEC53i8Q8Jg75gJuz+aB3350YTUOMAoaTCLliJhlC6ws1df84A38n+Xw80mbJeyDv 6PcTRGeRcxYHMbdF0gEFGaK8r+KglON2wPv7xUCiuRl8ekO3KxoWwfOTdvHzpfEk3EMP 2ysRAOZ4ALTYMnaqMAHHyZeqs+D8g+IvJNDKzTaq0SPBzjz+LMAvR9E4ndrM1/7zgAyY nLNg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776772206; x=1777377006; h=content-transfer-encoding:in-reply-to:autocrypt:content-language :references:cc:to:from:subject:user-agent:mime-version:date :message-id:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=iLQM+TpmDpgibHutALLWxLNOvGLcQO8XCNp2SPjyTyM=; b=GY9MHSsQtcIo1IW5PGcJhiHLurRc8x56+r4lyD19QOB66QKBNrETqa+IUqenwiNFol qsHT4c+P3TF4YcGXsH+GDjP0ij2/o9XH3Y1KYTRoVlbsomNlVq/p5AaS5ofAPPtG34ak eG5ZqGJJ/9HFRVBiZBdIjKy9s39c1hCqak724RbB9eyE5nGFSsoCAU2YlFDAW+CX1sVi OUN1DIxUU5oU5XFuZz8a3fwStIGmyzriDdHJTw6WoAGdcPSiP9+/uV8XP4YnmsEIwlOI r8YBPBj34Yswga8MwcnKxf79FpQhxmYEOPZBtu3Rbd4Zj7Qdj8xWAQ3qbPTh1mcFx3Kj ZeVQ== X-Gm-Message-State: AOJu0YyUXiNb9nM8PtFoE7eI5AsXT38paxXitzV+YdsgRkYVlaPSGcf8 E91FXuotCQgebzg4T4l5Jwmx/f2qMslF4ovrY0KcyTu+A9laGc9uJafLMc0IqoJ5s71lQZ8RNrP 3x0FCFw== X-Gm-Gg: AeBDiesXb908cKKLMDgnbZBN6icaWjXvWkkxp8hEx5ggVsS7fZIBfmkzR5NxAP7HV4M MGx0lMUA4ClDP8d+WlC2ORlCEMD7dNyaGj1KFeZ4LYqzKrfbdPvZyU9+NLCWsai0LHRz9YQBJn6 EbZ/zlzn935xEyrf52YYlhnvmGqKLIBJRDdwkox+BvMorlfR9V32UpTc1eY2TapQeKhXwAOuJ6I LrX315fHBSfbVP0zfq28vC8xdjWqqpxbH7ODUV+i1rXffzDBBRhnKMVvazZ9tSdUdAhhx36Y/rY XE++m6MpTvrKrYkacBsLYGGW31QFGy+sgr/GkKaZboM9sRgRdV9wEWUDhPWg3c1BeUaj7p7MyoN tFEHPxTU4PaBtZj4W1toCir+Kzoz+VvOWLGr51/sPZyIfWgoW7BXwRekd9EQGrx8bSzx9BAtRX7 r9XopPEGKtKJayOxZvx2ndUCzlvw1qV0ioA/M8EnZjGWvEUZuXwohNCsXdsuiJ+/Kv8PwBlgqYa 7IVDc8N66w+69N/vkaFfK7vBw== X-Received: by 2002:a05:600c:818d:b0:489:1c5f:3aa1 with SMTP id 5b1f17b1804b1-4891c5f3ca0mr103551775e9.11.1776772206245; Tue, 21 Apr 2026 04:50:06 -0700 (PDT) Received: from [10.156.60.236] (ip-037-024-206-209.um08.pools.vodafone-ip.de. [37.24.206.209]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-48a55b8baaesm68943785e9.10.2026.04.21.04.50.05 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 21 Apr 2026 04:50:06 -0700 (PDT) Message-ID: <8788ef02-dad2-411b-b4a0-29139d976b0d@suse.com> Date: Tue, 21 Apr 2026 13:50:05 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: [PATCH 04/19] RISC-V: match_*() improvements From: Jan Beulich To: Binutils Cc: Palmer Dabbelt , Andrew Waterman , Jim Wilson , Nelson Chu References: <620231e0-67d0-4bd0-b593-38f32b01a6d8@suse.com> Content-Language: en-US Autocrypt: addr=jbeulich@suse.com; keydata= xsDiBFk3nEQRBADAEaSw6zC/EJkiwGPXbWtPxl2xCdSoeepS07jW8UgcHNurfHvUzogEq5xk hu507c3BarVjyWCJOylMNR98Yd8VqD9UfmX0Hb8/BrA+Hl6/DB/eqGptrf4BSRwcZQM32aZK 7Pj2XbGWIUrZrd70x1eAP9QE3P79Y2oLrsCgbZJfEwCgvz9JjGmQqQkRiTVzlZVCJYcyGGsD /0tbFCzD2h20ahe8rC1gbb3K3qk+LpBtvjBu1RY9drYk0NymiGbJWZgab6t1jM7sk2vuf0Py O9Hf9XBmK0uE9IgMaiCpc32XV9oASz6UJebwkX+zF2jG5I1BfnO9g7KlotcA/v5ClMjgo6Gl MDY4HxoSRu3i1cqqSDtVlt+AOVBJBACrZcnHAUSuCXBPy0jOlBhxPqRWv6ND4c9PH1xjQ3NP nxJuMBS8rnNg22uyfAgmBKNLpLgAGVRMZGaGoJObGf72s6TeIqKJo/LtggAS9qAUiuKVnygo 3wjfkS9A3DRO+SpU7JqWdsveeIQyeyEJ/8PTowmSQLakF+3fote9ybzd880fSmFuIEJldWxp Y2ggPGpiZXVsaWNoQHN1c2UuY29tPsJgBBMRAgAgBQJZN5xEAhsDBgsJCAcDAgQVAggDBBYC AwECHgECF4AACgkQoDSui/t3IH4J+wCfQ5jHdEjCRHj23O/5ttg9r9OIruwAn3103WUITZee e7Sbg12UgcQ5lv7SzsFNBFk3nEQQCACCuTjCjFOUdi5Nm244F+78kLghRcin/awv+IrTcIWF hUpSs1Y91iQQ7KItirz5uwCPlwejSJDQJLIS+QtJHaXDXeV6NI0Uef1hP20+y8qydDiVkv6l IreXjTb7DvksRgJNvCkWtYnlS3mYvQ9NzS9PhyALWbXnH6sIJd2O9lKS1Mrfq+y0IXCP10eS FFGg+Av3IQeFatkJAyju0PPthyTqxSI4lZYuJVPknzgaeuJv/2NccrPvmeDg6Coe7ZIeQ8Yj t0ARxu2xytAkkLCel1Lz1WLmwLstV30g80nkgZf/wr+/BXJW/oIvRlonUkxv+IbBM3dX2OV8 AmRv1ySWPTP7AAMFB/9PQK/VtlNUJvg8GXj9ootzrteGfVZVVT4XBJkfwBcpC/XcPzldjv+3 HYudvpdNK3lLujXeA5fLOH+Z/G9WBc5pFVSMocI71I8bT8lIAzreg0WvkWg5V2WZsUMlnDL9 mpwIGFhlbM3gfDMs7MPMu8YQRFVdUvtSpaAs8OFfGQ0ia3LGZcjA6Ik2+xcqscEJzNH+qh8V m5jjp28yZgaqTaRbg3M/+MTbMpicpZuqF4rnB0AQD12/3BNWDR6bmh+EkYSMcEIpQmBM51qM EKYTQGybRCjpnKHGOxG0rfFY1085mBDZCH5Kx0cl0HVJuQKC+dV2ZY5AqjcKwAxpE75MLFkr wkkEGBECAAkFAlk3nEQCGwwACgkQoDSui/t3IH7nnwCfcJWUDUFKdCsBH/E5d+0ZnMQi+G0A nAuWpQkjM1ASeQwSHEeAWPgskBQL In-Reply-To: <620231e0-67d0-4bd0-b593-38f32b01a6d8@suse.com> X-Spam-Status: No, score=-3016.6 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_NONE, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on sourceware.org X-BeenThere: binutils@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Binutils mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: binutils-bounces~patchwork=sourceware.org@sourceware.org Match functions referenced by macro insns should not unconditionally invoke match_opcode(): The macro enumeration can change (grow), making the function potentially yield false negatives. In match_rs1_nonzero(), used solely by macro insns, add an assertion to that effect. While there also drop the pointless attribute from match_rs1_nonzero_rs2_even()'s first parameter. --- a/opcodes/riscv-opc.c +++ b/opcodes/riscv-opc.c @@ -22,6 +22,7 @@ #include "sysdep.h" #include "opcode/riscv.h" +#include #include /* Register names used by gas and objdump. */ @@ -210,14 +211,16 @@ static int match_rd_even (const struct riscv_opcode *op, insn_t insn) { int rd = (insn & MASK_RD) >> OP_SH_RD; - return ((rd & 1) == 0) && match_opcode (op, insn); + return ((rd & 1) == 0) + && (op->pinfo == INSN_MACRO || match_opcode (op, insn)); } static int match_rs2_even (const struct riscv_opcode *op, insn_t insn) { int rs2 = (insn & MASK_RS2) >> OP_SH_RS2; - return ((rs2 & 1) == 0) && match_opcode (op, insn); + return ((rs2 & 1) == 0) + && (op->pinfo == INSN_MACRO || match_opcode (op, insn)); } static int @@ -236,11 +239,12 @@ match_rd_even_nonzero (const struct risc static int match_rs1_nonzero (const struct riscv_opcode *op ATTRIBUTE_UNUSED, insn_t insn) { + assert (op->pinfo == INSN_MACRO); return (insn & MASK_RS1) != 0; } static int -match_rs1_nonzero_rs2_even (const struct riscv_opcode *op ATTRIBUTE_UNUSED, insn_t insn) +match_rs1_nonzero_rs2_even (const struct riscv_opcode *op, insn_t insn) { return match_rs1_nonzero (op, insn) && match_rs2_even (op, insn); } From patchwork Tue Apr 21 11:50:25 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Beulich X-Patchwork-Id: 133461 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from vm01.sourceware.org (localhost [127.0.0.1]) by sourceware.org (Postfix) with ESMTP id A21704B9DB70 for ; Tue, 21 Apr 2026 11:51:49 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org A21704B9DB70 Authentication-Results: sourceware.org; dkim=pass (2048-bit key, unprotected) header.d=suse.com header.i=@suse.com header.a=rsa-sha256 header.s=google header.b=DRQafA/o X-Original-To: binutils@sourceware.org Delivered-To: binutils@sourceware.org Received: from mail-wm1-x336.google.com (mail-wm1-x336.google.com [IPv6:2a00:1450:4864:20::336]) by sourceware.org (Postfix) with ESMTPS id E8D964BA9039 for ; Tue, 21 Apr 2026 11:50:27 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org E8D964BA9039 Authentication-Results: sourceware.org; dmarc=pass (p=quarantine dis=none) header.from=suse.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=suse.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org E8D964BA9039 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2a00:1450:4864:20::336 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1776772228; cv=none; b=uqBbgGaY48z52/nY8M8sJGzkF9r8thZZNJZvFJ/nE/fh+1qUNh7aezxQJ8/rApoTBFw0UCedF2gegpTq+3KYhLKucnd/TorXWi47DXq4AZNn0xDzE87mek4LhglxDIU6218RL0Moj2+WFHW0nZ0FoE5WtQcF4aJ5KY4Qyafg9D4= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1776772228; c=relaxed/simple; bh=vHx95SOpfv+8RYC3jRlKtKnNZSaP2Y9a2Pv8W4qA0Ws=; h=DKIM-Signature:Message-ID:Date:MIME-Version:Subject:From:To; b=SBUJ9Kxn3OvFSS0Jz/AlDoCT5n3yGvDjR70Id49zBhALKi28UV7IxfGrkejIJvM0uB5V2vjHnQzUo/tgz4Se2bHzmo68bko/Ak/PwcI9l/hDlwK+9+wTFJLhcys51+7iqEeH3E21dHoQcGXSnHiVH+IzIo6ycJzkatm5giQ2Poc= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org E8D964BA9039 Received: by mail-wm1-x336.google.com with SMTP id 5b1f17b1804b1-48984d29fe3so25471075e9.0 for ; Tue, 21 Apr 2026 04:50:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=google; t=1776772227; x=1777377027; darn=sourceware.org; h=content-transfer-encoding:in-reply-to:autocrypt:content-language :references:cc:to:from:subject:user-agent:mime-version:date :message-id:from:to:cc:subject:date:message-id:reply-to; bh=/jkwQqrCR/Nm2TXGg692mgdqdzgeNGvLRC2Yobchrs0=; b=DRQafA/oU7VaUpzGCIjxRe+S3PynEsWRF8OJky8G5a0lTV9wRwa1ziCLRIke4CEQdW RC+sJ48AV8LpspwOdxiaPYr2GuFzkJCvIXgBar1MDdGbx2Q/LCIaRvq1Z/5EmsRGwD41 wy1sLiEuD25S0635ppfcckJykteOYTgSWcALBAJCX+lVTgiGLMMR8PzjwZuV/kwDxHUW K4vc4UfKc1r5MkEvg1N5xn/nlRyATP2EbtmmK+VqTs3OQHk963hw5Z6gywSYSe3DZny8 UUDqqiaRNVffNlOBnXGbVdoMQVdYx0vHyOrElbJDzM+lYec5dGvFSC0tvKRYA5Lingrm ChJQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776772227; x=1777377027; h=content-transfer-encoding:in-reply-to:autocrypt:content-language :references:cc:to:from:subject:user-agent:mime-version:date :message-id:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=/jkwQqrCR/Nm2TXGg692mgdqdzgeNGvLRC2Yobchrs0=; b=HKiFquBC/iUyif0pHiBp3uzkGIW1hiX3xLUUBBxfrHFaHpZQKRSH9gSSRmGuerHsBJ 1HsGlsXNcUcOmRvITLq+sAqbn6PLrERcFjX78OTQQ23JlmDGuYBCT2P9Lr/7jyTvnfnc 0X4/yUlKsevjidXvTCHS7obRMNODzx+uAsCs0aARXk3RLEcJ0ey+e32lONvJCGPX8NGs xcKVnuyn/ovefMNGzWWORzvOSi8m9CnAWA7UlC2iZkH2sX5oIpzjUV7uI3vXNIhjUtOu ipdpwG8hn+AmmLb1IYXqUdnOl9LI67DHNyUzrb+4ceiTJ/7IQV06K2se3ZV3InxHAQ2U iR/w== X-Gm-Message-State: AOJu0YyxFIkPyuAtY1HScB8MUbI9rqB4BKcezilVEeTKyO+Y/u6kDBP3 4Rc+0SuzWmb0YaOR3JkSVXf1aEelFUS0Uf7UC2OHMZUCAm+/pP3y/OizSLhLCHnT3HZSOqnnR8z ovhHxJg== X-Gm-Gg: AeBDies2/Xdb8SsRkNCi5uNcSiz45tD701DcOOxttvIDIdb+w+gcj8h8B5fJcK0kye+ ksMVwe9Ye8XgF4ApnHD9Qd+jOkPi0mZiLYCy8SBVCsoRdxH3nCmCTnmL4/Qh9OsOTY1tgUS0auC A/bVM1LE9qoBDPodpAsqNz16KyOpy5YL6rq0DbAOWHn7BnTf5msancec4V5TT4WOHqh+QkfQWve /CG5r40OLYqwpjhvkOR5TDhzezX0aem1NHy2jB1N/eBrex10JouNdteYpaKqtBRsWAneQ+FeWKL JIuTe1lCZvp7RVuOfqBnb55KyI040HsmfD2yk8PTBbFl6AYUDxYpAMrUzNMdP0Za4H8lyqKReSi yy+VM7He5nRWEuYGbo8v/2yjvX6aZ6DpI8nvQFoFxWTThb7iScwn3+pI8EzkZrnT7aI/57V3DH1 Ky635t2krRwMTCiW3p9+QLT8gmZgzHR6mI7XtYqPQ1Ec/DI3y11wgRc+EzkDibCKn5P2lIvJz+Z LceGb8eG7I9rqExPnr1/VuLvA== X-Received: by 2002:a05:600d:b:b0:48a:563c:c8e2 with SMTP id 5b1f17b1804b1-48a563cd137mr25219985e9.3.1776772226820; Tue, 21 Apr 2026 04:50:26 -0700 (PDT) Received: from [10.156.60.236] (ip-037-024-206-209.um08.pools.vodafone-ip.de. [37.24.206.209]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4891c08faffsm287184385e9.1.2026.04.21.04.50.26 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 21 Apr 2026 04:50:26 -0700 (PDT) Message-ID: <180db539-b81a-44c4-8bb9-d6ff5065a427@suse.com> Date: Tue, 21 Apr 2026 13:50:25 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: [PATCH 05/19] RISC-V: EEW64 checking From: Jan Beulich To: Binutils Cc: Palmer Dabbelt , Andrew Waterman , Jim Wilson , Nelson Chu References: <620231e0-67d0-4bd0-b593-38f32b01a6d8@suse.com> Content-Language: en-US Autocrypt: addr=jbeulich@suse.com; keydata= xsDiBFk3nEQRBADAEaSw6zC/EJkiwGPXbWtPxl2xCdSoeepS07jW8UgcHNurfHvUzogEq5xk hu507c3BarVjyWCJOylMNR98Yd8VqD9UfmX0Hb8/BrA+Hl6/DB/eqGptrf4BSRwcZQM32aZK 7Pj2XbGWIUrZrd70x1eAP9QE3P79Y2oLrsCgbZJfEwCgvz9JjGmQqQkRiTVzlZVCJYcyGGsD /0tbFCzD2h20ahe8rC1gbb3K3qk+LpBtvjBu1RY9drYk0NymiGbJWZgab6t1jM7sk2vuf0Py O9Hf9XBmK0uE9IgMaiCpc32XV9oASz6UJebwkX+zF2jG5I1BfnO9g7KlotcA/v5ClMjgo6Gl MDY4HxoSRu3i1cqqSDtVlt+AOVBJBACrZcnHAUSuCXBPy0jOlBhxPqRWv6ND4c9PH1xjQ3NP nxJuMBS8rnNg22uyfAgmBKNLpLgAGVRMZGaGoJObGf72s6TeIqKJo/LtggAS9qAUiuKVnygo 3wjfkS9A3DRO+SpU7JqWdsveeIQyeyEJ/8PTowmSQLakF+3fote9ybzd880fSmFuIEJldWxp Y2ggPGpiZXVsaWNoQHN1c2UuY29tPsJgBBMRAgAgBQJZN5xEAhsDBgsJCAcDAgQVAggDBBYC AwECHgECF4AACgkQoDSui/t3IH4J+wCfQ5jHdEjCRHj23O/5ttg9r9OIruwAn3103WUITZee e7Sbg12UgcQ5lv7SzsFNBFk3nEQQCACCuTjCjFOUdi5Nm244F+78kLghRcin/awv+IrTcIWF hUpSs1Y91iQQ7KItirz5uwCPlwejSJDQJLIS+QtJHaXDXeV6NI0Uef1hP20+y8qydDiVkv6l IreXjTb7DvksRgJNvCkWtYnlS3mYvQ9NzS9PhyALWbXnH6sIJd2O9lKS1Mrfq+y0IXCP10eS FFGg+Av3IQeFatkJAyju0PPthyTqxSI4lZYuJVPknzgaeuJv/2NccrPvmeDg6Coe7ZIeQ8Yj t0ARxu2xytAkkLCel1Lz1WLmwLstV30g80nkgZf/wr+/BXJW/oIvRlonUkxv+IbBM3dX2OV8 AmRv1ySWPTP7AAMFB/9PQK/VtlNUJvg8GXj9ootzrteGfVZVVT4XBJkfwBcpC/XcPzldjv+3 HYudvpdNK3lLujXeA5fLOH+Z/G9WBc5pFVSMocI71I8bT8lIAzreg0WvkWg5V2WZsUMlnDL9 mpwIGFhlbM3gfDMs7MPMu8YQRFVdUvtSpaAs8OFfGQ0ia3LGZcjA6Ik2+xcqscEJzNH+qh8V m5jjp28yZgaqTaRbg3M/+MTbMpicpZuqF4rnB0AQD12/3BNWDR6bmh+EkYSMcEIpQmBM51qM EKYTQGybRCjpnKHGOxG0rfFY1085mBDZCH5Kx0cl0HVJuQKC+dV2ZY5AqjcKwAxpE75MLFkr wkkEGBECAAkFAlk3nEQCGwwACgkQoDSui/t3IH7nnwCfcJWUDUFKdCsBH/E5d+0ZnMQi+G0A nAuWpQkjM1ASeQwSHEeAWPgskBQL In-Reply-To: <620231e0-67d0-4bd0-b593-38f32b01a6d8@suse.com> X-Spam-Status: No, score=-3016.6 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_NONE, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on sourceware.org X-BeenThere: binutils@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Binutils mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: binutils-bounces~patchwork=sourceware.org@sourceware.org Like the assembler, the disassembler should also use the INSN_V_EEW64 flag. Respectively marked insns shouldn't be disassembled normally when Zve64x isn't enabled. While there also drop the redundant Zve32x check from gas: All affected insns are INSN_CLASS_V, which means Zve32x was already checked to be enabled (both V and Zve64x imply Zve32x). --- Question is why a flag was used in the first place: The property could be expressed by a new INSN_CLASS_ZVE64X, couldn't it? --- a/gas/config/tc-riscv.c +++ b/gas/config/tc-riscv.c @@ -2944,10 +2944,9 @@ riscv_ip (char *str, struct riscv_cl_ins insn_with_csr = false; } - /* The (segmant) load and store with EEW 64 cannot be used + /* The (segment) load and store with EEW 64 cannot be used when zve32x is enabled. */ - if (ip->insn_mo->pinfo & INSN_V_EEW64 - && riscv_subset_supports (&riscv_rps_as, "zve32x") + if ((ip->insn_mo->pinfo & INSN_V_EEW64) && !riscv_subset_supports (&riscv_rps_as, "zve64x")) { error.msg = _("illegal opcode for zve32x"); --- a/opcodes/riscv-dis.c +++ b/opcodes/riscv-dis.c @@ -1018,10 +1018,16 @@ riscv_disassemble_insn (bfd_vma memaddr, && (op->xlen_requirement != pd->xlen)) continue; /* Is this instruction supported by the current architecture? */ - if (!pd->all_ext - && !riscv_multi_subset_supports (&pd->riscv_rps_dis, - op->insn_class)) - continue; + if (!pd->all_ext) + { + if (!riscv_multi_subset_supports (&pd->riscv_rps_dis, + op->insn_class)) + continue; + + if ((op->pinfo & INSN_V_EEW64) + && !riscv_subset_supports (&pd->riscv_rps_dis, "zve64x")) + continue; + } /* It's a match. */ (*info->fprintf_styled_func) (info->stream, dis_style_mnemonic, --- /dev/null +++ b/gas/testsuite/gas/riscv/eew64.d @@ -0,0 +1,13 @@ +#as: -march=rv32i +#objdump: -d + +.*:[ ]+file format .* + +Disassembly of section .text: + +0+000 : +[ ]+0:[ ]+020ff007[ ]+\.insn[ ]+4, ?0x020ff007 + +0+004 : +[ ]+4:[ ]+020ff007[ ]+vle64\.v[ ]+v0,\(t6\) +#pass --- /dev/null +++ b/gas/testsuite/gas/riscv/eew64.s @@ -0,0 +1,12 @@ + .option arch, rv32i + .option arch, +zve32x + +eew32: + # vle64.v v0, (x31) + .insn 4, 0x020ff007 + + .option arch, rv32i + .option arch, +zve64x + +eew64: + vle64.v v0, (x31) From patchwork Tue Apr 21 11:51:05 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Beulich X-Patchwork-Id: 133462 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from vm01.sourceware.org (localhost [127.0.0.1]) by sourceware.org (Postfix) with ESMTP id 264C94BA2E24 for ; Tue, 21 Apr 2026 11:51:59 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 264C94BA2E24 Authentication-Results: sourceware.org; dkim=pass (2048-bit key, unprotected) header.d=suse.com header.i=@suse.com header.a=rsa-sha256 header.s=google header.b=UjyMYfOV X-Original-To: binutils@sourceware.org Delivered-To: binutils@sourceware.org Received: from mail-wr1-x42a.google.com (mail-wr1-x42a.google.com [IPv6:2a00:1450:4864:20::42a]) by sourceware.org (Postfix) with ESMTPS id CD71F4BA2E2F for ; Tue, 21 Apr 2026 11:51:07 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org CD71F4BA2E2F Authentication-Results: sourceware.org; dmarc=pass (p=quarantine dis=none) header.from=suse.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=suse.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org CD71F4BA2E2F Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2a00:1450:4864:20::42a ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1776772268; cv=none; b=P2f1wgCw7QrlbaDpF9l4DNTTAYfoGXEM55BTU05ykWV1Kk3jIlE3Mg1N2XI0RNlyBR8KGjlzgKqq9AebLsCDeeGaDu+NaqvkuY3K959XXisacwNNy9n/O658YA+/X2bnZVTSEctuu+/FhcHXPQ2rv0DkoTkkBn6V4NMOMGc1BsM= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1776772268; c=relaxed/simple; bh=nv92S6KSJ53z9vQk+MPFhxtT8vkelk13koo54Loenyo=; h=DKIM-Signature:Message-ID:Date:MIME-Version:Subject:From:To; b=N5gDJK6tWmfg/WYjIMxAc0cE7Zzs6mmoSrR+u1syTnhIHb5sD6KFDA/H0JXyQ9FDL75x0CIIviNYMLrdDoCFZCVRCkeRG8EHzKDsACZe6bpvkA7O/a5cTTuRIw19/LpiGSouGr3OQM2/5oao4E1MpTkBoc1D3zdElXYlang32Zg= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org CD71F4BA2E2F Received: by mail-wr1-x42a.google.com with SMTP id ffacd0b85a97d-43cf7683a28so2819906f8f.2 for ; Tue, 21 Apr 2026 04:51:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=google; t=1776772267; x=1777377067; darn=sourceware.org; h=content-transfer-encoding:in-reply-to:autocrypt:content-language :references:cc:to:from:subject:user-agent:mime-version:date :message-id:from:to:cc:subject:date:message-id:reply-to; bh=6bMi/jXZej3lL8UqQUazqxPKO7J1DkYYh/S/EUvS3bM=; b=UjyMYfOVplwFhwUQl7se6f+EAimujl0WwIujSZlhHv3fbCbcfysmozBTAPqp4cUGCj uBmM/X21stL5h+szqjbHBqYJotLk1YC0VFVBsTKx969yXTFrvUF9p1SYkxuRPifyHN5o TCdiFXfLJqEE3mqLdAabW5etTYaP38TR+5ctZHfl4pQbEnTSvbooMU4xmyLp5jQPAyvE LH088UpVzcv8gqxSe0TQYxHszndaXTcLO02NZqTH6tIwSCiithBJgphNhOXo6ZKLfhkj C4sWvvu+4A8T7C+E9NflpgTSNYsxXREWdTQ9Oa0cYUricVU59rhETZNG2leu57UEJV+W BIOQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776772267; x=1777377067; h=content-transfer-encoding:in-reply-to:autocrypt:content-language :references:cc:to:from:subject:user-agent:mime-version:date :message-id:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=6bMi/jXZej3lL8UqQUazqxPKO7J1DkYYh/S/EUvS3bM=; b=BZEcygOZtgUZuF1j5UyJRSZx7bySlaT10LLpSocI294Z9kZWiEpjGzwPMeWymOxuts WEYzi9arwmMoJtJR035MueYQfSd4ajY8tXuMCjRjRewQUdQo0nT6rRUfW6rtiCPUf84o PQaKJZHjHhNmiEoC1lmgV+ihTpcGxQU2V+amIN3FVkVrwhbVNPsMjrH91bU20jKADUu/ OBwWAro2J6NHfkQKrepg9Yqs/JwMhtuArU0kEy58lq433xEgtPYOjYDUS8RG7k+MTeld kmyWmYd29sfnpxKebX6MQuO25UadPI/3eBWr7ksa2sgIr3tolMkWNSdPWgxhtmlJaMzD zOuA== X-Gm-Message-State: AOJu0YwJx45v7L4Ui1HrKQe6Fsa2593+Dk6PzbTtaFvWX5MfIWghBQN1 1qgk9ijYPkE6PydRU2rzx7LSpvknQ7ixEgLPGcHCmA9vX9gZ07Ebj4rXMdV4btTx+clWIE94zWj U1uOQGQ== X-Gm-Gg: AeBDieuRJf7bUJTcrNF4G58lsuqdo7UUF/JHVKIdJSYvpAofl/2cb0rDdZxvuOz3TKx IxTdiROfty2u4n8QoY6Z7yAQAvLe+Bd9tbYkC1QSX76dHpDVv3ivGB7ZN6tb9MMeVHSY8KLdaXl 1jSlUza7rxDvLtpUTx7TOozMhzWNYtf5iS/vMCVEf/qM4gu7mgk1dkqVlCHZn3jii4I4JZdDt5/ coW+rsitBcO0BFVxqVTQ8sDDzOmvcpsETbXgNui4hhK/g3DTSZExWSHGJi6HN1wlhtrKbC0SYOj 6tJVL1mXk8Pta94uimfvuucMEqiGjKqi1JTd4WQ54fL49hdTzMWsn4pisJEZ0pX1j27eDAATew8 nQkmVpatM7H1Ddhq1/8TWBixu1VL7ETHr6Pv6HeeZ/sIooNMj+nZkdnyy6nFcW90t/+qRcbRUtl UTfn2ltemRGlO0eNNIwbfrE2Qv9/vnhPA/i4NOp05wETkvAZ7kLNoQXb2m33bFJhvkfx3/FTUiN ARsP2hnm6TnEnpalj4BL7T06g== X-Received: by 2002:adf:fd4c:0:b0:43f:e414:4c6a with SMTP id ffacd0b85a97d-43fe4144cabmr16731569f8f.0.1776772266648; Tue, 21 Apr 2026 04:51:06 -0700 (PDT) Received: from [10.156.60.236] (ip-037-024-206-209.um08.pools.vodafone-ip.de. [37.24.206.209]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-43fe4e4d5b1sm40707762f8f.30.2026.04.21.04.51.06 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 21 Apr 2026 04:51:06 -0700 (PDT) Message-ID: <2a36b6b0-3b92-4b92-8da1-3a03bd4ba221@suse.com> Date: Tue, 21 Apr 2026 13:51:05 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: [PATCH 06/19] bfd/RISC-V: correct grammar of conflict diagnostics From: Jan Beulich To: Binutils Cc: Palmer Dabbelt , Andrew Waterman , Jim Wilson , Nelson Chu References: <620231e0-67d0-4bd0-b593-38f32b01a6d8@suse.com> Content-Language: en-US Autocrypt: addr=jbeulich@suse.com; keydata= xsDiBFk3nEQRBADAEaSw6zC/EJkiwGPXbWtPxl2xCdSoeepS07jW8UgcHNurfHvUzogEq5xk hu507c3BarVjyWCJOylMNR98Yd8VqD9UfmX0Hb8/BrA+Hl6/DB/eqGptrf4BSRwcZQM32aZK 7Pj2XbGWIUrZrd70x1eAP9QE3P79Y2oLrsCgbZJfEwCgvz9JjGmQqQkRiTVzlZVCJYcyGGsD /0tbFCzD2h20ahe8rC1gbb3K3qk+LpBtvjBu1RY9drYk0NymiGbJWZgab6t1jM7sk2vuf0Py O9Hf9XBmK0uE9IgMaiCpc32XV9oASz6UJebwkX+zF2jG5I1BfnO9g7KlotcA/v5ClMjgo6Gl MDY4HxoSRu3i1cqqSDtVlt+AOVBJBACrZcnHAUSuCXBPy0jOlBhxPqRWv6ND4c9PH1xjQ3NP nxJuMBS8rnNg22uyfAgmBKNLpLgAGVRMZGaGoJObGf72s6TeIqKJo/LtggAS9qAUiuKVnygo 3wjfkS9A3DRO+SpU7JqWdsveeIQyeyEJ/8PTowmSQLakF+3fote9ybzd880fSmFuIEJldWxp Y2ggPGpiZXVsaWNoQHN1c2UuY29tPsJgBBMRAgAgBQJZN5xEAhsDBgsJCAcDAgQVAggDBBYC AwECHgECF4AACgkQoDSui/t3IH4J+wCfQ5jHdEjCRHj23O/5ttg9r9OIruwAn3103WUITZee e7Sbg12UgcQ5lv7SzsFNBFk3nEQQCACCuTjCjFOUdi5Nm244F+78kLghRcin/awv+IrTcIWF hUpSs1Y91iQQ7KItirz5uwCPlwejSJDQJLIS+QtJHaXDXeV6NI0Uef1hP20+y8qydDiVkv6l IreXjTb7DvksRgJNvCkWtYnlS3mYvQ9NzS9PhyALWbXnH6sIJd2O9lKS1Mrfq+y0IXCP10eS FFGg+Av3IQeFatkJAyju0PPthyTqxSI4lZYuJVPknzgaeuJv/2NccrPvmeDg6Coe7ZIeQ8Yj t0ARxu2xytAkkLCel1Lz1WLmwLstV30g80nkgZf/wr+/BXJW/oIvRlonUkxv+IbBM3dX2OV8 AmRv1ySWPTP7AAMFB/9PQK/VtlNUJvg8GXj9ootzrteGfVZVVT4XBJkfwBcpC/XcPzldjv+3 HYudvpdNK3lLujXeA5fLOH+Z/G9WBc5pFVSMocI71I8bT8lIAzreg0WvkWg5V2WZsUMlnDL9 mpwIGFhlbM3gfDMs7MPMu8YQRFVdUvtSpaAs8OFfGQ0ia3LGZcjA6Ik2+xcqscEJzNH+qh8V m5jjp28yZgaqTaRbg3M/+MTbMpicpZuqF4rnB0AQD12/3BNWDR6bmh+EkYSMcEIpQmBM51qM EKYTQGybRCjpnKHGOxG0rfFY1085mBDZCH5Kx0cl0HVJuQKC+dV2ZY5AqjcKwAxpE75MLFkr wkkEGBECAAkFAlk3nEQCGwwACgkQoDSui/t3IH7nnwCfcJWUDUFKdCsBH/E5d+0ZnMQi+G0A nAuWpQkjM1ASeQwSHEeAWPgskBQL In-Reply-To: <620231e0-67d0-4bd0-b593-38f32b01a6d8@suse.com> X-Spam-Status: No, score=-3016.6 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_NONE, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on sourceware.org X-BeenThere: binutils@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Binutils mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: binutils-bounces~patchwork=sourceware.org@sourceware.org --- The extensions mentioned in the diagnostics can also be irritating, as one may not have enabled the specific one(s) mentioned. At the example of Zfinx, if only F was mentioned in the latter part of the message, that would at least be self-consistent. Furthermore the wording (particularly for uses in gas) suggests that the extension mentioned first is what was enabled last. Alternative, less suggestive wording may be "A and B conflict with one another". The usage in gas has another related issue, though: Subsets are added before checking for conflicts, hence e.g. for Z*inx the FPR form insns are then causing errors, irrespective of the order of .option directives (i.e. no matter which extensions were successfully enabled). Question is whether this infrastructure is actually well suited for use by gas. --- a/bfd/elfxx-riscv.c +++ b/bfd/elfxx-riscv.c @@ -2245,14 +2245,14 @@ riscv_parse_check_conflicts (riscv_parse && riscv_lookup_subset (rps->subset_list, "f", &subset)) { rps->error_handler - (_("`zfinx' is conflict with the `f/d/q/zfh/zfhmin' extension")); + (_("`zfinx' conflicts with the `f/d/q/zfh/zfhmin' extension")); no_conflict = false; } if (riscv_lookup_subset (rps->subset_list, "xtheadvector", &subset) && riscv_lookup_subset (rps->subset_list, "zve32x", &subset)) { rps->error_handler - (_("`xtheadvector' is conflict with the `v/zve32x' extension")); + (_("`xtheadvector' conflicts with the `v/zve32x' extension")); no_conflict = false; } if (riscv_lookup_subset (rps->subset_list, "zclsd", &subset) @@ -2261,7 +2261,7 @@ riscv_parse_check_conflicts (riscv_parse || riscv_lookup_subset (rps->subset_list, "zcf", &subset))) { rps->error_handler - (_("`zclsd' is conflict with the `c+f'/ `zcf' extension")); + (_("`zclsd' conflicts with the `c+f'/`zcf' extension")); no_conflict = false; } if (riscv_lookup_subset (rps->subset_list, "ssnpm", &subset) && xlen != 64) --- a/gas/testsuite/gas/riscv/x-thead-vector-fail.l +++ b/gas/testsuite/gas/riscv/x-thead-vector-fail.l @@ -1,2 +1,2 @@ Assembler messages: -Error: `xtheadvector' is conflict with the `v/zve32x' extension +Error: `xtheadvector' conflicts with the `v/zve32x' extension From patchwork Tue Apr 21 11:51:35 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Beulich X-Patchwork-Id: 133465 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from vm01.sourceware.org (localhost [127.0.0.1]) by sourceware.org (Postfix) with ESMTP id E5D674B9DB5E for ; Tue, 21 Apr 2026 11:53:45 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org E5D674B9DB5E Authentication-Results: sourceware.org; dkim=pass (2048-bit key, unprotected) header.d=suse.com header.i=@suse.com header.a=rsa-sha256 header.s=google header.b=YKvS+Mgi X-Original-To: binutils@sourceware.org Delivered-To: binutils@sourceware.org Received: from mail-wm1-x32f.google.com (mail-wm1-x32f.google.com [IPv6:2a00:1450:4864:20::32f]) by sourceware.org (Postfix) with ESMTPS id EFACF4B9DB79 for ; Tue, 21 Apr 2026 11:51:37 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org EFACF4B9DB79 Authentication-Results: sourceware.org; dmarc=pass (p=quarantine dis=none) header.from=suse.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=suse.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org EFACF4B9DB79 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2a00:1450:4864:20::32f ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1776772298; cv=none; b=PiELk+l2t0O+fd1FKqNin1TQjfozXhwofZ6DrFXHmGV1iKw9ibEgNQWBu47N1Oskp5IL2R9JQm9hFVxEA0GghRNdSRTKNGiVo0GdueaOYMr+QV/7+aTaGRUlAgWRBdB3tTKENkZEFnYdyh1YHP3p5iYx1UKqVq/rNCImglv4fq4= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1776772298; c=relaxed/simple; bh=R5ytMbm9BHjJkIVjZm4JyuuSms7MFmzmYjiSV6ZX/j4=; h=DKIM-Signature:Message-ID:Date:MIME-Version:Subject:From:To; b=JunkE4XDBWBqCDi9TR//oRudPhJj9MlPniO+GJ9SKtb0DDIXDUxZZlUUtVwDbtp7dhgyt58m74TQyYznRCaWoSzUuSSj3/0fweMYjJbE/cJDxm1GPliaAZLel4fJkh5yI+cQRGhZPIscZjkJbnLg6ZDlAYNEzOxOFtW3EJj3Vmg= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org EFACF4B9DB79 Received: by mail-wm1-x32f.google.com with SMTP id 5b1f17b1804b1-488e1a8ac40so53046905e9.2 for ; Tue, 21 Apr 2026 04:51:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=google; t=1776772297; x=1777377097; darn=sourceware.org; h=content-transfer-encoding:in-reply-to:autocrypt:content-language :references:cc:to:from:subject:user-agent:mime-version:date :message-id:from:to:cc:subject:date:message-id:reply-to; bh=N8G30akGBLwn3142AO7fdVwuL/a4UG6NIIHQfOFilPI=; b=YKvS+MgicWoDbIM2oKGfPoPOmzi6PLnmxTIA493dQI9icjPrfMonNYrHcDFE3rbQfQ ML8fjtbYe1G1TZGp5iBNXgE/AcuK5HOwd+i/n/vUb87SlYvJFqs5wmfTIKilyrse8qv1 hh9GWLZI3Hi4qzxOlaTG7oSAfDg3WUmlObRdbdD8YaAWHwFy6LQcHlyePBkvKi6Z2VNo VDD3JY2LsMZFMqrg/Fh9u7VjY16btUmEtd7C3GvjWYiINiPuKKE6hpm5oUgEe+EAIFcq 19ZZc0DTmYBWdaA9EJCU72DMZQcaNGuALKsiaOzQEIIU1sqncMWg60BqE9vHCsDjeiLj Xvhg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776772297; x=1777377097; h=content-transfer-encoding:in-reply-to:autocrypt:content-language :references:cc:to:from:subject:user-agent:mime-version:date :message-id:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=N8G30akGBLwn3142AO7fdVwuL/a4UG6NIIHQfOFilPI=; b=BsAbaafcUFyT0AD6q68ainmv4Flzlyujd1fkb70PjB4SOwDrj7HbnUPhDkT89wZ/3S ZJbRF1K60zSv73ZytGjQgGBGl3Icd6UK4WoUp6U3HbO/RWs2J7p9hp8XvRFmGrwGTZxA TArnrx38k6RwHvQHqG0+iAsM71PJ6Mq7NCGD1C3QlWKE3FVAjBz2MrRVGvjfOhg6z/Rr I7U4PVWa3jvU+ToDMinMnfbDs7mI/bqmP/oIpW0IRe54IhhVyFQLJtwUxZphMP/QoJVi YaqmqCASC6xtHDatlRezAObpcEbT2PL1qTkKgasqrDC3DdaWVjy7npycLDs5ekOQF0s7 S7iw== X-Gm-Message-State: AOJu0Yx2DeuqgazD/S5TCuP2nhVCgPlcsYFMijdAeFjRCBYbkLT06eBT e4dS0KqRi0sf4uXs6wRaD86FNgfHgf3EYGxmcIVPOYiCTOewtN60uoOxp6jEYyclvNLv3WxXhog lpUTxIQ== X-Gm-Gg: AeBDievgP56KoQdQezr3L+t1RW5jhty/BzVYQSUq+E20EQPKxjaD8liWI71cD+FKAZr /9zmmTswss5fdLWrxJA+IDTha0QedIHrFmVCsJXVwQ9ADZVHxkT+hsOV52tLvSAMDhmhBMla8Pz VeMD8SKKnQLoV3+Y4OB9NL01JlAVkgzH6xqzeJ+ucTcnUbPdCQr5HRGahKRNjF1nCI5Ga0tUkql i34rU4ifaTWIRbee4cWgoLCX88zaIDMFMwLdXdE0znXuZPEc9n5Q+whT97cS7Qxu8uOe2uBAFhM QYGRem3UIPDlfhjVhJ+eoaMwkxouWaLzM4tX/7U81+JT4MncPOuoK+6+gPvsLEsiDjxh+Xd1Hzf JnL4QQgMl0xTXHlYVOgsrazCqb5rjRIYg9IimGux9nDYC7UjZ6yO+ONrtNa2wP552UblmLj5sx9 X6AHMYhXX4iV89Td1InOLxFomNCW4blR5lqhtN54dlxioRaSMG4/GAhNAdmdHtyAgisl3XuXFSW VoDfG4HWxuOz59PLSGVOP4orQ== X-Received: by 2002:a05:600c:8115:b0:488:8577:d9cc with SMTP id 5b1f17b1804b1-488fb77faacmr216617145e9.20.1776772296745; Tue, 21 Apr 2026 04:51:36 -0700 (PDT) Received: from [10.156.60.236] (ip-037-024-206-209.um08.pools.vodafone-ip.de. [37.24.206.209]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-48a55b8baaesm69067285e9.10.2026.04.21.04.51.36 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 21 Apr 2026 04:51:36 -0700 (PDT) Message-ID: <77e6a033-451e-4a00-bb4c-77f3d90e73bb@suse.com> Date: Tue, 21 Apr 2026 13:51:35 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: [PATCH 07/19] bfd/RISC-V: Zvfbfwma implies Zvfbfmin From: Jan Beulich To: Binutils Cc: Palmer Dabbelt , Andrew Waterman , Jim Wilson , Nelson Chu References: <620231e0-67d0-4bd0-b593-38f32b01a6d8@suse.com> Content-Language: en-US Autocrypt: addr=jbeulich@suse.com; keydata= xsDiBFk3nEQRBADAEaSw6zC/EJkiwGPXbWtPxl2xCdSoeepS07jW8UgcHNurfHvUzogEq5xk hu507c3BarVjyWCJOylMNR98Yd8VqD9UfmX0Hb8/BrA+Hl6/DB/eqGptrf4BSRwcZQM32aZK 7Pj2XbGWIUrZrd70x1eAP9QE3P79Y2oLrsCgbZJfEwCgvz9JjGmQqQkRiTVzlZVCJYcyGGsD /0tbFCzD2h20ahe8rC1gbb3K3qk+LpBtvjBu1RY9drYk0NymiGbJWZgab6t1jM7sk2vuf0Py O9Hf9XBmK0uE9IgMaiCpc32XV9oASz6UJebwkX+zF2jG5I1BfnO9g7KlotcA/v5ClMjgo6Gl MDY4HxoSRu3i1cqqSDtVlt+AOVBJBACrZcnHAUSuCXBPy0jOlBhxPqRWv6ND4c9PH1xjQ3NP nxJuMBS8rnNg22uyfAgmBKNLpLgAGVRMZGaGoJObGf72s6TeIqKJo/LtggAS9qAUiuKVnygo 3wjfkS9A3DRO+SpU7JqWdsveeIQyeyEJ/8PTowmSQLakF+3fote9ybzd880fSmFuIEJldWxp Y2ggPGpiZXVsaWNoQHN1c2UuY29tPsJgBBMRAgAgBQJZN5xEAhsDBgsJCAcDAgQVAggDBBYC AwECHgECF4AACgkQoDSui/t3IH4J+wCfQ5jHdEjCRHj23O/5ttg9r9OIruwAn3103WUITZee e7Sbg12UgcQ5lv7SzsFNBFk3nEQQCACCuTjCjFOUdi5Nm244F+78kLghRcin/awv+IrTcIWF hUpSs1Y91iQQ7KItirz5uwCPlwejSJDQJLIS+QtJHaXDXeV6NI0Uef1hP20+y8qydDiVkv6l IreXjTb7DvksRgJNvCkWtYnlS3mYvQ9NzS9PhyALWbXnH6sIJd2O9lKS1Mrfq+y0IXCP10eS FFGg+Av3IQeFatkJAyju0PPthyTqxSI4lZYuJVPknzgaeuJv/2NccrPvmeDg6Coe7ZIeQ8Yj t0ARxu2xytAkkLCel1Lz1WLmwLstV30g80nkgZf/wr+/BXJW/oIvRlonUkxv+IbBM3dX2OV8 AmRv1ySWPTP7AAMFB/9PQK/VtlNUJvg8GXj9ootzrteGfVZVVT4XBJkfwBcpC/XcPzldjv+3 HYudvpdNK3lLujXeA5fLOH+Z/G9WBc5pFVSMocI71I8bT8lIAzreg0WvkWg5V2WZsUMlnDL9 mpwIGFhlbM3gfDMs7MPMu8YQRFVdUvtSpaAs8OFfGQ0ia3LGZcjA6Ik2+xcqscEJzNH+qh8V m5jjp28yZgaqTaRbg3M/+MTbMpicpZuqF4rnB0AQD12/3BNWDR6bmh+EkYSMcEIpQmBM51qM EKYTQGybRCjpnKHGOxG0rfFY1085mBDZCH5Kx0cl0HVJuQKC+dV2ZY5AqjcKwAxpE75MLFkr wkkEGBECAAkFAlk3nEQCGwwACgkQoDSui/t3IH7nnwCfcJWUDUFKdCsBH/E5d+0ZnMQi+G0A nAuWpQkjM1ASeQwSHEeAWPgskBQL In-Reply-To: <620231e0-67d0-4bd0-b593-38f32b01a6d8@suse.com> X-Spam-Status: No, score=-3016.5 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_NONE, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on sourceware.org X-BeenThere: binutils@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Binutils mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: binutils-bounces~patchwork=sourceware.org@sourceware.org This is pretty clear from the spec. --- While the spec is also explicit there: I would have expected Zvfbfmin (not Zvfbfwma) to be what implies Zfbfmin. Is there an explanation for this? --- a/bfd/elfxx-riscv.c +++ b/bfd/elfxx-riscv.c @@ -1232,7 +1232,7 @@ static const struct riscv_implicit_subse {"v", "+zve64d,+zvl128b", check_implicit_always}, {"zvfh", "+zvfhmin,+zfhmin", check_implicit_always}, {"zvfhmin", "+zve32f", check_implicit_always}, - {"zvfbfwma", "+zve32f,+zfbfmin", check_implicit_always}, + {"zvfbfwma", "+zfbfmin,+zvfbfmin", check_implicit_always}, {"zvfbfmin", "+zve32f", check_implicit_always}, {"zve64d", "+d,+zve64f", check_implicit_always}, {"zve64f", "+zve32f,+zve64x,+zvl64b", check_implicit_always}, --- a/gas/testsuite/gas/riscv/imply.d +++ b/gas/testsuite/gas/riscv/imply.d @@ -27,7 +27,7 @@ SYMBOL TABLE: [0-9a-f]+ l .text 0+000 \$xrv32i2p1_f2p2_d2p2_v1p0_zicsr2p0_zve32f1p0_zve32x1p0_zve64d1p0_zve64f1p0_zve64x1p0_zvl128b1p0_zvl32b1p0_zvl64b1p0 [0-9a-f]+ l .text 0+000 \$xrv32i2p1_f2p2_zicsr2p0_zfhmin1p0_zve32f1p0_zve32x1p0_zvfh1p0_zvfhmin1p0_zvl32b1p0 [0-9a-f]+ l .text 0+000 \$xrv32i2p1_f2p2_zicsr2p0_zve32f1p0_zve32x1p0_zvfhmin1p0_zvl32b1p0 -[0-9a-f]+ l .text 0+000 \$xrv32i2p1_f2p2_zicsr2p0_zfbfmin1p0_zfhmin1p0_zve32f1p0_zve32x1p0_zvfbfwma1p0_zvl32b1p0 +[0-9a-f]+ l .text 0+000 \$xrv32i2p1_f2p2_zicsr2p0_zfbfmin1p0_zfhmin1p0_zve32f1p0_zve32x1p0_zvfbfmin1p0_zvfbfwma1p0_zvl32b1p0 [0-9a-f]+ l .text 0+000 \$xrv32i2p1_f2p2_zicsr2p0_zve32f1p0_zve32x1p0_zvfbfmin1p0_zvl32b1p0 [0-9a-f]+ l .text 0+000 \$xrv32i2p1_f2p2_d2p2_zicsr2p0_zve32f1p0_zve32x1p0_zve64d1p0_zve64f1p0_zve64x1p0_zvl32b1p0_zvl64b1p0 [0-9a-f]+ l .text 0+000 \$xrv32i2p1_f2p2_zicsr2p0_zve32f1p0_zve32x1p0_zve64f1p0_zve64x1p0_zvl32b1p0_zvl64b1p0 From patchwork Tue Apr 21 11:52:09 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Beulich X-Patchwork-Id: 133463 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from vm01.sourceware.org (localhost [127.0.0.1]) by sourceware.org (Postfix) with ESMTP id 9C96E4B9DB78 for ; Tue, 21 Apr 2026 11:53:11 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 9C96E4B9DB78 Authentication-Results: sourceware.org; dkim=pass (2048-bit key, unprotected) header.d=suse.com header.i=@suse.com header.a=rsa-sha256 header.s=google header.b=dVa1NYam X-Original-To: binutils@sourceware.org Delivered-To: binutils@sourceware.org Received: from mail-wm1-x332.google.com (mail-wm1-x332.google.com [IPv6:2a00:1450:4864:20::332]) by sourceware.org (Postfix) with ESMTPS id 8D2C84BA901C for ; Tue, 21 Apr 2026 11:52:11 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 8D2C84BA901C Authentication-Results: sourceware.org; dmarc=pass (p=quarantine dis=none) header.from=suse.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=suse.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 8D2C84BA901C Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2a00:1450:4864:20::332 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1776772331; cv=none; b=QFVf9q5SlVDGwEkAosmCZNR0wq2nBJmawI9SvlGRr+EKdX2EZBYNziBJzrRtLc+LQBxugGxZXZElN9rnFqo9Gz86ZVDgVNDDfo5Z1JO8wZjiSOpl/rJqqO3Ul8uLuzXBIZahEt7WWNOicHCLdMPZmiA7yI2ucnNaUSix6SsjrQg= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1776772331; c=relaxed/simple; bh=d4a1iZdqVZ7tu9h9qVydYRwMcn2waof36e6Eh9CzoHY=; h=DKIM-Signature:Message-ID:Date:MIME-Version:Subject:From:To; b=jlawZjOcR/w7SFRw1qJuYxtTuAtu/TYrYv5Se/G/ePOcOAdGaBVM7teWZqjfeTZH/J8T/msPe78BRaGpSuBfjeXHheR0RYQ35ZHEYMGoZpAKx6Z7eV9tSpWpvpqx9YnW9VAccab2XRZx2l7HmkHtqK8+8vmx1SSYjCZehFQfdkM= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 8D2C84BA901C Received: by mail-wm1-x332.google.com with SMTP id 5b1f17b1804b1-48374014a77so53399845e9.3 for ; Tue, 21 Apr 2026 04:52:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=google; t=1776772330; x=1777377130; darn=sourceware.org; h=content-transfer-encoding:in-reply-to:autocrypt:content-language :references:cc:to:from:subject:user-agent:mime-version:date :message-id:from:to:cc:subject:date:message-id:reply-to; bh=Zjgqh58qcZwC5FF9cjGfj5TlWqjZVLg0Hqe7jny+9KI=; b=dVa1NYamg26U9PO+k52vQ4IpJ1dHByaOkQ2vaxuSDf6NCNt9C/M2+ZA/JTr3OEqQwy s6zfScdo8crx7bb2L5dZzZIEdusWjhsbT7RBFB+dCF90/nBAs9/y+XLEKO+ShM1AHVAL nflapd61ILCW5QV29xk+frLxL7b9HwUj9jNaawzh0t/ShWF/7I4Or1EPZX989H8Z4ESt j4cb0yPDulNZ60Kl/N/ZaYqgy/aix9hSPz+/cXlbcqM9nNZFWhhIgDPt/PQVtwIsAvIy djIIDnUeSd6d3DGzGta52sz4Qtdaxz8sFEKnn3W4F4vCowvvO7Wh/Ub8QOEFkS/m1cs9 lGBw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776772330; x=1777377130; h=content-transfer-encoding:in-reply-to:autocrypt:content-language :references:cc:to:from:subject:user-agent:mime-version:date :message-id:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=Zjgqh58qcZwC5FF9cjGfj5TlWqjZVLg0Hqe7jny+9KI=; b=SbSTYJb4TmiEXL8i2YXFAQZx6D9agX6ia0AqENrM5k00/1pAATX3mcDInXwb8hIreN 5TwblOpOueFx4JxRmW7wqx0ORolCKdOqIUBHDqWqrjjP9zHaxrMuwNC7vAGBRVZGDSn+ Fz/hCTA9wczJqNnUFwg5gW/jw7Lx6v2hRFgGgH6EEMihk9a+NZ8hFMBdYQgqwF/wviYS K9BaoVsl4hw6MX1+Igll2WzTI48KVkoqiFqRqABYW4VO9TxTMIPPkij0hoUMWZ97tFgm FkBC5LclFtn5GayB86rgU9cC8lFKs+bKKiZA62tedVnMUNd+41BnR8xbkEBRxf/lPWiE euhg== X-Gm-Message-State: AOJu0Yy2rBtjWafPJe/5g5mpb8a6sfEnEjdlIca1bXO1DDoPlNf1T3Jn NYm54hULOcNQT/0qb2vBYUpgZZk1wKrTm6+XREXCrFpdrm8D184sgaVjZdTZSveBakv+udP4YAZ 1ZSPoWg== X-Gm-Gg: AeBDiesarwEpet2B6cLqYbJZWaCcu4wM7lzC2wqiziecGpc3H0mrX2gkTKzH/qAFaG5 t5NfQ2+Jd7uDOnD5D1JpD5u7IYnRlGl3W4dbLStgLmgcdl9DUv6166UoAyYNqDT1Aa+dbx9CbQk SvINcFaDWPKxnEldEaeDqe2y1MSx3hT94c5iHBUE0PVwL85u2kKAUTn2ayGMR+68Y6vNrK1+jf9 zUvC2ngiAVISbl7gzT0AyB7t8PMK5f3WF8Nzik5hs/b3OYIsKa1bRaLHke0cwaoWZE9QWQP13Zc YceWcVrSZX6BNAVfHA6/UkljXDrPk4XEmX9cG+5joXTrwsVriKtZCM6K1ykYJXUCSlGMfJTGtXu yPzrq4Jw9sFVSYWMoHh/otaBZM42Uz9whsMH50X30Y9nO4HQd9gF8y/arywIm1aqgbi38XQlJ2I h2BfGzFF3Lx5EmvfVYaNES0ijTNuj9C1xBC0d9/GON837fIQX+rBMFWVG1ea3lQP3N4AX8M6jGm JFBcCkeiNh4rM5EEhkZMP6vdw== X-Received: by 2002:a05:600c:c10a:b0:483:2c98:4368 with SMTP id 5b1f17b1804b1-488fb771613mr197662195e9.18.1776772330395; Tue, 21 Apr 2026 04:52:10 -0700 (PDT) Received: from [10.156.60.236] (ip-037-024-206-209.um08.pools.vodafone-ip.de. [37.24.206.209]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-488fb78becdsm171805835e9.5.2026.04.21.04.52.09 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 21 Apr 2026 04:52:10 -0700 (PDT) Message-ID: <925c74e1-ee4d-4ab4-b293-e373b6910f26@suse.com> Date: Tue, 21 Apr 2026 13:52:09 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: [PATCH 08/19] RISC-V: drop FCVT.Q.L{,U} forms with rounding mode operand From: Jan Beulich To: Binutils Cc: Palmer Dabbelt , Andrew Waterman , Jim Wilson , Nelson Chu References: <620231e0-67d0-4bd0-b593-38f32b01a6d8@suse.com> Content-Language: en-US Autocrypt: addr=jbeulich@suse.com; keydata= xsDiBFk3nEQRBADAEaSw6zC/EJkiwGPXbWtPxl2xCdSoeepS07jW8UgcHNurfHvUzogEq5xk hu507c3BarVjyWCJOylMNR98Yd8VqD9UfmX0Hb8/BrA+Hl6/DB/eqGptrf4BSRwcZQM32aZK 7Pj2XbGWIUrZrd70x1eAP9QE3P79Y2oLrsCgbZJfEwCgvz9JjGmQqQkRiTVzlZVCJYcyGGsD /0tbFCzD2h20ahe8rC1gbb3K3qk+LpBtvjBu1RY9drYk0NymiGbJWZgab6t1jM7sk2vuf0Py O9Hf9XBmK0uE9IgMaiCpc32XV9oASz6UJebwkX+zF2jG5I1BfnO9g7KlotcA/v5ClMjgo6Gl MDY4HxoSRu3i1cqqSDtVlt+AOVBJBACrZcnHAUSuCXBPy0jOlBhxPqRWv6ND4c9PH1xjQ3NP nxJuMBS8rnNg22uyfAgmBKNLpLgAGVRMZGaGoJObGf72s6TeIqKJo/LtggAS9qAUiuKVnygo 3wjfkS9A3DRO+SpU7JqWdsveeIQyeyEJ/8PTowmSQLakF+3fote9ybzd880fSmFuIEJldWxp Y2ggPGpiZXVsaWNoQHN1c2UuY29tPsJgBBMRAgAgBQJZN5xEAhsDBgsJCAcDAgQVAggDBBYC AwECHgECF4AACgkQoDSui/t3IH4J+wCfQ5jHdEjCRHj23O/5ttg9r9OIruwAn3103WUITZee e7Sbg12UgcQ5lv7SzsFNBFk3nEQQCACCuTjCjFOUdi5Nm244F+78kLghRcin/awv+IrTcIWF hUpSs1Y91iQQ7KItirz5uwCPlwejSJDQJLIS+QtJHaXDXeV6NI0Uef1hP20+y8qydDiVkv6l IreXjTb7DvksRgJNvCkWtYnlS3mYvQ9NzS9PhyALWbXnH6sIJd2O9lKS1Mrfq+y0IXCP10eS FFGg+Av3IQeFatkJAyju0PPthyTqxSI4lZYuJVPknzgaeuJv/2NccrPvmeDg6Coe7ZIeQ8Yj t0ARxu2xytAkkLCel1Lz1WLmwLstV30g80nkgZf/wr+/BXJW/oIvRlonUkxv+IbBM3dX2OV8 AmRv1ySWPTP7AAMFB/9PQK/VtlNUJvg8GXj9ootzrteGfVZVVT4XBJkfwBcpC/XcPzldjv+3 HYudvpdNK3lLujXeA5fLOH+Z/G9WBc5pFVSMocI71I8bT8lIAzreg0WvkWg5V2WZsUMlnDL9 mpwIGFhlbM3gfDMs7MPMu8YQRFVdUvtSpaAs8OFfGQ0ia3LGZcjA6Ik2+xcqscEJzNH+qh8V m5jjp28yZgaqTaRbg3M/+MTbMpicpZuqF4rnB0AQD12/3BNWDR6bmh+EkYSMcEIpQmBM51qM EKYTQGybRCjpnKHGOxG0rfFY1085mBDZCH5Kx0cl0HVJuQKC+dV2ZY5AqjcKwAxpE75MLFkr wkkEGBECAAkFAlk3nEQCGwwACgkQoDSui/t3IH7nnwCfcJWUDUFKdCsBH/E5d+0ZnMQi+G0A nAuWpQkjM1ASeQwSHEeAWPgskBQL In-Reply-To: <620231e0-67d0-4bd0-b593-38f32b01a6d8@suse.com> X-Spam-Status: No, score=-3016.5 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_NONE, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on sourceware.org X-BeenThere: binutils@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Binutils mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: binutils-bounces~patchwork=sourceware.org@sourceware.org Like FCVT.D.W{,U} and FCVT.Q.W{,U} these also are unaffected by rounding mode, and hence allowing for a respective operand is bogus. (Otherwise MASK_RM should also be used in the match field for the respectively other forms.) --- a/opcodes/riscv-opc.c +++ b/opcodes/riscv-opc.c @@ -1165,9 +1165,7 @@ const struct riscv_opcode riscv_opcodes[ {"fcvt.lu.q", 64, INSN_CLASS_Q_INX, "d,S", MATCH_FCVT_LU_Q|MASK_RM, MASK_FCVT_LU_Q|MASK_RM, match_opcode, 0 }, {"fcvt.lu.q", 64, INSN_CLASS_Q_INX, "d,S,m", MATCH_FCVT_LU_Q, MASK_FCVT_LU_Q, match_opcode, 0 }, {"fcvt.q.l", 64, INSN_CLASS_Q_INX, "D,s", MATCH_FCVT_Q_L, MASK_FCVT_Q_L|MASK_RM, match_opcode, 0 }, -{"fcvt.q.l", 64, INSN_CLASS_Q_INX, "D,s,m", MATCH_FCVT_Q_L, MASK_FCVT_Q_L, match_opcode, 0 }, {"fcvt.q.lu", 64, INSN_CLASS_Q_INX, "D,s", MATCH_FCVT_Q_LU, MASK_FCVT_Q_LU|MASK_RM, match_opcode, 0 }, -{"fcvt.q.lu", 64, INSN_CLASS_Q_INX, "D,s,m", MATCH_FCVT_Q_LU, MASK_FCVT_Q_LU, match_opcode, 0 }, /* Compressed instructions. */ {"c.unimp", 0, INSN_CLASS_ZCA, "", 0, 0xffffU, match_opcode, 0 }, From patchwork Tue Apr 21 11:53:02 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Beulich X-Patchwork-Id: 133464 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from vm01.sourceware.org (localhost [127.0.0.1]) by sourceware.org (Postfix) with ESMTP id DECE04B9DB63 for ; Tue, 21 Apr 2026 11:53:44 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org DECE04B9DB63 Authentication-Results: sourceware.org; dkim=pass (2048-bit key, unprotected) header.d=suse.com header.i=@suse.com header.a=rsa-sha256 header.s=google header.b=F8RQi6Ih X-Original-To: binutils@sourceware.org Delivered-To: binutils@sourceware.org Received: from mail-wr1-x430.google.com (mail-wr1-x430.google.com [IPv6:2a00:1450:4864:20::430]) by sourceware.org (Postfix) with ESMTPS id 769F24B9DB78 for ; Tue, 21 Apr 2026 11:53:04 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 769F24B9DB78 Authentication-Results: sourceware.org; dmarc=pass (p=quarantine dis=none) header.from=suse.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=suse.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 769F24B9DB78 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2a00:1450:4864:20::430 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1776772384; cv=none; b=FlLOec6AgnB8ypRcDBScBS1BPrhR6MZ3avH3IstOhZCaPA8BStrhBNJjybbSJ3XNL5T1BSZZDyaQV2vr2BxRxxmdvk98zIdgTeTZZZGxUPlWjfOQoNdPNaCvcN77ZDOlNshrgEAFVlDDRNkgbcA6L6Zpikk+wY/PgL6xf6ol0hw= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1776772384; c=relaxed/simple; bh=uObLBeceHMQUFXSyFvG9TCDF92S6eXoWF+bKRFpfZB0=; h=DKIM-Signature:Message-ID:Date:MIME-Version:Subject:From:To; b=M+u7fBgb9xTer3mGiTsuS2FhYd/J+3SpStRdVYebi5/0uZXKKZo+fkKOblJuBaNhnSXbkjtBpNxbQyw32VHCENlnb5Cxz3eVAKGC24i7K0g4cyvedsdkgkVuXUBoTikiBKcTQv4D0sRfxruHSEOD6LLneYIPugw8z9ISVV5Ba1Q= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 769F24B9DB78 Received: by mail-wr1-x430.google.com with SMTP id ffacd0b85a97d-4411e1eba51so805744f8f.3 for ; Tue, 21 Apr 2026 04:53:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=google; t=1776772383; x=1777377183; darn=sourceware.org; h=content-transfer-encoding:in-reply-to:autocrypt:content-language :references:cc:to:from:subject:user-agent:mime-version:date :message-id:from:to:cc:subject:date:message-id:reply-to; bh=sSZrR7BvOinLOeh+MpwUzT0oy4m/b0cs60t+aTEO5wg=; b=F8RQi6IhD3XBKgy0G7x4teNnPakIKcNGz5/3KgdySFhqwjAlUKXTunnGsmF2+Ab7Xe e+ElNQNLNI+iDSDmZAaqbel2RYygngXIeU2qsOd3eFlbxq05yzTP3tLjj7vIx7NnKagy /5IzWCDBJKu/OZ7+//Gog6VK6YWWg2mdvT19MyBSwPxxWK6Apu27gZBVRZNfdPggtTTq gSumUjVy1eG5uURjMH1JkPDm5/NTNziHP4Qn/qslROoBFfsqMNWfom8SY+vYNRGf9yHR 6uEGBjZDIZNC4hz+mFrHlETmAZhNMgkrIX/VdRRXngJ5BqqB42GTxiGh2zZEfbN9AJPb rSOA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776772383; x=1777377183; h=content-transfer-encoding:in-reply-to:autocrypt:content-language :references:cc:to:from:subject:user-agent:mime-version:date :message-id:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=sSZrR7BvOinLOeh+MpwUzT0oy4m/b0cs60t+aTEO5wg=; b=OQPRWYTSFRX3+jq463fgl4iLY6ODpmGuzqdvOzscLgg3WjumIFJgwkOKuQlaCphhB0 Z78nS4ul2eh0YppiuJwg853E/nkua0Yl+Q5oc2pSeu7ZrclUzlSXlVB/sGIsnP9u5tno P4dTWBwL+4oASffx3GX/X4MbBumsV4YYATcc/yCHwtwbKzWCpfFDDOu6wwbjf2kwz2Mw 8uX6NYEWpgb3C+qyHSGBtrhyVb+SSnFQ7GbsBFfkQ+lIupfl9ay/Z3wz3GBUHG/eiAtt ba8o1AO+nY+UWSvmLW5S2t4tD+GzsMWp5E36y8brVPzuDizOoPhy26WwpiMt+rU6OPF0 3fNQ== X-Gm-Message-State: AOJu0Yzg9dP1CsTHsiPpabir5qbic/G16z9D2Vhij8Zvbhnx5uDkBsLI Ui5wAHLMLCrAGgTCTGRcN/jpglhLbKAfC1y+VH+WcrvrP9WLr5n09hHA0pK3fNye+I8hOMmd1p2 GTSWGNQ== X-Gm-Gg: AeBDieuSNV96TbtA1MF3LJdcDrNB/8v7aL8yC2kGIQh3pyOs/y29GQLiKxp+3I8lVR3 bbBxWfVR9AFx1FRSui/0kbJi8m+WvqENSsi3yh0sDcehEgaIw+HXIWGe+wFNaydehZjKJEyWaeZ XJ7cKxYOuPOFKfcJ7YnKqJAJXG1pPD68szsk+251cHWEVBWkd0MnhNc1hGUeebSX8ROQbo02Aut kdIOiiSmZMjNU80x589ceVpn9pTBEzcwptOxB+3AKg4uTMszh8jw7bewbvKbPrneLToT6RCJJ4q y1jSrgLF5n8QePqQx7drQf4zF1WzqCX7r3JMR6e/d9iReavSKnXuvjtYTLXGTKeudD8yPGu3m3O iWP9TM4CDXrY0WDyEYcnocmKzOG4P0WoD5SyTKLsJEI6PiBuRoXh94LdEu9H+LFGP1TkZE5o999 ro1vXAETwI4bhOYhUkYv7+Q5jYLxI6D6q/yvnexpu90nZQqxFaJjQh4ScOW0THZwX8igeiJbABM CfDIu7lguiVhSwuQIjmy048gw== X-Received: by 2002:a05:600c:348b:b0:489:5022:39a4 with SMTP id 5b1f17b1804b1-4895040c025mr102661005e9.9.1776772383129; Tue, 21 Apr 2026 04:53:03 -0700 (PDT) Received: from [10.156.60.236] (ip-037-024-206-209.um08.pools.vodafone-ip.de. [37.24.206.209]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-488ffc558f2sm226988105e9.1.2026.04.21.04.53.02 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 21 Apr 2026 04:53:02 -0700 (PDT) Message-ID: Date: Tue, 21 Apr 2026 13:53:02 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: [PATCH 09/19] RISC-V: make FP rounding mode an optional argument From: Jan Beulich To: Binutils Cc: Palmer Dabbelt , Andrew Waterman , Jim Wilson , Nelson Chu References: <620231e0-67d0-4bd0-b593-38f32b01a6d8@suse.com> Content-Language: en-US Autocrypt: addr=jbeulich@suse.com; keydata= xsDiBFk3nEQRBADAEaSw6zC/EJkiwGPXbWtPxl2xCdSoeepS07jW8UgcHNurfHvUzogEq5xk hu507c3BarVjyWCJOylMNR98Yd8VqD9UfmX0Hb8/BrA+Hl6/DB/eqGptrf4BSRwcZQM32aZK 7Pj2XbGWIUrZrd70x1eAP9QE3P79Y2oLrsCgbZJfEwCgvz9JjGmQqQkRiTVzlZVCJYcyGGsD /0tbFCzD2h20ahe8rC1gbb3K3qk+LpBtvjBu1RY9drYk0NymiGbJWZgab6t1jM7sk2vuf0Py O9Hf9XBmK0uE9IgMaiCpc32XV9oASz6UJebwkX+zF2jG5I1BfnO9g7KlotcA/v5ClMjgo6Gl MDY4HxoSRu3i1cqqSDtVlt+AOVBJBACrZcnHAUSuCXBPy0jOlBhxPqRWv6ND4c9PH1xjQ3NP nxJuMBS8rnNg22uyfAgmBKNLpLgAGVRMZGaGoJObGf72s6TeIqKJo/LtggAS9qAUiuKVnygo 3wjfkS9A3DRO+SpU7JqWdsveeIQyeyEJ/8PTowmSQLakF+3fote9ybzd880fSmFuIEJldWxp Y2ggPGpiZXVsaWNoQHN1c2UuY29tPsJgBBMRAgAgBQJZN5xEAhsDBgsJCAcDAgQVAggDBBYC AwECHgECF4AACgkQoDSui/t3IH4J+wCfQ5jHdEjCRHj23O/5ttg9r9OIruwAn3103WUITZee e7Sbg12UgcQ5lv7SzsFNBFk3nEQQCACCuTjCjFOUdi5Nm244F+78kLghRcin/awv+IrTcIWF hUpSs1Y91iQQ7KItirz5uwCPlwejSJDQJLIS+QtJHaXDXeV6NI0Uef1hP20+y8qydDiVkv6l IreXjTb7DvksRgJNvCkWtYnlS3mYvQ9NzS9PhyALWbXnH6sIJd2O9lKS1Mrfq+y0IXCP10eS FFGg+Av3IQeFatkJAyju0PPthyTqxSI4lZYuJVPknzgaeuJv/2NccrPvmeDg6Coe7ZIeQ8Yj t0ARxu2xytAkkLCel1Lz1WLmwLstV30g80nkgZf/wr+/BXJW/oIvRlonUkxv+IbBM3dX2OV8 AmRv1ySWPTP7AAMFB/9PQK/VtlNUJvg8GXj9ootzrteGfVZVVT4XBJkfwBcpC/XcPzldjv+3 HYudvpdNK3lLujXeA5fLOH+Z/G9WBc5pFVSMocI71I8bT8lIAzreg0WvkWg5V2WZsUMlnDL9 mpwIGFhlbM3gfDMs7MPMu8YQRFVdUvtSpaAs8OFfGQ0ia3LGZcjA6Ik2+xcqscEJzNH+qh8V m5jjp28yZgaqTaRbg3M/+MTbMpicpZuqF4rnB0AQD12/3BNWDR6bmh+EkYSMcEIpQmBM51qM EKYTQGybRCjpnKHGOxG0rfFY1085mBDZCH5Kx0cl0HVJuQKC+dV2ZY5AqjcKwAxpE75MLFkr wkkEGBECAAkFAlk3nEQCGwwACgkQoDSui/t3IH7nnwCfcJWUDUFKdCsBH/E5d+0ZnMQi+G0A nAuWpQkjM1ASeQwSHEeAWPgskBQL In-Reply-To: <620231e0-67d0-4bd0-b593-38f32b01a6d8@suse.com> X-Spam-Status: No, score=-3016.9 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_NONE, TXREP, UPPERCASE_50_75 autolearn=no autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on sourceware.org X-BeenThere: binutils@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Binutils mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: binutils-bounces~patchwork=sourceware.org@sourceware.org Model this after Vm (and somewhat after its VM counterpart): It's similarly always last, and we can hence similarly reduce the number of entries in the opcode table. The exception being FCVTMOD.W.D, where M needs using. --- a/gas/config/tc-riscv.c +++ b/gas/config/tc-riscv.c @@ -1592,6 +1592,7 @@ validate_riscv_insn (const struct riscv_ case 't': USE_BITS (OP_MASK_RS2, OP_SH_RS2); break; case 'R': /* RS3, floating point. */ case 'r': USE_BITS (OP_MASK_RS3, OP_SH_RS3); break; + case 'M': case 'm': USE_BITS (OP_MASK_RM, OP_SH_RM); break; case 'E': USE_BITS (OP_MASK_CSR, OP_SH_CSR); break; case 'P': USE_BITS (OP_MASK_PRED, OP_SH_PRED); break; @@ -3485,7 +3486,17 @@ riscv_ip (char *str, struct riscv_cl_ins } continue; - case 'm': /* Rounding mode. */ + case 'm': /* Optional rounding mode. */ + if (*asarg == '\0') + { + INSERT_OPERAND (RM, *ip, OP_MASK_RM); + continue; + } + if (*asarg != ',') + break; + ++asarg; + /* Fall through. */ + case 'M': /* Rounding mode. */ if (arg_lookup (&asarg, riscv_rm, ARRAY_SIZE (riscv_rm), ®no)) { --- a/opcodes/riscv-dis.c +++ b/opcodes/riscv-dis.c @@ -536,6 +536,11 @@ print_insn_args (const char *oparg, insn break; case 'm': + if (EXTRACT_OPERAND (RM, l) == OP_MASK_RM) + break; + print (info->stream, dis_style_text, ","); + /* Fall through. */ + case 'M': arg_print (info, EXTRACT_OPERAND (RM, l), riscv_rm, ARRAY_SIZE (riscv_rm)); break; --- a/opcodes/riscv-opc.c +++ b/opcodes/riscv-opc.c @@ -915,61 +915,40 @@ const struct riscv_opcode riscv_opcodes[ {"fsgnj.h", 0, INSN_CLASS_ZFH_INX, "D,S,T", MATCH_FSGNJ_H, MASK_FSGNJ_H, match_opcode, 0 }, {"fsgnjn.h", 0, INSN_CLASS_ZFH_INX, "D,S,T", MATCH_FSGNJN_H, MASK_FSGNJN_H, match_opcode, 0 }, {"fsgnjx.h", 0, INSN_CLASS_ZFH_INX, "D,S,T", MATCH_FSGNJX_H, MASK_FSGNJX_H, match_opcode, 0 }, -{"fadd.h", 0, INSN_CLASS_ZFH_INX, "D,S,T", MATCH_FADD_H|MASK_RM, MASK_FADD_H|MASK_RM, match_opcode, 0 }, -{"fadd.h", 0, INSN_CLASS_ZFH_INX, "D,S,T,m", MATCH_FADD_H, MASK_FADD_H, match_opcode, 0 }, -{"fsub.h", 0, INSN_CLASS_ZFH_INX, "D,S,T", MATCH_FSUB_H|MASK_RM, MASK_FSUB_H|MASK_RM, match_opcode, 0 }, -{"fsub.h", 0, INSN_CLASS_ZFH_INX, "D,S,T,m", MATCH_FSUB_H, MASK_FSUB_H, match_opcode, 0 }, -{"fmul.h", 0, INSN_CLASS_ZFH_INX, "D,S,T", MATCH_FMUL_H|MASK_RM, MASK_FMUL_H|MASK_RM, match_opcode, 0 }, -{"fmul.h", 0, INSN_CLASS_ZFH_INX, "D,S,T,m", MATCH_FMUL_H, MASK_FMUL_H, match_opcode, 0 }, -{"fdiv.h", 0, INSN_CLASS_ZFH_INX, "D,S,T", MATCH_FDIV_H|MASK_RM, MASK_FDIV_H|MASK_RM, match_opcode, 0 }, -{"fdiv.h", 0, INSN_CLASS_ZFH_INX, "D,S,T,m", MATCH_FDIV_H, MASK_FDIV_H, match_opcode, 0 }, -{"fsqrt.h", 0, INSN_CLASS_ZFH_INX, "D,S", MATCH_FSQRT_H|MASK_RM, MASK_FSQRT_H|MASK_RM, match_opcode, 0 }, -{"fsqrt.h", 0, INSN_CLASS_ZFH_INX, "D,S,m", MATCH_FSQRT_H, MASK_FSQRT_H, match_opcode, 0 }, +{"fadd.h", 0, INSN_CLASS_ZFH_INX, "D,S,Tm", MATCH_FADD_H, MASK_FADD_H, match_opcode, 0 }, +{"fsub.h", 0, INSN_CLASS_ZFH_INX, "D,S,Tm", MATCH_FSUB_H, MASK_FSUB_H, match_opcode, 0 }, +{"fmul.h", 0, INSN_CLASS_ZFH_INX, "D,S,Tm", MATCH_FMUL_H, MASK_FMUL_H, match_opcode, 0 }, +{"fdiv.h", 0, INSN_CLASS_ZFH_INX, "D,S,Tm", MATCH_FDIV_H, MASK_FDIV_H, match_opcode, 0 }, +{"fsqrt.h", 0, INSN_CLASS_ZFH_INX, "D,Sm", MATCH_FSQRT_H, MASK_FSQRT_H, match_opcode, 0 }, {"fmin.h", 0, INSN_CLASS_ZFH_INX, "D,S,T", MATCH_FMIN_H, MASK_FMIN_H, match_opcode, 0 }, {"fmax.h", 0, INSN_CLASS_ZFH_INX, "D,S,T", MATCH_FMAX_H, MASK_FMAX_H, match_opcode, 0 }, -{"fmadd.h", 0, INSN_CLASS_ZFH_INX, "D,S,T,R", MATCH_FMADD_H|MASK_RM, MASK_FMADD_H|MASK_RM, match_opcode, 0 }, -{"fmadd.h", 0, INSN_CLASS_ZFH_INX, "D,S,T,R,m", MATCH_FMADD_H, MASK_FMADD_H, match_opcode, 0 }, -{"fnmadd.h", 0, INSN_CLASS_ZFH_INX, "D,S,T,R", MATCH_FNMADD_H|MASK_RM, MASK_FNMADD_H|MASK_RM, match_opcode, 0 }, -{"fnmadd.h", 0, INSN_CLASS_ZFH_INX, "D,S,T,R,m", MATCH_FNMADD_H, MASK_FNMADD_H, match_opcode, 0 }, -{"fmsub.h", 0, INSN_CLASS_ZFH_INX, "D,S,T,R", MATCH_FMSUB_H|MASK_RM, MASK_FMSUB_H|MASK_RM, match_opcode, 0 }, -{"fmsub.h", 0, INSN_CLASS_ZFH_INX, "D,S,T,R,m", MATCH_FMSUB_H, MASK_FMSUB_H, match_opcode, 0 }, -{"fnmsub.h", 0, INSN_CLASS_ZFH_INX, "D,S,T,R", MATCH_FNMSUB_H|MASK_RM, MASK_FNMSUB_H|MASK_RM, match_opcode, 0 }, -{"fnmsub.h", 0, INSN_CLASS_ZFH_INX, "D,S,T,R,m", MATCH_FNMSUB_H, MASK_FNMSUB_H, match_opcode, 0 }, -{"fcvt.w.h", 0, INSN_CLASS_ZFH_INX, "d,S", MATCH_FCVT_W_H|MASK_RM, MASK_FCVT_W_H|MASK_RM, match_opcode, 0 }, -{"fcvt.w.h", 0, INSN_CLASS_ZFH_INX, "d,S,m", MATCH_FCVT_W_H, MASK_FCVT_W_H, match_opcode, 0 }, -{"fcvt.wu.h", 0, INSN_CLASS_ZFH_INX, "d,S", MATCH_FCVT_WU_H|MASK_RM, MASK_FCVT_WU_H|MASK_RM, match_opcode, 0 }, -{"fcvt.wu.h", 0, INSN_CLASS_ZFH_INX, "d,S,m", MATCH_FCVT_WU_H, MASK_FCVT_WU_H, match_opcode, 0 }, -{"fcvt.h.w", 0, INSN_CLASS_ZFH_INX, "D,s", MATCH_FCVT_H_W|MASK_RM, MASK_FCVT_H_W|MASK_RM, match_opcode, 0 }, -{"fcvt.h.w", 0, INSN_CLASS_ZFH_INX, "D,s,m", MATCH_FCVT_H_W, MASK_FCVT_H_W, match_opcode, 0 }, -{"fcvt.h.wu", 0, INSN_CLASS_ZFH_INX, "D,s", MATCH_FCVT_H_WU|MASK_RM, MASK_FCVT_H_WU|MASK_RM, match_opcode, 0 }, -{"fcvt.h.wu", 0, INSN_CLASS_ZFH_INX, "D,s,m", MATCH_FCVT_H_WU, MASK_FCVT_H_WU, match_opcode, 0 }, +{"fmadd.h", 0, INSN_CLASS_ZFH_INX, "D,S,T,Rm", MATCH_FMADD_H, MASK_FMADD_H, match_opcode, 0 }, +{"fnmadd.h", 0, INSN_CLASS_ZFH_INX, "D,S,T,Rm", MATCH_FNMADD_H, MASK_FNMADD_H, match_opcode, 0 }, +{"fmsub.h", 0, INSN_CLASS_ZFH_INX, "D,S,T,Rm", MATCH_FMSUB_H, MASK_FMSUB_H, match_opcode, 0 }, +{"fnmsub.h", 0, INSN_CLASS_ZFH_INX, "D,S,T,Rm", MATCH_FNMSUB_H, MASK_FNMSUB_H, match_opcode, 0 }, +{"fcvt.w.h", 0, INSN_CLASS_ZFH_INX, "d,Sm", MATCH_FCVT_W_H, MASK_FCVT_W_H, match_opcode, 0 }, +{"fcvt.wu.h", 0, INSN_CLASS_ZFH_INX, "d,Sm", MATCH_FCVT_WU_H, MASK_FCVT_WU_H, match_opcode, 0 }, +{"fcvt.h.w", 0, INSN_CLASS_ZFH_INX, "D,sm", MATCH_FCVT_H_W, MASK_FCVT_H_W, match_opcode, 0 }, +{"fcvt.h.wu", 0, INSN_CLASS_ZFH_INX, "D,sm", MATCH_FCVT_H_WU, MASK_FCVT_H_WU, match_opcode, 0 }, {"fcvt.s.h", 0, INSN_CLASS_ZFHMIN_INX, "D,S", MATCH_FCVT_S_H, MASK_FCVT_S_H|MASK_RM, match_opcode, 0 }, {"fcvt.d.h", 0, INSN_CLASS_ZFHMIN_AND_D_INX, "D,S", MATCH_FCVT_D_H, MASK_FCVT_D_H|MASK_RM, match_opcode, 0 }, {"fcvt.q.h", 0, INSN_CLASS_ZFHMIN_AND_Q_INX, "D,S", MATCH_FCVT_Q_H, MASK_FCVT_Q_H|MASK_RM, match_opcode, 0 }, -{"fcvt.h.s", 0, INSN_CLASS_ZFHMIN_INX, "D,S", MATCH_FCVT_H_S|MASK_RM, MASK_FCVT_H_S|MASK_RM, match_opcode, 0 }, -{"fcvt.h.s", 0, INSN_CLASS_ZFHMIN_INX, "D,S,m", MATCH_FCVT_H_S, MASK_FCVT_H_S, match_opcode, 0 }, -{"fcvt.h.d", 0, INSN_CLASS_ZFHMIN_AND_D_INX, "D,S", MATCH_FCVT_H_D|MASK_RM, MASK_FCVT_H_D|MASK_RM, match_opcode, 0 }, -{"fcvt.h.d", 0, INSN_CLASS_ZFHMIN_AND_D_INX, "D,S,m", MATCH_FCVT_H_D, MASK_FCVT_H_D, match_opcode, 0 }, -{"fcvt.h.q", 0, INSN_CLASS_ZFHMIN_AND_Q_INX, "D,S", MATCH_FCVT_H_Q|MASK_RM, MASK_FCVT_H_Q|MASK_RM, match_opcode, 0 }, -{"fcvt.h.q", 0, INSN_CLASS_ZFHMIN_AND_Q_INX, "D,S,m", MATCH_FCVT_H_Q, MASK_FCVT_H_Q, match_opcode, 0 }, +{"fcvt.h.s", 0, INSN_CLASS_ZFHMIN_INX, "D,Sm", MATCH_FCVT_H_S, MASK_FCVT_H_S, match_opcode, 0 }, +{"fcvt.h.d", 0, INSN_CLASS_ZFHMIN_AND_D_INX, "D,Sm", MATCH_FCVT_H_D, MASK_FCVT_H_D, match_opcode, 0 }, +{"fcvt.h.q", 0, INSN_CLASS_ZFHMIN_AND_Q_INX, "D,Sm", MATCH_FCVT_H_Q, MASK_FCVT_H_Q, match_opcode, 0 }, {"fclass.h", 0, INSN_CLASS_ZFH_INX, "d,S", MATCH_FCLASS_H, MASK_FCLASS_H, match_opcode, 0 }, {"feq.h", 0, INSN_CLASS_ZFH_INX, "d,S,T", MATCH_FEQ_H, MASK_FEQ_H, match_opcode, 0 }, {"flt.h", 0, INSN_CLASS_ZFH_INX, "d,S,T", MATCH_FLT_H, MASK_FLT_H, match_opcode, 0 }, {"fle.h", 0, INSN_CLASS_ZFH_INX, "d,S,T", MATCH_FLE_H, MASK_FLE_H, match_opcode, 0 }, {"fgt.h", 0, INSN_CLASS_ZFH_INX, "d,T,S", MATCH_FLT_H, MASK_FLT_H, match_opcode, INSN_ALIAS }, {"fge.h", 0, INSN_CLASS_ZFH_INX, "d,T,S", MATCH_FLE_H, MASK_FLE_H, match_opcode, INSN_ALIAS }, -{"fcvt.l.h", 64, INSN_CLASS_ZFH_INX, "d,S", MATCH_FCVT_L_H|MASK_RM, MASK_FCVT_L_H|MASK_RM, match_opcode, 0 }, -{"fcvt.l.h", 64, INSN_CLASS_ZFH_INX, "d,S,m", MATCH_FCVT_L_H, MASK_FCVT_L_H, match_opcode, 0 }, -{"fcvt.lu.h", 64, INSN_CLASS_ZFH_INX, "d,S", MATCH_FCVT_LU_H|MASK_RM, MASK_FCVT_LU_H|MASK_RM, match_opcode, 0 }, -{"fcvt.lu.h", 64, INSN_CLASS_ZFH_INX, "d,S,m", MATCH_FCVT_LU_H, MASK_FCVT_LU_H, match_opcode, 0 }, -{"fcvt.h.l", 64, INSN_CLASS_ZFH_INX, "D,s", MATCH_FCVT_H_L|MASK_RM, MASK_FCVT_H_L|MASK_RM, match_opcode, 0 }, -{"fcvt.h.l", 64, INSN_CLASS_ZFH_INX, "D,s,m", MATCH_FCVT_H_L, MASK_FCVT_H_L, match_opcode, 0 }, -{"fcvt.h.lu", 64, INSN_CLASS_ZFH_INX, "D,s", MATCH_FCVT_H_LU|MASK_RM, MASK_FCVT_H_LU|MASK_RM, match_opcode, 0 }, -{"fcvt.h.lu", 64, INSN_CLASS_ZFH_INX, "D,s,m", MATCH_FCVT_H_LU, MASK_FCVT_H_LU, match_opcode, 0 }, +{"fcvt.l.h", 64, INSN_CLASS_ZFH_INX, "d,Sm", MATCH_FCVT_L_H, MASK_FCVT_L_H, match_opcode, 0 }, +{"fcvt.lu.h", 64, INSN_CLASS_ZFH_INX, "d,Sm", MATCH_FCVT_LU_H, MASK_FCVT_LU_H, match_opcode, 0 }, +{"fcvt.h.l", 64, INSN_CLASS_ZFH_INX, "D,sm", MATCH_FCVT_H_L, MASK_FCVT_H_L, match_opcode, 0 }, +{"fcvt.h.lu", 64, INSN_CLASS_ZFH_INX, "D,sm", MATCH_FCVT_H_LU, MASK_FCVT_H_LU, match_opcode, 0 }, /* Zfbfmin instructions. */ -{"fcvt.bf16.s", 0, INSN_CLASS_ZFBFMIN, "D,S", MATCH_FCVT_BF16_S|MASK_RM, MASK_FCVT_BF16_S|MASK_RM, match_opcode, 0 }, -{"fcvt.bf16.s", 0, INSN_CLASS_ZFBFMIN, "D,S,m", MATCH_FCVT_BF16_S, MASK_FCVT_BF16_S, match_opcode, 0 }, +{"fcvt.bf16.s", 0, INSN_CLASS_ZFBFMIN, "D,Sm", MATCH_FCVT_BF16_S, MASK_FCVT_BF16_S, match_opcode, 0 }, {"fcvt.s.bf16", 0, INSN_CLASS_ZFBFMIN, "D,S", MATCH_FCVT_S_BF16, MASK_FCVT_S_BF16|MASK_RM, match_opcode, 0 }, /* Single-precision floating-point instruction subset. */ @@ -1007,48 +986,31 @@ const struct riscv_opcode riscv_opcodes[ {"fsgnj.s", 0, INSN_CLASS_F_INX, "D,S,T", MATCH_FSGNJ_S, MASK_FSGNJ_S, match_opcode, 0 }, {"fsgnjn.s", 0, INSN_CLASS_F_INX, "D,S,T", MATCH_FSGNJN_S, MASK_FSGNJN_S, match_opcode, 0 }, {"fsgnjx.s", 0, INSN_CLASS_F_INX, "D,S,T", MATCH_FSGNJX_S, MASK_FSGNJX_S, match_opcode, 0 }, -{"fadd.s", 0, INSN_CLASS_F_INX, "D,S,T", MATCH_FADD_S|MASK_RM, MASK_FADD_S|MASK_RM, match_opcode, 0 }, -{"fadd.s", 0, INSN_CLASS_F_INX, "D,S,T,m", MATCH_FADD_S, MASK_FADD_S, match_opcode, 0 }, -{"fsub.s", 0, INSN_CLASS_F_INX, "D,S,T", MATCH_FSUB_S|MASK_RM, MASK_FSUB_S|MASK_RM, match_opcode, 0 }, -{"fsub.s", 0, INSN_CLASS_F_INX, "D,S,T,m", MATCH_FSUB_S, MASK_FSUB_S, match_opcode, 0 }, -{"fmul.s", 0, INSN_CLASS_F_INX, "D,S,T", MATCH_FMUL_S|MASK_RM, MASK_FMUL_S|MASK_RM, match_opcode, 0 }, -{"fmul.s", 0, INSN_CLASS_F_INX, "D,S,T,m", MATCH_FMUL_S, MASK_FMUL_S, match_opcode, 0 }, -{"fdiv.s", 0, INSN_CLASS_F_INX, "D,S,T", MATCH_FDIV_S|MASK_RM, MASK_FDIV_S|MASK_RM, match_opcode, 0 }, -{"fdiv.s", 0, INSN_CLASS_F_INX, "D,S,T,m", MATCH_FDIV_S, MASK_FDIV_S, match_opcode, 0 }, -{"fsqrt.s", 0, INSN_CLASS_F_INX, "D,S", MATCH_FSQRT_S|MASK_RM, MASK_FSQRT_S|MASK_RM, match_opcode, 0 }, -{"fsqrt.s", 0, INSN_CLASS_F_INX, "D,S,m", MATCH_FSQRT_S, MASK_FSQRT_S, match_opcode, 0 }, +{"fadd.s", 0, INSN_CLASS_F_INX, "D,S,Tm", MATCH_FADD_S, MASK_FADD_S, match_opcode, 0 }, +{"fsub.s", 0, INSN_CLASS_F_INX, "D,S,Tm", MATCH_FSUB_S, MASK_FSUB_S, match_opcode, 0 }, +{"fmul.s", 0, INSN_CLASS_F_INX, "D,S,Tm", MATCH_FMUL_S, MASK_FMUL_S, match_opcode, 0 }, +{"fdiv.s", 0, INSN_CLASS_F_INX, "D,S,Tm", MATCH_FDIV_S, MASK_FDIV_S, match_opcode, 0 }, +{"fsqrt.s", 0, INSN_CLASS_F_INX, "D,Sm", MATCH_FSQRT_S, MASK_FSQRT_S, match_opcode, 0 }, {"fmin.s", 0, INSN_CLASS_F_INX, "D,S,T", MATCH_FMIN_S, MASK_FMIN_S, match_opcode, 0 }, {"fmax.s", 0, INSN_CLASS_F_INX, "D,S,T", MATCH_FMAX_S, MASK_FMAX_S, match_opcode, 0 }, -{"fmadd.s", 0, INSN_CLASS_F_INX, "D,S,T,R", MATCH_FMADD_S|MASK_RM, MASK_FMADD_S|MASK_RM, match_opcode, 0 }, -{"fmadd.s", 0, INSN_CLASS_F_INX, "D,S,T,R,m", MATCH_FMADD_S, MASK_FMADD_S, match_opcode, 0 }, -{"fnmadd.s", 0, INSN_CLASS_F_INX, "D,S,T,R", MATCH_FNMADD_S|MASK_RM, MASK_FNMADD_S|MASK_RM, match_opcode, 0 }, -{"fnmadd.s", 0, INSN_CLASS_F_INX, "D,S,T,R,m", MATCH_FNMADD_S, MASK_FNMADD_S, match_opcode, 0 }, -{"fmsub.s", 0, INSN_CLASS_F_INX, "D,S,T,R", MATCH_FMSUB_S|MASK_RM, MASK_FMSUB_S|MASK_RM, match_opcode, 0 }, -{"fmsub.s", 0, INSN_CLASS_F_INX, "D,S,T,R,m", MATCH_FMSUB_S, MASK_FMSUB_S, match_opcode, 0 }, -{"fnmsub.s", 0, INSN_CLASS_F_INX, "D,S,T,R", MATCH_FNMSUB_S|MASK_RM, MASK_FNMSUB_S|MASK_RM, match_opcode, 0 }, -{"fnmsub.s", 0, INSN_CLASS_F_INX, "D,S,T,R,m", MATCH_FNMSUB_S, MASK_FNMSUB_S, match_opcode, 0 }, -{"fcvt.w.s", 0, INSN_CLASS_F_INX, "d,S", MATCH_FCVT_W_S|MASK_RM, MASK_FCVT_W_S|MASK_RM, match_opcode, 0 }, -{"fcvt.w.s", 0, INSN_CLASS_F_INX, "d,S,m", MATCH_FCVT_W_S, MASK_FCVT_W_S, match_opcode, 0 }, -{"fcvt.wu.s", 0, INSN_CLASS_F_INX, "d,S", MATCH_FCVT_WU_S|MASK_RM, MASK_FCVT_WU_S|MASK_RM, match_opcode, 0 }, -{"fcvt.wu.s", 0, INSN_CLASS_F_INX, "d,S,m", MATCH_FCVT_WU_S, MASK_FCVT_WU_S, match_opcode, 0 }, -{"fcvt.s.w", 0, INSN_CLASS_F_INX, "D,s", MATCH_FCVT_S_W|MASK_RM, MASK_FCVT_S_W|MASK_RM, match_opcode, 0 }, -{"fcvt.s.w", 0, INSN_CLASS_F_INX, "D,s,m", MATCH_FCVT_S_W, MASK_FCVT_S_W, match_opcode, 0 }, -{"fcvt.s.wu", 0, INSN_CLASS_F_INX, "D,s", MATCH_FCVT_S_WU|MASK_RM, MASK_FCVT_S_WU|MASK_RM, match_opcode, 0 }, -{"fcvt.s.wu", 0, INSN_CLASS_F_INX, "D,s,m", MATCH_FCVT_S_WU, MASK_FCVT_S_WU, match_opcode, 0 }, +{"fmadd.s", 0, INSN_CLASS_F_INX, "D,S,T,Rm", MATCH_FMADD_S, MASK_FMADD_S, match_opcode, 0 }, +{"fnmadd.s", 0, INSN_CLASS_F_INX, "D,S,T,Rm", MATCH_FNMADD_S, MASK_FNMADD_S, match_opcode, 0 }, +{"fmsub.s", 0, INSN_CLASS_F_INX, "D,S,T,Rm", MATCH_FMSUB_S, MASK_FMSUB_S, match_opcode, 0 }, +{"fnmsub.s", 0, INSN_CLASS_F_INX, "D,S,T,Rm", MATCH_FNMSUB_S, MASK_FNMSUB_S, match_opcode, 0 }, +{"fcvt.w.s", 0, INSN_CLASS_F_INX, "d,Sm", MATCH_FCVT_W_S, MASK_FCVT_W_S, match_opcode, 0 }, +{"fcvt.wu.s", 0, INSN_CLASS_F_INX, "d,Sm", MATCH_FCVT_WU_S, MASK_FCVT_WU_S, match_opcode, 0 }, +{"fcvt.s.w", 0, INSN_CLASS_F_INX, "D,sm", MATCH_FCVT_S_W, MASK_FCVT_S_W, match_opcode, 0 }, +{"fcvt.s.wu", 0, INSN_CLASS_F_INX, "D,sm", MATCH_FCVT_S_WU, MASK_FCVT_S_WU, match_opcode, 0 }, {"fclass.s", 0, INSN_CLASS_F_INX, "d,S", MATCH_FCLASS_S, MASK_FCLASS_S, match_opcode, 0 }, {"feq.s", 0, INSN_CLASS_F_INX, "d,S,T", MATCH_FEQ_S, MASK_FEQ_S, match_opcode, 0 }, {"flt.s", 0, INSN_CLASS_F_INX, "d,S,T", MATCH_FLT_S, MASK_FLT_S, match_opcode, 0 }, {"fle.s", 0, INSN_CLASS_F_INX, "d,S,T", MATCH_FLE_S, MASK_FLE_S, match_opcode, 0 }, {"fgt.s", 0, INSN_CLASS_F_INX, "d,T,S", MATCH_FLT_S, MASK_FLT_S, match_opcode, INSN_ALIAS }, {"fge.s", 0, INSN_CLASS_F_INX, "d,T,S", MATCH_FLE_S, MASK_FLE_S, match_opcode, INSN_ALIAS }, -{"fcvt.l.s", 64, INSN_CLASS_F_INX, "d,S", MATCH_FCVT_L_S|MASK_RM, MASK_FCVT_L_S|MASK_RM, match_opcode, 0 }, -{"fcvt.l.s", 64, INSN_CLASS_F_INX, "d,S,m", MATCH_FCVT_L_S, MASK_FCVT_L_S, match_opcode, 0 }, -{"fcvt.lu.s", 64, INSN_CLASS_F_INX, "d,S", MATCH_FCVT_LU_S|MASK_RM, MASK_FCVT_LU_S|MASK_RM, match_opcode, 0 }, -{"fcvt.lu.s", 64, INSN_CLASS_F_INX, "d,S,m", MATCH_FCVT_LU_S, MASK_FCVT_LU_S, match_opcode, 0 }, -{"fcvt.s.l", 64, INSN_CLASS_F_INX, "D,s", MATCH_FCVT_S_L|MASK_RM, MASK_FCVT_S_L|MASK_RM, match_opcode, 0 }, -{"fcvt.s.l", 64, INSN_CLASS_F_INX, "D,s,m", MATCH_FCVT_S_L, MASK_FCVT_S_L, match_opcode, 0 }, -{"fcvt.s.lu", 64, INSN_CLASS_F_INX, "D,s", MATCH_FCVT_S_LU|MASK_RM, MASK_FCVT_S_LU|MASK_RM, match_opcode, 0 }, -{"fcvt.s.lu", 64, INSN_CLASS_F_INX, "D,s,m", MATCH_FCVT_S_LU, MASK_FCVT_S_LU, match_opcode, 0 }, +{"fcvt.l.s", 64, INSN_CLASS_F_INX, "d,Sm", MATCH_FCVT_L_S, MASK_FCVT_L_S, match_opcode, 0 }, +{"fcvt.lu.s", 64, INSN_CLASS_F_INX, "d,Sm", MATCH_FCVT_LU_S, MASK_FCVT_LU_S, match_opcode, 0 }, +{"fcvt.s.l", 64, INSN_CLASS_F_INX, "D,sm", MATCH_FCVT_S_L, MASK_FCVT_S_L, match_opcode, 0 }, +{"fcvt.s.lu", 64, INSN_CLASS_F_INX, "D,sm", MATCH_FCVT_S_LU, MASK_FCVT_S_LU, match_opcode, 0 }, /* Double-precision floating-point instruction subset. */ {"fld", 0, INSN_CLASS_ZCD, "D,Cn(Cc)", MATCH_C_FLDSP, MASK_C_FLDSP, match_opcode, INSN_ALIAS|INSN_DREF|INSN_8_BYTE }, @@ -1065,35 +1027,23 @@ const struct riscv_opcode riscv_opcodes[ {"fsgnj.d", 0, INSN_CLASS_D_INX, "D,S,T", MATCH_FSGNJ_D, MASK_FSGNJ_D, match_opcode, 0 }, {"fsgnjn.d", 0, INSN_CLASS_D_INX, "D,S,T", MATCH_FSGNJN_D, MASK_FSGNJN_D, match_opcode, 0 }, {"fsgnjx.d", 0, INSN_CLASS_D_INX, "D,S,T", MATCH_FSGNJX_D, MASK_FSGNJX_D, match_opcode, 0 }, -{"fadd.d", 0, INSN_CLASS_D_INX, "D,S,T", MATCH_FADD_D|MASK_RM, MASK_FADD_D|MASK_RM, match_opcode, 0 }, -{"fadd.d", 0, INSN_CLASS_D_INX, "D,S,T,m", MATCH_FADD_D, MASK_FADD_D, match_opcode, 0 }, -{"fsub.d", 0, INSN_CLASS_D_INX, "D,S,T", MATCH_FSUB_D|MASK_RM, MASK_FSUB_D|MASK_RM, match_opcode, 0 }, -{"fsub.d", 0, INSN_CLASS_D_INX, "D,S,T,m", MATCH_FSUB_D, MASK_FSUB_D, match_opcode, 0 }, -{"fmul.d", 0, INSN_CLASS_D_INX, "D,S,T", MATCH_FMUL_D|MASK_RM, MASK_FMUL_D|MASK_RM, match_opcode, 0 }, -{"fmul.d", 0, INSN_CLASS_D_INX, "D,S,T,m", MATCH_FMUL_D, MASK_FMUL_D, match_opcode, 0 }, -{"fdiv.d", 0, INSN_CLASS_D_INX, "D,S,T", MATCH_FDIV_D|MASK_RM, MASK_FDIV_D|MASK_RM, match_opcode, 0 }, -{"fdiv.d", 0, INSN_CLASS_D_INX, "D,S,T,m", MATCH_FDIV_D, MASK_FDIV_D, match_opcode, 0 }, -{"fsqrt.d", 0, INSN_CLASS_D_INX, "D,S", MATCH_FSQRT_D|MASK_RM, MASK_FSQRT_D|MASK_RM, match_opcode, 0 }, -{"fsqrt.d", 0, INSN_CLASS_D_INX, "D,S,m", MATCH_FSQRT_D, MASK_FSQRT_D, match_opcode, 0 }, +{"fadd.d", 0, INSN_CLASS_D_INX, "D,S,Tm", MATCH_FADD_D, MASK_FADD_D, match_opcode, 0 }, +{"fsub.d", 0, INSN_CLASS_D_INX, "D,S,Tm", MATCH_FSUB_D, MASK_FSUB_D, match_opcode, 0 }, +{"fmul.d", 0, INSN_CLASS_D_INX, "D,S,Tm", MATCH_FMUL_D, MASK_FMUL_D, match_opcode, 0 }, +{"fdiv.d", 0, INSN_CLASS_D_INX, "D,S,Tm", MATCH_FDIV_D, MASK_FDIV_D, match_opcode, 0 }, +{"fsqrt.d", 0, INSN_CLASS_D_INX, "D,Sm", MATCH_FSQRT_D, MASK_FSQRT_D, match_opcode, 0 }, {"fmin.d", 0, INSN_CLASS_D_INX, "D,S,T", MATCH_FMIN_D, MASK_FMIN_D, match_opcode, 0 }, {"fmax.d", 0, INSN_CLASS_D_INX, "D,S,T", MATCH_FMAX_D, MASK_FMAX_D, match_opcode, 0 }, -{"fmadd.d", 0, INSN_CLASS_D_INX, "D,S,T,R", MATCH_FMADD_D|MASK_RM, MASK_FMADD_D|MASK_RM, match_opcode, 0 }, -{"fmadd.d", 0, INSN_CLASS_D_INX, "D,S,T,R,m", MATCH_FMADD_D, MASK_FMADD_D, match_opcode, 0 }, -{"fnmadd.d", 0, INSN_CLASS_D_INX, "D,S,T,R", MATCH_FNMADD_D|MASK_RM, MASK_FNMADD_D|MASK_RM, match_opcode, 0 }, -{"fnmadd.d", 0, INSN_CLASS_D_INX, "D,S,T,R,m", MATCH_FNMADD_D, MASK_FNMADD_D, match_opcode, 0 }, -{"fmsub.d", 0, INSN_CLASS_D_INX, "D,S,T,R", MATCH_FMSUB_D|MASK_RM, MASK_FMSUB_D|MASK_RM, match_opcode, 0 }, -{"fmsub.d", 0, INSN_CLASS_D_INX, "D,S,T,R,m", MATCH_FMSUB_D, MASK_FMSUB_D, match_opcode, 0 }, -{"fnmsub.d", 0, INSN_CLASS_D_INX, "D,S,T,R", MATCH_FNMSUB_D|MASK_RM, MASK_FNMSUB_D|MASK_RM, match_opcode, 0 }, -{"fnmsub.d", 0, INSN_CLASS_D_INX, "D,S,T,R,m", MATCH_FNMSUB_D, MASK_FNMSUB_D, match_opcode, 0 }, -{"fcvt.w.d", 0, INSN_CLASS_D_INX, "d,S", MATCH_FCVT_W_D|MASK_RM, MASK_FCVT_W_D|MASK_RM, match_opcode, 0 }, -{"fcvt.w.d", 0, INSN_CLASS_D_INX, "d,S,m", MATCH_FCVT_W_D, MASK_FCVT_W_D, match_opcode, 0 }, -{"fcvt.wu.d", 0, INSN_CLASS_D_INX, "d,S", MATCH_FCVT_WU_D|MASK_RM, MASK_FCVT_WU_D|MASK_RM, match_opcode, 0 }, -{"fcvt.wu.d", 0, INSN_CLASS_D_INX, "d,S,m", MATCH_FCVT_WU_D, MASK_FCVT_WU_D, match_opcode, 0 }, +{"fmadd.d", 0, INSN_CLASS_D_INX, "D,S,T,Rm", MATCH_FMADD_D, MASK_FMADD_D, match_opcode, 0 }, +{"fnmadd.d", 0, INSN_CLASS_D_INX, "D,S,T,Rm", MATCH_FNMADD_D, MASK_FNMADD_D, match_opcode, 0 }, +{"fmsub.d", 0, INSN_CLASS_D_INX, "D,S,T,Rm", MATCH_FMSUB_D, MASK_FMSUB_D, match_opcode, 0 }, +{"fnmsub.d", 0, INSN_CLASS_D_INX, "D,S,T,Rm", MATCH_FNMSUB_D, MASK_FNMSUB_D, match_opcode, 0 }, +{"fcvt.w.d", 0, INSN_CLASS_D_INX, "d,Sm", MATCH_FCVT_W_D, MASK_FCVT_W_D, match_opcode, 0 }, +{"fcvt.wu.d", 0, INSN_CLASS_D_INX, "d,Sm", MATCH_FCVT_WU_D, MASK_FCVT_WU_D, match_opcode, 0 }, {"fcvt.d.w", 0, INSN_CLASS_D_INX, "D,s", MATCH_FCVT_D_W, MASK_FCVT_D_W|MASK_RM, match_opcode, 0 }, {"fcvt.d.wu", 0, INSN_CLASS_D_INX, "D,s", MATCH_FCVT_D_WU, MASK_FCVT_D_WU|MASK_RM, match_opcode, 0 }, {"fcvt.d.s", 0, INSN_CLASS_D_INX, "D,S", MATCH_FCVT_D_S, MASK_FCVT_D_S|MASK_RM, match_opcode, 0 }, -{"fcvt.s.d", 0, INSN_CLASS_D_INX, "D,S", MATCH_FCVT_S_D|MASK_RM, MASK_FCVT_S_D|MASK_RM, match_opcode, 0 }, -{"fcvt.s.d", 0, INSN_CLASS_D_INX, "D,S,m", MATCH_FCVT_S_D, MASK_FCVT_S_D, match_opcode, 0 }, +{"fcvt.s.d", 0, INSN_CLASS_D_INX, "D,Sm", MATCH_FCVT_S_D, MASK_FCVT_S_D, match_opcode, 0 }, {"fclass.d", 0, INSN_CLASS_D_INX, "d,S", MATCH_FCLASS_D, MASK_FCLASS_D, match_opcode, 0 }, {"feq.d", 0, INSN_CLASS_D_INX, "d,S,T", MATCH_FEQ_D, MASK_FEQ_D, match_opcode, 0 }, {"flt.d", 0, INSN_CLASS_D_INX, "d,S,T", MATCH_FLT_D, MASK_FLT_D, match_opcode, 0 }, @@ -1102,14 +1052,10 @@ const struct riscv_opcode riscv_opcodes[ {"fge.d", 0, INSN_CLASS_D_INX, "d,T,S", MATCH_FLE_D, MASK_FLE_D, match_opcode, INSN_ALIAS }, {"fmv.x.d", 64, INSN_CLASS_D, "d,S", MATCH_FMV_X_D, MASK_FMV_X_D, match_opcode, 0 }, {"fmv.d.x", 64, INSN_CLASS_D, "D,s", MATCH_FMV_D_X, MASK_FMV_D_X, match_opcode, 0 }, -{"fcvt.l.d", 64, INSN_CLASS_D_INX, "d,S", MATCH_FCVT_L_D|MASK_RM, MASK_FCVT_L_D|MASK_RM, match_opcode, 0 }, -{"fcvt.l.d", 64, INSN_CLASS_D_INX, "d,S,m", MATCH_FCVT_L_D, MASK_FCVT_L_D, match_opcode, 0 }, -{"fcvt.lu.d", 64, INSN_CLASS_D_INX, "d,S", MATCH_FCVT_LU_D|MASK_RM, MASK_FCVT_LU_D|MASK_RM, match_opcode, 0 }, -{"fcvt.lu.d", 64, INSN_CLASS_D_INX, "d,S,m", MATCH_FCVT_LU_D, MASK_FCVT_LU_D, match_opcode, 0 }, -{"fcvt.d.l", 64, INSN_CLASS_D_INX, "D,s", MATCH_FCVT_D_L|MASK_RM, MASK_FCVT_D_L|MASK_RM, match_opcode, 0 }, -{"fcvt.d.l", 64, INSN_CLASS_D_INX, "D,s,m", MATCH_FCVT_D_L, MASK_FCVT_D_L, match_opcode, 0 }, -{"fcvt.d.lu", 64, INSN_CLASS_D_INX, "D,s", MATCH_FCVT_D_LU|MASK_RM, MASK_FCVT_D_LU|MASK_RM, match_opcode, 0 }, -{"fcvt.d.lu", 64, INSN_CLASS_D_INX, "D,s,m", MATCH_FCVT_D_LU, MASK_FCVT_D_LU, match_opcode, 0 }, +{"fcvt.l.d", 64, INSN_CLASS_D_INX, "d,Sm", MATCH_FCVT_L_D, MASK_FCVT_L_D, match_opcode, 0 }, +{"fcvt.lu.d", 64, INSN_CLASS_D_INX, "d,Sm", MATCH_FCVT_LU_D, MASK_FCVT_LU_D, match_opcode, 0 }, +{"fcvt.d.l", 64, INSN_CLASS_D_INX, "D,sm", MATCH_FCVT_D_L, MASK_FCVT_D_L, match_opcode, 0 }, +{"fcvt.d.lu", 64, INSN_CLASS_D_INX, "D,sm", MATCH_FCVT_D_LU, MASK_FCVT_D_LU, match_opcode, 0 }, /* Quad-precision floating-point instruction subset. */ {"flq", 0, INSN_CLASS_Q, "D,o(s)", MATCH_FLQ, MASK_FLQ, match_opcode, INSN_DREF|INSN_16_BYTE }, @@ -1122,48 +1068,33 @@ const struct riscv_opcode riscv_opcodes[ {"fsgnj.q", 0, INSN_CLASS_Q_INX, "D,S,T", MATCH_FSGNJ_Q, MASK_FSGNJ_Q, match_opcode, 0 }, {"fsgnjn.q", 0, INSN_CLASS_Q_INX, "D,S,T", MATCH_FSGNJN_Q, MASK_FSGNJN_Q, match_opcode, 0 }, {"fsgnjx.q", 0, INSN_CLASS_Q_INX, "D,S,T", MATCH_FSGNJX_Q, MASK_FSGNJX_Q, match_opcode, 0 }, -{"fadd.q", 0, INSN_CLASS_Q_INX, "D,S,T", MATCH_FADD_Q|MASK_RM, MASK_FADD_Q|MASK_RM, match_opcode, 0 }, -{"fadd.q", 0, INSN_CLASS_Q_INX, "D,S,T,m", MATCH_FADD_Q, MASK_FADD_Q, match_opcode, 0 }, -{"fsub.q", 0, INSN_CLASS_Q_INX, "D,S,T", MATCH_FSUB_Q|MASK_RM, MASK_FSUB_Q|MASK_RM, match_opcode, 0 }, -{"fsub.q", 0, INSN_CLASS_Q_INX, "D,S,T,m", MATCH_FSUB_Q, MASK_FSUB_Q, match_opcode, 0 }, -{"fmul.q", 0, INSN_CLASS_Q_INX, "D,S,T", MATCH_FMUL_Q|MASK_RM, MASK_FMUL_Q|MASK_RM, match_opcode, 0 }, -{"fmul.q", 0, INSN_CLASS_Q_INX, "D,S,T,m", MATCH_FMUL_Q, MASK_FMUL_Q, match_opcode, 0 }, -{"fdiv.q", 0, INSN_CLASS_Q_INX, "D,S,T", MATCH_FDIV_Q|MASK_RM, MASK_FDIV_Q|MASK_RM, match_opcode, 0 }, -{"fdiv.q", 0, INSN_CLASS_Q_INX, "D,S,T,m", MATCH_FDIV_Q, MASK_FDIV_Q, match_opcode, 0 }, -{"fsqrt.q", 0, INSN_CLASS_Q_INX, "D,S", MATCH_FSQRT_Q|MASK_RM, MASK_FSQRT_Q|MASK_RM, match_opcode, 0 }, -{"fsqrt.q", 0, INSN_CLASS_Q_INX, "D,S,m", MATCH_FSQRT_Q, MASK_FSQRT_Q, match_opcode, 0 }, +{"fadd.q", 0, INSN_CLASS_Q_INX, "D,S,Tm", MATCH_FADD_Q, MASK_FADD_Q, match_opcode, 0 }, +{"fsub.q", 0, INSN_CLASS_Q_INX, "D,S,Tm", MATCH_FSUB_Q, MASK_FSUB_Q, match_opcode, 0 }, +{"fmul.q", 0, INSN_CLASS_Q_INX, "D,S,Tm", MATCH_FMUL_Q, MASK_FMUL_Q, match_opcode, 0 }, +{"fdiv.q", 0, INSN_CLASS_Q_INX, "D,S,Tm", MATCH_FDIV_Q, MASK_FDIV_Q, match_opcode, 0 }, +{"fsqrt.q", 0, INSN_CLASS_Q_INX, "D,Sm", MATCH_FSQRT_Q, MASK_FSQRT_Q, match_opcode, 0 }, {"fmin.q", 0, INSN_CLASS_Q_INX, "D,S,T", MATCH_FMIN_Q, MASK_FMIN_Q, match_opcode, 0 }, {"fmax.q", 0, INSN_CLASS_Q_INX, "D,S,T", MATCH_FMAX_Q, MASK_FMAX_Q, match_opcode, 0 }, -{"fmadd.q", 0, INSN_CLASS_Q_INX, "D,S,T,R", MATCH_FMADD_Q|MASK_RM, MASK_FMADD_Q|MASK_RM, match_opcode, 0 }, -{"fmadd.q", 0, INSN_CLASS_Q_INX, "D,S,T,R,m", MATCH_FMADD_Q, MASK_FMADD_Q, match_opcode, 0 }, -{"fnmadd.q", 0, INSN_CLASS_Q_INX, "D,S,T,R", MATCH_FNMADD_Q|MASK_RM, MASK_FNMADD_Q|MASK_RM, match_opcode, 0 }, -{"fnmadd.q", 0, INSN_CLASS_Q_INX, "D,S,T,R,m", MATCH_FNMADD_Q, MASK_FNMADD_Q, match_opcode, 0 }, -{"fmsub.q", 0, INSN_CLASS_Q_INX, "D,S,T,R", MATCH_FMSUB_Q|MASK_RM, MASK_FMSUB_Q|MASK_RM, match_opcode, 0 }, -{"fmsub.q", 0, INSN_CLASS_Q_INX, "D,S,T,R,m", MATCH_FMSUB_Q, MASK_FMSUB_Q, match_opcode, 0 }, -{"fnmsub.q", 0, INSN_CLASS_Q_INX, "D,S,T,R", MATCH_FNMSUB_Q|MASK_RM, MASK_FNMSUB_Q|MASK_RM, match_opcode, 0 }, -{"fnmsub.q", 0, INSN_CLASS_Q_INX, "D,S,T,R,m", MATCH_FNMSUB_Q, MASK_FNMSUB_Q, match_opcode, 0 }, -{"fcvt.w.q", 0, INSN_CLASS_Q_INX, "d,S", MATCH_FCVT_W_Q|MASK_RM, MASK_FCVT_W_Q|MASK_RM, match_opcode, 0 }, -{"fcvt.w.q", 0, INSN_CLASS_Q_INX, "d,S,m", MATCH_FCVT_W_Q, MASK_FCVT_W_Q, match_opcode, 0 }, -{"fcvt.wu.q", 0, INSN_CLASS_Q_INX, "d,S", MATCH_FCVT_WU_Q|MASK_RM, MASK_FCVT_WU_Q|MASK_RM, match_opcode, 0 }, -{"fcvt.wu.q", 0, INSN_CLASS_Q_INX, "d,S,m", MATCH_FCVT_WU_Q, MASK_FCVT_WU_Q, match_opcode, 0 }, +{"fmadd.q", 0, INSN_CLASS_Q_INX, "D,S,T,Rm", MATCH_FMADD_Q, MASK_FMADD_Q, match_opcode, 0 }, +{"fnmadd.q", 0, INSN_CLASS_Q_INX, "D,S,T,Rm", MATCH_FNMADD_Q, MASK_FNMADD_Q, match_opcode, 0 }, +{"fmsub.q", 0, INSN_CLASS_Q_INX, "D,S,T,Rm", MATCH_FMSUB_Q, MASK_FMSUB_Q, match_opcode, 0 }, +{"fnmsub.q", 0, INSN_CLASS_Q_INX, "D,S,T,Rm", MATCH_FNMSUB_Q, MASK_FNMSUB_Q, match_opcode, 0 }, +{"fcvt.w.q", 0, INSN_CLASS_Q_INX, "d,Sm", MATCH_FCVT_W_Q, MASK_FCVT_W_Q, match_opcode, 0 }, +{"fcvt.wu.q", 0, INSN_CLASS_Q_INX, "d,Sm", MATCH_FCVT_WU_Q, MASK_FCVT_WU_Q, match_opcode, 0 }, {"fcvt.q.w", 0, INSN_CLASS_Q_INX, "D,s", MATCH_FCVT_Q_W, MASK_FCVT_Q_W|MASK_RM, match_opcode, 0 }, {"fcvt.q.wu", 0, INSN_CLASS_Q_INX, "D,s", MATCH_FCVT_Q_WU, MASK_FCVT_Q_WU|MASK_RM, match_opcode, 0 }, {"fcvt.q.s", 0, INSN_CLASS_Q_INX, "D,S", MATCH_FCVT_Q_S, MASK_FCVT_Q_S|MASK_RM, match_opcode, 0 }, {"fcvt.q.d", 0, INSN_CLASS_Q_INX, "D,S", MATCH_FCVT_Q_D, MASK_FCVT_Q_D|MASK_RM, match_opcode, 0 }, -{"fcvt.s.q", 0, INSN_CLASS_Q_INX, "D,S", MATCH_FCVT_S_Q|MASK_RM, MASK_FCVT_S_Q|MASK_RM, match_opcode, 0 }, -{"fcvt.s.q", 0, INSN_CLASS_Q_INX, "D,S,m", MATCH_FCVT_S_Q, MASK_FCVT_S_Q, match_opcode, 0 }, -{"fcvt.d.q", 0, INSN_CLASS_Q_INX, "D,S", MATCH_FCVT_D_Q|MASK_RM, MASK_FCVT_D_Q|MASK_RM, match_opcode, 0 }, -{"fcvt.d.q", 0, INSN_CLASS_Q_INX, "D,S,m", MATCH_FCVT_D_Q, MASK_FCVT_D_Q, match_opcode, 0 }, +{"fcvt.s.q", 0, INSN_CLASS_Q_INX, "D,Sm", MATCH_FCVT_S_Q, MASK_FCVT_S_Q, match_opcode, 0 }, +{"fcvt.d.q", 0, INSN_CLASS_Q_INX, "D,Sm", MATCH_FCVT_D_Q, MASK_FCVT_D_Q, match_opcode, 0 }, {"fclass.q", 0, INSN_CLASS_Q_INX, "d,S", MATCH_FCLASS_Q, MASK_FCLASS_Q, match_opcode, 0 }, {"feq.q", 0, INSN_CLASS_Q_INX, "d,S,T", MATCH_FEQ_Q, MASK_FEQ_Q, match_opcode, 0 }, {"flt.q", 0, INSN_CLASS_Q_INX, "d,S,T", MATCH_FLT_Q, MASK_FLT_Q, match_opcode, 0 }, {"fle.q", 0, INSN_CLASS_Q_INX, "d,S,T", MATCH_FLE_Q, MASK_FLE_Q, match_opcode, 0 }, {"fgt.q", 0, INSN_CLASS_Q_INX, "d,T,S", MATCH_FLT_Q, MASK_FLT_Q, match_opcode, INSN_ALIAS }, {"fge.q", 0, INSN_CLASS_Q_INX, "d,T,S", MATCH_FLE_Q, MASK_FLE_Q, match_opcode, INSN_ALIAS }, -{"fcvt.l.q", 64, INSN_CLASS_Q_INX, "d,S", MATCH_FCVT_L_Q|MASK_RM, MASK_FCVT_L_Q|MASK_RM, match_opcode, 0 }, -{"fcvt.l.q", 64, INSN_CLASS_Q_INX, "d,S,m", MATCH_FCVT_L_Q, MASK_FCVT_L_Q, match_opcode, 0 }, -{"fcvt.lu.q", 64, INSN_CLASS_Q_INX, "d,S", MATCH_FCVT_LU_Q|MASK_RM, MASK_FCVT_LU_Q|MASK_RM, match_opcode, 0 }, -{"fcvt.lu.q", 64, INSN_CLASS_Q_INX, "d,S,m", MATCH_FCVT_LU_Q, MASK_FCVT_LU_Q, match_opcode, 0 }, +{"fcvt.l.q", 64, INSN_CLASS_Q_INX, "d,Sm", MATCH_FCVT_L_Q, MASK_FCVT_L_Q, match_opcode, 0 }, +{"fcvt.lu.q", 64, INSN_CLASS_Q_INX, "d,Sm", MATCH_FCVT_LU_Q, MASK_FCVT_LU_Q, match_opcode, 0 }, {"fcvt.q.l", 64, INSN_CLASS_Q_INX, "D,s", MATCH_FCVT_Q_L, MASK_FCVT_Q_L|MASK_RM, match_opcode, 0 }, {"fcvt.q.lu", 64, INSN_CLASS_Q_INX, "D,s", MATCH_FCVT_Q_LU, MASK_FCVT_Q_LU|MASK_RM, match_opcode, 0 }, @@ -1306,23 +1237,15 @@ const struct riscv_opcode riscv_opcodes[ {"fmaxm.q", 0, INSN_CLASS_Q_AND_ZFA, "D,S,T", MATCH_FMAXM_Q, MASK_FMAXM_Q, match_opcode, 0 }, {"fminm.h", 0, INSN_CLASS_ZFH_AND_ZFA, "D,S,T", MATCH_FMINM_H, MASK_FMINM_H, match_opcode, 0 }, {"fmaxm.h", 0, INSN_CLASS_ZFH_AND_ZFA, "D,S,T", MATCH_FMAXM_H, MASK_FMAXM_H, match_opcode, 0 }, -{"fround.s", 0, INSN_CLASS_ZFA, "D,S", MATCH_FROUND_S|MASK_RM, MASK_FROUND_S|MASK_RM, match_opcode, 0 }, -{"fround.s", 0, INSN_CLASS_ZFA, "D,S,m", MATCH_FROUND_S, MASK_FROUND_S, match_opcode, 0 }, -{"froundnx.s", 0, INSN_CLASS_ZFA, "D,S", MATCH_FROUNDNX_S|MASK_RM, MASK_FROUNDNX_S|MASK_RM, match_opcode, 0 }, -{"froundnx.s", 0, INSN_CLASS_ZFA, "D,S,m", MATCH_FROUNDNX_S, MASK_FROUNDNX_S, match_opcode, 0 }, -{"fround.d", 0, INSN_CLASS_D_AND_ZFA, "D,S", MATCH_FROUND_D|MASK_RM, MASK_FROUND_D|MASK_RM, match_opcode, 0 }, -{"fround.d", 0, INSN_CLASS_D_AND_ZFA, "D,S,m", MATCH_FROUND_D, MASK_FROUND_D, match_opcode, 0 }, -{"froundnx.d", 0, INSN_CLASS_D_AND_ZFA, "D,S", MATCH_FROUNDNX_D|MASK_RM, MASK_FROUNDNX_D|MASK_RM, match_opcode, 0 }, -{"froundnx.d", 0, INSN_CLASS_D_AND_ZFA, "D,S,m", MATCH_FROUNDNX_D, MASK_FROUNDNX_D, match_opcode, 0 }, -{"fround.q", 0, INSN_CLASS_Q_AND_ZFA, "D,S", MATCH_FROUND_Q|MASK_RM, MASK_FROUND_Q|MASK_RM, match_opcode, 0 }, -{"fround.q", 0, INSN_CLASS_Q_AND_ZFA, "D,S,m", MATCH_FROUND_Q, MASK_FROUND_Q, match_opcode, 0 }, -{"froundnx.q", 0, INSN_CLASS_Q_AND_ZFA, "D,S", MATCH_FROUNDNX_Q|MASK_RM, MASK_FROUNDNX_Q|MASK_RM, match_opcode, 0 }, -{"froundnx.q", 0, INSN_CLASS_Q_AND_ZFA, "D,S,m", MATCH_FROUNDNX_Q, MASK_FROUNDNX_Q, match_opcode, 0 }, -{"fround.h", 0, INSN_CLASS_ZFH_AND_ZFA, "D,S", MATCH_FROUND_H|MASK_RM, MASK_FROUND_H|MASK_RM, match_opcode, 0 }, -{"fround.h", 0, INSN_CLASS_ZFH_AND_ZFA, "D,S,m", MATCH_FROUND_H, MASK_FROUND_H, match_opcode, 0 }, -{"froundnx.h", 0, INSN_CLASS_ZFH_AND_ZFA, "D,S", MATCH_FROUNDNX_H|MASK_RM, MASK_FROUNDNX_H|MASK_RM, match_opcode, 0 }, -{"froundnx.h", 0, INSN_CLASS_ZFH_AND_ZFA, "D,S,m", MATCH_FROUNDNX_H, MASK_FROUNDNX_H, match_opcode, 0 }, -{"fcvtmod.w.d", 0, INSN_CLASS_D_AND_ZFA, "d,S,m", MATCH_FCVTMOD_W_D, MASK_FCVTMOD_W_D, match_opcode, 0 }, +{"fround.s", 0, INSN_CLASS_ZFA, "D,Sm", MATCH_FROUND_S, MASK_FROUND_S, match_opcode, 0 }, +{"froundnx.s", 0, INSN_CLASS_ZFA, "D,Sm", MATCH_FROUNDNX_S, MASK_FROUNDNX_S, match_opcode, 0 }, +{"fround.d", 0, INSN_CLASS_D_AND_ZFA, "D,Sm", MATCH_FROUND_D, MASK_FROUND_D, match_opcode, 0 }, +{"froundnx.d", 0, INSN_CLASS_D_AND_ZFA, "D,Sm", MATCH_FROUNDNX_D, MASK_FROUNDNX_D, match_opcode, 0 }, +{"fround.q", 0, INSN_CLASS_Q_AND_ZFA, "D,Sm", MATCH_FROUND_Q, MASK_FROUND_Q, match_opcode, 0 }, +{"froundnx.q", 0, INSN_CLASS_Q_AND_ZFA, "D,Sm", MATCH_FROUNDNX_Q, MASK_FROUNDNX_Q, match_opcode, 0 }, +{"fround.h", 0, INSN_CLASS_ZFH_AND_ZFA, "D,Sm", MATCH_FROUND_H, MASK_FROUND_H, match_opcode, 0 }, +{"froundnx.h", 0, INSN_CLASS_ZFH_AND_ZFA, "D,Sm", MATCH_FROUNDNX_H, MASK_FROUNDNX_H, match_opcode, 0 }, +{"fcvtmod.w.d", 0, INSN_CLASS_D_AND_ZFA, "d,S,M", MATCH_FCVTMOD_W_D, MASK_FCVTMOD_W_D, match_opcode, 0 }, {"fmvh.x.d", 32, INSN_CLASS_D_AND_ZFA, "d,S", MATCH_FMVH_X_D, MASK_FMVH_X_D, match_opcode, 0 }, {"fmvp.d.x", 32, INSN_CLASS_D_AND_ZFA, "D,s,t", MATCH_FMVP_D_X, MASK_FMVP_D_X, match_opcode, 0 }, {"fmvh.x.q", 64, INSN_CLASS_Q_AND_ZFA, "d,S", MATCH_FMVH_X_Q, MASK_FMVH_X_Q, match_opcode, 0 }, From patchwork Tue Apr 21 11:53:29 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Beulich X-Patchwork-Id: 133467 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from vm01.sourceware.org (localhost [127.0.0.1]) by sourceware.org (Postfix) with ESMTP id 15A3A4BAD167 for ; Tue, 21 Apr 2026 11:55:37 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 15A3A4BAD167 Authentication-Results: sourceware.org; dkim=pass (2048-bit key, unprotected) header.d=suse.com header.i=@suse.com header.a=rsa-sha256 header.s=google header.b=PTbFUEQY X-Original-To: binutils@sourceware.org Delivered-To: binutils@sourceware.org Received: from mail-wm1-x335.google.com (mail-wm1-x335.google.com [IPv6:2a00:1450:4864:20::335]) by sourceware.org (Postfix) with ESMTPS id E53BB4B9DB5F for ; Tue, 21 Apr 2026 11:53:31 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org E53BB4B9DB5F Authentication-Results: sourceware.org; dmarc=pass (p=quarantine dis=none) header.from=suse.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=suse.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org E53BB4B9DB5F Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2a00:1450:4864:20::335 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1776772412; cv=none; b=Qb3RbyGNKHetYRrmIvfSv4qTlCvBemFspNvbcARPuiIXZWjXtnOF+6yA6Wugs4rRYXC6yuSJAIXI8CH13gb5VGTMOlaZu5bxPkJfbfsZSRJYZ3xtQp0Enz+cbWRy/IuBqxcvHQGNW52YmzJ5q0RYEEKYTJqJvvC8PzH5eC7J0pw= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1776772412; c=relaxed/simple; bh=NFNy1YcSqVKWzMtfRHPrl+9hcchweUigaQytBtKJBW8=; h=DKIM-Signature:Message-ID:Date:MIME-Version:Subject:From:To; b=baj44m+ErlZCsoZ09l/N4Fx7OBF8SCkuxvmCH4k7WvsakPIU44oSpbNn8qid42euisFRvkhH9IJwbN8tpjaAswt6INbZD3N/CkK9UGo4747lFGRed0Ml57MxdYKrCKe+lxhUP8uUVLC5jklWV9un2fZNvPPpC4JU5hr9GCLu23w= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org E53BB4B9DB5F Received: by mail-wm1-x335.google.com with SMTP id 5b1f17b1804b1-4891cd41959so21891005e9.3 for ; Tue, 21 Apr 2026 04:53:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=google; t=1776772411; x=1777377211; darn=sourceware.org; h=content-transfer-encoding:in-reply-to:autocrypt:content-language :references:cc:to:from:subject:user-agent:mime-version:date :message-id:from:to:cc:subject:date:message-id:reply-to; bh=+n0y0+HL8qwH82ydKx5zsV31tEsXuNexqdsWdzI4blo=; b=PTbFUEQYXX7Mgqn/jmAkVSMWevWoFpjZXCnqOnZox80xslggtUAZn3EEwne3Lglh6s fmqMhHDu5kQVeIYhvJsHgVGDttdAVZzPyR780dGcPIhDP4e2kZAIdZPX4wIOxjnYdrXC VdGOovnmo92Ql0Zlq5QbhsTzsaszEuxTncJvOn1XkDXheM29eZdiDUZqrzGiBTtpHEtd wUSCxn+xxDXdY16022BP/uTJdVN3z2/qTxY6wFbf8igj8r6eqoBYWoLVjP2DpXlRGjx2 IiTWdr+FA7UNsR3/mNcl8Vhip1qmQn2d6EAxw0FPXUUZ1dmbqYN8d/Qm/GVUg3N/rZhU 54jw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776772411; x=1777377211; h=content-transfer-encoding:in-reply-to:autocrypt:content-language :references:cc:to:from:subject:user-agent:mime-version:date :message-id:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=+n0y0+HL8qwH82ydKx5zsV31tEsXuNexqdsWdzI4blo=; b=N6u362rQxScdgH2eYo2o4zls3eMjP4Ay5SE1dMjJRPp3GevS7F3t/yLyZNANBoHpM4 g6m0hOtI4zUcO1Xiqmi7wBvwnOF5IEk1Mh4heOwxO2uuoQARSK6Nwdbh+oKoOEff+KVR BFwZZ9i5A+q3yye2Inc9OeZA3suOpI31BmTU0PtoQnUVg3aEy4U8j2H0XZrMq6WGHj9E gaPUQoxJilFIaUIJS49MRG7ysIbItyPBee2+/5FGXC/mQMxDBxLuCGaVtJ9Ezru431e9 MCw3alh85TIlozI9QSgDpbi/k91duUDEDq2DoqQEAsc9KR1+Y16gYkaGCQBgOGxckJeP b7RA== X-Gm-Message-State: AOJu0YwethCcxfBP03tLXvnyOL3mBHt0iPeldD9fYPjEYFEVegko141D G07HYn7SAwCXYGzT1jV3IpTw74ZBQxrnX7OXnNoC3PL5vBJOwDh3PRUp0/LnojCBnJWHZwGkkhE 7s7Dr3Q== X-Gm-Gg: AeBDieuqT29qd7cbtffl1tpB8XgxO9SFFW5rChB7V4dOx7LHCx4ua4YJRe1jjhbF4eS 01CHPndEOw32i8S3/nztQ+FSWIhHezqs3/nlqlQU0/lJ0/5wxFaQLyjScR7AVc6aXl7b9lffXUI WcyAhKaWhmYo2HgPr9W/kzSUGNSgIDZ2ZZDAsg4K+vOC0p75rUkPQ5P7xhIpmRq+7rHFNBE6fOn fUDbq7Uw2CfaVk01kQcbTtN4Wh5gg9VtxnrCF9/oKiIXL1MF2oCX4C2aC51hpsJeYX1r40N7OUv dhg3cc1Aexl6EznWwf0QiH1kz1QdrfrJczG9H+8jPSn4goTaOzci5l2BfwMz5fcN7DLRwNPM/v+ AbGaqBZ7zVgkStfIDp57BHs89jhK7AON2oyz+wC4CnqJ7uTCTxAWhaHGzxQa9a/vPSwThbUmzdY Y9RfF4mDGulQpZ2MxAyZ/7iEo1AW8jIdZqeLINI2PlmPpSLmIJt3/zyX/pEpQ2LrbN1elWANPBs EL69b7hKwhDR87NuBs97LwAPbE6JOh491Fl X-Received: by 2002:a05:600c:548c:b0:48a:568f:ae6b with SMTP id 5b1f17b1804b1-48a568fafcbmr29256805e9.7.1776772410513; Tue, 21 Apr 2026 04:53:30 -0700 (PDT) Received: from [10.156.60.236] (ip-037-024-206-209.um08.pools.vodafone-ip.de. [37.24.206.209]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-488fc177dafsm450427655e9.4.2026.04.21.04.53.30 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 21 Apr 2026 04:53:30 -0700 (PDT) Message-ID: Date: Tue, 21 Apr 2026 13:53:29 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: [PATCH 10/19] RISC-V: check operands for Zdinx in RV32 From: Jan Beulich To: Binutils Cc: Palmer Dabbelt , Andrew Waterman , Jim Wilson , Nelson Chu References: <620231e0-67d0-4bd0-b593-38f32b01a6d8@suse.com> Content-Language: en-US Autocrypt: addr=jbeulich@suse.com; keydata= xsDiBFk3nEQRBADAEaSw6zC/EJkiwGPXbWtPxl2xCdSoeepS07jW8UgcHNurfHvUzogEq5xk hu507c3BarVjyWCJOylMNR98Yd8VqD9UfmX0Hb8/BrA+Hl6/DB/eqGptrf4BSRwcZQM32aZK 7Pj2XbGWIUrZrd70x1eAP9QE3P79Y2oLrsCgbZJfEwCgvz9JjGmQqQkRiTVzlZVCJYcyGGsD /0tbFCzD2h20ahe8rC1gbb3K3qk+LpBtvjBu1RY9drYk0NymiGbJWZgab6t1jM7sk2vuf0Py O9Hf9XBmK0uE9IgMaiCpc32XV9oASz6UJebwkX+zF2jG5I1BfnO9g7KlotcA/v5ClMjgo6Gl MDY4HxoSRu3i1cqqSDtVlt+AOVBJBACrZcnHAUSuCXBPy0jOlBhxPqRWv6ND4c9PH1xjQ3NP nxJuMBS8rnNg22uyfAgmBKNLpLgAGVRMZGaGoJObGf72s6TeIqKJo/LtggAS9qAUiuKVnygo 3wjfkS9A3DRO+SpU7JqWdsveeIQyeyEJ/8PTowmSQLakF+3fote9ybzd880fSmFuIEJldWxp Y2ggPGpiZXVsaWNoQHN1c2UuY29tPsJgBBMRAgAgBQJZN5xEAhsDBgsJCAcDAgQVAggDBBYC AwECHgECF4AACgkQoDSui/t3IH4J+wCfQ5jHdEjCRHj23O/5ttg9r9OIruwAn3103WUITZee e7Sbg12UgcQ5lv7SzsFNBFk3nEQQCACCuTjCjFOUdi5Nm244F+78kLghRcin/awv+IrTcIWF hUpSs1Y91iQQ7KItirz5uwCPlwejSJDQJLIS+QtJHaXDXeV6NI0Uef1hP20+y8qydDiVkv6l IreXjTb7DvksRgJNvCkWtYnlS3mYvQ9NzS9PhyALWbXnH6sIJd2O9lKS1Mrfq+y0IXCP10eS FFGg+Av3IQeFatkJAyju0PPthyTqxSI4lZYuJVPknzgaeuJv/2NccrPvmeDg6Coe7ZIeQ8Yj t0ARxu2xytAkkLCel1Lz1WLmwLstV30g80nkgZf/wr+/BXJW/oIvRlonUkxv+IbBM3dX2OV8 AmRv1ySWPTP7AAMFB/9PQK/VtlNUJvg8GXj9ootzrteGfVZVVT4XBJkfwBcpC/XcPzldjv+3 HYudvpdNK3lLujXeA5fLOH+Z/G9WBc5pFVSMocI71I8bT8lIAzreg0WvkWg5V2WZsUMlnDL9 mpwIGFhlbM3gfDMs7MPMu8YQRFVdUvtSpaAs8OFfGQ0ia3LGZcjA6Ik2+xcqscEJzNH+qh8V m5jjp28yZgaqTaRbg3M/+MTbMpicpZuqF4rnB0AQD12/3BNWDR6bmh+EkYSMcEIpQmBM51qM EKYTQGybRCjpnKHGOxG0rfFY1085mBDZCH5Kx0cl0HVJuQKC+dV2ZY5AqjcKwAxpE75MLFkr wkkEGBECAAkFAlk3nEQCGwwACgkQoDSui/t3IH7nnwCfcJWUDUFKdCsBH/E5d+0ZnMQi+G0A nAuWpQkjM1ASeQwSHEeAWPgskBQL In-Reply-To: <620231e0-67d0-4bd0-b593-38f32b01a6d8@suse.com> X-Spam-Status: No, score=-3016.5 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_NONE, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on sourceware.org X-BeenThere: binutils@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Binutils mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: binutils-bounces~patchwork=sourceware.org@sourceware.org Like for Zilsd, register pair operands are required to be encoded with the low bit clear. Since match functions don't have XLEN available, introduce respective flags, to be used explicitly in assembler and disassembler. --- What about Zqinx? There's no formal spec for that extension afaics. For RV64, does that behave like Zdinx for RV32? For RV32, does it require register numbers to be divisible by 4? Or is it not a thing there in the first place? No similar checking is easily possible for scalar vector insns, as element width there isn't encoded in the insn. (Plus V and Zdinx can't be enabled together right now anyway.) We could further use RV32_EVEN_CHECK for Zilsd as well, then allowing to eliminate one or two match functions. (Hence RV32_EVEN_CHECK()'s scope is pretty wide.) --- a/gas/config/tc-riscv.c +++ b/gas/config/tc-riscv.c @@ -2908,6 +2908,12 @@ riscv_ip (char *str, struct riscv_cl_ins *imm_reloc = BFD_RELOC_UNUSED; p = percent_op_null; +#define RV32_EVEN_CHECK(form, rclass, regno) \ + (!(ip->insn_mo->pinfo & INSN_RV32_EVEN_##form) \ + || xlen != 32 \ + || (rclass) != RCLASS_GPR \ + || !((regno) & 1)) + for (oparg = insn->args;; ++oparg) { opargStart = oparg; @@ -2915,6 +2921,8 @@ riscv_ip (char *str, struct riscv_cl_ins ++asarg; switch (*oparg) { + enum reg_class rclass; + case '\0': /* End of args. */ if (insn->match_func && !insn->match_func (insn, ip->insn_opcode)) break; @@ -3554,32 +3562,40 @@ riscv_ip (char *str, struct riscv_cl_ins case 'T': /* Floating point RS2. */ case 'U': /* Floating point RS1 and RS2. */ case 'R': /* Floating point RS3. */ - if (reg_lookup (&asarg, - (riscv_subset_supports (&riscv_rps_as, "zfinx") - ? RCLASS_GPR : RCLASS_FPR), ®no)) + rclass = riscv_subset_supports (&riscv_rps_as, "zfinx") + ? RCLASS_GPR : RCLASS_FPR; + if (reg_lookup (&asarg, rclass, ®no)) { char c = *oparg; if (is_whitespace (*asarg)) ++asarg; + switch (c) { case 'D': + if (!RV32_EVEN_CHECK (D, rclass, regno)) + break; INSERT_OPERAND (RD, *ip, regno); - break; + continue; case 'S': + if (!RV32_EVEN_CHECK (S, rclass, regno)) + break; INSERT_OPERAND (RS1, *ip, regno); - break; + continue; case 'U': INSERT_OPERAND (RS1, *ip, regno); /* Fall through. */ case 'T': + if (!RV32_EVEN_CHECK (T, rclass, regno)) + break; INSERT_OPERAND (RS2, *ip, regno); - break; + continue; case 'R': + if (!RV32_EVEN_CHECK (R, rclass, regno)) + break; INSERT_OPERAND (RS3, *ip, regno); - break; + continue; } - continue; } break; @@ -4282,6 +4298,8 @@ riscv_ip (char *str, struct riscv_cl_ins insn_with_csr = false; } +#undef RV32_EVEN_CHECK + out: /* Restore the character we might have clobbered above. */ if (save_c) --- /dev/null +++ b/gas/testsuite/gas/riscv/zdinx-rv32.d @@ -0,0 +1,52 @@ +#as: -march=rv32i_zdinx +#objdump: -dwr + +.*:[ ]+file format .* + +Disassembly of section .text: + +0+000 : +[ ]+[0-9a-f]+:[ ]+02e67553[ ]+fadd\.d[ ]+a0,a2,a4 +[ ]+[0-9a-f]+:[ ]+02e60553[ ]+fadd\.d[ ]+a0,a2,a4,rne +[ ]+[0-9a-f]+:[ ]+0ae67553[ ]+fsub\.d[ ]+a0,a2,a4 +[ ]+[0-9a-f]+:[ ]+0ae60553[ ]+fsub\.d[ ]+a0,a2,a4,rne +[ ]+[0-9a-f]+:[ ]+12e67553[ ]+fmul\.d[ ]+a0,a2,a4 +[ ]+[0-9a-f]+:[ ]+12e60553[ ]+fmul\.d[ ]+a0,a2,a4,rne +[ ]+[0-9a-f]+:[ ]+1ae67553[ ]+fdiv\.d[ ]+a0,a2,a4 +[ ]+[0-9a-f]+:[ ]+1ae60553[ ]+fdiv\.d[ ]+a0,a2,a4,rne +[ ]+[0-9a-f]+:[ ]+5a067553[ ]+fsqrt\.d[ ]+a0,a2 +[ ]+[0-9a-f]+:[ ]+5a060553[ ]+fsqrt\.d[ ]+a0,a2,rne +[ ]+[0-9a-f]+:[ ]+2ae60553[ ]+fmin\.d[ ]+a0,a2,a4 +[ ]+[0-9a-f]+:[ ]+2ae61553[ ]+fmax\.d[ ]+a0,a2,a4 +[ ]+[0-9a-f]+:[ ]+82e67543[ ]+fmadd\.d[ ]+a0,a2,a4,a6 +[ ]+[0-9a-f]+:[ ]+82e60543[ ]+fmadd\.d[ ]+a0,a2,a4,a6,rne +[ ]+[0-9a-f]+:[ ]+82e6754f[ ]+fnmadd\.d[ ]+a0,a2,a4,a6 +[ ]+[0-9a-f]+:[ ]+82e6054f[ ]+fnmadd\.d[ ]+a0,a2,a4,a6,rne +[ ]+[0-9a-f]+:[ ]+82e67547[ ]+fmsub\.d[ ]+a0,a2,a4,a6 +[ ]+[0-9a-f]+:[ ]+82e60547[ ]+fmsub\.d[ ]+a0,a2,a4,a6,rne +[ ]+[0-9a-f]+:[ ]+82e6754b[ ]+fnmsub\.d[ ]+a0,a2,a4,a6 +[ ]+[0-9a-f]+:[ ]+82e6054b[ ]+fnmsub\.d[ ]+a0,a2,a4,a6,rne +[ ]+[0-9a-f]+:[ ]+c20675d3[ ]+fcvt\.w\.d[ ]+a1,a2 +[ ]+[0-9a-f]+:[ ]+c20605d3[ ]+fcvt\.w\.d[ ]+a1,a2,rne +[ ]+[0-9a-f]+:[ ]+c21675d3[ ]+fcvt\.wu\.d[ ]+a1,a2 +[ ]+[0-9a-f]+:[ ]+c21605d3[ ]+fcvt\.wu\.d[ ]+a1,a2,rne +[ ]+[0-9a-f]+:[ ]+d2058553[ ]+fcvt\.d\.w[ ]+a0,a1 +[ ]+[0-9a-f]+:[ ]+d2158553[ ]+fcvt\.d\.wu[ ]+a0,a1 +[ ]+[0-9a-f]+:[ ]+42058553[ ]+fcvt\.d\.s[ ]+a0,a1 +[ ]+[0-9a-f]+:[ ]+401675d3[ ]+fcvt\.s\.d[ ]+a1,a2 +[ ]+[0-9a-f]+:[ ]+401605d3[ ]+fcvt\.s\.d[ ]+a1,a2,rne +[ ]+[0-9a-f]+:[ ]+42258553[ ]+fcvt\.d\.h[ ]+a0,a1 +[ ]+[0-9a-f]+:[ ]+441675d3[ ]+fcvt\.h\.d[ ]+a1,a2 +[ ]+[0-9a-f]+:[ ]+441605d3[ ]+fcvt\.h\.d[ ]+a1,a2,rne +[ ]+[0-9a-f]+:[ ]+22e60553[ ]+fsgnj\.d[ ]+a0,a2,a4 +[ ]+[0-9a-f]+:[ ]+22e61553[ ]+fsgnjn\.d[ ]+a0,a2,a4 +[ ]+[0-9a-f]+:[ ]+22e62553[ ]+fsgnjx\.d[ ]+a0,a2,a4 +[ ]+[0-9a-f]+:[ ]+a2e625d3[ ]+feq\.d[ ]+a1,a2,a4 +[ ]+[0-9a-f]+:[ ]+a2e615d3[ ]+flt\.d[ ]+a1,a2,a4 +[ ]+[0-9a-f]+:[ ]+a2e605d3[ ]+fle\.d[ ]+a1,a2,a4 +[ ]+[0-9a-f]+:[ ]+a2c715d3[ ]+flt\.d[ ]+a1,a4,a2 +[ ]+[0-9a-f]+:[ ]+a2c705d3[ ]+fle\.d[ ]+a1,a4,a2 +[ ]+[0-9a-f]+:[ ]+22c60553[ ]+fmv\.d[ ]+a0,a2 +[ ]+[0-9a-f]+:[ ]+22c61553[ ]+fneg\.d[ ]+a0,a2 +[ ]+[0-9a-f]+:[ ]+22c62553[ ]+fabs\.d[ ]+a0,a2 +[ ]+[0-9a-f]+:[ ]+e20615d3[ ]+fclass\.d[ ]+a1,a2 --- /dev/null +++ b/gas/testsuite/gas/riscv/zdinx-rv32.s @@ -0,0 +1,52 @@ +target: + fadd.d a0, a2, a4 + fadd.d a0, a2, a4, rne + fsub.d a0, a2, a4 + fsub.d a0, a2, a4, rne + fmul.d a0, a2, a4 + fmul.d a0, a2, a4, rne + fdiv.d a0, a2, a4 + fdiv.d a0, a2, a4, rne + fsqrt.d a0, a2 + fsqrt.d a0, a2, rne + fmin.d a0, a2, a4 + fmax.d a0, a2, a4 + fmadd.d a0, a2, a4, a6 + fmadd.d a0, a2, a4, a6, rne + fnmadd.d a0, a2, a4, a6 + fnmadd.d a0, a2, a4, a6, rne + fmsub.d a0, a2, a4, a6 + fmsub.d a0, a2, a4, a6, rne + fnmsub.d a0, a2, a4, a6 + fnmsub.d a0, a2, a4, a6, rne + + fcvt.w.d a1, a2 + fcvt.w.d a1, a2, rne + fcvt.wu.d a1, a2 + fcvt.wu.d a1, a2, rne + fcvt.d.w a0, a1 + fcvt.d.wu a0, a1 + + fcvt.d.s a0, a1 + fcvt.s.d a1, a2 + fcvt.s.d a1, a2, rne + + .option push + .option arch, +zhinxmin + fcvt.d.h a0, a1 + fcvt.h.d a1, a2 + fcvt.h.d a1, a2, rne + .option pop + + fsgnj.d a0, a2, a4 + fsgnjn.d a0, a2, a4 + fsgnjx.d a0, a2, a4 + feq.d a1, a2, a4 + flt.d a1, a2, a4 + fle.d a1, a2, a4 + fgt.d a1, a2, a4 + fge.d a1, a2, a4 + fmv.d a0, a2 + fneg.d a0, a2 + fabs.d a0, a2 + fclass.d a1, a2 --- /dev/null +++ b/gas/testsuite/gas/riscv/zdinx-rv32-fail.d @@ -0,0 +1,3 @@ +#as: -march=rv32i_zdinx +#source: zdinx.s +#error_output: zdinx-rv32-fail.l --- /dev/null +++ b/gas/testsuite/gas/riscv/zdinx-rv32-fail.l @@ -0,0 +1,47 @@ +.*: Assembler messages: +.*: Error: illegal operands `fadd\.d .*' +.*: Error: illegal operands `fadd\.d .*' +.*: Error: illegal operands `fsub\.d .*' +.*: Error: illegal operands `fsub\.d .*' +.*: Error: illegal operands `fmul\.d .*' +.*: Error: illegal operands `fmul\.d .*' +.*: Error: illegal operands `fdiv\.d .*' +.*: Error: illegal operands `fdiv\.d .*' +.*: Error: illegal operands `fsqrt\.d .*' +.*: Error: illegal operands `fsqrt\.d .*' +.*: Error: illegal operands `fmin\.d .*' +.*: Error: illegal operands `fmax\.d .*' +.*: Error: illegal operands `fmadd\.d .*' +.*: Error: illegal operands `fmadd\.d .*' +.*: Error: illegal operands `fnmadd\.d .*' +.*: Error: illegal operands `fnmadd\.d .*' +.*: Error: illegal operands `fmsub\.d .*' +.*: Error: illegal operands `fmsub\.d .*' +.*: Error: illegal operands `fnmsub\.d .*' +.*: Error: illegal operands `fnmsub\.d .*' +.*: Error: illegal operands `fcvt\.w\.d .*' +.*: Error: illegal operands `fcvt\.w\.d .*' +.*: Error: illegal operands `fcvt\.wu\.d .*' +.*: Error: illegal operands `fcvt\.wu\.d .*' +.*: Error: unrecognized opcode `fcvt\.l\.d .*' +.*: Error: unrecognized opcode `fcvt\.l\.d .*' +.*: Error: unrecognized opcode `fcvt\.lu\.d .*' +.*: Error: unrecognized opcode `fcvt\.lu\.d .*' +.*: Error: unrecognized opcode `fcvt\.d\.l .*' +.*: Error: unrecognized opcode `fcvt\.d\.l .*' +.*: Error: unrecognized opcode `fcvt\.d\.lu .*' +.*: Error: unrecognized opcode `fcvt\.d\.lu .*' +.*: Error: illegal operands `fcvt\.s\.d .*' +.*: Error: illegal operands `fcvt\.s\.d .*' +.*: Error: illegal operands `fsgnj\.d .*' +.*: Error: illegal operands `fsgnjn\.d .*' +.*: Error: illegal operands `fsgnjx\.d .*' +.*: Error: illegal operands `feq\.d .*' +.*: Error: illegal operands `flt\.d .*' +.*: Error: illegal operands `fle\.d .*' +.*: Error: illegal operands `fgt\.d .*' +.*: Error: illegal operands `fge\.d .*' +.*: Error: illegal operands `fmv\.d .*' +.*: Error: illegal operands `fneg\.d .*' +.*: Error: illegal operands `fabs\.d .*' +.*: Error: illegal operands `fclass\.d .*' --- a/include/opcode/riscv.h +++ b/include/opcode/riscv.h @@ -679,6 +679,18 @@ struct riscv_opcode #define INSN_8_BYTE 0x00000040 #define INSN_16_BYTE 0x00000050 +/* Operands required to be an even-numbered register (pair) in RV32. */ +#define INSN_RV32_EVEN_D 0x00000100 +#define INSN_RV32_EVEN_S 0x00000200 +#define INSN_RV32_EVEN_T 0x00000400 /* Also covering U. */ +#define INSN_RV32_EVEN_R 0x00000800 +/* Shorthands for combinations of the above. */ +#define INSN_RV32_EVEN_DS (INSN_RV32_EVEN_D | INSN_RV32_EVEN_S) +#define INSN_RV32_EVEN_DST (INSN_RV32_EVEN_DS | INSN_RV32_EVEN_T) +#define INSN_RV32_EVEN_DSTR (INSN_RV32_EVEN_DST | INSN_RV32_EVEN_R) +#define INSN_RV32_EVEN_DU (INSN_RV32_EVEN_D | INSN_RV32_EVEN_T) +#define INSN_RV32_EVEN_ST (INSN_RV32_EVEN_S | INSN_RV32_EVEN_T) + /* Instruction is actually a macro. It should be ignored by the disassembler, and requires special treatment by the assembler. */ #define INSN_MACRO 0xffffffff --- a/opcodes/riscv-dis.c +++ b/opcodes/riscv-dis.c @@ -1032,6 +1032,23 @@ riscv_disassemble_insn (bfd_vma memaddr, if ((op->pinfo & INSN_V_EEW64) && !riscv_subset_supports (&pd->riscv_rps_dis, "zve64x")) continue; + + if (pd->xlen == 32 + && riscv_subset_supports (&pd->riscv_rps_dis, "zdinx")) + { + if ((op->pinfo & INSN_RV32_EVEN_D) + && (word & (1u << OP_SH_RD))) + continue; + if ((op->pinfo & INSN_RV32_EVEN_S) + && (word & (1u << OP_SH_RS1))) + continue; + if ((op->pinfo & INSN_RV32_EVEN_T) + && (word & (1u << OP_SH_RS2))) + continue; + if ((op->pinfo & INSN_RV32_EVEN_R) + && (word & (1u << OP_SH_RS3))) + continue; + } } /* It's a match. */ --- a/opcodes/riscv-opc.c +++ b/opcodes/riscv-opc.c @@ -931,10 +931,10 @@ const struct riscv_opcode riscv_opcodes[ {"fcvt.h.w", 0, INSN_CLASS_ZFH_INX, "D,sm", MATCH_FCVT_H_W, MASK_FCVT_H_W, match_opcode, 0 }, {"fcvt.h.wu", 0, INSN_CLASS_ZFH_INX, "D,sm", MATCH_FCVT_H_WU, MASK_FCVT_H_WU, match_opcode, 0 }, {"fcvt.s.h", 0, INSN_CLASS_ZFHMIN_INX, "D,S", MATCH_FCVT_S_H, MASK_FCVT_S_H|MASK_RM, match_opcode, 0 }, -{"fcvt.d.h", 0, INSN_CLASS_ZFHMIN_AND_D_INX, "D,S", MATCH_FCVT_D_H, MASK_FCVT_D_H|MASK_RM, match_opcode, 0 }, -{"fcvt.q.h", 0, INSN_CLASS_ZFHMIN_AND_Q_INX, "D,S", MATCH_FCVT_Q_H, MASK_FCVT_Q_H|MASK_RM, match_opcode, 0 }, +{"fcvt.d.h", 0, INSN_CLASS_ZFHMIN_AND_D_INX, "D,S", MATCH_FCVT_D_H, MASK_FCVT_D_H|MASK_RM, match_opcode, INSN_RV32_EVEN_D }, +{"fcvt.q.h", 0, INSN_CLASS_ZFHMIN_AND_Q_INX, "D,S", MATCH_FCVT_Q_H, MASK_FCVT_Q_H|MASK_RM, match_opcode, 0 }, {"fcvt.h.s", 0, INSN_CLASS_ZFHMIN_INX, "D,Sm", MATCH_FCVT_H_S, MASK_FCVT_H_S, match_opcode, 0 }, -{"fcvt.h.d", 0, INSN_CLASS_ZFHMIN_AND_D_INX, "D,Sm", MATCH_FCVT_H_D, MASK_FCVT_H_D, match_opcode, 0 }, +{"fcvt.h.d", 0, INSN_CLASS_ZFHMIN_AND_D_INX, "D,Sm", MATCH_FCVT_H_D, MASK_FCVT_H_D, match_opcode, INSN_RV32_EVEN_S }, {"fcvt.h.q", 0, INSN_CLASS_ZFHMIN_AND_Q_INX, "D,Sm", MATCH_FCVT_H_Q, MASK_FCVT_H_Q, match_opcode, 0 }, {"fclass.h", 0, INSN_CLASS_ZFH_INX, "d,S", MATCH_FCLASS_H, MASK_FCLASS_H, match_opcode, 0 }, {"feq.h", 0, INSN_CLASS_ZFH_INX, "d,S,T", MATCH_FEQ_H, MASK_FEQ_H, match_opcode, 0 }, @@ -1021,35 +1021,35 @@ const struct riscv_opcode riscv_opcodes[ {"fsd", 0, INSN_CLASS_ZCD, "CD,Cl(Cs)", MATCH_C_FSD, MASK_C_FSD, match_opcode, INSN_ALIAS|INSN_DREF|INSN_8_BYTE }, {"fsd", 0, INSN_CLASS_D, "T,q(s)", MATCH_FSD, MASK_FSD, match_opcode, INSN_DREF|INSN_8_BYTE }, {"fsd", 0, INSN_CLASS_D, "T,A,s", 0, (int) M_Sx_FSx, match_rs1_nonzero, INSN_MACRO }, -{"fmv.d", 0, INSN_CLASS_D_INX, "D,U", MATCH_FSGNJ_D, MASK_FSGNJ_D, match_rs1_eq_rs2, INSN_ALIAS }, -{"fneg.d", 0, INSN_CLASS_D_INX, "D,U", MATCH_FSGNJN_D, MASK_FSGNJN_D, match_rs1_eq_rs2, INSN_ALIAS }, -{"fabs.d", 0, INSN_CLASS_D_INX, "D,U", MATCH_FSGNJX_D, MASK_FSGNJX_D, match_rs1_eq_rs2, INSN_ALIAS }, -{"fsgnj.d", 0, INSN_CLASS_D_INX, "D,S,T", MATCH_FSGNJ_D, MASK_FSGNJ_D, match_opcode, 0 }, -{"fsgnjn.d", 0, INSN_CLASS_D_INX, "D,S,T", MATCH_FSGNJN_D, MASK_FSGNJN_D, match_opcode, 0 }, -{"fsgnjx.d", 0, INSN_CLASS_D_INX, "D,S,T", MATCH_FSGNJX_D, MASK_FSGNJX_D, match_opcode, 0 }, -{"fadd.d", 0, INSN_CLASS_D_INX, "D,S,Tm", MATCH_FADD_D, MASK_FADD_D, match_opcode, 0 }, -{"fsub.d", 0, INSN_CLASS_D_INX, "D,S,Tm", MATCH_FSUB_D, MASK_FSUB_D, match_opcode, 0 }, -{"fmul.d", 0, INSN_CLASS_D_INX, "D,S,Tm", MATCH_FMUL_D, MASK_FMUL_D, match_opcode, 0 }, -{"fdiv.d", 0, INSN_CLASS_D_INX, "D,S,Tm", MATCH_FDIV_D, MASK_FDIV_D, match_opcode, 0 }, -{"fsqrt.d", 0, INSN_CLASS_D_INX, "D,Sm", MATCH_FSQRT_D, MASK_FSQRT_D, match_opcode, 0 }, -{"fmin.d", 0, INSN_CLASS_D_INX, "D,S,T", MATCH_FMIN_D, MASK_FMIN_D, match_opcode, 0 }, -{"fmax.d", 0, INSN_CLASS_D_INX, "D,S,T", MATCH_FMAX_D, MASK_FMAX_D, match_opcode, 0 }, -{"fmadd.d", 0, INSN_CLASS_D_INX, "D,S,T,Rm", MATCH_FMADD_D, MASK_FMADD_D, match_opcode, 0 }, -{"fnmadd.d", 0, INSN_CLASS_D_INX, "D,S,T,Rm", MATCH_FNMADD_D, MASK_FNMADD_D, match_opcode, 0 }, -{"fmsub.d", 0, INSN_CLASS_D_INX, "D,S,T,Rm", MATCH_FMSUB_D, MASK_FMSUB_D, match_opcode, 0 }, -{"fnmsub.d", 0, INSN_CLASS_D_INX, "D,S,T,Rm", MATCH_FNMSUB_D, MASK_FNMSUB_D, match_opcode, 0 }, -{"fcvt.w.d", 0, INSN_CLASS_D_INX, "d,Sm", MATCH_FCVT_W_D, MASK_FCVT_W_D, match_opcode, 0 }, -{"fcvt.wu.d", 0, INSN_CLASS_D_INX, "d,Sm", MATCH_FCVT_WU_D, MASK_FCVT_WU_D, match_opcode, 0 }, -{"fcvt.d.w", 0, INSN_CLASS_D_INX, "D,s", MATCH_FCVT_D_W, MASK_FCVT_D_W|MASK_RM, match_opcode, 0 }, -{"fcvt.d.wu", 0, INSN_CLASS_D_INX, "D,s", MATCH_FCVT_D_WU, MASK_FCVT_D_WU|MASK_RM, match_opcode, 0 }, -{"fcvt.d.s", 0, INSN_CLASS_D_INX, "D,S", MATCH_FCVT_D_S, MASK_FCVT_D_S|MASK_RM, match_opcode, 0 }, -{"fcvt.s.d", 0, INSN_CLASS_D_INX, "D,Sm", MATCH_FCVT_S_D, MASK_FCVT_S_D, match_opcode, 0 }, -{"fclass.d", 0, INSN_CLASS_D_INX, "d,S", MATCH_FCLASS_D, MASK_FCLASS_D, match_opcode, 0 }, -{"feq.d", 0, INSN_CLASS_D_INX, "d,S,T", MATCH_FEQ_D, MASK_FEQ_D, match_opcode, 0 }, -{"flt.d", 0, INSN_CLASS_D_INX, "d,S,T", MATCH_FLT_D, MASK_FLT_D, match_opcode, 0 }, -{"fle.d", 0, INSN_CLASS_D_INX, "d,S,T", MATCH_FLE_D, MASK_FLE_D, match_opcode, 0 }, -{"fgt.d", 0, INSN_CLASS_D_INX, "d,T,S", MATCH_FLT_D, MASK_FLT_D, match_opcode, INSN_ALIAS }, -{"fge.d", 0, INSN_CLASS_D_INX, "d,T,S", MATCH_FLE_D, MASK_FLE_D, match_opcode, INSN_ALIAS }, +{"fmv.d", 0, INSN_CLASS_D_INX, "D,U", MATCH_FSGNJ_D, MASK_FSGNJ_D, match_rs1_eq_rs2, INSN_ALIAS|INSN_RV32_EVEN_DU }, +{"fneg.d", 0, INSN_CLASS_D_INX, "D,U", MATCH_FSGNJN_D, MASK_FSGNJN_D, match_rs1_eq_rs2, INSN_ALIAS|INSN_RV32_EVEN_DU }, +{"fabs.d", 0, INSN_CLASS_D_INX, "D,U", MATCH_FSGNJX_D, MASK_FSGNJX_D, match_rs1_eq_rs2, INSN_ALIAS|INSN_RV32_EVEN_DU }, +{"fsgnj.d", 0, INSN_CLASS_D_INX, "D,S,T", MATCH_FSGNJ_D, MASK_FSGNJ_D, match_opcode, INSN_RV32_EVEN_DST }, +{"fsgnjn.d", 0, INSN_CLASS_D_INX, "D,S,T", MATCH_FSGNJN_D, MASK_FSGNJN_D, match_opcode, INSN_RV32_EVEN_DST }, +{"fsgnjx.d", 0, INSN_CLASS_D_INX, "D,S,T", MATCH_FSGNJX_D, MASK_FSGNJX_D, match_opcode, INSN_RV32_EVEN_DST }, +{"fadd.d", 0, INSN_CLASS_D_INX, "D,S,Tm", MATCH_FADD_D, MASK_FADD_D, match_opcode, INSN_RV32_EVEN_DST }, +{"fsub.d", 0, INSN_CLASS_D_INX, "D,S,Tm", MATCH_FSUB_D, MASK_FSUB_D, match_opcode, INSN_RV32_EVEN_DST }, +{"fmul.d", 0, INSN_CLASS_D_INX, "D,S,Tm", MATCH_FMUL_D, MASK_FMUL_D, match_opcode, INSN_RV32_EVEN_DST }, +{"fdiv.d", 0, INSN_CLASS_D_INX, "D,S,Tm", MATCH_FDIV_D, MASK_FDIV_D, match_opcode, INSN_RV32_EVEN_DST }, +{"fsqrt.d", 0, INSN_CLASS_D_INX, "D,Sm", MATCH_FSQRT_D, MASK_FSQRT_D, match_opcode, INSN_RV32_EVEN_DS }, +{"fmin.d", 0, INSN_CLASS_D_INX, "D,S,T", MATCH_FMIN_D, MASK_FMIN_D, match_opcode, INSN_RV32_EVEN_DST }, +{"fmax.d", 0, INSN_CLASS_D_INX, "D,S,T", MATCH_FMAX_D, MASK_FMAX_D, match_opcode, INSN_RV32_EVEN_DST }, +{"fmadd.d", 0, INSN_CLASS_D_INX, "D,S,T,Rm", MATCH_FMADD_D, MASK_FMADD_D, match_opcode, INSN_RV32_EVEN_DSTR }, +{"fnmadd.d", 0, INSN_CLASS_D_INX, "D,S,T,Rm", MATCH_FNMADD_D, MASK_FNMADD_D, match_opcode, INSN_RV32_EVEN_DSTR }, +{"fmsub.d", 0, INSN_CLASS_D_INX, "D,S,T,Rm", MATCH_FMSUB_D, MASK_FMSUB_D, match_opcode, INSN_RV32_EVEN_DSTR }, +{"fnmsub.d", 0, INSN_CLASS_D_INX, "D,S,T,Rm", MATCH_FNMSUB_D, MASK_FNMSUB_D, match_opcode, INSN_RV32_EVEN_DSTR }, +{"fcvt.w.d", 0, INSN_CLASS_D_INX, "d,Sm", MATCH_FCVT_W_D, MASK_FCVT_W_D, match_opcode, INSN_RV32_EVEN_S }, +{"fcvt.wu.d", 0, INSN_CLASS_D_INX, "d,Sm", MATCH_FCVT_WU_D, MASK_FCVT_WU_D, match_opcode, INSN_RV32_EVEN_S }, +{"fcvt.d.w", 0, INSN_CLASS_D_INX, "D,s", MATCH_FCVT_D_W, MASK_FCVT_D_W|MASK_RM, match_opcode, INSN_RV32_EVEN_D }, +{"fcvt.d.wu", 0, INSN_CLASS_D_INX, "D,s", MATCH_FCVT_D_WU, MASK_FCVT_D_WU|MASK_RM, match_opcode, INSN_RV32_EVEN_D }, +{"fcvt.d.s", 0, INSN_CLASS_D_INX, "D,S", MATCH_FCVT_D_S, MASK_FCVT_D_S|MASK_RM, match_opcode, INSN_RV32_EVEN_D }, +{"fcvt.s.d", 0, INSN_CLASS_D_INX, "D,Sm", MATCH_FCVT_S_D, MASK_FCVT_S_D, match_opcode, INSN_RV32_EVEN_S }, +{"fclass.d", 0, INSN_CLASS_D_INX, "d,S", MATCH_FCLASS_D, MASK_FCLASS_D, match_opcode, INSN_RV32_EVEN_S }, +{"feq.d", 0, INSN_CLASS_D_INX, "d,S,T", MATCH_FEQ_D, MASK_FEQ_D, match_opcode, INSN_RV32_EVEN_ST }, +{"flt.d", 0, INSN_CLASS_D_INX, "d,S,T", MATCH_FLT_D, MASK_FLT_D, match_opcode, INSN_RV32_EVEN_ST }, +{"fle.d", 0, INSN_CLASS_D_INX, "d,S,T", MATCH_FLE_D, MASK_FLE_D, match_opcode, INSN_RV32_EVEN_ST }, +{"fgt.d", 0, INSN_CLASS_D_INX, "d,T,S", MATCH_FLT_D, MASK_FLT_D, match_opcode, INSN_ALIAS|INSN_RV32_EVEN_ST }, +{"fge.d", 0, INSN_CLASS_D_INX, "d,T,S", MATCH_FLE_D, MASK_FLE_D, match_opcode, INSN_ALIAS|INSN_RV32_EVEN_ST }, {"fmv.x.d", 64, INSN_CLASS_D, "d,S", MATCH_FMV_X_D, MASK_FMV_X_D, match_opcode, 0 }, {"fmv.d.x", 64, INSN_CLASS_D, "D,s", MATCH_FMV_D_X, MASK_FMV_D_X, match_opcode, 0 }, {"fcvt.l.d", 64, INSN_CLASS_D_INX, "d,Sm", MATCH_FCVT_L_D, MASK_FCVT_L_D, match_opcode, 0 }, From patchwork Tue Apr 21 11:53:52 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Beulich X-Patchwork-Id: 133466 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from vm01.sourceware.org (localhost [127.0.0.1]) by sourceware.org (Postfix) with ESMTP id 3FA224B9DB6A for ; Tue, 21 Apr 2026 11:54:34 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 3FA224B9DB6A Authentication-Results: sourceware.org; dkim=pass (2048-bit key, unprotected) header.d=suse.com header.i=@suse.com header.a=rsa-sha256 header.s=google header.b=N21cRUzN X-Original-To: binutils@sourceware.org Delivered-To: binutils@sourceware.org Received: from mail-wm1-x32e.google.com (mail-wm1-x32e.google.com [IPv6:2a00:1450:4864:20::32e]) by sourceware.org (Postfix) with ESMTPS id BA7F24BA2E0B for ; Tue, 21 Apr 2026 11:53:54 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org BA7F24BA2E0B Authentication-Results: sourceware.org; dmarc=pass (p=quarantine dis=none) header.from=suse.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=suse.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org BA7F24BA2E0B Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2a00:1450:4864:20::32e ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1776772434; cv=none; b=dyacjTJDbXmzfuCq4AFS4XmWzUmfHQtBkaWJUfW+s7nDYdKLXCrx9tlRCp6SlS2XnWRBROr6nB+xUiIxKXbnR0ISh+iSnNOJn9U++EQJkCxN0rsREp/5ee949f5Ye70jR2e3g1GQ9IgnxRX4mOzFdZWzndlnipfwVBsv9481668= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1776772434; c=relaxed/simple; bh=aCKZXG13NQ01AK8k/AITNx4/ujUEH1ydy/++IQjzNJs=; h=DKIM-Signature:Message-ID:Date:MIME-Version:Subject:From:To; b=aUxvnSF4minnspED5GXRHjvEu8YBLoDEuXH62HBO57I1fsqCrfu1Oki2LTTwlN46Sod7IYPH7SuEyLg60DpcS6Brhow9ZVOPWWziQZWBdrNGLvDhmocR9KWLk5chGYE8shHXWLgnugSsyhvle/F4Vi8jZNy86X/GuAuhcAs27k0= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org BA7F24BA2E0B Received: by mail-wm1-x32e.google.com with SMTP id 5b1f17b1804b1-4891f625344so22466895e9.0 for ; Tue, 21 Apr 2026 04:53:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=google; t=1776772434; x=1777377234; darn=sourceware.org; h=content-transfer-encoding:in-reply-to:autocrypt:content-language :references:cc:to:from:subject:user-agent:mime-version:date :message-id:from:to:cc:subject:date:message-id:reply-to; bh=P2UJLRhmImsX/1g6LJLakR9ONuM1TQK2Qa9m/HTyoNM=; b=N21cRUzNV7QejOsKTOWaOU1/vRfCrTA8pimxXRXLP59rLSvVkOay7uZC43orybsKyT dp1Y3CuUI9qUh7fWcSRLOUKNwFKqPcu1+kqfROqmwLf9Ur5XLa8HtGeIcNMALsgStIMr /xmkYfK4piS86DdhAztwDOc4XAuIVDb8mazne9LRTvkS6897AA9UREyRFDE0dazohHd+ GazNSBw6efGDHmDqiEX3QCMXe8/ucrHqtB1gZy+Onu0OOLjIGRoveIMJiEEklnPyHYL/ QQ2+3r3Ks0Mc5eH6aMZBfLvn5sPuBnX4MUHA8qHPOYiwxnTsYstg6wl30w8c/6cPETdQ R7og== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776772434; x=1777377234; h=content-transfer-encoding:in-reply-to:autocrypt:content-language :references:cc:to:from:subject:user-agent:mime-version:date :message-id:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=P2UJLRhmImsX/1g6LJLakR9ONuM1TQK2Qa9m/HTyoNM=; b=rTMStl7N8m5jNq9PB/Qo1eSf9PSiHxTa0UaIHAdVH5w1RTTCllDiU3Xy6px9Z0UXa+ jSr2vV/lfxEYQzt8eJWqz20Rb594of2neg4Z2YcfGtw3Z1SEG0ZQLrKTGmKsa5d4Vec1 rzHGDFFrXsqQ+CVuibwg1XxCEYRSCcVuTe236jp0SQo++yx/Ae9RL17CbUxBndoSH3QL V0JCRNEI9b2fiNv8VsJE2P5SslMd4rJk2camSqkodCQ5ZtWTb1uApsKivQFPdqtXxt/d +/GDBgB/+tPWtkeKIZI6AVCK703MDli4CDu5kamS93qGjbZRVLiQBfUx5nCzObdU2gh/ c4dw== X-Gm-Message-State: AOJu0YyihJVXsakT7aBqAqL1MUn3V5P25XvgZ3Mg+eHC+usJAs7bK1+E rFadHP8pVRf2Yx/QwomYau/gWQL9FG01KFbcVFpM8T/UJPPXMRVy5rxiQ8xLPrisY5KnOZIQslX m8Wnv1w== X-Gm-Gg: AeBDiesUHwmm9Wr6d38r+Fr1hA2dWD6Ape/L3F38muh7agsbQKp+RlkZxiLIRqJtTdE UMbhkbOipt3uKye9sx2fREL+P2yj1X8VfkkkS6ENbsUHsCgybK9jfxiQUeIQA5Mymrum8nyYVZe VdNSApESdI33DSsr9PzyfgILoXYMEn1P0HXBfXJI9rA1xPEM/XhOTp4jJrfnF1PXwTGTvX6ublO H+Xne1CMRzNuP/NES6/I2lX6aCV/Fx/ZH+BZ4zhcrJi7cSZscGnZqfA1WDUG0thnfUWgf8XIPi2 a14pY4e2+4ssikeO02Y2HlHP4LgWHZ6Ci7JIt41bmivmzXCIIII9b3eMYDYoRvMd7b6dmlCYCuW cJtxyXK6rZahXAT7Uwgq3bNnL3xpmW6XVxYAdExlqPAhm+EXgB1Bov7LjgGkzns8y4cu44hQIhB F3TfRVz8vO2tAMCqpg4IlS9NspvyNkNZYRY64C1sDod2w7FIB0APK6owc6oVAfmQL6LK7Me1x53 nzaP/e/hRCiDV+GB/T2g0E4hw== X-Received: by 2002:a05:600c:34ca:b0:48a:761:5816 with SMTP id 5b1f17b1804b1-48a07615b87mr79893975e9.8.1776772433552; Tue, 21 Apr 2026 04:53:53 -0700 (PDT) Received: from [10.156.60.236] (ip-037-024-206-209.um08.pools.vodafone-ip.de. [37.24.206.209]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-48a55b8baaesm69265015e9.10.2026.04.21.04.53.53 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 21 Apr 2026 04:53:53 -0700 (PDT) Message-ID: Date: Tue, 21 Apr 2026 13:53:52 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: [PATCH 11/19] RISC-V: avoid strdup() From: Jan Beulich To: Binutils Cc: Palmer Dabbelt , Andrew Waterman , Jim Wilson , Nelson Chu References: <620231e0-67d0-4bd0-b593-38f32b01a6d8@suse.com> Content-Language: en-US Autocrypt: addr=jbeulich@suse.com; keydata= xsDiBFk3nEQRBADAEaSw6zC/EJkiwGPXbWtPxl2xCdSoeepS07jW8UgcHNurfHvUzogEq5xk hu507c3BarVjyWCJOylMNR98Yd8VqD9UfmX0Hb8/BrA+Hl6/DB/eqGptrf4BSRwcZQM32aZK 7Pj2XbGWIUrZrd70x1eAP9QE3P79Y2oLrsCgbZJfEwCgvz9JjGmQqQkRiTVzlZVCJYcyGGsD /0tbFCzD2h20ahe8rC1gbb3K3qk+LpBtvjBu1RY9drYk0NymiGbJWZgab6t1jM7sk2vuf0Py O9Hf9XBmK0uE9IgMaiCpc32XV9oASz6UJebwkX+zF2jG5I1BfnO9g7KlotcA/v5ClMjgo6Gl MDY4HxoSRu3i1cqqSDtVlt+AOVBJBACrZcnHAUSuCXBPy0jOlBhxPqRWv6ND4c9PH1xjQ3NP nxJuMBS8rnNg22uyfAgmBKNLpLgAGVRMZGaGoJObGf72s6TeIqKJo/LtggAS9qAUiuKVnygo 3wjfkS9A3DRO+SpU7JqWdsveeIQyeyEJ/8PTowmSQLakF+3fote9ybzd880fSmFuIEJldWxp Y2ggPGpiZXVsaWNoQHN1c2UuY29tPsJgBBMRAgAgBQJZN5xEAhsDBgsJCAcDAgQVAggDBBYC AwECHgECF4AACgkQoDSui/t3IH4J+wCfQ5jHdEjCRHj23O/5ttg9r9OIruwAn3103WUITZee e7Sbg12UgcQ5lv7SzsFNBFk3nEQQCACCuTjCjFOUdi5Nm244F+78kLghRcin/awv+IrTcIWF hUpSs1Y91iQQ7KItirz5uwCPlwejSJDQJLIS+QtJHaXDXeV6NI0Uef1hP20+y8qydDiVkv6l IreXjTb7DvksRgJNvCkWtYnlS3mYvQ9NzS9PhyALWbXnH6sIJd2O9lKS1Mrfq+y0IXCP10eS FFGg+Av3IQeFatkJAyju0PPthyTqxSI4lZYuJVPknzgaeuJv/2NccrPvmeDg6Coe7ZIeQ8Yj t0ARxu2xytAkkLCel1Lz1WLmwLstV30g80nkgZf/wr+/BXJW/oIvRlonUkxv+IbBM3dX2OV8 AmRv1ySWPTP7AAMFB/9PQK/VtlNUJvg8GXj9ootzrteGfVZVVT4XBJkfwBcpC/XcPzldjv+3 HYudvpdNK3lLujXeA5fLOH+Z/G9WBc5pFVSMocI71I8bT8lIAzreg0WvkWg5V2WZsUMlnDL9 mpwIGFhlbM3gfDMs7MPMu8YQRFVdUvtSpaAs8OFfGQ0ia3LGZcjA6Ik2+xcqscEJzNH+qh8V m5jjp28yZgaqTaRbg3M/+MTbMpicpZuqF4rnB0AQD12/3BNWDR6bmh+EkYSMcEIpQmBM51qM EKYTQGybRCjpnKHGOxG0rfFY1085mBDZCH5Kx0cl0HVJuQKC+dV2ZY5AqjcKwAxpE75MLFkr wkkEGBECAAkFAlk3nEQCGwwACgkQoDSui/t3IH7nnwCfcJWUDUFKdCsBH/E5d+0ZnMQi+G0A nAuWpQkjM1ASeQwSHEeAWPgskBQL In-Reply-To: <620231e0-67d0-4bd0-b593-38f32b01a6d8@suse.com> X-Spam-Status: No, score=-3016.5 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_NONE, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on sourceware.org X-BeenThere: binutils@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Binutils mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: binutils-bounces~patchwork=sourceware.org@sourceware.org Along with xmalloc(), xstrdup() wants using. --- a/bfd/elfxx-riscv.c +++ b/bfd/elfxx-riscv.c @@ -2589,7 +2589,7 @@ riscv_copy_subset_list (riscv_subset_lis { riscv_subset_list_t *new = xmalloc (sizeof *new); new->head = riscv_copy_subset (new, subset_list->head); - new->arch_str = strdup (subset_list->arch_str); + new->arch_str = xstrdup (subset_list->arch_str); return new; } --- a/gas/config/tc-riscv.c +++ b/gas/config/tc-riscv.c @@ -358,7 +358,7 @@ riscv_set_arch (const char *s) riscv_release_subset_list (riscv_rps_as.subset_list); riscv_parse_subset (&riscv_rps_as, s); riscv_arch_str (xlen, riscv_rps_as.subset_list, true/* update */); - file_arch_str = strdup (riscv_rps_as.subset_list->arch_str); + file_arch_str = xstrdup (riscv_rps_as.subset_list->arch_str); riscv_set_rvc (riscv_subset_supports (&riscv_rps_as, "c") || riscv_subset_supports (&riscv_rps_as, "zca")); @@ -1435,7 +1435,7 @@ static bool reglist_lookup (char **s, unsigned *reg_list) { *reg_list = 0; - char *reglist = strdup (*s); + char *reglist = xstrdup (*s); if (reglist != NULL) { char *token = strtok (reglist, "}"); From patchwork Tue Apr 21 11:54:19 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Beulich X-Patchwork-Id: 133470 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from vm01.sourceware.org (localhost [127.0.0.1]) by sourceware.org (Postfix) with ESMTP id 200254BAD17E for ; Tue, 21 Apr 2026 11:57:16 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 200254BAD17E Authentication-Results: sourceware.org; dkim=pass (2048-bit key, unprotected) header.d=suse.com header.i=@suse.com header.a=rsa-sha256 header.s=google header.b=FpdnTBeW X-Original-To: binutils@sourceware.org Delivered-To: binutils@sourceware.org Received: from mail-wm1-x330.google.com (mail-wm1-x330.google.com [IPv6:2a00:1450:4864:20::330]) by sourceware.org (Postfix) with ESMTPS id 7AAA84B9DB4A for ; Tue, 21 Apr 2026 11:54:22 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 7AAA84B9DB4A Authentication-Results: sourceware.org; dmarc=pass (p=quarantine dis=none) header.from=suse.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=suse.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 7AAA84B9DB4A Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2a00:1450:4864:20::330 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1776772462; cv=none; b=o3xFQvcCtQjGYnqWpNYkpz35bJJ78vo7WXxaay9Iof50N2/9kiENY012zTha2L8KeB2QhLUlECM/T5CfdS0/NRFWsB/rXupi6BX4I8nibeezb1o3P+Q8P2jDy/H0XG3O1g+NcoGYE002VYtM/jI36yIOMIUKhm+oY+0KJqaEows= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1776772462; c=relaxed/simple; bh=uHAdebFw7SoN0gw9AKM8C77Ev6hSQV5iOVKvQa0ayzU=; h=DKIM-Signature:Message-ID:Date:MIME-Version:Subject:From:To; b=EPd9iigm6DnFck0hHkci/Acj14ImYppEvBAgf7PD94KER4Nq8mCITEmEEpbmlbwzlirhlGUnuj7Pfi5GWBzmgLqEB7YeVI2tUn5C0NoBzG7BjOExrMoceIM+Hy9z5uNyZAklfi99VbGZgMlDtAtw9rnwOtKGVzel05RLC0AqNIk= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 7AAA84B9DB4A Received: by mail-wm1-x330.google.com with SMTP id 5b1f17b1804b1-488b0046078so38320755e9.1 for ; Tue, 21 Apr 2026 04:54:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=google; t=1776772461; x=1777377261; darn=sourceware.org; h=content-transfer-encoding:in-reply-to:autocrypt:content-language :references:cc:to:from:subject:user-agent:mime-version:date :message-id:from:to:cc:subject:date:message-id:reply-to; bh=gYYhiK3/0LV/lOnRIh3dc0ExyAfM9m/nMMhVi1spr6s=; b=FpdnTBeWMytwzVftqIU6tmX8I5wWWaCnCaGoUk1rBfOXq++MSxQovI4TeXq9esiLQZ 6fpl3UItgaYXEPQwOBcRwU33aI+YzGxHa20fXFeSu5X/7Hd+OPwuRQOOdzcqchNHEgQg ysfELWvNaBRE4xM87BgyKQGuKabbWXXYHRvLhieZVqmkXvyJt8Vg4YgO/MxOi87O/nxN +d/97eNyOWr3cDBI1SgeQw4WTLFnSHgjtAeoSWJ0i9vuUONkaXy8+aLlEh+AwOYr5QiF yn4uOxgFU7tVzkb9HUvZvIH/baAi5cgHeEDxwwrkItyuB0yACrfmdYdljUHwPI82NMr4 zRug== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776772461; x=1777377261; h=content-transfer-encoding:in-reply-to:autocrypt:content-language :references:cc:to:from:subject:user-agent:mime-version:date :message-id:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=gYYhiK3/0LV/lOnRIh3dc0ExyAfM9m/nMMhVi1spr6s=; b=cR/w3R4yByA6GQIZ5PB2ni1QW8+T6SqH08FZjTAd+wZerYaL3hML1+ny0cxFqE8/p1 PyT7FxBbgFwCGifjP5jY0AphT+WH96EnPI/Hjj9zr7tR27avDCuqK7i2VKla1/CpnOSq 8yUvn+hFx9WBgwK8WVbEl7eaTkk/AWsFt8l7tr7JruBxIPgaTdRmsHQ2T79IM7qqmGtS 2L+0iyTYadVuKPYY6d+oztnMtLfFkBKzKsKhMHzB20shJ8yzLjrRllxyFTtlIVRxs55a C1Qd5zfS5pqpzVkXCA7TfgIRaYHSLrSQqQV1Fmt4LYpB3aMn20aK6zhBhPWyr/YgmjNN fG8Q== X-Gm-Message-State: AOJu0YxoLHlVKMAkRafYPeB/LrAoTjYSkan48mGmZoo5kb4/Iw9WeyC7 xGFPSYsNOlAUGrRFBXlIX+NxAjCipXPmzPEuMKyN9Jd4jNyv5zgoARO898JNKj9wy6XuQfu4zIE Ts6OSVQ== X-Gm-Gg: AeBDievMCpWPHOweWV+7Yl/rKTmjN7zYX0qcRm49EfAvKZfr3BxJxEInafC9uBii7IN 03kSI/DN0vddiK3p/IdJlCgnvB6F8VwOWhixJlyhIqaqeD8+9k+UbqW9j9cLm8XxsSUwEx0TJ7X izqBxQQWJ9ujpKpWeGrVBDFwKjefg+yO26e04OMM1rewuMmRRXIrcZkafDZ5zXSiLZmSg9J65bc s5MbKb6ah+YqGnfj3PT8M4Oxumcd6kJ5LzueqFsLTK5xLI+IkSE5Cy68naJ2/+i9LMn8gp984xz PJrtz/7odKSOw90Zpaw3YN1wcATKzaCDkGeUqu7gDugBxnhJ3tKSPQxMgfG/KvnrpXMCJo11tZT iIds2vVI3zT0+uTJO6p1Ow6xBfoYUo6HWfiJcbR6QlIdyXhweMvJb44Rg0LzqbGmW1unWL3PBYD YKXXRgD0EINPhxQPRLDEdTZhpbe5PHPq7hfasSbl4kZeD4A4T4mivPNeiWHo+104T4hP4leXzx/ 6yUhopW7T1n1V3jjh6xSY/79Q== X-Received: by 2002:a05:600c:4e8f:b0:489:1fa5:997f with SMTP id 5b1f17b1804b1-4891fa59adfmr103482105e9.9.1776772460854; Tue, 21 Apr 2026 04:54:20 -0700 (PDT) Received: from [10.156.60.236] (ip-037-024-206-209.um08.pools.vodafone-ip.de. [37.24.206.209]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-488fb7a06f3sm131353805e9.22.2026.04.21.04.54.20 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 21 Apr 2026 04:54:20 -0700 (PDT) Message-ID: Date: Tue, 21 Apr 2026 13:54:19 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: [PATCH 12/19] RISC-V: riscv_set_arch() can fail From: Jan Beulich To: Binutils Cc: Palmer Dabbelt , Andrew Waterman , Jim Wilson , Nelson Chu References: <620231e0-67d0-4bd0-b593-38f32b01a6d8@suse.com> Content-Language: en-US Autocrypt: addr=jbeulich@suse.com; keydata= xsDiBFk3nEQRBADAEaSw6zC/EJkiwGPXbWtPxl2xCdSoeepS07jW8UgcHNurfHvUzogEq5xk hu507c3BarVjyWCJOylMNR98Yd8VqD9UfmX0Hb8/BrA+Hl6/DB/eqGptrf4BSRwcZQM32aZK 7Pj2XbGWIUrZrd70x1eAP9QE3P79Y2oLrsCgbZJfEwCgvz9JjGmQqQkRiTVzlZVCJYcyGGsD /0tbFCzD2h20ahe8rC1gbb3K3qk+LpBtvjBu1RY9drYk0NymiGbJWZgab6t1jM7sk2vuf0Py O9Hf9XBmK0uE9IgMaiCpc32XV9oASz6UJebwkX+zF2jG5I1BfnO9g7KlotcA/v5ClMjgo6Gl MDY4HxoSRu3i1cqqSDtVlt+AOVBJBACrZcnHAUSuCXBPy0jOlBhxPqRWv6ND4c9PH1xjQ3NP nxJuMBS8rnNg22uyfAgmBKNLpLgAGVRMZGaGoJObGf72s6TeIqKJo/LtggAS9qAUiuKVnygo 3wjfkS9A3DRO+SpU7JqWdsveeIQyeyEJ/8PTowmSQLakF+3fote9ybzd880fSmFuIEJldWxp Y2ggPGpiZXVsaWNoQHN1c2UuY29tPsJgBBMRAgAgBQJZN5xEAhsDBgsJCAcDAgQVAggDBBYC AwECHgECF4AACgkQoDSui/t3IH4J+wCfQ5jHdEjCRHj23O/5ttg9r9OIruwAn3103WUITZee e7Sbg12UgcQ5lv7SzsFNBFk3nEQQCACCuTjCjFOUdi5Nm244F+78kLghRcin/awv+IrTcIWF hUpSs1Y91iQQ7KItirz5uwCPlwejSJDQJLIS+QtJHaXDXeV6NI0Uef1hP20+y8qydDiVkv6l IreXjTb7DvksRgJNvCkWtYnlS3mYvQ9NzS9PhyALWbXnH6sIJd2O9lKS1Mrfq+y0IXCP10eS FFGg+Av3IQeFatkJAyju0PPthyTqxSI4lZYuJVPknzgaeuJv/2NccrPvmeDg6Coe7ZIeQ8Yj t0ARxu2xytAkkLCel1Lz1WLmwLstV30g80nkgZf/wr+/BXJW/oIvRlonUkxv+IbBM3dX2OV8 AmRv1ySWPTP7AAMFB/9PQK/VtlNUJvg8GXj9ootzrteGfVZVVT4XBJkfwBcpC/XcPzldjv+3 HYudvpdNK3lLujXeA5fLOH+Z/G9WBc5pFVSMocI71I8bT8lIAzreg0WvkWg5V2WZsUMlnDL9 mpwIGFhlbM3gfDMs7MPMu8YQRFVdUvtSpaAs8OFfGQ0ia3LGZcjA6Ik2+xcqscEJzNH+qh8V m5jjp28yZgaqTaRbg3M/+MTbMpicpZuqF4rnB0AQD12/3BNWDR6bmh+EkYSMcEIpQmBM51qM EKYTQGybRCjpnKHGOxG0rfFY1085mBDZCH5Kx0cl0HVJuQKC+dV2ZY5AqjcKwAxpE75MLFkr wkkEGBECAAkFAlk3nEQCGwwACgkQoDSui/t3IH7nnwCfcJWUDUFKdCsBH/E5d+0ZnMQi+G0A nAuWpQkjM1ASeQwSHEeAWPgskBQL In-Reply-To: <620231e0-67d0-4bd0-b593-38f32b01a6d8@suse.com> X-Spam-Status: No, score=-3016.5 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_NONE, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on sourceware.org X-BeenThere: binutils@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Binutils mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: binutils-bounces~patchwork=sourceware.org@sourceware.org In that case neither riscv_rps_as.subset_list nor file_arch_str would be set, yet the NULL pointers would be happily passed into functions not expecting such. --- a/gas/config/tc-riscv.c +++ b/gas/config/tc-riscv.c @@ -345,7 +345,9 @@ riscv_set_arch (const char *s) { as_bad (_("the architecture string of -march and elf architecture " "attributes cannot be empty")); - return; + if (file_arch_str != NULL) + return; + s = DEFAULT_RISCV_ARCH_WITH_EXT; } if (riscv_rps_as.subset_list == NULL) From patchwork Tue Apr 21 11:54:55 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Beulich X-Patchwork-Id: 133468 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from vm01.sourceware.org (localhost [127.0.0.1]) by sourceware.org (Postfix) with ESMTP id 3EB974BAD149 for ; Tue, 21 Apr 2026 11:55:55 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 3EB974BAD149 Authentication-Results: sourceware.org; dkim=pass (2048-bit key, unprotected) header.d=suse.com header.i=@suse.com header.a=rsa-sha256 header.s=google header.b=JsaZrjTW X-Original-To: binutils@sourceware.org Delivered-To: binutils@sourceware.org Received: from mail-wr1-x430.google.com (mail-wr1-x430.google.com [IPv6:2a00:1450:4864:20::430]) by sourceware.org (Postfix) with ESMTPS id 806E84B9DB5D for ; Tue, 21 Apr 2026 11:54:57 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 806E84B9DB5D Authentication-Results: sourceware.org; dmarc=pass (p=quarantine dis=none) header.from=suse.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=suse.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 806E84B9DB5D Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2a00:1450:4864:20::430 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1776772497; cv=none; b=vx5cMYTIgmjb5ZFVe68i1kmF07+TWZBdFK8L7r7KQrIBiNtQCnuWWIu8CC7y71HXV8+gpIXYWGqdSdJpItvc1VbIVmVh5eLwrVkOTHSBadZens4nSTu9BjRz2lGVePMZbzyJzygn0gXPJ45BW6C+k+l+0PYE+n0dIywoNmymHsg= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1776772497; c=relaxed/simple; bh=EQSFqGAVTZOYl9wShCOJaojKdHxhPywUn33cnbrCvXo=; h=DKIM-Signature:Message-ID:Date:MIME-Version:Subject:From:To; b=V9CxpHrSfsAzxbg2WKNwRUF0us/QPQL5b9NsgX7NgLjtrKHqw07lgrd3OwmwXd1LgtnMxhczS9j3z1o3rlqG76r62mPlxTndY6Ccfb5Tm6PMEyq8WtslGW/epg+eEk0X6hWFP5FxniVFZK0tHmiubRwlnyoYlWCeGTxD6SYo8uM= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 806E84B9DB5D Received: by mail-wr1-x430.google.com with SMTP id ffacd0b85a97d-43d7650202fso3271547f8f.2 for ; Tue, 21 Apr 2026 04:54:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=google; t=1776772496; x=1777377296; darn=sourceware.org; h=content-transfer-encoding:in-reply-to:autocrypt:content-language :references:cc:to:from:subject:user-agent:mime-version:date :message-id:from:to:cc:subject:date:message-id:reply-to; bh=6fa6wv8hI0IXkJ7LSjLWMydIb5+gkTLIZUbIsxCixuA=; b=JsaZrjTWtKLXta7HkS9axRrnUNmg1xdGgk5X6Pmex1RZKiUQZovK1sKlRqr41FCabF NPBagZa62TU/MzpT7QSmz3JRAAXOOq88pbDddd6pOjO+jvnQL+HN3naLjLIaidK73MQx xNaVkO1P9i/xI0cAjoKEyj7wbzNzAeoEwRvzZyy0senmVVAtavRbgeGyBpoGyFUYTTyV UeuyqvHAgSqUaQ5yLQjolplOdtFls3NNRHlj0oVV0S53jKm07/EroEcbFrJi+SjuB+Bm jKtNRs7viRYqKS8ZsxPSQ1jTByTVzCqf4m9Cdgdcd7EcdaHaYRQciJzQL/hAaK+WiTSO Z91g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776772496; x=1777377296; h=content-transfer-encoding:in-reply-to:autocrypt:content-language :references:cc:to:from:subject:user-agent:mime-version:date :message-id:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=6fa6wv8hI0IXkJ7LSjLWMydIb5+gkTLIZUbIsxCixuA=; b=maG5Lc7KIz84SHKBA5f9sQ/kFiaw4eLfvHiQUlBDrx1XOGSs2ktrXeMPvOlByrl1vr xZ7CyYIbb+izGfzeUXRQvrdZvNkSRPvtUWuxHUxOrbeb+wVzaEm1NTxu+42CB3o4CEKO En23w9wtXe3cMzGYo4ahPhRxqIwunagNO8IGh4dxbUV2bqSY1b739WPKRq3RyLAwkKsX iFcrflhzdNF5B6sSTz5se0VE8MUtLiTh2R5vYubD28W/jLYDs4O4c1GWbb0de2g9BLw2 bzvWTqx+WSoiNf0d3mJLn1GCNCddDfRBdYQv4ebccr9XjgHp2FgdbXh0fRXIxd2DPgHW wejQ== X-Gm-Message-State: AOJu0YzUs6C8fU05BcIdVekf+lXUwK6UUcnfOoYAQcSFfUG1QLRuMHuP 839krEq4FKM8lti+JzxJJCTtiUWgGvOj0A3rz1/EmfQMjLjdDJdy/evfnRmoDO53fWRNuHYj6da 3ZOBxfQ== X-Gm-Gg: AeBDieu1o3VhvzEwRLShrRJjIAlkqYvdDvKN/pyZGLdmqsl6CvWUyZTKkXkF6KdElmr IKbHdhCaGbGwa/l9tOvFrXW/boV0MyhgLczLG6e1ARtRE20KJGhuJfayvewRFAb3S1YqBC9qWTK 71HLrKhv7WPoRUZyW3CNVSmVgcVD9UsSd1OV+u9OcShTLJBlEx7uAyOnwEv8RAVMHhf/njPSkaz jpjecayoHT0Bd8neaOscXeLTH1yXlC94lmuFystRo6LnMbKdjxmR9mCoSPoLvj9OO8tisg7jzHS xaaOZJEnzVXdDQZHSYDzTs2UuK2PnoNMuWLhtokKeDiU77+U4w28gwtu705pn+mfut9jv6gUzL9 r/QwUtHkYwC3wOVA/UGUqNWyJ22cPukSWp5KejB6FeJukZWfmfCiHD3aQxKkYKSGI0O0CRJJysv sOHxcNnMF/71erpVCTBlmHSM7S5Q1Ym3bI8S6522zVpveWIqzuNy+a2cPw037y0c5b+idny/C3T hTD9NtPgx0AgKbcltHfCRN7sQ== X-Received: by 2002:a05:6000:4201:b0:43f:e7fa:a6f1 with SMTP id ffacd0b85a97d-43fe7faa7admr24737110f8f.24.1776772496384; Tue, 21 Apr 2026 04:54:56 -0700 (PDT) Received: from [10.156.60.236] (ip-037-024-206-209.um08.pools.vodafone-ip.de. [37.24.206.209]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-43fe4cb1176sm38231001f8f.3.2026.04.21.04.54.55 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 21 Apr 2026 04:54:56 -0700 (PDT) Message-ID: <923dd985-1100-4772-bc3c-f1af419c2815@suse.com> Date: Tue, 21 Apr 2026 13:54:55 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: [PATCH 13/19] RISC-V: riscv_parse_subset_t's isa_spec is only parser input From: Jan Beulich To: Binutils Cc: Palmer Dabbelt , Andrew Waterman , Jim Wilson , Nelson Chu References: <620231e0-67d0-4bd0-b593-38f32b01a6d8@suse.com> Content-Language: en-US Autocrypt: addr=jbeulich@suse.com; keydata= xsDiBFk3nEQRBADAEaSw6zC/EJkiwGPXbWtPxl2xCdSoeepS07jW8UgcHNurfHvUzogEq5xk hu507c3BarVjyWCJOylMNR98Yd8VqD9UfmX0Hb8/BrA+Hl6/DB/eqGptrf4BSRwcZQM32aZK 7Pj2XbGWIUrZrd70x1eAP9QE3P79Y2oLrsCgbZJfEwCgvz9JjGmQqQkRiTVzlZVCJYcyGGsD /0tbFCzD2h20ahe8rC1gbb3K3qk+LpBtvjBu1RY9drYk0NymiGbJWZgab6t1jM7sk2vuf0Py O9Hf9XBmK0uE9IgMaiCpc32XV9oASz6UJebwkX+zF2jG5I1BfnO9g7KlotcA/v5ClMjgo6Gl MDY4HxoSRu3i1cqqSDtVlt+AOVBJBACrZcnHAUSuCXBPy0jOlBhxPqRWv6ND4c9PH1xjQ3NP nxJuMBS8rnNg22uyfAgmBKNLpLgAGVRMZGaGoJObGf72s6TeIqKJo/LtggAS9qAUiuKVnygo 3wjfkS9A3DRO+SpU7JqWdsveeIQyeyEJ/8PTowmSQLakF+3fote9ybzd880fSmFuIEJldWxp Y2ggPGpiZXVsaWNoQHN1c2UuY29tPsJgBBMRAgAgBQJZN5xEAhsDBgsJCAcDAgQVAggDBBYC AwECHgECF4AACgkQoDSui/t3IH4J+wCfQ5jHdEjCRHj23O/5ttg9r9OIruwAn3103WUITZee e7Sbg12UgcQ5lv7SzsFNBFk3nEQQCACCuTjCjFOUdi5Nm244F+78kLghRcin/awv+IrTcIWF hUpSs1Y91iQQ7KItirz5uwCPlwejSJDQJLIS+QtJHaXDXeV6NI0Uef1hP20+y8qydDiVkv6l IreXjTb7DvksRgJNvCkWtYnlS3mYvQ9NzS9PhyALWbXnH6sIJd2O9lKS1Mrfq+y0IXCP10eS FFGg+Av3IQeFatkJAyju0PPthyTqxSI4lZYuJVPknzgaeuJv/2NccrPvmeDg6Coe7ZIeQ8Yj t0ARxu2xytAkkLCel1Lz1WLmwLstV30g80nkgZf/wr+/BXJW/oIvRlonUkxv+IbBM3dX2OV8 AmRv1ySWPTP7AAMFB/9PQK/VtlNUJvg8GXj9ootzrteGfVZVVT4XBJkfwBcpC/XcPzldjv+3 HYudvpdNK3lLujXeA5fLOH+Z/G9WBc5pFVSMocI71I8bT8lIAzreg0WvkWg5V2WZsUMlnDL9 mpwIGFhlbM3gfDMs7MPMu8YQRFVdUvtSpaAs8OFfGQ0ia3LGZcjA6Ik2+xcqscEJzNH+qh8V m5jjp28yZgaqTaRbg3M/+MTbMpicpZuqF4rnB0AQD12/3BNWDR6bmh+EkYSMcEIpQmBM51qM EKYTQGybRCjpnKHGOxG0rfFY1085mBDZCH5Kx0cl0HVJuQKC+dV2ZY5AqjcKwAxpE75MLFkr wkkEGBECAAkFAlk3nEQCGwwACgkQoDSui/t3IH7nnwCfcJWUDUFKdCsBH/E5d+0ZnMQi+G0A nAuWpQkjM1ASeQwSHEeAWPgskBQL In-Reply-To: <620231e0-67d0-4bd0-b593-38f32b01a6d8@suse.com> X-Spam-Status: No, score=-3016.5 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_NONE, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on sourceware.org X-BeenThere: binutils@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Binutils mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: binutils-bounces~patchwork=sourceware.org@sourceware.org Make the field pointer-to-const and drop indirection from riscv_get_default_ext_version(). This way it's more clear that parsing won't alter the field. --- a/bfd/elfxx-riscv.c +++ b/bfd/elfxx-riscv.c @@ -1892,14 +1892,13 @@ riscv_add_subset (riscv_subset_list_t *s /* Get the default versions from the riscv_supported_*ext tables. */ static void -riscv_get_default_ext_version (enum riscv_spec_class *default_isa_spec, +riscv_get_default_ext_version (enum riscv_spec_class default_isa_spec, const char *name, int *major_version, int *minor_version) { if (name == NULL - || default_isa_spec == NULL - || *default_isa_spec == ISA_SPEC_CLASS_NONE) + || default_isa_spec == ISA_SPEC_CLASS_NONE) return; const struct riscv_supported_ext *table = NULL; @@ -1919,7 +1918,7 @@ riscv_get_default_ext_version (enum risc { if (strcmp (table[i].name, name) == 0 && (table[i].isa_spec_class == ISA_SPEC_CLASS_DRAFT - || table[i].isa_spec_class == *default_isa_spec)) + || table[i].isa_spec_class == default_isa_spec)) { *major_version = table[i].major_version; *minor_version = table[i].minor_version; @@ -1945,7 +1944,7 @@ riscv_parse_add_subset (riscv_parse_subs if (major_version == RISCV_UNKNOWN_VERSION || minor_version == RISCV_UNKNOWN_VERSION) - riscv_get_default_ext_version (rps->isa_spec, subset, + riscv_get_default_ext_version (*rps->isa_spec, subset, &major_version, &minor_version); /* We don't care the versions of the implicit extensions. */ --- a/bfd/elfxx-riscv.h +++ b/bfd/elfxx-riscv.h @@ -92,7 +92,7 @@ typedef struct void (*error_handler) (const char *, ...) ATTRIBUTE_PRINTF_1; unsigned *xlen; - enum riscv_spec_class *isa_spec; + const enum riscv_spec_class *isa_spec; bool check_unknown_prefixed_ext; } riscv_parse_subset_t; From patchwork Tue Apr 21 11:55:18 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Beulich X-Patchwork-Id: 133471 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from vm01.sourceware.org (localhost [127.0.0.1]) by sourceware.org (Postfix) with ESMTP id 71CCB4B9DB6A for ; Tue, 21 Apr 2026 11:57:20 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 71CCB4B9DB6A Authentication-Results: sourceware.org; dkim=pass (2048-bit key, unprotected) header.d=suse.com header.i=@suse.com header.a=rsa-sha256 header.s=google header.b=VwjA2+gX X-Original-To: binutils@sourceware.org Delivered-To: binutils@sourceware.org Received: from mail-wm1-x32e.google.com (mail-wm1-x32e.google.com [IPv6:2a00:1450:4864:20::32e]) by sourceware.org (Postfix) with ESMTPS id 804244B9DB6D for ; Tue, 21 Apr 2026 11:55:20 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 804244B9DB6D Authentication-Results: sourceware.org; dmarc=pass (p=quarantine dis=none) header.from=suse.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=suse.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 804244B9DB6D Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2a00:1450:4864:20::32e ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1776772520; cv=none; b=j5S7dZ7AbeOC/AYkqS5qpQUhL4NBnUy5izRhxGUnOmn9WiFD6GNXmTI/2ae8fD+QzTs+vbRNfHuLncai+u2qc001pIMqsMsua4tKbJtk5goA6/FePm5vrINzVM/MCxCv6cJ+he9dgf9GOC9SqzTXyzZnUFMjC0C6HDYN3T75xkM= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1776772520; c=relaxed/simple; bh=8b1HUkRQX8fIU5hft+mkTsWIXwwB+2uwDWCwKGXS9sY=; h=DKIM-Signature:Message-ID:Date:MIME-Version:Subject:From:To; b=qOcMIlrApI0ApluxzB4N8O+XdoGlLxVgU/JHrEBoEEdBRW7WEDa1Mkfo0AisjjEDM7XtZQ1HqckP+GjcbxIhPoezQQlaDf8ElyJdQfL2FjxAD/gSPeHZpzz/pNboEAimp6370WgEYElcWqZ1DMtAF13EkFgb+d7dk6eMmx86AqY= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 804244B9DB6D Received: by mail-wm1-x32e.google.com with SMTP id 5b1f17b1804b1-488ad135063so34655255e9.0 for ; Tue, 21 Apr 2026 04:55:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=google; t=1776772519; x=1777377319; darn=sourceware.org; h=content-transfer-encoding:in-reply-to:autocrypt:content-language :references:cc:to:from:subject:user-agent:mime-version:date :message-id:from:to:cc:subject:date:message-id:reply-to; bh=c2a/Qk5Fl8wE0fzY3YkbF4s6AoXwHoroy9lUQIDSAE0=; b=VwjA2+gXrXnnOShdniLgvY8LXbfieJ6JSSdR5P2nPPHPd+1FmZTqINb4bLjxXiM41m unG/jPLw+K/H9IfKFryZrZ0pb6rjnzzNUWbnc73/uhOuz0goNDinkRUDdKjLMgSUoSnY VK627G6dcbeHKntUyUMX1mVFfJS/II462PsUA8485F0qdsdzyZJL92oJuOfAT06D5I0X eyXiEd+MJnGhc6rG9ZwYEJv/DRN5ptdQHhUbIV9yX2s7IJekhQ85oDrsZXs9IGR6kVbF EKEJHc8eSDh7UpPaGcGyqxaJ/h6CtEdgvDUV4xt8SEjlpDtA/ZvePlJggOLmtwenoOZs YAEQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776772519; x=1777377319; h=content-transfer-encoding:in-reply-to:autocrypt:content-language :references:cc:to:from:subject:user-agent:mime-version:date :message-id:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=c2a/Qk5Fl8wE0fzY3YkbF4s6AoXwHoroy9lUQIDSAE0=; b=I26684VaG9TGBpXreQMOQ8izh+x/EtMIlEkBScoO+taQLbRtOONGTuCGtJigI2usJS Ke+3Wd5HbrbFaQ8Bnpu3dtYZR2voTQyqbGKu+b3vW+q//IkVhT1XVK0yDmmzgqVvJoIB fb3t1tz+cCa/pFHZwHRB2yQG2Zwl/7DEiCHSFtVGFgKij1tZ+Fl+405Pu4A8vD2TSVbK mVBcX6vRvAArAgAKamZ6Tsc4oLqUEUYDwU7YZR09+CnDLgjiWQnGYBhczFX34gWBnX3m 1LNvzg+7DcRpD3MIZPqsZ4G4koum6n2l/eCvXwiOsl8q2Uur+IgwwMaX2wIZN2m7HkOV JbRw== X-Gm-Message-State: AOJu0Yyj3QfykFTawgqgVGvQf+x2pMGL3hhCkFV12UvHGMY+CaKPvHJ4 5wxhzciW4qyHZKx8fnBtu7yJBmDtjRbgHnpsWfHpp6SVG8ZXXz2AN1p2UQYZSCsvjNLHOq1RClL QnDVScA== X-Gm-Gg: AeBDiesocVMRSDtYl5WRnqqwvYXj7ZWCP/U8W2MbolIFw5HSmJbujVEU45TfSIvcvzu GVWhbdKJiiImPiWj4qhjEctpRWScrluxPz8nssoTIMjaUXnk9tQ435ChHXuJKdxpYregtSGEkc3 pKw+PUwxAUYAgJPKjh8UeOtu9OW4DrKPzkrm0NLNR+Dt26XriZONLsYoyKCODVLBLbna+6N+ZvF OqIv15mnxNCLmTiNz5eON5h6T2soCnvV8xECAhzqNzpWrTx0sW4STVA7n3ffwihdG+VGZUx5wpK y4Nbqb1rZdoXXgW5ViLtl81aCehmRXyyDWM2oGMixrUF0HxXWGwPaPOYCCEXUxysp3craPdmiTr WIq7x+hTecb/NWUOyZX1+/W7evBCKFFZLk6JsA2BtbnxvkdV8aiAMRlskKjV0b+mf2/GpySurCs cx4z06HPp15XZkLB9dDYx791UyXHiZIqMmGxXKC6EB+lWSon8N1+E9k702yeOhw4kZCtUsNQ9K6 veL3pGG3ZtET5jH98F3LOgruw== X-Received: by 2002:a05:600c:6296:b0:483:64b4:79da with SMTP id 5b1f17b1804b1-488fb7923a9mr240560155e9.26.1776772519372; Tue, 21 Apr 2026 04:55:19 -0700 (PDT) Received: from [10.156.60.236] (ip-037-024-206-209.um08.pools.vodafone-ip.de. [37.24.206.209]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4891d251b24sm46794535e9.7.2026.04.21.04.55.18 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 21 Apr 2026 04:55:19 -0700 (PDT) Message-ID: Date: Tue, 21 Apr 2026 13:55:18 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: [PATCH 14/19] RISC-V: error handling for subset parsing From: Jan Beulich To: Binutils Cc: Palmer Dabbelt , Andrew Waterman , Jim Wilson , Nelson Chu References: <620231e0-67d0-4bd0-b593-38f32b01a6d8@suse.com> Content-Language: en-US Autocrypt: addr=jbeulich@suse.com; keydata= xsDiBFk3nEQRBADAEaSw6zC/EJkiwGPXbWtPxl2xCdSoeepS07jW8UgcHNurfHvUzogEq5xk hu507c3BarVjyWCJOylMNR98Yd8VqD9UfmX0Hb8/BrA+Hl6/DB/eqGptrf4BSRwcZQM32aZK 7Pj2XbGWIUrZrd70x1eAP9QE3P79Y2oLrsCgbZJfEwCgvz9JjGmQqQkRiTVzlZVCJYcyGGsD /0tbFCzD2h20ahe8rC1gbb3K3qk+LpBtvjBu1RY9drYk0NymiGbJWZgab6t1jM7sk2vuf0Py O9Hf9XBmK0uE9IgMaiCpc32XV9oASz6UJebwkX+zF2jG5I1BfnO9g7KlotcA/v5ClMjgo6Gl MDY4HxoSRu3i1cqqSDtVlt+AOVBJBACrZcnHAUSuCXBPy0jOlBhxPqRWv6ND4c9PH1xjQ3NP nxJuMBS8rnNg22uyfAgmBKNLpLgAGVRMZGaGoJObGf72s6TeIqKJo/LtggAS9qAUiuKVnygo 3wjfkS9A3DRO+SpU7JqWdsveeIQyeyEJ/8PTowmSQLakF+3fote9ybzd880fSmFuIEJldWxp Y2ggPGpiZXVsaWNoQHN1c2UuY29tPsJgBBMRAgAgBQJZN5xEAhsDBgsJCAcDAgQVAggDBBYC AwECHgECF4AACgkQoDSui/t3IH4J+wCfQ5jHdEjCRHj23O/5ttg9r9OIruwAn3103WUITZee e7Sbg12UgcQ5lv7SzsFNBFk3nEQQCACCuTjCjFOUdi5Nm244F+78kLghRcin/awv+IrTcIWF hUpSs1Y91iQQ7KItirz5uwCPlwejSJDQJLIS+QtJHaXDXeV6NI0Uef1hP20+y8qydDiVkv6l IreXjTb7DvksRgJNvCkWtYnlS3mYvQ9NzS9PhyALWbXnH6sIJd2O9lKS1Mrfq+y0IXCP10eS FFGg+Av3IQeFatkJAyju0PPthyTqxSI4lZYuJVPknzgaeuJv/2NccrPvmeDg6Coe7ZIeQ8Yj t0ARxu2xytAkkLCel1Lz1WLmwLstV30g80nkgZf/wr+/BXJW/oIvRlonUkxv+IbBM3dX2OV8 AmRv1ySWPTP7AAMFB/9PQK/VtlNUJvg8GXj9ootzrteGfVZVVT4XBJkfwBcpC/XcPzldjv+3 HYudvpdNK3lLujXeA5fLOH+Z/G9WBc5pFVSMocI71I8bT8lIAzreg0WvkWg5V2WZsUMlnDL9 mpwIGFhlbM3gfDMs7MPMu8YQRFVdUvtSpaAs8OFfGQ0ia3LGZcjA6Ik2+xcqscEJzNH+qh8V m5jjp28yZgaqTaRbg3M/+MTbMpicpZuqF4rnB0AQD12/3BNWDR6bmh+EkYSMcEIpQmBM51qM EKYTQGybRCjpnKHGOxG0rfFY1085mBDZCH5Kx0cl0HVJuQKC+dV2ZY5AqjcKwAxpE75MLFkr wkkEGBECAAkFAlk3nEQCGwwACgkQoDSui/t3IH7nnwCfcJWUDUFKdCsBH/E5d+0ZnMQi+G0A nAuWpQkjM1ASeQwSHEeAWPgskBQL In-Reply-To: <620231e0-67d0-4bd0-b593-38f32b01a6d8@suse.com> X-Spam-Status: No, score=-3016.5 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_NONE, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on sourceware.org X-BeenThere: binutils@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Binutils mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: binutils-bounces~patchwork=sourceware.org@sourceware.org The parsing of both the argument of -march= and the operand(s) of ".option arch, ..." can fail. In such a case for .option (and equally for .attribute) prior state should continue to be used, while for -march= defaults should be put in place. In particular, extensions conflicting with previously enabled extensions should not suddenly become available. While re-indenting riscv_set_rvc() invocations, leverage that C implies Zca (and hence a check for the latter suffices). Mirror that change to riscv_set_arch() for consistency. --- a/bfd/elfxx-riscv.c +++ b/bfd/elfxx-riscv.c @@ -2768,7 +2768,28 @@ bool riscv_update_subset (riscv_parse_subset_t *rps, const char *str) { - return riscv_update_subset1 (rps, NULL, str); + unsigned int newxlen = *rps->xlen; + riscv_parse_subset_t newrps = { + .subset_list = riscv_copy_subset_list (rps->subset_list), + .error_handler = rps->error_handler, + .xlen = &newxlen, + .isa_spec = rps->isa_spec, + .check_unknown_prefixed_ext = rps->check_unknown_prefixed_ext, + }; + + if (!riscv_update_subset1 (&newrps, NULL, str)) + { + riscv_release_subset_list (newrps.subset_list); + free (newrps.subset_list); + return false; + } + + *rps->xlen = newxlen; + riscv_release_subset_list (rps->subset_list); + *rps->subset_list = *newrps.subset_list; + free (newrps.subset_list); + + return true; } /* Called from .option norvc directives. */ --- a/gas/config/tc-riscv.c +++ b/gas/config/tc-riscv.c @@ -350,20 +350,38 @@ riscv_set_arch (const char *s) s = DEFAULT_RISCV_ARCH_WITH_EXT; } - if (riscv_rps_as.subset_list == NULL) + unsigned int newxlen = xlen; + riscv_parse_subset_t newrps = { + .subset_list = XCNEW (riscv_subset_list_t), + .error_handler = as_bad, + .xlen = &newxlen, + .isa_spec = &default_isa_spec, + .check_unknown_prefixed_ext = true, + }; + + if (!riscv_parse_subset (&newrps, s)) { - riscv_rps_as.subset_list = XNEW (riscv_subset_list_t); - riscv_rps_as.subset_list->head = NULL; - riscv_rps_as.subset_list->tail = NULL; - riscv_rps_as.subset_list->arch_str = NULL; + riscv_release_subset_list (newrps.subset_list); + if (file_arch_str != NULL) + { + free (newrps.subset_list); + return; + } + if (!riscv_parse_subset (&newrps, DEFAULT_RISCV_ARCH_WITH_EXT)) + abort (); } - riscv_release_subset_list (riscv_rps_as.subset_list); - riscv_parse_subset (&riscv_rps_as, s); + xlen = newxlen; + if (riscv_rps_as.subset_list != NULL) + { + riscv_release_subset_list (riscv_rps_as.subset_list); + free (riscv_rps_as.subset_list); + } + riscv_rps_as.subset_list = newrps.subset_list; + riscv_arch_str (xlen, riscv_rps_as.subset_list, true/* update */); file_arch_str = xstrdup (riscv_rps_as.subset_list->arch_str); - riscv_set_rvc (riscv_subset_supports (&riscv_rps_as, "c") - || riscv_subset_supports (&riscv_rps_as, "zca")); + riscv_set_rvc (riscv_subset_supports (&riscv_rps_as, "zca")); if (riscv_subset_supports (&riscv_rps_as, "ztso")) riscv_set_tso (); @@ -5077,13 +5095,16 @@ s_riscv_option (int x ATTRIBUTE_UNUSED) if (strcmp (name, "rvc") == 0) { - riscv_update_subset (&riscv_rps_as, "+c"); - riscv_arch_str (xlen, riscv_rps_as.subset_list, true/* update */); - riscv_set_rvc (true); + if (riscv_update_subset (&riscv_rps_as, "+c")) + { + riscv_arch_str (xlen, riscv_rps_as.subset_list, true/* update */); + riscv_set_rvc (true); + } } else if (strcmp (name, "norvc") == 0) { - riscv_update_subset_norvc (&riscv_rps_as); + if (!riscv_update_subset_norvc (&riscv_rps_as)) + abort (); riscv_arch_str (xlen, riscv_rps_as.subset_list, true/* update */); riscv_set_rvc (false); } @@ -5104,14 +5125,15 @@ s_riscv_option (int x ATTRIBUTE_UNUSED) name += 5; if (is_whitespace (*name) && *name != '\0') name++; - riscv_update_subset (&riscv_rps_as, name); - riscv_arch_str (xlen, riscv_rps_as.subset_list, true/* update */); + if (riscv_update_subset (&riscv_rps_as, name)) + { + riscv_arch_str (xlen, riscv_rps_as.subset_list, true/* update */); - riscv_set_rvc (riscv_subset_supports (&riscv_rps_as, "c") - || riscv_subset_supports (&riscv_rps_as, "zca")); + riscv_set_rvc (riscv_subset_supports (&riscv_rps_as, "zca")); - if (riscv_subset_supports (&riscv_rps_as, "ztso")) - riscv_set_tso (); + if (riscv_subset_supports (&riscv_rps_as, "ztso")) + riscv_set_tso (); + } } else if (strcmp (name, "push") == 0) { --- a/gas/testsuite/gas/riscv/x-thead-vector-fail.d +++ b/gas/testsuite/gas/riscv/x-thead-vector-fail.d @@ -1,3 +1,3 @@ #as: -march=rv64gc_zve32x_xtheadvector -#source: x-thead-vector.s +#source: empty.s #error_output: x-thead-vector-fail.l From patchwork Tue Apr 21 11:55:40 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Beulich X-Patchwork-Id: 133469 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from vm01.sourceware.org (localhost [127.0.0.1]) by sourceware.org (Postfix) with ESMTP id ACD084BAD15F for ; Tue, 21 Apr 2026 11:57:08 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org ACD084BAD15F Authentication-Results: sourceware.org; dkim=pass (2048-bit key, unprotected) header.d=suse.com header.i=@suse.com header.a=rsa-sha256 header.s=google header.b=Swx6kvya X-Original-To: binutils@sourceware.org Delivered-To: binutils@sourceware.org Received: from mail-wr1-x42b.google.com (mail-wr1-x42b.google.com [IPv6:2a00:1450:4864:20::42b]) by sourceware.org (Postfix) with ESMTPS id 29D574B9DB55 for ; Tue, 21 Apr 2026 11:55:43 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 29D574B9DB55 Authentication-Results: sourceware.org; dmarc=pass (p=quarantine dis=none) header.from=suse.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=suse.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 29D574B9DB55 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2a00:1450:4864:20::42b ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1776772548; cv=none; b=vDNzyI+I/50dZJQRJWTVwfoHyB2o1NNUpRHA0xwHDttTVJ9ATUalYjikffA9oKo5BVb4WHSYmk+aFpKyx2zYqY5cfKS6VghSeUc0DgSxwF58kOAVX6IJqT2HhIb3/ZT6XXlUzQaHVRp6ENK7u3g1B1moF89akpd+Jq7GWDaS0V0= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1776772548; c=relaxed/simple; bh=BNLnAamL5SQz8pgDvxFlOHM+9kayQ1IR9f1fCRogk5w=; h=DKIM-Signature:Message-ID:Date:MIME-Version:Subject:From:To; b=wMYQcOwtP9kX8zunwpFIWOYegYF8DvKvNEHsaamUxZnvhGgGagEfyL41VIDBxFzM/q7p/QinC3un2k0rRx0iJSW+/K7BRrihBFXkv6NOCBaMv8RwuscCBDkJislqtU5wp+H9TKHURuTSK1hLIqVH20h4GNpHO67ztkYvSvE5FuA= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 29D574B9DB55 Received: by mail-wr1-x42b.google.com with SMTP id ffacd0b85a97d-43d0deb7ad5so3357888f8f.2 for ; Tue, 21 Apr 2026 04:55:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=google; t=1776772542; x=1777377342; darn=sourceware.org; h=content-transfer-encoding:in-reply-to:autocrypt:content-language :references:cc:to:from:subject:user-agent:mime-version:date :message-id:from:to:cc:subject:date:message-id:reply-to; bh=AkDfWtcC22J3Xy8/ao7cLyn2Zg7Ul6WlAo7l48FzNis=; b=Swx6kvyaT8MY8a/JY6eFO99lWfVl0wTTeAqePUvNAuTrq3AScv+Ct0tAeyg5tse5hp bA/oa2vUFrTiWkXPvcpbxxiWkYOfEevpWGJBpPsyzKseM9gGzUk/kA4xQrEowSOHiIfN JRue9Ys/IWoG+WLzoW/feO1xr1FwK9BbRVYXc96y33xvfl/ZE/3C7sAbCgt1reQkWCi1 hEF2C1LsrU/2qGpJz0JRpczzZT3lnyHo5mZFE08/iK3rTk3xqyMzMXP2GxVdMbXlMdoI v042DDH/Ia2If+bu35tgvEbQw9BIlK/AFmhZjdKrczTYtk0fznm76dKsYb8rSPJH86Iq IICA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776772542; x=1777377342; h=content-transfer-encoding:in-reply-to:autocrypt:content-language :references:cc:to:from:subject:user-agent:mime-version:date :message-id:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=AkDfWtcC22J3Xy8/ao7cLyn2Zg7Ul6WlAo7l48FzNis=; b=PvADspAGD+3QosP6K/G69EH205oov+Tz/eQyU1C6aiqo6Z52wqDrubiS0a5crjE3vQ 3Y22YgO6OurloF8Ms7QutRQ1Hs3pNaVc/w3fSzCNoIqLvH9/6zL27KjbK/EhFKp59Vfk 8zm+v6hACEb6FHz8QsyKwNifxCcoE/7mXdaUqm/jdwDvrc+6dwGYqv3knAes1kfJDX4g Bu791KFK7S/ASSdTtYhN0ty2cIT3lS9w8MiX8NXOHNFAJ//Xd/hI0+5QPgA6QCN0MfKx FJsNMQk87TffX1N8ewjQR8XTNkHayPAx08VC0ASvn2ISH5rUHY+5RpqcZPhpr5DE4l32 V2ZQ== X-Gm-Message-State: AOJu0YxulZsvcAgD1Gihnq1PfFT9Rwt3RxU0cmKkhK4f5ECSkATDqF4H WHTmGtAY28CTAQnOTpwWlfje49UgCAsfKaFYnv+ol4hJxQf8vBYSgd7KNPTAGdDAxOAqSrLcruf u0DZ/7A== X-Gm-Gg: AeBDievZblYC0pPMRJF+ntOuHpVuACsLgTcpjrI8jnc39BbWP0Ew4Zv24jaTzdKtr39 jf7Ih2jIio9ufmD/VljjuE2lWLsEd7QjXDSNmy2qJFewO5sbGw9RpchjkwqIYkbdVSrRUYXS+OS 5Zovgm4Xvi6rei1kgUCYy3pFFfBlG/BsTJjTxzWsYJQ6CX5X7ZR/4pHDadQ0zW96W3E/hkZJCLp Q2GfdH+ywNzqlSN2Mw66n14qNs9udRUKFbkNRvQNWm/lCpzqFwMRjUFduoSkp9ibD5MfRbJdBYh tdwi/DHh+WsNKgVSl/rs5ymy3vHwE0vxc+A+L8IvViRNNW5/LLUfK/HWnZc76AIQrri4AEQmeS7 GMJForbCWehxlUcFwaZJsTc8182Gp9MkdJ7/OJAxjHsNp3YH/pV6Hpwhd0TK2KHnDK1bABqSuWR uRRqTBDNBC5TMZD1/z96uehrGg2QLvRlLMeYH5y7DyxgWORCyFFBEs4I2/CaDvuA4n/2MBxmPSv D/k9/cesVl+yAU1p+ZGRpsH11ZO5Yc7BuYk X-Received: by 2002:a05:6000:2081:b0:43d:30b4:1859 with SMTP id ffacd0b85a97d-43fe3db2edfmr26906278f8f.7.1776772541966; Tue, 21 Apr 2026 04:55:41 -0700 (PDT) Received: from [10.156.60.236] (ip-037-024-206-209.um08.pools.vodafone-ip.de. [37.24.206.209]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-43fe4cc09b1sm37306713f8f.9.2026.04.21.04.55.41 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 21 Apr 2026 04:55:41 -0700 (PDT) Message-ID: Date: Tue, 21 Apr 2026 13:55:40 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: [PATCH 15/19] RISC-V: avoid buffer underrun in subset parsing From: Jan Beulich To: Binutils Cc: Palmer Dabbelt , Andrew Waterman , Jim Wilson , Nelson Chu References: <620231e0-67d0-4bd0-b593-38f32b01a6d8@suse.com> Content-Language: en-US Autocrypt: addr=jbeulich@suse.com; keydata= xsDiBFk3nEQRBADAEaSw6zC/EJkiwGPXbWtPxl2xCdSoeepS07jW8UgcHNurfHvUzogEq5xk hu507c3BarVjyWCJOylMNR98Yd8VqD9UfmX0Hb8/BrA+Hl6/DB/eqGptrf4BSRwcZQM32aZK 7Pj2XbGWIUrZrd70x1eAP9QE3P79Y2oLrsCgbZJfEwCgvz9JjGmQqQkRiTVzlZVCJYcyGGsD /0tbFCzD2h20ahe8rC1gbb3K3qk+LpBtvjBu1RY9drYk0NymiGbJWZgab6t1jM7sk2vuf0Py O9Hf9XBmK0uE9IgMaiCpc32XV9oASz6UJebwkX+zF2jG5I1BfnO9g7KlotcA/v5ClMjgo6Gl MDY4HxoSRu3i1cqqSDtVlt+AOVBJBACrZcnHAUSuCXBPy0jOlBhxPqRWv6ND4c9PH1xjQ3NP nxJuMBS8rnNg22uyfAgmBKNLpLgAGVRMZGaGoJObGf72s6TeIqKJo/LtggAS9qAUiuKVnygo 3wjfkS9A3DRO+SpU7JqWdsveeIQyeyEJ/8PTowmSQLakF+3fote9ybzd880fSmFuIEJldWxp Y2ggPGpiZXVsaWNoQHN1c2UuY29tPsJgBBMRAgAgBQJZN5xEAhsDBgsJCAcDAgQVAggDBBYC AwECHgECF4AACgkQoDSui/t3IH4J+wCfQ5jHdEjCRHj23O/5ttg9r9OIruwAn3103WUITZee e7Sbg12UgcQ5lv7SzsFNBFk3nEQQCACCuTjCjFOUdi5Nm244F+78kLghRcin/awv+IrTcIWF hUpSs1Y91iQQ7KItirz5uwCPlwejSJDQJLIS+QtJHaXDXeV6NI0Uef1hP20+y8qydDiVkv6l IreXjTb7DvksRgJNvCkWtYnlS3mYvQ9NzS9PhyALWbXnH6sIJd2O9lKS1Mrfq+y0IXCP10eS FFGg+Av3IQeFatkJAyju0PPthyTqxSI4lZYuJVPknzgaeuJv/2NccrPvmeDg6Coe7ZIeQ8Yj t0ARxu2xytAkkLCel1Lz1WLmwLstV30g80nkgZf/wr+/BXJW/oIvRlonUkxv+IbBM3dX2OV8 AmRv1ySWPTP7AAMFB/9PQK/VtlNUJvg8GXj9ootzrteGfVZVVT4XBJkfwBcpC/XcPzldjv+3 HYudvpdNK3lLujXeA5fLOH+Z/G9WBc5pFVSMocI71I8bT8lIAzreg0WvkWg5V2WZsUMlnDL9 mpwIGFhlbM3gfDMs7MPMu8YQRFVdUvtSpaAs8OFfGQ0ia3LGZcjA6Ik2+xcqscEJzNH+qh8V m5jjp28yZgaqTaRbg3M/+MTbMpicpZuqF4rnB0AQD12/3BNWDR6bmh+EkYSMcEIpQmBM51qM EKYTQGybRCjpnKHGOxG0rfFY1085mBDZCH5Kx0cl0HVJuQKC+dV2ZY5AqjcKwAxpE75MLFkr wkkEGBECAAkFAlk3nEQCGwwACgkQoDSui/t3IH7nnwCfcJWUDUFKdCsBH/E5d+0ZnMQi+G0A nAuWpQkjM1ASeQwSHEeAWPgskBQL In-Reply-To: <620231e0-67d0-4bd0-b593-38f32b01a6d8@suse.com> X-Spam-Status: No, score=-3016.5 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_NONE, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on sourceware.org X-BeenThere: binutils@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Binutils mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: binutils-bounces~patchwork=sourceware.org@sourceware.org In both instances 'p' can be the first character. Inspecting the character immediately ahead of it is then UB. To increase similarity between the two checks (each), also move the increment of q past the check for the (bogus) "p" ending. Correct indentation in nearby code, where it being wrong is actively misleading. --- Why is it that P is recognized as an extension when there's no other support there for it? --- a/bfd/elfxx-riscv.c +++ b/bfd/elfxx-riscv.c @@ -2113,25 +2113,27 @@ riscv_parse_extensions (riscv_parse_subs find_any_version = true; else if (find_any_version && !find_minor_version + && q > subset && *q == 'p' && ISDIGIT (*(q - 1))) - find_minor_version = true; + find_minor_version = true; else break; } - q++; /* Check if the end of extension is 'p' or not. If yes, then the second letter from the end cannot be number. */ - if (*(q - 1) == 'p' && ISDIGIT (*(q - 2))) + if (q > subset && *q == 'p' && ISDIGIT (*(q - 1))) { - *q = '\0'; + q[1] = '\0'; rps->error_handler (_("%s: invalid prefixed ISA extension `%s' ends with p"), arch, subset); free (subset); return NULL; } + + q++; } int major_version = RISCV_UNKNOWN_VERSION; @@ -2672,20 +2674,19 @@ riscv_update_subset1 (riscv_parse_subset find_any_version = true; else if (find_any_version && !find_minor_version + && q > subset && *q == 'p' && ISDIGIT (*(q - 1))) find_minor_version = true; else break; } - if (len > 0) - q++; /* Check if the end of extension is 'p' or not. If yes, then the second letter from the end cannot be number. */ - if (len > 1 && *(q - 1) == 'p' && ISDIGIT (*(q - 2))) + if (q > subset && *q == 'p' && ISDIGIT (*(q - 1))) { - *q = '\0'; + q[1] = '\0'; rps->error_handler (_("%sinvalid ISA extension ends with p in %s `%s'"), errmsg_internal, errmsg_caller, implicit_exts); @@ -2693,6 +2694,9 @@ riscv_update_subset1 (riscv_parse_subset return false; } + if (len > 0) + q++; + end_of_version = riscv_parsing_subset_version (q, &major_version, &minor_version); *q = '\0'; From patchwork Tue Apr 21 11:56:11 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Beulich X-Patchwork-Id: 133474 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from vm01.sourceware.org (localhost [127.0.0.1]) by sourceware.org (Postfix) with ESMTP id 9C4364BAD15B for ; Tue, 21 Apr 2026 11:59:02 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 9C4364BAD15B Authentication-Results: sourceware.org; dkim=pass (2048-bit key, unprotected) header.d=suse.com header.i=@suse.com header.a=rsa-sha256 header.s=google header.b=H05+FPqm X-Original-To: binutils@sourceware.org Delivered-To: binutils@sourceware.org Received: from mail-wm1-x32d.google.com (mail-wm1-x32d.google.com [IPv6:2a00:1450:4864:20::32d]) by sourceware.org (Postfix) with ESMTPS id 9F0364B9DB5F for ; Tue, 21 Apr 2026 11:56:13 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 9F0364B9DB5F Authentication-Results: sourceware.org; dmarc=pass (p=quarantine dis=none) header.from=suse.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=suse.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 9F0364B9DB5F Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2a00:1450:4864:20::32d ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1776772573; cv=none; b=mD21xjJi/G2BDUTx99rmj48bF7aASizj0ZK0IPny6swcqx46ImSLo3NMxXffaBAPb35hSckzrchXm2AcwSOrBDoUa6m3I043Y8bMuNJJZ7jktvCgQLTO/pcIZfgkt/hbXdOZ1blkNWM6CHc/0oDzvNwQ+H6MNXvMcQtlGpxvfVU= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1776772573; c=relaxed/simple; bh=MHriaeRqPpiecLzg4FFt8q2VZbQKfbmIZPFb1Qrywis=; h=DKIM-Signature:Message-ID:Date:MIME-Version:Subject:From:To; b=xcyQJDsstq0LM9r53j09Kv7PqCCJ7WlmxHWGJ9NlCBKqqZR1rLsvngcDgNbGYiYp87kpJxlvae6/oB8FYUBKAaRG71tT7PumT6EkPxlR1YGVr4ONTxF/dE8vabocK8DxkV9X3+8Ighz7vvks//vlfzf39Beve6por5vBrUlRks4= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 9F0364B9DB5F Received: by mail-wm1-x32d.google.com with SMTP id 5b1f17b1804b1-488a9033b2cso47372085e9.2 for ; Tue, 21 Apr 2026 04:56:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=google; t=1776772572; x=1777377372; darn=sourceware.org; h=content-transfer-encoding:in-reply-to:autocrypt:content-language :references:cc:to:from:subject:user-agent:mime-version:date :message-id:from:to:cc:subject:date:message-id:reply-to; bh=WO8gXu7+oakZVF1d9aGo+i59pYgmgTj9VOKsMXWfjBU=; b=H05+FPqmZOyU1osFbytSo0sjQSgnzv6KQaY0jPpBaSFIi8jtaChF/Me8wjG9Z0zFRP m0wuqp/GpwUijr2fTGqdlSew3d/EkrBq7YwQJu4hl3jG1c1gSH7Hl9tiORNBh/A1GD+f A4D8VEnAvZyfvgY/nR0EOmnbz8xQ17U1QvBtdjO8++78w0glWutODiSbNOkS+EV8LxdA iYrTiO9hk55Yvwf8jZH0L+H0VD5hPJ+aHdozcJZJcgYjMPuAzI8Vo4hanzikxbd5QcR9 dotznka+dj13I5hDzWxRy6mtnXSEVzWrpQG3aHe+dB8beEbC2bYU19cDcZk8lqQEafpV idDg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776772572; x=1777377372; h=content-transfer-encoding:in-reply-to:autocrypt:content-language :references:cc:to:from:subject:user-agent:mime-version:date :message-id:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=WO8gXu7+oakZVF1d9aGo+i59pYgmgTj9VOKsMXWfjBU=; b=klj/HFnZS7l6JHxJ725zdApRbqfSZ2CIu7E848i4B4xeR2/E+e2AHyPTsqyHkxq4oo eCQoCQAa1nijCP0bnVNFbmb4mkxUqueWT6u+8TN7hcP0AxIdOtBdJ4k30vsag5CxpTl2 AmHfWnuKkX9ciwbqDbZtK5A/NvzYzWHDpJf0MeTqFXiGgoyIWGhfNKQ+AafxSgOfj+/T 72DtM7+h4kjKpr3Hy/ITjAMaXSQT4Mtuzi/+JLlgQ5hA1VBpe795c72wKXnMAF3HQHkq GKSG93RbubsrMUsHPwqMufmbeexEXtlqSBYdTWwc+HpvTVewDTzTvJjwIXda7mcGOKzq pivA== X-Gm-Message-State: AOJu0YzRM49Fb9CujOsm06Ok087T0JeEw4WTqbRZEz6I0Lf7nN/J1xWV Z9M9EF89uF+udVH0EpX6VnQj5Pow772I29AQhtpRgLjQXozTtemiXaEr5LBWBONAk+iMYD3YVKW CDk76Vg== X-Gm-Gg: AeBDiev5jyAJf4PYliIXpknHtwID9qN904VzotydufJLyalK3Z8FZhGVEK6p2CuMKVB 8LUI8fNzgy1ggcjwyM53EYH/iSN4jtmtrzcZ/az/+pyr10P/m2le3h3v3dmaNlI/vitHHRMKvBk OVfnffFFcUtQkwkRm2qwE+YlyNCxU4AASy8bT8kPD3MxTUDUlH6/6I06rtvY2DF6VlaPY4+CYzR tRVAfNEZWipqrh8NY0QZUVunE8QIYqaYwp+jF9RZXWH2dhVuHvE7cEV/1f54dtmJzI/fn4XhlY6 bFTr7FelKEI/+W43E9Qzz4kJw86ZFv4UQLnrnvpFRrGyCBwMRF2XnINE65SDil+OziRme0ewspM 9MSKeYwwRhBRX8UNY9bw2u6CqZ3v8ul6OYMYjbSkrC4umoQpKjeYRSNSBoWluq/CKIf9Fq3blFk jlgxD93yvqoBAxbBsXmdYViYg4Zo+lsLJtbcNz0A3tt3Y48fXYrFddupmvlhq+53K8kXDqO3uyf 7o1HjnFGVHUsm0plp7wRL4qlV3hwgnPlnaS X-Received: by 2002:a05:600c:828d:b0:48a:568f:ae8a with SMTP id 5b1f17b1804b1-48a568fb048mr28970025e9.8.1776772572419; Tue, 21 Apr 2026 04:56:12 -0700 (PDT) Received: from [10.156.60.236] (ip-037-024-206-209.um08.pools.vodafone-ip.de. [37.24.206.209]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-489201cde98sm125236615e9.7.2026.04.21.04.56.11 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 21 Apr 2026 04:56:12 -0700 (PDT) Message-ID: <2c2be0f6-4622-4a79-95ac-90c18a143b68@suse.com> Date: Tue, 21 Apr 2026 13:56:11 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: [PATCH 16/19] RISC-V: improve a subset parsing diagnostic From: Jan Beulich To: Binutils Cc: Palmer Dabbelt , Andrew Waterman , Jim Wilson , Nelson Chu References: <620231e0-67d0-4bd0-b593-38f32b01a6d8@suse.com> Content-Language: en-US Autocrypt: addr=jbeulich@suse.com; keydata= xsDiBFk3nEQRBADAEaSw6zC/EJkiwGPXbWtPxl2xCdSoeepS07jW8UgcHNurfHvUzogEq5xk hu507c3BarVjyWCJOylMNR98Yd8VqD9UfmX0Hb8/BrA+Hl6/DB/eqGptrf4BSRwcZQM32aZK 7Pj2XbGWIUrZrd70x1eAP9QE3P79Y2oLrsCgbZJfEwCgvz9JjGmQqQkRiTVzlZVCJYcyGGsD /0tbFCzD2h20ahe8rC1gbb3K3qk+LpBtvjBu1RY9drYk0NymiGbJWZgab6t1jM7sk2vuf0Py O9Hf9XBmK0uE9IgMaiCpc32XV9oASz6UJebwkX+zF2jG5I1BfnO9g7KlotcA/v5ClMjgo6Gl MDY4HxoSRu3i1cqqSDtVlt+AOVBJBACrZcnHAUSuCXBPy0jOlBhxPqRWv6ND4c9PH1xjQ3NP nxJuMBS8rnNg22uyfAgmBKNLpLgAGVRMZGaGoJObGf72s6TeIqKJo/LtggAS9qAUiuKVnygo 3wjfkS9A3DRO+SpU7JqWdsveeIQyeyEJ/8PTowmSQLakF+3fote9ybzd880fSmFuIEJldWxp Y2ggPGpiZXVsaWNoQHN1c2UuY29tPsJgBBMRAgAgBQJZN5xEAhsDBgsJCAcDAgQVAggDBBYC AwECHgECF4AACgkQoDSui/t3IH4J+wCfQ5jHdEjCRHj23O/5ttg9r9OIruwAn3103WUITZee e7Sbg12UgcQ5lv7SzsFNBFk3nEQQCACCuTjCjFOUdi5Nm244F+78kLghRcin/awv+IrTcIWF hUpSs1Y91iQQ7KItirz5uwCPlwejSJDQJLIS+QtJHaXDXeV6NI0Uef1hP20+y8qydDiVkv6l IreXjTb7DvksRgJNvCkWtYnlS3mYvQ9NzS9PhyALWbXnH6sIJd2O9lKS1Mrfq+y0IXCP10eS FFGg+Av3IQeFatkJAyju0PPthyTqxSI4lZYuJVPknzgaeuJv/2NccrPvmeDg6Coe7ZIeQ8Yj t0ARxu2xytAkkLCel1Lz1WLmwLstV30g80nkgZf/wr+/BXJW/oIvRlonUkxv+IbBM3dX2OV8 AmRv1ySWPTP7AAMFB/9PQK/VtlNUJvg8GXj9ootzrteGfVZVVT4XBJkfwBcpC/XcPzldjv+3 HYudvpdNK3lLujXeA5fLOH+Z/G9WBc5pFVSMocI71I8bT8lIAzreg0WvkWg5V2WZsUMlnDL9 mpwIGFhlbM3gfDMs7MPMu8YQRFVdUvtSpaAs8OFfGQ0ia3LGZcjA6Ik2+xcqscEJzNH+qh8V m5jjp28yZgaqTaRbg3M/+MTbMpicpZuqF4rnB0AQD12/3BNWDR6bmh+EkYSMcEIpQmBM51qM EKYTQGybRCjpnKHGOxG0rfFY1085mBDZCH5Kx0cl0HVJuQKC+dV2ZY5AqjcKwAxpE75MLFkr wkkEGBECAAkFAlk3nEQCGwwACgkQoDSui/t3IH7nnwCfcJWUDUFKdCsBH/E5d+0ZnMQi+G0A nAuWpQkjM1ASeQwSHEeAWPgskBQL In-Reply-To: <620231e0-67d0-4bd0-b593-38f32b01a6d8@suse.com> X-Spam-Status: No, score=-3016.5 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_NONE, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on sourceware.org X-BeenThere: binutils@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Binutils mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: binutils-bounces~patchwork=sourceware.org@sourceware.org These sets can be long, so report the specific item along with the full argument. --- a/bfd/elfxx-riscv.c +++ b/bfd/elfxx-riscv.c @@ -2688,8 +2688,8 @@ riscv_update_subset1 (riscv_parse_subset { q[1] = '\0'; rps->error_handler - (_("%sinvalid ISA extension ends with p in %s `%s'"), - errmsg_internal, errmsg_caller, implicit_exts); + (_("%sinvalid ISA extension `%s' ends with p in %s `%s'"), + errmsg_internal, subset, errmsg_caller, implicit_exts); free (subset); return false; } --- a/gas/testsuite/gas/riscv/option-arch-fail.l +++ b/gas/testsuite/gas/riscv/option-arch-fail.l @@ -7,5 +7,5 @@ .*Error: unknown ISA extension `zsubset' in .option arch `\+zsubset2p0' .*Error: unknown ISA extension `f2p0_d' in .option arch `\+f2p0_d2p0' .*Error: unknown ISA extension `' in .option arch `\+' -.*Error: invalid ISA extension ends with p in .option arch `\+xvendor2p' +.*Error: invalid ISA extension `xvendor2p' ends with p in .option arch `\+xvendor2p' .*Error: .option pop with no .option push From patchwork Tue Apr 21 11:56:43 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Beulich X-Patchwork-Id: 133472 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from vm01.sourceware.org (localhost [127.0.0.1]) by sourceware.org (Postfix) with ESMTP id 993A84BAD154 for ; Tue, 21 Apr 2026 11:57:36 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 993A84BAD154 Authentication-Results: sourceware.org; dkim=pass (2048-bit key, unprotected) header.d=suse.com header.i=@suse.com header.a=rsa-sha256 header.s=google header.b=Wiheuioi X-Original-To: binutils@sourceware.org Delivered-To: binutils@sourceware.org Received: from mail-wm1-x332.google.com (mail-wm1-x332.google.com [IPv6:2a00:1450:4864:20::332]) by sourceware.org (Postfix) with ESMTPS id AB3BD4BAD160 for ; Tue, 21 Apr 2026 11:56:45 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org AB3BD4BAD160 Authentication-Results: sourceware.org; dmarc=pass (p=quarantine dis=none) header.from=suse.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=suse.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org AB3BD4BAD160 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2a00:1450:4864:20::332 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1776772605; cv=none; b=FcnvTA4sfUPIKkUq/1jUcIJ6oxjyCIzzZKJCpDS13SeFQ5+DEthcS2Yb+9SVgU609C3U98qBn7GNTReiTqZLpfazC7bg/AKwmZ0aW0PZMWIfp+2xHCuckP+2sjnlVmnol96+3hz7aZrWhBRs9n+mTl5jehQFWHN0ypp1d7toPAo= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1776772605; c=relaxed/simple; bh=B7mOkeCdiaUbKXIhW/W/OpjulYzp/I8D/J3dDK0TzF8=; h=DKIM-Signature:Message-ID:Date:MIME-Version:Subject:From:To; b=w4hvh8GG69GLEb/ywpw1S2/JxITozBMkrx/bq39IM8ycQZqU27Fve5OYM7TkyOD7B2PR1cjz7r12Sm0kXRrApEMod5M7Y4fIzEcWajp9uxYwDueXmMJoy7ib14hc1ux/hxkfSUiX4QcDAO4K69R0oiYqBUwdUV+XxLypMaPSo+Q= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org AB3BD4BAD160 Received: by mail-wm1-x332.google.com with SMTP id 5b1f17b1804b1-4893940bb5eso11380545e9.3 for ; Tue, 21 Apr 2026 04:56:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=google; t=1776772605; x=1777377405; darn=sourceware.org; h=content-transfer-encoding:in-reply-to:autocrypt:content-language :references:cc:to:from:subject:user-agent:mime-version:date :message-id:from:to:cc:subject:date:message-id:reply-to; bh=S2ipe3areTRa2gGAkohj9ThGDLWN3bhMF/G+qDBma/s=; b=WiheuioikZ75kBpVCRyP9dBspDQSTIlLCmr39lIyDuF3xLkJMOPJyNS/Dz7iCISkBf mgy2vq25NxXIOAlLwP6c+1/zV+PzaZGrZAQns9F+Au8AE605LSmSQ6GKP0ltftj+wXcI x9Io1xK4EXtvRkb/75OYTiY6JSgUgnN1R5eJEJS+8nfWbsDyA1dqztoBw8tpeJgKuQPC GcCkv2yuC7q1n4o5siPgVmrmb5In6vV9iJfSz85ajTAwXCLgcolrKsZGgbLMBhn1xvVL NqSTrLn82DSzeg0Zz7qZTJWsSoP4/Y8uBjtu5NS9qrVhgoFY0KLwI1OL04p2ugArWIJd /cHA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776772605; x=1777377405; h=content-transfer-encoding:in-reply-to:autocrypt:content-language :references:cc:to:from:subject:user-agent:mime-version:date :message-id:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=S2ipe3areTRa2gGAkohj9ThGDLWN3bhMF/G+qDBma/s=; b=jb+58ViJR/FouvUdjaRqDdypWFDUa51RDOnGyC0PNli+MeGlLpm3FQ6mItqWiE7WbT TrMb2UdNY1MvsFNotnq+StneThv4I9vPmptyROOL8opZ5FdUMPNw6A1fqyTPMd6ztuY3 1Mv8TyGZVWe3PEHkAUT5h9eKAc+09w98kwwwIOKU2+WAPQ+0b5TKH+00rGpDe+CAb1cQ AwOwfc4HEcC3HhtQJlGN04Z83BBTZCTnRgMeODVS26aBGqr9WbipeeHEQrXDg+tUvaVj 3e8/sG6OwTgd6KNdPHDKnjizxL9TTa45cu6W6rGGOSrMdrywXiAKUMKmvjanRG+laIoz qOWw== X-Gm-Message-State: AOJu0YwTkGx7y8pGYFbqo2NgxwSdugCaum89EV0V4pzd3yDB18o/dgPk /9QGaxPHkI39E2MNPc2TKiHO/z8kC/hVHewoqBLjgbETtyY3SdrmBoaTJyO3Gi3WNo+YwDcc9E6 5Pb6pTg== X-Gm-Gg: AeBDiesgln5c2H4bqJR21nrOu95u8WcL8QCnILGRxopX3hmw/NdP9kGmxEn+9nk/GlZ eQ2GJKcY89HGRaDHRvLbJBHza6Fk0/yU+mB+mlGegSxkyRBhWXjdhm1Em+AmxdNF7dekk0uW6wU TPXPYiwvbAPt/Hm7JiCMyiHDYWwbo69Pvq2TklD5+XNGHh1S+uObOZcJqP4Fwsw2wDAOJ++EvR3 rqE5epMgtI1iVUKq75BIDaFd3S03M1935/kpINC9OfNC11DqwfrVd1T3c+iOuRxZAT6AE0U+RVK wZuN4VUXC7b4OJ7j4yIdX7q/t/H6doe8nB0ti78a323x+s8wM1ZmGmWX8CwIzvVnZ+hG593IoRE saspILWfUs7N4+HyWExwAiphhIRydU8+vryVruhgSEWl+7MsdWAoKUGGdFtSEQvdh0TYM1+A9zu bTNHI0rUWxIDARAKNjcpi0fTXouTVsR9NLgEW9P5Nc4opBM2nqWER+lbzS2LWMHLU4eBqYvulj0 3qKfTY6XfpfdR0YRSXHqLFnvg== X-Received: by 2002:a05:600d:b:b0:48a:56de:d63c with SMTP id 5b1f17b1804b1-48a56dedadfmr18482465e9.27.1776772604530; Tue, 21 Apr 2026 04:56:44 -0700 (PDT) Received: from [10.156.60.236] (ip-037-024-206-209.um08.pools.vodafone-ip.de. [37.24.206.209]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-488fb755938sm150988355e9.3.2026.04.21.04.56.44 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 21 Apr 2026 04:56:44 -0700 (PDT) Message-ID: Date: Tue, 21 Apr 2026 13:56:43 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: [PATCH 17/19] RISC-V: drop dead code from subset parsing From: Jan Beulich To: Binutils Cc: Palmer Dabbelt , Andrew Waterman , Jim Wilson , Nelson Chu References: <620231e0-67d0-4bd0-b593-38f32b01a6d8@suse.com> Content-Language: en-US Autocrypt: addr=jbeulich@suse.com; keydata= xsDiBFk3nEQRBADAEaSw6zC/EJkiwGPXbWtPxl2xCdSoeepS07jW8UgcHNurfHvUzogEq5xk hu507c3BarVjyWCJOylMNR98Yd8VqD9UfmX0Hb8/BrA+Hl6/DB/eqGptrf4BSRwcZQM32aZK 7Pj2XbGWIUrZrd70x1eAP9QE3P79Y2oLrsCgbZJfEwCgvz9JjGmQqQkRiTVzlZVCJYcyGGsD /0tbFCzD2h20ahe8rC1gbb3K3qk+LpBtvjBu1RY9drYk0NymiGbJWZgab6t1jM7sk2vuf0Py O9Hf9XBmK0uE9IgMaiCpc32XV9oASz6UJebwkX+zF2jG5I1BfnO9g7KlotcA/v5ClMjgo6Gl MDY4HxoSRu3i1cqqSDtVlt+AOVBJBACrZcnHAUSuCXBPy0jOlBhxPqRWv6ND4c9PH1xjQ3NP nxJuMBS8rnNg22uyfAgmBKNLpLgAGVRMZGaGoJObGf72s6TeIqKJo/LtggAS9qAUiuKVnygo 3wjfkS9A3DRO+SpU7JqWdsveeIQyeyEJ/8PTowmSQLakF+3fote9ybzd880fSmFuIEJldWxp Y2ggPGpiZXVsaWNoQHN1c2UuY29tPsJgBBMRAgAgBQJZN5xEAhsDBgsJCAcDAgQVAggDBBYC AwECHgECF4AACgkQoDSui/t3IH4J+wCfQ5jHdEjCRHj23O/5ttg9r9OIruwAn3103WUITZee e7Sbg12UgcQ5lv7SzsFNBFk3nEQQCACCuTjCjFOUdi5Nm244F+78kLghRcin/awv+IrTcIWF hUpSs1Y91iQQ7KItirz5uwCPlwejSJDQJLIS+QtJHaXDXeV6NI0Uef1hP20+y8qydDiVkv6l IreXjTb7DvksRgJNvCkWtYnlS3mYvQ9NzS9PhyALWbXnH6sIJd2O9lKS1Mrfq+y0IXCP10eS FFGg+Av3IQeFatkJAyju0PPthyTqxSI4lZYuJVPknzgaeuJv/2NccrPvmeDg6Coe7ZIeQ8Yj t0ARxu2xytAkkLCel1Lz1WLmwLstV30g80nkgZf/wr+/BXJW/oIvRlonUkxv+IbBM3dX2OV8 AmRv1ySWPTP7AAMFB/9PQK/VtlNUJvg8GXj9ootzrteGfVZVVT4XBJkfwBcpC/XcPzldjv+3 HYudvpdNK3lLujXeA5fLOH+Z/G9WBc5pFVSMocI71I8bT8lIAzreg0WvkWg5V2WZsUMlnDL9 mpwIGFhlbM3gfDMs7MPMu8YQRFVdUvtSpaAs8OFfGQ0ia3LGZcjA6Ik2+xcqscEJzNH+qh8V m5jjp28yZgaqTaRbg3M/+MTbMpicpZuqF4rnB0AQD12/3BNWDR6bmh+EkYSMcEIpQmBM51qM EKYTQGybRCjpnKHGOxG0rfFY1085mBDZCH5Kx0cl0HVJuQKC+dV2ZY5AqjcKwAxpE75MLFkr wkkEGBECAAkFAlk3nEQCGwwACgkQoDSui/t3IH7nnwCfcJWUDUFKdCsBH/E5d+0ZnMQi+G0A nAuWpQkjM1ASeQwSHEeAWPgskBQL In-Reply-To: <620231e0-67d0-4bd0-b593-38f32b01a6d8@suse.com> X-Spam-Status: No, score=-3016.5 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_NONE, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on sourceware.org X-BeenThere: binutils@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Binutils mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: binutils-bounces~patchwork=sourceware.org@sourceware.org In riscv_update_subset1(), when explicit_subset is NULL, errmsg_internal is the empty string. There's no need then to pass this as an extra argument to the error handler. riscv_parsing_subset_version() can't return NULL. Dropping the respective checks clarifies that there is no issue with a missing error message (gas would rely on one being emitted when parsing fails). --- a/bfd/elfxx-riscv.c +++ b/bfd/elfxx-riscv.c @@ -2141,11 +2141,6 @@ riscv_parse_extensions (riscv_parse_subs end_of_version = riscv_parsing_subset_version (q, &major_version, &minor_version); *q = '\0'; - if (end_of_version == NULL) - { - free (subset); - return NULL; - } /* Check if the prefixed extension name is well-formed. */ if (class != RV_ISA_CLASS_SINGLE @@ -2700,11 +2695,6 @@ riscv_update_subset1 (riscv_parse_subset end_of_version = riscv_parsing_subset_version (q, &major_version, &minor_version); *q = '\0'; - if (end_of_version == NULL) - { - free (subset); - return false; - } if (strlen (subset) == 0 || (strlen (subset) == 1 @@ -2725,8 +2715,8 @@ riscv_update_subset1 (riscv_parse_subset if (removed) { rps->error_handler - (_("%sdeprecated - extension `%s' in %s `%s'"), - errmsg_internal, subset, errmsg_caller, implicit_exts); + (_("deprecated - extension `%s' in %s `%s'"), + subset, errmsg_caller, implicit_exts); free (subset); return false; } @@ -2735,8 +2725,8 @@ riscv_update_subset1 (riscv_parse_subset || strcmp (subset, "g") == 0) { rps->error_handler - (_("%scannot + base extension `%s' in %s `%s'"), - errmsg_internal, subset, errmsg_caller, implicit_exts); + (_("cannot + base extension `%s' in %s `%s'"), + subset, errmsg_caller, implicit_exts); free (subset); return false; } From patchwork Tue Apr 21 11:57:07 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Beulich X-Patchwork-Id: 133475 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from vm01.sourceware.org (localhost [127.0.0.1]) by sourceware.org (Postfix) with ESMTP id D41D74B9DB7A for ; Tue, 21 Apr 2026 11:59:18 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org D41D74B9DB7A Authentication-Results: sourceware.org; dkim=pass (2048-bit key, unprotected) header.d=suse.com header.i=@suse.com header.a=rsa-sha256 header.s=google header.b=B20Imujw X-Original-To: binutils@sourceware.org Delivered-To: binutils@sourceware.org Received: from mail-wm1-x32a.google.com (mail-wm1-x32a.google.com [IPv6:2a00:1450:4864:20::32a]) by sourceware.org (Postfix) with ESMTPS id D627F4B9DB7F for ; Tue, 21 Apr 2026 11:57:09 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org D627F4B9DB7F Authentication-Results: sourceware.org; dmarc=pass (p=quarantine dis=none) header.from=suse.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=suse.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org D627F4B9DB7F Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2a00:1450:4864:20::32a ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1776772630; cv=none; b=BYnfUn0dlzQhy7npK/kMyOaKxz2Km98hzXQUgXxPEecmvR8gZt3sK1tsgB+/bSf/JhAkLuAXTqd3gYQBWX6xjRQ4sB7OnzS9GTCHhRJWGlFYvrSc4qRXl4/3wSD/TYJ8/6vkZkJmDXuSgNwudBFSpOMlCKl4c7qY4gbztZvCoMQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1776772630; c=relaxed/simple; bh=v4wTkYu5JkQeF1PSivV3lM3PHUNIqAg0WgW8Kw1sG+k=; h=DKIM-Signature:Message-ID:Date:MIME-Version:Subject:From:To; b=fhenPtxlT/aFsW6FF4C5HOV7vhQYTQybnPodfjq6DD5qo/tSzrz1odT3bwSmvxR0RTla7oTLm/jrmkhPqmkiAtvO0EAnyfHXxrdVq0IkvLNKCakYz0b+d/CBwo6ZXcbnBhSjrLlm0ZnOxEElRGZ2guhbh8sNk+D4xY4ht0o11Pw= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org D627F4B9DB7F Received: by mail-wm1-x32a.google.com with SMTP id 5b1f17b1804b1-488ab2db91aso55759415e9.3 for ; Tue, 21 Apr 2026 04:57:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=google; t=1776772629; x=1777377429; darn=sourceware.org; h=content-transfer-encoding:in-reply-to:autocrypt:content-language :references:cc:to:from:subject:user-agent:mime-version:date :message-id:from:to:cc:subject:date:message-id:reply-to; bh=4IHAhEMQgQo+7rgM454QJXyunYFYqwCZBU8CPIl77qY=; b=B20ImujwKH6WXzA80oFtwSzWIy+hUieC2veOoSCqaclCjhG1KAdy8BLM22gJ+2LEKQ MC06yhwhvvITNM0zHK+G7/OGA/tsRokiKACPkeez/TCzFsIRq17MVd1F4ZpH0cJoy4bJ u8ot9Wdmp+M0FTxG8cDnn2/Jenmx/n/7G6/+y+Ut179hP8vjC7Le73OgA1iaO4Itz59Z WY5H+OqpiWnu0xAUKg1VSX8Q1fbhb9X8rDGwt7GBQrtvf2ZRHQHaNwoS4T6QMtoImlZd rCtGDaok++PfgeVDMq5hd93ifZRizKnbMnxMBLnPf39kUis59mNlh+UnVQLr8WAndWwO mOhg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776772629; x=1777377429; h=content-transfer-encoding:in-reply-to:autocrypt:content-language :references:cc:to:from:subject:user-agent:mime-version:date :message-id:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=4IHAhEMQgQo+7rgM454QJXyunYFYqwCZBU8CPIl77qY=; b=cO7KuCbPDi0LtsMIRdcyclFPYQ7YThdH2Udj4Kog0VRNmtg/a3eMrDhmB6Nm4eGun7 pc/5K/43t2AGPISAEydu6nS3+Dw8zhhru8rzt/VWL9L0pyUEYh0vT2T/ao2iYM28KYyK dVc2h5cMWDS/ZJ7tSdqRHi+mQpPt/PJEiuutNKaNL1Gh15E6jUc+aNUhvzJoJtshwCAE +l9Y530c0MCEpA1Eiqx8AezwfvcVVSGAGxS/ZOV1olcGp42v2fhTyl5+wzN6U4aLPPy+ qSlaOt1UTbBZXc/ph1P+AyCM/RFrjz//4Xf32BTsixiphg5QLbrxq4Ze1dQo1APLbn8V /Z3g== X-Gm-Message-State: AOJu0YyO5xNMV37f9b1SeCmi29spcJKSPO9oeqctH1YIr+HKOh8l79yY QR2HM350HwwsDvnAIQw7veWZhyWep6CLSpf9z71S5gUveQ46CIKmkAGfDfPqJTuC7uP1ckro1/V wWUGJDQ== X-Gm-Gg: AeBDiethwvXmrGSKrCLYDoiHKObhKdpn4HA5UYcSZn8GX0Vaog5L9fbvAjbhkcyw+eO vbMjfwmi0lIMoosF8YE44zMpNkM3AQxj0/n4bnKWQY26Gy87g4cjNMMQZ26l+TI29BcNiLNwBEg YDJLY/bTdDfXYit409O02lbQJ/pbgwUKm8N9+YfXE8EDc6VKDZjFh1Jcdh4epFk3RM5ZeI7tmPJ DznXZsAAI42Jc/HRlsWTU2afffeYhmuV9GeZeH1Ni8FX8X7FeE77H3zDgSV1yOQo9x789tI9byo hJ69Q4CYdx4vKEDQ3kBJ2CU2mMQcnwbyKdEb3gIDLKnAK0e1JjK50VSj1IrYTqiPtKF0HvTMuVR w/b3bJeKBKIlG9ruL4qxJzNNYLzuLyIiQf8dbTA1vjEdRpCjciPm2nXydkV9QvCVpmUyBvJ+ByB lw6tYa8nMneuOdtiOAT9icU/Egse0rsiWDCpSpaId3HqYTnP8OK2lxfrVyrBhbJJnjGiOzOqx9Y Wc6vccCe+OBjYKSUfSMc/ZP/dBUbpZdqyGM X-Received: by 2002:a05:600c:8901:b0:488:f9cb:f6c4 with SMTP id 5b1f17b1804b1-488fb7786cemr191930945e9.18.1776772628421; Tue, 21 Apr 2026 04:57:08 -0700 (PDT) Received: from [10.156.60.236] (ip-037-024-206-209.um08.pools.vodafone-ip.de. [37.24.206.209]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-488fc1c0354sm340812365e9.11.2026.04.21.04.57.07 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 21 Apr 2026 04:57:08 -0700 (PDT) Message-ID: <07919897-963f-406e-9583-729ea168b0b9@suse.com> Date: Tue, 21 Apr 2026 13:57:07 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: [PATCH 18/19] bfd/RISC-V: move _bfd_riscv_elf_merge_private_bfd_data() From: Jan Beulich To: Binutils Cc: Palmer Dabbelt , Andrew Waterman , Jim Wilson , Nelson Chu References: <620231e0-67d0-4bd0-b593-38f32b01a6d8@suse.com> Content-Language: en-US Autocrypt: addr=jbeulich@suse.com; keydata= xsDiBFk3nEQRBADAEaSw6zC/EJkiwGPXbWtPxl2xCdSoeepS07jW8UgcHNurfHvUzogEq5xk hu507c3BarVjyWCJOylMNR98Yd8VqD9UfmX0Hb8/BrA+Hl6/DB/eqGptrf4BSRwcZQM32aZK 7Pj2XbGWIUrZrd70x1eAP9QE3P79Y2oLrsCgbZJfEwCgvz9JjGmQqQkRiTVzlZVCJYcyGGsD /0tbFCzD2h20ahe8rC1gbb3K3qk+LpBtvjBu1RY9drYk0NymiGbJWZgab6t1jM7sk2vuf0Py O9Hf9XBmK0uE9IgMaiCpc32XV9oASz6UJebwkX+zF2jG5I1BfnO9g7KlotcA/v5ClMjgo6Gl MDY4HxoSRu3i1cqqSDtVlt+AOVBJBACrZcnHAUSuCXBPy0jOlBhxPqRWv6ND4c9PH1xjQ3NP nxJuMBS8rnNg22uyfAgmBKNLpLgAGVRMZGaGoJObGf72s6TeIqKJo/LtggAS9qAUiuKVnygo 3wjfkS9A3DRO+SpU7JqWdsveeIQyeyEJ/8PTowmSQLakF+3fote9ybzd880fSmFuIEJldWxp Y2ggPGpiZXVsaWNoQHN1c2UuY29tPsJgBBMRAgAgBQJZN5xEAhsDBgsJCAcDAgQVAggDBBYC AwECHgECF4AACgkQoDSui/t3IH4J+wCfQ5jHdEjCRHj23O/5ttg9r9OIruwAn3103WUITZee e7Sbg12UgcQ5lv7SzsFNBFk3nEQQCACCuTjCjFOUdi5Nm244F+78kLghRcin/awv+IrTcIWF hUpSs1Y91iQQ7KItirz5uwCPlwejSJDQJLIS+QtJHaXDXeV6NI0Uef1hP20+y8qydDiVkv6l IreXjTb7DvksRgJNvCkWtYnlS3mYvQ9NzS9PhyALWbXnH6sIJd2O9lKS1Mrfq+y0IXCP10eS FFGg+Av3IQeFatkJAyju0PPthyTqxSI4lZYuJVPknzgaeuJv/2NccrPvmeDg6Coe7ZIeQ8Yj t0ARxu2xytAkkLCel1Lz1WLmwLstV30g80nkgZf/wr+/BXJW/oIvRlonUkxv+IbBM3dX2OV8 AmRv1ySWPTP7AAMFB/9PQK/VtlNUJvg8GXj9ootzrteGfVZVVT4XBJkfwBcpC/XcPzldjv+3 HYudvpdNK3lLujXeA5fLOH+Z/G9WBc5pFVSMocI71I8bT8lIAzreg0WvkWg5V2WZsUMlnDL9 mpwIGFhlbM3gfDMs7MPMu8YQRFVdUvtSpaAs8OFfGQ0ia3LGZcjA6Ik2+xcqscEJzNH+qh8V m5jjp28yZgaqTaRbg3M/+MTbMpicpZuqF4rnB0AQD12/3BNWDR6bmh+EkYSMcEIpQmBM51qM EKYTQGybRCjpnKHGOxG0rfFY1085mBDZCH5Kx0cl0HVJuQKC+dV2ZY5AqjcKwAxpE75MLFkr wkkEGBECAAkFAlk3nEQCGwwACgkQoDSui/t3IH7nnwCfcJWUDUFKdCsBH/E5d+0ZnMQi+G0A nAuWpQkjM1ASeQwSHEeAWPgskBQL In-Reply-To: <620231e0-67d0-4bd0-b593-38f32b01a6d8@suse.com> X-Spam-Status: No, score=-3016.5 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_NONE, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on sourceware.org X-BeenThere: binutils@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Binutils mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: binutils-bounces~patchwork=sourceware.org@sourceware.org The sole size dependent parameter used there is ARCH_SIZE. For just this there's no good reason to build all of the involved code twice. Make the value a function parameter instead. --- a/bfd/elfnn-riscv.c +++ b/bfd/elfnn-riscv.c @@ -193,11 +193,6 @@ struct _bfd_riscv_elf_obj_tdata (*((h) != NULL ? &riscv_elf_hash_entry (h)->tls_type \ : &_bfd_riscv_elf_local_got_tls_type (abfd) [symndx])) -#define is_riscv_elf(bfd) \ - (bfd_get_flavour (bfd) == bfd_target_elf_flavour \ - && elf_tdata (bfd) != NULL \ - && elf_object_id (bfd) == RISCV_ELF_DATA) - static bool elfNN_riscv_mkobject (bfd *abfd) { @@ -3918,560 +3913,10 @@ riscv_reloc_type_class (const struct bfd } } -/* Given the ELF header flags in FLAGS, it returns a string that describes the - float ABI. */ - -static const char * -riscv_float_abi_string (flagword flags) -{ - switch (flags & EF_RISCV_FLOAT_ABI) - { - case EF_RISCV_FLOAT_ABI_SOFT: - return "soft-float"; - break; - case EF_RISCV_FLOAT_ABI_SINGLE: - return "single-float"; - break; - case EF_RISCV_FLOAT_ABI_DOUBLE: - return "double-float"; - break; - case EF_RISCV_FLOAT_ABI_QUAD: - return "quad-float"; - break; - default: - abort (); - } -} - -/* The information of architecture elf attributes. */ -static riscv_subset_list_t in_subsets; -static riscv_subset_list_t out_subsets; -static riscv_subset_list_t merged_subsets; - -/* Predicator for standard extension. */ - -static bool -riscv_std_ext_p (const char *name) -{ - return (strlen (name) == 1) && (name[0] != 'x') && (name[0] != 's'); -} - -/* Update the output subset's version to match the input when the input - subset's version is newer. */ - -static void -riscv_update_subset_version (struct riscv_subset_t *in, - struct riscv_subset_t *out) -{ - if (in == NULL || out == NULL) - return; - - /* Update the output ISA versions to the newest ones, but otherwise don't - provide any errors or warnings about mis-matched ISA versions as it's - generally too tricky to check for these at link time. */ - if ((in->major_version > out->major_version) - || (in->major_version == out->major_version - && in->minor_version > out->minor_version) - || (out->major_version == RISCV_UNKNOWN_VERSION)) - { - out->major_version = in->major_version; - out->minor_version = in->minor_version; - } -} - -/* Return true if subset is 'i' or 'e'. */ - static bool -riscv_i_or_e_p (bfd *ibfd, - const char *arch, - struct riscv_subset_t *subset) +riscv_elf_merge_private_bfd_data (bfd *ibfd, struct bfd_link_info *info) { - if ((strcasecmp (subset->name, "e") != 0) - && (strcasecmp (subset->name, "i") != 0)) - { - _bfd_error_handler - (_("error: %pB: corrupted ISA string '%s'. " - "First letter should be 'i' or 'e' but got '%s'"), - ibfd, arch, subset->name); - return false; - } - return true; -} - -/* Merge standard extensions. - - Return Value: - Return FALSE if failed to merge. - - Arguments: - `bfd`: bfd handler. - `in_arch`: Raw ISA string for input object. - `out_arch`: Raw ISA string for output object. - `pin`: Subset list for input object. - `pout`: Subset list for output object. */ - -static bool -riscv_merge_std_ext (bfd *ibfd, - const char *in_arch, - const char *out_arch, - struct riscv_subset_t **pin, - struct riscv_subset_t **pout) -{ - const char *standard_exts = "mafdqlcbjtpvnh"; - const char *p; - struct riscv_subset_t *in = *pin; - struct riscv_subset_t *out = *pout; - - /* First letter should be 'i' or 'e'. */ - if (!riscv_i_or_e_p (ibfd, in_arch, in)) - return false; - - if (!riscv_i_or_e_p (ibfd, out_arch, out)) - return false; - - if (strcasecmp (in->name, out->name) != 0) - { - /* TODO: We might allow merge 'i' with 'e'. */ - _bfd_error_handler - (_("error: %pB: mis-matched ISA string to merge '%s' and '%s'"), - ibfd, in->name, out->name); - return false; - } - - riscv_update_subset_version(in, out); - riscv_add_subset (&merged_subsets, - out->name, out->major_version, out->minor_version); - - in = in->next; - out = out->next; - - /* Handle standard extension first. */ - for (p = standard_exts; *p; ++p) - { - struct riscv_subset_t *ext_in, *ext_out, *ext_merged; - char find_ext[2] = {*p, '\0'}; - bool find_in, find_out; - - find_in = riscv_lookup_subset (&in_subsets, find_ext, &ext_in); - find_out = riscv_lookup_subset (&out_subsets, find_ext, &ext_out); - - if (!find_in && !find_out) - continue; - - if (find_in && find_out) - riscv_update_subset_version(ext_in, ext_out); - - ext_merged = find_out ? ext_out : ext_in; - riscv_add_subset (&merged_subsets, ext_merged->name, - ext_merged->major_version, ext_merged->minor_version); - } - - /* Skip all standard extensions. */ - while ((in != NULL) && riscv_std_ext_p (in->name)) in = in->next; - while ((out != NULL) && riscv_std_ext_p (out->name)) out = out->next; - - *pin = in; - *pout = out; - - return true; -} - -/* Merge multi letter extensions. PIN is a pointer to the head of the input - object subset list. Likewise for POUT and the output object. Return TRUE - on success and FALSE when a conflict is found. */ - -static bool -riscv_merge_multi_letter_ext (riscv_subset_t **pin, - riscv_subset_t **pout) -{ - riscv_subset_t *in = *pin; - riscv_subset_t *out = *pout; - riscv_subset_t *tail; - - int cmp; - - while (in && out) - { - cmp = riscv_compare_subsets (in->name, out->name); - - if (cmp < 0) - { - /* `in' comes before `out', append `in' and increment. */ - riscv_add_subset (&merged_subsets, in->name, in->major_version, - in->minor_version); - in = in->next; - } - else if (cmp > 0) - { - /* `out' comes before `in', append `out' and increment. */ - riscv_add_subset (&merged_subsets, out->name, out->major_version, - out->minor_version); - out = out->next; - } - else - { - /* Both present, check version and increment both. */ - riscv_update_subset_version (in, out); - - riscv_add_subset (&merged_subsets, out->name, out->major_version, - out->minor_version); - out = out->next; - in = in->next; - } - } - - if (in || out) - { - /* If we're here, either `in' or `out' is running longer than - the other. So, we need to append the corresponding tail. */ - tail = in ? in : out; - while (tail) - { - riscv_add_subset (&merged_subsets, tail->name, tail->major_version, - tail->minor_version); - tail = tail->next; - } - } - - return true; -} - -/* Merge Tag_RISCV_arch attribute. */ - -static char * -riscv_merge_arch_attr_info (bfd *ibfd, char *in_arch, char *out_arch) -{ - riscv_subset_t *in, *out; - static char *merged_arch_str = NULL; - - unsigned xlen_in, xlen_out; - merged_subsets.head = NULL; - merged_subsets.tail = NULL; - - riscv_parse_subset_t riscv_rps_ld_in = - {&in_subsets, _bfd_error_handler, &xlen_in, NULL, false}; - riscv_parse_subset_t riscv_rps_ld_out = - {&out_subsets, _bfd_error_handler, &xlen_out, NULL, false}; - - if (in_arch == NULL && out_arch == NULL) - return NULL; - if (in_arch == NULL && out_arch != NULL) - return out_arch; - if (in_arch != NULL && out_arch == NULL) - return in_arch; - - /* Parse subset from ISA string. */ - if (!riscv_parse_subset (&riscv_rps_ld_in, in_arch)) - return NULL; - if (!riscv_parse_subset (&riscv_rps_ld_out, out_arch)) - return NULL; - - /* Checking XLEN. */ - if (xlen_out != xlen_in) - { - _bfd_error_handler - (_("error: %pB: ISA string of input (%s) doesn't match " - "output (%s)"), ibfd, in_arch, out_arch); - return NULL; - } - - /* Merge subset list. */ - in = in_subsets.head; - out = out_subsets.head; - - /* Merge standard extension. */ - if (!riscv_merge_std_ext (ibfd, in_arch, out_arch, &in, &out)) - return NULL; - - /* Merge all non-single letter extensions with single call. */ - if (!riscv_merge_multi_letter_ext (&in, &out)) - return NULL; - - if (xlen_in != xlen_out) - { - _bfd_error_handler - (_("error: %pB: XLEN of input (%u) doesn't match " - "output (%u)"), ibfd, xlen_in, xlen_out); - return NULL; - } - - if (xlen_in != ARCH_SIZE) - { - _bfd_error_handler - (_("error: %pB: unsupported XLEN (%u), you might be " - "using wrong emulation"), ibfd, xlen_in); - return NULL; - } - - /* Free the previous merged_arch_str which called xmalloc. */ - free (merged_arch_str); - - merged_arch_str = riscv_arch_str (ARCH_SIZE, &merged_subsets, - false/* update */); - - /* Release the subset lists. */ - riscv_release_subset_list (&in_subsets); - riscv_release_subset_list (&out_subsets); - riscv_release_subset_list (&merged_subsets); - - return merged_arch_str; -} - -/* Merge object attributes from IBFD into output_bfd of INFO. - Raise an error if there are conflicting attributes. */ - -static bool -riscv_merge_attributes (bfd *ibfd, struct bfd_link_info *info) -{ - bfd *obfd = info->output_bfd; - obj_attribute *in_attr; - obj_attribute *out_attr; - bool result = true; - bool priv_attrs_merged = false; - const char *sec_name = get_elf_backend_data (ibfd)->obj_attrs_section; - unsigned int i; - - /* Skip linker created files. */ - if (ibfd->flags & BFD_LINKER_CREATED) - return true; - - /* Skip any input that doesn't have an attribute section. - This enables to link object files without attribute section with - any others. */ - if (bfd_get_section_by_name (ibfd, sec_name) == NULL) - return true; - - if (!elf_known_obj_attributes_proc (obfd)[0].i) - { - /* This is the first object. Copy the attributes. */ - _bfd_elf_copy_obj_attributes (ibfd, obfd); - - out_attr = elf_known_obj_attributes_proc (obfd); - - /* Use the Tag_null value to indicate the attributes have been - initialized. */ - out_attr[0].i = 1; - - return true; - } - - in_attr = elf_known_obj_attributes_proc (ibfd); - out_attr = elf_known_obj_attributes_proc (obfd); - - for (i = LEAST_KNOWN_OBJ_ATTRIBUTE; i < NUM_KNOWN_OBJ_ATTRIBUTES; i++) - { - switch (i) - { - case Tag_RISCV_arch: - if (!out_attr[Tag_RISCV_arch].s) - out_attr[Tag_RISCV_arch].s = in_attr[Tag_RISCV_arch].s; - else if (in_attr[Tag_RISCV_arch].s - && out_attr[Tag_RISCV_arch].s) - { - /* Check compatible. */ - char *merged_arch = - riscv_merge_arch_attr_info (ibfd, - in_attr[Tag_RISCV_arch].s, - out_attr[Tag_RISCV_arch].s); - if (merged_arch == NULL) - { - result = false; - out_attr[Tag_RISCV_arch].s = ""; - } - else - out_attr[Tag_RISCV_arch].s = merged_arch; - } - break; - - case Tag_RISCV_priv_spec: - case Tag_RISCV_priv_spec_minor: - case Tag_RISCV_priv_spec_revision: - /* If we have handled the privileged elf attributes, then skip it. */ - if (!priv_attrs_merged) - { - unsigned int Tag_a = Tag_RISCV_priv_spec; - unsigned int Tag_b = Tag_RISCV_priv_spec_minor; - unsigned int Tag_c = Tag_RISCV_priv_spec_revision; - enum riscv_spec_class in_priv_spec = PRIV_SPEC_CLASS_NONE; - enum riscv_spec_class out_priv_spec = PRIV_SPEC_CLASS_NONE; - - /* Get the privileged spec class from elf attributes. */ - riscv_get_priv_spec_class_from_numbers (in_attr[Tag_a].i, - in_attr[Tag_b].i, - in_attr[Tag_c].i, - &in_priv_spec); - riscv_get_priv_spec_class_from_numbers (out_attr[Tag_a].i, - out_attr[Tag_b].i, - out_attr[Tag_c].i, - &out_priv_spec); - - /* Allow to link the object without the privileged specs. */ - if (out_priv_spec == PRIV_SPEC_CLASS_NONE) - { - out_attr[Tag_a].i = in_attr[Tag_a].i; - out_attr[Tag_b].i = in_attr[Tag_b].i; - out_attr[Tag_c].i = in_attr[Tag_c].i; - } - else if (in_priv_spec != PRIV_SPEC_CLASS_NONE - && in_priv_spec != out_priv_spec) - { - /* The abandoned privileged spec v1.9.1 can not be linked with - others since the conflicts. Keep the check since compatible - issue. */ - if (in_priv_spec == PRIV_SPEC_CLASS_1P9P1 - || out_priv_spec == PRIV_SPEC_CLASS_1P9P1) - { - _bfd_error_handler - (_("warning: privileged spec version 1.9.1 can not be " - "linked with other spec versions")); - } - - /* Update the output privileged spec to the newest one. */ - if (in_priv_spec > out_priv_spec) - { - out_attr[Tag_a].i = in_attr[Tag_a].i; - out_attr[Tag_b].i = in_attr[Tag_b].i; - out_attr[Tag_c].i = in_attr[Tag_c].i; - } - } - priv_attrs_merged = true; - } - break; - - case Tag_RISCV_unaligned_access: - out_attr[i].i |= in_attr[i].i; - break; - - case Tag_RISCV_stack_align: - if (out_attr[i].i == 0) - out_attr[i].i = in_attr[i].i; - else if (in_attr[i].i != 0 - && out_attr[i].i != 0 - && out_attr[i].i != in_attr[i].i) - { - _bfd_error_handler - (_("error: %pB use %u-byte stack aligned but the output " - "use %u-byte stack aligned"), - ibfd, in_attr[i].i, out_attr[i].i); - result = false; - } - break; - - default: - result &= _bfd_elf_merge_unknown_attribute_low (ibfd, obfd, i); - } - - /* If out_attr was copied from in_attr then it won't have a type yet. */ - if (in_attr[i].type && !out_attr[i].type) - out_attr[i].type = in_attr[i].type; - } - - /* Merge Tag_compatibility attributes and any common GNU ones. */ - if (!_bfd_elf_merge_object_attributes (ibfd, info)) - return false; - - /* Check for any attributes not known on RISC-V. */ - result &= _bfd_elf_merge_unknown_attribute_list (ibfd, obfd); - - return result; -} - -/* Merge backend specific data from an object file to the output - object file when linking. */ - -static bool -_bfd_riscv_elf_merge_private_bfd_data (bfd *ibfd, struct bfd_link_info *info) -{ - bfd *obfd = info->output_bfd; - flagword new_flags, old_flags; - - if (!is_riscv_elf (ibfd)) - return true; - - if (strcmp (bfd_get_target (ibfd), bfd_get_target (obfd)) != 0) - { - (*_bfd_error_handler) - (_("%pB: ABI is incompatible with that of the selected emulation:\n" - " target emulation `%s' does not match `%s'"), - ibfd, bfd_get_target (ibfd), bfd_get_target (obfd)); - return false; - } - - if (!_bfd_elf_merge_object_attributes (ibfd, info)) - return false; - - if (!riscv_merge_attributes (ibfd, info)) - return false; - - /* Check to see if the input BFD actually contains any sections. If not, - its flags may not have been initialized either, but it cannot actually - cause any incompatibility. Do not short-circuit dynamic objects; their - section list may be emptied by elf_link_add_object_symbols. - - Also check to see if there are no code sections in the input. In this - case, there is no need to check for code specific flags. */ - if (!(ibfd->flags & DYNAMIC)) - { - bool null_input_bfd = true; - bool only_data_sections = true; - asection *sec; - - for (sec = ibfd->sections; sec != NULL; sec = sec->next) - { - null_input_bfd = false; - - if ((bfd_section_flags (sec) - & (SEC_LOAD | SEC_CODE | SEC_HAS_CONTENTS)) - == (SEC_LOAD | SEC_CODE | SEC_HAS_CONTENTS)) - { - only_data_sections = false; - break; - } - } - - if (null_input_bfd || only_data_sections) - return true; - } - - new_flags = elf_elfheader (ibfd)->e_flags; - old_flags = elf_elfheader (obfd)->e_flags; - - if (!elf_flags_init (obfd)) - { - elf_flags_init (obfd) = true; - elf_elfheader (obfd)->e_flags = new_flags; - return true; - } - - /* Disallow linking different float ABIs. */ - if ((old_flags ^ new_flags) & EF_RISCV_FLOAT_ABI) - { - (*_bfd_error_handler) - (_("%pB: can't link %s modules with %s modules"), ibfd, - riscv_float_abi_string (new_flags), - riscv_float_abi_string (old_flags)); - goto fail; - } - - /* Disallow linking RVE and non-RVE. */ - if ((old_flags ^ new_flags) & EF_RISCV_RVE) - { - (*_bfd_error_handler) - (_("%pB: can't link RVE with other target"), ibfd); - goto fail; - } - - /* Allow linking RVC and non-RVC, and keep the RVC flag. */ - elf_elfheader (obfd)->e_flags |= new_flags & EF_RISCV_RVC; - - /* Allow linking TSO and non-TSO, and keep the TSO flag. */ - elf_elfheader (obfd)->e_flags |= new_flags & EF_RISCV_TSO; - - return true; - - fail: - bfd_set_error (bfd_error_bad_value); - return false; + return _bfd_riscv_elf_merge_private_bfd_data (ibfd, info, ARCH_SIZE); } /* Ignore and report warning for the unknwon elf attribute. */ @@ -6095,7 +5540,7 @@ elfNN_riscv_merge_gnu_properties (struct riscv_elf_link_hash_table_create #define bfd_elfNN_bfd_reloc_type_lookup riscv_reloc_type_lookup #define bfd_elfNN_bfd_merge_private_bfd_data \ - _bfd_riscv_elf_merge_private_bfd_data + riscv_elf_merge_private_bfd_data #define bfd_elfNN_bfd_is_target_special_symbol \ riscv_elf_is_target_special_symbol #define bfd_elfNN_bfd_relax_section _bfd_riscv_relax_section --- a/bfd/elfxx-riscv.c +++ b/bfd/elfxx-riscv.c @@ -3432,6 +3432,566 @@ riscv_print_extensions (void) printf ("\n"); } +/* Given the ELF header flags in FLAGS, it returns a string that describes the + float ABI. */ + +static const char * +riscv_float_abi_string (flagword flags) +{ + switch (flags & EF_RISCV_FLOAT_ABI) + { + case EF_RISCV_FLOAT_ABI_SOFT: + return "soft-float"; + break; + case EF_RISCV_FLOAT_ABI_SINGLE: + return "single-float"; + break; + case EF_RISCV_FLOAT_ABI_DOUBLE: + return "double-float"; + break; + case EF_RISCV_FLOAT_ABI_QUAD: + return "quad-float"; + break; + default: + abort (); + } +} + +/* The information of architecture elf attributes. */ +static riscv_subset_list_t in_subsets; +static riscv_subset_list_t out_subsets; +static riscv_subset_list_t merged_subsets; + +/* Predicator for standard extension. */ + +static bool +riscv_std_ext_p (const char *name) +{ + return (strlen (name) == 1) && (name[0] != 'x') && (name[0] != 's'); +} + +/* Update the output subset's version to match the input when the input + subset's version is newer. */ + +static void +riscv_update_subset_version (struct riscv_subset_t *in, + struct riscv_subset_t *out) +{ + if (in == NULL || out == NULL) + return; + + /* Update the output ISA versions to the newest ones, but otherwise don't + provide any errors or warnings about mis-matched ISA versions as it's + generally too tricky to check for these at link time. */ + if ((in->major_version > out->major_version) + || (in->major_version == out->major_version + && in->minor_version > out->minor_version) + || (out->major_version == RISCV_UNKNOWN_VERSION)) + { + out->major_version = in->major_version; + out->minor_version = in->minor_version; + } +} + +/* Return true if subset is 'i' or 'e'. */ + +static bool +riscv_i_or_e_p (bfd *ibfd, + const char *arch, + struct riscv_subset_t *subset) +{ + if ((strcasecmp (subset->name, "e") != 0) + && (strcasecmp (subset->name, "i") != 0)) + { + _bfd_error_handler + (_("error: %pB: corrupted ISA string '%s'. " + "First letter should be 'i' or 'e' but got '%s'"), + ibfd, arch, subset->name); + return false; + } + return true; +} + +/* Merge standard extensions. + + Return Value: + Return FALSE if failed to merge. + + Arguments: + `bfd`: bfd handler. + `in_arch`: Raw ISA string for input object. + `out_arch`: Raw ISA string for output object. + `pin`: Subset list for input object. + `pout`: Subset list for output object. */ + +static bool +riscv_merge_std_ext (bfd *ibfd, + const char *in_arch, + const char *out_arch, + struct riscv_subset_t **pin, + struct riscv_subset_t **pout) +{ + const char *standard_exts = "mafdqlcbjtpvnh"; + const char *p; + struct riscv_subset_t *in = *pin; + struct riscv_subset_t *out = *pout; + + /* First letter should be 'i' or 'e'. */ + if (!riscv_i_or_e_p (ibfd, in_arch, in)) + return false; + + if (!riscv_i_or_e_p (ibfd, out_arch, out)) + return false; + + if (strcasecmp (in->name, out->name) != 0) + { + /* TODO: We might allow merge 'i' with 'e'. */ + _bfd_error_handler + (_("error: %pB: mis-matched ISA string to merge '%s' and '%s'"), + ibfd, in->name, out->name); + return false; + } + + riscv_update_subset_version(in, out); + riscv_add_subset (&merged_subsets, + out->name, out->major_version, out->minor_version); + + in = in->next; + out = out->next; + + /* Handle standard extension first. */ + for (p = standard_exts; *p; ++p) + { + struct riscv_subset_t *ext_in, *ext_out, *ext_merged; + char find_ext[2] = {*p, '\0'}; + bool find_in, find_out; + + find_in = riscv_lookup_subset (&in_subsets, find_ext, &ext_in); + find_out = riscv_lookup_subset (&out_subsets, find_ext, &ext_out); + + if (!find_in && !find_out) + continue; + + if (find_in && find_out) + riscv_update_subset_version(ext_in, ext_out); + + ext_merged = find_out ? ext_out : ext_in; + riscv_add_subset (&merged_subsets, ext_merged->name, + ext_merged->major_version, ext_merged->minor_version); + } + + /* Skip all standard extensions. */ + while ((in != NULL) && riscv_std_ext_p (in->name)) in = in->next; + while ((out != NULL) && riscv_std_ext_p (out->name)) out = out->next; + + *pin = in; + *pout = out; + + return true; +} + +/* Merge multi letter extensions. PIN is a pointer to the head of the input + object subset list. Likewise for POUT and the output object. Return TRUE + on success and FALSE when a conflict is found. */ + +static bool +riscv_merge_multi_letter_ext (riscv_subset_t **pin, + riscv_subset_t **pout) +{ + riscv_subset_t *in = *pin; + riscv_subset_t *out = *pout; + riscv_subset_t *tail; + + int cmp; + + while (in && out) + { + cmp = riscv_compare_subsets (in->name, out->name); + + if (cmp < 0) + { + /* `in' comes before `out', append `in' and increment. */ + riscv_add_subset (&merged_subsets, in->name, in->major_version, + in->minor_version); + in = in->next; + } + else if (cmp > 0) + { + /* `out' comes before `in', append `out' and increment. */ + riscv_add_subset (&merged_subsets, out->name, out->major_version, + out->minor_version); + out = out->next; + } + else + { + /* Both present, check version and increment both. */ + riscv_update_subset_version (in, out); + + riscv_add_subset (&merged_subsets, out->name, out->major_version, + out->minor_version); + out = out->next; + in = in->next; + } + } + + if (in || out) + { + /* If we're here, either `in' or `out' is running longer than + the other. So, we need to append the corresponding tail. */ + tail = in ? in : out; + while (tail) + { + riscv_add_subset (&merged_subsets, tail->name, tail->major_version, + tail->minor_version); + tail = tail->next; + } + } + + return true; +} + +/* Merge Tag_RISCV_arch attribute. */ + +static char * +riscv_merge_arch_attr_info (bfd *ibfd, char *in_arch, char *out_arch, + unsigned int arch_size) +{ + riscv_subset_t *in, *out; + static char *merged_arch_str = NULL; + + unsigned xlen_in, xlen_out; + merged_subsets.head = NULL; + merged_subsets.tail = NULL; + + riscv_parse_subset_t riscv_rps_ld_in = + {&in_subsets, _bfd_error_handler, &xlen_in, NULL, false}; + riscv_parse_subset_t riscv_rps_ld_out = + {&out_subsets, _bfd_error_handler, &xlen_out, NULL, false}; + + if (in_arch == NULL && out_arch == NULL) + return NULL; + if (in_arch == NULL && out_arch != NULL) + return out_arch; + if (in_arch != NULL && out_arch == NULL) + return in_arch; + + /* Parse subset from ISA string. */ + if (!riscv_parse_subset (&riscv_rps_ld_in, in_arch)) + return NULL; + if (!riscv_parse_subset (&riscv_rps_ld_out, out_arch)) + return NULL; + + /* Checking XLEN. */ + if (xlen_out != xlen_in) + { + _bfd_error_handler + (_("error: %pB: ISA string of input (%s) doesn't match " + "output (%s)"), ibfd, in_arch, out_arch); + return NULL; + } + + /* Merge subset list. */ + in = in_subsets.head; + out = out_subsets.head; + + /* Merge standard extension. */ + if (!riscv_merge_std_ext (ibfd, in_arch, out_arch, &in, &out)) + return NULL; + + /* Merge all non-single letter extensions with single call. */ + if (!riscv_merge_multi_letter_ext (&in, &out)) + return NULL; + + if (xlen_in != xlen_out) + { + _bfd_error_handler + (_("error: %pB: XLEN of input (%u) doesn't match " + "output (%u)"), ibfd, xlen_in, xlen_out); + return NULL; + } + + if (xlen_in != arch_size) + { + _bfd_error_handler + (_("error: %pB: unsupported XLEN (%u), you might be " + "using wrong emulation"), ibfd, xlen_in); + return NULL; + } + + /* Free the previous merged_arch_str which called xmalloc. */ + free (merged_arch_str); + + merged_arch_str = riscv_arch_str (arch_size, &merged_subsets, + false/* update */); + + /* Release the subset lists. */ + riscv_release_subset_list (&in_subsets); + riscv_release_subset_list (&out_subsets); + riscv_release_subset_list (&merged_subsets); + + return merged_arch_str; +} + +/* Merge object attributes from IBFD into output_bfd of INFO. + Raise an error if there are conflicting attributes. */ + +static bool +riscv_merge_attributes (bfd *ibfd, struct bfd_link_info *info, + unsigned int arch_size) +{ + bfd *obfd = info->output_bfd; + obj_attribute *in_attr; + obj_attribute *out_attr; + bool result = true; + bool priv_attrs_merged = false; + const char *sec_name = get_elf_backend_data (ibfd)->obj_attrs_section; + unsigned int i; + + /* Skip linker created files. */ + if (ibfd->flags & BFD_LINKER_CREATED) + return true; + + /* Skip any input that doesn't have an attribute section. + This enables to link object files without attribute section with + any others. */ + if (bfd_get_section_by_name (ibfd, sec_name) == NULL) + return true; + + if (!elf_known_obj_attributes_proc (obfd)[0].i) + { + /* This is the first object. Copy the attributes. */ + _bfd_elf_copy_obj_attributes (ibfd, obfd); + + out_attr = elf_known_obj_attributes_proc (obfd); + + /* Use the Tag_null value to indicate the attributes have been + initialized. */ + out_attr[0].i = 1; + + return true; + } + + in_attr = elf_known_obj_attributes_proc (ibfd); + out_attr = elf_known_obj_attributes_proc (obfd); + + for (i = LEAST_KNOWN_OBJ_ATTRIBUTE; i < NUM_KNOWN_OBJ_ATTRIBUTES; i++) + { + switch (i) + { + case Tag_RISCV_arch: + if (!out_attr[Tag_RISCV_arch].s) + out_attr[Tag_RISCV_arch].s = in_attr[Tag_RISCV_arch].s; + else if (in_attr[Tag_RISCV_arch].s + && out_attr[Tag_RISCV_arch].s) + { + /* Check compatible. */ + char *merged_arch = + riscv_merge_arch_attr_info (ibfd, + in_attr[Tag_RISCV_arch].s, + out_attr[Tag_RISCV_arch].s, + arch_size); + if (merged_arch == NULL) + { + result = false; + out_attr[Tag_RISCV_arch].s = ""; + } + else + out_attr[Tag_RISCV_arch].s = merged_arch; + } + break; + + case Tag_RISCV_priv_spec: + case Tag_RISCV_priv_spec_minor: + case Tag_RISCV_priv_spec_revision: + /* If we have handled the privileged elf attributes, then skip it. */ + if (!priv_attrs_merged) + { + unsigned int Tag_a = Tag_RISCV_priv_spec; + unsigned int Tag_b = Tag_RISCV_priv_spec_minor; + unsigned int Tag_c = Tag_RISCV_priv_spec_revision; + enum riscv_spec_class in_priv_spec = PRIV_SPEC_CLASS_NONE; + enum riscv_spec_class out_priv_spec = PRIV_SPEC_CLASS_NONE; + + /* Get the privileged spec class from elf attributes. */ + riscv_get_priv_spec_class_from_numbers (in_attr[Tag_a].i, + in_attr[Tag_b].i, + in_attr[Tag_c].i, + &in_priv_spec); + riscv_get_priv_spec_class_from_numbers (out_attr[Tag_a].i, + out_attr[Tag_b].i, + out_attr[Tag_c].i, + &out_priv_spec); + + /* Allow to link the object without the privileged specs. */ + if (out_priv_spec == PRIV_SPEC_CLASS_NONE) + { + out_attr[Tag_a].i = in_attr[Tag_a].i; + out_attr[Tag_b].i = in_attr[Tag_b].i; + out_attr[Tag_c].i = in_attr[Tag_c].i; + } + else if (in_priv_spec != PRIV_SPEC_CLASS_NONE + && in_priv_spec != out_priv_spec) + { + /* The abandoned privileged spec v1.9.1 can not be linked with + others since the conflicts. Keep the check since compatible + issue. */ + if (in_priv_spec == PRIV_SPEC_CLASS_1P9P1 + || out_priv_spec == PRIV_SPEC_CLASS_1P9P1) + { + _bfd_error_handler + (_("warning: privileged spec version 1.9.1 can not be " + "linked with other spec versions")); + } + + /* Update the output privileged spec to the newest one. */ + if (in_priv_spec > out_priv_spec) + { + out_attr[Tag_a].i = in_attr[Tag_a].i; + out_attr[Tag_b].i = in_attr[Tag_b].i; + out_attr[Tag_c].i = in_attr[Tag_c].i; + } + } + priv_attrs_merged = true; + } + break; + + case Tag_RISCV_unaligned_access: + out_attr[i].i |= in_attr[i].i; + break; + + case Tag_RISCV_stack_align: + if (out_attr[i].i == 0) + out_attr[i].i = in_attr[i].i; + else if (in_attr[i].i != 0 + && out_attr[i].i != 0 + && out_attr[i].i != in_attr[i].i) + { + _bfd_error_handler + (_("error: %pB use %u-byte stack aligned but the output " + "use %u-byte stack aligned"), + ibfd, in_attr[i].i, out_attr[i].i); + result = false; + } + break; + + default: + result &= _bfd_elf_merge_unknown_attribute_low (ibfd, obfd, i); + } + + /* If out_attr was copied from in_attr then it won't have a type yet. */ + if (in_attr[i].type && !out_attr[i].type) + out_attr[i].type = in_attr[i].type; + } + + /* Merge Tag_compatibility attributes and any common GNU ones. */ + if (!_bfd_elf_merge_object_attributes (ibfd, info)) + return false; + + /* Check for any attributes not known on RISC-V. */ + result &= _bfd_elf_merge_unknown_attribute_list (ibfd, obfd); + + return result; +} + +/* Merge backend specific data from an object file to the output + object file when linking. */ + +bool +_bfd_riscv_elf_merge_private_bfd_data (bfd *ibfd, struct bfd_link_info *info, + unsigned int arch_size) +{ + bfd *obfd = info->output_bfd; + flagword new_flags, old_flags; + + if (!is_riscv_elf (ibfd)) + return true; + + if (strcmp (bfd_get_target (ibfd), bfd_get_target (obfd)) != 0) + { + (*_bfd_error_handler) + (_("%pB: ABI is incompatible with that of the selected emulation:\n" + " target emulation `%s' does not match `%s'"), + ibfd, bfd_get_target (ibfd), bfd_get_target (obfd)); + return false; + } + + if (!_bfd_elf_merge_object_attributes (ibfd, info)) + return false; + + if (!riscv_merge_attributes (ibfd, info, arch_size)) + return false; + + /* Check to see if the input BFD actually contains any sections. If not, + its flags may not have been initialized either, but it cannot actually + cause any incompatibility. Do not short-circuit dynamic objects; their + section list may be emptied by elf_link_add_object_symbols. + + Also check to see if there are no code sections in the input. In this + case, there is no need to check for code specific flags. */ + if (!(ibfd->flags & DYNAMIC)) + { + bool null_input_bfd = true; + bool only_data_sections = true; + asection *sec; + + for (sec = ibfd->sections; sec != NULL; sec = sec->next) + { + null_input_bfd = false; + + if ((bfd_section_flags (sec) + & (SEC_LOAD | SEC_CODE | SEC_HAS_CONTENTS)) + == (SEC_LOAD | SEC_CODE | SEC_HAS_CONTENTS)) + { + only_data_sections = false; + break; + } + } + + if (null_input_bfd || only_data_sections) + return true; + } + + new_flags = elf_elfheader (ibfd)->e_flags; + old_flags = elf_elfheader (obfd)->e_flags; + + if (!elf_flags_init (obfd)) + { + elf_flags_init (obfd) = true; + elf_elfheader (obfd)->e_flags = new_flags; + return true; + } + + /* Disallow linking different float ABIs. */ + if ((old_flags ^ new_flags) & EF_RISCV_FLOAT_ABI) + { + (*_bfd_error_handler) + (_("%pB: can't link %s modules with %s modules"), ibfd, + riscv_float_abi_string (new_flags), + riscv_float_abi_string (old_flags)); + goto fail; + } + + /* Disallow linking RVE and non-RVE. */ + if ((old_flags ^ new_flags) & EF_RISCV_RVE) + { + (*_bfd_error_handler) + (_("%pB: can't link RVE with other target"), ibfd); + goto fail; + } + + /* Allow linking RVC and non-RVC, and keep the RVC flag. */ + elf_elfheader (obfd)->e_flags |= new_flags & EF_RISCV_RVC; + + /* Allow linking TSO and non-TSO, and keep the TSO flag. */ + elf_elfheader (obfd)->e_flags |= new_flags & EF_RISCV_TSO; + + return true; + + fail: + bfd_set_error (bfd_error_bad_value); + return false; +} + /* Find the first input bfd with GNU property and merge it with GPROP. If no such input is found, add it to a new section at the last input. Update GPROP accordingly. */ --- a/bfd/elfxx-riscv.h +++ b/bfd/elfxx-riscv.h @@ -27,6 +27,11 @@ #define RISCV_UNKNOWN_VERSION -1 +#define is_riscv_elf(bfd) \ + (bfd_get_flavour (bfd) == bfd_target_elf_flavour \ + && elf_tdata (bfd) != NULL \ + && elf_object_id (bfd) == RISCV_ELF_DATA) + typedef enum { PLT_NORMAL = 0x0, /* Normal plts. */ @@ -138,6 +143,10 @@ bfd_elf32_riscv_set_data_segment_info (s extern void bfd_elf64_riscv_set_data_segment_info (struct bfd_link_info *, int *); +extern bool +_bfd_riscv_elf_merge_private_bfd_data (bfd *, struct bfd_link_info *, + unsigned int) ATTRIBUTE_HIDDEN; + extern bfd * _bfd_riscv_elf_link_setup_gnu_properties (struct bfd_link_info *, uint32_t *) ATTRIBUTE_HIDDEN; From patchwork Tue Apr 21 11:57:41 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Beulich X-Patchwork-Id: 133473 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from vm01.sourceware.org (localhost [127.0.0.1]) by sourceware.org (Postfix) with ESMTP id 71A6F4BA23FC for ; Tue, 21 Apr 2026 11:58:48 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 71A6F4BA23FC Authentication-Results: sourceware.org; dkim=pass (2048-bit key, unprotected) header.d=suse.com header.i=@suse.com header.a=rsa-sha256 header.s=google header.b=JbZbx8i1 X-Original-To: binutils@sourceware.org Delivered-To: binutils@sourceware.org Received: from mail-wm1-x32f.google.com (mail-wm1-x32f.google.com [IPv6:2a00:1450:4864:20::32f]) by sourceware.org (Postfix) with ESMTPS id CF8944BA2E23 for ; Tue, 21 Apr 2026 11:57:43 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org CF8944BA2E23 Authentication-Results: sourceware.org; dmarc=pass (p=quarantine dis=none) header.from=suse.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=suse.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org CF8944BA2E23 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2a00:1450:4864:20::32f ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1776772664; cv=none; b=tTBh62vs40OrPW6m32q4AGHWeQFNjNz0DGNuOTDd/cgdUUau/fXvIL4q2RCG6XTuHhpNjAtlZsqJcUftQkk5mCwcBZvaVTbYGZm630m1ljG+5aaycILqMhb/Wc29+3F/w73o9JKSOg9Dpc9FoLMmuJ76MLmXbba7lNbsjyfk15E= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1776772664; c=relaxed/simple; bh=rgGaKbMkentbQUAHQXjnKVnqqnEd2Wi4gtNBiY5VQM8=; h=DKIM-Signature:Message-ID:Date:MIME-Version:Subject:From:To; b=PLWjPIkgxcSEjISgeu3TaA/vJigOfdEjtiMxqg+NtFa+jzxQF1zWDjjL1PeUUw1uT6nUWFe7qt1vZNzThSovCp7oXpwOFQcNfbfrLmJL5R1L/pXx8UoAEmpTkZjkaMLzimbr3YTY+LWZJKnVknDeB3MWaXv7UWPUjqAW3XDEKH4= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org CF8944BA2E23 Received: by mail-wm1-x32f.google.com with SMTP id 5b1f17b1804b1-4891b0786beso19146155e9.1 for ; Tue, 21 Apr 2026 04:57:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=google; t=1776772663; x=1777377463; darn=sourceware.org; h=content-transfer-encoding:in-reply-to:autocrypt:content-language :references:cc:to:from:subject:user-agent:mime-version:date :message-id:from:to:cc:subject:date:message-id:reply-to; bh=RHImpC1TFKtTCZwD3h8WAq3VIsClqt2nlA8FYTtZ6a8=; b=JbZbx8i1/8bIyMfJnim+16z4svHC/DTWeZuG6YHRo72U9jZZsaSm+t1by2LBUwZcYk QYorJCHndB/pq3U/ZQbnjH5CnJy5oCqi/E7d8ER1wyttDBLBJZJHvTTtBJ8XNc8h4gDc 5aUFSmgCUmDyMl0lqdjtRbV5+CpeFHX95xICHNM/MQ47CttlomYuPzUcjtmY9NwNz88e WztHbq57+3/D+G741L1x0dEXLaW/OR8B/+WZ8DRqxxuvKgIk2IFXhaCLM6gD0WQDSeZR OEKtX1R+2dMi1Y3bCAOBvQhgp0j8mYHghzHoOAKgtKC1KFSpW0CQDHctvenIupsoaceP ndxw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776772663; x=1777377463; h=content-transfer-encoding:in-reply-to:autocrypt:content-language :references:cc:to:from:subject:user-agent:mime-version:date :message-id:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=RHImpC1TFKtTCZwD3h8WAq3VIsClqt2nlA8FYTtZ6a8=; b=QwoBaTnIhNMI0leF5ZrPC3G6maAll0mSJx9koj3IEUR+4MKuPY43mGxd+SS/xZrJd9 3hiS32CTgSwnHbUeqeIt3rB8wZe+MEqr9CzqfJlwqRjkFVpnzkQQF9+bhM1AngRAVQVe VPHFmyoLAH0OGdyEG20OaZXnvRycaFUe0CbcbgkJXUod2cwfdEa+zlxbNcKLPVKZMdnb l7j9hDLH3t5bjLkFYr7FAQW//YzVwRaccAKwzZRzMWzAOFzHiuQnP5d7J+cLpqzrS5iJ uXUTqdDSI6SRu7RE0cvaYyxfAzvpcmjKdW2Rf556HB3GMVDgRLepqrSOx7vq+r8t4xke XWmw== X-Gm-Message-State: AOJu0YyvR/ZpfWPsIcn/islzuBvDmwRuLpo/R+2uuF1d2vz/S02SOY+i VnHrfeRrNLgABWHrEHiEjFW6/glPVWnclB3S8RnDCAXf8SBVEYA1N5KnY4Zm9XsVo3ySKtDkAiI mUv/DQg== X-Gm-Gg: AeBDiesUKW7yU9IhZUXEBow/D3FaMEU9Vg1q9QJN12FRhtbGeRpTRfhoelB8vJKPuNA pSmrsH7TrWaUvPpp1BSmD/Mi+qm2SlsoTqHd8NAltcz5G5UP8evvLiQpJBaKvRb5Vl7ek9C6yub WeSNk8IQkZrA34CJzE2CHn8YSZ5THjG4h/59FLiD0OpuSl1IXGUeeDh565bF4u0m5LN0l2aE/bK p5/Gl9pQuDnrS4frQUD8+Hxd45SJYxMrn9+YUraqy1+WE5EFLRYooH7G0RyLS0qpy+nd6jsj4G2 5tBCLnEbpxBioORZ4FXv0RPEVsjiZ+tDtWC8ojaIG9330+ufpJTZwxjFhbMdlVMuiLL/6hBjhta ikHuh65ng6FRmxapAzLwNHKtK3q8A7PvdX8PkznDqR0ll8D2UxMJUf7Yu7fcKoCv900wEWuQxFE 3jSdB5FKwzQZMIArayJzNRTGP1KTIuucwcQ6gj11QDO9YhhjSmtBwcyM3oFG/vT7wN7XkyhibMg 8rXp/fWGxnR1mEtFcZGJR455SRhUAyTK4yP X-Received: by 2002:a05:600c:890c:b0:487:1108:48af with SMTP id 5b1f17b1804b1-488fb7389a6mr200648385e9.4.1776772662707; Tue, 21 Apr 2026 04:57:42 -0700 (PDT) Received: from [10.156.60.236] (ip-037-024-206-209.um08.pools.vodafone-ip.de. [37.24.206.209]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-488fc1cfbf2sm377266155e9.15.2026.04.21.04.57.42 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 21 Apr 2026 04:57:42 -0700 (PDT) Message-ID: Date: Tue, 21 Apr 2026 13:57:41 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: [PATCH 19/19] RISC-V/gas: .attribute vs .insn From: Jan Beulich To: Binutils Cc: Palmer Dabbelt , Andrew Waterman , Jim Wilson , Nelson Chu References: <620231e0-67d0-4bd0-b593-38f32b01a6d8@suse.com> Content-Language: en-US Autocrypt: addr=jbeulich@suse.com; keydata= xsDiBFk3nEQRBADAEaSw6zC/EJkiwGPXbWtPxl2xCdSoeepS07jW8UgcHNurfHvUzogEq5xk hu507c3BarVjyWCJOylMNR98Yd8VqD9UfmX0Hb8/BrA+Hl6/DB/eqGptrf4BSRwcZQM32aZK 7Pj2XbGWIUrZrd70x1eAP9QE3P79Y2oLrsCgbZJfEwCgvz9JjGmQqQkRiTVzlZVCJYcyGGsD /0tbFCzD2h20ahe8rC1gbb3K3qk+LpBtvjBu1RY9drYk0NymiGbJWZgab6t1jM7sk2vuf0Py O9Hf9XBmK0uE9IgMaiCpc32XV9oASz6UJebwkX+zF2jG5I1BfnO9g7KlotcA/v5ClMjgo6Gl MDY4HxoSRu3i1cqqSDtVlt+AOVBJBACrZcnHAUSuCXBPy0jOlBhxPqRWv6ND4c9PH1xjQ3NP nxJuMBS8rnNg22uyfAgmBKNLpLgAGVRMZGaGoJObGf72s6TeIqKJo/LtggAS9qAUiuKVnygo 3wjfkS9A3DRO+SpU7JqWdsveeIQyeyEJ/8PTowmSQLakF+3fote9ybzd880fSmFuIEJldWxp Y2ggPGpiZXVsaWNoQHN1c2UuY29tPsJgBBMRAgAgBQJZN5xEAhsDBgsJCAcDAgQVAggDBBYC AwECHgECF4AACgkQoDSui/t3IH4J+wCfQ5jHdEjCRHj23O/5ttg9r9OIruwAn3103WUITZee e7Sbg12UgcQ5lv7SzsFNBFk3nEQQCACCuTjCjFOUdi5Nm244F+78kLghRcin/awv+IrTcIWF hUpSs1Y91iQQ7KItirz5uwCPlwejSJDQJLIS+QtJHaXDXeV6NI0Uef1hP20+y8qydDiVkv6l IreXjTb7DvksRgJNvCkWtYnlS3mYvQ9NzS9PhyALWbXnH6sIJd2O9lKS1Mrfq+y0IXCP10eS FFGg+Av3IQeFatkJAyju0PPthyTqxSI4lZYuJVPknzgaeuJv/2NccrPvmeDg6Coe7ZIeQ8Yj t0ARxu2xytAkkLCel1Lz1WLmwLstV30g80nkgZf/wr+/BXJW/oIvRlonUkxv+IbBM3dX2OV8 AmRv1ySWPTP7AAMFB/9PQK/VtlNUJvg8GXj9ootzrteGfVZVVT4XBJkfwBcpC/XcPzldjv+3 HYudvpdNK3lLujXeA5fLOH+Z/G9WBc5pFVSMocI71I8bT8lIAzreg0WvkWg5V2WZsUMlnDL9 mpwIGFhlbM3gfDMs7MPMu8YQRFVdUvtSpaAs8OFfGQ0ia3LGZcjA6Ik2+xcqscEJzNH+qh8V m5jjp28yZgaqTaRbg3M/+MTbMpicpZuqF4rnB0AQD12/3BNWDR6bmh+EkYSMcEIpQmBM51qM EKYTQGybRCjpnKHGOxG0rfFY1085mBDZCH5Kx0cl0HVJuQKC+dV2ZY5AqjcKwAxpE75MLFkr wkkEGBECAAkFAlk3nEQCGwwACgkQoDSui/t3IH7nnwCfcJWUDUFKdCsBH/E5d+0ZnMQi+G0A nAuWpQkjM1ASeQwSHEeAWPgskBQL In-Reply-To: <620231e0-67d0-4bd0-b593-38f32b01a6d8@suse.com> X-Spam-Status: No, score=-3016.5 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_NONE, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on sourceware.org X-BeenThere: binutils@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Binutils mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: binutils-bounces~patchwork=sourceware.org@sourceware.org "... before any instruction", as the diagnostic from s_riscv_attribute() says, presumably ought to include also insns resulting from .insn. Make a small helper function. --- RFC: I can't quite figure why this constraint exists, so there may also be the option of relaxing things (up to fully dropping start_assemble). As to other uses of .attribute, shouldn't redundant conflicting attribute values at least be warned about? For stack_align, - shouldn't the smallest non-zero value be used? - shouldn't non-power-of-2 values at least be warned about? For unaligned_access, - shouldn't values other than 0/1 be warned about? --- a/gas/config/tc-riscv.c +++ b/gas/config/tc-riscv.c @@ -4411,6 +4411,18 @@ riscv_ip_hardcode (char *str, return NULL; } +/* The architecture and privileged elf attributes should be set before + assembling. */ +static bool +start_assembly(void) +{ + start_assemble = true; + + riscv_set_abi_by_arch (); + + return riscv_set_default_priv_spec (NULL); +} + void md_assemble (char *str) { @@ -4418,16 +4430,8 @@ md_assemble (char *str) expressionS imm_expr; bfd_reloc_code_real_type imm_reloc = BFD_RELOC_UNUSED; - /* The architecture and privileged elf attributes should be set - before assembling. */ - if (!start_assemble) - { - start_assemble = true; - - riscv_set_abi_by_arch (); - if (!riscv_set_default_priv_spec (NULL)) - return; - } + if (!start_assemble && !start_assembly()) + return; riscv_mapping_state (MAP_INSN, 0, false/* fr_align_code */); @@ -5636,6 +5640,9 @@ s_riscv_insn (int x ATTRIBUTE_UNUSED) bfd_reloc_code_real_type imm_reloc = BFD_RELOC_UNUSED; char save_c; + if (!start_assemble && !start_assembly()) + return; + while (!is_end_of_stmt (*input_line_pointer)) ++input_line_pointer;