From patchwork Mon Oct 30 14:47:49 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Beulich X-Patchwork-Id: 159774 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:d641:0:b0:403:3b70:6f57 with SMTP id cy1csp2271418vqb; Mon, 30 Oct 2023 07:48:01 -0700 (PDT) X-Google-Smtp-Source: AGHT+IEjc6e2VE2B+onG8be71NYRoa+MDtmrO3M1k3u8ghPZs+4y2OJJk4127gqC+jNT2acH1I67 X-Received: by 2002:ac8:5906:0:b0:41c:c588:b821 with SMTP id 6-20020ac85906000000b0041cc588b821mr14659754qty.25.1698677280807; Mon, 30 Oct 2023 07:48:00 -0700 (PDT) ARC-Seal: i=3; a=rsa-sha256; t=1698677280; cv=pass; d=google.com; s=arc-20160816; b=eit0ZpIDh1BiiMeRw5o97njEZ7VN+1AI3aeCQMJ/lp0APvjPWivYAM/Hz7zIMAQB3O EYefo/b4FYnEuakRurrlS82G4GqygBnC+mXtF4egd8d+VEM6Ba3FN+HWMyiKZMJaUwOp g5vsU1qhsOUx2q7SnhBINiCWpmb5wOZ3zhvXNxDtRO4W+cVWvITTDasflXnMn2H+zVme P4v+mi4kyrM1IxMkPsMdBA25g1+RCRoVNfpj/4Cg75nPYCYqxL4O7UYAEFmeoC0DuAy7 uMp3qlADW11iogrFhHN/UqMzZULvSKcGVFFgmOiOhrxZ9NXExxWXDJPv7wYlx72lHJYg WtxA== 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=c5F9a51Jggvqzb/bHSKDGldKSnVFIVHMo5X+Efg/dec=; fh=VT6N6QD4amIFxZr9T34bK4bL2a91CdTGSC+SgZliO78=; b=zIReUpcEN15k17H4zZ8/lxBm1XtQhoPYeHFvHP89GnKHnkYNXNDGnXNX747fba4+1Z pfGCwSJUtdjGnsrerFfi6V04LxxQkjjLKdHC7heKMUdHwh1F8JSHy78kO2TobtYRQp5K oDFwllruR2zCyLLw0/8Xo9IZt+KWCZ8JoG1hb6yXyQfoG94hrpka+duL0Rs2jHi4Cri1 K/Vu1vJXnuTdOOoTd/idF5BtTDUfvAJougqJapRYMS0mNkxNRVU1yCI/KAALa2X8fQmN vKpn4mSAruI+YV1i9A58xDZBLBi9v2XV8+KMLiDxAZBoyk7LEDmsfyvE7d1u3z8t2w7D LWiQ== ARC-Authentication-Results: i=3; mx.google.com; dkim=pass header.i=@suse.com header.s=selector1 header.b=12wRxpmJ; arc=pass (i=2); spf=pass (google.com: domain of binutils-bounces+ouuuleilei=gmail.com@sourceware.org designates 2620:52:3:1:0:246e:9693:128c 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. [2620:52:3:1:0:246e:9693:128c]) by mx.google.com with ESMTPS id e22-20020a05622a111600b004122c43463asi5657535qty.806.2023.10.30.07.48.00 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 30 Oct 2023 07:48:00 -0700 (PDT) Received-SPF: pass (google.com: domain of binutils-bounces+ouuuleilei=gmail.com@sourceware.org designates 2620:52:3:1:0:246e:9693:128c as permitted sender) client-ip=2620:52:3:1:0:246e:9693:128c; Authentication-Results: mx.google.com; dkim=pass header.i=@suse.com header.s=selector1 header.b=12wRxpmJ; arc=pass (i=2); spf=pass (google.com: domain of binutils-bounces+ouuuleilei=gmail.com@sourceware.org designates 2620:52:3:1:0:246e:9693:128c 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 6C1D93865C2B for ; Mon, 30 Oct 2023 14:47:57 +0000 (GMT) X-Original-To: binutils@sourceware.org Delivered-To: binutils@sourceware.org Received: from EUR05-VI1-obe.outbound.protection.outlook.com (mail-vi1eur05on2078.outbound.protection.outlook.com [40.107.21.78]) by sourceware.org (Postfix) with ESMTPS id BE21B3861936 for ; Mon, 30 Oct 2023 14:47:50 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org BE21B3861936 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 BE21B3861936 Authentication-Results: server2.sourceware.org; arc=pass smtp.remote-ip=40.107.21.78 ARC-Seal: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1698677273; cv=pass; b=UBTK2GMGRVdJFgZr7gMDLbDw9BDsqI37tboSNj15kfaAC1BsWXMzZmNOPv/rc5EB+IchqDzoT++ZQWimjruYP8yfs51mOhac6C8W7oXJvCGe8v4p9qaj9o0hXtpwJZt7h11P44uNiPJ/5nYVyWoJAhIogPFBgaGumnkb08VE/YY= ARC-Message-Signature: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1698677273; c=relaxed/simple; bh=VVzNcaAsTtFlAd1HvNUEFAkPHzuH7tCaQlwZ1VMmTIY=; h=DKIM-Signature:Message-ID:Date:Subject:From:To:MIME-Version; b=VNg8Tl+n/X/vwBYvf+ry8N69ah4G6equNkTpia93aYSm/tGH/JjVigOC+FYnub0uFwxYg/VObbSD24W4unUmk+lNFTPot1UT/AbSgEslxvw+bxZkVEFEE9UvHhrmPYPj92aVLJKaQXFBlMM81iobGeRAOLCvVFq1igdwkdVWd2k= ARC-Authentication-Results: i=2; server2.sourceware.org ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=PFfQa745vL+VM3tx7zY5kSjGOcQHZQZAebj3MTmVSqyC5fuP54SoAxlsjjShBA0uodi/ZVtktP4xujy4Sh6fZ3tOLf8s6cbmjeeMnd6hefEGUbLwDzrbaBWFnBZqAEE3sYpDkUsTs2PbULgmhuPS+2sJyR10XrgTqmleUJn6LoxuxvkFDILA6RuXtzIcRCaISDUI3mkUyf1ju5Cr0PI1Sqvw8mGfuMYSugO3kTFGCFyDTglXWONRXW/RE+x6VSyhvILnDzCd4VCM2cudCmiKgkKmESG0uuxKPIIIaEMohlsk8BxzGylVWQ8ta98wOdNV0sjj6+7kV9zC6mynqNlJKw== 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=c5F9a51Jggvqzb/bHSKDGldKSnVFIVHMo5X+Efg/dec=; b=OS0WVyRyHsK0mWBrBuY3aOWexpVX6JoCNWYWpl/r4QAveLcX5D2TViP8HRvOwe+sdHElpxtRlJf5rUXW4X/biC0R9f6X2douFOlrON5uudUMaM9UqMY5x3Q5DLW5tPfFRn56KgmgSXGDDw5e6/MgjxMc9BLX80xMquXf0b/v6X1xwUUoFEf5HOGvr1rYS+Y9nsk5ypglIY2mf5F3SLKN+aVT3O/FlA0As68Npyj5WIPivhAgRbFBiEZ8n13p8DJWUeMDPMXpn4t6/QixcKbbuJjPsuu6qaKwbEJziBtojWGxpjtQPTBVyvSA8AuEtkjjRqmS28VCjGNc3MCDuhCfHQ== 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=c5F9a51Jggvqzb/bHSKDGldKSnVFIVHMo5X+Efg/dec=; b=12wRxpmJPhoUMf0tlGyrknqc2AEfRcysveyO/gJ/1OeEw9zhLj57K+3pcCKS9t4K+GU1hXt1E/mxYZ/qZTp3k9F6beRpc+r+Oq88BR2Ax52Wy1aATbNnVnuJIGTDHQwAjx3mYkwLdZdNVdqU4w+6/PNiah6uxL6MDHwxCqs2MpFf3stb2d4eNP+8oiH2NwbkZn4tZmourSBhabbtiBN1EjidWFshglNyinW//VheCgW0+N7+DSQj7OPbGu6vloyXj17pUI3k/IvMXtaY9qWk9RYqIwM1spzrHZfoJ+wqw6uvJQOkOesFMYEJq6JuuqTGq4SYYN8jjqax4smTkkQkAA== 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 GV1PR04MB9182.eurprd04.prod.outlook.com (2603:10a6:150:26::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6954.16; Mon, 30 Oct 2023 14:47:48 +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.016; Mon, 30 Oct 2023 14:47:48 +0000 Message-ID: <9d490a97-1313-ff7e-53a8-8410836bc22c@suse.com> Date: Mon, 30 Oct 2023 15:47:49 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.15.1 Subject: [PATCH 4/4] RISC-V: reduce redundancy in load/store macro insn handling Content-Language: en-US From: Jan Beulich To: Binutils Cc: Palmer Dabbelt , Andrew Waterman , Jim Wilson , Nelson Chu References: In-Reply-To: X-ClientProxiedBy: FR5P281CA0056.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:f0::19) To DU2PR04MB8790.eurprd04.prod.outlook.com (2603:10a6:10:2e1::23) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DU2PR04MB8790:EE_|GV1PR04MB9182:EE_ X-MS-Office365-Filtering-Correlation-Id: ab832ec8-b976-42f7-e091-08dbd9572f28 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: Jll6bSE1HgyPezsDeItZyjRkeDMZPL3WRHSIcnLu1BFu9qKnxtSt1HhXt/vDhdvNXc59Qw0wsgns9k0QN6WU1VdMO2IsHpfIwLa32C5WoY6ay/5wGqnN6P2UWzKaaZrKrro/nn0tLORzGO7PWzlZal0GkQtkIZSWP78mvMRh8J2kCJlgUJJlI2Bu7/tjauhWc4W2QNPCcjLpxhcIIaaVsVYA1WU6tNtVclnMJIbnkdnVF5Da58oQcxzZXin2OTBHgHoQeb0mxbkiR3Eqh4++pFe4+PwG2ugEX0klonQyZE6klJrLv4hx52C3mPVt37QHAlZNcELEq71yI11p60xt+xUW3o1VuQ9OYw+X0qJyBwmt8NUhW7QFGr/C/6LHYdAjBmj2OyKhcwwkSMMxJrkg34u+3mRBmWducBK1Hs8AFkz9cvhbdRlfzf+RkczySPr/y2kiE5urTLBdfwroIed8vVOgaMpUyRDQGHn5YGMNILindVvD9lu4Jssiu+JyWfZ2de0KMWnYYVgiGFYIbkxMuoEwms9B3qPXGHjIuQ63cH3SeTAclt8yiKbB8Fpw4ZgkKpzgmgSZ4fjgg+yoHyLLYNPtccgozye6IzdhecumdSwSaYcgLxhFokWa3niOX59Ny5vhsSHXVs1/UOr7OMAIzg== 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)(39860400002)(136003)(396003)(346002)(366004)(376002)(230922051799003)(186009)(451199024)(1800799009)(64100799003)(26005)(54906003)(66556008)(66476007)(6916009)(38100700002)(30864003)(5660300002)(2616005)(316002)(66946007)(8676002)(4326008)(8936002)(6506007)(41300700001)(6512007)(2906002)(6486002)(478600001)(36756003)(86362001)(31696002)(31686004)(43740500002)(45980500001); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?enB3+rvbbFnWPa3XYG4kFgk8tzqc?= =?utf-8?q?zo4EYBolumw+NpfHR160NDz2hSTa+xW53jCS5RrF6VL5JHKy6tlV/0DJKDynhxH9F?= =?utf-8?q?8QBCO2cX6aGIsprQrdDFHBR8n+dH2btKl2On18c6GH7+5nF2rnrTJZIhrbpB6JxXq?= =?utf-8?q?b0YIJdIbZEGPTvpUq9N69tHQog+L0JrBUWDlYlWrIElst4FZRIbuMaK+5LJbitpVP?= =?utf-8?q?krp9yXuDfN3cYg1iJu/9jI2mTMO2fORqWVc1Opxg5P7zwW09VD+Gxd/A/UrkjU1zX?= =?utf-8?q?Z6KilJO9YbHQDeo7C16+I1AjD2+UsAW8brWJ0GnU33zmxbmKBsHRx5Pj9v4ZlyhQc?= =?utf-8?q?Zz2xq5+Hgr47tCk8jkqSEuVPODoNWkIeR5r1k8y/yua2smXkwaM4JX9uQES2SUdfP?= =?utf-8?q?6CeeFs4NhM8NpxeHTnY8VakSMt8K+vdKDAm+A2r0tLfKhc4x2/5QJpoveIMjcaaFl?= =?utf-8?q?/qGMDt8gExzZZ3obZjh9WJdVWyvnDRRpoZOD/KJmOaVWLdS9aYyUfyARPzQK7Voq2?= =?utf-8?q?90xnwA2qC5xyCuQJGTNemIlAo/AiviUtdqsLbHCat2VKV1k0sQAcjIq1876Pv31qp?= =?utf-8?q?A4D9XG1okUXmRb1UdA0ls1Fc6S+eh54TWbhtbs2gb6pjZf9h8RLcgq1H1N6cudn6+?= =?utf-8?q?c1QFIn1TXP8F1pIxxLjeSO/VAjlpab87DtAjEWHBZ8FtK76astWFuyAi0Q7Tl7W7k?= =?utf-8?q?FzyAf0CwnJ5I3pk2OfhUASC7gV/L8QI2mrs1kA+ZKqDBXbKzPx3KH65uNq2y5iXv2?= =?utf-8?q?4jXKReU+39TaT2J/XMLNaNH+Z/1DDdrTvTkcdEC4oeiHvlikNmoFD8YVwP7k7tBUU?= =?utf-8?q?s6rcbjf+t1lWInYdzjX9u2ipnNgCfqbSAVd4OP4e2E9yPtRphh20L4HuIma2volZb?= =?utf-8?q?LYg93zWO8hApHsGYPAo8UGClIBbb6QB4CDjz6z0CxDIXv5MRnXSxmAwSbYpKN0Ip8?= =?utf-8?q?I9voj/ozvrJkid9JNrOvCEX9uCWgvTgznQmNwDJXDIk6ZDO0BVsK9LNQegPZO0qUC?= =?utf-8?q?SkgKPZUOgDvuSHU/sKZzWeTHMYMKucrUtYWT+Gh2P6RQUarLmiB45DMQMWLqVxq9u?= =?utf-8?q?cFvM2Bhof3ofBfHuY0yDu/LSxmN0Jbiivprjj1Gz2Buy39lWw9wuzFRecYHUsYe62?= =?utf-8?q?hTNhKMx7if6g+k3haeD0cyT2ZOtjho79qRoWHjA1ror09cV7pbj9IkceKfXc6Dvs0?= =?utf-8?q?IgzBP4MG1DFW4zdiFujkgO86Y4SIi4JaWG1XNzKVgJcM/cKFNccRpsvGdGDBhr3bP?= =?utf-8?q?PjKqbyC42njXO5OUV/eFIsl4hteXEr9TWfsJ5WBJ/CLiWhvTxlqGzCArUeGX1WtV/?= =?utf-8?q?qsClgBlNfMs9fB0sheuSOOz+KBuvkkqc2rbesDQ88mKAf7G6pQ5tDJnXivejUl5Oj?= =?utf-8?q?m/4WSp5QX6zzUjrq/dRbTnbyFGGVRsp+1/Np+H8O6PTPBcM1Og5NNw1KhEVRikU8h?= =?utf-8?q?KDbddzmU+rVBg91sYJ8KGoQaz4I1lNMwm67wE/b6J4tx3a/RM9aMz7C4iME7VuQiO?= =?utf-8?q?lJjixSXBv/nc?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: ab832ec8-b976-42f7-e091-08dbd9572f28 X-MS-Exchange-CrossTenant-AuthSource: DU2PR04MB8790.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 30 Oct 2023 14:47:48.0801 (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: VUvHamNvK5wOZ2wY25RPzAFhNg6Dc7eLX2xPtNNcpFkWaOQlTQRPgxjQBw7uiYkmfN1oh28RPaKSfKBcBQxY9g== X-MS-Exchange-Transport-CrossTenantHeadersStamped: GV1PR04MB9182 X-Spam-Status: No, score=-3027.1 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, 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: 1781192228807600612 X-GMAIL-MSGID: 1781192228807600612 Within the groups L{B,BU,H,HU,W,WU,D}, S{B,H,W,D}, FL{H,W,D,Q}, and FS{H,W,D,Q} the sole difference between the handling is the insn mnemonic passed to the common handling functions. The intended mnemonic, however, can easily be retrieved. Furthermore leverags that Sx and FSx are then handled identically, too, and hence their cases can also be folded. --- a/gas/config/tc-riscv.c +++ b/gas/config/tc-riscv.c @@ -2056,88 +2056,18 @@ macro (struct riscv_cl_insn *ip, express BFD_RELOC_RISCV_TLS_GOT_HI20, BFD_RELOC_RISCV_PCREL_LO12_I); break; - case M_LB: - pcrel_load (rd, rd, imm_expr, "lb", + case M_Lx: + pcrel_load (rd, rd, imm_expr, ip->insn_mo->name, BFD_RELOC_RISCV_PCREL_HI20, BFD_RELOC_RISCV_PCREL_LO12_I); break; - case M_LBU: - pcrel_load (rd, rd, imm_expr, "lbu", + case M_FLx: + pcrel_load (rd, rs1, imm_expr, ip->insn_mo->name, BFD_RELOC_RISCV_PCREL_HI20, BFD_RELOC_RISCV_PCREL_LO12_I); break; - case M_LH: - pcrel_load (rd, rd, imm_expr, "lh", - BFD_RELOC_RISCV_PCREL_HI20, BFD_RELOC_RISCV_PCREL_LO12_I); - break; - - case M_LHU: - pcrel_load (rd, rd, imm_expr, "lhu", - BFD_RELOC_RISCV_PCREL_HI20, BFD_RELOC_RISCV_PCREL_LO12_I); - break; - - case M_LW: - pcrel_load (rd, rd, imm_expr, "lw", - BFD_RELOC_RISCV_PCREL_HI20, BFD_RELOC_RISCV_PCREL_LO12_I); - break; - - case M_LWU: - pcrel_load (rd, rd, imm_expr, "lwu", - BFD_RELOC_RISCV_PCREL_HI20, BFD_RELOC_RISCV_PCREL_LO12_I); - break; - - case M_LD: - pcrel_load (rd, rd, imm_expr, "ld", - BFD_RELOC_RISCV_PCREL_HI20, BFD_RELOC_RISCV_PCREL_LO12_I); - break; - - case M_FLW: - pcrel_load (rd, rs1, imm_expr, "flw", - BFD_RELOC_RISCV_PCREL_HI20, BFD_RELOC_RISCV_PCREL_LO12_I); - break; - - case M_FLD: - pcrel_load (rd, rs1, imm_expr, "fld", - BFD_RELOC_RISCV_PCREL_HI20, BFD_RELOC_RISCV_PCREL_LO12_I); - break; - - case M_FLQ: - pcrel_load (rd, rs1, imm_expr, "flq", - BFD_RELOC_RISCV_PCREL_HI20, BFD_RELOC_RISCV_PCREL_LO12_I); - break; - - case M_SB: - pcrel_store (rs2, rs1, imm_expr, "sb", - BFD_RELOC_RISCV_PCREL_HI20, BFD_RELOC_RISCV_PCREL_LO12_S); - break; - - case M_SH: - pcrel_store (rs2, rs1, imm_expr, "sh", - BFD_RELOC_RISCV_PCREL_HI20, BFD_RELOC_RISCV_PCREL_LO12_S); - break; - - case M_SW: - pcrel_store (rs2, rs1, imm_expr, "sw", - BFD_RELOC_RISCV_PCREL_HI20, BFD_RELOC_RISCV_PCREL_LO12_S); - break; - - case M_SD: - pcrel_store (rs2, rs1, imm_expr, "sd", - BFD_RELOC_RISCV_PCREL_HI20, BFD_RELOC_RISCV_PCREL_LO12_S); - break; - - case M_FSW: - pcrel_store (rs2, rs1, imm_expr, "fsw", - BFD_RELOC_RISCV_PCREL_HI20, BFD_RELOC_RISCV_PCREL_LO12_S); - break; - - case M_FSD: - pcrel_store (rs2, rs1, imm_expr, "fsd", - BFD_RELOC_RISCV_PCREL_HI20, BFD_RELOC_RISCV_PCREL_LO12_S); - break; - - case M_FSQ: - pcrel_store (rs2, rs1, imm_expr, "fsq", + case M_Sx_FSx: + pcrel_store (rs2, rs1, imm_expr, ip->insn_mo->name, BFD_RELOC_RISCV_PCREL_HI20, BFD_RELOC_RISCV_PCREL_LO12_S); break; @@ -2165,15 +2095,6 @@ macro (struct riscv_cl_insn *ip, express vector_macro (ip); break; - case M_FLH: - pcrel_load (rd, rs1, imm_expr, "flh", - BFD_RELOC_RISCV_PCREL_HI20, BFD_RELOC_RISCV_PCREL_LO12_I); - break; - case M_FSH: - pcrel_store (rs2, rs1, imm_expr, "fsh", - BFD_RELOC_RISCV_PCREL_HI20, BFD_RELOC_RISCV_PCREL_LO12_S); - break; - default: as_bad (_("internal: macro %s not implemented"), ip->insn_mo->name); break; --- a/include/opcode/riscv.h +++ b/include/opcode/riscv.h @@ -538,23 +538,9 @@ enum M_LGA, M_LA_TLS_GD, M_LA_TLS_IE, - M_LB, - M_LBU, - M_LH, - M_LHU, - M_LW, - M_LWU, - M_LD, - M_SB, - M_SH, - M_SW, - M_SD, - M_FLW, - M_FLD, - M_FLQ, - M_FSW, - M_FSD, - M_FSQ, + M_Lx, + M_FLx, + M_Sx_FSx, M_CALL, M_J, M_LI, @@ -563,8 +549,6 @@ enum M_SEXTB, M_SEXTH, M_VMSGE, - M_FLH, - M_FSH, M_NUM_MACROS }; --- a/opcodes/riscv-opc.c +++ b/opcodes/riscv-opc.c @@ -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_LB, match_never, INSN_MACRO }, +{"lb", 0, INSN_CLASS_I, "d,A", 0, (int) M_Lx, match_never, 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_LBU, match_never, INSN_MACRO }, +{"lbu", 0, INSN_CLASS_I, "d,A", 0, (int) M_Lx, match_never, 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_LH, match_never, INSN_MACRO }, +{"lh", 0, INSN_CLASS_I, "d,A", 0, (int) M_Lx, match_never, 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_LHU, match_never, INSN_MACRO }, +{"lhu", 0, INSN_CLASS_I, "d,A", 0, (int) M_Lx, match_never, 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_LW, match_never, INSN_MACRO }, +{"lw", 0, INSN_CLASS_I, "d,A", 0, (int) M_Lx, match_never, 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_SB, match_never, INSN_MACRO }, +{"sb", 0, INSN_CLASS_I, "t,A,s", 0, (int) M_Sx_FSx, match_never, 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_SH, match_never, INSN_MACRO }, +{"sh", 0, INSN_CLASS_I, "t,A,s", 0, (int) M_Sx_FSx, match_never, 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_SW, match_never, INSN_MACRO }, +{"sw", 0, INSN_CLASS_I, "t,A,s", 0, (int) M_Sx_FSx, match_never, 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_LWU, match_never, INSN_MACRO }, +{"lwu", 64, INSN_CLASS_I, "d,A", 0, (int) M_Lx, match_never, 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_LD, match_never, INSN_MACRO }, +{"ld", 64, INSN_CLASS_I, "d,A", 0, (int) M_Lx, match_never, 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_SD, match_never, INSN_MACRO }, +{"sd", 64, INSN_CLASS_I, "t,A,s", 0, (int) M_Sx_FSx, match_never, 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_FLH, match_never, INSN_MACRO }, +{"flh", 0, INSN_CLASS_ZFHMIN, "D,A,s", 0, (int) M_FLx, match_never, 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_FSH, match_never, INSN_MACRO }, +{"fsh", 0, INSN_CLASS_ZFHMIN, "T,A,s", 0, (int) M_Sx_FSx, match_never, 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_FLW, match_never, INSN_MACRO }, +{"flw", 0, INSN_CLASS_F, "D,A,s", 0, (int) M_FLx, match_never, 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_FSW, match_never, INSN_MACRO }, +{"fsw", 0, INSN_CLASS_F, "T,A,s", 0, (int) M_Sx_FSx, match_never, 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_FLD, match_never, INSN_MACRO }, +{"fld", 0, INSN_CLASS_D, "D,A,s", 0, (int) M_FLx, match_never, 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_FSD, match_never, INSN_MACRO }, +{"fsd", 0, INSN_CLASS_D, "T,A,s", 0, (int) M_Sx_FSx, match_never, 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_FLQ, match_never, INSN_MACRO }, +{"flq", 0, INSN_CLASS_Q, "D,A,s", 0, (int) M_FLx, match_never, 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_FSQ, match_never, INSN_MACRO }, +{"fsq", 0, INSN_CLASS_Q, "T,A,s", 0, (int) M_Sx_FSx, match_never, 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 },