From patchwork Fri Nov 3 12:56:53 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Beulich X-Patchwork-Id: 161275 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:8f47:0:b0:403:3b70:6f57 with SMTP id j7csp1007093vqu; Fri, 3 Nov 2023 05:57:14 -0700 (PDT) X-Google-Smtp-Source: AGHT+IH5+fdPf/l+zVnJBZksCB20efn3pBi0sD1ckkUbgbs9nTFb36miKARLv6se+Q9zpq7sQBZ7 X-Received: by 2002:a67:cb8c:0:b0:457:bc94:fc9f with SMTP id h12-20020a67cb8c000000b00457bc94fc9fmr19946186vsl.13.1699016234424; Fri, 03 Nov 2023 05:57:14 -0700 (PDT) ARC-Seal: i=3; a=rsa-sha256; t=1699016234; cv=pass; d=google.com; s=arc-20160816; b=srTZioocFZTfiX/7ov79RJs9C9TT//nFUFEVQYjp0hrs9H/A/5L9KzAvbFdO42UXM7 JK3JKjEadPGytyLy+LHhGfmll8snQkU0K9dxpBlDHgNvirwVQxCbnGbijR08nmm4U8JM kKfgtiqM5DFhcfowBsMr7ikfCXfexVu0GxeOugnDTR39pfXI4coDU+lQvFxMulzdGUnc 4LmQ/1ztvcPnHbgwadeyKDfPP3IIkwbKdLdv6R0D+YC219ZVmDa6nIsDE1wHqHQ3rMOk 0Unb5wSwewzxvCigUGlcmq++LWddjPq78ABLpKL33DAYXspjCOB9HFPZpVFRfrmF5vqu yWTQ== ARC-Message-Signature: i=3; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=errors-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:mime-version :content-transfer-encoding:in-reply-to:references:cc:to:from :content-language:subject:user-agent:date:message-id:dkim-signature :arc-filter:dmarc-filter:delivered-to; bh=IbfEKMIen6PHoGF8oxmar3ft1MAVcwWOTVQUwQXQcZw=; fh=VT6N6QD4amIFxZr9T34bK4bL2a91CdTGSC+SgZliO78=; b=qDNAvzlmxV5uJLty/yTKLNckK0Wfm0H1I2S/GD0soqQqmmxV97XdEIs2hzsaBnJYeO BMrWTpShiw47/3iQtDOH1YlMjcU2dhAzvI/QCMbEybZWhntV2EAJPiueMsSmMYdgJ1nY R/j5HLVZgXStuJopykxn7ZTnH+daojEe+XOHEkN/rc+lhaVw3jDCnxBbpsKHXnxhqT24 XExFNAWPIReut6JDeWyJlGblTfdFTB+aQvPtYDb0ZcMkmtawumNvbx1SMyexD61TShBe ZrxHYVn6CfQNWfLf8Hh9P0prz2PP8t3D6HfUT0+HgoZaKka3gVSbq/80iYhwn2Bx//mM Hm4w== ARC-Authentication-Results: i=3; mx.google.com; dkim=pass header.i=@suse.com header.s=selector1 header.b=ub2hosXW; arc=pass (i=2); spf=pass (google.com: domain of binutils-bounces+ouuuleilei=gmail.com@sourceware.org designates 8.43.85.97 as permitted sender) smtp.mailfrom="binutils-bounces+ouuuleilei=gmail.com@sourceware.org"; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=suse.com Received: from server2.sourceware.org (server2.sourceware.org. [8.43.85.97]) by mx.google.com with ESMTPS id s8-20020ad45008000000b0066d0f75bd25si1405935qvo.614.2023.11.03.05.57.14 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 03 Nov 2023 05:57:14 -0700 (PDT) Received-SPF: pass (google.com: domain of binutils-bounces+ouuuleilei=gmail.com@sourceware.org designates 8.43.85.97 as permitted sender) client-ip=8.43.85.97; Authentication-Results: mx.google.com; dkim=pass header.i=@suse.com header.s=selector1 header.b=ub2hosXW; arc=pass (i=2); spf=pass (google.com: domain of binutils-bounces+ouuuleilei=gmail.com@sourceware.org designates 8.43.85.97 as permitted sender) smtp.mailfrom="binutils-bounces+ouuuleilei=gmail.com@sourceware.org"; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=suse.com Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 260FB3857C43 for ; Fri, 3 Nov 2023 12:57:14 +0000 (GMT) X-Original-To: binutils@sourceware.org Delivered-To: binutils@sourceware.org Received: from EUR04-DB3-obe.outbound.protection.outlook.com (mail-db3eur04on2083.outbound.protection.outlook.com [40.107.6.83]) by sourceware.org (Postfix) with ESMTPS id 248B53858C41 for ; Fri, 3 Nov 2023 12:56:59 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 248B53858C41 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 248B53858C41 Authentication-Results: server2.sourceware.org; arc=pass smtp.remote-ip=40.107.6.83 ARC-Seal: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1699016229; cv=pass; b=QJf1iVCxNrN+kf6jWq/7Hp1jQ/gwnjD8PEID2JVpDQM2UZJ5Bp3oLWZKJDqJNkmoUIr/1yKYytAOJYnAhRLqAW3L4rnzeUu1T3ie49H8YfT8g6nNM+DezDGd8lb2LxwNvcPhSpkg12mRGKO9JoGdfIMAqTPnhGJroAw3YVt4e6w= ARC-Message-Signature: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1699016229; c=relaxed/simple; bh=frfBReMhpzoiUkb2IEu5U7hcw9Ul+SL/QEfHbEoOcFQ=; h=DKIM-Signature:Message-ID:Date:Subject:From:To:MIME-Version; b=i/a+B4pGtZjVlxPaxqzdNjEaIDD+ZrFQcneKpZ7+dJXlCbeFcDI+ZyQhqgSGqM3DbBdN2Db+p8EAF0YeuLVuiEE9/bmWDW58rJjMGagBGixS3sVKIXFMmP1wgGx5mBQSEER6mRVJAf5R9knNc/1yQcSk9fRhl8hj4qgV8CMVgRw= ARC-Authentication-Results: i=2; server2.sourceware.org ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=N4gw+OrK6MMefeMrUJZdWvtsjlBe8ygyDQNpiAX706C7PVJfWTmukELB5CYVnI76Fb7JEkNxqgizHip4XeVBHP97UpVV8SbYxGrH+ijJh6QpEZ0LJteeU5TWmshILpoePDzFMB5pzJ0KV1oJafhotL8WEDh7vjyCucHZIaK/MSchOEwpcyM2k7xYFTa6Iv1i2v0xyzH82Wuyp/s0WCbKF792C9cNHS8Qa0hd7YgvKvmvEtZ9sKUEC4F00zMREJKupLifKKxpb3NZWMuKs8xensrKXGgIrNCgYA/Tic4ofS96FSUbLZRYbvWoGgeW4e0owe6Me4jx9LymUy0cCFT0mA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=IbfEKMIen6PHoGF8oxmar3ft1MAVcwWOTVQUwQXQcZw=; b=iqKN5bZetGJh3rNxm5bAw9t6M25B2/isJZ0JcaJmb3FjCY4HuC/t9CbrHpWDcBmTyVN2kqPBpnKk1MHU6B66j0qmS0tEYdfuhNuvLwwREA1bg2jCZKxSs8Unm4x84IpuYWRrRt/vNjs8dCXsReUheWWIoevzaorYRbOe9SjlXY8obyuwmUcIcxbVLJj9wnuSywraCC3oB3qh+ySEHRXDjXnF2aIHIaNe/S4OwMbsHl8p4DXFANf+pGZJVGDq2cjgwdgkq0uCfEZimP17JSdykk3rsVvmw5bsidwg/FacMsjZHUXtwDthhl4BB7Pp+OlAGItMG6iNz/YnqXkNj5Fn9w== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com; dkim=pass header.d=suse.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=IbfEKMIen6PHoGF8oxmar3ft1MAVcwWOTVQUwQXQcZw=; b=ub2hosXWkC6ADERe69KUbZmw8xKu127dHJnT5RjBWnd7m67hQ6E8aqm/OAzgNNkZi3XnK4MpfkhpjLPbjZRj8yL4ohkEwtgnhnV2h1pmS5EuwJ2cTjdImNeCtdgbfEPNjq6B99z7EutKj8OnTNtTw8wqboXcgh4SoPpC5eIhSSPiYvaKfS7ZDNJJJ9ASu8l99eirfUj+RxAC8K9+HtmINiZxlrSgFlXXcQF2niWWR+eNKGK73K6WsrdP/CmSZrXs4Wf5NY/SMf9sgxrbIe8r2wFW4mXDTN7j+jdFkAWSjeDJOLz6oIGivOCufQ9ZACZ9uNX+NGeRzRbRZkfzY0UNrg== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com; Received: from DU2PR04MB8790.eurprd04.prod.outlook.com (2603:10a6:10:2e1::23) by AS8PR04MB8021.eurprd04.prod.outlook.com (2603:10a6:20b:2a7::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6977.10; Fri, 3 Nov 2023 12:56:55 +0000 Received: from DU2PR04MB8790.eurprd04.prod.outlook.com ([fe80::d924:b650:a2ad:7b25]) by DU2PR04MB8790.eurprd04.prod.outlook.com ([fe80::d924:b650:a2ad:7b25%3]) with mapi id 15.20.6954.019; Fri, 3 Nov 2023 12:56:55 +0000 Message-ID: <637cff15-ffd1-30d2-9dcb-4a793e01aeb8@suse.com> Date: Fri, 3 Nov 2023 13:56:53 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.15.1 Subject: [PATCH 1/2] RISC-V: disallow x0 with certain macro-insns Content-Language: en-US From: Jan Beulich To: Binutils Cc: Palmer Dabbelt , Andrew Waterman , Jim Wilson , Nelson Chu References: <8255d3af-23e4-054d-be6c-28fae6a76ea0@suse.com> In-Reply-To: <8255d3af-23e4-054d-be6c-28fae6a76ea0@suse.com> X-ClientProxiedBy: FR4P281CA0231.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:e9::11) To DU2PR04MB8790.eurprd04.prod.outlook.com (2603:10a6:10:2e1::23) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DU2PR04MB8790:EE_|AS8PR04MB8021:EE_ X-MS-Office365-Filtering-Correlation-Id: bae97862-857c-4c02-bcf3-08dbdc6c5ba1 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: Z8m8/2gU6kBoGsDH/cGwt3hX7pVnBB6cSCyPTYWbva0csizu2wOhPqZdEVmICUI77G2qAvSI4PR9sSf1Tg3rJE94VoBshP1Jw3xauWeTEdaqAfSUqPSEjNt1E88jzN+mZ7QYOyOoLbr9aiWLImsZtTakzsAg2XWxP3H+jHGU6rDvkKnifJvDY0wN0rRiJeJ4JRyqawGSTW7Gc+HD8N7pwoMbDO04AoqDKTHL7c/y93hUe9RRZmvdiKNuIOIX3IQE/0Gg/KybPfmLpn4ylfrxAi56ZtgVR4co9lDc0I3d8C0qVs50T3J/ndAOlxXcXZIoR7edFkDAAL4mW4tbOpNtldtR7bX193+pDRlyKQGbQqbg7rl6yZR2WyHigPsim0AzUAgfoSqEpoBvuIaC/mp5YslyqJknvYCpzEVyvbziE/qbHJt0W87vJ2dok/IVDO+saEVHe776OeSvh4LpZGkmYNH/ERhwy6M/GktyfsPF+87Iwv9XYjPdHEdGQkvVj5R8xgXfXZD539lEA1e+2XSH36N/33JzSoMJ9NYxZ2JT7ma80kvd9cGfQvMTZXZdgCIb/xMB/3fpclzXbnHxtnidlsFIebygq0Hb7pj+Bpisw8Ff5IVox5bI8N5G7VshFGM6oqrPf9pAv+63eOHllJKnng== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:DU2PR04MB8790.eurprd04.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230031)(346002)(376002)(136003)(39860400002)(366004)(396003)(230922051799003)(1800799009)(451199024)(186009)(64100799003)(38100700002)(6506007)(478600001)(31686004)(2616005)(6512007)(31696002)(41300700001)(2906002)(30864003)(86362001)(5660300002)(4326008)(8936002)(8676002)(36756003)(54906003)(66476007)(66556008)(6916009)(316002)(66946007)(26005)(6486002)(43740500002)(45980500001); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?+4YXu0RbDE+pHsYSYMwVvopAbDDI?= =?utf-8?q?QvdApOAlP0TWihOBMYBUMtwYBTYTwaAjFb71pucROdJBXTaE2nlJyzEmxAYMFN0tb?= =?utf-8?q?eHqPcq1ouqrzVWJ1irCH08wl2brlSF+vtCttnBuKn69/JUYsOsIy0k4mrBitzEEcp?= =?utf-8?q?cznQocD6LtRLllRvylplDldSs+RgoyhBp/wEWV0uoVMK4dfnfKvBHnBWBNDUntqhT?= =?utf-8?q?bSrqZmK+a/aN+KBVTijl8O2z8cR/oJPo6gigocNjZxnzGgtPYqESq5JKIZczJL0M6?= =?utf-8?q?xd/FoeOtyUxhKcBqb4yMB5NHZGgkovn7J5UzwOVnhvXyK2au3jYPAeKSclZg5i4i3?= =?utf-8?q?PY+nTclLaArLy+GX/lfMM9Q7JoXhYTY86hZJAMEQcjczSnEP8dD6esMTrtfUPaORB?= =?utf-8?q?aJcqvsZoujuu3d728MXYMSCZOo8kwqq7YD+YTavhK2CgCFRHogJqS4bxmPKGgFDtI?= =?utf-8?q?JmyCs5lQOsOksYvKNFotdNmfaZIIJo58AeSYJlcyJN9OlwSr6zV9xrumfOcYR9zpV?= =?utf-8?q?tGtSBM2hC0bCtqb6/pTQ1NvuG6aiIUqWiUeiST8mPNajLtWMVdIir6Uj/T6Tw2EDU?= =?utf-8?q?GDOA73o3pfHq+JDOotoAHqYTJ6MBVFclm9lLz+r4m0FRe8bt9U95XULjMDoZ9WwkU?= =?utf-8?q?Xgj7F6tIseKbkvqTTAZrGNpBpFlpAiMjtaERGh4z30fDCgA4iswwfxUu/KWDm5rBA?= =?utf-8?q?p4FzRaW2AdcAUmUT9HSTwnC66XfPMm5Zk0C4u3XlXLDFWH/A/bLVcnMeHDWfvrLDY?= =?utf-8?q?IvKlIUo3n8K0vwxM1j8mv561AhJBzmIF6cGVaZBUY8bobW7uq/thDEJ4OCuEJHD4V?= =?utf-8?q?X48XKaSGCvmCAUmEkn4SaDXiSQDSd+gELbsBW+9Wuw7ctrBmVxf1/uEbVPgj87D9o?= =?utf-8?q?U66PAcOa4v7HM6uWqzoWBckAaiNiu7F4oAl1IK6PTIFaCS/kGiKQ3wWuBPAvjxmnm?= =?utf-8?q?54+ncaqyALTLQSB66OLpaswjJqppOfulYCKN5jmhCM2Fh5qgNHaWbf0Lq3b8gscm4?= =?utf-8?q?pwueO4ZMQHSsyZGrA2f4n8vhYAnYHqh/l99GKCCFCjz5D+vqtNvpJ3icENxFViiqW?= =?utf-8?q?BERgJlXE/giLUXQQsGI3ReuXciLYUYfWxjMaLX4bLsgr9z8GSi7hyDp4m39Dn/X9o?= =?utf-8?q?nCUwA0Zo9T9gS3CIlmg8cFrBMhl5ffzeDHiapORsQqgEoILCqT/DwT2STsfRwRks4?= =?utf-8?q?uMlOIvfClWdfsYwc3gLStXV/MRg512TmXodo10O1AFR6hERNx3oJzecrcXha60swK?= =?utf-8?q?/k9yJiperzA3Cp0+W8spvvtqw8BYR+4p4EzmkfJ5X1Iu/TnZ1coBT+8NwEkT0RTFS?= =?utf-8?q?XQ99BXwk2xiosakbZ3sj+u0dsAhaZr5vuW+sgbJtzE1cDxRyADQzJ0eMbLY9DEgjU?= =?utf-8?q?pOEQJ3RLwJar0iz6VKF9lNZ3HnqCXSuboPcNYBPPA0/rwW+9vwmLlPGOSL2KqyFAC?= =?utf-8?q?O5pdRNi3wiLaO/4aJBbOe9/H7kjzyx988IkntGr6mqvXIj0346DJK+1zK3qg05gZN?= =?utf-8?q?q6GawJUOIlwK?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: bae97862-857c-4c02-bcf3-08dbdc6c5ba1 X-MS-Exchange-CrossTenant-AuthSource: DU2PR04MB8790.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Nov 2023 12:56:55.6040 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: ECy3ijKRATJ+75cLp1fdz//AQalutTOJhS/9qRIn10Qhteowm/ctxPmRSY4FJ4Gcn/HGodkaZkNPYkMQhkEGfQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR04MB8021 X-Spam-Status: No, score=-3027.0 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SPF_HELO_PASS, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE, UPPERCASE_50_75 autolearn=no autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.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+ouuuleilei=gmail.com@sourceware.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1781547646658871588 X-GMAIL-MSGID: 1781547646658871588 While for some of the macro insns using x0 is kind of okay, as they would merely resolve to a sequence of hint insns (and hence not cause misbehavior at runtime), several of them have the degenerate AUIPC followed by a load, store, or branch using other than the designated symbol as address and hence causing runtime issues. Refuse to assemble those, leveraging that the matching function so far wasn't really used for macro insns: NULL is now allowed, indicating a match (which imo is preferable over converting match_never() to match_always()), while other matching functions now (also) used for macro insns need to avoid calling match_opcode(). Note that for LA the restriction is slightly too strict: In non-PIC mode using x0 would be okay-ish as per above (as it's just LLA there). Yet libopcodes doesn't know what mode gas is presently assembling for, so we want to err on the safe side. --- As to match_opcode(): I think it wants considering to pull that out of all the matching functions, and invoke directly in addition to the matching function (while excepting INSN_MACRO entries). That would allow a whole lot of indirect calls to be avoided (entries referencing match_opcode() would be converted to NULL), and there would be fewer relocations in the final shared library (or in PIE with statically linked libopcodes). --- a/gas/config/tc-riscv.c +++ b/gas/config/tc-riscv.c @@ -2513,11 +2513,11 @@ riscv_ip (char *str, struct riscv_cl_ins switch (*oparg) { case '\0': /* End of args. */ + if (insn->match_func && !insn->match_func (insn, ip->insn_opcode)) + break; + if (insn->pinfo != INSN_MACRO) { - if (!insn->match_func (insn, ip->insn_opcode)) - break; - /* For .insn, insn->match and insn->mask are 0. */ if (riscv_insn_length ((insn->match == 0 && insn->mask == 0) ? ip->insn_opcode --- a/opcodes/riscv-dis.c +++ b/opcodes/riscv-dis.c @@ -762,6 +762,9 @@ riscv_disassemble_insn (bfd_vma memaddr, for (; op->name; op++) { + /* Ignore macro insns. */ + if (op->pinfo == INSN_MACRO) + continue; /* Does the opcode match? */ if (! (op->match_func) (op, word)) continue; --- a/opcodes/riscv-opc.c +++ b/opcodes/riscv-opc.c @@ -162,13 +162,6 @@ match_opcode (const struct riscv_opcode } static int -match_never (const struct riscv_opcode *op ATTRIBUTE_UNUSED, - insn_t insn ATTRIBUTE_UNUSED) -{ - return 0; -} - -static int match_rs1_eq_rs2 (const struct riscv_opcode *op, insn_t insn) { int rs1 = (insn & MASK_RS1) >> OP_SH_RS1; @@ -179,7 +172,14 @@ match_rs1_eq_rs2 (const struct riscv_opc static int match_rd_nonzero (const struct riscv_opcode *op, insn_t insn) { - return match_opcode (op, insn) && ((insn & MASK_RD) != 0); + return (op->pinfo == INSN_MACRO || match_opcode (op, insn)) + && ((insn & MASK_RD) != 0); +} + +static int +match_rs1_nonzero (const struct riscv_opcode *op ATTRIBUTE_UNUSED, insn_t insn) +{ + return (insn & MASK_RS1) != 0; } static int @@ -376,10 +376,10 @@ const struct riscv_opcode riscv_opcodes[ {"jal", 32, INSN_CLASS_C, "Ca", MATCH_C_JAL, MASK_C_JAL, match_opcode, INSN_ALIAS|INSN_JSR }, {"jal", 0, INSN_CLASS_I, "a", MATCH_JAL|(X_RA << OP_SH_RD), MASK_JAL|MASK_RD, match_opcode, INSN_ALIAS|INSN_JSR }, {"jal", 0, INSN_CLASS_I, "d,a", MATCH_JAL, MASK_JAL, match_opcode, INSN_JSR }, -{"call", 0, INSN_CLASS_I, "d,c", (X_T1 << OP_SH_RS1), (int) M_CALL, match_never, INSN_MACRO }, -{"call", 0, INSN_CLASS_I, "c", (X_RA << OP_SH_RS1)|(X_RA << OP_SH_RD), (int) M_CALL, match_never, INSN_MACRO }, -{"tail", 0, INSN_CLASS_I, "c", (X_T1 << OP_SH_RS1), (int) M_CALL, match_never, INSN_MACRO }, -{"jump", 0, INSN_CLASS_I, "c,s", 0, (int) M_CALL, match_never, INSN_MACRO }, +{"call", 0, INSN_CLASS_I, "d,c", (X_T1 << OP_SH_RS1), (int) M_CALL, NULL, INSN_MACRO }, +{"call", 0, INSN_CLASS_I, "c", (X_RA << OP_SH_RS1)|(X_RA << OP_SH_RD), (int) M_CALL, NULL, INSN_MACRO }, +{"tail", 0, INSN_CLASS_I, "c", (X_T1 << OP_SH_RS1), (int) M_CALL, NULL, INSN_MACRO }, +{"jump", 0, INSN_CLASS_I, "c,s", 0, (int) M_CALL, match_rs1_nonzero, INSN_MACRO }, {"nop", 0, INSN_CLASS_C, "", MATCH_C_ADDI, 0xffff, match_opcode, INSN_ALIAS }, {"nop", 0, INSN_CLASS_I, "", MATCH_ADDI, MASK_ADDI|MASK_RD|MASK_RS1|MASK_IMM, match_opcode, INSN_ALIAS }, {"lui", 0, INSN_CLASS_C, "d,Cu", MATCH_C_LUI, MASK_C_LUI, match_c_lui, INSN_ALIAS }, @@ -387,7 +387,7 @@ const struct riscv_opcode riscv_opcodes[ {"li", 0, INSN_CLASS_C, "d,Cv", MATCH_C_LUI, MASK_C_LUI, match_c_lui, INSN_ALIAS }, {"li", 0, INSN_CLASS_C, "d,Co", MATCH_C_LI, MASK_C_LI, match_rd_nonzero, INSN_ALIAS }, {"li", 0, INSN_CLASS_I, "d,j", MATCH_ADDI, MASK_ADDI|MASK_RS1, match_opcode, INSN_ALIAS }, /* addi */ -{"li", 0, INSN_CLASS_I, "d,I", 0, (int) M_LI, match_never, INSN_MACRO }, +{"li", 0, INSN_CLASS_I, "d,I", 0, (int) M_LI, NULL, INSN_MACRO }, {"mv", 0, INSN_CLASS_C, "d,CV", MATCH_C_MV, MASK_C_MV, match_c_add, INSN_ALIAS }, {"mv", 0, INSN_CLASS_I, "d,s", MATCH_ADDI, MASK_ADDI|MASK_IMM, match_opcode, INSN_ALIAS }, {"move", 0, INSN_CLASS_C, "d,CV", MATCH_C_MV, MASK_C_MV, match_c_add, INSN_ALIAS }, @@ -438,11 +438,11 @@ const struct riscv_opcode riscv_opcodes[ {"add", 0, INSN_CLASS_I, "d,s,t", MATCH_ADD, MASK_ADD, match_opcode, 0 }, {"add", 0, INSN_CLASS_I, "d,s,t,1", MATCH_ADD, MASK_ADD, match_opcode, 0 }, {"add", 0, INSN_CLASS_I, "d,s,j", MATCH_ADDI, MASK_ADDI, match_opcode, INSN_ALIAS }, -{"la", 0, INSN_CLASS_I, "d,B", 0, (int) M_LA, match_never, INSN_MACRO }, -{"lla", 0, INSN_CLASS_I, "d,B", 0, (int) M_LLA, match_never, INSN_MACRO }, -{"lga", 0, INSN_CLASS_I, "d,B", 0, (int) M_LGA, match_never, INSN_MACRO }, -{"la.tls.gd", 0, INSN_CLASS_I, "d,A", 0, (int) M_LA_TLS_GD, match_never, INSN_MACRO }, -{"la.tls.ie", 0, INSN_CLASS_I, "d,A", 0, (int) M_LA_TLS_IE, match_never, INSN_MACRO }, +{"la", 0, INSN_CLASS_I, "d,B", 0, (int) M_LA, match_rd_nonzero, INSN_MACRO }, +{"lla", 0, INSN_CLASS_I, "d,B", 0, (int) M_LLA, NULL, INSN_MACRO }, +{"lga", 0, INSN_CLASS_I, "d,B", 0, (int) M_LGA, match_rd_nonzero, INSN_MACRO }, +{"la.tls.gd", 0, INSN_CLASS_I, "d,A", 0, (int) M_LA_TLS_GD, NULL, INSN_MACRO }, +{"la.tls.ie", 0, INSN_CLASS_I, "d,A", 0, (int) M_LA_TLS_IE, match_rd_nonzero, INSN_MACRO }, {"neg", 0, INSN_CLASS_I, "d,t", MATCH_SUB, MASK_SUB|MASK_RS1, match_opcode, INSN_ALIAS }, /* sub 0 */ {"slli", 0, INSN_CLASS_C, "d,CU,C>", MATCH_C_SLLI, MASK_C_SLLI, match_slli_as_c_slli, INSN_ALIAS }, {"slli", 0, INSN_CLASS_I, "d,s,>", MATCH_SLLI, MASK_SLLI, match_opcode, 0 }, @@ -462,20 +462,20 @@ const struct riscv_opcode riscv_opcodes[ {"sub", 0, INSN_CLASS_C, "Cs,Cw,Ct", MATCH_C_SUB, MASK_C_SUB, match_opcode, INSN_ALIAS }, {"sub", 0, INSN_CLASS_I, "d,s,t", MATCH_SUB, MASK_SUB, match_opcode, 0 }, {"lb", 0, INSN_CLASS_I, "d,o(s)", MATCH_LB, MASK_LB, match_opcode, INSN_DREF|INSN_1_BYTE }, -{"lb", 0, INSN_CLASS_I, "d,A", 0, (int) M_Lx, match_never, INSN_MACRO }, +{"lb", 0, INSN_CLASS_I, "d,A", 0, (int) M_Lx, match_rd_nonzero, INSN_MACRO }, {"lbu", 0, INSN_CLASS_ZCB, "Ct,Wcb(Cs)", MATCH_C_LBU, MASK_C_LBU, match_opcode, INSN_ALIAS|INSN_DREF|INSN_1_BYTE }, {"lbu", 0, INSN_CLASS_I, "d,o(s)", MATCH_LBU, MASK_LBU, match_opcode, INSN_DREF|INSN_1_BYTE }, -{"lbu", 0, INSN_CLASS_I, "d,A", 0, (int) M_Lx, match_never, INSN_MACRO }, +{"lbu", 0, INSN_CLASS_I, "d,A", 0, (int) M_Lx, match_rd_nonzero, INSN_MACRO }, {"lh", 0, INSN_CLASS_ZCB, "Ct,Wch(Cs)", MATCH_C_LH, MASK_C_LH, match_opcode, INSN_ALIAS|INSN_DREF|INSN_2_BYTE }, {"lh", 0, INSN_CLASS_I, "d,o(s)", MATCH_LH, MASK_LH, match_opcode, INSN_DREF|INSN_2_BYTE }, -{"lh", 0, INSN_CLASS_I, "d,A", 0, (int) M_Lx, match_never, INSN_MACRO }, +{"lh", 0, INSN_CLASS_I, "d,A", 0, (int) M_Lx, match_rd_nonzero, INSN_MACRO }, {"lhu", 0, INSN_CLASS_ZCB, "Ct,Wch(Cs)", MATCH_C_LHU, MASK_C_LHU, match_opcode, INSN_ALIAS|INSN_DREF|INSN_2_BYTE }, {"lhu", 0, INSN_CLASS_I, "d,o(s)", MATCH_LHU, MASK_LHU, match_opcode, INSN_DREF|INSN_2_BYTE }, -{"lhu", 0, INSN_CLASS_I, "d,A", 0, (int) M_Lx, match_never, INSN_MACRO }, +{"lhu", 0, INSN_CLASS_I, "d,A", 0, (int) M_Lx, match_rd_nonzero, INSN_MACRO }, {"lw", 0, INSN_CLASS_C, "d,Cm(Cc)", MATCH_C_LWSP, MASK_C_LWSP, match_rd_nonzero, INSN_ALIAS|INSN_DREF|INSN_4_BYTE }, {"lw", 0, INSN_CLASS_C, "Ct,Ck(Cs)", MATCH_C_LW, MASK_C_LW, match_opcode, INSN_ALIAS|INSN_DREF|INSN_4_BYTE }, {"lw", 0, INSN_CLASS_I, "d,o(s)", MATCH_LW, MASK_LW, match_opcode, INSN_DREF|INSN_4_BYTE }, -{"lw", 0, INSN_CLASS_I, "d,A", 0, (int) M_Lx, match_never, INSN_MACRO }, +{"lw", 0, INSN_CLASS_I, "d,A", 0, (int) M_Lx, match_rd_nonzero, INSN_MACRO }, {"not", 0, INSN_CLASS_ZCB, "Cs,Cw", MATCH_C_NOT, MASK_C_NOT, match_opcode, INSN_ALIAS }, {"not", 0, INSN_CLASS_I, "d,s", MATCH_XORI|MASK_IMM, MASK_XORI|MASK_IMM, match_opcode, INSN_ALIAS }, {"ori", 0, INSN_CLASS_I, "d,s,j", MATCH_ORI, MASK_ORI, match_opcode, 0 }, @@ -498,14 +498,14 @@ const struct riscv_opcode riscv_opcodes[ {"sgtu", 0, INSN_CLASS_I, "d,t,s", MATCH_SLTU, MASK_SLTU, match_opcode, INSN_ALIAS }, {"sb", 0, INSN_CLASS_ZCB, "Ct,Wcb(Cs)", MATCH_C_SB, MASK_C_SB, match_opcode, INSN_DREF|INSN_1_BYTE|INSN_ALIAS }, {"sb", 0, INSN_CLASS_I, "t,q(s)", MATCH_SB, MASK_SB, match_opcode, INSN_DREF|INSN_1_BYTE }, -{"sb", 0, INSN_CLASS_I, "t,A,s", 0, (int) M_Sx_FSx, match_never, INSN_MACRO }, +{"sb", 0, INSN_CLASS_I, "t,A,s", 0, (int) M_Sx_FSx, match_rs1_nonzero, INSN_MACRO }, {"sh", 0, INSN_CLASS_ZCB, "Ct,Wch(Cs)", MATCH_C_SH, MASK_C_SH, match_opcode, INSN_DREF|INSN_2_BYTE|INSN_ALIAS }, {"sh", 0, INSN_CLASS_I, "t,q(s)", MATCH_SH, MASK_SH, match_opcode, INSN_DREF|INSN_2_BYTE }, -{"sh", 0, INSN_CLASS_I, "t,A,s", 0, (int) M_Sx_FSx, match_never, INSN_MACRO }, +{"sh", 0, INSN_CLASS_I, "t,A,s", 0, (int) M_Sx_FSx, match_rs1_nonzero, INSN_MACRO }, {"sw", 0, INSN_CLASS_C, "CV,CM(Cc)", MATCH_C_SWSP, MASK_C_SWSP, match_opcode, INSN_ALIAS|INSN_DREF|INSN_4_BYTE }, {"sw", 0, INSN_CLASS_C, "Ct,Ck(Cs)", MATCH_C_SW, MASK_C_SW, match_opcode, INSN_ALIAS|INSN_DREF|INSN_4_BYTE }, {"sw", 0, INSN_CLASS_I, "t,q(s)", MATCH_SW, MASK_SW, match_opcode, INSN_DREF|INSN_4_BYTE }, -{"sw", 0, INSN_CLASS_I, "t,A,s", 0, (int) M_Sx_FSx, match_never, INSN_MACRO }, +{"sw", 0, INSN_CLASS_I, "t,A,s", 0, (int) M_Sx_FSx, match_rs1_nonzero, INSN_MACRO }, {"fence", 0, INSN_CLASS_I, "", MATCH_FENCE|MASK_PRED|MASK_SUCC, MASK_FENCE|MASK_RD|MASK_RS1|MASK_IMM, match_opcode, INSN_ALIAS }, {"fence", 0, INSN_CLASS_I, "P,Q", MATCH_FENCE, MASK_FENCE|MASK_RD|MASK_RS1|(MASK_IMM & ~MASK_PRED & ~MASK_SUCC), match_opcode, 0 }, {"fence.i", 0, INSN_CLASS_ZIFENCEI, "", MATCH_FENCE_I, MASK_FENCE|MASK_RD|MASK_RS1|MASK_IMM, match_opcode, 0 }, @@ -524,15 +524,15 @@ const struct riscv_opcode riscv_opcodes[ {"xor", 0, INSN_CLASS_C, "Cs,Ct,Cw", MATCH_C_XOR, MASK_C_XOR, match_opcode, INSN_ALIAS }, {"xor", 0, INSN_CLASS_I, "d,s,t", MATCH_XOR, MASK_XOR, match_opcode, 0 }, {"lwu", 64, INSN_CLASS_I, "d,o(s)", MATCH_LWU, MASK_LWU, match_opcode, INSN_DREF|INSN_4_BYTE }, -{"lwu", 64, INSN_CLASS_I, "d,A", 0, (int) M_Lx, match_never, INSN_MACRO }, +{"lwu", 64, INSN_CLASS_I, "d,A", 0, (int) M_Lx, match_rd_nonzero, INSN_MACRO }, {"ld", 64, INSN_CLASS_C, "d,Cn(Cc)", MATCH_C_LDSP, MASK_C_LDSP, match_rd_nonzero, INSN_ALIAS|INSN_DREF|INSN_8_BYTE }, {"ld", 64, INSN_CLASS_C, "Ct,Cl(Cs)", MATCH_C_LD, MASK_C_LD, match_opcode, INSN_ALIAS|INSN_DREF|INSN_8_BYTE }, {"ld", 64, INSN_CLASS_I, "d,o(s)", MATCH_LD, MASK_LD, match_opcode, INSN_DREF|INSN_8_BYTE }, -{"ld", 64, INSN_CLASS_I, "d,A", 0, (int) M_Lx, match_never, INSN_MACRO }, +{"ld", 64, INSN_CLASS_I, "d,A", 0, (int) M_Lx, match_rd_nonzero, INSN_MACRO }, {"sd", 64, INSN_CLASS_C, "CV,CN(Cc)", MATCH_C_SDSP, MASK_C_SDSP, match_opcode, INSN_ALIAS|INSN_DREF|INSN_8_BYTE }, {"sd", 64, INSN_CLASS_C, "Ct,Cl(Cs)", MATCH_C_SD, MASK_C_SD, match_opcode, INSN_ALIAS|INSN_DREF|INSN_8_BYTE }, {"sd", 64, INSN_CLASS_I, "t,q(s)", MATCH_SD, MASK_SD, match_opcode, INSN_DREF|INSN_8_BYTE }, -{"sd", 64, INSN_CLASS_I, "t,A,s", 0, (int) M_Sx_FSx, match_never, INSN_MACRO }, +{"sd", 64, INSN_CLASS_I, "t,A,s", 0, (int) M_Sx_FSx, match_rs1_nonzero, INSN_MACRO }, {"sext.w", 64, INSN_CLASS_C, "d,CU", MATCH_C_ADDIW, MASK_C_ADDIW|MASK_RVC_IMM, match_rd_nonzero, INSN_ALIAS }, {"sext.w", 64, INSN_CLASS_I, "d,s", MATCH_ADDIW, MASK_ADDIW|MASK_IMM, match_opcode, INSN_ALIAS }, {"addiw", 64, INSN_CLASS_C, "d,CU,Co", MATCH_C_ADDIW, MASK_C_ADDIW, match_rd_nonzero, INSN_ALIAS }, @@ -663,9 +663,9 @@ const struct riscv_opcode riscv_opcodes[ /* Half-precision floating-point instruction subset. */ {"flh", 0, INSN_CLASS_ZFHMIN, "D,o(s)", MATCH_FLH, MASK_FLH, match_opcode, INSN_DREF|INSN_2_BYTE }, -{"flh", 0, INSN_CLASS_ZFHMIN, "D,A,s", 0, (int) M_FLx, match_never, INSN_MACRO }, +{"flh", 0, INSN_CLASS_ZFHMIN, "D,A,s", 0, (int) M_FLx, match_rs1_nonzero, INSN_MACRO }, {"fsh", 0, INSN_CLASS_ZFHMIN, "T,q(s)", MATCH_FSH, MASK_FSH, match_opcode, INSN_DREF|INSN_2_BYTE }, -{"fsh", 0, INSN_CLASS_ZFHMIN, "T,A,s", 0, (int) M_Sx_FSx, match_never, INSN_MACRO }, +{"fsh", 0, INSN_CLASS_ZFHMIN, "T,A,s", 0, (int) M_Sx_FSx, match_rs1_nonzero, INSN_MACRO }, {"fmv.x.h", 0, INSN_CLASS_ZFHMIN, "d,S", MATCH_FMV_X_H, MASK_FMV_X_H, match_opcode, 0 }, {"fmv.h.x", 0, INSN_CLASS_ZFHMIN, "D,s", MATCH_FMV_H_X, MASK_FMV_H_X, match_opcode, 0 }, {"fmv.h", 0, INSN_CLASS_ZFH_INX, "D,U", MATCH_FSGNJ_H, MASK_FSGNJ_H, match_rs1_eq_rs2, INSN_ALIAS }, @@ -746,11 +746,11 @@ const struct riscv_opcode riscv_opcodes[ {"flw", 32, INSN_CLASS_F_AND_C, "D,Cm(Cc)", MATCH_C_FLWSP, MASK_C_FLWSP, match_opcode, INSN_ALIAS|INSN_DREF|INSN_4_BYTE }, {"flw", 32, INSN_CLASS_F_AND_C, "CD,Ck(Cs)", MATCH_C_FLW, MASK_C_FLW, match_opcode, INSN_ALIAS|INSN_DREF|INSN_4_BYTE }, {"flw", 0, INSN_CLASS_F, "D,o(s)", MATCH_FLW, MASK_FLW, match_opcode, INSN_DREF|INSN_4_BYTE }, -{"flw", 0, INSN_CLASS_F, "D,A,s", 0, (int) M_FLx, match_never, INSN_MACRO }, +{"flw", 0, INSN_CLASS_F, "D,A,s", 0, (int) M_FLx, match_rs1_nonzero, INSN_MACRO }, {"fsw", 32, INSN_CLASS_F_AND_C, "CT,CM(Cc)", MATCH_C_FSWSP, MASK_C_FSWSP, match_opcode, INSN_ALIAS|INSN_DREF|INSN_4_BYTE }, {"fsw", 32, INSN_CLASS_F_AND_C, "CD,Ck(Cs)", MATCH_C_FSW, MASK_C_FSW, match_opcode, INSN_ALIAS|INSN_DREF|INSN_4_BYTE }, {"fsw", 0, INSN_CLASS_F, "T,q(s)", MATCH_FSW, MASK_FSW, match_opcode, INSN_DREF|INSN_4_BYTE }, -{"fsw", 0, INSN_CLASS_F, "T,A,s", 0, (int) M_Sx_FSx, match_never, INSN_MACRO }, +{"fsw", 0, INSN_CLASS_F, "T,A,s", 0, (int) M_Sx_FSx, match_rs1_nonzero, INSN_MACRO }, {"fmv.x.w", 0, INSN_CLASS_F, "d,S", MATCH_FMV_X_S, MASK_FMV_X_S, match_opcode, 0 }, {"fmv.w.x", 0, INSN_CLASS_F, "D,s", MATCH_FMV_S_X, MASK_FMV_S_X, match_opcode, 0 }, {"fmv.x.s", 0, INSN_CLASS_F, "d,S", MATCH_FMV_X_S, MASK_FMV_X_S, match_opcode, 0 }, @@ -808,11 +808,11 @@ const struct riscv_opcode riscv_opcodes[ {"fld", 0, INSN_CLASS_D_AND_C, "D,Cn(Cc)", MATCH_C_FLDSP, MASK_C_FLDSP, match_opcode, INSN_ALIAS|INSN_DREF|INSN_8_BYTE }, {"fld", 0, INSN_CLASS_D_AND_C, "CD,Cl(Cs)", MATCH_C_FLD, MASK_C_FLD, match_opcode, INSN_ALIAS|INSN_DREF|INSN_8_BYTE }, {"fld", 0, INSN_CLASS_D, "D,o(s)", MATCH_FLD, MASK_FLD, match_opcode, INSN_DREF|INSN_8_BYTE }, -{"fld", 0, INSN_CLASS_D, "D,A,s", 0, (int) M_FLx, match_never, INSN_MACRO }, +{"fld", 0, INSN_CLASS_D, "D,A,s", 0, (int) M_FLx, match_rs1_nonzero, INSN_MACRO }, {"fsd", 0, INSN_CLASS_D_AND_C, "CT,CN(Cc)", MATCH_C_FSDSP, MASK_C_FSDSP, match_opcode, INSN_ALIAS|INSN_DREF|INSN_8_BYTE }, {"fsd", 0, INSN_CLASS_D_AND_C, "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_never, INSN_MACRO }, +{"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 }, @@ -867,9 +867,9 @@ const struct riscv_opcode riscv_opcodes[ /* 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 }, -{"flq", 0, INSN_CLASS_Q, "D,A,s", 0, (int) M_FLx, match_never, INSN_MACRO }, +{"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_never, INSN_MACRO }, +{"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 }, @@ -1039,14 +1039,14 @@ const struct riscv_opcode riscv_opcodes[ {"maxu", 0, INSN_CLASS_ZBB, "d,s,t", MATCH_MAXU, MASK_MAXU, match_opcode, 0 }, {"sext.b", 0, INSN_CLASS_ZCB_AND_ZBB, "Cs,Cw", MATCH_C_SEXT_B, MASK_C_SEXT_B, match_opcode, INSN_ALIAS }, {"sext.b", 0, INSN_CLASS_ZBB, "d,s", MATCH_SEXT_B, MASK_SEXT_B, match_opcode, 0 }, -{"sext.b", 0, INSN_CLASS_I, "d,s", 0, (int) M_SEXTB, match_never, INSN_MACRO }, +{"sext.b", 0, INSN_CLASS_I, "d,s", 0, (int) M_SEXTB, NULL, INSN_MACRO }, {"sext.h", 0, INSN_CLASS_ZCB_AND_ZBB, "Cs,Cw", MATCH_C_SEXT_H, MASK_C_SEXT_H, match_opcode, INSN_ALIAS }, {"sext.h", 0, INSN_CLASS_ZBB, "d,s", MATCH_SEXT_H, MASK_SEXT_H, match_opcode, 0 }, -{"sext.h", 0, INSN_CLASS_I, "d,s", 0, (int) M_SEXTH, match_never, INSN_MACRO }, +{"sext.h", 0, INSN_CLASS_I, "d,s", 0, (int) M_SEXTH, NULL, INSN_MACRO }, {"zext.h", 0, INSN_CLASS_ZCB_AND_ZBB, "Cs,Cw", MATCH_C_ZEXT_H, MASK_C_ZEXT_H, match_opcode, INSN_ALIAS }, {"zext.h", 32, INSN_CLASS_ZBB, "d,s", MATCH_PACK, MASK_PACK | MASK_RS2, match_opcode, 0 }, {"zext.h", 64, INSN_CLASS_ZBB, "d,s", MATCH_PACKW, MASK_PACKW | MASK_RS2, match_opcode, 0 }, -{"zext.h", 0, INSN_CLASS_I, "d,s", 0, (int) M_ZEXTH, match_never, INSN_MACRO }, +{"zext.h", 0, INSN_CLASS_I, "d,s", 0, (int) M_ZEXTH, NULL, INSN_MACRO }, {"orc.b", 0, INSN_CLASS_ZBB, "d,s", MATCH_GORCI | MATCH_SHAMT_ORC_B, MASK_GORCI | MASK_SHAMT, match_opcode, 0 }, {"clzw", 64, INSN_CLASS_ZBB, "d,s", MATCH_CLZW, MASK_CLZW, match_opcode, 0 }, {"ctzw", 64, INSN_CLASS_ZBB, "d,s", MATCH_CTZW, MASK_CTZW, match_opcode, 0 }, @@ -1081,7 +1081,7 @@ const struct riscv_opcode riscv_opcodes[ {"sh3add.uw", 64, INSN_CLASS_ZBA, "d,s,t", MATCH_SH3ADD_UW, MASK_SH3ADD_UW, match_opcode, 0 }, {"zext.w", 64, INSN_CLASS_ZCB_AND_ZBA, "Cs,Cw", MATCH_C_ZEXT_W, MASK_C_ZEXT_W, match_opcode, INSN_ALIAS }, {"zext.w", 64, INSN_CLASS_ZBA, "d,s", MATCH_ADD_UW, MASK_ADD_UW | MASK_RS2, match_opcode, INSN_ALIAS }, -{"zext.w", 64, INSN_CLASS_I, "d,s", 0, (int) M_ZEXTW, match_never, INSN_MACRO }, +{"zext.w", 64, INSN_CLASS_I, "d,s", 0, (int) M_ZEXTW, NULL, INSN_MACRO }, {"add.uw", 64, INSN_CLASS_ZBA, "d,s,t", MATCH_ADD_UW, MASK_ADD_UW, match_opcode, 0 }, {"slli.uw", 64, INSN_CLASS_ZBA, "d,s,>", MATCH_SLLI_UW, MASK_SLLI_UW, match_opcode, 0 }, @@ -1618,10 +1618,10 @@ const struct riscv_opcode riscv_opcodes[ {"vmsgeu.vi", 0, INSN_CLASS_V, "Vd,Vu,0Vm", MATCH_VMSEQVV, MASK_VMSEQVV, match_vs1_eq_vs2, INSN_ALIAS }, {"vmsgeu.vi", 0, INSN_CLASS_V, "Vd,Vt,VkVm", MATCH_VMSGTUVI, MASK_VMSGTUVI, match_opcode, INSN_ALIAS }, -{"vmsge.vx", 0, INSN_CLASS_V, "Vd,Vt,sVm", 0, (int) M_VMSGE, match_never, INSN_MACRO }, -{"vmsge.vx", 0, INSN_CLASS_V, "Vd,Vt,s,VM,VT", 0, (int) M_VMSGE, match_never, INSN_MACRO }, -{"vmsgeu.vx", 0, INSN_CLASS_V, "Vd,Vt,sVm", 1, (int) M_VMSGE, match_never, INSN_MACRO }, -{"vmsgeu.vx", 0, INSN_CLASS_V, "Vd,Vt,s,VM,VT", 1, (int) M_VMSGE, match_never, INSN_MACRO }, +{"vmsge.vx", 0, INSN_CLASS_V, "Vd,Vt,sVm", 0, (int) M_VMSGE, NULL, INSN_MACRO }, +{"vmsge.vx", 0, INSN_CLASS_V, "Vd,Vt,s,VM,VT", 0, (int) M_VMSGE, NULL, INSN_MACRO }, +{"vmsgeu.vx", 0, INSN_CLASS_V, "Vd,Vt,sVm", 1, (int) M_VMSGE, NULL, INSN_MACRO }, +{"vmsgeu.vx", 0, INSN_CLASS_V, "Vd,Vt,s,VM,VT", 1, (int) M_VMSGE, NULL, INSN_MACRO }, {"vminu.vv", 0, INSN_CLASS_V, "Vd,Vt,VsVm", MATCH_VMINUVV, MASK_VMINUVV, match_opcode, 0}, {"vminu.vx", 0, INSN_CLASS_V, "Vd,Vt,sVm", MATCH_VMINUVX, MASK_VMINUVX, match_opcode, 0}, From patchwork Fri Nov 3 12:57:23 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Beulich X-Patchwork-Id: 161276 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:8f47:0:b0:403:3b70:6f57 with SMTP id j7csp1007388vqu; Fri, 3 Nov 2023 05:57:49 -0700 (PDT) X-Google-Smtp-Source: AGHT+IGbNEimlTPDvq+wTAqlt6Vy78X4hvRq0tugIRybJQFz58c/7ZahRfAE3wTZN25zwSj+jVCQ X-Received: by 2002:a05:622a:11c5:b0:412:191c:ffa with SMTP id n5-20020a05622a11c500b00412191c0ffamr23323803qtk.26.1699016269579; Fri, 03 Nov 2023 05:57:49 -0700 (PDT) ARC-Seal: i=3; a=rsa-sha256; t=1699016269; cv=pass; d=google.com; s=arc-20160816; b=idFFrP7Y4QDgB4zJjvl2ARfOCzeo/y9UIZSZj8LCNZdu1ACCfGjs614ccuJNGXx20V hehDdN89rsIJ4+xOjCmAfnMXlcPN0V1eM6KOnLhJ0qZotvtjFiYiGFFD1jmPzfwRd/Rg vyCLCrdalMlNZIIc3JASuuipQHKf61r/UkMZdE68PpSoZYY5/fknldhNsXAlffPuaJSR Ez6aENsjpBTHLpb927+ewXzo5udk536EaFkNk1LtCj+KnqTjT2I/23hU4XcvBGx6d5s5 9grMdNIl8wq/+MNMRTnuar0JKLZSIbf2mIQJt7o/10N2G3TlKDzs5UtmgmaWeqROsIFq zumg== ARC-Message-Signature: i=3; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=errors-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:mime-version :content-transfer-encoding:in-reply-to:references:cc:to:from :content-language:subject:user-agent:date:message-id:dkim-signature :arc-filter:dmarc-filter:delivered-to; bh=z2Ntqes/QnDCZrpJpCg2AbQJgSjp4zZ+wOhhoOXu9Pg=; fh=VT6N6QD4amIFxZr9T34bK4bL2a91CdTGSC+SgZliO78=; b=f5jwzBRsXkyC/9IfiPGZEO+QHaWEtSJ/6sZDJ6MhIt7VfwH+TGzXUdLAHn7d5CooHQ JaLOoZ9yBnKX6QW/PsdBXR/byxoPmkS0kNzTcSXSq8WCCZG56Ub+rQR40QGzY58NoaFz 2Zg1kgBYujR7Awr765F+/+5Q7IWBqfWkHWLxK3tuGYSGij+U0lDzVpa6PLcAYEj/R0Av 1EFSsjnkXuajnGZ624I2O8+Vml6/mKRPSTSHmimfVnyvPofhz9+CjCFEFCHlguArr0cP hoiWfRqIZ/2ljsKD+6fa8F1Nhn4Z/QbUzN6i29NGlQjC5IRHGIsPQ9ndtMh08GCnfk21 HsrQ== ARC-Authentication-Results: i=3; mx.google.com; dkim=pass header.i=@suse.com header.s=selector1 header.b="yV/parna"; arc=pass (i=2); spf=pass (google.com: domain of binutils-bounces+ouuuleilei=gmail.com@sourceware.org designates 8.43.85.97 as permitted sender) smtp.mailfrom="binutils-bounces+ouuuleilei=gmail.com@sourceware.org"; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=suse.com Received: from server2.sourceware.org (server2.sourceware.org. [8.43.85.97]) by mx.google.com with ESMTPS id c7-20020a05622a058700b00417fa5bd43dsi1363166qtb.314.2023.11.03.05.57.49 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 03 Nov 2023 05:57:49 -0700 (PDT) Received-SPF: pass (google.com: domain of binutils-bounces+ouuuleilei=gmail.com@sourceware.org designates 8.43.85.97 as permitted sender) client-ip=8.43.85.97; Authentication-Results: mx.google.com; dkim=pass header.i=@suse.com header.s=selector1 header.b="yV/parna"; arc=pass (i=2); spf=pass (google.com: domain of binutils-bounces+ouuuleilei=gmail.com@sourceware.org designates 8.43.85.97 as permitted sender) smtp.mailfrom="binutils-bounces+ouuuleilei=gmail.com@sourceware.org"; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=suse.com Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 21BD73858408 for ; Fri, 3 Nov 2023 12:57:48 +0000 (GMT) X-Original-To: binutils@sourceware.org Delivered-To: binutils@sourceware.org Received: from EUR01-HE1-obe.outbound.protection.outlook.com (mail-he1eur01on2048.outbound.protection.outlook.com [40.107.13.48]) by sourceware.org (Postfix) with ESMTPS id 729B93857C44 for ; Fri, 3 Nov 2023 12:57:32 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 729B93857C44 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 729B93857C44 Authentication-Results: server2.sourceware.org; arc=pass smtp.remote-ip=40.107.13.48 ARC-Seal: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1699016262; cv=pass; b=pQuUq+BYYeXi73z9pD3IQv8Vlgn5bs9hkQEmYB/D4tea6yR33xQjLJ/EsZB3haH3zixGzWh7BmhMFGXcH6OU4NsgHKiKLCAQANMMc4Hj24i/7+Da4IVCLwQr3vty9Tm4/e/yNYCjf5MrryyZDTpNW+pWPscOdocRs9uh0f8n3Ag= ARC-Message-Signature: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1699016262; c=relaxed/simple; bh=HvB34q4GRgU2hRRzb0kAl0YNVjerGDcAkAbSVkMWeLw=; h=DKIM-Signature:Message-ID:Date:Subject:From:To:MIME-Version; b=e0wxq31fNjCCTAzhvzaP1QqMQwR9lCw/YvopijDBZwBQmVs/y/4tP44wuqsjO/+AFV0+uQ9wtHGyCH5hchWapBVHaMSC/F0Y4Vp938aCJ7XtPW3NatzKkqNmBv/uh4F86bxwF14CCSfQqA/FTsIO85BM198TSGSN61eADd3lBWc= ARC-Authentication-Results: i=2; server2.sourceware.org ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=CLBl8WQXv3YjCd4uCzf6jqhBkGn7WuMxQfL1kCHAgS3fs9nmBRrxkV9PvWvhr/G9aQDRjhRgS3uS03Tz7h+X40jbwXo06/HHy3QWoOb3UNyRFZ/Yc7IjAAQRy7Q2uQgNnL69mwotUVX65wdOiAW1BbqpLsYTjyEiEWaWdF13vjWXzk1JubQ77MkvW2MeOUpC91Bq1O4Lb8tfgrAaUMIhR8GkeuSSoQwGJ0YiJu0/dEMIYrSgkZ2XqEia/njyDEb17IYLDupPAxGzzfUUmBmYaOy/DTOS6BtKVN8jZEDVLVj12ldF3gdJRfY3OHx0JCaFjI2OS5Ab6KVJg6YjItE/tA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=z2Ntqes/QnDCZrpJpCg2AbQJgSjp4zZ+wOhhoOXu9Pg=; b=Zs/adTRHCe7X4nj/Y6cN4cY4h1yMiwS14fbyM3wjNhqJV8LheIK24Ls6RyB3ffUIQBQK83L0W+jLrB2jEqdLW0atpUOxwsaZ0k+zRtBzz015LAeEGy4XG6soxi0bDI1frCQdAHULA1SzSu2Qibamq2rHEYFEzymx8ymCerXmm5GhG167RRTHzRY94aB+RjtGLjJCq7GnFi0+K+DJ2dK7O6BjbPnSd6Aq31zAER6zK0GlWFndgzOeu/PEdF5IQOfSfYiqS5Arm7yPlzYnzte5j8gcivXBu5gcVRd7PusBji6mxm6P5cM+fpoND8YZOXeor/t2jr8zYNBQpa/m9Ajovg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com; dkim=pass header.d=suse.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=z2Ntqes/QnDCZrpJpCg2AbQJgSjp4zZ+wOhhoOXu9Pg=; b=yV/parnaKXRDEcTDMoERIEew9K2i9f5kpMhVbqJKsCP6XA8ibUz4KGcNpRcoS8pkwezxSOG2f+oD7Kwa2i/GINDzlLTEGiyaWqUInVD1lEWam/6M2Ipgn8s4xsrR4ktpwXzqCM01H3SuawSXSsbvq8iGlSD4Nh+2dHVPzRa0/zqqAu8CrnCGax2OGwO/QdBU6DHj4QfpA+jzkfz4B1et9Q1VI2FPPaH80CYNXGslZHVX30ZbbTitE6KA9soTRQiOEwFeJCuohbW3p6wA5sTrmXBQXp1IQ0CzyT0Flxcmjc+7AWiEK4F0tSRBinTiO2WJODFNsV0gRFZklSffIak+WQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com; Received: from DU2PR04MB8790.eurprd04.prod.outlook.com (2603:10a6:10:2e1::23) by AM0PR04MB6802.eurprd04.prod.outlook.com (2603:10a6:208:184::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6933.19; Fri, 3 Nov 2023 12:57:28 +0000 Received: from DU2PR04MB8790.eurprd04.prod.outlook.com ([fe80::d924:b650:a2ad:7b25]) by DU2PR04MB8790.eurprd04.prod.outlook.com ([fe80::d924:b650:a2ad:7b25%3]) with mapi id 15.20.6954.019; Fri, 3 Nov 2023 12:57:25 +0000 Message-ID: Date: Fri, 3 Nov 2023 13:57:23 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.15.1 Subject: [PATCH 2/2] RISC-V: reduce redundancy in sign/zero extension macro insn handling Content-Language: en-US From: Jan Beulich To: Binutils Cc: Palmer Dabbelt , Andrew Waterman , Jim Wilson , Nelson Chu References: <8255d3af-23e4-054d-be6c-28fae6a76ea0@suse.com> In-Reply-To: <8255d3af-23e4-054d-be6c-28fae6a76ea0@suse.com> X-ClientProxiedBy: FR4P281CA0238.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:e9::17) To DU2PR04MB8790.eurprd04.prod.outlook.com (2603:10a6:10:2e1::23) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DU2PR04MB8790:EE_|AM0PR04MB6802:EE_ X-MS-Office365-Filtering-Correlation-Id: ff6cc160-be89-47c9-2b96-08dbdc6c6d99 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 6uTAoEMtW21/8EOl+5AJYdEOrbK4krWFTgQnRVpFIMrpnoP7UFkt1XOShLz4zMk9rwT16k8un78Sp63q8F5Vrun1ks/a0cLRsr5MPzdTsjiBWF+oVO9T0GvnE5hmnJXY/sf+G8W3e5ThYC4v+ED+suW86hQKWhhadGSxxKxl9Czc4CFy2d+kF4li1pdRmnSRWZHTmjDTg70RgDjEMjYbtuER7xzHjafKQNsK+JClP8PEQ1fQhQxd1bc1r9l+uCgzVqCtfJ81dJ1wftwWO2WWud6eHnrVFXld9UZcAihmtJJOYSkybLAni6RCjN8syk3ubDPwXAaff/Agymm2QUIxtx4LR7xU+Yx0B8Jm5k7yoB6CvM/ZvIG0DLfNDfhe7TF26MKHYpmS6RERzerVRoExsTbz9oSFokl+biF4mClswnyZqs5FXt2OHPhxjiZk7lPJ/kr14U86qR3J4kULgXogV3o4961yarHqArP8NoABqvrqf1IplO9z0Dpc19ihStdWtXb8ZQBDhdmccLKdwjraNGJJAduiyKxr4iV+EBfQdrimADkPFe9EVrnW3KEvXSNHctwYvsKfik16wm+3ZkC2bQJcywmqT85RFuSZWIfjzPtcijVj775/kIbS5mdrt7UpdTHsyimGiS2CwyBC4sHtVA== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:DU2PR04MB8790.eurprd04.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230031)(136003)(39860400002)(366004)(396003)(376002)(346002)(230922051799003)(186009)(64100799003)(1800799009)(451199024)(26005)(86362001)(36756003)(31696002)(38100700002)(316002)(8936002)(2906002)(31686004)(5660300002)(66946007)(41300700001)(6506007)(66476007)(2616005)(66556008)(6916009)(54906003)(4326008)(6512007)(8676002)(478600001)(6486002)(45980500001)(43740500002); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?yip1ytrIC1behv1sOJz5WP4xdq6S?= =?utf-8?q?PNpzUKsGhPJp/h6i1fyLKYaC1stk5aomMmSSjO4WWCgaTiPMXz3TiKkxA2nP0D0v3?= =?utf-8?q?n7xQnov7sRqf4SxB6oFEUt7SspSwS3s2Z5gfFqyP5ph34W0PlFDgl86f9GWjjoozI?= =?utf-8?q?6B5kNHNT+x7hvB0xqgJwoDSLH1s6P6btHMK4OJE2u5H7u9fGOJmhhbNRT8DvY6e7n?= =?utf-8?q?4dAfl7kGpFMEa9OPLKM/31xZp1Kcou7IPoauhttsmTOb+wvbfQ/Kt9uWxFKib5KMm?= =?utf-8?q?+9dH/1krltycC7GgvFETIrcRLlrXYqDZy7L9oPhfc5SRw6pJu7PMgfOSqBDrOKgxr?= =?utf-8?q?79CmQtqB2DaLT/yFJjWKwX1fMeG4H2cXVzlR3wsEgMoyq+plyJG+tJoxHY5l2PGmT?= =?utf-8?q?5pZFE2JnNpFPbMKIWyhkWo7jrmGKl39RL/Tu4ITi3aQ5hxM94bLRfXrfQUU3BaSZh?= =?utf-8?q?RZSyxCaVMmIW9trCf+yb3Rn+zKi1GGYrxa8y3ux+TH5rK92qNFlWN9qz1D+MzNWeW?= =?utf-8?q?Hb/tfkjESlC/Y391ZII2K/sLgIgs07rigp+cAi5zhS7ytGekxkgehfUtPepBbBo+q?= =?utf-8?q?556/+uj+2DTHzFoXBKiN5GI6ka0GImmEV2KVDqwmjfGJHdKwYnDkDJ1XFua7RlgW7?= =?utf-8?q?D0E9x9zhEpQLFzidXytvIkp6t4ugEgELrsSjngWUVLMN3hvxDvTczqY3dwg6VwOpj?= =?utf-8?q?1rbxEIip0u8uSf1A7yHzCdNebwVfHRZeTPeQR3j5iwcR4WN/N4HoCJ45lO4WnDHZ1?= =?utf-8?q?0qZFQ2m1TcKJY0rlWyt/+CRNRvgryHsgH5ZhwYfsk1X+nSgEkGRj79w40B/f1hXBX?= =?utf-8?q?ZTztRMlBLlQZ4hxYvvdqaqXTMtSvuqWDSus6h89cGe8YG3tdHA4g8NAs+LVocaVLg?= =?utf-8?q?32ERpcf44lulTJ8edgrYQ0Jsz397J27iUtvbJTL7sjZRrKp1D9T+Y/UnEVuGqrB5Z?= =?utf-8?q?RNbzX/Rw8Fl8MienkVhJLcWO8VWIcmPzJ5WfPnc9GM1H1rDzvbDbtFtl/WETqH8iH?= =?utf-8?q?JIp6RFpMoBOSZOpPK7CusdgikZl0s5bTRunS1XMWcFn5b1/qYR8YOQk5E5jWvKj6X?= =?utf-8?q?WmA3eTB+gTFSSyJ91GLNLsbqLM+JLxyvas/W2g8+oOuy0OT0VdB4pmycXKawx6VL8?= =?utf-8?q?xDtjeGpMcYiXAIVNpyOz5imy2UixuwdmsusgJ2sdo16ZxFsxcx5KXvji38UzZhbWT?= =?utf-8?q?+v+33uIkUOqn/aYoZAZ+ae2uED5V1XoAl2qszVIuxtaaQhQdttDpDUNdTyJtQxcLh?= =?utf-8?q?Jx6IqJiaCu8ggNIw9MfUBxpXmKAzscQ19kS7+nM+pIieGYdirtxVo4rvldojXJqee?= =?utf-8?q?XsmqlPG5j2SuTFZfEE4+RCgvX6XJk62e8MnLlObSPgYIkY4IDb9DLo6dSTfElDaJ9?= =?utf-8?q?1HjYMj8NRua7/Vr09HWwOUtSnS9/fFhcuRAmvjeb4MglhS08mkF/uc4IGWZwqVToQ?= =?utf-8?q?zWInvZ6tJs6gmpXmHSyWPOwyYx9bMQQeAumcq+pDUgdK0E+S2twFbF7djDuphIRI/?= =?utf-8?q?jaF6ULEhF7Ae?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: ff6cc160-be89-47c9-2b96-08dbdc6c6d99 X-MS-Exchange-CrossTenant-AuthSource: DU2PR04MB8790.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Nov 2023 12:57:25.7503 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: co5AX9Z1bTNZx8fqE1KFooWRMCd1zzfLxVknTC2/e92VVp7Xv/SkES1l5NNe7/Bze8sTYDMUxmtF3mnfOpZPZA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR04MB6802 X-Spam-Status: No, score=-3026.6 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SPF_HELO_PASS, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.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+ouuuleilei=gmail.com@sourceware.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1781547683948260108 X-GMAIL-MSGID: 1781547683948260108 Fold M_{S,Z}EXTH, deriving signed-ness from the incoming mnemonic. Fold riscv_ext()'s calls md_assemblef(), the first of which were entirely identical, while the other pair differed in just a single character. --- a/gas/config/tc-riscv.c +++ b/gas/config/tc-riscv.c @@ -1942,16 +1942,9 @@ load_const (int reg, expressionS *ep) static void riscv_ext (int destreg, int srcreg, unsigned shift, bool sign) { - if (sign) - { - md_assemblef ("slli x%d, x%d, 0x%x", destreg, srcreg, shift); - md_assemblef ("srai x%d, x%d, 0x%x", destreg, destreg, shift); - } - else - { - md_assemblef ("slli x%d, x%d, 0x%x", destreg, srcreg, shift); - md_assemblef ("srli x%d, x%d, 0x%x", destreg, destreg, shift); - } + md_assemblef ("slli x%d, x%d, %#x", destreg, srcreg, shift); + md_assemblef ("sr%ci x%d, x%d, %#x", + sign ? 'a' : 'l', destreg, destreg, shift); } /* Expand RISC-V Vector macros into one or more instructions. */ @@ -2075,8 +2068,8 @@ macro (struct riscv_cl_insn *ip, express riscv_call (rd, rs1, imm_expr, *imm_reloc); break; - case M_ZEXTH: - riscv_ext (rd, rs1, xlen - 16, false); + case M_EXTH: + riscv_ext (rd, rs1, xlen - 16, *ip->insn_mo->name == 's'); break; case M_ZEXTW: @@ -2087,10 +2080,6 @@ macro (struct riscv_cl_insn *ip, express riscv_ext (rd, rs1, xlen - 8, true); break; - case M_SEXTH: - riscv_ext (rd, rs1, xlen - 16, true); - break; - case M_VMSGE: vector_macro (ip); break; --- a/include/opcode/riscv.h +++ b/include/opcode/riscv.h @@ -544,10 +544,9 @@ enum M_CALL, M_J, M_LI, - M_ZEXTH, + M_EXTH, M_ZEXTW, M_SEXTB, - M_SEXTH, M_VMSGE, M_NUM_MACROS }; --- a/opcodes/riscv-opc.c +++ b/opcodes/riscv-opc.c @@ -1042,11 +1042,11 @@ const struct riscv_opcode riscv_opcodes[ {"sext.b", 0, INSN_CLASS_I, "d,s", 0, (int) M_SEXTB, NULL, INSN_MACRO }, {"sext.h", 0, INSN_CLASS_ZCB_AND_ZBB, "Cs,Cw", MATCH_C_SEXT_H, MASK_C_SEXT_H, match_opcode, INSN_ALIAS }, {"sext.h", 0, INSN_CLASS_ZBB, "d,s", MATCH_SEXT_H, MASK_SEXT_H, match_opcode, 0 }, -{"sext.h", 0, INSN_CLASS_I, "d,s", 0, (int) M_SEXTH, NULL, INSN_MACRO }, +{"sext.h", 0, INSN_CLASS_I, "d,s", 0, (int) M_EXTH, NULL, INSN_MACRO }, {"zext.h", 0, INSN_CLASS_ZCB_AND_ZBB, "Cs,Cw", MATCH_C_ZEXT_H, MASK_C_ZEXT_H, match_opcode, INSN_ALIAS }, {"zext.h", 32, INSN_CLASS_ZBB, "d,s", MATCH_PACK, MASK_PACK | MASK_RS2, match_opcode, 0 }, {"zext.h", 64, INSN_CLASS_ZBB, "d,s", MATCH_PACKW, MASK_PACKW | MASK_RS2, match_opcode, 0 }, -{"zext.h", 0, INSN_CLASS_I, "d,s", 0, (int) M_ZEXTH, NULL, INSN_MACRO }, +{"zext.h", 0, INSN_CLASS_I, "d,s", 0, (int) M_EXTH, NULL, INSN_MACRO }, {"orc.b", 0, INSN_CLASS_ZBB, "d,s", MATCH_GORCI | MATCH_SHAMT_ORC_B, MASK_GORCI | MASK_SHAMT, match_opcode, 0 }, {"clzw", 64, INSN_CLASS_ZBB, "d,s", MATCH_CLZW, MASK_CLZW, match_opcode, 0 }, {"ctzw", 64, INSN_CLASS_ZBB, "d,s", MATCH_CTZW, MASK_CTZW, match_opcode, 0 },