From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR01-VE1-obe.outbound.protection.outlook.com (mail-ve1eur01on2071.outbound.protection.outlook.com [40.107.14.71]) by sourceware.org (Postfix) with ESMTPS id C30D7385417E for ; Fri, 13 Jan 2023 11:07:29 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org C30D7385417E 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=jSgqO8BlBZkc1fopX+yzFqbC/4M7osCtrwlsgG8PcH1OLVr2hB5xL+0yq3Qp18FdfADXLvLVwI+oOSOlc347mpaI59W2zHrzI0n5wJIzt8ZdRuWNvF3SzZCy/VVnU9ofteXlXtmmCl1cAVWo/ZT334JV5jNVxTLMFUzktPCAryeT7Vqxl8gIkfW9rStOPvXfFXffqMP90xMJKUS2MkhN19QFvMu1vpvXV/deNlS7Oju1R6/+XEsa5LcbW9PmzPKVbI2HIYZtZqTU7Xg5+0DB2NU2LFTdYHe+XvD1uSMJ1PU7XH67Yx8eyVURiyr1tRjMV+2rFuUAB9YSSCFt3NKCdA== 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=p0hff2RIFvTdyvW7avK63SpVd8vRTqBhJVpcaWyPUWM=; b=LJGBbJ+RvcGDYr8/uEuk95PcKSEgU0S1PuW34ycLgjKxdnNqDKM45b+BI6xbsAGVVbnMm5ocgQqEiTu3yzDTygboF0oAcTcyzUGZuqVv7LYEFWQMIIXU9VrD201FhpGR0FDXrh771zRo49MKhzlPiiafFU847ehc+y/h0jvnKCEu4CvGHa2xvojtHOS742ZeUsYp5sYJ/ZcMIbco/pgnzWV9+Tsk+IYT3a3x/+LOmjG7cvgrXQnuakN+7o/HULXU2UwVkenANIgYMCBxYKgmKEOt9XvOg3lEKVWYBs6ZD/8QNAx+Q9dHuH/PmX4m3AO21E24vbZIjg06nNRG+B2snQ== 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=p0hff2RIFvTdyvW7avK63SpVd8vRTqBhJVpcaWyPUWM=; b=df5AqWimb349f8tqc+92ZiJ1WkvG8/lPN/jaAuonwr7PG3l0Z4zpPOrhegpWE2AzKhVR6BkqT39RCYSLbxWXX6zZJOHrx3uOabAz/XGxWabsWdajA5noBxGsZ5y/x5nnk18IIThVcIVHDkgk3lSY/1qjzobX9vn+hXv7cQ7RIYYKqQgybbhopK3FSLo+bp2FIy3doehCNQucgSZR6dMecTp6biZ3/csyMBAI2HjNSUPWXV3GeqqQPuEP9UePjdIIVD1Vf20BoERzXoMQMWGP5j2MGjRqlXXP8/kJERb8yXon0Bme/fzNWAWEXuPmYys3LJuJnQGGhisC61+oFg2eyw== 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 PAXPR04MB8845.eurprd04.prod.outlook.com (2603:10a6:102:20c::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6002.13; Fri, 13 Jan 2023 11:07: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.012; Fri, 13 Jan 2023 11:07:26 +0000 Message-ID: Date: Fri, 13 Jan 2023 12:07:24 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.6.1 Subject: [PATCH 3/8] x86: re-use insn mnemonic strings as much as possible Content-Language: en-US To: Binutils Cc: "H.J. Lu" References: From: Jan Beulich In-Reply-To: Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-ClientProxiedBy: AM0PR02CA0169.eurprd02.prod.outlook.com (2603:10a6:20b:28e::6) To VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VE1PR04MB6560:EE_|PAXPR04MB8845:EE_ X-MS-Office365-Filtering-Correlation-Id: 0c584850-fa4e-4fac-e4f1-08daf5565ad8 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: wjYOJrE9eH/Gob0gHZ91jV/M5zS2HDTncGCwnFWT74DupCPCDX+dozA1CV2CM3prBPsAG+x2DATO3saWyjRlnh0AGjH22ANNyrx7+qpp0i9f8asnnytTXN7/E4zaH4bewJY+vPxtGzOGdVku40mVrYwl9eBK9AG5hXUkXHLxCAGznpXbafcLJ3AzEXR8VuoT5VPOkbcZuWHtaJP+VBVS4qXAluaCAOszwdjvxgGEyD+co89AcOXX+XZiZVtEo7NKqYywSZD/9wJxzf81rO3XmVq7oPFCn9qwsVTRpSd7qRtMlef4RI1r6tX8lxLMoK7s+Cc5FpoajFvhk4nOq8s93ga5J/vvpV/3i20CIL9b578DDWun5+hTBOGUM9qDR+PSNIbRfyTVsjhjcywkd2dwVZ5X4FWQSx6t5tQBKjCdEr+0w4Jj7j7mpwumb0JJ1mBd58ZG7pgv6oj9o73hRYr+DJHWc29F26Hs6d5Ql8wC9rMKT8gCD1YW4wDl2kYgrgoHo5wdOP1vVYK6SjWztCGFBAgfxePJFRPjq8iOOdJXlXUw4yfX8BfvdSXl5lW2v7xE7x1RXz+cJZ9xJAhjukPHC9S0Z6GwPSPMRdFRCSQppz+wxZIwEGhsW0i65LXsZPzyUmlTtnZ1A6SQj7fMClVmqKeo4ZZ0JkMCN5i0SFrmkGDd42otPoZhPeVaEcf+CDKaTUHmmAP8rW0AgXmgEyBh6T7owqhSnFwQWmufYiS5IYM2/sMRw9dG8jKCjc9Eag81yMhfi8IE+bUa4doNif7SrXi4n3z32LSOjmYKigfxxZo= 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)(39860400002)(396003)(376002)(346002)(136003)(366004)(451199015)(31686004)(8936002)(5660300002)(41300700001)(4326008)(316002)(2906002)(66946007)(66556008)(6916009)(66476007)(8676002)(478600001)(6486002)(38100700002)(186003)(26005)(6512007)(6506007)(36756003)(31696002)(86362001)(2616005)(43740500002)(45980500001);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?cnVBYjRqTVltSDAwQXM0RGFlcjJ5WHhOUEJGUzlTeStLaHdsUXE4SGNYbjNx?= =?utf-8?B?Z3ZGS1gxM0ROQysxWTFZbVZxZ05DOG5uWFo0ODd4Ull6KzVId0xvTUxQRG42?= =?utf-8?B?Kzh5ZE9RWWlJcHB3MG4rc0JzdU5zQ2x1cFA2cEYzVEZYNkhCb0kzeDNsdEJs?= =?utf-8?B?d1ZUeWJVS0dvZmVTUWYxT0ErcjJFcXF6aER5TXF0cURjZmpJSXExK0YybDBN?= =?utf-8?B?WnEvWUYrSjRyUEE4NlBqVi9uTjdSelRsRXhWV2t0WFFpVGw3TFVnWHVkSHYx?= =?utf-8?B?a1UwT2hRRmJ2d2pLWlRvbXlXYjJaWTB5c0pJd1VtSHRZN3UrdWF6NTZwTGdV?= =?utf-8?B?aHBHREdPSHBRRytIOXdURmhjcUYyM2s4dVlNQnFSWmdjdmJvZXdIQmtJbGJ0?= =?utf-8?B?WGV3NTFuQllxYjl3cTVid3lSbUMrL0FpVFROMjBBTjRhUHhpWDBudzlWMjhE?= =?utf-8?B?RldVbzJXUURncDd6Z1dzb1NYbnRaKy9JWDdLLzhSR1ZkOGs4Wk5YOW56RDZ3?= =?utf-8?B?ZHRUMkl0c2tWcDFEMVdUaldSd1RuZElXd3FDR1hLRm12UXR6VGlFczRydWJh?= =?utf-8?B?azUvamhVREI4Y3MrbnNVamYxUU5tRmFmdDhpVWhXZlFPY1h1cjVmTFZtRkR2?= =?utf-8?B?YndyZmVicmEveng1U2dkV1ZkVVV4TFNHbDNSbDRoNzJoWUdKRytGS3g0aUJ4?= =?utf-8?B?U2RseW1WbG5xMG05Sk1GeGcxa0hTL2xYWnIxMHVzNW9PajlqMUk3WVlPRXE3?= =?utf-8?B?dnM3QmtCZ3E0TFpwZ0YwUDBaa1FXS1E1QkptMm9xKytDY3R2aHZYL3JqRkpM?= =?utf-8?B?NUFjZnhYckZpVmMyK0V4cERkbE9yazlnOWx2cVlmTFRJK3hsM3Q2MkVHUFZT?= =?utf-8?B?Y1drU3J2enpYSGNvRll5UmN4eDJ0SEplYnpEc0o1SUwwR1RRbHNNVmwyRHZL?= =?utf-8?B?VzFCM2ZnYjZpVFpkNU9SNlhhT0JNNFpWY2FON3pNVG9DUE9XK1JNOFU2N3pv?= =?utf-8?B?T1NBc3NMTjdXNTk4Q2pVUWN1VzRvWmhXZkI5bkhFRGNqMXJNZWp1TVVZOGlp?= =?utf-8?B?aWJRSy9NNEFWenhOdnZIOFdib3poVXlXVFZ2R21pZGJnS2lmL1FhWHB4ZXZx?= =?utf-8?B?K3p2U0gvOU1xRFRsMWV0ekdyd2pVVHZWdzgvdjdGNG1HMnNpWUpPTmNVT2Fo?= =?utf-8?B?QS9LR2NWZ0tqY0RQWmtZS2pvSUxWd3NKL1UxdEhTMFNMNzBuQ0R5TTQ1cTFl?= =?utf-8?B?bkdKRHBNMjJhQ0lVTGVheEJXOFhCZHNoc3ZjZ1NUSXFodGxUWDZ1dHlDb0hH?= =?utf-8?B?YmlJZUlqeDFvSTVNVGZ0NS9sbVFZelRiZEhzQ1lDR2ZuaVJYR2VteTNja2dX?= =?utf-8?B?Wk5zOG1lYXM2YURuMlBGdTlMMEVibkpKbzdOSTJaR1N4L01kRjY3ZkZmcXpk?= =?utf-8?B?ditjSmhMbWJjSm9lb2Z6T0ozZm4yWnZTN3h2cTUzRHdMM3VXVnlReEtCSVFB?= =?utf-8?B?ZnlMTUZMYktpaGVwZThkTHRPdGNzMFNaMDRZRlhZc0VDQXlWdS9QTXllWGdM?= =?utf-8?B?OHFGSCt0MUZTZUhIb2lVYTFIRzhlRytkRUF5cjVUZnI3bk5SNUtDVVpsUmlD?= =?utf-8?B?K1F0N2pMOFJzS250Ymo3UXBuOHJLeDZaQ1RkbmpDbWQwVzZWR2ZETXN4OXJl?= =?utf-8?B?ZCtJNWxKQTEvK0h1eGt0aW8ybzN0SUg2OFUySStUT1R0aEZMRGxmTnZ5SDFE?= =?utf-8?B?aWtOQWZwdGRIOUZOM1dSSmh0S1NCY1VEa0QvbDRiZ1Z1Y014Y1Ayc085elBL?= =?utf-8?B?Y0JlcHBCSHRTSVg1VzBncENTVGpiSkVXbU9JS1BWa2UxQ0FDQXp4NGxwUWVx?= =?utf-8?B?SGRsOU5DdHRveWk2Wm5lbUFpZkJhMnhpR3NybWhCTUZvem5pYmNJTzNrUENJ?= =?utf-8?B?NUlieFVmSVNKN3k2UFgzbWV0RjJwYVUxdXdlZUZmQmZudGpSWGIxeFkwQ1pG?= =?utf-8?B?QW1oTy9qYmxUMFVKTGVHeU5WTTMrTGtWbnlxZTVlazluRHBLNkpicXpvOWtj?= =?utf-8?B?a0JKa3ZibGVGYWdYN1dSSEg4VTNjVkhRZjI4S1N1cHZya0o3NmIrUldaYTNr?= =?utf-8?Q?rOyN9pPIGp9AkxqZmuK18eeb0?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: 0c584850-fa4e-4fac-e4f1-08daf5565ad8 X-MS-Exchange-CrossTenant-AuthSource: VE1PR04MB6560.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Jan 2023 11:07:26.8534 (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: wlgQ+1nM1TSf/r2CleGd5CK3sPzV2/TlRqvdnTdMUBRkCADJv384RMPzSK8alA0PDFttuWh6btIBr3vnK/Fy2w== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PAXPR04MB8845 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: Compact the mnemonic string table such that the tails of longer mnemonics are re-used for shorter ones, going beyond what compilers would typically do, but matching what ELF linkers may do when processing SHF_MERGE|SHF_STRINGS sections. This reduces table size by about 12.5%. --- a/opcodes/i386-gen.c +++ b/opcodes/i386-gen.c @@ -1576,12 +1576,29 @@ expand_templates (char *name, const char return idx; } +static int mnemonic_cmp(const void *p1, const void *p2) +{ + const struct opcode_hash_entry *const *e1 = p1, *const *e2 = p2; + const char *s1 = (*e1)->name, *s2 = (*e2)->name; + unsigned int i; + size_t l1 = strlen (s1), l2 = strlen (s2); + + for (i = 1; i <= l1 && i <= l2; ++i) + { + if (s1[l1 - i] != s2[l2 - i]) + return (unsigned char)s1[l1 - i] - (unsigned char)s2[l2 - i]; + } + + return (int)(l1 - l2); +} + static void process_i386_opcodes (FILE *table) { FILE *fp; char buf[2048]; unsigned int i, j, nr, offs; + size_t l; char *str, *p, *last, *name; htab_t opcode_hash_table; struct opcode_hash_entry **opcode_array = NULL; @@ -1720,6 +1737,8 @@ process_i386_opcodes (FILE *table) fprintf (table, "};\n"); /* Emit mnemonics and associated #define-s. */ + qsort (opcode_array, i, sizeof (*opcode_array), mnemonic_cmp); + fp = fopen ("i386-mnem.h", "w"); if (fp == NULL) fail (_("can't create i386-mnem.h, errno = %s\n"), @@ -1731,14 +1750,28 @@ process_i386_opcodes (FILE *table) fprintf (table, "const char i386_mnemonics[] =\n"); fprintf (fp, "\nextern const char i386_mnemonics[];\n\n"); - for (offs = j = 0; j < i; j++) + for (l = strlen (opcode_array[offs = j = 0]->name); j < i; j++) { + const char *next = NULL; + size_t l1 = j + 1 < i ? strlen(next = opcode_array[j + 1]->name) : 0; + name = opcode_array[j]->name; - fprintf (table, " \"\\0\"\"%s\"\n", name); str = mkident (name); - fprintf (fp, "#define MN_%s %#x\n", str, offs + 1); + if (l < l1 && !strcmp(name, next + l1 - l)) + { + fprintf (fp, "#define MN_%s ", str); + free (str); + str = mkident (next); + fprintf (fp, "(MN_%s + %u)\n", str, l1 - l); + } + else + { + fprintf (table, " \"\\0\"\"%s\"\n", name); + fprintf (fp, "#define MN_%s %#x\n", str, offs + 1); + offs += strlen (name) + 1; + } free (str); - offs += strlen (name) + 1; + l = l1; } fprintf (table, ";\n");