From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR05-AM6-obe.outbound.protection.outlook.com (mail-am6eur05on2040.outbound.protection.outlook.com [40.107.22.40]) by sourceware.org (Postfix) with ESMTPS id 93EDC38582BC for ; Fri, 3 Mar 2023 12:57:43 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 93EDC38582BC 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=kNVFoOXqe/hOmIb+ThNwn6JFvW7phRCyWTOSQUQ+GoogRbeSh3MCJ+dasrYpEsvF28EXFClkErf0AoRnpk5Z2bDiaF8XUWHKmRrd2y4ccg1CTpNRz1z8Qld+reor5Sd+k5YY463574f1g9C5reRaDo5+dCsDdtLgFiVvBLWVlmTWDJN62cFQphUun/i8rNjnU7cIMqqt2/902gO9z/NdyXb1iI7cgFYZL7NN+wryO8NZ51BQTG6brjSSSo7Ing7JF4DjrM74HLehQZ499oD6WcG7f5gDVWu8FZpkMO6lcuacmx6N08Q2S1uwktdr9gur/lzTV7qEUO/lZVtV3fEe6g== 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=7uENGYSx8rU/QpaYGwvLRIWbo6auat+wq1cF85QAN5k=; b=gNFaFT1AsQ2LMZL4gVWkd3Qgvorqpt8dbKdm0eBtPXDl2iV4N2yxLy6Y+DArZ8hmxuWOLJfkEsw78CLpZvBLZFhjFP5YJbRX7AP3aCVfIt2xHuIDdvG4IUb5VXTI/Vhjqc7W7LR/cBypk5+11y7GTInKRrhlbI8cDyIVXrZ2vVtkIYR4tdFBjkS9NDF6on7DnGvxnFfLg/oTf6VG5u9Cm1Un+Mx6P44Em7khoWwBRZRuOPiRCETL1sjEcFgcYehZ7Vfhg0FAy5ayfveQrGV0O0VkxxgN+Zwf992R9GoSGmWGV8U2LEROG13ylyNydyUHML/W93xdPJ1J6mV4S33/Gg== 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=7uENGYSx8rU/QpaYGwvLRIWbo6auat+wq1cF85QAN5k=; b=cHGZ0pCIBhUdax7mu+dq9rbOUbfKukU5JvLa5AzjiOpqRC03NhOsMeKv9RegWRiCjZP2Y3HlVD/0ZVeHEIA4LEcli5Q9lsMLQFmUUh9KLuHD58RhHc1ySJ1eqXrVVDE/2Gub5+kZXRVWcoZdPAinZF8LXPvcUuaON5YqoZKPs7YvoXGj5olQXfalCCFjNe3W+0ayhQdPCn1RjIOzeXBDUm0wLLVuffKhIy4L+p30iCAqayaIkgfkwkCxjWSoDabeTjWBbWItYpXlz9iVCoDo6kRhxoETGUs29TWQcGMGB1Pwa5uSs4kzO3IrHuYbXH5IpNrisgicRNyxp5zk/7N+sg== 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 PA4PR04MB7725.eurprd04.prod.outlook.com (2603:10a6:102:f1::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6156.18; Fri, 3 Mar 2023 12:57:41 +0000 Received: from VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::154e:166d:ec25:531b]) by VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::154e:166d:ec25:531b%7]) with mapi id 15.20.6156.019; Fri, 3 Mar 2023 12:57:41 +0000 Message-ID: <242fa8c9-44f3-43e8-fbbd-4248a6abec18@suse.com> Date: Fri, 3 Mar 2023 13:57:39 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.8.0 Subject: [PATCH 03/18] x86: parse special opcode modifiers for .insn Content-Language: en-US To: Binutils Cc: "H.J. Lu" , "Jiang, Haochen" References: <764b9e03-18bd-6945-692f-a250522196ca@suse.com> From: Jan Beulich In-Reply-To: <764b9e03-18bd-6945-692f-a250522196ca@suse.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-ClientProxiedBy: FR3P281CA0092.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:a1::12) To VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VE1PR04MB6560:EE_|PA4PR04MB7725:EE_ X-MS-Office365-Filtering-Correlation-Id: ea1d8ba6-370f-476a-0c0d-08db1be6dfb1 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 2SyZ4tiDwdPxfSp/B5G91jinsUTZ4rxcqFnTtd75ZlGjusATADiwiQ4qa2bLflsQwSKyz6jZJhktnjRyG24MfsEqZnmXOIsZjSDHm7xp2AOkv2jCAWoUug4eoZyOCuWNMg1U/To38pY0ObO5SA1vCWDvlh40S1S0MBJYPlstxgJwtlJ2M6Pd2QZORZSRuiJSz5nnXQKVLCSEYHd4Q7oMcmveiiyGV2ElxmWpOqpLcYOj3xsdaTg4jQlooRV0IbWvdYa1RPyuGYsAqKRkoH70eGd4YK1wjJnZoq/Df/LIXTzU962hLOIdk2eHhcp5GH5E+t0TcXUWuw5Yd43bQ70a/zoKq4LXmis6+cUhRyACzWouSNRQmfUS9QBSZChTAG28czJJ1c1Rkg6iodxl3oOANwoz1GMXC1FP3PNQ2+WQi8u1SgQMJxSChyjS6Ska3Q1iL0333yWka28a/zd20TTueuVWrB6wBWmBm2qiI61ua2OHNoAlcDBfPeuWGkGlJxhfi5NR3WY00MM4n+ZSDqPTayHLTbDoIVnKoE26wrtkfTxNQSmyAH97gu/vY17vExTvefbJ39jgp0LKLip/SoRzCrhU88BSJRaISn9Al6y9IAudWfgOsrjuG6dGFMic7KgJhBxBPFh0rpEO1WxVp1vovIJZsgZjxcmCAO2nNtlOG7AZGUaik7jJujl9XnT2oxQkrQjW6/phmiIntVJriaeTY3ugNV7IfJs3CexfPdU9KmVbkurnN0sht5OYB5ZJbrfkdavS0h0G6oVuvlAdJhagaQ== 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)(376002)(39860400002)(346002)(396003)(136003)(366004)(451199018)(31686004)(66946007)(86362001)(31696002)(66476007)(66556008)(8936002)(6916009)(5660300002)(8676002)(2906002)(41300700001)(4326008)(38100700002)(36756003)(54906003)(6486002)(316002)(478600001)(83380400001)(6512007)(6506007)(26005)(2616005)(186003)(142923001)(43740500002)(45980500001);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?eTN3N2ZEUGpTZUh0Q3VyWDJSUzg2WFozMjc4K3VaSXZRcXEwOTdnNkx0SGxB?= =?utf-8?B?V3BZMEtObGdSa2txdjFKQU8yTmx0T0JWa1ZWOTg3V09oRWRmTlRLRXc3ZzIz?= =?utf-8?B?QW1GaVpnRnEyc1ZiRFlvYXJWMzBoMllzQnRqcldDdlRMTEp0ZDVxTVJVWXdZ?= =?utf-8?B?T1NUdkJuYWYrcENEdG1lODAyNGExcjl6VmFHV2lGVy9qdi9EdG1YOFZpM3o1?= =?utf-8?B?WWVYam1wZmNKbkM3UkI3eG5FZks5UCtWZUZyMmptMjVqTUt0Z3NSazdlMTJw?= =?utf-8?B?R2FNb2x2OVFDOG5FZmN5djlmTkpxU25PeXB6emhsQVJlS0N6QitFV1IwYU5u?= =?utf-8?B?QzVaSEh0eHRWOCtqSzREaEZlREVRbUJoc09zWEpVVW1IWmU1UVM4NVFLSnEw?= =?utf-8?B?eVZLUTdBTTlWa1lzZTJDQVdldlA4bGoxdTRZTmc3NUxNODFXbE1lR1JXNW9p?= =?utf-8?B?V1gwdXp6enlsdHlZa0l2V3pDbTN6bHhibXVqOHl2bHhzVmR0Zld6blpkWWtm?= =?utf-8?B?ZHlmTmU0eEZmeWpRUlNxazZucDdrSnU1d3FGQkhQdWVtZEhOODlwU3JsY2FG?= =?utf-8?B?WFBpSnVEL25tWDFZNE5pVmZzTXFHczFhR1ZxRkRYd2ZNVDdVdVZwVUU3OVJy?= =?utf-8?B?bVZSa2FOUUZpYTRyUWpIcWZjTHZQS1pFWGMxMkU3WlZQRlZhKzlNVURad3Uw?= =?utf-8?B?bW1OMUVEMzE5WXlRd3FlQkhJZExuTGdOYmluOXRzSjA2SGlDOGgwckpqL0dW?= =?utf-8?B?cW9HcE5id3RuUDlYYmw3TFkzemtGbTRIVitneklSbUxUcFJUNTRXajlTSTR4?= =?utf-8?B?KzNLY1FvVEtOVHZHcjR2V2MzWG5BU2FMZkJlT21tRnI5aU43L1I5UGsvWlls?= =?utf-8?B?ZHljU0QwNTdORW1iVU40dm5ZNTR3d3VPYm1Yb1I0RzhCNWRqc3hQZ3JWRkgz?= =?utf-8?B?QnEwZGhCb3RMd0JnTTZIaWZYM2NMRUZqZzQ3WXI4QTJXTVEwS0k3VHlzc3dl?= =?utf-8?B?TGRWOERhY1hOdWpGR2xoMUtEMFRaMUJ5dzh6bGxGZmp6TEdnUDc5Nlgrek9m?= =?utf-8?B?RlpWeGhiazNkUy9FQjRsdG4wY1doSk1SUDdPaVNrYklOMjlOUjM3SVpNYkdk?= =?utf-8?B?Y0xzSXFwemlHd0YwMndKRCtIVzhoaGhLcHA2bm1HMkJ5YVRzR1E2VFhraStY?= =?utf-8?B?eHp2N3pLd09EUUd5VThNY1U5OUpWM0xBT2h6OVh0UDdQUURWY2N5d3FLMDhD?= =?utf-8?B?VHpaaUkwOVh0d0dyOEk5aDFKbjhjRXZHNmU3elNLN1JEdXd1c25FTlRsUTlv?= =?utf-8?B?eTJFMlhxYzlBTVlMWTdacWMyTFhJRzU5MkoxUy9TMlFKdTY4bldWdzNxK3VK?= =?utf-8?B?c0lyVDVoamhrNjd2UmdXVVU4Nk1zZ1VSM0s2QkpPWFhiU09zQ29la2U5YWV4?= =?utf-8?B?cDhqNDd4MHNZYUhBaTlJUDZTSDZYVjJOT0VoVEpKc25qWFo5V2RkQ1lyREhq?= =?utf-8?B?NlNTamRYQUk1VFphRDNkUzV4NHR1OFAySTlRV1E1U3JSSmZ5QTNxZFdOZUNY?= =?utf-8?B?NmNYMldFd0VXUE9sYlN1bHZRcUdEVytIK054cHZFd2V2UUs1MGN4R01KSUFW?= =?utf-8?B?UnhacEw3T3RPQ1RIY1hiRFlJMURONGk2dVpOSU5nOE9ET29xZ3B2STZLaSs0?= =?utf-8?B?VEh1cjJHT2xRZnlXazJ4Z2hLWWtGdEpPOTdHNnc1bE5sNDZEU29iaFRyRllG?= =?utf-8?B?c1NkWDVhQnRoZmpEQ1hGV0h4K0xOWTdpL1NGbWlDK3F1VW5kOERTSHhLcFNh?= =?utf-8?B?SmdqVmhxS1ZCSHA3dldLUk8yM0VOMVRqbTdNL3FSRU1Ib3FkeXBaQWVtRWNL?= =?utf-8?B?YUQrcHkvaXBKSTdRRXU4WGorNmpCYnpaTkJMQStBOVM3MEFkdnhVU3d6TUVz?= =?utf-8?B?cngzc3YzQTJCZ1RkcVJpSllpSWJUMFhTMXAwVFlrVDZGdmR0eElMWmJJb0FT?= =?utf-8?B?ZUNKdlJXVGpMaGtQcG5PV1VoYmZLeGg2QU5NM2FZUXpBSm5VbVdTNzErYVpV?= =?utf-8?B?dnpQNHBOYkV4anVOSDI4cDd0dFVHU3B4ZjFaUEdoK2FVTUtvWjFSdXdNU1ov?= =?utf-8?Q?qQNxO7YwXAFi5j3GOIQWYGN3U?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: ea1d8ba6-370f-476a-0c0d-08db1be6dfb1 X-MS-Exchange-CrossTenant-AuthSource: VE1PR04MB6560.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Mar 2023 12:57:41.4125 (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: 7tySflPeeFygObyPLy/vrXe8mglTaZvHcG4EnSnaqq41DiqyYRKZkPE+w3Xs2Zioz/uvcf3vQ9g9FoMTUO6rkg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PA4PR04MB7725 X-Spam-Status: No, score=-3028.3 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(). --- 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 @@ -10739,7 +10739,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; @@ -10765,6 +10765,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]))) @@ -10991,10 +10992,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;