From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: 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 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-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 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=SCcJzx5uJKIQED+Za4+EwMuAy0BqikFMP8W1Ii0ivoc=; b=1O7z8me3EwxWdGN3VsbX0t5YvDh0V76Srzs29iaNInDh9YwMx4vys0ux8iEhC+UryPkO7bRbwVlzY5YyYFNVH7ZGJkIuRivyUrM2OIyXrlsapBkb91MTt0ePzmwfDaJH057lpIoHYewZSQzl4YlQ96WRN7LHUCVBex/M/F9sXqY81PBliYcJ5rXFezyzvIYmIyc5YfSMmQ8yemigVA/G+TztQoYrph/X3hKnWDuWYth3ajTt5GmQ6CO1UzqWvXYNlmr+HBjewhLLjwKxWIexQPpkoivnosp49gh9rA+ObFik96wDC3u0HJj0l9EgdY0IZ0ZHYuCV1L4EaB3MPUxMfQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com; 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 From: Jan Beulich Subject: [PATCH] x86/Intel: improve special casing of certain insns Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit 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?B?ZXJjaTRYd1IyM2RRSjVNYUY5SmJGTUVRMjZMN0xxZ0Y3SjdZN01JdFNWeVNJ?= =?utf-8?B?bk9JK3JEUHg2Ymt4VVBTY3ZodEFwL0xQTytTV2RmVHJmemJjS2V4RXFMQWxT?= =?utf-8?B?ZUwyM1BpRGRSb3NQSVdRSkx2Zi9VY0ZQNkUxSml5U0diVDVIVmlPK3pjMkc4?= =?utf-8?B?WWRKYlB2YmxYQW9IZ29JaEh4MitaVC9EaDgydW55Q3VYNTBYN0VjMzVscFUy?= =?utf-8?B?TzB0bmJIeEViSVozVkRkWGs3eWN0NzVoekVLUFdrWjJGQXJmR00vejV3NTUz?= =?utf-8?B?ZnZtSW9NWnkzWTN0K1NFeE1rVXhYbmlobFd5VnY2WUhEdFRRQ0tTN1ROVXg3?= =?utf-8?B?SjdEbk9LNm9OR1Z2c3FuUHN5R09PRU50UXpyY1ZxSytjbHBvdzVzTlVPQW85?= =?utf-8?B?d1lYU0FRKyt6Y09TLzNmNFVOTFlzb2VxUG90dG5iVVo4NUM5SkRJalAwRzVs?= =?utf-8?B?b0R0ek5EZWpmQnJyOGJMNVg1SEtqK3FOQnI4WHNUNkJTM3pNM0dNYWlORDlN?= =?utf-8?B?ZENSYk56QmRvVWdhc29oYUZPUWVzcmgwNmRLbmxWK2JrWlAwQXdEQTBObU9l?= =?utf-8?B?MEY1WVJxTis3SDhUS0lHdXJmREpJUVFxSGNxdFBXelVQZ0hMNjhXRk11K2ZD?= =?utf-8?B?WDM0aWlIQUNOcHdvUTFIbUdjOFVmTkVOSnlVdmtYOXpBaWdKdkdJMmJYNkM4?= =?utf-8?B?NmY3SjhPZlVYTWxRWmR6KzU0MVN4enlySkZwU3l5WGJhdThyQVVXaDJKR1lK?= =?utf-8?B?MDFndm5zNFBEWjdlVWFaUDU3VU5OOVNRN09aWGlDWEk1MTJPUXBuVFArVkY4?= =?utf-8?B?cU1FN1B5RUFzRlVudHdiQjBzUm5VajFBUGtJUjRIN2xvMU0zTWFwem53Wmdw?= =?utf-8?B?cDhwTmQ0REZreTBKN2F2Y0d3OTBjVjJrbStncHVRSlZENWFnVlEwTFpWN3c2?= =?utf-8?B?bFp3SG8vK2R0VmdQT2FleEN1YVhleTY0RDRWV3Z3dCtORi9xS2xWRmgvbDYw?= =?utf-8?B?bFRFa3hLczV1NGdjYUh4YU1ERkVqQklrV05iRy9weHRZZDNRa0ZsdmhvYUxW?= =?utf-8?B?QXBWcUlaN2xDNXhDZjVHUmVMdnZDaEppaGdvYXNBZHkyYlVNSW5KcDl2c2pp?= =?utf-8?B?dkRsQy90YnNNbHJxeGlCamJuTGdzRUhGZFZUT2VOM09YanJHSjgrODQ1UU4w?= =?utf-8?B?ekV0b0FXWHo5MkNHSFBXT1VNL1UxZGRwdnc4MjdBWHFhUjd1bGlZTTVkWVdW?= =?utf-8?B?bER4UXM1UlIzR0ZTOG81N1djbnF0OEhxbmNCM3U3dEd3Z0N4NUpmZ0NtekZ3?= =?utf-8?B?YzdaV0ZLb0VwdUZHVUVjQ2hLOXF2Rk95VnJqRy8yZDd1QzFqdXdwZUQ2ckhr?= =?utf-8?B?dlovN1lDQ1BFbFdqTlBKVW9Kd3VoWkNMQmhheVNxb2FVVmJROHhteC90SHdK?= =?utf-8?B?VzdCanllRDkyc2liSUhuSytsVUVPdlV3YmtnUy9YNjBvYUtZUUxpR0J4dUFp?= =?utf-8?B?L1hlOW1aUXJOWFNUQTBNVUxacU0xY29EL1F3eWJQWlk0UlUyZmNMMHhRTzVu?= =?utf-8?B?OWM1djh1WElicDgrZjladHZpbDllOXZpcjRmYlJKMGtScGlYSndIMjNaM3p4?= =?utf-8?B?YVJJWFFPamNxUjlSZHE5MG5XdzhQZ0ZVenlZRGRmaVVKNWtqSUgxd0oycEVy?= =?utf-8?B?OUZmTVlWY2dUS0V4cHlTbGtGamNoZmdyWHNSQklyNFpOOG43ZHVTTXVHMEI3?= =?utf-8?B?aEVEZEpKdG03cEFWUnFlTjdnRkNuUTBvVlQ0c0FCMjRCS1dSZWUvcEpKNE53?= =?utf-8?B?cU5BVFF6eEpwMHp5L1M5NTJSbW5BTDJTNUg0NFQxZDdoTlB1U0VJTHIzTUR1?= =?utf-8?B?L3I1eXhqaW9ySVFCU0QyUDhhb0pPOEhpWjhZbHdremdlb3BBQUp1SFlSTDU5?= =?utf-8?B?Z1BwMHV3OFZJbEU4ZGZVcEdWMEx6RjNMSmhGWURHcUx2T2Z5d1RDU0NrcTI2?= =?utf-8?B?WHJGRlp6Ym5sOEJITXRyejVqRmR3U3ltNVVnMVF5TDRSMXh6OTRwclJVQ25z?= =?utf-8?B?RWVxbWVhVUwvWUdWOXpJOE1vMGl4UDY5R3A5NGVuTjVLRnpXNHllaVFHR3Aw?= =?utf-8?Q?xfTL2jdMfHFxl2BWSNADfWrfb?= 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 List-Id: 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;