From patchwork Fri May 15 13:28:49 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Beulich X-Patchwork-Id: 135033 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from vm01.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id C691B40A1FB3 for ; Fri, 15 May 2026 13:29:28 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org C691B40A1FB3 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=a+aXe/Zy X-Original-To: binutils@sourceware.org Delivered-To: binutils@sourceware.org Received: from mail-wm1-x329.google.com (mail-wm1-x329.google.com [IPv6:2a00:1450:4864:20::329]) by sourceware.org (Postfix) with ESMTPS id 028484BBC0BC for ; Fri, 15 May 2026 13:28:52 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 028484BBC0BC 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 028484BBC0BC Authentication-Results: sourceware.org; arc=none smtp.remote-ip=2a00:1450:4864:20::329 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1778851732; cv=none; b=cPHt1tCTYXEkF+y7mt7S+Zrpk/t4CSWlX/0FJQ6y7R+rrzFvIMgoDzJpp/tK30KpQRqFedzrGI/3vQKj0HCA+zrOxni7FD+z7GkDhA5O8NE2WgGeqL01DGmdkbMuzt9JQPEM1iHWJ/iy8CrvBcXUsunCqTsBnFudZgs3mqtnozo= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1778851732; c=relaxed/simple; bh=nTnLwFJW8kyXw4WYwuFi70z8kflO1ZhktMdW7VDX+90=; h=DKIM-Signature:Message-ID:Date:MIME-Version:Subject:From:To; b=uDCtLByOekH3AjqwtkvNez9FO24Z5KHrE6Mrf8BSfVovcFd02WDs2OubVTL2zS+xoFcCZ2+ggFDN17jYrHXnwwPgZmJpbjT7N2AXAbZgR8M5R7IWEa6hUkBK26heIp8WM37cOclQcxdpuXGO+idBuCM6wcvhaHGBcSYU8K4ZSrw= ARC-Authentication-Results: i=1; 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=a+aXe/Zy DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 028484BBC0BC Received: by mail-wm1-x329.google.com with SMTP id 5b1f17b1804b1-48fe26a177cso13027515e9.1 for ; Fri, 15 May 2026 06:28:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=google; t=1778851731; x=1779456531; 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=EUGnXuHWMX+5ZsY+gK650soYux1+wq4AmSiMj1Tyeck=; b=a+aXe/ZyqVBQWEcAufRG9Pb8vrs1suFowD8RZqVfe0CIEtx/pAaaVeWNiMzqCaqOB6 X92Iv8hM5hRZfF3kFrHC7U2EGNDExqXM1UI2jIVfvLZP25DMVtj+VfP0QN3C7+NkHyOT ZwHFQFj4jRLf+xsmy9VLXmN0WbTXA7N4fw7vkN+wRf97q1Dq6Kv8AePJRfrsgTsEW9EP RxyeE0LlIh+tKcuFuMPuAvsFeXZq++CoMaPPjTvoUdaZf9f5yE7h6zGW5Gn8gV7uHvbm mXcBk6W4/w3x0EPFHHLB+jeX2ma1g065xrds57lfZs8Pe0es6HBAkEZ1VTVrqCvTz497 t++Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778851731; x=1779456531; 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=EUGnXuHWMX+5ZsY+gK650soYux1+wq4AmSiMj1Tyeck=; b=Y0e6EP1UfbwervcRGja24RA4MS9K/Ss+GjQJmtkCBfqpqOVslzGwZ78/E8IozM+V4y rC1j/DGceLT4bIeDbWn5ITNp7Opz0Aoh3kQ5jpGzfM08SgkA+v6bqvQx725/AJLuWuv4 gd4JmH6enkIy8aozRguUVP7oei83Q7vxBOWuiwyMRw5+LvViqTc38RWvuyQZky4XWzUo dAx4q6Q+NBhVTqrkp/6reNn9nHb6p+R59reBxgTu7mOQzBjcFzw3SFVfAVLY6ukPNX8E gcvfeFOoSF3Ww0Bit8bXjwHdHDZxi84EmBnOARWcwozz0YPIlrhedm6nB2e+1LoHgPZ0 QznQ== X-Gm-Message-State: AOJu0YyEcpoVaB9aB0+7fQXKOBLYmgQ5kZtqTBTtKkGI3fmweYQQ5LmX mUrFxoo6hesxyd4dC+DxaidJrzKqyoIZjF8YfkBbEog4R2s/Z6i0WgLpA9qLAWJmADeJy+igOZ2 YNTE= X-Gm-Gg: Acq92OF6jtRgKxHHTFI60l4VfhPBBXD3iWUGZAyw2gW6EoGtBJ2QZsDOn5Hx4c65fMb dojZh+tzgVxxnBpO6qQZF/8MN7GgIuwtTBe2XSH7PbwtbUijeqYXxn2I5tE1aGd1J2mzS0iyC56 8jaCOFiJi9RHPSxSGEQJM4CYYIOMLtOmoyQ+hG3VMxJlgrcTYiGepNLphV5IxIAkwWuDvjZDvVl Z5DjwTu/wr/LjDuZAG5U+tud0CYX+CN00N4Mq7kWDuYG99nr3Sl9y/s1I1hKFN1UaLAtj75R4zK lIpyE8UDYRkODP5ivFB7HnpdO1A1JRKaw+Iyx7810FkfjZXfPtDnQS34GlNuAdZFYe1RrJARGYh L5sU9s7GXWHU5u8cqKTLJcSXDYSREb8fTYbOMx4VcBemLv1yaVQPviFj84IJl5k9XQ9URcMev+H VCOLjp/uC/IY1N5Y8zYBIW1k2tGdXvvXyS95y9d3VUWXmQikbsbFWPXFCdCnVcxAvRHWKNFwc11 MHRF1Cjz+1vdaH9Hr5bf6UUDg== X-Received: by 2002:a05:600c:8901:b0:487:1108:48b8 with SMTP id 5b1f17b1804b1-48fe60e367fmr45063235e9.2.1778851730819; Fri, 15 May 2026 06:28:50 -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-48fe537ccf5sm63708675e9.14.2026.05.15.06.28.49 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 15 May 2026 06:28:50 -0700 (PDT) Message-ID: <25ba2a4c-a254-4276-b03a-aae99d5b9eb1@suse.com> Date: Fri, 15 May 2026 15:28:49 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: [PATCH v2 01/16] RISC-V: rename operand descriptor O4 From: Jan Beulich To: Binutils Cc: Palmer Dabbelt , Andrew Waterman , Jim Wilson , Nelson Chu , jiawei References: 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: X-Spam-Status: No, score=-3016.7 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 shortcircuit=no 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 It's describing a 7-bit field, so O7 is the more consistent (with other O and F) name. This way a subsequent change will also be a little easier. Reviewed-by: Jiawei --- v2: New. --- a/gas/config/tc-riscv.c +++ b/gas/config/tc-riscv.c @@ -1620,7 +1620,7 @@ validate_riscv_insn (const struct riscv_ case 'O': /* Opcode for .insn directive. */ switch (*++oparg) { - case '4': USE_BITS (OP_MASK_OP, OP_SH_OP); break; + case '7': USE_BITS (OP_MASK_OP, OP_SH_OP); break; case '2': USE_BITS (OP_MASK_OP2, OP_SH_OP2); break; default: goto unknown_validate_operand; @@ -3711,7 +3711,7 @@ riscv_ip (char *str, struct riscv_cl_ins case 'O': switch (*++oparg) { - case '4': + case '7': if (my_getOpcodeExpression (imm_expr, imm_reloc, asarg) || imm_expr->X_op != O_constant || imm_expr->X_add_number < 0 --- a/opcodes/riscv-opc.c +++ b/opcodes/riscv-opc.c @@ -3587,74 +3587,74 @@ const struct riscv_opcode riscv_opcodes[ const struct riscv_opcode riscv_insn_types[] = { /* name, xlen, isa, operands, match, mask, match_func, pinfo. */ -{"r", 0, INSN_CLASS_I, "O4,F3,F7,d,s,t", 0, 0, NULL, 0 }, -{"r", 0, INSN_CLASS_F, "O4,F3,F7,D,s,t", 0, 0, NULL, 0 }, -{"r", 0, INSN_CLASS_F, "O4,F3,F7,d,S,t", 0, 0, NULL, 0 }, -{"r", 0, INSN_CLASS_F, "O4,F3,F7,D,S,t", 0, 0, NULL, 0 }, -{"r", 0, INSN_CLASS_F, "O4,F3,F7,d,s,T", 0, 0, NULL, 0 }, -{"r", 0, INSN_CLASS_F, "O4,F3,F7,D,s,T", 0, 0, NULL, 0 }, -{"r", 0, INSN_CLASS_F, "O4,F3,F7,d,S,T", 0, 0, NULL, 0 }, -{"r", 0, INSN_CLASS_F, "O4,F3,F7,D,S,T", 0, 0, NULL, 0 }, -{"r", 0, INSN_CLASS_I, "O4,F3,F2,d,s,t,r", 0, 0, NULL, 0 }, -{"r", 0, INSN_CLASS_F, "O4,F3,F2,D,s,t,r", 0, 0, NULL, 0 }, -{"r", 0, INSN_CLASS_F, "O4,F3,F2,d,S,t,r", 0, 0, NULL, 0 }, -{"r", 0, INSN_CLASS_F, "O4,F3,F2,D,S,t,r", 0, 0, NULL, 0 }, -{"r", 0, INSN_CLASS_F, "O4,F3,F2,d,s,T,r", 0, 0, NULL, 0 }, -{"r", 0, INSN_CLASS_F, "O4,F3,F2,D,s,T,r", 0, 0, NULL, 0 }, -{"r", 0, INSN_CLASS_F, "O4,F3,F2,d,S,T,r", 0, 0, NULL, 0 }, -{"r", 0, INSN_CLASS_F, "O4,F3,F2,D,S,T,r", 0, 0, NULL, 0 }, -{"r", 0, INSN_CLASS_F, "O4,F3,F2,d,s,t,R", 0, 0, NULL, 0 }, -{"r", 0, INSN_CLASS_F, "O4,F3,F2,D,s,t,R", 0, 0, NULL, 0 }, -{"r", 0, INSN_CLASS_F, "O4,F3,F2,d,S,t,R", 0, 0, NULL, 0 }, -{"r", 0, INSN_CLASS_F, "O4,F3,F2,D,S,t,R", 0, 0, NULL, 0 }, -{"r", 0, INSN_CLASS_F, "O4,F3,F2,d,s,T,R", 0, 0, NULL, 0 }, -{"r", 0, INSN_CLASS_F, "O4,F3,F2,D,s,T,R", 0, 0, NULL, 0 }, -{"r", 0, INSN_CLASS_F, "O4,F3,F2,d,S,T,R", 0, 0, NULL, 0 }, -{"r", 0, INSN_CLASS_F, "O4,F3,F2,D,S,T,R", 0, 0, NULL, 0 }, - -{"r4", 0, INSN_CLASS_I, "O4,F3,F2,d,s,t,r", 0, 0, NULL, 0 }, -{"r4", 0, INSN_CLASS_F, "O4,F3,F2,D,s,t,r", 0, 0, NULL, 0 }, -{"r4", 0, INSN_CLASS_F, "O4,F3,F2,d,S,t,r", 0, 0, NULL, 0 }, -{"r4", 0, INSN_CLASS_F, "O4,F3,F2,D,S,t,r", 0, 0, NULL, 0 }, -{"r4", 0, INSN_CLASS_F, "O4,F3,F2,d,s,T,r", 0, 0, NULL, 0 }, -{"r4", 0, INSN_CLASS_F, "O4,F3,F2,D,s,T,r", 0, 0, NULL, 0 }, -{"r4", 0, INSN_CLASS_F, "O4,F3,F2,d,S,T,r", 0, 0, NULL, 0 }, -{"r4", 0, INSN_CLASS_F, "O4,F3,F2,D,S,T,r", 0, 0, NULL, 0 }, -{"r4", 0, INSN_CLASS_F, "O4,F3,F2,d,s,t,R", 0, 0, NULL, 0 }, -{"r4", 0, INSN_CLASS_F, "O4,F3,F2,D,s,t,R", 0, 0, NULL, 0 }, -{"r4", 0, INSN_CLASS_F, "O4,F3,F2,d,S,t,R", 0, 0, NULL, 0 }, -{"r4", 0, INSN_CLASS_F, "O4,F3,F2,D,S,t,R", 0, 0, NULL, 0 }, -{"r4", 0, INSN_CLASS_F, "O4,F3,F2,d,s,T,R", 0, 0, NULL, 0 }, -{"r4", 0, INSN_CLASS_F, "O4,F3,F2,D,s,T,R", 0, 0, NULL, 0 }, -{"r4", 0, INSN_CLASS_F, "O4,F3,F2,d,S,T,R", 0, 0, NULL, 0 }, -{"r4", 0, INSN_CLASS_F, "O4,F3,F2,D,S,T,R", 0, 0, NULL, 0 }, - -{"i", 0, INSN_CLASS_I, "O4,F3,d,s,j", 0, 0, NULL, 0 }, -{"i", 0, INSN_CLASS_F, "O4,F3,D,s,j", 0, 0, NULL, 0 }, -{"i", 0, INSN_CLASS_F, "O4,F3,d,S,j", 0, 0, NULL, 0 }, -{"i", 0, INSN_CLASS_F, "O4,F3,D,S,j", 0, 0, NULL, 0 }, -{"i", 0, INSN_CLASS_I, "O4,F3,d,o(s)", 0, 0, NULL, 0 }, -{"i", 0, INSN_CLASS_F, "O4,F3,D,o(s)", 0, 0, NULL, 0 }, - -{"s", 0, INSN_CLASS_I, "O4,F3,t,q(s)", 0, 0, NULL, 0 }, -{"s", 0, INSN_CLASS_F, "O4,F3,T,q(s)", 0, 0, NULL, 0 }, - -{"sb", 0, INSN_CLASS_I, "O4,F3,s,t,p", 0, 0, NULL, 0 }, -{"sb", 0, INSN_CLASS_F, "O4,F3,S,t,p", 0, 0, NULL, 0 }, -{"sb", 0, INSN_CLASS_F, "O4,F3,s,T,p", 0, 0, NULL, 0 }, -{"sb", 0, INSN_CLASS_F, "O4,F3,S,T,p", 0, 0, NULL, 0 }, -{"b", 0, INSN_CLASS_I, "O4,F3,s,t,p", 0, 0, NULL, 0 }, -{"b", 0, INSN_CLASS_F, "O4,F3,S,t,p", 0, 0, NULL, 0 }, -{"b", 0, INSN_CLASS_F, "O4,F3,s,T,p", 0, 0, NULL, 0 }, -{"b", 0, INSN_CLASS_F, "O4,F3,S,T,p", 0, 0, NULL, 0 }, - -{"u", 0, INSN_CLASS_I, "O4,d,u", 0, 0, NULL, 0 }, -{"u", 0, INSN_CLASS_F, "O4,D,u", 0, 0, NULL, 0 }, - -{"uj", 0, INSN_CLASS_I, "O4,d,a", 0, 0, NULL, 0 }, -{"uj", 0, INSN_CLASS_F, "O4,D,a", 0, 0, NULL, 0 }, -{"j", 0, INSN_CLASS_I, "O4,d,a", 0, 0, NULL, 0 }, -{"j", 0, INSN_CLASS_F, "O4,D,a", 0, 0, NULL, 0 }, +{"r", 0, INSN_CLASS_I, "O7,F3,F7,d,s,t", 0, 0, NULL, 0 }, +{"r", 0, INSN_CLASS_F, "O7,F3,F7,D,s,t", 0, 0, NULL, 0 }, +{"r", 0, INSN_CLASS_F, "O7,F3,F7,d,S,t", 0, 0, NULL, 0 }, +{"r", 0, INSN_CLASS_F, "O7,F3,F7,D,S,t", 0, 0, NULL, 0 }, +{"r", 0, INSN_CLASS_F, "O7,F3,F7,d,s,T", 0, 0, NULL, 0 }, +{"r", 0, INSN_CLASS_F, "O7,F3,F7,D,s,T", 0, 0, NULL, 0 }, +{"r", 0, INSN_CLASS_F, "O7,F3,F7,d,S,T", 0, 0, NULL, 0 }, +{"r", 0, INSN_CLASS_F, "O7,F3,F7,D,S,T", 0, 0, NULL, 0 }, +{"r", 0, INSN_CLASS_I, "O7,F3,F2,d,s,t,r", 0, 0, NULL, 0 }, +{"r", 0, INSN_CLASS_F, "O7,F3,F2,D,s,t,r", 0, 0, NULL, 0 }, +{"r", 0, INSN_CLASS_F, "O7,F3,F2,d,S,t,r", 0, 0, NULL, 0 }, +{"r", 0, INSN_CLASS_F, "O7,F3,F2,D,S,t,r", 0, 0, NULL, 0 }, +{"r", 0, INSN_CLASS_F, "O7,F3,F2,d,s,T,r", 0, 0, NULL, 0 }, +{"r", 0, INSN_CLASS_F, "O7,F3,F2,D,s,T,r", 0, 0, NULL, 0 }, +{"r", 0, INSN_CLASS_F, "O7,F3,F2,d,S,T,r", 0, 0, NULL, 0 }, +{"r", 0, INSN_CLASS_F, "O7,F3,F2,D,S,T,r", 0, 0, NULL, 0 }, +{"r", 0, INSN_CLASS_F, "O7,F3,F2,d,s,t,R", 0, 0, NULL, 0 }, +{"r", 0, INSN_CLASS_F, "O7,F3,F2,D,s,t,R", 0, 0, NULL, 0 }, +{"r", 0, INSN_CLASS_F, "O7,F3,F2,d,S,t,R", 0, 0, NULL, 0 }, +{"r", 0, INSN_CLASS_F, "O7,F3,F2,D,S,t,R", 0, 0, NULL, 0 }, +{"r", 0, INSN_CLASS_F, "O7,F3,F2,d,s,T,R", 0, 0, NULL, 0 }, +{"r", 0, INSN_CLASS_F, "O7,F3,F2,D,s,T,R", 0, 0, NULL, 0 }, +{"r", 0, INSN_CLASS_F, "O7,F3,F2,d,S,T,R", 0, 0, NULL, 0 }, +{"r", 0, INSN_CLASS_F, "O7,F3,F2,D,S,T,R", 0, 0, NULL, 0 }, + +{"r4", 0, INSN_CLASS_I, "O7,F3,F2,d,s,t,r", 0, 0, NULL, 0 }, +{"r4", 0, INSN_CLASS_F, "O7,F3,F2,D,s,t,r", 0, 0, NULL, 0 }, +{"r4", 0, INSN_CLASS_F, "O7,F3,F2,d,S,t,r", 0, 0, NULL, 0 }, +{"r4", 0, INSN_CLASS_F, "O7,F3,F2,D,S,t,r", 0, 0, NULL, 0 }, +{"r4", 0, INSN_CLASS_F, "O7,F3,F2,d,s,T,r", 0, 0, NULL, 0 }, +{"r4", 0, INSN_CLASS_F, "O7,F3,F2,D,s,T,r", 0, 0, NULL, 0 }, +{"r4", 0, INSN_CLASS_F, "O7,F3,F2,d,S,T,r", 0, 0, NULL, 0 }, +{"r4", 0, INSN_CLASS_F, "O7,F3,F2,D,S,T,r", 0, 0, NULL, 0 }, +{"r4", 0, INSN_CLASS_F, "O7,F3,F2,d,s,t,R", 0, 0, NULL, 0 }, +{"r4", 0, INSN_CLASS_F, "O7,F3,F2,D,s,t,R", 0, 0, NULL, 0 }, +{"r4", 0, INSN_CLASS_F, "O7,F3,F2,d,S,t,R", 0, 0, NULL, 0 }, +{"r4", 0, INSN_CLASS_F, "O7,F3,F2,D,S,t,R", 0, 0, NULL, 0 }, +{"r4", 0, INSN_CLASS_F, "O7,F3,F2,d,s,T,R", 0, 0, NULL, 0 }, +{"r4", 0, INSN_CLASS_F, "O7,F3,F2,D,s,T,R", 0, 0, NULL, 0 }, +{"r4", 0, INSN_CLASS_F, "O7,F3,F2,d,S,T,R", 0, 0, NULL, 0 }, +{"r4", 0, INSN_CLASS_F, "O7,F3,F2,D,S,T,R", 0, 0, NULL, 0 }, + +{"i", 0, INSN_CLASS_I, "O7,F3,d,s,j", 0, 0, NULL, 0 }, +{"i", 0, INSN_CLASS_F, "O7,F3,D,s,j", 0, 0, NULL, 0 }, +{"i", 0, INSN_CLASS_F, "O7,F3,d,S,j", 0, 0, NULL, 0 }, +{"i", 0, INSN_CLASS_F, "O7,F3,D,S,j", 0, 0, NULL, 0 }, +{"i", 0, INSN_CLASS_I, "O7,F3,d,o(s)", 0, 0, NULL, 0 }, +{"i", 0, INSN_CLASS_F, "O7,F3,D,o(s)", 0, 0, NULL, 0 }, + +{"s", 0, INSN_CLASS_I, "O7,F3,t,q(s)", 0, 0, NULL, 0 }, +{"s", 0, INSN_CLASS_F, "O7,F3,T,q(s)", 0, 0, NULL, 0 }, + +{"sb", 0, INSN_CLASS_I, "O7,F3,s,t,p", 0, 0, NULL, 0 }, +{"sb", 0, INSN_CLASS_F, "O7,F3,S,t,p", 0, 0, NULL, 0 }, +{"sb", 0, INSN_CLASS_F, "O7,F3,s,T,p", 0, 0, NULL, 0 }, +{"sb", 0, INSN_CLASS_F, "O7,F3,S,T,p", 0, 0, NULL, 0 }, +{"b", 0, INSN_CLASS_I, "O7,F3,s,t,p", 0, 0, NULL, 0 }, +{"b", 0, INSN_CLASS_F, "O7,F3,S,t,p", 0, 0, NULL, 0 }, +{"b", 0, INSN_CLASS_F, "O7,F3,s,T,p", 0, 0, NULL, 0 }, +{"b", 0, INSN_CLASS_F, "O7,F3,S,T,p", 0, 0, NULL, 0 }, + +{"u", 0, INSN_CLASS_I, "O7,d,u", 0, 0, NULL, 0 }, +{"u", 0, INSN_CLASS_F, "O7,D,u", 0, 0, NULL, 0 }, + +{"uj", 0, INSN_CLASS_I, "O7,d,a", 0, 0, NULL, 0 }, +{"uj", 0, INSN_CLASS_F, "O7,D,a", 0, 0, NULL, 0 }, +{"j", 0, INSN_CLASS_I, "O7,d,a", 0, 0, NULL, 0 }, +{"j", 0, INSN_CLASS_F, "O7,D,a", 0, 0, 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 }, From patchwork Fri May 15 13:29: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: 135034 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from vm01.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 670974143929 for ; Fri, 15 May 2026 13:30:24 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 670974143929 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=OUA8zss1 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 789174143B13 for ; Fri, 15 May 2026 13:29:21 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 789174143B13 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 789174143B13 Authentication-Results: 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=1778851761; cv=none; b=kC6WO+7W7w3haYwpAYaX9P69A6KqrOguzv2y8/ftualpFGXjfMePGAJ2+wKqfAXgt2DGoFOSpsNsjmBSsIiuEFEyWBo80Z+gtgNW4vzRVEqzFUfuajJoi+3jLh9s6ArzfAeDq4Mvx2XkTAP+9enB+1bNCqJXxdY7DM0QVUzL2nk= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1778851761; c=relaxed/simple; bh=k79a/yxnFZFc7ZYzPrcqr9n25mLFexZefxZYvkDLD5c=; h=DKIM-Signature:Message-ID:Date:MIME-Version:Subject:From:To; b=TnhrOgVDSAEgp6TKW57uR3vMl//OgSEmKm3T96aMMergV3NNmv/P6xjrQnzjv3r1vHi8ycB59Ol30qOB2sMJ5uhjjdOewKRJR4/d9o0XnOa5ERVfy5KLK60i5NcB6GQuOi1DPSeKYdyjgERLB2EVZMPfc/3gZzK7K3WD+AbZzDA= ARC-Authentication-Results: i=1; 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=OUA8zss1 DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 789174143B13 Received: by mail-wm1-x32f.google.com with SMTP id 5b1f17b1804b1-48374014a77so79700775e9.3 for ; Fri, 15 May 2026 06:29:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=google; t=1778851760; x=1779456560; 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=KhMMWktFcP5ANQJuF/O+7ebqvHhfnVN0ePIQmjqZvS4=; b=OUA8zss1ZjIKh7/4ooi9NBocCwNqrWWTTkUCw/bqvg4SWx6aDdwQ2zjsh+OHfM4OkY DLpkEpohhX/LO06W5UQMW3pdGFTczaROF0bDCZqcFI/nAAwlN4+VcD6Jg91rTuiFro8N MUKWMVCUVslttyAsOnaHV/ylu6wPhU4aa0FuWth9s1yyU5UdetpqKRXxcZaNhNTwGdjG TPvwuETF+5e6WBdIsbCYCa3s4TtRCRatNCP1R/hKq9PncvDBqKbZHsyNU5DFw3fxnstE cpS1zYiLjcgsgKzib+BpGT3DBdrJcrj2rbqdVHXDiLieod75OkJIsFF7AT66kjvluUzn 51FA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778851760; x=1779456560; 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=KhMMWktFcP5ANQJuF/O+7ebqvHhfnVN0ePIQmjqZvS4=; b=ebiQMQx8Lb7WCPDToJ0opQGvvrlmQ/3BUDFv/IV68YBCph1QDdBSYWvUaIYTdAmKeH 62OwTAXW90+BM67pGY/i6SUq9mTizSeF70ZUzhTedC/5pkPT3myImWREBBpW1LqlMqpq 2DpN4hMSAZ0PBntpeEZ59+Tur5HuSilwGWo3LHwDfKqXgzO12MV/90XIqFc/qytz69Zp RkiiVG93lfOVIIJUy1BT2DSC2XZdFans2KPEyfGipMj1SrVqQRMpEG7bQRoQGOycteRq jTFcBGZY4dxBzffxDXBGqeVbhFlaeMJWJFLSZYEpyV5f9/+K0SCLHeN2hbYZHCNFhOmA YdWw== X-Gm-Message-State: AOJu0YwlprQL5wib0PmCU8UMO9fh89dGK0hd34hf5KLZK48z9MRVnHuf xYS2R1+pm1qKfNqV2gPK4UHRvC6KvKcs6CxekxBffqdBZuF50D/W+tDQHWaH/goC1NLfnfbAsNF tjjg= X-Gm-Gg: Acq92OFFym1HxBVesIrX8UkH2jyBO/kuVsEZrUNTwvLRV2EhddyRad9jJfqCCTC8x0x PJ5fvsO0PC0RQlHRsZtPzdkrx1TyrLChpEGI6f2RqtYa+Nj2DrHxaNwN38Q6UCHFZr8mIRgC4Zt vBxiflybQu2UbIV93F3gJrRx03TPAnmVcX1oOalOF+4H1V2yHULxT4SapiChEhjftRuXnccARci yPuPNxBS0veMNSSTww3mkfvgELRzooNj9/iwY2XEEmuAdyI1XHI8h0Pl4UNSjlfAQW7EjxF6T8R zibR5XhoTKGKpZGN5WKTCfp88YScmhmGsS8UDHRjjeTe3MAqT9Vv1+jNWBrEF+XvBVtjI+qvITP tRziXIAUAIDT7wZipQmYwS0GS8CsyGeBppv7Av4KGVJXuLyBdHoSnKeZYcji25fEz74IQghksfa vXxirTdfdugjYBgVCWoPfGtDSH9kn5SS6gFveXSfYAv1c3+gs0aYpVMEEgEt/3cf4jUnWfwAkMY +MSNwlbuCufWSI= X-Received: by 2002:a05:600c:470e:b0:489:1c32:210d with SMTP id 5b1f17b1804b1-48fe60f195amr54790205e9.15.1778851760373; Fri, 15 May 2026 06:29: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-48febe81b2dsm13682165e9.34.2026.05.15.06.29.18 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 15 May 2026 06:29:19 -0700 (PDT) Message-ID: <09611a6a-076f-43b1-986d-16a42a8b50a6@suse.com> Date: Fri, 15 May 2026 15:29:18 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: [PATCH v2 02/16] RISC-V: fold redundant code in riscv_ip() From: Jan Beulich To: Binutils Cc: Palmer Dabbelt , Andrew Waterman , Jim Wilson , Nelson Chu , jiawei References: 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: X-Spam-Status: No, score=-3016.4 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 shortcircuit=no 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. Reviewed-by: Jiawei --- v2: Fix O2 to permit only values 0...2. Re-base over O4 -> O7 rename. Fold diagnostics in 'O' handling back into being a single one. --- 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; - default: - goto unknown_riscv_ip_operand; + 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; } - break; + + imm_expr->X_op = O_absent; + asarg = expr_parse_end; + continue; default: goto unknown_riscv_ip_operand; @@ -3709,97 +3684,80 @@ 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'; + if (my_getOpcodeExpression (imm_expr, imm_reloc, asarg) + || imm_expr->X_op != O_constant + || imm_expr->X_add_number < 0 + /* O2 encodes C opcodes, i.e. doesn't permit value 3. */ + || imm_expr->X_add_number >= (1U << regno) - (regno == 2) + || (regno > 2 && (imm_expr->X_add_number & 3) != 3)) + { + as_bad (_("bad value for opcode field, " + "value must be 0...%u%s"), + (1U << regno) - (regno == 2) - 1, + regno > 2 ? _(" and lower 2 bits must be 0x3") : ""); + break; + } + + switch (*oparg) { case '7': - 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 Fri May 15 13:29:51 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Beulich X-Patchwork-Id: 135035 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from vm01.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 7D3BF40A1FB0 for ; Fri, 15 May 2026 13:31:06 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 7D3BF40A1FB0 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=Uw182PhS X-Original-To: binutils@sourceware.org Delivered-To: binutils@sourceware.org Received: from mail-wr1-x42c.google.com (mail-wr1-x42c.google.com [IPv6:2a00:1450:4864:20::42c]) by sourceware.org (Postfix) with ESMTPS id E692A40A00C3 for ; Fri, 15 May 2026 13:29:53 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org E692A40A00C3 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 E692A40A00C3 Authentication-Results: sourceware.org; arc=none smtp.remote-ip=2a00:1450:4864:20::42c ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1778851794; cv=none; b=JQIThUvoefhGEgukM+DRvTsqjqYcjmuypk1NRRhVVzaUqVPULNT6PG3Pw9gyUdz9VdyCeqkJ1XRP2jdqNda3LEM4mPqR0kncisAWhZ63wArSW8dG3Pd8hYTL/WMzn8atZh4gSr00XlseqdsizsR+suAHcarJ96qMznbydAF1KaU= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1778851794; c=relaxed/simple; bh=1xsh1YZAjoTHrpoxSUuubQJDqvnXW9F1BuhXDZrrAqU=; h=DKIM-Signature:Message-ID:Date:MIME-Version:Subject:From:To; b=TUbHXHLAnD08huX9HGHRErnnPOr7pBAXZt/qyofSnYo2ZI4KrxwamaHZcLkd5vKXtjY+CSY++ZXOP4RgmapbHGtPxjd6lSXaVZYxywUFWso2QxeQsLf7GWsLDfy/VNmTiVf4cprbRpj7h7VTWSxHtgHNjIsKAjQ/J6e6CGWxueI= ARC-Authentication-Results: i=1; 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=Uw182PhS DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org E692A40A00C3 Received: by mail-wr1-x42c.google.com with SMTP id ffacd0b85a97d-45ae6a0e523so2882934f8f.1 for ; Fri, 15 May 2026 06:29:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=google; t=1778851793; x=1779456593; 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=b+BfZfaDlXLQbGslXKiTAJoBNhWt6APVa0a2OQMxzmo=; b=Uw182PhSFRig3KPc348e6MnBtzXgNuowpX1pVzIgHPQhLJ9VVfbj4lvF5NCEDfufIV 1tSYe9ba0dY00o6U/lMe+WJLJqHUuc0AmmFpWRb5tXfIDBXSoSWXgiS6LB3zgWX2oxKo UYtoEWKiPbFHXMippIje555+zvmD7yA/RhIHwsDw4XOVbLESag2/lLEjKHpov2XiZCTF vkDMoALcy6D/SdRjmZgRiPYJ1vnWC8Jpx0FAFRT10sptCwj8hptjw5fg5QZOtijNyu1K IpRJQkbmyTeqIUf+MFEdmVOPsuHpgBMxIcNOhJhh3lOaYLmJshez2PXCQt6PHMDGJiLt nm3A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778851793; x=1779456593; 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=b+BfZfaDlXLQbGslXKiTAJoBNhWt6APVa0a2OQMxzmo=; b=d2821dbQglGHoBlxOgITxo+BYGnksbcdW0Y9utoblzEAuQ+0CeIrVM5o9ahDOdKlZQ eiYrx5TMJAojKvmbtTZpWsl6s4rweqZ2QwBHzoo6Cj0wUL4x9zG7QfRYQKFV0w1mQpeD 3mnP9C1E2jLYP47VXyuh4rggABP+QZfwqJO4S7+/U/zvGkTb2VwdjandV5JhaMen2bSR fnjCdpdrcZ0jzxTYCmWHBiY13KeZpW+NjLarbzTMZaSTUKfamsy1aAAEN2fNki/exWj8 E2BZByC96JIMQyJqaZEwYFuNGdDi+2mjFSfumfrheB2z8PC39steRNdDDa2DUYhyEroC SW0A== X-Gm-Message-State: AOJu0Yz/4S4X1bQhCfirmPb7T+5qb+GW1MmRPPApHqXt26pXny45AUCe vTrkigNbEKIP6DR1dKC+BZYdWSrmMBxbonvq/XLq/KPZmj6g5p3KrawpB2GJ+gxTZZb0Rqlnart XahM= X-Gm-Gg: Acq92OEIX29Iboq5u5cjScJe38sHp6m2/QS+psAbZFYxvR2pMnsKL5xNDBU6pXiELKS ukEB922vaSb8i1uANkGpYKmsipAkiWAGjfNWxfCgh0Rdf0JkJba1l8wIkSOavI058+gzikBMcpp PUEe106QgNjY8r5gItT+1Lg/qF4M0Dz+4CfkYjVSDBmsJ0AdGEKAf5LIMwSeEjUYXJytC3hSEVT pyT4t+um+znF4+di9MkHta+z+3/sE3O61h3S77/DVi7F5qNEpPt28HNbHJ1teCOr/pwlJb+NGb5 xYg+xJKg20aoH+tQkz7uehPiW5II8XgrSpGivREcraoWx7f2+/FvR3nKhh/wNkBnUh6mx62R6lP halZYDGn5xG8T98854fEsCMkMaG9PIrd3jJOjTtTRQGswZVusH85uMlwNOomRmiX8lU4rToHIhv qpAx8nZgzcwoRtgntjrP43To982S/I1IXc9VNQyiIeaS7WB1xlvS2qk0/4zBefyUBcrsuibcnKN LCm7PBr1fU05sU= X-Received: by 2002:a05:600c:8210:b0:48a:5c23:cab with SMTP id 5b1f17b1804b1-48fe6322447mr51657715e9.19.1778851792784; Fri, 15 May 2026 06:29:52 -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-48fe4c90b27sm67045475e9.8.2026.05.15.06.29.51 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 15 May 2026 06:29:52 -0700 (PDT) Message-ID: <81972842-e7b8-460b-aea7-3e8511c3f26b@suse.com> Date: Fri, 15 May 2026 15:29:51 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: [PATCH v2 03/16] RISC-V: add dedicated vector arithmetic .insn forms From: Jan Beulich To: Binutils Cc: Palmer Dabbelt , Andrew Waterman , Jim Wilson , Nelson Chu , jiawei References: 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: X-Spam-Status: No, score=-3016.4 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 shortcircuit=no 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: @@ -3743,6 +3744,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, "O7,d,a", 0, 0, NULL, 0 }, {"j", 0, INSN_CLASS_F, "O7,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 Fri May 15 13:30: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: 135036 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from vm01.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 0951B40A00CC for ; Fri, 15 May 2026 13:31:19 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 0951B40A00CC 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=I7An6Bso 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 7493240A1FA2 for ; Fri, 15 May 2026 13:30:20 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 7493240A1FA2 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 7493240A1FA2 Authentication-Results: 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=1778851820; cv=none; b=Q4hBBVnvZPpvQEuJFvy4+7oRMPQmTceprnfqzpiVEr+EzuI+SLDvHe1XFCFqA5DcWcKNleaO+JBljyvJlmy/0sU65RJukrxeOY1M4EIQBpuf/zaFLPXHm2NFXWAnDd4KyLfh4E8ZW/lSLrlAkW6rF2xFfBSjrnrbjWtWejbBv7g= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1778851820; c=relaxed/simple; bh=e2YYqImFBG1jAHdkP4kGb1xccOH9jzuGzbvq5z26FFs=; h=DKIM-Signature:Message-ID:Date:MIME-Version:Subject:From:To; b=WaA3OSXTUaprsZuSVQoefAQ7jDeupIBjs6VWkZaNi/9mwjQ1L8GQLA8fkZBmmug6c+N2+8XipjuVvOvwNoHYQD1Tsnf8XGcIt3oUVp1iLW3Hr8mBElwHKFnNCPq1cbomEe764ZILmE/yfY+yFtGSTl2xwfkub9GqExYG88iKgH0= ARC-Authentication-Results: i=1; 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=I7An6Bso DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 7493240A1FA2 Received: by mail-wm1-x32f.google.com with SMTP id 5b1f17b1804b1-488b0e1b870so151861005e9.2 for ; Fri, 15 May 2026 06:30:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=google; t=1778851819; x=1779456619; 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=I7An6Bso9UGBgbKFctQPQ2Wu/+lZLUQLAi53RPBUHaPZDwpylJk1+sUPsKw31BzS14 F/P30PtOYNB5qGQTQ3kpVVhbg3JEDNPx+k11I9cYk6N4AZkmM2oQo6rB/sgpn+xpdml1 m/iw/sfCgy8bL6YMzqi7d5kUsrqCRW7GMeUeWKZt6xL1b1QJZap0Cjd4sWefaStGUlM0 xeTYF1+J7wQYSqxxQoBwZVIHSxsT9t6L955K4dbRip2wTBTuBcA7cdt/P1iITkaYB4bb Ag9X82sGrHviLQ169hLA0hui2H5Lov0Vmr6gVXPvCOJb5kyAGkEtyNQ4sl53pmdiLrBJ 1rBg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778851819; x=1779456619; 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=F+Jh+53jiwLzxsO8TfYmuzqIh7ll0bMhejmF3M7/Cj1MjkQYdZKahj222LrVBcSbS/ 9HX+W6wi7U9szzVK4njCfAer5ulZLtjr1va/OQKgITDEV+HJPKC4vhfqnoJiSP9XZsPC cdLJ2Lt6OcMOikJMwWYz2gBNdGPViSaqaYuEw4S/nRUIjyeE5BfbJuYG4SKdEy6rJ2zu QQogSX0pmFL0t1o3mgYxQX0RiFP4ecUf5IUjHi84QXuGcPnfZt2GymUKBOE3jmG3j0xr zkhxJxNscTR5PUUGe5ZHlTvY6k1wSzjTuT3HTPQ1TZt85Cv8PPMzUQA8bTy9pWix7hya RUGQ== X-Gm-Message-State: AOJu0YxS4CgHt+728YtSQKoKj8ndX/ZpnK9QWx6NYK5/qkvJ6VFCI3Oy WLU/dSTccOkhmCHkbA4IVr1k0+NK2Co7GyWVj3j8+S9y9HcAbZ3BW+EVwTmRLJikEy+ScCyJw6s TghQ= X-Gm-Gg: Acq92OHlWvapL3cTIMC8pjI/buED/eNGSQkck3Kr0UlhQ0E7bUdCPl4rrtmDlV5K4C4 Q1ZdApI0OkSahx9srUxTYGwhpe6iRozhaUbsLgghC7ChX2UNRE8/8RRE6Hqdf3w3Uw+Irl7+7Cs I4Y/VZmsjBYLKEpNiXmdNhtSPLOapR2aPCgaJze0gLam/c0MvT4KcFp5/+tf3UpsUeopMsZWSlv XiDy0yCk7appbB2iWjtwEzhU8MP4XPW2ElVeAg4pfoMgRpXKDSq8VZ7a7EdabM7QPk0dHYfP7Ca NV/EmOcnf4IuG35v+kN9/KbI3AfDeEXcWnR621UEygj1MsxlrYno3NM1LntYiHfpWpiFKoIBsf2 VTCnje1M+zu+tdYgBxhTKqGc3KV9UcQHhlzQdzyOTJ++Iq0bmMsWKyr2sembtODmSZJBe0C5IDM 5S+KoKyrULnRU1lvZoRcmeEwqm4qY7gm4tiq0Zml6Bk1KRVAGqrc7I7ab4R/xz78v+7o55xIzbH P3w0UTyDtHQ0Vg= X-Received: by 2002:a05:600c:8b18:b0:485:3b9e:caa7 with SMTP id 5b1f17b1804b1-48fe6515983mr60407985e9.23.1778851819379; Fri, 15 May 2026 06:30: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-48fe5694fbfsm111309215e9.6.2026.05.15.06.30.18 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 15 May 2026 06:30:19 -0700 (PDT) Message-ID: <7b2943ce-eab2-454f-817f-f1de5650a5f9@suse.com> Date: Fri, 15 May 2026 15:30:18 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: [PATCH v2 04/16] RISC-V: match_*() improvements From: Jan Beulich To: Binutils Cc: Palmer Dabbelt , Andrew Waterman , Jim Wilson , Nelson Chu , jiawei References: 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: X-Spam-Status: No, score=-3016.4 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 shortcircuit=no 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 Fri May 15 13:30:39 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Beulich X-Patchwork-Id: 135040 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from vm01.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 0FF0340A00C9 for ; Fri, 15 May 2026 13:34:58 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 0FF0340A00C9 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=SawzTK5o 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 D69E44143929 for ; Fri, 15 May 2026 13:30:42 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org D69E44143929 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 D69E44143929 Authentication-Results: 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=1778851843; cv=none; b=s4IhpH9eWWlGbMcWKd6wyqmJHdgzi6l9+HbYQdJPWNvSZNDiJT/7+nltueF9OyeTZIB+/wEZwTSJdpAdSiLQg1LG9fSReBGtIp+4R1CPBdDVXkmmiKb73074BjBLCQ55O/EF+1avxD2fFbJ7K+deTS0ndZNjUA5rruTcyGXWALQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1778851843; c=relaxed/simple; bh=vHx95SOpfv+8RYC3jRlKtKnNZSaP2Y9a2Pv8W4qA0Ws=; h=DKIM-Signature:Message-ID:Date:MIME-Version:Subject:From:To; b=O8MaJGuibLd9eTYHw+by2SYmnlRqb3AhEIrDHo4i+qz2XvzUnTXhQfTltIZwRyemK8SwryxM3XlrYrs+LvJ7u7+bwk7L5GaXP6+7ZSV74vjLmfuH8ViHBqq0XpT6eaFaoBdUODSDZnMoQDMdcXQ+VwkXprCZSgWP4hgiQQdFBiI= ARC-Authentication-Results: i=1; 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=SawzTK5o DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org D69E44143929 Received: by mail-wm1-x32a.google.com with SMTP id 5b1f17b1804b1-488d2079582so92516595e9.2 for ; Fri, 15 May 2026 06:30:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=google; t=1778851842; x=1779456642; 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=SawzTK5oVArybhQpMBt57JQ9jajd1LPGrfif1GDQCodHBmy4y1nkyFMOx4QEyNPpYR EfeZ7sheY6eQm02jTJnDZvbtrLfZS86cykukFqx6VctQKpUke+SYiWM9YIlHsNG53/Fj bjq2aQOgPyjqEmRvgceiqzQFNsfxPlX6o1diOU1tG9AEA3tCPBjtf+EMnZsfmZpp9F2n 7IN2CZyGxjjc804twDX2nqlUg1eToSZHTWGJo60aAewhuHggJSSFftoNf3Q6BHEqGSTZ x+XvWQc+b2hP2B2T/4xvbZ8/DMOY0MQfmeaLLJXl45fY7F4+oWLCGIve7d2ba8AW7pGl A9aQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778851842; x=1779456642; 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=Uhxt1NCCKMmjWteNzTPBtuLXVul60ITtOK5/SwykbYtMMdfoABTlY+6xZaMKl5mgY6 p6ZMzuhgcIvwFRa1kPtih36fLj/miEoLUFj37rX1W0DL63dFcONenuGlSFR1pVoUDBha UQs0OE1dJvjNMjZ9W/dIzQpp5GhfUKEM66zyROdV8GUoCotNRtAhB+4TOBYLnPneDjQy ILCbKuePXrXROU9wgtuIX74Q8RwQI3NJ5E69/B67y74V0d0zPoIYdhpjAatz0YVyOilE EkKZvf3asMZ+fKdMpazNPd47a9+8EdQVqiLRZrLI5+f2oRxWlvBgymiXJhHl8M3lA+ZO 27xg== X-Gm-Message-State: AOJu0YxDqav+gAfbsdEXJRwzCBeJDhmwscLHiVv+aMDlEmSkQwq8s0Bp aUZ65TDyXrODv35a1HQwnsuaZuwtaI2iko365oHXVLTs8Mx+F+IAn0jZ10HH+0VOKG2EbAIaxws pC4c= X-Gm-Gg: Acq92OFIUyb/Yr9oNC2jV5c/Hfv+3UPYevIFVeJtF2BwMR99+9veeHvxfErEjXnriGu CJeKPsYNXs2BPh+XzFvG4Rsg5uhNuSfmfs1JdSbruzTwBBYKkXsaazPl8eUafh5svbwuJKrL+8h hUqsoqVr2q2MsoF0tZ4+2Id/jpxnYqlSTr7UGgg/xSDqx134wDU3X83W/VOzBRHXY5imDtwwweV d2NMadXir22Zqqse9M1inxmaiuOzjk+5KDSLezCTtJpV6hYubn/3ps7YJ6f2LUzixhSq4ciSCeW vuzyxFSoZsRb37zRZhyNwn87BbLJg7etCNixEpbp9QspW5psVKt1xdk5Oi6zDUXu8iA3c2GuJhJ 3Q7Dw13MLc9025PbEJ4Y0Wz/tRYqdd5iyySFpi1qTPM+0JwSa8v+4eOyVX9AwI+slSXf787Tnux KVrOTEQSrsLcgr6fKNm/7GDxI4Xs8DRdUPrjKaiAZTM5s+kp/EOHKVLBP1sNoZ0DgOdisthQ1yL S0PjEXZk2ZRaVEP1gXizFYs4A== X-Received: by 2002:a05:600c:885:b0:489:c57:7836 with SMTP id 5b1f17b1804b1-48fe6517fdfmr35068175e9.27.1778851841642; Fri, 15 May 2026 06:30: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 5b1f17b1804b1-48feab290e1sm25901985e9.2.2026.05.15.06.30.39 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 15 May 2026 06:30:40 -0700 (PDT) Message-ID: <2bf5a1eb-9253-4184-b79c-79691ceaa16c@suse.com> Date: Fri, 15 May 2026 15:30:39 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: [PATCH v2 05/16] RISC-V: EEW64 checking From: Jan Beulich To: Binutils Cc: Palmer Dabbelt , Andrew Waterman , Jim Wilson , Nelson Chu , jiawei References: 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: X-Spam-Status: No, score=-3016.3 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 shortcircuit=no 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 Fri May 15 13:31:17 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Beulich X-Patchwork-Id: 135038 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from vm01.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 9F50C40A1F8B for ; Fri, 15 May 2026 13:34:18 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 9F50C40A1F8B 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=gj2qlvxF 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 2575F40A1FB0 for ; Fri, 15 May 2026 13:31:20 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 2575F40A1FB0 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 2575F40A1FB0 Authentication-Results: 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=1778851880; cv=none; b=wYVIpYdv/HB8Rz3BJPVKwQG2mK2Ma4G5c3df4N0UNeusoNvZG+5TopOwubTxeDrgtw9volRifBK+bL2kqqrcH0QpSsY0Cdj/pe1as3GeMSS5ZvRlsKYkWAZxvCaODjQiMjWhpL/l35t4JO34V39W6PaibUVvBOgsMURVqTdcqn0= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1778851880; c=relaxed/simple; bh=R5ytMbm9BHjJkIVjZm4JyuuSms7MFmzmYjiSV6ZX/j4=; h=DKIM-Signature:Message-ID:Date:MIME-Version:Subject:From:To; b=NYSpscMhrkYbso1PnINW0dgipRf4XgaW1dpF4TDA3SCtiACvmdVtGMrTWjf33JhJr7VHjO9TKy2E+WVruRBGz636OTNZolovP6UnlQMTDWlIHvnCIeZUFHvOOrAK4RtYwBUJrHbUu3YAIElJJ36A8rWSX33kLwtVjHMCWWMAqOw= ARC-Authentication-Results: i=1; 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=gj2qlvxF DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 2575F40A1FB0 Received: by mail-wm1-x32d.google.com with SMTP id 5b1f17b1804b1-48d146705b4so108465105e9.3 for ; Fri, 15 May 2026 06:31:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=google; t=1778851879; x=1779456679; 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=gj2qlvxFB6pRxCLCD0WrMxq1JwUg/pFSVmpxVHrMIAoIlzP5ldb1KgYzV0g32aMoJf 1Nr6IbvG3ufD7xlHCQnKPIi1P+5f3JQeRy02CliGhEGp2O9ehSUo/Waxqzp6SHLVQCRj 9Aw4YngSUYwzAZOuktOS17NpqrpieYUpi6v1grhCtNMjespWxhhTjd5cpQW4xtj1vCyU OzcQJSw0s1KwKUwoiieCw/fhz3uRF+fkkKa2ukdo9Jid0xM4yLel6rPcnAyw5E8TAnZm LSLrVmb0HGlK8lTg2e2ct5WspyATHf78BFeYIX70RugxtRZOgxZVnqRlSOzYFi2Brm8l bevA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778851879; x=1779456679; 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=jjZ0oHw2khbY+hoBv+Xir400lz/z82IsrARbCdLkxKg7SRD9MtmEbD4vM7mt8Ulre6 0MJNtSzpnGw8xZLLQqc+QRIRzwfutXos5oui1pQIJp3UD1hWRx3UgbbPI3L5wSmkRcxE R3uTlu8sZV3lFjEIcKDV5bELVvnnTGGlOkhAtgoyE5LkPYj7lKizIk7yLkK9eJ1d0sYZ OH8CuyKUvD1ee/Bck7iAeDWEvcKbaknmIueNroENfSvPkrLRQOMwkLkFn/IdXzidmzWs veAksqfPHqgnDpV9UKlf8dY9pHh3J1nDa6f9JmElRbTbdVPHHV5/87ZeJVQx1fMO3x8w 2biQ== X-Gm-Message-State: AOJu0YzGotRhF5VFCEOQc0jp3VEaChZe+App1wir/LuO9uz/nVbZM6JP wSNFtmPoX65sLnIfTsaZlFIPxhMH/UbvIRZAe4QmSy1/gWlYEN0zJq9SddMsuYR4myHVxpsypvG 89RM= X-Gm-Gg: Acq92OEYhZw6BZximRvjRn2rWAhKoA2Xv2hY1hdI5sjs8vnpWoly1ZUApk+L+WqxiYG 0fQYEJA+LSnM7Z2D9X1t3hpIfUJFBV7QNA5IsA2JLQnoiVk0Yj+wHZZfLChv1u89vZsL9Ebv0h+ lG43FgIA7AJlxiQM2D8Ul0SGK41XlJHyzIlianIHOIhJ2ZQsd5WFFTWTbSvwNH5E3Dnij+mZuh+ muA8SEYlP3pSKOi3zdmc3r8dTYHVbTzcPVvR5jsQ6Tf3RbY1uuBWqs3BFtVWie6KzioigE1EqLU rgnRyj/+zUn+3gNWgSR3VNquGmh4U/uiMPsynFqAEW9pCCD7PlBZJELmcFT2wCLsS1SQpfaYBoy iMVPwpE1OmFaWUiFjejqJc06ZHdOPlaA9/V8S4gsQ1tPwT54Ltl3bkt3surXneWHF0nWyde4xH5 JjFeDYF+UFZwE6uoIBsYy7gDR57Lckjhkfk5G3aUSczRijz97eR1eNryZsJYEsaEap2MpDfrAo9 T3mMo4rKFc7q/1pqe8Q3dSdtg== X-Received: by 2002:a05:600c:848c:b0:488:9ed3:1492 with SMTP id 5b1f17b1804b1-48fe60ecc19mr57870835e9.10.1778851879044; Fri, 15 May 2026 06:31: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-48fe4c8d39esm62722015e9.7.2026.05.15.06.31.17 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 15 May 2026 06:31:18 -0700 (PDT) Message-ID: Date: Fri, 15 May 2026 15:31:17 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: [PATCH v2 06/16] bfd/RISC-V: Zvfbfwma implies Zvfbfmin From: Jan Beulich To: Binutils Cc: Palmer Dabbelt , Andrew Waterman , Jim Wilson , Nelson Chu , jiawei References: 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: X-Spam-Status: No, score=-3016.3 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 shortcircuit=no 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 Fri May 15 13:31:59 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Beulich X-Patchwork-Id: 135037 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from vm01.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 6698B40A1FAC for ; Fri, 15 May 2026 13:33:09 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 6698B40A1FAC 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=UgXBVk9j X-Original-To: binutils@sourceware.org Delivered-To: binutils@sourceware.org Received: from mail-wm1-x331.google.com (mail-wm1-x331.google.com [IPv6:2a00:1450:4864:20::331]) by sourceware.org (Postfix) with ESMTPS id C686640A1F8A for ; Fri, 15 May 2026 13:32:02 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org C686640A1F8A 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 C686640A1F8A Authentication-Results: sourceware.org; arc=none smtp.remote-ip=2a00:1450:4864:20::331 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1778851923; cv=none; b=r3kEgvcH5g7x33xR7g/jgWGSQjbzLXa+eGqWLg34GvANY0EUZAgljWOTHvM0q8Ez4MxPolXzDB+rhbdDS5Sj+pChrULSkBeb8/1L5q2mCNn0VHdMns3AhZB58uEZ7WPNC+yDcZf4UiVYj/p2gaLUom1wJnCmHZ7izwHhEoZo0fI= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1778851923; c=relaxed/simple; bh=d4a1iZdqVZ7tu9h9qVydYRwMcn2waof36e6Eh9CzoHY=; h=DKIM-Signature:Message-ID:Date:MIME-Version:Subject:From:To; b=Wud1nIDIzLiSrxJmEPjoXRnGjGjhKMys/IGG+4GijKTzT6UNYJASWxZ+1pftYCx05l6brldBcYNPuSL0bOqhLIjuxhsvL16NPYaHtaZDeW+aLE0GGoyNFwhQJ1eHwaeMx7VsM+n9RlxV1gRbg2BdxvdElTmfmtP98GQb1oXyZps= ARC-Authentication-Results: i=1; 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=UgXBVk9j DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org C686640A1F8A Received: by mail-wm1-x331.google.com with SMTP id 5b1f17b1804b1-488af9fdaa7so50661355e9.1 for ; Fri, 15 May 2026 06:32:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=google; t=1778851922; x=1779456722; 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=UgXBVk9j05yJAFxInIxmLxKirk0OK36O73E65OZl4iOtwmFsZJuMwrmbga8M9BGGmu ezXsfCwNdnGnno6hyjVnvHzo6JMfeldX7u0qQh5hRMxTbaQBttqwDvAqE0l++T2fqoZB Rs5ifr2XfhVFJAxTY9sBjmpv6Aj92ZPQ1oJk+8e2SMuiHEE/Wcn1fICgyTOIQBXT8h3b J6xbtd/S+c6oIwbXrBJrjs8qRlJtK0U+8o5/JJTVZxYB+6ygHENxEqSoarNHPOTTSa0l ESuK8qVxmgfFXsI/NDgcRXHgEVPzmGNtIj/x7eUh56LqfSlxk4HtNvlCRpDtHGzc+agt d0dA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778851922; x=1779456722; 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=Oe7Rkz+l/qlyyS/wKBaToQceHOydKbVCNFgcxUUFJxCsdIWloLWHjnskQ7Qbe7AOin ROxSELZFeIzG2GHZ4rLDRCbGc0aeBiPp4kD4EqwyXLwNTBzvetjYo45OH5Qe4wB1GH+R 2i8G+Heh9jQwSIxEs1MgLC6SLjLNzP86AM1DQ7CtIc/KPTSLv1hbqJP5dPFlTmf+ElRK dU9m0Sr8hgYOhR18h1hiEXi2wHrCotwNIPn0SRxri8Gnd7kN9RB+IIWjFuIhgZupHM32 zg2a7TUQ6UXI0MfLJtvlJmzD03tcBFsVhUjhI8uRf5ZT4jcE3RiQLVxTDPzaZnMgqOeo 0m3Q== X-Gm-Message-State: AOJu0YzqRt5Qe83MKhmGkGGbvOZq6/1++g/WTRAfhIfqEuwN3nZe/OxP G8pO3kduUbBO+leZTeSZYdKIIgaRUnEiWU34xkAtpvJ9HkWzBp55EHpg2BH0C+ET6jyICr9G0I3 jL6w= X-Gm-Gg: Acq92OFZnf83UE9QmZ6XPxrOfimitUBKaPJPha+FKorGOpzC0r72uDQzOrNGvPghwHk 4O0VWjtpOSViRRnFMO67IEDG9jV6avOP81BDqn1QwzPVw4KD8eeRK0Z5J2jmlsO5Puhl3rT1cfv j3PwAVjB6kH8/96NCIpsBWP5q6Ob4sgRKOR0Jh1dfVY6kthTuD9RnwMzX2+sP4XeVeEQP8voLpo kejA4ke8QGzND4Wb5GNhfamFs1Xwk7vbDldfy7QK0quyfuhVIXGiox80AoqbFYHKdkZJH8KTL2k eTt+GXmG0OvXfKTuf7xVuwIHGzLnyBAIx8ZvU1Hve2HlC4r5whvOwfe7wwkaXLml2dGWYxX3nb+ ipvFX1yyAvgSuEguFksCpy1WWwP/QtYhoJAXVUE967CfTuftcpVGO733JtDcr13LYveaE9KSBbe OJNQzGHmK/AX8xSe2/kN3ixIGgdNH5t5vII5WDE7AIZYju5eKkCj3kqS233ia7HkTsAI+RPxDjZ irRM/bkcFBJ5U8= X-Received: by 2002:a05:600d:10:b0:48f:cfae:b654 with SMTP id 5b1f17b1804b1-48fe60e5537mr48086625e9.1.1778851921700; Fri, 15 May 2026 06:32:01 -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-48fe4c90b27sm67192725e9.8.2026.05.15.06.32.00 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 15 May 2026 06:32:00 -0700 (PDT) Message-ID: <22f4c3a6-01a8-4ae4-8359-5d5ad3470b8b@suse.com> Date: Fri, 15 May 2026 15:31:59 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: [PATCH v2 07/16] 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 , jiawei References: 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: X-Spam-Status: No, score=-3016.3 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 shortcircuit=no 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 Fri May 15 13:33:10 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Beulich X-Patchwork-Id: 135039 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from vm01.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id D048C4BA2E18 for ; Fri, 15 May 2026 13:34:57 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org D048C4BA2E18 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=A5od7o1z 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 9C7F740A1F80 for ; Fri, 15 May 2026 13:33:13 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 9C7F740A1F80 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 9C7F740A1F80 Authentication-Results: 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=1778851994; cv=none; b=eIZDj6a6ZEZn5B5WfO3S67n3HlLhD+i1sHgpCg94h1K2LjTXBQWWTjoIDhZHk4dcJC8vflQjQXvmQp83dBk3chwprKANHa+3uXWtGg/Xoa1gV9TT808Gp2C1zTam24p+MVb26YZIa2ipo/eZxq81KPMA2FuumJ8+Ylf1/pwkYho= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1778851994; c=relaxed/simple; bh=uObLBeceHMQUFXSyFvG9TCDF92S6eXoWF+bKRFpfZB0=; h=DKIM-Signature:Message-ID:Date:MIME-Version:Subject:From:To; b=fok3hi2AZXtFg4XG8fUMH08PlqVsj+novt2qiDr+cnQ3W7IEQ+OVNxXeH9/AgKULj84ILrv5Wozh48+nYuAsZ8/dcZ1vvK3kCzz0cxaSVXIWuckuYDXhUETMvzRed937zlEreIE/OvZP/57eehi8x0AM/pzprn92hPkwN5dV2Uw= ARC-Authentication-Results: i=1; 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=A5od7o1z DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 9C7F740A1F80 Received: by mail-wm1-x335.google.com with SMTP id 5b1f17b1804b1-48d146705b4so108492655e9.3 for ; Fri, 15 May 2026 06:33:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=google; t=1778851992; x=1779456792; 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=A5od7o1zJSzwPXX+4Bq2OohcR45G15mzQmsQA5UPMmSnbRosEIjMDdf5GuNeUpSCcH SoEWjN8WBSHsP0kM2GKj0EOF5KcHFDsBODZaxgNhYMTWGiB224w02l/N9PeqxTVXQDC3 Hq2xxS5edtHavniMTJvO29Nx1a2KezRBi4RvmedxKGVyFxu2WNuQ7+DiiBUayvwN65L9 GwrysQDCWfQrsUhIC/oPKXO2deTFQ3Htse+1hIJqh1JhY1VwIxYMSddw2JUSMo357rDZ cIvNt/7b1O2z9MAGS4Fnp66OMYpU+/nqxmVP2QHfbLA73ljUVDlfBQhC/Z4e4eOsr41s Ylug== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778851992; x=1779456792; 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=oeTRRnJ2HVUySM/ZHncnQ2SZokKePqYY5DM3kSxisVMXdEjNzspH8Q7qOrdUEo55jD rRgWWb5R25V7C85tVjOKfq74P3iptIzU+zHGUyiqy4O84CIQFDb6pxjBcjqwWFBiPFbM BnPJtfHAegW41H4luY1AN3GeOq3etIJ8Gj118n2ZzpTY99b26GLBuJejf60+OetUOGgq zUwWEbao6INjKA4hIglhb8Ds1v+7MnTLAcErXxynIBv4m/WjLNm4Ww+R3axGW/HMs4tB 0d3wS50gZ+tzSTZTRfEswMzCERdKIlUmGBjSCTTkQpx6TCoK6z1yFq2dQXLgJkSIommJ s3fA== X-Gm-Message-State: AOJu0YyQPOb9D3ta6ePYf4raZuAaq03YC7F68WP+EXAdvmIMFqjuRRme f5PGeq/fgNcvkt8as3wNJbluZWUUn5QKdsJSZnbwkUy/r0Olbju0pFX2y4QDX3GBjDM6e73SyTt htO0= X-Gm-Gg: Acq92OGCeGnw+THh78vXMZuvn2DFCHwbMjT77PdD5LBiVDhJ4DQlcJnWIvhABUWw7Pq 92LJe4W+QTtFRaG9inj2fRmQR6Vy5LPPdnMUWa+UE85BZCM6DXpL8EpXi18EopUe1Eyv1A1s+W5 OcufcLAdLWj2TjM0Xd2NGTUDI4Gz23YTn74mebuFA29hxQrebXGUeRi9GpLWz8OS0dHapmU9dCf Q9zFpZjopT0SvM/Izo7VtJf+Tcqiosxo1C5mBgWsM6sR7XEAoM/pwuLqrlOAn55kEpjH6qaB0yS VOfuyuFBhuaNt189CgOAz/jQM8LwZG+FU6GSGed1WshVVlNBJWi9dZ5JF8LTtu9JfbyEvXhfxiC ozo8y6Ul42pMI41bJZ0z757gocxHkyQpqatnhWEIHCfb7uMvfKo6R/Eku7VS+PHaRhZp7vYkc33 AAZJsTmpTny09Y/Biatv6kWbekFSdLzjkazKu/WHGOwMU2Kag+xczsw41p6uyFybzyIGGL39Ep1 A4KtsX7euaCKG0f/B6RnHrtqjOGcGmyNW1t X-Received: by 2002:a05:600c:a406:b0:487:1fb4:7e1 with SMTP id 5b1f17b1804b1-48fe632a02fmr50536715e9.22.1778851992268; Fri, 15 May 2026 06:33: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 ffacd0b85a97d-45da15a6449sm14352907f8f.37.2026.05.15.06.33.10 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 15 May 2026 06:33:11 -0700 (PDT) Message-ID: <08075748-9d50-4288-82aa-a0625ebb6a2e@suse.com> Date: Fri, 15 May 2026 15:33:10 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: [PATCH v2 08/16] RISC-V: make FP rounding mode an optional argument From: Jan Beulich To: Binutils Cc: Palmer Dabbelt , Andrew Waterman , Jim Wilson , Nelson Chu , jiawei References: 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: X-Spam-Status: No, score=-3016.7 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 shortcircuit=no 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 Fri May 15 13:33:37 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Beulich X-Patchwork-Id: 135042 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from vm01.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 97A3C40A00C9 for ; Fri, 15 May 2026 13:37:14 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 97A3C40A00C9 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=XKht42X1 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 3EC2940A1FA2 for ; Fri, 15 May 2026 13:33:40 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 3EC2940A1FA2 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 3EC2940A1FA2 Authentication-Results: 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=1778852020; cv=none; b=VZkk+oDGPxdZY5ipahbm6P1+UrdFZchCkUZBb79QKz4DfUJcm1Hz/fHZSgHCHLy0l9wOADMZBh1BQWG1yPWFVmjpj7MXa9vOoBKt/r6g56Wd5s4eaV9dNwAVdSR2a+apk2aDSjfcTIeusQbbmE41YP0cqDMxrzhrT8SG/C/RWW4= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1778852020; c=relaxed/simple; bh=wqw8WRDb78HtMll4LOVyC7iClZoiQV6/ujGqTvkXTa4=; h=DKIM-Signature:Message-ID:Date:MIME-Version:Subject:From:To; b=OuTAB7aROY/bQDP0BrvAJ4HJuzMQeV45ffHwYwCD59w9SsiqfIxSdjlEZultUKSy6SlrifUMmiEIslUGBotfx0G84LWUEpSv/9Eqk+6Lk11rFQ+QE4OYvZh6NLxBEQzld5Id8HiKqR7oDoVVMtSHjDHty2ctY3CIIFFkhi6oNy8= ARC-Authentication-Results: i=1; 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=XKht42X1 DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 3EC2940A1FA2 Received: by mail-wm1-x332.google.com with SMTP id 5b1f17b1804b1-488ab2db91aso98141665e9.3 for ; Fri, 15 May 2026 06:33:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=google; t=1778852019; x=1779456819; 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=gyx7t+QTGGfV6Z6r8m7VZgFqVDvv+YPcCIM57aJnqFI=; b=XKht42X1QMxiEYdrSnZ+H5A2X46vRzZ9effHyUpPNJFH2u9XDuKYvQ9hRvcXoUgjn/ +7pqp/JJBPT+z+EpeTijJab4HpdGLH4f6mqaO1TxPuQkB/b0/mpOaLX8iJGoQWqs7DkY LegKe1icic47t0FTFesUFcZ1WgQwy0jyW/lBBHwooyS7CD2VPGn5UldO7LbC97f8xwBK YWkH6cy+FAWtM16VgNLjL2u94tfk8jovYPaTc0SY8Y8QI7Gh3LxTuwojRognASTgn85A nl6ezaDbm+VBk6NIkn8ZTWlCte0+I6f7bvaLJlSc5j9FysNpLTOV/f1WBncivl9lITxY WkmA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778852019; x=1779456819; 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=gyx7t+QTGGfV6Z6r8m7VZgFqVDvv+YPcCIM57aJnqFI=; b=PRwDuB9waXRp8TTXCeGMuLdxhtMRd0FrW5dgBqA7cG16BMpr78nbjFlfrwWonJuZm1 DPb4dSJ5gF9pbb66tDYQ7oIZ6j+TP7unL5Cla4cPCpYWd7KzPkvz5ZV47sBcHQr95wTl OSDxEIeHBfPwhGeBheH9vFM6jrfB2XeMzP8awLGuBKCN4dXBeUvN9UAII9G3h07/JA1/ jFZHkvygXi/G61Tkgh+hlbgQkP+3h/QV59BBRFw2QAm04oSMc1lwv4my127o9Jq6kLA0 OyZQhVLiEborRFWCExkMU2ELu5hi8DSeDN4zPGabQz8hIS6q98l6gZ6/5/ql7g1YTpCH iXbg== X-Gm-Message-State: AOJu0Yy6p5O8YwpTItHNus45RqumWpAFi4/QnBImct+VHHd0XVnwKfcZ EnWIk2yYrQiiuhNF/gZ43Pg1UKVM32RVIFpZ6yTEV5ICLWYkBtIpjx6EAhWH5KDOlccLnNcz16i nKnU= X-Gm-Gg: Acq92OGHfJ1B+UnX0Vka7p2lcmSnvr2x5ZMHJD/bXkDzW+WiuCVErxFeF3dfU/karL5 upGCxG5M3e05XzzdUEo3hmu1qQry4qev7T5qcxloEk0mWSPKdZ0VjOuuK8s3bAR0c+leO3UqXEg iArBJRdzm7ThPQAfISo6b91oauE1f1NU1we9t3AcsnsdVWvlJLIfUxHBG7JeIYQ78VUJN5m/4yy KMdD+nei2TPiasRPWS+CATgnDqvRn5KsUwcsn2buXqpZwaMHV0fKcaZWJvnhzyFl7cWw+3V0rEx HVmBrjYGhr3cq+BzJUApj6TSZ5HXrqWRG/wmvDX5F3zmlcIH2ozd492XD854QjrDXCwp2Vgw8z/ pve9bIuPwFNYjwC6hJDlMMCb7BFgVm/Ht9Q+TqiDB6mlPL5qxOjRAMX8Z19urf30OTD5G4yc68E m/9s9sBlYoXAXojbh2RzdJgwm5i+fnC+NpX4dtVtx61PrjZFif9+tnAo/StMFcj/43k2/j5PkDI Sw2FRbBBpF1Qlh2Fhztgt32aA== X-Received: by 2002:a05:600d:c:b0:48a:56de:d62a with SMTP id 5b1f17b1804b1-48fe60eca75mr53319385e9.11.1778852019019; Fri, 15 May 2026 06:33:39 -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-48fe5694fbfsm111821225e9.6.2026.05.15.06.33.37 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 15 May 2026 06:33:38 -0700 (PDT) Message-ID: <99d6b16c-7cf8-4e1a-bbbb-9103986d2035@suse.com> Date: Fri, 15 May 2026 15:33:37 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: [PATCH v2 09/16] RISC-V: check operands for Zdinx in RV32 From: Jan Beulich To: Binutils Cc: Palmer Dabbelt , Andrew Waterman , Jim Wilson , Nelson Chu , jiawei References: 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: X-Spam-Status: No, score=-3016.3 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 shortcircuit=no 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; @@ -4275,6 +4291,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 Fri May 15 13:34: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: 135041 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from vm01.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 703F940A1F8A for ; Fri, 15 May 2026 13:35:39 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 703F940A1F8A 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=D/gWEcSL 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 6219940A1FA2 for ; Fri, 15 May 2026 13:34:07 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 6219940A1FA2 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 6219940A1FA2 Authentication-Results: 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=1778852047; cv=none; b=J7PKkT5EQjSB7UmtvQtCUO6vgwCSo4vuFFn0sUO290JR61gXkiGbwaJc7uh3GPBUVgDF6yCq2Yhv9GOn182ss+cAKVJVxs3ZNIwM8S8AYAsWjYu/2yngM2C2nnmJftBwxlFQm5wjatxo7nuBLBHC7Iji/xg1uLCS0PQdbzSTkXc= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1778852047; c=relaxed/simple; bh=6ZstlKvoFMppFblkpouB1Mq8YJGdMB0LV2zLswroU5w=; h=DKIM-Signature:Message-ID:Date:MIME-Version:Subject:From:To; b=NkuErFc/7rMPWOgSs+OVmpykO9En+buQDCFQdrdQqjBSHYdMkaMTR4Vb9kVC0eVgPk4tGsPfu+JtDi1Gx0pkxxZJwkbgxJXE0dbEQikRzrCv7fDrFTVsXGXNKR+FFm7gKQ4WF0Rk3beDeVAj9xc/xb+fvkqraJ8znPnwcpyAqOA= ARC-Authentication-Results: i=1; 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=D/gWEcSL DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 6219940A1FA2 Received: by mail-wm1-x32e.google.com with SMTP id 5b1f17b1804b1-4890d945eb4so5296745e9.0 for ; Fri, 15 May 2026 06:34:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=google; t=1778852046; x=1779456846; 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=YgtP+vvOFljVdbubsoUFYxhVaOJDP1bgtqNmvmPDxLI=; b=D/gWEcSLHQUvjNfToA6LeimtNYzf1nYCzcQgmq7gX089tyh175pugx5F4QYK1aT1x1 xRT5Rjpbh9I5aiqOUEIpAWj3viz8hVSjYTU4+dqeEs88EMKBde9jOM6RYWHHwQrnvFFs 94ywYbrktnjnmPHDRzZby68fvEWsp2Zx/9eJW56PRGC69q3qxiHQ0vpDXrSHKgGyJugY P9tHSgrCbVX+tLj7dNap97vKJAy/IKbBd/dLcQlGCG/40dOLBM/Ff8oZD3hImfz6iJre 1ULU/bTncnbX8pCuzmPo1t2T66fxHKgK5ygI3mdoRWsjriseDAPP8oFuZqeq2VRde6oo z1Rg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778852046; x=1779456846; 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=YgtP+vvOFljVdbubsoUFYxhVaOJDP1bgtqNmvmPDxLI=; b=T4qsrZ6824sYNaidw9ziWz9nrZIWyEzCs0b1Li9m1vkyICJr/vVNDyAv1t9c399y+G YUHOSey3o/nNmVdMkmS0yPmLnk2jDva8xf+0vwW2CY1sePVHf4CxVw96EZh/soVs4VEq fBd23Z5q/7mjDW8P/q4ZKhBEfCnTAMtj4t/Vy3pZqVW4OtqLbG52XyBbOATWuSfEDmOE 6VJLvV9gPJSOn/pV+Uc2v8bL0mUPoRKD+HNg7ZArb9wS58Nvotp/iklG2dJOLNF0cD8X PdB+iKc83R8cTtOzvOSsVaxAZ76DDJgrF7OqXQFpjEB5/GDYYn8DGDzVFuXiqkJU7C5x 6UEQ== X-Gm-Message-State: AOJu0Yy5MsQLJZoz1tyqjLUKwahuQLHVWZCoTB+Eov9GNwbJRIxeCgGf kNMQNdCEziGpmjLXpZZ7AhZHRE2rIppjcZJwqi+WYC/hJuujblOlC9pC5CCfOeu53T3BYgIQmDs MVPY= X-Gm-Gg: Acq92OF03vSvTDWbwX322GB1C7hPmqugmM5sNtCao58GvaC0I7yJtot5r/A6MD8mX71 JxtOHpDDbzqtFOTEswGzy3fYN2MM+xuEhujVE3BihYsWfhggy/nsv+HOlarEo+S4bHPlUoNiUqk Ngsm2xL6vFL+mTBvBRa0tx7yWVWPNtPA6Uie2QnFwqaFHMKKXclwm1Jw4F78H1CyDYchah+ByPm yUr7wjLd/LUUO7A77pkXrav6pfGzMpT1Hypd8eRCsE428AEsKF52N4Oa3VFfyg6vTcYZKhIE08c wecKEXnV0qD3WanLIlmppngn0SvMkVTqd4duwD6RdAfZk3qq0y9JmzZjJor6BW1WUfP/soMcfYs I/iIb3p49tjhqxUFnlRT6E4Oqdrwj/xMBAN23A6P6HmoRaHTR0u+xZom9Put/WKVOWkbk30IOjr 3eRy6AHumWf6gtawk6aw8UHISpdWHKxi7LaIoV54cnJlC6YtT6A0IwSDKxPA/HJ1KSLsbmwwYVW 3n6U/7VtGspij+jQgt9W04spA== X-Received: by 2002:a05:600c:c0d0:b0:48a:761:5816 with SMTP id 5b1f17b1804b1-48fe53774b4mr46516895e9.8.1778852046352; Fri, 15 May 2026 06:34: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-45da0a19a0csm14836107f8f.20.2026.05.15.06.34.05 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 15 May 2026 06:34:05 -0700 (PDT) Message-ID: <78e9fca9-f92a-4887-98a8-c91eddde0c47@suse.com> Date: Fri, 15 May 2026 15:34:05 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: [PATCH v2 10/16] RISC-V: riscv_set_arch() can fail From: Jan Beulich To: Binutils Cc: Palmer Dabbelt , Andrew Waterman , Jim Wilson , Nelson Chu , jiawei References: 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: X-Spam-Status: No, score=-3016.3 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 shortcircuit=no 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. Reviewed-by: Jiawei --- 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 Fri May 15 13:34: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: 135045 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from vm01.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id BAF3440A1FB1 for ; Fri, 15 May 2026 13:39:53 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org BAF3440A1FB1 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=VWMeQxbB 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 891FD40A1FA2 for ; Fri, 15 May 2026 13:34:43 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 891FD40A1FA2 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 891FD40A1FA2 Authentication-Results: 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=1778852083; cv=none; b=uKuwSIucKMCSBvr4+jSc0aXuD1jQGnVNW68TybWJneaWHo9Q5aiLVjsinEG5hSrowlVb7g07RhTgzLeA+u3x94k8JCHMin1PEKR83RQ32A8U2FKH9tc0BHQp5vqjATu7AD4htBxhy1XS7VpzW93Zgq71fJcEka2sWZPM3Mbs2GI= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1778852083; c=relaxed/simple; bh=NE37WE+PbLJv2UCVJYZFc8oYEhdukdjuTlUcgWzAjx4=; h=DKIM-Signature:Message-ID:Date:MIME-Version:Subject:From:To; b=AyE8qNi3nQbVSdP3t8CAL2sK7SJJTE9I0LPZYeUxIuKyX3c9a/FzjbDffJa+oG1R0QIEK1/1cEPGQhJcdJqNn2qrORGvNTjVBQo3Hnp9Kjm1TAmiP3TbZqtYzza7oevgBDff7VzSn5efOIYSoV6Xac78OrpvpPcGuOpMFQ0jXXA= ARC-Authentication-Results: i=1; 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=VWMeQxbB DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 891FD40A1FA2 Received: by mail-wm1-x332.google.com with SMTP id 5b1f17b1804b1-488ab2db91aso98155645e9.3 for ; Fri, 15 May 2026 06:34:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=google; t=1778852082; x=1779456882; 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=5VnvWg0gJj7mGsA4v10If+0YkLK312ZB1lpVGzYIYik=; b=VWMeQxbBf+gcxUzbateGO6gWEM0QMhRUhOoKO+pNrK+ubYmef1Bkm/VF0qrsD3Jvwt p3yrhWEJOuOlY1GefR/+bnazOF6T6q+LuhUXezDux0ofxc6QrjAyPgN8xfwAT5gEjYWv 0fzbrNNLzMdo8cR/xWPSd/XRAz348jcO+vBiqp5yaAN0jMQXPFZqap3KwAQ/vp7mIQI/ TKGYIZYqzfWKw5XcuXyx2FbJEQ83UbPfvdIZxSsaQOKmg4k3aufGjh5Rb1bx/RDrAP7b H4YmgrOkSseHfG5QT6YGnscIuABGrV+OF93+w/S103LDb6THP6TqLQ9KMAcBKXtQ127a mowA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778852082; x=1779456882; 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=5VnvWg0gJj7mGsA4v10If+0YkLK312ZB1lpVGzYIYik=; b=fbpZRIZ+4Zhr3nTzlrQNiEukm7ZJ31f+gL6lpFyuHNG0ew1GU/puzuSWjJ99bf1M86 8In3JKHmiUHO28YBdRoSU/d1mFKmHQLkdagAV79pXvHpoYo1hbuTsIXo/6YE2PiULp1O 5oTFPmWzMCYmSd2IMaNY2ddIoW0XRPq3tS4TrGfQ1Xshr+tRKGeHd8l5zbrOZ8hrvTol SJYwU/LrCa6iKxA2Ekx4AQP5qqMAX4GhaeI4oOvOIt4081wvk01XEd2bF/p+qqR52cnL /9zNLWOZJ4qZWpN92NwwQ+ikBaCEbDcNEQqRCbEEOfB4VBoZ8SYh5hBBRto1w6pS3RLh Yvdw== X-Gm-Message-State: AOJu0YwMwMPX/raETB9yHiS70oN8iiGfPRvwSzhAfUz/ZKTK6Gpi66zZ hk7DZnnV/WiKxjg0vfEJuHXwHgaOfmeKWfHH83aU12ND0o0TfZp+/iFHMnP090hkqMoWqxOHatk q4GE= X-Gm-Gg: Acq92OEPNukr4+KGGyUoXAp1WDugs092id9zJKCxA/IYWypYcVjU0zf4Xk5D3lssbMa KOx+3yK20lgj9Jr0fbdZgL80l+vpwiYIGl4RSV9qfimChbIo/C6p152Kb4ZypsbncR9WrkjGcOn 0L8vChYSoEvO0yswiHnd54HUlyR/FIXAhqXKZasfBJt5bh4qrWk4CvzaFpXONyrVPf5d8HomjRC Ew/wxAql1hU4ZSECpapr9QfFNrbNcBxJYpzQNqpNjTpzd7yPy5YPZUxQaDM9Wm5oh/xOFueRjlm RZ4oFDE9SKhvgmkygqMCdGBqpap5vfVQ+9JfLrucSUJkDEsZ79mPmaM+y38qx8xumqOgv5Kdrsk 4kK6Y+kAH15BRCw8Y4nBM9b3e7TN8VzGsng017HSkOn1ZoxQA+noBvyqVcNesPY9vaZ/wnk4wwa sFZDQIKZC/xUwCkj0D1thcR7rtlYULzMVuGepcdOhRic0VPjDaE5TiAMoqtzs637FuMt9R170WQ /IBNRtK0ntPX0cnBV2+LNtOmA== X-Received: by 2002:a05:600c:3b28:b0:48f:99a9:bbed with SMTP id 5b1f17b1804b1-48fe6327f40mr56762725e9.22.1778852082448; Fri, 15 May 2026 06:34: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-48fe5cab818sm64211935e9.14.2026.05.15.06.34.41 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 15 May 2026 06:34:41 -0700 (PDT) Message-ID: <34971eef-60d6-402e-bf4e-33259d13e09c@suse.com> Date: Fri, 15 May 2026 15:34:40 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: [PATCH v2 11/16] 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 , jiawei References: 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: X-Spam-Status: No, score=-3016.3 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 shortcircuit=no 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. Reviewed-by: Jiawei --- 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 Fri May 15 13:35:06 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Beulich X-Patchwork-Id: 135043 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from vm01.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 2928840A1FB4 for ; Fri, 15 May 2026 13:37:38 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 2928840A1FB4 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=eDEzwaJs 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 A6A7B40A1F9B for ; Fri, 15 May 2026 13:35:09 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org A6A7B40A1F9B 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 A6A7B40A1F9B Authentication-Results: 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=1778852109; cv=none; b=LiUMEFuksuLKeUtIntZM855ryhPkZk/kkXExJZ4asQi5hqUWEJPTozznjkJ2iLUjKdSmFn8pLPHRI4lu3eeoqrO5om6sq5UIks0gsUefPG86hsnse6cCvi41+Gm3nwopoIMrpF9sSJ0lP6jqDiwE6fYfK7q3Sm9ZVQ7onvMroEE= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1778852109; c=relaxed/simple; bh=Z4fIgG1aiSciUBxUpPxEzOxaHElyE6VFJp46ieuDBy4=; h=DKIM-Signature:Message-ID:Date:MIME-Version:Subject:From:To; b=X/6Dtv3JTmxSnC3XgzmhURDtJJAcIMfFX6OJB2cw3Ge4VmwmMt+J0Z5lwGGX304X7L2NivhCRwmtIdZm2AcfwEP32hSq9l7U4OePLDQ/yar/99h48LyaoxbYppbzMzgFxFplRkcqww+a22QcjGGX9D9abj1b9X0BwmSfekCFzro= ARC-Authentication-Results: i=1; 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=eDEzwaJs DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org A6A7B40A1F9B Received: by mail-wm1-x32e.google.com with SMTP id 5b1f17b1804b1-4891e86fabeso105825375e9.1 for ; Fri, 15 May 2026 06:35:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=google; t=1778852108; x=1779456908; 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=fbqtC6sEHb5CozfhHTRA1rVddduefEqEXX3E0hxroSE=; b=eDEzwaJsp6kSAsAHgbqnN3vkRfLUpVFrQbQ0HmCrTGArn95sTF8ANegZUo7/F2quLo zgi2jpAnXmX3KCsWThKpE2jjBbpRRFL8Ujm1mdnizNDkkBUuXWWptlj9dZgPWkk7kLai IJePnIstgo0taoITGN2CExHeDFq92J/z7FpK2B8AOEmSXD64+mt9ppIKg/4J1BOSyfuu qwQIrliogeW06z/8ZREhdeMgACfiwhUomlsXCLF+kb6Ko/rrFX3nnV+imV9UydxvHvaa iruER0uvHUr3igriphVS4qeHjk34UkQWC5pXSKWAEu10VFZjbkt89ozHiiKJLKYIQ69v gGEw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778852108; x=1779456908; 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=fbqtC6sEHb5CozfhHTRA1rVddduefEqEXX3E0hxroSE=; b=qpTFgEgB3jFieoHbL4/RY7M40hnjSZyCEajj5Fop4aa8lklB/PxWjasn2Ody0fdV0P QiVwfXlpJm/zwuWaYiNwJg/c9Z6kjn4P56ucLl8iOWYhEUOKrIeQzdF4EwC3YVJQXHo1 VDjS4juAHKDVK5X9s61nbS6C6aB1pxH8VfoD/SuZL5uues5FE4/sTURnbr7MTzQGzKwl 9KTS27dzN5KYm0FTYwkUj8cz/R301s8XW17+LH1l0ULi4IkHzfbOF6OhBrBCq2cxC2LK 5faojgBSjM4UypyqreEDVurD9HFICkqjY0Pa5cxhw8gvwP2HYZWF9uOxjtmzP6YNkhIE iQfA== X-Gm-Message-State: AOJu0YzTqyAd0USOkwt6NKLv43ycXmPnjWvLRLwtQdNCmG+JZWJyBjH/ CSYzVvyYmbDTMPT/lADuJnhZvEPvd7mKCT90IQKsyynffBF4oPOtlRd6jtu66pYpicK474l+Tts z2LE= X-Gm-Gg: Acq92OGQbIOseE63XtrvqMCRj0J8w6UOV+xwKfzVIBJaB+bUaBEntm+J+kLnBTX1wqX tcxWl3AUXemWIS/h6ep0pmrTr0WHOrmqdMeDXZ0tPZEB2wZagHE5sG8OxvJ24pi8Ai3g9tsrle5 RQfFEVzWcSXDfmdojiPhs6sJoavLIdfm6xpj9oOcq0qSDI7odItKYUQuQivaXeBQApPioo6qNk3 KHOUQuKEag3GzGaLymtxTfvvpNYqVCnsGmDLjsSH+g2NzkACDFmMllzGFyrLcSIacYFLI6uRW1T GMhVF0JmfzarLxqaAZ3YQf+7nAqqkx66/Z3X93uucy4NVc/lfUyCijfbxInmKPwTP8HjB23JSSb KjHvUN9EMsEBUfov9weQwZ7KHTXf7bk8CxsbVMx3i9kzhLjcTJ8w2sK1RHd3JYZ60Lbjz0QHscX pR9VX3b68xEIFGNZiWijva5eabir16WwIXNElyBSFeqfUbOUQgLD/Z7xY235bKyDGVTQf9vd/xt g9V92/EX1I+gL8= X-Received: by 2002:a05:600c:c163:b0:48d:1a94:56c with SMTP id 5b1f17b1804b1-48fe6325a2emr64157135e9.18.1778852108593; Fri, 15 May 2026 06:35: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-48fe4862209sm64380585e9.0.2026.05.15.06.35.07 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 15 May 2026 06:35:07 -0700 (PDT) Message-ID: <08e89d70-9330-4357-8049-cb20856ddb61@suse.com> Date: Fri, 15 May 2026 15:35:06 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: [PATCH v2 12/16] RISC-V: error handling for subset parsing From: Jan Beulich To: Binutils Cc: Palmer Dabbelt , Andrew Waterman , Jim Wilson , Nelson Chu , jiawei References: 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: X-Spam-Status: No, score=-3016.3 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 shortcircuit=no 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. Reviewed-by: Jiawei --- 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 (); @@ -5070,13 +5088,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); } @@ -5097,14 +5118,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 Fri May 15 13:35:37 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Beulich X-Patchwork-Id: 135046 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from vm01.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 3A4C640A1FB4 for ; Fri, 15 May 2026 13:40:58 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 3A4C640A1FB4 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=Iu9cTdi/ X-Original-To: binutils@sourceware.org Delivered-To: binutils@sourceware.org Received: from mail-wr1-x42d.google.com (mail-wr1-x42d.google.com [IPv6:2a00:1450:4864:20::42d]) by sourceware.org (Postfix) with ESMTPS id 1DEED40A24B7 for ; Fri, 15 May 2026 13:35:40 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 1DEED40A24B7 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 1DEED40A24B7 Authentication-Results: sourceware.org; arc=none smtp.remote-ip=2a00:1450:4864:20::42d ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1778852140; cv=none; b=PHy/DM7gtycqrOi6wybUzJ6lXHwilr9VtvPwswSGGCrusu/qe4hM/SKQ8W+vSIEUGmXY3vxr9AdF4ya3vzHg8xBoa7m+TVFn5JUIxFgdTeDWT7VskkXGgIWy9gHWJ/U+FM1n6Ux8Ljsrj8Bg6IJWaC178jC5tprh40Bvg4OX95I= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1778852140; c=relaxed/simple; bh=SgqixCdqRYa7gUBWWpoOVLfg1OAkn35dAfNHbE8rn/w=; h=DKIM-Signature:Message-ID:Date:MIME-Version:Subject:From:To; b=KtiNaz4J/jlb96tjiexom4L21N80BFWsDUAMTTeiuVfrS8Rth8pFvWrIwLwXlwQwfjIbKJlUowXYX5pMkTcbM8Ls14WItYA9wtdA39MrWWJJOjBKJDy8twuaas2/9P9EY0W+29OqgGy5ce5xT0BLWYxiv78GBZ62+UmMuzN6t9I= ARC-Authentication-Results: i=1; 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=Iu9cTdi/ DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 1DEED40A24B7 Received: by mail-wr1-x42d.google.com with SMTP id ffacd0b85a97d-43d77f6092eso5743904f8f.2 for ; Fri, 15 May 2026 06:35:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=google; t=1778852139; x=1779456939; 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=yDYGU/3EK6LU9sH+z44nd567bF9RlL7PLVMbybYjyN0=; b=Iu9cTdi/7IczietXpkJJryM+EwjdEkVIF1+vB7OZtSEhEWHCCyB3Nh7Q707WbH4zNB z46Jj/+JdVUDiLaBZ9GM+qairmJMA+oid6vH3BshPu4WZXTyUeqDbj9yPLqFRc7avXtq zqXzdb/NARHtuccNFjI5HshvM/oOJoEdBhfZ+cpqPuJZMCmhlZWJrhC4+I+f3zB7odfe ICUdSzNUxS0xOgpQ+l2wcLUJaAKAL/VIadnmmIsIFgFcQmfv3Dlgij9kd9iOxhLQX1/6 W1A+FvIr1gnzTFEadja7WPJWnpfY06oNbB7Hj4ELNvVI9oxxcHCFr2s1a94R+RklRz3B Jp+Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778852139; x=1779456939; 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=yDYGU/3EK6LU9sH+z44nd567bF9RlL7PLVMbybYjyN0=; b=cGiru6C8BP3JscVulcNePjwISDkhaKhDH+kZV8a7C2CK/EKq01SlJ1Pk1jwq6S082i JordT60EQ71NmoriKdoP0tLPedP3Nzyifsy+5dsNbHOZ136Ivl2A2XMC+63m/Jf76pR7 /VNGxQq+6Oq9UkJskykqkCPpB2qIMYxOt87C5W9QrIkH4U/1kCwcBS0pfYzmnxyLyBQw Bo4+99DSfarOWzmPnV0B5Eig4Axm13RSKkZOIDaITIBvNoNynZWUJUN4yxH57OTUZ4My lfhOP0Hje/NrkU0/JPhX8pPbrj6HhyrjUivnvVi9piiGEGpFUp9flWiyPbFndAt0x7Oa xh9w== X-Gm-Message-State: AOJu0YzfH17bkOrk65GzKD3qPSt+Lq9fBr2zMaDl8M8oVvePjB3SQJ6d Hr5psshoc1N0qc++mor+ZlTpUADFzQvXNlbSoVoOMXK9duvTrmIltA++SBvLvgkxU2cQwBIWSY8 q6GY= X-Gm-Gg: Acq92OEbiCSz05gKdy5KnPuFzuXGxPRdd7DlRvJgU/FhroKBXjyPKEnm6iQOsBmuLb0 PPzQP/Qwry1MdK1oaRvDrKoDNjW77y7pqxV7+YzjgHELcbyyjvf0dXzo/kQyqJhDdFGHQUp6axt 9/5VnBkoJHEoAJa/DNgr9ryM5IWfWJvfHU6jNqf56J/A2fCjWTj5cjbyy4IUaArJPmO4ATOxB8g xUjIXpLKNKJJeouKOD2B8/UtDaarPSWm+MOhMnfumMYSO5sE89ftu38vidkur6gR2+BH0POeLYe u88kCJHRhQND+2454TIhdLjjgygiVY/X3cVTIEYkhieQPw3Bvv68HjeQwCH9I/x7QMBL+01zmlL n9mdtiPnPpmO0CCotH89FogRRC1ZVg4gU7+MViaU8VNeMDTK2Dcpd3yTVGkvwNEsWhwCk0nYEBA T0E/n65iriSkHGzSRY0JHraKX668i7ltnuG8Yp6ZM0jPlo37NvXd9cYr3nsK7PlK+wTG23bxMKB TvXxMhTB/RlSs4PlinHc2D2dQ== X-Received: by 2002:a05:600c:4e87:b0:48a:768b:eea9 with SMTP id 5b1f17b1804b1-48fe60e51bamr60859795e9.4.1778852138971; Fri, 15 May 2026 06:35:38 -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-45d9ec39806sm14907038f8f.9.2026.05.15.06.35.38 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 15 May 2026 06:35:38 -0700 (PDT) Message-ID: <4491e1e3-07d5-469f-ac3c-df6e133ba906@suse.com> Date: Fri, 15 May 2026 15:35:37 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: [PATCH v2 13/16] RISC-V: avoid buffer underrun in subset parsing From: Jan Beulich To: Binutils Cc: Palmer Dabbelt , Andrew Waterman , Jim Wilson , Nelson Chu , jiawei References: 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: X-Spam-Status: No, score=-3016.3 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 shortcircuit=no 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. Reviewed-by: Jiawei --- 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 `%s' ends with p in %s `%s'"), errmsg_internal, subset, 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 Fri May 15 13:36: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: 135047 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from vm01.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 3D5AF4BCA42C for ; Fri, 15 May 2026 13:42:40 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 3D5AF4BCA42C 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=g0fQDbUP 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 04AA340A1FB0 for ; Fri, 15 May 2026 13:36:08 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 04AA340A1FB0 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 04AA340A1FB0 Authentication-Results: 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=1778852169; cv=none; b=Hy9/ijOb/7O4P2V/2F5JCeDOboNRqeQmu/7XmU1hUDtiA5CU/mRWREbWalgJm0qOUvl++HQRdP7hpHesbGn9qSYA7WM+6KZmpd3rkwemrhqtAAVdThndjz1LMJShTY2Xep+b5S+gNn/aVMrzCB9ICg0hyHuOyBc+8BNY+MmDoao= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1778852169; c=relaxed/simple; bh=oRxR8Cc+zP9YHX3lKFFnl5xFjcKXO/Vx2HHtBo9y4ks=; h=DKIM-Signature:Message-ID:Date:MIME-Version:Subject:From:To; b=QPe2KH3QJ16t1DMjZ+Xb3IdrCNqZrtgZe/N+bEfEF9Ljd0E2RE4E4GnocAc32R+THd31UYzBs7WBFwZXVufiWe5O/ozAL7o3JQOlwbp6cnABTUzye7mNOfN43Wosl4zHBFHahuiGVIjzrg7d0m6ooUZIt4r2C12axR2xcQP16u8= ARC-Authentication-Results: i=1; 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=g0fQDbUP DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 04AA340A1FB0 Received: by mail-wm1-x335.google.com with SMTP id 5b1f17b1804b1-488ad135063so76505615e9.0 for ; Fri, 15 May 2026 06:36:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=google; t=1778852168; x=1779456968; 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=LDWR6g8tBSDZ3nFRR+gONDPP3BUqmWI5KBvN9eKwyIM=; b=g0fQDbUP8cA7YLVcth+pO/ACPaseD2XoH2VwMHvbYqWpO+M4iJltNAo3QvHCg3RcjC HvFWAdJFWaS8GyiCjPQBCYFbeZ6kdmtPdDr5AIofBrY+Dspjp/oK62RUVnemQqxocvJr GxX/u20s5k/LAd3E/MFkFhLJbhwOX6vbl55udf5n/rxB92jm/dSE0wUTohk+zw9ij1sh 4jlyxHpIqPYLf1HXilK2gCOScwREz2F/MbObW7kc+yxKPjzzyY0G8vvlNL2CB0Au4aA8 //DFnTiW33Ej0hiBDAFMluwQ+TZdG8OqW840va0VJCOTqs3QfZdMYxA50ezgkQ0kD5I2 iDEw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778852168; x=1779456968; 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=LDWR6g8tBSDZ3nFRR+gONDPP3BUqmWI5KBvN9eKwyIM=; b=e52eY6YG90EREIPYDH2RVTXQUK7KXgjIzv9K6qMric89/IymN44ON6T8haHZU5zcuf rjpkuXDLzxGkoQPkDVb3l2yZgp4WfDCC4cdmNpDyNsGDPt83vXT9tRP/dMKmMLp32Zyr tMmI4EuGTqvpdNDYc8n7n2wYb88gGngtq2w5bFAveIDPs/0Z9rhi8KUdWhLWFKwl2ITs S41E7KkGEuxuAyRcuxBSlT7RGIVpOQsGUzyHFuJe5NUIz0BuDKPkmgUV6G1fx+QHsUsA +OPSA1grim4aJY8vmbEjXNOvgiqMeqDAzEMfVytV+jSzXGBiSabws9hDmJdIVc2xkc4F Tt6g== X-Gm-Message-State: AOJu0YwpqpqGop8Abp1SLO4wvaHp0pubvDBOueF7LP8VZyDXcqf3WuuX qt6rpyXzd3qcn9xDQZF4XZPZwllsZlnzHBE/ergWVNdpIoHGZR0rFCygtueyKqZhr6fZQdjqAYI uWuo= X-Gm-Gg: Acq92OHLkAOHAxnj+g13Zj7lByq+DUJErZUIZgWQu9j3wPqa55UNLzY/nL0ye1O9wGv Vz9of8FDxM7fHNsQrXw/NlaQPI16KoyNgQzu+WUF3y9M+tHB9u7p3LrquJ79zEggZXuHT/md3e2 RF/Mnxgss6kPCKUz/8O85s9sPsZvcNrSAHjAyDnYXWadzttEJDGzQ/2Tf5Vmh1oTPO9y8oCP2Ct kaQWg2J4xmmCvDzZfFkR2UKTuADqFDBOuDWxIJw/CyYMirjq8NDQHo3BAxqr7fynDNVbCZHuVHl zDK8rJeYdXedGGJEXVMenCWN8UhLDtvFPhDibU+fekbaytx4PUnhtDQY9p2sGKE3SFDSSBhjVzi S72RQS8AK9imf6/y49PC464PlveHp4BNQ0fOuUuxQQgAvG94oxlbx+cWOxwHT/h0szuZ9sT3fEK GDAAGNS/a6dAkCMrTeL0VyrJDyTfgPHu47P2bkYaccvqoASDRN078EKWxZSqJYZhb4dlJjoU75W DHpX5AwdB7sXAk= X-Received: by 2002:a05:600c:a11c:b0:48a:5574:3a5d with SMTP id 5b1f17b1804b1-48fe60e476fmr39838155e9.7.1778852167815; Fri, 15 May 2026 06:36:07 -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-45da0a17a22sm14939780f8f.22.2026.05.15.06.36.06 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 15 May 2026 06:36:07 -0700 (PDT) Message-ID: <6ada7e54-dfd3-4286-ba33-08ad9f9b31b9@suse.com> Date: Fri, 15 May 2026 15:36:05 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: [PATCH v2 14/16] RISC-V: drop dead code from subset parsing From: Jan Beulich To: Binutils Cc: Palmer Dabbelt , Andrew Waterman , Jim Wilson , Nelson Chu , jiawei References: 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: X-Spam-Status: No, score=-3016.3 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 shortcircuit=no 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). Reviewed-by: Jiawei --- 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 Fri May 15 13:36: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: 135044 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from vm01.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id CCDCE40A1FA2 for ; Fri, 15 May 2026 13:38:27 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org CCDCE40A1FA2 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=baVqA179 X-Original-To: binutils@sourceware.org Delivered-To: binutils@sourceware.org Received: from mail-wm1-x329.google.com (mail-wm1-x329.google.com [IPv6:2a00:1450:4864:20::329]) by sourceware.org (Postfix) with ESMTPS id 6BCE34BB8F45 for ; Fri, 15 May 2026 13:36:34 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 6BCE34BB8F45 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 6BCE34BB8F45 Authentication-Results: sourceware.org; arc=none smtp.remote-ip=2a00:1450:4864:20::329 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1778852199; cv=none; b=KDoj37nx5X4MRA7iZSQoEu1uYwuZs+ig+f6B1Di3b8nY7bZcDyi1fRRi3Jfvof1ZduDb+geDh+2bBsnwudNk/0J2gmb3mySf5njp7V1fyeAUwn2tB43hBBRyLkX/YebBgBeEXhYg0xze0UF/KkP4JLxWojRfRcwM9vrtOyJLt9A= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1778852199; c=relaxed/simple; bh=t02tZi/wgpaIr1ReiKTc9kKTTno7soYQUOPieWZa+TU=; h=DKIM-Signature:Message-ID:Date:MIME-Version:Subject:From:To; b=wlB5FH+IvUEbZWiYp2LrOrT2ufg9AeE43AoOoK8k/ht4qrpUSlo1NOyFCod+ed53rJ//1E3gdMxx46rT783Jgzep6aMomUk3lhU23upHO5D9j41YL6tkgj16Sa15yC4KSid1J95CwkOVSTIftGYSP1QJc2phvu3CjTsvVS+kyl8= ARC-Authentication-Results: i=1; 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=baVqA179 DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 6BCE34BB8F45 Received: by mail-wm1-x329.google.com with SMTP id 5b1f17b1804b1-48fe26a177cso13110375e9.1 for ; Fri, 15 May 2026 06:36:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=google; t=1778852193; x=1779456993; 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=gqArkb3QH0q0v3Aa2qiWvNSfQ54KDTyUKVcdgwxeI6o=; b=baVqA1794+AwFjfUWKZztH3xsUvK36oL+8eHhLEv/6TvV0jVv1SCrHVCJu4MsPouMz qUNfUw8hp8SRAJW4oOexMzwBxYkr6r3G7LPLnM7izySHxA1QaHRPcJSp7ceJ8QclOHZ3 8DzIFwoitLxVE3L7okImNkfEMkzrnOBcsOxVsZ435KQ1KVZ8JPJ3HgJ61qso696Gf5Uk 2FnxHFGpV3GcwgHaA7oSB/MAKP661mg19AQWe0IRaYBPGufH0tETXXD1aOzmofjRESQ1 ZDbXDAaGVkRSt81VoAyP9c1FVyQG+0vNW57jHe0GGsHwNLXnDwAZhyEgGt3cFSsKM7dM W7yg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778852193; x=1779456993; 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=gqArkb3QH0q0v3Aa2qiWvNSfQ54KDTyUKVcdgwxeI6o=; b=OM9i8myve5zUR2VKBGEONChcg/hcyxgbT76b5ZoATHt9dQg4DKtnbtXJyrG+Bpguid ZYBx96NIaqHsWvUY+lQT8BAQLe/uC/OcheqBf6IggggV+4dt+ii/YgXoz+3PHxcS36kM vCV5MPK+fL+/eZVJSOH7FIH47dkhyWRQNzch31UThLmqYxauE2866urdNctqcshlAxWx i3d/7J4XO2nVqcRGHqYsiHf3k03jpzyZv/mJ3pw6NQ+BpljkiBDCZ43vBEWTqtGTVhJk oIwxDgZxdcPHXaQIvBqgOHmFER/FAolSsiHn6tPXH6zYxFtTICtstZrKR9z1/T7ldhCu ZV/Q== X-Gm-Message-State: AOJu0YxpDk/VSlby1DxGZO8siDPTcgvN5DSY5ImsmKj80Dzu4fGsVBbE xHGcUjjanD/SBvyK0XwTxadSQyCGTtVJ0SzTemoVNlWJZA9HICMUfbJy7deYLv6u1sCrG/Ho1QN UKks= X-Gm-Gg: Acq92OHQxx2XN6BDVqi/cVWGgZ8snzap4xb5f3VZL63GN/C2kkWFI0KXrfHWaI9/nZa EZJ0dir04eK+mNBkoNBiKqay9l7JMg8hnlSqIWUO1xPzFZC1/QSuU4zHk+nNIJeJVVh5OHxGtTI xXoB3iRVlQXBxwWXad6uFAkRX8yBZ62KOge3vzlokntkSXob22Mu/ZcyPgPKp2CN+NLF32AvL5w AUj0HxaPM2k+j5qbIxKp0bsX1okrnEAbaOA2EQFH6l/mesuENdadGydjxDn2XgE7ky4G2Kcyo9v tITkROyd2olTFunHQ4oJWlpbtqr0KVcrB2r0tSIxwYHIyNghf08XiJz7w9mdZTqk4H9ZngsT3gj zDxmhQ5TjiuV3joi4jGBHgH37wSt2+SfqW28QmnU1bJcbxllyFpKZUlb4Q7TUmL/152NVni8Oqv PsOtP+Jl/owHVV4pXnFxsadOVeDEQIhLzL1vhiUXfz0zjYBfU7+e4G1OZkKHdN1MQlvtjwxy6Wk UcQkLW5tH5LhT8= X-Received: by 2002:a05:600c:34cc:b0:48e:60a3:220a with SMTP id 5b1f17b1804b1-48fe59af1cemr61128245e9.0.1778852192988; Fri, 15 May 2026 06:36:32 -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-45d9e767ee0sm14003692f8f.1.2026.05.15.06.36.30 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 15 May 2026 06:36:30 -0700 (PDT) Message-ID: <804a0614-5935-4c29-91c6-98500cf8b32f@suse.com> Date: Fri, 15 May 2026 15:36:29 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: [PATCH v2 15/16] 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 , jiawei References: 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: X-Spam-Status: No, score=-3016.3 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 shortcircuit=no 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. Reviewed-by: Jiawei --- 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 Fri May 15 13:37: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: 135048 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from vm01.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id A999140A1F91 for ; Fri, 15 May 2026 13:44:12 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org A999140A1F91 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=dS8nGK1f 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 DC0A040A1FB4 for ; Fri, 15 May 2026 13:37:09 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org DC0A040A1FB4 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 DC0A040A1FB4 Authentication-Results: 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=1778852230; cv=none; b=uKijjzYshfEuuSSe7OvCjTP4xixPuPnX0Z6h77IwiImHzQbwSFgBjgWPrTuj5fJnqL3CbYPemVtlZw6snvJnK2X/BtBl+E8i4GQocCI43bNTj9azS1BRrgblgYU5/uFIPWJZmijzw7NRAdlWo3b9uA764Q4+AjjNC5wBl8NcV1E= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1778852230; c=relaxed/simple; bh=INolkZG+Q8deEhJaCvJ7H02JhqUvjxzV42fbsiAqe5I=; h=DKIM-Signature:Message-ID:Date:MIME-Version:Subject:From:To; b=APzTIPYvlr+OeE5zE++8IAbPRzzqq5NDA8mO4R17vWCGVayQNVzN9wGknISMMgYkMojeyfu6KL5e2008nn6zrKAGioAgivI2pC8KLxsZIL0gJewf57OxstuloWUO+vBzJcogZ/K24Pr9FJpTtUK5MUcZMu4kZItxDX7DIKI96L8= ARC-Authentication-Results: i=1; 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=dS8nGK1f DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org DC0A040A1FB4 Received: by mail-wm1-x32d.google.com with SMTP id 5b1f17b1804b1-48e82c23840so50857205e9.3 for ; Fri, 15 May 2026 06:37:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=google; t=1778852229; x=1779457029; 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=G177Gtk3A/z6akutWU7TPfb1i5LsWfR+e57XxXZ5zxc=; b=dS8nGK1ft0M4KvHJsmC3jjuZm6y6THX6lhqpxpLQ67ftdogWSNsnmYpAAOdGNwhjz7 9V2f5/dX/GM803naJqkBJEnS29njNu7i7mG4Xa7NDJUYqOW5By30Jdvi2bchBvmXCtu2 fnD2A1mxpVCA8Aua7v+9401cSmMVQ8v7mdvclRQrErDkR6fy8F4eYhfiubah12G73GFh +iTcS5OLLSIkiQ+iQJJz5ohymOLIDsqDj/Z5fmXb91wdHonJrTyyVxF+uMtNL0ljN2sZ IQeZHQf35l5sqeJMS3Qc4/D64HBrQgU6Wn7PCXF5WRsiRRmfUZQW4ZusyPTikq5fodQx Ok7w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778852229; x=1779457029; 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=G177Gtk3A/z6akutWU7TPfb1i5LsWfR+e57XxXZ5zxc=; b=NtItTjId1ki7OxLtxT524hUgJGd42QZGOUV7JfNkzZRmglXz1JavjD5A3ph6PdXygx yuVAn7yJJc6k92FUm4fPGNe1YeTKhCPpO0A4oRpPAAfKFvhpb9phbDAOfUbO2I0pS9N7 eVWWwwi0XSc1Jm8LMrUqEoOmPGjsmlDR45p1xTek9uWZloe2eF3o+dEP+PPFaTmyku8f 1kFVoxgQy4JLb4NukxIZ4pmTj95FG/FjrZblDRsQsxYQG0CO8DFhE6+3KC42FaboadPq N56C7Pz4LIcMWGUTdSkfJ5Zvpcr4VT3BjmDdDrB7HFtCsUhLcLAB3o47Si/UTE3kiWgH 9Srw== X-Gm-Message-State: AOJu0Ywx4tkAfrCQPU32zGpZmWNTSoHribGO7cHbxZJPRCky38pOKxH/ FulFj35mVcNFQBSO92d308b4+FpRxNFoDYOpRnVmp0IcjqhYbx1k7ex/xbE+1hCyIVRZXX8ihj5 FGHs= X-Gm-Gg: Acq92OEj3rQ0WW6FFlE3xAsej6V1NLUNAEDwziTSKBbvAyqttkpbQ6fPOx0bXtPQ3z+ POhSCZkcozRIuIxPJ2Q/XSB9FWaw9JQQkbXh/oxhwqILX9azp0ZeSVSntEi9SyV3pUKNh5CCOn6 baCrQOcC31FNzlI4hpND1b6tUgYNdkNIypcBOOe0V4s119fWDk6KwsDZUXkb6EX67zrYhxIFcMX cwGz7p/6vgze3DqffK7RNP5OE053q7Xbtst21f5Sl+OUPusWJZzHSj7lAPQFIH4TtI7ucblXHZq RoWY/FJ5ceUMEGZITUImSUW7sRl8svvom8iCHOOq9qSopnfwRfluPHheGExkURCgNItHLtVJZKg WwmMnUDY5m93kVoW/7pU5cMkxTWB6zq72lpKuionFUEBdtUhONXLWxGcSALsySAi2LxfyRvyF1a BtdJnWb1tp/+jeHUNnLN+OqS9x2LAwg0Rt/tvo+mwzFMvkhYR+3orvwggHCG+bYdAiW3ytbysKr Whl3DTjJ0D8fNzD9lzbCyk9MFzXiYBkOn3v X-Received: by 2002:a05:600c:1d0d:b0:48f:da34:ec4e with SMTP id 5b1f17b1804b1-48fe632343dmr54696755e9.19.1778852228795; Fri, 15 May 2026 06:37: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-48fe5ab3977sm68121945e9.9.2026.05.15.06.37.07 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 15 May 2026 06:37:08 -0700 (PDT) Message-ID: <010ee05b-d766-4d67-bad8-55246c9757ad@suse.com> Date: Fri, 15 May 2026 15:37:07 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: [PATCH v2 16/16] RISC-V/gas: .attribute vs .insn From: Jan Beulich To: Binutils Cc: Palmer Dabbelt , Andrew Waterman , Jim Wilson , Nelson Chu , jiawei References: 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: X-Spam-Status: No, score=-3016.3 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 shortcircuit=no 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. Reviewed-by: Jiawei --- 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? --- v2: Style correction. --- a/gas/config/tc-riscv.c +++ b/gas/config/tc-riscv.c @@ -4404,6 +4404,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) { @@ -4411,16 +4423,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 */); @@ -5629,6 +5633,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; From patchwork Fri Jun 5 09:29:08 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Beulich X-Patchwork-Id: 136568 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from vm01.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 0CE6C4BAE7DB for ; Fri, 5 Jun 2026 09:30:02 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 0CE6C4BAE7DB 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=VVnQuLva 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 580AC4BCA40C for ; Fri, 5 Jun 2026 09:29:09 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 580AC4BCA40C 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 580AC4BCA40C Authentication-Results: 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=1780651749; cv=none; b=intts24VBnUdBfc5h5b+Z6muxjuZB7ynSYivmq6T6RTJsXGGutpugqWE5+I0JN4xYWeIjOhypY6MwLd7RlNgXhZbdXLRrBBHAlgw/uc+66Mau+zkszznq/J7WVwZulgOw50SMa4gmxSsMhsaXP2O6TbQRmHw4UI8+nog2oGuh3M= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1780651749; c=relaxed/simple; bh=ZXuAZYjgZisPOWdb8E5OcETan8rjkKs4O8aEWvmW3m0=; h=DKIM-Signature:Message-ID:Date:MIME-Version:Subject:From:To; b=MSqVzPujVKQI38By79fhKh9pmP1rYRU08diO/lq0Am8/pRU2VXkdOXAGjwZ8xANydM+aZxvEWiNM8VmTUNJFBRkdmJjnK0mL7etJsePCIhJUjM8ncgW54Btc6bOEIjUA90ByTPozuoXNQbf2pKHF1dVT1rnTLj9395CEh/G1u2A= ARC-Authentication-Results: i=1; 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=VVnQuLva DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 580AC4BCA40C Received: by mail-wm1-x336.google.com with SMTP id 5b1f17b1804b1-490b4e1ade7so17890925e9.0 for ; Fri, 05 Jun 2026 02:29:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=google; t=1780651748; x=1781256548; 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=HmeK0HAlmcm1cWCqKSNfTC/36W0XpSLQhBk1JJQfb/Y=; b=VVnQuLvaQE86+c0e+GQL/uWupUdPJTjE5XnU2ZNyxyfSH1V4cPHAUzEgWNGE6c+n+k QdZwyqL+NK74RhhEYzdjIzPuc+fuOPpx3xXkzWwz08yyDd+MmRRSECKL+cGMSWx+ilwu eMEWYS1k5FCt2UJdYFT6Nb+MCw+8S7RVj3FyqrlihLWbt4ErbwpMpqHz3n8HlquRg5v/ e/oA+DagwgVP39Kh5ZP/pyV2Pw4dubGv3QpFRZ9W6X3HQXrPqlUWdsPV0osb7bAHZDs3 36kOptIHZi/On5rLjO0nGhfvl7Sr6IT5lRDlmF+mgBczKfb2lZOpZBKVDuDRdUGp8sKc rKhQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780651748; x=1781256548; 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=HmeK0HAlmcm1cWCqKSNfTC/36W0XpSLQhBk1JJQfb/Y=; b=DoG6D7L9AZoIw2xbFoh6Q3/oNMZd6y7g18zKaYNW0PxwNWJ8rOr0BiRWnAxBopJt8d lklA9uzVxlKEJomeHU3+j3KN8LhLVT+UDj0g2XteJMnEDx+mLn44yOO97w/SdrDjOhFh t39q66/zLydHpKc5qkmjsig7Qy9VpiUMhQ4kfo8DCqN4/hQOoPTQ1cEJ/2GNa1jj+4Pe 81bozuQk8nafX/iTi3blUuLA4vwfrpIbfPQwXJg+fIEWvGy24Ek04psd04t6pahg/Yxp 6P4tymTctyKwuQoxKbOeTM9bw2uJ2TgMBjS2MZsUWHrEVZpZd0SnAP7RY8Y0DUzi3n6r P6WA== X-Gm-Message-State: AOJu0YyuFyvqAhTZc9v7V/mhBAaFBSRRW+tqQc+ojR5JTJ8f5A4QFUoI IWfcrJjVGCQYlRrmtGz7WeZ0Nk3lE0zczTJPRMcSer+xsjEGVw0i7Z0rPeSly/f36wSxNnxpPMm BnPk= X-Gm-Gg: Acq92OFsYncI29du+q2RtRAmPlAPe8QeWF8RUOAkakhCUhJLDLlj3l1bvdiU1GASaKR bzao2Z9ucmPRFZ/jNp47SweHoZX0Wz+WJjHlNguRsuylxHkNhwztRPxHrHnPgn1HPgeVqDZHqaI WsCV5ItPqFpcG4psqiI+iMV8CX79m0weHBC+MamiV2spK+luszVZhpbUCxgkwAZe0Ss/1GWd7WY CXzbxduHwDyeHyQPjh299wHz/5xlJGCFw88NW0vhsQbKkUTWcegmsu2hHQyh1ubzHA4WOFwALpl 4g30yy947MdWj4Y1mSXjXtck9HpQ8cXuvYrVggYGtnY7ctOSRKbAl5Z32WwmD+GQGg+26wV7VBk edSqQYT16GnGo5vNtDBJmAnA+Wv4mjgBkK8n2cA9FesKAqpUtXLF5pakIdvEOt+RT6v1uSR1tME dUT5Mx4oyJjrEcwp+1ol02fwuuOE09jNgNMtGqZY8VgSLMLqAMziIh7FdFrR+6Euzj43QHIBoNG c5WK2jLzP8i938ylUM/suI/CQ== X-Received: by 2002:a05:600c:620f:b0:490:5074:651e with SMTP id 5b1f17b1804b1-490c2612cb7mr37822295e9.25.1780651748349; Fri, 05 Jun 2026 02:29: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-490bc3e59f5sm142628695e9.14.2026.06.05.02.29.07 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 05 Jun 2026 02:29:07 -0700 (PDT) Message-ID: Date: Fri, 5 Jun 2026 11:29:08 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: [PATCH v2 17/16] RISC-V: warn about non-boolean unaligned-access attribute From: Jan Beulich To: Binutils Cc: Palmer Dabbelt , Andrew Waterman , Jim Wilson , Nelson Chu , jiawei References: 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: X-Spam-Status: No, score=-3016.2 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, RCVD_IN_DNSWL_BLOCKED, SPF_HELO_NONE, SPF_NONE, TXREP, URIBL_BLOCKED shortcircuit=no 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 attribute being a boolean one, values should be solely 0 or 1. Reviewed-by: Jiawei --- Should libbfd's riscv_merge_attributes() also emit a warning? Shouldn't settings accumulate, much like what riscv_merge_attributes() does? --- v2: New. --- a/gas/config/tc-riscv.c +++ b/gas/config/tc-riscv.c @@ -5859,14 +5859,13 @@ s_riscv_attribute (int ignored ATTRIBUTE { obj_attr_tag_t tag = obj_attr_process_attribute (OBJ_ATTR_PROC); unsigned old_xlen; - obj_attribute *attr; + const obj_attribute *attr = elf_known_obj_attributes_proc (stdoutput); explicit_attr = true; switch (tag) { case Tag_RISCV_arch: old_xlen = xlen; - attr = elf_known_obj_attributes_proc (stdoutput); if (!start_assemble) riscv_set_arch (attr[Tag_RISCV_arch].s); else @@ -5892,6 +5891,11 @@ s_riscv_attribute (int ignored ATTRIBUTE "any instructions")); break; + case Tag_RISCV_unaligned_access: + if (attr[Tag_RISCV_unaligned_access].i > 1) + as_warn (_("`unaligned_access' attribute with non-boolean value")); + break; + default: break; } --- /dev/null +++ b/gas/testsuite/gas/riscv/attribute-warn.d @@ -0,0 +1,7 @@ +#as: -march-attr +#readelf: -A +#warning_output: attribute-warn.l + +Attribute Section: riscv +File Attributes + Tag_RISCV_arch: [a-zA-Z0-9_\"].* --- /dev/null +++ b/gas/testsuite/gas/riscv/attribute-warn.l @@ -0,0 +1,2 @@ +.*: Assembler messages: +.*:2: Warning: `unaligned_access' attribute with non-boolean value --- /dev/null +++ b/gas/testsuite/gas/riscv/attribute-warn.s @@ -0,0 +1,3 @@ + .attribute unaligned_access, 1 + .attribute unaligned_access, 0x1234 + .attribute unaligned_access, 0 From patchwork Fri Jun 5 09:29:30 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Beulich X-Patchwork-Id: 136569 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from vm01.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 5B05B4BCA428 for ; Fri, 5 Jun 2026 09:31:03 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 5B05B4BCA428 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=I2sEOzat X-Original-To: binutils@sourceware.org Delivered-To: binutils@sourceware.org Received: from mail-wm1-x32b.google.com (mail-wm1-x32b.google.com [IPv6:2a00:1450:4864:20::32b]) by sourceware.org (Postfix) with ESMTPS id F13C44BCA428 for ; Fri, 5 Jun 2026 09:29:30 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org F13C44BCA428 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 F13C44BCA428 Authentication-Results: sourceware.org; arc=none smtp.remote-ip=2a00:1450:4864:20::32b ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1780651771; cv=none; b=ST9zhH0ETUDZHtGXKzBicfUraJkTQU4lznuMD8VuOBEG6sE0Mu+hwa6Oz3nZPrNxQa6KXKHJF9tJsZmmj6iwN1PolXUtUChdg5uGKYQJjIyOdl5wmwwv06SJ/T8AlMHY6GpNKyGBzdiinikfsgCWFf0AUokZAnRiNy8yv1WYMtw= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1780651771; c=relaxed/simple; bh=qFsLQMHo00XZanKHs7GtSFSS9r5KYhti9faNfPbbEkA=; h=DKIM-Signature:Message-ID:Date:MIME-Version:Subject:From:To; b=FjpPtgfDvNk1YNd8pBCNvZSczieipPX9BzCPr1wD9Zy52wTIv/NCs1bCBwkuVNCD1Nd08R6iPzyfEobRVZXGCV7GOEBeR1LGf9VWQox3J0et+WSc4AfAFvUYbFQvxqx7hgPkSZnSo5/3t6Pquh1PVhlXA0ydlO1onPcbEfya/nw= ARC-Authentication-Results: i=1; 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=I2sEOzat DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org F13C44BCA428 Received: by mail-wm1-x32b.google.com with SMTP id 5b1f17b1804b1-490bc6a7958so16542385e9.1 for ; Fri, 05 Jun 2026 02:29:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=google; t=1780651770; x=1781256570; 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=y0F26fNp7cUOcJH/K/M8i59AWKZcMBVf3167rBy+ilw=; b=I2sEOzatvsjiMmQVJao959CRQ1NpxqCgsI8KDCstSE5lw9Naj4+8snXPNno8n0qv7z 4EpD5yWuxpCM9NsqA9IYVyg9Z9YNW6HaV/ieL7oN0Kip9TAzgR82No2VvdxZmiOEPZNL sCoGipfXBGXZIWW5uELyVRfQt752EeWjm4IWjkUYtYyMw6OFesFl+JHu4yizV95iW0gT xUiDJCxG/v0qxt5COiGZOYz4No7S+nif+Ejpjbuz/jq71mzq363sjXlmL14lqfQ6EEr6 tQOxZgaqA5QAhzVmIK0OntuFvl9Ve1PMkaU+vfGCZBi0fzrryYAibQTmrWcb1f8s1cHZ slHg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780651770; x=1781256570; 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=y0F26fNp7cUOcJH/K/M8i59AWKZcMBVf3167rBy+ilw=; b=Co0V3NeE1rnuT43btuwsnnDZxMU/49/N+KhI7JwjMvYOu7NN08rZ1yVIWQwZesEjAo 2vI1GsFokQTPiN6p3Guq0QAaO/bIxOr67oekobuYS0x3ulm7LSAHD9utqaLU4o2QmtUU OmkIuZ1kjUSQT+WK2eH9aKD2qiORVoKrNX11qyQO0zgxwLvlu3Yg0Elc0c4B+/ZGEFpa lWGbMseUlTZ6WED8T6gYx3MqvKxQTqT7Tk9FLyv1AufAoQb+hKVeTvzycFiwEXM5lAUH P+/U9TMg1I/t1JDEGsC2V2aAq1bglqr9Motu5N3PfaZz2bBojTMTAm5uqetwGcmal2VQ pvhw== X-Gm-Message-State: AOJu0YxN22CHhcWa4RypQxAljxxKmpFey3MHObJnPHBwi0qnCt66iwZv 2dnlIrUHHB1wGH5JUOk8IW7SH3DM8TTIAfqwYgsgVUSclI8Gdd8bZN1eysTDG8Ez4pWaQbKOBGD +VsI= X-Gm-Gg: Acq92OEsXmRe8KxQz3l4lN4WxMCO6ncW0z/kYFErT1rEfvV8ldpv+5+JAcjzvag3WQR lUwVZOwSLnQxkb8zNib6lgo7t/NBPA45Tqb1eZZGLQ7kcP01769JhsDZw+gLfWS9UOJZBPB8znc +Y0EFw4tTHYAUZFtvm6ARZJVJVd9heW0rZM0zeiGL6ztEFPjkGIMqmOH22rEEvOuY6Ut2H/x5tR I5oQzZIch+DUe5lusAlMFDT1a+cbNcV+VDhWbpRgr5KSbm4LxeH+ZvkDlO2C/P76HB8bpufal+Q 35wwtPItvo4Et3t+aZFkw+H5uuKxGeo/kS3p28hFdGI0oyuIL940Zw+N30IBDlj7XlLlhbDrwd6 eRBP7WczzqUa4jkYjh8iQ5WvyC0pBJRsfVC5yIX9M86XR+TIF7grdIxgjFLItvbhJY5XSojWNcb NFU7rKX1uIh4+yyU+XYrUMshaODM4a9DHfGAwDcB6M8b9c2/EdLvx3WEEwsmUAPvbLVRWZbivU2 GlkkxeM44pPqVXy7mybWeYJ8gzd79u3aa8q X-Received: by 2002:a05:600c:1986:b0:489:32b:ac0b with SMTP id 5b1f17b1804b1-490c2cc27bdmr26926165e9.6.1780651769852; Fri, 05 Jun 2026 02:29:29 -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-4601f351d69sm40005167f8f.29.2026.06.05.02.29.28 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 05 Jun 2026 02:29:29 -0700 (PDT) Message-ID: Date: Fri, 5 Jun 2026 11:29:30 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: [PATCH v2 18/16] RISC-V: warn about non-power-of-2 stack-align attribute From: Jan Beulich To: Binutils Cc: Palmer Dabbelt , Andrew Waterman , Jim Wilson , Nelson Chu , jiawei References: 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: X-Spam-Status: No, score=-3016.2 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, RCVD_IN_DNSWL_BLOCKED, SPF_HELO_NONE, SPF_NONE, TXREP, URIBL_BLOCKED shortcircuit=no 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 Only power-of-2 values are sensible for alignment. Reviewed-by: Jiawei --- Should libbfd's riscv_merge_attributes() also emit a warning? Should we reject changing an already set non-zero value, like riscv_merge_attributes() does? Should we permit 0 as an explicit indication of "attribute not set"? --- v2: New. --- a/gas/config/tc-riscv.c +++ b/gas/config/tc-riscv.c @@ -5891,6 +5891,13 @@ s_riscv_attribute (int ignored ATTRIBUTE "any instructions")); break; + case Tag_RISCV_stack_align: + if (!attr[Tag_RISCV_stack_align].i + || (attr[Tag_RISCV_stack_align].i & + (attr[Tag_RISCV_stack_align].i - 1))) + as_warn (_("`stack_align' attribute with non-power-of-2 value")); + break; + case Tag_RISCV_unaligned_access: if (attr[Tag_RISCV_unaligned_access].i > 1) as_warn (_("`unaligned_access' attribute with non-boolean value")); --- a/gas/testsuite/gas/riscv/attribute-warn.d +++ b/gas/testsuite/gas/riscv/attribute-warn.d @@ -4,4 +4,5 @@ Attribute Section: riscv File Attributes + Tag_RISCV_stack_align: 65536-bytes Tag_RISCV_arch: [a-zA-Z0-9_\"].* --- a/gas/testsuite/gas/riscv/attribute-warn.l +++ b/gas/testsuite/gas/riscv/attribute-warn.l @@ -1,2 +1,4 @@ .*: Assembler messages: .*:2: Warning: `unaligned_access' attribute with non-boolean value +.*:5: Warning: `stack_align' attribute with non-power-of-2 value +.*:6: Warning: `stack_align' attribute with non-power-of-2 value --- a/gas/testsuite/gas/riscv/attribute-warn.s +++ b/gas/testsuite/gas/riscv/attribute-warn.s @@ -1,3 +1,7 @@ .attribute unaligned_access, 1 .attribute unaligned_access, 0x1234 .attribute unaligned_access, 0 + + .attribute stack_align, 0 + .attribute stack_align, 0x4444 + .attribute stack_align, 0x10000 From patchwork Fri Jun 5 09:30:06 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Beulich X-Patchwork-Id: 136570 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from vm01.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 409144BCA41A for ; Fri, 5 Jun 2026 09:32:56 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 409144BCA41A 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=NiRp5hmd X-Original-To: binutils@sourceware.org Delivered-To: binutils@sourceware.org Received: from mail-wr1-x434.google.com (mail-wr1-x434.google.com [IPv6:2a00:1450:4864:20::434]) by sourceware.org (Postfix) with ESMTPS id 95AF24C3182A for ; Fri, 5 Jun 2026 09:30:07 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 95AF24C3182A 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 95AF24C3182A Authentication-Results: sourceware.org; arc=none smtp.remote-ip=2a00:1450:4864:20::434 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1780651812; cv=none; b=leth68Lbxc86Kcgjt3Hdjt1CKW/oPu7pYbs3Q6YxE6F2C/rAHuuPtF1KLm3++hrOzT6xsAR9TOvSG26apUWu3gz4GBIDzS5ltzva4qEwb2Ol2s4WxZTlgLYgJqm/6UvHWsNsGtXQt2crRwuTWIyQGeAV2ir7xBVcRdGXiMZMZS4= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1780651812; c=relaxed/simple; bh=cMj2mroW+1MGjJUp1FB0EMfLfM2TDcovHAwvem03o2U=; h=DKIM-Signature:Message-ID:Date:MIME-Version:Subject:From:To; b=EOVci1KUa+Las5nditYEx4jelNaAFvqdp2FtRCB0XOammw9so5V41ngzk/q7Vkp23J1IrSMQzkHKs48HhqAKNIZASFeNJQ7+SeTDrLL29wnMgNfcsvlyNad9KBOTg9NB6qzwglw7ImztCJiPnmVDJD6pY5jjbN3A64Xw/QgtaDM= ARC-Authentication-Results: i=1; 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=NiRp5hmd DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 95AF24C3182A Received: by mail-wr1-x434.google.com with SMTP id ffacd0b85a97d-45eea68dd6fso882259f8f.2 for ; Fri, 05 Jun 2026 02:30:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=google; t=1780651806; x=1781256606; 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=QcpUga++XQAT/qRKGMfRcMdQEmlcr9cW+d0dt5UqVEE=; b=NiRp5hmd+59zzU8DK+7a9VnTsoHDg6JySbgbEeiYS8ESblZDcm2wCkXNR+Td2vHm1Z Qm79O5IsoNJbMqvjB+E9iz/9LVZ1gqwX/28ui2seErxAr7FPHumwRYEhc/IPNT0lShwB K8epX8+GTGikH+VistyqGgVoLbI4o4KjvID/YBh1Mw/JZxG/p6UZl1xkBfnNMonxkGTn /Ne5eTmLbVY1vumNzG7j88UQx5KFjZ+Dc/LWUVQ7QrxURpWpY6U3L30C/5gnijoiDHUl KT3dVuve8bfL6KpVPtQtLGzTehn8I83RyivCjxsY7KnDmu0bOB+RGhZSWHvVdZaQdVUo TWBA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780651806; x=1781256606; 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=QcpUga++XQAT/qRKGMfRcMdQEmlcr9cW+d0dt5UqVEE=; b=b/LZ8gzM9s1vFsbzkFQx/RJPjoiBfPA5+JZ0W7DJGhq47+VQQ7eDxZ3gwLUOu6iXYh 6FBoC5dR6rdyfSLtO/ZAu5KM54a9LQwJxSamUIkcRnVRO6Hj4qHK//0+Btco30kWhzu5 Rc482JIwZzWHdGyruHmwMwEA/zfukxrHPb6eLN/jRYBa427YE1/Wvss9DZXKr31bTF7t 8L6NXHtpabAfxgsJQG1h3zof8FMeQ2IeGSgCVPkHSoXcgHd28JLQC3vfJ4M9H1nZJDec cB7LhkiwyDGoZBhBdCYwa+C3xNkFV4KLdai0uJJKTYd9M1+mMi1XppFAMuvgZVx7cJdH HdNQ== X-Gm-Message-State: AOJu0Yz+pYHVAO8MQrWVBZpo4MzOpbMMN/ppjpZs1mE0hl+TYUnRlQjE f2rGknbrfH1Fm76KPE0aQCuth0lEySp3QwzPvVqMKduQgU+R6VtCo1RFwncDfrDqfh2wGhOE+S5 nZZk= X-Gm-Gg: Acq92OHyMqfY1QCo5xYsEomneAjBjHlt2TIaPAdMdD4R5nEQJKkP7CyySHtytoF1FHh mNuVw4F7BllTf2Q1LFYr0F8bxEnYsDgNiMtYMcvHXoBAyw8QGPccRDuVnjGHl/DbgLSHyTi16Xx ZcEQGVUxEVD4GOMW228ga13fggHXz/r6xiSMoCy7gIMc0rpotkAigqIAj42frifSA1qIZ8Zv71O lovOFwSqTmU+mN6/6q690H4p6hBrIxUcwQZtXK6ZYqcQciaSPq7UIZ/TXtRNLFqyDBBF8bn5Vgu WbAdVi10Tl1AQEZ8dWKQ4wovaAmlFPsBdkRvb4A/NhDYYONv9T28wdIDaSikEU7wRFYSkMJnJvu Ul25a+zWTwo8RY8tvZTk4eTeiL/zf8/UalNhlvRK496T6xXlsOTMO+M4w4gyVr0Idj8rQeGqaJ1 uZEhullYmOKt0rMNBRUsEqmXaZLy70RdbsiBg5+iFb4zSPvVhDFGIO1Av73wHdds3Bzk2DzcWeY PmZgqas/hE7mJp9WHhb6Y/j7Q== X-Received: by 2002:a5d:5049:0:b0:441:1c18:f779 with SMTP id ffacd0b85a97d-4603063cf3fmr3459385f8f.37.1780651806243; Fri, 05 Jun 2026 02:30: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-4601f2eadefsm24400553f8f.11.2026.06.05.02.30.05 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 05 Jun 2026 02:30:05 -0700 (PDT) Message-ID: Date: Fri, 5 Jun 2026 11:30:06 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: [PATCH v2 19/16] RISC-V: check operands for Zqinx From: Jan Beulich To: Binutils Cc: Palmer Dabbelt , Andrew Waterman , Jim Wilson , Nelson Chu , jiawei References: 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: X-Spam-Status: No, score=-3016.2 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, RCVD_IN_DNSWL_BLOCKED, SPF_HELO_NONE, SPF_NONE, TXREP, URIBL_BLOCKED shortcircuit=no 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 By analogy to Zdinx on RV32, register pair operands are presumably (there not being any formal spec afaict) required to be encoded with the low bit clear in RV64; in RV32 the low two bits need to be clear. Since match functions don't have XLEN available, introduce respective flags, to be used explicitly in assembler and disassembler. --- Does Zqinx actually make much sense in RV32? Function argument passing, for example, ends up odd: a0..a3 aren't suitable to hold an argument. Hence only a single argument can be passed in registers (a2..a5). No similar checking is easily possible for scalar vector insns, as element width there isn't encoded in the insn. (Plus V and Zqinx can't be enabled together right now anyway.) --- v2: New. --- a/gas/config/tc-riscv.c +++ b/gas/config/tc-riscv.c @@ -2934,6 +2934,12 @@ riscv_ip (char *str, struct riscv_cl_ins || (rclass) != RCLASS_GPR \ || !((regno) & 1)) +#define RV64_EVEN_CHECK(form, rclass, regno) \ + (!(ip->insn_mo->pinfo & INSN_RV64_EVEN_##form) \ + || xlen > 64 \ + || (rclass) != RCLASS_GPR \ + || !((regno) & (xlen == 32 ? 3 : 1))) + for (oparg = insn->args;; ++oparg) { opargStart = oparg; @@ -3593,12 +3599,14 @@ riscv_ip (char *str, struct riscv_cl_ins switch (c) { case 'D': - if (!RV32_EVEN_CHECK (D, rclass, regno)) + if (!RV32_EVEN_CHECK (D, rclass, regno) + || !RV64_EVEN_CHECK (D, rclass, regno)) break; INSERT_OPERAND (RD, *ip, regno); continue; case 'S': - if (!RV32_EVEN_CHECK (S, rclass, regno)) + if (!RV32_EVEN_CHECK (S, rclass, regno) + || !RV64_EVEN_CHECK (S, rclass, regno)) break; INSERT_OPERAND (RS1, *ip, regno); continue; @@ -3606,12 +3614,14 @@ riscv_ip (char *str, struct riscv_cl_ins INSERT_OPERAND (RS1, *ip, regno); /* Fall through. */ case 'T': - if (!RV32_EVEN_CHECK (T, rclass, regno)) + if (!RV32_EVEN_CHECK (T, rclass, regno) + || !RV64_EVEN_CHECK (T, rclass, regno)) break; INSERT_OPERAND (RS2, *ip, regno); continue; case 'R': - if (!RV32_EVEN_CHECK (R, rclass, regno)) + if (!RV32_EVEN_CHECK (R, rclass, regno) + || !RV64_EVEN_CHECK (R, rclass, regno)) break; INSERT_OPERAND (RS3, *ip, regno); continue; @@ -4312,6 +4322,7 @@ riscv_ip (char *str, struct riscv_cl_ins } #undef RV32_EVEN_CHECK +#undef RV64_EVEN_CHECK out: /* Restore the character we might have clobbered above. */ --- /dev/null +++ b/gas/testsuite/gas/riscv/zqinx-rv32.d @@ -0,0 +1,52 @@ +#as: -march=rv32i_zqinx +#objdump: -dwr + +.*:[ ]+file format .* + +Disassembly of section .text: + +0+000 : +[ ]+[0-9a-f]+:[ ]+078a7453[ ]+fadd\.q[ ]+s0,s4,s8 +[ ]+[0-9a-f]+:[ ]+078a0453[ ]+fadd\.q[ ]+s0,s4,s8,rne +[ ]+[0-9a-f]+:[ ]+0f8a7453[ ]+fsub\.q[ ]+s0,s4,s8 +[ ]+[0-9a-f]+:[ ]+0f8a0453[ ]+fsub\.q[ ]+s0,s4,s8,rne +[ ]+[0-9a-f]+:[ ]+178a7453[ ]+fmul\.q[ ]+s0,s4,s8 +[ ]+[0-9a-f]+:[ ]+178a0453[ ]+fmul\.q[ ]+s0,s4,s8,rne +[ ]+[0-9a-f]+:[ ]+1f8a7453[ ]+fdiv\.q[ ]+s0,s4,s8 +[ ]+[0-9a-f]+:[ ]+1f8a0453[ ]+fdiv\.q[ ]+s0,s4,s8,rne +[ ]+[0-9a-f]+:[ ]+5e0a7453[ ]+fsqrt\.q[ ]+s0,s4 +[ ]+[0-9a-f]+:[ ]+5e0a0453[ ]+fsqrt\.q[ ]+s0,s4,rne +[ ]+[0-9a-f]+:[ ]+2f8a0453[ ]+fmin\.q[ ]+s0,s4,s8 +[ ]+[0-9a-f]+:[ ]+2f8a1453[ ]+fmax\.q[ ]+s0,s4,s8 +[ ]+[0-9a-f]+:[ ]+678a7443[ ]+fmadd\.q[ ]+s0,s4,s8,a2 +[ ]+[0-9a-f]+:[ ]+678a0443[ ]+fmadd\.q[ ]+s0,s4,s8,a2,rne +[ ]+[0-9a-f]+:[ ]+678a744f[ ]+fnmadd\.q[ ]+s0,s4,s8,a2 +[ ]+[0-9a-f]+:[ ]+678a044f[ ]+fnmadd\.q[ ]+s0,s4,s8,a2,rne +[ ]+[0-9a-f]+:[ ]+678a7447[ ]+fmsub\.q[ ]+s0,s4,s8,a2 +[ ]+[0-9a-f]+:[ ]+678a0447[ ]+fmsub\.q[ ]+s0,s4,s8,a2,rne +[ ]+[0-9a-f]+:[ ]+678a744b[ ]+fnmsub\.q[ ]+s0,s4,s8,a2 +[ ]+[0-9a-f]+:[ ]+678a044b[ ]+fnmsub\.q[ ]+s0,s4,s8,a2,rne +[ ]+[0-9a-f]+:[ ]+c60a75d3[ ]+fcvt\.w\.q[ ]+a1,s4 +[ ]+[0-9a-f]+:[ ]+c60a05d3[ ]+fcvt\.w\.q[ ]+a1,s4,rne +[ ]+[0-9a-f]+:[ ]+c61a75d3[ ]+fcvt\.wu\.q[ ]+a1,s4 +[ ]+[0-9a-f]+:[ ]+c61a05d3[ ]+fcvt\.wu\.q[ ]+a1,s4,rne +[ ]+[0-9a-f]+:[ ]+d6058453[ ]+fcvt\.q\.w[ ]+s0,a1 +[ ]+[0-9a-f]+:[ ]+d6158453[ ]+fcvt\.q\.wu[ ]+s0,a1 +[ ]+[0-9a-f]+:[ ]+46058453[ ]+fcvt\.q\.s[ ]+s0,a1 +[ ]+[0-9a-f]+:[ ]+403a75d3[ ]+fcvt\.s\.q[ ]+a1,s4 +[ ]+[0-9a-f]+:[ ]+403a05d3[ ]+fcvt\.s\.q[ ]+a1,s4,rne +[ ]+[0-9a-f]+:[ ]+46150453[ ]+fcvt\.q\.d[ ]+s0,a0 +[ ]+[0-9a-f]+:[ ]+423a7553[ ]+fcvt\.d\.q[ ]+a0,s4 +[ ]+[0-9a-f]+:[ ]+423a0553[ ]+fcvt\.d\.q[ ]+a0,s4,rne +[ ]+[0-9a-f]+:[ ]+46258453[ ]+fcvt\.q\.h[ ]+s0,a1 +[ ]+[0-9a-f]+:[ ]+443a75d3[ ]+fcvt\.h\.q[ ]+a1,s4 +[ ]+[0-9a-f]+:[ ]+443a05d3[ ]+fcvt\.h\.q[ ]+a1,s4,rne +[ ]+[0-9a-f]+:[ ]+278a0453[ ]+fsgnj\.q[ ]+s0,s4,s8 +[ ]+[0-9a-f]+:[ ]+278a1453[ ]+fsgnjn\.q[ ]+s0,s4,s8 +[ ]+[0-9a-f]+:[ ]+278a2453[ ]+fsgnjx\.q[ ]+s0,s4,s8 +[ ]+[0-9a-f]+:[ ]+a78a25d3[ ]+feq\.q[ ]+a1,s4,s8 +[ ]+[0-9a-f]+:[ ]+a78a15d3[ ]+flt\.q[ ]+a1,s4,s8 +[ ]+[0-9a-f]+:[ ]+a78a05d3[ ]+fle\.q[ ]+a1,s4,s8 +[ ]+[0-9a-f]+:[ ]+a74c15d3[ ]+flt\.q[ ]+a1,s8,s4 +[ ]+[0-9a-f]+:[ ]+a74c05d3[ ]+fle\.q[ ]+a1,s8,s4 +[ ]+[0-9a-f]+:[ ]+274a0453[ ]+fmv\.q[ ]+s0,s4 --- /dev/null +++ b/gas/testsuite/gas/riscv/zqinx-rv32.s @@ -0,0 +1,54 @@ +target: + fadd.q s0, s4, s8 + fadd.q s0, s4, s8, rne + fsub.q s0, s4, s8 + fsub.q s0, s4, s8, rne + fmul.q s0, s4, s8 + fmul.q s0, s4, s8, rne + fdiv.q s0, s4, s8 + fdiv.q s0, s4, s8, rne + fsqrt.q s0, s4 + fsqrt.q s0, s4, rne + fmin.q s0, s4, s8 + fmax.q s0, s4, s8 + fmadd.q s0, s4, s8, a2 + fmadd.q s0, s4, s8, a2, rne + fnmadd.q s0, s4, s8, a2 + fnmadd.q s0, s4, s8, a2, rne + fmsub.q s0, s4, s8, a2 + fmsub.q s0, s4, s8, a2, rne + fnmsub.q s0, s4, s8, a2 + fnmsub.q s0, s4, s8, a2, rne + + fcvt.w.q a1, s4 + fcvt.w.q a1, s4, rne + fcvt.wu.q a1, s4 + fcvt.wu.q a1, s4, rne + fcvt.q.w s0, a1 + fcvt.q.wu s0, a1 + + fcvt.q.s s0, a1 + fcvt.s.q a1, s4 + fcvt.s.q a1, s4, rne + + fcvt.q.d s0, a0 + fcvt.d.q a0, s4 + fcvt.d.q a0, s4, rne + + .option push + .option arch, +zhinxmin + fcvt.q.h s0, a1 + fcvt.h.q a1, s4 + fcvt.h.q a1, s4, rne + .option pop + + fsgnj.q s0, s4, s8 + fsgnjn.q s0, s4, s8 + fsgnjx.q s0, s4, s8 + feq.q a1, s4, s8 + flt.q a1, s4, s8 + fle.q a1, s4, s8 + fgt.q a1, s4, s8 + fge.q a1, s4, s8 + + fmv.q s0, s4 --- /dev/null +++ b/gas/testsuite/gas/riscv/zqinx-rv32-fail.d @@ -0,0 +1,3 @@ +#as: -march=rv32i_zqinx +#source: zqinx.s +#error_output: zqinx-rv32-fail.l --- /dev/null +++ b/gas/testsuite/gas/riscv/zqinx-rv32-fail.l @@ -0,0 +1,42 @@ +.*: Assembler messages: +.*: Error: illegal operands `fadd\.q .*' +.*: Error: illegal operands `fadd\.q .*' +.*: Error: illegal operands `fsub\.q .*' +.*: Error: illegal operands `fsub\.q .*' +.*: Error: illegal operands `fmul\.q .*' +.*: Error: illegal operands `fmul\.q .*' +.*: Error: illegal operands `fdiv\.q .*' +.*: Error: illegal operands `fdiv\.q .*' +.*: Error: illegal operands `fsqrt\.q .*' +.*: Error: illegal operands `fsqrt\.q .*' +.*: Error: illegal operands `fmin\.q .*' +.*: Error: illegal operands `fmax\.q .*' +.*: Error: illegal operands `fmadd\.q .*' +.*: Error: illegal operands `fmadd\.q .*' +.*: Error: illegal operands `fnmadd\.q .*' +.*: Error: illegal operands `fnmadd\.q .*' +.*: Error: illegal operands `fmsub\.q .*' +.*: Error: illegal operands `fmsub\.q .*' +.*: Error: illegal operands `fnmsub\.q .*' +.*: Error: illegal operands `fnmsub\.q .*' +.*: Error: unrecognized opcode `fcvt\.l\.q .*' +.*: Error: unrecognized opcode `fcvt\.l\.q .*' +.*: Error: unrecognized opcode `fcvt\.lu\.q .*' +.*: Error: unrecognized opcode `fcvt\.lu\.q .*' +.*: Error: illegal operands `fcvt\.q\.w .*' +.*: Error: illegal operands `fcvt\.q\.wu .*' +.*: Error: unrecognized opcode `fcvt\.q\.l .*' +.*: Error: unrecognized opcode `fcvt\.q\.lu .*' +.*: Error: illegal operands `fcvt\.q\.s .*' +.*: Error: illegal operands `fcvt\.q\.d .*' +.*: Error: illegal operands `fsgnj\.q .*' +.*: Error: illegal operands `fsgnjn\.q .*' +.*: Error: illegal operands `fsgnjx\.q .*' +.*: Error: illegal operands `feq\.q .*' +.*: Error: illegal operands `flt\.q .*' +.*: Error: illegal operands `fle\.q .*' +.*: Error: illegal operands `fgt\.q .*' +.*: Error: illegal operands `fge\.q .*' +.*: Error: illegal operands `fmv\.q .*' +.*: Error: illegal operands `fneg\.q .*' +.*: Error: illegal operands `fabs\.q .*' --- /dev/null +++ b/gas/testsuite/gas/riscv/zqinx-rv64-fail.d @@ -0,0 +1,2 @@ +#as: -march=rv64i_zqinx +#error_output: zqinx-rv64-fail.l --- /dev/null +++ b/gas/testsuite/gas/riscv/zqinx-rv64-fail.l @@ -0,0 +1,62 @@ +.*: Assembler messages: +.*: Error: illegal operands `fadd\.q .*' +.*: Error: illegal operands `fadd\.q .*' +.*: Error: illegal operands `fadd\.q .*' +.*: Error: illegal operands `fsub\.q .*' +.*: Error: illegal operands `fsub\.q .*' +.*: Error: illegal operands `fsub\.q .*' +.*: Error: illegal operands `fmul\.q .*' +.*: Error: illegal operands `fmul\.q .*' +.*: Error: illegal operands `fmul\.q .*' +.*: Error: illegal operands `fdiv\.q .*' +.*: Error: illegal operands `fdiv\.q .*' +.*: Error: illegal operands `fdiv\.q .*' +.*: Error: illegal operands `fsqrt\.q .*' +.*: Error: illegal operands `fsqrt\.q .*' +.*: Error: illegal operands `fmin\.q .*' +.*: Error: illegal operands `fmin\.q .*' +.*: Error: illegal operands `fmin\.q .*' +.*: Error: illegal operands `fmax\.q .*' +.*: Error: illegal operands `fmax\.q .*' +.*: Error: illegal operands `fmax\.q .*' +.*: Error: illegal operands `fmadd\.q .*' +.*: Error: illegal operands `fmadd\.q .*' +.*: Error: illegal operands `fmadd\.q .*' +.*: Error: illegal operands `fmadd\.q .*' +.*: Error: illegal operands `fnmadd\.q .*' +.*: Error: illegal operands `fnmadd\.q .*' +.*: Error: illegal operands `fnmadd\.q .*' +.*: Error: illegal operands `fnmadd\.q .*' +.*: Error: illegal operands `fmsub\.q .*' +.*: Error: illegal operands `fmsub\.q .*' +.*: Error: illegal operands `fmsub\.q .*' +.*: Error: illegal operands `fmsub\.q .*' +.*: Error: illegal operands `fnmsub\.q .*' +.*: Error: illegal operands `fnmsub\.q .*' +.*: Error: illegal operands `fnmsub\.q .*' +.*: Error: illegal operands `fnmsub\.q .*' +.*: Error: illegal operands `fcvt\.w\.q .*' +.*: Error: illegal operands `fcvt\.wu\.q .*' +.*: Error: illegal operands `fcvt\.q\.w .*' +.*: Error: illegal operands `fcvt\.q\.wu .*' +.*: Error: illegal operands `fcvt\.q\.s .*' +.*: Error: illegal operands `fcvt\.s\.q .*' +.*: Error: illegal operands `fcvt\.q\.d .*' +.*: Error: illegal operands `fcvt\.d\.q .*' +.*: Error: illegal operands `fcvt\.q\.h .*' +.*: Error: illegal operands `fcvt\.h\.q .*' +.*: Error: illegal operands `fsgnj\.q .*' +.*: Error: illegal operands `fsgnjn\.q .*' +.*: Error: illegal operands `fsgnjx\.q .*' +.*: Error: illegal operands `feq\.q .*' +.*: Error: illegal operands `flt\.q .*' +.*: Error: illegal operands `fle\.q .*' +.*: Error: illegal operands `fgt\.q .*' +.*: Error: illegal operands `fge\.q .*' +.*: Error: illegal operands `fmv\.q .*' +.*: Error: illegal operands `fmv\.q .*' +.*: Error: illegal operands `fneg\.q .*' +.*: Error: illegal operands `fneg\.q .*' +.*: Error: illegal operands `fabs\.q .*' +.*: Error: illegal operands `fabs\.q .*' +.*: Error: illegal operands `fclass\.q .*' --- /dev/null +++ b/gas/testsuite/gas/riscv/zqinx-rv64-fail.s @@ -0,0 +1,70 @@ +target: + fadd.q s1, s4, s8 + fadd.q s0, s5, s8 + fadd.q s0, s4, s9 + fsub.q s1, s4, s8 + fsub.q s0, s5, s8 + fsub.q s0, s4, s9 + fmul.q s1, s4, s8 + fmul.q s0, s5, s8 + fmul.q s0, s4, s9 + fdiv.q s1, s4, s8 + fdiv.q s0, s5, s8 + fdiv.q s0, s4, s9 + fsqrt.q s1, s4 + fsqrt.q s0, s5 + fmin.q s1, s4, s8 + fmin.q s0, s5, s8 + fmin.q s0, s4, s9 + fmax.q s1, s4, s8 + fmax.q s0, s5, s8 + fmax.q s0, s4, s9 + fmadd.q s1, s4, s8, a2 + fmadd.q s0, s5, s8, a2 + fmadd.q s0, s4, s9, a2 + fmadd.q s0, s4, s8, a3 + fnmadd.q s1, s4, s8, a2 + fnmadd.q s0, s5, s8, a2 + fnmadd.q s0, s4, s9, a2 + fnmadd.q s0, s4, s8, a3 + fmsub.q s1, s4, s8, a2 + fmsub.q s0, s5, s8, a2 + fmsub.q s0, s4, s9, a2 + fmsub.q s0, s4, s8, a3 + fnmsub.q s1, s4, s8, a2 + fnmsub.q s0, s5, s8, a2 + fnmsub.q s0, s4, s9, a2 + fnmsub.q s0, s4, s8, a3 + + fcvt.w.q a0, s5 + fcvt.wu.q a0, s5 + fcvt.q.w s1, a0 + fcvt.q.wu s1, a0 + + fcvt.q.s s1, a0 + fcvt.s.q a0, s5 + + fcvt.q.d s1, a0 + fcvt.d.q a0, s5 + + .option push + .option arch, +zhinxmin + fcvt.q.h s1, a0 + fcvt.h.q a0, s5 + .option pop + + fsgnj.q s1, s4, s8 + fsgnjn.q s0, s5, s8 + fsgnjx.q s0, s4, s9 + feq.q a0, s5, s8 + flt.q a0, s4, s9 + fle.q a0, s5, s8 + fgt.q a0, s4, s9 + fge.q a0, s5, s8 + fmv.q s1, s4 + fmv.q s0, s5 + fneg.q s1, s4 + fneg.q s0, s5 + fabs.q s1, s4 + fabs.q s0, s5 + fclass.q a0, s5 --- a/include/opcode/riscv.h +++ b/include/opcode/riscv.h @@ -691,6 +691,19 @@ struct riscv_opcode #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) +/* Operands required to be an even-numbered register (pair) in RV64, and one + divisble by 4 on RV32. */ +#define INSN_RV64_EVEN_D 0x00001000 +#define INSN_RV64_EVEN_S 0x00002000 +#define INSN_RV64_EVEN_T 0x00004000 /* Also covering U. */ +#define INSN_RV64_EVEN_R 0x00008000 +/* Shorthands for combinations of the above. */ +#define INSN_RV64_EVEN_DS (INSN_RV64_EVEN_D | INSN_RV64_EVEN_S) +#define INSN_RV64_EVEN_DST (INSN_RV64_EVEN_DS | INSN_RV64_EVEN_T) +#define INSN_RV64_EVEN_DSTR (INSN_RV64_EVEN_DST | INSN_RV64_EVEN_R) +#define INSN_RV64_EVEN_DU (INSN_RV64_EVEN_D | INSN_RV64_EVEN_T) +#define INSN_RV64_EVEN_ST (INSN_RV64_EVEN_S | INSN_RV64_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 @@ -1049,6 +1049,25 @@ riscv_disassemble_insn (bfd_vma memaddr, && (word & (1u << OP_SH_RS3))) continue; } + + if (pd->xlen <= 64 + && riscv_subset_supports (&pd->riscv_rps_dis, "zqinx")) + { + unsigned int mask = pd->xlen == 32 ? 3 : 1; + + if ((op->pinfo & INSN_RV64_EVEN_D) + && (word & (mask << OP_SH_RD))) + continue; + if ((op->pinfo & INSN_RV64_EVEN_S) + && (word & (mask << OP_SH_RS1))) + continue; + if ((op->pinfo & INSN_RV64_EVEN_T) + && (word & (mask << OP_SH_RS2))) + continue; + if ((op->pinfo & INSN_RV64_EVEN_R) + && (word & (mask << OP_SH_RS3))) + continue; + } } /* It's a match. */ --- a/opcodes/riscv-opc.c +++ b/opcodes/riscv-opc.c @@ -932,10 +932,10 @@ const struct riscv_opcode riscv_opcodes[ {"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, 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.q.h", 0, INSN_CLASS_ZFHMIN_AND_Q_INX, "D,S", MATCH_FCVT_Q_H, MASK_FCVT_Q_H|MASK_RM, match_opcode, INSN_RV64_EVEN_D }, {"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, 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 }, +{"fcvt.h.q", 0, INSN_CLASS_ZFHMIN_AND_Q_INX, "D,Sm", MATCH_FCVT_H_Q, MASK_FCVT_H_Q, match_opcode, INSN_RV64_EVEN_S }, {"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 }, @@ -1062,41 +1062,41 @@ const struct riscv_opcode riscv_opcodes[ {"flq", 0, INSN_CLASS_Q, "D,A,s", 0, (int) M_FLx, match_rs1_nonzero, INSN_MACRO }, {"fsq", 0, INSN_CLASS_Q, "T,q(s)", MATCH_FSQ, MASK_FSQ, match_opcode, INSN_DREF|INSN_16_BYTE }, {"fsq", 0, INSN_CLASS_Q, "T,A,s", 0, (int) M_Sx_FSx, match_rs1_nonzero, INSN_MACRO }, -{"fmv.q", 0, INSN_CLASS_Q_INX, "D,U", MATCH_FSGNJ_Q, MASK_FSGNJ_Q, match_rs1_eq_rs2, INSN_ALIAS }, -{"fneg.q", 0, INSN_CLASS_Q_INX, "D,U", MATCH_FSGNJN_Q, MASK_FSGNJN_Q, match_rs1_eq_rs2, INSN_ALIAS }, -{"fabs.q", 0, INSN_CLASS_Q_INX, "D,U", MATCH_FSGNJX_Q, MASK_FSGNJX_Q, match_rs1_eq_rs2, INSN_ALIAS }, -{"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,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,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,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,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 }, +{"fmv.q", 0, INSN_CLASS_Q_INX, "D,U", MATCH_FSGNJ_Q, MASK_FSGNJ_Q, match_rs1_eq_rs2, INSN_ALIAS|INSN_RV64_EVEN_DU }, +{"fneg.q", 0, INSN_CLASS_Q_INX, "D,U", MATCH_FSGNJN_Q, MASK_FSGNJN_Q, match_rs1_eq_rs2, INSN_ALIAS|INSN_RV64_EVEN_DU }, +{"fabs.q", 0, INSN_CLASS_Q_INX, "D,U", MATCH_FSGNJX_Q, MASK_FSGNJX_Q, match_rs1_eq_rs2, INSN_ALIAS|INSN_RV64_EVEN_DU }, +{"fsgnj.q", 0, INSN_CLASS_Q_INX, "D,S,T", MATCH_FSGNJ_Q, MASK_FSGNJ_Q, match_opcode, INSN_RV64_EVEN_DST }, +{"fsgnjn.q", 0, INSN_CLASS_Q_INX, "D,S,T", MATCH_FSGNJN_Q, MASK_FSGNJN_Q, match_opcode, INSN_RV64_EVEN_DST }, +{"fsgnjx.q", 0, INSN_CLASS_Q_INX, "D,S,T", MATCH_FSGNJX_Q, MASK_FSGNJX_Q, match_opcode, INSN_RV64_EVEN_DST }, +{"fadd.q", 0, INSN_CLASS_Q_INX, "D,S,Tm", MATCH_FADD_Q, MASK_FADD_Q, match_opcode, INSN_RV64_EVEN_DST }, +{"fsub.q", 0, INSN_CLASS_Q_INX, "D,S,Tm", MATCH_FSUB_Q, MASK_FSUB_Q, match_opcode, INSN_RV64_EVEN_DST }, +{"fmul.q", 0, INSN_CLASS_Q_INX, "D,S,Tm", MATCH_FMUL_Q, MASK_FMUL_Q, match_opcode, INSN_RV64_EVEN_DST }, +{"fdiv.q", 0, INSN_CLASS_Q_INX, "D,S,Tm", MATCH_FDIV_Q, MASK_FDIV_Q, match_opcode, INSN_RV64_EVEN_DST }, +{"fsqrt.q", 0, INSN_CLASS_Q_INX, "D,Sm", MATCH_FSQRT_Q, MASK_FSQRT_Q, match_opcode, INSN_RV64_EVEN_DS }, +{"fmin.q", 0, INSN_CLASS_Q_INX, "D,S,T", MATCH_FMIN_Q, MASK_FMIN_Q, match_opcode, INSN_RV64_EVEN_DST }, +{"fmax.q", 0, INSN_CLASS_Q_INX, "D,S,T", MATCH_FMAX_Q, MASK_FMAX_Q, match_opcode, INSN_RV64_EVEN_DST }, +{"fmadd.q", 0, INSN_CLASS_Q_INX, "D,S,T,Rm", MATCH_FMADD_Q, MASK_FMADD_Q, match_opcode, INSN_RV64_EVEN_DSTR }, +{"fnmadd.q", 0, INSN_CLASS_Q_INX, "D,S,T,Rm", MATCH_FNMADD_Q, MASK_FNMADD_Q, match_opcode, INSN_RV64_EVEN_DSTR }, +{"fmsub.q", 0, INSN_CLASS_Q_INX, "D,S,T,Rm", MATCH_FMSUB_Q, MASK_FMSUB_Q, match_opcode, INSN_RV64_EVEN_DSTR }, +{"fnmsub.q", 0, INSN_CLASS_Q_INX, "D,S,T,Rm", MATCH_FNMSUB_Q, MASK_FNMSUB_Q, match_opcode, INSN_RV64_EVEN_DSTR }, +{"fcvt.w.q", 0, INSN_CLASS_Q_INX, "d,Sm", MATCH_FCVT_W_Q, MASK_FCVT_W_Q, match_opcode, INSN_RV64_EVEN_S }, +{"fcvt.wu.q", 0, INSN_CLASS_Q_INX, "d,Sm", MATCH_FCVT_WU_Q, MASK_FCVT_WU_Q, match_opcode, INSN_RV64_EVEN_S }, +{"fcvt.q.w", 0, INSN_CLASS_Q_INX, "D,s", MATCH_FCVT_Q_W, MASK_FCVT_Q_W|MASK_RM, match_opcode, INSN_RV64_EVEN_D }, +{"fcvt.q.wu", 0, INSN_CLASS_Q_INX, "D,s", MATCH_FCVT_Q_WU, MASK_FCVT_Q_WU|MASK_RM, match_opcode, INSN_RV64_EVEN_D }, +{"fcvt.q.s", 0, INSN_CLASS_Q_INX, "D,S", MATCH_FCVT_Q_S, MASK_FCVT_Q_S|MASK_RM, match_opcode, INSN_RV64_EVEN_D }, +{"fcvt.q.d", 0, INSN_CLASS_Q_INX, "D,S", MATCH_FCVT_Q_D, MASK_FCVT_Q_D|MASK_RM, match_opcode, INSN_RV64_EVEN_D|INSN_RV32_EVEN_S }, +{"fcvt.s.q", 0, INSN_CLASS_Q_INX, "D,Sm", MATCH_FCVT_S_Q, MASK_FCVT_S_Q, match_opcode, INSN_RV64_EVEN_S }, +{"fcvt.d.q", 0, INSN_CLASS_Q_INX, "D,Sm", MATCH_FCVT_D_Q, MASK_FCVT_D_Q, match_opcode, INSN_RV32_EVEN_D|INSN_RV64_EVEN_S }, +{"fclass.q", 0, INSN_CLASS_Q_INX, "d,S", MATCH_FCLASS_Q, MASK_FCLASS_Q, match_opcode, INSN_RV64_EVEN_S }, +{"feq.q", 0, INSN_CLASS_Q_INX, "d,S,T", MATCH_FEQ_Q, MASK_FEQ_Q, match_opcode, INSN_RV64_EVEN_ST }, +{"flt.q", 0, INSN_CLASS_Q_INX, "d,S,T", MATCH_FLT_Q, MASK_FLT_Q, match_opcode, INSN_RV64_EVEN_ST }, +{"fle.q", 0, INSN_CLASS_Q_INX, "d,S,T", MATCH_FLE_Q, MASK_FLE_Q, match_opcode, INSN_RV64_EVEN_ST }, +{"fgt.q", 0, INSN_CLASS_Q_INX, "d,T,S", MATCH_FLT_Q, MASK_FLT_Q, match_opcode, INSN_ALIAS|INSN_RV64_EVEN_ST }, +{"fge.q", 0, INSN_CLASS_Q_INX, "d,T,S", MATCH_FLE_Q, MASK_FLE_Q, match_opcode, INSN_ALIAS|INSN_RV64_EVEN_ST }, +{"fcvt.l.q", 64, INSN_CLASS_Q_INX, "d,Sm", MATCH_FCVT_L_Q, MASK_FCVT_L_Q, match_opcode, INSN_RV64_EVEN_S }, +{"fcvt.lu.q", 64, INSN_CLASS_Q_INX, "d,Sm", MATCH_FCVT_LU_Q, MASK_FCVT_LU_Q, match_opcode, INSN_RV64_EVEN_S }, +{"fcvt.q.l", 64, INSN_CLASS_Q_INX, "D,s", MATCH_FCVT_Q_L, MASK_FCVT_Q_L|MASK_RM, match_opcode, INSN_RV64_EVEN_D }, +{"fcvt.q.lu", 64, INSN_CLASS_Q_INX, "D,s", MATCH_FCVT_Q_LU, MASK_FCVT_Q_LU|MASK_RM, match_opcode, INSN_RV64_EVEN_D }, /* Compressed instructions. */ {"c.unimp", 0, INSN_CLASS_ZCA, "", 0, 0xffffU, match_opcode, 0 },