From patchwork Fri Sep 1 12:34:17 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Beulich X-Patchwork-Id: 137391 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:c792:0:b0:3f2:4152:657d with SMTP id b18csp854107vqu; Fri, 1 Sep 2023 05:34:34 -0700 (PDT) X-Google-Smtp-Source: AGHT+IG0afSM9FIbEZX1zdFnxdMFas8LzAPmRIiRm2jZyLEHbkENcSMLUk9USPmKpfeQ0nU7dKeC X-Received: by 2002:a05:6512:522:b0:500:977d:a4e1 with SMTP id o2-20020a056512052200b00500977da4e1mr1220798lfc.40.1693571674623; Fri, 01 Sep 2023 05:34:34 -0700 (PDT) Received: from server2.sourceware.org (ip-8-43-85-97.sourceware.org. [8.43.85.97]) by mx.google.com with ESMTPS id r16-20020aa7d590000000b00527d44d0456si2617150edq.456.2023.09.01.05.34.34 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 01 Sep 2023 05:34:34 -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=@sourceware.org header.s=default header.b=JylueeYf; arc=fail (signature failed); 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=NONE sp=NONE dis=NONE) header.from=sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 6C32E3858C2B for ; Fri, 1 Sep 2023 12:34:33 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 6C32E3858C2B DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1693571673; bh=5Pvm8XKQBYRc8aTvQkXfbnh5l8Xct11OChuC608UEsk=; h=Date:To:Subject:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:From; b=JylueeYfczv5kJM46eieOxd/hcjR6TIyBB0Uqmefufkn7IPFTFnYdJQl7my4uSWb3 c1WxMkYhKN090iSMnoo7s1uCy14GHyTlvEAdv5uZkCwAT+6M7G6T7pvf1QX/n5uijc IFBmokuHqdP9eJdWrAMukqO/YKRkmCIpBGGIcPVk= X-Original-To: binutils@sourceware.org Delivered-To: binutils@sourceware.org Received: from EUR05-AM6-obe.outbound.protection.outlook.com (mail-am6eur05on2050.outbound.protection.outlook.com [40.107.22.50]) by sourceware.org (Postfix) with ESMTPS id 6EB633858C2B for ; Fri, 1 Sep 2023 12:34:22 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 6EB633858C2B ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=HYkS4TgcEBSM/Ok0lvdaWXDUzZrphyyw0te9sfxVQonlnk9fULjzAOHQdjkcNOParceB1b42WuKIPnUflO7dRHMi+zwU9oJRIkKxBFSQKts8CpkYyX2kd13XR2RyV4vZhKuqq9lrUtZ+XRq4woJWaOc2P4Halq8BaQh8lNdJQf1cgFDyrNgsbMX4Ak6c/zdC2MO7yKhbfrypyPAf/lo8x+G8txf49JkLy104+nUaEsTrlTJGHjW06GkjQwXNRAYyrwX4H09h5cofgD5SCriOvYIbqd6GhawZG2+pRiWPgu92rxJX6MwvgngTaIJVZuxlUQ6l8WuD1JOb1VuUSme+tw== 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=5Pvm8XKQBYRc8aTvQkXfbnh5l8Xct11OChuC608UEsk=; b=aGYcWt9VXm3b/JYqG9zQ3ujzumkuMd7Fzemxbc5rNWckC8fhaf1gUKtWGvsbKhcONKwwyFIOW5vWDW0Vo1YEuF3+o/UTC6tD53JuGOAEXzRJ/AsZl/s3ZceYtJttLzs2azoRE43tuljTyTLr1WtuUPdr602qoU21jNgrSVQZYN5LhV7nbY/scsUkqB32gVOX94+AMJBZmqy9BHuKgVBA6sBC95Qonojatm0QvbohsYCy8vkuOMd8x7jJi8wyK6m1JTVbov4Kxq36MefPstJkGMylxodaSciGrbxFXmY6B3KdFGMP0YMiWUctwccCmoGtxyAilxKFjyzrvxuHCV+MCg== 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 Received: from DU2PR04MB8790.eurprd04.prod.outlook.com (2603:10a6:10:2e1::23) by AM8PR04MB7940.eurprd04.prod.outlook.com (2603:10a6:20b:240::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6745.26; Fri, 1 Sep 2023 12:34:20 +0000 Received: from DU2PR04MB8790.eurprd04.prod.outlook.com ([fe80::f749:b27f:2187:6654]) by DU2PR04MB8790.eurprd04.prod.outlook.com ([fe80::f749:b27f:2187:6654%6]) with mapi id 15.20.6745.021; Fri, 1 Sep 2023 12:34:20 +0000 Message-ID: <34e8123e-1278-4e0f-7713-1fcd2bff05eb@suse.com> Date: Fri, 1 Sep 2023 14:34:17 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.14.0 Content-Language: en-US To: Binutils Subject: [PATCH] RISC-V: fold duplicate code in vector_macro() X-ClientProxiedBy: FR2P281CA0037.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:92::6) To DU2PR04MB8790.eurprd04.prod.outlook.com (2603:10a6:10:2e1::23) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DU2PR04MB8790:EE_|AM8PR04MB7940:EE_ X-MS-Office365-Filtering-Correlation-Id: b4d965c4-9323-4d97-7091-08dbaae7c3b6 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 8iKPMfgdj/OtXejwXGAd/zRWbfWGeXXXnN3U0kg7oj+o0FqF+duRX5AjeKizFBvnm+MClXDxyp1JHtQz3b08EMfExh2EMPQhDKIM6ib1KnnXIA5zqAlitLwjq+jYD5xRRvFFYG9sUGcz86jz7rIoyt0zigwRZQCjjQ6EBxv10oQADUQZbnhy7zmsNZXvK4gFuhXsFijQkMXpxbiJu5HjeyhkQoLJqXmRnzYmre4TaZD9gyrlZlskZPuAojmATZ7FxeZE0ryFpjjXiE+Wobeil0IKyLPWWNVNGwc+uD1qKNVpKctfpL85ejQ+/Bii+9zr7LAXW5nrzKo46m362R/Y4ixE6pzDM7e2MV6AoocfAmRast85I6weU664nbkuw5BJuBKaQoNqIrb/2YMtbCTgjmYzt9j8A4VsFxpMx5lAHooISAVtC7c5ZkWF2wmnRDJwyTvQz7OA4PDkWJKOmlP7vb/jKh4JXL5ZbD9uhWfdOYSqD1Di5IWd3GzX+421KElQBYe7GH7wcB59owDKx5C59IwJBEQyTYDhoXjzzE/yQmX4DbrLKzvTjauxqmFvWjJ/nCpPAsjDB3JViIkvEGJOgLP7Udl0RU3jj4fPz1oLzN3h1bM7WN83N5RoRm3Pk/FjaNkY6YeyX+kwKSGzEDslJw== 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)(366004)(376002)(396003)(39860400002)(346002)(451199024)(1800799009)(186009)(31686004)(6506007)(6512007)(6666004)(6486002)(36756003)(86362001)(31696002)(38100700002)(2616005)(2906002)(26005)(478600001)(66946007)(5660300002)(8936002)(8676002)(4326008)(6916009)(41300700001)(316002)(66556008)(66476007)(54906003)(45980500001)(43740500002); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?hwqAok5g6uohLOLBy9mIsPi7nxAj?= =?utf-8?q?gM8/eHLTgDRq32kZ3JAPbL+roPgCoBt9a98525eAZHmoCI69cPAzYB5ePX0YLCJ59?= =?utf-8?q?Bd9K4HPnK4kwXBpI7j7UnLHyj3EOa+4g2CTjd7iZ37xaC3WQU7yjAeB9sW0sv3O4B?= =?utf-8?q?FF2bxejgkBuzAWnWK4vL0EDvUaDdXCeClFEqZKoX9Tr+PY1ZRSbTUfnOTCY9xKhuv?= =?utf-8?q?i/HfcvBO+jlWeMLRQQo2EVrR1CSBNCEvkiV7P2+iHxnqNbkJGn3BrCkaiHQ/IINY+?= =?utf-8?q?O9jWt1CA/kUSL+/9oTtCkQQtA87Vg26jJazBWoUFLsbLOrbtV/MMxUm8JuLMTA8G0?= =?utf-8?q?qtDPHtxIwf57SasTxk8pUYj9wDaXB3eSQB4vyfTawT+Df9shuYE5IZfExz9nSjWoQ?= =?utf-8?q?eUtSv1PRiPesJULXs4NZk1WlcuhL7YWz9/SW0G4ERATeKm8S08eqVlaSvyFc9/Pgb?= =?utf-8?q?m1n1zgHb3UX/XyOwhEsI+q2LYJ2ZvP+LcELCYbRJsHwMROH1Jv5C5xFeK3ooc2YsI?= =?utf-8?q?anRnPrjZjFOxQlgxwVrqH5P9BpbGVq3bfNXphaXEDJqQfkxfP6Vf2hiddDL+wu3lz?= =?utf-8?q?tnjqhSkqOgcyYXU0v7nAd3+fyKSTfn6fxZv2dq+SSzrLuF5hPJWwXHZnzj4hPaSKw?= =?utf-8?q?NrZNa7Xrt6oD4DQrDTtdqeBRqjoHj+abVT+THEM58YrDystMPZrkoubCOyxBJ/YfU?= =?utf-8?q?gyoPgYk2qWLe8wEZcb26Bdm7ajvj3OdmC7fZS97pq04QUTC6qoVOoDAylEvm3WW0X?= =?utf-8?q?mGJzdtYP0HOg79Ybn4RRK07TzAM4xIB0D/Yc21e+4Mlgq31MLHMwrFB4mALphh/Iq?= =?utf-8?q?uP2a8nHHYnSn1zEYY5go6KBjtQWxmnQ86Hu+l7rc6xAMzWvvznLOzHK09h/VIsUUQ?= =?utf-8?q?clam/PmQs9Ek/iFM0RpwqwdZHSXioMmCWi0beY8SB2QD3wLkGZ+zHPYxciYbKZ5No?= =?utf-8?q?NAgV+vpTqeDJ7ULcLqgffKpmrn1rBuUwzJU9XUScZdmqbGCuazI8UKfj2FQgAHlLi?= =?utf-8?q?ow8hFFoUo0IsMeHb4Ioou4Vc9W/YoabcdbwfPTSpo/PDax6+YCTQuUw9s+qIg0zEc?= =?utf-8?q?l/yUzFdydeW8/dL7a91rYwEN+16b/OSNBdSM1OZCCeuOqxTvsukPdGJ/oZ6u6tK0Y?= =?utf-8?q?BSKqLziu8N4SgY3eY59o1FiAttV00KDUGqAqxayNgMsKel2MOX2t7AzsVUBJThCDO?= =?utf-8?q?BLkSAQBHqwmyvJaRDrFopQRQVhOgkEaJmu93JwN857gX7WhxSJblhQe53h/rKUdod?= =?utf-8?q?+fjbMIh/TJx+rb1AJWs0lcQ/188xXTYNltf9FpLvfpHD3mhgjDi08uC27H+7im1n1?= =?utf-8?q?QIHSp3Ob1oPF3dgTsXphdAljtMoeWccT5vQPGUua+dTaPYrO+KL8R3DuqPSm9jRMA?= =?utf-8?q?6yINBT9JpzCxOwvFE9FUIMXmL55P+41+Sd9fNS1BGO8yxqrVpxBwAo60wBoWScGA2?= =?utf-8?q?ShjGtoOwiCcVVsxwULb3nsPFl3BlPUjGYXRW/S2B8EwTclfr2+DLjlVxih1vrO1mt?= =?utf-8?q?3pUgFqxaRlPX?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: b4d965c4-9323-4d97-7091-08dbaae7c3b6 X-MS-Exchange-CrossTenant-AuthSource: DU2PR04MB8790.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 01 Sep 2023 12:34:20.2141 (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: yd3KFPDu44PH3M90GGC3FXWWTHVB03CLDua4pSvG7pdvAdHPKCjQjE1uHEpD8UUwMgQOkFLt+jdMpJBGJA2r6g== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM8PR04MB7940 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 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: , X-Patchwork-Original-From: Jan Beulich via Binutils From: Jan Beulich Reply-To: Jan Beulich Errors-To: binutils-bounces+ouuuleilei=gmail.com@sourceware.org Sender: "Binutils" X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1775838611789437150 X-GMAIL-MSGID: 1775838611789437150 There's no need to have almost identical code twice. Do away with M_VMSGEU and instead simply use an unused (for these macros) field to tell apart both variants. --- While looking at the code, I was wondering about the usefulness of the "mask" local variable ... I also find "macro_build (..., "Vd,Vt,sVm", vd, vs2, vs1, vm);" misleading: While the initial if() guarantees vm == 0 everywhere else in the involved code, passing an apparently non-negative value into macro_build() (when Vm expects either 0 or -1) is perhaps latently problematic. Imo it would be better to either pass literal 0 there, or to pass -vm. (Since the line is being touched anyway, I'd be happy to make the adjustment right here.) --- a/gas/config/tc-riscv.c +++ b/gas/config/tc-riscv.c @@ -1949,6 +1949,7 @@ vector_macro (struct riscv_cl_insn *ip) int vs2 = (ip->insn_opcode >> OP_SH_VS2) & OP_MASK_VS2; int vm = (ip->insn_opcode >> OP_SH_VMASK) & OP_MASK_VMASK; int vtemp = (ip->insn_opcode >> OP_SH_VFUNCT6) & OP_MASK_VFUNCT6; + const char *vmslt_vx = ip->insn_mo->match ? "vmsltu.vx" : "vmslt.vx"; int mask = ip->insn_mo->mask; switch (mask) @@ -1957,7 +1958,7 @@ vector_macro (struct riscv_cl_insn *ip) if (vm) { /* Unmasked. */ - macro_build (NULL, "vmslt.vx", "Vd,Vt,sVm", vd, vs2, vs1, -1); + macro_build (NULL, vmslt_vx, "Vd,Vt,sVm", vd, vs2, vs1, -1); macro_build (NULL, "vmnand.mm", "Vd,Vt,Vs", vd, vd, vd); break; } @@ -1966,13 +1967,13 @@ vector_macro (struct riscv_cl_insn *ip) /* Masked. Have vtemp to avoid overlap constraints. */ if (vd == vm) { - macro_build (NULL, "vmslt.vx", "Vd,Vt,sVm", vtemp, vs2, vs1, -1); + macro_build (NULL, vmslt_vx, "Vd,Vt,sVm", vtemp, vs2, vs1, -1); macro_build (NULL, "vmandnot.mm", "Vd,Vt,Vs", vd, vm, vtemp); } else { /* Preserve the value of vd if not updating by vm. */ - macro_build (NULL, "vmslt.vx", "Vd,Vt,sVm", vtemp, vs2, vs1, -1); + macro_build (NULL, vmslt_vx, "Vd,Vt,sVm", vtemp, vs2, vs1, -1); macro_build (NULL, "vmandnot.mm", "Vd,Vt,Vs", vtemp, vm, vtemp); macro_build (NULL, "vmandnot.mm", "Vd,Vt,Vs", vd, vd, vm); macro_build (NULL, "vmor.mm", "Vd,Vt,Vs", vd, vtemp, vd); @@ -1981,42 +1982,7 @@ vector_macro (struct riscv_cl_insn *ip) else if (vd != vm) { /* Masked. This may cause the vd overlaps vs2, when LMUL > 1. */ - macro_build (NULL, "vmslt.vx", "Vd,Vt,sVm", vd, vs2, vs1, vm); - macro_build (NULL, "vmxor.mm", "Vd,Vt,Vs", vd, vd, vm); - } - else - as_bad (_("must provide temp if destination overlaps mask")); - break; - - case M_VMSGEU: - if (vm) - { - /* Unmasked. */ - macro_build (NULL, "vmsltu.vx", "Vd,Vt,sVm", vd, vs2, vs1, -1); - macro_build (NULL, "vmnand.mm", "Vd,Vt,Vs", vd, vd, vd); - break; - } - if (vtemp != 0) - { - /* Masked. Have vtemp to avoid overlap constraints. */ - if (vd == vm) - { - macro_build (NULL, "vmsltu.vx", "Vd,Vt,sVm", vtemp, vs2, vs1, -1); - macro_build (NULL, "vmandnot.mm", "Vd,Vt,Vs", vd, vm, vtemp); - } - else - { - /* Preserve the value of vd if not updating by vm. */ - macro_build (NULL, "vmsltu.vx", "Vd,Vt,sVm", vtemp, vs2, vs1, -1); - macro_build (NULL, "vmandnot.mm", "Vd,Vt,Vs", vtemp, vm, vtemp); - macro_build (NULL, "vmandnot.mm", "Vd,Vt,Vs", vd, vd, vm); - macro_build (NULL, "vmor.mm", "Vd,Vt,Vs", vd, vtemp, vd); - } - } - else if (vd != vm) - { - /* Masked. This may cause the vd overlaps vs2, when LMUL > 1. */ - macro_build (NULL, "vmsltu.vx", "Vd,Vt,sVm", vd, vs2, vs1, vm); + macro_build (NULL, vmslt_vx, "Vd,Vt,sVm", vd, vs2, vs1, vm); macro_build (NULL, "vmxor.mm", "Vd,Vt,Vs", vd, vd, vm); } else @@ -2171,7 +2137,6 @@ macro (struct riscv_cl_insn *ip, express break; case M_VMSGE: - case M_VMSGEU: vector_macro (ip); break; --- a/include/opcode/riscv.h +++ b/include/opcode/riscv.h @@ -563,7 +563,6 @@ enum M_SEXTB, M_SEXTH, M_VMSGE, - M_VMSGEU, M_FLH, M_FSH, M_NUM_MACROS --- a/opcodes/riscv-opc.c +++ b/opcodes/riscv-opc.c @@ -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", 0, (int) M_VMSGEU, match_never, INSN_MACRO }, -{"vmsgeu.vx", 0, INSN_CLASS_V, "Vd,Vt,s,VM,VT", 0, (int) M_VMSGEU, match_never, INSN_MACRO }, +{"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 }, {"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},