From patchwork Fri Jan 20 09:55:26 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Beulich X-Patchwork-Id: 46268 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:eb09:0:0:0:0:0 with SMTP id s9csp108532wrn; Fri, 20 Jan 2023 01:55:40 -0800 (PST) X-Google-Smtp-Source: AMrXdXtTkAxpBgyQDdYm68HEWCafnCvtIt3wzZUWszSDei5bdhps80Nc3RkYDZM0+dZ0Aw4AQ4k8 X-Received: by 2002:a05:6402:3898:b0:499:c343:30e5 with SMTP id fd24-20020a056402389800b00499c34330e5mr15348264edb.3.1674208540102; Fri, 20 Jan 2023 01:55:40 -0800 (PST) Received: from sourceware.org (server2.sourceware.org. [2620:52:3:1:0:246e:9693:128c]) by mx.google.com with ESMTPS id g18-20020a1709065d1200b007ae186b15f9si48496913ejt.597.2023.01.20.01.55.39 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 20 Jan 2023 01:55:40 -0800 (PST) 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=@sourceware.org header.s=default header.b=TBixrSlW; arc=fail (signature failed); 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=NONE sp=NONE dis=NONE) header.from=sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id D8A453858C27 for ; Fri, 20 Jan 2023 09:55:38 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org D8A453858C27 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1674208538; bh=SCcJzx5uJKIQED+Za4+EwMuAy0BqikFMP8W1Ii0ivoc=; h=Date:To:Subject:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:From; b=TBixrSlWwQ8oErcIB817H7C52jMPkPPbkuPyL7xTRr3zMoIQyjl5qvZqor1Zaivsp Hoks714luwfl11EOcb+DLe2EZg1sgvwUjy5Mphlu+pNi9uc7r1x6Gn0p4Hpiu1pHLK kPYGlIO/YCgZMhqJCW587o75fiA4hOgGQAOnCt0U= X-Original-To: binutils@sourceware.org Delivered-To: binutils@sourceware.org Received: from EUR05-AM6-obe.outbound.protection.outlook.com (mail-am6eur05on2052.outbound.protection.outlook.com [40.107.22.52]) by sourceware.org (Postfix) with ESMTPS id 526EA3858C50 for ; Fri, 20 Jan 2023 09:55:29 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 526EA3858C50 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=O1SmWET9ihfuHC9/shVutGdefj+dyty0Q+eZhuNmNmYSY2rxHiQypzw9WUBFPPv9g0SmFFWr7vDT4N2dN6genx2A3YJbxIYb9YRyfh2zMetsXDBrV8CpNpcb2b7SU7JpGOI9UCs3cYyuxGRFpQRqpM0DbRNut8TgPR0MzsrVXuIJKdYWjdo+/eXiB6yjbudYSeQeQRcNXuJRQUpq0peyltdoJ9Mn7OOqMnyvC2d2wwZTkuQDLAcyQK7dMjyHpix9IK4IBkOrHCUcmqnEaZPAuRPj7AxvHc6+pc1F9Wb1me2qNH5Xr8uKJ+v3yiDvytfFxvWVDFUoYHcDY5l0cB/tdw== 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=SCcJzx5uJKIQED+Za4+EwMuAy0BqikFMP8W1Ii0ivoc=; b=YdwNGBuakuxg9N99/AXHqaqaF35Jybm36Ofc4tQpQHg8qPLBydpaCE7yUQotgIHGZcA8Io5UMmWlIsB43M4hEm3or3JqG6KtC0cdbhzqn8b7FTh4QaVt0RjYfSOuUEnFxeJQ1jUFcH+b2Ut1TC32wt4z5b36D/BQVoTKUxz2vW17JgP87SYzr5uApeFGLJ34vwkWh9Swa/vIntz0ecMJQgK/W0zV+natDQBfQ0T5R83c5flgA/fantFm3AIICox6PUk0e/8qDlIgUPjx5EoMlUCrFPcYrd2gAwnDITiIMbsqo7siGCub2mvhorFLt4MhQLt1c1hYXZd06rMHt1GG9A== 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 AS1PR04MB9682.eurprd04.prod.outlook.com (2603:10a6:20b:472::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6002.12; Fri, 20 Jan 2023 09:55:27 +0000 Received: from VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::2991:58a4:e308:4389]) by VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::2991:58a4:e308:4389%7]) with mapi id 15.20.6002.027; Fri, 20 Jan 2023 09:55:27 +0000 Message-ID: Date: Fri, 20 Jan 2023 10:55:26 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.6.1 Content-Language: en-US To: Binutils Subject: [PATCH] x86/Intel: improve special casing of certain insns X-ClientProxiedBy: FR2P281CA0104.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:9c::11) To VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VE1PR04MB6560:EE_|AS1PR04MB9682:EE_ X-MS-Office365-Filtering-Correlation-Id: b0bf50cb-ee8e-4533-d04d-08dafacc7510 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: QEg/pUsLJKVQ8RqrmbbPNofG8+jF/DNFdezZ7mQw29sNROsQYVacLQzUWlCQc2RM0vrdNo5PGxEQMC4NOoLtVTfRHudRlMZ5eHzyGdu2t7eyZE1rh4aadtsWUhFzkdXYe2rWT3+WPSXSTAzYo/Yfkvi//NDwMipDqUzg46qVRxokocIpLkXDadV3O2TwVIZU6eCx9R+7vLEPjhLgAo0CVjoP7dEkTdBfYWkAhp0qOw++CeAYqJnO0ExozM7m4F+3QQTMBQRXqthL9T17WnsA3qdKUkORm3n49gM9CNCSwZorXgARVkvKBJEw+IIV8coZItfFhbEKaLczlmZymklG3pK3jsmUdUV75gmyJVDjzwxFoUY1IV8Pqz+6pF+ERDvWmw60uFtrL00PoO/Fsusm/SeQnTuZL+TqfzbPrAcGbUBFiPb18d7MPZu8FT2DMKHsjSEjSy36ABEf5sSsoN4ADkg1QA6cR/8oMr4t58rfntTaCbopJHa5UjoStMDEDPjBB+6c64J0Idkh8jZRDb79eCEjBvQAKB0eaCEYKxV2ZAyONPHW58J/nZ6HFali99vS/rGAF8jaFDFLmQ1MncZsjLyyomlndqbqMR0j8wfg7101FSKxz7YKiBjqmsV6D5lhMhGXY9yIPIhofyzd4j3dXjr+hYuOotYlVXql3A5XeuersujAHTuutmWFKUeyR8GdYEUuN0Q89rG6shrAyL5ZwKkl/OF65+ohs2ZgswoiUgA= 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:(13230022)(366004)(136003)(39860400002)(376002)(396003)(346002)(451199015)(6486002)(6512007)(86362001)(36756003)(478600001)(38100700002)(2616005)(186003)(26005)(2906002)(31696002)(6506007)(5660300002)(66946007)(31686004)(66556008)(316002)(66476007)(8676002)(41300700001)(6916009)(8936002)(43740500002)(45980500001); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?erci4XwR23dQJ5MaF9JbFMEQ26L7?= =?utf-8?q?LqgF7J7Y7MItSVySInOI+rDPx6bkxUPScvhtAp/LPO+SWdfTrfzbcKexEqLAlSeL2?= =?utf-8?q?3PiDdRosPIWQJLvf/UcFP6E1JiySGbT5HViO+zc2G8YdJbPvblXAoHgoIhHx2+ZT/?= =?utf-8?q?Dh82unyCuX50X7Ec35lpU2O0tnbHxEbIZ3VDdXk7yct75hzEKPWkZ2FArfGM/z5w5?= =?utf-8?q?53fvmIoMZy3Y3t+SExMkUxXnihlWyVv6YHDtTQCKS7TNUx7J7DnOK6oNGVvsqnPsy?= =?utf-8?q?GOOENtQzrcVqK+clpow5sNUOAo9wYXSAQ++zcOS/3f4UNLYsoeqPottnbUZ85C9JD?= =?utf-8?q?IjP0G5loDtzNDejfBrr8bL5X5HKj+qNBr8XsT6BS3zM3GMaiND9MdCRbNzBdoUgas?= =?utf-8?q?ohaFOQesrh06dKnlV+bkZP0AwDA0NmOe0F5YRqN+7H8TKIGurfDJIQQqHcqtPWzUP?= =?utf-8?q?gHL68WFMu+fCX34iiHACNpwoQ1HmGc8UfNENJyUvkX9zAigJvGI2bX6C86f7J8OfU?= =?utf-8?q?XMlQZdz+541SxzyrJFpSyyXbau8rAUWh2JGYJ01gvns4PDZ7eUaZP57UNN9SQ7OZX?= =?utf-8?q?iCXI512OQpnTP+VF8qME7PyEAsFUntwbB0sRnUj1APkIR4H7lo1M3MapznwZgpp8p?= =?utf-8?q?Nd4DFky0J7avcGw90cV2km+gpuQJVD5agVQ0LZV7w6lZwHo/+dtVgPOaexCuaXey6?= =?utf-8?q?4D4VWvwt+NF/qKlVFh/l60lTEkxKs5u4gcaHxaMDFEjBIkWNbG/pxtYd3QkFlvhoa?= =?utf-8?q?LVApVqIZ7lC5xCf5GReLvvChJihgoasAdy2bUMInJp9vsjivDlC/tbsMlrqxiBjbn?= =?utf-8?q?LgsEHFdVTOeN3OXjrGJ8+845QN0zEtoAWXz92CGHPWOUM/U1ddpvw827AXqaR7uli?= =?utf-8?q?YM5dYWVlDxQs5RR3GFS8o57Wcnqt8HqncB3u7tGwgCx5JfgCmzFwc7ZWFKoEpuFGU?= =?utf-8?q?EcChK9qvFOyVrjG/2d7uC1juwpeD6rHkvZ/7YCCPElWjNPJUoJwuhZCLBhaySqoaU?= =?utf-8?q?VbQ8xmx/tHwJW7BjyeD92sibIHnK+lUEOvUwbkgS/X60oaKYQLiGBxuAi/Xe9mZQr?= =?utf-8?q?NXSTA0MULZqM1coD/QwybPZY4RU2fcL0xQO5n9c5v8uXIbp8+f9Ztvil9e9vir4fb?= =?utf-8?q?RJ0kRpiXJwH23Z3zxaRIXQOjcqR9Rdq90nWw8PgFUzyYDdfiUJ5kjIH1wJ2pEr9Ff?= =?utf-8?q?MYVcgTKExpySlkFjchfgrXsRBIr4ZN8n7duSMuG0B7hEDdJJtm7pAVRqeN7gFCnQ0?= =?utf-8?q?oVT4sAB24BKWRee/pJJ4NwqNATQzxJp0zy/S952RmnAL2S5H44T1d7hNPuSEILr3M?= =?utf-8?q?Du/r5yxjiorIQBSD2P8aoJO8HiZ8YlwkzgeopAAJuHYRL59gPp0uw8VIlE8dfUpGV?= =?utf-8?q?0LzF3LJhFYDGqLvOfywTCSCkq26XrFFZzbnl8BHMtrz5jFdwSym5Ug1QyL4R1xz94?= =?utf-8?q?prRUCnsEeqmeaUL/YGV9zI8Mo0ixP69Gp94enN5KFzW4yeiQGGp0xfTL2jdMfHFxl?= =?utf-8?q?2BWSNADfWrfb?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: b0bf50cb-ee8e-4533-d04d-08dafacc7510 X-MS-Exchange-CrossTenant-AuthSource: VE1PR04MB6560.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 Jan 2023 09:55:27.2061 (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: MSK3T/49ZUN07QNevAjmjXD4ygRQRZNxwtMXKNZsX4+hWu4g7P9JybX2jcYjrWSwMwz1bdpVMlSppeBlGTFJ4g== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS1PR04MB9682 X-Spam-Status: No, score=-3028.7 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.29 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: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1755534893996552714?= X-GMAIL-MSGID: =?utf-8?q?1755534893996552714?= Now that we have identifiers for the mnemonic strings we can avoid opcode based comparisons, for (in many cases) being more expensive and (in a few cases) being a little fragile and not self-documenting. --- Similar improvements are possible outside of Intel syntax specific code, but my respective inquiry in "x86: avoid strcmp() in a few places" was left without any replies. --- a/gas/config/tc-i386-intel.c +++ b/gas/config/tc-i386-intel.c @@ -341,13 +341,10 @@ i386_intel_simplify_register (expression const insn_template *t = current_templates->start; if (intel_state.in_scale - || (t->opcode_modifier.opcodeprefix == PREFIX_0XF3 - && t->opcode_modifier.opcodespace == SPACE_0F - && t->base_opcode == 0x1b /* bndmk */) - || (t->opcode_modifier.opcodeprefix == PREFIX_NONE - && t->opcode_modifier.opcodespace == SPACE_0F - && (t->base_opcode & ~1) == 0x1a /* bnd{ld,st}x */) - || i386_regtab[reg_num].reg_type.bitfield.baseindex) + || i386_regtab[reg_num].reg_type.bitfield.baseindex + || t->mnem_off == MN_bndmk + || t->mnem_off == MN_bndldx + || t->mnem_off == MN_bndstx) intel_state.index = i386_regtab + reg_num; else { @@ -681,8 +678,7 @@ i386_intel_operand (char *operand_string return 0; if (intel_state.op_modifier != O_absent - && (current_templates->start->opcode_modifier.opcodespace != SPACE_BASE - || current_templates->start->base_opcode != 0x8d /* lea */)) + && current_templates->start->mnem_off != MN_lea) { i.types[this_operand].bitfield.unspecified = 0; @@ -697,9 +693,8 @@ i386_intel_operand (char *operand_string i.types[this_operand].bitfield.word = 1; if (got_a_float == 2) /* "fi..." */ suffix = SHORT_MNEM_SUFFIX; - else if ((current_templates->start->base_opcode | 1) != 0x03 - || (current_templates->start->opcode_modifier.opcodespace - != SPACE_0F)) /* lar, lsl */ + else if (current_templates->start->mnem_off != MN_lar + && current_templates->start->mnem_off != MN_lsl) suffix = WORD_MNEM_SUFFIX; break; @@ -708,8 +703,7 @@ i386_intel_operand (char *operand_string if ((insn_name (current_templates->start)[0] == 'l' && insn_name (current_templates->start)[2] == 's' && insn_name (current_templates->start)[3] == 0) - || (current_templates->start->opcode_modifier.opcodespace == SPACE_BASE - && current_templates->start->base_opcode == 0x62 /* bound */)) + || current_templates->start->mnem_off == MN_bound) suffix = WORD_MNEM_SUFFIX; else if (flag_code != CODE_32BIT && (current_templates->start->opcode_modifier.jump == JUMP @@ -727,9 +721,11 @@ i386_intel_operand (char *operand_string case O_fword_ptr: i.types[this_operand].bitfield.fword = 1; - if (insn_name (current_templates->start)[0] == 'l' - && insn_name (current_templates->start)[2] == 's' - && insn_name (current_templates->start)[3] == 0) + if (current_templates->start->mnem_off == MN_les + || current_templates->start->mnem_off == MN_lds + || current_templates->start->mnem_off == MN_lss + || current_templates->start->mnem_off == MN_lfs + || current_templates->start->mnem_off == MN_lgs) suffix = LONG_MNEM_SUFFIX; else if (!got_a_float) { @@ -741,8 +737,7 @@ i386_intel_operand (char *operand_string case O_qword_ptr: /* O_mmword_ptr */ i.types[this_operand].bitfield.qword = 1; - if ((current_templates->start->opcode_modifier.opcodespace == SPACE_BASE - && current_templates->start->base_opcode == 0x62 /* bound */) + if (current_templates->start->mnem_off == MN_bound || got_a_float == 1) /* "f..." */ suffix = LONG_MNEM_SUFFIX; else @@ -799,8 +794,7 @@ i386_intel_operand (char *operand_string REX.W) is going to be derived from it. For this we check whether the given suffix is valid for any of the candidate templates. */ if (suffix && suffix != i.suffix - && (current_templates->start->opcode_modifier.opcodespace != SPACE_BASE - || current_templates->start->base_opcode != 0x62 /* bound */)) + && current_templates->start->mnem_off != MN_bound) { const insn_template *t;