From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR03-AM7-obe.outbound.protection.outlook.com (mail-am7eur03on2064.outbound.protection.outlook.com [40.107.105.64]) by sourceware.org (Postfix) with ESMTPS id E787F3858C01 for ; Thu, 28 Sep 2023 12:42:31 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org E787F3858C01 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=KOlFfOjXRIbxpRygcRLKAsrKBzHs72vAIELrwTKFYstPD5NsAeqVh5hjRXzB8lQROqhRc3c7JimbJ+NrYrbyv3OLuKFQJB7LIT8mFy7HBlbLnvLAbS4jLdftmC6KLEsrGx6aZHYa88B5uyxAleLTPvfKE7A8ly9gPkVbqcfEuP8BDx+jJmd/iXCVA7WZ4lf222zpwozdqoOm5D8WJZrJk6ciXxhML9dZ7MX4GKZezbjg38FncWFCUh2lcKaeZDmXXHLo5/MirC5D2l24lQSR/Tde9mig3bh49s9H7h6SWhRmd3+24ZSKJ7uc4ONHHyWp2XlGIEQWeoaIEK9YUJdyhA== 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=9ZdQftx2hPu+joeIbmKPM8wJ01CA1cLOzwcBqjhfjgM=; b=LxjnpLC/VrLwueixxBhhNOHrERZmcw7sxa7YCa6btv+T7W5yaQczXLu9eM+4oJXqvI/INJz4J5TYSnbYHaxbmqyhQbt+rIfgGNfVxdNTtrLk2+3l7wsdjNwnzBzi0AjXPSRBLNXc93ny1l4WP7GSC0KUgK09UyQ3/g9dD3tevxGSN987asmTRo43oEpRP2F8S0hxfAAyppAu1E/gFnadqGqNtKHpeEax/EL3iOsEbow4blq6RS/iRCkHCdTUICnLZMAFo30v3PgIRkQFRkLeKZxmjT40lphCH9C6wCp4h0jbdomF5m+G2vhTqRUfxCwSZFIW/VScjReKArsasUBSbA== 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=9ZdQftx2hPu+joeIbmKPM8wJ01CA1cLOzwcBqjhfjgM=; b=P4/AMoOHwSfeGK4ahXYo3V1Mf3ZUjdNXB8EZLKIb1q3AvDdc8ErmcYnOp3Qe19ecXH2p8G3cqYMHjdJdk3mMPTiZMvF7hwYaQ5n7ohGDv0GsoOuKUA0x6KphfEVQZ66+hsbQS3yj+REDNVW7B8xg6+H9v/XNhzE0PFkiH+fzCaGbj+APeVbrof30oJOAWKvAG99mmjfRTtwMfWqTXiyeIkO2mhh/9JrKPCeiE7dLhIuoXF6cQ2ZXc3WqW/T5wM/D+DrNIIVnkMi0ECUVYuiXsMky+kuQdFt03tocU8z5c0JpAcYn1YhCelVvc9V3CEXI1Y0uH4oqqgNmweI1Z6dk8g== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com; Received: from DU2PR04MB8790.eurprd04.prod.outlook.com (2603:10a6:10:2e1::23) by DUZPR04MB9793.eurprd04.prod.outlook.com (2603:10a6:10:4b0::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6813.28; Thu, 28 Sep 2023 12:42:29 +0000 Received: from DU2PR04MB8790.eurprd04.prod.outlook.com ([fe80::9f5d:8bed:7a5b:e75a]) by DU2PR04MB8790.eurprd04.prod.outlook.com ([fe80::9f5d:8bed:7a5b:e75a%6]) with mapi id 15.20.6838.016; Thu, 28 Sep 2023 12:42:29 +0000 Message-ID: <99f05102-859c-5882-07f3-4c2da54c0e80@suse.com> Date: Thu, 28 Sep 2023 14:42:26 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.15.1 Subject: Re: [PATCH 7/8] Support APX NF Content-Language: en-US To: "Cui, Lili" Cc: hongjiu.lu@intel.com, binutils@sourceware.org References: <20230919152527.497773-1-lili.cui@intel.com> <20230919152527.497773-8-lili.cui@intel.com> From: Jan Beulich In-Reply-To: <20230919152527.497773-8-lili.cui@intel.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-ClientProxiedBy: FR0P281CA0231.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:b2::11) To DU2PR04MB8790.eurprd04.prod.outlook.com (2603:10a6:10:2e1::23) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DU2PR04MB8790:EE_|DUZPR04MB9793:EE_ X-MS-Office365-Filtering-Correlation-Id: 8f56f834-fddb-47b6-d71e-08dbc0206070 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: S1HzPVMLiJ5NinmAFl3/xT3cRhqwzE+3Ft+AsK9kAqXl2So5RvaU+8vFlGPS4ip8sDmLIYZg0PcvOSFbP2qF7Z4EeWE18hODYfxbbH/OvqeFvHgTMJtU5CED7jXe5QyZtJVpE4i3sD8bir+XJh7ew5pKDARqHWRRQp2sLOT3EvbXiOjSMGA/hhe6YoH9dv0TYZwhzBQEANz/JDc28Xtjk49P6il3ndXt9hTINURxhSBgXkihEzLBMZ+1+24cGkHeU/omIu/FQBRqe6d48LF47PMifZCIjtQWoOfNahHEv77NcHGVrodDTDyHkWekmybr7PzOFLfmvMm/CbrS8uFaafAfx+x5NOTd8KPgpKtX/cz1aJNvU7S2cMBHbYRjmxZNsm/eFVe9HaqhNOmRAngeMgKc+x7DD9OXo+dP7ZvvXiLm2iIatHD8WZsB+qaEyNOOu5OpTrMKmKx1c7+Rupz75tyuXqu1+UQj1zlzym2EdE/4B92Viao9rf35EbZ0QVVs0xhzwX3brKt7iiZZwdGHytPiQhJugLLv+VEOqcwGE0qw133jC4V53Q0Mosxbhu2XCjVKC3gvw6xGGc7K71fa//US29L3/fEhGYA8wdN9T4sLL3t8Yb2nTJCcl1ZWXa5V4nF/tnY2RGF1XeEQcU96Mw== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DU2PR04MB8790.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230031)(136003)(346002)(366004)(396003)(39860400002)(376002)(230922051799003)(64100799003)(451199024)(1800799009)(186009)(2906002)(86362001)(30864003)(31696002)(36756003)(41300700001)(6666004)(478600001)(53546011)(6512007)(38100700002)(2616005)(6486002)(66476007)(316002)(6506007)(66556008)(6916009)(66946007)(31686004)(8676002)(26005)(8936002)(4326008)(5660300002)(83380400001)(43740500002)(45980500001);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?SFVuM252QVFnSGxHZDN0UkVER0JiOSs5ZmxOMTVQajhKcmJ1SVZQRkVZTVdl?= =?utf-8?B?bnlJamtkL2IyRlVGV1hMaGE5MzVOQkJaeitVU203ZDl4SGlwUXhONlp2M1FO?= =?utf-8?B?dy83dThrNWpZK3dzUC9pcVcrNDliNnp4djZITmFCYWN6Z0pSd0RQc1hCajRo?= =?utf-8?B?N3dQbUR6QU1WejVXZGFjZG5yNDdIS3Q1Zk00LzcwM0pJaWhHSFQwaXR6VTFM?= =?utf-8?B?UHhaM3VqY09zOWJYQXVVUFUyODc1VVFjZ1Avekh5N1k4cituaE9EVnlnOTRF?= =?utf-8?B?RGNJRnNINDlFdTBhOVlvTGp0cTBaajYza3o3S2lLbDN2K093NTUzQTZtM3Bw?= =?utf-8?B?a09wN3dtZjVaWHUvK3ZjcWVoNituS1liZVRMUHE3UzV0S3diYWEvSTRyVmk0?= =?utf-8?B?cVBBZzFTdXpLUzFydjJ0N2FmZ0dUNnNXZFRmVmdKdEpDWmx2Nmxxb3cxeUxN?= =?utf-8?B?Uyt5cW5vT0NQODhTekl5eUdVQVFiMnZuK3FkbjhTbFVqWWJOMXFYQkU3OVd1?= =?utf-8?B?ZTRqVkdjVHRMaGJnMllEMDQrQzVmaFVxanhZNmcyNkpKQzc4Sk9odUQwUEJ5?= =?utf-8?B?RXBJbjF4VW9YdzV6eTdkc21pb2JiUTZCYit6dVpGSk9wTnd4eU5oQlJWajBP?= =?utf-8?B?SWdGeVdESEdFK0lUVlpHZ01rZVhJZkV3c2hwd2VobzZPbUNDT1NjN2p3OE9k?= =?utf-8?B?Qy9UdW9iOTA0eXdVS25zeVEvN20rMW5zY2JueTNlczFRemdFd253ZE1BZ25Y?= =?utf-8?B?aWZVMUJBNlZXSHk0eFhDOXdpV0trR3NXd2pacDdnRmR1eElIV2dBRXlidXMw?= =?utf-8?B?ZytCRytVelpyTVp3SHZmd1E3K2JVV0dTUjgvNlJwVmRaRWZpOEVKOFRvNnpr?= =?utf-8?B?Rnl3WkU3OGRLSU9kUjRYYy9abElPK3psS1hscTM2SVM2QnQ3VGZySGhPaGJm?= =?utf-8?B?NlRTbzVzMjZCbktoYnV4dWdTZjl6ZHg4QXkzV2pPYTZtVHJraWtTcE1nOFFB?= =?utf-8?B?dVJIMWtkWE5WZ0Znamo5UTNKSDhYMC9rMHo0ZGw0NjB1TzFXYXFWcHRWUWFF?= =?utf-8?B?eDhvd04wQmVUQmwwZ2s2MDhVL1laU3E0L2R0MHYwVlppQ2N1QXpwekkrRVhD?= =?utf-8?B?NnRYTHdWNklZalVubDRGbWpGd1R0QjBWaG1DNVRoaFZHWk1pREpWTHI2ejQ3?= =?utf-8?B?SWpEWDYzMktlUVBjQnFEUEVvTkpqOVRDZTdCVGpCNmZWZmNUZFNwUTdIZGpu?= =?utf-8?B?ZXJPb0hZbmlpQzlPRllodW5CVmpQVFc2ZXRtTWR6VXpjbVRsckV6SUhYbFZn?= =?utf-8?B?ZzlmcXVqRUJtR3NQQ0ZDWkhnbmQydjdmTlV6RVlDSzlTb1M5QitnYjA3UjRa?= =?utf-8?B?YkZoY2NmTzRnQzRwMkliaGlKeE04aFQ3b042TnR4UnFWN0IweFR2bzkxNHJw?= =?utf-8?B?VUtINVNFNDc5eVp4WDBPNldJeTJTTk9rUTZwV2VzNGF2L1pmRFMrVW9jN0F3?= =?utf-8?B?TmllS1NnQ1pRT0l6aTAzWWtuT2ZYN2d1QlBobys5R01TQ1NjSjdHYUVNbzdT?= =?utf-8?B?aVV5S3drT0tuaUxzbXcvUk9LcmJKbmdWK1VvRVdyRlRCbnZhZVA0S1JqZWFZ?= =?utf-8?B?dXhnMVArN0JNSG45VmxjblpDejJxcFNsZFdzL0lIZWNvMS8welRiZC9tWVMy?= =?utf-8?B?Y0w3d0dnQUpTNGZUd0lrcVd6MFdGWTJyMXA2b2ZibXZQbWptVVc1dmdVV29P?= =?utf-8?B?b0NsM2tLbjB5S0MxbERockV5a2x0RjVSWW9zTzRGcHNqUXNaSGpGelljZlBw?= =?utf-8?B?UGZZMmg5ZW9ZM0xkOFFaRURmNHRITEU2dFRNQ1dHQXZXNnM1a2RUWjNUVTlB?= =?utf-8?B?QmJDakorVlUzaTJVaE9ycjFCZ3IvRFM5ZGlXR2thZERjR0FCUkEybWpFcWhO?= =?utf-8?B?bGYxRlFTMUpTUGczUXJ2SXZFK2l6R0c3ZmRCT2R0QzRueDlSS3RwR2lTeWZt?= =?utf-8?B?UkZoeldqZ3FZcGVuQUNzWmFsZU1ZditrcC9md2RZZ3EySDNsMHl2RTZDbEhv?= =?utf-8?B?RFBMUFdJOWJXZEl3ckFBaHlJR0RLTldLUTRWVDNDUzNrQVlqQ1JLb0lmR0pG?= =?utf-8?Q?VZ7rrtTPFculgZm1jXRHKCc46?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: 8f56f834-fddb-47b6-d71e-08dbc0206070 X-MS-Exchange-CrossTenant-AuthSource: DU2PR04MB8790.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 Sep 2023 12:42:29.3523 (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: UtJlXaQW0iqJqkYoxFn6u+jqQtTRDtGoHbfNlGaTvdoLgXIk12KMJldAfoA3/hEflHl7P+RneSxMBVBjxsXnOA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DUZPR04MB9793 X-Spam-Status: No, score=-3026.5 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,LOTS_OF_MONEY,MONEY_NOHTML,NICE_REPLY_A,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2,SPF_HELO_PASS,SPF_PASS,TXREP autolearn=no autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: On 19.09.2023 17:25, Cui, Lili wrote: > @@ -4178,11 +4180,15 @@ build_evex_insns_with_extend_evex_prefix (void) > i.vex.bytes[1] &= 0xef; > if (i.vex.register_specifier > && register_number (i.vex.register_specifier) > 0xf) > - i.vex.bytes[3] &=0xf7; > + i.vex.bytes[3] &= 0xf7; When you notice such issues, they want correcting in the patch introducing them. > @@ -5944,6 +5954,10 @@ parse_insn (const char *line, char *mnemonic, bool prefix_only) > /* {rex2} */ > i.rex2_encoding = true; > break; > + case Prefix_NF: > + /* {NF} */ > + i.has_nf = true; > + break; I find it odd that this is represented as a (pseudo-)prefix. The manual doesn't suggest so; it rather looks like the intention is for it to be a mnemonic suffix, as in "add{nf} ...". Hence same question as before: In how far is this representation aligned with what other assemblers are going to do? > @@ -7151,6 +7165,19 @@ optimize_NDD_to_nonNDD (const insn_template *t) How useful that this function is mentioned at least this way: No change there? (See my comments on the patch introducing it.) > return 0; > } > > +/* Check if NF prefix requirements are met by the instruction. */ > +static int As before, bool please for functions returning boolean values. > +check_NfPrefix (const insn_template *t) > +{ > + if (i.has_nf && !t->opcode_modifier.nf) > + { > + /* This instruction should support nf prefix. */ > + i.error = unsupported; A more specific error message would be nice here. Question of course is whether, for such an isolated check, you really need a new helper function. > @@ -7551,6 +7578,7 @@ match_template (char mnem_suffix) > goto check_operands_345; > } > else if (t->opcode_space != SPACE_BASE > + && !t->opcode_modifier.nf > && (t->opcode_space != SPACE_0F > /* MOV to/from CR/DR/TR, as an exception, follow > the base opcode space encoding model. */ With an earlier comment addressed, I expect this change may not be necessary anymore. > @@ -7652,6 +7680,13 @@ match_template (char mnem_suffix) > continue; > } > > + /* Check if nf prefix are valid. */ > + if (check_NfPrefix (t)) > + { > + specific_error = progress (i.error); > + continue; > + } Is it helpful (e.g. diagnostic-wise) to have this check so late? If so, is it useful to "continue" when this is the only thing that doesn't match? No other template is going to match in such an event, afaict. > --- a/gas/testsuite/gas/i386/x86-64-apx-ndd.d > +++ b/gas/testsuite/gas/i386/x86-64-apx-ndd.d > @@ -158,7 +158,7 @@ Disassembly of section .text: > \s*[a-f0-9]+:\s*67 62 f4 3c 18 4f 90 90 90 90 90 cmovg -0x6f6f6f70\(%eax\),%edx,%r8d > \s*[a-f0-9]+:\s*67 62 f4 3c 18 af 90 09 09 09 00 imul 0x90909\(%eax\),%edx,%r8d > \s*[a-f0-9]+:\s*62 b4 b0 10 af 94 f8 09 09 00 00 imul 0x909\(%rax,%r31,8\),%rdx,%r25 > -\s*[a-f0-9]+:\s*62 f4 fc 08 ff c0\s+inc %rax > +\s*[a-f0-9]+:\s*62 f4 fc 08 ff c0\s+\{evex\} inc %rax It's kind of unexpected to see this change here. > --- /dev/null > +++ b/gas/testsuite/gas/i386/x86-64-apx-nf.s > @@ -0,0 +1,1256 @@ > +# Check 64bit APX_F instructions > + > + .text > +_start: > + {nf} add $123, %bl #APX_F OPC_EVEX_NF OPC_EVEX_EVEX Comments on earlier patches apply throughout this file as well. > + {nf} add $123, %bl, %dl #APX_F OPC_EVEX_NF OPC_EVEX_ND > + {nf} add $123, %dx #APX_F OPC_EVEX_NF OPC_EVEX_EVEX > + {nf} add $123, %dx, %ax #APX_F OPC_EVEX_NF OPC_EVEX_ND > + {nf} add $123, %ecx #APX_F OPC_EVEX_NF OPC_EVEX_EVEX > + {nf} add $123, %ecx, %edx #APX_F OPC_EVEX_NF OPC_EVEX_ND > + {nf} add $123, %r9 #APX_F OPC_EVEX_NF OPC_EVEX_EVEX > + {nf} add $123, %r9, %r31 #APX_F OPC_EVEX_NF OPC_EVEX_ND > + {nf} addb $123, 291(%r8, %rax, 4) #APX_F OPC_EVEX_NF OPC_EVEX_EVEX > + {nf} addb $123, 291(%r8, %rax, 4), %bl #APX_F OPC_EVEX_NF OPC_EVEX_ND > + {nf} addw $123, 291(%r8, %rax, 4) #APX_F OPC_EVEX_NF OPC_EVEX_EVEX > + {nf} addw $123, 291(%r8, %rax, 4), %dx #APX_F OPC_EVEX_NF OPC_EVEX_ND > + {nf} addl $123, 291(%r8, %rax, 4) #APX_F OPC_EVEX_NF OPC_EVEX_EVEX > + {nf} addl $123, 291(%r8, %rax, 4), %ecx #APX_F OPC_EVEX_NF OPC_EVEX_ND > + {nf} addq $123, 291(%r8, %rax, 4) #APX_F OPC_EVEX_NF OPC_EVEX_EVEX > + {nf} addq $123, 291(%r8, %rax, 4), %r9 #APX_F OPC_EVEX_NF OPC_EVEX_ND > + {nf} add %bl, %dl #APX_F OPC_EVEX_NF OPC_EVEX_EVEX > + {nf} add %bl, %dl, %r8b #APX_F OPC_EVEX_NF OPC_EVEX_ND > + {nf} add %bl, 291(%r8, %rax, 4) #APX_F OPC_EVEX_NF OPC_EVEX_EVEX > + {nf} add %bl, 291(%r8, %rax, 4), %dl #APX_F OPC_EVEX_NF OPC_EVEX_ND > + {nf} add %dx, %ax #APX_F OPC_EVEX_NF OPC_EVEX_EVEX > + {nf} add %dx, %ax, %r9w #APX_F OPC_EVEX_NF OPC_EVEX_ND > + {nf} add %dx, 291(%r8, %rax, 4) #APX_F OPC_EVEX_NF OPC_EVEX_EVEX > + {nf} add %dx, 291(%r8, %rax, 4), %ax #APX_F OPC_EVEX_NF OPC_EVEX_ND > + {nf} add %ecx, %edx #APX_F OPC_EVEX_NF OPC_EVEX_EVEX > + {nf} add %ecx, %edx, %r10d #APX_F OPC_EVEX_NF OPC_EVEX_ND > + {nf} add %ecx, 291(%r8, %rax, 4) #APX_F OPC_EVEX_NF OPC_EVEX_EVEX > + {nf} add %ecx, 291(%r8, %rax, 4), %edx #APX_F OPC_EVEX_NF OPC_EVEX_ND > + {nf} add %r9, %r31 #APX_F OPC_EVEX_NF OPC_EVEX_EVEX > + {nf} add %r9, %r31, %r11 #APX_F OPC_EVEX_NF OPC_EVEX_ND > + {nf} add %r9, 291(%r8, %rax, 4) #APX_F OPC_EVEX_NF OPC_EVEX_EVEX > + {nf} add %r9, 291(%r8, %rax, 4), %r31 #APX_F OPC_EVEX_NF OPC_EVEX_ND > + {nf} add 291(%r8, %rax, 4), %bl #APX_F OPC_EVEX_NF OPC_EVEX_EVEX > + {nf} add 291(%r8, %rax, 4), %bl, %dl #APX_F OPC_EVEX_NF OPC_EVEX_ND > + {nf} add 291(%r8, %rax, 4), %dx #APX_F OPC_EVEX_NF OPC_EVEX_EVEX > + {nf} add 291(%r8, %rax, 4), %dx, %ax #APX_F OPC_EVEX_NF OPC_EVEX_ND > + {nf} add 291(%r8, %rax, 4), %ecx #APX_F OPC_EVEX_NF OPC_EVEX_EVEX > + {nf} add 291(%r8, %rax, 4), %ecx, %edx #APX_F OPC_EVEX_NF OPC_EVEX_ND > + {nf} add 291(%r8, %rax, 4), %r9 #APX_F OPC_EVEX_NF OPC_EVEX_EVEX > + {nf} add 291(%r8, %rax, 4), %r9, %r31 #APX_F OPC_EVEX_NF OPC_EVEX_ND > + {nf} and $123, %bl #APX_F OPC_EVEX_NF OPC_EVEX_EVEX > + {nf} and $123, %bl, %dl #APX_F OPC_EVEX_NF OPC_EVEX_ND > + {nf} and $123, %dx #APX_F OPC_EVEX_NF OPC_EVEX_EVEX > + {nf} and $123, %dx, %ax #APX_F OPC_EVEX_NF OPC_EVEX_ND > + {nf} and $123, %ecx #APX_F OPC_EVEX_NF OPC_EVEX_EVEX > + {nf} and $123, %ecx, %edx #APX_F OPC_EVEX_NF OPC_EVEX_ND > + {nf} and $123, %r9 #APX_F OPC_EVEX_NF OPC_EVEX_EVEX > + {nf} and $123, %r9, %r31 #APX_F OPC_EVEX_NF OPC_EVEX_ND > + {nf} andb $123, 291(%r8, %rax, 4) #APX_F OPC_EVEX_NF OPC_EVEX_EVEX > + {nf} andb $123, 291(%r8, %rax, 4), %bl #APX_F OPC_EVEX_NF OPC_EVEX_ND > + {nf} andw $123, 291(%r8, %rax, 4) #APX_F OPC_EVEX_NF OPC_EVEX_EVEX > + {nf} andw $123, 291(%r8, %rax, 4), %dx #APX_F OPC_EVEX_NF OPC_EVEX_ND > + {nf} andl $123, 291(%r8, %rax, 4) #APX_F OPC_EVEX_NF OPC_EVEX_EVEX > + {nf} andl $123, 291(%r8, %rax, 4), %ecx #APX_F OPC_EVEX_NF OPC_EVEX_ND > + {nf} andq $123, 291(%r8, %rax, 4) #APX_F OPC_EVEX_NF OPC_EVEX_EVEX > + {nf} andq $123, 291(%r8, %rax, 4), %r9 #APX_F OPC_EVEX_NF OPC_EVEX_ND > + {nf} and %bl, %dl #APX_F OPC_EVEX_NF OPC_EVEX_EVEX > + {nf} and %bl, %dl, %r8b #APX_F OPC_EVEX_NF OPC_EVEX_ND > + {nf} and %bl, 291(%r8, %rax, 4) #APX_F OPC_EVEX_NF OPC_EVEX_EVEX > + {nf} and %bl, 291(%r8, %rax, 4), %dl #APX_F OPC_EVEX_NF OPC_EVEX_ND > + {nf} and %dx, %ax #APX_F OPC_EVEX_NF OPC_EVEX_EVEX > + {nf} and %dx, %ax, %r9w #APX_F OPC_EVEX_NF OPC_EVEX_ND > + {nf} and %dx, 291(%r8, %rax, 4) #APX_F OPC_EVEX_NF OPC_EVEX_EVEX > + {nf} and %dx, 291(%r8, %rax, 4), %ax #APX_F OPC_EVEX_NF OPC_EVEX_ND > + {nf} and %ecx, %edx #APX_F OPC_EVEX_NF OPC_EVEX_EVEX > + {nf} and %ecx, %edx, %r10d #APX_F OPC_EVEX_NF OPC_EVEX_ND > + {nf} and %ecx, 291(%r8, %rax, 4) #APX_F OPC_EVEX_NF OPC_EVEX_EVEX > + {nf} and %ecx, 291(%r8, %rax, 4), %edx #APX_F OPC_EVEX_NF OPC_EVEX_ND > + {nf} and %r9, %r31 #APX_F OPC_EVEX_NF OPC_EVEX_EVEX > + {nf} and %r9, %r31, %r11 #APX_F OPC_EVEX_NF OPC_EVEX_ND > + {nf} and %r9, 291(%r8, %rax, 4) #APX_F OPC_EVEX_NF OPC_EVEX_EVEX > + {nf} and %r9, 291(%r8, %rax, 4), %r31 #APX_F OPC_EVEX_NF OPC_EVEX_ND > + {nf} and 291(%r8, %rax, 4), %bl #APX_F OPC_EVEX_NF OPC_EVEX_EVEX > + {nf} and 291(%r8, %rax, 4), %bl, %dl #APX_F OPC_EVEX_NF OPC_EVEX_ND > + {nf} and 291(%r8, %rax, 4), %dx #APX_F OPC_EVEX_NF OPC_EVEX_EVEX > + {nf} and 291(%r8, %rax, 4), %dx, %ax #APX_F OPC_EVEX_NF OPC_EVEX_ND > + {nf} and 291(%r8, %rax, 4), %ecx #APX_F OPC_EVEX_NF OPC_EVEX_EVEX > + {nf} and 291(%r8, %rax, 4), %ecx, %edx #APX_F OPC_EVEX_NF OPC_EVEX_ND > + {nf} and 291(%r8, %rax, 4), %r9 #APX_F OPC_EVEX_NF OPC_EVEX_EVEX > + {nf} and 291(%r8, %rax, 4), %r9, %r31 #APX_F OPC_EVEX_NF OPC_EVEX_ND > + {nf} andn %ecx, %edx, %r10d #APX_F OPC_EVEX_NF OPC_EVEX_EVEX > + {nf} andn %r9, %r31, %r11 #APX_F OPC_EVEX_NF OPC_EVEX_EVEX > + {nf} andn 291(%r8, %rax, 4), %ecx, %edx #APX_F OPC_EVEX_NF OPC_EVEX_EVEX > + {nf} andn 291(%r8, %rax, 4), %r9, %r31 #APX_F OPC_EVEX_NF OPC_EVEX_EVEX > + {nf} bextr %ecx, %edx, %r10d #APX_F OPC_EVEX_NF OPC_EVEX_EVEX > + {nf} bextr %ecx, 291(%r8, %rax, 4), %edx #APX_F OPC_EVEX_NF OPC_EVEX_EVEX > + {nf} bextr %r9, %r31, %r11 #APX_F OPC_EVEX_NF OPC_EVEX_EVEX > + {nf} bextr %r9, 291(%r8, %rax, 4), %r31 #APX_F OPC_EVEX_NF OPC_EVEX_EVEX > + {nf} blsi %ecx, %edx #APX_F OPC_EVEX_NF OPC_EVEX_EVEX > + {nf} blsi %r9, %r31 #APX_F OPC_EVEX_NF OPC_EVEX_EVEX > + {nf} blsi 291(%r8, %rax, 4), %ecx #APX_F OPC_EVEX_NF OPC_EVEX_EVEX > + {nf} blsi 291(%r8, %rax, 4), %r9 #APX_F OPC_EVEX_NF OPC_EVEX_EVEX > + {nf} blsmsk %ecx, %edx #APX_F OPC_EVEX_NF OPC_EVEX_EVEX > + {nf} blsmsk %r9, %r31 #APX_F OPC_EVEX_NF OPC_EVEX_EVEX > + {nf} blsmsk 291(%r8, %rax, 4), %ecx #APX_F OPC_EVEX_NF OPC_EVEX_EVEX > + {nf} blsmsk 291(%r8, %rax, 4), %r9 #APX_F OPC_EVEX_NF OPC_EVEX_EVEX > + {nf} blsr %ecx, %edx #APX_F OPC_EVEX_NF OPC_EVEX_EVEX > + {nf} blsr %r9, %r31 #APX_F OPC_EVEX_NF OPC_EVEX_EVEX > + {nf} blsr 291(%r8, %rax, 4), %ecx #APX_F OPC_EVEX_NF OPC_EVEX_EVEX > + {nf} blsr 291(%r8, %rax, 4), %r9 #APX_F OPC_EVEX_NF OPC_EVEX_EVEX > + {nf} bzhi %ecx, %edx, %r10d #APX_F OPC_EVEX_NF OPC_EVEX_EVEX > + {nf} bzhi %ecx, 291(%r8, %rax, 4), %edx #APX_F OPC_EVEX_NF OPC_EVEX_EVEX > + {nf} bzhi %r9, %r31, %r11 #APX_F OPC_EVEX_NF OPC_EVEX_EVEX > + {nf} bzhi %r9, 291(%r8, %rax, 4), %r31 #APX_F OPC_EVEX_NF OPC_EVEX_EVEX > + {nf} dec %bl #APX_F OPC_EVEX_NF OPC_EVEX_EVEX > + {nf} dec %bl, %dl #APX_F OPC_EVEX_NF OPC_EVEX_ND > + {nf} dec %dx #APX_F OPC_EVEX_NF OPC_EVEX_EVEX > + {nf} dec %dx, %ax #APX_F OPC_EVEX_NF OPC_EVEX_ND > + {nf} dec %ecx #APX_F OPC_EVEX_NF OPC_EVEX_EVEX > + {nf} dec %ecx, %edx #APX_F OPC_EVEX_NF OPC_EVEX_ND > + {nf} dec %r9 #APX_F OPC_EVEX_NF OPC_EVEX_EVEX > + {nf} dec %r9, %r31 #APX_F OPC_EVEX_NF OPC_EVEX_ND > + {nf} decb 291(%r8, %rax, 4) #APX_F OPC_EVEX_NF OPC_EVEX_EVEX > + {nf} decb 291(%r8, %rax, 4), %bl #APX_F OPC_EVEX_NF OPC_EVEX_ND > + {nf} decw 291(%r8, %rax, 4) #APX_F OPC_EVEX_NF OPC_EVEX_EVEX > + {nf} decw 291(%r8, %rax, 4), %dx #APX_F OPC_EVEX_NF OPC_EVEX_ND > + {nf} decl 291(%r8, %rax, 4) #APX_F OPC_EVEX_NF OPC_EVEX_EVEX > + {nf} decl 291(%r8, %rax, 4), %ecx #APX_F OPC_EVEX_NF OPC_EVEX_ND > + {nf} decq 291(%r8, %rax, 4) #APX_F OPC_EVEX_NF OPC_EVEX_EVEX > + {nf} decq 291(%r8, %rax, 4), %r9 #APX_F OPC_EVEX_NF OPC_EVEX_ND > + {nf} div %bl #APX_F OPC_EVEX_NF OPC_EVEX_EVEX > + {nf} div %dx #APX_F OPC_EVEX_NF OPC_EVEX_EVEX > + {nf} div %ecx #APX_F OPC_EVEX_NF OPC_EVEX_EVEX > + {nf} div %r9 #APX_F OPC_EVEX_NF OPC_EVEX_EVEX > + {nf} divb 291(%r8, %rax, 4) #APX_F OPC_EVEX_NF OPC_EVEX_EVEX > + {nf} divw 291(%r8, %rax, 4) #APX_F OPC_EVEX_NF OPC_EVEX_EVEX > + {nf} divl 291(%r8, %rax, 4) #APX_F OPC_EVEX_NF OPC_EVEX_EVEX > + {nf} divq 291(%r8, %rax, 4) #APX_F OPC_EVEX_NF OPC_EVEX_EVEX > + {nf} idiv %bl #APX_F OPC_EVEX_NF OPC_EVEX_EVEX > + {nf} idiv %dx #APX_F OPC_EVEX_NF OPC_EVEX_EVEX > + {nf} idiv %ecx #APX_F OPC_EVEX_NF OPC_EVEX_EVEX > + {nf} idiv %r9 #APX_F OPC_EVEX_NF OPC_EVEX_EVEX > + {nf} idivb 291(%r8, %rax, 4) #APX_F OPC_EVEX_NF OPC_EVEX_EVEX > + {nf} idivw 291(%r8, %rax, 4) #APX_F OPC_EVEX_NF OPC_EVEX_EVEX > + {nf} idivl 291(%r8, %rax, 4) #APX_F OPC_EVEX_NF OPC_EVEX_EVEX > + {nf} idivq 291(%r8, %rax, 4) #APX_F OPC_EVEX_NF OPC_EVEX_EVEX > + {nf} imul %bl #APX_F OPC_EVEX_NF OPC_EVEX_EVEX > + {nf} imul %dx #APX_F OPC_EVEX_NF OPC_EVEX_EVEX > + {nf} imul %dx, %ax #APX_F OPC_EVEX_NF OPC_EVEX_EVEX > + {nf} imul %dx, %ax, %r9w #APX_F OPC_EVEX_NF OPC_EVEX_ND > + {nf} imul %ecx #APX_F OPC_EVEX_NF OPC_EVEX_EVEX > + {nf} imul %ecx, %edx #APX_F OPC_EVEX_NF OPC_EVEX_EVEX > + {nf} imul %ecx, %edx, %r10d #APX_F OPC_EVEX_NF OPC_EVEX_ND > + {nf} imul %r9 #APX_F OPC_EVEX_NF OPC_EVEX_EVEX > + {nf} imul %r9, %r31 #APX_F OPC_EVEX_NF OPC_EVEX_EVEX > + {nf} imul %r9, %r31, %r11 #APX_F OPC_EVEX_NF OPC_EVEX_ND > + {nf} imulb 291(%r8, %rax, 4) #APX_F OPC_EVEX_NF OPC_EVEX_EVEX > + {nf} imulw 291(%r8, %rax, 4) #APX_F OPC_EVEX_NF OPC_EVEX_EVEX > + {nf} imul 291(%r8, %rax, 4), %dx #APX_F OPC_EVEX_NF OPC_EVEX_EVEX > + {nf} imul 291(%r8, %rax, 4), %dx, %ax #APX_F OPC_EVEX_NF OPC_EVEX_ND > + {nf} imull 291(%r8, %rax, 4) #APX_F OPC_EVEX_NF OPC_EVEX_EVEX > + {nf} imul 291(%r8, %rax, 4), %ecx #APX_F OPC_EVEX_NF OPC_EVEX_EVEX > + {nf} imul 291(%r8, %rax, 4), %ecx, %edx #APX_F OPC_EVEX_NF OPC_EVEX_ND > + {nf} imulq 291(%r8, %rax, 4) #APX_F OPC_EVEX_NF OPC_EVEX_EVEX > + {nf} imul 291(%r8, %rax, 4), %r9 #APX_F OPC_EVEX_NF OPC_EVEX_EVEX > + {nf} imul 291(%r8, %rax, 4), %r9, %r31 #APX_F OPC_EVEX_NF OPC_EVEX_ND No IMUL by immediate? > --- a/gas/testsuite/gas/i386/x86-64.exp > +++ b/gas/testsuite/gas/i386/x86-64.exp > @@ -372,6 +372,8 @@ run_dump_test "x86-64-apx-evex-promoted" > run_dump_test "x86-64-apx-evex-promoted-intel" > run_dump_test "x86-64-apx-evex-egpr" > run_dump_test "x86-64-apx-ndd" > +run_dump_test "x86-64-apx-nf" > +run_dump_test "x86-64-apx-nf-intel" > run_dump_test "x86-64-avx512f-rcigrz-intel" > run_dump_test "x86-64-avx512f-rcigrz" > run_dump_test "x86-64-clwb" No test checking that {nf} isn't accepted (assembler) / EVEX.nf set is rejected (disassembler) on insns not permitting its use, at least for a few examples? > @@ -1003,7 +1007,7 @@ typedef struct insn_template > AMD 3DNow! instructions. > If this template has no extension opcode (the usual case) use None > Instructions */ > - signed int extension_opcode:0xA; > + signed int extension_opcode:0xB; For this and ... > @@ -1017,7 +1021,8 @@ typedef struct insn_template > #define Prefix_EVEX 7 /* {evex} */ > #define Prefix_REX 8 /* {rex} */ > #define Prefix_REX2 9 /* {rex2} */ > -#define Prefix_NoOptimize 0xA /* {nooptimize} */ > +#define Prefix_NF 0xA /* {nf} */ > +#define Prefix_NoOptimize 0xB /* {nooptimize} */ ... this, see comments on an earlier patch. > --- a/opcodes/i386-opc.tbl > +++ b/opcodes/i386-opc.tbl > @@ -286,25 +286,41 @@ add, 0x0, 0, D|W|CheckOperandSize|Modrm|No_sSuf|HLEPrefixLock, { Reg8|Reg16|Reg3 > add, 0x83/0, 0, Modrm|No_bSuf|No_sSuf|HLEPrefixLock, { Imm8S, Reg16|Reg32|Reg64|Word|Dword|Qword|Unspecified|BaseIndex } > add, 0x4, 0, W|No_sSuf, { Imm8|Imm16|Imm32|Imm32S, Acc|Byte|Word|Dword|Qword } > add, 0x80/0, 0, W|Modrm|No_sSuf|HLEPrefixLock, { Imm8|Imm16|Imm32|Imm32S, Reg8|Reg16|Reg32|Reg64|Byte|Word|Dword|Qword|Unspecified|BaseIndex } > -add, 0x0, APX_F|x64, D|W|CheckOperandSize|Modrm|No_sSuf|VexVVVV|EVex128|EVexMap4, { Reg8|Reg16|Reg32|Reg64, Reg8|Reg16|Reg32|Reg64|Byte|Word|Dword|Qword|Unspecified|BaseIndex, Reg8|Reg16|Reg32|Reg64 } > -add, 0x83/0, APX_F|x64, Modrm|CheckOperandSize|No_bSuf|No_sSuf|VexVVVV|EVex128|EVexMap4, { Imm8S, Reg16|Reg32|Reg64|Word|Dword|Qword|Unspecified|BaseIndex, Reg16|Reg32|Reg64 } > -add, 0x80/0, APX_F|x64, W|Modrm|CheckOperandSize|No_sSuf|VexVVVV|EVex128|EVexMap4, { Imm8|Imm16|Imm32|Imm32S, Reg8|Reg16|Reg32|Reg64|Byte|Word|Dword|Qword|Unspecified|BaseIndex, Reg8|Reg16|Reg32|Reg64} > + > +add, 0x0, APX_F|x64, D|W|CheckOperandSize|Modrm|No_sSuf|EVex128|EVexMap4|NF, { Reg8|Reg16|Reg32|Reg64, Reg8|Reg16|Reg32|Reg64|Byte|Word|Dword|Qword|Unspecified|BaseIndex } > +add, 0x83/0, APX_F|x64, Modrm|No_bSuf|No_sSuf|EVex128|EVexMap4|NF, { Imm8S, Reg16|Reg32|Reg64|Word|Dword|Qword|Unspecified|BaseIndex } > +add, 0x80/0, APX_F|x64, W|Modrm|No_sSuf|EVex128|EVexMap4|NF, { Imm8|Imm16|Imm32|Imm32S, Reg8|Reg16|Reg32|Reg64|Byte|Word|Dword|Qword|Unspecified|BaseIndex } Huge patches like this are already hard enough to review. Can you please try to make sure you introduce new templates right in their final shape (within the specific series of course), rather than touching them again a 2nd time? Even without fully supporting NF, introducing the attribute (as a dummy or without any consumer) ought to be possible earlier on. As per earlier comments many of these templates need cleaning up anyway, so I won't look at the other in any detail here, and instead wait for a v2. Jan