From patchwork Thu Jun 2 15:11:14 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Beulich X-Patchwork-Id: 54747 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 2DEA33857BAD for ; Thu, 2 Jun 2022 15:11:50 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 2DEA33857BAD DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1654182710; bh=FQ0Pp78xs5L7kCKxPTjSXi7jFH1oK0+tq6u2O26B/eo=; h=Date:To:Subject:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:Cc:From; b=j+oeS79xmEsOjJXL4bvLJumBrZ+mwjSsCf/GQyMd3j/L+Xgy3GR+2u5b0grQzHJdP H2Y4fbGZZ+MNTTCrEcOU+Ydqz9PVHL1Ywndpg4iR09NOBd+ZiOc6mvjVQVgVolQiPc N+h7VbE3ELfz39NCOuUxZFNzKRj8oKyze4YXX5mM= X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from de-smtp-delivery-102.mimecast.com (de-smtp-delivery-102.mimecast.com [194.104.111.102]) by sourceware.org (Postfix) with ESMTPS id 8F3303857BAD for ; Thu, 2 Jun 2022 15:11:20 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 8F3303857BAD Received: from EUR05-VI1-obe.outbound.protection.outlook.com (mail-vi1eur05lp2169.outbound.protection.outlook.com [104.47.17.169]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id de-mta-32-yBPMS9tzOkGlo2kjL0qq6Q-1; Thu, 02 Jun 2022 17:11:17 +0200 X-MC-Unique: yBPMS9tzOkGlo2kjL0qq6Q-1 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=BoF1vTc85SyOUsZ47egmmmjMkbLh/m9SPWEpBy8JbggPe7wLWYc4gxmCdd97kUhfrVdqymn5qaixLOZ492TpFMOHZkE6o0ZQl+DsueRIZA3RKtIFsatQiuEcgWTZx2EdGIQcPtHg1chW5PjZU+vLOJzzbvA2lrdABvRVpmsnoDvRNsSiAa+tWJFCV5OsJcVVSViyOoQqdvm5TP5i7VNHMRX754Vs8gP0gHEeq2UwK9kcuEf83me2pnn0UtU7X/LnBT0k0cKcCBKLfps5+aewCwzljahnFTjjnzdJu9AWDWfJjQ7XjT+GvifDnDNYdX7VOOYyJvMqTo/4Eqj9Ry52fQ== 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=FQ0Pp78xs5L7kCKxPTjSXi7jFH1oK0+tq6u2O26B/eo=; b=czUe0LyrWa2quW+0NVWx4R8bFqBTDmtSmA5U5k8ODp98hlBKjI5iUYWfJdImtES52U03Pvr7r9ydyU8dfmeBAi8aSvH1EFTAIOEOQjg+lvVIL3yJWj94cRV/mB/8PRGssjpNqReQI8gTf+wCbapJR0U2VpMc5JhfBRveMHzncF/ZCOhuv/H5UtQ8g+6PnWftpIj6bvZX/CsDgO2Q2JX75O7CLtUnkursXhMQftt66kiaBHfyrbsndyd34NKBg//gJgAqkfYTG1HKdm1XgFNqxxWs/BdSuwAT2t2HDrOSClqQSUtpbccI5dleYsEvv9T/jz6sVSGN8L3EGqfQitCZBA== 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 VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) by DB9PR04MB8464.eurprd04.prod.outlook.com (2603:10a6:10:2c1::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5314.13; Thu, 2 Jun 2022 15:11:16 +0000 Received: from VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::dfa:a64a:432f:e26b]) by VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::dfa:a64a:432f:e26b%7]) with mapi id 15.20.5314.013; Thu, 2 Jun 2022 15:11:16 +0000 Message-ID: <229d815d-41f4-69f1-50b1-e58001b24ba3@suse.com> Date: Thu, 2 Jun 2022 17:11:14 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.10.0 Content-Language: en-US To: "gcc-patches@gcc.gnu.org" Subject: [PATCH] x86-64: make "length_vex" also account for VEX.B use by register operand X-ClientProxiedBy: AS9PR06CA0534.eurprd06.prod.outlook.com (2603:10a6:20b:49d::30) To VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: f57d16af-537c-4553-21c9-08da44aa23cb X-MS-TrafficTypeDiagnostic: DB9PR04MB8464:EE_ X-Microsoft-Antispam-PRVS: X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 0m3iePxSEYL6eihOZEHT+jAyCUAQIy9YttuHH9duy8ziRlzkwlTJti2zLPUSI95zKAaK9HUFgfvGNH3+EU9e9nmxL0pfl6u21jz9fVBbAb2UivISqRvdQg046wcM0vA3Iv3SvrKVMtVPvE/LNGzJTDvqDdrXQpCZ6S5ldbc+DZbCu2+NRuPoAKaefAe6CT7woDEnaTjb8XglCExzy2kuNoZWCe7zAWGYqIhyeVk4hEhzZGCmBZYR9qhdTt4yQJGZienrKAwwXZerV3S0wl9PA0eyqX/g1rLjnuo5ZV/UNazhA2E6LNM65/iAaDABeS8lzgws+SgF4u/BUn1HIZDuhB2raXH3WWmcHyzgqheXeMmJYh1Rjo5UGDYujnbVZVk+jBWNHfmM5//CtEFCPhp/jYmkx6LhatT49LhGUXvV5rvnkRIf7IyEXP+oFQbiYMpmymLWsqxi4M2n7ZA4xzTyH3WDXCuVYFRHDqNLwvkFRzS17SGIFT9r5MdBu8gxfH+SpNVtoQlpdTF9ybhoyD22ZPEWOz0AT+oerWd3P4UI93uvjj0j+Fl4Sa39GNWhphTRkyiBtkbXRQiW+x59M4tKODFvoE5/zSw4qFcWJJZ4ASGsuARoRecQE1yxGR8Owx5c44UhdJYRtKE2yLMWiL4ejPniro5jmMXyV1mWEN0XYmByRnqoHyTtbUShIW2ky5UdSjPpiotPIYl3FeQk4dG+8w2R/dhkulwktX6n5bPEvK/rAdZ4BeDAPPaU/5/g0n2v X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:VE1PR04MB6560.eurprd04.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230001)(366004)(186003)(5660300002)(86362001)(508600001)(8936002)(2616005)(6486002)(6506007)(6512007)(15650500001)(26005)(316002)(54906003)(31686004)(31696002)(6916009)(66476007)(66556008)(66946007)(36756003)(2906002)(83380400001)(8676002)(4326008)(38100700002)(45980500001)(43740500002); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?Mky88JyFxaC60XXpYub3Ej7zf68Q?= =?utf-8?q?1l2kd0r9pMFPlnbthAYyOVcTQ5kSxiG9r4t2t7KoV6XspTcV2HVbh+DE3KTFO7guI?= =?utf-8?q?0SYGeKgBwHJc5piKnV6ofUWMKsTJNXTGB21ugP5YOks6+/WxJ2hvIM1tM+tTQpe0u?= =?utf-8?q?4Qjbr366W5VoK65t7QwQXLezS4a9NZ6zuk7fUzqKr0nW0KjMq6LzLRDusz9xszMyJ?= =?utf-8?q?N+8TXmwZkOznsjZiEeiVwWoYCtsB6Tb6FgvT5avB8/7JTwVsN6DGUgntVEGxUqE9Q?= =?utf-8?q?niiZuuUmqfRU2cem/iKK5y8QctPLwmgopNosjlgN8hE4HDrDxCWlwBWxq1y6C9R8F?= =?utf-8?q?n+hYPHdJJHjlI2JQNsq+RKEoh38H5KmHeao93acYpBJLNWzMgWvbpIBdMlqlilEn1?= =?utf-8?q?u4vxgaVDP5vM1QYskYk3iwPOuVrX4R7wj2ERBZamwgfvUeRh18mYcoydUtfzXGCOg?= =?utf-8?q?9RkEKLubnLZEg1dltChur79bb+s60kudHyc+I+hiOc7LR3uNe+meHbduXyFRvsEd8?= =?utf-8?q?YuFpj2GcN73MhlvG3Vmjqxu7aC7RESDGFu9mIcUG/88MYVhfkpIogw9nzgYszDDES?= =?utf-8?q?xH5KmEjO+VdlGvBbTgvHrfjmpfJT4afksinOxtJHsxb6jEyx+EoRbsLtEx53wO6vt?= =?utf-8?q?amUATTRy2oWq4OjxIfJK+X8g4pA44KURHQjb3R0HWrBsoouLWgpNM1Pm2lZDku0DY?= =?utf-8?q?UfyL/Mc5Py7kK6WBcXDzr6hLHE+5iVmkgxjouajJgcSTQ2v1xbi5T2XJtP84coVWw?= =?utf-8?q?B417mZ1FfSKrIp03blBOBO8eocbVGaP00BxL6PislBCsCv/1W1ux/fKiCcGzA6YVd?= =?utf-8?q?YalYeGZ1DoaW1dMw37TS14vUZMVz2LtrnnIf6y2Erhfr/wdTUsF9BRqiLrGHutubb?= =?utf-8?q?MTYDS5C72cNSB74bNR/wFzXDoSg7ZHAJMQ191jk83zz+qQh71g6LOyqWARN3Bm9t/?= =?utf-8?q?mwarRklb7Ot1BzOi9l0EccNwgPvwTKphkNK2RMMERhkauVQ6CEgwQZF+vLW2RRRmk?= =?utf-8?q?KEA6PP06S73+OT5IbC13e4iIrRdxrVYDd0D96N9sJoBkGDeZvd2nrIqSyECMhXqp/?= =?utf-8?q?Pu/aIsWKq9NzZTdimaDrg+x0ZQwuNYfZbDkRQo6e4amm0na+ZYbsw8Hh95TvY2c+l?= =?utf-8?q?HEC8WF5PWiMsJ563oyKRdFk+IRObGWr8K4wFqiJntGfVXGjWuuN1CMiimEXy/bRl4?= =?utf-8?q?5/gXqmNx0wl/WDL9BuhjEjDPlNArVM5E3PTISoIilLg/1wSjTYQRlR5Z/eXysmeqQ?= =?utf-8?q?xWNRYZCHpnkxDZXRiZyfCWNlHYK4TlEsCcfLedswwj7fvefdj5NyCE2LyT9VAYEc6?= =?utf-8?q?rBUS8xuDcb/nK1jNnR8UBm11fr4OO5XVN9bohWUfpYoucmV5a0C7kUruVpCMqur2v?= =?utf-8?q?q28d4XCeedYgHpwjYCvJ21+0hMgSJQyp6FWlLxOapKl4gG4I+0/ECHnrVcTIghVVU?= =?utf-8?q?yD3M6hEKcQHTciuHPpjH5OHWzqdjJYWCG2Hejx0lLqgiar7Shd5n+7vyvyC/bmNQT?= =?utf-8?q?y5p3CVx8m7NPb/zUs1ob5JpVQAtH5zjB8ccbkA2LsiVvESkIdhKTXjeOSG+uvrwAZ?= =?utf-8?q?o5IzFGQZqSce+MNBevd3u00m1F9b8BJqB1pzPThcDup3WGup7rdNH8kepT3VRmYj3?= =?utf-8?q?BXB5rDOiowarRYk1RLWnMvNLYJrnu3gQ=3D=3D?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: f57d16af-537c-4553-21c9-08da44aa23cb X-MS-Exchange-CrossTenant-AuthSource: VE1PR04MB6560.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Jun 2022 15:11:16.3396 (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: c6+aKS3GJCUNHLbd31UJzML4019OZwLst82led387JFeeDoywYrJptE1MEZ0Ri7aaIYxOM42ljxCBrrwHS3gAQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB9PR04MB8464 X-Spam-Status: No, score=-3032.0 required=5.0 tests=BAYES_00, DKIM_INVALID, DKIM_SIGNED, KAM_DMARC_STATUS, RCVD_IN_DNSWL_LOW, SPF_HELO_NONE, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE 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: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Jan Beulich via Gcc-patches From: Jan Beulich Reply-To: Jan Beulich Cc: "hubicka@ucw.cz" Errors-To: gcc-patches-bounces+patchwork=sourceware.org@gcc.gnu.org Sender: "Gcc-patches" The length attribute ought to be "the (bounding maximum) length of an instruction" according to the comment next to its definition. A register operand encoded using the ModR/M.rm field will additionally use VEX.B for encoding the highest bit of the register number. Hence for the high 8 GPR registers as well as the [xy]mm{8..15} ones 3-byte VEX encoding may be needed. Since it isn't known to the function calculating the length which register goes where in the insn encoding, be conservative and assume a 3-byte VEX prefix whenever any such register operand is present and there's no memory operand. gcc/ * config/i386/i386.cc (ix86_attr_length_vex_default): Take REX.B into account for reg-only insns. --- a/gcc/config/i386/i386.cc +++ b/gcc/config/i386/i386.cc @@ -16820,7 +16820,8 @@ int ix86_attr_length_vex_default (rtx_insn *insn, bool has_0f_opcode, bool has_vex_w) { - int i; + int i, reg_only = 2 + 1; + bool has_mem = false; /* Only 0f opcode can use 2 byte VEX prefix and VEX W bit uses 3 byte VEX prefix. */ @@ -16840,16 +16841,23 @@ ix86_attr_length_vex_default (rtx_insn * if (GET_MODE (recog_data.operand[i]) == DImode && GENERAL_REG_P (recog_data.operand[i])) return 3 + 1; + + /* REX.B bit requires 3-byte VEX. Right here we don't know which + operand will be encoded using VEX.B, so be conservative. */ + if (REX_INT_REGNO_P (recog_data.operand[i]) + || REX_SSE_REGNO_P (recog_data.operand[i])) + reg_only = 3 + 1; } - else + else if (MEM_P (recog_data.operand[i])) { /* REX.X or REX.B bits use 3 byte VEX prefix. */ - if (MEM_P (recog_data.operand[i]) - && x86_extended_reg_mentioned_p (recog_data.operand[i])) + if (x86_extended_reg_mentioned_p (recog_data.operand[i])) return 3 + 1; + + has_mem = true; } - return 2 + 1; + return has_mem ? 2 + 1 : reg_only; }