From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR04-VI1-obe.outbound.protection.outlook.com (mail-vi1eur04on2048.outbound.protection.outlook.com [40.107.8.48]) by sourceware.org (Postfix) with ESMTPS id 415D43850232 for ; Fri, 10 Mar 2023 10:20:30 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 415D43850232 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=PL3BiJeRPUcMrzUgKbrjFQw/pdvPrNA8hYjMJNwPRZ5VohjMcu2QtifJFLOg6CJtiQQBWt7kNsI5LRqPz8043VyxSvmx2G0YldvRCRvp2cel7lN1QG2mQ2J8/q04mJi8smU5D5PjkQlBnf6jl5wFF4HI7K5ZB0yDYWhPX0hrOCVmogrDHxvINi5tqsGxb6uBaGWbKURkIX2wGuXFl2EZNk1H36bkF6nR41dcaz/NaP5Y8Tf7/Xu5m8qZc3GsWSebXeZGlb/aENAKDl3P1c8TV71CA9rLcN2mZBPEE0zVOS7Ohci1J0dmPIlzVzb1S2k1SOx6xrQYFZ/lsKnDRpqj+g== 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=2hI7Ej2sCmJ6Bch/OyCrt08AWxotLifBZ1v0J//Kvk0=; b=eJn422n99V3iRCCMSYPN5Ju6fFtxr3bAavCMucJIcHdZSLGO86yqOj3MMb7+pLrzDC4I4NYY8NgLdgUghLWo8+PtVepS2uHHTCaoUC98sHfgTGEOg3lb+M6coynTuDvxKGnvYv2yqC94S4QALbqmDjvg+PopUXyEBiBuTBdxfYnJvW9SN/757ePoWhushY8GYW9SNMzwsABpM2cNHtbdkTccifmhP87qqW4mM/yYqMNrDCXrpADU4zLINxxuxmd8XWVXE1pN9ELTfpjcz4DX82Kwh5IzmQkzzi6rAFZiB+OGz4Iu1LWzjHznBPO0TjwrDQvcQ0eTcpVbphumWqoBOQ== 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=2hI7Ej2sCmJ6Bch/OyCrt08AWxotLifBZ1v0J//Kvk0=; b=hRUI2VrPtQrSi0vyLcUMQ/Zwp3NLeLL6pQjjiF+YVFD84h2UjOZLT49udnw58xJoGUghi9IjmAnktTUAFi4RSCJoZGM248Yy41cuSrMVsdVn9o9BtjyLPP8B8WDhcyZcDr20PIbUGrE/eNJgjxXM40Er44y13i8Qn1VaL6ysgzp8zdS0MrCx2INtPVcre+GBSczSEKd29Yy8aBpsrkMZtzp5fXYN4XBlJ6mYl4ruSxridlfu/vpeNks2/awHkpPLTpO0OR/nj6S/x31g/Ff2tKLLrovL/0RQLHRtcolaM38YkXWXSyesNpC0FB0Db1DKA0yIMa1f2gKOqSOssyC73Q== 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 DB9PR04MB9819.eurprd04.prod.outlook.com (2603:10a6:10:4c0::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6178.19; Fri, 10 Mar 2023 10:20:28 +0000 Received: from VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::154e:166d:ec25:531b]) by VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::154e:166d:ec25:531b%5]) with mapi id 15.20.6178.019; Fri, 10 Mar 2023 10:20:28 +0000 Message-ID: <5771df73-12d8-e880-a051-86c09d6bdb06@suse.com> Date: Fri, 10 Mar 2023 11:20:26 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.8.0 Subject: [PATCH v2 03/14] x86: parse special opcode modifiers for .insn Content-Language: en-US To: Binutils Cc: "H.J. Lu" , "Jiang, Haochen" References: From: Jan Beulich In-Reply-To: Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-ClientProxiedBy: FR0P281CA0053.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:48::17) To VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VE1PR04MB6560:EE_|DB9PR04MB9819:EE_ X-MS-Office365-Filtering-Correlation-Id: 9cb5348b-3781-4a15-2c1a-08db21511226 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: csKLAwS0S2AJONTtpqGPCy8t9ucVuHEIY9ohSQXalC2GbIeqBlKqsaaRStF+X+szD1wIJSo+tx02dJBc+vEbEljusb4grIDY4sy9UCurX65wnY1YbGLtTWI7qNd3bCMsYyB5bp5urFacjbeYm2XJHcTalLF5yBRE5sv35uCdpIlWGkjeoJbGKzlNBJvixr+GQOkDL4E+DTyo2jKRjgazxPsej7QvOHNBs+BapW/rdsnKX+ACPCfqGw4EPdwRMU4RvqfZOwxCZw82rEUQZGQo099tkhF33fjph1+FLJJvm59VZomcG7eW8KNyT1V+rZaItmmUG/I8h9UghjaisIlZtiYOXPMersVgxTjKspy4pNCKhwOlLbnjWXt/k8Ct+3x68LuiovBwUoYPtyTj3+6zsHxCHrk9RWEHqnQVrCxbePN/t2U6I4r2B5jly9B/dHWO4sJxGRFlEm0nBl3lQm1/oBf9LdIhjsds5IWY0qf0YLd6IrQeBczf44koRUMWmnaPracH65js+SOTLvoFTe34B58J141KivhN9iJqM36caDaG6TaE1SM2uX9ryu1u+K5phPKGZGbgZxvvOSJI5kWqVxo/Q8AAHJmCPUJuvnJj5wELwjrOH0Gw6aWFK2m3AotebvthEGZZ7OJ73h+K2cG1aUiVOyCNEkF6VZE/d6ZiUu4IWz3oGlO2Rzwz28Y02mzN86QTjyF6KNegRYBBBN6o0mZeWa+d590WiTfVougd+vKNYonKLSA2K3gRTVllHXEBdP1j4vWPtKKGgJX9W8sdEA== 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:(13230025)(396003)(39860400002)(136003)(346002)(376002)(366004)(451199018)(36756003)(5660300002)(83380400001)(26005)(186003)(6486002)(6506007)(6512007)(2616005)(66946007)(478600001)(316002)(4326008)(6916009)(8676002)(66556008)(8936002)(41300700001)(31696002)(86362001)(66476007)(54906003)(38100700002)(2906002)(31686004)(142923001)(45980500001)(43740500002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?dHMwcS9jSHR1UTM0d1Iwa0pSWjFNZlZvNU9jUnQ3clZHb0VlaGplclcwcXpm?= =?utf-8?B?YllIV1pLSFVDYjdHdGREMXN0RkJkNmc3ZWR6enNoK3NpYlhPOHREejVrQ0ZQ?= =?utf-8?B?RHpxUTI2Ni8zYmIvSjF4d0J5d3FzOHA0R3JTV1lpaG1NbXdkTnVVb0hvVzRM?= =?utf-8?B?bTIrbzRpZFo1MlhpQUZ1b1ExZGR3Y3k2YmFVYWhDYUlxb3dsYVNLTjVUL3FG?= =?utf-8?B?YkR2aHdqUXczbWU2U29RckorekVWdSs1N2lueTlJWGJWa3dDNzdIVHVxMlJt?= =?utf-8?B?UlFmeU5EdWdrMm1zeitxNzlYa3JEYWFkL2xEanpxeUxuemNGa0ZsOWRoMVJK?= =?utf-8?B?bmRCZk5KRUdwTklsWHhqSTFKbEhsTzJDV2N4c0thNy8wT2hoTDU0ckRjT2xX?= =?utf-8?B?d3lJVjFwRDBUdDhFRWlMbytUdW5sMWtROW1TUjRsdnU5aDhubVdwWGl4Mi9L?= =?utf-8?B?N0RGRmFod0Erc3FBTlBDTndmZkx2WEk3L2JyYTZTYXFsaDd3U3JaOFlEenFY?= =?utf-8?B?cnd0TFg1YjkrSzNqeGlnejVkRkVuYmpaZnMxUERJVmtsUStwMG1LbEx5cUM5?= =?utf-8?B?cVNNcUI1ZUdlTWpYamU1UHh2cmhycml6dEF4YThRVUtvOVlkbVZ5eFJpaG9y?= =?utf-8?B?VWl6ZkJIVmZoQ2hTNzVWeURzVnhRZ0owcjNhM0c5V3FxWkJtMUlCV0NXdzNo?= =?utf-8?B?UWFINlBFNC9pOWpCcHBUN21aVERqWlVmUStTSTUxQXdjR2tIUE5kN2FuOHEz?= =?utf-8?B?bUd1TmsvTWFCandFUWgvcmRkdDEyMHdUQzAwUWROWHQzdnBmSEl4V0JFZFpJ?= =?utf-8?B?bjNqOHRwVnVFQTJxN3dnRFJKU3lMNVlTa2tMWitkWkFZVVNWN3h6QXdrdTlv?= =?utf-8?B?SWRVZnNPUE9vb2hPa3JKUGl3QnhMbDdtc015MFVwS295aGJtY0V4ZGNBeVIz?= =?utf-8?B?eFR6cVhPK213ZFNoNjRqZFRwSXlhdXJNdUcwM0JQOWlTc2tKMitiMU5oem16?= =?utf-8?B?OXRzSThYNUduL3E2V0FKamZVQUUzd3RDU1FwZ3RnRGtBNkxlV0VwTE5JODAx?= =?utf-8?B?dkREWXB5Zk51Q25UZ05wR2R3NXFkNjVBQTJhQjJGU2lCL3N1ckVmZWgxL0VT?= =?utf-8?B?bnRGS2lSNERVK203aWtOWDZKbkdJWjVnY2ZQZ1hwZm1QeHBpQTVmU1pMUC9O?= =?utf-8?B?aWJoUUptZWNKWXVXU25mdlVoZTBkQmh2SlhlUk43cTh0UXJacG85YXNMMW1V?= =?utf-8?B?SnVlWEoxbzRPZElIdHo4VVYvTmJXYlRrOG1ZNWt0REFLZjl0MVpNS0VKSU9N?= =?utf-8?B?UHdKd05KWjRBSWVkODhSQyttS1hyTVI3aUZsRGpzR0Q4cWlXVEVrOStKV1dQ?= =?utf-8?B?aVRudGpqL285ak9rYVNWSndYb0VtYmhvU213TUFWbGM2SzlMK2czQW1NWnBQ?= =?utf-8?B?a3JJbnBaSjNFQno3TTV3cVdUZkdZZXh4NjVlWEJWd0VZNU5QRzRQbVdqVUNu?= =?utf-8?B?TXdWRDQyN2pUNG8yOXR5cW45WnJJWWQ3Wmt5alYrWE82eFVyYnZOZE9PZ0JE?= =?utf-8?B?V1laT1RkQUoyYWxKdnRzQythbE4xcE1UeXMrVjFnNFMwSGlOd2RSV01TVzJM?= =?utf-8?B?bWJXYmVSWjNndEJUSVZoY01BQ2YxSWVMSjgvNzFLeU5uaFR0WUFvQm1MTjhJ?= =?utf-8?B?aDJ2SkpXKzQrYU1oNTRrazJESUg3TkV1LzdpaFJGWHdTV0IvcGVOUzlveW1E?= =?utf-8?B?OTdJLzQvZ1NwRStNZjljTm9XOXFiZ29XTVBkL2hQYzNIUXRoelBMcUZUNGFL?= =?utf-8?B?SGFBeDY1aEpQVno3VmV5V243WEdqQVh2NEttYk5MdWZZTyt3dmVEVDFEWnJz?= =?utf-8?B?SXdZclVxSEpReU9scjJnK3lqRGd4T3JySGtyRG9NZ0VsVzhMZnhVREVqRUZN?= =?utf-8?B?bGFOWU1HVllNNjQwWEN6SFRKS294NloreHNKdVhNYnJiK1F2TXROWGlkSUlm?= =?utf-8?B?NHE1RndzN0p4MzFMMHl5amoxMkNmTHJzNjQyTVBKVXJvdTIvYzVlZEJwaUVt?= =?utf-8?B?ZUZFTU5rYkxZZFJKaFJsbGFPSTQxSHl2UWdYN3ZQQllGRFF2OXppVG4yNWt0?= =?utf-8?Q?yqI6Rfg2JNn7ThJqx69Q+IqeM?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: 9cb5348b-3781-4a15-2c1a-08db21511226 X-MS-Exchange-CrossTenant-AuthSource: VE1PR04MB6560.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Mar 2023 10:20:28.5491 (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: pNQ7pvbRdBBSXZ8aNhuuEAFzpgBdFzH09Dy1/7hg9M7Eif9c3D17XPIbb1q4NAkiDdIaJwAx0WYt2bsjWSsOOw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB9PR04MB9819 X-Spam-Status: No, score=-3028.2 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: So called "short form" encoding is specified by a trailing "+r", whereas a possible extension opcode is specified by the usual "/". Take these off the expression before handing it to get_absolute_expression(). Note that on targets where / starts a comment, --divide needs passing to gas in order to make use of the extension opcode functionality. --- I don't think it makes sense to further complicate things and also consider the use of quotation inside the major opcode expression. Ambiguities in particular with "/" can easily be resolved by simply parenthesizing the actual expression part of the construct. --- a/gas/config/tc-i386.c +++ b/gas/config/tc-i386.c @@ -10742,7 +10742,7 @@ signed_cons (int size) static void s_insn (int dummy ATTRIBUTE_UNUSED) { - char mnemonic[MAX_MNEM_SIZE], *line = input_line_pointer; + char mnemonic[MAX_MNEM_SIZE], *line = input_line_pointer, *ptr; char *saved_ilp = find_end_of_line (line, false), saved_char; const char *end; unsigned int j; @@ -10768,6 +10768,7 @@ s_insn (int dummy ATTRIBUTE_UNUSED) current_templates = &tt; i.tm.mnem_off = MN__insn; + i.tm.extension_opcode = None; if (startswith (line, "VEX") && (line[3] == '.' || is_space_char (line[3]))) @@ -10994,10 +10995,46 @@ s_insn (int dummy ATTRIBUTE_UNUSED) goto done; } + /* Before processing the opcode expression, find trailing "+r" or + "/" specifiers. */ + for (ptr = line; ; ++ptr) + { + unsigned long n; + char *e; + + ptr = strpbrk (ptr, "+/,"); + if (ptr == NULL || *ptr == ',') + break; + + if (*ptr == '+' && ptr[1] == 'r' + && (ptr[2] == ',' || (is_space_char (ptr[2]) && ptr[3] == ','))) + { + *ptr = ' '; + ptr[1] = ' '; + i.short_form = true; + break; + } + + if (*ptr == '/' && ISDIGIT (ptr[1]) + && (n = strtoul (ptr + 1, &e, 8)) < 8 + && e == ptr + 2 + && (ptr[2] == ',' || (is_space_char (ptr[2]) && ptr[3] == ','))) + { + *ptr = ' '; + ptr[1] = ' '; + i.tm.extension_opcode = n; + i.tm.opcode_modifier.modrm = 1; + break; + } + } + input_line_pointer = line; val = get_absolute_expression (); line = input_line_pointer; + if (i.short_form && (val & 7)) + as_warn ("`+r' assumes low three opcode bits to be clear"); + for (j = 1; j < sizeof(val); ++j) if (!(val >> (j * 8))) break;