From patchwork Fri Mar 10 10:20: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: 67321 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:5915:0:0:0:0:0 with SMTP id v21csp788655wrd; Fri, 10 Mar 2023 02:21:34 -0800 (PST) X-Google-Smtp-Source: AK7set86/iaQ6rLY4oktPVzsY99beF5g8vFh+KFKeKC53pIX6oze1hZ7qRYQIY/aJHquPHrr4Asx X-Received: by 2002:aa7:cad1:0:b0:4ac:d90e:92b with SMTP id l17-20020aa7cad1000000b004acd90e092bmr1019385edt.10.1678443694235; Fri, 10 Mar 2023 02:21:34 -0800 (PST) Received: from sourceware.org (server2.sourceware.org. [2620:52:3:1:0:246e:9693:128c]) by mx.google.com with ESMTPS id gt11-20020a1709072d8b00b008c960203230si2115953ejc.351.2023.03.10.02.21.34 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 10 Mar 2023 02:21:34 -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=NMAjgoq9; 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 901813857365 for ; Fri, 10 Mar 2023 10:21:06 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 901813857365 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1678443666; bh=2hI7Ej2sCmJ6Bch/OyCrt08AWxotLifBZ1v0J//Kvk0=; h=Date:Subject:To:Cc:References:In-Reply-To:List-Id: List-Unsubscribe:List-Archive:List-Post:List-Help:List-Subscribe: From:Reply-To:From; b=NMAjgoq9oPVOFpRGnS07J9uLtatAHlc2eVfYzuTZNxJ6eWRHSNj7sHYPHVm9FY712 wzSNSmtGcAUjpIBA//6cAdXhpCGphpiaTLRuuZguaShMHYWqv2ZW012zW9TgG8014q IC512EgDWf2PAsg4doua8gQBZDpndgnN1tsUTE8I= X-Original-To: binutils@sourceware.org Delivered-To: binutils@sourceware.org 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 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 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: In-Reply-To: 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?q?ts0q/cHtuQ34wR0kJRZ1MfVo5OcR?= =?utf-8?q?t7rVGoEehjerW0qzfbYHWZKHUCb7GtdD1stFBd6g7edzzsh+sibXO8tDz5kCFPDzq?= =?utf-8?q?Q266/3bb/J1xwBywqs8p4GrSWYihmMmwdNuUoHoW4Lm2+o4idZ52XiAFuoQ1ddwcy?= =?utf-8?q?6baUahCaIqowlaSKN5T/qFbDvhwjQw3me6SoQrJ+zEVu+57iny9IXbVkwC77HTuq2?= =?utf-8?q?RmRQfyNDugk2msz+q79XkrDaad/lDjzqyLnzcFkFl9dh1RJndBfNJEGpNIlXxjI1J?= =?utf-8?q?lHlO2CWcxsKa7/0OhhL54rDcOlWwyIV1pD0Tt8EEiLo+Tunl1kQ9mSR4lvu9h8nmW?= =?utf-8?q?pXix2/K7DFFahwA+sqANPCNwffLvXI7/bra6Saqlh7wSrZ8YDzqXrwtLX5b9+K3jx?= =?utf-8?q?igz5dFEnbjZfs1PDIVklQ+p0mKlLyqC9qSMqB5eGeMjXje5PxvrhrriztAxa8QUKo?= =?utf-8?q?9YdmVyxRihorUizfBHVfhChS75VyDsVxQgJ0r3a3G9WqqZBm1IBWCWw3hQaH6PE4/?= =?utf-8?q?i9jBppT7mZTDjZUfQ+SI51AwcGkHPNd7an8q3mGuNk/MaBjwEQh/rddt120wTC00Q?= =?utf-8?q?dNXt3vpfHIxWBEdZIn3j8tpVuEA2q7wgDRJSyL5YSkkLZ+dZAYUSV7xzAwku9oIdU?= =?utf-8?q?fsOPOoohOkrJPiwBxLl7msMy0UpKoyhbmcExdcAyR3xTzqXO+mwdSh64jdTpIyaur?= =?utf-8?q?MuG03BP9iSskJ2+b1Nhzmz9tsI8X5Gn/q6WAJjfUAE3wtCSQpgtgDkA6LeWEpLNI8?= =?utf-8?q?01vDDYpyfNuCnTgNpGdw5qd65AA2aB2FSiB/surEfeh1/ESntFKiR4DU+m7ikNX6J?= =?utf-8?q?nGIZ5gcfPgXpfmPxpiA5fSZLP/NibhQJmecJYuWSnfvUhe0dBhvJXeRN7q8tQrZpo?= =?utf-8?q?9asL1mUJueXJ1o4OdIHtz8UV/NbWbTk8mY5ktDAKf9t1ZMKEJIOMPwJwNJZ4AIed8?= =?utf-8?q?8RC+mKXrMR7iFlDjsGD8qiWTEk9+JWWPiTntjj/o9jOkaSVJwXoEmbhoSmwMAVlc6?= =?utf-8?q?K9L+g3AmMZpPkrInpZJ3EBz7M5wqWTfGYexx65eXBVwEY5NPG4PmWjUCnMwVD427j?= =?utf-8?q?T4o29tyqn9ZrIYd7ZkyjV+XO6xUrbvNdOOgBDWYZOTdAJ2alJvtsC+alN1pMTys+V?= =?utf-8?q?1g4S0HiNwdRWMSW2LmbWbeRZ3gtBTIVhcMACf1IeLJ8/71KyNnhTtYAoBmLN8Ih2v?= =?utf-8?q?JJW+4+aMh54kk2DIH7NEu/7ihRFXwSWB/peNS9oymD97I/4/gSpE+Mf9cNoW9qbgo?= =?utf-8?q?WMPd/hPc3HQthzPLqFT4aKHaAx65hJPVz7VeyWn7XGjAXv4KmbNLufYO+wveDT1DZ?= =?utf-8?q?rsIwYrUqHJQyOlr2g+yjDgxOrrHkrDoMgElW8LfxUDEjEFMlaNYMGVYM640XCzHTJ?= =?utf-8?q?Kox6Z+xsJuXMbrb+QvMtNXidIIf4q5Fws7Jx31L0yyjj12CfLrs642MPJUrou2/c5?= =?utf-8?q?edBpiEmeFEMNkbLYdRJhRllaOI41HyvQgX7vPBYFDQv9ziTn25ktyqI6Rfg2JNn7T?= =?utf-8?q?hJqx69Q+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 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?1759975774980126582?= X-GMAIL-MSGID: =?utf-8?q?1759975774980126582?= 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;